diff --git a/src/EnergyPlus/DataHeatBalance.hh b/src/EnergyPlus/DataHeatBalance.hh index 516fd494a27..5e211ba3c8d 100644 --- a/src/EnergyPlus/DataHeatBalance.hh +++ b/src/EnergyPlus/DataHeatBalance.hh @@ -642,21 +642,6 @@ namespace DataHeatBalance { Real64 UserSpecSensFrac; // User specified sensible fraction bool Show55Warning; // show the warning messages about ASHRAE 55-2004 Real64 CO2RateFactor; // Carbon Dioxide Generation Rate [m3/s-W] - // Report variables - Real64 NumOcc; // Number of occupants at current timestep [] - Real64 TemperatureInZone; // Temperature in zone (C) - Real64 RelativeHumidityInZone; // Relative humidity in zone - Real64 RadGainRate; // Radiant heat gain [W] - Real64 ConGainRate; // Convective heat gain [W] - Real64 SenGainRate; // Sensible heat gain [W] - Real64 LatGainRate; // Latent heat gain [W] - Real64 TotGainRate; // Total heat gain [W] - Real64 CO2GainRate; // Carbon Dioxide Gain Rate [m3/s] - Real64 RadGainEnergy; // Radiant heat gain [J] - Real64 ConGainEnergy; // Convective heat gain [J] - Real64 SenGainEnergy; // Sensible heat gain [J] - Real64 LatGainEnergy; // Latent heat gain [J] - Real64 TotGainEnergy; // Total heat gain [J] // Air velocity check during run time for thermal comfort control int AirVelErrIndex; // Air velocity error index // For AdaptiveComfort tabular report @@ -673,9 +658,7 @@ namespace DataHeatBalance { ClothingMethodPtr(-1), ClothingType(-1), AirVelocityPtr(-1), AnkleAirVelocityPtr(-1), Fanger(false), Pierce(false), KSU(false), AdaptiveASH55(false), AdaptiveCEN15251(false), CoolingEffectASH55(false), AnkleDraftASH55(false), MRTCalcType(DataHeatBalance::CalcMRT::Unassigned), SurfacePtr(-1), AngleFactorListPtr(-1), UserSpecSensFrac(0.0), Show55Warning(false), - CO2RateFactor(0.0), NumOcc(0.0), TemperatureInZone(0.0), RelativeHumidityInZone(0.0), RadGainRate(0.0), ConGainRate(0.0), - SenGainRate(0.0), LatGainRate(0.0), TotGainRate(0.0), CO2GainRate(0.0), RadGainEnergy(0.0), ConGainEnergy(0.0), SenGainEnergy(0.0), - LatGainEnergy(0.0), TotGainEnergy(0.0), AirVelErrIndex(0), TimeNotMetASH5580(0.0), TimeNotMetASH5590(0.0), TimeNotMetCEN15251CatI(0.0), + CO2RateFactor(0.0), AirVelErrIndex(0), TimeNotMetASH5580(0.0), TimeNotMetASH5590(0.0), TimeNotMetCEN15251CatI(0.0), TimeNotMetCEN15251CatII(0.0), TimeNotMetCEN15251CatIII(0.0) { } @@ -2328,6 +2311,22 @@ struct HeatBalanceData : BaseGlobalStruct bool MundtFirstTimeFlag = true; EPVector spaceTypes; + // People Report variables + EPVector PeopleRepNumOcc; // Number of occupants at current timestep [] + EPVector PeopleRepTemperatureInZone; // Temperature in zone (C) + EPVector PeopleRepRelativeHumidityInZone; // Relative humidity in zone + EPVector PeopleRepRadGainRate; // Radiant heat gain [W] + EPVector PeopleRepConGainRate; // Convective heat gain [W] + EPVector PeopleRepSenGainRate; // Sensible heat gain [W] + EPVector PeopleRepLatGainRate; // Latent heat gain [W] + EPVector PeopleRepTotGainRate; // Total heat gain [W] + EPVector PeopleRepCO2GainRate; // Carbon Dioxide Gain Rate [m3/s] + EPVector PeopleRepRadGainEnergy; // Radiant heat gain [J] + EPVector PeopleRepConGainEnergy; // Convective heat gain [J] + EPVector PeopleRepSenGainEnergy; // Sensible heat gain [J] + EPVector PeopleRepLatGainEnergy; // Latent heat gain [J] + EPVector PeopleRepTotGainEnergy; // Total heat gain [J] + void clear_state() override { this->MaxSolidWinLayers = 0; @@ -2605,6 +2604,21 @@ struct HeatBalanceData : BaseGlobalStruct this->ZoneLocalEnvironment.deallocate(); this->MundtFirstTimeFlag = true; this->spaceTypes.deallocate(); + + this->PeopleRepNumOcc.deallocate(); + this->PeopleRepTemperatureInZone.deallocate(); + this->PeopleRepRelativeHumidityInZone.deallocate(); + this->PeopleRepRadGainRate.deallocate(); + this->PeopleRepConGainRate.deallocate(); + this->PeopleRepSenGainRate.deallocate(); + this->PeopleRepLatGainRate.deallocate(); + this->PeopleRepTotGainRate.deallocate(); + this->PeopleRepCO2GainRate.deallocate(); + this->PeopleRepRadGainEnergy.deallocate(); + this->PeopleRepConGainEnergy.deallocate(); + this->PeopleRepSenGainEnergy.deallocate(); + this->PeopleRepLatGainEnergy.deallocate(); + this->PeopleRepTotGainEnergy.deallocate(); } }; diff --git a/src/EnergyPlus/InternalHeatGains.cc b/src/EnergyPlus/InternalHeatGains.cc index 69fa7e7c01b..ff1512f80c5 100644 --- a/src/EnergyPlus/InternalHeatGains.cc +++ b/src/EnergyPlus/InternalHeatGains.cc @@ -288,6 +288,20 @@ namespace InternalHeatGains { if (state.dataHeatBal->TotPeople > 0) { state.dataHeatBal->People.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepNumOcc.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepTemperatureInZone.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepRelativeHumidityInZone.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepRadGainRate.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepConGainRate.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepSenGainRate.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepLatGainRate.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepTotGainRate.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepCO2GainRate.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepRadGainEnergy.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepConGainEnergy.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepSenGainEnergy.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepLatGainEnergy.allocate(state.dataHeatBal->TotPeople); + state.dataHeatBal->PeopleRepTotGainEnergy.allocate(state.dataHeatBal->TotPeople); int peopleNum = 0; for (int peopleInputNum = 1; peopleInputNum <= state.dataHeatBal->NumPeopleStatements; ++peopleInputNum) { state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -981,12 +995,12 @@ namespace InternalHeatGains { "People", state.dataHeatBal->People(peopleNum).Name, IntGainTypeOf_People, - &state.dataHeatBal->People(peopleNum).ConGainRate, + &state.dataHeatBal->PeopleRepConGainRate(peopleNum), nullptr, - &state.dataHeatBal->People(peopleNum).RadGainRate, - &state.dataHeatBal->People(peopleNum).LatGainRate, + &state.dataHeatBal->PeopleRepRadGainRate(peopleNum), + &state.dataHeatBal->PeopleRepLatGainRate(peopleNum), nullptr, - &state.dataHeatBal->People(peopleNum).CO2GainRate); + &state.dataHeatBal->PeopleRepCO2GainRate(peopleNum)); } } @@ -4078,91 +4092,91 @@ namespace InternalHeatGains { SetupOutputVariable(state, "People Occupant Count", OutputProcessor::Unit::None, - state.dataHeatBal->People(peopleNum).NumOcc, + state.dataHeatBal->PeopleRepNumOcc(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Radiant Heating Energy", OutputProcessor::Unit::J, - state.dataHeatBal->People(peopleNum).RadGainEnergy, + state.dataHeatBal->PeopleRepRadGainEnergy(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Summed, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Radiant Heating Rate", OutputProcessor::Unit::W, - state.dataHeatBal->People(peopleNum).RadGainRate, + state.dataHeatBal->PeopleRepRadGainRate(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Convective Heating Energy", OutputProcessor::Unit::J, - state.dataHeatBal->People(peopleNum).ConGainEnergy, + state.dataHeatBal->PeopleRepConGainEnergy(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Summed, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Convective Heating Rate", OutputProcessor::Unit::W, - state.dataHeatBal->People(peopleNum).ConGainRate, + state.dataHeatBal->PeopleRepConGainRate(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Sensible Heating Energy", OutputProcessor::Unit::J, - state.dataHeatBal->People(peopleNum).SenGainEnergy, + state.dataHeatBal->PeopleRepSenGainEnergy(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Summed, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Sensible Heating Rate", OutputProcessor::Unit::W, - state.dataHeatBal->People(peopleNum).SenGainRate, + state.dataHeatBal->PeopleRepSenGainRate(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Latent Gain Energy", OutputProcessor::Unit::J, - state.dataHeatBal->People(peopleNum).LatGainEnergy, + state.dataHeatBal->PeopleRepLatGainEnergy(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Summed, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Latent Gain Rate", OutputProcessor::Unit::W, - state.dataHeatBal->People(peopleNum).LatGainRate, + state.dataHeatBal->PeopleRepLatGainRate(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Total Heating Energy", OutputProcessor::Unit::J, - state.dataHeatBal->People(peopleNum).TotGainEnergy, + state.dataHeatBal->PeopleRepTotGainEnergy(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Summed, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Total Heating Rate", OutputProcessor::Unit::W, - state.dataHeatBal->People(peopleNum).TotGainRate, + state.dataHeatBal->PeopleRepTotGainRate(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Air Temperature", OutputProcessor::Unit::C, - state.dataHeatBal->People(peopleNum).TemperatureInZone, + state.dataHeatBal->PeopleRepTemperatureInZone(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); SetupOutputVariable(state, "People Air Relative Humidity", OutputProcessor::Unit::Perc, - state.dataHeatBal->People(peopleNum).RelativeHumidityInZone, + state.dataHeatBal->PeopleRepRelativeHumidityInZone(peopleNum), OutputProcessor::SOVTimeStepType::Zone, OutputProcessor::SOVStoreType::Average, state.dataHeatBal->People(peopleNum).Name); @@ -7171,28 +7185,28 @@ namespace InternalHeatGains { state.dataHeatBal->ZonePreDefRep(NZ).isOccupied = false; // set flag to occupied to be used in tabular reporting for ventilation } - state.dataHeatBal->People(Loop).NumOcc = NumberOccupants; - state.dataHeatBal->People(Loop).RadGainRate = SensiblePeopleGain * state.dataHeatBal->People(Loop).FractionRadiant; - state.dataHeatBal->People(Loop).ConGainRate = SensiblePeopleGain * state.dataHeatBal->People(Loop).FractionConvected; - state.dataHeatBal->People(Loop).SenGainRate = SensiblePeopleGain; - state.dataHeatBal->People(Loop).LatGainRate = TotalPeopleGain - SensiblePeopleGain; - state.dataHeatBal->People(Loop).TotGainRate = TotalPeopleGain; - state.dataHeatBal->People(Loop).CO2GainRate = TotalPeopleGain * state.dataHeatBal->People(Loop).CO2RateFactor; - - state.dataHeatBal->ZoneIntGain(NZ).NOFOCC += state.dataHeatBal->People(Loop).NumOcc; - state.dataHeatBal->ZoneIntGain(NZ).QOCRAD += state.dataHeatBal->People(Loop).RadGainRate; - state.dataHeatBal->ZoneIntGain(NZ).QOCCON += state.dataHeatBal->People(Loop).ConGainRate; - state.dataHeatBal->ZoneIntGain(NZ).QOCSEN += state.dataHeatBal->People(Loop).SenGainRate; - state.dataHeatBal->ZoneIntGain(NZ).QOCLAT += state.dataHeatBal->People(Loop).LatGainRate; - state.dataHeatBal->ZoneIntGain(NZ).QOCTOT += state.dataHeatBal->People(Loop).TotGainRate; - - int spaceNum = state.dataHeatBal->People(Loop).spaceIndex; - state.dataHeatBal->spaceIntGain(spaceNum).NOFOCC += state.dataHeatBal->People(Loop).NumOcc; - state.dataHeatBal->spaceIntGain(spaceNum).QOCRAD += state.dataHeatBal->People(Loop).RadGainRate; - state.dataHeatBal->spaceIntGain(spaceNum).QOCCON += state.dataHeatBal->People(Loop).ConGainRate; - state.dataHeatBal->spaceIntGain(spaceNum).QOCSEN += state.dataHeatBal->People(Loop).SenGainRate; - state.dataHeatBal->spaceIntGain(spaceNum).QOCLAT += state.dataHeatBal->People(Loop).LatGainRate; - state.dataHeatBal->spaceIntGain(spaceNum).QOCTOT += state.dataHeatBal->People(Loop).TotGainRate; + state.dataHeatBal->PeopleRepNumOcc(Loop) = NumberOccupants; + state.dataHeatBal->PeopleRepRadGainRate(Loop) = SensiblePeopleGain * state.dataHeatBal->People(Loop).FractionRadiant; + state.dataHeatBal->PeopleRepConGainRate(Loop) = SensiblePeopleGain * state.dataHeatBal->People(Loop).FractionConvected; + state.dataHeatBal->PeopleRepSenGainRate(Loop) = SensiblePeopleGain; + state.dataHeatBal->PeopleRepLatGainRate(Loop) = TotalPeopleGain - SensiblePeopleGain; + state.dataHeatBal->PeopleRepTotGainRate(Loop) = TotalPeopleGain; + state.dataHeatBal->PeopleRepCO2GainRate(Loop) = TotalPeopleGain * state.dataHeatBal->People(Loop).CO2RateFactor; + + state.dataHeatBal->ZoneIntGain(NZ).NOFOCC += state.dataHeatBal->PeopleRepNumOcc(Loop); + state.dataHeatBal->ZoneIntGain(NZ).QOCRAD += state.dataHeatBal->PeopleRepRadGainRate(Loop); + state.dataHeatBal->ZoneIntGain(NZ).QOCCON += state.dataHeatBal->PeopleRepConGainRate(Loop); + state.dataHeatBal->ZoneIntGain(NZ).QOCSEN += state.dataHeatBal->PeopleRepSenGainRate(Loop); + state.dataHeatBal->ZoneIntGain(NZ).QOCLAT += state.dataHeatBal->PeopleRepLatGainRate(Loop); + state.dataHeatBal->ZoneIntGain(NZ).QOCTOT += state.dataHeatBal->PeopleRepTotGainRate(Loop); + + int const spaceNum = state.dataHeatBal->People(Loop).spaceIndex; + state.dataHeatBal->spaceIntGain(spaceNum).NOFOCC += state.dataHeatBal->PeopleRepNumOcc(Loop); + state.dataHeatBal->spaceIntGain(spaceNum).QOCRAD += state.dataHeatBal->PeopleRepRadGainRate(Loop); + state.dataHeatBal->spaceIntGain(spaceNum).QOCCON += state.dataHeatBal->PeopleRepConGainRate(Loop); + state.dataHeatBal->spaceIntGain(spaceNum).QOCSEN += state.dataHeatBal->PeopleRepSenGainRate(Loop); + state.dataHeatBal->spaceIntGain(spaceNum).QOCLAT += state.dataHeatBal->PeopleRepLatGainRate(Loop); + state.dataHeatBal->spaceIntGain(spaceNum).QOCTOT += state.dataHeatBal->PeopleRepTotGainRate(Loop); } for (int Loop = 1; Loop <= state.dataHeatBal->TotLights; ++Loop) { @@ -8067,15 +8081,27 @@ namespace InternalHeatGains { IntGainTypeOf_SteamEquipment, IntGainTypeOf_OtherEquipment}); - for (Loop = 1; Loop <= state.dataHeatBal->TotPeople; ++Loop) { - state.dataHeatBal->People(Loop).RadGainEnergy = state.dataHeatBal->People(Loop).RadGainRate * state.dataGlobal->TimeStepZoneSec; - state.dataHeatBal->People(Loop).ConGainEnergy = state.dataHeatBal->People(Loop).ConGainRate * state.dataGlobal->TimeStepZoneSec; - state.dataHeatBal->People(Loop).SenGainEnergy = state.dataHeatBal->People(Loop).SenGainRate * state.dataGlobal->TimeStepZoneSec; - state.dataHeatBal->People(Loop).LatGainEnergy = state.dataHeatBal->People(Loop).LatGainRate * state.dataGlobal->TimeStepZoneSec; - state.dataHeatBal->People(Loop).TotGainEnergy = state.dataHeatBal->People(Loop).TotGainRate * state.dataGlobal->TimeStepZoneSec; + Real64 const timeStepZS = state.dataGlobal->TimeStepZoneSec; + int const totPeeps = state.dataHeatBal->TotPeople; + EPVector const radGainRate = state.dataHeatBal->PeopleRepRadGainRate; + EPVector const conGainRate = state.dataHeatBal->PeopleRepConGainRate; + EPVector const senGainRate = state.dataHeatBal->PeopleRepSenGainRate; + EPVector const latGainRate = state.dataHeatBal->PeopleRepLatGainRate; + EPVector const totGainRate = state.dataHeatBal->PeopleRepTotGainRate; + EPVector radGainEnergy = state.dataHeatBal->PeopleRepRadGainEnergy; + EPVector conGainEnergy = state.dataHeatBal->PeopleRepConGainEnergy; + EPVector senGainEnergy = state.dataHeatBal->PeopleRepSenGainEnergy; + EPVector latGainEnergy = state.dataHeatBal->PeopleRepLatGainEnergy; + EPVector totGainEnergy = state.dataHeatBal->PeopleRepTotGainEnergy; + for (int loop2 = 0; loop2 < totPeeps; ++loop2) { + radGainEnergy[loop2] = radGainRate[loop2] * timeStepZS; + conGainEnergy[loop2] = conGainRate[loop2] * timeStepZS; + senGainEnergy[loop2] = senGainRate[loop2] * timeStepZS; + latGainEnergy[loop2] = latGainRate[loop2] * timeStepZS; + totGainEnergy[loop2] = totGainRate[loop2] * timeStepZS; } - for (Loop = 1; Loop <= state.dataHeatBal->TotLights; ++Loop) { + for (int Loop = 1; Loop <= state.dataHeatBal->TotLights; ++Loop) { state.dataHeatBal->Lights(Loop).Consumption = state.dataHeatBal->Lights(Loop).Power * state.dataGlobal->TimeStepZoneSec; state.dataHeatBal->Lights(Loop).RadGainEnergy = state.dataHeatBal->Lights(Loop).RadGainRate * state.dataGlobal->TimeStepZoneSec; state.dataHeatBal->Lights(Loop).VisGainEnergy = state.dataHeatBal->Lights(Loop).VisGainRate * state.dataGlobal->TimeStepZoneSec; diff --git a/src/EnergyPlus/ThermalComfort.cc b/src/EnergyPlus/ThermalComfort.cc index 6b25e28a42c..1263acc6782 100644 --- a/src/EnergyPlus/ThermalComfort.cc +++ b/src/EnergyPlus/ThermalComfort.cc @@ -567,8 +567,8 @@ namespace ThermalComfort { state.dataHeatBalFanSys->ZoneAirHumRatAvgComf(state.dataThermalComforts->ZoneNum), state.dataEnvrn->OutBaroPress); } - state.dataHeatBal->People(state.dataThermalComforts->PeopleNum).TemperatureInZone = state.dataThermalComforts->AirTemp; - state.dataHeatBal->People(state.dataThermalComforts->PeopleNum).RelativeHumidityInZone = state.dataThermalComforts->RelHum * 100.0; + state.dataHeatBal->PeopleRepTemperatureInZone(state.dataThermalComforts->PeopleNum) = state.dataThermalComforts->AirTemp; + state.dataHeatBal->PeopleRepRelativeHumidityInZone(state.dataThermalComforts->PeopleNum) = state.dataThermalComforts->RelHum * 100.0; // Metabolic rate of body (W/m2) state.dataThermalComforts->ActLevel =