Skip to content

Commit

Permalink
Merge pull request #47 from BuildingPerformanceSimulation/fix/add_hea…
Browse files Browse the repository at this point in the history
…t_recovery_chiller

add warning message for air-cooled chillers
  • Loading branch information
mdahlhausen authored Oct 4, 2024
2 parents 11d3572 + 8d3be38 commit 6e4e351
Show file tree
Hide file tree
Showing 10 changed files with 204 additions and 155,123 deletions.
20 changes: 10 additions & 10 deletions lib/measures/add_heat_recovery_chiller/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -334,11 +334,16 @@ def run(model, runner, user_arguments)
else
existing_chiller = model.getChillerElectricEIRByName(existing_chiller_name)
unless existing_chiller.is_initialized
runner.registerError("Chiller named #{chiller} not found in the model. It may have been removed by another measure.")
runner.registerError("Chiller named #{existing_chiller_name} not found in the model. It may have been removed by another measure.")
return false
end
heat_recovery_chiller = existing_chiller.get
end

if heat_recovery_chiller.condenserType == 'AirCooled'
runner.registerError("Chiller named #{heat_recovery_chiller.name} is an air-cooled chiller. This measure does not support air-cooled chillers. The method works by altering the fraction going to a heat recovery loop versus a condenser loop. With no condenser loop, it won't have the node to have heat recovery. Make your air-cooled chiller a water-cooled chiller, then create a dummy condensor loop. You can set the heat recovery fraction to 1 so the condenser loop never operates.")
return false
end
else
runner.registerError("Invalid chiller_choice argument #{chiller_choice}.")
return false
Expand Down Expand Up @@ -404,15 +409,10 @@ def run(model, runner, user_arguments)
sizing_plant.setDesignLoopExitTemperature(heat_recovery_loop_temperature_c)
sizing_plant.setLoopDesignTemperatureDifference(OpenStudio.convert(20.0, 'R', 'K').get)
hr_temp_sch = OpenstudioStandards::Schedules.create_constant_schedule_ruleset(model,
heat_recovery_loop_temperature_c,
name: "Heat Recovery Loop #{heat_recovery_loop_temperature_f}F",
schedule_type_limit: 'Temperature')
if chiller_choice == "Add New Chiller"
heat_recovery_loop.addDemandBranchForComponent(heat_recovery_chiller.to_HVACComponent.get)
puts heat_recovery_chiller
else
heat_recovery_loop.addDemandBranchForComponent(heat_recovery_chiller.to_HVACComponent.get)
end
heat_recovery_loop_temperature_c,
name: "Heat Recovery Loop #{heat_recovery_loop_temperature_f}F",
schedule_type_limit: 'Temperature')
heat_recovery_loop.addDemandBranchForComponent(heat_recovery_chiller.to_HVACComponent.get)

