diff --git a/src/EnergyPlus/DataHeatBalance.hh b/src/EnergyPlus/DataHeatBalance.hh index be984eb2def..afad46866c3 100644 --- a/src/EnergyPlus/DataHeatBalance.hh +++ b/src/EnergyPlus/DataHeatBalance.hh @@ -458,6 +458,7 @@ namespace DataHeatBalance { Real64 Volume = Constant::AutoCalculate; // Volume entered by user [m3] or calculated Real64 ExtGrossWallArea = 0.0; // Exterior Wall Area for Zone (Gross) Real64 ExteriorTotalSurfArea = 0.0; // Total surface area of all exterior surfaces for Zone + Real64 extPerimeter = 0.0; // Total exposed perimeter (sum of width of exterior walls) int SystemZoneNodeNumber = 0; // This is the zone or space node number for the system for a controlled zone Real64 FloorArea = 0.0; // Floor area used for this space Real64 TotOccupants = 0.0; // total design occupancy (sum of NumberOfPeople for the space People objects, not multiplied) diff --git a/src/EnergyPlus/DataZoneEquipment.cc b/src/EnergyPlus/DataZoneEquipment.cc index 869dfd51857..488102e47a3 100644 --- a/src/EnergyPlus/DataZoneEquipment.cc +++ b/src/EnergyPlus/DataZoneEquipment.cc @@ -1867,11 +1867,9 @@ void ZoneEquipmentSplitterMixer::size(EnergyPlusData &state) } break; case DataZoneEquipment::SpaceEquipSizingBasis::PerimeterLength: - ShowFatalError(state, - format("ZoneEquipmentSplitterMixer::size: Space Fraction Method={} not supported for {}={}", - DataZoneEquipment::spaceEquipSizingBasisNamesUC[(int)this->spaceSizingBasis], - BranchNodeConnections::ConnectionObjectTypeNames[(int)this->spaceEquipType], - this->Name)); + for (auto &thisSpace : this->spaces) { + spacesTotal += state.dataHeatBal->space(thisSpace.spaceIndex).extPerimeter; + } break; default: // If method is not set, then return @@ -1890,43 +1888,41 @@ void ZoneEquipmentSplitterMixer::size(EnergyPlusData &state) for (auto &thisSpace : this->spaces) { thisSpace.fraction = spaceFrac; } - return; + } else { + // Calculate space fractions + for (auto &thisSpace : this->spaces) { + if (thisSpace.fraction == DataSizing::AutoSize) { + switch (this->spaceSizingBasis) { + case DataZoneEquipment::SpaceEquipSizingBasis::DesignCoolingLoad: + thisSpace.fraction = state.dataSize->FinalSpaceSizing(thisSpace.spaceIndex).DesCoolLoad / spacesTotal; + break; + case DataZoneEquipment::SpaceEquipSizingBasis::DesignHeatingLoad: + thisSpace.fraction = state.dataSize->FinalSpaceSizing(thisSpace.spaceIndex).DesHeatLoad / spacesTotal; + break; + case DataZoneEquipment::SpaceEquipSizingBasis::FloorArea: + thisSpace.fraction = state.dataHeatBal->space(thisSpace.spaceIndex).FloorArea / spacesTotal; + break; + case DataZoneEquipment::SpaceEquipSizingBasis::Volume: + thisSpace.fraction = state.dataHeatBal->space(thisSpace.spaceIndex).Volume / spacesTotal; + break; + case DataZoneEquipment::SpaceEquipSizingBasis::PerimeterLength: + thisSpace.fraction = state.dataHeatBal->space(thisSpace.spaceIndex).extPerimeter / spacesTotal; + break; + default: + break; + } + } + } } - - // Calculate space fractions + // Report sizing results int spaceCounter = 0; for (auto &thisSpace : this->spaces) { ++spaceCounter; - if (thisSpace.fraction == DataSizing::AutoSize) { - switch (this->spaceSizingBasis) { - case DataZoneEquipment::SpaceEquipSizingBasis::DesignCoolingLoad: - thisSpace.fraction = state.dataSize->FinalSpaceSizing(thisSpace.spaceIndex).DesCoolLoad / spacesTotal; - break; - case DataZoneEquipment::SpaceEquipSizingBasis::DesignHeatingLoad: - thisSpace.fraction = state.dataSize->FinalSpaceSizing(thisSpace.spaceIndex).DesHeatLoad / spacesTotal; - break; - case DataZoneEquipment::SpaceEquipSizingBasis::FloorArea: - thisSpace.fraction = state.dataHeatBal->space(thisSpace.spaceIndex).FloorArea / spacesTotal; - break; - case DataZoneEquipment::SpaceEquipSizingBasis::Volume: - thisSpace.fraction = state.dataHeatBal->space(thisSpace.spaceIndex).Volume / spacesTotal; - break; - case DataZoneEquipment::SpaceEquipSizingBasis::PerimeterLength: - ShowFatalError(state, - format("ZoneEquipmentSplitterMixer::size: Space Fraction Method={} not supported for {}={}", - DataZoneEquipment::spaceEquipSizingBasisNamesUC[(int)this->spaceSizingBasis], - BranchNodeConnections::ConnectionObjectTypeNames[(int)this->spaceEquipType], - this->Name)); - break; - default: - break; - } - BaseSizer::reportSizerOutput(state, - BranchNodeConnections::ConnectionObjectTypeNames[(int)this->spaceEquipType], - this->Name, - format("Space {} Fraction", spaceCounter), - thisSpace.fraction); - } + BaseSizer::reportSizerOutput(state, + BranchNodeConnections::ConnectionObjectTypeNames[(int)this->spaceEquipType], + this->Name, + format("Space {} Fraction", spaceCounter), + thisSpace.fraction); } } diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 5e04b458335..a51d937e5f4 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -423,6 +423,8 @@ namespace SurfaceGeometry { thisZone.ExtGrossWallArea += thisSurface.GrossArea; thisSpace.ExtGrossWallArea += thisSurface.GrossArea; thisZone.ExtGrossWallArea_Multiplied += thisSurface.GrossArea * thisZone.Multiplier * thisZone.ListMultiplier; + thisZone.extPerimeter += thisSurface.Width; + thisSpace.extPerimeter += thisSurface.Width; if (DetailedWWR) { print(state.files.debug, "{},Wall,{:.2R},{:.1R}\n",