| 2387 | } |
| 2388 | |
| 2389 | bool ThermalZone_Impl::setReturnPlenum(const ThermalZone& plenumZone, AirLoopHVAC& airLoop) { |
| 2390 | bool result = true; |
| 2391 | |
| 2392 | if (!plenumZone.canBePlenum()) { |
| 2393 | result = false; |
| 2394 | } |
| 2395 | |
| 2396 | boost::optional<AirLoopHVACReturnPlenum> plenum; |
| 2397 | |
| 2398 | if (result) { |
| 2399 | plenum = plenumZone.getImpl<ThermalZone_Impl>()->airLoopHVACReturnPlenum(); |
| 2400 | boost::optional<AirLoopHVAC> plenumAirLoop; |
| 2401 | |
| 2402 | if (plenum) { |
| 2403 | plenumAirLoop = plenum->airLoopHVAC(); |
| 2404 | } |
| 2405 | |
| 2406 | if (plenumAirLoop) { |
| 2407 | if (plenumAirLoop.get() != airLoop) { |
| 2408 | result = false; |
| 2409 | } |
| 2410 | } |
| 2411 | } |
| 2412 | |
| 2413 | Model t_model = model(); |
| 2414 | |
| 2415 | if (result) { |
| 2416 | if (!plenum) { |
| 2417 | plenum = AirLoopHVACReturnPlenum(t_model); |
| 2418 | plenum->setThermalZone(plenumZone); |
| 2419 | } |
| 2420 | } |
| 2421 | |
| 2422 | if (result) { |
| 2423 | removeReturnPlenum(airLoop); |
| 2424 | |
| 2425 | auto node = airLoop.demandComponents(getObject<ThermalZone>(), airLoop.zoneMixer(), Node::iddObjectType()).front().cast<Node>(); |
| 2426 | |
| 2427 | OS_ASSERT(plenum); |
| 2428 | result = plenum->addToNode(node); |
| 2429 | } |
| 2430 | |
| 2431 | return result; |
| 2432 | } |
| 2433 | |
| 2434 | bool ThermalZone_Impl::setReturnPlenum(const ThermalZone& plenumZone) { |
| 2435 | auto loop = airLoopHVAC(); |