Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Coil:*:WaterToAirHeatPump:EquationFit fields #4671

Merged
merged 32 commits into from
Sep 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
5bfbb1e
Update os idd.
joseph-robertson Sep 6, 2022
f89da36
Add model getters and setters.
joseph-robertson Sep 6, 2022
dbc0640
Update ft for new fields.
joseph-robertson Sep 6, 2022
a2278c5
Update vt and add tests.
joseph-robertson Sep 6, 2022
1ea7c95
Formatting.
joseph-robertson Sep 6, 2022
d40d3e6
Typo in new cpp setter.
joseph-robertson Sep 6, 2022
2701257
Clean up cpp files a bit.
joseph-robertson Sep 7, 2022
e16c507
Clean up setter methods.
joseph-robertson Sep 7, 2022
6d70223
Merge branch 'v22.2.0-IOFreeze' into new-watertoair-fields
joseph-robertson Sep 7, 2022
7dd1240
Fix formatting in vt cpp.
joseph-robertson Sep 7, 2022
eee96c5
Merge branch 'v22.2.0-IOFreeze' into new-watertoair-fields
joseph-robertson Sep 8, 2022
f37c7c5
Newline.
joseph-robertson Sep 8, 2022
c0543ab
Merge branch 'v22.2.0-IOFreeze' into new-watertoair-fields
joseph-robertson Sep 9, 2022
8bf1a05
Fix vt and tests.
joseph-robertson Sep 10, 2022
e2125b3
Merge branch 'v22.2.0-IOFreeze' into new-watertoair-fields
joseph-robertson Sep 10, 2022
d40a8ad
Typo.
joseph-robertson Sep 10, 2022
630ec7e
Fix merge conflicts.
joseph-robertson Sep 10, 2022
9fac3d9
Merge branch 'v22.2.0-IOFreeze' into new-watertoair-fields
joseph-robertson Sep 15, 2022
f35bdae
Add new ft test for watertoairhp objects.
joseph-robertson Sep 15, 2022
61801d1
Formatting.
joseph-robertson Sep 15, 2022
3c59e26
Fill out new ft test fields.
joseph-robertson Sep 16, 2022
125e979
Try test again.
joseph-robertson Sep 16, 2022
cfd2d0b
Use isEmpty method for non translated fields.
joseph-robertson Sep 16, 2022
ebecd2c
Formatting.
joseph-robertson Sep 16, 2022
d33bfd6
Clean up ft files.
joseph-robertson Sep 19, 2022
f4fa781
Improve ft and vt tests.
joseph-robertson Sep 19, 2022
26ae52a
Typos.
joseph-robertson Sep 19, 2022
7cc8064
Fix up ft test.
joseph-robertson Sep 19, 2022
9a67761
Check node connections.
joseph-robertson Sep 19, 2022
f10eb5e
Merge branch 'v22.2.0-IOFreeze' into new-watertoair-fields
joseph-robertson Sep 19, 2022
45b97a3
Merge remote-tracking branch 'refs/remotes/origin/v22.2.0-IOFreeze'
jmarrec Sep 20, 2022
d04a448
Redo full test FT Tests for ZoneHVACWaterToAirHeatPump + Coils
jmarrec Sep 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
66 changes: 62 additions & 4 deletions resources/model/OpenStudio.idd
Original file line number Diff line number Diff line change
Expand Up @@ -17615,7 +17615,10 @@ OS:Coil:Cooling:Water,
\key CounterFlow

