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

Add performance support for ASHRAE205 Coils (RS0004) #10307

Open
wants to merge 98 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
2ae86bf
Add NFP draft document.
nealkruis Apr 6, 2023
1becf54
Flesh out NFP implementation.
tanaya-mankad May 29, 2023
79160f3
Fix typo.
tanaya-mankad May 30, 2023
63406e5
Modify idf inputs for 205 coils.
tanaya-mankad Jul 12, 2023
16e5855
Add most recent libtk205 files.
tanaya-mankad Jul 12, 2023
9d39010
Merge branch 'fix-btwxt-error-handling' into ashrae-205-coils
tanaya-mankad Jul 12, 2023
192a40a
Merge from NREL develop; btwxt-error-handling.
tanaya-mankad Jul 14, 2023
8a06349
Merge branch 'ashrae-205-coils' of https://github.com/bigladder/energ…
tanaya-mankad Jul 14, 2023
dc35ed4
Begin adding performance base class
tanaya-mankad Jul 14, 2023
f3e9e57
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into ash…
tanaya-mankad Jul 14, 2023
17724fc
Move code to performance base class as necessary.
tanaya-mankad Jul 20, 2023
07a8dd8
Commit json submodule files; E+ custom target name for nlohmann-json …
tanaya-mankad Jul 21, 2023
4493436
Replace previously ignored CMakeLists.
tanaya-mankad Jul 21, 2023
2724741
Commit json build file for Windows.
tanaya-mankad Jul 21, 2023
7745c10
Begin using base class functions in tests.
tanaya-mankad Jul 24, 2023
5e9aa32
Make tests explicitly use CurveFitPerformance for CoilDX tests.
tanaya-mankad Aug 14, 2023
ca1692d
Add basic calculations to 205 coil class.
tanaya-mankad Aug 14, 2023
f0a7c63
Add basic simulate function (as CurveFit, but alternate modes removed).
tanaya-mankad Aug 16, 2023
ff81c53
Use fmt format for error strings.
tanaya-mankad Aug 21, 2023
0611def
Corrected usage of format().
tanaya-mankad Aug 21, 2023
508937e
Merge from NREL develop.
tanaya-mankad Nov 27, 2023
d89a8bb
Fix CI-requested problems.
tanaya-mankad Nov 27, 2023
972c919
Fix typo bug.
tanaya-mankad Dec 8, 2023
b644c90
Fix override typos.
tanaya-mankad Dec 11, 2023
4736c13
Add crankcase heater code from develop.
tanaya-mankad Dec 12, 2023
1873d0e
Create explicit performance object for tests.
tanaya-mankad Dec 12, 2023
eef8f80
Fix clang-tidy errors.
tanaya-mankad Dec 12, 2023
8ecd059
Comment unused parameter.
tanaya-mankad Dec 13, 2023
e404a0d
Ported function signature changes.
tanaya-mankad Jan 9, 2024
64088c6
Fix clang-format.
tanaya-mankad Jan 16, 2024
ad6d7b6
Remove extra function parameter in tests.
tanaya-mankad Jan 29, 2024
6d3cc5c
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Jan 29, 2024
45ddc48
Revert CoilPLR to m_CoolingSpeedRatio.
tanaya-mankad Jan 29, 2024
e2fade2
Pass locally-calculated CoilPLR to CoilDX simulate inside calcUnitary…
tanaya-mankad Jan 31, 2024
4b62938
Modify input CoilPLR calculation prior to DXCoil simulate() call.
tanaya-mankad Feb 9, 2024
9f8815b
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Feb 9, 2024
4716bfb
Correct parameters in call to DXCoil simulate.
tanaya-mankad Feb 9, 2024
cf346b1
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Feb 12, 2024
b992bd8
Fix PartLoadRatioReport, initialize cooling speed to 1, assert if 0.
tanaya-mankad Feb 16, 2024
374707a
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Feb 19, 2024
7ab582b
Update test IDF.
tanaya-mankad Feb 21, 2024
cb92a78
Merge from NREL develop.
tanaya-mankad Jul 21, 2024
d4ac8d1
Merge from remote.
tanaya-mankad Jul 22, 2024
b05f869
Merge branch 'merge-coil-load-ratios' of https://github.com/bigladder…
tanaya-mankad Jul 22, 2024
a087d67
Merge from nonzero-speed branch.
tanaya-mankad Jul 22, 2024
7aa8fa9
Begin assembling simple model for 205 coils.
tanaya-mankad Jul 23, 2024
4a83d3d
Fix formatting.
tanaya-mankad Jul 23, 2024
1a574b3
Merge from upstream branches.
tanaya-mankad Jul 24, 2024
9d0c89d
Apply formatting.
tanaya-mankad Jul 24, 2024
30bf1ab
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Jul 30, 2024
f7e0e51
Small corrections after develop merge.
tanaya-mankad Jul 30, 2024
8590971
Merge branch 'nonzero-cooling-speed-num' of https://github.com/NREL/E…
tanaya-mankad Jul 31, 2024
37ddbeb
Allow coil speed == 0.
tanaya-mankad Jul 31, 2024
12eedcf
Remove zero-speed unit test.
tanaya-mankad Aug 1, 2024
02faaef
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Aug 1, 2024
c63253d
Remove line from accidental merge.
tanaya-mankad Aug 1, 2024
641d623
Simplify PLR assignment.
tanaya-mankad Aug 6, 2024
17fad52
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into ash…
tanaya-mankad Aug 7, 2024
1356b5b
Merge branch 'merge-coil-load-ratios' into ashrae-205-coils
tanaya-mankad Aug 7, 2024
b0ebe85
Fix logging for libtk205.
tanaya-mankad Aug 12, 2024
3042fae
Merge branch 'develop' into merge-coil-load-ratios
tanaya-mankad Aug 18, 2024
f118192
Merge from nonzero-cooling-speed-num.
tanaya-mankad Aug 26, 2024
5505f01
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Aug 26, 2024
cb8806f
Merge branch 'merge-coil-load-ratios' of https://github.com/bigladder…
tanaya-mankad Aug 26, 2024
6406e6c
Merge branch 'merge-coil-load-ratios' of https://github.com/bigladder…
tanaya-mankad Aug 26, 2024
e18921a
Add example model with 205 cooling coil.
tanaya-mankad Aug 30, 2024
bb6f090
Update output node calculations.
tanaya-mankad Sep 2, 2024
1c2b496
Add sizing stub.
tanaya-mankad Sep 3, 2024
785efca
Add rated gross cooling capacity to 205 performance.
tanaya-mankad Sep 4, 2024
575d906
Fix formatting.
tanaya-mankad Sep 4, 2024
5861c48
Change tabs to spaces.
tanaya-mankad Sep 4, 2024
fdfa1d4
Fix performance pointer for CurveFit tests.
tanaya-mankad Sep 4, 2024
5069521
Replace default values in performance parameter access functions with…
tanaya-mankad Sep 5, 2024
b4f3e0f
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into ash…
tanaya-mankad Sep 5, 2024
6ac136a
Fix custom-check errors.
tanaya-mankad Sep 5, 2024
aa9f04e
Add state parameter.
tanaya-mankad Sep 5, 2024
059d111
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into ash…
tanaya-mankad Sep 9, 2024
b1fed16
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into ash…
tanaya-mankad Sep 15, 2024
66ef4f3
Normalize function names; clean up code.
tanaya-mankad Sep 26, 2024
0c82665
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into ash…
tanaya-mankad Sep 27, 2024
7e2a014
Add Latex documentation for 205 coil object.
tanaya-mankad Sep 27, 2024
44cc97c
Code integrity fix; documentation image update.
tanaya-mankad Sep 28, 2024
6c4c12d
Clean up scoping.
tanaya-mankad Sep 30, 2024
39faad2
Fix formatting.
tanaya-mankad Sep 30, 2024
1182a94
Move function using state to impl file.
tanaya-mankad Oct 1, 2024
deab5a2
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Oct 4, 2024
45b87e5
Fix clang-format.
tanaya-mankad Oct 4, 2024
59b222f
Reassess how singlemode interprets PLR.
tanaya-mankad Oct 9, 2024
2b151a0
Merge branch 'merge-coil-load-ratios' into ashrae-205-coils
tanaya-mankad Oct 10, 2024
f0c80b3
Fix power use calculation.
tanaya-mankad Oct 15, 2024
7023b42
Separate speeds by index vs compressor speed number.
tanaya-mankad Oct 21, 2024
3354903
Fix volumetric vs mass flows. Fix modulating/switching simulation.
tanaya-mankad Nov 5, 2024
43da137
Clang format.
tanaya-mankad Nov 6, 2024
d7db59e
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into mer…
tanaya-mankad Nov 6, 2024
7e5aa83
Merge branch 'merge-coil-load-ratios' into ashrae-205-coils
tanaya-mankad Nov 6, 2024
e3d4abe
Fix setpoint-based plr.
tanaya-mankad Nov 10, 2024
be230f3
Allow speed=0 if compressor is off.
tanaya-mankad Nov 18, 2024
aea193b
Merge branch 'merge-coil-load-ratios' into ashrae-205-coils
tanaya-mankad Nov 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions design/FY2023/NFP-ASHRAE205-Coils.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# ASHRAE 205 Coils

