Skip to content

Commit 6e4e351

Browse files
authored
Merge pull request #47 from BuildingPerformanceSimulation/fix/add_heat_recovery_chiller
add warning message for air-cooled chillers
2 parents 11d3572 + 8d3be38 commit 6e4e351

File tree

10 files changed

+204
-155123
lines changed

10 files changed

+204
-155123
lines changed

lib/measures/add_heat_recovery_chiller/measure.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,16 @@ def run(model, runner, user_arguments)
334334
else
335335
existing_chiller = model.getChillerElectricEIRByName(existing_chiller_name)
336336
unless existing_chiller.is_initialized
337-
runner.registerError("Chiller named #{chiller} not found in the model. It may have been removed by another measure.")
337+
runner.registerError("Chiller named #{existing_chiller_name} not found in the model. It may have been removed by another measure.")
338338
return false
339339
end
340340
heat_recovery_chiller = existing_chiller.get
341341
end
342+
343+
if heat_recovery_chiller.condenserType == 'AirCooled'
344+
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.")
345+
return false
346+
end
342347
else
343348
runner.registerError("Invalid chiller_choice argument #{chiller_choice}.")
344349
return false
@@ -404,15 +409,10 @@ def run(model, runner, user_arguments)
404409
sizing_plant.setDesignLoopExitTemperature(heat_recovery_loop_temperature_c)
405410
sizing_plant.setLoopDesignTemperatureDifference(OpenStudio.convert(20.0, 'R', 'K').get)
406411
hr_temp_sch = OpenstudioStandards::Schedules.create_constant_schedule_ruleset(model,
407-
heat_recovery_loop_temperature_c,
408-
name: "Heat Recovery Loop #{heat_recovery_loop_temperature_f}F",
409-
schedule_type_limit: 'Temperature')
410-
if chiller_choice == "Add New Chiller"
411-
heat_recovery_loop.addDemandBranchForComponent(heat_recovery_chiller.to_HVACComponent.get)
412-
puts heat_recovery_chiller
413-
else
414-
heat_recovery_loop.addDemandBranchForComponent(heat_recovery_chiller.to_HVACComponent.get)
415-
end
412+
heat_recovery_loop_temperature_c,
413+
name: "Heat Recovery Loop #{heat_recovery_loop_temperature_f}F",
414+
schedule_type_limit: 'Temperature')
415+
heat_recovery_loop.addDemandBranchForComponent(heat_recovery_chiller.to_HVACComponent.get)
416416

417417
if chiller_choice == 'Add New Chiller'
418418
# 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?

