From b7e40787e5e3ad2350a8df6a73d16994d5be9af3 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Wed, 23 Jul 2025 16:11:31 -0700 Subject: [PATCH 1/4] Add model tests for chiller curve outputs. --- src/model/ChillerElectricEIR.cpp | 10 ++++++++++ src/model/test/ChillerElectricEIR_GTest.cpp | 20 +++++++++++++++++++ .../ChillerElectricReformulatedEIR_GTest.cpp | 18 +++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/src/model/ChillerElectricEIR.cpp b/src/model/ChillerElectricEIR.cpp index 19e30135d51..74eb9e55175 100644 --- a/src/model/ChillerElectricEIR.cpp +++ b/src/model/ChillerElectricEIR.cpp @@ -999,6 +999,16 @@ namespace model { ChillerElectricEIR::ChillerElectricEIR(const Model& model) : WaterToWaterComponent(ChillerElectricEIR::iddObjectType(), model) { OS_ASSERT(getImpl()); + // Both of the following test files have capft and eirft curves with the ctor values below: + // - DOAS_wNeutralSupplyAir_wFanCoilUnits.idf + // - WaterCooledChillerWithVSCondenserControl.idf + // But the curves are unused in the test files. + + // The following test files have curve values shown in the E+ documentation: + // - ElectricEIRChiller.idf (WaterCooled) + // - ElectricEIRChillerHeatRecoveryAuto.idf (WaterCooled) + // - ElectricEIRChiller_EvapCooledCondenser.idf (EvaporativelyCooled) + CurveBiquadratic ccFofT(model); ccFofT.setCoefficient1Constant(1.0215158); ccFofT.setCoefficient2x(0.037035864); diff --git a/src/model/test/ChillerElectricEIR_GTest.cpp b/src/model/test/ChillerElectricEIR_GTest.cpp index d0d16d5e47b..2c496fa9dca 100644 --- a/src/model/test/ChillerElectricEIR_GTest.cpp +++ b/src/model/test/ChillerElectricEIR_GTest.cpp @@ -1117,3 +1117,23 @@ TEST_F(ModelFixture, ChillerElectricEIR_HeatRecoverySetpointNode) { ASSERT_TRUE(chiller.heatRecoveryLeavingTemperatureSetpointNode()); EXPECT_EQ(hrOutletNode, chiller.heatRecoveryLeavingTemperatureSetpointNode().get()); } + +TEST_F(ModelFixture, ChillerElectricEIR_referenceConditionsCurveOutput) { + + // Test for #2093, #2957 + Model model; + ChillerElectricEIR chiller(model); + + double ref_lchwt = chiller.referenceLeavingChilledWaterTemperature(); + double ref_ecnwt = chiller.referenceEnteringCondenserFluidTemperature(); + + CurveBiquadratic capft = chiller.coolingCapacityFunctionOfTemperature(); + CurveBiquadratic eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); + CurveQuadratic eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); + + EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, ref_ecnwt)); // 85F (water cooled) + EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, ref_ecnwt)); // 85F (water cooled) + EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) + EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) + EXPECT_DOUBLE_EQ(1.0, eirfplr.evaluate(1.0)); +} diff --git a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp index 413f61c5fde..ec1040f7174 100644 --- a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp +++ b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp @@ -914,3 +914,21 @@ TEST_F(ModelFixture, ChillerElectricReformulatedEIR_PlantLoopConnections_addToNo ASSERT_TRUE(chiller.heatRecoveryLoop()); EXPECT_EQ(hrLoop, chiller.heatRecoveryLoop().get()); } + +TEST_F(ModelFixture, ChillerElectricReformulatedEIR_referenceConditionsCurveOutput) { + + // Test for #2093, #2957 + Model model; + ChillerElectricReformulatedEIR chiller(model); + + double ref_lchwt = chiller.referenceLeavingChilledWaterTemperature(); + double ref_lcnwt = chiller.referenceLeavingCondenserWaterTemperature(); + + CurveBiquadratic capft = chiller.coolingCapacityFunctionOfTemperature(); + CurveBiquadratic eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); + CurveBicubic eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); + + EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, ref_lcnwt)); + EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, ref_lcnwt)); + EXPECT_DOUBLE_EQ(1.0, eirfplr.evaluate(1.0)); +} \ No newline at end of file From de9b3ecc8b17fd0bf19186c39623339a2156fc72 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 24 Jul 2025 13:48:56 -0700 Subject: [PATCH 2/4] Return Curve object type. --- src/model/test/ChillerElectricEIR_GTest.cpp | 10 +++++----- .../test/ChillerElectricReformulatedEIR_GTest.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/model/test/ChillerElectricEIR_GTest.cpp b/src/model/test/ChillerElectricEIR_GTest.cpp index 2c496fa9dca..06bd92159db 100644 --- a/src/model/test/ChillerElectricEIR_GTest.cpp +++ b/src/model/test/ChillerElectricEIR_GTest.cpp @@ -1127,13 +1127,13 @@ TEST_F(ModelFixture, ChillerElectricEIR_referenceConditionsCurveOutput) { double ref_lchwt = chiller.referenceLeavingChilledWaterTemperature(); double ref_ecnwt = chiller.referenceEnteringCondenserFluidTemperature(); - CurveBiquadratic capft = chiller.coolingCapacityFunctionOfTemperature(); - CurveBiquadratic eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); - CurveQuadratic eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); + Curve capft = chiller.coolingCapacityFunctionOfTemperature(); + Curve eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); + Curve eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, ref_ecnwt)); // 85F (water cooled) EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, ref_ecnwt)); // 85F (water cooled) - EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) - EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) + EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) + EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) EXPECT_DOUBLE_EQ(1.0, eirfplr.evaluate(1.0)); } diff --git a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp index ec1040f7174..39c1f7d15c6 100644 --- a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp +++ b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp @@ -924,9 +924,9 @@ TEST_F(ModelFixture, ChillerElectricReformulatedEIR_referenceConditionsCurveOutp double ref_lchwt = chiller.referenceLeavingChilledWaterTemperature(); double ref_lcnwt = chiller.referenceLeavingCondenserWaterTemperature(); - CurveBiquadratic capft = chiller.coolingCapacityFunctionOfTemperature(); - CurveBiquadratic eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); - CurveBicubic eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); + Curve capft = chiller.coolingCapacityFunctionOfTemperature(); + Curve eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); + Curve eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, ref_lcnwt)); EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, ref_lcnwt)); From 7ac1a0b2d6389fb6fc2088e2a7907f6a08b30a8e Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 24 Jul 2025 15:50:33 -0700 Subject: [PATCH 3/4] Update and fix the new model tests. --- src/model/test/ChillerElectricEIR_GTest.cpp | 10 +++++----- .../test/ChillerElectricReformulatedEIR_GTest.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/model/test/ChillerElectricEIR_GTest.cpp b/src/model/test/ChillerElectricEIR_GTest.cpp index 06bd92159db..cdb22074378 100644 --- a/src/model/test/ChillerElectricEIR_GTest.cpp +++ b/src/model/test/ChillerElectricEIR_GTest.cpp @@ -1131,9 +1131,9 @@ TEST_F(ModelFixture, ChillerElectricEIR_referenceConditionsCurveOutput) { Curve eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); Curve eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); - EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, ref_ecnwt)); // 85F (water cooled) - EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, ref_ecnwt)); // 85F (water cooled) - EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) - EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, 35.0)); // 95F (air cooled) - EXPECT_DOUBLE_EQ(1.0, eirfplr.evaluate(1.0)); + EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, ref_ecnwt), 0.001); // 85F (water cooled) + EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, ref_ecnwt), 0.001); // 85F (water cooled) + EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, 35.0), 0.001); // 95F (air cooled) + EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, 35.0), 0.001); // 95F (air cooled) + EXPECT_NEAR(1.0, eirfplr.evaluate(1.0), 0.001); } diff --git a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp index 39c1f7d15c6..25e39b659ff 100644 --- a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp +++ b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp @@ -928,7 +928,7 @@ TEST_F(ModelFixture, ChillerElectricReformulatedEIR_referenceConditionsCurveOutp Curve eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); Curve eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); - EXPECT_DOUBLE_EQ(1.0, capft.evaluate(ref_lchwt, ref_lcnwt)); - EXPECT_DOUBLE_EQ(1.0, eirft.evaluate(ref_lchwt, ref_lcnwt)); - EXPECT_DOUBLE_EQ(1.0, eirfplr.evaluate(1.0)); + EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, ref_lcnwt), 0.001); + EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, ref_lcnwt), 0.001); + EXPECT_NEAR(1.0, eirfplr.evaluate(35.0, 1.0), 0.001); } \ No newline at end of file From bee9d1906f240fd5649ba561d06cb9fdd046acc6 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Fri, 25 Jul 2025 09:04:57 -0700 Subject: [PATCH 4/4] Relax tolerance in new chiller model tests. --- src/model/test/ChillerElectricEIR_GTest.cpp | 10 +++++----- .../test/ChillerElectricReformulatedEIR_GTest.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/model/test/ChillerElectricEIR_GTest.cpp b/src/model/test/ChillerElectricEIR_GTest.cpp index cdb22074378..f4b1e7127a9 100644 --- a/src/model/test/ChillerElectricEIR_GTest.cpp +++ b/src/model/test/ChillerElectricEIR_GTest.cpp @@ -1131,9 +1131,9 @@ TEST_F(ModelFixture, ChillerElectricEIR_referenceConditionsCurveOutput) { Curve eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); Curve eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); - EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, ref_ecnwt), 0.001); // 85F (water cooled) - EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, ref_ecnwt), 0.001); // 85F (water cooled) - EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, 35.0), 0.001); // 95F (air cooled) - EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, 35.0), 0.001); // 95F (air cooled) - EXPECT_NEAR(1.0, eirfplr.evaluate(1.0), 0.001); + EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, ref_ecnwt), 0.01); // 85F (water cooled) + EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, ref_ecnwt), 0.01); // 85F (water cooled) + EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, 35.0), 0.01); // 95F (air cooled) + EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, 35.0), 0.01); // 95F (air cooled) + EXPECT_NEAR(1.0, eirfplr.evaluate(1.0), 0.01); } diff --git a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp index 25e39b659ff..44eb8d84844 100644 --- a/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp +++ b/src/model/test/ChillerElectricReformulatedEIR_GTest.cpp @@ -928,7 +928,7 @@ TEST_F(ModelFixture, ChillerElectricReformulatedEIR_referenceConditionsCurveOutp Curve eirft = chiller.electricInputToCoolingOutputRatioFunctionOfTemperature(); Curve eirfplr = chiller.electricInputToCoolingOutputRatioFunctionOfPLR(); - EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, ref_lcnwt), 0.001); - EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, ref_lcnwt), 0.001); - EXPECT_NEAR(1.0, eirfplr.evaluate(35.0, 1.0), 0.001); + EXPECT_NEAR(1.0, capft.evaluate(ref_lchwt, ref_lcnwt), 0.01); + EXPECT_NEAR(1.0, eirft.evaluate(ref_lchwt, ref_lcnwt), 0.01); + EXPECT_NEAR(1.0, eirfplr.evaluate(35.0, 1.0), 0.01); } \ No newline at end of file