Skip to content

Commit

Permalink
Merge pull request #4671 from NREL/new-watertoair-fields
Browse files Browse the repository at this point in the history
New Coil:*:WaterToAirHeatPump:EquationFit fields
  • Loading branch information
jmarrec committed Sep 20, 2022
2 parents b8f0050 + d04a448 commit 731a156
Show file tree
Hide file tree
Showing 18 changed files with 985 additions and 87 deletions.
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

0 comments on commit 731a156

Please sign in to comment.