lib/measures/add_heat_recovery_chiller/measure.xml

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.1</schema_version>
44
<name>add_heat_recovery_chiller</name>
55
<uid>968b3e43-1b47-4f29-b0af-f1c16b3e68c2</uid>
6-
<version_id>2ddbffd1-5149-445a-83e3-3d9f54f112f5</version_id>
7-
<version_modified>2024-10-02T19:43:08Z</version_modified>
6+
<version_id>58997653-d398-4180-b35d-9e3796cb9906</version_id>
7+
<version_modified>2024-10-04T19:54:54Z</version_modified>
88
<xml_checksum>88BE00C7</xml_checksum>
99
<class_name>AddHeatRecoveryChiller</class_name>
1010
<display_name>Heat Recovery Chiller</display_name>
@@ -266,7 +266,7 @@
266266
<filename>measure.rb</filename>
267267
<filetype>rb</filetype>
268268
<usage_type>script</usage_type>
269-
<checksum>FDA94B9A</checksum>
269+
<checksum>7C514DEC</checksum>
270270
</file>
271271
<file>
272272
<filename>95.epw</filename>
@@ -278,49 +278,13 @@
278278
<filename>95.osm</filename>
279279
<filetype>osm</filetype>
280280
<usage_type>test</usage_type>
281-
<checksum>93F8CB08</checksum>
281+
<checksum>452A0575</checksum>
282282
</file>
283283
<file>
284284
<filename>AddHeatRecoveryChiller_Test.rb</filename>
285285
<filetype>rb</filetype>
286286
<usage_type>test</usage_type>
287-
<checksum>D11BADE1</checksum>
288-
</file>
289-
<file>
290-
<filename>LargeOffice_VAV_chiller_boiler.epw</filename>
291-
<filetype>epw</filetype>
292-
<usage_type>test</usage_type>
293-
<checksum>A0EA4A35</checksum>
294-
</file>
295-
<file>
296-
<filename>LargeOffice_VAV_chiller_boiler.osm</filename>
297-
<filetype>osm</filetype>
298-
<usage_type>test</usage_type>
299-
<checksum>D3164F50</checksum>
300-
</file>
301-
<file>
302-
<filename>VAV_chiller_boiler_4A.epw</filename>
303-
<filetype>epw</filetype>
304-
<usage_type>test</usage_type>
305-
<checksum>93A87B0C</checksum>
306-
</file>
307-
<file>
308-
<filename>VAV_chiller_boiler_4A.osm</filename>
309-
<filetype>osm</filetype>
310-
<usage_type>test</usage_type>
311-
<checksum>566DED4B</checksum>
312-
</file>
313-
<file>
314-
<filename>VAV_with_reheat_3B.epw</filename>
315-
<filetype>epw</filetype>
316-
<usage_type>test</usage_type>
317-
<checksum>CD6E640B</checksum>
318-
</file>
319-
<file>
320-
<filename>VAV_with_reheat_3B.osm</filename>
321-
<filetype>osm</filetype>
322-
<usage_type>test</usage_type>
323-
<checksum>37D5AEB8</checksum>
287+
<checksum>C217698D</checksum>
324288
</file>
325289
</files>
326290
</measure>

lib/measures/add_heat_recovery_chiller/tests/95.osm

Lines changed: 139 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

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

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

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

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

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

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

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

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

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

3276132769
OS:Controller:MechanicalVentilation,
3276232770
{09635742-4ec9-4bf2-98b2-a00c635519c2}, !- Handle
@@ -34633,7 +34641,8 @@ OS:Controller:OutdoorAir,
3463334641
, !- Humidistat Control Zone Name
3463434642
, !- High Humidity Outdoor Air Flow Ratio
3463534643
, !- Control High Indoor Humidity Based on Outdoor Humidity Ratio
34636-
BypassWhenWithinEconomizerLimits; !- Heat Recovery Bypass Control Type
34644+
BypassWhenWithinEconomizerLimits, !- Heat Recovery Bypass Control Type
34645+
InterlockedWithMechanicalCooling; !- Economizer Operation Staging
3463734646

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

42343-
OS:WeatherFile,
42344-
{90b2aab1-7a9a-4f89-8843-04ac9a0e14fd}, !- Handle
42345-
Yeager, !- City
42346-
WV, !- State Province Region
42347-
USA, !- Country
42348-
customized weather file, !- Data Source
42349-
724140, !- WMO Number
42350-
38.38, !- Latitude {deg}
42351-
-81.59, !- Longitude {deg}
42352-
-5, !- Time Zone {hr}
42353-
299, !- Elevation {m}
42354-
95.epw, !- Url
42355-
DEDEF016, !- Checksum
42356-
2018, !- Start Date Actual Year
42357-
Monday; !- Start Day of Week
42358-
4235942352
OS:RadianceParameters,
4236042353
{cf6aa5f7-c964-45f5-a8f2-e04ff0afa798}, !- Handle
4236142354
1, !- Accumulated Rays per Record
@@ -42390,7 +42383,9 @@ OS:SurfaceConvectionAlgorithm:Outside,
4239042383

