Skip to content

Commit

Permalink
Merge pull request #4669 from NREL/4668_People_New_Fields
Browse files Browse the repository at this point in the history
#4668 - Wrap E+ 22.2 new People fields
  • Loading branch information
jmarrec committed Sep 2, 2022
2 parents fc2524f + f7988f1 commit 4e4e161
Show file tree
Hide file tree
Showing 12 changed files with 748 additions and 320 deletions.
107 changes: 82 additions & 25 deletions resources/energyplus/ProposedEnergy+.idd
Original file line number Diff line number Diff line change
Expand Up @@ -11313,9 +11313,7 @@ People,
\memo If a ZoneList, SpaceList, or a Zone comprised of more than one Space is specified
\memo then this definition applies to all applicable spaces, and each instance will
\memo be named with the Space Name plus this Object Name.
\extensible:1
\min-fields 10
\max-fields 27
A1 , \field Name
\required-field
\type alpha
Expand Down Expand Up @@ -11422,33 +11420,92 @@ People,
\object-list ScheduleNames
\note units in the schedule are m/s
\note optional (only required for runs of thermal comfort models: Fanger, Pierce, KSU, CoolingEffectASH55 and AnkleDraftASH55)
A14, \field Ankle Level Air Velocity Schedule Name
A14, \field Thermal Comfort Model 1 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (only needed for people thermal comfort results reporting)
A15, \field Thermal Comfort Model 2 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (second type of thermal comfort model and results reporting)
A16, \field Thermal Comfort Model 3 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (third thermal comfort model and report type)
A17, \field Thermal Comfort Model 4 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (fourth thermal comfort model and report type)
A18, \field Thermal Comfort Model 5 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (fifth thermal comfort model and report type)
A19, \field Thermal Comfort Model 6 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (sixth thermal comfort model and report type)
A20, \field Thermal Comfort Model 7 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (seventh thermal comfort model and report type)
A21, \field Ankle Level Air Velocity Schedule Name
\type object-list
\object-list ScheduleNames
\note units in the schedule are m/s
\note this is the schedule of the air speed at the 0.1 m above the floor
\note optional (only required for runs of thermal comfort models AnkleDraftASH55)
N7 , \field Cold Stress Temperature Threshold
N7, \field Cold Stress Temperature Threshold
\type real
\units C
\note this is the indoor safe temperature threshold for cold stress
\default 15.56
N8 , \field Heat Stress Temperature Threshold
N8; \field Heat Stress Temperature Threshold
\type real
\units C
\note this is the indoor safe temperature threshold for heat stress
\default 30
A15; \field Thermal Comfort Model 1 Type
\type choice
\key Fanger
\key Pierce
\key KSU
\key AdaptiveASH55
\key AdaptiveCEN15251
\key CoolingEffectASH55
\key AnkleDraftASH55
\note optional (only needed for people thermal comfort results reporting)
\begin-extensible

ComfortViewFactorAngles,
\memo Used to specify radiant view factors for thermal comfort calculations.
Expand Down Expand Up @@ -22262,7 +22319,7 @@ Sizing:Zone,
\note Use SupplyAirHumidityRatio to enter the humidity ratio when zone dehumidification
\note is required. The supply air humidity ratio should be less than the zone humidity
\note ratio at the zone thermostat and humidistat set point condition.
\note Use HumidityRatioDifference to enter the difference in humidity ratio from the
\note Use HumidityRatioDifference to enter the difference in humidity ratio from the
\note zone thermostat and humidistat set point condition.
\type choice
\key SupplyAirHumidityRatio
Expand All @@ -22281,7 +22338,7 @@ Sizing:Zone,
\note Zone Latent Cooling Design Supply Air Humidity Ratio Input Method = HumidityRatioDifference.
\note This input is a positive value and defines the difference between the zone humidity
\note ratio at the thermostat and humidistat set point condition and the supply air
\note humidity ratio entering the zone.
\note humidity ratio entering the zone.
\minimum> 0.0
\type real
\default 0.005
Expand All @@ -22290,7 +22347,7 @@ Sizing:Zone,
\note Use SupplyAirHumidityRatio to enter the humidity ratio when zone humidification
\note is required. The supply air humidity ratio should be greater than the zone humidity
\note ratio at the zone thermostat and humidistat set point condition.
\note Use HumidityRatioDifference to enter the difference in humidity ratio from the
\note Use HumidityRatioDifference to enter the difference in humidity ratio from the
\note zone thermostat and humidistat set point condition.
\type choice
\key SupplyAirHumidityRatio
Expand All @@ -22309,7 +22366,7 @@ Sizing:Zone,
\note Heating Design Supply Air Humidity Ratio Input Method = HumidityRatioDifference.
\note This input is a positive value and defines the difference between the zone humidity
\note ratio at the thermostat and humidistat set point condition and the supply air
\note humidity ratio entering the zone.
\note humidity ratio entering the zone.
\minimum 0.0
\type real
\default 0.005
Expand Down Expand Up @@ -28504,13 +28561,13 @@ ZoneHVAC:AirDistributionUnit,
\object-list DesignSpecificationAirTerminalSizingName

