diff --git a/src/openstudio_app/Resources/default/hvac_library.osm b/src/openstudio_app/Resources/default/hvac_library.osm index c928b4305..e4e09c195 100644 --- a/src/openstudio_app/Resources/default/hvac_library.osm +++ b/src/openstudio_app/Resources/default/hvac_library.osm @@ -14277,3 +14277,511 @@ OS:EvaporativeCooler:Direct:ResearchSpecial, 24, !- Evaporative Operation Maximum Limit Wetbulb Temperature 28; !- Evaporative Operation Maximum Limit Drybulb Temperature + +! Plant Loop Heat Pumps + +OS:Curve:Biquadratic, + {880a8b14-5973-4220-9065-e36b00b2f3ae}, !- Handle + Heat Pump Plant Loop EIR Heating - Air Source HeatCapCurveFuncTemp, !- Name + 0.794900878202383, !- Coefficient1 Constant + 0.00388524034840032, !- Coefficient2 x + -5.75169230965453e-05, !- Coefficient3 x**2 + 0.0278109488428528, !- Coefficient4 y + 0.000318168, !- Coefficient5 y**2 + -0.000130572089253355, !- Coefficient6 x*y + 15, !- Minimum Value of x + 70, !- Maximum Value of x + -17, !- Minimum Value of y + 37.22, !- Maximum Value of y + , !- Minimum Curve Output + 1.55, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {5343bf17-0e7c-43ab-8fee-3cf0d932718f}, !- Handle + Heat Pump Plant Loop EIR Heating - Air Source HeatEIRCurveFuncTemp, !- Name + 0.530730392560108, !- Coefficient1 Constant + 0.00655164780603528, !- Coefficient2 x + 0.000263599226028026, !- Coefficient3 x**2 + -0.03620668194737, !- Coefficient4 y + 0.00126617163409192, !- Coefficient5 y**2 + -0.000791224057761721, !- Coefficient6 x*y + 15, !- Minimum Value of x + 70, !- Maximum Value of x + -17, !- Minimum Value of y + 37.22, !- Maximum Value of y + 0.4, !- Minimum Curve Output + 1.48, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {73bde3ba-8475-4566-a91f-11deaf1a99c5}, !- Handle + Heat Pump Plant Loop EIR Cooling - Air Source CoolCapCurveFuncTemp, !- Name + 1.06722728893252, !- Coefficient1 Constant + 0.0460678063570057, !- Coefficient2 x + 0.00034604993757372, !- Coefficient3 x**2 + -0.0069704934525177, !- Coefficient4 y + -2.88618548923695e-05, !- Coefficient5 y**2 + -0.000475762640861958, !- Coefficient6 x*y + 2, !- Minimum Value of x + 20, !- Maximum Value of x + 4.2, !- Minimum Value of y + 37, !- Maximum Value of y + , !- Minimum Curve Output + 1.55, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {85e04dd3-87e0-41fc-bb91-32241c07b021}, !- Handle + Heat Pump Plant Loop EIR Cooling - Air Source CoolEIRCurveFuncTemp, !- Name + 0.440305821838175, !- Coefficient1 Constant + -0.0241323110030793, !- Coefficient2 x + 0.000537914626055751, !- Coefficient3 x**2 + 0.0118716162533228, !- Coefficient4 y + 0.000305785618883187, !- Coefficient5 y**2 + -0.000617329632749052, !- Coefficient6 x*y + 2, !- Minimum Value of x + 20, !- Maximum Value of x + 4.2, !- Minimum Value of y + 37, !- Maximum Value of y + 0.4, !- Minimum Curve Output + 1.48, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {94746cf2-0f89-460e-acdb-62cdd5be0485}, !- Handle + GAHP Cooling CapFT, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 y + 0, !- Coefficient5 y**2 + 0, !- Coefficient6 x*y + 5, !- Minimum Value of x + 10, !- Maximum Value of x + 24, !- Minimum Value of y + 35, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {31dc954c-f9d4-4d55-8212-90f9bb756657}, !- Handle + GAHP Cooling EIRFT, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 y + 0, !- Coefficient5 y**2 + 0, !- Coefficient6 x*y + 5, !- Minimum Value of x + 10, !- Maximum Value of x + 24, !- Minimum Value of y + 35, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {a7deeea1-ea5b-4639-b4b2-f4dedfb52f96}, !- Handle + GAHP Heating CapFT, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 y + 0, !- Coefficient5 y**2 + 0, !- Coefficient6 x*y + 5, !- Minimum Value of x + 10, !- Maximum Value of x + 24, !- Minimum Value of y + 35, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {569c9254-00cc-41e4-90cf-03016efadea6}, !- Handle + GAHP Heating EIRFT, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Coefficient4 y + 0, !- Coefficient5 y**2 + 0, !- Coefficient6 x*y + 5, !- Minimum Value of x + 10, !- Maximum Value of x + 24, !- Minimum Value of y + 35, !- Maximum Value of y + , !- Minimum Curve Output + , !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature; !- Input Unit Type for Y + +OS:Curve:Biquadratic, + {fcd1f27c-8baf-46d0-9fd6-047b8e41d830}, !- Handle + Heat Pump Air To Water Cooling Speed Data 1 CapCurveFuncTempCL, !- Name + 0.9, !- Coefficient1 Constant + -0.00038, !- Coefficient2 x + -0.00042, !- Coefficient3 x**2 + -0.0102, !- Coefficient4 y + 0.0225, !- Coefficient5 y**2 + -0.00021, !- Coefficient6 x*y + 5, !- Minimum Value of x + 15, !- Maximum Value of x + 15, !- Minimum Value of y + 45, !- Maximum Value of y + 0.7, !- Minimum Curve Output + 1.3, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +OS:Curve:Biquadratic, + {b375bf3b-bed2-4ff8-8fa6-39d157f4b1f9}, !- Handle + Heat Pump Air To Water Cooling Speed Data 1 EIRCurveFuncTempCL, !- Name + 0.98, !- Coefficient1 Constant + 0.00021, !- Coefficient2 x + 0.00019, !- Coefficient3 x**2 + 0.0068, !- Coefficient4 y + -0.0085, !- Coefficient5 y**2 + 0.000158, !- Coefficient6 x*y + 5, !- Minimum Value of x + 15, !- Maximum Value of x + 15, !- Minimum Value of y + 45, !- Maximum Value of y + 0.7, !- Minimum Curve Output + 1.3, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +OS:Curve:Biquadratic, + {0028ca86-0930-4c3c-9108-0467338ddf58}, !- Handle + Heat Pump Air To Water Heating Speed Data 1 CapCurveFuncTempHT, !- Name + 0.899, !- Coefficient1 Constant + -0.00045, !- Coefficient2 x + 0.00021, !- Coefficient3 x**2 + 0.0185, !- Coefficient4 y + -0.0108, !- Coefficient5 y**2 + 0.000617, !- Coefficient6 x*y + 30, !- Minimum Value of x + 50, !- Maximum Value of x + -7, !- Minimum Value of y + 20, !- Maximum Value of y + 0.5, !- Minimum Curve Output + 1.3, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +OS:Curve:Biquadratic, + {8c9b0b98-da37-4476-b128-4bfa75494611}, !- Handle + Heat Pump Air To Water Heating Speed Data 1 EIRCurveFuncTempHT, !- Name + 1.055, !- Coefficient1 Constant + 0.00035, !- Coefficient2 x + -0.00027, !- Coefficient3 x**2 + -0.0108, !- Coefficient4 y + 0.0145, !- Coefficient5 y**2 + -0.00023, !- Coefficient6 x*y + 30, !- Minimum Value of x + 50, !- Maximum Value of x + -7, !- Minimum Value of y + 20, !- Maximum Value of y + 0.7, !- Minimum Curve Output + 1.5, !- Maximum Curve Output + Temperature, !- Input Unit Type for X + Temperature, !- Input Unit Type for Y + Dimensionless; !- Output Unit Type + +OS:Curve:Quadratic, + {be1baee3-04c0-45ab-ad78-b3a8bb2f87c7}, !- Handle + Curve Quadratic 1, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + +OS:Curve:Quadratic, + {82cb1e3f-c8d1-430b-aebb-8ca634023613}, !- Handle + Curve Quadratic 2, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + +OS:Curve:Quadratic, + {16e619d8-bb8d-4dd1-b22a-10cc385ef65d}, !- Handle + GAHP Cooling EIRFPLR, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + +OS:Curve:Quadratic, + {4a82afc1-3c05-43ee-8f69-82979aea2179}, !- Handle + GAHP Heating EIRFPLR, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1; !- Maximum Value of x + +OS:Curve:Quadratic, + {0b0b0ac0-fd06-4d0c-8941-ea98ad33d603}, !- Handle + Heat Pump Air To Water Cooling Speed Data 1 EIRCurveFuncPLR, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1, !- Maximum Value of x + 0, !- Minimum Curve Output + 1, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +OS:Curve:Quadratic, + {adf2b990-0133-427b-92da-07bdd56c554d}, !- Handle + Heat Pump Air To Water Heating Speed Data 1 EIRCurveFuncPLR, !- Name + 1, !- Coefficient1 Constant + 0, !- Coefficient2 x + 0, !- Coefficient3 x**2 + 0, !- Minimum Value of x + 1, !- Maximum Value of x + 0, !- Minimum Curve Output + 1, !- Maximum Curve Output + Dimensionless, !- Input Unit Type for X + Dimensionless; !- Output Unit Type + +OS:HeatPump:AirToWater, + {30ff5edf-c4aa-4533-ae70-212841cfedbf}, !- Handle + Heat Pump Air To Water, !- Name + Load, !- Operating Mode Control Method + SingleMode, !- Operating Mode Control Option for Multiple Unit + , !- Operating Mode Control Schedule Name + 0, !- Minimum Part Load Ratio + , !- Air Inlet Node Name + , !- Air Outlet Node Name + 10, !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + None, !- Heat Pump Defrost Control + 0.058333, !- Heat Pump Defrost Time Period Fraction + 0, !- Resistive Defrost Heater Capacity {W} + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + 1, !- Heat Pump Multiplier + VariableSpeed, !- Control Type + 0, !- Crankcase Heater Capacity {W} + , !- Crankcase Heater Capacity Function of Temperature Curve Name + 10, !- Maximum Ambient Temperature for Crankcase Heater Operation {C} + {56fbfe34-cdb8-4040-9334-4df02e94faa5}, !- Heating Operation Mode + {a53c2519-515f-4bca-9625-c9880b09de02}; !- Cooling Operation Mode + +OS:HeatPump:AirToWater:Cooling, + {a53c2519-515f-4bca-9625-c9880b09de02}, !- Handle + Heat Pump Air To Water Cooling Mode, !- Name + {9f54092d-a4a8-41b8-a381-c4c332ecb843}, !- Availability Schedule Name + 30, !- Rated Inlet Air Temperature {C} + autosize, !- Rated Air Flow Rate {m3/s} + 8, !- Rated Leaving Water Temperature {C} + autosize, !- Rated Water Flow Rate {m3/s} + -30, !- Minimum Outdoor Air Temperature {C} + 100, !- Maximum Outdoor Air Temperature {C} + , !- Minimum Leaving Water Temperature Curve Name + , !- Maximum Leaving Water Temperature Curve Name + 1, !- Sizing Factor + , !- Chilled Water Inlet Node Name + , !- Chilled Water Outlet Node Name + {37e318cf-acad-4ff8-b7b2-85e62c769de7}, !- Speed Data List + ; !- Booster Mode On Speed + +OS:HeatPump:AirToWater:Cooling:SpeedData, + {6debb5be-d251-4ea9-b389-bc58833750f3}, !- Handle + Heat Pump Air To Water Cooling Speed 1, !- Name + autosize, !- Rated Cooling Capacity {W} + 3, !- Rated COP for Cooling {W/W} + {fcd1f27c-8baf-46d0-9fd6-047b8e41d830}, !- Normalized Cooling Capacity Function of Temperature Curve Name + {b375bf3b-bed2-4ff8-8fa6-39d157f4b1f9}, !- Cooling Energy Input Ratio Function of Temperature Curve Name + {0b0b0ac0-fd06-4d0c-8941-ea98ad33d603}; !- Cooling Energy Input Ratio Function of PLR Curve Name + +OS:HeatPump:AirToWater:FuelFired:Cooling, + {00562e55-7fba-44e4-ac51-aca9869a3f8b}, !- Handle + Heat Pump Air To Water Fuel Fired Cooling, !- Name + , !- Water Inlet Node Name + , !- Water Outlet Node Name + , !- Air Source Node Name + , !- Companion Heating Heat Pump Name + NaturalGas, !- Fuel Type + , !- End-Use Subcategory + autosize, !- Nominal Cooling Capacity {W} + 1, !- Nominal COP {W/W} + autosize, !- Design Flow Rate {m3/s} + 7, !- Design Supply Temperature {C} + 11.1, !- Design Temperature Lift {deltaC} + 1, !- Sizing Factor + NotModulated, !- Flow Mode + DryBulb, !- Outdoor Air Temperature Curve Input Variable + EnteringEvaporator, !- Water Temperature Curve Input Variable + {94746cf2-0f89-460e-acdb-62cdd5be0485}, !- Normalized Capacity Function of Temperature Curve Name + {31dc954c-f9d4-4d55-8212-90f9bb756657}, !- Fuel Energy Input Ratio Function of Temperature Curve Name + {16e619d8-bb8d-4dd1-b22a-10cc385ef65d}, !- Fuel Energy Input Ratio Function of PLR Curve Name + 0.1, !- Minimum Part Load Ratio + 1, !- Maximum Part Load Ratio + , !- Cycling Ratio Factor Curve Name + 0, !- Nominal Auxiliary Electric Power {W} + , !- Auxiliary Electric Energy Input Ratio Function of Temperature Curve Name + , !- Auxiliary Electric Energy Input Ratio Function of PLR Curve Name + 0, !- Standby Electric Power {W} + 0.25; !- Minimum Unloading Ratio + +OS:HeatPump:AirToWater:FuelFired:Heating, + {f2da640c-a686-424f-9d19-aaeb546fe276}, !- Handle + Heat Pump Air To Water Fuel Fired Heating, !- Name + , !- Water Inlet Node Name + , !- Water Outlet Node Name + , !- Air Source Node Name + , !- Companion Cooling Heat Pump Name + NaturalGas, !- Fuel Type + , !- End-Use Subcategory + autosize, !- Nominal Heating Capacity {W} + 1, !- Nominal COP {W/W} + autosize, !- Design Flow Rate {m3/s} + 60, !- Design Supply Temperature {C} + 11.1, !- Design Temperature Lift {deltaC} + 1, !- Sizing Factor + NotModulated, !- Flow Mode + DryBulb, !- Outdoor Air Temperature Curve Input Variable + EnteringCondenser, !- Water Temperature Curve Input Variable + {a7deeea1-ea5b-4639-b4b2-f4dedfb52f96}, !- Normalized Capacity Function of Temperature Curve Name + {569c9254-00cc-41e4-90cf-03016efadea6}, !- Fuel Energy Input Ratio Function of Temperature Curve Name + {4a82afc1-3c05-43ee-8f69-82979aea2179}, !- Fuel Energy Input Ratio Function of PLR Curve Name + 0.1, !- Minimum Part Load Ratio + 1, !- Maximum Part Load Ratio + Timed, !- Defrost Control Type + 0, !- Defrost Operation Time Fraction + , !- Fuel Energy Input Ratio Defrost Adjustment Curve Name + 0, !- Resistive Defrost Heater Capacity {W} + 5, !- Maximum Outdoor Dry-bulb Temperature for Defrost Operation {C} + , !- Cycling Ratio Factor Curve Name + 0, !- Nominal Auxiliary Electric Power {W} + , !- Auxiliary Electric Energy Input Ratio Function of Temperature Curve Name + , !- Auxiliary Electric Energy Input Ratio Function of PLR Curve Name + 0, !- Standby Electric Power {W} + 0.25; !- Minimum Unloading Ratio + +OS:HeatPump:AirToWater:Heating, + {56fbfe34-cdb8-4040-9334-4df02e94faa5}, !- Handle + Heat Pump Air To Water Heating Mode, !- Name + {9f54092d-a4a8-41b8-a381-c4c332ecb843}, !- Availability Schedule Name + 8, !- Rated Inlet Air Temperature {C} + autosize, !- Rated Air Flow Rate {m3/s} + 40, !- Rated Leaving Water Temperature {C} + autosize, !- Rated Water Flow Rate {m3/s} + -30, !- Minimum Outdoor Air Temperature {C} + 100, !- Maximum Outdoor Air Temperature {C} + , !- Minimum Leaving Water Temperature Curve Name + , !- Maximum Leaving Water Temperature Curve Name + 1, !- Sizing Factor + , !- Hot Water Inlet Node Name + , !- Hot Water Outlet Node Name + {59283c92-96c5-45dd-9830-6add0ef55214}, !- Speed Data List + ; !- Booster Mode On Speed + +OS:HeatPump:AirToWater:Heating:SpeedData, + {76b455ee-ffa3-4374-a69c-34197ead1871}, !- Handle + Heat Pump Air To Water Heating Speed 1, !- Name + autosize, !- Rated Heating Capacity {W} + 3, !- Rated COP for Heating {W/W} + {0028ca86-0930-4c3c-9108-0467338ddf58}, !- Normalized Heating Capacity Function of Temperature Curve Name + {8c9b0b98-da37-4476-b128-4bfa75494611}, !- Heating Energy Input Ratio Function of Temperature Curve Name + {adf2b990-0133-427b-92da-07bdd56c554d}; !- Heating Energy Input Ratio Function of PLR Curve Name + +OS:HeatPump:PlantLoop:EIR:Cooling, + {3822078c-0bcc-41ae-818f-3928dc207545}, !- Handle + Heat Pump Plant Loop EIR Cooling - Air Source, !- Name + , !- Load Side Inlet Node Name + , !- Load Side Outlet Node Name + AirSource, !- Condenser Type + , !- Source Side Inlet Node Name + , !- Source Side Outlet Node Name + , !- Heat Recovery Inlet Node Name + , !- Heat Recovery Outlet Node Name + , !- Companion Heat Pump Name + Autosize, !- Load Side Reference Flow Rate {m3/s} + Autosize, !- Source Side Reference Flow Rate {m3/s} + Autosize, !- Heat Recovery Reference Flow Rate {m3/s} + Autosize, !- Reference Capacity {W} + 7.5, !- Reference Coefficient of Performance {W/W} + 1, !- Sizing Factor + {73bde3ba-8475-4566-a91f-11deaf1a99c5}, !- Capacity Modifier Function of Temperature Curve Name + {85e04dd3-87e0-41fc-bb91-32241c07b021}, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + {82cb1e3f-c8d1-430b-aebb-8ca634023613}, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + Load, !- Control Type + ConstantFlow, !- Flow Mode + 0, !- Minimum Part Load Ratio + -100, !- Minimum Source Inlet Temperature {C} + 100, !- Maximum Source Inlet Temperature {C} + , !- Minimum Supply Water Temperature Curve Name + , !- Maximum Supply Water Temperature Curve Name + 60, !- Maximum Heat Recovery Outlet Temperature {C} + , !- Heat Recovery Capacity Modifier Function of Temperature Curve Name + , !- Heat Recovery Electric Input to Output Ratio Modifier Function of Temperature Curve Name + , !- Thermosiphon Capacity Fraction Curve Name + 0; !- Thermosiphon Minimum Temperature Difference + +OS:HeatPump:PlantLoop:EIR:Heating, + {f9499d5d-e916-4f8d-8e7d-df4f42f42616}, !- Handle + Heat Pump Plant Loop EIR Heating - Air Source, !- Name + , !- Load Side Inlet Node Name + , !- Load Side Outlet Node Name + AirSource, !- Condenser Type + , !- Source Side Inlet Node Name + , !- Source Side Outlet Node Name + , !- Heat Recovery Inlet Node Name + , !- Heat Recovery Outlet Node Name + , !- Companion Heat Pump Name + Autosize, !- Load Side Reference Flow Rate {m3/s} + Autosize, !- Source Side Reference Flow Rate {m3/s} + Autosize, !- Heat Recovery Reference Flow Rate {m3/s} + Autosize, !- Reference Capacity {W} + 7.5, !- Reference Coefficient of Performance {W/W} + 1, !- Sizing Factor + {880a8b14-5973-4220-9065-e36b00b2f3ae}, !- Capacity Modifier Function of Temperature Curve Name + {5343bf17-0e7c-43ab-8fee-3cf0d932718f}, !- Electric Input to Output Ratio Modifier Function of Temperature Curve Name + {be1baee3-04c0-45ab-ad78-b3a8bb2f87c7}, !- Electric Input to Output Ratio Modifier Function of Part Load Ratio Curve Name + 1, !- Heating To Cooling Capacity Sizing Ratio + CoolingCapacity, !- Heat Pump Sizing Method + Load, !- Control Type + ConstantFlow, !- Flow Mode + 0, !- Minimum Part Load Ratio + -100, !- Minimum Source Inlet Temperature {C} + 100, !- Maximum Source Inlet Temperature {C} + , !- Minimum Supply Water Temperature Curve Name + , !- Maximum Supply Water Temperature Curve Name + , !- Dry Outdoor Correction Factor Curve Name + 10, !- Maximum Outdoor Dry Bulb Temperature For Defrost Operation + None, !- Heat Pump Defrost Control + 0.058333, !- Heat Pump Defrost Time Period Fraction + , !- Defrost Energy Input Ratio Function of Temperature Curve Name + , !- Timed Empirical Defrost Frequency Curve Name + , !- Timed Empirical Defrost Heat Load Penalty Curve Name + , !- Timed Empirical Defrost Heat Input Energy Fraction Curve Name + 4.5; !- Minimum Heat Recovery Outlet Temperature {C} + +OS:ModelObjectList, + {37e318cf-acad-4ff8-b7b2-85e62c769de7}, !- Handle + Heat Pump Air To Water Cooling 1 Speed Data List, !- Name + {6debb5be-d251-4ea9-b389-bc58833750f3}; !- Model Object 1 + +OS:ModelObjectList, + {59283c92-96c5-45dd-9830-6add0ef55214}, !- Handle + Heat Pump Air To Water Heating 1 Speed Data List, !- Name + {76b455ee-ffa3-4374-a69c-34197ead1871}; !- Model Object 1 + diff --git a/src/openstudio_lib/GridItem.cpp b/src/openstudio_lib/GridItem.cpp index 49bb8a74d..a41842818 100644 --- a/src/openstudio_lib/GridItem.cpp +++ b/src/openstudio_lib/GridItem.cpp @@ -96,6 +96,7 @@ #include #include "../openstudio_qt_utils/Utilities.hpp" +#include "../utilities/HeatPumpAirToWaterPlacement.hpp" #include @@ -241,7 +242,8 @@ void ModelObjectGraphicsItem::setModelObject(model::OptionalModelObject modelObj if (auto comp_ = m_modelObject->optionalCast()) { setAcceptDrops(true); - setDeletable(comp_->isRemovable()); + // A HeatPumpAirToWater operation mode isn't removable by itself, but can be taken off its loop + setDeletable(comp_->isRemovable() || heatPumpAirToWaterForMode(comp_.get())); if (isNotSplitterMixerNodesPred(comp_.get())) { setDraggable(true); } diff --git a/src/openstudio_lib/HVACSystemsController.cpp b/src/openstudio_lib/HVACSystemsController.cpp index 61a96d05e..c0038c7aa 100644 --- a/src/openstudio_lib/HVACSystemsController.cpp +++ b/src/openstudio_lib/HVACSystemsController.cpp @@ -23,10 +23,13 @@ #include "MainRightColumnController.hpp" #include "../shared_gui_components/OSViewSwitcher.hpp" #include "../utilities/CloneFixup.hpp" +#include "../utilities/HeatPumpAirToWaterPlacement.hpp" #include #include #include +#include +#include #include #include #include @@ -131,6 +134,7 @@ #include +#include #include #include #include @@ -147,6 +151,40 @@ const QString SHW = "SHW"; const QString REFRIGERATION = "REFRIGERATION"; const QString VRF = "VRF"; +namespace { +// Asks which of a HeatPumpAirToWater's operation modes to place on `plantLoop`, preselecting the one +// suggested by the loop's sizing type. Returns none if the user cancels. +boost::optional askHeatPumpAirToWaterMode(const model::PlantLoop& plantLoop, QWidget* parent) { + QMessageBox message(parent); + message.setWindowTitle(QCoreApplication::translate("openstudio::HVACLayoutController", "Air to Water Heat Pump")); + message.setText(QCoreApplication::translate("openstudio::HVACLayoutController", + "Which operation mode of this air to water heat pump should be placed on this loop?")); + message.setInformativeText(QCoreApplication::translate( + "openstudio::HVACLayoutController", "The other mode can be placed on another plant loop later by dragging it from the My Model tab.")); + QAbstractButton* heatingButton = + message.addButton(QCoreApplication::translate("openstudio::HVACLayoutController", "Heating"), QMessageBox::AcceptRole); + QAbstractButton* coolingButton = + message.addButton(QCoreApplication::translate("openstudio::HVACLayoutController", "Cooling"), QMessageBox::AcceptRole); + message.addButton(QMessageBox::Cancel); + + const auto suggested = suggestedHeatPumpAirToWaterMode(plantLoop); + if (suggested && suggested.get() == HeatPumpAirToWaterType::Cooling) { + message.setDefaultButton(qobject_cast(coolingButton)); + } else { + message.setDefaultButton(qobject_cast(heatingButton)); + } + + message.exec(); + if (message.clickedButton() == heatingButton) { + return HeatPumpAirToWaterType::Heating; + } + if (message.clickedButton() == coolingButton) { + return HeatPumpAirToWaterType::Cooling; + } + return boost::none; +} +} // namespace + HVACSystemsController::HVACSystemsController(bool isIP, const model::Model& model) : m_hvacSystemsView(new HVACSystemsView()), m_updateMutex(new QMutex()), m_model(model), m_isIP(isIP) { @@ -554,7 +592,19 @@ void HVACLayoutController::addLibraryObjectToModelNode(const OSItemId& itemId, m bool added = false; - if (boost::optional hvacComponent = object->optionalCast()) { + if (boost::optional heatPump = object->optionalCast()) { + // The wrapper can't be placed on a loop itself: one of its heating/cooling operation modes goes there instead + if (boost::optional plant = comp.plantLoop()) { + boost::optional mode = askHeatPumpAirToWaterMode(plant.get(), m_hvacSystemsController->hvacSystemsView()); + if (!mode) { + if (remove) { + object->remove(); + } + return; + } + added = addHeatPumpAirToWaterModeToLoop(heatPump.get(), mode.get(), comp); + } + } else if (boost::optional hvacComponent = object->optionalCast()) { if (boost::optional node = comp.optionalCast()) { // Note: Julien Marrec, 2018-01-04 // When you have a WaterToWaterComponent that has a tertiaryPlantLoop, you should override the addToNode method @@ -634,6 +684,10 @@ void HVACLayoutController::removeModelObject(model::ModelObject& modelObject) { boost::optional loop = m_hvacSystemsController->currentLoop(); + if (removeHeatPumpAirToWaterModeFromLoop(modelObject)) { + return; + } + if (loop) { if (boost::optional comp = modelObject.optionalCast()) { boost::optional plant = comp->plantLoop(); diff --git a/src/openstudio_lib/InspectorView.cpp b/src/openstudio_lib/InspectorView.cpp index e3d2e954f..6c0cdb500 100644 --- a/src/openstudio_lib/InspectorView.cpp +++ b/src/openstudio_lib/InspectorView.cpp @@ -16,6 +16,7 @@ #include "OSDocument.hpp" #include "ZoneChooserView.hpp" #include "EMSInspectorView.hpp" +#include "../utilities/HeatPumpAirToWaterPlacement.hpp" #include #include @@ -75,6 +76,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -129,6 +134,7 @@ #include #include #include +#include #include #include #include @@ -593,6 +599,18 @@ void InspectorView::layoutModelObject(openstudio::model::OptionalModelObject& mo connect(static_cast(m_currentView), &ZoneHVACPackagedTerminalHeatPumpInspectorView::removeFromLoopClicked, this, &InspectorView::removeFromLoopClicked); + } else if (heatPumpAirToWaterForMode(modelObject.get())) { + if (m_currentView) { + delete m_currentView; + } + + m_currentView = new HeatPumpAirToWaterModeInspectorView(); + connect(this, &InspectorView::toggleUnitsClicked, m_currentView, &BaseInspectorView::toggleUnitsClicked); + connect(this, &InspectorView::toggleDisplayAdditionalPropsClicked, m_currentView, &BaseInspectorView::toggleDisplayAdditionalPropsClicked); + + m_currentView->layoutModelObject(modelObject.get(), readOnly, displayIP, displayAdditionalProps); + + m_vLayout->addWidget(m_currentView); } else if (boost::optional component = modelObject->optionalCast()) { @@ -908,6 +926,87 @@ void GenericInspectorView::layoutModelObject(model::ModelObject& modelObject, bo m_emsSensorView->layoutModelObject(modelObject); } +namespace { + +// An InspectorGadget without its own scroll area, so several can be stacked in one scrolling page +class StackedInspectorGadget : public InspectorGadget +{ + public: + StackedInspectorGadget(openstudio::WorkspaceObject& workspaceObj, bool locked) + : InspectorGadget(workspaceObj, 0, nullptr, false, true, true, locked) {} +}; + +} // namespace + +HeatPumpAirToWaterModeInspectorView::HeatPumpAirToWaterModeInspectorView(QWidget* parent) : BaseInspectorView(parent) { + auto* scrollArea = new QScrollArea(); + scrollArea->setWidgetResizable(true); + scrollArea->setFrameStyle(QFrame::NoFrame); + + auto* gadgetsWidget = new QWidget(); + m_gadgetsLayout = new QVBoxLayout(gadgetsWidget); + m_gadgetsLayout->setSpacing(0); + m_gadgetsLayout->setContentsMargins(0, 0, 0, 0); + m_gadgetsLayout->addStretch(); + scrollArea->setWidget(gadgetsWidget); + + m_libraryTabWidget->addTab(scrollArea, ":/images/properties_icon_on.png", ":/images/properties_icon_off.png"); + + m_emsActuatorView = new EMSInspectorView(nullptr, EMSInspectorView::Type::ACTUATOR); + m_libraryTabWidget->addTab(m_emsActuatorView, ":/images/controller_icon_on.png", ":/images/controller_icon_off.png"); + + m_emsSensorView = new EMSInspectorView(nullptr, EMSInspectorView::Type::SENSOR); + m_libraryTabWidget->addTab(m_emsSensorView, ":/images/controller_icon_on.png", ":/images/controller_icon_off.png"); +} + +void HeatPumpAirToWaterModeInspectorView::layoutModelObject(model::ModelObject& modelObject, bool readOnly, bool displayIP, + bool displayAdditionalProps) { + const bool force = true; + const bool recursive = true; + int insertIndex = 0; + + auto addGadget = [&](model::ModelObject object, bool hideChildren) { + auto* gadget = new StackedInspectorGadget(object, readOnly); + // The gadget lays the object out in IP without additional properties when constructed; each change below rebuilds it + if (!displayIP) { + gadget->setUnitSystem(InspectorGadget::SI); + } + if (displayAdditionalProps) { + gadget->setDisplayAdditionalProps(true); + } + if (hideChildren) { + gadget->layoutModelObj(object, force, recursive, readOnly, hideChildren); + } + connect(this, &HeatPumpAirToWaterModeInspectorView::toggleUnitsClicked, gadget, &InspectorGadget::toggleUnitsClicked); + connect(this, &HeatPumpAirToWaterModeInspectorView::toggleDisplayAdditionalPropsClicked, gadget, + &InspectorGadget::toggleDisplayAdditionalPropsClicked); + connect(gadget, &InspectorGadget::workspaceObjectRemoved, this, &BaseInspectorView::workspaceObjectRemoved); + m_gadgetsLayout->insertWidget(insertIndex++, gadget); + }; + + // The wrapper's own children are both operation modes, so hide them there and show the selected mode right + // under the wrapper, followed by the other mode + boost::optional heatPump = heatPumpAirToWaterForMode(modelObject); + if (heatPump) { + addGadget(heatPump.get(), true); + } + addGadget(modelObject, false); + if (heatPump) { + boost::optional otherMode; + if (heatPumpAirToWaterType(modelObject) == HeatPumpAirToWaterType::Heating) { + otherMode = heatPump->coolingOperationMode(); + } else { + otherMode = heatPump->heatingOperationMode(); + } + if (otherMode) { + addGadget(otherMode.get(), false); + } + } + + m_emsActuatorView->layoutModelObject(modelObject); + m_emsSensorView->layoutModelObject(modelObject); +} + NewPlenumDialog::NewPlenumDialog(QWidget* parent) : QDialog(parent) { auto* mainVLayout = new QVBoxLayout(); mainVLayout->setAlignment(Qt::AlignTop); diff --git a/src/openstudio_lib/InspectorView.hpp b/src/openstudio_lib/InspectorView.hpp index b5ddca2a9..04257ec3d 100644 --- a/src/openstudio_lib/InspectorView.hpp +++ b/src/openstudio_lib/InspectorView.hpp @@ -806,6 +806,25 @@ class ScheduleRulesetInspectorView : public BaseInspectorView virtual void layoutModelObject(model::ModelObject& modelObject, bool readOnly, bool displayIP, bool displayAdditionalProps = false) override; }; +// For a HeatPumpAirToWater heating or cooling operation mode: shows the owning HeatPumpAirToWater first, +// then the selected mode, then the other mode, since all three are edited as one piece of equipment +class HeatPumpAirToWaterModeInspectorView : public BaseInspectorView +{ + Q_OBJECT; + + public: + explicit HeatPumpAirToWaterModeInspectorView(QWidget* parent = nullptr); + + virtual ~HeatPumpAirToWaterModeInspectorView() {} + + void layoutModelObject(model::ModelObject& modelObject, bool readOnly, bool displayIP, bool displayAdditionalProps = false) override; + + private: + QVBoxLayout* m_gadgetsLayout; + EMSInspectorView* m_emsActuatorView; + EMSInspectorView* m_emsSensorView; +}; + } // namespace openstudio #endif // OPENSTUDIO_INSPECTORVIEW_HPP diff --git a/src/openstudio_lib/MainRightColumnController.cpp b/src/openstudio_lib/MainRightColumnController.cpp index 9c7ebc286..ab3492332 100644 --- a/src/openstudio_lib/MainRightColumnController.cpp +++ b/src/openstudio_lib/MainRightColumnController.cpp @@ -1047,15 +1047,20 @@ void MainRightColumnController::configureForHVACSystemsSubTab(int subTabID) { myModelList->addModelObjectCategoryPlaceholder(tr("Zone HVAC")); // Central components and coils - myModelList->addModelObjectType(IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Heating, tr("Heat Pump - Water to Water - Heating")); - myModelList->addModelObjectType(IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Cooling, tr("Heat Pump - Water to Water - Cooling")); myModelList->addModelObjectType(IddObjectType::OS_HeatExchanger_FluidToFluid, tr("Heat Exchanger Fluid To Fluid")); myModelList->addModelObjectCategoryPlaceholder(tr("Heat Exchangers")); myModelList->addModelObjectType(IddObjectType::OS_Coil_Heating_Water, tr("Coil Heating Water")); myModelList->addModelObjectType(IddObjectType::OS_Coil_Cooling_Water, tr("Coil Cooling Water")); myModelList->addModelObjectCategoryPlaceholder(tr("Coils")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Heating, tr("Heat Pump - Water to Water - Heating")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Cooling, tr("Heat Pump - Water to Water - Cooling")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_PlantLoop_EIR_Heating, tr("Heat Pump - Plant Loop EIR - Heating")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_PlantLoop_EIR_Cooling, tr("Heat Pump - Plant Loop EIR - Cooling")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_AirToWater_FuelFired_Heating, tr("Heat Pump - Air to Water Fuel Fired - Heating")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_AirToWater_FuelFired_Cooling, tr("Heat Pump - Air to Water Fuel Fired - Cooling")); + myModelList->addModelObjectType(IddObjectType::OS_HeatPump_AirToWater, tr("Heat Pump - Air to Water")); myModelList->addModelObjectType(IddObjectType::OS_CentralHeatPumpSystem, tr("Central Heat Pump System")); - myModelList->addModelObjectCategoryPlaceholder(tr("Heat Pumps")); + myModelList->addModelObjectCategoryPlaceholder(tr("Plant Loop Heat Pumps")); myModelList->addModelObjectType(IddObjectType::OS_Chiller_Electric_EIR, tr("Chiller - Electric EIR")); myModelList->addModelObjectType(IddObjectType::OS_Chiller_Absorption, tr("Chiller - Absorption")); myModelList->addModelObjectType(IddObjectType::OS_Chiller_Absorption_Indirect, tr("Chiller - Indirect Absorption")); @@ -1169,7 +1174,13 @@ void MainRightColumnController::configureForHVACSystemsSubTab(int subTabID) { libraryWidget->addModelObjectCategoryPlaceholder(tr("Humidifiers")); libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Heating, tr("Heat Pump - Water to Water - Heating")); libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Cooling, tr("Heat Pump - Water to Water - Cooling")); - libraryWidget->addModelObjectCategoryPlaceholder(tr("Heat Pumps")); + libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_PlantLoop_EIR_Heating, tr("Heat Pump - Plant Loop EIR - Heating")); + libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_PlantLoop_EIR_Cooling, tr("Heat Pump - Plant Loop EIR - Cooling")); + libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_AirToWater_FuelFired_Heating, tr("Heat Pump - Air to Water Fuel Fired - Heating")); + libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_AirToWater_FuelFired_Cooling, tr("Heat Pump - Air to Water Fuel Fired - Cooling")); + libraryWidget->addModelObjectType(IddObjectType::OS_HeatPump_AirToWater, tr("Heat Pump - Air to Water")); + libraryWidget->addModelObjectType(IddObjectType::OS_CentralHeatPumpSystem, tr("Central Heat Pump System")); + libraryWidget->addModelObjectCategoryPlaceholder(tr("Plant Loop Heat Pumps")); libraryWidget->addModelObjectType(IddObjectType::OS_HeatExchanger_FluidToFluid, tr("Heat Exchanger Fluid To Fluid")); libraryWidget->addModelObjectType(IddObjectType::OS_HeatExchanger_AirToAir_SensibleAndLatent, tr("Heat Exchanger Air To Air Sensible and Latent")); libraryWidget->addModelObjectCategoryPlaceholder(tr("Heat Exchangers")); @@ -1210,8 +1221,6 @@ void MainRightColumnController::configureForHVACSystemsSubTab(int subTabID) { libraryWidget->addModelObjectType(IddObjectType::OS_CoolingTower_SingleSpeed, tr("Cooling Tower Single Speed")); libraryWidget->addModelObjectType(IddObjectType::OS_CoolingTower_VariableSpeed, tr("Cooling Tower Variable Speed")); libraryWidget->addModelObjectCategoryPlaceholder(tr("Cooling Towers")); - libraryWidget->addModelObjectType(IddObjectType::OS_CentralHeatPumpSystem, tr("Central Heat Pump System")); - libraryWidget->addModelObjectCategoryPlaceholder(tr("Central Heat Pump Systems")); libraryWidget->addModelObjectType(IddObjectType::OS_Chiller_Electric_EIR, tr("Chiller - Electric EIR")); libraryWidget->addModelObjectType(IddObjectType::OS_Chiller_Absorption_Indirect, tr("Chiller - Indirect Absorption")); libraryWidget->addModelObjectType(IddObjectType::OS_Chiller_Absorption, tr("Chiller - Absorption")); diff --git a/src/openstudio_lib/images/heatpump_airtowater.png b/src/openstudio_lib/images/heatpump_airtowater.png new file mode 100644 index 000000000..d2d4897f7 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_airtowater.png differ diff --git a/src/openstudio_lib/images/heatpump_airtowater@2x.png b/src/openstudio_lib/images/heatpump_airtowater@2x.png new file mode 100644 index 000000000..499abfb16 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_airtowater@2x.png differ diff --git a/src/openstudio_lib/images/heatpump_airtowater_fuelfired_cooling.png b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_cooling.png new file mode 100644 index 000000000..d993d2353 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_cooling.png differ diff --git a/src/openstudio_lib/images/heatpump_airtowater_fuelfired_cooling@2x.png b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_cooling@2x.png new file mode 100644 index 000000000..5e2f5b0c5 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_cooling@2x.png differ diff --git a/src/openstudio_lib/images/heatpump_airtowater_fuelfired_heating.png b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_heating.png new file mode 100644 index 000000000..3fc1f2cca Binary files /dev/null and b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_heating.png differ diff --git a/src/openstudio_lib/images/heatpump_airtowater_fuelfired_heating@2x.png b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_heating@2x.png new file mode 100644 index 000000000..f4d5c168e Binary files /dev/null and b/src/openstudio_lib/images/heatpump_airtowater_fuelfired_heating@2x.png differ diff --git a/src/openstudio_lib/images/heatpump_plantloop_eir_cooling.png b/src/openstudio_lib/images/heatpump_plantloop_eir_cooling.png new file mode 100644 index 000000000..f05f4dfbe Binary files /dev/null and b/src/openstudio_lib/images/heatpump_plantloop_eir_cooling.png differ diff --git a/src/openstudio_lib/images/heatpump_plantloop_eir_cooling@2x.png b/src/openstudio_lib/images/heatpump_plantloop_eir_cooling@2x.png new file mode 100644 index 000000000..1e4046f75 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_plantloop_eir_cooling@2x.png differ diff --git a/src/openstudio_lib/images/heatpump_plantloop_eir_heating.png b/src/openstudio_lib/images/heatpump_plantloop_eir_heating.png new file mode 100644 index 000000000..ad2679898 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_plantloop_eir_heating.png differ diff --git a/src/openstudio_lib/images/heatpump_plantloop_eir_heating@2x.png b/src/openstudio_lib/images/heatpump_plantloop_eir_heating@2x.png new file mode 100644 index 000000000..8f0d6cd95 Binary files /dev/null and b/src/openstudio_lib/images/heatpump_plantloop_eir_heating@2x.png differ diff --git a/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling.png b/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling.png index 050204897..7ee07bcb4 100644 Binary files a/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling.png and b/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling.png differ diff --git a/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling@2x.png b/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling@2x.png index 7e7f25759..b84d5a529 100644 Binary files a/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling@2x.png and b/src/openstudio_lib/images/heatpump_watertowater_equationfit_cooling@2x.png differ diff --git a/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating.png b/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating.png index 050204897..1dd3b7dc0 100644 Binary files a/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating.png and b/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating.png differ diff --git a/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating@2x.png b/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating@2x.png index 7e7f25759..80694294e 100644 Binary files a/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating@2x.png and b/src/openstudio_lib/images/heatpump_watertowater_equationfit_heating@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_airtowater.png b/src/openstudio_lib/images/mini_icons/heatpump_airtowater.png new file mode 100644 index 000000000..1eb24a07f Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_airtowater.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_airtowater@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_airtowater@2x.png new file mode 100644 index 000000000..c842f0df4 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_airtowater@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_cooling.png b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_cooling.png new file mode 100644 index 000000000..357df7053 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_cooling.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_cooling@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_cooling@2x.png new file mode 100644 index 000000000..da0c702e3 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_cooling@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_heating.png b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_heating.png new file mode 100644 index 000000000..b49d3f54b Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_heating.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_heating@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_heating@2x.png new file mode 100644 index 000000000..bf1670bd4 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_airtowater_fuelfired_heating@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_cooling.png b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_cooling.png new file mode 100644 index 000000000..b23c183e8 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_cooling.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_cooling@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_cooling@2x.png new file mode 100644 index 000000000..f530285c1 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_cooling@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_heating.png b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_heating.png new file mode 100644 index 000000000..00c792877 Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_heating.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_heating@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_heating@2x.png new file mode 100644 index 000000000..3dac1bb1f Binary files /dev/null and b/src/openstudio_lib/images/mini_icons/heatpump_plantloop_eir_heating@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling.png b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling.png index 2623969df..2dad955ad 100644 Binary files a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling.png and b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling@2x.png index d7467d46a..955e1f7ae 100644 Binary files a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling@2x.png and b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_cooling@2x.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating.png b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating.png index 2623969df..60f30ff3a 100644 Binary files a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating.png and b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating.png differ diff --git a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating@2x.png b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating@2x.png index d7467d46a..50fbd11d4 100644 Binary files a/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating@2x.png and b/src/openstudio_lib/images/mini_icons/heatpump_watertowater_equationfit_heating@2x.png differ diff --git a/src/openstudio_lib/images/svg/README.md b/src/openstudio_lib/images/svg/README.md new file mode 100644 index 000000000..785cddd6d --- /dev/null +++ b/src/openstudio_lib/images/svg/README.md @@ -0,0 +1,23 @@ +# Icon sources + +SVG sources for the Plant Loop Heat Pump icons. The app loads the PNGs in `images/` and `images/mini_icons/`, +not these files. + +| SVG | PNGs | +|---|---| +| `.svg` | `images/.png` (100 px) and `images/@2x.png` (200 px) | +| `_mini.svg` | `images/mini_icons/.png` (24 px) and `images/mini_icons/@2x.png` (48 px) | + +The air-to-water wrapper and its heating and cooling modes share `heatpump_airtowater`. + +## Exporting + +`export.html` draws one SVG at a given size on a transparent page. Screenshot it with headless Chrome, once per size: + +```sh +chrome --headless=new --hide-scrollbars --allow-file-access-from-files --default-background-color=00000000 \ + --window-size=200,200 --screenshot=heatpump_airtowater@2x.png \ + "file:////export.html?f=heatpump_airtowater.svg&s=200" +``` + +The f(x) labels on the water-to-water (equation fit) icons use the system's Georgia font. diff --git a/src/openstudio_lib/images/svg/export.html b/src/openstudio_lib/images/svg/export.html new file mode 100644 index 000000000..6e3bffea1 --- /dev/null +++ b/src/openstudio_lib/images/svg/export.html @@ -0,0 +1,2 @@ + + diff --git a/src/openstudio_lib/images/svg/heatpump_airtowater.svg b/src/openstudio_lib/images/svg/heatpump_airtowater.svg new file mode 100644 index 000000000..7059500f1 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_airtowater.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_cooling.svg b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_cooling.svg new file mode 100644 index 000000000..c839a6b0c --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_cooling.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_cooling_mini.svg b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_cooling_mini.svg new file mode 100644 index 000000000..94e8c3714 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_cooling_mini.svg @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_heating.svg b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_heating.svg new file mode 100644 index 000000000..e2194355e --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_heating.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_heating_mini.svg b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_heating_mini.svg new file mode 100644 index 000000000..0fa7b901d --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_airtowater_fuelfired_heating_mini.svg @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_airtowater_mini.svg b/src/openstudio_lib/images/svg/heatpump_airtowater_mini.svg new file mode 100644 index 000000000..7901d5f01 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_airtowater_mini.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_plantloop_eir_cooling.svg b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_cooling.svg new file mode 100644 index 000000000..513dee723 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_cooling.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_plantloop_eir_cooling_mini.svg b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_cooling_mini.svg new file mode 100644 index 000000000..692c86813 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_cooling_mini.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_plantloop_eir_heating.svg b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_heating.svg new file mode 100644 index 000000000..242d2b31e --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_heating.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_plantloop_eir_heating_mini.svg b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_heating_mini.svg new file mode 100644 index 000000000..c56057f2f --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_plantloop_eir_heating_mini.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_cooling.svg b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_cooling.svg new file mode 100644 index 000000000..c7d660bea --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_cooling.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + f(x) \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_cooling_mini.svg b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_cooling_mini.svg new file mode 100644 index 000000000..b8e8cf8d3 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_cooling_mini.svg @@ -0,0 +1,9 @@ + + + + + + + + + f(x) \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_heating.svg b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_heating.svg new file mode 100644 index 000000000..27210f3b6 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_heating.svg @@ -0,0 +1,10 @@ + + + + + + + + + + f(x) \ No newline at end of file diff --git a/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_heating_mini.svg b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_heating_mini.svg new file mode 100644 index 000000000..dbd63ae75 --- /dev/null +++ b/src/openstudio_lib/images/svg/heatpump_watertowater_equationfit_heating_mini.svg @@ -0,0 +1,9 @@ + + + + + + + + + f(x) \ No newline at end of file diff --git a/src/openstudio_lib/openstudio.qrc b/src/openstudio_lib/openstudio.qrc index f4439b9f9..fa5614c9e 100644 --- a/src/openstudio_lib/openstudio.qrc +++ b/src/openstudio_lib/openstudio.qrc @@ -682,6 +682,16 @@ images/heatpump_watertowater_equationfit_cooling@2x.png images/heatpump_watertowater_equationfit_heating.png images/heatpump_watertowater_equationfit_heating@2x.png + images/heatpump_plantloop_eir_heating.png + images/heatpump_plantloop_eir_heating@2x.png + images/heatpump_plantloop_eir_cooling.png + images/heatpump_plantloop_eir_cooling@2x.png + images/heatpump_airtowater_fuelfired_heating.png + images/heatpump_airtowater_fuelfired_heating@2x.png + images/heatpump_airtowater_fuelfired_cooling.png + images/heatpump_airtowater_fuelfired_cooling@2x.png + images/heatpump_airtowater.png + images/heatpump_airtowater@2x.png library/OpenStudioPolicy.xml @@ -1141,6 +1151,16 @@ images/mini_icons/heatpump_watertowater_equationfit_cooling@2x.png images/mini_icons/heatpump_watertowater_equationfit_heating.png images/mini_icons/heatpump_watertowater_equationfit_heating@2x.png + images/mini_icons/heatpump_plantloop_eir_heating.png + images/mini_icons/heatpump_plantloop_eir_heating@2x.png + images/mini_icons/heatpump_plantloop_eir_cooling.png + images/mini_icons/heatpump_plantloop_eir_cooling@2x.png + images/mini_icons/heatpump_airtowater_fuelfired_heating.png + images/mini_icons/heatpump_airtowater_fuelfired_heating@2x.png + images/mini_icons/heatpump_airtowater_fuelfired_cooling.png + images/mini_icons/heatpump_airtowater_fuelfired_cooling@2x.png + images/mini_icons/heatpump_airtowater.png + images/mini_icons/heatpump_airtowater@2x.png library/tid_api.xml library/embeddable_geometry_editor.html diff --git a/src/openstudio_lib/test/IconLibrary_GTest.cpp b/src/openstudio_lib/test/IconLibrary_GTest.cpp index 46f46f3cb..ad65304f4 100644 --- a/src/openstudio_lib/test/IconLibrary_GTest.cpp +++ b/src/openstudio_lib/test/IconLibrary_GTest.cpp @@ -213,3 +213,52 @@ TEST_F(OpenStudioLibFixture, IconLibrary_MiniIcon) { EXPECT_TRUE(pixmap) << "Could not find mini-icon for IddObjectType = '" << iddObjectType.valueName() << "'"; } } + +TEST_F(OpenStudioLibFixture, IconLibrary_PlantLoopHeatPumps) { + // findIcon/findMiniIcon fall back to the Catchall "missing icon" rather than returning null, so + // check the plant loop heat pump types are actually mapped and their images load + const std::vector iddObjectTypes{ + IddObjectType::OS_HeatPump_PlantLoop_EIR_Heating, + IddObjectType::OS_HeatPump_PlantLoop_EIR_Cooling, + IddObjectType::OS_HeatPump_AirToWater_FuelFired_Heating, + IddObjectType::OS_HeatPump_AirToWater_FuelFired_Cooling, + IddObjectType::OS_HeatPump_AirToWater, + IddObjectType::OS_HeatPump_AirToWater_Heating, + IddObjectType::OS_HeatPump_AirToWater_Cooling, + }; + const QPixmap* missingIcon = IconLibrary::Instance().findIcon(IddObjectType(IddObjectType::Catchall).value()); + const QPixmap* missingMiniIcon = IconLibrary::Instance().findMiniIcon(IddObjectType(IddObjectType::Catchall).value()); + + for (const IddObjectType& iddObjectType : iddObjectTypes) { + const QPixmap* icon = IconLibrary::Instance().findIcon(iddObjectType.value()); + EXPECT_NE(missingIcon, icon) << "No icon mapped for IddObjectType = '" << iddObjectType.valueName() << "'"; + EXPECT_FALSE(icon->isNull()) << "Icon failed to load for IddObjectType = '" << iddObjectType.valueName() << "'"; + + const QPixmap* miniIcon = IconLibrary::Instance().findMiniIcon(iddObjectType.value()); + EXPECT_NE(missingMiniIcon, miniIcon) << "No mini-icon mapped for IddObjectType = '" << iddObjectType.valueName() << "'"; + EXPECT_FALSE(miniIcon->isNull()) << "Mini-icon failed to load for IddObjectType = '" << iddObjectType.valueName() << "'"; + } +} + +TEST_F(OpenStudioLibFixture, IconLibrary_PlantLoopHeatPumpsDistinct) { + auto icon = [](IddObjectType t) { return IconLibrary::Instance().findIcon(t.value())->toImage(); }; + auto miniIcon = [](IddObjectType t) { return IconLibrary::Instance().findMiniIcon(t.value())->toImage(); }; + + // HeatPumpAirToWater and its operation modes are one physical unit, so they share one icon + for (const IddObjectType& mode : + {IddObjectType(IddObjectType::OS_HeatPump_AirToWater_Heating), IddObjectType(IddObjectType::OS_HeatPump_AirToWater_Cooling)}) { + EXPECT_EQ(icon(IddObjectType::OS_HeatPump_AirToWater), icon(mode)) << mode.valueName(); + EXPECT_EQ(miniIcon(IddObjectType::OS_HeatPump_AirToWater), miniIcon(mode)) << mode.valueName(); + } + + // Each heating / cooling pair must be told apart + const std::vector> pairs{ + {IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Heating, IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Cooling}, + {IddObjectType::OS_HeatPump_PlantLoop_EIR_Heating, IddObjectType::OS_HeatPump_PlantLoop_EIR_Cooling}, + {IddObjectType::OS_HeatPump_AirToWater_FuelFired_Heating, IddObjectType::OS_HeatPump_AirToWater_FuelFired_Cooling}, + }; + for (const auto& [heating, cooling] : pairs) { + EXPECT_NE(icon(heating), icon(cooling)) << heating.valueName(); + EXPECT_NE(miniIcon(heating), miniIcon(cooling)) << heating.valueName(); + } +} diff --git a/src/shared_gui_components/IconLibrary.cpp b/src/shared_gui_components/IconLibrary.cpp index 59664f894..9cc26a086 100644 --- a/src/shared_gui_components/IconLibrary.cpp +++ b/src/shared_gui_components/IconLibrary.cpp @@ -170,6 +170,19 @@ IconLibrary::IconLibrary() { new QPixmap(":/images/heatpump_watertowater_equationfit_cooling.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Heating).value()] = new QPixmap(":/images/heatpump_watertowater_equationfit_heating.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_PlantLoop_EIR_Cooling).value()] = + new QPixmap(":/images/heatpump_plantloop_eir_cooling.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_PlantLoop_EIR_Heating).value()] = + new QPixmap(":/images/heatpump_plantloop_eir_heating.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_FuelFired_Cooling).value()] = + new QPixmap(":/images/heatpump_airtowater_fuelfired_cooling.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_FuelFired_Heating).value()] = + new QPixmap(":/images/heatpump_airtowater_fuelfired_heating.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater).value()] = new QPixmap(":/images/heatpump_airtowater.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_Cooling).value()] = + new QPixmap(":/images/heatpump_airtowater.png"); + m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_Heating).value()] = + new QPixmap(":/images/heatpump_airtowater.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Humidifier_Steam_Electric).value()] = new QPixmap(":/images/electric_humidifier.png"); m_icons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Humidifier_Steam_Gas).value()] = new QPixmap(":/images/gas_humidifier.png"); @@ -624,6 +637,20 @@ IconLibrary::IconLibrary() { new QPixmap(":/images/mini_icons/heatpump_watertowater_equationfit_cooling.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_WaterToWater_EquationFit_Heating).value()] = new QPixmap(":/images/mini_icons/heatpump_watertowater_equationfit_heating.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_PlantLoop_EIR_Cooling).value()] = + new QPixmap(":/images/mini_icons/heatpump_plantloop_eir_cooling.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_PlantLoop_EIR_Heating).value()] = + new QPixmap(":/images/mini_icons/heatpump_plantloop_eir_heating.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_FuelFired_Cooling).value()] = + new QPixmap(":/images/mini_icons/heatpump_airtowater_fuelfired_cooling.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_FuelFired_Heating).value()] = + new QPixmap(":/images/mini_icons/heatpump_airtowater_fuelfired_heating.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater).value()] = + new QPixmap(":/images/mini_icons/heatpump_airtowater.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_Cooling).value()] = + new QPixmap(":/images/mini_icons/heatpump_airtowater.png"); + m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_HeatPump_AirToWater_Heating).value()] = + new QPixmap(":/images/mini_icons/heatpump_airtowater.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_LoadProfile_Plant).value()] = new QPixmap(":/images/mini_icons/mini_plant_profile.png"); m_miniIcons[openstudio::IddObjectType(openstudio::IddObjectType::OS_Pipe_Adiabatic).value()] = new QPixmap(":/images/mini_icons/pipe.png"); diff --git a/src/utilities/CMakeLists.txt b/src/utilities/CMakeLists.txt index d0b45c13f..dbd68afb8 100644 --- a/src/utilities/CMakeLists.txt +++ b/src/utilities/CMakeLists.txt @@ -12,6 +12,8 @@ set(${target_name}_src RemoteBCLNLR.cpp CloneFixup.hpp CloneFixup.cpp + HeatPumpAirToWaterPlacement.hpp + HeatPumpAirToWaterPlacement.cpp ) # set up groups of source files for Visual Studio @@ -20,6 +22,7 @@ source_group(${target_name} FILES ${target_name}_src) set(${target_name}_test_src test/OpenStudioApplicationPathHelpers_GTest.cpp test/CloneFixup_GTest.cpp + test/HeatPumpAirToWaterPlacement_GTest.cpp ) set(${target_name}_depends diff --git a/src/utilities/HeatPumpAirToWaterPlacement.cpp b/src/utilities/HeatPumpAirToWaterPlacement.cpp new file mode 100644 index 000000000..0ed0f7337 --- /dev/null +++ b/src/utilities/HeatPumpAirToWaterPlacement.cpp @@ -0,0 +1,115 @@ +/*********************************************************************************************************************** +* OpenStudio(R), Copyright (c) OpenStudio Coalition and other contributors. +* See also https://openstudiocoalition.org/about/software_license/ +***********************************************************************************************************************/ + +#include "HeatPumpAirToWaterPlacement.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace openstudio { + +boost::optional heatPumpAirToWaterType(const model::ModelObject& modelObject) { + switch (modelObject.iddObjectType().value()) { + case IddObjectType::OS_HeatPump_AirToWater: + return HeatPumpAirToWaterType::Wrapper; + case IddObjectType::OS_HeatPump_AirToWater_Heating: + return HeatPumpAirToWaterType::Heating; + case IddObjectType::OS_HeatPump_AirToWater_Cooling: + return HeatPumpAirToWaterType::Cooling; + default: + return boost::none; + } +} + +boost::optional suggestedHeatPumpAirToWaterMode(const model::PlantLoop& plantLoop) { + const std::string loopType = plantLoop.sizingPlant().loopType(); + if (istringEqual(loopType, "Heating")) { + return HeatPumpAirToWaterType::Heating; + } + if (istringEqual(loopType, "Cooling")) { + return HeatPumpAirToWaterType::Cooling; + } + return boost::none; +} + +bool addHeatPumpAirToWaterModeToLoop(const model::HeatPumpAirToWater& heatPump, HeatPumpAirToWaterType mode, const model::HVACComponent& target) { + boost::optional modeComponent; + if (mode == HeatPumpAirToWaterType::Heating) { + if (auto heating = heatPump.heatingOperationMode()) { + modeComponent = heating.get(); + } + } else if (mode == HeatPumpAirToWaterType::Cooling) { + if (auto cooling = heatPump.coolingOperationMode()) { + modeComponent = cooling.get(); + } + } + if (!modeComponent) { + return false; + } + + if (auto node = target.optionalCast()) { + return modeComponent->addToNode(node.get()); + } + + if (auto splitter = target.optionalCast()) { + if (auto plant = splitter->plantLoop()) { + if (plant->supplyComponent(splitter->handle())) { + return plant->addSupplyBranchForComponent(modeComponent.get()); + } + } + } + + return false; +} + +boost::optional heatPumpAirToWaterForMode(const model::ModelObject& modelObject) { + const boost::optional type = heatPumpAirToWaterType(modelObject); + if (type == HeatPumpAirToWaterType::Heating) { + return modelObject.cast().heatPumpAirToWater(); + } + if (type == HeatPumpAirToWaterType::Cooling) { + return modelObject.cast().heatPumpAirToWater(); + } + return boost::none; +} + +bool removeHeatPumpAirToWaterModeFromLoop(const model::ModelObject& modelObject) { + boost::optional heatPump = heatPumpAirToWaterForMode(modelObject); + if (!heatPump) { + return false; + } + auto mode = modelObject.cast(); + if (mode.loop()) { + mode.removeFromLoop(); + } + + boost::optional otherMode; + if (heatPumpAirToWaterType(modelObject) == HeatPumpAirToWaterType::Heating) { + if (auto cooling = heatPump->coolingOperationMode()) { + otherMode = cooling.get(); + } + } else if (auto heating = heatPump->heatingOperationMode()) { + otherMode = heating.get(); + } + if (!otherMode || !otherMode->loop()) { + heatPump->remove(); + } + return true; +} + +} // namespace openstudio diff --git a/src/utilities/HeatPumpAirToWaterPlacement.hpp b/src/utilities/HeatPumpAirToWaterPlacement.hpp new file mode 100644 index 000000000..3ca2815ce --- /dev/null +++ b/src/utilities/HeatPumpAirToWaterPlacement.hpp @@ -0,0 +1,55 @@ +/*********************************************************************************************************************** +* OpenStudio(R), Copyright (c) OpenStudio Coalition and other contributors. +* See also https://openstudiocoalition.org/about/software_license/ +***********************************************************************************************************************/ + +#ifndef OSAPP_UTILITIES_HEATPUMPAIRTOWATERPLACEMENT_HPP +#define OSAPP_UTILITIES_HEATPUMPAIRTOWATERPLACEMENT_HPP + +#include +#include +#include + +#include + +namespace openstudio { + +/// HeatPumpAirToWater is a wrapper that cannot itself be placed on a loop (its addToNode() always +/// returns false): its heating and cooling operation modes are the StraightComponents that sit on +/// the hot water and chilled water loops, and the wrapper is only forward translated through them. +/// Dropping a wrapper onto a loop therefore means placing one of its modes there instead. +enum class HeatPumpAirToWaterType +{ + Wrapper, + Heating, + Cooling +}; + +/// Which of the three HeatPumpAirToWater object types `modelObject` is, or none for anything else. +/// Only compares the IddObjectType, so it is cheap enough to call on every object of a loop. +boost::optional heatPumpAirToWaterType(const model::ModelObject& modelObject); + +/// The mode (Heating or Cooling) suggested by the loop's Sizing:Plant loop type, or none for any other +/// loop type. Only a suggestion: a new PlantLoop defaults to "Heating" until its sizing is edited, so an +/// untouched chilled water loop also reports "Heating". +boost::optional suggestedHeatPumpAirToWaterMode(const model::PlantLoop& plantLoop); + +/// Places the wrapper's `mode` (Heating or Cooling) operation mode on `target`, which is either a plant +/// loop supply-side Node or a plant loop supply-side Splitter (adding a new supply branch). Returns false, +/// leaving the model unchanged, if `mode` is Wrapper, the wrapper has no such mode, or the mode cannot be +/// added at `target`. +bool addHeatPumpAirToWaterModeToLoop(const model::HeatPumpAirToWater& heatPump, HeatPumpAirToWaterType mode, const model::HVACComponent& target); + +/// If `modelObject` is a HeatPumpAirToWater heating or cooling operation mode that belongs to a wrapper, +/// returns that wrapper; otherwise none. +boost::optional heatPumpAirToWaterForMode(const model::ModelObject& modelObject); + +/// A mode owned by a wrapper can't be removed on its own (isRemovable() is false), so deleting it from a loop +/// disconnects it instead, leaving the wrapper and its other mode intact. Once neither mode is on a loop, the +/// wrapper is removed together with both modes and their speed data, since the GUI has no other way to delete it. +/// Returns true if `modelObject` is such a mode; false for anything else, which should be removed as usual. +bool removeHeatPumpAirToWaterModeFromLoop(const model::ModelObject& modelObject); + +} // namespace openstudio + +#endif // OSAPP_UTILITIES_HEATPUMPAIRTOWATERPLACEMENT_HPP diff --git a/src/utilities/test/HeatPumpAirToWaterPlacement_GTest.cpp b/src/utilities/test/HeatPumpAirToWaterPlacement_GTest.cpp new file mode 100644 index 000000000..79ebdb0e2 --- /dev/null +++ b/src/utilities/test/HeatPumpAirToWaterPlacement_GTest.cpp @@ -0,0 +1,238 @@ +/*********************************************************************************************************************** +* OpenStudio(R), Copyright (c) OpenStudio Coalition and other contributors. +* See also https://openstudiocoalition.org/about/software_license/ +***********************************************************************************************************************/ + +#include + +#include "../HeatPumpAirToWaterPlacement.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace openstudio; +using namespace openstudio::model; + +namespace { +HeatPumpAirToWater makeHeatPumpWithBothModes(const Model& model) { + HeatPumpAirToWater heatPump(model); + HeatPumpAirToWaterHeating heating(model); + HeatPumpAirToWaterCooling cooling(model); + EXPECT_TRUE(heatPump.setHeatingOperationMode(heating)); + EXPECT_TRUE(heatPump.setCoolingOperationMode(cooling)); + return heatPump; +} +} // namespace + +TEST(HeatPumpAirToWaterPlacement, SuggestedModeFollowsSizingPlantLoopType) { + Model model; + PlantLoop plantLoop(model); + + // A new PlantLoop's Sizing:Plant defaults to "Heating" + auto suggested = suggestedHeatPumpAirToWaterMode(plantLoop); + ASSERT_TRUE(suggested); + EXPECT_EQ(HeatPumpAirToWaterType::Heating, suggested.get()); + + ASSERT_TRUE(plantLoop.sizingPlant().setLoopType("Cooling")); + suggested = suggestedHeatPumpAirToWaterMode(plantLoop); + ASSERT_TRUE(suggested); + EXPECT_EQ(HeatPumpAirToWaterType::Cooling, suggested.get()); + + ASSERT_TRUE(plantLoop.sizingPlant().setLoopType("Condenser")); + EXPECT_FALSE(suggestedHeatPumpAirToWaterMode(plantLoop)); +} + +TEST(HeatPumpAirToWaterPlacement, PlacesBothModesOfOneWrapperOnSeparateLoops) { + Model model; + PlantLoop hotWaterLoop(model); + PlantLoop chilledWaterLoop(model); + ASSERT_TRUE(chilledWaterLoop.sizingPlant().setLoopType("Cooling")); + + // Mirrors a library drop: the library wrapper is cloned, which clones both of its modes + HeatPumpAirToWater libraryHeatPump = makeHeatPumpWithBothModes(model); + auto heatPump = libraryHeatPump.clone(model).cast(); + ASSERT_TRUE(heatPump.heatingOperationMode()); + ASSERT_TRUE(heatPump.coolingOperationMode()); + EXPECT_NE(libraryHeatPump.heatingOperationMode()->handle(), heatPump.heatingOperationMode()->handle()); + + Node hotWaterNode = hotWaterLoop.supplyOutletNode(); + EXPECT_TRUE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Heating, hotWaterNode)); + ASSERT_TRUE(heatPump.heatingLoop()); + EXPECT_EQ(hotWaterLoop.handle(), heatPump.heatingLoop()->handle()); + EXPECT_FALSE(heatPump.coolingLoop()); + + Splitter chilledWaterSplitter = chilledWaterLoop.supplySplitter(); + EXPECT_TRUE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Cooling, chilledWaterSplitter)); + ASSERT_TRUE(heatPump.coolingLoop()); + EXPECT_EQ(chilledWaterLoop.handle(), heatPump.coolingLoop()->handle()); + + // Both modes still belong to the same wrapper + EXPECT_EQ(heatPump.handle(), heatPump.heatingOperationMode()->heatPumpAirToWater()->handle()); + EXPECT_EQ(heatPump.handle(), heatPump.coolingOperationMode()->heatPumpAirToWater()->handle()); + + // The library wrapper's own modes were not placed + EXPECT_FALSE(libraryHeatPump.heatingLoop()); + EXPECT_FALSE(libraryHeatPump.coolingLoop()); +} + +TEST(HeatPumpAirToWaterPlacement, MissingModeIsRejected) { + Model model; + PlantLoop plantLoop(model); + HeatPumpAirToWater heatPump(model); + HeatPumpAirToWaterHeating heating(model); + ASSERT_TRUE(heatPump.setHeatingOperationMode(heating)); + + Node node = plantLoop.supplyOutletNode(); + const auto supplyComponentCount = plantLoop.supplyComponents().size(); + EXPECT_FALSE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Cooling, node)); + EXPECT_EQ(supplyComponentCount, plantLoop.supplyComponents().size()); + EXPECT_FALSE(heatPump.coolingLoop()); +} + +TEST(HeatPumpAirToWaterPlacement, DemandSideIsRejected) { + Model model; + PlantLoop plantLoop(model); + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + + Node demandNode = plantLoop.demandInletNode(); + EXPECT_FALSE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Heating, demandNode)); + + Splitter demandSplitter = plantLoop.demandSplitter(); + EXPECT_FALSE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Heating, demandSplitter)); + + EXPECT_FALSE(heatPump.heatingLoop()); +} + +TEST(HeatPumpAirToWaterPlacement, NonNodeNonSplitterTargetIsRejected) { + Model model; + PlantLoop plantLoop(model); + BoilerHotWater boiler(model); + Node node = plantLoop.supplyOutletNode(); + ASSERT_TRUE(boiler.addToNode(node)); + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + + EXPECT_FALSE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Heating, boiler)); + EXPECT_FALSE(heatPump.heatingLoop()); +} + +TEST(HeatPumpAirToWaterPlacement, ModeFindsItsWrapper) { + Model model; + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + + auto heatingWrapper = heatPumpAirToWaterForMode(heatPump.heatingOperationMode().get()); + ASSERT_TRUE(heatingWrapper); + EXPECT_EQ(heatPump.handle(), heatingWrapper->handle()); + + auto coolingWrapper = heatPumpAirToWaterForMode(heatPump.coolingOperationMode().get()); + ASSERT_TRUE(coolingWrapper); + EXPECT_EQ(heatPump.handle(), coolingWrapper->handle()); + + // The wrapper itself, an orphaned mode, and unrelated objects have no wrapper + EXPECT_FALSE(heatPumpAirToWaterForMode(heatPump)); + HeatPumpAirToWaterHeating orphan(model); + EXPECT_FALSE(heatPumpAirToWaterForMode(orphan)); + BoilerHotWater boiler(model); + EXPECT_FALSE(heatPumpAirToWaterForMode(boiler)); +} + +TEST(HeatPumpAirToWaterPlacement, RemovingFirstModeDisconnectsItFromItsLoopOnly) { + Model model; + PlantLoop hotWaterLoop(model); + PlantLoop chilledWaterLoop(model); + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + HeatPumpAirToWaterHeating heating = heatPump.heatingOperationMode().get(); + HeatPumpAirToWaterCooling cooling = heatPump.coolingOperationMode().get(); + ASSERT_TRUE(hotWaterLoop.addSupplyBranchForComponent(heating)); + ASSERT_TRUE(chilledWaterLoop.addSupplyBranchForComponent(cooling)); + + EXPECT_TRUE(removeHeatPumpAirToWaterModeFromLoop(heating)); + EXPECT_FALSE(heating.plantLoop()); + EXPECT_TRUE(cooling.plantLoop()); + // The mode stays in the model, still attached to its wrapper + ASSERT_TRUE(heatPump.heatingOperationMode()); + EXPECT_EQ(heating.handle(), heatPump.heatingOperationMode()->handle()); + + // Anything else is left for the normal removal + BoilerHotWater boiler(model); + EXPECT_FALSE(removeHeatPumpAirToWaterModeFromLoop(boiler)); + EXPECT_FALSE(removeHeatPumpAirToWaterModeFromLoop(heatPump)); + EXPECT_FALSE(boiler.handle().isNull()); + EXPECT_FALSE(heatPump.handle().isNull()); +} + +TEST(HeatPumpAirToWaterPlacement, RemovingLastModeOnALoopRemovesTheWholeUnit) { + Model model; + PlantLoop hotWaterLoop(model); + PlantLoop chilledWaterLoop(model); + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + HeatPumpAirToWaterHeating heating = heatPump.heatingOperationMode().get(); + HeatPumpAirToWaterCooling cooling = heatPump.coolingOperationMode().get(); + ASSERT_TRUE(heating.addSpeed(HeatPumpAirToWaterHeatingSpeedData(model))); + ASSERT_TRUE(hotWaterLoop.addSupplyBranchForComponent(heating)); + ASSERT_TRUE(chilledWaterLoop.addSupplyBranchForComponent(cooling)); + + EXPECT_TRUE(removeHeatPumpAirToWaterModeFromLoop(cooling)); + EXPECT_FALSE(heatPump.handle().isNull()); + EXPECT_TRUE(removeHeatPumpAirToWaterModeFromLoop(heating)); + + EXPECT_TRUE(heatPump.handle().isNull()); + EXPECT_TRUE(heating.handle().isNull()); + EXPECT_TRUE(cooling.handle().isNull()); + EXPECT_TRUE(model.getConcreteModelObjects().empty()); + EXPECT_FALSE(hotWaterLoop.handle().isNull()); + EXPECT_FALSE(chilledWaterLoop.handle().isNull()); +} + +TEST(HeatPumpAirToWaterPlacement, RemovingOnlyPlacedModeRemovesTheWholeUnit) { + Model model; + PlantLoop hotWaterLoop(model); + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + HeatPumpAirToWaterHeating heating = heatPump.heatingOperationMode().get(); + ASSERT_TRUE(hotWaterLoop.addSupplyBranchForComponent(heating)); + + EXPECT_TRUE(removeHeatPumpAirToWaterModeFromLoop(heating)); + EXPECT_TRUE(heatPump.handle().isNull()); + EXPECT_TRUE(model.getConcreteModelObjects().empty()); +} + +TEST(HeatPumpAirToWaterPlacement, TypeIsFoundFromIddObjectType) { + Model model; + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + HeatPumpAirToWaterHeating orphan(model); + BoilerHotWater boiler(model); + + EXPECT_TRUE(heatPumpAirToWaterType(heatPump) == HeatPumpAirToWaterType::Wrapper); + EXPECT_TRUE(heatPumpAirToWaterType(heatPump.heatingOperationMode().get()) == HeatPumpAirToWaterType::Heating); + EXPECT_TRUE(heatPumpAirToWaterType(heatPump.coolingOperationMode().get()) == HeatPumpAirToWaterType::Cooling); + // The type doesn't depend on the mode belonging to a wrapper + EXPECT_TRUE(heatPumpAirToWaterType(orphan) == HeatPumpAirToWaterType::Heating); + EXPECT_FALSE(heatPumpAirToWaterType(boiler)); +} + +TEST(HeatPumpAirToWaterPlacement, WrapperIsNotAModeToPlace) { + Model model; + PlantLoop plantLoop(model); + HeatPumpAirToWater heatPump = makeHeatPumpWithBothModes(model); + + EXPECT_FALSE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Wrapper, plantLoop.supplyOutletNode())); + EXPECT_FALSE(addHeatPumpAirToWaterModeToLoop(heatPump, HeatPumpAirToWaterType::Wrapper, plantLoop.supplySplitter())); + EXPECT_FALSE(heatPump.heatingLoop()); + EXPECT_FALSE(heatPump.coolingLoop()); +} diff --git a/translations/OpenStudioApp_ar.ts b/translations/OpenStudioApp_ar.ts index 264da2100..a9be840c9 100644 --- a/translations/OpenStudioApp_ar.ts +++ b/translations/OpenStudioApp_ar.ts @@ -23336,6 +23336,34 @@ Story لا شيء + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + مضخة حرارية هواء إلى ماء + + + + Which operation mode of this air to water heat pump should be placed on this loop? + أي وضع تشغيل لهذه المضخة الحرارية هواء إلى ماء يجب وضعه على هذه الدائرة؟ + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + يمكن وضع الوضع الآخر على دائرة محطة أخرى لاحقًا بسحبه من علامة التبويب نموذجي. + + + + Heating + التدفئة + + + + Cooling + تبريد + + openstudio::HVACPlantLoopControlsView @@ -25271,10 +25299,10 @@ If you would like to see the OpenStudioApplication translated in your language o ملفات التبريد والتدفئة - - - Heat Pumps - مضخات الحرارة + + + Plant Loop Heat Pumps + مضخات حرارية لدوائر المحطة @@ -25398,11 +25426,6 @@ If you would like to see the OpenStudioApplication translated in your language o Cooling Towers أبراج التبريد - - - Central Heat Pump Systems - أنظمة مضخات الحرارة المركزية - Boilers @@ -25575,6 +25598,36 @@ If you would like to see the OpenStudioApplication translated in your language o Heat Pump - Water to Water - Cooling مضخة حرارية - ماء إلى ماء - تبريد + + + + Heat Pump - Plant Loop EIR - Heating + مضخة حرارية - دائرة المحطة EIR - تدفئة + + + + + Heat Pump - Plant Loop EIR - Cooling + مضخة حرارية - دائرة المحطة EIR - تبريد + + + + + Heat Pump - Air to Water Fuel Fired - Heating + مضخة حرارية - هواء إلى ماء تعمل بالوقود - تدفئة + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + مضخة حرارية - هواء إلى ماء تعمل بالوقود - تبريد + + + + + Heat Pump - Air to Water + مضخة حرارية - هواء إلى ماء + diff --git a/translations/OpenStudioApp_ca.ts b/translations/OpenStudioApp_ca.ts index f661de56d..75c0c44de 100644 --- a/translations/OpenStudioApp_ca.ts +++ b/translations/OpenStudioApp_ca.ts @@ -23368,6 +23368,34 @@ Planta Cap + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Bomba de Calor Aire a Aigua + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Quin mode de funcionament d'aquesta bomba de calor aire a aigua s'ha de col·locar en aquest circuit? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + L'altre mode es pot col·locar més tard en un altre circuit de planta arrossegant-lo des de la pestanya El Meu Model. + + + + Heating + Calefacció + + + + Cooling + Refrigeració + + openstudio::HVACPlantLoopControlsView @@ -25343,10 +25371,10 @@ Si voleu que OpeStudioApplication estigui a la vostra llengua, esperem la vostra Serpentins - - - Heat Pumps - Bombes de Calor + + + Plant Loop Heat Pumps + Bombes de Calor de Circuit de Planta @@ -25470,11 +25498,6 @@ Si voleu que OpeStudioApplication estigui a la vostra llengua, esperem la vostra Cooling Towers Torres de refrigeració - - - Central Heat Pump Systems - Sistemes de Bomba de Calor Central - Boilers @@ -25647,6 +25670,36 @@ Si voleu que OpeStudioApplication estigui a la vostra llengua, esperem la vostra Heat Pump - Water to Water - Cooling Bomba de calor - Aigua a Aigua - Refrigeració + + + + Heat Pump - Plant Loop EIR - Heating + Bomba de Calor - Circuit de Planta EIR - Calefacció + + + + + Heat Pump - Plant Loop EIR - Cooling + Bomba de Calor - Circuit de Planta EIR - Refrigeració + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Bomba de Calor - Aire a Aigua de Combustible - Calefacció + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Bomba de Calor - Aire a Aigua de Combustible - Refrigeració + + + + + Heat Pump - Air to Water + Bomba de Calor - Aire a Aigua + diff --git a/translations/OpenStudioApp_de.ts b/translations/OpenStudioApp_de.ts index 988f47116..5c84e207e 100644 --- a/translations/OpenStudioApp_de.ts +++ b/translations/OpenStudioApp_de.ts @@ -23332,6 +23332,34 @@ Story Keine + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Luft-Wasser-Wärmepumpe + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Welche Betriebsart dieser Luft-Wasser-Wärmepumpe soll in diesen Kreis eingefügt werden? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + Die andere Betriebsart kann später in einen anderen Anlagenkreis eingefügt werden, indem Sie sie aus dem Reiter Mein Modell ziehen. + + + + Heating + Heizung + + + + Cooling + Kühlung + + openstudio::HVACPlantLoopControlsView @@ -25263,10 +25291,10 @@ Wenn Sie möchten, dass die OpenStudio-Applikation in die Sprache Ihrer Wahl üb Wärmepumpen - - - Heat Pumps - Wärmepumpen + + + Plant Loop Heat Pumps + Wärmepumpen für Anlagenkreise @@ -25390,11 +25418,6 @@ Wenn Sie möchten, dass die OpenStudio-Applikation in die Sprache Ihrer Wahl üb Cooling Towers Rückkühlwerke - - - Central Heat Pump Systems - Zentrale Wärmepumpensysteme - Boilers @@ -25567,6 +25590,36 @@ Wenn Sie möchten, dass die OpenStudio-Applikation in die Sprache Ihrer Wahl üb Heat Pump - Water to Water - Cooling Wärmepumpe - Wasser zu Wasser - Kühlung + + + + Heat Pump - Plant Loop EIR - Heating + Wärmepumpe - Anlagenkreis EIR - Heizung + + + + + Heat Pump - Plant Loop EIR - Cooling + Wärmepumpe - Anlagenkreis EIR - Kühlung + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Wärmepumpe - Luft-Wasser brennstoffbetrieben - Heizung + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Wärmepumpe - Luft-Wasser brennstoffbetrieben - Kühlung + + + + + Heat Pump - Air to Water + Wärmepumpe - Luft-Wasser + diff --git a/translations/OpenStudioApp_el.ts b/translations/OpenStudioApp_el.ts index 4318595ce..72fc62d07 100644 --- a/translations/OpenStudioApp_el.ts +++ b/translations/OpenStudioApp_el.ts @@ -23307,6 +23307,34 @@ Story Κανένα + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Αντλία Θερμότητας Αέρα-Νερού + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Ποια λειτουργία αυτής της αντλίας θερμότητας αέρα-νερού να τοποθετηθεί σε αυτό το κύκλωμα; + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + Η άλλη λειτουργία μπορεί να τοποθετηθεί αργότερα σε άλλο κύκλωμα εγκατάστασης σύροντάς την από την καρτέλα Το Μοντέλό μου. + + + + Heating + Θέρμανση + + + + Cooling + Ψύξη + + openstudio::HVACPlantLoopControlsView @@ -25238,10 +25266,10 @@ If you would like to see the OpenStudioApplication translated in your language o Στοιχεία Ανταλλαγής Θερμότητας - - - Heat Pumps - Αντλίες Θερμότητας + + + Plant Loop Heat Pumps + Αντλίες Θερμότητας Κυκλώματος Εγκατάστασης @@ -25365,11 +25393,6 @@ If you would like to see the OpenStudioApplication translated in your language o Cooling Towers Πύργοι Ψύξης - - - Central Heat Pump Systems - Κεντρικά Συστήματα Αντλιών Θερμότητας - Boilers @@ -25542,6 +25565,36 @@ If you would like to see the OpenStudioApplication translated in your language o Heat Pump - Water to Water - Cooling Αντλία Θερμότητας - Νερό σε Νερό - Ψύξη + + + + Heat Pump - Plant Loop EIR - Heating + Αντλία Θερμότητας - Κύκλωμα Εγκατάστασης EIR - Θέρμανση + + + + + Heat Pump - Plant Loop EIR - Cooling + Αντλία Θερμότητας - Κύκλωμα Εγκατάστασης EIR - Ψύξη + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Αντλία Θερμότητας - Αέρα-Νερού με Καύσιμο - Θέρμανση + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Αντλία Θερμότητας - Αέρα-Νερού με Καύσιμο - Ψύξη + + + + + Heat Pump - Air to Water + Αντλία Θερμότητας - Αέρα-Νερού + diff --git a/translations/OpenStudioApp_es.ts b/translations/OpenStudioApp_es.ts index 76a679f47..fc2103fda 100644 --- a/translations/OpenStudioApp_es.ts +++ b/translations/OpenStudioApp_es.ts @@ -23325,6 +23325,34 @@ Story Ninguno + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Bomba de Calor Aire a Agua + + + + Which operation mode of this air to water heat pump should be placed on this loop? + ¿Qué modo de operación de esta bomba de calor aire a agua debe colocarse en este circuito? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + El otro modo puede colocarse más tarde en otro circuito de planta arrastrándolo desde la pestaña Mi Modelo. + + + + Heating + Calefacción + + + + Cooling + Refrigeración + + openstudio::HVACPlantLoopControlsView @@ -25256,10 +25284,10 @@ Si le gustaría ver la AplicaciónOpenStudio traducido a algun otro lenguaje, le Serpentines - - - Heat Pumps - Bombas de Calor + + + Plant Loop Heat Pumps + Bombas de Calor de Circuito de Planta @@ -25383,11 +25411,6 @@ Si le gustaría ver la AplicaciónOpenStudio traducido a algun otro lenguaje, le Cooling Towers Torres de Enfriamiento - - - Central Heat Pump Systems - Sistemas de Bomba de Calor Centralizada - Boilers @@ -25560,6 +25583,36 @@ Si le gustaría ver la AplicaciónOpenStudio traducido a algun otro lenguaje, le Heat Pump - Water to Water - Cooling Bomba de Calor - Agua a Agua - Enfriamiento + + + + Heat Pump - Plant Loop EIR - Heating + Bomba de Calor - Circuito de Planta EIR - Calefacción + + + + + Heat Pump - Plant Loop EIR - Cooling + Bomba de Calor - Circuito de Planta EIR - Enfriamiento + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Bomba de Calor - Aire a Agua a Combustible - Calefacción + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Bomba de Calor - Aire a Agua a Combustible - Enfriamiento + + + + + Heat Pump - Air to Water + Bomba de Calor - Aire a Agua + diff --git a/translations/OpenStudioApp_fa.ts b/translations/OpenStudioApp_fa.ts index acb7bffdf..f1f69d22b 100644 --- a/translations/OpenStudioApp_fa.ts +++ b/translations/OpenStudioApp_fa.ts @@ -23298,6 +23298,34 @@ Story هیچ‌کدام + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + پمپ حرارتی هوا به آب + + + + Which operation mode of this air to water heat pump should be placed on this loop? + کدام حالت کاری این پمپ حرارتی هوا به آب باید روی این حلقه قرار گیرد؟ + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + حالت دیگر را می‌توان بعداً با کشیدن آن از زبانه مدل من روی حلقه تاسیسات دیگری قرار داد. + + + + Heating + گرمایش + + + + Cooling + سرمایش + + openstudio::HVACPlantLoopControlsView @@ -25229,10 +25257,10 @@ If you would like to see the OpenStudioApplication translated in your language o سیم‌پیچ‌ها - - - Heat Pumps - پمپ‌های حرارتی + + + Plant Loop Heat Pumps + پمپ‌های حرارتی حلقه تاسیسات @@ -25356,11 +25384,6 @@ If you would like to see the OpenStudioApplication translated in your language o Cooling Towers برج‌های خنک‌کننده - - - Central Heat Pump Systems - سیستم‌های پمپ حرارتی مرکزی - Boilers @@ -25533,6 +25556,36 @@ If you would like to see the OpenStudioApplication translated in your language o Heat Pump - Water to Water - Cooling پمپ حرارتی - آب به آب - خنک‌کننده + + + + Heat Pump - Plant Loop EIR - Heating + پمپ حرارتی - حلقه تاسیسات EIR - گرمایش + + + + + Heat Pump - Plant Loop EIR - Cooling + پمپ حرارتی - حلقه تاسیسات EIR - سرمایش + + + + + Heat Pump - Air to Water Fuel Fired - Heating + پمپ حرارتی - هوا به آب سوختی - گرمایش + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + پمپ حرارتی - هوا به آب سوختی - سرمایش + + + + + Heat Pump - Air to Water + پمپ حرارتی - هوا به آب + diff --git a/translations/OpenStudioApp_fr.ts b/translations/OpenStudioApp_fr.ts index d02b61543..d4265684b 100644 --- a/translations/OpenStudioApp_fr.ts +++ b/translations/OpenStudioApp_fr.ts @@ -23313,6 +23313,34 @@ Story Aucun + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Pompe à chaleur air-eau + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Quel mode de fonctionnement de cette pompe à chaleur air-eau faut-il placer sur cette boucle ? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + L'autre mode peut être placé plus tard sur une autre boucle de production en le faisant glisser depuis l'onglet Mon modèle. + + + + Heating + Chauffage + + + + Cooling + Refroidissement + + openstudio::HVACPlantLoopControlsView @@ -25248,10 +25276,10 @@ Si vous voulez voir l'Application OpenStudio traduite dans la langue de vot Échangeurs thermiques - - - Heat Pumps - Pompes à chaleur + + + Plant Loop Heat Pumps + Pompes à chaleur de boucle de production @@ -25375,11 +25403,6 @@ Si vous voulez voir l'Application OpenStudio traduite dans la langue de vot Cooling Towers Tours de refroidissement - - - Central Heat Pump Systems - Systèmes de Pompes à Chaleur Centralisées - Boilers @@ -25552,6 +25575,36 @@ Si vous voulez voir l'Application OpenStudio traduite dans la langue de vot Heat Pump - Water to Water - Cooling Pompe à chaleur - Eau vers eau - Refroidissement + + + + Heat Pump - Plant Loop EIR - Heating + Pompe à chaleur - Boucle de production EIR - Chauffage + + + + + Heat Pump - Plant Loop EIR - Cooling + Pompe à chaleur - Boucle de production EIR - Refroidissement + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Pompe à chaleur - Air vers eau à combustible - Chauffage + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Pompe à chaleur - Air vers eau à combustible - Refroidissement + + + + + Heat Pump - Air to Water + Pompe à chaleur - Air vers eau + diff --git a/translations/OpenStudioApp_he.ts b/translations/OpenStudioApp_he.ts index 43b751856..406e99e6f 100644 --- a/translations/OpenStudioApp_he.ts +++ b/translations/OpenStudioApp_he.ts @@ -23421,6 +23421,34 @@ Story ללא + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + משאבת חום אוויר למים + + + + Which operation mode of this air to water heat pump should be placed on this loop? + איזה מצב הפעלה של משאבת חום אוויר למים זו יש למקם בלולאה זו? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + ניתן למקם את המצב השני מאוחר יותר בלולאת מתקן אחרת על ידי גרירתו מהלשונית המודל שלי. + + + + Heating + חימום + + + + Cooling + קירור + + openstudio::HVACPlantLoopControlsView @@ -25352,10 +25380,10 @@ If you would like to see the OpenStudioApplication translated in your language o סלילים - - - Heat Pumps - משאבות חום + + + Plant Loop Heat Pumps + משאבות חום ללולאת מתקן @@ -25479,11 +25507,6 @@ If you would like to see the OpenStudioApplication translated in your language o Cooling Towers מגדלי קירור - - - Central Heat Pump Systems - מערכות משאבת חום מרכזיות - Boilers @@ -25658,6 +25681,36 @@ If you would like to see the OpenStudioApplication translated in your language o Heat Pump - Water to Water - Cooling משאבת חום - מים לממים - קירור + + + + Heat Pump - Plant Loop EIR - Heating + משאבת חום - לולאת מתקן EIR - חימום + + + + + Heat Pump - Plant Loop EIR - Cooling + משאבת חום - לולאת מתקן EIR - קירור + + + + + Heat Pump - Air to Water Fuel Fired - Heating + משאבת חום - אוויר למים מונעת דלק - חימום + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + משאבת חום - אוויר למים מונעת דלק - קירור + + + + + Heat Pump - Air to Water + משאבת חום - אוויר למים + diff --git a/translations/OpenStudioApp_hi.ts b/translations/OpenStudioApp_hi.ts index 3ecbcb8a1..e96141bf3 100644 --- a/translations/OpenStudioApp_hi.ts +++ b/translations/OpenStudioApp_hi.ts @@ -23755,6 +23755,34 @@ Story कोई नहीं + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + वायु से जल हीट पंप + + + + Which operation mode of this air to water heat pump should be placed on this loop? + इस वायु से जल हीट पंप का कौन सा संचालन मोड इस लूप पर रखा जाना चाहिए? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + दूसरा मोड बाद में मेरा मॉडल टैब से खींचकर किसी अन्य प्लांट लूप पर रखा जा सकता है। + + + + Heating + हीटिंग + + + + Cooling + शीतलन + + openstudio::HVACPlantLoopControlsView @@ -25712,10 +25740,10 @@ or more descriptively: कॉइल्स - - - Heat Pumps - ताप पंप + + + Plant Loop Heat Pumps + प्लांट लूप हीट पंप @@ -25839,11 +25867,6 @@ or more descriptively: Cooling Towers शीतलन टावर - - - Central Heat Pump Systems - केंद्रीय ताप पंप प्रणालियाँ - Boilers @@ -26028,6 +26051,36 @@ However, if a more concise label is preferred for UI display: Heat Pump - Water to Water - Cooling हीट पंप - जल से जल - शीतलन + + + + Heat Pump - Plant Loop EIR - Heating + हीट पंप - प्लांट लूप EIR - हीटिंग + + + + + Heat Pump - Plant Loop EIR - Cooling + हीट पंप - प्लांट लूप EIR - शीतलन + + + + + Heat Pump - Air to Water Fuel Fired - Heating + हीट पंप - वायु से जल ईंधन चालित - हीटिंग + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + हीट पंप - वायु से जल ईंधन चालित - शीतलन + + + + + Heat Pump - Air to Water + हीट पंप - वायु से जल + diff --git a/translations/OpenStudioApp_id.ts b/translations/OpenStudioApp_id.ts index f4ccc10dd..5eaa3f9cf 100644 --- a/translations/OpenStudioApp_id.ts +++ b/translations/OpenStudioApp_id.ts @@ -23352,6 +23352,34 @@ Story Tidak ada + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Pompa Panas Udara ke Air + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Mode operasi mana dari pompa panas udara ke air ini yang harus ditempatkan pada sirkuit ini? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + Mode lainnya dapat ditempatkan nanti pada sirkuit plant lain dengan menyeretnya dari tab Model Saya. + + + + Heating + Pemanasan + + + + Cooling + Pendinginan + + openstudio::HVACPlantLoopControlsView @@ -25285,10 +25313,10 @@ Jika Anda ingin melihat OpenStudio Application diterjemahkan ke bahasa pilihan A Kumparan - - - Heat Pumps - Pompa Panas + + + Plant Loop Heat Pumps + Pompa Panas Sirkuit Plant @@ -25412,11 +25440,6 @@ Jika Anda ingin melihat OpenStudio Application diterjemahkan ke bahasa pilihan A Cooling Towers Menara Pendingin - - - Central Heat Pump Systems - Sistem Pompa Panas Terpusat - Boilers @@ -25589,6 +25612,36 @@ Jika Anda ingin melihat OpenStudio Application diterjemahkan ke bahasa pilihan A Heat Pump - Water to Water - Cooling Pompa Panas - Air ke Air - Pendinginan + + + + Heat Pump - Plant Loop EIR - Heating + Pompa Panas - Sirkuit Plant EIR - Pemanasan + + + + + Heat Pump - Plant Loop EIR - Cooling + Pompa Panas - Sirkuit Plant EIR - Pendinginan + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Pompa Panas - Udara ke Air Berbahan Bakar - Pemanasan + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Pompa Panas - Udara ke Air Berbahan Bakar - Pendinginan + + + + + Heat Pump - Air to Water + Pompa Panas - Udara ke Air + diff --git a/translations/OpenStudioApp_it.ts b/translations/OpenStudioApp_it.ts index 67f13e956..b161c20ad 100644 --- a/translations/OpenStudioApp_it.ts +++ b/translations/OpenStudioApp_it.ts @@ -23304,6 +23304,34 @@ Story Nessuno + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Pompa di Calore Aria-Acqua + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Quale modalità di funzionamento di questa pompa di calore aria-acqua deve essere inserita in questo circuito? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + L'altra modalità può essere inserita in seguito in un altro circuito idronico trascinandola dalla scheda Il mio modello. + + + + Heating + Riscaldamento + + + + Cooling + Raffreddamento + + openstudio::HVACPlantLoopControlsView @@ -25235,10 +25263,10 @@ Se vuoi vedere OpenStudioApplication tradotto nel tuo linguaggio preferito, appr Serpentini - - - Heat Pumps - Pompe di Calore + + + Plant Loop Heat Pumps + Pompe di Calore per Circuito Idronico @@ -25362,11 +25390,6 @@ Se vuoi vedere OpenStudioApplication tradotto nel tuo linguaggio preferito, appr Cooling Towers Torri di Raffreddamento - - - Central Heat Pump Systems - Sistemi di Pompe di Calore Centralizzati - Boilers @@ -25539,6 +25562,36 @@ Se vuoi vedere OpenStudioApplication tradotto nel tuo linguaggio preferito, appr Heat Pump - Water to Water - Cooling Pompa di Calore - Acqua-Acqua - Raffreddamento + + + + Heat Pump - Plant Loop EIR - Heating + Pompa di Calore - Circuito Idronico EIR - Riscaldamento + + + + + Heat Pump - Plant Loop EIR - Cooling + Pompa di Calore - Circuito Idronico EIR - Raffreddamento + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Pompa di Calore - Aria-Acqua a Combustibile - Riscaldamento + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Pompa di Calore - Aria-Acqua a Combustibile - Raffreddamento + + + + + Heat Pump - Air to Water + Pompa di Calore - Aria-Acqua + diff --git a/translations/OpenStudioApp_ja.ts b/translations/OpenStudioApp_ja.ts index 3156c4ef3..c44c2294d 100644 --- a/translations/OpenStudioApp_ja.ts +++ b/translations/OpenStudioApp_ja.ts @@ -23302,6 +23302,34 @@ Story なし + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + 空気対水ヒートポンプ + + + + Which operation mode of this air to water heat pump should be placed on this loop? + この空気対水ヒートポンプのどの運転モードをこのループに配置しますか? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + もう一方のモードは、後で「マイモデル」タブからドラッグして別のプラントループに配置できます。 + + + + Heating + 暖房 + + + + Cooling + 冷房 + + openstudio::HVACPlantLoopControlsView @@ -25247,10 +25275,10 @@ OpenStudio の日本語ローカライゼーションでは **無熱量材料** コイル - - - Heat Pumps - ヒートポンプ + + + Plant Loop Heat Pumps + プラントループ ヒートポンプ @@ -25374,11 +25402,6 @@ OpenStudio の日本語ローカライゼーションでは **無熱量材料** Cooling Towers 冷却塔 - - - Central Heat Pump Systems - 中央ヒートポンプシステム - Boilers @@ -25551,6 +25574,36 @@ OpenStudio の日本語ローカライゼーションでは **無熱量材料** Heat Pump - Water to Water - Cooling ヒートポンプ - 水熱交換 - 冷房 + + + + Heat Pump - Plant Loop EIR - Heating + ヒートポンプ - プラントループ EIR - 暖房 + + + + + Heat Pump - Plant Loop EIR - Cooling + ヒートポンプ - プラントループ EIR - 冷房 + + + + + Heat Pump - Air to Water Fuel Fired - Heating + ヒートポンプ - 空気対水 燃料焚き - 暖房 + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + ヒートポンプ - 空気対水 燃料焚き - 冷房 + + + + + Heat Pump - Air to Water + ヒートポンプ - 空気対水 + diff --git a/translations/OpenStudioApp_ko.ts b/translations/OpenStudioApp_ko.ts index 1d2b1ba90..b3a7d6820 100644 --- a/translations/OpenStudioApp_ko.ts +++ b/translations/OpenStudioApp_ko.ts @@ -23407,6 +23407,34 @@ Story를 여기에 놓기 없음 + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + 공기-물 히트펌프 + + + + Which operation mode of this air to water heat pump should be placed on this loop? + 이 공기-물 히트펌프의 어떤 운전 모드를 이 루프에 배치하시겠습니까? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + 다른 모드는 나중에 내 모델 탭에서 끌어서 다른 플랜트 루프에 배치할 수 있습니다. + + + + Heating + 난방 + + + + Cooling + 냉방 + + openstudio::HVACPlantLoopControlsView @@ -25344,10 +25372,10 @@ OpenStudio Application이 선택하신 언어로 번역되기를 원하신다면 코일 - - - Heat Pumps - 히트펌프 + + + Plant Loop Heat Pumps + 플랜트 루프 히트펌프 @@ -25471,11 +25499,6 @@ OpenStudio Application이 선택하신 언어로 번역되기를 원하신다면 Cooling Towers 냉각탑 - - - Central Heat Pump Systems - 중앙 열펌프 시스템 - Boilers @@ -25648,6 +25671,36 @@ OpenStudio Application이 선택하신 언어로 번역되기를 원하신다면 Heat Pump - Water to Water - Cooling 히트펌프 - 물-물 - 냉각 + + + + Heat Pump - Plant Loop EIR - Heating + 히트펌프 - 플랜트 루프 EIR - 난방 + + + + + Heat Pump - Plant Loop EIR - Cooling + 히트펌프 - 플랜트 루프 EIR - 냉방 + + + + + Heat Pump - Air to Water Fuel Fired - Heating + 히트펌프 - 공기-물 연료 연소식 - 난방 + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + 히트펌프 - 공기-물 연료 연소식 - 냉방 + + + + + Heat Pump - Air to Water + 히트펌프 - 공기-물 + diff --git a/translations/OpenStudioApp_pl.ts b/translations/OpenStudioApp_pl.ts index 6e0a79cdc..e1b04c146 100644 --- a/translations/OpenStudioApp_pl.ts +++ b/translations/OpenStudioApp_pl.ts @@ -23328,6 +23328,34 @@ Kondygnację Brak + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Pompa ciepła powietrze-woda + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Który tryb pracy tej pompy ciepła powietrze-woda umieścić w tym obiegu? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + Drugi tryb można później umieścić w innym obiegu wodnym, przeciągając go z karty Mój Model. + + + + Heating + Ogrzewanie + + + + Cooling + Chłodzenie + + openstudio::HVACPlantLoopControlsView @@ -25259,10 +25287,10 @@ Jeśli chcesz zobaczyć aplikację OpenStudio przetłumaczoną na wybrany przez Wymienniki ciepła - - - Heat Pumps - Pompy ciepła + + + Plant Loop Heat Pumps + Pompy ciepła obiegu wodnego @@ -25386,11 +25414,6 @@ Jeśli chcesz zobaczyć aplikację OpenStudio przetłumaczoną na wybrany przez Cooling Towers Wieże chłodnicze - - - Central Heat Pump Systems - Centralne Systemy Pomp Ciepła - Boilers @@ -25563,6 +25586,36 @@ Jeśli chcesz zobaczyć aplikację OpenStudio przetłumaczoną na wybrany przez Heat Pump - Water to Water - Cooling Pompa ciepła – Woda do Wody – Chłodzenie + + + + Heat Pump - Plant Loop EIR - Heating + Pompa ciepła - Obieg wodny EIR - Ogrzewanie + + + + + Heat Pump - Plant Loop EIR - Cooling + Pompa ciepła - Obieg wodny EIR - Chłodzenie + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Pompa ciepła - Powietrze-Woda zasilana paliwem - Ogrzewanie + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Pompa ciepła - Powietrze-Woda zasilana paliwem - Chłodzenie + + + + + Heat Pump - Air to Water + Pompa ciepła - Powietrze-Woda + diff --git a/translations/OpenStudioApp_pt.ts b/translations/OpenStudioApp_pt.ts index 8cb8dba5c..17e860dca 100644 --- a/translations/OpenStudioApp_pt.ts +++ b/translations/OpenStudioApp_pt.ts @@ -23325,6 +23325,34 @@ História Nenhum + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Bomba de Calor Ar para Água + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Qual modo de operação desta bomba de calor ar para água deve ser colocado neste circuito? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + O outro modo pode ser colocado depois em outro circuito hidráulico arrastando-o da aba Meu Modelo. + + + + Heating + Aquecimento + + + + Cooling + Resfriamento + + openstudio::HVACPlantLoopControlsView @@ -25258,10 +25286,10 @@ Se gostaria de ver o OpenStudio Application traduzido para o seu idioma preferid Serpentinas - - - Heat Pumps - Bombas de Calor + + + Plant Loop Heat Pumps + Bombas de Calor de Circuito Hidráulico @@ -25385,11 +25413,6 @@ Se gostaria de ver o OpenStudio Application traduzido para o seu idioma preferid Cooling Towers Torres de Resfriamento - - - Central Heat Pump Systems - Sistemas de Bomba de Calor Central - Boilers @@ -25562,6 +25585,36 @@ Se gostaria de ver o OpenStudio Application traduzido para o seu idioma preferid Heat Pump - Water to Water - Cooling Bomba de Calor - Água para Água - Refrigeração + + + + Heat Pump - Plant Loop EIR - Heating + Bomba de Calor - Circuito Hidráulico EIR - Aquecimento + + + + + Heat Pump - Plant Loop EIR - Cooling + Bomba de Calor - Circuito Hidráulico EIR - Refrigeração + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Bomba de Calor - Ar para Água a Combustível - Aquecimento + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Bomba de Calor - Ar para Água a Combustível - Refrigeração + + + + + Heat Pump - Air to Water + Bomba de Calor - Ar para Água + diff --git a/translations/OpenStudioApp_tr.ts b/translations/OpenStudioApp_tr.ts index 58c2743ec..dd27dff75 100644 --- a/translations/OpenStudioApp_tr.ts +++ b/translations/OpenStudioApp_tr.ts @@ -23354,6 +23354,34 @@ Bırak Hiçbiri + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Havadan Suya Isı Pompası + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Bu havadan suya ısı pompasının hangi çalışma modu bu devreye yerleştirilsin? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + Diğer mod daha sonra Benim Modelim sekmesinden sürüklenerek başka bir tesisat devresine yerleştirilebilir. + + + + Heating + Isıtma + + + + Cooling + Soğutma + + openstudio::HVACPlantLoopControlsView @@ -25287,10 +25315,10 @@ OpenStudio Application'ın seçtiğiniz dilinize çevrilmiş halini görmek iste Bobinler - - - Heat Pumps - Isı Pompaları + + + Plant Loop Heat Pumps + Tesisat Devresi Isı Pompaları @@ -25414,11 +25442,6 @@ OpenStudio Application'ın seçtiğiniz dilinize çevrilmiş halini görmek iste Cooling Towers Soğutma Kuleleri - - - Central Heat Pump Systems - Merkezi Isı Pompa Sistemleri - Boilers @@ -25591,6 +25614,36 @@ OpenStudio Application'ın seçtiğiniz dilinize çevrilmiş halini görmek iste Heat Pump - Water to Water - Cooling Isı Pompası - Su'dan Su'ya - Soğutma + + + + Heat Pump - Plant Loop EIR - Heating + Isı Pompası - Tesisat Devresi EIR - Isıtma + + + + + Heat Pump - Plant Loop EIR - Cooling + Isı Pompası - Tesisat Devresi EIR - Soğutma + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Isı Pompası - Havadan Suya Yakıtlı - Isıtma + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Isı Pompası - Havadan Suya Yakıtlı - Soğutma + + + + + Heat Pump - Air to Water + Isı Pompası - Havadan Suya + diff --git a/translations/OpenStudioApp_vi.ts b/translations/OpenStudioApp_vi.ts index 59858cfde..545e69647 100644 --- a/translations/OpenStudioApp_vi.ts +++ b/translations/OpenStudioApp_vi.ts @@ -23372,6 +23372,34 @@ Story Không có + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + Bơm Nhiệt Không Khí sang Nước + + + + Which operation mode of this air to water heat pump should be placed on this loop? + Chế độ vận hành nào của bơm nhiệt không khí sang nước này nên được đặt trên vòng này? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + Chế độ còn lại có thể được đặt sau trên một vòng nước trung tâm khác bằng cách kéo nó từ thẻ Mô hình của tôi. + + + + Heating + Sưởi Ấm + + + + Cooling + Làm Lạnh + + openstudio::HVACPlantLoopControlsView @@ -25303,10 +25331,10 @@ Nếu bạn muốn thấy OpenStudioApplication được dịch sang ngôn ngữ Các cuộn dây - - - Heat Pumps - Máy Bơm Nhiệt + + + Plant Loop Heat Pumps + Bơm Nhiệt Vòng Nước Trung Tâm @@ -25430,11 +25458,6 @@ Nếu bạn muốn thấy OpenStudioApplication được dịch sang ngôn ngữ Cooling Towers Tháp làm mát - - - Central Heat Pump Systems - Hệ Thống Bơm Nhiệt Trung Tâm - Boilers @@ -25607,6 +25630,36 @@ Nếu bạn muốn thấy OpenStudioApplication được dịch sang ngôn ngữ Heat Pump - Water to Water - Cooling Bơm Nhiệt - Nước sang Nước - Làm lạnh + + + + Heat Pump - Plant Loop EIR - Heating + Bơm Nhiệt - Vòng Nước Trung Tâm EIR - Sưởi Ấm + + + + + Heat Pump - Plant Loop EIR - Cooling + Bơm Nhiệt - Vòng Nước Trung Tâm EIR - Làm Lạnh + + + + + Heat Pump - Air to Water Fuel Fired - Heating + Bơm Nhiệt - Không Khí sang Nước Dùng Nhiên Liệu - Sưởi Ấm + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + Bơm Nhiệt - Không Khí sang Nước Dùng Nhiên Liệu - Làm Lạnh + + + + + Heat Pump - Air to Water + Bơm Nhiệt - Không Khí sang Nước + diff --git a/translations/OpenStudioApp_zh_CN.ts b/translations/OpenStudioApp_zh_CN.ts index d852e3c0e..23811f402 100644 --- a/translations/OpenStudioApp_zh_CN.ts +++ b/translations/OpenStudioApp_zh_CN.ts @@ -23354,6 +23354,34 @@ Story 无 + + openstudio::HVACLayoutController + + + Air to Water Heat Pump + 空气对水热泵 + + + + Which operation mode of this air to water heat pump should be placed on this loop? + 应将此空气对水热泵的哪种运行模式放置在此环路上? + + + + The other mode can be placed on another plant loop later by dragging it from the My Model tab. + 另一种模式可稍后从“我的模型”选项卡拖动到另一个水系统环路上。 + + + + Heating + 供热 + + + + Cooling + 供冷 + + openstudio::HVACPlantLoopControlsView @@ -25285,10 +25313,10 @@ If you would like to see the OpenStudioApplication translated in your language o 换热器 - - - Heat Pumps - 热泵 + + + Plant Loop Heat Pumps + 水系统环路热泵 @@ -25412,11 +25440,6 @@ If you would like to see the OpenStudioApplication translated in your language o Cooling Towers 冷却塔 - - - Central Heat Pump Systems - 中央热泵系统 - Boilers @@ -25589,6 +25612,36 @@ If you would like to see the OpenStudioApplication translated in your language o Heat Pump - Water to Water - Cooling 热泵 - 水对水 - 冷却 + + + + Heat Pump - Plant Loop EIR - Heating + 热泵 - 水系统环路 EIR - 供热 + + + + + Heat Pump - Plant Loop EIR - Cooling + 热泵 - 水系统环路 EIR - 供冷 + + + + + Heat Pump - Air to Water Fuel Fired - Heating + 热泵 - 空气对水 燃料驱动 - 供热 + + + + + Heat Pump - Air to Water Fuel Fired - Cooling + 热泵 - 空气对水 燃料驱动 - 供冷 + + + + + Heat Pump - Air to Water + 热泵 - 空气对水 +