boost::optional<IdfObject> ForwardTranslator::translateCoilCoolingDXSingleSpeed( CoilCoolingDXSingleSpeed& modelObject ) { IdfObject coilSystemCoolingDXIdf(IddObjectType::CoilSystem_Cooling_DX); m_idfObjects.push_back(coilSystemCoolingDXIdf); boost::optional<IdfObject> oIdfObject = translateCoilCoolingDXSingleSpeedWithoutUnitary(modelObject); if( ! oIdfObject ) { return boost::none; } IdfObject idfObject = oIdfObject.get(); OptionalString s; s = modelObject.name(); if( s ) { coilSystemCoolingDXIdf.setString(CoilSystem_Cooling_DXFields::CoolingCoilObjectType,idfObject.iddObject().name()); coilSystemCoolingDXIdf.setString(CoilSystem_Cooling_DXFields::CoolingCoilName,*s); coilSystemCoolingDXIdf.setName(*s + " CoilSystem"); } Schedule sched = modelObject.getAvailabilitySchedule(); translateAndMapModelObject(sched); coilSystemCoolingDXIdf.setString(CoilSystem_Cooling_DXFields::AvailabilityScheduleName,sched.name().get()); OptionalModelObject omo = modelObject.inletModelObject(); if( omo ) { translateAndMapModelObject(*omo); s = omo->name(); if(s) { coilSystemCoolingDXIdf.setString(CoilSystem_Cooling_DXFields::DXCoolingCoilSystemInletNodeName,*s); } } omo= modelObject.outletModelObject(); if( omo ) { translateAndMapModelObject(*omo); s = omo->name(); if(s) { coilSystemCoolingDXIdf.setString(CoilSystem_Cooling_DXFields::DXCoolingCoilSystemOutletNodeName,*s); coilSystemCoolingDXIdf.setString(CoilSystem_Cooling_DXFields::DXCoolingCoilSystemSensorNodeName,*s); } } return coilSystemCoolingDXIdf; }
TEST_F(ModelFixture,CoilCoolingDXSingleSpeed_addToNode) { Model m; Schedule s = m.alwaysOnDiscreteSchedule(); CurveBiquadratic totalCoolingCapacityFunctionofTemperatureCurve(m); CurveQuadratic totalCoolingCapacityFunctionofFlowFractionCurve(m); CurveBiquadratic energyInputRatioFunctionofTemperatureCurve(m); CurveQuadratic energyInputRatioFunctionofFlowFractionCurve(m); CurveQuadratic partLoadFractionCorrelationCurve(m); CoilCoolingDXSingleSpeed testObject(m, s, totalCoolingCapacityFunctionofTemperatureCurve, totalCoolingCapacityFunctionofFlowFractionCurve, energyInputRatioFunctionofTemperatureCurve, energyInputRatioFunctionofFlowFractionCurve, partLoadFractionCorrelationCurve); AirLoopHVAC airLoop(m); ControllerOutdoorAir controllerOutdoorAir(m); AirLoopHVACOutdoorAirSystem outdoorAirSystem(m,controllerOutdoorAir); Node supplyOutletNode = airLoop.supplyOutletNode(); outdoorAirSystem.addToNode(supplyOutletNode); EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ( (unsigned)5, airLoop.supplyComponents().size() ); Node inletNode = airLoop.zoneSplitter().lastOutletModelObject()->cast<Node>(); EXPECT_FALSE(testObject.addToNode(inletNode)); EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); PlantLoop plantLoop(m); supplyOutletNode = plantLoop.supplyOutletNode(); EXPECT_FALSE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ( (unsigned)5, plantLoop.supplyComponents().size() ); Node demandOutletNode = plantLoop.demandOutletNode(); EXPECT_FALSE(testObject.addToNode(demandOutletNode)); EXPECT_EQ( (unsigned)5, plantLoop.demandComponents().size() ); CurveBiquadratic c1(m); CurveQuadratic c2(m); CurveBiquadratic c3(m); CurveQuadratic c4(m); CurveQuadratic c5(m); CoilCoolingDXSingleSpeed testObject2(m, s, c1, c2, c3, c4, c5); if( boost::optional<Node> OANode = outdoorAirSystem.outboardOANode() ) { EXPECT_TRUE(testObject2.addToNode(*OANode)); EXPECT_EQ( (unsigned)5, airLoop.supplyComponents().size() ); EXPECT_EQ( (unsigned)3, outdoorAirSystem.oaComponents().size() ); } CurveBiquadratic c1_2(m); CurveQuadratic c2_2(m); CurveBiquadratic c3_2(m); CurveQuadratic c4_2(m); CurveQuadratic c5_2(m); CoilCoolingDXSingleSpeed testObject3(m, s, c1_2, c2_2, c3_2, c4_2, c5_2); if( boost::optional<Node> reliefNode = outdoorAirSystem.outboardReliefNode() ) { EXPECT_TRUE(testObject3.addToNode(*reliefNode)); EXPECT_EQ( (unsigned)5, airLoop.supplyComponents().size() ); EXPECT_EQ( (unsigned)3, outdoorAirSystem.reliefComponents().size() ); } // tests and checks to figure out clone bug // resolution: Due to using ModelObject::clone instead of StraightComponent::clone in reimplementation AirLoopHVAC airLoop2(m); EXPECT_EQ( (unsigned)5, airLoop.supplyComponents().size() ); CoilCoolingDXSingleSpeed testObjectClone = testObject.clone(m).cast<CoilCoolingDXSingleSpeed>(); CoilCoolingDXSingleSpeed testObjectClone2 = testObject.clone(m).cast<CoilCoolingDXSingleSpeed>(); EXPECT_EQ( (unsigned)5, airLoop.supplyComponents().size() ); Node supplyOutletNode2 = airLoop2.supplyOutletNode(); supplyOutletNode = airLoop.supplyOutletNode(); EXPECT_NE(testObject, testObjectClone); EXPECT_FALSE(testObjectClone.loop()); EXPECT_FALSE(testObjectClone.airLoopHVAC()); EXPECT_NE(testObject.totalCoolingCapacityFunctionOfTemperatureCurve(), testObjectClone.totalCoolingCapacityFunctionOfTemperatureCurve()); EXPECT_NE(testObject.totalCoolingCapacityFunctionOfFlowFractionCurve(), testObjectClone.totalCoolingCapacityFunctionOfFlowFractionCurve()); EXPECT_NE(testObject.energyInputRatioFunctionOfTemperatureCurve(), testObjectClone.energyInputRatioFunctionOfTemperatureCurve()); EXPECT_NE(testObject.energyInputRatioFunctionOfFlowFractionCurve(), testObjectClone.energyInputRatioFunctionOfFlowFractionCurve()); EXPECT_NE(testObject.partLoadFractionCorrelationCurve(), testObjectClone.partLoadFractionCorrelationCurve()); EXPECT_TRUE(testObject.inletModelObject()); EXPECT_TRUE(testObject.outletModelObject()); EXPECT_FALSE(testObjectClone.inletModelObject()); EXPECT_FALSE(testObjectClone.outletModelObject()); EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode2)); EXPECT_EQ( (unsigned)5, airLoop.supplyComponents().size() ); EXPECT_EQ( (unsigned)3, airLoop2.supplyComponents().size() ); EXPECT_TRUE(testObjectClone2.addToNode(supplyOutletNode)); EXPECT_EQ( (unsigned)7, airLoop.supplyComponents().size() ); }