ZoneHVAC:ExhaustControl,
\memo Defines a controlled exhaust flow from a zone which finally feeds into
\memo Defines a controlled exhaust flow from a zone which finally feeds into
\memo one of AirLoopHVAC:ZoneMixer's inlets, which are part of an AirLoopHVAC:ExhaustSystem.
A1 , \field Name
\required-field
A2 , \field Availability Schedule Name
\note Availability schedule name for this exhaust system. Schedule value > 0 means it is available.
\note If this field is blank, the exhaust system is always available. If the attached
\note If this field is blank, the exhaust system is always available. If the attached
\note AirLoopHVAC:ExhaustSystem is off, then the flow will be zero.
\type object-list
\object-list ScheduleNames
Expand Down Expand Up @@ -31998,7 +32055,7 @@ Coil:Heating:DX:SingleSpeed,
\note should be between 0.00004027 m3/s and .00006041 m3/s per watt of rated heating capacity
N4 , \field Rated Supply Fan Power Per Volume Flow Rate 2017
\note Enter the supply fan power per air volume flow rate at the rated test conditions.
\note as defined in the 2017 version of ANSI/AHRI Standard 210/240.
\note as defined in the 2017 version of ANSI/AHRI Standard 210/240.
\note The test conditions vary external static pressure based on heating capacity.
\note This value is only used to calculate Heating Seasonal Performance Factor(HSPF).
\note This value is not used for modeling the supply (condenser) fan during simulations.
Expand All @@ -32009,7 +32066,7 @@ Coil:Heating:DX:SingleSpeed,
\default 773.3
N5 , \field Rated Supply Fan Power Per Volume Flow Rate 2023
\note Enter the supply fan power per air volume flow rate at the rated test conditions.
\note as defined in the 2017 version of ANSI/AHRI Standard 210/240.
\note as defined in the 2017 version of ANSI/AHRI Standard 210/240.
\note The test conditions vary external static pressure based on heating capacity.
\note This value is only used to calculate Heating Seasonal Performance Factor(HSPF).
\note This value is not used for modeling the supply (condenser) fan during simulations.
Expand Down Expand Up @@ -33237,7 +33294,7 @@ Coil:Heating:WaterToAirHeatPump:EquationFit,
N7, \field Ratio of Rated Heating Capacity to Rated Cooling Capacity
\note Ratio of rated heating capacity to rated cooling capacity. This
\note input is used to calculate the heating or cooling capacity when autosizing.
\note This input is only used if a companion cooling coil of the same type
\note This input is only used if a companion cooling coil of the same type
\note (Coil:Cooling:WaterToAirHeatPump:EquationFit) is used. This input is only
\note used when a sizing run for the system which uses this object is requested
\note and when the coil capacity is autosized.
Expand Down
18 changes: 17 additions & 1 deletion resources/model/OpenStudio.idd
Original file line number Diff line number Diff line change
Expand Up @@ -6842,10 +6842,26 @@ OS:People,
\note optional (only required for thermal comfort runs)
\type object-list
\object-list ScheduleNames
N1; \field Multiplier
N1, \field Multiplier
\type real
\minimum 0.0
\default 1.0
A11, \field Ankle Level Air Velocity Schedule Name
\type object-list
\object-list ScheduleNames
\note units in the schedule are m/s
\note this is the schedule of the air speed at the 0.1 m above the floor
\note optional (only required for runs of thermal comfort models AnkleDraftASH55)
N2, \field Cold Stress Temperature Threshold
\type real
\units C
\note this is the indoor safe temperature threshold for cold stress
\default 15.56
N3; \field Heat Stress Temperature Threshold
\type real
\units C
\note this is the indoor safe temperature threshold for heat stress
\default 30

