From 026d454ebbd76b623311dcfd303306bc36a0d9b3 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 08:41:22 -0700 Subject: [PATCH 1/5] Add failing model tests for plantloop resetting fluid type. --- src/model/test/BoilerHotWater_GTest.cpp | 6 ++++++ src/model/test/BoilerSteam_GTest.cpp | 6 ++++++ src/model/test/GroundHeatExchangerVertical_GTest.cpp | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/src/model/test/BoilerHotWater_GTest.cpp b/src/model/test/BoilerHotWater_GTest.cpp index cb174ce8d12..9ad121163c7 100644 --- a/src/model/test/BoilerHotWater_GTest.cpp +++ b/src/model/test/BoilerHotWater_GTest.cpp @@ -75,6 +75,9 @@ TEST_F(ModelFixture, BoilerHotWater_addToNode) { EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); PlantLoop plantLoop(m); + EXPECT_TRUE(plantLoop.setFluidType("PropyleneGlycol")); + EXPECT_TRUE(plantLoop.setGlycolConcentration(50)); + supplyOutletNode = plantLoop.supplyOutletNode(); EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)7, plantLoop.supplyComponents().size()); @@ -88,6 +91,9 @@ TEST_F(ModelFixture, BoilerHotWater_addToNode) { EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)9, plantLoop.supplyComponents().size()); + + EXPECT_EQ(plantLoop.fluidType(), "PropyleneGlycol"); + EXPECT_EQ(plantLoop.glycolConcentration(), 50); } TEST_F(ModelFixture, BoilerHotWater_remove) { diff --git a/src/model/test/BoilerSteam_GTest.cpp b/src/model/test/BoilerSteam_GTest.cpp index cd0ca79764c..226ac55d392 100644 --- a/src/model/test/BoilerSteam_GTest.cpp +++ b/src/model/test/BoilerSteam_GTest.cpp @@ -159,6 +159,9 @@ TEST_F(ModelFixture, BoilerSteam_addToNode) { EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); PlantLoop plantLoop(m); + EXPECT_TRUE(plantLoop.setFluidType("PropyleneGlycol")); + EXPECT_TRUE(plantLoop.setGlycolConcentration(50)); + supplyOutletNode = plantLoop.supplyOutletNode(); EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)7, plantLoop.supplyComponents().size()); @@ -172,4 +175,7 @@ TEST_F(ModelFixture, BoilerSteam_addToNode) { EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)9, plantLoop.supplyComponents().size()); + + EXPECT_EQ(plantLoop.fluidType(), "PropyleneGlycol"); + EXPECT_EQ(plantLoop.glycolConcentration(), 50); } diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index 3e659eed418..f9df5be4a48 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -243,6 +243,9 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_addToNode) { EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); PlantLoop plantLoop(m); + EXPECT_TRUE(plantLoop.setFluidType("PropyleneGlycol")); + EXPECT_TRUE(plantLoop.setGlycolConcentration(50)); + supplyOutletNode = plantLoop.supplyOutletNode(); EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)7, plantLoop.supplyComponents().size()); @@ -256,6 +259,9 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_addToNode) { EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)9, plantLoop.supplyComponents().size()); + + EXPECT_EQ(plantLoop.fluidType(), "PropyleneGlycol"); + EXPECT_EQ(plantLoop.glycolConcentration(), 50); } TEST_F(ModelFixture, GroundHeatExchangerVertical_AddRemoveSupplyBranchForComponent) { From c049f5716709eb332e1b101d1ab8c5fd2820bbdc Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 11:08:21 -0700 Subject: [PATCH 2/5] Remove setting of fluid type from addToNode methods. --- src/model/BoilerHotWater.cpp | 9 ++--- src/model/BoilerSteam.cpp | 9 ++--- src/model/GroundHeatExchangerVertical.cpp | 10 ++--- ...undHeatExchangerHorizontalTrench_GTest.cpp | 38 +++++++++++++++++++ 4 files changed, 47 insertions(+), 19 deletions(-) diff --git a/src/model/BoilerHotWater.cpp b/src/model/BoilerHotWater.cpp index 93b228445f5..49bbbabce6e 100644 --- a/src/model/BoilerHotWater.cpp +++ b/src/model/BoilerHotWater.cpp @@ -372,12 +372,9 @@ namespace model { } bool BoilerHotWater_Impl::addToNode(Node& node) { - if (boost::optional plant = node.plantLoop()) { - if (plant->supplyComponent(node.handle())) { - if (StraightComponent_Impl::addToNode(node)) { - plant->setFluidType("Water"); - return true; - } + if (auto plant = node.plantLoop()) { + if (!plant->demandComponent(node.handle())) { + return StraightComponent_Impl::addToNode(node); } } diff --git a/src/model/BoilerSteam.cpp b/src/model/BoilerSteam.cpp index 8ce74c0cd94..76005d1e7d9 100644 --- a/src/model/BoilerSteam.cpp +++ b/src/model/BoilerSteam.cpp @@ -341,12 +341,9 @@ namespace model { } bool BoilerSteam_Impl::addToNode(Node& node) { - if (boost::optional plant = node.plantLoop()) { - if (plant->supplyComponent(node.handle())) { - if (StraightComponent_Impl::addToNode(node)) { - plant->setFluidType("Steam"); - return true; - } + if (auto plant = node.plantLoop()) { + if (!plant->demandComponent(node.handle())) { + return StraightComponent_Impl::addToNode(node); } } diff --git a/src/model/GroundHeatExchangerVertical.cpp b/src/model/GroundHeatExchangerVertical.cpp index 39a03cde3b9..bd8f6430043 100644 --- a/src/model/GroundHeatExchangerVertical.cpp +++ b/src/model/GroundHeatExchangerVertical.cpp @@ -353,14 +353,10 @@ namespace model { return OS_GroundHeatExchanger_VerticalFields::OutletNodeName; } - // addToNode bool GroundHeatExchangerVertical_Impl::addToNode(Node& node) { - if (boost::optional plant = node.plantLoop()) { - if (plant->supplyComponent(node.handle())) { - if (StraightComponent_Impl::addToNode(node)) { - plant->setFluidType("Water"); - return true; - } + if (auto plant = node.plantLoop()) { + if (!plant->demandComponent(node.handle())) { + return StraightComponent_Impl::addToNode(node); } } diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index 84de5ebd554..8b1a359d5a4 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -244,3 +244,41 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { EXPECT_EQ(1u, m.getConcreteModelObjects().size()); } } + +TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_addToNode) { + Model m; + GroundHeatExchangerHorizontalTrench testObject(m); + + AirLoopHVAC airLoop(m); + + Node supplyOutletNode = airLoop.supplyOutletNode(); + + EXPECT_FALSE(testObject.addToNode(supplyOutletNode)); + EXPECT_EQ((unsigned)2, airLoop.supplyComponents().size()); + + Node inletNode = airLoop.zoneSplitter().lastOutletModelObject()->cast(); + + EXPECT_FALSE(testObject.addToNode(inletNode)); + EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); + + PlantLoop plantLoop(m); + EXPECT_TRUE(plantLoop.setFluidType("PropyleneGlycol")); + EXPECT_TRUE(plantLoop.setGlycolConcentration(50)); + + supplyOutletNode = plantLoop.supplyOutletNode(); + EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); + EXPECT_EQ((unsigned)7, plantLoop.supplyComponents().size()); + + Node demandOutletNode = plantLoop.demandOutletNode(); + EXPECT_FALSE(testObject.addToNode(demandOutletNode)); + EXPECT_EQ((unsigned)5, plantLoop.demandComponents().size()); + + auto testObjectClone = testObject.clone(m).cast(); + supplyOutletNode = plantLoop.supplyOutletNode(); + + EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode)); + EXPECT_EQ((unsigned)9, plantLoop.supplyComponents().size()); + + EXPECT_EQ(plantLoop.fluidType(), "PropyleneGlycol"); + EXPECT_EQ(plantLoop.glycolConcentration(), 50); +} From 22dab5a2608ecdb6a6e6ff5cabc3be07dc8f637f Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 11:52:23 -0700 Subject: [PATCH 3/5] Update includes in model test files. --- src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp | 4 ++++ src/model/test/GroundHeatExchangerVertical_GTest.cpp | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index 8b1a359d5a4..653337c8b88 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -11,6 +11,10 @@ #include "../SiteGroundTemperatureUndisturbedKusudaAchenbach_Impl.hpp" #include "../SiteGroundTemperatureUndisturbedXing.hpp" #include "../SiteGroundTemperatureUndisturbedXing_Impl.hpp" +#include "../AirLoopHVAC.hpp" +#include "../PlantLoop.hpp" +#include "../Node.hpp" +#include "../Node_Impl.hpp" using namespace openstudio; using namespace openstudio::model; diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index f9df5be4a48..d8e44cfeabb 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -15,7 +15,6 @@ #include "../PlantLoop.hpp" #include "../Node.hpp" #include "../Node_Impl.hpp" -#include "../AirLoopHVACZoneSplitter.hpp" using namespace openstudio; using namespace openstudio::model; From c0038bba6ee6544ac64f5ad6df9c5e04f7395c61 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 13:32:57 -0700 Subject: [PATCH 4/5] Include airloop HVAC zone splitter in model test files. --- src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp | 1 + src/model/test/GroundHeatExchangerVertical_GTest.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index 653337c8b88..f304b55fab0 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -15,6 +15,7 @@ #include "../PlantLoop.hpp" #include "../Node.hpp" #include "../Node_Impl.hpp" +#include "../AirLoopHVACZoneSplitter.hpp" using namespace openstudio; using namespace openstudio::model; diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index d8e44cfeabb..f9df5be4a48 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -15,6 +15,7 @@ #include "../PlantLoop.hpp" #include "../Node.hpp" #include "../Node_Impl.hpp" +#include "../AirLoopHVACZoneSplitter.hpp" using namespace openstudio; using namespace openstudio::model; From ecba60c4e9542d124789ed090f96aa2fc582b49d Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 21 Aug 2025 11:18:39 -0700 Subject: [PATCH 5/5] Revert changes to BoilerHotWater and BoilerSteam. --- src/model/BoilerHotWater.cpp | 9 ++++++--- src/model/BoilerSteam.cpp | 9 ++++++--- src/model/test/BoilerHotWater_GTest.cpp | 6 ------ src/model/test/BoilerSteam_GTest.cpp | 6 ------ 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/model/BoilerHotWater.cpp b/src/model/BoilerHotWater.cpp index 49bbbabce6e..93b228445f5 100644 --- a/src/model/BoilerHotWater.cpp +++ b/src/model/BoilerHotWater.cpp @@ -372,9 +372,12 @@ namespace model { } bool BoilerHotWater_Impl::addToNode(Node& node) { - if (auto plant = node.plantLoop()) { - if (!plant->demandComponent(node.handle())) { - return StraightComponent_Impl::addToNode(node); + if (boost::optional plant = node.plantLoop()) { + if (plant->supplyComponent(node.handle())) { + if (StraightComponent_Impl::addToNode(node)) { + plant->setFluidType("Water"); + return true; + } } } diff --git a/src/model/BoilerSteam.cpp b/src/model/BoilerSteam.cpp index 76005d1e7d9..8ce74c0cd94 100644 --- a/src/model/BoilerSteam.cpp +++ b/src/model/BoilerSteam.cpp @@ -341,9 +341,12 @@ namespace model { } bool BoilerSteam_Impl::addToNode(Node& node) { - if (auto plant = node.plantLoop()) { - if (!plant->demandComponent(node.handle())) { - return StraightComponent_Impl::addToNode(node); + if (boost::optional plant = node.plantLoop()) { + if (plant->supplyComponent(node.handle())) { + if (StraightComponent_Impl::addToNode(node)) { + plant->setFluidType("Steam"); + return true; + } } } diff --git a/src/model/test/BoilerHotWater_GTest.cpp b/src/model/test/BoilerHotWater_GTest.cpp index 9ad121163c7..cb174ce8d12 100644 --- a/src/model/test/BoilerHotWater_GTest.cpp +++ b/src/model/test/BoilerHotWater_GTest.cpp @@ -75,9 +75,6 @@ TEST_F(ModelFixture, BoilerHotWater_addToNode) { EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); PlantLoop plantLoop(m); - EXPECT_TRUE(plantLoop.setFluidType("PropyleneGlycol")); - EXPECT_TRUE(plantLoop.setGlycolConcentration(50)); - supplyOutletNode = plantLoop.supplyOutletNode(); EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)7, plantLoop.supplyComponents().size()); @@ -91,9 +88,6 @@ TEST_F(ModelFixture, BoilerHotWater_addToNode) { EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)9, plantLoop.supplyComponents().size()); - - EXPECT_EQ(plantLoop.fluidType(), "PropyleneGlycol"); - EXPECT_EQ(plantLoop.glycolConcentration(), 50); } TEST_F(ModelFixture, BoilerHotWater_remove) { diff --git a/src/model/test/BoilerSteam_GTest.cpp b/src/model/test/BoilerSteam_GTest.cpp index 226ac55d392..cd0ca79764c 100644 --- a/src/model/test/BoilerSteam_GTest.cpp +++ b/src/model/test/BoilerSteam_GTest.cpp @@ -159,9 +159,6 @@ TEST_F(ModelFixture, BoilerSteam_addToNode) { EXPECT_EQ((unsigned)5, airLoop.demandComponents().size()); PlantLoop plantLoop(m); - EXPECT_TRUE(plantLoop.setFluidType("PropyleneGlycol")); - EXPECT_TRUE(plantLoop.setGlycolConcentration(50)); - supplyOutletNode = plantLoop.supplyOutletNode(); EXPECT_TRUE(testObject.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)7, plantLoop.supplyComponents().size()); @@ -175,7 +172,4 @@ TEST_F(ModelFixture, BoilerSteam_addToNode) { EXPECT_TRUE(testObjectClone.addToNode(supplyOutletNode)); EXPECT_EQ((unsigned)9, plantLoop.supplyComponents().size()); - - EXPECT_EQ(plantLoop.fluidType(), "PropyleneGlycol"); - EXPECT_EQ(plantLoop.glycolConcentration(), 50); }