if chiller_choice == 'Add New Chiller'
# something goes here. Not sure what. Does this work if the heat recovery loop is a condenser loop (don't use chiller heat recovery fields?). Or do we need a dummy condenser loop?
Expand Down
46 changes: 5 additions & 41 deletions lib/measures/add_heat_recovery_chiller/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>add_heat_recovery_chiller</name>
<uid>968b3e43-1b47-4f29-b0af-f1c16b3e68c2</uid>
<version_id>2ddbffd1-5149-445a-83e3-3d9f54f112f5</version_id>
<version_modified>2024-10-02T19:43:08Z</version_modified>
<version_id>58997653-d398-4180-b35d-9e3796cb9906</version_id>
<version_modified>2024-10-04T19:54:54Z</version_modified>
<xml_checksum>88BE00C7</xml_checksum>
<class_name>AddHeatRecoveryChiller</class_name>
<display_name>Heat Recovery Chiller</display_name>
Expand Down Expand Up @@ -266,7 +266,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>FDA94B9A</checksum>
<checksum>7C514DEC</checksum>
</file>
<file>
<filename>95.epw</filename>
Expand All @@ -278,49 +278,13 @@
<filename>95.osm</filename>
<filetype>osm</filetype>
<usage_type>test</usage_type>
<checksum>93F8CB08</checksum>
<checksum>452A0575</checksum>
</file>
<file>
<filename>AddHeatRecoveryChiller_Test.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>D11BADE1</checksum>
</file>
<file>
<filename>LargeOffice_VAV_chiller_boiler.epw</filename>
<filetype>epw</filetype>
<usage_type>test</usage_type>
<checksum>A0EA4A35</checksum>
</file>
<file>
<filename>LargeOffice_VAV_chiller_boiler.osm</filename>
<filetype>osm</filetype>
<usage_type>test</usage_type>
<checksum>D3164F50</checksum>
</file>
<file>
<filename>VAV_chiller_boiler_4A.epw</filename>
<filetype>epw</filetype>
<usage_type>test</usage_type>
<checksum>93A87B0C</checksum>
</file>
<file>
<filename>VAV_chiller_boiler_4A.osm</filename>
<filetype>osm</filetype>
<usage_type>test</usage_type>
<checksum>566DED4B</checksum>
</file>
<file>
<filename>VAV_with_reheat_3B.epw</filename>
<filetype>epw</filetype>
<usage_type>test</usage_type>
<checksum>CD6E640B</checksum>
</file>
<file>
<filename>VAV_with_reheat_3B.osm</filename>
<filetype>osm</filetype>
<usage_type>test</usage_type>
<checksum>37D5AEB8</checksum>
<checksum>C217698D</checksum>
</file>
</files>
</measure>
169 changes: 139 additions & 30 deletions lib/measures/add_heat_recovery_chiller/tests/95.osm
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

OS:Version,
{5a8e6c44-dfc3-474d-a332-dd4a0e1ff3e9}, !- Handle
3.5.1; !- Version Identifier
{0204a816-e1d9-4526-957e-b3dbd6453159}, !- Handle
3.7.0; !- Version Identifier

OS:Facility,
{ef1988e3-2b74-4e17-bbab-012bf98ae07f}; !- Handle
Expand Down Expand Up @@ -23576,7 +23576,8 @@ OS:Boiler:HotWater,
{5a4b0077-bca9-4a31-b136-d9ee719f707f}, !- Boiler Water Outlet Node Name
95.0000000000001, !- Water Outlet Upper Temperature Limit {C}
LeavingSetpointModulated, !- Boiler Flow Mode
0, !- Parasitic Electric Load {W}
0, !- On Cycle Parasitic Electric Load {W}
0, !- Off Cycle Parasitic Fuel Load {W}
1, !- Sizing Factor
General; !- End-Use Subcategory

Expand Down Expand Up @@ -24308,14 +24309,16 @@ OS:Connector:Mixer,
Connector Mixer 7, !- Name
{8e732348-5f0a-44cd-8acc-57af88525e51}, !- Outlet Branch Name
{94b0480b-5f21-4b5f-b622-946bde607e55}, !- Inlet Branch Name 1
{3a60c36b-969a-4a43-bed0-a122a0de00bb}; !- Inlet Branch Name 2
{3a60c36b-969a-4a43-bed0-a122a0de00bb}, !- Inlet Branch Name 2
{750663bb-08b9-46f4-a05e-fb3b5ddc0523}; !- Inlet Branch Name 3

OS:Connector:Splitter,
{c272a738-e9dd-4a94-983a-9cbc997a560b}, !- Handle
Connector Splitter 7, !- Name
{3737c850-6271-43b5-94af-3afc6ca06d10}, !- Inlet Branch Name
{add8ee45-5197-4380-8e64-c5466e52a555}, !- Outlet Branch Name 1
{9bcad065-6432-42d2-a8d6-a3a01b9b74a3}; !- Outlet Branch Name 2
{9bcad065-6432-42d2-a8d6-a3a01b9b74a3}, !- Outlet Branch Name 2
{b7df166d-2d3d-4533-a141-bac94be45c18}; !- Outlet Branch Name 3

