bool WaterToAirComponent_Impl::addToNode(Node & node) { Model _model = node.model(); ModelObject thisModelObject = getObject<ModelObject>(); boost::optional<AirLoopHVACOutdoorAirSystem> oaSystem = node.airLoopHVACOutdoorAirSystem(); if( node.airLoopHVAC() && ! oaSystem ) { AirLoopHVAC airLoop = node.airLoopHVAC().get(); if( airLoop.demandComponent( node.handle() ) ) { return false; } else { if( airLoopHVAC() ) { removeFromAirLoopHVAC(); } if( node == airLoop.supplyOutletNode() && node.inletModelObject().get() == airLoop.supplyInletNode() ) { unsigned oldOutletPort = node.connectedObjectPort( node.inletPort() ).get(); unsigned oldInletPort = node.inletPort(); ModelObject oldSourceModelObject = node.connectedObject( node.inletPort() ).get(); ModelObject oldTargetModelObject = node; _model.connect( oldSourceModelObject, oldOutletPort, thisModelObject, airInletPort() ); _model.connect( thisModelObject, airOutletPort(), oldTargetModelObject, oldInletPort ); return true; } if( node == airLoop.supplyInletNode() && node.outletModelObject().get() == airLoop.supplyOutletNode() ) { unsigned oldOutletPort = node.outletPort(); unsigned oldInletPort = node.connectedObjectPort( node.outletPort() ).get(); ModelObject oldSourceModelObject = node; ModelObject oldTargetModelObject = node.outletModelObject().get(); _model.connect( oldSourceModelObject, oldOutletPort, thisModelObject, airInletPort() ); _model.connect( thisModelObject, airOutletPort(), oldTargetModelObject, oldInletPort ); return true; } else if( node == airLoop.supplyOutletNode() ) { unsigned oldOutletPort = node.connectedObjectPort( node.inletPort() ).get(); unsigned oldInletPort = node.inletPort(); ModelObject oldSourceModelObject = node.connectedObject( node.inletPort() ).get(); ModelObject oldTargetModelObject = node; Node newNode( _model ); _model.connect( oldSourceModelObject, oldOutletPort, newNode, newNode.inletPort() ); _model.connect( newNode, newNode.outletPort(), thisModelObject, airInletPort() ); _model.connect( thisModelObject, airOutletPort(), oldTargetModelObject, oldInletPort ); return true; } else { unsigned oldOutletPort = node.outletPort(); unsigned oldInletPort = node.connectedObjectPort( node.outletPort() ).get(); ModelObject oldSourceModelObject = node; ModelObject oldTargetModelObject = node.connectedObject( node.outletPort() ).get(); Node newNode( _model ); _model.connect( oldSourceModelObject, oldOutletPort, thisModelObject, airInletPort() ); _model.connect( thisModelObject, airOutletPort(), newNode, newNode.inletPort() ); _model.connect( newNode, newNode.outletPort(), oldTargetModelObject, oldInletPort ); return true; } } } else if( node.plantLoop() ) { PlantLoop _plantLoop = node.plantLoop().get(); if( ! _plantLoop.demandComponent( node.handle() ) ) { return false; } else { if( plantLoop() ) { removeFromPlantLoop(); } if( node == _plantLoop.demandOutletNode() && node.inletModelObject().get() == _plantLoop.demandInletNode() ) { unsigned oldOutletPort = node.connectedObjectPort( node.inletPort() ).get(); unsigned oldInletPort = node.inletPort(); ModelObject oldSourceModelObject = node.connectedObject( node.inletPort() ).get(); ModelObject oldTargetModelObject = node; _model.connect( oldSourceModelObject, oldOutletPort, thisModelObject, waterInletPort() ); _model.connect( thisModelObject, waterOutletPort(), oldTargetModelObject, oldInletPort ); return true; } else if( node == _plantLoop.demandOutletNode() ) { unsigned oldOutletPort = node.connectedObjectPort( node.inletPort() ).get(); unsigned oldInletPort = node.inletPort(); ModelObject oldSourceModelObject = node.connectedObject( node.inletPort() ).get(); ModelObject oldTargetModelObject = node; Node newNode( _model ); _model.connect( oldSourceModelObject, oldOutletPort, newNode, newNode.inletPort() ); _model.connect( newNode, newNode.outletPort(), thisModelObject, waterInletPort() ); _model.connect( thisModelObject, waterOutletPort(), oldTargetModelObject, oldInletPort ); return true; } else { unsigned oldOutletPort = node.outletPort(); unsigned oldInletPort = node.connectedObjectPort( node.outletPort() ).get(); ModelObject oldSourceModelObject = node; ModelObject oldTargetModelObject = node.connectedObject( node.outletPort() ).get(); Node newNode( _model ); _model.connect( oldSourceModelObject, oldOutletPort, thisModelObject, waterInletPort() ); _model.connect( thisModelObject, waterOutletPort(), newNode, newNode.inletPort() ); _model.connect( newNode, newNode.outletPort(), oldTargetModelObject, oldInletPort ); return true; } } } else { return false; } }
TEST_F(ModelFixture,AirLoopHVAC_AirLoopHVAC) { Model model = Model(); OptionalModelObject modelObject; AirLoopHVAC airLoopHVAC = AirLoopHVAC(model); ASSERT_EQ(airLoopHVAC.iddObject().name(),"OS:AirLoopHVAC"); OptionalNode supplyInletNode = airLoopHVAC.supplyInletNode(); OptionalNode demandOutletNode = airLoopHVAC.demandOutletNode(); std::vector<Node> supplyOutletNodes = airLoopHVAC.supplyOutletNodes(); std::vector<Node> demandInletNodes = airLoopHVAC.demandInletNodes(); ASSERT_TRUE( supplyInletNode ); ASSERT_TRUE( demandOutletNode ); ASSERT_EQ( unsigned(1), supplyOutletNodes.size() ); ASSERT_EQ( unsigned(1), demandInletNodes.size() ); OptionalNode supplyOutletNode = OptionalNode(supplyOutletNodes.front()); OptionalNode demandInletNode = OptionalNode(demandInletNodes.front()); modelObject = demandInletNode->outletModelObject(); ASSERT_TRUE( modelObject ); OptionalAirLoopHVACZoneSplitter splitter; splitter = modelObject->optionalCast<AirLoopHVACZoneSplitter>(); ASSERT_TRUE( splitter ); modelObject = splitter->lastOutletModelObject(); ASSERT_TRUE( modelObject ); OptionalNode splitterNode; splitterNode = modelObject->optionalCast<Node>(); ASSERT_TRUE( splitterNode ); modelObject = splitterNode->outletModelObject(); ASSERT_TRUE(modelObject); OptionalAirLoopHVACZoneMixer mixer; mixer = modelObject->optionalCast<AirLoopHVACZoneMixer>(); ASSERT_TRUE( mixer ); modelObject = mixer->outletModelObject(); ASSERT_TRUE( modelObject ); OptionalNode _demandOutletNode; _demandOutletNode = modelObject->optionalCast<Node>(); ASSERT_TRUE( _demandOutletNode ); modelObject = _demandOutletNode->outletModelObject(); ASSERT_TRUE( modelObject ); OptionalAirLoopHVAC _airLoopHVAC; _airLoopHVAC = modelObject->optionalCast<AirLoopHVAC>(); ASSERT_TRUE( _airLoopHVAC ); ASSERT_EQ("StayOff",_airLoopHVAC->nightCycleControlType()); ASSERT_TRUE(_airLoopHVAC->setNightCycleControlType("CycleOnAny")); ASSERT_TRUE(_airLoopHVAC->setNightCycleControlType("CycleOnAnyZoneFansOnly")); ::testing::FLAGS_gtest_death_test_style = "threadsafe"; ASSERT_EXIT ( { Model m; AirLoopHVAC airLoopHVAC(m); airLoopHVAC.availabilitySchedule(); exit(0); } ,