OS:Lights,
\min-fields 1
Expand Down
26 changes: 24 additions & 2 deletions src/energyplus/ForwardTranslator/ForwardTranslatePeople.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,13 +150,35 @@ namespace energyplus {
}
}

for (int i = 0, n = definition.numThermalComfortModelTypes(); i < n; ++i) {
// As of 22.2.0, this is no longer possible to make this an extensible field
// because E+ added 3 regular fields at the end (eg: Ankle Level Velocity Schedule Name)
for (int i = 0, numComfortModelTypes = 0; i < definition.numThermalComfortModelTypes(); ++i) {
OptionalString s = definition.getThermalComfortModelType(i);
if (s) {
idfObject.pushExtensibleGroup(StringVector(1U, *s));
++numComfortModelTypes;
if (numComfortModelTypes > 7) {
LOG(Warn, "For " << definition.briefDescription() << ", only 7 Thermal Confort Model Types are supported by EnergyPlus, number "
<< numComfortModelTypes << " [=" << *s << "] will be ignored.");
} else {
idfObject.setString(PeopleFields::ThermalComfortModel1Type + i, *s);
}
}
}

if (boost::optional<Schedule> schedule_ = modelObject.ankleLevelAirVelocitySchedule()) {
if (auto idf_schedule_ = translateAndMapModelObject(schedule_.get())) {
idfObject.setString(PeopleFields::AnkleLevelAirVelocityScheduleName, idf_schedule_->nameString());
}
}

if (!modelObject.isColdStressTemperatureThresholdDefaulted()) {
idfObject.setDouble(PeopleFields::ColdStressTemperatureThreshold, modelObject.coldStressTemperatureThreshold());
}

if (!modelObject.isHeatStressTemperatureThresholdDefaulted()) {
idfObject.setDouble(PeopleFields::HeatStressTemperatureThreshold, modelObject.heatStressTemperatureThreshold());
}

return idfObject;
}

Expand Down
35 changes: 30 additions & 5 deletions src/energyplus/ReverseTranslator/ReverseTranslatePeople.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ namespace energyplus {
LOG(Error, "SurfaceName_AngleFactorListName not currently imported");
}

for (unsigned i = 0, n = workspaceObject.numExtensibleGroups(); i < n; ++i) {
IdfExtensibleGroup eg = workspaceObject.getExtensibleGroup(i);
OS_ASSERT(!eg.empty());
s = eg.getString(openstudio::PeopleExtensibleFields::ThermalComfortModelType);
// As of 22.2.0, this is no longer possible to make this an extensible field
// because E+ added 3 regular fields at the end (eg: Ankle Level Velocity Schedule Name)
for (unsigned i = PeopleFields::ThermalComfortModel1Type, k = 0; i <= PeopleFields::ThermalComfortModel7Type; ++i) {
s = workspaceObject.getString(i, false, true);
if (s) {
definition.setThermalComfortModelType(i, *s);
definition.setThermalComfortModelType(k++, *s);
}
}

Expand Down Expand Up @@ -235,6 +235,31 @@ namespace energyplus {
}
}

target = workspaceObject.getTarget(openstudio::PeopleFields::AnkleLevelAirVelocityScheduleName);
if (target) {
OptionalModelObject modelObject = translateAndMapWorkspaceObject(*target);
if (modelObject) {
if (OptionalSchedule intermediate = modelObject->optionalCast<Schedule>()) {
Schedule schedule(*intermediate);
bool ok = people.setAnkleLevelAirVelocitySchedule(schedule);
if (!ok) {
LOG(Error, "Unable to set " << people.briefDescription() << "'s Ankle Level Air Velocity schedule to " << schedule.briefDescription()
<< ", likely because of a ScheduleTypeLimits conflict.");
}
}
}
}

d = workspaceObject.getDouble(openstudio::PeopleFields::ColdStressTemperatureThreshold);
if (d) {
people.setColdStressTemperatureThreshold(*d);
}

d = workspaceObject.getDouble(openstudio::PeopleFields::HeatStressTemperatureThreshold);
if (d) {
people.setHeatStressTemperatureThreshold(*d);
}

return people;
}

Expand Down

0 comments on commit 4e4e161

Please sign in to comment.