From d15c626434b9b12a5ff2e3b67ac3f1be788216a9 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Mon, 19 Aug 2024 16:24:48 -0500 Subject: [PATCH 01/24] Make calcFloorArea local --- src/EnergyPlus/DataHeatBalance.hh | 2 - src/EnergyPlus/SurfaceGeometry.cc | 58 ++++++++++----------- tst/EnergyPlus/unit/SurfaceGeometry.unit.cc | 14 ----- 3 files changed, 29 insertions(+), 45 deletions(-) diff --git a/src/EnergyPlus/DataHeatBalance.hh b/src/EnergyPlus/DataHeatBalance.hh index 6458c81e7e8..be984eb2def 100644 --- a/src/EnergyPlus/DataHeatBalance.hh +++ b/src/EnergyPlus/DataHeatBalance.hh @@ -472,7 +472,6 @@ namespace DataHeatBalance { int spaceTypeNum = 0; // Points to spaceType for this space EPVector tags; // Optional tags for reporting EPVector surfaces; // Pointers to surfaces in this space - Real64 calcFloorArea = 0.0; // Calculated floor area used for this space bool hasFloor = false; // Has "Floor" surface Real64 fracZoneFloorArea = 0.0; // fraction of total floor area for all spaces in zone Real64 fracZoneVolume = 0.0; // fraction of total volume for all spaces in zone @@ -586,7 +585,6 @@ namespace DataHeatBalance { // 2=Plenum Zone, 11=Solar Wall, 12=Roof Pond Real64 UserEnteredFloorArea = Constant::AutoCalculate; // User input floor area for this zone // Calculated after input - Real64 CalcFloorArea = 0.0; // Calculated floor area excluding air boundary surfaces Real64 geometricFloorArea = 0.0; // Calculated floor area including air boundary surfaces Real64 CeilingArea = 0.0; // Ceiling area excluding air boundary surfaces Real64 geometricCeilingArea = 0.0; // Ceiling area area including air boundary surfaces diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index a6ef8c68d2d..e58426e4bc4 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -2260,31 +2260,28 @@ namespace SurfaceGeometry { Real64 constexpr floorAreaTolerance(0.05); Real64 constexpr floorAreaPercentTolerance(floorAreaTolerance * 100.0); if (!SurfError) { - for (auto &thisZone : state.dataHeatBal->Zone) { - for (int spaceNum : thisZone.spaceIndexes) { - auto &thisSpace = state.dataHeatBal->space(spaceNum); - for (int SurfNum = thisSpace.HTSurfaceFirst; SurfNum <= thisSpace.HTSurfaceLast; ++SurfNum) { - auto &thisSurf = state.dataSurface->Surface(SurfNum); - if (thisSurf.Class == SurfaceClass::Floor) { - thisZone.HasFloor = true; - thisSpace.hasFloor = true; - thisSpace.calcFloorArea += thisSurf.Area; - } - if (thisSurf.Class == SurfaceClass::Roof) { - thisZone.CeilingArea += thisSurf.Area; - thisZone.HasRoof = true; - } - } - } - } ErrCount = 0; for (auto &thisSpace : state.dataHeatBal->space) { + auto &thisZone = state.dataHeatBal->Zone(thisSpace.zoneNum); + Real64 calcFloorArea = 0.0; // Calculated floor area used for this space + for (int SurfNum = thisSpace.HTSurfaceFirst; SurfNum <= thisSpace.HTSurfaceLast; ++SurfNum) { + auto &thisSurf = state.dataSurface->Surface(SurfNum); + if (thisSurf.Class == SurfaceClass::Floor) { + thisZone.HasFloor = true; + thisSpace.hasFloor = true; + calcFloorArea += thisSurf.Area; + } + if (thisSurf.Class == SurfaceClass::Roof) { + thisZone.CeilingArea += thisSurf.Area; + thisZone.HasRoof = true; + } + } if (thisSpace.userEnteredFloorArea != Constant::AutoCalculate) { // Check entered vs calculated if (thisSpace.userEnteredFloorArea > 0.0) { // User entered Space floor area, // produce message if not near calculated - if (thisSpace.calcFloorArea > 0.0) { - Real64 diffp = std::abs(thisSpace.calcFloorArea - thisSpace.userEnteredFloorArea) / thisSpace.userEnteredFloorArea; + if (calcFloorArea > 0.0) { + Real64 diffp = std::abs(calcFloorArea - thisSpace.userEnteredFloorArea) / thisSpace.userEnteredFloorArea; if (diffp > floorAreaTolerance) { ++ErrCount; if (ErrCount == 1 && !state.dataGlobal->DisplayExtraWarnings) { @@ -2308,7 +2305,7 @@ namespace SurfaceGeometry { format("Entered Space Floor Area={:.2R}, Calculated Space Floor Area={:.2R}, entered " "Floor Area will be used.", thisSpace.userEnteredFloorArea, - thisSpace.calcFloorArea)); + calcFloorArea)); } } } @@ -2316,22 +2313,23 @@ namespace SurfaceGeometry { thisSpace.hasFloor = true; } } else { - thisSpace.FloorArea = thisSpace.calcFloorArea; + thisSpace.FloorArea = calcFloorArea; } } ErrCount = 0; for (auto &thisZone : state.dataHeatBal->Zone) { // Calculate zone floor area as sum of space floor areas + Real64 zoneCalcFloorArea = 0.0; // Calculated floor area excluding air boundary surfaces for (int spaceNum : thisZone.spaceIndexes) { - thisZone.CalcFloorArea += state.dataHeatBal->space(spaceNum).FloorArea; + zoneCalcFloorArea += state.dataHeatBal->space(spaceNum).FloorArea; thisZone.HasFloor |= state.dataHeatBal->space(spaceNum).hasFloor; } if (thisZone.UserEnteredFloorArea != Constant::AutoCalculate) { // Check entered vs calculated if (thisZone.UserEnteredFloorArea > 0.0) { // User entered zone floor area, // produce message if not near calculated - if (thisZone.CalcFloorArea > 0.0) { - Real64 diffp = std::abs(thisZone.CalcFloorArea - thisZone.UserEnteredFloorArea) / thisZone.UserEnteredFloorArea; + if (zoneCalcFloorArea > 0.0) { + Real64 diffp = std::abs(zoneCalcFloorArea - thisZone.UserEnteredFloorArea) / thisZone.UserEnteredFloorArea; if (diffp > 0.05) { ++ErrCount; if (ErrCount == 1 && !state.dataGlobal->DisplayExtraWarnings) { @@ -2354,7 +2352,7 @@ namespace SurfaceGeometry { ShowContinueError(state, format("Entered Zone Floor Area={:.2R}, Sum of Space Floor Area(s)={:.2R}", thisZone.UserEnteredFloorArea, - thisZone.CalcFloorArea)); + zoneCalcFloorArea)); ShowContinueError( state, "Entered Zone Floor Area will be used and Space Floor Area(s) will be adjusted proportionately."); } @@ -2368,9 +2366,9 @@ namespace SurfaceGeometry { // If the zone contains only one space, then set the Space area to the Zone area int spaceNum = thisZone.spaceIndexes(1); state.dataHeatBal->space(spaceNum).FloorArea = thisZone.FloorArea; - } else if (thisZone.CalcFloorArea > 0.0) { + } else if (zoneCalcFloorArea > 0.0) { // Adjust space areas proportionately - Real64 areaRatio = thisZone.FloorArea / thisZone.CalcFloorArea; + Real64 areaRatio = thisZone.FloorArea / zoneCalcFloorArea; for (int spaceNum : thisZone.spaceIndexes) { state.dataHeatBal->space(spaceNum).FloorArea *= areaRatio; } @@ -2388,10 +2386,10 @@ namespace SurfaceGeometry { } } } else { - if (thisZone.CalcFloorArea > 0.0) thisZone.FloorArea = thisZone.CalcFloorArea; + if (zoneCalcFloorArea > 0.0) thisZone.FloorArea = zoneCalcFloorArea; } } else { - thisZone.FloorArea = thisZone.CalcFloorArea; + thisZone.FloorArea = zoneCalcFloorArea; } Real64 totSpacesFloorArea = 0.0; for (int spaceNum : thisZone.spaceIndexes) { @@ -2883,6 +2881,8 @@ namespace SurfaceGeometry { } } } + // Right-size space vector + state.dataHeatBal->space.resize(state.dataGlobal->numSpaces); // Assign Spaces to surfaces without one for (int surfNum = 1; surfNum <= state.dataSurface->TotSurfaces; ++surfNum) { diff --git a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc index d4c559ceba2..9319b165334 100644 --- a/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc +++ b/tst/EnergyPlus/unit/SurfaceGeometry.unit.cc @@ -12197,17 +12197,14 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_ZoneAndSpaceAreas) // Space 2 has a floor surface of area 2.0, user-entered floor area is blank EXPECT_EQ(state->dataHeatBal->space(1).Name, "SPACE 1A"); EXPECT_NEAR(state->dataHeatBal->space(1).userEnteredFloorArea, Constant::AutoCalculate, 0.001); - EXPECT_NEAR(state->dataHeatBal->space(1).calcFloorArea, 1.0, 0.001); EXPECT_NEAR(state->dataHeatBal->space(1).FloorArea, 10.0, 0.001); EXPECT_EQ(state->dataHeatBal->space(2).Name, "SPACE 1B"); EXPECT_NEAR(state->dataHeatBal->space(2).userEnteredFloorArea, Constant::AutoCalculate, 0.001); - EXPECT_NEAR(state->dataHeatBal->space(2).calcFloorArea, 2.0, 0.001); EXPECT_NEAR(state->dataHeatBal->space(2).FloorArea, 20.0, 0.001); EXPECT_EQ(state->dataHeatBal->Zone(1).Name, "ZONE 1"); EXPECT_NEAR(state->dataHeatBal->Zone(1).UserEnteredFloorArea, 30.0, 0.001); - EXPECT_NEAR(state->dataHeatBal->Zone(1).CalcFloorArea, 3.0, 0.001); EXPECT_NEAR(state->dataHeatBal->Zone(1).FloorArea, 30.0, 0.001); Real64 zone1Area = state->dataHeatBal->space(1).FloorArea + state->dataHeatBal->space(2).FloorArea; EXPECT_NEAR(state->dataHeatBal->Zone(1).FloorArea, zone1Area, 0.001); @@ -12216,22 +12213,18 @@ TEST_F(EnergyPlusFixture, SurfaceGeometry_ZoneAndSpaceAreas) // Space 3 has a floor surface of area 1.0, user-entered floor is 5.0 EXPECT_EQ(state->dataHeatBal->Zone(3).Name, "ZONE 3"); EXPECT_NEAR(state->dataHeatBal->Zone(3).UserEnteredFloorArea, Constant::AutoCalculate, 0.001); - EXPECT_NEAR(state->dataHeatBal->Zone(3).CalcFloorArea, 5.0, 0.001); EXPECT_NEAR(state->dataHeatBal->Zone(3).FloorArea, 5.0, 0.001); EXPECT_EQ(state->dataHeatBal->space(3).Name, "SPACE 3"); EXPECT_NEAR(state->dataHeatBal->space(3).userEnteredFloorArea, 5.0, 0.001); - EXPECT_NEAR(state->dataHeatBal->space(3).calcFloorArea, 1.0, 0.001); EXPECT_NEAR(state->dataHeatBal->space(3).FloorArea, 5.0, 0.001); // Zone 2 consists of auto-generated Space 4, user-entered floor area is 20.0 // Space 4 has a floor surface of area 1.0, user-entered floor is blank EXPECT_EQ(state->dataHeatBal->Zone(2).Name, "ZONE 2"); EXPECT_NEAR(state->dataHeatBal->Zone(2).UserEnteredFloorArea, 20.0, 0.001); - EXPECT_NEAR(state->dataHeatBal->Zone(2).CalcFloorArea, 1.0, 0.001); EXPECT_NEAR(state->dataHeatBal->Zone(2).FloorArea, 20.0, 0.001); EXPECT_EQ(state->dataHeatBal->space(4).Name, "ZONE 2"); EXPECT_NEAR(state->dataHeatBal->space(4).userEnteredFloorArea, Constant::AutoCalculate, 0.001); - EXPECT_NEAR(state->dataHeatBal->space(4).calcFloorArea, 1.0, 0.001); EXPECT_NEAR(state->dataHeatBal->space(4).FloorArea, 20.0, 0.001); } @@ -12393,7 +12386,6 @@ TEST_F(EnergyPlusFixture, ZoneFloorAreaTest) EXPECT_FALSE(ErrorsFound); // expect no errors EXPECT_NEAR(state->dataHeatBal->Zone(1).FloorArea, 1.0, 0.001); - EXPECT_NEAR(state->dataHeatBal->Zone(1).CalcFloorArea, 1.0, 0.001); } TEST_F(EnergyPlusFixture, SurfaceGeometry_GetSurfaceGroundSurfsTest) @@ -13171,7 +13163,6 @@ TEST_F(EnergyPlusFixture, CalculateZoneVolume_WithAirBoundaries) auto const &zone3 = state->dataHeatBal->Zone(3); EXPECT_EQ(zone1.UserEnteredFloorArea, -99999.0); - EXPECT_EQ(zone1.CalcFloorArea, 0.0); EXPECT_EQ(zone1.FloorArea, 0.0); EXPECT_EQ(zone1.geometricFloorArea, 1.0); EXPECT_FALSE(zone1.HasFloor); @@ -13182,7 +13173,6 @@ TEST_F(EnergyPlusFixture, CalculateZoneVolume_WithAirBoundaries) EXPECT_EQ(zone1.Volume, 2.0); EXPECT_EQ(zone2.UserEnteredFloorArea, -99999.0); - EXPECT_EQ(zone2.CalcFloorArea, 1.0); EXPECT_EQ(zone2.FloorArea, 1.0); EXPECT_EQ(zone2.geometricFloorArea, 1.0); EXPECT_TRUE(zone2.HasFloor); @@ -13193,7 +13183,6 @@ TEST_F(EnergyPlusFixture, CalculateZoneVolume_WithAirBoundaries) EXPECT_EQ(zone2.Volume, 2.0); EXPECT_EQ(zone3.UserEnteredFloorArea, -99999.0); - EXPECT_EQ(zone3.CalcFloorArea, 4.0); EXPECT_EQ(zone3.FloorArea, 4.0); EXPECT_EQ(zone3.geometricFloorArea, 4.0); EXPECT_TRUE(zone3.HasFloor); @@ -13398,7 +13387,6 @@ TEST_F(EnergyPlusFixture, CalculatZoneVolume_WithoutAirBoundaries) auto const &zone3 = state->dataHeatBal->Zone(3); EXPECT_EQ(zone1.UserEnteredFloorArea, -99999.0); - EXPECT_EQ(zone1.CalcFloorArea, 1.0); EXPECT_EQ(zone1.FloorArea, 1.0); EXPECT_EQ(zone1.geometricFloorArea, 1.0); EXPECT_TRUE(zone1.HasFloor); @@ -13409,7 +13397,6 @@ TEST_F(EnergyPlusFixture, CalculatZoneVolume_WithoutAirBoundaries) EXPECT_EQ(zone1.Volume, 2.0); EXPECT_EQ(zone2.UserEnteredFloorArea, -99999.0); - EXPECT_EQ(zone2.CalcFloorArea, 1.0); EXPECT_EQ(zone2.FloorArea, 1.0); EXPECT_EQ(zone2.geometricFloorArea, 1.0); EXPECT_TRUE(zone2.HasFloor); @@ -13420,7 +13407,6 @@ TEST_F(EnergyPlusFixture, CalculatZoneVolume_WithoutAirBoundaries) EXPECT_EQ(zone2.Volume, 2.0); EXPECT_EQ(zone3.UserEnteredFloorArea, -99999.0); - EXPECT_EQ(zone3.CalcFloorArea, 4.0); EXPECT_EQ(zone3.FloorArea, 4.0); EXPECT_EQ(zone3.geometricFloorArea, 4.0); EXPECT_TRUE(zone3.HasFloor); From 54f4e6e7223f35d903ac5e05406d6062426fb845 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Mon, 19 Aug 2024 17:05:11 -0500 Subject: [PATCH 02/24] Consolidate AirflowSpec enums --- src/EnergyPlus/HeatBalanceAirManager.cc | 43 ++++++++----------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/src/EnergyPlus/HeatBalanceAirManager.cc b/src/EnergyPlus/HeatBalanceAirManager.cc index 8467d62d731..6daa9ff9e43 100644 --- a/src/EnergyPlus/HeatBalanceAirManager.cc +++ b/src/EnergyPlus/HeatBalanceAirManager.cc @@ -104,29 +104,16 @@ namespace EnergyPlus::HeatBalanceAirManager { enum class AirflowSpec { Invalid = -1, - Flow, - FlowPerZone, - FlowPerArea, - FlowPerPerson, - AirChanges, - Num -}; -constexpr std::array(AirflowSpec::Num)> airflowNamesUC = { - "FLOW", "FLOW/ZONE", "FLOW/AREA", "FLOW/PERSON", "AIRCHANGES/HOUR"}; - -enum class AirflowSpecAlt -{ - Invalid = -1, - Flow, FlowPerZone, FlowPerArea, FlowPerExteriorArea, FlowPerExteriorWallArea, + FlowPerPerson, AirChanges, Num }; -constexpr std::array(AirflowSpecAlt::Num)> airflowAltNamesUC = { - "FLOW", "FLOW/ZONE", "FLOW/AREA", "FLOW/EXTERIORAREA", "FLOW/EXTERIORWALLAREA", "AIRCHANGES/HOUR"}; +constexpr std::array(AirflowSpec::Num)> airflowSpecNamesUC = { + "FLOW/ZONE", "FLOW/AREA", "FLOW/EXTERIORAREA", "FLOW/EXTERIORWALLAREA", "FLOW/PERSON", "AIRCHANGES/HOUR"}; constexpr std::array(DataHeatBalance::VentilationType::Num)> ventilationTypeNamesUC = { "NATURAL", "INTAKE", "EXHAUST", "BALANCED"}; @@ -536,7 +523,7 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err ErrorsFound = true; } - // Check whether this zone is also controleld by hybrid ventilation object with ventilation control option or not + // Check whether this zone is also controlled by hybrid ventilation object with ventilation control option or not bool ControlFlag = Avail::GetHybridVentilationControlStatus(state, thisZoneAirBalance.ZonePtr); if (ControlFlag && thisZoneAirBalance.BalanceMethod == DataHeatBalance::AirBalance::Quadrature) { thisZoneAirBalance.BalanceMethod = DataHeatBalance::AirBalance::None; @@ -746,10 +733,9 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err // Set space flow fractions // Infiltration equipment design level calculation method. - AirflowSpecAlt flow = static_cast(getEnumValue(airflowAltNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) + AirflowSpec flow = static_cast(getEnumValue(airflowSpecNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) switch (flow) { - case AirflowSpecAlt::Flow: - case AirflowSpecAlt::FlowPerZone: + case AirflowSpec::FlowPerZone: if (lNumericFieldBlanks(1)) { ShowWarningError(state, format("{}{}=\"{}\", {} specifies {}, but that field is blank. 0 Infiltration will result.", @@ -777,7 +763,7 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } break; - case AirflowSpecAlt::FlowPerArea: + case AirflowSpec::FlowPerArea: if (thisInfiltration.ZonePtr != 0) { if (rNumericArgs(2) >= 0.0) { thisInfiltration.DesignLevel = rNumericArgs(2) * thisSpace.FloorArea; @@ -813,7 +799,7 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } break; - case AirflowSpecAlt::FlowPerExteriorArea: + case AirflowSpec::FlowPerExteriorArea: if (thisInfiltration.ZonePtr != 0) { if (rNumericArgs(3) >= 0.0) { thisInfiltration.DesignLevel = rNumericArgs(3) * thisSpace.ExteriorTotalSurfArea; @@ -847,7 +833,7 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } break; - case AirflowSpecAlt::FlowPerExteriorWallArea: + case AirflowSpec::FlowPerExteriorWallArea: if (thisInfiltration.ZonePtr != 0) { if (rNumericArgs(3) >= 0.0) { thisInfiltration.DesignLevel = rNumericArgs(3) * thisSpace.ExtGrossWallArea; @@ -881,7 +867,7 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } break; - case AirflowSpecAlt::AirChanges: + case AirflowSpec::AirChanges: if (thisInfiltration.spaceIndex != 0) { if (rNumericArgs(4) >= 0.0) { thisInfiltration.DesignLevel = rNumericArgs(4) * thisSpace.Volume / Constant::SecInHour; @@ -1398,9 +1384,8 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } // Ventilation equipment design level calculation method - AirflowSpec flow = static_cast(getEnumValue(airflowNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) + AirflowSpec flow = static_cast(getEnumValue(airflowSpecNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) switch (flow) { - case AirflowSpec::Flow: case AirflowSpec::FlowPerZone: thisVentilation.DesignLevel = rNumericArgs(1); if (lNumericFieldBlanks(1)) { @@ -2575,9 +2560,8 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } // Mixing equipment design level calculation method - AirflowSpec flow = static_cast(getEnumValue(airflowNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) + AirflowSpec flow = static_cast(getEnumValue(airflowSpecNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) switch (flow) { - case AirflowSpec::Flow: case AirflowSpec::FlowPerZone: thisMixing.DesignLevel = rNumericArgs(1); if (lNumericFieldBlanks(1)) { @@ -3195,9 +3179,8 @@ void GetSimpleAirModelInputs(EnergyPlusData &state, bool &ErrorsFound) // IF err } // Mixing equipment design level calculation method. - AirflowSpec flow = static_cast(getEnumValue(airflowNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) + AirflowSpec flow = static_cast(getEnumValue(airflowSpecNamesUC, cAlphaArgs(4))); // NOLINT(modernize-use-auto) switch (flow) { - case AirflowSpec::Flow: case AirflowSpec::FlowPerZone: thisMixing.DesignLevel = rNumericArgs(1); if (lNumericFieldBlanks(1)) { From 5ff488ab92e37d38d5f12af86441b34bb511dbed Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Tue, 20 Aug 2024 10:44:53 -0500 Subject: [PATCH 03/24] Fix mixing 10670 --- src/EnergyPlus/ZoneEquipmentManager.cc | 45 +++++++++++++++++++------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index d321e8965c4..9036ef3e8f9 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -5815,11 +5815,17 @@ void CalcAirFlowSimple(EnergyPlusData &state, Real64 HumRatZM = 0.0; // HumRat of From Zone/Space if (state.dataHeatBal->doSpaceHeatBalance) { auto &thisSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisMixing.spaceIndex); - auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisMixing.fromSpaceIndex); TZN = thisSpaceHB.MixingMAT; // Temperature of this Space - TZM = fromSpaceHB.MixingMAT; // Temperature of From Space HumRatZN = thisSpaceHB.MixingHumRat; // HumRat of this Space - HumRatZM = fromSpaceHB.MixingHumRat; // HumRat of From Space + if (thisMixing.fromSpaceIndex == 0) { + auto &fromZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(fromZoneNum); + TZM = fromZoneHB.MixingMAT; // Temperature of From Zone + HumRatZM = fromZoneHB.MixingHumRat; // HumRat of From Zone + } else { + auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisMixing.fromSpaceIndex); + TZM = fromSpaceHB.MixingMAT; // Temperature of From Space + HumRatZM = fromSpaceHB.MixingHumRat; // HumRat of From Space + } } else { auto &fromZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(fromZoneNum); TZN = thisZoneHB.MixingMAT; // Temperature of this zone @@ -6068,11 +6074,16 @@ void CalcAirFlowSimple(EnergyPlusData &state, Real64 HumRatZM = 0.0; // HumRat of From Zone/Space if (state.dataHeatBal->doSpaceHeatBalance) { auto &thisSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisCrossMixing.spaceIndex); - auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisCrossMixing.fromSpaceIndex); TZN = thisSpaceHB.MixingMAT; // Temperature of this Space - TZM = fromSpaceHB.MixingMAT; // Temperature of From Space HumRatZN = thisSpaceHB.MixingHumRat; // HumRat of this Space - HumRatZM = fromSpaceHB.MixingHumRat; // HumRat of From Space + if (thisCrossMixing.fromSpaceIndex == 0) { + TZM = fromZoneHB.MixingMAT; // Temperature of From Zone + HumRatZM = fromZoneHB.MixingHumRat; // HumRat of From Zone + } else { + auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisCrossMixing.fromSpaceIndex); + TZM = fromSpaceHB.MixingMAT; // Temperature of From Space + HumRatZM = fromSpaceHB.MixingHumRat; // HumRat of From Space + } } else { TZN = thisZoneHB.MixingMAT; // Temperature of this zone TZM = fromZoneHB.MixingMAT; // Temperature of From Zone @@ -6225,15 +6236,27 @@ void CalcAirFlowSimple(EnergyPlusData &state, fromZoneHB.MixingMassFlowXHumRat += fromXMixingMassFlowXHumRat; if (state.dataHeatBal->doSpaceHeatBalance) { auto &thisSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisCrossMixing.spaceIndex); - auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisCrossMixing.fromSpaceIndex); thisSpaceHB.MCPM += thisMCPxM; thisSpaceHB.MCPTM += thisMCPTxM; thisSpaceHB.MixingMassFlowZone += thisXMixingMassFlow; thisSpaceHB.MixingMassFlowXHumRat += thisXMixingMassFlowXHumRat; - fromSpaceHB.MCPM += fromMCPxM; - fromSpaceHB.MCPTM += fromMCPTxM; - fromSpaceHB.MixingMassFlowZone += thisXMixingMassFlow; - fromSpaceHB.MixingMassFlowXHumRat += fromXMixingMassFlowXHumRat; + if (thisCrossMixing.fromSpaceIndex > 0) { + auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(thisCrossMixing.fromSpaceIndex); + fromSpaceHB.MCPM += fromMCPxM; + fromSpaceHB.MCPTM += fromMCPTxM; + fromSpaceHB.MixingMassFlowZone += thisXMixingMassFlow; + fromSpaceHB.MixingMassFlowXHumRat += fromXMixingMassFlowXHumRat; + } else { + // Allocate mixing flows by space volume fraction of zone volume + for (int spaceNum : state.dataHeatBal->Zone(fromZoneNum).spaceIndexes) { + Real64 spaceFrac = state.dataHeatBal->space(spaceNum).fracZoneVolume; + auto &fromSpaceHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum); + fromSpaceHB.MCPM += fromMCPxM * spaceFrac; + fromSpaceHB.MCPTM += fromMCPTxM * spaceFrac; + fromSpaceHB.MixingMassFlowZone += thisXMixingMassFlow * spaceFrac; + fromSpaceHB.MixingMassFlowXHumRat += fromXMixingMassFlowXHumRat * spaceFrac; + } + } } } From d385ab5927a9003b265896a30079b0a45a3328cb Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 28 Aug 2024 11:17:06 -0500 Subject: [PATCH 04/24] Detect illformed spaces in unit tests --- src/EnergyPlus/SurfaceGeometry.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index 5de48796892..5e04b458335 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -12339,6 +12339,7 @@ namespace SurfaceGeometry { surfacenotused.dimension(NFaces, 0); for (int SurfNum = thisZone.AllSurfaceFirst; SurfNum <= thisZone.AllSurfaceLast; ++SurfNum) { + assert(SurfNum > 0); auto &thisSurface = state.dataSurface->Surface(SurfNum); // Only include Base Surfaces in Calc. From 189714245caf524ffe04033feda691bd85cc5016 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 28 Aug 2024 11:26:02 -0500 Subject: [PATCH 05/24] Zone Space Sizing Unit Tests --- tst/EnergyPlus/unit/SizingManager.unit.cc | 1397 +++++++++++++++++++++ 1 file changed, 1397 insertions(+) diff --git a/tst/EnergyPlus/unit/SizingManager.unit.cc b/tst/EnergyPlus/unit/SizingManager.unit.cc index 356ac07dfef..6184f627ca2 100644 --- a/tst/EnergyPlus/unit/SizingManager.unit.cc +++ b/tst/EnergyPlus/unit/SizingManager.unit.cc @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -558,3 +559,1399 @@ TEST_F(EnergyPlusFixture, SizingManager_OverrideAvgWindowInSizing) EXPECT_EQ(state->dataGlobal->NumOfTimeStepInHour, 1); EXPECT_EQ(state->dataSize->NumTimeStepsInAvg, 1); } +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " , !- Zone Load Sizing Method", + " , !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " Coincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 1, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " ZONE 1 INLETS, !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ZONE 1 OUTLET; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:IdealLoadsAirSystem, !- Zone Equipment 1 Object Type", + " ZONE 1 Ideal Loads, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:IdealLoadsAirSystem,", + " ZONE 1 Ideal Loads, !- Name", + " , !- Availability Schedule Name", + " ZONE 1 INLETS, !- Zone Supply Air Node Name", + " , !- Zone Exhaust Air Node Name", + " , !- System Inlet Air Node Name", + " 50, !- Maximum Heating Supply Air Temperature {C}", + " 13, !- Minimum Cooling Supply Air Temperature {C}", + " 0.015, !- Maximum Heating Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.009, !- Minimum Cooling Supply Air Humidity Ratio {kgWater/kgDryAir}", + " NoLimit, !- Heating Limit", + " autosize, !- Maximum Heating Air Flow Rate {m3/s}", + " , !- Maximum Sensible Heating Capacity {W}", + " NoLimit, !- Cooling Limit", + " autosize, !- Maximum Cooling Air Flow Rate {m3/s}", + " , !- Maximum Total Cooling Capacity {W}", + " , !- Heating Availability Schedule Name", + " , !- Cooling Availability Schedule Name", + " ConstantSupplyHumidityRatio, !- Dehumidification Control Type", + " , !- Cooling Sensible Heat Ratio {dimensionless}", + " ConstantSupplyHumidityRatio, !- Humidification Control Type", + " , !- Design Specification Outdoor Air Object Name", + " , !- Outdoor Air Inlet Node Name", + " , !- Demand Controlled Ventilation Type", + " , !- Outdoor Air Economizer Type", + " , !- Heat Recovery Type", + " , !- Sensible Heat Recovery Effectiveness {dimensionless}", + " ; !- Latent Heat Recovery Effectiveness {dimensionless}", + + " NodeList,", + " ZONE 1 INLETS, !- Name", + " ZONE 1 INLET; !- Node 1 Name", + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 750.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("832.44", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("940.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("810.65", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("1942.36", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.135", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.135", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) +{ + // Spaces peak on same day + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " , !- Zone Load Sizing Method", + " , !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " NonCoincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 1, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " ZONE 1 INLETS, !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ZONE 1 OUTLET; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:IdealLoadsAirSystem, !- Zone Equipment 1 Object Type", + " ZONE 1 Ideal Loads, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:IdealLoadsAirSystem,", + " ZONE 1 Ideal Loads, !- Name", + " , !- Availability Schedule Name", + " ZONE 1 INLETS, !- Zone Supply Air Node Name", + " , !- Zone Exhaust Air Node Name", + " , !- System Inlet Air Node Name", + " 50, !- Maximum Heating Supply Air Temperature {C}", + " 13, !- Minimum Cooling Supply Air Temperature {C}", + " 0.015, !- Maximum Heating Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.009, !- Minimum Cooling Supply Air Humidity Ratio {kgWater/kgDryAir}", + " NoLimit, !- Heating Limit", + " autosize, !- Maximum Heating Air Flow Rate {m3/s}", + " , !- Maximum Sensible Heating Capacity {W}", + " NoLimit, !- Cooling Limit", + " autosize, !- Maximum Cooling Air Flow Rate {m3/s}", + " , !- Maximum Total Cooling Capacity {W}", + " , !- Heating Availability Schedule Name", + " , !- Cooling Availability Schedule Name", + " ConstantSupplyHumidityRatio, !- Dehumidification Control Type", + " , !- Cooling Sensible Heat Ratio {dimensionless}", + " ConstantSupplyHumidityRatio, !- Humidification Control Type", + " , !- Design Specification Outdoor Air Object Name", + " , !- Outdoor Air Inlet Node Name", + " , !- Demand Controlled Ventilation Type", + " , !- Outdoor Air Economizer Type", + " , !- Heat Recovery Type", + " , !- Sensible Heat Recovery Effectiveness {dimensionless}", + " ; !- Latent Heat Recovery Effectiveness {dimensionless}", + + " NodeList,", + " ZONE 1 INLETS, !- Name", + " ZONE 1 INLET; !- Node 1 Name", + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 750.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("832.44", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("940.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("810.65", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For noncoincident, expect zone Des Cooling Load to be sum of space loads = 832.44 + 940.2 + 810.65 = 2583.29 + // For noncoincident, expect zone Des Cooling Air Flow to be sum of space flows = 0.058 + 0.065 + 0.056 = 0.179 + // Spaces peak on same day, so expect zone peak time to be the same as coincident sizing + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("2583.29", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.179", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.179", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) +// Spaces peak on different days +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA July Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA August Cooling 1% Design Conditions DB/MCWB, !- Name", + " 8, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA September Cooling 1% Design Conditions DB/MCWB, !- Name", + " 9, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " , !- Zone Load Sizing Method", + " , !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " NonCoincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 1, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " ZONE 1 INLETS, !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ZONE 1 OUTLET; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:IdealLoadsAirSystem, !- Zone Equipment 1 Object Type", + " ZONE 1 Ideal Loads, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:IdealLoadsAirSystem,", + " ZONE 1 Ideal Loads, !- Name", + " , !- Availability Schedule Name", + " ZONE 1 INLETS, !- Zone Supply Air Node Name", + " , !- Zone Exhaust Air Node Name", + " , !- System Inlet Air Node Name", + " 50, !- Maximum Heating Supply Air Temperature {C}", + " 13, !- Minimum Cooling Supply Air Temperature {C}", + " 0.015, !- Maximum Heating Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.009, !- Minimum Cooling Supply Air Humidity Ratio {kgWater/kgDryAir}", + " NoLimit, !- Heating Limit", + " autosize, !- Maximum Heating Air Flow Rate {m3/s}", + " , !- Maximum Sensible Heating Capacity {W}", + " NoLimit, !- Cooling Limit", + " autosize, !- Maximum Cooling Air Flow Rate {m3/s}", + " , !- Maximum Total Cooling Capacity {W}", + " , !- Heating Availability Schedule Name", + " , !- Cooling Availability Schedule Name", + " ConstantSupplyHumidityRatio, !- Dehumidification Control Type", + " , !- Cooling Sensible Heat Ratio {dimensionless}", + " ConstantSupplyHumidityRatio, !- Humidification Control Type", + " , !- Design Specification Outdoor Air Object Name", + " , !- Outdoor Air Inlet Node Name", + " , !- Demand Controlled Ventilation Type", + " , !- Outdoor Air Economizer Type", + " , !- Heat Recovery Type", + " , !- Sensible Heat Recovery Effectiveness {dimensionless}", + " ; !- Latent Heat Recovery Effectiveness {dimensionless}", + + " NodeList,", + " ZONE 1 INLETS, !- Name", + " ZONE 1 INLET; !- Node 1 Name", + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " July Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 5000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " July Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 6/30, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 7/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " August Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 10000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " August Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 7/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 8/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " September Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 7500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " September Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 8/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 9/30, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("4165.02", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.289", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.289", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA JULY COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("7725.80", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.536", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.536", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA AUGUST COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("8/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("5826.87", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.404", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.404", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA SEPTEMBER COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("9/21 20:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For noncoincident, expect zone Des Cooling Load to be sum of space loads = 4165.02 + 7725.80 + 5826.87 = 17717.69 + // For noncoincident, expect zone Des Cooling Air Flow to be sum of space flows = 0.289 + 0.536 + 0.404 = 1.229 + // Spaces peak on same day, so expect zone peak time to be the different coincident sizing, and day to be "N/A" + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("17717.69", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.230", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.230", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} From 4a34acc5958f25d23ffc88090f65b7dc659e537c Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 28 Aug 2024 11:31:11 -0500 Subject: [PATCH 06/24] Fixes etc prompted by unit tests --- src/EnergyPlus/ZoneEquipmentManager.cc | 62 +++++++++----------- src/EnergyPlus/ZoneTempPredictorCorrector.cc | 5 +- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 9036ef3e8f9..e474238c2f2 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -2046,22 +2046,22 @@ void updateZoneSizingEndZoneSizingCalc1(EnergyPlusData &state, int const zoneNum // Other if ((zoneCFS.HeatDDNum != 0) && (zoneCFS.HeatDDNum != spaceCFS.HeatDDNum)) { - zoneCFS.HeatDesDay = "n/a"; + zoneCFS.HeatDesDay = "N/A"; zoneCFS.HeatDDNum = 0; zoneCFS.cHeatDDDate = ""; } if ((zoneCFS.HeatNoDOASDDNum != 0) && (zoneCFS.HeatNoDOASDDNum != spaceCFS.HeatNoDOASDDNum)) { zoneCFS.HeatNoDOASDDNum = 0; - zoneCFS.HeatNoDOASDesDay = "n/a"; + zoneCFS.HeatNoDOASDesDay = "N/A"; } if ((zoneCFS.CoolDDNum != 0) && (zoneCFS.CoolDDNum != spaceCFS.CoolDDNum)) { - zoneCFS.CoolDesDay = "n/a"; + zoneCFS.CoolDesDay = "N/A"; zoneCFS.CoolDDNum = 0; zoneCFS.cCoolDDDate = ""; } if ((zoneCFS.CoolNoDOASDDNum != 0) && (zoneCFS.CoolNoDOASDDNum != spaceCFS.CoolNoDOASDDNum)) { zoneCFS.CoolNoDOASDDNum = 0; - zoneCFS.CoolNoDOASDesDay = "n/a"; + zoneCFS.CoolNoDOASDesDay = "N/A"; } if (zoneCFS.zoneLatentSizing) { @@ -2089,22 +2089,22 @@ void updateZoneSizingEndZoneSizingCalc1(EnergyPlusData &state, int const zoneNum // Other if ((zoneCFS.LatentHeatDDNum != 0) && (zoneCFS.LatentHeatDDNum != spaceCFS.LatentHeatDDNum)) { - zoneCFS.LatHeatDesDay = "n/a"; + zoneCFS.LatHeatDesDay = "N/A"; zoneCFS.cLatentHeatDDDate = ""; zoneCFS.LatentHeatDDNum = 0; } if ((zoneCFS.LatentHeatNoDOASDDNum != 0) && (zoneCFS.LatentHeatNoDOASDDNum != spaceCFS.LatentHeatNoDOASDDNum)) { zoneCFS.LatentHeatNoDOASDDNum = 0; - zoneCFS.LatHeatNoDOASDesDay = "n/a"; + zoneCFS.LatHeatNoDOASDesDay = "N/A"; } if ((zoneCFS.LatentCoolDDNum != 0) && (zoneCFS.LatentCoolDDNum != spaceCFS.LatentCoolDDNum)) { - zoneCFS.LatCoolDesDay = "n/a"; + zoneCFS.LatCoolDesDay = "N/A"; zoneCFS.cLatentCoolDDDate = ""; zoneCFS.LatentCoolDDNum = 0; } if ((zoneCFS.LatentCoolNoDOASDDNum != 0) && (zoneCFS.LatentCoolNoDOASDDNum != spaceCFS.LatentCoolNoDOASDDNum)) { zoneCFS.LatentCoolNoDOASDDNum = 0; - zoneCFS.LatCoolNoDOASDesDay = "n/a"; + zoneCFS.LatCoolNoDOASDesDay = "N/A"; } // Time-series sums @@ -2140,15 +2140,6 @@ void updateZoneSizingEndZoneSizingCalc1(EnergyPlusData &state, int const zoneNum zoneCFS.DesCoolCoilInTemp /= zoneCFS.DesCoolMassFlow; zoneCFS.DesCoolCoilInHumRat /= zoneCFS.DesCoolMassFlow; } - // Timestep at max - zoneCFS.TimeStepNumAtHeatMax = 0; - zoneCFS.TimeStepNumAtHeatNoDOASMax = 0; - zoneCFS.TimeStepNumAtCoolMax = 0; - zoneCFS.TimeStepNumAtHeatNoDOASMax = 0; - Real64 maxHeatLoad = 0.0; - Real64 maxHeatLoadNoDOAS = 0.0; - Real64 maxCoolLoad = 0.0; - Real64 maxCoolLoadNoDOAS = 0.0; for (int ts = 1; ts <= state.dataZoneEquipmentManager->NumOfTimeStepInDay; ++ts) { Real64 tsHeatFlow = zoneCFS.HeatFlowSeq(ts); if (tsHeatFlow > 0) { @@ -2158,8 +2149,6 @@ void updateZoneSizingEndZoneSizingCalc1(EnergyPlusData &state, int const zoneNum zoneCFS.HeatZoneHumRatSeq(ts) /= tsHeatFlow; zoneCFS.HeatOutHumRatSeq(ts) /= tsHeatFlow; } - if (zoneCFS.HeatLoadSeq(ts) > maxHeatLoad) zoneCFS.TimeStepNumAtHeatMax = ts; - if (zoneCFS.HeatLoadNoDOASSeq(ts) > maxHeatLoadNoDOAS) zoneCFS.TimeStepNumAtHeatNoDOASMax = ts; Real64 tsCoolFlow = zoneCFS.CoolFlowSeq(ts); if (tsCoolFlow > 0) { @@ -2169,9 +2158,16 @@ void updateZoneSizingEndZoneSizingCalc1(EnergyPlusData &state, int const zoneNum zoneCFS.CoolZoneHumRatSeq(ts) /= tsCoolFlow; zoneCFS.CoolOutHumRatSeq(ts) /= tsCoolFlow; } - if (zoneCFS.CoolLoadSeq(ts) > maxCoolLoad) zoneCFS.TimeStepNumAtCoolMax = ts; - if (zoneCFS.CoolLoadNoDOASSeq(ts) > maxCoolLoadNoDOAS) zoneCFS.TimeStepNumAtCoolNoDOASMax = ts; } + // Timestep at max + zoneCFS.TimeStepNumAtHeatMax = + 1 + std::distance(zoneCFS.HeatLoadSeq.begin(), std::max_element(zoneCFS.HeatLoadSeq.begin(), zoneCFS.HeatLoadSeq.end())); + zoneCFS.TimeStepNumAtHeatNoDOASMax = + 1 + std::distance(zoneCFS.HeatLoadNoDOASSeq.begin(), std::max_element(zoneCFS.HeatLoadNoDOASSeq.begin(), zoneCFS.HeatLoadNoDOASSeq.end())); + zoneCFS.TimeStepNumAtCoolMax = + 1 + std::distance(zoneCFS.CoolLoadSeq.begin(), std::max_element(zoneCFS.CoolLoadSeq.begin(), zoneCFS.CoolLoadSeq.end())); + zoneCFS.TimeStepNumAtCoolNoDOASMax = + 1 + std::distance(zoneCFS.CoolLoadNoDOASSeq.begin(), std::max_element(zoneCFS.CoolLoadNoDOASSeq.begin(), zoneCFS.CoolLoadNoDOASSeq.end())); if (zoneCFS.zoneLatentSizing) { if (zoneCFS.DesLatentHeatMassFlow > 0) { @@ -2189,20 +2185,16 @@ void updateZoneSizingEndZoneSizingCalc1(EnergyPlusData &state, int const zoneNum zoneCFS.DesLatentCoolCoilInHumRat /= zoneCFS.DesLatentCoolMassFlow; } // Timestep at max - zoneCFS.TimeStepNumAtLatentHeatMax = 0; - zoneCFS.TimeStepNumAtLatentHeatNoDOASMax = 0; - zoneCFS.TimeStepNumAtLatentCoolMax = 0; - zoneCFS.TimeStepNumAtLatentCoolNoDOASMax = 0; - Real64 maxLatHeatLoad = 0.0; - Real64 maxLatHeatLoadNoDOAS = 0.0; - Real64 maxLatCoolLoad = 0.0; - Real64 maxLatCoolLoadNoDOAS = 0.0; - for (int ts = 1; ts <= state.dataZoneEquipmentManager->NumOfTimeStepInDay; ++ts) { - if (zoneCFS.LatentHeatFlowSeq(ts) > maxLatHeatLoad) zoneCFS.TimeStepNumAtLatentHeatMax = ts; - if (zoneCFS.HeatLatentLoadNoDOASSeq(ts) > maxLatHeatLoadNoDOAS) zoneCFS.TimeStepNumAtLatentHeatNoDOASMax = ts; - if (zoneCFS.LatentCoolLoadSeq(ts) > maxLatCoolLoad) zoneCFS.TimeStepNumAtLatentCoolMax = ts; - if (zoneCFS.CoolLatentLoadNoDOASSeq(ts) > maxLatCoolLoadNoDOAS) zoneCFS.TimeStepNumAtLatentCoolNoDOASMax = ts; - } + zoneCFS.TimeStepNumAtLatentHeatMax = 1 + std::distance(zoneCFS.LatentHeatFlowSeq.begin(), + std::max_element(zoneCFS.LatentHeatFlowSeq.begin(), zoneCFS.LatentHeatFlowSeq.end())); + zoneCFS.TimeStepNumAtLatentHeatNoDOASMax = + 1 + std::distance(zoneCFS.HeatLatentLoadNoDOASSeq.begin(), + std::max_element(zoneCFS.HeatLatentLoadNoDOASSeq.begin(), zoneCFS.HeatLatentLoadNoDOASSeq.end())); + zoneCFS.TimeStepNumAtLatentCoolMax = 1 + std::distance(zoneCFS.LatentCoolLoadSeq.begin(), + std::max_element(zoneCFS.LatentCoolLoadSeq.begin(), zoneCFS.LatentCoolLoadSeq.end())); + zoneCFS.TimeStepNumAtLatentCoolNoDOASMax = + 1 + std::distance(zoneCFS.CoolLatentLoadNoDOASSeq.begin(), + std::max_element(zoneCFS.CoolLatentLoadNoDOASSeq.begin(), zoneCFS.CoolLatentLoadNoDOASSeq.end())); } return; diff --git a/src/EnergyPlus/ZoneTempPredictorCorrector.cc b/src/EnergyPlus/ZoneTempPredictorCorrector.cc index 20783b681b4..e5d90840e41 100644 --- a/src/EnergyPlus/ZoneTempPredictorCorrector.cc +++ b/src/EnergyPlus/ZoneTempPredictorCorrector.cc @@ -4229,14 +4229,15 @@ Real64 correctZoneAirTemps(EnergyPlusData &state, Real64 spaceTempChange = thisSpaceHB.correctAirTemp(state, useZoneTimeStepHistory, zoneNum, spaceNum); maxTempChange = max(maxTempChange, spaceTempChange); } else { - // If no SpaceHB, then set space temps to match zone temps - if (state.dataHeatBal->space(spaceNum).IsControlled) { + // If doing sizing, then set space node to match zone node + if (state.dataHeatBal->doSpaceHeatBalanceSizing) { auto &thisZoneNode = state.dataLoopNodes->Node(thisZone.SystemZoneNodeNumber); auto &thisSpaceNode = state.dataLoopNodes->Node(state.dataHeatBal->space(spaceNum).SystemZoneNodeNumber); thisSpaceNode.Temp = thisZoneNode.Temp; thisSpaceNode.HumRat = thisZoneNode.HumRat; thisSpaceNode.Enthalpy = thisZoneNode.Enthalpy; } + // If no SpaceHB or doing sizing, then set space temps and humrat to match zone thisSpaceHB.ZT = thisZoneHB.ZT; thisSpaceHB.ZTM = thisZoneHB.ZTM; thisSpaceHB.MAT = thisZoneHB.MAT; From f463a766b34a1bff917a070afa8090d561502a0e Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 28 Aug 2024 16:06:00 -0500 Subject: [PATCH 07/24] Yet another space node tweak --- src/EnergyPlus/ZoneTempPredictorCorrector.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/ZoneTempPredictorCorrector.cc b/src/EnergyPlus/ZoneTempPredictorCorrector.cc index e5d90840e41..d5eb9574cfb 100644 --- a/src/EnergyPlus/ZoneTempPredictorCorrector.cc +++ b/src/EnergyPlus/ZoneTempPredictorCorrector.cc @@ -4229,8 +4229,8 @@ Real64 correctZoneAirTemps(EnergyPlusData &state, Real64 spaceTempChange = thisSpaceHB.correctAirTemp(state, useZoneTimeStepHistory, zoneNum, spaceNum); maxTempChange = max(maxTempChange, spaceTempChange); } else { - // If doing sizing, then set space node to match zone node - if (state.dataHeatBal->doSpaceHeatBalanceSizing) { + // If doing sizing and zone is controled, then set space node to match zone node + if (state.dataHeatBal->doSpaceHeatBalanceSizing && thisZone.IsControlled) { auto &thisZoneNode = state.dataLoopNodes->Node(thisZone.SystemZoneNodeNumber); auto &thisSpaceNode = state.dataLoopNodes->Node(state.dataHeatBal->space(spaceNum).SystemZoneNodeNumber); thisSpaceNode.Temp = thisZoneNode.Temp; From a65531d18a582219271640ec360edd521a6be7b5 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Thu, 29 Aug 2024 12:40:38 -0500 Subject: [PATCH 08/24] Extend Mixing unit test to catch #10670 --- .../unit/HeatBalanceAirManager.unit.cc | 69 ++++++++++++------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc b/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc index eb9143cfe47..f3ee37f8754 100644 --- a/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc +++ b/tst/EnergyPlus/unit/HeatBalanceAirManager.unit.cc @@ -59,6 +59,7 @@ #include #include #include +#include #include #include @@ -518,6 +519,48 @@ TEST_F(EnergyPlusFixture, HeatBalanceAirManager_GetMixingAndCrossMixing) state->dataInputProcessing->inputProcessor->epJSON = R"( { + "SimulationControl": { + "SimulationControl 1": { + "do_plant_sizing_calculation": "No", + "do_system_sizing_calculation": "No", + "do_zone_sizing_calculation": "No", + "run_simulation_for_sizing_periods": "Yes", + "run_simulation_for_weather_file_run_periods": "No" + } + }, + "ZoneAirHeatBalanceAlgorithm": { + "ZoneAirHeatBalanceAlgorithm 1": { + "algorithm": "AnalyticalSolution", + "do_space_heat_balance_for_simulation": "Yes" + } + }, + "Site:Location": { + "USA IL-CHICAGO-OHARE": { + "elevation": 190, + "latitude": 41.77, + "longitude": -87.75, + "time_zone": -6.0 + } + }, + "SizingPeriod:DesignDay": { + "CHICAGO Ann Clg .4% Condns WB=>MDB": { + "barometric_pressure": 99063.0, + "daily_dry_bulb_temperature_range": 10.7, + "day_of_month": 21, + "day_type": "SummerDesignDay", + "daylight_saving_time_indicator": "No", + "humidity_condition_type": "WetBulb", + "maximum_dry_bulb_temperature": 31.2, + "month": 7, + "rain_indicator": "No", + "sky_clearness": 1.0, + "snow_indicator": "No", + "solar_model_indicator": "ASHRAEClearSky", + "wetbulb_or_dewpoint_at_maximum_dry_bulb": 25.5, + "wind_direction": 230, + "wind_speed": 5.3 + } + }, "Zone": { "Zone 1" : { "volume": 100.0 @@ -755,32 +798,12 @@ TEST_F(EnergyPlusFixture, HeatBalanceAirManager_GetMixingAndCrossMixing) state->dataIPShortCut->rNumericArgs.dimension(MaxNumeric, 0.0); state->dataIPShortCut->lNumericFieldBlanks.dimension(MaxNumeric, false); + // Need to do this before ManageSimulation to get the space heat balance input bool ErrorsFound = false; - HeatBalanceManager::GetHeatBalanceInput(*state); - std::string const error_string = delimited_string( - {" ** Warning ** GetSurfaceData: Entered Space Floor Area(s) differ more than 5% from calculated Space Floor Area(s).", - " ** ~~~ ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual Spaces.", - " ** Warning ** CalculateZoneVolume: 1 zone is not fully enclosed. For more details use: Output:Diagnostics,DisplayExtrawarnings; ", - " ** Warning ** CalcApproximateViewFactors: Zero area for all other zone surfaces.", - " ** ~~~ ** Happens for Surface=\"DUMMY SPACE 1A FLOOR\" in Zone=ZONE 1", - " ** Warning ** CalcApproximateViewFactors: Zero area for all other zone surfaces.", - " ** ~~~ ** Happens for Surface=\"DUMMY SPACE 1B FLOOR\" in Zone=ZONE 1", - " ** Warning ** Surfaces in Zone/Enclosure=\"ZONE 1\" do not define an enclosure.", - " ** ~~~ ** Number of surfaces <= 3, view factors are set to force reciprocity but may not fulfill completeness.", - " ** ~~~ ** Reciprocity means that radiant exchange between two surfaces will match and not lead to an energy loss.", - " ** ~~~ ** Completeness means that all of the view factors between a surface and the other surfaces in a zone add up to unity.", - " ** ~~~ ** So, when there are three or less surfaces in a zone, EnergyPlus will make sure there are no losses of energy but", - " ** ~~~ ** it will not exchange the full amount of radiation with the rest of the zone as it would if there was a completed " - "enclosure."}); - - compare_err_stream(error_string, true); + HeatBalanceManager::GetProjectControlData(*state, ErrorsFound); EXPECT_FALSE(ErrorsFound); - state->dataHeatBalFanSys->ZoneReOrder.allocate(state->dataGlobal->NumOfZones); - ErrorsFound = false; - HeatBalanceAirManager::GetSimpleAirModelInputs(*state, ErrorsFound); - compare_err_stream("", true); - EXPECT_FALSE(ErrorsFound); + SimulationManager::ManageSimulation(*state); // Expected floor areas Real64 constexpr Space1aFloorArea = 10.0; From a2bf2e994cbe9e8b30e91dbe531a231bb1905c84 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Thu, 29 Aug 2024 15:51:26 -0500 Subject: [PATCH 09/24] Space IV.5 engineering ref --- .../summary-of-time-marching-solution.tex | 3 +++ .../zone-design-loads-and-air-flow-rates.tex | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/doc/engineering-reference/src/integrated-solution-manager/summary-of-time-marching-solution.tex b/doc/engineering-reference/src/integrated-solution-manager/summary-of-time-marching-solution.tex index 2628924b7b0..a2de37e2bf0 100644 --- a/doc/engineering-reference/src/integrated-solution-manager/summary-of-time-marching-solution.tex +++ b/doc/engineering-reference/src/integrated-solution-manager/summary-of-time-marching-solution.tex @@ -97,6 +97,9 @@ \subsubsection{SpaceHVAC:ZoneEquipmentMixer Adjustments}\label{space-hvac-zoneeq After all of the zone HVAC equipment is simulated, the flow rates on the space outlet nodes are set to the space fraction times the zone equipment inlet node flow rate. +\subsubsection{SpaceHVAC:ZoneReturnMixer Adjustments}\label{space-hvac-zoneretmixer-adjustments} +When a SpaceHVAC:ZoneReturnMixer is used, after zone-level return node flow rates are set, the space return node flow rates are set. The space flow rates are set based on the same method used for zones (sum of inlet flows minus sum of exhaust flows). Then the space flow rates are adjusted proportionately so the sum is equal to the previously determined zone-level return node flow rate. Then the conditions on the zone return nodes are set to the combined space outlet node conditions weighted by the space return node flow rates. + \subsection{References}\label{references-043} Ceylan, H. T., and G. E. Myers. 1980. Long-time Solutions to Heat Conduction Transients with Time-Dependent Inputs. ASME Journal of Heat Transfer, Volume 102, No. 1, pp.~115-120. diff --git a/doc/engineering-reference/src/loop-equipment-sizing-and-other-design-data/zone-design-loads-and-air-flow-rates.tex b/doc/engineering-reference/src/loop-equipment-sizing-and-other-design-data/zone-design-loads-and-air-flow-rates.tex index c0cffe63c7d..e88ff4790ea 100644 --- a/doc/engineering-reference/src/loop-equipment-sizing-and-other-design-data/zone-design-loads-and-air-flow-rates.tex +++ b/doc/engineering-reference/src/loop-equipment-sizing-and-other-design-data/zone-design-loads-and-air-flow-rates.tex @@ -243,6 +243,12 @@ \subsubsection{EndZoneSizingCalc}\label{endzonesizingcalc} If \emph{heating design air flow method} is \emph{flow/zone}, then \emph{heating design air flow rate} will be used for the design max heating air flow rate. If \emph{heating design air flow method} is \emph{design day}, then the design day calculation will set the design max heating air flow rate. If \emph{heating design air flow method} is \emph{design day with limit}, then the maximum from \emph{heating max flow per area}, \emph{heating max flow} and \emph{heating max flow fraction} will set an upper limit on the design max heating air flow rate. The design max heating air flow rate must always be \textgreater{} = the ventilation requirement. In each case, the outside airflow will be modified based on zone ventilation effectiveness specified in the zone sizing object. +\subsection{Space Sizing}\label{space-sizing} +When ZoneAirHeatBalanceAlgorithm ``Do Space Heat Balance for Sizing'' is ``Yes'', the same sizing calculations described above will be performed for each space that is part of a controlled zone, using the same thermostat setpoints as the parent zone. The space sizing results will be reported the same as zone sizing results (eio, table, and spsz outputs). + +\subsection{NonCoincident Zone Sizing}\label{noncoincident-zone-sizing} +Sizing:Zone has an option for ``Type of Space Sum to Use'', ``Coincident'' or ``NonCoincident''. Coincident zone sizing (the default) is always calculated first, with all spaces in the zone lumped together. For ``NonCoincident'' zone sizing, if the zone contains more than one space, the zone sizing results will be overwritten using the sums and averages of the space sizing results. If all spaces for a given load type (heating or cooling) peak on the same design day, then that day will be reported as the zone peak day, otherwise the zone design day will be "N/A". The zone peak time will be determined by scanning the peak zone sequential loads which are calculated by summing the space peak day sequential loads. + \textbf{This concludes the calculation of the zone design flow rates and loads.} \subsection{Air Terminal Unit Sizing}\label{air-terminal-unit-sizing} From f857dfa5e95c384070a57352afd1f41bee77943a Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Thu, 29 Aug 2024 17:34:20 -0500 Subject: [PATCH 10/24] Space IV.5 - Implement sizing by space ext perimeter length --- src/EnergyPlus/DataHeatBalance.hh | 1 + src/EnergyPlus/DataZoneEquipment.cc | 72 ++++++++++++++--------------- src/EnergyPlus/SurfaceGeometry.cc | 2 + 3 files changed, 37 insertions(+), 38 deletions(-) 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", From 50eb55980a04175820f2563cfdba714867ae5a98 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 30 Aug 2024 07:44:02 -0500 Subject: [PATCH 11/24] Space IV.5 - Implement sizing by space ext perimeter length doc --- .../src/overview/group-zone-equipment.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/input-output-reference/src/overview/group-zone-equipment.tex b/doc/input-output-reference/src/overview/group-zone-equipment.tex index 600d3c236ef..f835340823a 100644 --- a/doc/input-output-reference/src/overview/group-zone-equipment.tex +++ b/doc/input-output-reference/src/overview/group-zone-equipment.tex @@ -487,7 +487,7 @@ \subsubsection{Inputs}\label{inputs-1-052-seqsplitter} \paragraph{Field: Space Fraction Method}\label{field-seqsplitter-space-sizing-basis} The method used to autosize the space fractions. The choices are: DesignCoolingLoad, DesignHeatingLoad, FloorArea, Volume, and PerimeterLength. The default is DesignCoolingLoad. -For example, if there are 3 Spaces listed below, the Space Output Fractions will be sized to Space1DesignCoolingLoad / Sum(Space1thru3DesignCoolingLoad). +For example, if there are 3 Spaces listed below, the Space 1 Output Fraction will be sized to Space1DesignCoolingLoad / Sum(Space1thru3DesignCoolingLoad). PerimeterLength sums the width of exterior walls in each space. \paragraph{Field: Space \textless{}x\textgreater{} Name}\label{field-seqsplitter-space-name} @@ -547,7 +547,7 @@ \subsubsection{Inputs}\label{inputs-1-052-seqmixer} \paragraph{Field: Space Fraction Method}\label{field-seqmixer-space-sizing-basis} The method used to autosize the space fractions. The choices are: DesignCoolingLoad, DesignHeatingLoad, FloorArea, Volume, and PerimeterLength. The default is DesignCoolingLoad. -For example, if there are 3 Spaces listed below, the Space Output Fractions will be sized to Space1DesignCoolingLoad / Sum(Space1thru3DesignCoolingLoad). +For example, if there are 3 Spaces listed below, the Space 1 Output Fraction will be sized to Space1DesignCoolingLoad / Sum(Space1thru3DesignCoolingLoad). PerimeterLength sums the width of exterior walls in each space. \paragraph{Field: Space \textless{}x\textgreater{} Name}\label{field-seqmixer-space-name} From 0e8b750f4e016b47b0613d6ba207fbd11a9012ad Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 30 Aug 2024 10:43:13 -0500 Subject: [PATCH 12/24] Space IV.5 - Implement sizing by space ext perimeter length doc --- src/EnergyPlus/DataSizing.cc | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/EnergyPlus/DataSizing.cc b/src/EnergyPlus/DataSizing.cc index 66f30fcabfc..c2fadb6cbe1 100644 --- a/src/EnergyPlus/DataSizing.cc +++ b/src/EnergyPlus/DataSizing.cc @@ -762,16 +762,12 @@ Real64 OARequirementsData::calcOAFlowRate(EnergyPlusData &state, Real64 curNumOccupants = 0.0; Real64 maxOccupants = 0.0; if (spaceNum > 0) { - floorArea = state.dataHeatBal->space(spaceNum).FloorArea; - // TODO MJW: For now just proportion space volume by floor area - if (thisZone.FloorArea > 0.0) { - volume = thisZone.Volume * state.dataHeatBal->space(spaceNum).FloorArea / thisZone.FloorArea; - } else { - volume = 0.0; - } - nomTotOccupants = state.dataHeatBal->space(spaceNum).TotOccupants; + auto &thisSpace = state.dataHeatBal->space(spaceNum); + floorArea = thisSpace.FloorArea; + volume = thisSpace.Volume; + nomTotOccupants = thisSpace.TotOccupants; curNumOccupants = state.dataHeatBal->spaceIntGain(spaceNum).NOFOCC; - maxOccupants = state.dataHeatBal->space(spaceNum).maxOccupants; + maxOccupants = thisSpace.maxOccupants; } else { floorArea = thisZone.FloorArea; volume = thisZone.Volume; From d6f0d2731cdabde19211e91df7a160397b2a9327 Mon Sep 17 00:00:00 2001 From: mjwitte Date: Fri, 30 Aug 2024 11:35:10 -0500 Subject: [PATCH 13/24] Space IV.5 - space volume for OA calcs --- tst/EnergyPlus/unit/DataSizing.unit.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/DataSizing.unit.cc b/tst/EnergyPlus/unit/DataSizing.unit.cc index f6d36b4073d..027e9b4e004 100644 --- a/tst/EnergyPlus/unit/DataSizing.unit.cc +++ b/tst/EnergyPlus/unit/DataSizing.unit.cc @@ -288,7 +288,8 @@ TEST_F(EnergyPlusFixture, OARequirements_calcDesignSpecificationOutdoorAir) }, "Space 1d" : { "zone_name": "Zone 1", - "floor_area": 100.0 + "floor_area": 100.0, + "volume": 300.0 } }, "DesignSpecification:OutdoorAir": { @@ -392,6 +393,7 @@ TEST_F(EnergyPlusFixture, OARequirements_calcDesignSpecificationOutdoorAir) thisSpaceName = "SPACE 1D"; spaceNum = Util::FindItemInList(thisSpaceName, state->dataHeatBal->space); state->dataHeatBal->space(spaceNum).FloorArea = 100.0; + state->dataHeatBal->space(spaceNum).Volume = 300.0; std::string thisZoneName = "ZONE 2"; zoneNum = Util::FindItemInList(thisZoneName, state->dataHeatBal->Zone); From e87c81e435f0cfeba13635b8836494a8383ea1ef Mon Sep 17 00:00:00 2001 From: mjwitte Date: Fri, 30 Aug 2024 12:26:27 -0500 Subject: [PATCH 14/24] Space IV.5 - Extend zone equip enums --- src/EnergyPlus/ConvectionCoefficients.cc | 4 ++- src/EnergyPlus/DataZoneEquipment.cc | 33 ++++++++---------------- src/EnergyPlus/DataZoneEquipment.hh | 7 +++-- src/EnergyPlus/RoomAirModelManager.cc | 3 ++- src/EnergyPlus/SystemReports.cc | 7 +++-- src/EnergyPlus/ZoneEquipmentManager.cc | 9 ++++--- 6 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/EnergyPlus/ConvectionCoefficients.cc b/src/EnergyPlus/ConvectionCoefficients.cc index 7c33104830f..8b5f06a4b77 100644 --- a/src/EnergyPlus/ConvectionCoefficients.cc +++ b/src/EnergyPlus/ConvectionCoefficients.cc @@ -4054,7 +4054,9 @@ void DynamicIntConvSurfaceClassification(EnergyPlusData &state, int const SurfNu } } break; case DataZoneEquipment::ZoneEquipType::VentilatedSlab: - case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiant: { + case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiantConstFlow: + case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiantVarFlow: + case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiantElectric: { if (zoneEquipConfig.InFloorActiveElement) { for (int spaceNumLoop : zone.spaceIndexes) { auto const &thisSpace = state.dataHeatBal->space(spaceNumLoop); diff --git a/src/EnergyPlus/DataZoneEquipment.cc b/src/EnergyPlus/DataZoneEquipment.cc index 488102e47a3..64a59f8158b 100644 --- a/src/EnergyPlus/DataZoneEquipment.cc +++ b/src/EnergyPlus/DataZoneEquipment.cc @@ -126,10 +126,13 @@ constexpr std::array(ZoneEquipType::Num)> zon "ZONEHVAC:BASEBOARD:RADIANTCONVECTIVE:WATER", // BaseboardWater "ZONEHVAC:BASEBOARD:RADIANTCONVECTIVE:ELECTRIC", // BaseboardElectric "ZONEHVAC:HIGHTEMPERATURERADIANT", // HighTempRadiant - "ZONEHVAC:LOWTEMPERATURERADIANT:VARIABLEFLOW", // LowTempRadiant + "ZONEHVAC:LOWTEMPERATURERADIANT:CONSTANTFLOW", // LowTempRadiantConstFlow + "ZONEHVAC:LOWTEMPERATURERADIANT:VARIABLEFLOW", // LowTempRadiantVarFlow + "ZONEHVAC:LOWTEMPERATURERADIANT:ELECTRIC", // LowTempRadiantElectric "FAN:ZONEEXHAUST", // ExhaustFan "HEATEXCHANGER:AIRTOAIR:FLATPLATE", // HeatExchanger - "WATERHEATER:HEATPUMP:PUMPEDCONDENSER", // HeatPumpWaterHeater + "WATERHEATER:HEATPUMP:PUMPEDCONDENSER", // HeatPumpWaterHeaterPumpedCondenser + "WATERHEATER:HEATPUMP:WRAPPEDCONDENSER", // HeatPumpWaterHeaterWrappedCondenser "ZONEHVAC:DEHUMIDIFIER:DX", // DXDehumidifier "ZONEHVAC:REFRIGERATIONCHILLERSET", // RefrigerationAirChillerSet "ZONEHVAC:FORCEDAIR:USERDEFINED", // UserDefinedVACForcedAir @@ -984,16 +987,9 @@ void processZoneEquipmentInput(EnergyPlusData &state, } if (thisZoneEquipList.EquipType(ZoneEquipTypeNum) == ZoneEquipType::Invalid) { - if (thisZoneEquipList.EquipTypeName(ZoneEquipTypeNum) == "ZONEHVAC:LOWTEMPERATURERADIANT:CONSTANTFLOW" || - thisZoneEquipList.EquipTypeName(ZoneEquipTypeNum) == "ZONEHVAC:LOWTEMPERATURERADIANT:ELECTRIC") { - thisZoneEquipList.EquipType(ZoneEquipTypeNum) = ZoneEquipType::LowTemperatureRadiant; - } else if (thisZoneEquipList.EquipTypeName(ZoneEquipTypeNum) == "WATERHEATER:HEATPUMP:WRAPPEDCONDENSER") { - thisZoneEquipList.EquipType(ZoneEquipTypeNum) = DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater; - } else { - ShowSevereError(state, format("{}{} = {}", RoutineName, CurrentModuleObject, thisZoneEquipList.Name)); - ShowContinueError(state, format("..Invalid Equipment Type = {}", thisZoneEquipList.EquipType(ZoneEquipTypeNum))); - state.dataZoneEquip->GetZoneEquipmentDataErrorsFound = true; - } + ShowSevereError(state, format("{}{} = {}", RoutineName, CurrentModuleObject, thisZoneEquipList.Name)); + ShowContinueError(state, format("..Invalid Equipment Type = {}", thisZoneEquipList.EquipType(ZoneEquipTypeNum))); + state.dataZoneEquip->GetZoneEquipmentDataErrorsFound = true; } } } // End parsing all extensible Zone Equipment info @@ -1216,17 +1212,10 @@ void processZoneEquipSplitterInput(EnergyPlusData &state, auto &ip = state.dataInputProcessing->inputProcessor; std::string const zeqTypeName = ip->getAlphaFieldValue(objectFields, objectSchemaProps, "zone_equipment_object_type"); thisZeqSplitter.zoneEquipType = DataZoneEquipment::ZoneEquipType(getEnumValue(zoneEquipTypeNamesUC, zeqTypeName)); - // SpaceHVAC TODO: Copied this block from processZoneEquipmentInput section for ZoneHVAC:EquipmentList - seems this could be simplified if (thisZeqSplitter.zoneEquipType == ZoneEquipType::Invalid) { - if (zeqTypeName == "ZONEHVAC:LOWTEMPERATURERADIANT:CONSTANTFLOW" || zeqTypeName == "ZONEHVAC:LOWTEMPERATURERADIANT:ELECTRIC") { - thisZeqSplitter.zoneEquipType = ZoneEquipType::LowTemperatureRadiant; - } else if (zeqTypeName == "WATERHEATER:HEATPUMP:WRAPPEDCONDENSER") { - thisZeqSplitter.zoneEquipType = DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater; - } else { - ShowSevereError(state, format("{}{} = {}", RoutineName, zeqSplitterModuleObject, thisZeqSplitter.Name)); - ShowContinueError(state, format("..Invalid Equipment Type = {}", zeqTypeName)); - state.dataZoneEquip->GetZoneEquipmentDataErrorsFound = true; - } + ShowSevereError(state, format("{}{} = {}", RoutineName, zeqSplitterModuleObject, thisZeqSplitter.Name)); + ShowContinueError(state, format("..Invalid Equipment Type = {}", zeqTypeName)); + state.dataZoneEquip->GetZoneEquipmentDataErrorsFound = true; } thisZeqSplitter.zoneEquipName = ip->getAlphaFieldValue(objectFields, objectSchemaProps, "zone_equipment_name"); diff --git a/src/EnergyPlus/DataZoneEquipment.hh b/src/EnergyPlus/DataZoneEquipment.hh index 008be07c127..8d7b3e638b2 100644 --- a/src/EnergyPlus/DataZoneEquipment.hh +++ b/src/EnergyPlus/DataZoneEquipment.hh @@ -135,10 +135,13 @@ namespace DataZoneEquipment { BaseboardWater, BaseboardElectric, HighTemperatureRadiant, - LowTemperatureRadiant, + LowTemperatureRadiantConstFlow, + LowTemperatureRadiantVarFlow, + LowTemperatureRadiantElectric, ExhaustFan, HeatExchanger, - HeatPumpWaterHeater, + HeatPumpWaterHeaterPumpedCondenser, + HeatPumpWaterHeaterWrappedCondenser, DehumidifierDX, RefrigerationChillerSet, UserDefinedHVACForcedAir, diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 8c890593867..053ca64018f 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2837,7 +2837,8 @@ namespace RoomAir { // SupplyNodeName = ""; // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? May not use } break; - case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater: { // WaterHeater : HeatPump + case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeaterPumpedCondenser: + case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeaterWrappedCondenser: { // WaterHeater : HeatPump EquipIndex = WaterThermalTanks::getHeatPumpWaterHeaterIndex(state, EquipName); if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode; diff --git a/src/EnergyPlus/SystemReports.cc b/src/EnergyPlus/SystemReports.cc index e862f4ba56a..a7d41e1f41c 100644 --- a/src/EnergyPlus/SystemReports.cc +++ b/src/EnergyPlus/SystemReports.cc @@ -4040,11 +4040,14 @@ void ReportVentilationLoads(EnergyPlusData &state) case DataZoneEquipment::ZoneEquipType::BaseboardConvectiveElectric: case DataZoneEquipment::ZoneEquipType::HighTemperatureRadiant: // not sure how HeatExchanger:* could be used as zone equipment ????? - case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiant: + case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiantConstFlow: + case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiantVarFlow: + case DataZoneEquipment::ZoneEquipType::LowTemperatureRadiantElectric: case DataZoneEquipment::ZoneEquipType::ExhaustFan: case DataZoneEquipment::ZoneEquipType::HeatExchanger: // HPWaterHeater can be used as zone equipment - case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater: + case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeaterPumpedCondenser: + case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeaterWrappedCondenser: case DataZoneEquipment::ZoneEquipType::BaseboardWater: case DataZoneEquipment::ZoneEquipType::DehumidifierDX: case DataZoneEquipment::ZoneEquipType::BaseboardSteam: diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index e474238c2f2..3b889ff284d 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -3787,9 +3787,9 @@ void SimZoneEquipment(EnergyPlusData &state, bool const FirstHVACIteration, bool // via SumLatentHTRadSys... so setting LatOutputProvided = 0.0 } break; - case ZoneEquipType::LowTemperatureRadiant: { // 'ZoneHVAC:LowTemperatureRadiant:VariableFlow', - // 'ZoneHVAC:LowTemperatureRadiant:ConstantFlow' - // 'ZoneHVAC:LowTemperatureRadiant:Electric' + case ZoneEquipType::LowTemperatureRadiantConstFlow: + case ZoneEquipType::LowTemperatureRadiantVarFlow: + case ZoneEquipType::LowTemperatureRadiantElectric: { LowTempRadiantSystem::SimLowTempRadiantSystem(state, state.dataZoneEquipmentManager->PrioritySimOrder(EquipTypeNum).EquipName, FirstHVACIteration, @@ -3836,7 +3836,8 @@ void SimZoneEquipment(EnergyPlusData &state, bool const FirstHVACIteration, bool zoneEquipList.EquipIndex(EquipPtr)); } break; - case ZoneEquipType::HeatPumpWaterHeater: { // 'WaterHeater:HeatPump:PumpedCondenser' + case ZoneEquipType::HeatPumpWaterHeaterPumpedCondenser: + case ZoneEquipType::HeatPumpWaterHeaterWrappedCondenser: { WaterThermalTanks::SimHeatPumpWaterHeater(state, state.dataZoneEquipmentManager->PrioritySimOrder(EquipTypeNum).EquipName, FirstHVACIteration, From 2429e6a42b6363599eeb802416d618c591825aec Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Tue, 3 Sep 2024 09:21:16 -0500 Subject: [PATCH 15/24] Cleanup --- src/EnergyPlus/HeatBalanceSurfaceManager.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/EnergyPlus/HeatBalanceSurfaceManager.cc b/src/EnergyPlus/HeatBalanceSurfaceManager.cc index 10e2ed3df8a..52e37c4f796 100644 --- a/src/EnergyPlus/HeatBalanceSurfaceManager.cc +++ b/src/EnergyPlus/HeatBalanceSurfaceManager.cc @@ -2115,7 +2115,6 @@ void InitThermalAndFluxHistories(EnergyPlusData &state) // First do the "bulk" initializations of arrays sized to NumOfZones for (int zoneNum = 1; zoneNum <= state.dataGlobal->NumOfZones; ++zoneNum) { - // TODO: Reinitializing this entire struct may cause diffs new (&state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum)) ZoneTempPredictorCorrector::ZoneHeatBalanceData(); // Initialize the Zone Humidity Ratio here so that it is available for EMPD implementations auto &thisZoneHB = state.dataZoneTempPredictorCorrector->zoneHeatBalance(zoneNum); From fecb102aa374398ff103b68f57c5772767dc5a05 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Tue, 3 Sep 2024 09:24:18 -0500 Subject: [PATCH 16/24] Space IV.5 - Fix nonAirSystemReponse for space sizing --- src/EnergyPlus/ZoneEquipmentManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 3b889ff284d..2cc8829d666 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -557,7 +557,7 @@ void sizeZoneSpaceEquipmentPart1(EnergyPlusData &state, supplyAirNode.MassFlowRate = MassFlowRate; } else { nonAirSystemResponse = SysOutputProvided; - if (state.dataHeatBal->doSpaceHeatBalance) { + if (state.dataHeatBal->doSpaceHeatBalance && spaceNum == 0) { for (int spaceNum : state.dataHeatBal->Zone(zoneNum).spaceIndexes) { // SpaceHB ToDo: For now allocate by space volume frac state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).NonAirSystemResponse = From 5b1cd9cfba3d57cce8f2fd594429cd467151f7ef Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Tue, 3 Sep 2024 09:25:48 -0500 Subject: [PATCH 17/24] Space IV.5 - Distribute nonAirSys latent gain to spaces for zone sizing --- src/EnergyPlus/ZoneEquipmentManager.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 2cc8829d666..dbb785701b0 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -557,17 +557,20 @@ void sizeZoneSpaceEquipmentPart1(EnergyPlusData &state, supplyAirNode.MassFlowRate = MassFlowRate; } else { nonAirSystemResponse = SysOutputProvided; + if (zsCalcSizing.zoneLatentSizing) { + int ZoneMult = zoneOrSpace.Multiplier * zoneOrSpace.ListMultiplier; + zoneLatentGain += (LatOutputProvided * HgAir) / ZoneMult; + } if (state.dataHeatBal->doSpaceHeatBalance && spaceNum == 0) { for (int spaceNum : state.dataHeatBal->Zone(zoneNum).spaceIndexes) { // SpaceHB ToDo: For now allocate by space volume frac - state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum).NonAirSystemResponse = - nonAirSystemResponse * state.dataHeatBal->space(spaceNum).fracZoneVolume; + auto &spHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum); + spHB.NonAirSystemResponse = nonAirSystemResponse * state.dataHeatBal->space(spaceNum).fracZoneVolume; + if (zsCalcSizing.zoneLatentSizing) { + spHB.latentGain += (LatOutputProvided * HgAir) * state.dataHeatBal->space(spaceNum).fracZoneVolume; + } } } - if (zsCalcSizing.zoneLatentSizing) { - int ZoneMult = zoneOrSpace.Multiplier * zoneOrSpace.ListMultiplier; - zoneLatentGain += (LatOutputProvided * HgAir) / ZoneMult; - } } updateSystemOutputRequired(state, zoneNum, SysOutputProvided, LatOutputProvided, zsEnergyDemand, zsMoistureDemand); From a66e0cc54f0e709750d1c28effac3c2ba87abe19 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Tue, 3 Sep 2024 09:27:53 -0500 Subject: [PATCH 18/24] Remove multiplier from nonAirSys latent sizing --- src/EnergyPlus/ZoneEquipmentManager.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index dbb785701b0..7138c72644f 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -558,8 +558,7 @@ void sizeZoneSpaceEquipmentPart1(EnergyPlusData &state, } else { nonAirSystemResponse = SysOutputProvided; if (zsCalcSizing.zoneLatentSizing) { - int ZoneMult = zoneOrSpace.Multiplier * zoneOrSpace.ListMultiplier; - zoneLatentGain += (LatOutputProvided * HgAir) / ZoneMult; + zoneLatentGain += (LatOutputProvided * HgAir); } if (state.dataHeatBal->doSpaceHeatBalance && spaceNum == 0) { for (int spaceNum : state.dataHeatBal->Zone(zoneNum).spaceIndexes) { From e16482c8ed5a41a393de389619fe0891646ce7ac Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 4 Sep 2024 13:08:46 -0500 Subject: [PATCH 19/24] Space IV.5 - Restore latent multiplier for nonAirSystems sizing --- src/EnergyPlus/ZoneEquipmentManager.cc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/ZoneEquipmentManager.cc b/src/EnergyPlus/ZoneEquipmentManager.cc index 7138c72644f..d10a2e33572 100644 --- a/src/EnergyPlus/ZoneEquipmentManager.cc +++ b/src/EnergyPlus/ZoneEquipmentManager.cc @@ -558,15 +558,17 @@ void sizeZoneSpaceEquipmentPart1(EnergyPlusData &state, } else { nonAirSystemResponse = SysOutputProvided; if (zsCalcSizing.zoneLatentSizing) { - zoneLatentGain += (LatOutputProvided * HgAir); + int zoneMult = zoneOrSpace.Multiplier * zoneOrSpace.ListMultiplier; + zoneLatentGain += (LatOutputProvided * HgAir) / zoneMult; } if (state.dataHeatBal->doSpaceHeatBalance && spaceNum == 0) { - for (int spaceNum : state.dataHeatBal->Zone(zoneNum).spaceIndexes) { + for (int spaceNum2 : state.dataHeatBal->Zone(zoneNum).spaceIndexes) { // SpaceHB ToDo: For now allocate by space volume frac - auto &spHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum); - spHB.NonAirSystemResponse = nonAirSystemResponse * state.dataHeatBal->space(spaceNum).fracZoneVolume; + auto &spHB = state.dataZoneTempPredictorCorrector->spaceHeatBalance(spaceNum2); + spHB.NonAirSystemResponse = nonAirSystemResponse * state.dataHeatBal->space(spaceNum2).fracZoneVolume; if (zsCalcSizing.zoneLatentSizing) { - spHB.latentGain += (LatOutputProvided * HgAir) * state.dataHeatBal->space(spaceNum).fracZoneVolume; + int zoneMult = zoneOrSpace.Multiplier * zoneOrSpace.ListMultiplier; + spHB.latentGain += (LatOutputProvided * HgAir) * state.dataHeatBal->space(spaceNum2).fracZoneVolume / zoneMult; } } } From f09cd0fae8c9aa3abdd4afd3cdbf079d2c279002 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 4 Sep 2024 13:16:37 -0500 Subject: [PATCH 20/24] Space IV.5 - Extend zone space sizing unit tests --- tst/EnergyPlus/unit/SizingManager.unit.cc | 2682 +++++++++++++++++++-- 1 file changed, 2508 insertions(+), 174 deletions(-) diff --git a/tst/EnergyPlus/unit/SizingManager.unit.cc b/tst/EnergyPlus/unit/SizingManager.unit.cc index 6184f627ca2..b139e5737b2 100644 --- a/tst/EnergyPlus/unit/SizingManager.unit.cc +++ b/tst/EnergyPlus/unit/SizingManager.unit.cc @@ -559,7 +559,7 @@ TEST_F(EnergyPlusFixture, SizingManager_OverrideAvgWindowInSizing) EXPECT_EQ(state->dataGlobal->NumOfTimeStepInHour, 1); EXPECT_EQ(state->dataSize->NumTimeStepsInAvg, 1); } -TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_1x) { std::string const idf_objects = delimited_string({ " Timestep,6;", @@ -578,6 +578,34 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) " No, !- Run Simulation for Sizing Periods", " No; !- Run Simulation for Weather File Run Periods", + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -17.3, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.0; !- Sky Clearness", + " SizingPeriod:DesignDay,", " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", " 7, !- Month", @@ -949,11 +977,12 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) ASSERT_TRUE(process_idf(idf_objects)); SimulationManager::ManageSimulation(*state); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("1898.77", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.053", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.053", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); EXPECT_EQ("832.44", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); @@ -961,11 +990,12 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("631.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); EXPECT_EQ("940.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); @@ -973,11 +1003,12 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("631.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); EXPECT_EQ("810.65", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); @@ -986,11 +1017,12 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("3155.31", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.088", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.088", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); EXPECT_EQ("1942.36", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); EXPECT_EQ("0.135", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); EXPECT_EQ("0.135", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); @@ -998,9 +1030,8 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident) OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); } -TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_10x) { - // Spaces peak on same day std::string const idf_objects = delimited_string({ " Timestep,6;", @@ -1018,6 +1049,34 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) " No, !- Run Simulation for Sizing Periods", " No; !- Run Simulation for Weather File Run Periods", + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -17.3, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.0; !- Sky Clearness", + " SizingPeriod:DesignDay,", " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", " 7, !- Month", @@ -1128,7 +1187,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) " , !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", - " NonCoincident; !- Type of Space Sum to Use", + " Coincident; !- Type of Space Sum to Use", " DesignSpecification:OutdoorAir,", " SZ DSOA West Zone, !- Name", @@ -1144,7 +1203,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) " 0, !- Y Origin {m}", " 0, !- Z Origin {m}", " 1, !- Type", - " 1, !- Multiplier", + " 10, !- Multiplier", " 3.048, !- Ceiling Height {m}", " 40.; !- Volume {m3}", @@ -1389,60 +1448,62 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) ASSERT_TRUE(process_idf(idf_objects)); SimulationManager::ManageSimulation(*state); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); - EXPECT_EQ("832.44", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); - EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); - EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("18987.69", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("8324.40", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.578", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.578", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); - EXPECT_EQ("940.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); - EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); - EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("9402.01", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); - EXPECT_EQ("810.65", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); - EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); - EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("8106.47", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); - // For noncoincident, expect zone Des Cooling Load to be sum of space loads = 832.44 + 940.2 + 810.65 = 2583.29 - // For noncoincident, expect zone Des Cooling Air Flow to be sum of space flows = 0.058 + 0.065 + 0.056 = 0.179 - // Spaces peak on same day, so expect zone peak time to be the same as coincident sizing - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); - EXPECT_EQ("2583.29", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); - EXPECT_EQ("0.179", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("0.179", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); } -TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) -// Spaces peak on different days +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident1) { + // Spaces peak on same day std::string const idf_objects = delimited_string({ " Timestep,6;", @@ -1461,7 +1522,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " No; !- Run Simulation for Weather File Run Periods", " SizingPeriod:DesignDay,", - " CHICAGO_IL_USA July Cooling 1% Design Conditions DB/MCWB, !- Name", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", " 7, !- Month", " 21, !- Day of Month", " SummerDesignDay, !- Day Type", @@ -1488,62 +1549,6 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", " 1.0; !- Sky Clearness", - " SizingPeriod:DesignDay,", - " CHICAGO_IL_USA August Cooling 1% Design Conditions DB/MCWB, !- Name", - " 8, !- Month", - " 21, !- Day of Month", - " SummerDesignDay, !- Day Type", - " 31.5, !- Maximum Dry-Bulb Temperature {C}", - " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", - " , !- Dry-Bulb Temperature Range Modifier Type", - " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", - " Wetbulb, !- Humidity Condition Type", - " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", - " , !- Humidity Condition Day Schedule Name", - " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", - " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", - " , !- Daily Wet-Bulb Temperature Range {deltaC}", - " 99063., !- Barometric Pressure {Pa}", - " 5.3, !- Wind Speed {m/s}", - " 230, !- Wind Direction {deg}", - " No, !- Rain Indicator", - " No, !- Snow Indicator", - " No, !- Daylight Saving Time Indicator", - " ASHRAEClearSky, !- Solar Model Indicator", - " , !- Beam Solar Day Schedule Name", - " , !- Diffuse Solar Day Schedule Name", - " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", - " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", - " 1.0; !- Sky Clearness", - - " SizingPeriod:DesignDay,", - " CHICAGO_IL_USA September Cooling 1% Design Conditions DB/MCWB, !- Name", - " 9, !- Month", - " 21, !- Day of Month", - " SummerDesignDay, !- Day Type", - " 31.5, !- Maximum Dry-Bulb Temperature {C}", - " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", - " , !- Dry-Bulb Temperature Range Modifier Type", - " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", - " Wetbulb, !- Humidity Condition Type", - " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", - " , !- Humidity Condition Day Schedule Name", - " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", - " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", - " , !- Daily Wet-Bulb Temperature Range {deltaC}", - " 99063., !- Barometric Pressure {Pa}", - " 5.3, !- Wind Speed {m/s}", - " 230, !- Wind Direction {deg}", - " No, !- Rain Indicator", - " No, !- Snow Indicator", - " No, !- Daylight Saving Time Indicator", - " ASHRAEClearSky, !- Solar Model Indicator", - " , !- Beam Solar Day Schedule Name", - " , !- Diffuse Solar Day Schedule Name", - " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", - " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", - " 1.0; !- Sky Clearness", - " ZoneControl:Thermostat,", " Zone 1 Thermostat, !- Name", " Zone 1, !- Zone or ZoneList Name", @@ -1642,7 +1647,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " 0, !- Y Origin {m}", " 0, !- Z Origin {m}", " 1, !- Type", - " 1, !- Multiplier", + " 10, !- Multiplier", " 3.048, !- Ceiling Height {m}", " 40.; !- Volume {m3}", @@ -1816,9 +1821,9 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " ElectricEquipment,", " Space 1 ElecEq, !- Name", " Space 1, !- Zone or ZoneList Name", - " July Morning, !- Schedule Name", + " Morning, !- Schedule Name", " EquipmentLevel, !- Design Level Calculation Method", - " 5000.0, !- Design Level {W}", + " 500.0, !- Design Level {W}", " , !- Watts per Zone Floor Area {W/m2}", " , !- Watts per Person {W/person}", " 0, !- Fraction Latent", @@ -1826,26 +1831,20 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " 0; !- Fraction Lost", " Schedule:Compact,", - " July Morning, !- Name", + " Morning, !- Name", " , !- Schedule Type Limits Name", - " Through: 6/30, !- Field 9", - " For: Alldays, !- Field 10", - " Until: 24:00,0.0, !- Field 11", - " Through: 7/31, !- Field 9", + " Through: 12/31, !- Field 9", " For: Alldays, !- Field 10", " Until: 8:00,0.0, !- Field 11", " Until: 12:00,1.0, !- Field 11", - " Until: 24:00,0.0, !- Field 11", - " Through: 12/31, !- Field 9", - " For: Alldays, !- Field 10", " Until: 24:00,0.0; !- Field 11", " ElectricEquipment,", " Space 2 ElecEq, !- Name", " Space 2, !- Zone or ZoneList Name", - " August Afternoon, !- Schedule Name", + " Afternoon, !- Schedule Name", " EquipmentLevel, !- Design Level Calculation Method", - " 10000.0, !- Design Level {W}", + " 1000.0, !- Design Level {W}", " , !- Watts per Zone Floor Area {W/m2}", " , !- Watts per Person {W/person}", " 0, !- Fraction Latent", @@ -1853,26 +1852,20 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " 0; !- Fraction Lost", " Schedule:Compact,", - " August Afternoon, !- Name", + " Afternoon, !- Name", " , !- Schedule Type Limits Name", - " Through: 7/31, !- Field 9", - " For: Alldays, !- Field 10", - " Until: 24:00,0.0, !- Field 11", - " Through: 8/31, !- Field 9", + " Through: 12/31, !- Field 9", " For: Alldays, !- Field 10", " Until: 12:00,0.0, !- Field 11", " Until: 16:00,1.0, !- Field 11", - " Until: 24:00,0.0, !- Field 11", - " Through: 12/31, !- Field 9", - " For: Alldays, !- Field 10", " Until: 24:00,0.0; !- Field 11", " ElectricEquipment,", " Space 3 ElecEq, !- Name", " Space 3, !- Zone or ZoneList Name", - " September Evening, !- Schedule Name", + " Evening, !- Schedule Name", " EquipmentLevel, !- Design Level Calculation Method", - " 7500.0, !- Design Level {W}", + " 750.0, !- Design Level {W}", " , !- Watts per Zone Floor Area {W/m2}", " , !- Watts per Person {W/person}", " 0, !- Fraction Latent", @@ -1880,18 +1873,12 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) " 0; !- Fraction Lost", " Schedule:Compact,", - " September Evening, !- Name", + " Evening, !- Name", " , !- Schedule Type Limits Name", - " Through: 8/31, !- Field 9", - " For: Alldays, !- Field 10", - " Until: 24:00,0.0, !- Field 11", - " Through: 9/30, !- Field 9", - " For: Alldays, !- Field 10", - " Until: 16:00,0.0, !- Field 11", - " Until: 20:00,1.0, !- Field 11", - " Until: 24:00,0.0, !- Field 11", " Through: 12/31, !- Field 9", " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", " Until: 24:00,0.0; !- Field 11", "ZoneAirHeatBalanceAlgorithm,", @@ -1910,48 +1897,2395 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); - EXPECT_EQ("4165.02", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); - EXPECT_EQ("0.289", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); - EXPECT_EQ("0.289", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); - EXPECT_EQ("CHICAGO_IL_USA JULY COOLING 1% DESIGN CONDITIONS DB/MCWB", + EXPECT_EQ("8324.40", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.578", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.578", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); - EXPECT_EQ("7/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); - EXPECT_EQ("7725.80", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); - EXPECT_EQ("0.536", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); - EXPECT_EQ("0.536", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); - EXPECT_EQ("CHICAGO_IL_USA AUGUST COOLING 1% DESIGN CONDITIONS DB/MCWB", + EXPECT_EQ("9402.01", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); - EXPECT_EQ("8/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); - EXPECT_EQ("5826.87", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); - EXPECT_EQ("0.404", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); - EXPECT_EQ("0.404", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); - EXPECT_EQ("CHICAGO_IL_USA SEPTEMBER COOLING 1% DESIGN CONDITIONS DB/MCWB", + EXPECT_EQ("8106.47", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); - EXPECT_EQ("9/21 20:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); - // For noncoincident, expect zone Des Cooling Load to be sum of space loads = 4165.02 + 7725.80 + 5826.87 = 17717.69 - // For noncoincident, expect zone Des Cooling Air Flow to be sum of space flows = 0.289 + 0.536 + 0.404 = 1.229 - // Spaces peak on same day, so expect zone peak time to be the different coincident sizing, and day to be "N/A" + // For noncoincident, expect zone Des Cooling Load to be sum of space loads = 832.44 + 940.2 + 810.65 = 2583.29 + // For noncoincident, expect zone Des Cooling Air Flow to be sum of space flows = 0.058 + 0.065 + 0.056 = 0.179 + // Spaces peak on same day, so expect zone peak time to be the same as coincident sizing EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); - EXPECT_EQ("17717.69", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); - EXPECT_EQ("1.230", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("1.230", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); - EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); - EXPECT_EQ("16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); + EXPECT_EQ("25832.88", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.793", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.793", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_NonCoincident2) +// Spaces peak on different days +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA July Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA August Cooling 1% Design Conditions DB/MCWB, !- Name", + " 8, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA September Cooling 1% Design Conditions DB/MCWB, !- Name", + " 9, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " , !- Zone Load Sizing Method", + " , !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " , !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " NonCoincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 10, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " ZONE 1 INLETS, !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ZONE 1 OUTLET; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:IdealLoadsAirSystem, !- Zone Equipment 1 Object Type", + " ZONE 1 Ideal Loads, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:IdealLoadsAirSystem,", + " ZONE 1 Ideal Loads, !- Name", + " , !- Availability Schedule Name", + " ZONE 1 INLETS, !- Zone Supply Air Node Name", + " , !- Zone Exhaust Air Node Name", + " , !- System Inlet Air Node Name", + " 50, !- Maximum Heating Supply Air Temperature {C}", + " 13, !- Minimum Cooling Supply Air Temperature {C}", + " 0.015, !- Maximum Heating Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.009, !- Minimum Cooling Supply Air Humidity Ratio {kgWater/kgDryAir}", + " NoLimit, !- Heating Limit", + " autosize, !- Maximum Heating Air Flow Rate {m3/s}", + " , !- Maximum Sensible Heating Capacity {W}", + " NoLimit, !- Cooling Limit", + " autosize, !- Maximum Cooling Air Flow Rate {m3/s}", + " , !- Maximum Total Cooling Capacity {W}", + " , !- Heating Availability Schedule Name", + " , !- Cooling Availability Schedule Name", + " ConstantSupplyHumidityRatio, !- Dehumidification Control Type", + " , !- Cooling Sensible Heat Ratio {dimensionless}", + " ConstantSupplyHumidityRatio, !- Humidification Control Type", + " , !- Design Specification Outdoor Air Object Name", + " , !- Outdoor Air Inlet Node Name", + " , !- Demand Controlled Ventilation Type", + " , !- Outdoor Air Economizer Type", + " , !- Heat Recovery Type", + " , !- Sensible Heat Recovery Effectiveness {dimensionless}", + " ; !- Latent Heat Recovery Effectiveness {dimensionless}", + + " NodeList,", + " ZONE 1 INLETS, !- Name", + " ZONE 1 INLET; !- Node 1 Name", + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " July Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 5000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " July Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 6/30, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 7/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " August Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 10000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " August Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 7/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 8/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " September Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 7500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " September Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 8/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 9/30, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("41650.19", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("2.891", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("2.891", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA JULY COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("77258.02", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("5.362", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("5.362", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA AUGUST COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("8/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("58268.65", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("4.044", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("4.044", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA SEPTEMBER COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("9/21 20:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For noncoincident, expect zone Des Cooling Load to be sum of space loads = 4165.02 + 7725.80 + 5826.87 = 17717.69 + // For noncoincident, expect zone Des Cooling Air Flow to be sum of space flows = 0.289 + 0.536 + 0.404 = 1.229 + // Spaces peak on same day, so expect zone peak time to be the different coincident sizing, and day to be "N/A" + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.0", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("177176.86", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("12.297", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("12.297", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("N/A", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_1x_NoLatent) +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -17.3, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " Sensible Load, !- Zone Load Sizing Method", + " HumidityRatioDifference, !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " HumidityRatioDifference, !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " Coincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 1, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " , !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:Baseboard:RadiantConvective:Electric, !- Zone Equipment 1 Object Type", + " ZONE 1 Baseboard, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:Baseboard:RadiantConvective:Electric,", + " Zone 1 Baseboard, !- Name", + " , !- Availability Schedule Name", + " HeatingDesignCapacity, !- Heating Design Capacity Method", + " autosize, !- Heating Design Capacity {W}", + " , !- Heating Design Capacity Per Floor Area {W/m2}", + " , !- Fraction of Autosized Heating Design Capacity", + " 0.97, !- Efficiency", + " 0.2, !- Fraction Radiant", + " 0.3, !- Fraction of Radiant Energy Incident on People", + " Zn001:Wall001, !- Surface 1 Name", + " 0.7; !- Fraction of Radiant Energy to Surface 1", + + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " ElectricEquipment,", + " Space 1 Latent ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 1.0, !- Fraction Latent", + " 0.0, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 750.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("1898.77", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.053", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.053", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("832.44", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.058", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("631.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("940.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.065", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("631.20", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.018", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("810.65", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.056", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("3155.31", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.088", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.088", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("1942.36", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.135", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.135", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_NoLatent) +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -17.3, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " Sensible Load, !- Zone Load Sizing Method", + " HumidityRatioDifference, !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " HumidityRatioDifference, !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " Coincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 10, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " , !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:Baseboard:RadiantConvective:Electric, !- Zone Equipment 1 Object Type", + " ZONE 1 Baseboard, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:Baseboard:RadiantConvective:Electric,", + " Zone 1 Baseboard, !- Name", + " , !- Availability Schedule Name", + " HeatingDesignCapacity, !- Heating Design Capacity Method", + " autosize, !- Heating Design Capacity {W}", + " , !- Heating Design Capacity Per Floor Area {W/m2}", + " , !- Fraction of Autosized Heating Design Capacity", + " 0.97, !- Efficiency", + " 0.2, !- Fraction Radiant", + " 0.3, !- Fraction of Radiant Energy Incident on People", + " Zn001:Wall001, !- Surface 1 Name", + " 0.7; !- Fraction of Radiant Energy to Surface 1", + + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " ElectricEquipment,", + " Space 1 Latent ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 1.0, !- Fraction Latent", + " 0.0, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 750.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("18987.69", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("8324.40", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.578", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.578", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 17:30:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("9402.01", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("8106.47", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_NoLatent_NoSpaceHB) +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -17.3, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " Sensible Load, !- Zone Load Sizing Method", + " HumidityRatioDifference, !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " HumidityRatioDifference, !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " Coincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 10, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " , !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:Baseboard:RadiantConvective:Electric, !- Zone Equipment 1 Object Type", + " ZONE 1 Baseboard, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:Baseboard:RadiantConvective:Electric,", + " Zone 1 Baseboard, !- Name", + " , !- Availability Schedule Name", + " HeatingDesignCapacity, !- Heating Design Capacity Method", + " autosize, !- Heating Design Capacity {W}", + " , !- Heating Design Capacity Per Floor Area {W/m2}", + " , !- Fraction of Autosized Heating Design Capacity", + " 0.97, !- Efficiency", + " 0.2, !- Fraction Radiant", + " 0.3, !- Fraction of Radiant Energy Incident on People", + " Zn001:Wall001, !- Surface 1 Name", + " 0.7; !- Fraction of Radiant Energy to Surface 1", + + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " ElectricEquipment,", + " Space 1 Latent ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 1.0, !- Fraction Latent", + " 0.0, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 750.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "No, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); +} +TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_SpaceHB) +{ + std::string const idf_objects = delimited_string({ + " Timestep,6;", + + " Site:Location,", + " CHICAGO_IL_USA TMY2-94846, !- Name", + " 41.78, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190.00; !- Elevation {m}", + + " SimulationControl,", + " Yes, !- Do Zone Sizing Calculation", + " No, !- Do System Sizing Calculation", + " No, !- Do Plant Sizing Calculation", + " No, !- Run Simulation for Sizing Periods", + " No; !- Run Simulation for Weather File Run Periods", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Heating 99% Design Conditions DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -17.3, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -17.3, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.0; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO_IL_USA Annual Cooling 1% Design Conditions DB/MCWB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.5, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 23.0, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud){dimensionless}", + " 1.0; !- Sky Clearness", + + " ZoneControl:Thermostat,", + " Zone 1 Thermostat, !- Name", + " Zone 1, !- Zone or ZoneList Name", + " Zone Control Type Sched, !- Control Type Schedule Name", + " ThermostatSetpoint:DualSetpoint, !- Control 1 Object Type", + " Dual Setpoint with SB; !- Control 1 Name", + + " Schedule:Compact,", + " ZONE CONTROL TYPE SCHED, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,4; !- Field 11", + + " ThermostatSetpoint:DualSetpoint,", + " Dual Setpoint with SB,!- Name", + " Heating Setpoints, !- Setpoint Temperature Schedule Name", + " Cooling Setpoints; !- Setpoint Temperature Schedule Name", + + " Schedule:Compact,", + " HEATING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,15.00, !- Field 3", + " Until: 17:00,20.00, !- Field 5", + " Until: 24:00,15.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,15.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,20.00; !- Field 13", + + " Schedule:Compact,", + " COOLING SETPOINTS, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: Weekdays Weekends Holidays CustomDay1 CustomDay2, !- Field 2", + " Until: 7:00,30.00, !- Field 3", + " Until: 17:00,24.00, !- Field 5", + " Until: 24:00,30.00, !- Field 7", + " For: SummerDesignDay, !- Field 9", + " Until: 24:00,24.00, !- Field 10", + " For: WinterDesignDay, !- Field 12", + " Until: 24:00,50.00; !- Field 13", + + " Sizing:Zone,", + " Zone 1, !- Zone or ZoneList Name", + " SupplyAirTemperature, !- Zone Cooling Design Supply Air Temperature Input Method", + " 12., !- Zone Cooling Design Supply Air Temperature {C}", + " , !- Zone Cooling Design Supply Air Temperature Difference {deltaC}", + " SupplyAirTemperature, !- Zone Heating Design Supply Air Temperature Input Method", + " 50., !- Zone Heating Design Supply Air Temperature {C}", + " , !- Zone Heating Design Supply Air Temperature Difference {deltaC}", + " 0.008, !- Zone Cooling Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.008, !- Zone Heating Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " SZ DSOA West Zone, !- Design Specification Outdoor Air Object Name", + " 1.0, !- Zone Heating Sizing Factor", + " 1.0, !- Zone Cooling Sizing Factor", + " DesignDay, !- Cooling Design Air Flow Method", + " 0, !- Cooling Design Air Flow Rate {m3/s}", + " , !- Cooling Minimum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Cooling Minimum Air Flow {m3/s}", + " , !- Cooling Minimum Air Flow Fraction", + " DesignDay, !- Heating Design Air Flow Method", + " 0, !- Heating Design Air Flow Rate {m3/s}", + " , !- Heating Maximum Air Flow per Zone Floor Area {m3/s-m2}", + " , !- Heating Maximum Air Flow {m3/s}", + " , !- Heating Maximum Air Flow Fraction", + " , !- Design Specification Zone Air Distribution Object Name", + " No, !- Account for Dedicated Outdoor Air System", + " NeutralSupplyAir, !- Dedicated Outdoor Air System Control Strategy", + " autosize, !- Dedicated Outdoor Air Low Setpoint Temperature for Design {C}", + " autosize, !- Dedicated Outdoor Air High Setpoint Temperature for Design {C}", + " Sensible And Latent Load, !- Zone Load Sizing Method", + " HumidityRatioDifference, !- Zone Latent Cooling Design Supply Air Humidity Ratio Input Method", + " , !- Zone Dehumidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Cooling Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " HumidityRatioDifference, !- Zone Latent Heating Design Supply Air Humidity Ratio Input Method", + " , !- Zone Humidification Design Supply Air Humidity Ratio {kgWater/kgDryAir}", + " 0.005, !- Zone Humidification Design Supply Air Humidity Ratio Difference {kgWater/kgDryAir}", + " , !- Zone Humidistat Dehumidification Set Point Schedule Name {percent}", + " , !- Zone Humidistat Humidification Set Point Schedule Name {percent}", + " Coincident; !- Type of Space Sum to Use", + + " DesignSpecification:OutdoorAir,", + " SZ DSOA West Zone, !- Name", + " flow/person, !- Outdoor Air Method", + " 0.00944, !- Outdoor Air Flow per Person {m3/s-person}", + " 0.0, !- Outdoor Air Flow per Zone Floor Area {m3/s-m2}", + " 0.0; !- Outdoor Air Flow per Zone {m3/s}", + + " Zone,", + " Zone 1, !- Name", + " 0, !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 10, !- Multiplier", + " 3.048, !- Ceiling Height {m}", + " 40.; !- Volume {m3}", + + " BuildingSurface:Detailed,", + " Zn001:Wall001, !- Name", + " Wall, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,0,3.048000, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 6.096000,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 6.096000,0,3.048000; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor001, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 1, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor002, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 2, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " BuildingSurface:Detailed,", + " Zn001:Floor003, !- Name", + " Floor, !- Surface Type", + " EXTWALL80, !- Construction Name", + " Zone 1, !- Zone Name", + " Space 3, !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " SunExposed, !- Sun Exposure", + " WindExposed, !- Wind Exposure", + " 0.5000000, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 0,5,0, !- X,Y,Z ==> Vertex 1 {m}", + " 0,0,0, !- X,Y,Z ==> Vertex 2 {m}", + " 3,0,0, !- X,Y,Z ==> Vertex 3 {m}", + " 3,5,0; !- X,Y,Z ==> Vertex 4 {m}", + + " Material,", + " A1 - 1 IN STUCCO, !- Name", + " Smooth, !- Roughness", + " 2.5389841E-02, !- Thickness {m}", + " 0.6918309, !- Conductivity {W/m-K}", + " 1858.142, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Material,", + " C4 - 4 IN COMMON BRICK, !- Name", + " Rough, !- Roughness", + " 0.1014984, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1922.216, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.7600000, !- Solar Absorptance", + " 0.7600000; !- Visible Absorptance", + + " Material,", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD, !- Name", + " Smooth, !- Roughness", + " 1.9050000E-02, !- Thickness {m}", + " 0.7264224, !- Conductivity {W/m-K}", + " 1601.846, !- Density {kg/m3}", + " 836.8000, !- Specific Heat {J/kg-K}", + " 0.9000000, !- Thermal Absorptance", + " 0.9200000, !- Solar Absorptance", + " 0.9200000; !- Visible Absorptance", + + " Construction,", + " EXTWALL80, !- Name", + " A1 - 1 IN STUCCO, !- Outside Layer", + " C4 - 4 IN COMMON BRICK, !- Layer 2", + " E1 - 3 / 4 IN PLASTER OR GYP BOARD; !- Layer 3", + + " ZoneHVAC:EquipmentConnections,", + " Zone 1, !- Zone Name", + " ZONE 1 EQUIPMENT, !- Zone Conditioning Equipment List Name", + " , !- Zone Air Inlet Node or NodeList Name", + " , !- Zone Air Exhaust Node or NodeList Name", + " ZONE 1 NODE, !- Zone Air Node Name", + " ; !- Zone Return Air Node or NodeList Name", + + " ZoneHVAC:EquipmentList,", + " ZONE 1 EQUIPMENT, !- Name", + " SequentialLoad, !- Load Distribution Scheme", + " ZoneHVAC:Baseboard:RadiantConvective:Electric, !- Zone Equipment 1 Object Type", + " ZONE 1 Baseboard, !- Zone Equipment 1 Name", + " 1, !- Zone Equipment 1 Cooling Sequence", + " 1, !- Zone Equipment 1 Heating or No-Load Sequence", + " , !- Zone Equipment 1 Sequential Cooling Load Fraction", + " ; !- Zone Equipment 1 Sequential Heating Load Fraction", + + " ZoneHVAC:Baseboard:RadiantConvective:Electric,", + " Zone 1 Baseboard, !- Name", + " , !- Availability Schedule Name", + " HeatingDesignCapacity, !- Heating Design Capacity Method", + " autosize, !- Heating Design Capacity {W}", + " , !- Heating Design Capacity Per Floor Area {W/m2}", + " , !- Fraction of Autosized Heating Design Capacity", + " 0.97, !- Efficiency", + " 0.2, !- Fraction Radiant", + " 0.3, !- Fraction of Radiant Energy Incident on People", + " Zn001:Wall001, !- Surface 1 Name", + " 0.7; !- Fraction of Radiant Energy to Surface 1", + + "Space,", + "Space 1, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 2, !- Name", + "Zone 1; !- Zone Name", + "Space,", + "Space 3, !- Name", + "Zone 1; !- Zone Name", + + " ElectricEquipment,", + " Space 1 ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 500.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " ElectricEquipment,", + " Space 1 Latent ElecEq, !- Name", + " Space 1, !- Zone or ZoneList Name", + " Morning, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 1.0, !- Fraction Latent", + " 0.0, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Morning, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 2 ElecEq, !- Name", + " Space 2, !- Zone or ZoneList Name", + " Afternoon, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 1000.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Afternoon, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 12:00,0.0, !- Field 11", + " Until: 16:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + " ElectricEquipment,", + " Space 3 ElecEq, !- Name", + " Space 3, !- Zone or ZoneList Name", + " Evening, !- Schedule Name", + " EquipmentLevel, !- Design Level Calculation Method", + " 750.0, !- Design Level {W}", + " , !- Watts per Zone Floor Area {W/m2}", + " , !- Watts per Person {W/person}", + " 0, !- Fraction Latent", + " 0.3000000, !- Fraction Radiant", + " 0; !- Fraction Lost", + + " Schedule:Compact,", + " Evening, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 16:00,0.0, !- Field 11", + " Until: 20:00,1.0, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + + "ZoneAirHeatBalanceAlgorithm,", + "ThirdOrderBackwardDifference, !- Algorithm", + "Yes, !- Do Space Heat Balance for Sizing", + "No; !- Do Space Heat Balance for Simulation", + " Output:Table:SummaryReports,", + " AllSummary; !- Report Name 1", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::ManageSimulation(*state); + + EXPECT_EQ("18987.69", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); + EXPECT_EQ("10000.00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); + EXPECT_EQ("0.669", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.669", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); + EXPECT_EQ("7/21 09:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + + EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 2")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 2")); + EXPECT_EQ("9402.01", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 2")); + EXPECT_EQ("0.653", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 2")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 2")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 2")); + + EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 3")); + EXPECT_EQ("1/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 3")); + EXPECT_EQ("8106.47", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 3")); + EXPECT_EQ("0.563", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 3")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 3")); + EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); + + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); + + // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 + EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); + EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); + EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", + OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); + EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); } From d285a497d92c2a7b0d596dd2c63f584eb9abf744 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Wed, 4 Sep 2024 15:48:30 -0500 Subject: [PATCH 21/24] Space IV.5 - Attempt to fix linux unit test failure --- tst/EnergyPlus/unit/SizingManager.unit.cc | 27 ++++++----------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/tst/EnergyPlus/unit/SizingManager.unit.cc b/tst/EnergyPlus/unit/SizingManager.unit.cc index b139e5737b2..a38b05fbe10 100644 --- a/tst/EnergyPlus/unit/SizingManager.unit.cc +++ b/tst/EnergyPlus/unit/SizingManager.unit.cc @@ -4166,6 +4166,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ " Through: 12/31, !- Field 9", " For: Alldays, !- Field 10", " Until: 8:00,0.0, !- Field 11", + " Until: 9:00,0.5, !- Field 11", " Until: 12:00,1.0, !- Field 11", " Until: 24:00,0.0; !- Field 11", @@ -4222,7 +4223,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ ASSERT_TRUE(process_idf(idf_objects)); SimulationManager::ManageSimulation(*state); - EXPECT_EQ("18987.69", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); + EXPECT_EQ("18989.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", @@ -4233,7 +4234,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ EXPECT_EQ("0.669", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); - EXPECT_EQ("7/21 09:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + EXPECT_EQ("7/21 10:20:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); @@ -4262,29 +4263,15 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ EXPECT_EQ("7/21 19:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 3")); // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 - EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); + EXPECT_EQ("31554.59", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); - EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); - EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); - EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", - OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); - EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); - - // For coincident, expect zone Des Cooling Load to be less than sum of space loads which is 832.44 + 940.2 + 810.65 = 2583.29 - EXPECT_EQ("31553.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesLd, "ZONE 1")); - EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("0.876", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtUserDesAirFlow, "ZONE 1")); - EXPECT_EQ("CHICAGO_IL_USA ANNUAL HEATING 99% DESIGN CONDITIONS DB", - OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtDesDay, "ZONE 1")); - EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnHtPkTime, "ZONE 1")); - EXPECT_EQ("19423.64", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); - EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); - EXPECT_EQ("1.348", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); + EXPECT_EQ("19406.72", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesLd, "ZONE 1")); + EXPECT_EQ("1.347", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClCalcDesAirFlow, "ZONE 1")); + EXPECT_EQ("1.347", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClUserDesAirFlow, "ZONE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClDesDay, "ZONE 1")); EXPECT_EQ("7/21 16:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchZnClPkTime, "ZONE 1")); From d7e4539d5cfed69d1f854d0814ff3d340210a638 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Thu, 5 Sep 2024 12:33:09 -0500 Subject: [PATCH 22/24] Space IV.5 - Attempt to debug linux unit test failure --- tst/EnergyPlus/unit/SizingManager.unit.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tst/EnergyPlus/unit/SizingManager.unit.cc b/tst/EnergyPlus/unit/SizingManager.unit.cc index a38b05fbe10..f54992def5c 100644 --- a/tst/EnergyPlus/unit/SizingManager.unit.cc +++ b/tst/EnergyPlus/unit/SizingManager.unit.cc @@ -4223,6 +4223,17 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ ASSERT_TRUE(process_idf(idf_objects)); SimulationManager::ManageSimulation(*state); + int space1Num = 1; + int curSimDay = 1; + auto &calSpSiz = state->dataSize->CalcSpaceSizing(curSimDay, space1Num); + + EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(57), 7500.00, 0.01); + EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(58), 8333.33, 0.01); + EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(59), 9166.66, 0.01); + EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(60), 10000.00, 0.01); + EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(61), 10000.00, 0.01); + EXPECT_TRUE(calSpSiz.LatentCoolLoadSeq(60) > calSpSiz.LatentCoolLoadSeq(59)); + EXPECT_TRUE(calSpSiz.LatentCoolLoadSeq(61) == calSpSiz.LatentCoolLoadSeq(60)); EXPECT_EQ("18989.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); From c2616e65010c7c11493eb0c99df34327e8c20649 Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Fri, 6 Sep 2024 15:58:32 -0500 Subject: [PATCH 23/24] Space IV.5 - Another attempt to fix linux unit test failure --- tst/EnergyPlus/unit/SizingManager.unit.cc | 29 +++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tst/EnergyPlus/unit/SizingManager.unit.cc b/tst/EnergyPlus/unit/SizingManager.unit.cc index f54992def5c..2afef565ac3 100644 --- a/tst/EnergyPlus/unit/SizingManager.unit.cc +++ b/tst/EnergyPlus/unit/SizingManager.unit.cc @@ -4151,7 +4151,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ " ElectricEquipment,", " Space 1 Latent ElecEq, !- Name", " Space 1, !- Zone or ZoneList Name", - " Morning, !- Schedule Name", + " Morning2, !- Schedule Name", " EquipmentLevel, !- Design Level Calculation Method", " 1000.0, !- Design Level {W}", " , !- Watts per Zone Floor Area {W/m2}", @@ -4170,6 +4170,18 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ " Until: 12:00,1.0, !- Field 11", " Until: 24:00,0.0; !- Field 11", + " Schedule:Compact,", + " Morning2, !- Name", + " , !- Schedule Type Limits Name", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 8:00,0.0, !- Field 11", + " Until: 9:00,0.5, !- Field 11", + " Until: 11:00,0.8, !- Field 11", + " Until: 12:00,1.0, !- Field 11", + " Until: 13:00,0.9, !- Field 11", + " Until: 24:00,0.0; !- Field 11", + " ElectricEquipment,", " Space 2 ElecEq, !- Name", " Space 2, !- Zone or ZoneList Name", @@ -4224,16 +4236,9 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ SimulationManager::ManageSimulation(*state); int space1Num = 1; - int curSimDay = 1; - auto &calSpSiz = state->dataSize->CalcSpaceSizing(curSimDay, space1Num); - - EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(57), 7500.00, 0.01); - EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(58), 8333.33, 0.01); - EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(59), 9166.66, 0.01); - EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(60), 10000.00, 0.01); - EXPECT_NEAR(calSpSiz.LatentCoolLoadSeq(61), 10000.00, 0.01); - EXPECT_TRUE(calSpSiz.LatentCoolLoadSeq(60) > calSpSiz.LatentCoolLoadSeq(59)); - EXPECT_TRUE(calSpSiz.LatentCoolLoadSeq(61) == calSpSiz.LatentCoolLoadSeq(60)); + auto &calFinalSpSiz = state->dataSize->CalcFinalSpaceSizing(space1Num); + EXPECT_EQ(calFinalSpSiz.TimeStepNumAtLatentCoolMax, 72); + EXPECT_EQ("18989.14", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 1")); EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 1")); EXPECT_EQ("0.527", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtUserDesAirFlow, "SPACE 1")); @@ -4245,7 +4250,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ EXPECT_EQ("0.669", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); - EXPECT_EQ("7/21 10:20:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); + EXPECT_EQ("7/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1")); EXPECT_EQ("6311.95", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesLd, "SPACE 2")); EXPECT_EQ("0.175", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtCalcDesAirFlow, "SPACE 2")); From ece50b96ee37dffd695fe30f09751e614373f3fa Mon Sep 17 00:00:00 2001 From: "Michael J. Witte" Date: Sat, 7 Sep 2024 07:01:39 -0500 Subject: [PATCH 24/24] Space IV.5 - YAA to get win and linux/Mac to agree --- tst/EnergyPlus/unit/SizingManager.unit.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tst/EnergyPlus/unit/SizingManager.unit.cc b/tst/EnergyPlus/unit/SizingManager.unit.cc index 2afef565ac3..3c85f995a1c 100644 --- a/tst/EnergyPlus/unit/SizingManager.unit.cc +++ b/tst/EnergyPlus/unit/SizingManager.unit.cc @@ -4151,7 +4151,7 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ " ElectricEquipment,", " Space 1 Latent ElecEq, !- Name", " Space 1, !- Zone or ZoneList Name", - " Morning2, !- Schedule Name", + " SummerMorning2, !- Schedule Name", " EquipmentLevel, !- Design Level Calculation Method", " 1000.0, !- Design Level {W}", " , !- Watts per Zone Floor Area {W/m2}", @@ -4171,15 +4171,21 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ " Until: 24:00,0.0; !- Field 11", " Schedule:Compact,", - " Morning2, !- Name", + " SummerMorning2, !- Name", " , !- Schedule Type Limits Name", - " Through: 12/31, !- Field 9", + " Through: 5/31, !- Field 9", + " For: Alldays, !- Field 10", + " Until: 24:00,0.0, !- Field 11", + " Through: 9/30, !- Field 9", " For: Alldays, !- Field 10", " Until: 8:00,0.0, !- Field 11", " Until: 9:00,0.5, !- Field 11", - " Until: 11:00,0.8, !- Field 11", + " Until: 11:00,0.8, !- Field 11", " Until: 12:00,1.0, !- Field 11", " Until: 13:00,0.9, !- Field 11", + " Until: 24:00,0.0, !- Field 11", + " Through: 12/31, !- Field 9", + " For: Alldays, !- Field 10", " Until: 24:00,0.0; !- Field 11", " ElectricEquipment,", @@ -4246,8 +4252,8 @@ TEST_F(EnergyPlusFixture, SizingManager_ZoneSizing_Coincident_NonAir_10x_Latent_ OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtDesDay, "SPACE 1")); EXPECT_EQ("1/21 08:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpHtPkTime, "SPACE 1")); EXPECT_EQ("10000.00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesLd, "SPACE 1")); - EXPECT_EQ("0.669", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); - EXPECT_EQ("0.669", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.667", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClCalcDesAirFlow, "SPACE 1")); + EXPECT_EQ("0.667", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClUserDesAirFlow, "SPACE 1")); EXPECT_EQ("CHICAGO_IL_USA ANNUAL COOLING 1% DESIGN CONDITIONS DB/MCWB", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClDesDay, "SPACE 1")); EXPECT_EQ("7/21 12:00:00", OutputReportPredefined::RetrievePreDefTableEntry(*state, state->dataOutRptPredefined->pdchSpClPkTime, "SPACE 1"));