OS:Connection,
{5349099a-c892-411c-8741-fe973c11cf70}, !- Handle
Expand Down Expand Up @@ -24546,8 +24549,8 @@ OS:Chiller:Electric:EIR,
3.79805615550756, !- Reference COP {W/W}
6.66666666666669, !- Reference Leaving Chilled Water Temperature {C}
35.0000000000001, !- Reference Entering Condenser Fluid Temperature {C}
0.005533, !- Reference Chilled Water Flow Rate {m3/s}
0.00708998, !- Reference Condenser Fluid Flow Rate {m3/s}
0.0027665, !- Reference Chilled Water Flow Rate {m3/s}
0.00354499, !- Reference Condenser Fluid Flow Rate {m3/s}
{35a47837-6879-4c55-bc3d-563800e858d0}, !- Cooling Capacity Function of Temperature Curve Name
{18cf81c9-f433-4de0-94bb-7babab45dbe9}, !- Electric Input to Cooling Output Ratio Function of Temperature Curve Name
{131fcfa2-263c-4ae3-8307-908df37db366}, !- Electric Input to Cooling Output Ratio Function of Part Load Ratio Curve Name
Expand Down Expand Up @@ -25248,7 +25251,8 @@ OS:Controller:OutdoorAir,
, !- Humidistat Control Zone Name
, !- High Humidity Outdoor Air Flow Ratio
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
InterlockedWithMechanicalCooling; !- Economizer Operation Staging

OS:Controller:MechanicalVentilation,
{766676ba-5b6b-42fe-a35c-5edf592bebcf}, !- Handle
Expand Down Expand Up @@ -27125,7 +27129,8 @@ OS:Controller:OutdoorAir,
, !- Humidistat Control Zone Name
, !- High Humidity Outdoor Air Flow Ratio
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
InterlockedWithMechanicalCooling; !- Economizer Operation Staging

OS:Controller:MechanicalVentilation,
{79f01af3-21b6-4431-ad97-904dc3a98049}, !- Handle
Expand Down Expand Up @@ -29002,7 +29007,8 @@ OS:Controller:OutdoorAir,
, !- Humidistat Control Zone Name
, !- High Humidity Outdoor Air Flow Ratio
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
InterlockedWithMechanicalCooling; !- Economizer Operation Staging

OS:Controller:MechanicalVentilation,
{fef63fa4-93bf-490c-aac1-43f4c4ea8802}, !- Handle
Expand Down Expand Up @@ -30879,7 +30885,8 @@ OS:Controller:OutdoorAir,
, !- Humidistat Control Zone Name
, !- High Humidity Outdoor Air Flow Ratio
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
InterlockedWithMechanicalCooling; !- Economizer Operation Staging

OS:Controller:MechanicalVentilation,
{b1791ff9-87b0-4a5a-bebf-436e7df52929}, !- Handle
Expand Down Expand Up @@ -32756,7 +32763,8 @@ OS:Controller:OutdoorAir,
, !- Humidistat Control Zone Name
, !- High Humidity Outdoor Air Flow Ratio
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
InterlockedWithMechanicalCooling; !- Economizer Operation Staging

OS:Controller:MechanicalVentilation,
{09635742-4ec9-4bf2-98b2-a00c635519c2}, !- Handle
Expand Down Expand Up @@ -34633,7 +34641,8 @@ OS:Controller:OutdoorAir,
, !- Humidistat Control Zone Name
, !- High Humidity Outdoor Air Flow Ratio
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
InterlockedWithMechanicalCooling; !- Economizer Operation Staging

OS:Controller:MechanicalVentilation,
{fe90c32c-bbd5-4f8c-bb4f-9782b1b2afd1}, !- Handle
Expand Down Expand Up @@ -42340,22 +42349,6 @@ OS:StandardsInformation:Construction,
{bca860bf-ce8b-4374-ad73-b097b257f053}, !- Handle
{25e3c4d5-f9c9-4ef5-89b4-38db5895295a}; !- Construction Name