**Tanaya Mankad, Neal Kruis; Big Ladder Software**

## Overview

ASHRAE Standard 205 defines common data models and serialization formats for facility equipment performance data needed for engineering applications such as energy simulation. The formats allow automated exchange among data sources (manufacturers), simulation models, and other engineering applications. The formats and procedures specified in the standard are developed by SPC (Standard Project Committee) 205 under ASHRAE and ANSI consensus processes. SSPC-205 membership includes equipment manufacturers, application software developers, and engineering practitioners.

The initial edition of the standard was published near the beginning of 2023; an overview can be found at http://data.ashrae.org/standard205/.

205 chillers (RS0001) were added to EnergyPlus in 22.2. In this NFP, we propose to add support for RS0004 (Air-to-Air Direct Expansion Refrigerant System). The current scope of this RS is limited to cooling DX coils, but future adenda will accommodate heating DX coils as well.

## Implementation

ASHRAE 205 coil performance will be indicated through a new object, `Coil:DX:ASHRAE205:Performance`, which will be referenceable from `Coil:Cooling:DX` object (and the future `Coil:Heating:DX` object). The current `Coil:[Cooling]:DX:CurveFit:Performance` object and the new performance object will both derive from a new base class that encapsulates common functionality and isolates the performance calculation. (Making this structural change will ease the transition to a future Coil:Heating:DX:Curvefit:Performance object, should a non-205 performance imlementation ever be desired.)

