Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Outdoor Air Details report #8529

Merged
merged 77 commits into from
Feb 19, 2021
Merged

Conversation

mjwitte
Copy link
Contributor

@mjwitte mjwitte commented Feb 11, 2021

Pull request overview

This PR supersedes #7629.

This version keeps the existing Outdoor Air Summary report and adds the new report as Outdoor Air Details.

Currently, users seeking to use EnergyPlus for LEED work need to document the use of Outdoor Air (OA) in their models. While the current Outdoor Air Summary in EnergyPlus provides some information to help these users, it does not provide enough information. Users often find it difficult to compare the OA delivered for proposed vs. baseline simulations, especially with economizers and zone equipment. This new feature adds a new Outdoor Air Details tabular report to include zone HVAC equipment, add tracking and table outputs for minimum requested outdoor air flow, track times when the delivered outdoor air is less than the minimum required and provide outputs in standard air density.

The needs of this enhancement were discussed in issue #5298

The new feature proposal provides further detail.

Resolves #5298.
Resolves #5846 (final piece)

ToDo List

Unfinished business from this PR is documented in #8550

  • Documentation - Input Output Reference
  • Documentation - Output Details and Examples
  • Populate Times for Outdoor Air Limiting Factors During Occupancy subtable
  • Populate Average Outdoor Air For Each Outdoor Air Limiting Factors During Occupancy subtable
  • Code cleanup - remove commented sections - fix warning
  • Possibly reorganize new variables - seems like lots of different places, not sure all the new variables are in appropriate places
  • Look for efficiency improvements (currently at about -0.1% performance)
  • Unit tests
  • QA the numbers in the report

Pull Request Author

Add to this list or remove from it as applicable. This is a simple templated set of guidelines.

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • Label the PR with at least one of: Defect, Refactoring, NewFeature, Performance, and/or DoNoPublish
  • Pull requests that impact EnergyPlus code must also include unit tests to cover enhancement or defect repair
  • Author should provide a "walkthrough" of relevant code changes using a GitHub code review comment process
  • If any diffs are expected, author must demonstrate they are justified using plots and descriptions - only audit and rdd diffs are expected due to new output variables.
  • If changes fix a defect, the fix should be demonstrated in plots and descriptions
  • If any defect files are updated to a more recent version, upload new versions here or on DevSupport
  • If IDD requires transition, transition source, rules, ExpandObjects, and IDFs must be updated, and add IDDChange label
  • If structural output changes, add to output rules file and add OutputChange label
  • If adding/removing any LaTeX docs or figures, update that document's CMakeLists file dependencies

Reviewer

This will not be exhaustively relevant to every PR.

  • Perform a Code Review on GitHub
  • If branch is behind develop, merge develop and build locally to check for side effects of the merge
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified
  • Check that performance is not impacted (CI Linux results include performance check)
  • Run Unit Test(s) locally
  • Check any new function arguments for performance impacts
  • Verify IDF naming conventions and styles, memos and notes and defaults
  • If new idf included, locally check the err file and other outputs

@mjwitte mjwitte added this to the EnergyPlus 9.5.0 IOFreeze milestone Feb 11, 2021
@mjwitte mjwitte changed the title Enhance outdoor air tabular reporting B Enhance outdoor air tabular reporting Feb 15, 2021
@mjwitte mjwitte changed the title Enhance outdoor air tabular reporting Enhance outdoor air tabular reporting - new Outdoor Air Details report Feb 15, 2021
@mjwitte mjwitte changed the title Enhance outdoor air tabular reporting - new Outdoor Air Details report New Outdoor Air Details report Feb 16, 2021
@Myoldmopar
Copy link
Member

From a quick CI scan, looks like acceptable RDD and Audit diffs, though Mac is complaining about some build warnings that should be cleaned up. I see this is still marked as draft so I will not dive in any deeper than this right now.

@mjwitte
Copy link
Contributor Author

mjwitte commented Feb 16, 2021

@Myoldmopar Getting close, added a todo list at the top. Some things could wait until after I/O Freeze as a followup.

@mjwitte mjwitte marked this pull request as ready for review February 18, 2021 03:00
Copy link
Contributor Author

@mjwitte mjwitte left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code walkthrough.

Comment on lines -98528 to -98529
\memo There should be as many fields (A) in this object as there are keys in the following (minus
\memo AllSummary+AllMonthly+AllSummaryAndMonthly)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This object, Output:Table:SummaryReports has been incredibly long for a long time (https://github.com/NREL/EnergyPlusArchive/commit/7134906aa552086d7fc76fafde2158efe85fe2ac). Taking a bold step here and reducing it to 25 report names in the IDD instead of 82. It's extensible, so any long objects should run just fine. It might trip up someone using IDF Editor, but it seems time to shorten this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am fine with that bold step.

@@ -98551,6 +98549,7 @@ Output:Table:SummaryReports,
\key ComponentSizingSummary
\key CoilSizingDetails
\key OutdoorAirSummary
\key OutdoorAirDetails
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New report key. This report is included automatically with AllSummary* options.

@@ -101001,5981 +101023,7 @@ Output:Table:SummaryReports,
\key ThermalResilienceSummary
\key CO2ResilienceSummary
\key VisualResilienceSummary
A25, \field Report 25 Name
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The field-ectomy begins here.

Comment on lines +8513 to +8515
Real64 StdDensInfilVolume = (state.dataAirflowNetworkBalanceManager->exchangeData(i).SumMCp / CpAir / state.dataEnvrn->StdRhoAir) *
ReportingConstant; // compute volume using standard density air
// MJWToDo - Separate AFN Vent and InfilVolFlow
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sum AFN infiltration and ventilation (well, once #8475 is addressed).


// OA Reports - accumulated values
// All Vol variables are in m3
Real64 MechVentVolTotalOcc; // volume for mechanical ventilation of outside air for entire simulation during occupied at current
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename some of the existing Outdoor Air Summary variables to help keep them separate from the new report. The old report is only for occupied hours, so add "Occ" to some names.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I think that is reasonable.

@@ -4452,6 +4664,24 @@ namespace EnergyPlus::SystemReports {
state.dataSysRpts->ZoneOAVolFlowStdRho(CtrlZoneNum) = state.dataSysRpts->ZoneOAMassFlow(CtrlZoneNum) / state.dataEnvrn->StdRhoAir;
state.dataSysRpts->ZoneOAVolStdRho(CtrlZoneNum) = state.dataSysRpts->ZoneOAVolFlowStdRho(CtrlZoneNum) * TimeStepSys * DataGlobalConstants::SecInHour;

// set time mechanical+natural ventilation is below, at, or above target Voz-dyn
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gather zone table values.

@@ -4524,7 +4780,55 @@ namespace EnergyPlus::SystemReports {
} else {
}
} // loop over controlled zones
}

// loop over air loops
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gather air loop table values.

Comment on lines +128 to +130
struct SysPreDefRepType
{
Real64 SysMechVentTotal; // air loop mechanical vent total volume OA at standard density {m3}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New struct for airloop tables.

Array1D<Real64> ZoneOAVolFlowCrntRho; // zone mech vent volume flow rate at current density {m3/s}
Array1D<Real64> ZoneOAVolCrntRho; // zone mech vent total volume OA at current density {m3}
Array1D<Real64> ZoneMechACH; // zone mech vent air changes per hour {ACH}
Array1D<Real64> ZoneTargetVentilationFlowVoz; // zone target ventilation ventilation flow based on 62.1 Voz-dyn {m3/s}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New zone and system variables for tracking various timestep values to accumulate. Many of these are new output variables.

@@ -1001,6 +1001,7 @@ namespace EnergyPlus::ZoneEquipmentManager {
FinalZoneSizing(CtrlZoneNum).HeatDesTempDiff = ZoneSizingInput(ZoneSizNum).HeatDesTempDiff;
FinalZoneSizing(CtrlZoneNum).CoolDesHumRat = ZoneSizingInput(ZoneSizNum).CoolDesHumRat;
FinalZoneSizing(CtrlZoneNum).HeatDesHumRat = ZoneSizingInput(ZoneSizNum).HeatDesHumRat;
FinalZoneSizing(CtrlZoneNum).ZoneAirDistributionIndex = ZoneSizingInput(ZoneSizNum).ZoneAirDistributionIndex;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is needed in order to fetch the DesignSpecification:AirTerminal:Sizing data.

@mjwitte
Copy link
Contributor Author

mjwitte commented Feb 18, 2021

@Myoldmopar This is ready for review. There are some pieces missing that will need to get fleshed out after I/O freeze if this passes muster enough to make it in.

Copy link
Member

@Myoldmopar Myoldmopar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is quite a lot, but I am so thankful for the IDD cleanup. I don't imagine anyone will have needed all 82 extensible fields in that input object. I am building and running locally, but this looks good to go in.

@@ -160,6 +160,56 @@ \subsubsection{Outputs}\label{outputs-1-001}

Reports the air changes per hour in the zone due to the outside fresh air supplied by mechanical ventilation system.

\paragraph{Zone Target Voz Ventilation Flow Rate {[}m3/s{]}}\label{zone-target-voz-ventilation-flow-rate}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lots of new ventilation outputs, OK.

@@ -172,6 +172,27 @@ \subsubsection{Predefined Annual Summary Reports}\label{predefined-annual-summar
Minimum Outside Air During Occupied Hours table shows for each zone the average and nominal number of occupants, the zone volume, the minimum air change rate based on mechanical ventilation, infiltration and simple ventilation during occupied hours.
\end{itemize}

\paragraph{Outdoor Air Details}\label{outdoor-air-details}

The Outdoor Air Details report (key: OutdoorAirDetails) produces a report that includes the following tables:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so this is the section that describes the new tabular report, if the user enters the OutdoorAirDetails key. I was expecting to find a list of all the possible keys in this section which would need this key added, but I guess that's not here. Just in the IDD itself.

Comment on lines -98528 to -98529
\memo There should be as many fields (A) in this object as there are keys in the following (minus
\memo AllSummary+AllMonthly+AllSummaryAndMonthly)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am fine with that bold step.


// OA Reports - accumulated values
// All Vol variables are in m3
Real64 MechVentVolTotalOcc; // volume for mechanical ventilation of outside air for entire simulation during occupied at current
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I think that is reasonable.

Real64 AFNInfilVolMin; // a large number since finding minimum volume at current zone air density
Real64 SimpVentVolTotalOcc; // volume for simple 'ZoneVentilation' of outside air for entire simulation during occupied current
Real64 SimpVentVolMin; // a large number since finding minimum volumeat current zone air density
Real64 MechVentVolTotalStdDen; // volume for mechanical ventilation of outside air for entire simulation at standard density
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also reasonable.

@@ -965,6 +945,31 @@ namespace DataSizing {
}
}

Real64 ZoneAirDistributionData::calculateEz(EnergyPlusData &state, int const ZoneNum) // Zone index
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me.

Comment on lines -1484 to +1481
ZoneOAMin = ZoneOAArea / ZoneEz;
ZoneOAMax = (ZoneOAArea + ZoneOAPeople) / ZoneEz;
ZoneOAMin = ZoneOAArea;
ZoneOAMax = (ZoneOAArea + ZoneOAPeople);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch!

Zone(iZone).Multiplier * Zone(iZone).ListMultiplier),
3);
Zone(iZone).Name,
ZonePreDefRep(iZone).MechVentVolTotalOcc / (ZonePreDefRep(iZone).TotTimeOcc * Zone(iZone).Volume *
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, so a bunch of changes for the Occ suffix on those existing variables.

@Myoldmopar
Copy link
Member

CI results are in order. The 500 server errors are not on us.

Locally testing is all good, this is ready to merge. Thanks @mjwitte and @JasonGlazer

@Myoldmopar Myoldmopar merged commit 35dbafc into develop Feb 19, 2021
@Myoldmopar Myoldmopar deleted the EnhanceOutdoorAirReporting2 branch February 19, 2021 15:00
@mjwitte mjwitte mentioned this pull request Feb 19, 2021
10 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
IDDChange Code changes impact the IDD file (cannot be merged after IO freeze) NewFeature Includes code to add a new feature to EnergyPlus
Projects
None yet
Development

Successfully merging this pull request may close these issues.

OA controller economizer schedule and min OA flow autosizing Outdoor Air Summary report improvements
8 participants