OS:Coil:Cooling:WaterToAirHeatPump:EquationFit,
\Min-fields 29
\memo Direct expansion (DX) cooling coil for water-to-air heat pump (includes electric
\memo compressor), single-speed, equation-fit model. Optional inputs for moisture
\memo evaporation from wet coil when compressor cycles off with continuous fan operation.
\memo Equation-fit model uses normalized curves to describe the heat pump performance.
A1, \field Handle
\type handle
\required-field
Expand Down Expand Up @@ -17655,6 +17658,7 @@ OS:Coil:Cooling:WaterToAirHeatPump:EquationFit,
\autosizable
\default Autosize
N3, \field Rated Total Cooling Capacity
\note Total cooling capacity at rated conditions not accounting for the effect of supply air fan heat
\type real
\minimum> 0.0
\units W
Expand All @@ -17667,10 +17671,35 @@ OS:Coil:Cooling:WaterToAirHeatPump:EquationFit,
\autosizable
\default Autosize
N5, \field Rated Cooling Coefficient of Performance
\note Gross cooling COP at rated conditions
\type real
\units W/W
\minimum> 0.0
\default 3.0
N6, \field Rated Entering Water Temperature
\note Rated entering water temperature corresponding to the water-to
\note -air application for which this coil is used. For example: for water loop
\note applications, the rated temperature is 30 degree Celsius
\units C
\type real
\minimum> 0
\required-field
N7, \field Rated Entering Air Dry-Bulb Temperature
\note Rated entering air dry-bulb temperature corresponding to the
\note water-to-air application for which this coil is used. For example: for
\note water loop applications, the rated temperature is 27 degree Celsius
\units C
\type real
\required-field
\minimum> 0
N8, \field Rated Entering Air Wet-Bulb Temperature
\note Rated entering air wet-bulb temperature corresponding to the
\note water-to-air application for which this coil is used. For example: for
\note water loop applications, the rated temperature is 19 degree Celsius
\units C
\type real
\required-field
\minimum> 0
A7, \field Total Cooling Capacity Curve Name
\required-field
\type object-list
Expand All @@ -17683,7 +17712,7 @@ OS:Coil:Cooling:WaterToAirHeatPump:EquationFit,
\required-field
\type object-list
\object-list QuadvariateFunctions
N6, \field Nominal Time for Condensate Removal to Begin
N9, \field Nominal Time for Condensate Removal to Begin
\type real
\units s
\minimum 0.0
Expand All @@ -17694,7 +17723,7 @@ OS:Coil:Cooling:WaterToAirHeatPump:EquationFit,
\note Nominal time is equal to the ratio of the energy of the coil's maximum
\note condensate holding capacity (J) to the coil's steady state latent capacity (W).
\note Suggested value is 1000; zero value means latent degradation model is disabled.
N7; \field Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity
N10; \field Ratio of Initial Moisture Evaporation Rate and Steady State Latent Capacity
\type real
\units dimensionless
\minimum 0.0
Expand Down Expand Up @@ -18571,7 +18600,9 @@ OS:Coil:Heating:Water:Baseboard:Radiant,
\minimum> 0.0

OS:Coil:Heating:WaterToAirHeatPump:EquationFit,
\Min-fields 20
\memo Direct expansion (DX) heating coil for water-to-air heat pump (includes electric
\memo compressor), single-speed, equation-fit model. Equation-fit model uses normalized
\memo curves to describe the heat pump performance.
A1, \field Handle
\type handle
\required-field
Expand Down Expand Up @@ -18610,16 +18641,43 @@ OS:Coil:Heating:WaterToAirHeatPump:EquationFit,
\autosizable
\default Autosize
N3, \field Rated Heating Capacity
\note Heating capacity at rated conditions not accounting for the effect of supply air fan heat
\type real
\minimum> 0.0
\units W
\autosizable
\default Autosize
N4, \field Rated Heating Coefficient of Performance
\note Gross heating COP at rated conditions
\type real
\minimum> 0.0
\units W/W
\default 3.0
N5, \field Rated Entering Water Temperature
\note Rated entering water temperature corresponding to the water-to
\note -air application for which this coil is used. For example: for water loop
\note applications, the rated temperature is 20 degree Celsius.
\units C
\type real
\required-field
N6, \field Rated Entering Air Dry-Bulb Temperature
\note Rated entering air dry-bulb temperature corresponding to the
\note water-to-air application for which this coil is used. For example: for
\note water loop applications, the rated temperature is 20 degree Celsius.
\units C
\type real
\required-field
\minimum> 0
N7, \field Ratio of Rated Heating Capacity to Rated Cooling Capacity
\note Ratio of rated heating capacity to rated cooling capacity. This
\note input is used to calculate the heating or cooling capacity when autosizing.
\note This input is only used if a companion cooling coil of the same type
\note (Coil:Cooling:WaterToAirHeatPump:EquationFit) is used. This input is only
\note used when a sizing run for the system which uses this object is requested
\note and when the coil capacity is autosized.
\type real
\minimum> 0
\required-field
A7, \field Heating Capacity Curve Name
\required-field
\type object-list
Expand Down
1 change: 1 addition & 0 deletions src/energyplus/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,7 @@ set(${target_name}_test_src
Test/ZoneHVACPackagedTerminalHeatPump_GTest.cpp
Test/ZoneHVACTerminalUnitVariableRefrigerantFlow_GTest.cpp
Test/ZoneHVACUnitHeater_GTest.cpp
Test/ZoneHVACWaterToAirHeatPump_GTest.cpp
Test/ZonePropertyUserViewFactorsBySurfaceName_GTest.cpp
Test/ZoneVentilationWindandStackOpenArea_GTest.cpp
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,93 +69,76 @@ namespace energyplus {
// Object Name
//std::string baseName = idfObject.name().get();

// A3 ,Field Water Inlet Node Name

// Water Inlet Node Name
if (boost::optional<ModelObject> mo = modelObject.waterInletModelObject()) {
if (boost::optional<Node> node = mo->optionalCast<Node>()) {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::WaterInletNodeName, node->name().get());
}
}

// A4, Field Water Outlet Node Name

// Water Outlet Node Name
if (boost::optional<ModelObject> mo = modelObject.waterOutletModelObject()) {
if (boost::optional<Node> node = mo->optionalCast<Node>()) {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::WaterOutletNodeName, node->name().get());
}
}