OS:WeatherFile,
{90b2aab1-7a9a-4f89-8843-04ac9a0e14fd}, !- Handle
Yeager, !- City
WV, !- State Province Region
USA, !- Country
customized weather file, !- Data Source
724140, !- WMO Number
38.38, !- Latitude {deg}
-81.59, !- Longitude {deg}
-5, !- Time Zone {hr}
299, !- Elevation {m}
95.epw, !- Url
DEDEF016, !- Checksum
2018, !- Start Date Actual Year
Monday; !- Start Day of Week

OS:RadianceParameters,
{cf6aa5f7-c964-45f5-a8f2-e04ff0afa798}, !- Handle
1, !- Accumulated Rays per Record
Expand Down Expand Up @@ -42390,7 +42383,9 @@ OS:SurfaceConvectionAlgorithm:Outside,

OS:ZoneAirHeatBalanceAlgorithm,
{7e208a71-0c81-435b-b4af-6543e178a7ed}, !- Handle
ThirdOrderBackwardDifference; !- Algorithm
ThirdOrderBackwardDifference, !- Algorithm
, !- Do Space Heat Balance for Sizing
; !- Do Space Heat Balance for Simulation

OS:ZoneAirContaminantBalance,
{dc7d5d53-8f37-477f-91c4-8119026b4e2d}; !- Handle
Expand All @@ -42415,3 +42410,117 @@ OS:Output:Table:SummaryReports,
OS:Output:Diagnostics,
{c16701ff-9155-436f-8fd7-9968c079c4a8}; !- Handle

OS:Chiller:Electric:EIR,
{63817e83-de39-41e3-ab61-8ac53e3cd59d}, !- Handle
Chiller - Air Cooled, !- Name
Autosize, !- Reference Capacity {W}
3, !- Reference COP {W/W}
, !- Reference Leaving Chilled Water Temperature {C}
, !- Reference Entering Condenser Fluid Temperature {C}
0.0027665, !- Reference Chilled Water Flow Rate {m3/s}
, !- Reference Condenser Fluid Flow Rate {m3/s}
{cbb35b1d-c9b0-4058-886a-9878d9d061ad}, !- Cooling Capacity Function of Temperature Curve Name
{f293860a-b759-49b3-b9a8-3eb82b6baee8}, !- Electric Input to Cooling Output Ratio Function of Temperature Curve Name
{88168e2a-c37b-4781-92fa-32d3a59ce68b}, !- Electric Input to Cooling Output Ratio Function of Part Load Ratio Curve Name
, !- Minimum Part Load Ratio
, !- Maximum Part Load Ratio
, !- Optimum Part Load Ratio
, !- Minimum Unloading Ratio
{812da95c-3397-4eaa-b206-ae3f5d09183d}, !- Chilled Water Inlet Node Name
{63ff7933-6b09-489c-bd4a-15fd5f4a1e7f}, !- Chilled Water Outlet Node Name
, !- Condenser Inlet Node Name
, !- Condenser Outlet Node Name
AirCooled, !- Condenser Type
, !- Condenser Fan Power Ratio {W/W}
, !- Fraction of Compressor Electric Consumption Rejected by Condenser
, !- Leaving Chilled Water Lower Temperature Limit {C}
ConstantFlow, !- Chiller Flow Mode
Autosize, !- Design Heat Recovery Water Flow Rate {m3/s}
, !- Heat Recovery Inlet Node Name
, !- Heat Recovery Outlet Node Name
1, !- Sizing Factor
0, !- Basin Heater Capacity {W/K}
10, !- Basin Heater Setpoint Temperature {C}
, !- Basin Heater Operating Schedule Name
1, !- Condenser Heat Recovery Relative Capacity Fraction
, !- Heat Recovery Inlet High Temperature Limit Schedule Name
, !- Heat Recovery Leaving Temperature Setpoint Node Name
General; !- End-Use Subcategory

