Skip to content
Merged
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
25 changes: 20 additions & 5 deletions src/EnergyPlus/HybridEvapCoolingModel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,13 @@ namespace HybridEvapCoolingModel {
BLOCK_HEADER_OFFSET_Number = 6;
}

bool CMode::InitializeOutdoorAirTemperatureConstraints(Real64 min, Real64 max)
bool 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;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

return true; and subsequent error checking are pointless in this file. Out of scope here, but it should be cleaned up.

}
bool CMode::InitializeOutdoorAirHumidityRatioConstraints(Real64 min, Real64 max)
Expand Down Expand Up @@ -399,11 +401,21 @@ namespace HybridEvapCoolingModel {
Array1D<Real64> Numbers,
Array1D_string cNumericFields,
Array1D<bool> lAlphaBlanks,
Array1D<bool> lNumericBlanks,
std::string cCurrentModuleObject)
{
CMode newMode;
bool error = newMode.ParseMode(
state, ModeCounter, &OperatingModes, ScalingFactor, Alphas, cAlphaFields, Numbers, cNumericFields, lAlphaBlanks, cCurrentModuleObject);
bool error = newMode.ParseMode(state,
ModeCounter,
&OperatingModes,
ScalingFactor,
Alphas,
cAlphaFields,
Numbers,
cNumericFields,
lAlphaBlanks,
lNumericBlanks,
cCurrentModuleObject);
ModeCounter++;
return error;
}
Expand All @@ -417,6 +429,7 @@ namespace HybridEvapCoolingModel {
Array1D<Real64> Numbers,
Array1D_string cNumericFields,
Array1D<bool> lAlphaBlanks,
Array1D<bool> lNumericBlanks,
std::string cCurrentModuleObject)
{
// SUBROUTINE INFORMATION:
Expand Down Expand Up @@ -594,7 +607,8 @@ namespace HybridEvapCoolingModel {
}
// N8, \field Mode1 Minimum Outdoor Air Temperature
// N9, \field Mode1 Maximum Outdoor Air Temperature
bool ok = InitializeOutdoorAirTemperatureConstraints(Numbers(inter_Number), Numbers(inter_Number + 1));
bool ok = 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));
Expand Down Expand Up @@ -696,7 +710,8 @@ namespace HybridEvapCoolingModel {
bool OAHRConstraintmet = false;
bool OARHConstraintmet = false;

if (Tosa >= Minimum_Outdoor_Air_Temperature && Tosa <= Maximum_Outdoor_Air_Temperature) {
if ((Minimum_Outdoor_Air_Temperature_Blank || Tosa >= Minimum_Outdoor_Air_Temperature) &&
(Maximum_Outdoor_Air_Temperature_Blank || Tosa <= Maximum_Outdoor_Air_Temperature)) {
OATempConstraintmet = true;
}

Expand Down
6 changes: 5 additions & 1 deletion src/EnergyPlus/HybridEvapCoolingModel.hh
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ namespace HybridEvapCoolingModel {
Real64 Max_OAF;
Real64 Minimum_Outdoor_Air_Temperature;
Real64 Maximum_Outdoor_Air_Temperature;
bool Minimum_Outdoor_Air_Temperature_Blank;
bool Maximum_Outdoor_Air_Temperature_Blank;
Real64 Minimum_Outdoor_Air_Humidity_Ratio;
Real64 Maximum_Outdoor_Air_Humidity_Ratio;
Real64 Minimum_Outdoor_Air_Relative_Humidity;
Expand All @@ -161,12 +163,13 @@ namespace HybridEvapCoolingModel {
Array1D<Real64> Numbers,
Array1D_string cNumericFields,
Array1D<bool> lAlphaBlanks,
Array1D<bool> 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 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);
Expand Down Expand Up @@ -399,6 +402,7 @@ namespace HybridEvapCoolingModel {
Array1D<Real64> Numbers,
Array1D_string cNumericFields,
Array1D<bool> lAlphaBlanks,
Array1D<bool> lNumericBlanks,
std::string cCurrentModuleObject);
void doStep(EnergyPlusData &state,
Real64 RequestedLoad,
Expand Down
3 changes: 2 additions & 1 deletion src/EnergyPlus/HybridUnitaryAirConditioners.cc
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,8 @@ void GetInputZoneHybridUnitaryAirConditioners(EnergyPlusData &state, bool &Error
}

for (int modeIter = 0; modeIter <= Numberofoperatingmodes - 1; ++modeIter) {
ErrorsFound = hybridUnitaryAC.ParseMode(state, Alphas, cAlphaFields, Numbers, cNumericFields, lAlphaBlanks, cCurrentModuleObject);
ErrorsFound = hybridUnitaryAC.ParseMode(
state, Alphas, cAlphaFields, Numbers, cNumericFields, lAlphaBlanks, lNumericBlanks, cCurrentModuleObject);
if (ErrorsFound) {
ShowFatalError(state, EnergyPlus::format("{}: Errors found parsing modes", routineName));
ShowContinueError(state, "... Preceding condition causes termination.");
Expand Down
20 changes: 17 additions & 3 deletions tst/EnergyPlus/unit/UnitaryHybridAirConditioner.unit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -568,8 +568,8 @@ TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_ValidateFieldsParsing
", !- Mode1 System Second Fuel Consumption Lookup Table Name",
", !- Mode1 System Third Fuel Consumption Lookup Table Name",
", !- Mode1 System Water Use Lookup Table Name",
"-20, !- Mode1 Minimum Outside Air Temperature {C}",
"100, !- Mode1 Maximum Outside Air Temperature {C}",
", !- Mode1 Minimum Outside Air Temperature {C}",
", !- Mode1 Maximum Outside Air Temperature {C}",
"0, !- Mode1 Minimum Outside Air Humidity Ratio {kgWater/kgDryAir}",
"0.03, !- Mode1 Maximum Outside Air Humidity Ratio {kgWater/kgDryAir}",
"0, !- Mode1 Minimum Outside Air Relative Humidity {percent}",
Expand All @@ -593,7 +593,6 @@ TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_ValidateFieldsParsing
unsigned long expectedOperatingModesSize = 2;
auto &hybridUnit1 = state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(1);
auto &hybridUnit2 = state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(2);

// check the number of operating modes
EXPECT_EQ(hybridUnit1.OperatingModes.size(), expectedOperatingModesSize);
EXPECT_EQ(hybridUnit2.OperatingModes.size(), expectedOperatingModesSize);
Expand All @@ -603,6 +602,21 @@ 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
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);
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);
}

TEST_F(EnergyPlusFixture, Test_UnitaryHybridAirConditioner_ValidateMinimumIdfInput)
Expand Down
Loading