From 235d6d57a031071aeb435df7c6c2caaac874de42 Mon Sep 17 00:00:00 2001 From: "Janghyun(JK)Kim" Date: Wed, 19 Mar 2025 11:13:29 -0600 Subject: [PATCH 1/5] adding subclass for 2019 --- .../ashrae_90_1_2019.PlantLoop.rb | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb diff --git a/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb b/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb new file mode 100644 index 0000000000..bad981421b --- /dev/null +++ b/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb @@ -0,0 +1,41 @@ +class ASHRAE9012019 < ASHRAE901 + # @!group PlantLoop + + # Determine the performance rating method specified + # design condenser water temperature, approach, and range + # + # @param plant_loop [OpenStudio::Model::PlantLoop] the condenser water loop + # @param design_oat_wb_c [Double] the design OA wetbulb temperature (C) + # @return [Array] [leaving_cw_t_c, approach_k, range_k] + def plant_loop_prm_baseline_condenser_water_temperatures(plant_loop, design_oat_wb_c) + design_oat_wb_f = OpenStudio.convert(design_oat_wb_c, 'C', 'F').get + + # G3.1.3.11 - CW supply temp shall be evaluated at 0.4% evaporative design OATwb + # per the formulat approach_F = 25.72 - (0.24 * OATwb_F) + # 55F <= OATwb <= 90F + # Design range = 10F. + range_r = 10 + + # Limit the OATwb + if design_oat_wb_f < 55 + design_oat_wb_f = 55 + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 55F will be used for sizing the cooling towers because the actual design value is below the limit in G3.1.3.11.") + elsif design_oat_wb_f > 90 + design_oat_wb_f = 90 + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 90F will be used for sizing the cooling towers because the actual design value is above the limit in G3.1.3.11.") + end + + # Calculate the approach + approach_r = 25.72 - (0.24 * design_oat_wb_f) + + # Calculate the leaving CW temp + leaving_cw_t_f = design_oat_wb_f + approach_r + + # Convert to SI units + leaving_cw_t_c = OpenStudio.convert(leaving_cw_t_f, 'F', 'C').get + approach_k = OpenStudio.convert(approach_r, 'R', 'K').get + range_k = OpenStudio.convert(range_r, 'R', 'K').get + + return [leaving_cw_t_c, approach_k, range_k] + end +end From 765f00443d48a8135fe32d19e5b3380e2bcae0db Mon Sep 17 00:00:00 2001 From: "Janghyun(JK)Kim" Date: Wed, 19 Mar 2025 11:14:40 -0600 Subject: [PATCH 2/5] adding subclass for 2016 --- .../ashrae_90_1_2016.PlantLoop.rb | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb diff --git a/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb b/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb new file mode 100644 index 0000000000..541b49d20c --- /dev/null +++ b/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb @@ -0,0 +1,41 @@ +class ASHRAE9012016 < ASHRAE901 + # @!group PlantLoop + + # Determine the performance rating method specified + # design condenser water temperature, approach, and range + # + # @param plant_loop [OpenStudio::Model::PlantLoop] the condenser water loop + # @param design_oat_wb_c [Double] the design OA wetbulb temperature (C) + # @return [Array] [leaving_cw_t_c, approach_k, range_k] + def plant_loop_prm_baseline_condenser_water_temperatures(plant_loop, design_oat_wb_c) + design_oat_wb_f = OpenStudio.convert(design_oat_wb_c, 'C', 'F').get + + # G3.1.3.11 - CW supply temp shall be evaluated at 0.4% evaporative design OATwb + # per the formulat approach_F = 25.72 - (0.24 * OATwb_F) + # 55F <= OATwb <= 90F + # Design range = 10F. + range_r = 10 + + # Limit the OATwb + if design_oat_wb_f < 55 + design_oat_wb_f = 55 + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 55F will be used for sizing the cooling towers because the actual design value is below the limit in G3.1.3.11.") + elsif design_oat_wb_f > 90 + design_oat_wb_f = 90 + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 90F will be used for sizing the cooling towers because the actual design value is above the limit in G3.1.3.11.") + end + + # Calculate the approach + approach_r = 25.72 - (0.24 * design_oat_wb_f) + + # Calculate the leaving CW temp + leaving_cw_t_f = design_oat_wb_f + approach_r + + # Convert to SI units + leaving_cw_t_c = OpenStudio.convert(leaving_cw_t_f, 'F', 'C').get + approach_k = OpenStudio.convert(approach_r, 'R', 'K').get + range_k = OpenStudio.convert(range_r, 'R', 'K').get + + return [leaving_cw_t_c, approach_k, range_k] + end +end From d4a1a9c275123c2249be3748ab8af665f6fd12dc Mon Sep 17 00:00:00 2001 From: JanghyunJK Date: Tue, 18 Nov 2025 09:33:17 -0700 Subject: [PATCH 3/5] adding plant_loop_prm_baseline_condenser_water_temperatures to ASHRAE901PRM --- .../ashrae_90_1_prm.PlantLoop.rb | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb b/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb index d2a7620ee9..38828b3879 100644 --- a/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +++ b/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb @@ -670,4 +670,42 @@ def plant_loop_set_chw_pri_sec_configuration(model) pri_sec_config = 'heat_exchanger' return pri_sec_config end + + # Determine the performance rating method specified + # design condenser water temperature, approach, and range + # + # @param plant_loop [OpenStudio::Model::PlantLoop] the condenser water loop + # @param design_oat_wb_c [Double] the design OA wetbulb temperature (C) + # @return [Array] [leaving_cw_t_c, approach_k, range_k] + def plant_loop_prm_baseline_condenser_water_temperatures(plant_loop, design_oat_wb_c) + design_oat_wb_f = OpenStudio.convert(design_oat_wb_c, 'C', 'F').get + + # G3.1.3.11 - CW supply temp shall be evaluated at 0.4% evaporative design OATwb + # per the formulat approach_F = 25.72 - (0.24 * OATwb_F) + # 55F <= OATwb <= 90F + # Design range = 10F. + range_r = 10 + + # Limit the OATwb + if design_oat_wb_f < 55 + design_oat_wb_f = 55 + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 55F will be used for sizing the cooling towers because the actual design value is below the limit in G3.1.3.11.") + elsif design_oat_wb_f > 90 + design_oat_wb_f = 90 + OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 90F will be used for sizing the cooling towers because the actual design value is above the limit in G3.1.3.11.") + end + + # Calculate the approach + approach_r = 25.72 - (0.24 * design_oat_wb_f) + + # Calculate the leaving CW temp + leaving_cw_t_f = design_oat_wb_f + approach_r + + # Convert to SI units + leaving_cw_t_c = OpenStudio.convert(leaving_cw_t_f, 'F', 'C').get + approach_k = OpenStudio.convert(approach_r, 'R', 'K').get + range_k = OpenStudio.convert(range_r, 'R', 'K').get + + return [leaving_cw_t_c, approach_k, range_k] + end end From 52d680cf2d152fdc95358f9e4d19dd8f6aaf8728 Mon Sep 17 00:00:00 2001 From: JanghyunJK Date: Tue, 18 Nov 2025 09:33:38 -0700 Subject: [PATCH 4/5] Revert "adding subclass for 2016" This reverts commit 765f00443d48a8135fe32d19e5b3380e2bcae0db. --- .../ashrae_90_1_2016.PlantLoop.rb | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb diff --git a/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb b/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb deleted file mode 100644 index 541b49d20c..0000000000 --- a/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PlantLoop.rb +++ /dev/null @@ -1,41 +0,0 @@ -class ASHRAE9012016 < ASHRAE901 - # @!group PlantLoop - - # Determine the performance rating method specified - # design condenser water temperature, approach, and range - # - # @param plant_loop [OpenStudio::Model::PlantLoop] the condenser water loop - # @param design_oat_wb_c [Double] the design OA wetbulb temperature (C) - # @return [Array] [leaving_cw_t_c, approach_k, range_k] - def plant_loop_prm_baseline_condenser_water_temperatures(plant_loop, design_oat_wb_c) - design_oat_wb_f = OpenStudio.convert(design_oat_wb_c, 'C', 'F').get - - # G3.1.3.11 - CW supply temp shall be evaluated at 0.4% evaporative design OATwb - # per the formulat approach_F = 25.72 - (0.24 * OATwb_F) - # 55F <= OATwb <= 90F - # Design range = 10F. - range_r = 10 - - # Limit the OATwb - if design_oat_wb_f < 55 - design_oat_wb_f = 55 - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 55F will be used for sizing the cooling towers because the actual design value is below the limit in G3.1.3.11.") - elsif design_oat_wb_f > 90 - design_oat_wb_f = 90 - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 90F will be used for sizing the cooling towers because the actual design value is above the limit in G3.1.3.11.") - end - - # Calculate the approach - approach_r = 25.72 - (0.24 * design_oat_wb_f) - - # Calculate the leaving CW temp - leaving_cw_t_f = design_oat_wb_f + approach_r - - # Convert to SI units - leaving_cw_t_c = OpenStudio.convert(leaving_cw_t_f, 'F', 'C').get - approach_k = OpenStudio.convert(approach_r, 'R', 'K').get - range_k = OpenStudio.convert(range_r, 'R', 'K').get - - return [leaving_cw_t_c, approach_k, range_k] - end -end From 810204a8677f4336d3067f1cfff931d161a281d8 Mon Sep 17 00:00:00 2001 From: JanghyunJK Date: Tue, 18 Nov 2025 09:33:42 -0700 Subject: [PATCH 5/5] Revert "adding subclass for 2019" This reverts commit 235d6d57a031071aeb435df7c6c2caaac874de42. --- .../ashrae_90_1_2019.PlantLoop.rb | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb diff --git a/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb b/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb deleted file mode 100644 index bad981421b..0000000000 --- a/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PlantLoop.rb +++ /dev/null @@ -1,41 +0,0 @@ -class ASHRAE9012019 < ASHRAE901 - # @!group PlantLoop - - # Determine the performance rating method specified - # design condenser water temperature, approach, and range - # - # @param plant_loop [OpenStudio::Model::PlantLoop] the condenser water loop - # @param design_oat_wb_c [Double] the design OA wetbulb temperature (C) - # @return [Array] [leaving_cw_t_c, approach_k, range_k] - def plant_loop_prm_baseline_condenser_water_temperatures(plant_loop, design_oat_wb_c) - design_oat_wb_f = OpenStudio.convert(design_oat_wb_c, 'C', 'F').get - - # G3.1.3.11 - CW supply temp shall be evaluated at 0.4% evaporative design OATwb - # per the formulat approach_F = 25.72 - (0.24 * OATwb_F) - # 55F <= OATwb <= 90F - # Design range = 10F. - range_r = 10 - - # Limit the OATwb - if design_oat_wb_f < 55 - design_oat_wb_f = 55 - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 55F will be used for sizing the cooling towers because the actual design value is below the limit in G3.1.3.11.") - elsif design_oat_wb_f > 90 - design_oat_wb_f = 90 - OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "For #{plant_loop.name}, a design OATwb of 90F will be used for sizing the cooling towers because the actual design value is above the limit in G3.1.3.11.") - end - - # Calculate the approach - approach_r = 25.72 - (0.24 * design_oat_wb_f) - - # Calculate the leaving CW temp - leaving_cw_t_f = design_oat_wb_f + approach_r - - # Convert to SI units - leaving_cw_t_c = OpenStudio.convert(leaving_cw_t_f, 'F', 'C').get - approach_k = OpenStudio.convert(approach_r, 'R', 'K').get - range_k = OpenStudio.convert(range_r, 'R', 'K').get - - return [leaving_cw_t_c, approach_k, range_k] - end -end