From 985ba9710bd931eee2294820c494ff8ac6fc5a00 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 08:09:40 -0700 Subject: [PATCH 01/20] Add undisturbed fields to idd. --- resources/model/OpenStudio.idd | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/model/OpenStudio.idd b/resources/model/OpenStudio.idd index c5721bd7bef..25ca138b436 100644 --- a/resources/model/OpenStudio.idd +++ b/resources/model/OpenStudio.idd @@ -16669,8 +16669,8 @@ OS:DistrictHeating, OS:GroundHeatExchanger:Vertical, \extensible:2 - \min-fields 21 - \max-fields 219 + \min-fields 22 + \max-fields 220 \memo Variable short time step vertical ground heat exchanger model based on \memo Yavuztruk, C., J.D.Spitler. 1999. A Short Time Step response Factor Model for \memo Vertical Ground Loop Heat Exchangers @@ -16748,6 +16748,10 @@ OS:GroundHeatExchanger:Vertical, N13, \field Maximum Length of Simulation \type real \minimum> 0.0 + A5, \field Undisturbed Ground Temperature Model + \required-field + \type object-list + \object-list UndisturbedGroundTempModels N14, \field G-Function Reference Ratio \type real \units dimensionless From e89b2ff39e4c02c9e6aaddd31bf3eeaf81caf9d1 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 08:09:52 -0700 Subject: [PATCH 02/20] update the ft. --- ...rdTranslateGroundHeatExchangerVertical.cpp | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp index c7a817f066a..28c654dc370 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include "../../utilities/idd/IddEnums.hpp" #include #include @@ -91,6 +90,17 @@ namespace energyplus { // 1 { GroundHeatExchanger_ResponseFactorsExtensibleFields::gFunctionLn_T_Ts_Value, "gFunctionLn_T_Ts_Value", "g-Function Ln(T/Ts) Value"}, // 2 { GroundHeatExchanger_ResponseFactorsExtensibleFields::gFunctiongValue, "gFunctiongValue", "g-Function g Value"}, + // UndisturbedGroundTemperatureModelName, is required, so start by that + ModelObject undisturbedGroundTemperatureModel = modelObject.undisturbedGroundTemperatureModel(); + boost::optional _undisturbedGroundTemperatureModel = translateAndMapModelObject(undisturbedGroundTemperatureModel); + if (_undisturbedGroundTemperatureModel) { + s = _undisturbedGroundTemperatureModel->name().get(); + } else { + LOG(Warn, modelObject.briefDescription() << " cannot be translated as its undisturbed ground temperature model object cannot be translated: " + << undisturbedGroundTemperatureModel.briefDescription() << "."); + return boost::none; + } + // Name IdfObject idfObject = createRegisterAndNameIdfObject(openstudio::IddObjectType::GroundHeatExchanger_System, modelObject); @@ -166,28 +176,12 @@ namespace energyplus { propertiesIdfObject.setDouble(GroundHeatExchanger_Vertical_PropertiesFields::UTubeDistance, value.get()); } - IdfObject groundIdfObject(IddObjectType::Site_GroundTemperature_Undisturbed_KusudaAchenbach); - m_idfObjects.push_back(groundIdfObject); - - groundIdfObject.setName(groundModelName); - - if ((value = modelObject.groundThermalConductivity())) { - groundIdfObject.setDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilThermalConductivity, value.get()); - } - - groundIdfObject.setDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilDensity, 920.0); + // UndisturbedGroundTemperatureModelName + idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName, s.get()); - if ((value = modelObject.groundThermalHeatCapacity())) { - groundIdfObject.setDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilSpecificHeat, value.get() / 920.0); - } - - if ((value = modelObject.groundTemperature())) { - groundIdfObject.setDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageSoilSurfaceTemperature, value.get()); - } - - groundIdfObject.setDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageAmplitudeofSurfaceTemperature, 3.2); - - groundIdfObject.setDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::PhaseShiftofMinimumSurfaceTemperature, 8.0); + // UndisturbedGroundTemperatureModelType + idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelType, + _undisturbedGroundTemperatureModel->iddObject().name()); IdfObject rfIdfObject(IddObjectType::GroundHeatExchanger_ResponseFactors); m_idfObjects.push_back(rfIdfObject); From 190cc7e6815be04d5c9357624641dbc8d18e7b4f Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 08:10:03 -0700 Subject: [PATCH 03/20] Update src model files. --- src/model/GroundHeatExchangerVertical.cpp | 94 +++++++++++++++++++ src/model/GroundHeatExchangerVertical.hpp | 6 ++ .../GroundHeatExchangerVertical_Impl.hpp | 4 + 3 files changed, 104 insertions(+) diff --git a/src/model/GroundHeatExchangerVertical.cpp b/src/model/GroundHeatExchangerVertical.cpp index 4adba7f9b5a..eaec8917fb7 100644 --- a/src/model/GroundHeatExchangerVertical.cpp +++ b/src/model/GroundHeatExchangerVertical.cpp @@ -9,6 +9,8 @@ #include "Node_Impl.hpp" #include "Model.hpp" #include "Model_Impl.hpp" +#include "SiteGroundTemperatureUndisturbedKusudaAchenbach.hpp" +#include "SiteGroundTemperatureUndisturbedKusudaAchenbach_Impl.hpp" #include "../utilities/core/Assert.hpp" #include "../utilities/data/DataEnums.hpp" @@ -113,6 +115,14 @@ namespace model { return isEmpty(OS_GroundHeatExchanger_VerticalFields::GFunctionReferenceRatio); } + ModelObject GroundHeatExchangerVertical_Impl::undisturbedGroundTemperatureModel() const { + boost::optional modelObject; + modelObject = + getObject().getModelObjectTarget(OS_GroundHeatExchanger_VerticalFields::UndisturbedGroundTemperatureModel); + OS_ASSERT(modelObject); + return modelObject.get(); + } + bool GroundHeatExchangerVertical_Impl::setNumberofBoreHoles(boost::optional numberofBoreHoles) { bool result(false); if (numberofBoreHoles) { @@ -319,6 +329,12 @@ namespace model { OS_ASSERT(result); } + bool GroundHeatExchangerVertical_Impl::setUndisturbedGroundTemperatureModel(const ModelObject& undisturbedGroundTemperatureModel) { + bool result = + setPointer(OS_GroundHeatExchanger_VerticalFields::UndisturbedGroundTemperatureModel, undisturbedGroundTemperatureModel.handle()); + return result; + } + unsigned GroundHeatExchangerVertical_Impl::inletPort() const { return OS_GroundHeatExchanger_VerticalFields::InletNodeName; } @@ -476,6 +492,76 @@ namespace model { addGFunction(2.028, 71.361); addGFunction(2.275, 71.79); addGFunction(3.003, 72.511); + + SiteGroundTemperatureUndisturbedKusudaAchenbach undisturbedGroundTemperatureModel(model); + undisturbedGroundTemperatureModel.setSoilThermalConductivity(0.692626); + undisturbedGroundTemperatureModel.setSoilDensity(920.0); + undisturbedGroundTemperatureModel.setSoilSpecificHeat(0.234700E+07 / 920.0); + undisturbedGroundTemperatureModel.setAverageSoilSurfaceTemperature(13.375); + undisturbedGroundTemperatureModel.setAverageAmplitudeofSurfaceTemperature(3.2); + undisturbedGroundTemperatureModel.setPhaseShiftofMinimumSurfaceTemperature(8.0); + setUndisturbedGroundTemperatureModel(undisturbedGroundTemperatureModel); + } + + GroundHeatExchangerVertical::GroundHeatExchangerVertical(const Model& model, const ModelObject& undisturbedGroundTemperatureModel) + : StraightComponent(GroundHeatExchangerVertical::iddObjectType(), model) { + OS_ASSERT(getImpl()); + + bool ok = setUndisturbedGroundTemperatureModel(undisturbedGroundTemperatureModel); + if (!ok) { + remove(); + LOG_AND_THROW("Unable to set " << briefDescription() << "'s Undisturbed Ground Temperature Model to " + << undisturbedGroundTemperatureModel.briefDescription() << "."); + } + setNumberofBoreHoles(120); + setBoreHoleLength(76.2); + setBoreHoleRadius(0.635080E-01); + setGroundThermalConductivity(0.692626); + setGroundThermalHeatCapacity(0.234700E+07); + setGroundTemperature(13.375); + setDesignFlowRate(0.0033); + setGroutThermalConductivity(0.692626); + setPipeThermalConductivity(0.391312); + setPipeOutDiameter(2.66667E-02); + setUTubeDistance(2.53977E-02); + setPipeThickness(2.41285E-03); + setMaximumLengthofSimulation(2); + setGFunctionReferenceRatio(0.0005); + addGFunction(-15.2996, -0.348322); + addGFunction(-14.201, 0.022208); + addGFunction(-13.2202, 0.412345); + addGFunction(-12.2086, 0.867498); + addGFunction(-11.1888, 1.357839); + addGFunction(-10.1816, 1.852024); + addGFunction(-9.1815, 2.345656); + addGFunction(-8.6809, 2.593958); + addGFunction(-8.5, 2.679); + addGFunction(-7.8, 3.023); + addGFunction(-7.2, 3.32); + addGFunction(-6.5, 3.681); + addGFunction(-5.9, 4.071); + addGFunction(-5.2, 4.828); + addGFunction(-4.5, 6.253); + addGFunction(-3.963, 7.894); + addGFunction(-3.27, 11.82); + addGFunction(-2.864, 15.117); + addGFunction(-2.577, 18.006); + addGFunction(-2.171, 22.887); + addGFunction(-1.884, 26.924); + addGFunction(-1.191, 38.004); + addGFunction(-0.497, 49.919); + addGFunction(-0.274, 53.407); + addGFunction(-0.051, 56.632); + addGFunction(0.196, 59.825); + addGFunction(0.419, 62.349); + addGFunction(0.642, 64.524); + addGFunction(0.873, 66.412); + addGFunction(1.112, 67.993); + addGFunction(1.335, 69.162); + addGFunction(1.679, 70.476); + addGFunction(2.028, 71.361); + addGFunction(2.275, 71.79); + addGFunction(3.003, 72.511); } IddObjectType GroundHeatExchangerVertical::iddObjectType() { @@ -567,6 +653,10 @@ namespace model { return getImpl()->isGFunctionReferenceRatioDefaulted(); } + ModelObject GroundHeatExchangerVertical::undisturbedGroundTemperatureModel() const { + return getImpl()->undisturbedGroundTemperatureModel(); + } + bool GroundHeatExchangerVertical::setNumberofBoreHoles(int numberofBoreHoles) { return getImpl()->setNumberofBoreHoles(numberofBoreHoles); } @@ -675,6 +765,10 @@ namespace model { getImpl()->resetGFunctionReferenceRatio(); } + bool GroundHeatExchangerVertical::setUndisturbedGroundTemperatureModel(const ModelObject& undisturbedGroundTemperatureModel) { + return getImpl()->setUndisturbedGroundTemperatureModel(undisturbedGroundTemperatureModel); + } + /// @cond GroundHeatExchangerVertical::GroundHeatExchangerVertical(std::shared_ptr impl) : StraightComponent(std::move(impl)) {} diff --git a/src/model/GroundHeatExchangerVertical.hpp b/src/model/GroundHeatExchangerVertical.hpp index 19b5edecf23..54eb7e2c703 100644 --- a/src/model/GroundHeatExchangerVertical.hpp +++ b/src/model/GroundHeatExchangerVertical.hpp @@ -39,6 +39,8 @@ namespace model { explicit GroundHeatExchangerVertical(const Model& model); + explicit GroundHeatExchangerVertical(const Model& model, const ModelObject& undisturbedGroundTemperatureModel); + virtual ~GroundHeatExchangerVertical() = default; // Default the copy and move operators because the virtual dtor is explicit GroundHeatExchangerVertical(const GroundHeatExchangerVertical& other) = default; @@ -93,6 +95,8 @@ namespace model { bool isGFunctionReferenceRatioDefaulted() const; + ModelObject undisturbedGroundTemperatureModel() const; + //@} /** @name Setters */ @@ -152,6 +156,8 @@ namespace model { void resetGFunctionReferenceRatio(); + bool setUndisturbedGroundTemperatureModel(const ModelObject& undisturbedGroundTemperatureModel); + //@} /** @name Other */ //@{ diff --git a/src/model/GroundHeatExchangerVertical_Impl.hpp b/src/model/GroundHeatExchangerVertical_Impl.hpp index 2ea9d62a21c..20e318982bd 100644 --- a/src/model/GroundHeatExchangerVertical_Impl.hpp +++ b/src/model/GroundHeatExchangerVertical_Impl.hpp @@ -84,6 +84,8 @@ namespace model { bool isGFunctionReferenceRatioDefaulted() const; + ModelObject undisturbedGroundTemperatureModel() const; + //@} /** @name Setters */ //@{ @@ -142,6 +144,8 @@ namespace model { void resetGFunctionReferenceRatio(); + bool setUndisturbedGroundTemperatureModel(const ModelObject& undisturbedGroundTemperatureModel); + //@} /** @name Other */ //@{ From abb230926acaa8df9e5475a12abe189b3021cceb Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 08:10:21 -0700 Subject: [PATCH 04/20] Formatting. --- src/model/GroundHeatExchangerVertical.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/model/GroundHeatExchangerVertical.cpp b/src/model/GroundHeatExchangerVertical.cpp index eaec8917fb7..396c9f27067 100644 --- a/src/model/GroundHeatExchangerVertical.cpp +++ b/src/model/GroundHeatExchangerVertical.cpp @@ -330,8 +330,7 @@ namespace model { } bool GroundHeatExchangerVertical_Impl::setUndisturbedGroundTemperatureModel(const ModelObject& undisturbedGroundTemperatureModel) { - bool result = - setPointer(OS_GroundHeatExchanger_VerticalFields::UndisturbedGroundTemperatureModel, undisturbedGroundTemperatureModel.handle()); + bool result = setPointer(OS_GroundHeatExchanger_VerticalFields::UndisturbedGroundTemperatureModel, undisturbedGroundTemperatureModel.handle()); return result; } From 6d679a9d604ea3b7c6356b09fbc9f4603ff6e79e Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 10:04:26 -0700 Subject: [PATCH 05/20] Updates for vt. --- src/osversion/VersionTranslator.cpp | 64 +++++++++++++++++++++++++++-- src/osversion/VersionTranslator.hpp | 2 +- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index 996e94aefb9..851b80935bb 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -135,7 +135,8 @@ namespace osversion { m_updateMethods[VersionString("3.5.0")] = &VersionTranslator::update_3_4_0_to_3_5_0; m_updateMethods[VersionString("3.5.1")] = &VersionTranslator::update_3_5_0_to_3_5_1; m_updateMethods[VersionString("3.6.0")] = &VersionTranslator::update_3_5_1_to_3_6_0; - m_updateMethods[VersionString("3.7.0")] = &VersionTranslator::defaultUpdate; + m_updateMethods[VersionString("3.7.0")] = &VersionTranslator::update_3_6_1_to_3_7_0; + // m_updateMethods[VersionString("3.7.0")] = &VersionTranslator::defaultUpdate; // List of previous versions that may be updated to this one. // - To increment the translator, add an entry for the version just released (branched for @@ -7607,11 +7608,68 @@ namespace osversion { } // end update_3_5_1_to_3_6_0 - /* std::string VersionTranslator::update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0) + std::stringstream ss; + boost::optional value; + + ss << idf_3_6_1.header() << '\n' << '\n'; + IdfFile targetIdf(idd_3_7_0.iddFile()); + ss << targetIdf.versionObject().get(); + + for (const IdfObject& object : idf_3_6_1.objects()) { + auto iddname = object.iddObject().name(); + + if (iddname == "OS:GroundHeatExchanger:Vertical") { + + // 1 Field has been added from 3.6.1 to 3.7.0: + // ------------------------------------------- + // * Undisturbed Ground Temperature Model * 17 + auto iddObject = idd_3_6_1.getObject(iddname); + IdfObject ghxObject(iddObject.get()); + IdfObject kusudaObject(idd_3_6_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); + + for (size_t i = 0; i < object.numFields(); ++i) { + if (i < 17) { + if ((value = object.getString(i))) { + ghxObject.setString(i, value.get()); + if ((i == 8)) { // Soil Thermal Conductivity + kusudaObject.setString(i - 6, value.get()); + } + if ((i == 9)) { // Soil Specific Heat + kusudaObject.setString(i - 5, value.get() / 920.0); + } + if ((i == 10)) { // Average Soil Surface Temperature + kusudaObject.setString(i - 5, value.get()); + } + } + } else if (i == 17) { // Undisturbed Ground Temperature Model + ghxObject.setString(i, kusudaObject.getString(0).get()); + } else { + if ((value = object.getString(i))) { + ghxObject.setString(i + 1, value.get()); + } + } + } + + kusudaObject.setString(3, 920.0); // Soil Density + kusudaObject.setString(6, 3.2); // Average Amplitude of Surface Temperature + kusudaObject.setString(7, 8.0); // Phase Shift of Minimum Surface Temperature + + m_refactored.push_back(RefactoredObjectData(object, ghxObject)); + m_new.push_back(kusudaObject); + + ss << ghxObject; + ss << kusudaObject; + + // No-op + } else { + ss << object; + } + } + + return ss.str(); } // end update_3_6_1_to_3_7_0 - */ } // namespace osversion } // namespace openstudio diff --git a/src/osversion/VersionTranslator.hpp b/src/osversion/VersionTranslator.hpp index 258d4aafe69..ca4a4d3b8a6 100644 --- a/src/osversion/VersionTranslator.hpp +++ b/src/osversion/VersionTranslator.hpp @@ -234,7 +234,7 @@ namespace osversion { std::string update_3_4_0_to_3_5_0(const IdfFile& idf_3_4_0, const IddFileAndFactoryWrapper& idd_3_5_0); std::string update_3_5_0_to_3_5_1(const IdfFile& idf_3_5_0, const IddFileAndFactoryWrapper& idd_3_5_1); std::string update_3_5_1_to_3_6_0(const IdfFile& idf_3_5_1, const IddFileAndFactoryWrapper& idd_3_6_0); - // std::string update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0); + std::string update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0); IdfObject updateUrlField_0_7_1_to_0_7_2(const IdfObject& object, unsigned index); From 18af79f1e5346731fb1ea9ab413141fc95e32419 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 10:04:31 -0700 Subject: [PATCH 06/20] Add vt test. --- .../test_vt_GroundHeatExchangerVertical.osm | 95 +++++++++++++++++++ .../test_vt_GroundHeatExchangerVertical.rb | 9 ++ .../test/VersionTranslator_GTest.cpp | 52 ++++++++++ 3 files changed, 156 insertions(+) create mode 100644 src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.osm create mode 100644 src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.rb diff --git a/src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.osm b/src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.osm new file mode 100644 index 00000000000..7cc50fec2d9 --- /dev/null +++ b/src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.osm @@ -0,0 +1,95 @@ + +OS:Version, + {44a788f8-5d7b-4751-a46e-fa7b6694d6fc}, !- Handle + 3.6.1; !- Version Identifier + +OS:GroundHeatExchanger:Vertical, + {780db985-9f76-43b6-97b0-a146527f06ac}, !- Handle + Ground Heat Exchanger Vertical 1, !- Name + , !- Inlet Node Name + , !- Outlet Node Name + 0.0033, !- Design Flow Rate {m3/s} + 120, !- Number of Bore Holes + 76.2, !- Bore Hole Length {m} + 0.063508, !- Bore Hole Radius {m} + 0.692626, !- Ground Thermal Conductivity {W/m-K} + 2347000, !- Ground Thermal Heat Capacity {J/m3-K} + 13.375, !- Ground Temperature {C} + 0.692626, !- Grout Thermal Conductivity {W/m-K} + 0.391312, !- Pipe Thermal Conductivity {W/m-K} + 0.0266667, !- Pipe Out Diameter {m} + 0.0253977, !- U-Tube Distance {m} + 0.00241285, !- Pipe Thickness {m} + 2, !- Maximum Length of Simulation + 0.0005, !- G-Function Reference Ratio {dimensionless} + -15.2996, !- G-Function Ln(T/Ts) Value 1 + -0.348322, !- G-Function G Value 1 + -14.201, !- G-Function Ln(T/Ts) Value 2 + 0.022208, !- G-Function G Value 2 + -13.2202, !- G-Function Ln(T/Ts) Value 3 + 0.412345, !- G-Function G Value 3 + -12.2086, !- G-Function Ln(T/Ts) Value 4 + 0.867498, !- G-Function G Value 4 + -11.1888, !- G-Function Ln(T/Ts) Value 5 + 1.357839, !- G-Function G Value 5 + -10.1816, !- G-Function Ln(T/Ts) Value 6 + 1.852024, !- G-Function G Value 6 + -9.1815, !- G-Function Ln(T/Ts) Value 7 + 2.345656, !- G-Function G Value 7 + -8.6809, !- G-Function Ln(T/Ts) Value 8 + 2.593958, !- G-Function G Value 8 + -8.5, !- G-Function Ln(T/Ts) Value 9 + 2.679, !- G-Function G Value 9 + -7.8, !- G-Function Ln(T/Ts) Value 10 + 3.023, !- G-Function G Value 10 + -7.2, !- G-Function Ln(T/Ts) Value 11 + 3.32, !- G-Function G Value 11 + -6.5, !- G-Function Ln(T/Ts) Value 12 + 3.681, !- G-Function G Value 12 + -5.9, !- G-Function Ln(T/Ts) Value 13 + 4.071, !- G-Function G Value 13 + -5.2, !- G-Function Ln(T/Ts) Value 14 + 4.828, !- G-Function G Value 14 + -4.5, !- G-Function Ln(T/Ts) Value 15 + 6.253, !- G-Function G Value 15 + -3.963, !- G-Function Ln(T/Ts) Value 16 + 7.894, !- G-Function G Value 16 + -3.27, !- G-Function Ln(T/Ts) Value 17 + 11.82, !- G-Function G Value 17 + -2.864, !- G-Function Ln(T/Ts) Value 18 + 15.117, !- G-Function G Value 18 + -2.577, !- G-Function Ln(T/Ts) Value 19 + 18.006, !- G-Function G Value 19 + -2.171, !- G-Function Ln(T/Ts) Value 20 + 22.887, !- G-Function G Value 20 + -1.884, !- G-Function Ln(T/Ts) Value 21 + 26.924, !- G-Function G Value 21 + -1.191, !- G-Function Ln(T/Ts) Value 22 + 38.004, !- G-Function G Value 22 + -0.497, !- G-Function Ln(T/Ts) Value 23 + 49.919, !- G-Function G Value 23 + -0.274, !- G-Function Ln(T/Ts) Value 24 + 53.407, !- G-Function G Value 24 + -0.051, !- G-Function Ln(T/Ts) Value 25 + 56.632, !- G-Function G Value 25 + 0.196, !- G-Function Ln(T/Ts) Value 26 + 59.825, !- G-Function G Value 26 + 0.419, !- G-Function Ln(T/Ts) Value 27 + 62.349, !- G-Function G Value 27 + 0.642, !- G-Function Ln(T/Ts) Value 28 + 64.524, !- G-Function G Value 28 + 0.873, !- G-Function Ln(T/Ts) Value 29 + 66.412, !- G-Function G Value 29 + 1.112, !- G-Function Ln(T/Ts) Value 30 + 67.993, !- G-Function G Value 30 + 1.335, !- G-Function Ln(T/Ts) Value 31 + 69.162, !- G-Function G Value 31 + 1.679, !- G-Function Ln(T/Ts) Value 32 + 70.476, !- G-Function G Value 32 + 2.028, !- G-Function Ln(T/Ts) Value 33 + 71.361, !- G-Function G Value 33 + 2.275, !- G-Function Ln(T/Ts) Value 34 + 71.79, !- G-Function G Value 34 + 3.003, !- G-Function Ln(T/Ts) Value 35 + 72.511; !- G-Function G Value 35 + diff --git a/src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.rb b/src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.rb new file mode 100644 index 00000000000..ae35d298e32 --- /dev/null +++ b/src/osversion/test/3_7_0/test_vt_GroundHeatExchangerVertical.rb @@ -0,0 +1,9 @@ +#require '/usr/local/openstudio-3.6.1/Ruby/openstudio' + +include OpenStudio::Model + +m = Model.new + +coil = GroundHeatExchangerVertical.new(m) + +m.save('test_vt_GroundHeatExchangerVertical.osm', true) diff --git a/src/osversion/test/VersionTranslator_GTest.cpp b/src/osversion/test/VersionTranslator_GTest.cpp index 89f617d00e8..34e66b4c317 100644 --- a/src/osversion/test/VersionTranslator_GTest.cpp +++ b/src/osversion/test/VersionTranslator_GTest.cpp @@ -2492,3 +2492,55 @@ TEST_F(OSVersionFixture, update_3_5_1_to_3_6_0_GroundHeatExchangerHorizontalTren EXPECT_EQ(12.8, uka.getDouble(6).get()); // Average Amplitude of Surface Temperature EXPECT_EQ(17.3, uka.getDouble(7).get()); // Phase Shift of Minimum Surface Temperature } + +TEST_F(OSVersionFixture, update_3_6_1_to_3_7_0_GroundHeatExchangerVertical) { + openstudio::path path = resourcesPath() / toPath("osversion/3_7_0/test_vt_GroundHeatExchangerVertical.osm"); + osversion::VersionTranslator vt; + boost::optional model = vt.loadModel(path); + ASSERT_TRUE(model) << "Failed to load " << path; + + openstudio::path outPath = resourcesPath() / toPath("osversion/3_7_0/test_vt_GroundHeatExchangerVertical_updated.osm"); + model->save(outPath, true); + + std::vector ghxs = model->getObjectsByType("OS:GroundHeatExchanger:Vertical"); + ASSERT_EQ(1u, ghxs.size()); + WorkspaceObject ghx = ghxs[0]; + + EXPECT_EQ("Ground Heat Exchanger Vertical 1", ghx.getString(1).get()); // Name + EXPECT_TRUE(ghx.isEmpty(2)); // Inlet Node Name + EXPECT_TRUE(ghx.isEmpty(3)); // Outlet Node Name + EXPECT_EQ(0.0033, ghx.getDouble(4).get()); // Design Flow Rate + EXPECT_EQ(120, ghx.getInt(5).get()); // Number of Bore Holes + EXPECT_EQ(76.2, ghx.getDouble(6).get()); // Bore Hole Length + EXPECT_EQ(0.063508, ghx.getDouble(7).get()); // Bore Hole Radius + EXPECT_EQ(0.692626, ghx.getDouble(8).get()); // Ground Thermal Conductivity + EXPECT_EQ(2347000, ghx.getDouble(9).get()); // Ground Thermal Heat Capacity + EXPECT_EQ(13.375, ghx.getDouble(10).get()); // Ground Temperature + EXPECT_EQ(0.692626, ghx.getDouble(11).get()); // Grout Thermal Conductivity + EXPECT_EQ(0.391312, ghx.getDouble(12).get()); // Pipe Thermal Conductivity + EXPECT_EQ(0.0266667, ghx.getDouble(13).get()); // Pipe Out Diameter + EXPECT_EQ(0.253977, ghx.getDouble(14).get()); // U-Tube Distance + EXPECT_EQ(0.00241285, ghx.getDouble(15).get()); // Pipe Thickness + EXPECT_EQ(2, ghx.getInt(16).get()); // Maximum Length of Simulation + EXPECT_NE("", ghx.getString(17).get()); // Undisturbed Ground Temperature Model + EXPECT_EQ(0.0005, ghx.getDouble(18).get()); // G-Function Reference Ratio {dimensionless} + EXPECT_NE(-15.2996, ghx.getDouble(19).get()); // G-Function Ln(T/Ts) Value 1 + EXPECT_EQ(-0.348322, ghx.getDouble(20).get()); // G-Function G Value 1 + EXPECT_NE(3.003, ghx.getDouble(87).get()); // G-Function Ln(T/Ts) Value 35 + EXPECT_EQ(72.511, ghx.getDouble(88).get()); // G-Function G Value 35 + + std::vector ukas = model->getObjectsByType("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach"); + ASSERT_EQ(1u, ukas.size()); + + ASSERT_TRUE(ghx.getTarget(19)); + WorkspaceObject uka = ghx.getTarget(19).get(); + EXPECT_EQ(uka.nameString(), ghx.getTarget(19)->nameString()); + EXPECT_EQ(IddObjectType(IddObjectType::OS_Site_GroundTemperature_Undisturbed_KusudaAchenbach), uka.iddObject().type()); + EXPECT_EQ("Site Ground Temperature Undisturbed Kusuda Achenbach 1", uka.getString(1).get()); // Name + EXPECT_EQ(0.692626, uka.getDouble(2).get()); // Soil Thermal Conductivity + EXPECT_EQ(920.0, uka.getDouble(3).get()); // Soil Density + EXPECT_EQ(2347000 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat + EXPECT_EQ(13.375, uka.getDouble(5).get()); // Average Soil Surface Temperature + EXPECT_EQ(3.2, uka.getDouble(6).get()); // Average Amplitude of Surface Temperature + EXPECT_EQ(8.0, uka.getDouble(7).get()); // Phase Shift of Minimum Surface Temperature +} From 356402a567c21a7a853179192baf69ebea42489f Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 10:13:13 -0700 Subject: [PATCH 07/20] Formatting. --- src/osversion/VersionTranslator.cpp | 91 +++++++++---------- .../test/VersionTranslator_GTest.cpp | 54 +++++------ 2 files changed, 72 insertions(+), 73 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index 851b80935bb..b6e5d2052fc 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -7608,68 +7608,67 @@ namespace osversion { } // end update_3_5_1_to_3_6_0 - std::string VersionTranslator::update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0) - std::stringstream ss; - boost::optional value; + std::string VersionTranslator::update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0) std::stringstream ss; + boost::optional value; - ss << idf_3_6_1.header() << '\n' << '\n'; - IdfFile targetIdf(idd_3_7_0.iddFile()); - ss << targetIdf.versionObject().get(); + ss << idf_3_6_1.header() << '\n' << '\n'; + IdfFile targetIdf(idd_3_7_0.iddFile()); + ss << targetIdf.versionObject().get(); - for (const IdfObject& object : idf_3_6_1.objects()) { - auto iddname = object.iddObject().name(); + for (const IdfObject& object : idf_3_6_1.objects()) { + auto iddname = object.iddObject().name(); - if (iddname == "OS:GroundHeatExchanger:Vertical") { + if (iddname == "OS:GroundHeatExchanger:Vertical") { - // 1 Field has been added from 3.6.1 to 3.7.0: - // ------------------------------------------- - // * Undisturbed Ground Temperature Model * 17 - auto iddObject = idd_3_6_1.getObject(iddname); - IdfObject ghxObject(iddObject.get()); - IdfObject kusudaObject(idd_3_6_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); + // 1 Field has been added from 3.6.1 to 3.7.0: + // ------------------------------------------- + // * Undisturbed Ground Temperature Model * 17 + auto iddObject = idd_3_6_1.getObject(iddname); + IdfObject ghxObject(iddObject.get()); + IdfObject kusudaObject(idd_3_6_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); - for (size_t i = 0; i < object.numFields(); ++i) { - if (i < 17) { - if ((value = object.getString(i))) { - ghxObject.setString(i, value.get()); - if ((i == 8)) { // Soil Thermal Conductivity - kusudaObject.setString(i - 6, value.get()); - } - if ((i == 9)) { // Soil Specific Heat - kusudaObject.setString(i - 5, value.get() / 920.0); - } - if ((i == 10)) { // Average Soil Surface Temperature - kusudaObject.setString(i - 5, value.get()); - } + for (size_t i = 0; i < object.numFields(); ++i) { + if (i < 17) { + if ((value = object.getString(i))) { + ghxObject.setString(i, value.get()); + if ((i == 8)) { // Soil Thermal Conductivity + kusudaObject.setString(i - 6, value.get()); } - } else if (i == 17) { // Undisturbed Ground Temperature Model - ghxObject.setString(i, kusudaObject.getString(0).get()); - } else { - if ((value = object.getString(i))) { - ghxObject.setString(i + 1, value.get()); + if ((i == 9)) { // Soil Specific Heat + kusudaObject.setString(i - 5, value.get() / 920.0); + } + if ((i == 10)) { // Average Soil Surface Temperature + kusudaObject.setString(i - 5, value.get()); } } + } else if (i == 17) { // Undisturbed Ground Temperature Model + ghxObject.setString(i, kusudaObject.getString(0).get()); + } else { + if ((value = object.getString(i))) { + ghxObject.setString(i + 1, value.get()); + } } + } - kusudaObject.setString(3, 920.0); // Soil Density - kusudaObject.setString(6, 3.2); // Average Amplitude of Surface Temperature - kusudaObject.setString(7, 8.0); // Phase Shift of Minimum Surface Temperature + kusudaObject.setString(3, 920.0); // Soil Density + kusudaObject.setString(6, 3.2); // Average Amplitude of Surface Temperature + kusudaObject.setString(7, 8.0); // Phase Shift of Minimum Surface Temperature - m_refactored.push_back(RefactoredObjectData(object, ghxObject)); - m_new.push_back(kusudaObject); + m_refactored.push_back(RefactoredObjectData(object, ghxObject)); + m_new.push_back(kusudaObject); - ss << ghxObject; - ss << kusudaObject; + ss << ghxObject; + ss << kusudaObject; - // No-op - } else { - ss << object; - } + // No-op + } else { + ss << object; } + } - return ss.str(); + return ss.str(); - } // end update_3_6_1_to_3_7_0 +} // end update_3_6_1_to_3_7_0 } // namespace osversion } // namespace openstudio diff --git a/src/osversion/test/VersionTranslator_GTest.cpp b/src/osversion/test/VersionTranslator_GTest.cpp index 34e66b4c317..4c3a3dfc780 100644 --- a/src/osversion/test/VersionTranslator_GTest.cpp +++ b/src/osversion/test/VersionTranslator_GTest.cpp @@ -2507,27 +2507,27 @@ TEST_F(OSVersionFixture, update_3_6_1_to_3_7_0_GroundHeatExchangerVertical) { WorkspaceObject ghx = ghxs[0]; EXPECT_EQ("Ground Heat Exchanger Vertical 1", ghx.getString(1).get()); // Name - EXPECT_TRUE(ghx.isEmpty(2)); // Inlet Node Name - EXPECT_TRUE(ghx.isEmpty(3)); // Outlet Node Name - EXPECT_EQ(0.0033, ghx.getDouble(4).get()); // Design Flow Rate - EXPECT_EQ(120, ghx.getInt(5).get()); // Number of Bore Holes - EXPECT_EQ(76.2, ghx.getDouble(6).get()); // Bore Hole Length - EXPECT_EQ(0.063508, ghx.getDouble(7).get()); // Bore Hole Radius - EXPECT_EQ(0.692626, ghx.getDouble(8).get()); // Ground Thermal Conductivity - EXPECT_EQ(2347000, ghx.getDouble(9).get()); // Ground Thermal Heat Capacity - EXPECT_EQ(13.375, ghx.getDouble(10).get()); // Ground Temperature - EXPECT_EQ(0.692626, ghx.getDouble(11).get()); // Grout Thermal Conductivity - EXPECT_EQ(0.391312, ghx.getDouble(12).get()); // Pipe Thermal Conductivity - EXPECT_EQ(0.0266667, ghx.getDouble(13).get()); // Pipe Out Diameter - EXPECT_EQ(0.253977, ghx.getDouble(14).get()); // U-Tube Distance - EXPECT_EQ(0.00241285, ghx.getDouble(15).get()); // Pipe Thickness - EXPECT_EQ(2, ghx.getInt(16).get()); // Maximum Length of Simulation - EXPECT_NE("", ghx.getString(17).get()); // Undisturbed Ground Temperature Model - EXPECT_EQ(0.0005, ghx.getDouble(18).get()); // G-Function Reference Ratio {dimensionless} - EXPECT_NE(-15.2996, ghx.getDouble(19).get()); // G-Function Ln(T/Ts) Value 1 - EXPECT_EQ(-0.348322, ghx.getDouble(20).get()); // G-Function G Value 1 - EXPECT_NE(3.003, ghx.getDouble(87).get()); // G-Function Ln(T/Ts) Value 35 - EXPECT_EQ(72.511, ghx.getDouble(88).get()); // G-Function G Value 35 + EXPECT_TRUE(ghx.isEmpty(2)); // Inlet Node Name + EXPECT_TRUE(ghx.isEmpty(3)); // Outlet Node Name + EXPECT_EQ(0.0033, ghx.getDouble(4).get()); // Design Flow Rate + EXPECT_EQ(120, ghx.getInt(5).get()); // Number of Bore Holes + EXPECT_EQ(76.2, ghx.getDouble(6).get()); // Bore Hole Length + EXPECT_EQ(0.063508, ghx.getDouble(7).get()); // Bore Hole Radius + EXPECT_EQ(0.692626, ghx.getDouble(8).get()); // Ground Thermal Conductivity + EXPECT_EQ(2347000, ghx.getDouble(9).get()); // Ground Thermal Heat Capacity + EXPECT_EQ(13.375, ghx.getDouble(10).get()); // Ground Temperature + EXPECT_EQ(0.692626, ghx.getDouble(11).get()); // Grout Thermal Conductivity + EXPECT_EQ(0.391312, ghx.getDouble(12).get()); // Pipe Thermal Conductivity + EXPECT_EQ(0.0266667, ghx.getDouble(13).get()); // Pipe Out Diameter + EXPECT_EQ(0.253977, ghx.getDouble(14).get()); // U-Tube Distance + EXPECT_EQ(0.00241285, ghx.getDouble(15).get()); // Pipe Thickness + EXPECT_EQ(2, ghx.getInt(16).get()); // Maximum Length of Simulation + EXPECT_NE("", ghx.getString(17).get()); // Undisturbed Ground Temperature Model + EXPECT_EQ(0.0005, ghx.getDouble(18).get()); // G-Function Reference Ratio {dimensionless} + EXPECT_NE(-15.2996, ghx.getDouble(19).get()); // G-Function Ln(T/Ts) Value 1 + EXPECT_EQ(-0.348322, ghx.getDouble(20).get()); // G-Function G Value 1 + EXPECT_NE(3.003, ghx.getDouble(87).get()); // G-Function Ln(T/Ts) Value 35 + EXPECT_EQ(72.511, ghx.getDouble(88).get()); // G-Function G Value 35 std::vector ukas = model->getObjectsByType("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach"); ASSERT_EQ(1u, ukas.size()); @@ -2537,10 +2537,10 @@ TEST_F(OSVersionFixture, update_3_6_1_to_3_7_0_GroundHeatExchangerVertical) { EXPECT_EQ(uka.nameString(), ghx.getTarget(19)->nameString()); EXPECT_EQ(IddObjectType(IddObjectType::OS_Site_GroundTemperature_Undisturbed_KusudaAchenbach), uka.iddObject().type()); EXPECT_EQ("Site Ground Temperature Undisturbed Kusuda Achenbach 1", uka.getString(1).get()); // Name - EXPECT_EQ(0.692626, uka.getDouble(2).get()); // Soil Thermal Conductivity - EXPECT_EQ(920.0, uka.getDouble(3).get()); // Soil Density - EXPECT_EQ(2347000 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat - EXPECT_EQ(13.375, uka.getDouble(5).get()); // Average Soil Surface Temperature - EXPECT_EQ(3.2, uka.getDouble(6).get()); // Average Amplitude of Surface Temperature - EXPECT_EQ(8.0, uka.getDouble(7).get()); // Phase Shift of Minimum Surface Temperature + EXPECT_EQ(0.692626, uka.getDouble(2).get()); // Soil Thermal Conductivity + EXPECT_EQ(920.0, uka.getDouble(3).get()); // Soil Density + EXPECT_EQ(2347000 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat + EXPECT_EQ(13.375, uka.getDouble(5).get()); // Average Soil Surface Temperature + EXPECT_EQ(3.2, uka.getDouble(6).get()); // Average Amplitude of Surface Temperature + EXPECT_EQ(8.0, uka.getDouble(7).get()); // Phase Shift of Minimum Surface Temperature } From 3b87d87513a529e04d6fd34df78a89739a6b0233 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 10:15:58 -0700 Subject: [PATCH 08/20] Fix formatting in vt. --- src/osversion/VersionTranslator.cpp | 91 +++++++++++++++-------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index b6e5d2052fc..468d3c09c22 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -7608,67 +7608,68 @@ namespace osversion { } // end update_3_5_1_to_3_6_0 - std::string VersionTranslator::update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0) std::stringstream ss; - boost::optional value; + std::string VersionTranslator::update_3_6_1_to_3_7_0(const IdfFile& idf_3_6_1, const IddFileAndFactoryWrapper& idd_3_7_0) { + std::stringstream ss; + boost::optional value; - ss << idf_3_6_1.header() << '\n' << '\n'; - IdfFile targetIdf(idd_3_7_0.iddFile()); - ss << targetIdf.versionObject().get(); + ss << idf_3_6_1.header() << '\n' << '\n'; + IdfFile targetIdf(idd_3_7_0.iddFile()); + ss << targetIdf.versionObject().get(); - for (const IdfObject& object : idf_3_6_1.objects()) { - auto iddname = object.iddObject().name(); + for (const IdfObject& object : idf_3_6_1.objects()) { + auto iddname = object.iddObject().name(); - if (iddname == "OS:GroundHeatExchanger:Vertical") { + if (iddname == "OS:GroundHeatExchanger:Vertical") { - // 1 Field has been added from 3.6.1 to 3.7.0: - // ------------------------------------------- - // * Undisturbed Ground Temperature Model * 17 - auto iddObject = idd_3_6_1.getObject(iddname); - IdfObject ghxObject(iddObject.get()); - IdfObject kusudaObject(idd_3_6_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); + // 1 Field has been added from 3.6.1 to 3.7.0: + // ------------------------------------------- + // * Undisturbed Ground Temperature Model * 17 + auto iddObject = idd_3_6_1.getObject(iddname); + IdfObject ghxObject(iddObject.get()); + IdfObject kusudaObject(idd_3_6_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); - for (size_t i = 0; i < object.numFields(); ++i) { - if (i < 17) { - if ((value = object.getString(i))) { - ghxObject.setString(i, value.get()); - if ((i == 8)) { // Soil Thermal Conductivity - kusudaObject.setString(i - 6, value.get()); - } - if ((i == 9)) { // Soil Specific Heat - kusudaObject.setString(i - 5, value.get() / 920.0); + for (size_t i = 0; i < object.numFields(); ++i) { + if (i < 17) { + if ((value = object.getString(i))) { + ghxObject.setString(i, value.get()); + if ((i == 8)) { // Soil Thermal Conductivity + kusudaObject.setString(i - 6, value.get()); + } + if ((i == 9)) { // Soil Specific Heat + kusudaObject.setString(i - 5, value.get() / 920.0); + } + if ((i == 10)) { // Average Soil Surface Temperature + kusudaObject.setString(i - 5, value.get()); + } } - if ((i == 10)) { // Average Soil Surface Temperature - kusudaObject.setString(i - 5, value.get()); + } else if (i == 17) { // Undisturbed Ground Temperature Model + ghxObject.setString(i, kusudaObject.getString(0).get()); + } else { + if ((value = object.getString(i))) { + ghxObject.setString(i + 1, value.get()); } } - } else if (i == 17) { // Undisturbed Ground Temperature Model - ghxObject.setString(i, kusudaObject.getString(0).get()); - } else { - if ((value = object.getString(i))) { - ghxObject.setString(i + 1, value.get()); - } } - } - kusudaObject.setString(3, 920.0); // Soil Density - kusudaObject.setString(6, 3.2); // Average Amplitude of Surface Temperature - kusudaObject.setString(7, 8.0); // Phase Shift of Minimum Surface Temperature + kusudaObject.setString(3, 920.0); // Soil Density + kusudaObject.setString(6, 3.2); // Average Amplitude of Surface Temperature + kusudaObject.setString(7, 8.0); // Phase Shift of Minimum Surface Temperature - m_refactored.push_back(RefactoredObjectData(object, ghxObject)); - m_new.push_back(kusudaObject); + m_refactored.push_back(RefactoredObjectData(object, ghxObject)); + m_new.push_back(kusudaObject); - ss << ghxObject; - ss << kusudaObject; + ss << ghxObject; + ss << kusudaObject; - // No-op - } else { - ss << object; + // No-op + } else { + ss << object; + } } - } - return ss.str(); + return ss.str(); -} // end update_3_6_1_to_3_7_0 + } // end update_3_6_1_to_3_7_0 } // namespace osversion } // namespace openstudio From c247c228d3363e4cf19d45d443764678fc2766c0 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 10:32:46 -0700 Subject: [PATCH 09/20] Fix type problem. --- src/osversion/VersionTranslator.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index 468d3c09c22..b91d0996f66 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -7624,24 +7624,26 @@ namespace osversion { // 1 Field has been added from 3.6.1 to 3.7.0: // ------------------------------------------- // * Undisturbed Ground Temperature Model * 17 - auto iddObject = idd_3_6_1.getObject(iddname); + auto iddObject = idd_3_7_0.getObject(iddname); IdfObject ghxObject(iddObject.get()); - IdfObject kusudaObject(idd_3_6_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); + IdfObject kusudaObject(idd_3_7_0.getObject("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach").get()); for (size_t i = 0; i < object.numFields(); ++i) { if (i < 17) { if ((value = object.getString(i))) { ghxObject.setString(i, value.get()); - if ((i == 8)) { // Soil Thermal Conductivity + if (i == 8) { // Soil Thermal Conductivity kusudaObject.setString(i - 6, value.get()); } - if ((i == 9)) { // Soil Specific Heat - kusudaObject.setString(i - 5, value.get() / 920.0); - } - if ((i == 10)) { // Average Soil Surface Temperature + if (i == 10) { // Average Soil Surface Temperature kusudaObject.setString(i - 5, value.get()); } } + if ((value = object.getDouble(i))) { + if (i == 9) { // Soil Specific Heat + kusudaObject.setDouble(i - 5, value.get() / 920.0); + } + } } else if (i == 17) { // Undisturbed Ground Temperature Model ghxObject.setString(i, kusudaObject.getString(0).get()); } else { From de311e3c8820a9af3b439fda82f86b83ee568717 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 10:51:14 -0700 Subject: [PATCH 10/20] More minor typos. --- src/osversion/VersionTranslator.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index b91d0996f66..54605cefa90 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -7639,9 +7639,9 @@ namespace osversion { kusudaObject.setString(i - 5, value.get()); } } - if ((value = object.getDouble(i))) { + if ((boost::optional d = object.getDouble(i))) { if (i == 9) { // Soil Specific Heat - kusudaObject.setDouble(i - 5, value.get() / 920.0); + kusudaObject.setDouble(i - 5, d.get() / 920.0); } } } else if (i == 17) { // Undisturbed Ground Temperature Model @@ -7653,9 +7653,9 @@ namespace osversion { } } - kusudaObject.setString(3, 920.0); // Soil Density - kusudaObject.setString(6, 3.2); // Average Amplitude of Surface Temperature - kusudaObject.setString(7, 8.0); // Phase Shift of Minimum Surface Temperature + kusudaObject.setDouble(3, 920.0); // Soil Density + kusudaObject.setDouble(6, 3.2); // Average Amplitude of Surface Temperature + kusudaObject.setDouble(7, 8.0); // Phase Shift of Minimum Surface Temperature m_refactored.push_back(RefactoredObjectData(object, ghxObject)); m_new.push_back(kusudaObject); From 9979fc8995d15791d123b585ad360cad49a48d7f Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 11:08:34 -0700 Subject: [PATCH 11/20] Use correct syntax. --- src/osversion/VersionTranslator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index 54605cefa90..c9b5312bb5a 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -7639,9 +7639,9 @@ namespace osversion { kusudaObject.setString(i - 5, value.get()); } } - if ((boost::optional d = object.getDouble(i))) { + if (boost::optional _value = object.getDouble(i)) { if (i == 9) { // Soil Specific Heat - kusudaObject.setDouble(i - 5, d.get() / 920.0); + kusudaObject.setDouble(i - 5, _value.get() / 920.0); } } } else if (i == 17) { // Undisturbed Ground Temperature Model From 17cd660e158ea7cc8cf177738670a3ddc19eb287 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Mon, 17 Jul 2023 12:09:59 -0700 Subject: [PATCH 12/20] Fix up vt and tests. --- src/osversion/VersionTranslator.cpp | 5 +++-- .../test/VersionTranslator_GTest.cpp | 20 +++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/osversion/VersionTranslator.cpp b/src/osversion/VersionTranslator.cpp index c9b5312bb5a..74567e4c2d7 100644 --- a/src/osversion/VersionTranslator.cpp +++ b/src/osversion/VersionTranslator.cpp @@ -7644,9 +7644,10 @@ namespace osversion { kusudaObject.setDouble(i - 5, _value.get() / 920.0); } } - } else if (i == 17) { // Undisturbed Ground Temperature Model - ghxObject.setString(i, kusudaObject.getString(0).get()); } else { + if (i == 17) { // Undisturbed Ground Temperature Model + ghxObject.setString(i, kusudaObject.getString(0).get()); + } if ((value = object.getString(i))) { ghxObject.setString(i + 1, value.get()); } diff --git a/src/osversion/test/VersionTranslator_GTest.cpp b/src/osversion/test/VersionTranslator_GTest.cpp index 4c3a3dfc780..b16b7e5ebcf 100644 --- a/src/osversion/test/VersionTranslator_GTest.cpp +++ b/src/osversion/test/VersionTranslator_GTest.cpp @@ -2519,22 +2519,26 @@ TEST_F(OSVersionFixture, update_3_6_1_to_3_7_0_GroundHeatExchangerVertical) { EXPECT_EQ(0.692626, ghx.getDouble(11).get()); // Grout Thermal Conductivity EXPECT_EQ(0.391312, ghx.getDouble(12).get()); // Pipe Thermal Conductivity EXPECT_EQ(0.0266667, ghx.getDouble(13).get()); // Pipe Out Diameter - EXPECT_EQ(0.253977, ghx.getDouble(14).get()); // U-Tube Distance + EXPECT_EQ(0.0253977, ghx.getDouble(14).get()); // U-Tube Distance EXPECT_EQ(0.00241285, ghx.getDouble(15).get()); // Pipe Thickness EXPECT_EQ(2, ghx.getInt(16).get()); // Maximum Length of Simulation EXPECT_NE("", ghx.getString(17).get()); // Undisturbed Ground Temperature Model EXPECT_EQ(0.0005, ghx.getDouble(18).get()); // G-Function Reference Ratio {dimensionless} - EXPECT_NE(-15.2996, ghx.getDouble(19).get()); // G-Function Ln(T/Ts) Value 1 - EXPECT_EQ(-0.348322, ghx.getDouble(20).get()); // G-Function G Value 1 - EXPECT_NE(3.003, ghx.getDouble(87).get()); // G-Function Ln(T/Ts) Value 35 - EXPECT_EQ(72.511, ghx.getDouble(88).get()); // G-Function G Value 35 + + EXPECT_EQ(35u, ghx.numExtensibleGroups()); + auto eg1 = ghx.extensibleGroups()[0]; + EXPECT_EQ(-15.2996, eg1.getDouble(0, false).get()); // G-Function Ln(T/Ts) Value 1 + EXPECT_EQ(-0.348322, eg1.getDouble(1, false).get()); // G-Function G Value 1 + auto eg35 = ghx.extensibleGroups()[34]; + EXPECT_EQ(3.003, eg35.getDouble(0, false).get()); // G-Function Ln(T/Ts) Value 35 + EXPECT_EQ(72.511, eg35.getDouble(1, false).get()); // G-Function G Value 35 std::vector ukas = model->getObjectsByType("OS:Site:GroundTemperature:Undisturbed:KusudaAchenbach"); ASSERT_EQ(1u, ukas.size()); - ASSERT_TRUE(ghx.getTarget(19)); - WorkspaceObject uka = ghx.getTarget(19).get(); - EXPECT_EQ(uka.nameString(), ghx.getTarget(19)->nameString()); + ASSERT_TRUE(ghx.getTarget(17)); + WorkspaceObject uka = ghx.getTarget(17).get(); + EXPECT_EQ(uka.nameString(), ghx.getTarget(17)->nameString()); EXPECT_EQ(IddObjectType(IddObjectType::OS_Site_GroundTemperature_Undisturbed_KusudaAchenbach), uka.iddObject().type()); EXPECT_EQ("Site Ground Temperature Undisturbed Kusuda Achenbach 1", uka.getString(1).get()); // Name EXPECT_EQ(0.692626, uka.getDouble(2).get()); // Soil Thermal Conductivity From 275556cb3e0d559bcd6aade3c434d1d2e484edea Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 18 Jul 2023 08:50:18 -0700 Subject: [PATCH 13/20] Add ft test file for ghx vertical. --- src/energyplus/CMakeLists.txt | 1 + .../GroundHeatExchangerVertical_GTest.cpp | 121 ++++++++++++ .../GroundHeatExchangerVertical_GTest.cpp | 178 +++++++++++++++++- .../test/VersionTranslator_GTest.cpp | 2 +- 4 files changed, 300 insertions(+), 2 deletions(-) create mode 100644 src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp diff --git a/src/energyplus/CMakeLists.txt b/src/energyplus/CMakeLists.txt index 1da5afc5462..c6430334ea3 100644 --- a/src/energyplus/CMakeLists.txt +++ b/src/energyplus/CMakeLists.txt @@ -735,6 +735,7 @@ set(${target_name}_test_src Test/GeneratorMicroTurbine_GTest.cpp Test/GeneratorWindTurbine_GTest.cpp Test/GroundHeatExchangerHorizontalTrench_GTest.cpp + Test/GroundHeatExchangerVertical_GTest.cpp Test/HeatExchangerDesiccantBalancedFlow_GTest.cpp Test/HeatExchangerDesiccantBalancedFlowPerformanceDataType1_GTest.cpp Test/HeatPumpAirToWaterFuelFired_GTest.cpp diff --git a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp new file mode 100644 index 00000000000..37569544864 --- /dev/null +++ b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp @@ -0,0 +1,121 @@ +/*********************************************************************************************************************** +* OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC. +* See also https://openstudio.net/license +***********************************************************************************************************************/ + +#include +#include "EnergyPlusFixture.hpp" + +#include "../ForwardTranslator.hpp" +#include "../ReverseTranslator.hpp" + +#include "../../model/Model.hpp" +#include "../../model/GroundHeatExchangerVertical.hpp" +#include "../../model/GroundHeatExchangerVertical_Impl.hpp" +#include "../../model/PlantLoop.hpp" +#include "../../model/Node.hpp" +#include "../../model/Node_Impl.hpp" + +#include "../../utilities/idf/IdfFile.hpp" +#include "../../utilities/idf/Workspace.hpp" +#include "../../utilities/idf/IdfObject.hpp" +#include "../../utilities/idf/WorkspaceObject.hpp" + +#include +#include +#include +#include +#include + +using namespace openstudio::energyplus; +using namespace openstudio::model; +using namespace openstudio; + +TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { + + ForwardTranslator ft; + + // Create a model + Model m; + + GroundHeatExchangerVertical ghx(m); + + EXPECT_TRUE(gh.setDesignFlowRate(0.004)); + EXPECT_TRUE(gh.setNumberofBoreHoles(100)); + EXPECT_TRUE(gh.setBoreHoleLength(80.0)); + EXPECT_TRUE(gh.setBoreHoleRadius(0.7E-01)); + EXPECT_TRUE(gh.setGroundThermalConductivity(0.7)); + EXPECT_TRUE(gh.setGroundThermalHeatCapacity(0.3E+07)); + EXPECT_TRUE(gh.setGroundTemperature(14.0)); + EXPECT_TRUE(gh.setGroutThermalConductivity(0.7)); + EXPECT_TRUE(gh.setPipeThermalConductivity(0.4)); + EXPECT_TRUE(gh.setPipeOutDiameter(2.7E-02)); + EXPECT_TRUE(gh.setUTubeDistance(2.6E-02)); + EXPECT_TRUE(gh.setPipeThickness(2.5E-03)); + EXPECT_TRUE(gh.setMaximumLengthofSimulation(3)); + EXPECT_TRUE(gh.setGFunctionReferenceRatio(0.001)); + + PlantLoop p(m); + EXPECT_TRUE(p.addSupplyBranchForComponent(ghx)); + + ASSERT_TRUE(ghx.inletModelObject()); + ASSERT_TRUE(ghx.inletModelObject()->optionalCast()); + ghx.inletModelObject()->cast().setName("GHX Inlet Node"); + + ASSERT_TRUE(ghx.outletModelObject()); + ASSERT_TRUE(ghx.outletModelObject()->optionalCast()); + ghx.outletModelObject()->cast().setName("GHX Outlet Node"); + + const Workspace w = ft.translateModel(m); + + WorkspaceObjectVector idfObjs = w.getObjectsByType(IddObjectType::GroundHeatExchanger_System); + ASSERT_EQ(1u, idfObjs.size()); + auto idfObject = idfObjs.front(); + + EXPECT_EQ("Ground Heat Exchanger Vertical 1", idfObject.getString(GroundHeatExchanger_SystemFields::Name).get()); + EXPECT_EQ("GHX Inlet Node", idfObject.getString(GroundHeatExchanger_SystemFields::InletNodeName).get()); + EXPECT_EQ("GHX Outlet Node", idfObject.getString(GroundHeatExchanger_SystemFields::OutletNodeName).get()); + EXPECT_EQ(0.004, idfObject.getDouble(GroundHeatExchanger_SystemFields::DesignFlowRate).get()); + + EXPECT_EQ("Site:GroundTemperature:Undisturbed:KusudaAchenbach", + idfObject.getString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelType).get()); + + ASSERT_TRUE(idfObject.getTarget(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName)); + const WorkspaceObject kusuda = idfObject.getTarget(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName).get(); + EXPECT_EQ(IddObjectType{IddObjectType::Site_GroundTemperature_Undisturbed_KusudaAchenbach}, kusuda.iddObject().type()); + + EXPECT_EQ(0.7, idfObject.getDouble(GroundHeatExchanger_SystemFields::GroundThermalConductivity).get()); + EXPECT_EQ(0.3E+07, idfObject.getDouble(GroundHeatExchanger_SystemFields::GroundThermalHeatCapacity).get()); + + ASSERT_TRUE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get()); + const WorkspaceObject response = idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get(); + EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_ResponseFactors}, response.iddObject().type()); + + EXPECT_EQ("UHFcalc", idfObject.getString(GroundHeatExchanger_SystemFields::gFunctionCalculationMethod).get()); + EXPECT_EQ("", idfObject.getString(GroundHeatExchanger_SystemFields::GHE_Vertical_ArrayObjectName).get()); + + EXPECT_EQ(0.692626, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilThermalConductivity).get()); + EXPECT_EQ(920.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilDensity).get()); + EXPECT_EQ(0.234700E+07 / 920.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilSpecificHeat).get()); + EXPECT_EQ(13.375, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageSoilSurfaceTemperature).get()); + EXPECT_EQ(3.2, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageAmplitudeofSurfaceTemperature).get()); + EXPECT_EQ(8.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::PhaseShiftofMinimumSurfaceTemperature).get()); + + ASSERT_TRUE(response.getTarget(GroundHeatExchanger_ResponseFactorsFields::GHE_Vertical_PropertiesObjectName).get()); + const WorkspaceObject properties = response.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_PropertiesObjectName).get(); + EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_Vertical_Properties}, properties.iddObject().type()); + + EXPECT_EQ(100, response.getDouble(GroundHeatExchanger_ResponseFactorsFields::NumberofBoreholes).get()); + EXPECT_EQ(0.001, response.getDouble(GroundHeatExchanger_ResponseFactorsFields::GFunctionReferenceRatio).get()); + + EXPECT_EQ(1, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::DepthofTopofBorehole).get()); + EXPECT_EQ(80.0, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::BoreholeLength).get()); + EXPECT_EQ(0.7E-01 * 2, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::BoreholeDiameter).get()); + EXPECT_EQ(0.7, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::GroutThermalConductivity).get()); + EXPECT_EQ(3.90E+06, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::GroutThermalHeatCapacity).get()); + EXPECT_EQ(0.4, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::PipeThermalConductivity).get()); + EXPECT_EQ(1.77E+06, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::PipeThermalHeatCapacity).get()); + EXPECT_EQ(2.7E-02, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::PipeOuterDiameter).get()); + EXPECT_EQ(2.5E-03, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::PipeThickness).get()); + EXPECT_EQ(2.6E-02, properties.getDouble(GroundHeatExchanger_Vertical_PropertiesFields::UTubeDistance).get()); +} diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index c974f15e6da..ba67a1c017f 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -7,6 +7,10 @@ #include "ModelFixture.hpp" #include "../GroundHeatExchangerVertical.hpp" #include "../GroundHeatExchangerVertical_Impl.hpp" +#include "../SiteGroundTemperatureUndisturbedKusudaAchenbach.hpp" +#include "../SiteGroundTemperatureUndisturbedKusudaAchenbach_Impl.hpp" +#include "../SiteGroundTemperatureUndisturbedXing.hpp" +#include "../SiteGroundTemperatureUndisturbedXing_Impl.hpp" #include "../AirLoopHVAC.hpp" #include "../PlantLoop.hpp" #include "../Node.hpp" @@ -17,7 +21,7 @@ using namespace openstudio; using namespace openstudio::model; -TEST_F(ModelFixture, GroundHeatExchangerVertical_DefaultConstructor) { +TEST_F(ModelFixture, GroundHeatExchangerVertical_GroundHeatExchangerVertical) { ::testing::FLAGS_gtest_death_test_style = "threadsafe"; ASSERT_EXIT( @@ -28,6 +32,178 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_DefaultConstructor) { exit(0); }, ::testing::ExitedWithCode(0), ""); + + { + Model m; + GroundHeatExchangerVertical gh(m); + + ASSERT_TRUE(gh.designFlowRate()); + EXPECT_EQ(0.0033, gh.designFlowRate().get()); + ASSERT_TRUE(gh.numberofBoreHoles()); + EXPECT_EQ(120, gh.numberofBoreHoles().get()); + ASSERT_TRUE(gh.boreHoleLength()); + EXPECT_EQ(76.2, gh.boreHoleLength().get()); + ASSERT_TRUE(gh.boreHoleRadius()); + EXPECT_EQ(0.635080E-01, gh.boreHoleRadius().get()); + ASSERT_TRUE(gh.groundThermalConductivity()); + EXPECT_EQ(0.692626, gh.groundThermalConductivity().get()); + ASSERT_TRUE(gh.groundThermalHeatCapacity()); + EXPECT_EQ(0.234700E+07, gh.groundThermalHeatCapacity().get()); + ASSERT_TRUE(gh.groundTemperature()); + EXPECT_EQ(13.375, gh.groundTemperature().get()); + ASSERT_TRUE(gh.groutThermalConductivity()); + EXPECT_EQ(0.692626, gh.groutThermalConductivity().get()); + ASSERT_TRUE(gh.pipeThermalConductivity()); + EXPECT_EQ(0.391312, gh.pipeThermalConductivity().get()); + ASSERT_TRUE(gh.pipeOutDiameter()); + EXPECT_EQ(2.66667E-02, gh.pipeOutDiameter().get()); + ASSERT_TRUE(gh.uTubeDistance()); + EXPECT_EQ(2.53977E-02, gh.uTubeDistance().get()); + ASSERT_TRUE(gh.pipeThickness()); + EXPECT_EQ(2.41285E-03, gh.pipeThickness().get()); + ASSERT_TRUE(gh.maximumLengthofSimulation()); + EXPECT_EQ(2, gh.maximumLengthofSimulation().get()); + EXPECT_EQ(0.0005, gh.gFunctionReferenceRatio()); + EXPECT_FALSE(gh.isGFunctionReferenceRatioDefaulted()); + ModelObject undisturbedGroundTemperatureModel = gh.undisturbedGroundTemperatureModel(); + boost::optional uka = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(uka); + } + + { + Model m; + SiteGroundTemperatureUndisturbedKusudaAchenbach sgt(m); + GroundHeatExchangerVertical gh(m, sgt); + + ASSERT_TRUE(gh.designFlowRate()); + EXPECT_EQ(0.0033, gh.designFlowRate().get()); + ASSERT_TRUE(gh.numberofBoreHoles()); + EXPECT_EQ(120, gh.numberofBoreHoles().get()); + ASSERT_TRUE(gh.boreHoleLength()); + EXPECT_EQ(76.2, gh.boreHoleLength().get()); + ASSERT_TRUE(gh.boreHoleRadius()); + EXPECT_EQ(0.635080E-01, gh.boreHoleRadius().get()); + ASSERT_TRUE(gh.groundThermalConductivity()); + EXPECT_EQ(0.692626, gh.groundThermalConductivity().get()); + ASSERT_TRUE(gh.groundThermalHeatCapacity()); + EXPECT_EQ(0.234700E+07, gh.groundThermalHeatCapacity().get()); + ASSERT_TRUE(gh.groundTemperature()); + EXPECT_EQ(13.375, gh.groundTemperature().get()); + ASSERT_TRUE(gh.groutThermalConductivity()); + EXPECT_EQ(0.692626, gh.groutThermalConductivity().get()); + ASSERT_TRUE(gh.pipeThermalConductivity()); + EXPECT_EQ(0.391312, gh.pipeThermalConductivity().get()); + ASSERT_TRUE(gh.pipeOutDiameter()); + EXPECT_EQ(2.66667E-02, gh.pipeOutDiameter().get()); + ASSERT_TRUE(gh.uTubeDistance()); + EXPECT_EQ(2.53977E-02, gh.uTubeDistance().get()); + ASSERT_TRUE(gh.pipeThickness()); + EXPECT_EQ(2.41285E-03, gh.pipeThickness().get()); + ASSERT_TRUE(gh.maximumLengthofSimulation()); + EXPECT_EQ(2, gh.maximumLengthofSimulation().get()); + EXPECT_EQ(0.0005, gh.gFunctionReferenceRatio()); + EXPECT_FALSE(gh.isGFunctionReferenceRatioDefaulted()); + ModelObject undisturbedGroundTemperatureModel = gh.undisturbedGroundTemperatureModel(); + boost::optional uka = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(uka); + EXPECT_EQ(sgt, uka.get()); + } +} + +TEST_F(ModelFixture, GroundHeatExchangerVertical_SetGetFields) { + Model m; + GroundHeatExchangerVertical gh(m); + + EXPECT_TRUE(gh.setDesignFlowRate(0.004)); + EXPECT_TRUE(gh.setNumberofBoreHoles(100)); + EXPECT_TRUE(gh.setBoreHoleLength(80.0)); + EXPECT_TRUE(gh.setBoreHoleRadius(0.7E-01)); + EXPECT_TRUE(gh.setGroundThermalConductivity(0.7)); + EXPECT_TRUE(gh.setGroundThermalHeatCapacity(0.3E+07)); + EXPECT_TRUE(gh.setGroundTemperature(14.0)); + EXPECT_TRUE(gh.setGroutThermalConductivity(0.7)); + EXPECT_TRUE(gh.setPipeThermalConductivity(0.4)); + EXPECT_TRUE(gh.setPipeOutDiameter(2.7E-02)); + EXPECT_TRUE(gh.setUTubeDistance(2.6E-02)); + EXPECT_TRUE(gh.setPipeThickness(2.5E-03)); + EXPECT_TRUE(gh.setMaximumLengthofSimulation(3)); + EXPECT_TRUE(gh.setGFunctionReferenceRatio(0.001)); + + SiteGroundTemperatureUndisturbedKusudaAchenbach sgt(m); + EXPECT_TRUE(gh.setUndisturbedGroundTemperatureModel(sgt)); + + ASSERT_TRUE(gh.designFlowRate()); + EXPECT_EQ(0.004, gh.designFlowRate().get()); + ASSERT_TRUE(gh.numberofBoreHoles()); + EXPECT_EQ(100, gh.numberofBoreHoles().get()); + ASSERT_TRUE(gh.boreHoleLength()); + EXPECT_EQ(80.0, gh.boreHoleLength().get()); + ASSERT_TRUE(gh.boreHoleRadius()); + EXPECT_EQ(0.7E-01, gh.boreHoleRadius().get()); + ASSERT_TRUE(gh.groundThermalConductivity()); + EXPECT_EQ(0.7, gh.groundThermalConductivity().get()); + ASSERT_TRUE(gh.groundThermalHeatCapacity()); + EXPECT_EQ(0.3E+07, gh.groundThermalHeatCapacity().get()); + ASSERT_TRUE(gh.groundTemperature()); + EXPECT_EQ(14.0, gh.groundTemperature().get()); + ASSERT_TRUE(gh.groutThermalConductivity()); + EXPECT_EQ(0.7, gh.groutThermalConductivity().get()); + ASSERT_TRUE(gh.pipeThermalConductivity()); + EXPECT_EQ(0.4, gh.pipeThermalConductivity().get()); + ASSERT_TRUE(gh.pipeOutDiameter()); + EXPECT_EQ(2.7E-02, gh.pipeOutDiameter().get()); + ASSERT_TRUE(gh.uTubeDistance()); + EXPECT_EQ(2.6E-02, gh.uTubeDistance().get()); + ASSERT_TRUE(gh.pipeThickness()); + EXPECT_EQ(2.5E-03, gh.pipeThickness().get()); + ASSERT_TRUE(gh.maximumLengthofSimulation()); + EXPECT_EQ(3, gh.maximumLengthofSimulation().get()); + EXPECT_EQ(0.001, gh.gFunctionReferenceRatio()); + EXPECT_FALSE(gh.isGFunctionReferenceRatioDefaulted()); + ModelObject undisturbedGroundTemperatureModel = gh.undisturbedGroundTemperatureModel(); + boost::optional uka = + undisturbedGroundTemperatureModel.optionalCast(); + ASSERT_TRUE(uka); + EXPECT_EQ(sgt, uka.get()); + + SiteGroundTemperatureUndisturbedXing sgt2(m); + EXPECT_TRUE(gh.setUndisturbedGroundTemperatureModel(sgt2)); + + ASSERT_TRUE(gh.designFlowRate()); + EXPECT_EQ(0.004, gh.designFlowRate().get()); + ASSERT_TRUE(gh.numberofBoreHoles()); + EXPECT_EQ(100, gh.numberofBoreHoles().get()); + ASSERT_TRUE(gh.boreHoleLength()); + EXPECT_EQ(80.0, gh.boreHoleLength().get()); + ASSERT_TRUE(gh.boreHoleRadius()); + EXPECT_EQ(0.7E-01, gh.boreHoleRadius().get()); + ASSERT_TRUE(gh.groundThermalConductivity()); + EXPECT_EQ(0.7, gh.groundThermalConductivity().get()); + ASSERT_TRUE(gh.groundThermalHeatCapacity()); + EXPECT_EQ(0.3E+07, gh.groundThermalHeatCapacity().get()); + ASSERT_TRUE(gh.groundTemperature()); + EXPECT_EQ(14.0, gh.groundTemperature().get()); + ASSERT_TRUE(gh.groutThermalConductivity()); + EXPECT_EQ(0.7, gh.groutThermalConductivity().get()); + ASSERT_TRUE(gh.pipeThermalConductivity()); + EXPECT_EQ(0.4, gh.pipeThermalConductivity().get()); + ASSERT_TRUE(gh.pipeOutDiameter()); + EXPECT_EQ(2.7E-02, gh.pipeOutDiameter().get()); + ASSERT_TRUE(gh.uTubeDistance()); + EXPECT_EQ(2.6E-02, gh.uTubeDistance().get()); + ASSERT_TRUE(gh.pipeThickness()); + EXPECT_EQ(2.5E-03, gh.pipeThickness().get()); + ASSERT_TRUE(gh.maximumLengthofSimulation()); + EXPECT_EQ(3, gh.maximumLengthofSimulation().get()); + EXPECT_EQ(0.001, gh.gFunctionReferenceRatio()); + EXPECT_FALSE(gh.isGFunctionReferenceRatioDefaulted()); + ModelObject undisturbedGroundTemperatureModel2 = gh.undisturbedGroundTemperatureModel(); + boost::optional ux = + undisturbedGroundTemperatureModel2.optionalCast(); + ASSERT_TRUE(ux); + EXPECT_EQ(sgt, ux.get()); } TEST_F(ModelFixture, GroundHeatExchangerVertical_Connections) { diff --git a/src/osversion/test/VersionTranslator_GTest.cpp b/src/osversion/test/VersionTranslator_GTest.cpp index b16b7e5ebcf..cae496b6b2b 100644 --- a/src/osversion/test/VersionTranslator_GTest.cpp +++ b/src/osversion/test/VersionTranslator_GTest.cpp @@ -2543,7 +2543,7 @@ TEST_F(OSVersionFixture, update_3_6_1_to_3_7_0_GroundHeatExchangerVertical) { EXPECT_EQ("Site Ground Temperature Undisturbed Kusuda Achenbach 1", uka.getString(1).get()); // Name EXPECT_EQ(0.692626, uka.getDouble(2).get()); // Soil Thermal Conductivity EXPECT_EQ(920.0, uka.getDouble(3).get()); // Soil Density - EXPECT_EQ(2347000 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat + EXPECT_EQ(2347000.0 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat EXPECT_EQ(13.375, uka.getDouble(5).get()); // Average Soil Surface Temperature EXPECT_EQ(3.2, uka.getDouble(6).get()); // Average Amplitude of Surface Temperature EXPECT_EQ(8.0, uka.getDouble(7).get()); // Phase Shift of Minimum Surface Temperature From c484cfc483a3ed52ef4885c0de374a8a37b60b29 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 18 Jul 2023 08:50:32 -0700 Subject: [PATCH 14/20] Formatting. --- .../Test/GroundHeatExchangerVertical_GTest.cpp | 12 ++++++------ src/model/test/GroundHeatExchangerVertical_GTest.cpp | 11 +++++------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp index 37569544864..a9f5bab1845 100644 --- a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp @@ -76,17 +76,17 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { EXPECT_EQ("GHX Inlet Node", idfObject.getString(GroundHeatExchanger_SystemFields::InletNodeName).get()); EXPECT_EQ("GHX Outlet Node", idfObject.getString(GroundHeatExchanger_SystemFields::OutletNodeName).get()); EXPECT_EQ(0.004, idfObject.getDouble(GroundHeatExchanger_SystemFields::DesignFlowRate).get()); - + EXPECT_EQ("Site:GroundTemperature:Undisturbed:KusudaAchenbach", idfObject.getString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelType).get()); - + ASSERT_TRUE(idfObject.getTarget(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName)); const WorkspaceObject kusuda = idfObject.getTarget(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName).get(); EXPECT_EQ(IddObjectType{IddObjectType::Site_GroundTemperature_Undisturbed_KusudaAchenbach}, kusuda.iddObject().type()); - + EXPECT_EQ(0.7, idfObject.getDouble(GroundHeatExchanger_SystemFields::GroundThermalConductivity).get()); EXPECT_EQ(0.3E+07, idfObject.getDouble(GroundHeatExchanger_SystemFields::GroundThermalHeatCapacity).get()); - + ASSERT_TRUE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get()); const WorkspaceObject response = idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_ResponseFactors}, response.iddObject().type()); @@ -100,11 +100,11 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { EXPECT_EQ(13.375, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageSoilSurfaceTemperature).get()); EXPECT_EQ(3.2, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageAmplitudeofSurfaceTemperature).get()); EXPECT_EQ(8.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::PhaseShiftofMinimumSurfaceTemperature).get()); - + ASSERT_TRUE(response.getTarget(GroundHeatExchanger_ResponseFactorsFields::GHE_Vertical_PropertiesObjectName).get()); const WorkspaceObject properties = response.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_PropertiesObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_Vertical_Properties}, properties.iddObject().type()); - + EXPECT_EQ(100, response.getDouble(GroundHeatExchanger_ResponseFactorsFields::NumberofBoreholes).get()); EXPECT_EQ(0.001, response.getDouble(GroundHeatExchanger_ResponseFactorsFields::GFunctionReferenceRatio).get()); diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index ba67a1c017f..1a8bc88e872 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -36,7 +36,7 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_GroundHeatExchangerVertical) { { Model m; GroundHeatExchangerVertical gh(m); - + ASSERT_TRUE(gh.designFlowRate()); EXPECT_EQ(0.0033, gh.designFlowRate().get()); ASSERT_TRUE(gh.numberofBoreHoles()); @@ -130,10 +130,10 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_SetGetFields) { EXPECT_TRUE(gh.setPipeThickness(2.5E-03)); EXPECT_TRUE(gh.setMaximumLengthofSimulation(3)); EXPECT_TRUE(gh.setGFunctionReferenceRatio(0.001)); - + SiteGroundTemperatureUndisturbedKusudaAchenbach sgt(m); EXPECT_TRUE(gh.setUndisturbedGroundTemperatureModel(sgt)); - + ASSERT_TRUE(gh.designFlowRate()); EXPECT_EQ(0.004, gh.designFlowRate().get()); ASSERT_TRUE(gh.numberofBoreHoles()); @@ -167,7 +167,7 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_SetGetFields) { undisturbedGroundTemperatureModel.optionalCast(); ASSERT_TRUE(uka); EXPECT_EQ(sgt, uka.get()); - + SiteGroundTemperatureUndisturbedXing sgt2(m); EXPECT_TRUE(gh.setUndisturbedGroundTemperatureModel(sgt2)); @@ -200,8 +200,7 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_SetGetFields) { EXPECT_EQ(0.001, gh.gFunctionReferenceRatio()); EXPECT_FALSE(gh.isGFunctionReferenceRatioDefaulted()); ModelObject undisturbedGroundTemperatureModel2 = gh.undisturbedGroundTemperatureModel(); - boost::optional ux = - undisturbedGroundTemperatureModel2.optionalCast(); + boost::optional ux = undisturbedGroundTemperatureModel2.optionalCast(); ASSERT_TRUE(ux); EXPECT_EQ(sgt, ux.get()); } From a9fd199de408265cdfda1dbd7574e62c7a5c2e50 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 18 Jul 2023 09:41:50 -0700 Subject: [PATCH 15/20] Clean up ft test. --- src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp index a9f5bab1845..051cbbaa4e3 100644 --- a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp @@ -87,12 +87,12 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { EXPECT_EQ(0.7, idfObject.getDouble(GroundHeatExchanger_SystemFields::GroundThermalConductivity).get()); EXPECT_EQ(0.3E+07, idfObject.getDouble(GroundHeatExchanger_SystemFields::GroundThermalHeatCapacity).get()); - ASSERT_TRUE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get()); + ASSERT_TRUE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName)); const WorkspaceObject response = idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_ResponseFactors}, response.iddObject().type()); EXPECT_EQ("UHFcalc", idfObject.getString(GroundHeatExchanger_SystemFields::gFunctionCalculationMethod).get()); - EXPECT_EQ("", idfObject.getString(GroundHeatExchanger_SystemFields::GHE_Vertical_ArrayObjectName).get()); + ASSERT_FALSE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ArrayObjectName)); EXPECT_EQ(0.692626, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilThermalConductivity).get()); EXPECT_EQ(920.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilDensity).get()); @@ -101,7 +101,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { EXPECT_EQ(3.2, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageAmplitudeofSurfaceTemperature).get()); EXPECT_EQ(8.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::PhaseShiftofMinimumSurfaceTemperature).get()); - ASSERT_TRUE(response.getTarget(GroundHeatExchanger_ResponseFactorsFields::GHE_Vertical_PropertiesObjectName).get()); + ASSERT_TRUE(response.getTarget(GroundHeatExchanger_ResponseFactorsFields::GHE_Vertical_PropertiesObjectName)); const WorkspaceObject properties = response.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_PropertiesObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_Vertical_Properties}, properties.iddObject().type()); From 36e6d529bc61adcdd29a870cc5d8195ba3c89c24 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 18 Jul 2023 09:50:07 -0700 Subject: [PATCH 16/20] Fix a few typos. --- .../GroundHeatExchangerVertical_GTest.cpp | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp index 051cbbaa4e3..9cff69afd44 100644 --- a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp @@ -40,20 +40,20 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { GroundHeatExchangerVertical ghx(m); - EXPECT_TRUE(gh.setDesignFlowRate(0.004)); - EXPECT_TRUE(gh.setNumberofBoreHoles(100)); - EXPECT_TRUE(gh.setBoreHoleLength(80.0)); - EXPECT_TRUE(gh.setBoreHoleRadius(0.7E-01)); - EXPECT_TRUE(gh.setGroundThermalConductivity(0.7)); - EXPECT_TRUE(gh.setGroundThermalHeatCapacity(0.3E+07)); - EXPECT_TRUE(gh.setGroundTemperature(14.0)); - EXPECT_TRUE(gh.setGroutThermalConductivity(0.7)); - EXPECT_TRUE(gh.setPipeThermalConductivity(0.4)); - EXPECT_TRUE(gh.setPipeOutDiameter(2.7E-02)); - EXPECT_TRUE(gh.setUTubeDistance(2.6E-02)); - EXPECT_TRUE(gh.setPipeThickness(2.5E-03)); - EXPECT_TRUE(gh.setMaximumLengthofSimulation(3)); - EXPECT_TRUE(gh.setGFunctionReferenceRatio(0.001)); + EXPECT_TRUE(ghx.setDesignFlowRate(0.004)); + EXPECT_TRUE(ghx.setNumberofBoreHoles(100)); + EXPECT_TRUE(ghx.setBoreHoleLength(80.0)); + EXPECT_TRUE(ghx.setBoreHoleRadius(0.7E-01)); + EXPECT_TRUE(ghx.setGroundThermalConductivity(0.7)); + EXPECT_TRUE(ghx.setGroundThermalHeatCapacity(0.3E+07)); + EXPECT_TRUE(ghx.setGroundTemperature(14.0)); + EXPECT_TRUE(ghx.setGroutThermalConductivity(0.7)); + EXPECT_TRUE(ghx.setPipeThermalConductivity(0.4)); + EXPECT_TRUE(ghx.setPipeOutDiameter(2.7E-02)); + EXPECT_TRUE(ghx.setUTubeDistance(2.6E-02)); + EXPECT_TRUE(ghx.setPipeThickness(2.5E-03)); + EXPECT_TRUE(ghx.setMaximumLengthofSimulation(3)); + EXPECT_TRUE(ghx.setGFunctionReferenceRatio(0.001)); PlantLoop p(m); EXPECT_TRUE(p.addSupplyBranchForComponent(ghx)); @@ -102,7 +102,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { EXPECT_EQ(8.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::PhaseShiftofMinimumSurfaceTemperature).get()); ASSERT_TRUE(response.getTarget(GroundHeatExchanger_ResponseFactorsFields::GHE_Vertical_PropertiesObjectName)); - const WorkspaceObject properties = response.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_PropertiesObjectName).get(); + const WorkspaceObject properties = response.getTarget(GroundHeatExchanger_ResponseFactorsFields::GHE_Vertical_PropertiesObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_Vertical_Properties}, properties.iddObject().type()); EXPECT_EQ(100, response.getDouble(GroundHeatExchanger_ResponseFactorsFields::NumberofBoreholes).get()); From 33fb99f960e2805f8c32a294c3b2fc825cdd6aa2 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 18 Jul 2023 10:11:39 -0700 Subject: [PATCH 17/20] Minor cleanup in tests. --- src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp | 4 ++-- src/model/test/GroundHeatExchangerVertical_GTest.cpp | 2 +- src/osversion/test/VersionTranslator_GTest.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp index 9cff69afd44..17089134130 100644 --- a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp @@ -91,12 +91,12 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { const WorkspaceObject response = idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_ResponseFactors}, response.iddObject().type()); - EXPECT_EQ("UHFcalc", idfObject.getString(GroundHeatExchanger_SystemFields::gFunctionCalculationMethod).get()); + EXPECT_EQ(idfObject.isEmpty(GroundHeatExchanger_SystemFields::gFunctionCalculationMethod)); ASSERT_FALSE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ArrayObjectName)); EXPECT_EQ(0.692626, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilThermalConductivity).get()); EXPECT_EQ(920.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilDensity).get()); - EXPECT_EQ(0.234700E+07 / 920.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilSpecificHeat).get()); + EXPECT_DOUBLE_EQ(0.234700E+07 / 920.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilSpecificHeat).get()); EXPECT_EQ(13.375, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageSoilSurfaceTemperature).get()); EXPECT_EQ(3.2, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::AverageAmplitudeofSurfaceTemperature).get()); EXPECT_EQ(8.0, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::PhaseShiftofMinimumSurfaceTemperature).get()); diff --git a/src/model/test/GroundHeatExchangerVertical_GTest.cpp b/src/model/test/GroundHeatExchangerVertical_GTest.cpp index 1a8bc88e872..71d4db28d52 100644 --- a/src/model/test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/model/test/GroundHeatExchangerVertical_GTest.cpp @@ -202,7 +202,7 @@ TEST_F(ModelFixture, GroundHeatExchangerVertical_SetGetFields) { ModelObject undisturbedGroundTemperatureModel2 = gh.undisturbedGroundTemperatureModel(); boost::optional ux = undisturbedGroundTemperatureModel2.optionalCast(); ASSERT_TRUE(ux); - EXPECT_EQ(sgt, ux.get()); + EXPECT_EQ(sgt2, ux.get()); } TEST_F(ModelFixture, GroundHeatExchangerVertical_Connections) { diff --git a/src/osversion/test/VersionTranslator_GTest.cpp b/src/osversion/test/VersionTranslator_GTest.cpp index cae496b6b2b..dfacbb21b60 100644 --- a/src/osversion/test/VersionTranslator_GTest.cpp +++ b/src/osversion/test/VersionTranslator_GTest.cpp @@ -2543,7 +2543,7 @@ TEST_F(OSVersionFixture, update_3_6_1_to_3_7_0_GroundHeatExchangerVertical) { EXPECT_EQ("Site Ground Temperature Undisturbed Kusuda Achenbach 1", uka.getString(1).get()); // Name EXPECT_EQ(0.692626, uka.getDouble(2).get()); // Soil Thermal Conductivity EXPECT_EQ(920.0, uka.getDouble(3).get()); // Soil Density - EXPECT_EQ(2347000.0 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat + EXPECT_DOUBLE_EQ(2347000.0 / 920.0, uka.getDouble(4).get()); // Soil Specific Heat EXPECT_EQ(13.375, uka.getDouble(5).get()); // Average Soil Surface Temperature EXPECT_EQ(3.2, uka.getDouble(6).get()); // Average Amplitude of Surface Temperature EXPECT_EQ(8.0, uka.getDouble(7).get()); // Phase Shift of Minimum Surface Temperature From 497f0128c0804cb7bcc48c06ecefcf6c9cd503db Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 18 Jul 2023 11:43:51 -0700 Subject: [PATCH 18/20] Typo in ft test. --- src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp index 17089134130..f7f3b7e853f 100644 --- a/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp +++ b/src/energyplus/Test/GroundHeatExchangerVertical_GTest.cpp @@ -91,7 +91,7 @@ TEST_F(EnergyPlusFixture, ForwardTranslator_GroundHeatExchangerVertical) { const WorkspaceObject response = idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName).get(); EXPECT_EQ(IddObjectType{IddObjectType::GroundHeatExchanger_ResponseFactors}, response.iddObject().type()); - EXPECT_EQ(idfObject.isEmpty(GroundHeatExchanger_SystemFields::gFunctionCalculationMethod)); + EXPECT_TRUE(idfObject.isEmpty(GroundHeatExchanger_SystemFields::gFunctionCalculationMethod)); ASSERT_FALSE(idfObject.getTarget(GroundHeatExchanger_SystemFields::GHE_Vertical_ArrayObjectName)); EXPECT_EQ(0.692626, kusuda.getDouble(Site_GroundTemperature_Undisturbed_KusudaAchenbachFields::SoilThermalConductivity).get()); From 4292d12ad3e47e725309d4499d26ba553cfd9357 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 1 Aug 2023 12:57:28 -0700 Subject: [PATCH 19/20] Bit of reorganization. --- ...rdTranslateGroundHeatExchangerVertical.cpp | 19 ++++++++----------- src/model/GroundHeatExchangerVertical.cpp | 6 +++--- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp b/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp index 28c654dc370..d573a1c6794 100644 --- a/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp +++ b/src/energyplus/ForwardTranslator/ForwardTranslateGroundHeatExchangerVertical.cpp @@ -114,25 +114,29 @@ namespace energyplus { idfObject.setString(GroundHeatExchanger_SystemFields::OutletNodeName, temp->name().get()); } - // Maximum Flow Rate + // Design Flow Rate if ((value = modelObject.designFlowRate())) { idfObject.setDouble(GroundHeatExchanger_SystemFields::DesignFlowRate, value.get()); } + // Undisturbed Ground Temperature Model Type idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelType, - "Site:GroundTemperature:Undisturbed:KusudaAchenbach"); + _undisturbedGroundTemperatureModel->iddObject().name()); - auto groundModelName = modelObject.nameString() + " Ground Temps"; - idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName, groundModelName); + // Undisturbed Ground Temperature Model Name + idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName, s.get()); + // Ground Thermal Conductivity if ((value = modelObject.groundThermalConductivity())) { idfObject.setDouble(GroundHeatExchanger_SystemFields::GroundThermalConductivity, value.get()); } + // Ground Thermal Heat Capacity if ((value = modelObject.groundThermalHeatCapacity())) { idfObject.setDouble(GroundHeatExchanger_SystemFields::GroundThermalHeatCapacity, value.get()); } + // GHE:Vertical:ResponseFactors Object Name auto responseFactorsObjectName = modelObject.nameString() + " Response Factors"; idfObject.setString(GroundHeatExchanger_SystemFields::GHE_Vertical_ResponseFactorsObjectName, responseFactorsObjectName); @@ -176,13 +180,6 @@ namespace energyplus { propertiesIdfObject.setDouble(GroundHeatExchanger_Vertical_PropertiesFields::UTubeDistance, value.get()); } - // UndisturbedGroundTemperatureModelName - idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelName, s.get()); - - // UndisturbedGroundTemperatureModelType - idfObject.setString(GroundHeatExchanger_SystemFields::UndisturbedGroundTemperatureModelType, - _undisturbedGroundTemperatureModel->iddObject().name()); - IdfObject rfIdfObject(IddObjectType::GroundHeatExchanger_ResponseFactors); m_idfObjects.push_back(rfIdfObject); diff --git a/src/model/GroundHeatExchangerVertical.cpp b/src/model/GroundHeatExchangerVertical.cpp index 396c9f27067..75ffb69dd9f 100644 --- a/src/model/GroundHeatExchangerVertical.cpp +++ b/src/model/GroundHeatExchangerVertical.cpp @@ -493,10 +493,10 @@ namespace model { addGFunction(3.003, 72.511); SiteGroundTemperatureUndisturbedKusudaAchenbach undisturbedGroundTemperatureModel(model); - undisturbedGroundTemperatureModel.setSoilThermalConductivity(0.692626); + undisturbedGroundTemperatureModel.setSoilThermalConductivity(groundThermalConductivity().get()); undisturbedGroundTemperatureModel.setSoilDensity(920.0); - undisturbedGroundTemperatureModel.setSoilSpecificHeat(0.234700E+07 / 920.0); - undisturbedGroundTemperatureModel.setAverageSoilSurfaceTemperature(13.375); + undisturbedGroundTemperatureModel.setSoilSpecificHeat(groundThermalHeatCapacity().get() / 920.0); + undisturbedGroundTemperatureModel.setAverageSoilSurfaceTemperature(groundTemperature().get()); undisturbedGroundTemperatureModel.setAverageAmplitudeofSurfaceTemperature(3.2); undisturbedGroundTemperatureModel.setPhaseShiftofMinimumSurfaceTemperature(8.0); setUndisturbedGroundTemperatureModel(undisturbedGroundTemperatureModel); From 96d750452c8998d35c814657f54df14231bebc8a Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 1 Aug 2023 13:14:46 -0700 Subject: [PATCH 20/20] Update the release notes. --- .../doc/ReleaseNotes/OpenStudio_Release_Notes_3_7_0_TDB.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/developer/doc/ReleaseNotes/OpenStudio_Release_Notes_3_7_0_TDB.md b/developer/doc/ReleaseNotes/OpenStudio_Release_Notes_3_7_0_TDB.md index d705a28aab8..1ff4b3bd06c 100644 --- a/developer/doc/ReleaseNotes/OpenStudio_Release_Notes_3_7_0_TDB.md +++ b/developer/doc/ReleaseNotes/OpenStudio_Release_Notes_3_7_0_TDB.md @@ -74,6 +74,9 @@ You can also refer to the [OpenStudio SDK Python Binding Version Compatibility M ## New Features, Major Fixes and API-breaking changes * [#4827](https://github.com/NREL/OpenStudio/pull/4827) - #4748 #4817 - Validate BCLXML with schema when loading + make sorting of files in measure.xml consistent when saving +* [#4932](https://github.com/NREL/OpenStudio/pull/4932) - Support undisturbed ground temperature models on GroundHeatExchangerVertical + * Fix #4930 - Support undisturbed ground temperature models on GroundHeatExchangerVertical + * Update `GroundHeatExchanger:Vertical` to actually use the Ground Temeprature Model field ## Minor changes and bug fixes