// A5, Field Air Inlet Node Name

// Air Inlet Node Name
if (boost::optional<ModelObject> mo = modelObject.airInletModelObject()) {
if (boost::optional<Node> node = mo->optionalCast<Node>()) {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::AirInletNodeName, node->name().get());
}
}

// A6 , \field Air Outlet Node Name

// Air Outlet Node Name
if (boost::optional<ModelObject> mo = modelObject.airOutletModelObject()) {
if (boost::optional<Node> node = mo->optionalCast<Node>()) {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::AirOutletNodeName, node->name().get());
}
}

// N1 Field Rated Air Flow Rate

value = modelObject.ratedAirFlowRate();

if (value) {
// Rated Air Flow Rate
if ((value = modelObject.ratedAirFlowRate())) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedAirFlowRate, *value);
}

else {
} else {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedAirFlowRate, "Autosize");
}

// N2 Rated Water Flow Rate

value = modelObject.ratedWaterFlowRate();

if (value) {
// Rated Water Flow Rate
if ((value = modelObject.ratedWaterFlowRate())) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedWaterFlowRate, *value);
}

else {
} else {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedWaterFlowRate, "Autosize");
}

// N3, Field Rated Total Cooling Capacity

value = modelObject.ratedTotalCoolingCapacity();

if (value) {
// Rated Total Cooling Capacity
if ((value = modelObject.ratedTotalCoolingCapacity())) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::GrossRatedTotalCoolingCapacity, *value);
}

else {
} else {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::GrossRatedTotalCoolingCapacity, "Autosize");
}

// N4, Field Rated Sensible Cooling Capacity

value = modelObject.ratedSensibleCoolingCapacity();

if (value) {
// Rated Sensible Cooling Capacity
if ((value = modelObject.ratedSensibleCoolingCapacity())) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::GrossRatedSensibleCoolingCapacity, *value);
}

else {
} else {
idfObject.setString(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::GrossRatedSensibleCoolingCapacity, "Autosize");
}

// N5, Field Rated Cooling Coefficient of Performance
// Rated Cooling Coefficient of Performance
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::GrossRatedCoolingCOP, modelObject.ratedCoolingCoefficientofPerformance());

value = modelObject.ratedCoolingCoefficientofPerformance();
// Rated Entering Water Temperature
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedEnteringWaterTemperature,
modelObject.ratedEnteringWaterTemperature());

if (value) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::GrossRatedCoolingCOP, *value);
}
// Rated Entering Air Dry-Bulb Temperature
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedEnteringAirDryBulbTemperature,
modelObject.ratedEnteringAirDryBulbTemperature());

