Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/model/ZoneHVACPackagedTerminalHeatPump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,12 @@ namespace model {

double ZoneHVACPackagedTerminalHeatPump_Impl::dXHeatingCoilSizingRatio() const {
boost::optional<double> value = getDouble(OS_ZoneHVAC_PackagedTerminalHeatPumpFields::DXHeatingCoilSizingRatio, true);
if (!value) {
// it is an error if we get here (eg: cloned from an object that had it unset), however we don't want to crash
LOG(Error, "Required DX Heating Coil Sizing Ratio not set, defaulting to 1.0");
const_cast<ZoneHVACPackagedTerminalHeatPump_Impl*>(this)->setDXHeatingCoilSizingRatio(1.0); // NOLINT
value = getDouble(OS_ZoneHVAC_PackagedTerminalHeatPumpFields::DXHeatingCoilSizingRatio, true);
}
OS_ASSERT(value);
return value.get();
}
Expand Down
18 changes: 18 additions & 0 deletions src/model/test/ZoneHVACPackagedTerminalHeatPump_GTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include "../BoilerHotWater.hpp"

#include <utilities/idd/OS_Curve_Biquadratic_FieldEnums.hxx>
#include <utilities/idd/OS_ZoneHVAC_PackagedTerminalHeatPump_FieldEnums.hxx>

using namespace openstudio;

Expand Down Expand Up @@ -308,6 +309,23 @@ TEST_F(ModelFixture, ZoneHVACPackagedTerminalHeatPump_CoilSystemCoolingDXHeatExc
model::ZoneHVACPackagedTerminalHeatPump pthp(m, availabilitySchedule, fan, heatingCoil, coolingCoil, supplementalHeatingCoil);
}

TEST_F(ModelFixture, ZoneHVACPackagedTerminalHeatPump_DXHeatingCoilSizingRatio_Unset) {
// Test for #5635 - cloning from an object that never had this required field set (eg: an
// older template) must not return whatever garbage memory the underlying getter finds
model::Model m;
model::CoilHeatingDXVariableSpeed heatingCoil(m);
model::CoilCoolingDXVariableSpeed coolingCoil(m);
model::ScheduleCompact availabilitySchedule(m);
model::FanConstantVolume fan(m, availabilitySchedule);
model::CoilHeatingElectric supplementalHeatingCoil(m, availabilitySchedule);

model::ZoneHVACPackagedTerminalHeatPump pthp(m, availabilitySchedule, fan, heatingCoil, coolingCoil, supplementalHeatingCoil);
EXPECT_EQ(1.0, pthp.dXHeatingCoilSizingRatio());

ASSERT_TRUE(pthp.setString(OS_ZoneHVAC_PackagedTerminalHeatPumpFields::DXHeatingCoilSizingRatio, ""));
EXPECT_EQ(1.0, pthp.dXHeatingCoilSizingRatio());
}

TEST_F(ModelFixture, ZoneHVACPackagedTerminalHeatPump_SupplyAirFanOpSch) {
model::Model m;
model::CoilHeatingDXVariableSpeed heatingCoil(m);
Expand Down