bool CoilCoolingWater_Impl::addToNode(Node & node) { bool success; success = WaterToAirComponent_Impl::addToNode( node ); if( success && (! containingHVACComponent()) && (! containingZoneHVACComponent()) ) { if( boost::optional<ModelObject> _waterInletModelObject = waterInletModelObject() ) { Model _model = model(); boost::optional<ControllerWaterCoil> oldController; oldController = controllerWaterCoil(); if( oldController ) { oldController->remove(); } ControllerWaterCoil controller(_model); boost::optional<Node> coilWaterInletNode = _waterInletModelObject->optionalCast<Node>(); OS_ASSERT(coilWaterInletNode); controller.setActuatorNode(coilWaterInletNode.get()); if( boost::optional<ModelObject> mo = airOutletModelObject() ) { if( boost::optional<Node> coilAirOutletNode = mo->optionalCast<Node>() ) { controller.setSensorNode(coilAirOutletNode.get()); } } controller.setAction("Reverse"); } } return success; }
std::vector<HVACComponent> WaterToAirComponent_Impl::edges(const boost::optional<HVACComponent> & prev) { std::vector<HVACComponent> edges; auto pushWaterOutletModelObject = [&]() { if( auto edgeModelObject = waterOutletModelObject() ) { auto edgeHVACComponent = edgeModelObject->optionalCast<HVACComponent>(); OS_ASSERT(edgeHVACComponent); edges.push_back(edgeHVACComponent.get()); } }; auto pushAirOutletModelObject = [&]() { if( auto edgeModelObject = airOutletModelObject() ) { auto edgeHVACComponent = edgeModelObject->optionalCast<HVACComponent>(); OS_ASSERT(edgeHVACComponent); edges.push_back(edgeHVACComponent.get()); } }; if( prev) { if( auto inletModelObject = waterInletModelObject() ) { if( prev.get() == inletModelObject.get() ) { pushWaterOutletModelObject(); return edges; } } if( auto inletModelObject = airInletModelObject() ) { if( prev.get() == inletModelObject.get() ) { pushAirOutletModelObject(); return edges; } } } else { pushWaterOutletModelObject(); pushAirOutletModelObject(); return edges; } return edges; }
bool WaterToAirComponent_Impl::removeFromAirLoopHVAC() { Model _model = model(); ModelObject thisObject = getObject<ModelObject>(); if( boost::optional<AirLoopHVAC> airLoop = airLoopHVAC() ) { if( airOutletModelObject().get() == airLoop->supplyOutletNodes().front() && airInletModelObject().get() == airLoop->supplyInletNode() ) { ModelObject sourceModelObject = airInletModelObject().get(); unsigned sourcePort = connectedObjectPort( airInletPort() ).get(); ModelObject targetModelObject = airOutletModelObject().get(); unsigned targetPort = connectedObjectPort( airOutletPort() ).get(); model().disconnect(thisObject,airOutletPort()); model().disconnect(thisObject,airInletPort()); _model.connect( sourceModelObject, sourcePort, targetModelObject, targetPort ); return true; } else if( airOutletModelObject().get() == airLoop->supplyOutletNodes().front() ) { Node sourceModelObject = airInletModelObject()->optionalCast<Node>().get(); ModelObject targetModelObject = airOutletModelObject().get(); unsigned targetPort = connectedObjectPort( airOutletPort() ).get(); ModelObject source2ModelObject = sourceModelObject.inletModelObject().get(); unsigned source2Port = sourceModelObject.connectedObjectPort( sourceModelObject.inletPort() ).get(); model().disconnect(thisObject,airOutletPort()); model().disconnect(thisObject,airInletPort()); _model.connect( source2ModelObject, source2Port, targetModelObject, targetPort ); sourceModelObject.remove(); return true; } else { ModelObject sourceModelObject = airInletModelObject().get(); unsigned sourcePort = connectedObjectPort( airInletPort() ).get(); Node targetModelObject = airOutletModelObject()->optionalCast<Node>().get(); ModelObject target2ModelObject = targetModelObject.outletModelObject().get(); unsigned target2Port = targetModelObject.connectedObjectPort( targetModelObject.outletPort() ).get(); model().disconnect(thisObject,airOutletPort()); model().disconnect(thisObject,airInletPort()); _model.connect( sourceModelObject, sourcePort, target2ModelObject, target2Port ); targetModelObject.remove(); return true; } } return false; }