OS:Curve:Biquadratic,
{cbb35b1d-c9b0-4058-886a-9878d9d061ad}, ! Handle
OS:Curve:Biquadratic 3, ! Name
1.0433811, ! Coefficient1 Constant
0.040707699999999999, ! Coefficient2 x
0.0004506, ! Coefficient3 x**2
-0.0041514000000000004, ! Coefficient4 y
-8.8599999999999999e-05, ! Coefficient5 y**2
-0.00034670000000000002, ! Coefficient6 x*y
0, ! Minimum Value of x {BasedOnField A2}
20, ! Maximum Value of x {BasedOnField A2}
0, ! Minimum Value of y {BasedOnField A3}
50; ! Maximum Value of y {BasedOnField A3}

OS:Curve:Biquadratic,
{f293860a-b759-49b3-b9a8-3eb82b6baee8}, ! Handle
OS:Curve:Biquadratic 4, ! Name
0.59619149999999999, ! Coefficient1 Constant
-0.0099495999999999994, ! Coefficient2 x
0.00078879999999999998, ! Coefficient3 x**2
0.0004506, ! Coefficient4 y
0.00048749999999999998, ! Coefficient5 y**2
-0.00076230000000000004, ! Coefficient6 x*y
0, ! Minimum Value of x {BasedOnField A2}
20, ! Maximum Value of x {BasedOnField A2}
0, ! Minimum Value of y {BasedOnField A3}
50; ! Maximum Value of y {BasedOnField A3}

OS:Curve:Quadratic,
{88168e2a-c37b-4781-92fa-32d3a59ce68b}, ! Handle
OS:Curve:Quadratic 4, ! Name
1.6853121, ! Coefficient1 Constant
-0.99934429999999996, ! Coefficient2 x
0.31403219999999998, ! Coefficient3 x**2
0, ! Minimum Value of x {BasedOnField A2}
1.2; ! Maximum Value of x {BasedOnField A2}

OS:Node,
{a2fd1e63-358f-46ae-a71b-d9a7ec6edf00}, !- Handle
Node 1, !- Name
{b7df166d-2d3d-4533-a141-bac94be45c18}, !- Inlet Port
{812da95c-3397-4eaa-b206-ae3f5d09183d}; !- Outlet Port

OS:Connection,
{b7df166d-2d3d-4533-a141-bac94be45c18}, !- Handle
{c272a738-e9dd-4a94-983a-9cbc997a560b}, !- Source Object
5, !- Outlet Port
{a2fd1e63-358f-46ae-a71b-d9a7ec6edf00}, !- Target Object
2; !- Inlet Port

OS:Node,
{6b4e88a4-5fdd-4163-83b4-009c471a85ef}, !- Handle
Node 2, !- Name
{63ff7933-6b09-489c-bd4a-15fd5f4a1e7f}, !- Inlet Port
{750663bb-08b9-46f4-a05e-fb3b5ddc0523}; !- Outlet Port

OS:Connection,
{812da95c-3397-4eaa-b206-ae3f5d09183d}, !- Handle
{a2fd1e63-358f-46ae-a71b-d9a7ec6edf00}, !- Source Object
3, !- Outlet Port
{63817e83-de39-41e3-ab61-8ac53e3cd59d}, !- Target Object
15; !- Inlet Port

OS:Connection,
{63ff7933-6b09-489c-bd4a-15fd5f4a1e7f}, !- Handle
{63817e83-de39-41e3-ab61-8ac53e3cd59d}, !- Source Object
16, !- Outlet Port
{6b4e88a4-5fdd-4163-83b4-009c471a85ef}, !- Target Object
2; !- Inlet Port

OS:Connection,
{750663bb-08b9-46f4-a05e-fb3b5ddc0523}, !- Handle
{6b4e88a4-5fdd-4163-83b4-009c471a85ef}, !- Source Object
3, !- Outlet Port
{28df3ea1-1ee5-4fce-882a-a9d5b01ff3db}, !- Target Object
5; !- Inlet Port

Loading

0 comments on commit 6e4e351

Please sign in to comment.