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

Method clone

src/model/AirLoopHVACOutdoorAirSystem.cpp:147–259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

145 }
146
147 ModelObject AirLoopHVACOutdoorAirSystem_Impl::clone(Model model) const {
148 auto oaclone = ModelObject_Impl::clone(model).cast<AirLoopHVACOutdoorAirSystem>();
149
150 // Clone OA controller
151 auto controllerOutdoorAir = getControllerOutdoorAir().clone(model).cast<ControllerOutdoorAir>();
152 oaclone.setControllerOutdoorAir(controllerOutdoorAir);
153
154 oaclone.setString(oaclone.mixedAirPort(), "");
155 oaclone.setString(oaclone.returnAirPort(), "");
156 oaclone.setString(oaclone.outdoorAirPort(), "");
157 oaclone.setString(oaclone.reliefAirPort(), "");
158
159 Node oaNodeClone(model);
160 model.connect(oaNodeClone, oaNodeClone.outletPort(), oaclone, oaclone.outdoorAirPort());
161
162 Node reliefNodeClone(model);
163 model.connect(oaclone, oaclone.reliefAirPort(), reliefNodeClone, reliefNodeClone.inletPort());
164
165 // Clone oa stream comps
166 // Note that in the case of AirToAirComponent, this also does stuff to the relief side!
167 auto oaComps = oaComponents();
168 std::reverse(oaComps.begin(), oaComps.end());
169 std::vector<Node> oaNodes;
170
171 for (const auto& comp : oaComps) {
172 if (comp.iddObjectType() == Node::iddObjectType()) {
173 oaNodes.push_back(comp.cast<Node>());
174 } else {
175 auto compClone = comp.clone(model).cast<HVACComponent>();
176 compClone.addToNode(oaNodeClone);
177 }
178 }
179
180 auto oaNodeClones = subsetCastVector<Node>(oaclone.oaComponents());
181 std::reverse(oaNodeClones.begin(), oaNodeClones.end());
182
183 if (oaNodes.size() == oaNodeClones.size()) {
184 for (size_t i = 0; i < oaNodes.size(); ++i) {
185 const auto node = oaNodes[i];
186 auto cloneNode = oaNodeClones[i];
187
188 auto spms = node.setpointManagers();
189 for (const auto& spm : spms) {
190 auto spmclone = spm.clone(model).cast<SetpointManager>();
191 spmclone.addToNode(cloneNode);
192 }
193 }
194 }
195
196 // Clone relief stream comps
197
198 auto reliefComps = reliefComponents();
199
200 auto reliefAirToAirComps = subsetCastVector<AirToAirComponent>(reliefComps);
201
202 std::vector<Node> reliefNodes;
203
204 if (reliefAirToAirComps.empty()) {

Callers

nothing calls this directly

Calls 15

reverseFunction · 0.85
mixedAirPortMethod · 0.80
outdoorAirPortMethod · 0.80
reliefAirPortMethod · 0.80
beginMethod · 0.80
setpointManagersMethod · 0.80
reliefAirModelObjectMethod · 0.80
briefDescriptionMethod · 0.80
reliefComponentsMethod · 0.80

Tested by

no test coverage detected