From c2e4891a4a27e2c595b7a9e92ebbe72f4df712b6 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 27 Jan 2026 10:34:39 -0700 Subject: [PATCH 1/6] Add radiant panel model test to demonstrate schedule type limits issue. --- .../CoilCoolingWaterPanelRadiant_GTest.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp index db4899c800..5a48c3f680 100644 --- a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp +++ b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp @@ -19,6 +19,8 @@ #include "../ScheduleConstant_Impl.hpp" #include "../AirLoopHVAC.hpp" #include "../AirLoopHVACZoneSplitter.hpp" +#include "../ScheduleRuleset.hpp" +#include "../ScheduleTypeLimits.hpp" using namespace openstudio; using namespace openstudio::model; @@ -111,3 +113,21 @@ TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_SetGetFields) { coil.resetCoolingControlTemperatureSchedule(); EXPECT_FALSE(coil.coolingControlTemperatureSchedule()); } + +TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_CoolingControlTemperatureSchedule) { + // Address #5595: "CoilCoolingWaterPanelRadiant.setCoolingControlTemperatureSchedule" but keep getting 'incompatible ScheduleTypeLimits' error + + Model m; + CoilCoolingWaterPanelRadiant coil(m); + + ScheduleTypeLimits temperatureLimits(m); + EXPECT_TRUE(temperatureLimits.setLowerLimitValue(-60)); + EXPECT_TRUE(temperatureLimits.setUpperLimitValue(200)); + EXPECT_TRUE(temperatureLimits.setNumericType("Continuous")); + EXPECT_TRUE(temperatureLimits.setUnitType("Temperature")); + + ScheduleRuleset temperatureSchedule(model); + EXPECT_TRUE(temperatureSchedule.setScheduleTypeLimits(temperatureLimits)); + + EXPECT_TRUE(coil.setCoolingControlTemperatureSchedule(temperatureSchedule)); +} From 08449e18009cae92456699f5c2781b99aa18d239 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 27 Jan 2026 10:35:09 -0700 Subject: [PATCH 2/6] Formatting. --- src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp index 5a48c3f680..fff3476574 100644 --- a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp +++ b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp @@ -116,7 +116,7 @@ TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_SetGetFields) { TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_CoolingControlTemperatureSchedule) { // Address #5595: "CoilCoolingWaterPanelRadiant.setCoolingControlTemperatureSchedule" but keep getting 'incompatible ScheduleTypeLimits' error - + Model m; CoilCoolingWaterPanelRadiant coil(m); From 7451305190890d31c73de274caf3f727105e0f9b Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 27 Jan 2026 12:03:21 -0700 Subject: [PATCH 3/6] Typo in new test. --- src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp index fff3476574..8ec4e27f26 100644 --- a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp +++ b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp @@ -126,7 +126,7 @@ TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_CoolingControlTemperatureSched EXPECT_TRUE(temperatureLimits.setNumericType("Continuous")); EXPECT_TRUE(temperatureLimits.setUnitType("Temperature")); - ScheduleRuleset temperatureSchedule(model); + ScheduleRuleset temperatureSchedule(m); EXPECT_TRUE(temperatureSchedule.setScheduleTypeLimits(temperatureLimits)); EXPECT_TRUE(coil.setCoolingControlTemperatureSchedule(temperatureSchedule)); From 958b1ba7a0689cfaebaeae1f9d0be719787221e1 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Tue, 27 Jan 2026 15:41:51 -0700 Subject: [PATCH 4/6] Update ScheduleTypeRegistry.cpp for cooling panel temperature schedule. --- src/model/ScheduleTypeRegistry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/ScheduleTypeRegistry.cpp b/src/model/ScheduleTypeRegistry.cpp index 040e7efca9..06909d92a0 100644 --- a/src/model/ScheduleTypeRegistry.cpp +++ b/src/model/ScheduleTypeRegistry.cpp @@ -207,7 +207,7 @@ namespace model { {"CoilCoolingLowTempRadiantVarFlow", "Cooling Control Temperature Schedule", "coolingControlTemperatureSchedule", true, "Temperature", OptionalDouble(), OptionalDouble()}, {"CoilCoolingWater", "Availability", "availabilitySchedule", false, "Availability", 0.0, 1.0}, - {"CoilCoolingWaterPanelRadiant", "Cooling Control Temperature", "coolingControlTemperatureSchedule", true, "", 0.0, OptionalDouble()}, + {"CoilCoolingWaterPanelRadiant", "Cooling Control Temperature Schedule", "coolingControlTemperatureSchedule", true, "Temperature", OptionalDouble(), OptionalDouble()}, {"CoilCoolingWaterToAirHeatPumpEquationFit", "Availability Schedule", "availabilitySchedule", false, "Availability", 0.0, 1.0}, {"CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit", "Availability Schedule", "availabilitySchedule", false, "Availability", 0.0, 1.0}, {"CoilHeatingDesuperheater", "Availability", "availabilitySchedule", false, "Availability", 0.0, 1.0}, From eec41777ae396812d136abf43dd79bb5db6d2695 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Thu, 29 Jan 2026 10:02:26 -0700 Subject: [PATCH 5/6] Formatting. --- src/model/ScheduleTypeRegistry.cpp | 3 ++- src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/model/ScheduleTypeRegistry.cpp b/src/model/ScheduleTypeRegistry.cpp index 06909d92a0..c294e6a872 100644 --- a/src/model/ScheduleTypeRegistry.cpp +++ b/src/model/ScheduleTypeRegistry.cpp @@ -207,7 +207,8 @@ namespace model { {"CoilCoolingLowTempRadiantVarFlow", "Cooling Control Temperature Schedule", "coolingControlTemperatureSchedule", true, "Temperature", OptionalDouble(), OptionalDouble()}, {"CoilCoolingWater", "Availability", "availabilitySchedule", false, "Availability", 0.0, 1.0}, - {"CoilCoolingWaterPanelRadiant", "Cooling Control Temperature Schedule", "coolingControlTemperatureSchedule", true, "Temperature", OptionalDouble(), OptionalDouble()}, + {"CoilCoolingWaterPanelRadiant", "Cooling Control Temperature Schedule", "coolingControlTemperatureSchedule", true, "Temperature", + OptionalDouble(), OptionalDouble()}, {"CoilCoolingWaterToAirHeatPumpEquationFit", "Availability Schedule", "availabilitySchedule", false, "Availability", 0.0, 1.0}, {"CoilCoolingWaterToAirHeatPumpVariableSpeedEquationFit", "Availability Schedule", "availabilitySchedule", false, "Availability", 0.0, 1.0}, {"CoilHeatingDesuperheater", "Availability", "availabilitySchedule", false, "Availability", 0.0, 1.0}, diff --git a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp index 8ec4e27f26..7d9d457e80 100644 --- a/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp +++ b/src/model/test/CoilCoolingWaterPanelRadiant_GTest.cpp @@ -115,7 +115,8 @@ TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_SetGetFields) { } TEST_F(ModelFixture, CoilCoolingWaterPanelRadiant_CoolingControlTemperatureSchedule) { - // Address #5595: "CoilCoolingWaterPanelRadiant.setCoolingControlTemperatureSchedule" but keep getting 'incompatible ScheduleTypeLimits' error + // Address #5595, "CoilCoolingWaterPanelRadiant.setCoolingControlTemperatureSchedule" but + // keep getting 'incompatible ScheduleTypeLimits' error. Model m; CoilCoolingWaterPanelRadiant coil(m); From 5a2f391f2e0bd3c74fb660cdeb9db1633970db00 Mon Sep 17 00:00:00 2001 From: Joe Robertson Date: Fri, 30 Jan 2026 12:57:40 -0700 Subject: [PATCH 6/6] Updates for schedule type keys. --- src/model/CoilCoolingWaterPanelRadiant.cpp | 13 ++++++++++++- src/model/CoilCoolingWaterPanelRadiant.hpp | 2 ++ src/model/CoilCoolingWaterPanelRadiant_Impl.hpp | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/model/CoilCoolingWaterPanelRadiant.cpp b/src/model/CoilCoolingWaterPanelRadiant.cpp index 06525bba82..a5773eaa06 100644 --- a/src/model/CoilCoolingWaterPanelRadiant.cpp +++ b/src/model/CoilCoolingWaterPanelRadiant.cpp @@ -54,6 +54,17 @@ namespace model { return CoilCoolingWaterPanelRadiant::iddObjectType(); } + std::vector CoilCoolingWaterPanelRadiant_Impl::getScheduleTypeKeys(const Schedule& schedule) const { + std::vector result; + UnsignedVector fieldIndices = getSourceIndices(schedule.handle()); + UnsignedVector::const_iterator b(fieldIndices.begin()); + UnsignedVector::const_iterator e(fieldIndices.end()); + if (std::find(b, e, OS_Coil_Cooling_Water_Panel_RadiantFields::CoolingControlTemperatureScheduleName) != e) { + result.push_back(ScheduleTypeKey("CoilCoolingWaterPanelRadiant", "Cooling Control Temperature Schedule")); + } + return result; + } + unsigned CoilCoolingWaterPanelRadiant_Impl::inletPort() const { return OS_Coil_Cooling_Water_Panel_RadiantFields::WaterInletNodeName; } @@ -252,7 +263,7 @@ namespace model { bool CoilCoolingWaterPanelRadiant_Impl::setCoolingControlTemperatureSchedule(Schedule& coolingControlTemperatureSchedule) { bool result = setSchedule(OS_Coil_Cooling_Water_Panel_RadiantFields::CoolingControlTemperatureScheduleName, "CoilCoolingWaterPanelRadiant", - "Cooling Control Temperature", coolingControlTemperatureSchedule); + "Cooling Control Temperature Schedule", coolingControlTemperatureSchedule); return result; } diff --git a/src/model/CoilCoolingWaterPanelRadiant.hpp b/src/model/CoilCoolingWaterPanelRadiant.hpp index bfa5ddc3ad..49ac269ce1 100644 --- a/src/model/CoilCoolingWaterPanelRadiant.hpp +++ b/src/model/CoilCoolingWaterPanelRadiant.hpp @@ -13,6 +13,8 @@ namespace openstudio { namespace model { + class Schedule; + namespace detail { class CoilCoolingWaterPanelRadiant_Impl; diff --git a/src/model/CoilCoolingWaterPanelRadiant_Impl.hpp b/src/model/CoilCoolingWaterPanelRadiant_Impl.hpp index c99d9bd049..c03e34c664 100644 --- a/src/model/CoilCoolingWaterPanelRadiant_Impl.hpp +++ b/src/model/CoilCoolingWaterPanelRadiant_Impl.hpp @@ -14,6 +14,8 @@ namespace openstudio { namespace model { + class Schedule; + namespace detail { /** CoilCoolingWaterPanelRadiant_Impl is a StraightComponent_Impl that is the implementation class for CoilCoolingWaterPanelRadiant.*/ @@ -39,6 +41,8 @@ namespace model { virtual IddObjectType iddObjectType() const override; + virtual std::vector getScheduleTypeKeys(const Schedule& schedule) const override; + virtual unsigned inletPort() const override; virtual unsigned outletPort() const override;