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 Feature Runaround Heat Recovery Loop #8520

Merged
merged 23 commits into from
Aug 19, 2021
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6c13893
NFP for new feature Run-around Coil Loop
rraustad Feb 8, 2021
0a60ee1
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into NFP…
rraustad Feb 8, 2021
6a60e41
Initial HR coil model
rraustad Jul 30, 2021
ebd7dae
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into NFP…
rraustad Jul 30, 2021
4da27de
Merge branch 'NFP-Waterside-Economizer' of https://github.com/NREL/En…
rraustad Aug 2, 2021
eb97c46
Merge branch 'NFP-Waterside-Economizer' of https://github.com/NREL/En…
rraustad Aug 2, 2021
2f7fb85
Various changes, add example file
rraustad Aug 3, 2021
1fd0079
Merge branch 'NFP-Waterside-Economizer' of https://github.com/NREL/En…
rraustad Aug 3, 2021
45028f8
Clang format UnitarySystem
rraustad Aug 3, 2021
1d60dce
Correct merge mistakes and custom_check find_byref_bool_override.py
rraustad Aug 4, 2021
98c5f02
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into NFP…
rraustad Aug 10, 2021
0cce7af
Address comments, warnings and diffs.
rraustad Aug 11, 2021
95f1036
Attempt to fix diffs
rraustad Aug 11, 2021
605d58e
Try to reduce html diffs.
rraustad Aug 12, 2021
2f36ffc
Match more recent IDD text
rraustad Aug 12, 2021
a3da694
Address more comments and diffs
rraustad Aug 13, 2021
5562244
Merge branch 'NFP-runaround-heat-recovery-loop' of https://github.com…
rraustad Aug 13, 2021
93122eb
enum correction and figure rename
rraustad Aug 13, 2021
94befd5
Add figure with correct case
rraustad Aug 13, 2021
691a5b0
Clean up
rraustad Aug 13, 2021
eae9d12
...
rraustad Aug 13, 2021
2e9ae85
Address recent comments
rraustad Aug 13, 2021
ae6ca0e
Fix coilsystemcoolingwater unit test
mjwitte Aug 13, 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
180 changes: 180 additions & 0 deletions design/FY2021/NFP-runarouind-heat-recovery-loop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
Run-around Heat Recovery Loop
================

**R. Raustad, FSEC**

- Original Date - 2/5/21 DRAFT NFP
- Revision Date - 8/2/21 FINAL NFP and Design Doc


## Justification for New Feature ##

Heat recovery is common in HVAC systems. A heat exchanger can easily be installed in an air system where two air steams are side-by-side. However, when the air steams are not located near each other, application of heat recovery is more difficult. Designers have overcome this issue by using water coils connected with piping and a pump to create a closed loop system where energy is transfered between these two coil. Third parties are not able to model this type of system in EnergyPlus.

## E-mail and Conference Call Conclusions ##

Several conference calls have guided this new feature over the last few months. The model evolved as:
1) allow coil-on-branch configuration with existing plant loop (HVACController did not work)
2) allow coil-on-branch configuration with RootSolver style controller (water temps did not converge and SimHVAC max itertion warnings appeared)
3) create new class for CoilSystem:WaterCoil:HeatRecovery and initialize plant loop water temp on FirstHVACIteration (good control)
4) use new object CoilSystem:Cooling:Water and integrate into UnitarySystem with similar plant loop water temperature initialization (same good result, much less code overhead)

## Overview ##

The following is an except of the abstract from <http://what-when-how.com/energy-engineering/run-around-heat-recovery-systems-energy-engineering/>.

Run-around heat-recovery systems are often used to recover heat from the exhaust air in building ventilation systems, particularly in cold climates. In a typical heat-recovery system, an ethylene glycol and water solution is used as a “coupling fluid” to prevent the system from freezing. The design of a run-around heat-recovery system involves consideration of the heat-transfer rates between the fluids. A challenging problem is how to significantly increase those rates between the fluids, while using less energy for heating and cooling loads in buildings. Due to the heat-transfer characteristics of this coupling fluid and the operating and capital cost factors, the typical overall effectiveness of such systems is only about 50%. Studies show that two-phase, gas-liquid coupling fluids have much higher convective heat-transfer rates than single-phase flows at the same mass flow rates.

The following figures and text were provided in the Trane TRACE 700 User’s Manual • CDS-PRM001-EN at <https://software.trane.com/RightNow/0103-CoilLoopEnergyRecovery/Coil_loop_exhaust-air_energy_recovery.pdf>.