4239142384
OS:ZoneAirHeatBalanceAlgorithm,
4239242385
{7e208a71-0c81-435b-b4af-6543e178a7ed}, !- Handle
42393-
ThirdOrderBackwardDifference; !- Algorithm
42386+
ThirdOrderBackwardDifference, !- Algorithm
42387+
, !- Do Space Heat Balance for Sizing
42388+
; !- Do Space Heat Balance for Simulation
4239442389

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

42413+
OS:Chiller:Electric:EIR,
42414+
{63817e83-de39-41e3-ab61-8ac53e3cd59d}, !- Handle
42415+
Chiller - Air Cooled, !- Name
42416+
Autosize, !- Reference Capacity {W}
42417+
3, !- Reference COP {W/W}
42418+
, !- Reference Leaving Chilled Water Temperature {C}
42419+
, !- Reference Entering Condenser Fluid Temperature {C}
42420+
0.0027665, !- Reference Chilled Water Flow Rate {m3/s}
42421+
, !- Reference Condenser Fluid Flow Rate {m3/s}
42422+
{cbb35b1d-c9b0-4058-886a-9878d9d061ad}, !- Cooling Capacity Function of Temperature Curve Name
42423+
{f293860a-b759-49b3-b9a8-3eb82b6baee8}, !- Electric Input to Cooling Output Ratio Function of Temperature Curve Name
42424+
{88168e2a-c37b-4781-92fa-32d3a59ce68b}, !- Electric Input to Cooling Output Ratio Function of Part Load Ratio Curve Name
42425+
, !- Minimum Part Load Ratio
42426+
, !- Maximum Part Load Ratio
42427+
, !- Optimum Part Load Ratio
42428+
, !- Minimum Unloading Ratio
42429+
{812da95c-3397-4eaa-b206-ae3f5d09183d}, !- Chilled Water Inlet Node Name
42430+
{63ff7933-6b09-489c-bd4a-15fd5f4a1e7f}, !- Chilled Water Outlet Node Name
42431+
, !- Condenser Inlet Node Name
42432+
, !- Condenser Outlet Node Name
42433+
AirCooled, !- Condenser Type
42434+
, !- Condenser Fan Power Ratio {W/W}
42435+
, !- Fraction of Compressor Electric Consumption Rejected by Condenser
42436+
, !- Leaving Chilled Water Lower Temperature Limit {C}
42437+
ConstantFlow, !- Chiller Flow Mode
42438+
Autosize, !- Design Heat Recovery Water Flow Rate {m3/s}
42439+
, !- Heat Recovery Inlet Node Name
42440+
, !- Heat Recovery Outlet Node Name
42441+
1, !- Sizing Factor
42442+
0, !- Basin Heater Capacity {W/K}
42443+
10, !- Basin Heater Setpoint Temperature {C}
42444+
, !- Basin Heater Operating Schedule Name
42445+
1, !- Condenser Heat Recovery Relative Capacity Fraction
42446+
, !- Heat Recovery Inlet High Temperature Limit Schedule Name
42447+
, !- Heat Recovery Leaving Temperature Setpoint Node Name
42448+
General; !- End-Use Subcategory
42449+
42450+
OS:Curve:Biquadratic,
42451+
{cbb35b1d-c9b0-4058-886a-9878d9d061ad}, ! Handle
42452+
OS:Curve:Biquadratic 3, ! Name
42453+
1.0433811, ! Coefficient1 Constant
42454+
0.040707699999999999, ! Coefficient2 x
42455+
0.0004506, ! Coefficient3 x**2
42456+
-0.0041514000000000004, ! Coefficient4 y
42457+
-8.8599999999999999e-05, ! Coefficient5 y**2
42458+
-0.00034670000000000002, ! Coefficient6 x*y
42459+
0, ! Minimum Value of x {BasedOnField A2}
42460+
20, ! Maximum Value of x {BasedOnField A2}
42461+
0, ! Minimum Value of y {BasedOnField A3}
42462+
50; ! Maximum Value of y {BasedOnField A3}
42463+
42464+
OS:Curve:Biquadratic,
42465+
{f293860a-b759-49b3-b9a8-3eb82b6baee8}, ! Handle
42466+
OS:Curve:Biquadratic 4, ! Name
42467+
0.59619149999999999, ! Coefficient1 Constant
42468+
-0.0099495999999999994, ! Coefficient2 x
42469+
0.00078879999999999998, ! Coefficient3 x**2
42470+
0.0004506, ! Coefficient4 y
42471+
0.00048749999999999998, ! Coefficient5 y**2
42472+
-0.00076230000000000004, ! Coefficient6 x*y
42473+
0, ! Minimum Value of x {BasedOnField A2}
42474+
20, ! Maximum Value of x {BasedOnField A2}
42475+
0, ! Minimum Value of y {BasedOnField A3}
42476+
50; ! Maximum Value of y {BasedOnField A3}
42477+
42478+
OS:Curve:Quadratic,
42479+
{88168e2a-c37b-4781-92fa-32d3a59ce68b}, ! Handle
42480+
OS:Curve:Quadratic 4, ! Name
42481+
1.6853121, ! Coefficient1 Constant
42482+
-0.99934429999999996, ! Coefficient2 x
42483+
0.31403219999999998, ! Coefficient3 x**2
42484+
0, ! Minimum Value of x {BasedOnField A2}
42485+
1.2; ! Maximum Value of x {BasedOnField A2}
42486+
42487+
OS:Node,
42488+
{a2fd1e63-358f-46ae-a71b-d9a7ec6edf00}, !- Handle
42489+
Node 1, !- Name
42490+
{b7df166d-2d3d-4533-a141-bac94be45c18}, !- Inlet Port
42491+
{812da95c-3397-4eaa-b206-ae3f5d09183d}; !- Outlet Port
42492+
42493+
OS:Connection,
42494+
{b7df166d-2d3d-4533-a141-bac94be45c18}, !- Handle
42495+
{c272a738-e9dd-4a94-983a-9cbc997a560b}, !- Source Object
42496+
5, !- Outlet Port
42497+
{a2fd1e63-358f-46ae-a71b-d9a7ec6edf00}, !- Target Object
42498+
2; !- Inlet Port
42499+
42500+
OS:Node,
42501+
{6b4e88a4-5fdd-4163-83b4-009c471a85ef}, !- Handle
42502+
Node 2, !- Name
42503+
{63ff7933-6b09-489c-bd4a-15fd5f4a1e7f}, !- Inlet Port
42504+
{750663bb-08b9-46f4-a05e-fb3b5ddc0523}; !- Outlet Port
42505+
42506+
OS:Connection,
42507+
{812da95c-3397-4eaa-b206-ae3f5d09183d}, !- Handle
42508+
{a2fd1e63-358f-46ae-a71b-d9a7ec6edf00}, !- Source Object
42509+
3, !- Outlet Port
42510+
{63817e83-de39-41e3-ab61-8ac53e3cd59d}, !- Target Object
42511+
15; !- Inlet Port
42512+
42513+
OS:Connection,
42514+
{63ff7933-6b09-489c-bd4a-15fd5f4a1e7f}, !- Handle
42515+
{63817e83-de39-41e3-ab61-8ac53e3cd59d}, !- Source Object
42516+
16, !- Outlet Port
42517+
{6b4e88a4-5fdd-4163-83b4-009c471a85ef}, !- Target Object
42518+
2; !- Inlet Port
42519+
42520+
OS:Connection,
42521+
{750663bb-08b9-46f4-a05e-fb3b5ddc0523}, !- Handle
42522+
{6b4e88a4-5fdd-4163-83b4-009c471a85ef}, !- Source Object
42523+
3, !- Outlet Port
42524+
{28df3ea1-1ee5-4fce-882a-a9d5b01ff3db}, !- Target Object
42525+
5; !- Inlet Port
42526+

0 commit comments

Comments
 (0)