Standard 205 representations are stored in either human-readable JSON or serialized CBOR (Concise Binary Object Representation) format. libtk205 (Toolkit 205) library will populate the internal EnergyPlus class data.

### Calculations

One of the advantages of ASHRAE Standard 205 is that available equipment operating conditions must be provided as raw performance maps in a representation. These performance maps are straightforward to arrange in a tabular format, which the libtk205 library passes to the same multi-dimensional interpolation engine ([btwxt](https://github.com/bigladder/btwxt)) which is already used in EnergyPlus to calculate performance at different operating conditions. Rather than being extracted from a regression curve, which can produce physically unrealistic results near their boundaries and can fail to capture internal inflections, equipment performance is interpolated within the closest available data to the operating point. The performance calculation will be embedded in the `simulate()` function of the DX coil class.

## Testing

In order to test the new `Coil:DX:ASHRAE205:Performance` object, we will create a new model based on an existing one with `Coil:Cooling:DX:Curvefit:Performance`. A new ASHRAE 205 representation file will be created using performance characteristics from the known model, using its performance curves to back-calculate the tabular parameter and lookup information required by the new representation. We will ensure results between the two files are similar, within reason.

## IDD Changes and Transition

We will add a new object `Coil:DX:ASHRAE205:Performance`.

```
Coil:DX:ASHRAE205:Performance,
\memo DX coil performance specification referencing an ASHRAE Standard 205 compliant representation
\memo for air-to-air direct expansion refrigerant system (Representation Specification RS0004). As
\memo RS0004 files are intended to support both heating and cooling performance, this object may
\memo referenced by the Coil:Cooling:DX and the corresponding Coil:Heating:DX object (planned for
\memo future addition).
\min-fields 2
A1, \field Name
\required-field
\type alpha
\reference DXCoolingPerformanceNames
!\reference DXHeatingPerformanceNames
A2, \field Representation File Name
\note The name of the ASHRAE 205 RS0004 (air-to-air direct expansion refrigerant system) representation file
\type alpha
\retaincase
\required-field
A3, \field Performance Interpolation Method
\type choice
\key Linear
\key Cubic
\default Linear
N1, \field Rated Total Cooling Capacity
\note Not yet implemented / reserved for future use. Full load cooling capacity at AHRI 210/240 "A" test conditions.
\note Used to scale representation data.
\type real
\units W
\minimum> 0.0
\autosizable
\default autosize
N2; \field Rated Steady-State Heating Capacity
\note Not yet implemented / reserved for future use. Full load heating capacity at AHRI 210/240 "H1" test conditions.
\note Used to scale representation data.
\type real
\units W
\minimum> 0.0
\autosizable
\default autosize
```

## Documentation

Much of the content above will be modified to describe the feature in "Input Output Reference", and details of the aggregation calculations in "Engineering Reference".
Binary file modified doc/input-output-reference/media/cooling-coil-hierarchy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
35 changes: 31 additions & 4 deletions doc/input-output-reference/src/overview/group-coil-cooling-dx.tex
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ \subsection{Coil:Cooling:DX}\label{coilcoolingdx}
\def\labelenumi{\arabic{enumi}.}
\item Coil:Cooling:DX - Defines where the coil's evaporator and condenser sections are connected to the HVAC system through node connections to air loops or zones (if condenser section rejects heat to a zone), as well as the coil's availability.

\item Coil:Cooling:DX:CurveFit:Performance - Defines how the coil operates over a range of operating conditions.
\item Coil:Cooling:DX:CurveFit:Performance or Coil:Cooling:DX:ASHRAE205:Performance - Defines how the coil operates over a range of operating conditions.

\item Coil:Cooling:DX:CurveFit:OperatingMode - Defines the rated coil characteristics (capacity, evaporator section air flow rate, etc.) and capacity control method for a given operating mode. Operating modes are generally used to describe humidity control strategies for DX cooling coil arrangements that enable enhanced dehumidification.
\item Coil:Cooling:DX:CurveFit:OperatingMode (CurveFit only) - Defines the rated coil characteristics (capacity, evaporator section air flow rate, etc.) and capacity control method for a given operating mode. Operating modes are generally used to describe humidity control strategies for DX cooling coil arrangements that enable enhanced dehumidification.

\item Coil:Cooling:DX:CurveFit:Speed - Defines DX cooling coil performance for a specific speed within a single operating mode.
\item Coil:Cooling:DX:CurveFit:Speed (CurveFit only) - Defines DX cooling coil performance for a specific speed within a single operating mode.
\end{enumerate}
Note: The Coil:Cooling:DX:CurveFit:Performance object also allows users to input 3 operating modes: Base Operating Mode, Alternative Operating Mode 1, and Alternative Operating Mode 2. When the Base Operating Mode is an only mode input, the coil performs like a regular cooling DX coil and no specific dehumidification capability. The alternative operating mode 1 is used for enhanced dehumidification. When all 3 modes are inputs, the coil performs as a subcool reheat coil. When load sensible heat ratio (SHR), defined as sensible cooling load / (sensible cooling load + latent cooling load), is greater than the SHR in the Base Operating Mode at given inlet air conditions, the coil performs in Base Operating Mode only. When the load SHR is less than the SHR in the Base Operating Mode and greater than the SHR in the Alternative Operating Mode 1 at the same given inlet air conditions, the coil performs combination of both Base Operating Mode, and Alternative Operating Mode 1. Mode ratio determines a fraction of time Alternative Operating Mode 1 operates and the rest (1 - Mode ratio) of time Base Operating Mode operates in a single time step. When the load SHR is less than the SHR in the Alternative Operating Mode 1 and greater than the SHR in the Alternative Operating Mode 2 at the same given inlet air conditions, the coil performs combination of both Base Operating Mode, and Alternative Operating Mode 2. Mode ratio determines a fraction of time Alternative Operating Mode 2 operates and (1 - Mode ratio) of time Base Operating Mode operates in a single time step. When the load SHR is greater than the SHR in the Alternative Operating Mode 2, the coil performs as Alternative Operating Mode 2 alone.

Expand Down Expand Up @@ -54,7 +54,7 @@ \subsubsection{Inputs}\label{inputs-01}

\paragraph{Field: Performance Object Name}\label{field-performance-object-name-6-001}

The name of the Coil:Cooling:DX:CurveFit:Performance object that defines this coil's performance specifications.
The name of the Coil:Cooling:DX:CurveFit:Performance or Coil:Cooling:DX:ASHRAE205:Performance object that defines this coil's performance specifications.

\paragraph{Field: Condensate Collection Water Storage Tank Name}

Expand All @@ -64,6 +64,33 @@ \subsubsection{Inputs}\label{inputs-01}

This field is optional. It is used to describe where the coil obtains water used for evaporative cooling of its condenser. If blank or omitted, then the unit will obtain water directly from the mains. If the name of a WaterUse:Storage object is used here, then the unit will obtain its water from that tank. If a tank is specified, the unit will attempt to obtain all the water it uses from the tank. However, if the tank cannot provide all the water the condenser needs, then the unit will still operate and obtain the rest of the water it needs from the mains (referred to as StarvedWater).

\subsection{Coil:Cooling:DX:ASHRAE205:Performance}\label{coilcoolingdxashrae205performance}

This object defines basic unit control and ASHRAE205 representation file for one Coil:Cooling:DX object.

\subsubsection{Inputs}

\paragraph{Field: Name}

A unique user-assigned name for an instance of a cooling coil performance specification. Any reference to this cooling coil performance specification by a cooling coil object will use this name.

\paragraph{Field: Representation File Name}

The filename of the ASHRAE205 chiller representation (.json or .cbor).

\paragraph{Field: Performance Interpolation Method}

This alpha field specifies how performance data from the Representation File will be interpolated.
Choices are "Linear" and "Cubic."

\paragraph{Field: Rated Total Cooling Capacity}

Not yet implemented / reserved for future use. Full load cooling capacity at AHRI 210/240 "A" test conditions.

\paragraph{Field: Rated Steady-State Heating Capacity}

Not yet implemented / reserved for future use. Full load heating capacity at AHRI 210/240 "H1" test conditions.

\subsection{Coil:Cooling:DX:CurveFit:Performance}\label{coilcoolingdxcurvefitperformance}

This object defines basic unit control and other characteristics for one Coil:Cooling:DX object. For that Coil:Cooling:DX object, it also references one or more operating modes, which are defined using the Coil:Cooling:DX:CurveFit:OperatingMode object.
Expand Down
38 changes: 38 additions & 0 deletions idd/Energy+.idd.in
Original file line number Diff line number Diff line change
Expand Up @@ -52287,6 +52287,44 @@ Coil:Cooling:DX:CurveFit:Speed,
\type object-list
\object-list UnivariateFunctions

Coil:DX:ASHRAE205:Performance,
\memo DX coil performance specification referencing an ASHRAE Standard 205 compliant representation
\memo for air-to-air direct expansion refrigerant system (Representation Specification RS0004). As
\memo RS0004 files are intended to support both heating and cooling performance, this object may
\memo referenced by the Coil:Cooling:DX and the corresponding Coil:Heating:DX object (planned for
\memo future addition).
\min-fields 2
A1, \field Name
\required-field
\type alpha
\reference DXCoolingPerformanceNames
A2, \field Representation File Name
\note The name of the ASHRAE 205 RS0004 (air-to-air direct expansion refrigerant system) representation file
\type alpha
\retaincase
\required-field
A3, \field Performance Interpolation Method
\type choice
\key Linear
\key Cubic
\default Linear
N1, \field Rated Total Cooling Capacity
\note Not yet implemented / reserved for future use. Full load cooling capacity at AHRI 210/240 "A" test conditions.
\note Used to scale representation data.
\type real
\units W
\minimum> 0.0
\autosizable
\default autosize
N2; \field Rated Steady-State Heating Capacity
\note Not yet implemented / reserved for future use. Full load heating capacity at AHRI 210/240 "H1" test conditions.
\note Used to scale representation data.
\type real
\units W
\minimum> 0.0
\autosizable
\default autosize

Coil:Cooling:DX:SingleSpeed,
\memo Direct expansion (DX) cooling coil and condensing unit (includes electric compressor
\memo and condenser fan), single-speed. Optional inputs for moisture evaporation from wet
Expand Down
3 changes: 3 additions & 0 deletions src/EnergyPlus/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

if(WIN32)
configure_file(energyplus.rc.in "${CMAKE_CURRENT_BINARY_DIR}/energyplus.rc")
configure_file(energyplusapi.rc.in "${CMAKE_CURRENT_BINARY_DIR}/energyplusapi.rc")
Expand Down Expand Up @@ -134,6 +135,8 @@ set(SRC
Coils/CoilCoolingDXCurveFitOperatingMode.hh
Coils/CoilCoolingDXCurveFitPerformance.cc
Coils/CoilCoolingDXCurveFitPerformance.hh
Coils/CoilCoolingDXAshrae205Performance.cc
Coils/CoilCoolingDXAshrae205Performance.hh
Coils/CoilCoolingDXCurveFitSpeed.cc
Coils/CoilCoolingDXCurveFitSpeed.hh
CondenserLoopTowers.cc
Expand Down
Loading