diff --git a/doc/input-output-reference/src/overview/group-airflow-network.tex b/doc/input-output-reference/src/overview/group-airflow-network.tex index 61599bfaeaa..5a3076c36d4 100644 --- a/doc/input-output-reference/src/overview/group-airflow-network.tex +++ b/doc/input-output-reference/src/overview/group-airflow-network.tex @@ -2156,6 +2156,8 @@ \subsubsection{Inputs}\label{inputs-2016-06-16} \hyperref[coilcoolingdxtwostagewithhumiditycontrolmode]{Coil:Cooling:DX:TwoStageWithHumidityControlMode} \item \hyperref[coilcoolingdxmultispeed]{Coil:Cooling:DX:MultiSpeed} +\item + \hyperref[coilcoolingdxvariablespeed]{Coil:Cooling:DX:VariableSpeed} \item \hyperref[coilheatingdxmultispeed]{Coil:Heating:DX:MultiSpeed} \item diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index fa0cf2f26d9..50d379687c2 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -26706,6 +26706,7 @@ AirflowNetwork:Distribution:Component:Coil, \key Coil:Cooling:DX:TwoStageWithHumidityControlMode \key Coil:Cooling:DX:MultiSpeed \key Coil:Heating:DX:MultiSpeed + \key Coil:Cooling:DX:VariableSpeed \key Coil:Heating:Desuperheater \key Coil:Heating:Electric:MultiStage \key Coil:Heating:Gas:MultiStage diff --git a/src/EnergyPlus/AirflowNetwork/src/Solver.cpp b/src/EnergyPlus/AirflowNetwork/src/Solver.cpp index 47073976e3a..22076431b87 100644 --- a/src/EnergyPlus/AirflowNetwork/src/Solver.cpp +++ b/src/EnergyPlus/AirflowNetwork/src/Solver.cpp @@ -10530,8 +10530,6 @@ namespace AirflowNetwork { } else { ShowSevereError(m_state, "SetDXCoilAirLoopNumber: Could not find Coil \"Name=\"" + DisSysCompCoilData(i).name + "\""); } - // SetDXCoilAirLoopNumber(DisSysCompCoilData(i).name, - // DisSysCompCoilData(i).AirLoopNum); } } else if (SELECT_CASE_var == "COIL:COOLING:DX:SINGLESPEED") { ValidateComponent( @@ -10612,6 +10610,16 @@ namespace AirflowNetwork { SetDXCoilAirLoopNumber(m_state, DisSysCompCoilData(i).name, DisSysCompCoilData(i).AirLoopNum); } + } else if (SELECT_CASE_var == "COIL:COOLING:DX:VARIABLESPEED") { + ValidateComponent( + m_state, "Coil:Cooling:DX:VariableSpeed", DisSysCompCoilData(i).name, IsNotOK, format(RoutineName) + CurrentModuleObject); + ++MultiSpeedHPIndicator; + if (IsNotOK) { + ErrorsFound = true; + } else { + SetDXCoilAirLoopNumber(m_state, DisSysCompCoilData(i).name, DisSysCompCoilData(i).AirLoopNum); + } + } else if (SELECT_CASE_var == "COIL:HEATING:DX:MULTISPEED") { ValidateComponent( m_state, "Coil:Heating:DX:MultiSpeed", DisSysCompCoilData(i).name, IsNotOK, format(RoutineName) + CurrentModuleObject); diff --git a/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc b/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc index 54e70f64c19..c17f2711202 100644 --- a/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc +++ b/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc @@ -6100,6 +6100,70 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_CheckNumOfFansInAirLoopTest) EXPECT_TRUE(compare_err_stream(error_string, true)); } +TEST_F(EnergyPlusFixture, AirflowNetwork_ValidateVarSpeedCoolingCoil) +{ + std::string const idf_objects = delimited_string({ + + " Coil:Cooling:DX:VariableSpeed,", + " Super Coil, !- Name", + " Cooling Coil Air Inlet Node_unit1, !- Indoor Air Inlet Node Name", + " Heating Coil Air Inlet Node_unit1, !- Indoor Air Outlet Node Name", + " 1, !- Number of Speeds {dimensionless}", + " 1, !- Nominal Speed Level {dimensionless}", + " autosize, !- Gross Rated Total Cooling Capacity At Selected Nominal Speed Level {W}", + " autosize, !- Rated Air Flow Rate At Selected Nominal Speed Level {m3/s}", + " , !- Nominal Time for Condensate to Begin Leaving the Coil {s}", + " , !- Initial Moisture Evaporation Rate Divided by Steady-State AC Latent Capacity {dimensionless}", + " , !- Maximum Cycling Rate {cycles/hr}", + " , !- Latent Capacity Time Constant {s}", + " , !- Fan Delay Time {s}", + " HPCOOLPLFFPLR, !- Energy Part Load Fraction Curve Name", + " , !- Condenser Air Inlet Node Name", + " AirCooled, !- Condenser Type", + " , !- Evaporative Condenser Pump Rated Power Consumption {W}", + " , !- Crankcase Heater Capacity {W}", + " , !- Crankcase Heater Capacity Function of Temperature Curve Name", + " 10, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C}", + " -25, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", + " , !- Supply Water Storage Tank Name", + " , !- Condensate Collection Water Storage Tank Name", + " , !- Basin Heater Capacity {W/K}", + " 2, !- Basin Heater Setpoint Temperature {C}", + " , !- Basin Heater Operating Schedule Name", + " 15000, !- Speed 1 Reference Unit Gross Rated Total Cooling Capacity {W}", + " 0.55, !- Speed 1 Reference Unit Gross Rated Sensible Heat Ratio {dimensionless}", + " 4.3, !- Speed 1 Reference Unit Gross Rated Cooling COP {W/W}", + " 0.05, !- Speed 1 Reference Unit Rated Air Flow Rate {m3/s}", + " , !- 2017 Speed 1 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)}", + " , !- 2023 Speed 1 Rated Evaporator Fan Power Per Volume Flow Rate {W/(m3/s)}", + " , !- Speed 1 Reference Unit Rated Condenser Air Flow Rate {m3/s}", + " , !- Speed 1 Reference Unit Rated Pad Effectiveness of Evap Precooling {dimensionless}", + " HPCoolingCAPFTemp, !- Speed 1 Total Cooling Capacity Function of Temperature Curve Name", + " HPCoolingCAPFFF, !- Speed 1 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " HPCoolingEIRFTemp, !- Speed 1 Energy Input Ratio Function of Temperature Curve Name", + " HPCoolingEIRFFF; !- Speed 1 Energy Input Ratio Function of Air Flow Fraction Curve Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataAirSystemsData->PrimaryAirSystems.allocate(1); + state->dataAirSystemsData->PrimaryAirSystems(1).NumBranches = 1; + state->dataAirSystemsData->PrimaryAirSystems(1).Branch.allocate(1); + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).TotalComponents = 1; + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp.allocate(1); + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).TypeOf = "Coil:Cooling:DX:VariableSpeed"; + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).Name = "VariableSpeedCoolingCoil"; + + state->afn->DisSysNumOfCoils = 1; + state->afn->DisSysCompCoilData.allocate(1); + state->afn->DisSysCompCoilData(1).EPlusType = "COIL:COOLING:DX:VARIABLESPEED"; + state->afn->DisSysCompCoilData(1).name = "Super Coil"; + + int num_coils = state->dataInputProcessing->inputProcessor->getNumObjectsFound(*state, "Coil:Cooling:DX:VariableSpeed"); + + state->afn->validate_distribution(); +} + // Missing an AirflowNetwork:Distribution:Node for the Zone Air Node TEST_F(EnergyPlusFixture, AirflowNetwork_CheckMultiZoneNodes_NoZoneNode) {