A simple schematic of a run-around coil heat recovery loop is shown in Figure 1. Insert A and B show heat recovery between two air stream while insert C shows energy transfer from before to after a cooling coil (similar to `CoilSystem:Cooling:DX:HeatExchangerAssisted`.

![RunaroundCoilLoop](RunaroundCoilHXLoop.png)
## *Figure 1. Run around coil loop schematic.* ##

Figure 2 shows an example run-around coil design for winter and summer operation. During the heating season (Inset A), heat extracted from the exhaust air stream (EA)
Copy link
Contributor

Choose a reason for hiding this comment

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

Exhaust air stream is interesting. If there is scope would be interesting to be able to put a coil in the outlet of each zone exhaust fan.

Copy link
Contributor

Choose a reason for hiding this comment

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

I have a related new feature task for "Dedicated Airstreams to Model General Exhaust Fans" so it should be possible to design that to work with this.

warms the air brought into the building. Operation of the coil loop is limited to prevent the supply-air temperature from exceeding the cooling set point. (This condition is most likely to occur on mild days during the spring and fall.) Preconditioning the outdoor
air (OA) in this manner reduces the heating load, which in turn reduces the energy consumption of the HVAC system.

![RunaroundCoilDesignExample](RunaroundCoilDesignExample.png)
## *Figure 2. Run around coil design example.* ##

## Approach ##

There are 3 water coil models in EnergyPlus.

1. Coil:Cooling:Water
2. Coil:Cooling:Water:DetailedGeometry
3. Coil:Heating:Water

As shown in figure 2, one coil heats in winter and cools in summer while the other does the reverse as is typical in heat recovery components. For this reason, a water coil model that can exchange heat based on the entering air and water temperature is required. It is believed that the cooling coil model behaves this way (i.e., can heat the air under certain conditions). I have also seen this a few times and MJWitte also believes the water cooling coil model has this capability. Through testing it has been confirmed Coil:Cooling:Water has the ability to cool or heat the air/water.

There are two possible approaches I can think of.

1. Connect 2 water cooling coils in a typical plant configuration. With one coil on the demand side of the plant loop while the other is a supply side component. This would allow alternate configurations if desired. For example to allow a boiler, chiller, evap cooler, etc. on the supply side which maintains a certain temperature to the supply side coil. Although I can't think of a reason to do this, it seems like a very flexible way to achieve the goal for a run-around coil application. A user could create a plant loop and then add two coils and a pump.

**Pro:** This approach may require minimal changes to the IDD (the PlantLoop field for Plant Equipment Operation Scheme Name is required). Would provide flexibility in configuration. Pipe losses could be modeled.
**Con:** The coil model would use ControlcompOutput as the solution algorithm. The air-side and water-side calculations would be disassociated the same as water coils on a branch are currently modeled.
Copy link
Contributor

Choose a reason for hiding this comment

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

Why would it need to use ControlCompOutput? Seems like a versatile coil controller that can switch between heating and cooling is the main thing to do here and it could use root solver.

Plant loop approach can also provide autosizing, support for different glycol mixtures, different pumping arrangements, pump heat to fluid modeling, and ability to combine multiple air handlers.


I'm not yet sure if objects other than the PlantLoop are even needed for a loop with 2 coils and a pump. Without a plant component (e.g., boiler or chiller) would the other typical plant objects shown here even be needed?
Copy link
Contributor

Choose a reason for hiding this comment

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

I suspect some kind of operation scheme will be needed, probably Uncontrolled or ComponentSetpoint


PlantLoop,
Chilled Water Loop, !- Name
Water, !- Fluid Type
, !- User Defined Fluid Type
CW Loop Operation, !- Plant Equipment Operation Scheme Name
CW Supply Outlet Node, !- Loop Temperature Setpoint Node Name
98, !- Maximum Loop Temperature {C}
1, !- Minimum Loop Temperature {C}
autosize, !- Maximum Loop Flow Rate {m3/s}
0.0, !- Minimum Loop Flow Rate {m3/s}
, !- Plant Loop Volume {m3}
CW Supply Inlet Node, !- Plant Side Inlet Node Name
CW Supply Outlet Node, !- Plant Side Outlet Node Name
Cooling Supply Side Branches, !- Plant Side Branch List Name
Cooling Supply Side Connectors, !- Plant Side Connector List Name
CW Demand Inlet Node, !- Demand Side Inlet Node Name
CW Demand Outlet Node, !- Demand Side Outlet Node Name
Cooling Demand Side Branches, !- Demand Side Branch List Name
Cooling Demand Side Connectors, !- Demand Side Connector List Name
SequentialLoad, !- Load Distribution Scheme
CW Avail List; !- Availability Manager List Name

PlantEquipmentOperationSchemes,
CW Loop Operation, !- Name
PlantEquipmentOperation:CoolingLoad, !- Control Scheme 1 Object Type
Central Chiller Only, !- Control Scheme 1 Name
PlantOnSched; !- Control Scheme 1 Schedule Name

PlantEquipmentOperation:CoolingLoad,
Central Chiller Only, !- Name
0, !- Load Range 1 Lower Limit {W}
900000, !- Load Range 1 Upper Limit {W}
Cooling Plant; !- Range 1 Equipment List Name

PlantEquipmentList,
Cooling Plant, !- Name
Chiller:Electric, !- Equipment 1 Object Type
Central Chiller; !- Equipment 1 Name


2. Connect two water cooling coils together water outlet node of one coil is connected directly to the water inlet node of the other coil. A pump could be connected in series with these coils. Using this approach a new object could be created that specifies the type and name of the water coils, and also the pump. Since these components would be in an air stream, air inlet and outlet node name would be needed. Two of these objects would be required to complete the configuration and these objects could be placed in any air loop directly on a branch. A tentative approach would be to model both coils when any object is simulated.

**Pro:** The ControlCompOutput solution algorithm would not be required. RootSolver could be used instead and the solution of the air and water sides of this loop could be solved at one time.
**Con:** This approach would require an IDD change. There is also no real pipe objects so pipe losses could not be modeled. Pipe objects should be considered as part of this effort (i.e., use of plant and demand side branch and connector lists).

CoilSystem:WaterCoil:HeatExchanger,
A1, Name
A2, Companion CoilSystem:WaterCoil:HeatExchanger object name
A2, Cooling Coil Type
A3, Cooling Coil Name
A6, Pump Type
A7, Pump Name
A8, Coil system inlet air node name
A9; Coil system outlet air node name

**Update:** the new CoilSystem:Cooling:Water object will be used to replace this suggestion. This new object was recently added to UnitarySystem and is in the process of being merged into E+ develop. Three new inputs were added to allow control of the new run-around coil loop.

CoilSystem:Cooling:Water,
...
A10, \field Economizer Lockout
\type choice
\key Yes
\key No
\default Yes
\note Yes means that the heat recovery will be locked out (off)
N2, \field Minimum Water Loop Temperature For Heat Recovery
\note Only used for heat recovery loops.
\note Loop will turn off below this temperature.
\type real
\units C
\default 0.0
A11; \field Companion Coil Used For Heat Recovery
\note Only used for heat recovery loops.
\note Entering a coil name indicates a heat recovery loop is specified.
\note Coil listed is connected in series with this objects coil on demand side
\note branch of a plant loop. A dedicated plant loop with no supply side
\note equipment, other than a pump, is currently required.
\note Only Coil:Cooling:Water coil type is currently allowed for heat recovery loops.
\type object-list
\object-list CoolingCoilsWater


## Design Document ##
- Implement new feature using existing CoilSystem:Cool:Water object
- Add new IDD inputs for model control
- Incorporate new inputs in function getCoilWaterSystemInputData
- Add controls to Init
- Execute model in function controlCoolingSystemToSP

## Testing/Validation/Data Sources ##

A run around coil system will be tested in the OA system. Other configurations will be investigated, such as return to supply of an air loop.

## Input Output Reference Documentation ##

Add to new documentation for CoilSystem:Cooling:Water

## Input Description ##

TBD

## Outputs Description ##

TBD

## Engineering Reference ##

TBD

## Example File and Transition Changes ##

An example file will be created highlighting the use and connections for this new feature.

## References ##

<http://www.colmaccoil.com/media/42064/run-around-coil-loop-heat-recovery.pdf>

<https://software.trane.com/RightNow/0103-CoilLoopEnergyRecovery/Coil_loop_exhaust-air_energy_recovery.pdf>

<http://what-when-how.com/energy-engineering/run-around-heat-recovery-systems-energy-engineering/>
Binary file added design/FY2021/RunaroundCoilDesignExample.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 design/FY2021/RunaroundCoilHXLoop.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,11 @@ \subsection{Sky Solar Radiation Diffusely Reflected from Obstructions}\label{sky

\({obs,i}\) denotes the obstruction hit by ray \emph{i},

\({Hit\(_{obs,i}}\) = 1 if ray \emph{i} hits an obstruction, = 0 otherwise,
\({Hit_{obs,i}}\) = 1 if ray \emph{i} hits an obstruction, = 0 otherwise,

\({ViewFacSky\(_{obs,i}}\) = unobstructed sky view factor of the obstruction = \((1 + \cos til{t_{obs}})/2\) ,
\({ViewFacSky_{obs,i}}\) = unobstructed sky view factor of the obstruction = \((1 + \cos til{t_{obs}})/2\) ,

\({DifShdgRatioIsoSky\(_{obs,i}}\) = (obstructed sky irradiance on obstruction)/(unobstructed sky irradiance on obstruction)
\({DifShdgRatioIsoSky_{obs,i}}\) = (obstructed sky irradiance on obstruction)/(unobstructed sky irradiance on obstruction)

In this equation, the product \emph{ViewFacSky*DifShdgRatioIsoSky} is the sky irradiance at the hit point divided by the horizontal sky irradiance taking into account shadowing of sky diffuse radiation on the obstruction by other obstructions, and assuming that the radiance of the sky is uniform. Note that we ignore secondary reflections here and in the following sections. In the present case this means that the irradiance at the hit point due to reflection of sky radiation from the ground or from other obstructions is not considered.

Expand Down
1 change: 1 addition & 0 deletions doc/input-output-reference/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ set(INCLUDED_IMAGES
${PROJECT_SOURCE_DIR}/input-output-reference/media/ACStorageBussDiagram.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/AirLoopComponentMatrix.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/ChangeoverBypassVAV-ReturnPlenumOrMixer.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/CoilSystemWater_HeatRecovery.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/DCInverterBussDiagram.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/DCInverterWithACStorageBussDiagram.png
${PROJECT_SOURCE_DIR}/input-output-reference/media/DCInverterWithDCStorageBussDiagram.png
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading