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

Waterside economizer coil new feature CoilSystem:Cooling:Water #8466

Merged
merged 125 commits into from
Aug 5, 2021
Merged
Show file tree
Hide file tree
Changes from 116 commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
519ee99
NFP and Design doc for waterside economizer new feature
rraustad Jan 13, 2021
1e69bf9
Update NFP based on comments
rraustad Jan 20, 2021
00d06e9
Update revision date
rraustad Jan 20, 2021
430e4e1
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into NFP…
rraustad Jan 20, 2021
4d89541
Merge branch 'develop' into NFP-Waterside-Economizer
Apr 7, 2021
f62cc1d
Merge branch 'develop' into NFP-Waterside-Economizer
Apr 13, 2021
787c0de
Updated NFP-Water Side Economizer
Apr 14, 2021
14f0579
Added new CoilSystemWater object
May 4, 2021
68bfdfb
Added new fields to UnitarySystem
May 4, 2021
ba514ac
Water Side Economizer Control
May 4, 2021
04207c7
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
May 12, 2021
8945d7c
Fixed unit test failed due to new field
May 12, 2021
a70fad4
Cleanup and Formatting
May 12, 2021
9cd9050
Cleanup and Formatting
May 12, 2021
2108ebb
Reverted a change in 5ZoneAirCooled IDF
May 12, 2021
6d0f6b5
More Clang Formatting Change
May 12, 2021
f0caea3
Member variables reorder
May 12, 2021
f37b158
Merge branch 'CoilWaterSystem-to-UnitarySystem' of https://github.com…
May 13, 2021
d37fb5e
Again formatting change
May 13, 2021
c75d226
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
May 17, 2021
c60dbf6
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
May 20, 2021
b8d55dc
CoilSystemCoolingWater GetInput and Initialization
May 21, 2021
3be6ab6
Reverted UnitarySystem IDD change
May 21, 2021
7eda95f
Modified CoilSystemCoolingWater getInput
May 21, 2021
8e66450
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
May 23, 2021
f06a763
Merge branch 'develop' into NFP-Waterside-Economizer
May 24, 2021
d71bc3e
Updated Waterside Economizer NFP
May 24, 2021
031da74
CoilSystem getInput Unit Test
May 24, 2021
1b76858
Removed unused variable
May 25, 2021
497975e
Applied clang format
May 25, 2021
d82cf92
Modified UnitarySystem getinput
May 25, 2021
84c75de
Updated getinput based on PR #8729
May 25, 2021
6236ec5
Adds CoilSystemCoolingWater to CalcSystemEnergyUse
May 25, 2021
59b261e
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
May 26, 2021
66a2c5a
Fixed Unit test
May 26, 2021
48b4902
more clang formatting
May 26, 2021
ab99800
Gets Pointer to CoilSys during sim
May 26, 2021
d98fa57
GetInput, cleanup and format
May 27, 2021
0cd8b28
Reverted pointer init change
May 28, 2021
8e2c9c7
Clang format
May 28, 2021
36afab5
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
Jun 2, 2021
7f4e84a
Merged in Develop; resolved conflict
Jun 9, 2021
8732a75
renamed new output variable
Jun 9, 2021
0719a63
Adds Coil System Water Report Var
Jun 9, 2021
b7f06b0
Merged in develop into CoilWaterSystem-to-UnitarySystem
Jun 9, 2021
3537188
Allow CoilSystemWater in OA System
Jun 9, 2021
879122c
Fixed Unit Test
Jun 10, 2021
e62dcec
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
Jun 10, 2021
31c8231
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
Jun 14, 2021
bdfd056
Modified Setup All Output Vars Function
Jun 14, 2021
ee0f85c
WaterCoilDetail Requires Cooling SAFSM
Jun 25, 2021
de4dd49
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
Jun 25, 2021
ec430de
Cleaned CoilSystem:Cooling:Water object IDD
Jun 25, 2021
3128a06
Turn off HX when the coilsystem is off
Jun 29, 2021
684edbe
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
Jun 30, 2021
aca266e
More unit tests
Jun 30, 2021
0b12497
Merge branch 'develop' into CoilWaterSystem-to-UnitarySystem
Jul 2, 2021
e955799
More unit tests
Jul 2, 2021
e6e3f3e
Comments Cleanup and clang formatting
Jul 2, 2021
7c48ae3
Merge branch 'develop' into NFP-Waterside-Economizer
Jul 6, 2021
05a3a0a
Merge branch 'NFP-Waterside-Economizer' of https://github.com/NREL/En…
Jul 6, 2021
2831cf4
Merge branch 'CoilWaterSystem-to-UnitarySystem' into NFP-Waterside-Ec…
Jul 6, 2021
cf16d65
Merged in CoilWaterSystem-to-UnitarySystem and Cleanup.
Jul 6, 2021
9ad2de2
UnitarySystem Fan PLR VAR Reporting
Jul 7, 2021
7908cf7
Set ControlType Early For VAR Reporting
Jul 7, 2021
d9f6566
Set HeatRecActive VAR Early for VAR Reporting
Jul 7, 2021
4a47666
Merge develop; resolved conflicts
Jul 7, 2021
c3fd044
Correct missing Rep VARs and unit tests
Jul 8, 2021
26b5896
Clang Formatting
Jul 8, 2021
d7dfc16
Address detailed water coil sizing issue 8877
Jul 9, 2021
38c6963
Adds new filed to detailed water coil object
Jul 9, 2021
4306928
Modified the new unit tests
Jul 9, 2021
885716e
Modified existing failed unit test
Jul 10, 2021
8f513a1
Updated InputRulesFiles/Rules9-5-0-to-9-6-0.md
Jul 10, 2021
406129e
Modified IDD of CoilSystem Water Coil
Jul 12, 2021
b43d5f0
Allow CoilWater_CoolingHXAssisted with Multimode
Jul 12, 2021
3121854
Example file for WaterSide Economizer
Jul 12, 2021
74a9663
Formatting and Updated CMakeLists
Jul 12, 2021
0ce154a
Formatting and Updated CMakeLists
Jul 12, 2021
9b3c608
Example file cleanup and updated CMakeList
Jul 13, 2021
399177d
Updated NFP-Waterside-Economizer
Jul 13, 2021
95f58cf
Updated Detailed Water Cooling Coil IO Ref Doc
Jul 13, 2021
384e00b
IO Ref Doc for Coil System Cooling Water Object
Jul 13, 2021
d7b866c
Updated Eng Ref Documentation
Jul 13, 2021
5738afc
Merged develop; resolved conflict
Jul 13, 2021
fa72d83
Coil System Water IO Ref Doc Formatting and Code Cleanup
Jul 13, 2021
a980719
Coil System Water IO Ref Doc Formatting and Code Cleanup
Jul 13, 2021
f1f832f
Modified CoilSystem Water Coil GetInput
Jul 14, 2021
80e336d
Merge branch 'develop' into NFP-Waterside-Economizer
Jul 14, 2021
d6dc892
Merge branch 'NFP-Waterside-Economizer' of https://github.com/NREL/En…
Jul 14, 2021
4762ab6
Merge branch 'develop' into NFP-Waterside-Economizer
Nigusse Jul 15, 2021
3844933
Merged develop and resolved conflict
Nigusse Jul 20, 2021
e73ca18
Modified CoilSystemWater Object GetInput
Nigusse Jul 21, 2021
255cd4d
Modified CoilSystemWater Object GetInput
Nigusse Jul 21, 2021
f735ebd
Merge branch 'NFP-Waterside-Economizer' of https://github.com/NREL/En…
Nigusse Jul 21, 2021
e5e6f7e
Clang Formatting
Nigusse Jul 21, 2021
80890fe
Updated the new example file
Nigusse Jul 22, 2021
4fc9a43
Cleaned unused and redundant VARs
Nigusse Jul 22, 2021
3f52ac6
Fix clang formatting
Nigusse Jul 22, 2021
8478388
Corrected Failed New Unit Tests and Removed Unused VAR
Nigusse Jul 22, 2021
6bb9c50
Merge remote-tracking branch 'remotes/origin/develop' into NFP-Waters…
mjwitte Jul 23, 2021
e89268f
Merge remote-tracking branch 'remotes/origin/develop' into NFP-Waters…
mjwitte Jul 26, 2021
efbdad1
Fix new SetupOutputVariable calls
mjwitte Jul 26, 2021
47a3fcf
Merge branch 'develop' into NFP-Waterside-Economizer
Nigusse Jul 29, 2021
852c0f2
Moved CoilSystem Cooling Water Docs
Nigusse Jul 29, 2021
3372813
Corrected typos
Nigusse Jul 29, 2021
6dd5e42
Updated Documentation
Nigusse Jul 29, 2021
d4cb48f
Addressed IDD review changes
Nigusse Jul 29, 2021
3893cd8
Rearranged documentations
Nigusse Jul 29, 2021
9c452f2
Fix Multimode for HXAssisted Water Cooling Coil
Nigusse Jul 30, 2021
2b5b112
Renamed new input field
Nigusse Jul 30, 2021
55b4a5e
Autosize DesInletWateTemp for Water-Side Economizer
Nigusse Jul 30, 2021
99e3038
Replaced hard wired water cooling coil type
Nigusse Jul 30, 2021
a8e373d
Fixed Sizing logic of DesInletWateTemp for Water-Side Economizer
Nigusse Jul 31, 2021
a47bbaf
Corrected DesInletWateTemp Sizing Error Message Reporting
Nigusse Aug 2, 2021
5985882
Out of scope FullOutput VAR div by zero
Nigusse Aug 3, 2021
4587f34
Renamed the new example file
Nigusse Aug 4, 2021
61f7eb9
Updated CoilSystem Water Object IDD
Nigusse Aug 4, 2021
9c68aae
Documentations Update
Nigusse Aug 4, 2021
cc2d00b
Addressed review comments
Nigusse Aug 4, 2021
ce6225e
Updated Unit Tests based on VARs change
Nigusse Aug 5, 2021
c434a08
Clang formatting of UnitarySystem
Nigusse Aug 5, 2021
5945efc
Updated New Example File and Cleanup
Nigusse Aug 5, 2021
7a01583
Fix tab and tiny edits
mjwitte Aug 5, 2021
39aca34
Fix Coil System Water Report VARs Name in IO Ref
Nigusse Aug 5, 2021
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
Binary file added design/FY2021/NFP-Waterside-Economizer-Fig01.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
636 changes: 636 additions & 0 deletions design/FY2021/NFP-Waterside-Economizer.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,12 @@ \subsubsection{Coil Depth}\label{coil-depth}
\emph{Depth\(_{coil}\)} = \emph{Depth\(_{tube\, spacing}\)} * \emph{N\(_{tube\, rows}\)}
\end{equation}


\subsection{CoilSystem:Cooling:Water}\label{coilsystemcoolingwater}

The sizing of water cooling coil componets wrapped in this coil system is done in function \textit{SizeWaterCoil} of module \textit{WaterCoils}. See componment sizing sections for \textit{Coil:Cooling:Water} and \textit{Coil:Cooling:Water:detailedGeometry}.
Copy link
Contributor

Choose a reason for hiding this comment

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

componets --> components
componment --> component
detailedGeometry --> DetailedGeometry

Copy link
Contributor

Choose a reason for hiding this comment

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

Done.



\subsection{Coil:Cooling:WaterToAirHeatPump:EquationFit Sizing}\label{coilcoolingwatertoairheatpumpequationfit-sizing}
Copy link
Contributor

@Nigusse Nigusse Jul 14, 2021

Choose a reason for hiding this comment

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

Documenting and pointing that sizing is done at the component level.


The sizing is done in subroutine \emph{SizeHVACWaterToAir}.
Expand Down
Binary file added doc/input-output-reference/media/image141.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/input-output-reference/media/image142.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

Large diffs are not rendered by default.

97 changes: 96 additions & 1 deletion idd/Energy+.idd.in
Original file line number Diff line number Diff line change
Expand Up @@ -49467,13 +49467,107 @@ Coil:Cooling:Water:DetailedGeometry,
A7 , \field Condensate Collection Water Storage Tank Name
\type object-list
\object-list WaterStorageTankNames
N17; \field Design Water Temperature Difference
N17, \field Design Water Temperature Difference
\type real
\units deltaC
\minimum> 0.0
\note This input field is optional. If specified, it is used for sizing the Design Water Flow Rate.
\note If blank or omitted, the Loop Design Temperature Difference value specified in Sizing:Plant
\note object is used for sizing the Design Water Flow Rate.
N18; \field Design Inlet Water Temperature
\type real
\units C
\autosizable
\default autosize
\minimum> 0
\note This input field is optional. If specified, it is used for sizing the coil Design Geomtery
Copy link
Contributor

Choose a reason for hiding this comment

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

The new input field.

Copy link
Contributor

Choose a reason for hiding this comment

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

This should probably be \autosizable with a default of autosize, like the same field in Coil:Cooling:Water.

Copy link
Contributor Author

@rraustad rraustad Jul 30, 2021

Choose a reason for hiding this comment

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

I believe we are talking about this field being blank or autosizable. I'd rather see autosizable and if not an economizer coil just read from the plant sizing object. If it is an economizer coil then use a 10C detlaT (or whatever is reasonable for this application) from what will be used for sizing (e.g., peak OAT - 10 or something like that, or maybe a fraction of OAT - precool temp so coil size changes by geography or some other fuzzy math). I see Design Inlet Water Temperature in the Coil:Cooling:Water object, probably should use the same field name.

Copy link
Contributor

Choose a reason for hiding this comment

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

Renamed the field to Design Inlet Water Temperature.

Copy link
Contributor

@Nigusse Nigusse Jul 30, 2021

Choose a reason for hiding this comment

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

I am going to set the Des Inlet Water Temperature to Design Supply Air Temperature minus 5.0 if the water cooling coil is used as water-side economizer as shown below and the field is autosized. The same logic will be used for simple and detailed water cooling coils if the coil is used as water side economizer. @rraustad @mjwitte your thought?

            if (state.dataWaterCoils->WaterCoil(CoilNum).UseAsWaterSideEconomizer) {
                if (state.dataWaterCoils->WaterCoil(CoilNum).DesInletWaterTemp == AutoSize) {
                    TempSize = (state.dataSize->DataDesOutletAirTemp - 5.0);
                } else {
                    TempSize = state.dataWaterCoils->WaterCoil(CoilNum).DesInletWaterTemp;
                }
            }

Copy link
Contributor

Choose a reason for hiding this comment

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

I was thinking that you know it is an economizer coil if it is connected to the condenser plant and/or if the Minimum Air To Water Temperature Offset > 0.

I'd rather not have any magic behind the scenes. We want this to be general use. I suppose the warning could mention that there is an input field to set this directly. And if the -5.0C is too arbitrary, maybe we just make this a severe/fatal and say use this field to fix it.

Copy link
Contributor

Choose a reason for hiding this comment

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

I agree with @mjwitte, we should try to avoid adding a logic that is not obvious to the user. We have input fields that the user can use in the simple and detailed water cooling coil objects. May be we should add description in the input field how it is used when these coils are used as water-side economizer.

Copy link
Contributor

Choose a reason for hiding this comment

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

Below is sample text description hat we can add to the idd for these coil types:

  N18; \field Design Inlet Water Temperature
       \type real
       \units C
       \autosizable
       \default autosize
       \minimum> 0
       \note This input field is optional. If specified, it is used for sizing the coil Design Geomtery
       \note Parameters. If blank or omitted, the Design Loop Exit Temperature value specified in 
       \note Sizing:Plant object is used for sizing the coil Design Geomtery Parameters. 

       \note If this coil is used as waterside economizer (connected to demand side of a condenser Loop), 
       \note the autosized value, which is the condenser loop Design Loop Exit Temperature value, can be
       \note larger than the coil design outlet air temperature. In this case the design inlet water 
       \note temperature value is reset to coil design outlet air temperature minus 5.0 DeltaC. User can 
       \note also specify appropriate design value in this field.

Copy link
Contributor

Choose a reason for hiding this comment

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

Looking at this again, since we made this autosizable, you can replace "If blank or omitted" with "If autosized, ...".
I wouldn't qualify the second part with "if this coil is used as a waterside economizer .....". There could be other reason that the design inlet water temp is higher than the leaving air temp. So, you could just start with
"If the autosized value is higher than the coil design outlet air temperature, then the design inlet water temperature value is reset . . . ."

Copy link
Contributor

Choose a reason for hiding this comment

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

Done.

\note Parameters. If blank or omitted, the Design Loop Exit Temperature value specified in
\note Sizing:Plant object is used for sizing the coil Design Geomtery Parameters.
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this would be better if it was grouped with the other coilsystem objects. Since the water cooling coils come first, then the dx and other coils, I would put this right before CoilSystem:Cooling:DX, so the order of objects would be
CoilSystem:Cooling:Water
CoilSystem:Cooling:DX
CoilSystem:Heating:DX

Copy link
Contributor

Choose a reason for hiding this comment

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

OK. Moved the CoilSystem:Cooling:Water documentation before the CoilSystem:Cooling:DX.

Copy link
Contributor

Choose a reason for hiding this comment

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

Currently the order will be as follows:

\input{src/overview/group-heating-and-cooling-coils}
\input{src/overview/group-coil-system-cooling-water}
\input{src/overview/group-coil-cooling-dx}

May be it should be arranged as follows since the the group-heating-and-cooling-coils contains the CoilSystem:Heating:DX

\input{src/overview/group-coil-system-cooling-water}
\input{src/overview/group-coil-cooling-dx}
\input{src/overview/group-heating-and-cooling-coils}

Copy link
Contributor

Choose a reason for hiding this comment

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

Not wanting to make extra work for you, but I think it would be better to paste the contents of group-coil-system-cooling-water.tex into the middle of group-heating-and-cooling-coils.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

And then what? Delete group-coil-system-cooling-water.tex. Anything else that needs to be done? I thought these tex files were to be somewhat specific to object type.

Copy link
Contributor

Choose a reason for hiding this comment

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

Well, yes. group-coil-system-cooling-water.tex is a new file here and contains only one component, not a whole group, so it would be deleted.

But, to your point the whole tex file organization is inconsistent. It's not worth lots of effort here, I just think it make more sense to keep the three coilsystem object together. If you want, you could move the other two into group-coil-system-cooling-water.tex and rename it to group-coil-system, but that seems like more trouble than it's worth. I'm probably the only one who cares what the order of the TOC looks like, but I expect to find similar things near each other.

Copy link
Contributor

Choose a reason for hiding this comment

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

The water cooling coil objects group-heating-and-cooling-coils are not placed next to each other. So, I may have to re-arrange them before moving the `group-coil-system-cooling-water.tex'.

Copy link
Contributor

Choose a reason for hiding this comment

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

@Nigusse That's not my intent. Just paste the section for CoilSystem:Cooling:Water right before the section for CoilSystem:Cooling:DX. Nothing more.

Copy link
Contributor

Choose a reason for hiding this comment

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

The following is going to be the order of the water coils in group-heating-and-cooling-coils:

Coil:Cooling:Water
Coil:Cooling:Water:DetailedGeometry
CoilSystem:Cooling:Water:HeatExchangerAssisted
CoilSystem:Cooling:Water


CoilSystem:Cooling:Water,
\memo Virtual container component that consists of a water cooling coil
\memo and its associated controls. This control object supports the
\memo available water coil types and may be placed directly on an
\memo air loop branch or in an outdoor air equipment list.
\min-fields 6
Copy link
Contributor

Choose a reason for hiding this comment

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

So, if getCoilWaterSystemInputData was using the old getObjectItem min-fields would need to be 10 so that all defaults would be processed. But getCoilWaterSystemInputData is using the !=fields.end method and the defaults are hard-coded there. But since this object is so short, I think it's useful for all fields to be shown in input files just for awareness. So, please change this to 10.

Copy link
Contributor

Choose a reason for hiding this comment

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

OK. Done.

A1, \field Name
Copy link
Contributor

Choose a reason for hiding this comment

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

This \reference name isn't used anywhere, so it's not needed. I see that Coilsystem:Cooling:DX has a similar nade that is referenced in FaultModel:TemperatureSensorOffset:CoilSupplyAir. I'm not suggesting this PR needs to add fault support for this system type, but you should post a new issue to have it added at some point.

Copy link
Contributor

Choose a reason for hiding this comment

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

Removed \reference WaterCoilSystemName.

Copy link
Contributor

Choose a reason for hiding this comment

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

@mjwitte If this field is autosizable, the auto-sized value is set to the condenser loop Design Loop Exit Temperature value and usually it ranges from 25C - 29C. This values is greater than the design supply air temperature, which leads to sizing problem. This field was added to overcome this limitation.

Copy link
Contributor

Choose a reason for hiding this comment

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

True, for your file, leaving it blank or setting it to autosize won't make sense. But when this coil is used for other applications, when it's blank or autosize (as suggested) it would grab the connected loop value. The behavior doesn't change here, it's a matter of do we want blank to be significant or do we want to say "autosize" to be consistent with other similar fields. And by that argument "Design Water Temperature Difference" should probably be autosizable also with a default of autosize.

@rraustad @Myoldmopar Any opinions on blank vs autosize for fields like this?

Copy link
Contributor

Choose a reason for hiding this comment

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

And if we agree to \default autosize, min-fields will need to be increased to include this field so that the default gets applied.

Copy link
Contributor

Choose a reason for hiding this comment

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

This \reference name isn't used anywhere, so it's not needed. I see that Coilsystem:Cooling:DX has a similar nade that is referenced in FaultModel:TemperatureSensorOffset:CoilSupplyAir. I'm not suggesting this PR needs to add fault support for this system type, but you should post a new issue to have it added at some point.

Added new issue #8941

\required-field
\type alpha
\reference-class-name validBranchEquipmentTypes
\reference validBranchEquipmentNames
\reference-class-name validOASysEquipmentTypes
\reference validOASysEquipmentNames
A2, \field Air Inlet Node Name
\required-field
\type node
A3, \field Air Outlet Node Name
\required-field
\type node
A4, \field Availability Schedule Name
\note Availability schedule name for this system. Schedule value > 0
\note means the system is available.
\note If this field is blank, the system is always available.
\type object-list
\object-list ScheduleNames
A5, \field Cooling Coil Object Type
\type choice
\required-field
\key Coil:Cooling:Water
\key Coil:Cooling:Water:DetailedGeometry
\key CoilSystem:Cooling:Water:HeatExchangerAssisted
A6, \field Cooling Coil Name
\required-field
\type object-list
\object-list CoolingCoilsWater
A7, \field Dehumidification Control Type
\type choice
\key None
\key Multimode
\key CoolReheat
\default None
\note None = meet sensible load only
\note Multimode = activate water coil and meet sensible load.
\note If no sensible load exists, and Run on Latent Load = Yes, and a latent
\note load exists, the coil will operate to meet the latent load.
\note If the latent load cannot be met the heat exchanger will be activated.
Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm, I don't think this is what we want. If control type = multimode and run on sensible = yes but run on latent = no, I would still expect the humidity control to switch on/off the HX as needed. The only thing run on latent = no indicates is that the coil shouldn't operate if there's only a latent load.

\note IF Run on Latent Load = No, the heat exchanger will always be active.
\note This control mode either switches the coil mode or allows the heat exchanger to
\note be turned on and off based on the zone dehumidification requirements. Valid
\note only with cooling coil type CoilSystem:Cooling:Water:HeatExchangerAssisted.
Copy link
Contributor

Choose a reason for hiding this comment

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

This is misleading and a little repetitive. Suggested change:

\note Multimode = activate water coil and meet sensible load.
\note If no sensible load exists, and Run on Latent Load = Yes, and a latent
\note load exists, the coil will operate to meet the latent load.
\note If the latent load cannot be met the heat exchanger will be activated.
\note IF Run on Latent Load = No, the heat exchanger will always be active.
\note This control mode either switches the coil mode or allows the heat exchanger to
\note be turned on and off based on the zone dehumidification requirements. Valid
\note only with cooling coil type CoilSystem:Cooling:Water:HeatExchangerAssisted.

Copy link
Contributor

Choose a reason for hiding this comment

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

I agree. Changes Done.

\note CoolReheat = cool beyond the dry-bulb setpoint as required to meet the
\note humidity setpoint. Valid with all cooling coil types. When a heat exchanger
\note assisted cooling coil is used, the heat exchanger is locked on at all times.
\note For all dehumidification controls, the max
\note humidity setpoint on the Sensor Node is used.
\note SetpointManager:SingleZone:Humidity:Maximum,
\note SetpointManager:MultiZone:Humidity:Maximum, or
\note SetpointManager:MultiZone:MaximumHumidity:Average, and
\note SetpointManager:OutdoorAirPretreat (optional) objects.
A8, \field Run on Sensible Load
\type choice
\key Yes
\key No
\default Yes
\note If Yes, unit will run if there is a sensible load.
\note If No, unit will not run if there is only a sensible load.
\note Dehumidification controls will be active if specified.
A9, \field Run on Latent Load
\type choice
\key Yes
\key No
\default No
\note If Yes, unit will run if there is a latent load.
\note even if there is no sensible load.
Copy link
Contributor

Choose a reason for hiding this comment

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

If No, unit will not run only if there is only a latent load.

Copy link
Contributor

Choose a reason for hiding this comment

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

Done.

\note If No, unit will not run if there is only a latent load.
\note Dehumidification controls will be active if specified.
N1; \field Minimum Air To Water Temperature Offset
\note Coil will turn on as required when inlet air temperature is above
\note water temperature by amount of offset. To model a waterside
\note economizer connect to condenser loop and increase offset as desired.
\type real
Copy link
Contributor

Choose a reason for hiding this comment

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

\units deltaC

Copy link
Contributor

Choose a reason for hiding this comment

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

Done.

\units deltaC
\minimum 0.0
Copy link
Contributor

Choose a reason for hiding this comment

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

Updated the IDD to correct key choices in Dehumidification Control Type input field.

\default 0.0

Coil:Cooling:DX,
\memo New general DX cooling coil supporting on or more speeds and one or or operating modes.
Expand Down Expand Up @@ -60577,6 +60671,7 @@ AirLoopHVAC:UnitarySystem,
\object-list UnitarySystemPerformaceNames
\note Enter the name of the performance specification object used to describe the multispeed coil.


UnitarySystemPerformance:Multispeed,
\memo The UnitarySystemPerformance object is used to specify the air flow ratio at each
\memo operating speed. This object is primarily used for multispeed DX and water coils to allow
Expand Down
34 changes: 34 additions & 0 deletions src/EnergyPlus/MixedAir.cc
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,34 @@ void SimOAComponent(EnergyPlusData &state,
latOut);
}
OACoolingCoil = true;
} else if (CompTypeNum == SimAirServingZones::CompType::CoilSystemWater) { // "CoilSystem:Cooling:Water"
if (state.dataAirLoop->OutsideAirSys(OASysNum).compPointer[CompIndex] == nullptr) {
UnitarySystems::UnitarySys thisSys;
state.dataAirLoop->OutsideAirSys(OASysNum).compPointer[CompIndex] =
thisSys.factory(state, DataHVACGlobals::UnitarySys_AnyCoilType, CompName, false, 0);
UnitarySystems::UnitarySys::checkUnitarySysCoilInOASysExists(state, CompName, 0);
}
if (Sim) {
bool HeatingActive = false;
bool CoolingActive = false;
Real64 OAUCoilOutTemp = 0.0;
bool ZoneEquipFlag = false;
Real64 sensOut = 0.0;
Real64 latOut = 0.0;
state.dataAirLoop->OutsideAirSys(OASysNum).compPointer[CompIndex]->simulate(state,
CompName,
FirstHVACIteration,
AirLoopNum,
CompIndex,
HeatingActive,
CoolingActive,
CompIndex,
OAUCoilOutTemp,
ZoneEquipFlag,
sensOut,
latOut);
}
OACoolingCoil = true;
Copy link
Contributor

Choose a reason for hiding this comment

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

Adds a new calling point for "CoilSystem:Cooling:Water" placed in OA system. If the pointer is null, then invokes the new instantiates this coil system as UnitarySystem.

} else if (CompTypeNum == SimAirServingZones::CompType::UnitarySystemModel) { // AirLoopHVAC:UnitarySystem
if (Sim) {
bool HeatingActive = false;
Expand Down Expand Up @@ -1110,6 +1138,12 @@ void GetOutsideAirSysInputs(EnergyPlusData &state)
// CheckDXCoolingCoilInOASysExists(state, state.dataAirLoop->OutsideAirSys(OASysNum).ComponentName(CompNum));
} else if (SELECT_CASE_var == "COILSYSTEM:HEATING:DX") {
state.dataAirLoop->OutsideAirSys(OASysNum).ComponentType_Num(CompNum) = SimAirServingZones::CompType::DXHeatPumpSystem;
} else if (SELECT_CASE_var == "COILSYSTEM:COOLING:WATER") {
state.dataAirLoop->OutsideAirSys(OASysNum).ComponentType_Num(CompNum) = SimAirServingZones::CompType::CoilSystemWater;
state.dataAirLoop->OutsideAirSys(OASysNum).ComponentIndex(CompNum) = CompNum;
UnitarySystems::UnitarySys thisSys;
state.dataAirLoop->OutsideAirSys(OASysNum).compPointer[CompNum] = thisSys.factory(
state, DataHVACGlobals::UnitarySys_AnyCoilType, state.dataAirLoop->OutsideAirSys(OASysNum).ComponentName(CompNum), false, 0);
Copy link
Contributor

Choose a reason for hiding this comment

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

Saves the component type and component index and instantiates this coil system as UnitarySystem.

} else if (SELECT_CASE_var == "AIRLOOPHVAC:UNITARYSYSTEM") {
state.dataAirLoop->OutsideAirSys(OASysNum).ComponentType_Num(CompNum) = SimAirServingZones::CompType::UnitarySystemModel;
UnitarySystems::UnitarySys thisSys;
Expand Down
32 changes: 32 additions & 0 deletions src/EnergyPlus/MixedAir.hh
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,38 @@ namespace MixedAir {
constexpr int On(1); // normal coil operation
constexpr int Off(0); // signal coil shouldn't run

// component types addressed by this module
enum class ComponentType
Copy link
Contributor

Choose a reason for hiding this comment

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

This is another merge error - this enum class was moved or eliminated.

Copy link
Contributor

Choose a reason for hiding this comment

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

Done.

{
Unassigned = -1,
None,
OAMixer_Num,
Fan_Simple_CV,
Fan_Simple_VAV,
WaterCoil_SimpleCool,
WaterCoil_Cooling,
WaterCoil_SimpleHeat,
SteamCoil_AirHeat,
WaterCoil_DetailedCool,
Coil_ElectricHeat,
Coil_GasHeat,
WaterCoil_CoolingHXAsst,
DXSystem,
HeatXchngr,
Desiccant,
Unglazed_SolarCollector,
EvapCooler,
PVT_AirBased,
Fan_ComponentModel,
DXHeatPumpSystem,
Coil_UserDefined,
Humidifier,
Fan_System_Object,
UnitarySystemModel,
VRFTerminalUnit,
CoilSystemWater
};

Copy link
Contributor

Choose a reason for hiding this comment

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

Update from develop and added new component type CoilSystemWater.

enum class iControllerType
{
None,
Expand Down
33 changes: 32 additions & 1 deletion src/EnergyPlus/SimAirServingZones.cc
Original file line number Diff line number Diff line change
Expand Up @@ -797,6 +797,8 @@ void GetAirPathData(EnergyPlusData &state)
PackagedUnit(AirSysNum) = true;
} else if (componentType == "COILSYSTEM:HEATING:DX") {
PackagedUnit(AirSysNum) = true;
} else if (componentType == "COILSYSTEM:COOLING:WATER") {
PackagedUnit(AirSysNum) = true;
} else if (componentType == "AIRLOOPHVAC:UNITARYSYSTEM") {
PackagedUnit(AirSysNum) = true;
} else if (componentType == "AIRLOOPHVAC:UNITARY:FURNACE:HEATONLY") {
Expand Down Expand Up @@ -1244,6 +1246,15 @@ void GetAirPathData(EnergyPlusData &state)
PrimaryAirSystems(AirSysNum).Branch(BranchNum).Comp(CompNum).Name,
false,
0);
} else if (componentType == "COILSYSTEM:COOLING:WATER") {
PrimaryAirSystems(AirSysNum).Branch(BranchNum).Comp(CompNum).CompType_Num = CompType::CoilSystemWater;
UnitarySystems::UnitarySys thisSys;
PrimaryAirSystems(AirSysNum).Branch(BranchNum).Comp(CompNum).compPointer =
thisSys.factory(state,
DataHVACGlobals::UnitarySys_AnyCoilType,
PrimaryAirSystems(AirSysNum).Branch(BranchNum).Comp(CompNum).Name,
false,
0);
Copy link
Contributor

Choose a reason for hiding this comment

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

Saves the component type and instantiates this coil system as UnitarySystem.

} else if (componentType == "AIRLOOPHVAC:UNITARY:FURNACE:HEATONLY") {
PrimaryAirSystems(AirSysNum).Branch(BranchNum).Comp(CompNum).CompType_Num = CompType::Furnace_UnitarySys_HeatOnly;
} else if (componentType == "AIRLOOPHVAC:UNITARY:FURNACE:HEATCOOL") {
Expand Down Expand Up @@ -3641,7 +3652,27 @@ void SimAirLoopComponent(EnergyPlusData &state,
ZoneEquipFlag,
sensOut,
latOut);

} else if (SELECT_CASE_var == CompType::CoilSystemWater) { // 'CoilSystemCooling:Water'
if (CompPointer == nullptr) {
UnitarySystems::UnitarySys thisSys;
CompPointer = thisSys.factory(state, DataHVACGlobals::UnitarySys_AnyCoilType, CompName, false, 0);
// temporary fix for saving pointer, eventually apply to UnitarySystem 16 lines above
state.dataAirSystemsData->PrimaryAirSystems(airLoopNum).Branch(branchNum).Comp(compNum).compPointer = CompPointer;
}
Real64 sensOut = 0.0;
Real64 latOut = 0.0;
CompPointer->simulate(state,
CompName,
FirstHVACIteration,
AirLoopNum,
CompIndex,
HeatingActive,
CoolingActive,
OAUnitNum,
OAUCoilOutTemp,
ZoneEquipFlag,
sensOut,
latOut);
Copy link
Contributor

Choose a reason for hiding this comment

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

Simulation calling point for "CoilSystem:Cooling:Water" object placed in airloop.

} else if (SELECT_CASE_var == CompType::Furnace_UnitarySys_HeatOnly || SELECT_CASE_var == CompType::Furnace_UnitarySys_HeatCool) {
// 'AirLoopHVAC:Unitary:Furnace:HeatOnly', 'AirLoopHVAC:Unitary:Furnace:HeatCool',
// 'AirLoopHVAC:UnitaryHeatOnly', 'AirLoopHVAC:UnitaryHeatCool'
Expand Down
35 changes: 34 additions & 1 deletion src/EnergyPlus/SimAirServingZones.hh
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,38 @@ namespace SimAirServingZones {

// CompType numerics -- for this module
// component types addressed by this module
constexpr int OAMixer_Num(1);
Copy link
Contributor

Choose a reason for hiding this comment

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

This is a merge mistake - all of these ints should be removed.

Copy link
Contributor

Choose a reason for hiding this comment

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

Done.

constexpr int Fan_Simple_CV(2);
constexpr int Fan_Simple_VAV(3);
constexpr int WaterCoil_SimpleCool(4);
constexpr int WaterCoil_Cooling(5);
constexpr int WaterCoil_SimpleHeat(6);
constexpr int SteamCoil_AirHeat(7);
constexpr int WaterCoil_DetailedCool(8);
constexpr int Coil_ElectricHeat(9);
constexpr int Coil_GasHeat(10);
constexpr int WaterCoil_CoolingHXAsst(11);
constexpr int DXCoil_CoolingHXAsst(12);
constexpr int Coil_DeSuperHeat(13);
constexpr int DXSystem(14);
constexpr int HeatXchngr(15);
constexpr int Desiccant(16);
constexpr int Unglazed_SolarCollector(17);
constexpr int EvapCooler(18);
constexpr int Furnace_UnitarySys_HeatOnly(19);
constexpr int Furnace_UnitarySys_HeatCool(20);
constexpr int Humidifier(21);
constexpr int Duct(22);
constexpr int UnitarySystem_BypassVAVSys(23);
constexpr int UnitarySystem_MSHeatPump(24);
constexpr int Fan_ComponentModel(25);
constexpr int DXHeatPumpSystem(26);
constexpr int CoilUserDefined(27);
constexpr int Fan_System_Object(28);
constexpr int UnitarySystemModel(29);
constexpr int ZoneVRFasAirLoopEquip(30);
constexpr int CoilSystemWater(31);
Copy link
Contributor

Choose a reason for hiding this comment

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

Adds new component type.


enum class CompType
{
Unassigned = -1,
Expand Down Expand Up @@ -108,7 +140,8 @@ namespace SimAirServingZones {
UnitarySystemModel,
ZoneVRFasAirLoopEquip,
PVT_AirBased,
VRFTerminalUnit
VRFTerminalUnit,
CoilSystemWater
};

void ManageAirLoops(EnergyPlusData &state,
Expand Down
3 changes: 3 additions & 0 deletions src/EnergyPlus/SystemReports.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3915,6 +3915,7 @@ void CalcSystemEnergyUse(EnergyPlusData &state,
COILSYSTEM_COOLING_DX,
COILSYSTEM_COOLING_DX_HEATEXCHANGERASSISTED,
COILSYSTEM_COOLING_WATER_HEATEXCHANGERASSISTED,
COILSYSTEM_COOLING_WATER,
Copy link
Contributor

Choose a reason for hiding this comment

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

Adds enum type "COILSYSTEM_COOLING_WATER" for use with CalcSystemEnergyUse() function and system reports.

COILSYSTEM_HEATING_DX,
DEHUMIDIFIER_DESICCANT_NOFANS,
DEHUMIDIFIER_DESICCANT_SYSTEM,
Expand Down Expand Up @@ -4009,6 +4010,7 @@ void CalcSystemEnergyUse(EnergyPlusData &state,
{"COILSYSTEM:COOLING:DX", COILSYSTEM_COOLING_DX},
{"COILSYSTEM:COOLING:DX:HEATEXCHANGERASSISTED", COILSYSTEM_COOLING_DX_HEATEXCHANGERASSISTED},
{"COILSYSTEM:COOLING:WATER:HEATEXCHANGERASSISTED", COILSYSTEM_COOLING_WATER_HEATEXCHANGERASSISTED},
{"COILSYSTEM:COOLING:WATER", COILSYSTEM_COOLING_WATER},
{"COILSYSTEM:HEATING:DX", COILSYSTEM_HEATING_DX},
{"DEHUMIDIFIER:DESICCANT:NOFANS", DEHUMIDIFIER_DESICCANT_NOFANS},
{"DEHUMIDIFIER:DESICCANT:SYSTEM", DEHUMIDIFIER_DESICCANT_SYSTEM},
Expand Down Expand Up @@ -4090,6 +4092,7 @@ void CalcSystemEnergyUse(EnergyPlusData &state,
case COIL_COOLING_WATERTOAIRHEATPUMP_VARIABLESPEEDEQUATIONFIT:
case COIL_COOLING_DX_VARIABLESPEED:
case COILSYSTEM_COOLING_WATER_HEATEXCHANGERASSISTED:
case COILSYSTEM_COOLING_WATER:
case COIL_COOLING_WATER_DETAILEDGEOMETRY:
case COIL_COOLING_WATER:
case COIL_COOLING_DX_SINGLESPEED_THERMALSTORAGE:
Expand Down
Loading