From 5a22da93f20af890c122c3993f8752a9a59324ad Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 09:29:25 -0700 Subject: [PATCH 1/9] Add ground hx model tests for cloning into another model. --- ...undHeatExchangerHorizontalTrench_GTest.cpp | 24 +++++++++++++++++++ .../GroundHeatExchangerVertical_GTest.cpp | 10 ++++++++ 2 files changed, 34 insertions(+) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index 84de5ebd554..c7632a59757 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -243,4 +243,28 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { EXPECT_EQ(0u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); } + + //clone into another model + { + Model m; + GroundHeatExchangerHorizontalTrench testObject(m); + + auto testObjectClone = testObject.clone(m).cast(); + + Model m2; + auto testObjectClone2 = testObject.clone(m2).cast(); + + EXPECT_NE(testObjectClone2, testObjectClone); + EXPECT_NE(testObjectClone2.handle(), testObjectClone.handle()); + + ModelObject undisturbedGroundTemperatureModelClone = testObjectClone.undisturbedGroundTemperatureModel(); + boost::optional sgtClone = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(sgtClone); + + ModelObject undisturbedGroundTemperatureModelClone2 = testObjectClone2.undisturbedGroundTemperatureModel(); + boost::optional sgtClone2 = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(sgtClone2); + } } diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index 3e659eed418..6d7b68d6f58 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -332,6 +332,16 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_Clone) { EXPECT_NE(testObjectClone2, testObjectClone); EXPECT_NE(testObjectClone2.handle(), testObjectClone.handle()); + + ModelObject undisturbedGroundTemperatureModelClone = testObjectClone.undisturbedGroundTemperatureModel(); + boost::optional sgtClone = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(sgtClone); + + ModelObject undisturbedGroundTemperatureModelClone2 = testObjectClone2.undisturbedGroundTemperatureModel(); + boost::optional sgtClone2 = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(sgtClone2); } TEST_F(ModelFixture, GroundHeatExchangerVertical_GFunctions) { From 5da32dcf67e43d7c9fcbe75ebd34e41b401ea0e4 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 09:29:40 -0700 Subject: [PATCH 2/9] Formatting. --- src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index c7632a59757..b0e3d89e9b9 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -243,7 +243,7 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { EXPECT_EQ(0u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); } - + //clone into another model { Model m; From b5929e442e5ed7ae8790557b4e6ac27f8e97dcd2 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 11:16:06 -0700 Subject: [PATCH 3/9] Typo in new tests. --- src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp | 4 ++-- src/model/test/GroundHeatExchangerVertical_GTest.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index b0e3d89e9b9..037995acbea 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -259,12 +259,12 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { ModelObject undisturbedGroundTemperatureModelClone = testObjectClone.undisturbedGroundTemperatureModel(); boost::optional sgtClone = - undisturbedGroundTemperatureModel.optionalCast(); + undisturbedGroundTemperatureModelClone.optionalCast(); ASSERT_TRUE(sgtClone); ModelObject undisturbedGroundTemperatureModelClone2 = testObjectClone2.undisturbedGroundTemperatureModel(); boost::optional sgtClone2 = - undisturbedGroundTemperatureModel.optionalCast(); + undisturbedGroundTemperatureModelClone2.optionalCast(); ASSERT_TRUE(sgtClone2); } } diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index 6d7b68d6f58..cb9d64617a1 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -335,12 +335,12 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_Clone) { ModelObject undisturbedGroundTemperatureModelClone = testObjectClone.undisturbedGroundTemperatureModel(); boost::optional sgtClone = - undisturbedGroundTemperatureModel.optionalCast(); + undisturbedGroundTemperatureModelClone.optionalCast(); ASSERT_TRUE(sgtClone); ModelObject undisturbedGroundTemperatureModelClone2 = testObjectClone2.undisturbedGroundTemperatureModel(); boost::optional sgtClone2 = - undisturbedGroundTemperatureModel.optionalCast(); + undisturbedGroundTemperatureModelClone2.optionalCast(); ASSERT_TRUE(sgtClone2); } From fcedbce16da8c269a089109d16d3ccf24398969f Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 11:50:16 -0700 Subject: [PATCH 4/9] Update clone methods for ground hxs. --- src/model/GroundHeatExchangerHorizontalTrench.cpp | 8 ++++++++ src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp | 2 ++ src/model/GroundHeatExchangerVertical.cpp | 7 ++++--- .../test/GroundHeatExchangerHorizontalTrench_GTest.cpp | 2 ++ src/model/test/GroundHeatExchangerVertical_GTest.cpp | 2 ++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/model/GroundHeatExchangerHorizontalTrench.cpp b/src/model/GroundHeatExchangerHorizontalTrench.cpp index 71285b92c5d..abbe27a110e 100644 --- a/src/model/GroundHeatExchangerHorizontalTrench.cpp +++ b/src/model/GroundHeatExchangerHorizontalTrench.cpp @@ -259,6 +259,14 @@ namespace model { return false; } + ModelObject GroundHeatExchangerHorizontalTrench_Impl::clone(Model model) const { + auto groundHeatExchangerClone = StraightComponent_Impl::clone(model).cast(); + + groundHeatExchangerClone.setUndisturbedGroundTemperatureModel(undisturbedGroundTemperatureModel().clone(model)); + + return std::move(groundHeatExchangerClone); + } + ComponentType GroundHeatExchangerHorizontalTrench_Impl::componentType() const { return ComponentType::Both; } diff --git a/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp b/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp index 01f17bf2d23..940f8cac4c5 100644 --- a/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp +++ b/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp @@ -38,6 +38,8 @@ namespace model { virtual IddObjectType iddObjectType() const override; + virtual ModelObject clone(Model model) const override; + virtual unsigned inletPort() const override; virtual unsigned outletPort() const override; diff --git a/src/model/GroundHeatExchangerVertical.cpp b/src/model/GroundHeatExchangerVertical.cpp index 39a03cde3b9..1d220c3f4e5 100644 --- a/src/model/GroundHeatExchangerVertical.cpp +++ b/src/model/GroundHeatExchangerVertical.cpp @@ -367,11 +367,12 @@ namespace model { return false; } - //clone object ModelObject GroundHeatExchangerVertical_Impl::clone(Model model) const { - auto newGroundHeatExchanger = StraightComponent_Impl::clone(model).cast(); + auto groundHeatExchangerClone = StraightComponent_Impl::clone(model).cast(); - return std::move(newGroundHeatExchanger); + groundHeatExchangerClone.setUndisturbedGroundTemperatureModel(undisturbedGroundTemperatureModel().clone(model)); + + return std::move(groundHeatExchangerClone); } bool GroundHeatExchangerVertical_Impl::addGFunction(double gFunctionLN, double gFunctionGValue) { diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index 037995acbea..19d4c9e8633 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -261,10 +261,12 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { boost::optional sgtClone = undisturbedGroundTemperatureModelClone.optionalCast(); ASSERT_TRUE(sgtClone); + EXPECT_EQ(2u, m.getConcreteModelObjects().size()); ModelObject undisturbedGroundTemperatureModelClone2 = testObjectClone2.undisturbedGroundTemperatureModel(); boost::optional sgtClone2 = undisturbedGroundTemperatureModelClone2.optionalCast(); ASSERT_TRUE(sgtClone2); + EXPECT_EQ(1u, m2.getConcreteModelObjects().size()); } } diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index cb9d64617a1..7448c8e422f 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -337,11 +337,13 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_Clone) { boost::optional sgtClone = undisturbedGroundTemperatureModelClone.optionalCast(); ASSERT_TRUE(sgtClone); + EXPECT_EQ(2u, m.getConcreteModelObjects().size()); ModelObject undisturbedGroundTemperatureModelClone2 = testObjectClone2.undisturbedGroundTemperatureModel(); boost::optional sgtClone2 = undisturbedGroundTemperatureModelClone2.optionalCast(); ASSERT_TRUE(sgtClone2); + EXPECT_EQ(1u, m2.getConcreteModelObjects().size()); } TEST_F(ModelFixture, GroundHeatExchangerVertical_GFunctions) { From 2dc84a18dd148c8c837d279f0decf8d2773b65e8 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 13:38:30 -0700 Subject: [PATCH 5/9] Include Model in GHE horizontal trench. --- src/model/GroundHeatExchangerHorizontalTrench.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/model/GroundHeatExchangerHorizontalTrench.cpp b/src/model/GroundHeatExchangerHorizontalTrench.cpp index abbe27a110e..c9503dcb161 100644 --- a/src/model/GroundHeatExchangerHorizontalTrench.cpp +++ b/src/model/GroundHeatExchangerHorizontalTrench.cpp @@ -9,6 +9,8 @@ #include "PlantLoop_Impl.hpp" #include "Node.hpp" #include "Node_Impl.hpp" +#include "Model.hpp" +#include "Model_Impl.hpp" #include "SiteGroundTemperatureUndisturbedKusudaAchenbach.hpp" #include "SiteGroundTemperatureUndisturbedKusudaAchenbach_Impl.hpp" From 796cbb8c6d2109409912846c8a6d40f4d46f9e2c Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 21 Jul 2025 16:25:15 -0700 Subject: [PATCH 6/9] Update existing GHE horizontal trench model test expected values. --- src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index 19d4c9e8633..c9e14c1475a 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -189,7 +189,7 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { auto ghClone = gh.clone(m).cast(); EXPECT_EQ(2u, m.getConcreteModelObjects().size()); - EXPECT_EQ(1u, m.getConcreteModelObjects().size()); + EXPECT_EQ(2u, m.getConcreteModelObjects().size()); ModelObject undisturbedGroundTemperatureModel = gh.undisturbedGroundTemperatureModel(); boost::optional uka = @@ -201,7 +201,7 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { boost::optional ukaClone = undisturbedGroundTemperatureModelClone.optionalCast(); ASSERT_TRUE(ukaClone); - EXPECT_EQ(sgt, ukaClone.get()); + EXPECT_NE(sgt, ukaClone.get()); gh.remove(); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); From c7621c8849ff074cfaf1b4e0771618c2ec5260f4 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 22 Jul 2025 08:02:49 -0700 Subject: [PATCH 7/9] Add a children method with SGT element. --- src/model/GroundHeatExchangerHorizontalTrench.cpp | 8 ++++++++ src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp | 2 ++ src/model/GroundHeatExchangerVertical.cpp | 8 ++++++++ src/model/GroundHeatExchangerVertical_Impl.hpp | 2 ++ 4 files changed, 20 insertions(+) diff --git a/src/model/GroundHeatExchangerHorizontalTrench.cpp b/src/model/GroundHeatExchangerHorizontalTrench.cpp index c9503dcb161..7c21145de27 100644 --- a/src/model/GroundHeatExchangerHorizontalTrench.cpp +++ b/src/model/GroundHeatExchangerHorizontalTrench.cpp @@ -269,6 +269,14 @@ namespace model { return std::move(groundHeatExchangerClone); } + std::vector GroundHeatExchangerHorizontalTrench_Impl::children() const { + std::vector result; + + result.push_back(undisturbedGroundTemperatureModel()); + + return result; + } + ComponentType GroundHeatExchangerHorizontalTrench_Impl::componentType() const { return ComponentType::Both; } diff --git a/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp b/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp index 940f8cac4c5..9e24987bcfc 100644 --- a/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp +++ b/src/model/GroundHeatExchangerHorizontalTrench_Impl.hpp @@ -40,6 +40,8 @@ namespace model { virtual ModelObject clone(Model model) const override; + virtual std::vector children() const override; + virtual unsigned inletPort() const override; virtual unsigned outletPort() const override; diff --git a/src/model/GroundHeatExchangerVertical.cpp b/src/model/GroundHeatExchangerVertical.cpp index 1d220c3f4e5..96330f600e2 100644 --- a/src/model/GroundHeatExchangerVertical.cpp +++ b/src/model/GroundHeatExchangerVertical.cpp @@ -375,6 +375,14 @@ namespace model { return std::move(groundHeatExchangerClone); } + std::vector GroundHeatExchangerVertical_Impl::children() const { + std::vector result; + + result.push_back(undisturbedGroundTemperatureModel()); + + return result; + } + bool GroundHeatExchangerVertical_Impl::addGFunction(double gFunctionLN, double gFunctionGValue) { auto eg = getObject().pushExtensibleGroup().cast(); diff --git a/src/model/GroundHeatExchangerVertical_Impl.hpp b/src/model/GroundHeatExchangerVertical_Impl.hpp index 739598f0dba..3c0022c2e44 100644 --- a/src/model/GroundHeatExchangerVertical_Impl.hpp +++ b/src/model/GroundHeatExchangerVertical_Impl.hpp @@ -38,6 +38,8 @@ namespace model { virtual IddObjectType iddObjectType() const override; virtual ModelObject clone(Model model) const override; + + virtual std::vector children() const override; virtual unsigned inletPort() const override; From aa141f0b463122333b4fb64ce76914ea0bdbd0fe Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 22 Jul 2025 09:30:02 -0700 Subject: [PATCH 8/9] Additional remove model tests for GHE horizontal trench. --- src/model/GroundHeatExchangerVertical_Impl.hpp | 2 +- .../GroundHeatExchangerHorizontalTrench_GTest.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/model/GroundHeatExchangerVertical_Impl.hpp b/src/model/GroundHeatExchangerVertical_Impl.hpp index 3c0022c2e44..670a5bcfce8 100644 --- a/src/model/GroundHeatExchangerVertical_Impl.hpp +++ b/src/model/GroundHeatExchangerVertical_Impl.hpp @@ -38,7 +38,7 @@ namespace model { virtual IddObjectType iddObjectType() const override; virtual ModelObject clone(Model model) const override; - + virtual std::vector children() const override; virtual unsigned inletPort() const override; diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index c9e14c1475a..c7cb9186ca4 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -207,8 +207,10 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { EXPECT_EQ(1u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); + GroundHeatExchangerHorizontalTrench gh2(m, ukaClone.get()); + EXPECT_EQ(2u, m.getConcreteModelObjects().size()); ghClone.remove(); - EXPECT_EQ(0u, m.getConcreteModelObjects().size()); + EXPECT_EQ(1u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); } @@ -222,7 +224,7 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { auto ghClone = gh.clone(m).cast(); EXPECT_EQ(2u, m.getConcreteModelObjects().size()); - EXPECT_EQ(1u, m.getConcreteModelObjects().size()); + EXPECT_EQ(2u, m.getConcreteModelObjects().size()); ModelObject undisturbedGroundTemperatureModel = gh.undisturbedGroundTemperatureModel(); boost::optional ux = undisturbedGroundTemperatureModel.optionalCast(); @@ -231,16 +233,18 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { ModelObject undisturbedGroundTemperatureModelClone = ghClone.undisturbedGroundTemperatureModel(); boost::optional uxClone = - undisturbedGroundTemperatureModel.optionalCast(); + undisturbedGroundTemperatureModelClone.optionalCast(); ASSERT_TRUE(uxClone); - EXPECT_EQ(sgt, uxClone.get()); + EXPECT_NE(sgt, uxClone.get()); gh.remove(); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); + GroundHeatExchangerHorizontalTrench gh2(m, uxClone.get()); + EXPECT_EQ(2u, m.getConcreteModelObjects().size()); ghClone.remove(); - EXPECT_EQ(0u, m.getConcreteModelObjects().size()); + EXPECT_EQ(1u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); } From 786f15151dc298021048172f0c4ac7ce8eb78560 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 22 Jul 2025 13:22:04 -0700 Subject: [PATCH 9/9] Still having trouble with removing sgt even when connected. --- .../GroundHeatExchangerHorizontalTrench_GTest.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp index c7cb9186ca4..5c60fe64010 100644 --- a/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp +++ b/src/model/test/GroundHeatExchangerHorizontalTrench_GTest.cpp @@ -212,6 +212,12 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { ghClone.remove(); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); + + ModelObject undisturbedGroundTemperatureModel2 = gh2.undisturbedGroundTemperatureModel(); + boost::optional uka2 = + undisturbedGroundTemperatureModel2.optionalCast(); + ASSERT_TRUE(uka2); + EXPECT_EQ(ukaClone.get(), uka2.get()); } { @@ -246,6 +252,12 @@ TEST_F(ModelFixture, GroundHeatExchangerHorizontalTrench_Clone) { ghClone.remove(); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); EXPECT_EQ(1u, m.getConcreteModelObjects().size()); + + ModelObject undisturbedGroundTemperatureModel2 = gh2.undisturbedGroundTemperatureModel(); + boost::optional ux2 = + undisturbedGroundTemperatureModel2.optionalCast(); + ASSERT_TRUE(ux2); + EXPECT_EQ(uxClone.get(), ux2.get()); } //clone into another model