From 5cafd025458f3d8c3a5154d1679013f8fdbc50a2 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 11 Sep 2023 13:30:09 -0700 Subject: [PATCH 01/23] Add design spec multispeed fields to idd. --- resources/model/OpenStudio.idd | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/resources/model/OpenStudio.idd b/resources/model/OpenStudio.idd index e61ea1ba459..37087b332c0 100644 --- a/resources/model/OpenStudio.idd +++ b/resources/model/OpenStudio.idd @@ -29063,13 +29063,17 @@ OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, \units C \required-field \note Supplemental heater will not operate when outdoor temperature exceeds this value. - A15; \field Controlling Zone or Thermostat Location + A15, \field Controlling Zone or Thermostat Location \type object-list \object-list ThermalZoneNames \note Used only for AirloopHVAC equipment on a main branch and defines zone name where thermostat is located. \note Not required for zone equipment. Leave blank if terminal unit is used in AirLoopHVAC:OutdoorAirSystem:EquipmentList. \note Required when terminal unit is used on main AirloopHVAC branch and coils are not set point controlled. \note When terminal unit is used in air loop and is load controlled, this zone's thermostat will control operation. + A16; \field Design Specification Multispeed Object Name + \type object-list + \object-list UnitarySystemPerformaceNames + \note The name of the performance specification object used to describe the multispeed coil. OS:ZoneHVAC:WaterToAirHeatPump, \min-fields 25 @@ -29236,10 +29240,14 @@ OS:ZoneHVAC:WaterToAirHeatPump, \note Constant results in 100% water flow regardless of compressor PLR \note Cycling results in water flow that matches compressor PLR \note ConstantOnDemand results in 100% water flow whenever the coil is on, but is 0% whenever the coil has no load - A26; \field Design Specification ZoneHVAC Sizing Object Name + A26, \field Design Specification ZoneHVAC Sizing Object Name \note Enter the name of a DesignSpecificationZoneHVACSizing object. \type object-list \object-list DesignSpecificationZoneHVACSizingName + A27; \field Design Specification Multispeed Object Name + \type object-list + \object-list UnitarySystemPerformaceNames + \note The name of the performance specification object used to describe the multispeed coil. OS:ZoneHVAC:UnitHeater, \min-fields 10 From aab22b625deaba1f4f053afe51ab508dfc1379c7 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 11 Sep 2023 13:30:31 -0700 Subject: [PATCH 02/23] Update model files for zone hvac wtahp. --- src/model/ZoneHVACWaterToAirHeatPump.cpp | 46 +++++++++++++++++++ src/model/ZoneHVACWaterToAirHeatPump.hpp | 8 +++- src/model/ZoneHVACWaterToAirHeatPump_Impl.hpp | 8 +++- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/model/ZoneHVACWaterToAirHeatPump.cpp b/src/model/ZoneHVACWaterToAirHeatPump.cpp index 80563fcd872..bb676c17daf 100644 --- a/src/model/ZoneHVACWaterToAirHeatPump.cpp +++ b/src/model/ZoneHVACWaterToAirHeatPump.cpp @@ -27,6 +27,8 @@ #include "CoilHeatingWater_Impl.hpp" #include "Model.hpp" #include "Model_Impl.hpp" +#include "UnitarySystemPerformanceMultispeed.hpp" +#include "UnitarySystemPerformanceMultispeed_Impl.hpp" #include @@ -77,6 +79,10 @@ namespace model { wahpClone.setSupplementalHeatingCoil(supplementalHeatingCoilClone); + if (auto designSpec = designSpecificationMultispeedObject()) { + wahpClone.setDesignSpecificationMultispeedObject(designSpec->clone(model).cast()); + } + if (model == this->model()) { if (auto waterToAirComponent = t_coolingCoil.optionalCast()) { if (auto plant = waterToAirComponent->plantLoop()) { @@ -119,6 +125,9 @@ namespace model { plantLoop->removeDemandBranchWithComponent(t_supplementalHeatingCoil.get()); } } + if (auto designSpec = designSpecificationMultispeedObject()) { + designSpec->remove(); + } return ZoneHVACComponent_Impl::remove(); } @@ -168,6 +177,9 @@ namespace model { if (OptionalHVACComponent intermediate = optionalSupplementalHeatingCoil()) { result.push_back(*intermediate); } + if (auto designSpec = designSpecificationMultispeedObject()) { + result.push_back(*designSpec); + } return result; } @@ -384,6 +396,11 @@ namespace model { return getObject().getModelObjectTarget(OS_ZoneHVAC_WaterToAirHeatPumpFields::SupplyAirFanOperatingModeScheduleName); } + boost::optional ZoneHVACWaterToAirHeatPump_Impl::designSpecificationMultispeedObject() const { + return getObject().getModelObjectTarget( + OS_ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName); + } + bool ZoneHVACWaterToAirHeatPump_Impl::setAvailabilitySchedule(Schedule& schedule) { bool result = setSchedule(OS_ZoneHVAC_WaterToAirHeatPumpFields::AvailabilityScheduleName, "ZoneHVACWaterToAirHeatPump", "Availability", schedule); @@ -684,6 +701,23 @@ namespace model { OS_ASSERT(result); } + bool ZoneHVACWaterToAirHeatPump_Impl::setDesignSpecificationMultispeedObject( + const boost::optional& unitarySystemPerformace) { + bool result(false); + if (unitarySystemPerformace) { + result = setPointer(OS_ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName, unitarySystemPerformace.get().handle()); + } else { + resetDesignSpecificationMultispeedObject(); + result = true; + } + return result; + } + + void ZoneHVACWaterToAirHeatPump_Impl::resetDesignSpecificationMultispeedObject() { + bool result = setString(OS_ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName, ""); + OS_ASSERT(result); + } + boost::optional ZoneHVACWaterToAirHeatPump_Impl::optionalAvailabilitySchedule() const { return getObject().getModelObjectTarget(OS_ZoneHVAC_WaterToAirHeatPumpFields::AvailabilityScheduleName); } @@ -1101,6 +1135,10 @@ namespace model { return getImpl()->supplyAirFanOperatingModeSchedule(); } + boost::optional AirLoopHVACUnitarySystem::designSpecificationMultispeedObject() const { + return getImpl()->designSpecificationMultispeedObject(); + } + bool ZoneHVACWaterToAirHeatPump::setAvailabilitySchedule(Schedule& schedule) { return getImpl()->setAvailabilitySchedule(schedule); } @@ -1318,6 +1356,14 @@ namespace model { getImpl()->resetSupplyAirFanOperatingModeSchedule(); } + bool ZoneHVACWaterToAirHeatPump::setDesignSpecificationMultispeedObject(const UnitarySystemPerformanceMultispeed& unitarySystemPerformace) { + return getImpl()->setDesignSpecificationMultispeedObject(unitarySystemPerformace); + } + + void ZoneHVACWaterToAirHeatPump::resetDesignSpecificationMultispeedObject() { + getImpl()->resetDesignSpecificationMultispeedObject(); + } + /// @cond ZoneHVACWaterToAirHeatPump::ZoneHVACWaterToAirHeatPump(std::shared_ptr impl) : ZoneHVACComponent(std::move(impl)) {} diff --git a/src/model/ZoneHVACWaterToAirHeatPump.hpp b/src/model/ZoneHVACWaterToAirHeatPump.hpp index a4cad8a5cd6..dfd9b43158b 100644 --- a/src/model/ZoneHVACWaterToAirHeatPump.hpp +++ b/src/model/ZoneHVACWaterToAirHeatPump.hpp @@ -14,8 +14,8 @@ namespace openstudio { namespace model { class Schedule; - class HVACComponent; + class UnitarySystemPerformanceMultispeed; namespace detail { @@ -130,6 +130,8 @@ namespace model { // TODO: field 'Design Specification ZoneHVAC Sizing' isn't implemented since the object isn't wrapped in SDK + boost::optional designSpecificationMultispeedObject() const; + //@} /** @name Setters */ //@{ @@ -246,6 +248,10 @@ namespace model { void resetSupplyAirFanOperatingModeSchedule(); + bool setDesignSpecificationMultispeedObject(const UnitarySystemPerformanceMultispeed& unitarySystemPerformace); + + void resetDesignSpecificationMultispeedObject(); + //@} /** @name Other */ //@{ diff --git a/src/model/ZoneHVACWaterToAirHeatPump_Impl.hpp b/src/model/ZoneHVACWaterToAirHeatPump_Impl.hpp index 630d338433e..fd0f9dd327a 100644 --- a/src/model/ZoneHVACWaterToAirHeatPump_Impl.hpp +++ b/src/model/ZoneHVACWaterToAirHeatPump_Impl.hpp @@ -13,8 +13,8 @@ namespace openstudio { namespace model { class Schedule; - class HVACComponent; + class UnitarySystemPerformanceMultispeed; namespace detail { @@ -132,6 +132,8 @@ namespace model { boost::optional supplyAirFanOperatingModeSchedule() const; + boost::optional designSpecificationMultispeedObject() const; + boost::optional autosizedSupplyAirFlowRateDuringCoolingOperation() const; boost::optional autosizedSupplyAirFlowRateDuringHeatingOperation() const; @@ -266,6 +268,10 @@ namespace model { void resetSupplyAirFanOperatingModeSchedule(); + bool setDesignSpecificationMultispeedObject(const boost::optional& unitarySystemPerformace); + + void resetDesignSpecificationMultispeedObject(); + //@} /** @name Other */ //@{ From 3580d6fb7cf4ebd5cb94ecd09fda7d2d1511b174 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 11 Sep 2023 13:31:03 -0700 Subject: [PATCH 03/23] Update model files for zone hvac tu vrf. --- ...VACTerminalUnitVariableRefrigerantFlow.cpp | 44 +++++++++++++++++++ ...VACTerminalUnitVariableRefrigerantFlow.hpp | 5 +++ ...rminalUnitVariableRefrigerantFlow_Impl.hpp | 5 +++ 3 files changed, 54 insertions(+) diff --git a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp index f06f67736e3..256d9ac79d2 100644 --- a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp +++ b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp @@ -38,6 +38,8 @@ #include "AirConditionerVariableRefrigerantFlowFluidTemperatureControl_Impl.hpp" #include "AirConditionerVariableRefrigerantFlowFluidTemperatureControlHR.hpp" #include "AirConditionerVariableRefrigerantFlowFluidTemperatureControlHR_Impl.hpp" +#include "UnitarySystemPerformanceMultispeed.hpp" +#include "UnitarySystemPerformanceMultispeed_Impl.hpp" #include @@ -581,6 +583,28 @@ namespace model { OS_ASSERT(result); } + boost::optional ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl::designSpecificationMultispeedObject() const { + return getObject().getModelObjectTarget( + OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName); + } + + bool ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl::setDesignSpecificationMultispeedObject( + const boost::optional& unitarySystemPerformace) { + bool result(false); + if (unitarySystemPerformace) { + result = setPointer(OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, unitarySystemPerformace.get().handle()); + } else { + resetDesignSpecificationMultispeedObject(); + result = true; + } + return result; + } + + void ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl::resetDesignSpecificationMultispeedObject() { + bool result = setString(OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, ""); + OS_ASSERT(result); + } + ModelObject ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl::clone(Model model) const { ModelObject terminalClone = ZoneHVACComponent_Impl::clone(model); @@ -604,6 +628,10 @@ namespace model { terminalClone.getImpl()->setSupplementalHeatingCoil(coilClone); } + if (auto designSpec = designSpecificationMultispeedObject()) { + terminalClone.setDesignSpecificationMultispeedObject(designSpec->clone(model).cast()); + } + // TODO Move this into base clase terminalClone.setString(OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirInletNode, ""); terminalClone.setString(OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirOutletNode, ""); @@ -630,6 +658,10 @@ namespace model { result.push_back(coil.get()); } + if (auto designSpec = designSpecificationMultispeedObject()) { + result.push_back(*designSpec); + } + return result; } @@ -1334,6 +1366,18 @@ namespace model { return getImpl()->setSupplyAirFanPlacement(supplyAirFanPlacement); } + boost::optional ZoneHVACTerminalUnitVariableRefrigerantFlow::designSpecificationMultispeedObject() const { + return getImpl()->designSpecificationMultispeedObject(); + } + + bool ZoneHVACTerminalUnitVariableRefrigerantFlow::setDesignSpecificationMultispeedObject(const UnitarySystemPerformanceMultispeed& unitarySystemPerformace) { + return getImpl()->setDesignSpecificationMultispeedObject(unitarySystemPerformace); + } + + void ZoneHVACTerminalUnitVariableRefrigerantFlow::resetDesignSpecificationMultispeedObject() { + getImpl()->resetDesignSpecificationMultispeedObject(); + } + /// @cond ZoneHVACTerminalUnitVariableRefrigerantFlow::ZoneHVACTerminalUnitVariableRefrigerantFlow( std::shared_ptr impl) diff --git a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp index c326d616d0e..a3a976b9f2c 100644 --- a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp +++ b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp @@ -20,6 +20,7 @@ namespace model { class CoilHeatingDXVariableRefrigerantFlowFluidTemperatureControl; class CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl; class ThermalZone; + class UnitarySystemPerformanceMultispeed; namespace detail { @@ -180,6 +181,10 @@ namespace model { bool setControllingZoneorThermostatLocation(const ThermalZone& thermalZone); void resetControllingZoneorThermostatLocation(); + boost::optional designSpecificationMultispeedObject() const; + bool setDesignSpecificationMultispeedObject(const UnitarySystemPerformanceMultispeed& unitarySystemPerformace); + void resetDesignSpecificationMultispeedObject(); + boost::optional autosizedSupplyAirFlowRateDuringCoolingOperation() const; boost::optional autosizedSupplyAirFlowRateWhenNoCoolingisNeeded() const; diff --git a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl.hpp b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl.hpp index 4536d69c86b..93b44e1bd79 100644 --- a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl.hpp +++ b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl.hpp @@ -16,6 +16,7 @@ namespace model { class HVACComponent; class Schedule; class ThermalZone; + class UnitarySystemPerformanceMultispeed; namespace detail { @@ -141,6 +142,10 @@ namespace model { std::string supplyAirFanPlacement() const; bool setSupplyAirFanPlacement(const std::string& supplyAirFanPlacement); + boost::optional designSpecificationMultispeedObject() const; + bool setDesignSpecificationMultispeedObject(const boost::optional& unitarySystemPerformace); + void resetDesignSpecificationMultispeedObject(); + boost::optional autosizedSupplyAirFlowRateDuringCoolingOperation() const; boost::optional autosizedSupplyAirFlowRateWhenNoCoolingisNeeded() const; From 23f16fa0de70842a9fa47fb665d493f8feb69121 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 11 Sep 2023 13:31:14 -0700 Subject: [PATCH 04/23] Start to update ft and tests. --- ...eZoneHVACTerminalUnitVariableRefrigerantFlow.cpp | 13 +++++++++++++ .../ForwardTranslateZoneHVACWaterToAirHeatPump.cpp | 13 +++++++++++++ .../Test/ZoneHVACWaterToAirHeatPump_GTest.cpp | 3 +++ 3 files changed, 29 insertions(+) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp index c02db7b8178..6bc795a4034 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp @@ -29,6 +29,8 @@ #include "../../model/CoilCoolingDXVariableRefrigerantFlow_Impl.hpp" #include "../../model/CoilHeatingDXVariableRefrigerantFlow.hpp" #include "../../model/CoilHeatingDXVariableRefrigerantFlow_Impl.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed_Impl.hpp" #include "../../utilities/core/Logger.hpp" #include "../../utilities/core/Assert.hpp" #include "../../utilities/math/FloatCompare.hpp" @@ -432,6 +434,17 @@ namespace energyplus { } } + // Design Specification Multispeed Object Name + if (boost::optional designSpecificationMultispeedObject = modelObject.designSpecificationMultispeedObject()) { + boost::optional _unitarySystemPerformance = translateAndMapModelObject(designSpecificationMultispeedObject.get()); + + if (_unitarySystemPerformance && _unitarySystemPerformance->name()) { + idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType, + _unitarySystemPerformance->iddObject().name()); + idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, _unitarySystemPerformance->name().get()); + } + } + return idfObject; } diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp index ac01a540fbe..c1044346410 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp @@ -27,6 +27,8 @@ #include "../../model/CoilHeatingGas_Impl.hpp" #include "../../model/CoilHeatingWater.hpp" #include "../../model/CoilHeatingWater_Impl.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed_Impl.hpp" #include #include #include @@ -375,6 +377,17 @@ namespace energyplus { // TODO: field 'Design Specification ZoneHVAC Sizing' isn't implemented since the object isn't wrapped in SDK + // Design Specification Multispeed Object Name + if (boost::optional designSpecificationMultispeedObject = modelObject.designSpecificationMultispeedObject()) { + boost::optional _unitarySystemPerformance = translateAndMapModelObject(designSpecificationMultispeedObject.get()); + + if (_unitarySystemPerformance && _unitarySystemPerformance->name()) { + idfObject.setString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType, + _unitarySystemPerformance->iddObject().name()); + idfObject.setString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName, _unitarySystemPerformance->name().get()); + } + } + return idfObject; } diff --git a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp index 78eb5641dc7..9ed6f69bda7 100644 --- a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include "../../utilities/idf/IdfObject.hpp" @@ -269,6 +270,8 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::AvailabilityManagerListName)); EXPECT_EQ("ConstantOnDemand", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::HeatPumpCoilWaterFlowMode).get()); EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationZoneHVACSizingObjectName)); + EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType)); + EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName)); { ASSERT_TRUE(idf_hp.getTarget(ZoneHVAC_WaterToAirHeatPumpFields::HeatingCoilName)); From b0b9add7cbc8d147db4d9408a9bd5947dbb46cb1 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 11 Sep 2023 13:31:30 -0700 Subject: [PATCH 05/23] Formatting. --- ...ateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp | 5 +++-- .../ForwardTranslateZoneHVACWaterToAirHeatPump.cpp | 2 +- .../ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp | 11 +++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp index 6bc795a4034..e993ef8f2f3 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACTerminalUnitVariableRefrigerantFlow.cpp @@ -440,8 +440,9 @@ namespace energyplus { if (_unitarySystemPerformance && _unitarySystemPerformance->name()) { idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType, - _unitarySystemPerformance->iddObject().name()); - idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, _unitarySystemPerformance->name().get()); + _unitarySystemPerformance->iddObject().name()); + idfObject.setString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, + _unitarySystemPerformance->name().get()); } } diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp index c1044346410..8f269583a4d 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateZoneHVACWaterToAirHeatPump.cpp @@ -383,7 +383,7 @@ namespace energyplus { if (_unitarySystemPerformance && _unitarySystemPerformance->name()) { idfObject.setString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType, - _unitarySystemPerformance->iddObject().name()); + _unitarySystemPerformance->iddObject().name()); idfObject.setString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName, _unitarySystemPerformance->name().get()); } } diff --git a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp index 256d9ac79d2..7735d4b9aff 100644 --- a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp +++ b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp @@ -583,7 +583,8 @@ namespace model { OS_ASSERT(result); } - boost::optional ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl::designSpecificationMultispeedObject() const { + boost::optional + ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl::designSpecificationMultispeedObject() const { return getObject().getModelObjectTarget( OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName); } @@ -592,7 +593,8 @@ namespace model { const boost::optional& unitarySystemPerformace) { bool result(false); if (unitarySystemPerformace) { - result = setPointer(OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, unitarySystemPerformace.get().handle()); + result = setPointer(OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName, + unitarySystemPerformace.get().handle()); } else { resetDesignSpecificationMultispeedObject(); result = true; @@ -1369,8 +1371,9 @@ namespace model { boost::optional ZoneHVACTerminalUnitVariableRefrigerantFlow::designSpecificationMultispeedObject() const { return getImpl()->designSpecificationMultispeedObject(); } - - bool ZoneHVACTerminalUnitVariableRefrigerantFlow::setDesignSpecificationMultispeedObject(const UnitarySystemPerformanceMultispeed& unitarySystemPerformace) { + + bool ZoneHVACTerminalUnitVariableRefrigerantFlow::setDesignSpecificationMultispeedObject( + const UnitarySystemPerformanceMultispeed& unitarySystemPerformace) { return getImpl()->setDesignSpecificationMultispeedObject(unitarySystemPerformace); } From f7db3c1ae6b7ce219463a847cbef7c31862339b0 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Tue, 12 Sep 2023 15:34:45 +0200 Subject: [PATCH 06/23] Typo in ZoneHVACWaterToAirHeatPump --- src/model/ZoneHVACWaterToAirHeatPump.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/ZoneHVACWaterToAirHeatPump.cpp b/src/model/ZoneHVACWaterToAirHeatPump.cpp index bb676c17daf..74a0353b3aa 100644 --- a/src/model/ZoneHVACWaterToAirHeatPump.cpp +++ b/src/model/ZoneHVACWaterToAirHeatPump.cpp @@ -1135,7 +1135,7 @@ namespace model { return getImpl()->supplyAirFanOperatingModeSchedule(); } - boost::optional AirLoopHVACUnitarySystem::designSpecificationMultispeedObject() const { + boost::optional ZoneHVACWaterToAirHeatPump::designSpecificationMultispeedObject() const { return getImpl()->designSpecificationMultispeedObject(); } From 4cf55c58bfb427bed1896864fd663dba867dd3fe Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 12 Sep 2023 07:40:24 -0700 Subject: [PATCH 07/23] Typo in idds and fix a clone method. --- resources/energyplus/ProposedEnergy+.idd | 8 ++++---- src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/resources/energyplus/ProposedEnergy+.idd b/resources/energyplus/ProposedEnergy+.idd index f9d910dc592..79e1957035f 100644 --- a/resources/energyplus/ProposedEnergy+.idd +++ b/resources/energyplus/ProposedEnergy+.idd @@ -24647,7 +24647,7 @@ ZoneHVAC:WaterToAirHeatPump, \note Enter the type of performance specification object used to describe the multispeed coil or fan. A22; \field Design Specification Multispeed Object Name \type object-list - \object-list UnitarySystemPerformaceNames + \object-list UnitarySystemPerformanceNames \note The name of the performance specification object used to describe the multispeed coil or fan. ZoneHVAC:Dehumidifier:DX, @@ -25997,7 +25997,7 @@ ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, \note Enter the type of performance specification object used to describe the multispeed coil or fan. A21; \field Design Specification Multispeed Object Name \type object-list - \object-list UnitarySystemPerformaceNames + \object-list UnitarySystemPerformanceNames \note The name of the performance specification object used to describe the multispeed coil or fan. \group Zone HVAC Radiative/Convective Units @@ -37659,7 +37659,7 @@ AirLoopHVAC:UnitarySystem, \note Enter the type of performance specification object used to describe the multispeed coil. A27; \field Design Specification Multispeed Object Name \type object-list - \object-list UnitarySystemPerformaceNames + \object-list UnitarySystemPerformanceNames \note The name of the performance specification object used to describe the multispeed coil. UnitarySystemPerformance:Multispeed, @@ -37669,7 +37669,7 @@ UnitarySystemPerformance:Multispeed, \extensible:2 - repeat last two fields, remembering to remove ; from "inner" fields. A1 , \field Name \required-field - \reference UnitarySystemPerformaceNames + \reference UnitarySystemPerformanceNames N1 , \field Number of Speeds for Heating \required-field \type integer diff --git a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp index 7735d4b9aff..1af6aa497fb 100644 --- a/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp +++ b/src/model/ZoneHVACTerminalUnitVariableRefrigerantFlow.cpp @@ -631,7 +631,8 @@ namespace model { } if (auto designSpec = designSpecificationMultispeedObject()) { - terminalClone.setDesignSpecificationMultispeedObject(designSpec->clone(model).cast()); + auto designSpecClone = designSpec->clone(model).cast(); + terminalClone.getImpl()->setDesignSpecificationMultispeedObject(designSpecClone); } // TODO Move this into base clase From d79407a88ad18d05cf3f88e629db098a011164fb Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Wed, 13 Sep 2023 15:57:14 -0700 Subject: [PATCH 08/23] Add model tests for both zone hvac. --- ...itarySystemPerformanceMultispeed_GTest.cpp | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/model/test/UnitarySystemPerformanceMultispeed_GTest.cpp b/src/model/test/UnitarySystemPerformanceMultispeed_GTest.cpp index 01235da7f4c..0697ba66c8c 100644 --- a/src/model/test/UnitarySystemPerformanceMultispeed_GTest.cpp +++ b/src/model/test/UnitarySystemPerformanceMultispeed_GTest.cpp @@ -9,8 +9,25 @@ #include "../AirLoopHVACUnitarySystem.hpp" #include "../AirLoopHVACUnitarySystem_Impl.hpp" + +#include "../ZoneHVACWaterToAirHeatPump.hpp" +#include "../ZoneHVACWaterToAirHeatPump_Impl.hpp" +#include "../ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp" +#include "../ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl.hpp" #include "../UnitarySystemPerformanceMultispeed.hpp" #include "../UnitarySystemPerformanceMultispeed_Impl.hpp" +#include "../ScheduleConstant.hpp" +#include "../ScheduleConstant_Impl.hpp" +#include "../Schedule.hpp" +#include "../Schedule_Impl.hpp" +#include "../CoilCoolingWaterToAirHeatPumpEquationFit.hpp" +#include "../CoilCoolingWaterToAirHeatPumpEquationFit_Impl.hpp" +#include "../CoilHeatingWaterToAirHeatPumpEquationFit.hpp" +#include "../CoilHeatingWaterToAirHeatPumpEquationFit_Impl.hpp" +#include "../CoilHeatingElectric.hpp" +#include "../CoilHeatingElectric_Impl.hpp" +#include "../FanOnOff.hpp" +#include "../FanOnOff_Impl.hpp" using namespace openstudio; using namespace openstudio::model; @@ -98,12 +115,44 @@ TEST_F(ModelFixture, UnitarySystemPerformanceMultispeed_SupplyAirflowRatioField) TEST_F(ModelFixture, UnitarySystemPerformanceMultispeed_addToAirLoopHVACUnitarySystem) { Model m; - UnitarySystemPerformanceMultispeed perf = UnitarySystemPerformanceMultispeed(m); + UnitarySystemPerformanceMultispeed perf(m); AirLoopHVACUnitarySystem airloopsys = AirLoopHVACUnitarySystem(m); + ASSERT_FALSE(airloopsys.designSpecificationMultispeedObject()); EXPECT_TRUE(airloopsys.setDesignSpecificationMultispeedObject(perf)); ASSERT_TRUE(airloopsys.designSpecificationMultispeedObject()); EXPECT_EQ(airloopsys.designSpecificationMultispeedObject().get().handle(), perf.handle()); airloopsys.resetDesignSpecificationMultispeedObject(); ASSERT_FALSE(airloopsys.designSpecificationMultispeedObject()); } + +TEST_F(ModelFixture, UnitarySystemPerformanceMultispeed_addZoneHVACWaterToAirHeatPump) { + Model m; + UnitarySystemPerformanceMultispeed perf(m); + Schedule availabilitySched = m.alwaysOnDiscreteSchedule(); + FanOnOff supplyFan(m, availabilitySched); + CoilHeatingWaterToAirHeatPumpEquationFit coilHeatingWaterToAirHP(m); + CoilCoolingWaterToAirHeatPumpEquationFit coilCoolingWaterToAirHP(m); + CoilHeatingElectric supplementalHC(m, availabilitySched); + ZoneHVACWaterToAirHeatPump zonehvac(m, availabilitySched, supplyFan, coilHeatingWaterToAirHP, coilCoolingWaterToAirHP, supplementalHC); + + ASSERT_FALSE(zonehvac.designSpecificationMultispeedObject()); + EXPECT_TRUE(zonehvac.setDesignSpecificationMultispeedObject(perf)); + ASSERT_TRUE(zonehvac.designSpecificationMultispeedObject()); + EXPECT_EQ(zonehvac.designSpecificationMultispeedObject().get().handle(), perf.handle()); + zonehvac.resetDesignSpecificationMultispeedObject(); + ASSERT_FALSE(zonehvac.designSpecificationMultispeedObject()); +} + +TEST_F(ModelFixture, UnitarySystemPerformanceMultispeed_addZoneHVACTerminalUnitVariableRefrigerantFlow) { + Model m; + UnitarySystemPerformanceMultispeed perf(m); + ZoneHVACTerminalUnitVariableRefrigerantFlow zonehvac(m); + + ASSERT_FALSE(zonehvac.designSpecificationMultispeedObject()); + EXPECT_TRUE(zonehvac.setDesignSpecificationMultispeedObject(perf)); + ASSERT_TRUE(zonehvac.designSpecificationMultispeedObject()); + EXPECT_EQ(zonehvac.designSpecificationMultispeedObject().get().handle(), perf.handle()); + zonehvac.resetDesignSpecificationMultispeedObject(); + ASSERT_FALSE(zonehvac.designSpecificationMultispeedObject()); +} From bb209bbd4098ddbdb163c66ffc3d312e31ab1991 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Wed, 13 Sep 2023 15:57:43 -0700 Subject: [PATCH 09/23] Add ft tests for checking for translated performance objects. --- ...HVACTerminalUnitVariableRefrigerantFlow_GTest.cpp | 8 ++++++++ .../Test/ZoneHVACWaterToAirHeatPump_GTest.cpp | 12 +++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index aba86aa8465..92a4e76996b 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -33,6 +33,7 @@ #include "../../model/ScheduleConstant.hpp" #include "../../model/SetpointManagerScheduled.hpp" #include "../../model/FanSystemModel.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed.hpp" #include "../../utilities/idf/IdfObject.hpp" #include "../../utilities/idf/IdfObject_Impl.hpp" @@ -80,6 +81,10 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera ZoneHVACTerminalUnitVariableRefrigerantFlow vrf(m, cc, hc, fan); + UnitarySystemPerformanceMultispeed perf(m); + perf.setName("US Perf Multispeed"); + EXPECT_TRUE(vrf.setDesignSpecificationMultispeedObject(perf)); + ThermalZone z(m); Space s(m); s.setThermalZone(z); @@ -291,6 +296,9 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera EXPECT_EQ(idf_supHC.getString(Coil_Heating_WaterFields::AirOutletNodeName).get(), idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirOutletNodeName).get()); + + EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); } } diff --git a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp index 96486df589e..fd98c4c96d0 100644 --- a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp @@ -20,6 +20,7 @@ #include "../../model/PortList.hpp" #include "../../model/Node.hpp" #include "../../model/PlantLoop.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed.hpp" #include #include @@ -27,7 +28,6 @@ #include #include #include -#include #include #include "../../utilities/idf/IdfObject.hpp" @@ -100,6 +100,10 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { EXPECT_TRUE(clg_coil.setRatedEnteringAirDryBulbTemperature(26.0)); EXPECT_TRUE(clg_coil.setRatedEnteringAirWetBulbTemperature(20.1)); + UnitarySystemPerformanceMultispeed perf(m); + perf.setName("US Perf Multispeed"); + EXPECT_TRUE(hp.setDesignSpecificationMultispeedObject(perf)); + ThermalZone z(m); Space s(m); s.setThermalZone(z); @@ -234,6 +238,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { ASSERT_EQ(1, w.getObjectsByType(IddObjectType::Coil_Heating_Electric).size()); ASSERT_EQ(1, w.getObjectsByType(IddObjectType::Zone).size()); ASSERT_EQ(1, w.getObjectsByType(IddObjectType::ZoneHVAC_EquipmentList).size()); + ASSERT_EQ(1, w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed).size()); validateNodeMatch(w, "", drawThrough); @@ -266,8 +271,9 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::AvailabilityManagerListName)); EXPECT_EQ("ConstantOnDemand", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::HeatPumpCoilWaterFlowMode).get()); EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationZoneHVACSizingObjectName)); - EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType)); - EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName)); + EXPECT_EQ("UnitarySystemPerformance:Multispeed", + idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName).get()); { ASSERT_TRUE(idf_hp.getTarget(ZoneHVAC_WaterToAirHeatPumpFields::HeatingCoilName)); From 2e1fd849db1befd0e61b55af0cc93ccddd7c342d Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Wed, 13 Sep 2023 16:00:55 -0700 Subject: [PATCH 10/23] Check count of performance objects. --- .../ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index 92a4e76996b..a95bc4f6ae0 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -260,12 +260,14 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera std::vector idf_hcs = w.getObjectsByType(IddObjectType::Coil_Heating_DX_VariableRefrigerantFlow); std::vector idf_fans = w.getObjectsByType(IddObjectType::Fan_OnOff); std::vector idf_supHCs = w.getObjectsByType(IddObjectType::Coil_Heating_Water); + std::vector idf_perfs = w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed); EXPECT_EQ(1u, idf_vrfs.size()); EXPECT_EQ(1u, idf_ccs.size()); EXPECT_EQ(1u, idf_hcs.size()); EXPECT_EQ(1u, idf_fans.size()); EXPECT_EQ(1u, idf_supHCs.size()); + EXPECT_EQ(1u, idf_perfs.size()); WorkspaceObject idf_vrf = idf_vrfs[0]; WorkspaceObject idf_cc = idf_ccs[0]; @@ -297,8 +299,10 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera EXPECT_EQ(idf_supHC.getString(Coil_Heating_WaterFields::AirOutletNodeName).get(), idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirOutletNodeName).get()); - EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); - EXPECT_EQ("US Perf Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); + EXPECT_EQ("UnitarySystemPerformance:Multispeed", + idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", + idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); } } From d036c6749bff44eaf833ca841cdfd2497f65bd9f Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 18 Sep 2023 08:38:34 -0700 Subject: [PATCH 11/23] Refactor unitarysysperf ft to support new zonehvac types. --- ...lateUnitarySystemPerformanceMultispeed.cpp | 65 ++++++++++++++----- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index 86da5f777fe..77d5c7fa029 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -9,6 +9,10 @@ #include "../../model/UnitarySystemPerformanceMultispeed_Impl.hpp" #include "../../model/AirLoopHVACUnitarySystem.hpp" #include "../../model/AirLoopHVACUnitarySystem_Impl.hpp" +#include "../../model/ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp" +#include "../../model/ZoneHVACTerminalUnitVariableRefrigerantFlow_Impl.hpp" +#include "../../model/ZoneHVACWaterToAirHeatPump.hpp" +#include "../../model/ZoneHVACWaterToAirHeatPump_Impl.hpp" #include "../../model/CoilHeatingDXMultiSpeed.hpp" #include "../../model/CoilHeatingDXMultiSpeed_Impl.hpp" #include "../../model/CoilHeatingDXMultiSpeedStageData.hpp" @@ -33,24 +37,10 @@ using namespace openstudio::model; namespace openstudio { namespace energyplus { - boost::optional ForwardTranslator::translateUnitarySystemPerformanceMultispeed(UnitarySystemPerformanceMultispeed& modelObject) { - boost::optional s; - boost::optional d; - - // Name - IdfObject sysPerf = createRegisterAndNameIdfObject(openstudio::IddObjectType::UnitarySystemPerformance_Multispeed, modelObject); - - // Find the associated AirLoopHVACUnitarySystem - std::vector unitarySystems = modelObject.getModelObjectSources(); - if (unitarySystems.size() != 1) { - LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem, " - << modelObject.nameString() << " is referenced by " << unitarySystems.size() << ".") - return boost::none; - } - AirLoopHVACUnitarySystem& unitarySystem = unitarySystems[0]; + bool translateCoils(sysPerf, system) { // Number of speeds for heating - boost::optional heatingCoil = unitarySystem.heatingCoil(); + boost::optional heatingCoil = system.heatingCoil(); if (heatingCoil) { if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_MultiSpeed) { auto heatingCoilDXMultispeed = heatingCoil->cast(); @@ -66,7 +56,7 @@ namespace energyplus { } // Number of speeds for cooling - boost::optional coolingCoil = unitarySystem.coolingCoil(); + boost::optional coolingCoil = system.coolingCoil(); if (coolingCoil) { if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_MultiSpeed) { auto coolingCoilDXMultispeed = coolingCoil->cast(); @@ -88,6 +78,47 @@ namespace energyplus { sysPerf.pushExtensibleGroup(airflowRatioField.getHeatingCoolingRatiosAsStrings()); } + return true; + } + + bool zoneHVAC(sysPerf, zoneHVACs) { + + } + + boost::optional ForwardTranslator::translateUnitarySystemPerformanceMultispeed(UnitarySystemPerformanceMultispeed& modelObject) { + + // Name + IdfObject sysPerf = createRegisterAndNameIdfObject(openstudio::IddObjectType::UnitarySystemPerformance_Multispeed, modelObject); + + bool result = false; + + // Find the associated AirLoopHVACUnitarySystem + std::vector unitarySystems = modelObject.getModelObjectSources(); + if (unitarySystems.size() == 1) { + AirLoopHVACUnitarySystem& unitarySystem = unitarySystems[0]; + result = translateCoils(sysPerf, unitarySystem); + } + + // Find the associated ZoneHVACTerminalUnitVariableRefrigerantFlow + std::vector tuVRFs = modelObject.getModelObjectSources(); + if (tuVRFs.size() == 1) { + ZoneHVACTerminalUnitVariableRefrigerantFlow& tuVRF = tuVRFs[0]; + result = translateCoils(sysPerf, tuVRF); + } + + // Find the associated ZoneHVACWaterToAirHeatPump + std::vector hps = modelObject.getModelObjectSources(); + if (hps.size() == 1) { + ZoneHVACWaterToAirHeatPump& hp = hps[0]; + result = translateCoils(sysPerf, hp); + } + + if (!result) { + LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " + << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") + return boost::none; + } + return sysPerf; } From 6f8f111d8ab50dccd60a8562dc789f7433e91564 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 18 Sep 2023 08:38:53 -0700 Subject: [PATCH 12/23] Formatting. --- ...dTranslateUnitarySystemPerformanceMultispeed.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index 77d5c7fa029..f0ef00ff697 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -81,9 +81,7 @@ namespace energyplus { return true; } - bool zoneHVAC(sysPerf, zoneHVACs) { - - } + bool zoneHVAC(sysPerf, zoneHVACs) {} boost::optional ForwardTranslator::translateUnitarySystemPerformanceMultispeed(UnitarySystemPerformanceMultispeed& modelObject) { @@ -100,7 +98,8 @@ namespace energyplus { } // Find the associated ZoneHVACTerminalUnitVariableRefrigerantFlow - std::vector tuVRFs = modelObject.getModelObjectSources(); + std::vector tuVRFs = + modelObject.getModelObjectSources(); if (tuVRFs.size() == 1) { ZoneHVACTerminalUnitVariableRefrigerantFlow& tuVRF = tuVRFs[0]; result = translateCoils(sysPerf, tuVRF); @@ -114,8 +113,10 @@ namespace energyplus { } if (!result) { - LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " - << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") + LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or " + "OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " + << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() + << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") return boost::none; } From 546dd3247bb245cd7d7e12133926c247de66f9ac Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 18 Sep 2023 20:37:26 -0700 Subject: [PATCH 13/23] Update notes in idd. --- resources/model/OpenStudio.idd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/model/OpenStudio.idd b/resources/model/OpenStudio.idd index 8aed38fcc3f..2077c845dd6 100644 --- a/resources/model/OpenStudio.idd +++ b/resources/model/OpenStudio.idd @@ -29443,7 +29443,7 @@ OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, A16; \field Design Specification Multispeed Object Name \type object-list \object-list UnitarySystemPerformaceNames - \note The name of the performance specification object used to describe the multispeed coil. + \note The name of the performance specification object used to describe the multispeed coil or fan. OS:ZoneHVAC:WaterToAirHeatPump, \min-fields 22 @@ -29587,7 +29587,7 @@ OS:ZoneHVAC:WaterToAirHeatPump, A27; \field Design Specification Multispeed Object Name \type object-list \object-list UnitarySystemPerformaceNames - \note The name of the performance specification object used to describe the multispeed coil. + \note The name of the performance specification object used to describe the multispeed coil or fan. OS:ZoneHVAC:UnitHeater, \min-fields 10 From 8a869a11bf582732dc8a3844cffbad0b44de20ce Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 18 Sep 2023 20:38:16 -0700 Subject: [PATCH 14/23] Support remaining coil types for sysperf ft. --- ...lateUnitarySystemPerformanceMultispeed.cpp | 143 ++++++++++++------ 1 file changed, 98 insertions(+), 45 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index f0ef00ff697..e869482e77b 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -23,10 +23,38 @@ #include "../../model/CoilHeatingGasMultiStage_Impl.hpp" #include "../../model/CoilHeatingGasMultiStageStageData.hpp" #include "../../model/CoilHeatingGasMultiStageStageData_Impl.hpp" +#include "../../model/CoilHeatingDXVariableSpeed.hpp" +#include "../../model/CoilHeatingDXVariableSpeed_Impl.hpp" +#include "../../model/CoilHeatingDXVariableSpeedSpeedData.hpp" +#include "../../model/CoilHeatingDXVariableSpeedSpeedData_Impl.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFit.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFit_Impl.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData_Impl.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpEquationFit.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpEquationFit_Impl.hpp" +#include "../../model/CoilHeatingDXVariableRefrigerantFlow.hpp" +#include "../../model/CoilHeatingDXVariableRefrigerantFlow_Impl.hpp" +#include "../../model/CoilHeatingDXVariableRefrigerantFlowFluidTemperatureControl.hpp" +#include "../../model/CoilHeatingDXVariableRefrigerantFlowFluidTemperatureControl_Impl.hpp" #include "../../model/CoilCoolingDXMultiSpeed.hpp" #include "../../model/CoilCoolingDXMultiSpeed_Impl.hpp" #include "../../model/CoilCoolingDXMultiSpeedStageData.hpp" #include "../../model/CoilCoolingDXMultiSpeedStageData_Impl.hpp" +#include "../../model/CoilCoolingDXVariableSpeed.hpp" +#include "../../model/CoilCoolingDXVariableSpeed_Impl.hpp" +#include "../../model/CoilCoolingDXVariableSpeedSpeedData.hpp" +#include "../../model/CoilCoolingDXVariableSpeedSpeedData_Impl.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit_Impl.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData_Impl.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpEquationFit.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpEquationFit_Impl.hpp" +#include "../../model/CoilCoolingDXVariableRefrigerantFlow.hpp" +#include "../../model/CoilCoolingDXVariableRefrigerantFlow_Impl.hpp" +#include "../../model/CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl.hpp" +#include "../../model/CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl_Impl.hpp" #include #include "../../utilities/idd/IddEnums.hpp" #include "../../utilities/idf/IdfExtensibleGroup.hpp" @@ -37,10 +65,48 @@ using namespace openstudio::model; namespace openstudio { namespace energyplus { - bool translateCoils(sysPerf, system) { + boost::optional ForwardTranslator::translateUnitarySystemPerformanceMultispeed(UnitarySystemPerformanceMultispeed& modelObject) { + + // Name + IdfObject sysPerf = createRegisterAndNameIdfObject(openstudio::IddObjectType::UnitarySystemPerformance_Multispeed, modelObject); + + boost::optional heatingCoil; + boost::optional coolingCoil; + + // Find the associated AirLoopHVACUnitarySystem + std::vector unitarySystems = modelObject.getModelObjectSources(); + if (unitarySystems.size() == 1) { + AirLoopHVACUnitarySystem& unitarySystem = unitarySystems[0]; + heatingCoil = unitarySystem.heatingCoil(); + coolingCoil = unitarySystem.coolingCoil(); + } + + // Find the associated ZoneHVACTerminalUnitVariableRefrigerantFlow + std::vector tuVRFs = + modelObject.getModelObjectSources(); + if (tuVRFs.size() == 1) { + ZoneHVACTerminalUnitVariableRefrigerantFlow& tuVRF = tuVRFs[0]; + heatingCoil = tuVRF.heatingCoil(); + coolingCoil = tuVRF.coolingCoil(); + } + + // Find the associated ZoneHVACWaterToAirHeatPump + std::vector hps = modelObject.getModelObjectSources(); + if (hps.size() == 1) { + ZoneHVACWaterToAirHeatPump& hp = hps[0]; + heatingCoil = hp.heatingCoil().optionalCast(); + coolingCoil = hp.coolingCoil().optionalCast(); + } + + if ((!heatingCoil) && (!coolingCoil)) { + LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or " + "OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " + << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() + << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") + return boost::none; + } // Number of speeds for heating - boost::optional heatingCoil = system.heatingCoil(); if (heatingCoil) { if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_MultiSpeed) { auto heatingCoilDXMultispeed = heatingCoil->cast(); @@ -48,6 +114,21 @@ namespace energyplus { } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_Gas_MultiStage) { auto heatingCoilGasMultiStage = heatingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilGasMultiStage.stages().size()); + } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_VariableSpeed) { + auto heatingCoilDXVarspeed = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilDXVarspeed.speeds.size()); + } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_WaterToAirHeatPump_VariableSpeedEquationFit) { + auto heatingCoilWaterToAirHeatingVar = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilWaterToAirHeatingVar.speeds.size()); + } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_WaterToAirHeatPump_EquationFit) { + auto heatingCoilWaterToAirHeating = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME + } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_VariableRefrigerantFlow) { + auto heatingCoilVRF = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME + } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_VariableRefrigerantFlow_FluidTemperatureControl) { + auto heatingCoilVRFFluid = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME } else { sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); } @@ -56,11 +137,25 @@ namespace energyplus { } // Number of speeds for cooling - boost::optional coolingCoil = system.coolingCoil(); if (coolingCoil) { if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_MultiSpeed) { auto coolingCoilDXMultispeed = coolingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXMultispeed.stages().size()); + } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableSpeed) { + auto coolingCoilDXVarspeed = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXVarspeed.speeds.size()); + } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit) { + auto coolingCoilWaterToAirHeatingVar = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilWaterToAirHeatingVar.speeds.size()); + } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_EquationFit) { + auto coolingCoilWaterToAirHeating = heatingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME + } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableRefrigerantFlow) { + auto coolingCoilVRF = coolingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME + } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableRefrigerantFlow_FluidTemperatureControl) { + auto coolingCoilVRFFluid = coolingCoil->cast(); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME } else { sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); } @@ -78,48 +173,6 @@ namespace energyplus { sysPerf.pushExtensibleGroup(airflowRatioField.getHeatingCoolingRatiosAsStrings()); } - return true; - } - - bool zoneHVAC(sysPerf, zoneHVACs) {} - - boost::optional ForwardTranslator::translateUnitarySystemPerformanceMultispeed(UnitarySystemPerformanceMultispeed& modelObject) { - - // Name - IdfObject sysPerf = createRegisterAndNameIdfObject(openstudio::IddObjectType::UnitarySystemPerformance_Multispeed, modelObject); - - bool result = false; - - // Find the associated AirLoopHVACUnitarySystem - std::vector unitarySystems = modelObject.getModelObjectSources(); - if (unitarySystems.size() == 1) { - AirLoopHVACUnitarySystem& unitarySystem = unitarySystems[0]; - result = translateCoils(sysPerf, unitarySystem); - } - - // Find the associated ZoneHVACTerminalUnitVariableRefrigerantFlow - std::vector tuVRFs = - modelObject.getModelObjectSources(); - if (tuVRFs.size() == 1) { - ZoneHVACTerminalUnitVariableRefrigerantFlow& tuVRF = tuVRFs[0]; - result = translateCoils(sysPerf, tuVRF); - } - - // Find the associated ZoneHVACWaterToAirHeatPump - std::vector hps = modelObject.getModelObjectSources(); - if (hps.size() == 1) { - ZoneHVACWaterToAirHeatPump& hp = hps[0]; - result = translateCoils(sysPerf, hp); - } - - if (!result) { - LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or " - "OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " - << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() - << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") - return boost::none; - } - return sysPerf; } From 268eb05cd47cb080ee498e44839d6c50eeab1905 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Wed, 20 Sep 2023 10:22:19 -0700 Subject: [PATCH 15/23] Typos in sysperf ft. --- ...ForwardTranslateUnitarySystemPerformanceMultispeed.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index e869482e77b..45781786ede 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -116,10 +116,10 @@ namespace energyplus { sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilGasMultiStage.stages().size()); } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_VariableSpeed) { auto heatingCoilDXVarspeed = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilDXVarspeed.speeds.size()); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilDXVarspeed.speeds().size()); } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_WaterToAirHeatPump_VariableSpeedEquationFit) { auto heatingCoilWaterToAirHeatingVar = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilWaterToAirHeatingVar.speeds.size()); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilWaterToAirHeatingVar.speeds().size()); } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_WaterToAirHeatPump_EquationFit) { auto heatingCoilWaterToAirHeating = heatingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME @@ -143,10 +143,10 @@ namespace energyplus { sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXMultispeed.stages().size()); } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableSpeed) { auto coolingCoilDXVarspeed = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXVarspeed.speeds.size()); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXVarspeed.speeds().size()); } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit) { auto coolingCoilWaterToAirHeatingVar = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilWaterToAirHeatingVar.speeds.size()); + sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilWaterToAirHeatingVar.speeds().size()); } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_EquationFit) { auto coolingCoilWaterToAirHeating = heatingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME From 2aa530f1cf196003948c22d92bfdc379c8eef3f4 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 09:38:56 -0700 Subject: [PATCH 16/23] FT arbitrary 1 speed if coil object has no speeds. --- ...lateUnitarySystemPerformanceMultispeed.cpp | 34 ++----------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index 45781786ede..c19acac8874 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -31,12 +31,6 @@ #include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFit_Impl.hpp" #include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.hpp" #include "../../model/CoilHeatingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData_Impl.hpp" -#include "../../model/CoilHeatingWaterToAirHeatPumpEquationFit.hpp" -#include "../../model/CoilHeatingWaterToAirHeatPumpEquationFit_Impl.hpp" -#include "../../model/CoilHeatingDXVariableRefrigerantFlow.hpp" -#include "../../model/CoilHeatingDXVariableRefrigerantFlow_Impl.hpp" -#include "../../model/CoilHeatingDXVariableRefrigerantFlowFluidTemperatureControl.hpp" -#include "../../model/CoilHeatingDXVariableRefrigerantFlowFluidTemperatureControl_Impl.hpp" #include "../../model/CoilCoolingDXMultiSpeed.hpp" #include "../../model/CoilCoolingDXMultiSpeed_Impl.hpp" #include "../../model/CoilCoolingDXMultiSpeedStageData.hpp" @@ -49,12 +43,6 @@ #include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit_Impl.hpp" #include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData.hpp" #include "../../model/CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFitSpeedData_Impl.hpp" -#include "../../model/CoilCoolingWaterToAirHeatPumpEquationFit.hpp" -#include "../../model/CoilCoolingWaterToAirHeatPumpEquationFit_Impl.hpp" -#include "../../model/CoilCoolingDXVariableRefrigerantFlow.hpp" -#include "../../model/CoilCoolingDXVariableRefrigerantFlow_Impl.hpp" -#include "../../model/CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl.hpp" -#include "../../model/CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl_Impl.hpp" #include #include "../../utilities/idd/IddEnums.hpp" #include "../../utilities/idf/IdfExtensibleGroup.hpp" @@ -120,16 +108,7 @@ namespace energyplus { } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_WaterToAirHeatPump_VariableSpeedEquationFit) { auto heatingCoilWaterToAirHeatingVar = heatingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, heatingCoilWaterToAirHeatingVar.speeds().size()); - } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_WaterToAirHeatPump_EquationFit) { - auto heatingCoilWaterToAirHeating = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME - } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_VariableRefrigerantFlow) { - auto heatingCoilVRF = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME - } else if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_VariableRefrigerantFlow_FluidTemperatureControl) { - auto heatingCoilVRFFluid = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); // FIXME - } else { + } else { // e.g., CoilHeatingWaterToAirHeatPumpEquationFit, CoilHeatingDXVariableRefrigerantFlow, CoilHeatingDXVariableRefrigerantFlowFluidTemperatureControl sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating, 1); } } else { @@ -147,16 +126,7 @@ namespace energyplus { } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit) { auto coolingCoilWaterToAirHeatingVar = heatingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilWaterToAirHeatingVar.speeds().size()); - } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_EquationFit) { - auto coolingCoilWaterToAirHeating = heatingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME - } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableRefrigerantFlow) { - auto coolingCoilVRF = coolingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME - } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableRefrigerantFlow_FluidTemperatureControl) { - auto coolingCoilVRFFluid = coolingCoil->cast(); - sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); // FIXME - } else { + } else { // e.g., CoilCoolingWaterToAirHeatPumpEquationFit, CoilCoolingDXVariableRefrigerantFlow, CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); } } else { From ea58fd9d24db56a559503af08cbf24707ff5423b Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 09:39:15 -0700 Subject: [PATCH 17/23] Update new ft tests to check contents of sysperf. --- ...ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp | 9 +++++++++ src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index a95bc4f6ae0..cc6173ff668 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -303,6 +303,15 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); EXPECT_EQ("US Perf Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); + + IdfObject idf_perf = workspace.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; + + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); + EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); + EXPECT_TRUE(idf_perf.isEmpty(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio)); + + ASSERT_EQ(0u, idf_perf.numExtensibleGroups()); } } diff --git a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp index fd98c4c96d0..359c645c7f6 100644 --- a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp @@ -275,6 +275,15 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); EXPECT_EQ("US Perf Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName).get()); + IdfObject idf_perf = workspace.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; + + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); + EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); + EXPECT_TRUE(idf_perf.isEmpty(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio)); + + ASSERT_EQ(0u, idf_perf.numExtensibleGroups()); + { ASSERT_TRUE(idf_hp.getTarget(ZoneHVAC_WaterToAirHeatPumpFields::HeatingCoilName)); auto idf_heatingCoil = idf_hp.getTarget(ZoneHVAC_WaterToAirHeatPumpFields::HeatingCoilName).get(); From 98ccc33a1caeeeda84eb19cf81de0d82e81eba87 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 10:30:07 -0700 Subject: [PATCH 18/23] Get all includes for new ft tests. --- .../ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp | 4 ++-- src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index cc6173ff668..29a08b983ff 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -47,7 +47,6 @@ #include #include #include - #include #include #include @@ -62,6 +61,7 @@ #include #include #include +#include #include @@ -304,7 +304,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera EXPECT_EQ("US Perf Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); - IdfObject idf_perf = workspace.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; + IdfObject idf_perf = w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); diff --git a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp index 359c645c7f6..bedef29844d 100644 --- a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "../../utilities/idf/IdfObject.hpp" @@ -275,7 +276,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); EXPECT_EQ("US Perf Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName).get()); - IdfObject idf_perf = workspace.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; + IdfObject idf_perf = w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); From 58b3c9bd3c8f5194fb1642c18ea5300bd2ad85cd Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 11:52:12 -0700 Subject: [PATCH 19/23] Update new ft tests for noloadsupply values. --- .../Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp | 2 +- src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index 29a08b983ff..1423679817a 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -309,7 +309,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); - EXPECT_TRUE(idf_perf.isEmpty(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio)); + EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); ASSERT_EQ(0u, idf_perf.numExtensibleGroups()); } diff --git a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp index bedef29844d..43cc471c036 100644 --- a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp @@ -281,7 +281,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); - EXPECT_TRUE(idf_perf.isEmpty(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio)); + EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); ASSERT_EQ(0u, idf_perf.numExtensibleGroups()); From c347caffe57acef04f4bea71bf63f91a80456dd4 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 14:47:34 -0700 Subject: [PATCH 20/23] Fix a few typos in sysperf ft. --- .../ForwardTranslateUnitarySystemPerformanceMultispeed.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index c19acac8874..e13ecabd36b 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -121,10 +121,10 @@ namespace energyplus { auto coolingCoilDXMultispeed = coolingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXMultispeed.stages().size()); } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_DX_VariableSpeed) { - auto coolingCoilDXVarspeed = heatingCoil->cast(); + auto coolingCoilDXVarspeed = coolingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilDXVarspeed.speeds().size()); } else if (coolingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Cooling_WaterToAirHeatPump_VariableSpeedEquationFit) { - auto coolingCoilWaterToAirHeatingVar = heatingCoil->cast(); + auto coolingCoilWaterToAirHeatingVar = coolingCoil->cast(); sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, coolingCoilWaterToAirHeatingVar.speeds().size()); } else { // e.g., CoilCoolingWaterToAirHeatPumpEquationFit, CoilCoolingDXVariableRefrigerantFlow, CoilCoolingDXVariableRefrigerantFlowFluidTemperatureControl sysPerf.setInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling, 1); From 592f486ce50837435cc38604afdd3ede632cceda Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 15:31:15 -0700 Subject: [PATCH 21/23] Move new ft tests into their own new sysperf ft test file. --- src/energyplus/CMakeLists.txt | 1 + ...lateUnitarySystemPerformanceMultispeed.cpp | 27 ++- ...itarySystemPerformanceMultispeed_GTest.cpp | 199 ++++++++++++++++++ ...minalUnitVariableRefrigerantFlow_GTest.cpp | 20 -- .../Test/ZoneHVACWaterToAirHeatPump_GTest.cpp | 19 -- 5 files changed, 213 insertions(+), 53 deletions(-) create mode 100644 src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp diff --git a/src/energyplus/CMakeLists.txt b/src/energyplus/CMakeLists.txt index 9caeb1792dd..dda4bfc2d3c 100644 --- a/src/energyplus/CMakeLists.txt +++ b/src/energyplus/CMakeLists.txt @@ -822,6 +822,7 @@ set(${target_name}_test_src Test/ThermalStorageChilledWaterStratified_GTest.cpp Test/ThermalZone_GTest.cpp Test/ThermostatSetpointDualSetpoint_GTest.cpp + Test/UnitarySystemPerformanceMultispeed_GTest.cpp Test/WindowPropertyFrameAndDivider_GTest.cpp Test/WaterHeaterMixed_GTest.cpp Test/WaterHeaterSizing_GTest.cpp diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp index e13ecabd36b..ce28a924f07 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateUnitarySystemPerformanceMultispeed.cpp @@ -61,39 +61,38 @@ namespace energyplus { boost::optional heatingCoil; boost::optional coolingCoil; - // Find the associated AirLoopHVACUnitarySystem + // Find the associated AirLoopHVACUnitarySystem, ZoneHVACTerminalUnitVariableRefrigerantFlow, or ZoneHVACWaterToAirHeatPump std::vector unitarySystems = modelObject.getModelObjectSources(); + std::vector tuVRFs = + modelObject.getModelObjectSources(); + std::vector hps = modelObject.getModelObjectSources(); + + if (((unitarySystems.size() + tuVRFs.size() + hps.size()) != 1)) { + LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or " + "OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " + << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() + << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") + return boost::none; + } + if (unitarySystems.size() == 1) { AirLoopHVACUnitarySystem& unitarySystem = unitarySystems[0]; heatingCoil = unitarySystem.heatingCoil(); coolingCoil = unitarySystem.coolingCoil(); } - // Find the associated ZoneHVACTerminalUnitVariableRefrigerantFlow - std::vector tuVRFs = - modelObject.getModelObjectSources(); if (tuVRFs.size() == 1) { ZoneHVACTerminalUnitVariableRefrigerantFlow& tuVRF = tuVRFs[0]; heatingCoil = tuVRF.heatingCoil(); coolingCoil = tuVRF.coolingCoil(); } - // Find the associated ZoneHVACWaterToAirHeatPump - std::vector hps = modelObject.getModelObjectSources(); if (hps.size() == 1) { ZoneHVACWaterToAirHeatPump& hp = hps[0]; heatingCoil = hp.heatingCoil().optionalCast(); coolingCoil = hp.coolingCoil().optionalCast(); } - if ((!heatingCoil) && (!coolingCoil)) { - LOG(Error, "OS:UnitarySystemPerformance:Multispeed should be referenced by one and only one OS:AirLoopHVAC:UnitarySystem or " - "OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow or OS:ZoneHVAC:WaterToAirHeatPump, " - << modelObject.nameString() << " is referenced by " << unitarySystems.size() << " OS:AirLoopHVAC:UnitarySystem, " << tuVRFs.size() - << " OS:ZoneHVAC:TerminalUnit:VariableRefrigerantFlow, " << hps.size() << " OS:ZoneHVAC:WaterToAirHeatPump.") - return boost::none; - } - // Number of speeds for heating if (heatingCoil) { if (heatingCoil->iddObjectType() == openstudio::IddObjectType::OS_Coil_Heating_DX_MultiSpeed) { diff --git a/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp b/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp new file mode 100644 index 00000000000..dd41f4e3aab --- /dev/null +++ b/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp @@ -0,0 +1,199 @@ +/*********************************************************************************************************************** +* OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC. +* See also https://openstudio.net/license +***********************************************************************************************************************/ + +#include +#include "EnergyPlusFixture.hpp" + +#include "../ForwardTranslator.hpp" + +#include "../../model/Model.hpp" +#include "../../model/ThermalZone.hpp" +#include "../../model/Space.hpp" +#include "../../model/AirLoopHVAC.hpp" +#include "../../model/AirLoopHVACUnitarySystem.hpp" +#include "../../model/ZoneHVACWaterToAirHeatPump.hpp" +#include "../../model/ZoneHVACTerminalUnitVariableRefrigerantFlow.hpp" +#include "../../model/CoilCoolingDXVariableSpeed.hpp" +#include "../../model/CoilCoolingDXVariableSpeedSpeedData.hpp" +#include "../../model/CoilHeatingWaterToAirHeatPumpEquationFit.hpp" +#include "../../model/CoilCoolingWaterToAirHeatPumpEquationFit.hpp" +#include "../../model/CoilCoolingDXVariableRefrigerantFlow.hpp" +#include "../../model/CoilHeatingDXVariableRefrigerantFlow.hpp" +#include "../../model/FanOnOff.hpp" +#include "../../model/CoilHeatingElectric.hpp" +#include "../../model/ScheduleConstant.hpp" +#include "../../model/UnitarySystemPerformanceMultispeed.hpp" + +#include +#include +#include + +#include +#include "../../utilities/idf/IdfObject.hpp" +#include "../../utilities/idf/IdfObject_Impl.hpp" + +#include "../../utilities/idf/WorkspaceObject.hpp" +#include "../../utilities/idf/WorkspaceObject_Impl.hpp" + +using namespace openstudio::energyplus; +using namespace openstudio::model; +using namespace openstudio; + +TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_AirLoopHVACUnitarySystem) { + Model m; + + CoilCoolingDXVariableSpeed coil(m); + CoilCoolingDXVariableSpeedSpeedData speed1(m); + EXPECT_TRUE(coil.addSpeed(speed1)); + CoilCoolingDXVariableSpeedSpeedData speed2(m); + EXPECT_TRUE(coil.addSpeed(speed2)); + + AirLoopHVACUnitarySystem unitary(m); + unitary.setCoolingCoil(coil); + + AirLoopHVAC airLoop(m); + Node supplyOutletNode = airLoop.supplyOutletNode(); + unitary.addToNode(supplyOutletNode); + + UnitarySystemPerformanceMultispeed perf(m); + perf.setName("US Perf Multispeed"); + EXPECT_TRUE(perf.addSupplyAirflowRatioField(1.0, 2.0)); + EXPECT_TRUE(unitary.setDesignSpecificationMultispeedObject(perf)); + + ForwardTranslator ft; + Workspace w = ft.translateModel(m); + + WorkspaceObjectVector idf_unitarys(w.getObjectsByType(IddObjectType::AirLoopHVAC_UnitarySystem)); + EXPECT_EQ(1, idf_unitarys.size()); + WorkspaceObject& idf_unitary = idf_unitarys.front(); + + EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_unitary.getString(AirLoopHVAC_UnitarySystemFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", idf_unitary.getString(AirLoopHVAC_UnitarySystemFields::DesignSpecificationMultispeedObjectName).get()); + + WorkspaceObjectVector idf_perfs(w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)); + EXPECT_EQ(1, idf_perfs.size()); + WorkspaceObject& idf_perf = idf_perfs.front(); + + EXPECT_EQ(0, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); + EXPECT_EQ(2, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); + EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); + EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); + + ASSERT_EQ(1u, idf_perf.numExtensibleGroups()); +} + +TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_ZoneHVACWaterToAirHeatPump) { + Model m; + + Schedule sch = m.alwaysOnDiscreteSchedule(); + FanOnOff fan(m); + CoilHeatingWaterToAirHeatPumpEquationFit htg_coil(m); + CoilCoolingWaterToAirHeatPumpEquationFit clg_coil(m); + CoilHeatingElectric supp_htg_coil(m); + + ZoneHVACWaterToAirHeatPump hp(m, sch, fan, htg_coil, clg_coil, supp_htg_coil); + + UnitarySystemPerformanceMultispeed perf(m); + perf.setName("US Perf Multispeed"); + EXPECT_TRUE(perf.addSupplyAirflowRatioField(1.0, 2.0)); + EXPECT_TRUE(perf.addSupplyAirflowRatioField(3.0, 4.0)); + EXPECT_TRUE(hp.setDesignSpecificationMultispeedObject(perf)); + + ThermalZone z(m); + Space s(m); + s.setThermalZone(z); + EXPECT_TRUE(hp.addToThermalZone(z)); + + ForwardTranslator ft; + Workspace w = ft.translateModel(m); + + WorkspaceObjectVector idf_hps(w.getObjectsByType(IddObjectType::ZoneHVAC_WaterToAirHeatPump)); + EXPECT_EQ(1, idf_hps.size()); + WorkspaceObject& idf_hp = idf_hps.front(); + + EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName).get()); + + WorkspaceObjectVector idf_perfs(w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)); + EXPECT_EQ(1, idf_perfs.size()); + WorkspaceObject& idf_perf = idf_perfs.front(); + + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); + EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); + EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); + + ASSERT_EQ(2u, idf_perf.numExtensibleGroups()); +} + +TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_ZoneHVACTerminalUnitVariableRefrigerantFlow) { + Model m; + + FanOnOff fan(m); + CoilCoolingDXVariableRefrigerantFlow cc(m); + CoilHeatingDXVariableRefrigerantFlow hc(m); + + ZoneHVACTerminalUnitVariableRefrigerantFlow vrf(m, cc, hc, fan); + + UnitarySystemPerformanceMultispeed perf(m); + perf.setName("US Perf Multispeed"); + EXPECT_TRUE(perf.addSupplyAirflowRatioField(1.0, 2.0)); + EXPECT_TRUE(perf.addSupplyAirflowRatioField(3.0, 4.0)); + EXPECT_TRUE(perf.addSupplyAirflowRatioField(5.0, 6.0)); + EXPECT_TRUE(vrf.setDesignSpecificationMultispeedObject(perf)); + + ThermalZone z(m); + Space s(m); + s.setThermalZone(z); + EXPECT_TRUE(vrf.addToThermalZone(z)); + + ForwardTranslator ft; + Workspace w = ft.translateModel(m); + + WorkspaceObjectVector idf_vrfs(w.getObjectsByType(IddObjectType::ZoneHVAC_TerminalUnit_VariableRefrigerantFlow)); + EXPECT_EQ(1, idf_vrfs.size()); + WorkspaceObject& idf_vrf = idf_vrfs.front(); + + EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); + + WorkspaceObjectVector idf_perfs(w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)); + EXPECT_EQ(1, idf_perfs.size()); + WorkspaceObject& idf_perf = idf_perfs.front(); + + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); + EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); + EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); + EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); + + ASSERT_EQ(3u, idf_perf.numExtensibleGroups()); +} + +TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_DoubleAssign) { + Model m; + + CoilCoolingDXVariableSpeed coil(m); + CoilCoolingDXVariableSpeedSpeedData speed(m); + EXPECT_TRUE(coil.addSpeed(speed)); + + AirLoopHVACUnitarySystem unitary(m); + unitary.setCoolingCoil(coil); + AirLoopHVACUnitarySystem unitary2(m); + unitary2.setCoolingCoil(coil); + + UnitarySystemPerformanceMultispeed perf(m); + EXPECT_TRUE(unitary.setDesignSpecificationMultispeedObject(perf)); + EXPECT_TRUE(unitary2.setDesignSpecificationMultispeedObject(perf)); + + AirLoopHVAC airLoop(m); + Node supplyOutletNode = airLoop.supplyOutletNode(); + unitary.addToNode(supplyOutletNode); + unitary2.addToNode(supplyOutletNode); + + ForwardTranslator ft; + Workspace w = ft.translateModel(m); + + EXPECT_EQ(1u, ft.errors().size()); +} diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index 1423679817a..cfe874ba475 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -81,10 +81,6 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera ZoneHVACTerminalUnitVariableRefrigerantFlow vrf(m, cc, hc, fan); - UnitarySystemPerformanceMultispeed perf(m); - perf.setName("US Perf Multispeed"); - EXPECT_TRUE(vrf.setDesignSpecificationMultispeedObject(perf)); - ThermalZone z(m); Space s(m); s.setThermalZone(z); @@ -260,14 +256,12 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera std::vector idf_hcs = w.getObjectsByType(IddObjectType::Coil_Heating_DX_VariableRefrigerantFlow); std::vector idf_fans = w.getObjectsByType(IddObjectType::Fan_OnOff); std::vector idf_supHCs = w.getObjectsByType(IddObjectType::Coil_Heating_Water); - std::vector idf_perfs = w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed); EXPECT_EQ(1u, idf_vrfs.size()); EXPECT_EQ(1u, idf_ccs.size()); EXPECT_EQ(1u, idf_hcs.size()); EXPECT_EQ(1u, idf_fans.size()); EXPECT_EQ(1u, idf_supHCs.size()); - EXPECT_EQ(1u, idf_perfs.size()); WorkspaceObject idf_vrf = idf_vrfs[0]; WorkspaceObject idf_cc = idf_ccs[0]; @@ -298,20 +292,6 @@ TEST_F(EnergyPlusFixture, ForwardTranslatorZoneHVACTerminalUnitVariableRefrigera EXPECT_EQ(idf_supHC.getString(Coil_Heating_WaterFields::AirOutletNodeName).get(), idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::TerminalUnitAirOutletNodeName).get()); - - EXPECT_EQ("UnitarySystemPerformance:Multispeed", - idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); - EXPECT_EQ("US Perf Multispeed", - idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); - - IdfObject idf_perf = w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; - - EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); - EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); - EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); - EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); - - ASSERT_EQ(0u, idf_perf.numExtensibleGroups()); } } diff --git a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp index 43cc471c036..d38da5ecf4d 100644 --- a/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACWaterToAirHeatPump_GTest.cpp @@ -20,7 +20,6 @@ #include "../../model/PortList.hpp" #include "../../model/Node.hpp" #include "../../model/PlantLoop.hpp" -#include "../../model/UnitarySystemPerformanceMultispeed.hpp" #include #include @@ -28,7 +27,6 @@ #include #include #include -#include #include #include "../../utilities/idf/IdfObject.hpp" @@ -101,10 +99,6 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { EXPECT_TRUE(clg_coil.setRatedEnteringAirDryBulbTemperature(26.0)); EXPECT_TRUE(clg_coil.setRatedEnteringAirWetBulbTemperature(20.1)); - UnitarySystemPerformanceMultispeed perf(m); - perf.setName("US Perf Multispeed"); - EXPECT_TRUE(hp.setDesignSpecificationMultispeedObject(perf)); - ThermalZone z(m); Space s(m); s.setThermalZone(z); @@ -239,7 +233,6 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { ASSERT_EQ(1, w.getObjectsByType(IddObjectType::Coil_Heating_Electric).size()); ASSERT_EQ(1, w.getObjectsByType(IddObjectType::Zone).size()); ASSERT_EQ(1, w.getObjectsByType(IddObjectType::ZoneHVAC_EquipmentList).size()); - ASSERT_EQ(1, w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed).size()); validateNodeMatch(w, "", drawThrough); @@ -272,18 +265,6 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_ZoneHVACWaterToAirHeatPump) { EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::AvailabilityManagerListName)); EXPECT_EQ("ConstantOnDemand", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::HeatPumpCoilWaterFlowMode).get()); EXPECT_TRUE(idf_hp.isEmpty(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationZoneHVACSizingObjectName)); - EXPECT_EQ("UnitarySystemPerformance:Multispeed", - idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); - EXPECT_EQ("US Perf Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName).get()); - - IdfObject idf_perf = w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)[0]; - - EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforHeating).get()); - EXPECT_EQ(1, idf_perf.getInt(UnitarySystemPerformance_MultispeedFields::NumberofSpeedsforCooling).get()); - EXPECT_EQ("No", idf_perf.getString(UnitarySystemPerformance_MultispeedFields::SingleModeOperation).get()); - EXPECT_EQ(1.0, idf_perf.getDouble(UnitarySystemPerformance_MultispeedFields::NoLoadSupplyAirFlowRateRatio).get()); - - ASSERT_EQ(0u, idf_perf.numExtensibleGroups()); { ASSERT_TRUE(idf_hp.getTarget(ZoneHVAC_WaterToAirHeatPumpFields::HeatingCoilName)); From 7cecbc939280c21c55e6d63c9e6bac0431bcbbf4 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 15:33:57 -0700 Subject: [PATCH 22/23] Formatting. --- ...itarySystemPerformanceMultispeed_GTest.cpp | 26 +++++++++++-------- ...minalUnitVariableRefrigerantFlow_GTest.cpp | 3 +-- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp b/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp index dd41f4e3aab..f7ad861a5bb 100644 --- a/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp +++ b/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp @@ -43,7 +43,7 @@ using namespace openstudio; TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_AirLoopHVACUnitarySystem) { Model m; - + CoilCoolingDXVariableSpeed coil(m); CoilCoolingDXVariableSpeedSpeedData speed1(m); EXPECT_TRUE(coil.addSpeed(speed1)); @@ -69,7 +69,8 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_A EXPECT_EQ(1, idf_unitarys.size()); WorkspaceObject& idf_unitary = idf_unitarys.front(); - EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_unitary.getString(AirLoopHVAC_UnitarySystemFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("UnitarySystemPerformance:Multispeed", + idf_unitary.getString(AirLoopHVAC_UnitarySystemFields::DesignSpecificationMultispeedObjectType).get()); EXPECT_EQ("US Perf Multispeed", idf_unitary.getString(AirLoopHVAC_UnitarySystemFields::DesignSpecificationMultispeedObjectName).get()); WorkspaceObjectVector idf_perfs(w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)); @@ -86,13 +87,13 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_A TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_ZoneHVACWaterToAirHeatPump) { Model m; - + Schedule sch = m.alwaysOnDiscreteSchedule(); FanOnOff fan(m); CoilHeatingWaterToAirHeatPumpEquationFit htg_coil(m); CoilCoolingWaterToAirHeatPumpEquationFit clg_coil(m); CoilHeatingElectric supp_htg_coil(m); - + ZoneHVACWaterToAirHeatPump hp(m, sch, fan, htg_coil, clg_coil, supp_htg_coil); UnitarySystemPerformanceMultispeed perf(m); @@ -105,7 +106,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_Z Space s(m); s.setThermalZone(z); EXPECT_TRUE(hp.addToThermalZone(z)); - + ForwardTranslator ft; Workspace w = ft.translateModel(m); @@ -113,7 +114,8 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_Z EXPECT_EQ(1, idf_hps.size()); WorkspaceObject& idf_hp = idf_hps.front(); - EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("UnitarySystemPerformance:Multispeed", + idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectType).get()); EXPECT_EQ("US Perf Multispeed", idf_hp.getString(ZoneHVAC_WaterToAirHeatPumpFields::DesignSpecificationMultispeedObjectName).get()); WorkspaceObjectVector idf_perfs(w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)); @@ -151,13 +153,15 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_Z ForwardTranslator ft; Workspace w = ft.translateModel(m); - + WorkspaceObjectVector idf_vrfs(w.getObjectsByType(IddObjectType::ZoneHVAC_TerminalUnit_VariableRefrigerantFlow)); EXPECT_EQ(1, idf_vrfs.size()); WorkspaceObject& idf_vrf = idf_vrfs.front(); - EXPECT_EQ("UnitarySystemPerformance:Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); - EXPECT_EQ("US Perf Multispeed", idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); + EXPECT_EQ("UnitarySystemPerformance:Multispeed", + idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectType).get()); + EXPECT_EQ("US Perf Multispeed", + idf_vrf.getString(ZoneHVAC_TerminalUnit_VariableRefrigerantFlowFields::DesignSpecificationMultispeedObjectName).get()); WorkspaceObjectVector idf_perfs(w.getObjectsByType(IddObjectType::UnitarySystemPerformance_Multispeed)); EXPECT_EQ(1, idf_perfs.size()); @@ -173,7 +177,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_Z TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_DoubleAssign) { Model m; - + CoilCoolingDXVariableSpeed coil(m); CoilCoolingDXVariableSpeedSpeedData speed(m); EXPECT_TRUE(coil.addSpeed(speed)); @@ -194,6 +198,6 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_UnitarySystemPerformanceMultispeed_D ForwardTranslator ft; Workspace w = ft.translateModel(m); - + EXPECT_EQ(1u, ft.errors().size()); } diff --git a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp index cfe874ba475..aba86aa8465 100644 --- a/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp +++ b/src/energyplus/Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp @@ -33,7 +33,6 @@ #include "../../model/ScheduleConstant.hpp" #include "../../model/SetpointManagerScheduled.hpp" #include "../../model/FanSystemModel.hpp" -#include "../../model/UnitarySystemPerformanceMultispeed.hpp" #include "../../utilities/idf/IdfObject.hpp" #include "../../utilities/idf/IdfObject_Impl.hpp" @@ -47,6 +46,7 @@ #include #include #include + #include #include #include @@ -61,7 +61,6 @@ #include #include #include -#include #include From 73f1545673731118c3c87f1e1b6c1b8e3214e8e1 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 26 Sep 2023 16:00:15 -0700 Subject: [PATCH 23/23] Add more includes. --- .../Test/UnitarySystemPerformanceMultispeed_GTest.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp b/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp index f7ad861a5bb..f9f83b61d6d 100644 --- a/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp +++ b/src/energyplus/Test/UnitarySystemPerformanceMultispeed_GTest.cpp @@ -24,8 +24,10 @@ #include "../../model/FanOnOff.hpp" #include "../../model/CoilHeatingElectric.hpp" #include "../../model/ScheduleConstant.hpp" +#include "../../model/Node.hpp" #include "../../model/UnitarySystemPerformanceMultispeed.hpp" +#include #include #include #include