MCPcopy Create free account
hub / github.com/NatLabRockies/OpenStudio / clone

Method clone

src/model/AirLoopHVAC.cpp:703–846  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

701 }
702
703 ModelObject AirLoopHVAC_Impl::clone(Model model) const {
704 auto airLoopClone = Loop_Impl::clone(model).cast<AirLoopHVAC>();
705
706 airLoopClone.setString(supplyInletPort(), "");
707 airLoopClone.setString(supplyOutletPortA(), "");
708 airLoopClone.setString(supplyOutletPortB(), "");
709 airLoopClone.setString(demandInletPortA(), "");
710 airLoopClone.setString(demandInletPortB(), "");
711 airLoopClone.setString(demandOutletPort(), "");
712
713 // Sizing:System was already cloned because it is declared as a child
714 // And because it has the setParent method overriden, no need to do anything
715
716 {
717 auto clone = availabilitySchedule().clone(model).cast<Schedule>();
718 airLoopClone.setPointer(OS_AirLoopHVACFields::AvailabilitySchedule, clone.handle());
719 }
720
721 {
722 auto avmListClone = availabilityManagerAssignmentList().clone(model).cast<AvailabilityManagerAssignmentList>();
723 avmListClone.setName(airLoopClone.name().get() + " AvailabilityManagerAssigmentList");
724 airLoopClone.setPointer(OS_AirLoopHVACFields::AvailabilityManagerListName, avmListClone.handle());
725 }
726
727 airLoopClone.getImpl<detail::AirLoopHVAC_Impl>()->createTopology();
728
729 struct HVACPath
730 {
731 HVACPath(const HVACComponent& t_originalStart, const HVACComponent& t_originalEnd, const HVACComponent& t_clonedStartOrEndOfPath,
732 const Node& t_clonedAddNode, bool t_reverse)
733 : originalStart(t_originalStart),
734 originalEnd(t_originalEnd),
735 clonedStartOrEndOfPath(t_clonedStartOrEndOfPath),
736 clonedAddNode(t_clonedAddNode),
737 reverse(t_reverse){};
738
739 HVACComponent originalStart;
740 HVACComponent originalEnd;
741 HVACComponent clonedStartOrEndOfPath; // If reverse is false, it's the start, if reverse is true, it's the end
742 Node clonedAddNode;
743 bool reverse;
744 };
745
746 std::vector<HVACPath> pathsToHandle;
747
748 if (isDualDuct()) {
749 // Add the Splitter to make it a dual duct
750 auto supplyInletNodeClone = airLoopClone.supplyInletNode();
751 ConnectorSplitter supplySplitterClone(model);
752 supplySplitterClone.addToNode(supplyInletNodeClone);
753 airLoopClone.getImpl<detail::AirLoopHVAC_Impl>()->setSupplySplitter(supplySplitterClone);
754
755 auto supplyOutletNodeClones = airLoopClone.supplyOutletNodes();
756
757 auto supplySplitter = this->supplySplitter().get();
758 auto supplyInletNode = this->supplyInletNode();
759 auto supplyOutletNodes = this->supplyOutletNodes();
760

Callers 1

addBranchForZoneImplMethod · 0.45

Calls 15

supplyInletNodeMethod · 0.95
supplyOutletNodesMethod · 0.95
supplySplitterMethod · 0.95
supplyOutletNodeMethod · 0.95
reverseFunction · 0.85
beginMethod · 0.80
supplyComponentsMethod · 0.80
setpointManagersMethod · 0.80
iddObjectTypeFunction · 0.70
cloneFunction · 0.50

Tested by

no test coverage detected