diff --git a/doc/engineering-reference/CMakeLists.txt b/doc/engineering-reference/CMakeLists.txt index e5f110b752b..082376d5be7 100644 --- a/doc/engineering-reference/CMakeLists.txt +++ b/doc/engineering-reference/CMakeLists.txt @@ -533,6 +533,7 @@ set(INCLUDED_IMAGES ${PROJECT_SOURCE_DIR}/engineering-reference/media/IdealLoadsSchematic.png ${PROJECT_SOURCE_DIR}/engineering-reference/media/humidex_chart.jpg ${PROJECT_SOURCE_DIR}/engineering-reference/media/heat_index_chart.png - ${PROJECT_SOURCE_DIR}/engineering-reference/media/heatemission.png) + ${PROJECT_SOURCE_DIR}/engineering-reference/media/heatemission.png + ${PROJECT_SOURCE_DIR}/engineering-reference/media/ankle_draft.png) create_doc_target("engineering-reference" "EngineeringReference") diff --git a/doc/engineering-reference/media/ankle_draft.png b/doc/engineering-reference/media/ankle_draft.png new file mode 100644 index 00000000000..9589f244d03 Binary files /dev/null and b/doc/engineering-reference/media/ankle_draft.png differ diff --git a/doc/engineering-reference/src/simulation-models-encyclopedic-reference-005/occupant-thermal-comfort.tex b/doc/engineering-reference/src/simulation-models-encyclopedic-reference-005/occupant-thermal-comfort.tex index 20db1fce248..db458d7d4b4 100644 --- a/doc/engineering-reference/src/simulation-models-encyclopedic-reference-005/occupant-thermal-comfort.tex +++ b/doc/engineering-reference/src/simulation-models-encyclopedic-reference-005/occupant-thermal-comfort.tex @@ -1165,11 +1165,11 @@ \subsubsection{Description of the model and algorithm}\label{description-of-the- \subsection{ASHRAE 55 Elevated Air Speed Cooling Effect Model}\label{elevated-air-speed-ce-model} -ASHRAE Standard 55-2017 Section 5.3 requires that the Elevated Air Speed Comfort Zone Method be used when average air speed Va is greater than 0.10 m/s. The method provides cooling credit for elevated air velocity in the space. The method can be used to evaluate passive cooling technologies such as natural ventilation, ceiling fan, and portable fan. +ASHRAE Standard 55-2017 Section 5.3 requires that the Elevated Air Speed Comfort Zone Method be used when average air speed \(v_{a}\) is greater than 0.10 m/s. The method provides cooling credit for elevated air velocity in the space. The method can be used to evaluate passive cooling technologies such as natural ventilation, ceiling fan, and portable fan. \subsubsection{Description of the model and algorithm}\label{description-of-the-model-and-algorithm-4} -The Pierce Two-Node Standard Effective Temperature (SET) model is used to account for the cooling effect of air speeds greater than the 0.10 m/s. Specifically, for a given set of environmental and personal variables, including an elevated average air speed, an average air temperature \(t_{a}\), and a mean radiant temperature \(t_{r}\), the SET is first calculated. Then the average air speed Va is replaced by still air (0.1 m/s), and the average air temperature and radiant temperature are adjusted according to the cooling effect (CE). The CE of the elevated air speed is the value that, when subtracted equally from both the average air temperature and the mean radiant temperature, yields the same SET under still air as in the first SET calculation under elevated air speed. +The Pierce Two-Node Standard Effective Temperature (SET) model is used to account for the cooling effect of air speeds greater than the 0.10 m/s. Specifically, for a given set of environmental and personal variables, including an elevated average air speed, an average air temperature \(t_{a}\), and a mean radiant temperature \(t_{r}\), the SET is first calculated. Then the average air speed \(v_{a}\) is replaced by still air (0.1 m/s), and the average air temperature and radiant temperature are adjusted according to the cooling effect (CE). The CE of the elevated air speed is the value that, when subtracted equally from both the average air temperature and the mean radiant temperature, yields the same SET under still air as in the first SET calculation under elevated air speed. The following is a formal description of this process. To define the CE, we assert that it satisfies the following: @@ -1215,7 +1215,15 @@ \subsubsection{Description of the model and algorithm}\label{description-of-the- Where \(v_{r}\) is the relative air velocity caused by body movement, and \(v_{ankle}\) is the air speed at 0.1 m above the floor. -This equation is only applicable for \(v_{r} < 0.2 m/s\) . And the subject’s metabolic rate and clothing level should be kept below 1.3 met and 0.7 clo, respectively. Warnings would be thrown if these conditions are not met. +This equation is only applicable for \(v_{r} < 0.2 m/s\) . And the subject’s metabolic rate and clothing level should be kept below 1.3 met and 0.7 clo, respectively. PPD at ankle draft will be set to -1.0 if if these conditions are not met. + +It should be noted that the metrics only measures the predicted percentage dissatisfied on the sensation of draft. \(PPD_{AD}\) levels at various air speeds and thermal sensations are depicted in Figure~\ref{fig:ankle-draft-ppd} + +\begin{figure}[hbtp] +\centering +\includegraphics[width=0.9\textwidth, height=0.9\textheight, keepaspectratio=true]{media/ankle_draft.png} +\caption{Ankle Draft PPD Levels \protect \label{fig:ankle-draft-ppd}} +\end{figure} \subsection{References}\label{references-1-012} @@ -1256,3 +1264,5 @@ \subsection{References}\label{references-1-012} Int-Hout, D. 1990. ``Thermal Comfort Calculation / A Computer Model'', ASHRAE Trans., Vol.96, Pt 1. ISO. 1983. ``Determination of the PMV and PPD Indices and Specification of the Conditions for Thermal Comfort'', DIS 7730, Moderate Thermal Environment, 1983. + +Liu S., Schiavon S., Kabanshi A., Nazaroff W.W. 2017. \"Predicted percentage dissatisfied with ankle draft\", Indoor Air, Vol.27. diff --git a/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex b/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex index 802fc3f7653..bc8021db28d 100644 --- a/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex +++ b/doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex @@ -199,7 +199,35 @@ \subsubsection{Inputs}\label{inputs-025} \paragraph{Field: Thermal Comfort Model Type (up to 7 allowed)}\label{field-thermal-comfort-model-type-up-to-7-allowed} -The final one to five fields are optional and are intended to trigger various thermal comfort models within EnergyPlus. By entering the keywords Fanger, Pierce, KSU, AdaptiveASH55, AdaptiveCEN15251, CoolingEffectASH55, and AnkleDraftASH55, the user can request the Fanger, Pierce Two-Node, Kansas State UniversityTwo-Node, the adaptive comfort models of the ASHRAE Standard 55 and CEN Standard 15251, ASHRAE Standard 55 Elevated Air Cooling Effect model, and ASHRAE Standard 55 Ankle Draft Risk model results for this particular people statement. AdaptiveASH55 is only applicable when the running average outdoor air temperature for the past 7 days is between 10.0 and 33.5C. AdaptiveCEN15251 is only applicable when the running average outdoor air temperature for the past 30 days is between 10.0 and 30.0C. Note that since up to five models may be specified, the user may opt to have EnergyPlus calculate the thermal comfort for people identified with this people statement using all five models if desired. Note that the KSU model is computationally intensive and may noticeably increase the execution time of the simulation. For descriptions of the thermal comfort calculations, see the Engineering Reference document. +The final one to five fields are optional and are intended to trigger various thermal comfort models within EnergyPlus. By entering the keywords Fanger, Pierce, KSU, AdaptiveASH55, AdaptiveCEN15251, CoolingEffectASH55, and AnkleDraftASH55, the user can request the Fanger, Pierce Two-Node, Kansas State UniversityTwo-Node, the adaptive comfort models of the ASHRAE Standard 55 and CEN Standard 15251, ASHRAE Standard 55 Elevated Air Cooling Effect model, and ASHRAE Standard 55 Ankle Draft Risk model results for this particular people statement. Detailed descriptions and requirements of the seven models as listed below. + +\begin{description} + \item[Fanger] + Fanger’s Comfort model is applied to calculate related thermal comfort metrics. Fanger Model PMV, PPD, and Clothing Surface Temperature are calculated and reported as each time step. Apart from existing required fields in People object, extra fields required for this model include Surface Name/Angle Factor List Name, Work Efficiency Schedule Name, Clothing Insulation Schedule Name, and Air Velocity Schedule Name. + + \item[Pierce] + The Pierce Two-Node model is applied to calculate related thermal comfort metrics. Pierce Model Effective Temperature PMV, Standard Effective Temperature PMV, Discomfort Index, Thermal Sensation Index, and Standard Effective Temperature are calculated and reported as each time step.Apart from existing required fields in People object, extra fields required for this model include Surface Name/Angle Factor List Name, Work Efficiency Schedule Name, Clothing Insulation Schedule Name, and Air Velocity Schedule Name. + + \item[KSU] + The KSU Two-Node Model is applied to calculate related thermal comfort metrics. KSU Model Thermal Sensation Vote is calculated and reported as each time step. Note that the KSU model is computationally intensive and may noticeably increase the execution time of the simulation. Apart from existing required fields in People object, extra fields required for this model include Surface Name/Angle Factor List Name, Work Efficiency Schedule Name, Clothing Insulation Schedule Name, and Air Velocity Schedule Name. + + \item[AdaptiveASH55] + Adaptive Comfort Model Based on ASHRAE Standard 55-2010 is applied to calculate related thermal comfort metrics. ASHRAE 55 Adaptive Model 90\% Acceptability Status, 80\% Acceptability Status, Running Average Outdoor Air Temperature, and the Adaptive Model Temperature are calculated and reported as each time step. AdaptiveASH55 is only applicable when the running average outdoor air temperature for the past 7 days is between 10.0 and 33.5C. + + \item[AdaptiveCEN15251] + Adaptive Comfort Model Based on European Standard EN15251-2007 is applied to calculate related thermal comfort metrics. CEN 15251 Adaptive Model Category I/II/II Status, Running Average Outdoor Air Temperature, and the Adaptive Model Temperature are calculated and reported as each time step. AdaptiveCEN15251 is only applicable when the running average outdoor air temperature for the past 30 days is between 10.0 and 30.0C. + + \item[CoolingEffectASH55] + ASHRAE 55-2017 Elevated Air Speed Cooling Effect Model is applied to calculate related thermal comfort metrics. Elevated Air Speed Cooling Effect, Cooling Effect Adjusted PMV, and Cooling Effect Adjusted PPD are calculated and reported as each time step. Apart from existing required fields in People object, extra fields required for this model include Surface Name/Angle Factor List Name, Work Efficiency Schedule Name, Clothing Insulation Schedule Name, and Air Velocity Schedule Name. + + \item[AnkleDraftASH55] + ASHRAE 55-2017 Ankle Draft Risk Model is applied to calculate related thermal comfort metrics. Zone Thermal Comfort ASHRAE 55 Ankle Draft PPD is calculated and reported as each time step. Apart from existing required fields in People object, extra fields required for this model include Surface Name/Angle Factor List Name, Work Efficiency Schedule Name, Clothing Insulation Schedule Name, Air Velocity Schedule Name, and Ankle Level Air Velocity Schedule Name. Ankle draft PPD calculations are only applicable for relative air velocity is below 0.2 m/s, and the subject’s metabolic rate and clothing level should be kept below 1.3 met and 0.7 clo. PPD at ankle draft will be set to -1.0 if if these conditions are not met. + +\end{description} + + For descriptions of the thermal comfort calculations, see the Engineering Reference document. + + Note that since up to seven models may be specified, the user may opt to have EnergyPlus calculate the thermal comfort for people identified with this people statement using all seven models if desired. \paragraph{Field: Ankle Level Air Velocity Schedule Name}\label{field-ankle-level-air-velocity-schedule-name} @@ -560,6 +588,22 @@ \subsubsection{Outputs}\label{outputs-017} This field reports the ideal indoor operative temperature, or comfort temperature, as determined by the CEN-15251 adaptive comfort model. Category I, II, and II limits for indoor operative temperature are defined as no greater than 2, 3, and 4 degrees C from this value respectively. A value of -1 means not applicable (when running average outdoor temp is outside the range of 10.0 to 30.0C). +\paragraph{Zone Thermal Comfort ASHRAE 55 Elevated Air Speed Cooling Effect}\label{zone-thermal-comfort-ashrae55-elevated-air-speed-cooling-effect} + +This field is the calculated Cooling Effect of the elevated air speed in degree celsius. It is the value that, when subtracted equally from both the average air temperature and the mean radiant temperature, yields the same SET under still air as in the first SET calculation under elevated air speed. + +\paragraph{Zone Thermal Comfort ASHRAE 55 Elevated Air Speed Cooling Effect Adjusted PMV}\label{zone-thermal-comfort-ashrae55-elevated-air-speed-cooling-effect-adjusted-pmv} + +This field is the ``predicted mean vote'' (PMV) calculated using the Fanger PMV model, adjusted by the ASHRAE 55 Elevated Air Speed Cooling Effect. The Cooling Effect adjusted PMV for an environment with elevated average air speed is calculated using the adjusted average air temperature, the adjusted radiant temperature, and still air (0.1 m/s). + +\paragraph{Zone Thermal Comfort ASHRAE 55 Elevated Air Speed Cooling Effect Adjusted PPD}\label{zone-thermal-comfort-ashrae55-elevated-air-speed-cooling-effect-adjusted-ppd} + +This field is the ``predicted percentage of dissatisfied'' (PPD) calculated using the Fanger PMV-PPD model, adjusted by the ASHRAE 55 Elevated Air Speed Cooling Effect. The Cooling Effect adjusted PPD for an environment with elevated average air speed is calculated using the adjusted average air temperature, the adjusted radiant temperature, and still air (0.1 m/s). + +\paragraph{Zone Thermal Comfort ASHRAE 55 Ankle Draft PPD}\label{zone-thermal-comfort-ashrae55-ankle-draft-ppd} + +This field is the ``ppredicted percentage of dissatisfied'' (PPD) on draft at ankle level. It is used as the metric to evaluate the ankle draft risk as a function of PMV and air speed at the ankle level (0.1 m). + \subsubsection{Outputs}\label{outputs-1-014} The following output variables are all based on whether the humidity ratio and the operative temperature is within the region shown in ASHRAE Standard 55-2004 in Figure 5.2.1.1. For these outputs the operative temperature is simplified to be the average of the air temperature and the mean radiant temperature. For summer, the 0.5 Clo level is used and, for winter, the 1.0 Clo level is used. The graphs below are based on the following tables which extend the ASHRAE values to zero humidity ratio. diff --git a/src/EnergyPlus/InternalHeatGains.cc b/src/EnergyPlus/InternalHeatGains.cc index 1674acb1b22..a4a3606bb61 100644 --- a/src/EnergyPlus/InternalHeatGains.cc +++ b/src/EnergyPlus/InternalHeatGains.cc @@ -867,7 +867,8 @@ namespace InternalHeatGains { } else if (ModelWithAdditionalInputs) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", blank " + cAlphaFieldNames(9) + - " is required for this item."); + ". " + cAlphaFieldNames(9) + " is required when Thermal Comfort Model Type is one of " + "\"Fanger\", \"Pierce\", \"KSU\", \"CoolingEffectASH55\" or \"AnkleDraftASH55\"" ); ErrorsFound = true; } } @@ -881,7 +882,7 @@ namespace InternalHeatGains { if (People(Loop).ClothingPtr == 0 && ModelWithAdditionalInputs) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", invalid " + - cAlphaFieldNames(12) + " entered=" + AlphaName(12)); + cAlphaFieldNames(12) + " entered=\"" + AlphaName(12) + "\"."); ErrorsFound = true; } } else { // check min/max on schedule @@ -933,7 +934,7 @@ namespace InternalHeatGains { if (People(Loop).ClothingMethodPtr == 0) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", invalid " + - cAlphaFieldNames(11) + " entered=" + AlphaName(11)); + cAlphaFieldNames(11) + " entered=\"" + AlphaName(11) + "\"."); ErrorsFound = true; } } @@ -942,7 +943,7 @@ namespace InternalHeatGains { if (People(Loop).ClothingPtr == 0) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", invalid " + - cAlphaFieldNames(12) + " entered=" + AlphaName(12)); + cAlphaFieldNames(12) + " entered=\"" + AlphaName(12) + "\"."); ErrorsFound = true; } } @@ -963,7 +964,7 @@ namespace InternalHeatGains { if (People(Loop).AirVelocityPtr == 0) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", invalid " + - cAlphaFieldNames(13) + " entered=" + AlphaName(13)); + cAlphaFieldNames(13) + " entered=\"" + AlphaName(13) + "\"."); ErrorsFound = true; } } else { // check min/max on schedule @@ -995,7 +996,8 @@ namespace InternalHeatGains { } else if (ModelWithAdditionalInputs) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", blank " + cAlphaFieldNames(13) + - " is required for this item."); + ". " + cAlphaFieldNames(13) + " is required when Thermal Comfort Model Type is one of " + "\"Fanger\", \"Pierce\", \"KSU\", \"CoolingEffectASH55\" or \"AnkleDraftASH55\""); ErrorsFound = true; } } @@ -1006,14 +1008,15 @@ namespace InternalHeatGains { if (People(Loop).AnkleAirVelocityPtr == 0) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", invalid " + - cAlphaFieldNames(indexAnkleAirVelPtr) + " entered=" + AlphaName(indexAnkleAirVelPtr)); + cAlphaFieldNames(indexAnkleAirVelPtr) + " entered=\"" + AlphaName(indexAnkleAirVelPtr) + "\"."); ErrorsFound = true; } } } else if (People(Loop).AnkleDraftASH55) { if (Item1 == 1) { ShowSevereError(state, RoutineName + CurrentModuleObject + "=\"" + AlphaName(1) + "\", blank " + cAlphaFieldNames(indexAnkleAirVelPtr) + - " is required for this item."); + ". " + cAlphaFieldNames(indexAnkleAirVelPtr) + " is required when Thermal Comfort Model Type is one of " + "\"Fanger\", \"Pierce\", \"KSU\", \"CoolingEffectASH55\" or \"AnkleDraftASH55\""); ErrorsFound = true; } } diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index 6472448b014..a1a2fc1f589 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -6451,7 +6451,7 @@ namespace SolarShading { // Need to check what effect, if any, defining these here has TBmBm = SurfaceWindow(SurfNum).ComplexFen.State(SurfaceWindow(SurfNum).ComplexFen.CurrentState) .WinDirSpecTrans(state.dataGlobal->HourOfDay, state.dataGlobal->TimeStep); - TBmDif = SurfaceWindow(SurfNum) .ComplexFen.State(SurfaceWindow(SurfNum).ComplexFen.CurrentState) + TBmDif = SurfaceWindow(SurfNum).ComplexFen.State(SurfaceWindow(SurfNum).ComplexFen.CurrentState) .WinDirHemiTrans(state.dataGlobal->HourOfDay, state.dataGlobal->TimeStep) - TBmBm; } else if (SurfWinWindowModelType(SurfNum) == WindowEQLModel) { // get ASHWAT fenestration model beam-beam and beam-diffuse properties diff --git a/src/EnergyPlus/ThermalComfort.cc b/src/EnergyPlus/ThermalComfort.cc index e956428625b..45e905ff552 100644 --- a/src/EnergyPlus/ThermalComfort.cc +++ b/src/EnergyPlus/ThermalComfort.cc @@ -795,23 +795,23 @@ namespace ThermalComfort { // Thermal const - Real64 const CloFac(0.25); // Clothing factor determined experimentally (var KCLO) - Real64 const BodyWeight(69.9); // (var BODYWEIGHT) - Real64 const SweatContConst(170.0); // Proportionality constant for sweat control; g/m2.hr (var CSW) - Real64 const DriCoeffVasodilation(120); // driving coefficient for vasodilation (var CDIL) - Real64 const DriCoeffVasoconstriction(0.5); // (var CSTR) - Real64 const MaxSkinBloodFlow(90.0); // Max. value of skin blood flow - Real64 const MinSkinBloodFlow(0.5); // Min. value of skin blood flow - Real64 const RegSweatMax(500); // Max. value of regulatory sweating; w/m2 + constexpr Real64 CloFac(0.25); // Clothing factor determined experimentally (var KCLO) + constexpr Real64 BodyWeight(69.9); // (var BODYWEIGHT) + constexpr Real64 SweatContConst(170.0); // Proportionality constant for sweat control; g/m2.hr (var CSW) + constexpr Real64 DriCoeffVasodilation(120); // driving coefficient for vasodilation (var CDIL) + constexpr Real64 DriCoeffVasoconstriction(0.5); // (var CSTR) + constexpr Real64 MaxSkinBloodFlow(90.0); // Max. value of skin blood flow + constexpr Real64 MinSkinBloodFlow(0.5); // Min. value of skin blood flow + constexpr Real64 RegSweatMax(500); // Max. value of regulatory sweating; w/m2 // Standard condition const // Definition of vascular control signals CoreTempSet, SkinTempSet, and AvgBodyTempSet are the setpoints for core, skin and // average body temperatures corresponding to physiol. neutrality SkinMassRatSet is the ratio of skin mass to total body mass (skin+core) // Typical values for CoreTempSet, SkinTempSet and SkinMassRatSet are 36.8, 33.7 and 0.10 SkinMassRat is the actual skin to total body mass ratio - Real64 const SkinTempSet(33.7); // (var TempSkinNeutral) - Real64 const CoreTempSet(36.8); // (var TempCoreNeutral) - Real64 const SkinBloodFlowSet(6.3); // (var SkinBloodFlowNeutral) - Real64 const SkinMassRatSet(0.1); // (var ALFA) + constexpr Real64 SkinTempSet(33.7); // (var TempSkinNeutral) + constexpr Real64 CoreTempSet(36.8); // (var TempCoreNeutral) + constexpr Real64 SkinBloodFlowSet(6.3); // (var SkinBloodFlowNeutral) + constexpr Real64 SkinMassRatSet(0.1); // (var ALFA) if (AirVel < 0.1) AirVel = 0.1; @@ -1174,12 +1174,10 @@ namespace ThermalComfort { upperBound, ce_root_termination); CoolingEffect = (solverResult.first + solverResult.second) / 2; } catch (const std::exception &e) { + ShowRecurringWarningErrorAtEnd(state, "The cooling effect could not be solved for People=\"" + People(state.dataThermalComforts->PeopleNum).Name + "\"" + + "As a result, no cooling effect will be applied to adjust the PMV and PPD results.", + state.dataThermalComforts->CoolingEffectWarningInd); CoolingEffect = 0; - if (state.dataThermalComforts->FirstTimeCoolingEffectWarning) { - ShowWarningError(state, "The cooling effect could not be solved for People=\"" + People(state.dataThermalComforts->PeopleNum).Name + "\""); - ShowContinueError(state, "As a result, no cooling effect will be applied to adjust the PMV and PPD results."); - state.dataThermalComforts->FirstTimeCoolingEffectWarning = false; - } } if (CoolingEffect > 0) { @@ -1214,11 +1212,27 @@ namespace ThermalComfort { PPD_AD = (std::exp(-2.58 + 3.05 * AnkleAirVel - 1.06 * PMV) / (1 + std::exp(-2.58 + 3.05 * AnkleAirVel - 1.06 * PMV))) * 100.0; } else { - if (state.dataThermalComforts->FirstTimeAnkleDraftWarning) { - ShowWarningError(state, "Ankle draft PPD calculations are only applicable for relative air velocity is below 0.2 m/s,"); - ShowContinueError(state,"and the subject’s metabolic rate and clothing level should be kept below 1.3 met and 0.7 clo."); - ShowContinueError(state,"PPD at ankle draft will be set to -1.0 if if these conditions are not met."); - state.dataThermalComforts->FirstTimeAnkleDraftWarning = false; + if (state.dataGlobal->DisplayExtraWarnings) { + if (RelAirVel >= 0.2) { + ShowRecurringWarningErrorAtEnd(state, + "Relative air velocity is above 0.2 m/s in Ankle draft PPD calculations. PPD at ankle draft will be set to -1.0.", + state.dataThermalComforts->AnkleDraftAirVelWarningInd, RelAirVel, + RelAirVel, _, "[m/s]", "[m/s]"); + } + if (state.dataThermalComforts->ActMet >= 1.3) { + ShowRecurringWarningErrorAtEnd(state, + "Metabolic rate is above 1.3 met in Ankle draft PPD calculations. PPD at ankle draft will be set to -1.0.", + state.dataThermalComforts->AnkleDraftActMetWarningInd, + state.dataThermalComforts->ActMet, state.dataThermalComforts->ActMet, + _, "[m/s]", "[m/s]"); + } + if (state.dataThermalComforts->CloUnit >= 0.7) { + ShowRecurringWarningErrorAtEnd(state, + "Clothing unit is above 0.7 in Ankle draft PPD calculations. PPD at ankle draft will be set to -1.0.", + state.dataThermalComforts->AnkleDraftCloUnitWarningInd, + state.dataThermalComforts->CloUnit, + state.dataThermalComforts->CloUnit, _, "[m/s]", "[m/s]"); + } } } state.dataThermalComforts->ThermalComfortData(state.dataThermalComforts->PeopleNum).AnkleDraftPPDASH55 = PPD_AD; diff --git a/src/EnergyPlus/ThermalComfort.hh b/src/EnergyPlus/ThermalComfort.hh index d331cadea3f..e70965ad6f0 100644 --- a/src/EnergyPlus/ThermalComfort.hh +++ b/src/EnergyPlus/ThermalComfort.hh @@ -264,8 +264,10 @@ struct ThermalComfortsData : BaseGlobalStruct { bool FirstTimeFlag = true; // Flag set to make sure you get input once bool FirstTimeSurfaceWeightedFlag = true; // Flag set to make sure certain calcs related to surface weighted option are only done once - bool FirstTimeCoolingEffectWarning = true; // Flag set to make sure certain warnings related to cooling effect calcs are only done once - bool FirstTimeAnkleDraftWarning = true; // Flag set to make sure certain warnings related to ankle draft calcs are only done once + int CoolingEffectWarningInd = 0; // Counter for ankle draft invalid air velocity warnings. + int AnkleDraftAirVelWarningInd = 0; // Counter for ankle draft invalid air velocity warnings. + int AnkleDraftCloUnitWarningInd = 0; // Counter for ankle draft invalid clothing unit warnings. + int AnkleDraftActMetWarningInd = 0; // Counter for ankle draft invalid activity level warnings. // MODULE PARAMETER DEFINITIONS Real64 const TAbsConv = DataGlobalConstants::KelvinConv; // Converter for absolute temperature