diff --git a/src/EnergyPlus/HybridEvapCoolingModel.cc b/src/EnergyPlus/HybridEvapCoolingModel.cc index 8ba811e4331..26cd701fe35 100644 --- a/src/EnergyPlus/HybridEvapCoolingModel.cc +++ b/src/EnergyPlus/HybridEvapCoolingModel.cc @@ -117,16 +117,15 @@ namespace HybridEvapCoolingModel { BLOCK_HEADER_OFFSET_Number = 6; } - bool CMode::InitializeOutdoorAirTemperatureConstraints(Real64 min, Real64 max, bool minBlank, bool maxBlank) + void CMode::InitializeOutdoorAirTemperatureConstraints(Real64 min, Real64 max, bool minBlank, bool maxBlank) { // note If this field is blank, there should be no lower constraint on outside air temperature Minimum_Outdoor_Air_Temperature = min; Maximum_Outdoor_Air_Temperature = max; Minimum_Outdoor_Air_Temperature_Blank = minBlank; Maximum_Outdoor_Air_Temperature_Blank = maxBlank; - return true; } - bool CMode::InitializeOutdoorAirHumidityRatioConstraints(Real64 min, Real64 max) + void CMode::InitializeOutdoorAirHumidityRatioConstraints(Real64 min, Real64 max) { // minimum 0.00 maximum 0.10, units kgWater / kgDryAir // note Mode0 will not be considered when outside air absolute humidity is below the value in this field. @@ -134,9 +133,8 @@ namespace HybridEvapCoolingModel { // the upper constraint on outside air humidity ratio will be 0.10 kgWater / kgDryAir, default 0.10 Minimum_Outdoor_Air_Humidity_Ratio = min; Maximum_Outdoor_Air_Humidity_Ratio = max; - return true; } - bool CMode::InitializeOutdoorAirRelativeHumidityConstraints(Real64 min, Real64 max) + void CMode::InitializeOutdoorAirRelativeHumidityConstraints(Real64 min, Real64 max) { // minimum 0.00,maximum 100.00, units percent, Mode0 will not be considered when the outside air relative humidity is below the value in this // field. @@ -144,17 +142,17 @@ namespace HybridEvapCoolingModel { // outside air relative humidity will be 100.00%, (default 100.00) Minimum_Outdoor_Air_Relative_Humidity = min; Maximum_Outdoor_Air_Relative_Humidity = max; - return true; } - bool CMode::InitializeReturnAirTemperatureConstraints(Real64 min, Real64 max) + void CMode::InitializeReturnAirTemperatureConstraints(Real64 min, Real64 max, bool minBlank, bool maxBlank) { // will not be considered when the return air temperature is below the value in this field. // If this field is blank, there will be no lower constraint on return air temperature Minimum_Return_Air_Temperature = min; Maximum_Return_Air_Temperature = max; - return true; + Minimum_Return_Air_Temperature_Blank = minBlank; + Maximum_Return_Air_Temperature_Blank = maxBlank; } - bool CMode::InitializeReturnAirHumidityRatioConstraints(Real64 min, Real64 max) + void CMode::InitializeReturnAirHumidityRatioConstraints(Real64 min, Real64 max) { // minimum 0.00 maximum 0.10, units kgWater / kgDryAir // note Mode0 will not be considered when outside air absolute humidity is below the value in this field. @@ -162,9 +160,8 @@ namespace HybridEvapCoolingModel { // the upper constraint on outside air humidity ratio will be 0.10 kgWater / kgDryAir, default 0.10 Minimum_Return_Air_Humidity_Ratio = min; Maximum_Return_Air_Humidity_Ratio = max; - return true; } - bool CMode::InitializeReturnAirRelativeHumidityConstraints(Real64 min, Real64 max) + void CMode::InitializeReturnAirRelativeHumidityConstraints(Real64 min, Real64 max) { // minimum 0.00,maximum 100.00, units percent, Mode0 will not be considered when the outside air relative humidity is below the value in this // field. @@ -172,24 +169,21 @@ namespace HybridEvapCoolingModel { // outside air relative humidity will be 100.00%, (default 100.00) Minimum_Return_Air_Relative_Humidity = min; Maximum_Return_Air_Relative_Humidity = max; - return true; } - bool CMode::InitializeOSAFConstraints(Real64 minOSAF, Real64 maxOSAF) + void CMode::InitializeOSAFConstraints(Real64 minOSAF, Real64 maxOSAF) { // minimum 0.00, maximum 1.00, Outdoor air fractions below this value will not be considered. // If this field is blank, the lower constraint on outside air fraction will be 0.00,default 0.10 Min_OAF = minOSAF; Max_OAF = maxOSAF; - return true; } - bool CMode::InitializeMsaRatioConstraints(Real64 minMsa, Real64 maxMsa) + void CMode::InitializeMsaRatioConstraints(Real64 minMsa, Real64 maxMsa) { // minimum 0.00, maximum 1.00, Supply air mass flow rate ratios below this value will not be considered. // Supply air mass flow rate ratio describes supply air mass flow rate as a fraction of mass flow rate associated with the value in field : // "System Maximum Supply Air Flow Rate". If this field is blank, the lower constraint on outside air fraction will be 0.00,default 0.10 Min_Msa = minMsa; Max_Msa = maxMsa; - return true; } bool CMode::ValidPointer(int curve_pointer) { @@ -399,23 +393,13 @@ namespace HybridEvapCoolingModel { Array1D_string Alphas, Array1D_string cAlphaFields, Array1D Numbers, - Array1D_string cNumericFields, Array1D lAlphaBlanks, Array1D lNumericBlanks, std::string cCurrentModuleObject) { CMode newMode; - bool error = newMode.ParseMode(state, - ModeCounter, - &OperatingModes, - ScalingFactor, - Alphas, - cAlphaFields, - Numbers, - cNumericFields, - lAlphaBlanks, - lNumericBlanks, - cCurrentModuleObject); + bool error = newMode.ParseMode( + state, ModeCounter, &OperatingModes, ScalingFactor, Alphas, cAlphaFields, Numbers, lAlphaBlanks, lNumericBlanks, cCurrentModuleObject); ModeCounter++; return error; } @@ -427,7 +411,6 @@ namespace HybridEvapCoolingModel { Array1D_string Alphas, Array1D_string cAlphaFields, Array1D Numbers, - Array1D_string cNumericFields, Array1D lAlphaBlanks, Array1D lNumericBlanks, std::string cCurrentModuleObject) @@ -607,87 +590,42 @@ namespace HybridEvapCoolingModel { } // N8, \field Mode1 Minimum Outdoor Air Temperature // N9, \field Mode1 Maximum Outdoor Air Temperature - bool ok = InitializeOutdoorAirTemperatureConstraints( + InitializeOutdoorAirTemperatureConstraints( Numbers(inter_Number), Numbers(inter_Number + 1), lNumericBlanks(inter_Number), lNumericBlanks(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, EnergyPlus::format("Invalid {}Or Invalid{}", cNumericFields(inter_Number), cNumericFields(inter_Number + 1))); - ShowContinueError(state, EnergyPlus::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } inter_Number = inter_Number + 2; // N10, \field Mode1 Minimum Outdoor Air Humidity Ratio // N11, \field Mode1 Maximum Outdoor Air Humidity Ratio - ok = InitializeOutdoorAirHumidityRatioConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, std::format("Invalid {}Or Invalid{}", cNumericFields(inter_Number), cNumericFields(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeOutdoorAirHumidityRatioConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); inter_Number = inter_Number + 2; // N12, \field Mode1 Minimum Outdoor Air Relative Humidity // N13, \field Mode1 Maximum Outdoor Air Relative Humidity - ok = InitializeOutdoorAirRelativeHumidityConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, std::format("Invalid {}Or Invalid{}", cNumericFields(inter_Number), cNumericFields(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeOutdoorAirRelativeHumidityConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); inter_Number = inter_Number + 2; // N14, \field Mode1 Minimum Return Air Temperature // N15, \field Mode1 Maximum Return Air Temperature - ok = InitializeReturnAirTemperatureConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, std::format("Invalid {}Or Invalid{}", cNumericFields(inter_Number), cNumericFields(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeReturnAirTemperatureConstraints( + Numbers(inter_Number), Numbers(inter_Number + 1), lNumericBlanks(inter_Number), lNumericBlanks(inter_Number + 1)); inter_Number = inter_Number + 2; // N16, \field Mode1 Minimum Return Air Humidity Ratio // N17, \field Mode1 Maximum Return Air Humidity Ratio - ok = InitializeReturnAirHumidityRatioConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, std::format("Invalid {}Or Invalid{}", cNumericFields(inter_Number), cNumericFields(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeReturnAirHumidityRatioConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); inter_Number = inter_Number + 2; // N18, \field Mode1 Minimum Return Air Relative HumidityInitialize // N19, \field Mode1 Maximum Return Air Relative Humidity - ok = InitializeReturnAirRelativeHumidityConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, - std::format("Invalid {}={}Or Invalid{}={}", - cAlphaFields(inter_Number), - Alphas(inter_Number), - cAlphaFields(inter_Number + 1), - Alphas(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeReturnAirRelativeHumidityConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); inter_Number = inter_Number + 2; // N20, \field Mode1 Minimum Outdoor Air Fraction // N21, \field Mode1 Maximum Outdoor Air Fraction - - ok = InitializeOSAFConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, std::format("Error in OSAFConstraints{}through{}", cAlphaFields(inter_Number), cAlphaFields(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeOSAFConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); // N22, \field Mode1 Minimum Supply Air Mass Flow Rate Ratio // N23, \field Mode1 Maximum Supply Air Mass Flow Rate Ratio inter_Number = inter_Number + 2; - ok = InitializeMsaRatioConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); - if (!ok) { - ShowSevereError(state, std::format("Error in OSAFConstraints{}through{}", cAlphaFields(inter_Number), cAlphaFields(inter_Number + 1))); - ShowContinueError(state, std::format("Entered in {}", cCurrentModuleObject)); - ErrorsFound = true; - } + InitializeMsaRatioConstraints(Numbers(inter_Number), Numbers(inter_Number + 1)); (*OperatingModes).push_back(*this); return ErrorsFound; } - bool CMode::MeetsOAEnvConstraints(Real64 Tosa, Real64 Wosa, Real64 RHosa) + bool CMode::MeetsConstraints(Real64 Tosa, Real64 Wosa, Real64 RHosa, Real64 Tra, Real64 Wra, Real64 RHra) { // SUBROUTINE INFORMATION: // AUTHOR Spencer Maxwell Dutton @@ -696,7 +634,7 @@ namespace HybridEvapCoolingModel { // RE-ENGINEERED na // PURPOSE OF THIS SUBROUTINE: - // To check to see if this mode of operation is able to operate given the specified outdoor environmental conditions. + // To check to see if this mode of operation is able to operate given the specified environmental conditions. // METHODOLOGY EMPLOYED: // Constraining certain modes to only operate over certain environmental conditions gives the user greater control in which @@ -705,27 +643,17 @@ namespace HybridEvapCoolingModel { // REFERENCES: // na - // Using/Aliasing - bool OATempConstraintmet = false; - bool OAHRConstraintmet = false; - bool OARHConstraintmet = false; + bool OATempConstraintMet = (Minimum_Outdoor_Air_Temperature_Blank || Tosa >= Minimum_Outdoor_Air_Temperature) && + (Maximum_Outdoor_Air_Temperature_Blank || Tosa <= Maximum_Outdoor_Air_Temperature); + bool OAHRConstraintMet = (Wosa >= Minimum_Outdoor_Air_Humidity_Ratio && Wosa <= Maximum_Outdoor_Air_Humidity_Ratio); + bool OARHConstraintMet = (RHosa >= Minimum_Outdoor_Air_Relative_Humidity && RHosa <= Maximum_Outdoor_Air_Relative_Humidity); - if ((Minimum_Outdoor_Air_Temperature_Blank || Tosa >= Minimum_Outdoor_Air_Temperature) && - (Maximum_Outdoor_Air_Temperature_Blank || Tosa <= Maximum_Outdoor_Air_Temperature)) { - OATempConstraintmet = true; - } + bool RATempConstraintMet = (Minimum_Return_Air_Temperature_Blank || Tra >= Minimum_Return_Air_Temperature) && + (Maximum_Return_Air_Temperature_Blank || Tra <= Maximum_Return_Air_Temperature); + bool RAHRConstraintMet = (Wra >= Minimum_Return_Air_Humidity_Ratio && Wra <= Maximum_Return_Air_Humidity_Ratio); + bool RARHConstraintMet = (RHra >= Minimum_Return_Air_Relative_Humidity && RHra <= Maximum_Return_Air_Relative_Humidity); - if (Wosa >= Minimum_Outdoor_Air_Humidity_Ratio && Wosa <= Maximum_Outdoor_Air_Humidity_Ratio) { - OAHRConstraintmet = true; - } - - if (RHosa >= Minimum_Outdoor_Air_Relative_Humidity && RHosa <= Maximum_Outdoor_Air_Relative_Humidity) { - OARHConstraintmet = true; - } - if (OATempConstraintmet && OAHRConstraintmet && OARHConstraintmet) { - return true; - } - return false; + return OATempConstraintMet && OAHRConstraintMet && OARHConstraintMet && RATempConstraintMet && RAHRConstraintMet && RARHConstraintMet; } bool Model::MeetsSupplyAirTOC([[maybe_unused]] EnergyPlusData &state, Real64 Tsupplyair) @@ -1305,7 +1233,7 @@ namespace HybridEvapCoolingModel { // Check that in this mode the //Outdoor Air Relative Humidity(0 - 100 % ) //Outdoor Air Humidity Ratio(g / g)//Outdoor Air // Temperature(degC) - if (Mode.MeetsOAEnvConstraints(StepIns.Tosa, Wosa, 100 * StepIns.RHosa)) { + if (Mode.MeetsConstraints(StepIns.Tosa, Wosa, 100 * StepIns.RHosa, StepIns.Tra, Wra, 100 * StepIns.RHra)) { EnvironmentConditionsMet = EnvironmentConditionsMetOnce = true; } else { EnvironmentConditionsMet = false; diff --git a/src/EnergyPlus/HybridEvapCoolingModel.hh b/src/EnergyPlus/HybridEvapCoolingModel.hh index 680f35898b0..76dec2c8ed6 100644 --- a/src/EnergyPlus/HybridEvapCoolingModel.hh +++ b/src/EnergyPlus/HybridEvapCoolingModel.hh @@ -143,6 +143,8 @@ namespace HybridEvapCoolingModel { Real64 Maximum_Outdoor_Air_Relative_Humidity; Real64 Minimum_Return_Air_Temperature; Real64 Maximum_Return_Air_Temperature; + bool Minimum_Return_Air_Temperature_Blank; + bool Maximum_Return_Air_Temperature_Blank; Real64 Minimum_Return_Air_Humidity_Ratio; Real64 Maximum_Return_Air_Humidity_Ratio; Real64 Minimum_Return_Air_Relative_Humidity; @@ -161,22 +163,21 @@ namespace HybridEvapCoolingModel { Array1D_string Alphas, Array1D_string cAlphaFields, Array1D Numbers, - Array1D_string cNumericFields, Array1D lAlphaBlanks, Array1D lNumericBlanks, std::string cCurrentModuleObject); void InitializeCurve(int curveType, int CurveID); Real64 CalculateCurveVal(EnergyPlusData &state, Real64 Tosa, Real64 Wosa, Real64 Tra, Real64 Wra, Real64 Msa, Real64 OSAF, int curveType); - bool InitializeOSAFConstraints(Real64 minOSAF, Real64 maxOSAF); - bool InitializeMsaRatioConstraints(Real64 minMsa, Real64 maxMsa); - bool InitializeOutdoorAirTemperatureConstraints(Real64 min, Real64 max, bool minBlank, bool maxBlank); - bool InitializeOutdoorAirHumidityRatioConstraints(Real64 min, Real64 max); - bool InitializeOutdoorAirRelativeHumidityConstraints(Real64 min, Real64 max); - bool InitializeReturnAirTemperatureConstraints(Real64 min, Real64 max); - bool InitializeReturnAirHumidityRatioConstraints(Real64 min, Real64 max); - bool InitializeReturnAirRelativeHumidityConstraints(Real64 min, Real64 max); + void InitializeOSAFConstraints(Real64 minOSAF, Real64 maxOSAF); + void InitializeMsaRatioConstraints(Real64 minMsa, Real64 maxMsa); + void InitializeOutdoorAirTemperatureConstraints(Real64 min, Real64 max, bool minBlank, bool maxBlank); + void InitializeOutdoorAirHumidityRatioConstraints(Real64 min, Real64 max); + void InitializeOutdoorAirRelativeHumidityConstraints(Real64 min, Real64 max); + void InitializeReturnAirTemperatureConstraints(Real64 min, Real64 max, bool minBlank, bool maxBlank); + void InitializeReturnAirHumidityRatioConstraints(Real64 min, Real64 max); + void InitializeReturnAirRelativeHumidityConstraints(Real64 min, Real64 max); void GenerateSolutionSpace(); - bool MeetsOAEnvConstraints(Real64 Tosa, Real64 Wosa, Real64 RHos); + bool MeetsConstraints(Real64 Tosa, Real64 Wosa, Real64 RHosa, Real64 Tra, Real64 Wra, Real64 RHra); private: }; @@ -400,7 +401,6 @@ namespace HybridEvapCoolingModel { Array1D_string Alphas, Array1D_string cAlphaFields, Array1D Numbers, - Array1D_string cNumericFields, Array1D lAlphaBlanks, Array1D lNumericBlanks, std::string cCurrentModuleObject); diff --git a/src/EnergyPlus/HybridUnitaryAirConditioners.cc b/src/EnergyPlus/HybridUnitaryAirConditioners.cc index d6de654e0a7..d670a4b2733 100644 --- a/src/EnergyPlus/HybridUnitaryAirConditioners.cc +++ b/src/EnergyPlus/HybridUnitaryAirConditioners.cc @@ -681,8 +681,7 @@ void GetInputZoneHybridUnitaryAirConditioners(EnergyPlusData &state, bool &Error } for (int modeIter = 0; modeIter <= Numberofoperatingmodes - 1; ++modeIter) { - ErrorsFound = hybridUnitaryAC.ParseMode( - state, Alphas, cAlphaFields, Numbers, cNumericFields, lAlphaBlanks, lNumericBlanks, cCurrentModuleObject); + ErrorsFound = hybridUnitaryAC.ParseMode(state, Alphas, cAlphaFields, Numbers, lAlphaBlanks, lNumericBlanks, cCurrentModuleObject); if (ErrorsFound) { ShowFatalError(state, EnergyPlus::format("{}: Errors found parsing modes", routineName)); ShowContinueError(state, "... Preceding condition causes termination."); diff --git a/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc b/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc index 758b40184f7..0fe226fd821 100644 --- a/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc +++ b/tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc @@ -574,8 +574,8 @@ TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_ValidateFieldsParsing "0.03, !- Mode1 Maximum Outside Air Humidity Ratio {kgWater/kgDryAir}", "0, !- Mode1 Minimum Outside Air Relative Humidity {percent}", "100, !- Mode1 Maximum Outside Air Relative Humidity {percent}", - "-20, !- Mode1 Minimum Return Air Temperature {C}", - "100, !- Mode1 Maximum Return Air Temperature {C}", + ", !- Mode1 Minimum Return Air Temperature {C}", + ", !- Mode1 Maximum Return Air Temperature {C}", "0, !- Mode1 Minimum Return Air Humidity Ratio {kgWater/kgDryAir}", "0.03, !- Mode1 Maximum Return Air Humidity Ratio {kgWater/kgDryAir}", "0, !- Mode1 Minimum Return Air Relative Humidity {percent}", @@ -602,21 +602,30 @@ TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_ValidateFieldsParsing // check that objective function was set or defaulted correctly EXPECT_EQ(hybridUnit1.ObjectiveFunction, HybridEvapCoolingModel::ObjectiveFunctionType::ElectricityUse); EXPECT_EQ(hybridUnit2.ObjectiveFunction, HybridEvapCoolingModel::ObjectiveFunctionType::WaterUse); - // check outdoor air temperature constraints + // check constraints for hybrid unit 1, mode 1 auto &mode1 = hybridUnit1.OperatingModes[1]; EXPECT_EQ(mode1.Minimum_Outdoor_Air_Temperature_Blank, false); EXPECT_EQ(mode1.Minimum_Outdoor_Air_Temperature, -20); EXPECT_EQ(mode1.Maximum_Outdoor_Air_Temperature_Blank, false); EXPECT_EQ(mode1.Maximum_Outdoor_Air_Temperature, 100); - EXPECT_EQ(mode1.MeetsOAEnvConstraints(120, 0.01, 30), false); - EXPECT_EQ(mode1.MeetsOAEnvConstraints(20, 0.01, 30), true); + EXPECT_EQ(mode1.Minimum_Return_Air_Temperature_Blank, false); + EXPECT_EQ(mode1.Minimum_Return_Air_Temperature, -20); + EXPECT_EQ(mode1.Maximum_Return_Air_Temperature_Blank, false); + EXPECT_EQ(mode1.Maximum_Return_Air_Temperature, 100); + EXPECT_EQ(mode1.MeetsConstraints(120, 0.01, 30, 120, 0.01, 30), false); + EXPECT_EQ(mode1.MeetsConstraints(20, 0.01, 30, 20, 0.01, 30), true); + // check constraints for hybrid unit 2, mode 1 mode1 = hybridUnit2.OperatingModes[1]; EXPECT_EQ(mode1.Minimum_Outdoor_Air_Temperature_Blank, true); EXPECT_EQ(mode1.Minimum_Outdoor_Air_Temperature, 0); EXPECT_EQ(mode1.Maximum_Outdoor_Air_Temperature_Blank, true); EXPECT_EQ(mode1.Maximum_Outdoor_Air_Temperature, 0); - EXPECT_EQ(mode1.MeetsOAEnvConstraints(120, 0.01, 30), true); - EXPECT_EQ(mode1.MeetsOAEnvConstraints(20, 0.01, 30), true); + EXPECT_EQ(mode1.Minimum_Return_Air_Temperature_Blank, true); + EXPECT_EQ(mode1.Minimum_Return_Air_Temperature, 0); + EXPECT_EQ(mode1.Maximum_Return_Air_Temperature_Blank, true); + EXPECT_EQ(mode1.Maximum_Return_Air_Temperature, 0); + EXPECT_EQ(mode1.MeetsConstraints(120, 0.01, 30, 120, 0.01, 30), true); + EXPECT_EQ(mode1.MeetsConstraints(20, 0.01, 30, 20, 0.01, 30), true); } TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_ValidateMinimumIdfInput)