diff --git a/src/EnergyPlus/OutputReportTabularAnnual.cc b/src/EnergyPlus/OutputReportTabularAnnual.cc index 8595bb1f2ad..d67464716a3 100644 --- a/src/EnergyPlus/OutputReportTabularAnnual.cc +++ b/src/EnergyPlus/OutputReportTabularAnnual.cc @@ -463,8 +463,9 @@ void AnnualTable::gatherForTimestep(EnergyPlusData &state, OutputProcessor::Time case AnnualFieldSet::AggregationKind::hoursInTenBinsPlusMinusTwoStdDev: case AnnualFieldSet::AggregationKind::hoursInTenBinsPlusMinusThreeStdDev: // for all of the binning options add the value to the deferred - if (fldStIt->m_varAvgSum == OutputProcessor::StoreType::Sum) { // if it is a summed variable - fldStIt->m_cell[row].deferredResults.push_back(curValue /= secondsInTimeStep); // divide by time just like max and min + if (fldStIt->m_varAvgSum == OutputProcessor::StoreType::Sum) { // if it is a summed variable + const Real64 curValueRate = curValue / secondsInTimeStep; // divide by time just like max and min + fldStIt->m_cell[row].deferredResults.push_back(curValueRate); } else { fldStIt->m_cell[row].deferredResults.push_back(curValue); } @@ -613,9 +614,9 @@ Real64 AnnualTable::getElapsedTime(EnergyPlusData &state, OutputProcessor::TimeS { Real64 elapsedTime; if (kindOfTimeStep == OutputProcessor::TimeStepType::Zone) { - elapsedTime = state.dataHVACGlobal->TimeStepSys; - } else { elapsedTime = state.dataGlobal->TimeStepZone; + } else { + elapsedTime = state.dataHVACGlobal->TimeStepSys; } return elapsedTime; } @@ -624,9 +625,9 @@ Real64 AnnualTable::getSecondsInTimeStep(EnergyPlusData &state, OutputProcessor: { Real64 secondsInTimeStep; if (kindOfTimeStep == OutputProcessor::TimeStepType::Zone) { - secondsInTimeStep = state.dataHVACGlobal->TimeStepSysSec; - } else { secondsInTimeStep = state.dataGlobal->TimeStepZoneSec; + } else { + secondsInTimeStep = state.dataHVACGlobal->TimeStepSysSec; } return secondsInTimeStep; } diff --git a/tst/EnergyPlus/unit/OutputReportTabularAnnual.unit.cc b/tst/EnergyPlus/unit/OutputReportTabularAnnual.unit.cc index 850e845189f..89da7d10f50 100644 --- a/tst/EnergyPlus/unit/OutputReportTabularAnnual.unit.cc +++ b/tst/EnergyPlus/unit/OutputReportTabularAnnual.unit.cc @@ -305,6 +305,7 @@ TEST_F(EnergyPlusFixture, OutputReportTabularAnnual_GatherResults_MinMaxHrsShown { using namespace OutputProcessor; state->dataGlobal->TimeStepZone = 1.0; + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * Constant::rSecsInHour; state->dataHVACGlobal->TimeStepSys = 1.0; state->dataHVACGlobal->TimeStepSysSec = state->dataHVACGlobal->TimeStepSys * Constant::rSecsInHour; @@ -348,6 +349,37 @@ TEST_F(EnergyPlusFixture, OutputReportTabularAnnual_GatherResults_MinMaxHrsShown EXPECT_EQ(fieldSetParams[13].std::string::substr(0, 6), "0.0152"); // m_cell[0].result } +TEST_F(EnergyPlusFixture, OutputReportTabularAnnual_Maximum_SummedVariable_UsesZoneSeconds) +{ + using namespace OutputProcessor; + + // Make zone and system timesteps different so a swapped mapping is detectable + state->dataGlobal->TimeStepZone = 0.25; // hours + state->dataGlobal->TimeStepZoneSec = state->dataGlobal->TimeStepZone * Constant::rSecsInHour; // 900 s + + state->dataHVACGlobal->TimeStepSys = 1.0; // hours + state->dataHVACGlobal->TimeStepSysSec = state->dataHVACGlobal->TimeStepSys * Constant::rSecsInHour; // 3600 s + + Meter *meter = new Meter("ELECTRICITY:MYTH"); + meter->units = Constant::Units::None; + state->dataOutputProcessor->meters.push_back(meter); + state->dataOutputProcessor->meterMap.insert_or_assign("ELECTRICITY:MYTH", state->dataOutputProcessor->meters.size() - 1); + + std::vector annualTables; + annualTables.emplace_back(*state, "TEST MAX RATE FROM SUM", "", ""); + annualTables.back().addFieldSet("ELECTRICITY:MYTH", AnnualFieldSet::AggregationKind::maximum, 6); + annualTables.back().setupGathering(*state); + + // CurTSValue behaves like a summed timestep quantity here; maximum aggregation converts to a rate by dividing by secondsInTimeStep + meter->CurTSValue = 55.0; + annualTables.back().gatherForTimestep(*state, OutputProcessor::TimeStepType::Zone); + + // Expect 55 / 900 = 0.061111... + std::vector fieldSetParams = annualTables.back().inspectTableFieldSets(0); + EXPECT_EQ(fieldSetParams[0], "ELECTRICITY:MYTH"); // m_colHead + EXPECT_EQ(fieldSetParams[13].std::string::substr(0, 6), "0.0611"); // m_cell[0].result +} + TEST_F(EnergyPlusFixture, OutputReportTabularAnnual_columnHeadersToTitleCase) { using namespace OutputProcessor;