// Rated Entering Air Wet-Bulb Temperature
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatedEnteringAirWetBulbTemperature,
modelObject.ratedEnteringAirWetBulbTemperature());

// Total Cooling Capacity Curve Name
{
Expand All @@ -181,19 +164,13 @@ namespace energyplus {
}
}

// N22, Field Nominal Time for Condensate Removal to Begin

value = modelObject.nominalTimeforCondensateRemovaltoBegin();

if (value) {
// Nominal Time for Condensate Removal to Begin
if ((value = modelObject.nominalTimeforCondensateRemovaltoBegin())) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::NominalTimeforCondensateRemovaltoBegin, *value);
}

// N23, Field Ratio of Initial Moisture Evaporation Rate and Steady State Latent

value = modelObject.ratioofInitialMoistureEvaporationRateandSteadyStateLatentCapacity();

if (value) {
// Ratio of Initial Moisture Evaporation Rate and Steady State Latent
if ((value = modelObject.ratioofInitialMoistureEvaporationRateandSteadyStateLatentCapacity())) {
idfObject.setDouble(Coil_Cooling_WaterToAirHeatPump_EquationFitFields::RatioofInitialMoistureEvaporationRateandSteadyStateLatentCapacity,
*value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,28 +82,28 @@ namespace energyplus {
}
}

//Air Inlet Node Name
// Air Inlet Node Name
if (boost::optional<ModelObject> mo = modelObject.airInletModelObject()) {
if (boost::optional<Node> node = mo->optionalCast<Node>()) {
idfObject.setString(Coil_Heating_WaterToAirHeatPump_EquationFitFields::AirInletNodeName, node->name().get());
}
}

//Air Outlet Node Name
// Air Outlet Node Name
if (boost::optional<ModelObject> mo = modelObject.airOutletModelObject()) {
if (boost::optional<Node> node = mo->optionalCast<Node>()) {
idfObject.setString(Coil_Heating_WaterToAirHeatPump_EquationFitFields::AirOutletNodeName, node->name().get());
}
}

//Rated Air Flow Rate
// Rated Air Flow Rate
if (modelObject.isRatedAirFlowRateAutosized()) {
idfObject.setString(Coil_Heating_WaterToAirHeatPump_EquationFitFields::RatedAirFlowRate, "Autosize");
} else if ((value = modelObject.ratedAirFlowRate())) {
idfObject.setDouble(Coil_Heating_WaterToAirHeatPump_EquationFitFields::RatedAirFlowRate, value.get());
}

//Rated Water Flow Rate
// Rated Water Flow Rate
if (modelObject.isRatedWaterFlowRateAutosized()) {
idfObject.setString(Coil_Heating_WaterToAirHeatPump_EquationFitFields::RatedWaterFlowRate, "Autosize");
} else if ((value = modelObject.ratedWaterFlowRate())) {
Expand All @@ -118,9 +118,19 @@ namespace energyplus {
}

// Heating Coefficient of Performance
if ((value = modelObject.ratedHeatingCoefficientofPerformance())) {
idfObject.setDouble(Coil_Heating_WaterToAirHeatPump_EquationFitFields::GrossRatedHeatingCOP, value.get());
}
idfObject.setDouble(Coil_Heating_WaterToAirHeatPump_EquationFitFields::GrossRatedHeatingCOP, modelObject.ratedHeatingCoefficientofPerformance());

// Rated Entering Water Temperature
idfObject.setDouble(Coil_Heating_WaterToAirHeatPump_EquationFitFields::RatedEnteringWaterTemperature,
modelObject.ratedEnteringWaterTemperature());

// Rated Entering Air Dry-Bulb Temperature
idfObject.setDouble(Coil_Heating_WaterToAirHeatPump_EquationFitFields::RatedEnteringAirDryBulbTemperature,
modelObject.ratedEnteringAirDryBulbTemperature());

// Ratio of Rated Heating Capacity to Rated Cooling Capacity
idfObject.setDouble(Coil_Heating_WaterToAirHeatPump_EquationFitFields::RatioofRatedHeatingCapacitytoRatedCoolingCapacity,
modelObject.ratioofRatedHeatingCapacitytoRatedCoolingCapacity());

// Heating Capacity Curve Name
{
Expand Down