Skip to content
Open
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
138 changes: 33 additions & 105 deletions src/EnergyPlus/HybridEvapCoolingModel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -117,79 +117,73 @@ 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.
// note If this field is blank, the lower constraint on outside air humidity ratio will be 0.00 kgWater / kgDryAir., default 0.00
// 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.
// note If this field is blank, the lower constraint on outside air relative humidity will be 0.00% (default 0.00), the upper constraint on
// 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.
// note If this field is blank, the lower constraint on outside air humidity ratio will be 0.00 kgWater / kgDryAir., default 0.00
// 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.
// note If this field is blank, the lower constraint on outside air relative humidity will be 0.00% (default 0.00), the upper constraint on
// 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)
{
Expand Down Expand Up @@ -399,23 +393,13 @@ namespace HybridEvapCoolingModel {
Array1D_string Alphas,
Array1D_string cAlphaFields,
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,
lNumericBlanks,
cCurrentModuleObject);
bool error = newMode.ParseMode(
state, ModeCounter, &OperatingModes, ScalingFactor, Alphas, cAlphaFields, Numbers, lAlphaBlanks, lNumericBlanks, cCurrentModuleObject);
ModeCounter++;
return error;
}
Expand All @@ -427,7 +411,6 @@ namespace HybridEvapCoolingModel {
Array1D_string Alphas,
Array1D_string cAlphaFields,
Array1D<Real64> Numbers,
Array1D_string cNumericFields,
Array1D<bool> lAlphaBlanks,
Array1D<bool> lNumericBlanks,
std::string cCurrentModuleObject)
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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;
Expand Down
22 changes: 11 additions & 11 deletions src/EnergyPlus/HybridEvapCoolingModel.hh
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -161,22 +163,21 @@ namespace HybridEvapCoolingModel {
Array1D_string Alphas,
Array1D_string cAlphaFields,
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 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:
};
Expand Down Expand Up @@ -400,7 +401,6 @@ namespace HybridEvapCoolingModel {
Array1D_string Alphas,
Array1D_string cAlphaFields,
Array1D<Real64> Numbers,
Array1D_string cNumericFields,
Array1D<bool> lAlphaBlanks,
Array1D<bool> lNumericBlanks,
std::string cCurrentModuleObject);
Expand Down
Loading
Loading