In order to integrate the air handling system simulation
with the zones simulation, methods were developed to model the
system air loop and its interactions with the zones due to
temperature controls and the relative difference between the
zone and supply air temperatures. A similar situation is
encountered when integrating the central plant simulation.
Typically, the central plant interacts with the systems via a
fluid loop between the plant components and heat exchangers,
called either heating or cooling coils. In EnergyPlus the
performance of the air systems and plant are interdependent
because the simulations are combined. The plant outputs must
match the system inputs and vice versa. That is, the
temperature of the chilled water leaving the plant must equal
the temperature of the water entering the coils, and the
chilled water flow rate must satisfy mass continuity. In
addition, coil controls are usually necessary to ensure that
the values of chilled water flow variables entering and
leaving the coil remain in a reasonable range. Plants can also
interact with each other so that the operation of a chilled
water loop and chiller will affect the operation of a
condenser water loop.
There are two main types of loops within the HVAC
simulation in EnergyPlus: an air loop and a plant loop. The
air loop is assumed to use air as the transport medium as part
of an air handling system while the plant loops use a liquid
fluid of the user’s choosing (typically water). Condenser
loops are a special case of plant loop that are for heat
rejection and are distinguished by slightly different control
options and applicable equipment types. A user may have any
number of each type of loop in a particular input file. There
are no explicit limits on the number of loops within the
program—the user is only limited by computer hardware.
Execution speed will naturally vary with the complexity of the
input file.
Plant loops are further divided into “half-loops” or
“semi-loops” for organizational clarity and simulation
logistics (see Figure “Connections between the Main HVAC
Simulation Loops and Half-Loops”). These sub-loops, or
half-loop sides, are matched pairs that consist of half of a
main plant loop. Plant loops are broken into supply and demand
sides. The plant demand side half-loop contains equipment that
places a load on the primary equipment. This might include
coils, baseboards, radiant systems, etc. The load is met by
primary equipment such as chillers or boilers on the supply
side half-loop. Each supply side half-loop must be connected
to a demand side half-loop and vice versa. A similar breakdown
is present on condenser loops where the demand side includes
the water side of chiller’s condensers while the supply side
includes condenser equipment such as cooling towers.
Connections between the Main
HVAC Simulation Loops and Half-Loops. [fig:connections-between-the-main-hvac-simulation]
The breakdown into two half-loops allows for better
handling and control of information and simulation flow
throughout the program. Direct connections between the
half-loops of the air, plant, and condenser loops are enhanced
by components with connections between the various main loop
types. For example, coils (heating or cooling) are in reality
heat exchangers with an air and a water or refrigerant side.
The air side of the coil is handled within the air loop where
the control of the device is also maintained. The fluid side
of the coil is handled within the plant demand side, which
passes the energy requirements of the coil on to the plant
supply side. All loops are simulated together by successively
modeling each half-loop in a particular calling order. Overall
iterations ensure that the results for the current time step
are balanced and updated information has been passed to both
sides of the sub-loops as well as across to the other side of
air loop connections such as coils.
The plant equipment on a half-loop is described by a set of
branches for that half-loop. Components can be arranged on a
branch in series, and branches can be placed in parallel, with
some restrictions. Figure “Branch
Layout for Individual Plant Half-Loops” provides an overview
of the intended branch layout for each plant half-loop.
Branches are individual legs within the loop structure. Thus,
the segment between point A and point B is defined as a
branch, as is the section between points E and F. There may be
multiple sections (C1 to D1 through Cn to Dn) in between the
splitter and mixer.
Each half-loop may only have one splitter and one mixer.
Thus, equipment may be in parallel between the mixer and
splitter, however, within any single branch, there can only be
components in series and not in parallel. The topology rules
for individual half-loops allow a reasonable amount of
flexibility without requiring a complicated solver routine to
determine the actual flow and temperature conditions. Note
that since plant supply and demand are broken up into two
separate half-loops, chillers or boilers may be in parallel to
each other in the supply side and coils may be in parallel to
each other on the demand side. Thus, the restriction of only a
single splitter and mixer on a particular half-loop does not
unduly limit the allowable configurations. In some cases a
single branch can be used to define an entire half-loop, but
in general a half-loop should have a splitter and a mixer even
if all equipment on the sub-loop is simply in series.
In addition, to avoid the need for overly complex solver
routines, there are some restrictions on the placement of
pumps within a particular half-loop. There are two general
types of pumps, loop pumps and branch pumps. A pump that is
the first component on the first branch (between A and B) is
termed a “loop pump” while any pump in the parallel section
(between Ci and Di) is termed a “branch pump”. The simplest
and most common arrangement is to have one loop pump on the
supply side inlet. In plant demand half-loops pumps can be
placed only in the inlet branch. This will allow simulation of
primary-secondary systems. For more information on pumps and
pump placement rules, see the section on
PipingSystem:Underground Simulation Pumps in this
document.
Branch Layout for Individual
Plant Half-Loops [fig:branch-layout-for-individual-plant-half-loops]
Essentially, each branch is made up of one or more
components linked together in series. The branch has system
nodes that store properties at a location on the loop
(temperature, enthalpy, flow rate, etc.) at the beginning and
end of the branch as well as between components. Components on
the branch take the conditions of the node at their inlet and
use that information as well as overall control information to
simulate the component and write the outlet data to the node
following the component. This information is then used either
by the next component on the branch or establishes the outlet
conditions for the branch.
Although the plant model in EnergyPlus is quite flexible,
in most cases the topology of the plant system in the model
will be somewhat different from the topology of the actual
plant system in a building. EnergyPlus is focused on modeling
building energy performance over long periods of time and is
not intended as a completely flexible system that can directly
model any actual plant system with its full complexity and
exact layout. Given the design of an actual complex plant
system, the modeler will typically need to develop a simpler
system that conforms to EnergyPlus’s capabilities and strives
to capture the issues important for energy consumption
modeling. Just like complex geometry should be simplified
into thermal zones for energy models, complex plants should to
be simplified into sets of pairs of closed half-loops with the
allowed branch topologies.
Because there can be multiple plant loops in a model that
depend on each other, one job of the plant manager is to
determine an appropriate calling order for the half-loops.
The initial starting calling order (and the order always used
prior to EnergyPlus Version
7) is as follows:
1. Call all the demand side half-loops of the plant
loops (in input object order)
2. Call all the supply side half-loops of plant loops
(in input object order)
3. Call all the demand side half-loops of condenser
loops (in input object order)
4. Call all the supply side half-loops of the condenser
loops (in input object order).
This initial calling order is then revised during a setup
phase of program execution when the plant component models are
iteratively read in, initialized and sized. The algorithm is
based on information provided by those component models that
connect loops together. The components register that two
loop-sides are connected and declare which one places demands
on the other. If a half loop is connected and places demands
on anther loop, then the calling order for the independent
demanding loop is placed just ahead of the dependent loaded
half-loop. For example a water cooled chiller component model
reports that the supply side of the chilled water loop is
connected to the demand side of the condenser loop and that
the chilled water loop places demands on the condenser loop.
The plant manger algorithm is iterative and repeatedly calls
all of the half loops a total of four times. After this setup
phase, the calling order is fixed for the rest of the
simulation.
An important aspect of the solution procedure within plant
loops is the method used to solve for the fluid flow rates
throughout the various half-loops. This involves making the
supply side meet a particular load and flow situation based on
the simulation of the demand side loops. Load distribution is
an issue that must be addressed as well as how flow rates are
adjusted and temperatures are updated. These issues are
discussed in the next several subsections, and the algorithms
described are important to how the plant simulation
functions.
In the first step, the plant loop manager calls the
appropriate module to simulate (in flow order) all of the
components on each branch of the loop except for splitters and
mixers. In this step, each component would set the conditions
at the outlet node including temperature, flow rate, maximum
allowed (design) flow rate, minimum allowed (design) flow
rate, maximum available flow rate, and minimum available flow
rate. This would be based purely on the component’s own
control scheme and thus each component would be free to
request as much (or as little) flow as desired.
In the second step, the loop manager would resolve the flow
at all nodes and through all branches of the local loop. The
components are then simulated with the corrected flows. For
this iteration, the flow resolver sets the flow rate through
each loop component.
The plant models determine an overall fluid flow rate for
each loop based on the dynamic requests and needs of the
components on the loop. The flow resolver examines the
requests and needs of each half-loop and chooses an overall
flow rate. As individual plant components are modeled, they
register their requests for fluid flow which are stored on the
inlet node (variable called MassFlowRateRequest). These
requests for flow are used for two purposes, overall loop
flows and resolution of parallel flows inside a
splitter/mixer. For determining the overall loop flow
request, the requests by individual components are further
qualified into three categories based on the nature of the
device.
1. Need flow and turns loop on
2. Need flow if loop is already on
3. Take what ever flow they get.
The loop will only run at all if there are flow requests of
type 1. If there are flow requests of type 2, they will not
turn on the loop but may affect the overall flow rate if it is
already on because of some non-zero type 1 requests. Flow
requests of type 3 will not affect the overall loop flow
rate. These classifications are hard coded and cannot be
altered by the user.
The pump is quite simply the component that drives the flow
(also see PipingSystem:Underground Simulation Pumps). . How it
reacts depends on several different conditions. In total,
there are three different decision variables, two of which are
defined by user input. These three deciding factors are
whether the pump is constant or variable speed, whether the
pump operation is continuous or intermittent, and whether or
not there is a request for overall loop flow. After the
overall loop flow request has been determined the simulation
knows what the loop would like to do. The next thing it does
is simulation all the loop pumps to see what the pumps can
actually provide. Then the overall loop flow is bounded by the
minimum and maximum that the loop pumps can provide at that
time. The operation of a constant speed pump is fairly
straightforward. If the user designates a constant speed pump
that is operating continuously, the pump will run regardless
of whether or not there is a load. This may have the net
effect of adding heat to the loop if no equipment is turned
on. If the pump is constant speed and operates intermittently,
the pump will run at its capacity if a load is sensed and will
shut off if there is no load on the loop.
A variable speed pump is defined with maximum and minimum
flow rates that are the physical limits of the device. If
there is no load on the loop and the pump is operating
intermittently, then the pump can shutdown. For any other
condition such as the loop having a load and the pump is
operating intermittently or the pump is continuously operating
(regardless of the loading condition), the pump will operate
and select a flow somewhere between the minimum and maximum
limits. In these cases where the pump is running, it will try
to meet the flow request for the overall loop.
In many cases, the first estimate of flow requested by the
demand side tends to be fairly accurate and the flow rate does
not vary in subsequent iterations. However, because there is
the possibility that the coils or some other component might
request more flow in future iterations during the same time
step, the program must not only set flow rates but also
maintain a record of the current maximum and minimum flow rate
limits. This information is important not only to the pump
itself but also to other pieces of equipment which may control
their flow rates and thus require knowledge of the limits
within which they may work. In general, the decisions on what
to set the maximum and minimum flow rates is directly related
to the type of pump (constant or variable speed). For constant
speed pumps, the maximum and minimum flow rate values are the
same and thus if the flow requested does not match this, the
other components must either deal with the flow or a bypass
branch must be available to handle the excess flow. For
variable speed pumps, the maximum and minimum flow rates are
set by the user-defined limits.
Component models, such as boilers, chillers, condensers and
cooling towers are simulated on the supply side of the plant
and condenser loops. In order to allow specification of
realistic configurations, the plant loop managers were
designed to support parallel-serial connection of component
models on the loop. In addition, loop managers were designed
to support both semi-deterministic models (e.g. the parameter
estimation models of the ASHRAE Primary Toolkit [Pedersen
2001]) and “demand based” models (e.g. the performance map
models of BLAST and DOE2.1E). As a result, the loop manager
must be able to simulate models that require the mass flow
rate as an input and models that calculate the mass flow rate
as an output—sometimes in the context of a single loop
configuration.
In order to achieve these design criteria without resorting
to a pressure based flow network solver in the HVAC portion of
the code, a rules-based “flow resolver” was developed for the
EnergyPlus plant manager. The flow resolver is based on the
following assumptions and limitations:
Each loop is only allowed to have a single splitter and
a single mixer
Due to the fact that there can only be one splitter and
one mixer on a given loop, it follows logically that there can
be at most one bypass on each loop side
No other components may be in series with a bypass,
i.e., a branch that contains a bypass may have no other
equipment on that branch
Equipment may be in parallel only between the splitter
and mixer components of a loop
Equipment may be hooked together in series in each
branch of the loop
Flow rates on individual branches will be controlled
using maximum and minimum available flow rate limits
The flow resolver employs a simple predictor-corrector
algorithm to enforce mass continuity across the plant loop
splitter as shown in the following figure.
Plant/Condenser Supply Side
Solution Scheme. [fig:plantcondenser-supply-side-solution-scheme.]
As previously discussed, the pump establishes the total
loop mass flow rate by setting the flow in the first supply
side branch. In the second step, a predictor algorithm calls
to simulate each piece of equipment on the loop and they
update their mass flow rate requests based on the current flow
rates, temperatures and load dispatch requests. The loop
manager calls the appropriate module to simulate (in flow
order) all of the components on each branch of the loop except
for splitters and mixers. In this step, each component sets
the conditions at its outlet node including temperature and
sets component flows on the inlet node. Each component and
branch is classified for their type of flow control. Prior to
version 7 this was input by the user where branch objects were
tagged in the user input file as an ACTIVE, SERIESACTIVE,
PASSIVE or BYPASS type of model. As of version 7 this has
been hard coded and the input is no longer used. An ACTIVE
flow control type describes a demand based plant model that
calculates mass flow rate as an output. An ACTIVE component
when OFF will shut down the whole branch irrespective of the
type of other components on the branch. A SERIESACTIVE branch
is like an ACTIVE component except that there are more than
one ACTIVE components on the branch so that two components
requests may be at odds with each other and so it might not
shut down the whole branch when the component is OFF. The flow
resolution algorithm is same for both ACTIVE and SERIESACTIVE
components and in the rest of the document description of one
type will fit the other type too. A PASSIVE type describes a
semi-deterministic model that is simulated with the mass flow
rate as an input. The BYPASS type designates a loop
bypass.
The predictor algorithm first establishes the desired flow
rate of each branch by searching for ACTIVE components on the
branch. The first ACTIVE component in simulation order sets
the desired branch flow. Branches with only PASSIVE components
require a flow rate between the minimum and maximum allowable
branch flow. Branches with a BYPASS component have a branch
flow only when all other branches combined cannot handle the
entire loop flow.
The loop flow resolver makes any necessary “corrections”
to the requested branch flows in order to enforce overall
continuity on the loop. If mass conservation allows all ACTIVE
branches to be satisfied, then the remaining flow is divided
between the PASSIVE branches and as a last resort, the BYPASS.
If there is insufficient flow to meet the branch demand,
ACTIVE branch requests are met first in the order that the
branches appear in the branch list in the input file.
The flow rate is resolved first for each individual branch.
For every branch, the program cycles through each node on the
branch and determines what the flow requests and flow limits
are. The most restrictive flow constraints are assumed to be
valid for the entire branch regardless of component type.
Active components are given highest priority for requesting a
particular flow rate. If there is more than one active
component on a particular branch, then it is assumed that the
active component on the branch with the highest flow request
dictates the flow request for the entire branch.
Once all of the branches have set their flow rates and
constraints, the splitter and mixer must resolve the various
flow requests. The mixer and any branch following the mixer is
passive. Thus, all of the flow control happens at the
splitter. The splitter first attempts to sum the maximum and
minimum constraints from all of the active branches coming out
of the device and compares those to the constraints that are
valid for the branch leading into the splitter. When there is
a mismatch between the outlet constraints and the inlet
constraints, the simulation will defer to the inlet
constraints due to the fact that the pump is in reality
controlling flow on the loop. Since the constraints of the
pump would be passed across to the demand side from the supply
side, an assumption is made that the coils or other demand
side components must live within the bounds of the pump.
Once the flow has been resolved at the splitter, the branch
flow rates and constraints between the splitter and mixer can
be adjusted, if necessary. In some cases, this will be
mandatory to maintain a mass balance at the splitter. When the
flow rate coming out of the splitter does not match the active
branch requests, individual branch flow rates must be adjusted
to provide for the extra flow or the “flow deficit”. When
there is extra flow, the excess flow is sent through any
bypass branch first and then is sent to passive branches in
reverse order of their appearance in the splitter outlet list.
When all of these branches have been exhausted and there is
still excess flow, flow will be increased to the active
branches, also in reverse order. The reverse order guarantees
that the branch appearing first has the highest priority to
receive the flow rate it has requested.
If there is not enough flow to meet all active branch
requests (i.e., a “flow deficit”), then the flow rates through
the bypass and passive branches are set to zero. The flow
rates through the active branches will then be decreased in
reverse order until the splitter outlet flow rate matches the
available flow at the splitter inlet. For a plant loop flow
deficit, the bypass and passive branch flows are also set to
zero, and flow rates for each active branch are calculated as
follows:
\(\dot m_{tot\_request}\)
= total loop mass flow rate request
\(\dot
m_{tot\_available}\) =
total loop mass flow rate available
It is also necessary to monitor the flow constraints at the
branches and components since once the flow rates are changed,
the components must be resimulated by the controlling loop
(air loop, zone equipment, or plant supply side). The
controllers for these components must know if the constraints
have been modified so that the simulation does not toggle
between a component requesting a flow that the pump cannot
meet and the pump then resetting the flow to what it can
provide. Note that once a flow rate for any component has
changed that this signals the need to resimulate any sub-loop
to which it might have an indirect connection. Currently, this
means that if a flow rate on the plant demand side changes,
the simulation must recalculate the conditions on both the air
loop and zone equipment sub-loops since coils and other
equipment could be on either side of the main air loop.
Similarly, if the condenser demand side simulation results in
a change in flow rate through a chiller condenser, then the
plant supply side must be triggered to perform its
calculations again. Care has been taken to avoid cases where
the various half-loops might simply keep triggering the
resimulation of their indirect connections in an infinite
loop.
The plant model includes simplified methods of modeling
fluid capacitance and the temperature rise because of pumping
and friction. The transition from load or energy based plant
models to a loop based arrangement makes variables of both the
flow rate and the fluid temperature. This means there are more
degrees of freedom that must be controlled. The flow resolver
concept discussed previously controls the fluid flow rates
through the components and maintains an overall mass flow
balance through the loop. However, the temperatures still need
to be controlled and modeled. A purely iterative procedure can
be expected to converge to the appropriate loop temperatures,
but the procedure can become slow to converge under conditions
where the demand changes rapidly or the supply components may
not have enough capacity to meet the system demand. This
situation is somewhat analogous to that existing in the link
between the zone and the air system. In that case, the
convergence and stability of the iterative solution was
greatly improved by adding the thermal capacitance of the zone
air and other fast responding mass within the zone. Based on
that experience, it was decided to add thermal capacitance to
the plant loop model to benefit from the added stability.
Because the thermal capacitance in the zone/system interaction
is relatively small, it was necessary to use a third order
numerical solution there. Although the plant loop’s fluid
thermal capacitance is relatively high, the fluid flows also
have high heat capacity and can change temperatures rapidly a
simple first order solution was not found to be satisfactory
and an exact analytical solution was needed.
In realistic conditions there is often some delay between
changes in supply conditions and corresponding changes at
demand side components due to the transport of fluid round the
loop having a finite velocity.
The act of pumping fluid around a loop adds heat to the
fluid through friction. The slight warming occurs at the pump
and all around the circuit. The amount of heat is equal to
the work done on the fluid by the pump. This so-called pump
heat is a complicating factor in plant simulation because the
pump heat alters the load on primary equipment. A simple
method of accounting for pumping heat is needed that doesn’t
increase the difficulties of the numerical solution and (as of
version 7) in EnergyPlus this accomplished by including the
pump heat in the loop capacitance model.
Plant loops include a simple loop capacitance model to
simulate these effects based on a well-stirred tank model.
Each half-loop has a well-stirred tank located at its inlet as
indicated in Figure 4. The
temperature of the tank is modeled as a function of the tank
mass, inlet fluid flow rate and temperature, and pump heat.
No energy is lost or gained because of storage in the loop
capacitance.
Loop Capacitance Tank Models
[fig:loop-capacitance-tank-models]
The total plant loop volume is separated into two tanks, on
on each half-loop inlet. For normal loops (without common
pipes) each tank is one half of the plant loop volume. For
common pipe plant loops, the tank on the supply side inlet has
three fourths of the volume and the tank on the demand side
inlet has one fourth. Each plant loop is assigned a total
fluid volume as user input or an autocalculate routine based
on the design flow rate. The size of the thermal capacitance
affects the speed of recovery from situations where the
setpoint was not maintained. The user must estimate a fluid
volume based on the size of the pipes in the loop. Note that
rough estimates seem to be sufficient. Loop capacitance
(m\(^{3}\)) could be
calculated from pipe size data but this is not usually known.
If zero capacitance is specified the above formulation reduces
to an instantaneous update in demand update temperature and
the demand inlet temperature becomes the supply outlet
temperature at the previous time step. If a very large
capacitance is specified unrealistic time delay may result and
there may be poor response to changes in loop setpoint
temperature. The loop capacitance ‘autocalculate’ option sets
the loop volume to the product of the maximum loop flow rate
and the loop circulation time (a user input which defaults to
2 minutes).
The tank temperature is modeled by drawing a control volume
and energy balance around the tank and solving for the
temperature. The temperature of each tank is recalculated
whenever the two half-loops are interfaced together. The tank
temperature history is stored at the end of the simulation
timestep. The model equation for tank (and outlet
temperature) is formulated as follows:
\(T_{tank}^{t - \delta
t}\) is the previous system time-step tank temperature
[°C]
\(T_{tank}^t\) is the
current tank and tank outlet temperature [°C]
\(\dot m\) is the current
fluid mass flow rate through the tank [kg/s]
\(\delta t\) is the
duration of system time step [second]
\({c_P}\) is the heat
capacity of fluid [J/kg]
\({M_{tank}}\) is the mass
of the water in the tank [kg]
\({\dot Q_{pumpheat}}\) is
the heat generated by a pump in the tank [W]
When modeling plants using one of the common pipe modes for
plant loops, the same tank model is used but the tanks are
situated differently and account for extra connections. For
common pipe situation, the tanks are located on the outlet of
a half loop with common pipe interactions downstream of the
tank.
The average temperature is reported as the tank
temperature. The average temperature is defined as the value
of an integral function of tank temperature on an interval
[0,\(\delta\)t].
The input specifically related to the flow resolver
consists of the plant BranchList
and the plant ConnectorList
as shown in the Input Output Reference. User defined names
link the plant loop to its branches (contained in the
BranchList) and define the loop splitters and mixers contained
in the ConnectorList.
The Connector:Splitter
and Connector:Mixer
syntax in turn define the relative connection of the branches
to each other on the loop.
The Branch
definition is input in simulation and connection order for all
of the components on the branch. The simulation assumes that
the inlet node of the first component listed on the branch is
the branch inlet node and the outlet node of the last
component listed on the branch is the branch outlet node.
Examples of all the input syntax is shown in the Input/Output
Reference for the appropriate object.
Five load distribution schemes are employed in EnergyPlus.
The figure below illustrates the plant load distribution
algorithm. The total loop demand is calculated and used in the
ManagePlantLoopOperation routine to determine
which equipment is available based on the supervisory control
scheme specified by the user. Once all available components
have been identified the loop demand is distributed to the
available components based on the user specified load
distribution scheme.
Load Distribution Schemes [load-distribution-schemes]
The OPTIMAL scheme first loads each
component to its optimal part load ratio (specified in input).
Any remaining loop demand is distributed evenly to all the
components.
The UNIFORMLOAD scheme first divides
the load evenly among all available components. If some
components do not have the capacity to meet the uniformly
distributed load, the remaining load is distributed
sequentially to the other available components.
The SEQUENTIALLOAD scheme loads each
component one at a time to capacity until the loop demand is
met. The components are loaded up in the order that they
appear in the equipment list specified in input.
The UNIFORMPLR scheme loads all
equipment uniformly by maintaining uniform part load ratios
across all equipment on the equipment list. If the load is
below the load required by the plant to operate at the largest
component minimum part load ratio, the last item is removed
from each equipment list. This process is repeated until the
plant can operate above the largest component minimum part
load ratio.
The SEQUENTIALUNIFORMPLR scheme loads
all equipment in the order specified on the equipment list to
capacity while operating all operational equipment at uniform
part load ratios.
Note: For all schemes, if the load for any
individual component is less than the component load at the
minimum PLR, the individual component model will false load or
reduce duty cycle while operating at the minimum part load
ratio until the load is met.
Examples of application of each Load Distribution schemes
can be found in the following tables. Each example assume that
we have two pieces of equipment, with Equipment A being first
in line in the PlantEquipmentList, and having the
following characteristics:
The OptimalLoad Load Distribution occurs
in three steps:
Sequentially load each equipment to the Minimum of
Optimal Load (= Load corresponding to optimal Part Load Ratio)
and Loop Demand
Evenly distribute the remaining loop demand, without
exceeding the maximum Part Load Ratio of each
equipment
It there is still some remaining demand, look for any
equipment that is not yet at maximum Part Load Ratio and load
it (up to its maximum Part Load Ratio)
The UniformPLR Load Distribution occurs in
three steps:
Determine PlantCapacity and LargestMinCompPLR for each
successive equipment being turned on. PlantCapacity is the
capacity of all equipment that is turned on and considered.
LargestMinCompPLR is the max of minimum Part Load Ratio for
each equipment considered.
While the load to be met is below the LargestMinCompPLR
equipment still in consideration, remove the last equipment in
the Plant Equipment List. Always keep one equipment.
Divide the Plant Load across the remaining
equipment
UniformPLR Load Distribution Scheme - Step
1
Equipment Considered:
A
A & B
PlantCapacity
40
140
LargestMinCompPLR
0.2
0.2
UniformPLR Load Distribution Scheme - Step 2 and
3
The SequentialUniformPLR Load Distribution
occurs in two steps:
Turn on each equipment sequentially to have enough
capacity to meet the loop demand.
Operate the resulting equipment at uniform part load
ratio
Overview of the SequentialUniformPLR Load
Distribution Scheme
Sequential Loading
Final Loading
Final
Plant Load
A
B
PlantCapacity
Plant PLR
A
B
A
B
5
ON
OFF
40
0.13
5.0
-
0.2 *
-
10
ON
OFF
40
0.25
10.0
-
0.25
-
25
ON
OFF
40
0.63
25.0
-
0.63
-
50
ON
ON
140
0.36
14.3
35.71
0.36
0.36
100
ON
ON
140
0.71
28.6
71.43
0.71
0.71
150
ON
ON
140
1.07
40.0
100.00
1 **
1 **
Summary
of Plant Loop Demand Calculation Schemes[LINK]
There are two plant loop demand calculations schemes in
EnergyPlus. There is a SingleSetPoint and a
DualSetPointDeadband; the
SingleSetPoint is the default if that field
is left blank in the PlantLoop
object. In the SingleSetPoint scheme the Plant Loop requires
that a Setpoint Manager set a single setpoint value that sets
Node%TempSetPoint. Examples of this Setpoint Manager would be:
the objects SetpointManager:Scheduled,SetpointManager:OutdoorAirReset,
etc. For the DualSetPointDeadband scheme the Plant Loop
requires one or two Setpoint Managers that set the high and
low setpoint values for Node%TempSetPointHi and
Node%TempSetPointLo. SetpointManager:Scheduled:DualSetpoint
sets both the high and low setpoints. Otherwise, two setpoint
managers are required, one with Control Variable =
MaximumTemperature and another with Control Variable =
MinimumTemperature. Examples of applicable setpoint managers
include: SetpointManager:Scheduled,SetpointManager:OutdoorAirReset,SetpointManager:FollowOutdoorAirTemperature,
etc. Look in the Input Output Reference for the correct usage
of these SetpointManagers.
The Plant Loop Demand Calculation Scheme determines the
amount of heating or cooling necessary to bring the
temperature of the Plant Loop to its setpoint(s). When this
value is determined then the Load Distribution scheme
explained in the previous section takes this value and
distributes the load to the appropriate equipment. The demand
calculation scheme determines how the load is calculated. In
the next section is a summary of the 2 algorithms and how they
are used.
The SingleSetPoint scheme for the PlantLoop
takes the value that is placed on the Node%TempSetPoint and
calculates the heating or cooling load necessary to obtain
that setpoint.
DeltaTemp = LoopSetPoint - LoopTempIn
LoopDemand = mdot * Cp * DeltaTemp
The sign of the Loop Demand determines if the loop has a
cooling or heating load. Then the Load Distribution scheme
distributes this calculated load to the appropriate
equipment.
The DualSetPointDeadband scheme for the PlantLoop
takes the value that is placed on the Node%TempSetPointHi and
Node%TempSetPointLo calculates the heating or cooling load
necessary to obtain that setpoint; if in the DeadBand then no
load is calculated. The pseudo code below shows the basis of
the algorithm.
!Calculate the demand on the loop
IF (mdot > 0.0) THEN
LoadtoHeatingSetPoint = mdot*Cp*(LoopSetPointLo - LoopTempIn)
LoadtoCoolingSetPoint = mdot*Cp*(LoopSetPointHi - LoopTempIn)
! Possible combinations:
! 1 LoadToHeatingSetPoint > 0 & LoadToCoolingSetPoint > 0 --> Heating required
! 2 LoadToHeatingSetPoint < 0 & LoadToCoolingSetPoint < 0 --> Cooling Required
! 3 LoadToHeatingSetPoint < 0 & LoadToCoolingSetPoint > 0 --> Dead Band Operation
! 4 LoadToHeatingSetPoint > 0 & LoadToCoolingSetPoint < 0 --> Not Feasible
IF (LoadToHeatingSetPoint .GT. 0.0 .AND. LoadToCoolingSetPoint .GT. 0.0) THEN
LoopDemand = LoadToHeatingSetPoint
ELSE IF (LoadToHeatingSetPoint .LT. 0.0 .AND. LoadToCoolingSetPoint .LT. 0.0) THEN
LoopDemand = LoadToCoolingSetPoint
ELSE IF (LoadToHeatingSetPoint .LT. 0.0 .AND. LoadToCoolingSetPoint .GT. 0.0) THEN
LoopDemand = 0.0
ELSE
CALL ShowSevereError
END IF
ELSE
LoopDemand = 0.0
END IF
IF(ABS(LoopDemand) < LoopDemandTol) LoopDemand = 0.0
The sign of the Loop Demand determines if the loop has a
cooling or heating load. Then the Load Distribution scheme
distributes this calculated load to the appropriate equipment,
if there is any.
Plant
and Condenser Equipment Operation Schemes[LINK]
Plants and condenser loops must have some mechanism for
controlling the operation of the loop and which equipment is
available under different operating conditions. Once the Loop
load is calculated by the return conditions from the demand
side and using the loop setpoint, this load needs to be
allocated to the supply equipment according to the users
input. This is mainly done by the operation schemes.
Each operation scheme must have the type of operation
scheme, its identifying name, and the schedule that defines
its availability. The first scheme appearing in the list is
given the highest priority; the second scheme has second
highest priority, etc. In other words, if according to its
schedule, the first operation scheme is available, then it is
used by the simulation to define how the plant or condenser
loop operates. If it is not available, the second operation
scheme in the list is checked to see if it is available until
the highest priority scheme that is also available is found.
See the Input Output Reference for input field details.
The PlantEquipmentOperation:Uncontrolled
scheme takes the full capacity of the supply equipment and
cools or heats the loop accordingly. An example would be a
cooling tower where the cooling tower would cool the condenser
loop with all of its available capacity and not be limited by
a capacity range or setpoint. Uncontrolled loop operation
simply specifies a group of equipment that runs
‘uncontrolled’. If the loop runs, this equipment will run
also, unless turned off by the loop flow resolver to maintain
continuity in the fluid loop.
Cooling
Load Range Based Operation or Heating Load Range Based
Operation[LINK]
PlantEquipmentOperation:CoolingLoad
(or PlantEquipmentOperation:HeatingLoad) defines the different
ranges and which equipment list is valid for each range. In
each trio, there is a lower limit for the load range, an upper
limit for the load range, and a name that links to an
equipment availability list (PlantEquipmentList). Load range
operation is used when the loop load is calculated and then
the equipment is selected in the proper range. This allows for
the most efficient operation of the plant equipment or for the
user to determine the most efficient plant configuration. When
the equipment list has been determined then the load is
allocated to the equipment in a manner selected by the user
with “Optimal or Sequential” load distribution scheme. The
load range based operation scheme has two statements
associated with it: a main statement that defines the ranges
that individual priority settings are valid and the lists of
equipment that may be used for each range.
Outdoor
Drybulb Range Based Operation, Outdoor Wetbulb Range Based
Operation, Outdoor RHPercent Range Based Operation[LINK]
The various “PlantEquipmentOperation:Outdoor*” statements
define the different ranges of the various environmental
parameters and which equipment list is valid for each range.
After the keyword and the identifying name, a series of data
trios is expected. In each trio, there is a lower limit for
the load range, an upper limit for the load range, and a name
that links to an equipment availability list (the “PlantEquipmentList”).
PlantEquipmentOperation:ComponentSetpoint
provides an alternative way to control plant equipment
operation. Equipment is listed in order and loads are
calculated for each individual peice of equipment using the
difference between the temperature at a demand node, typically
the inlet node, and the temperature of a setpoint node,
typically the outlet node. These calculated loads are then
distributed to the specific peice of equipment that they were
calculated for.
Supervisory
Control of Heat Pumps that Changeover Between Heating and
Cooling Operation[LINK]
PlantEquipmentOperation:ChillerHeaterChangeover
provides capabilities to control multiple plant loops using
just one operation scheme. This operation scheme is intended
for commercial building applications with hydronic heating and
cooling systems served by heatpumps. While most plant controls
in EnergyPlus provide control over operation of a single plant
loop, some applications require heating and cooling plants to
be controlled together. Heat pump type plant equipment systems
can provide heating or cooling or both. Individual air source
plant heat pumps can only operate in cooling or heating at a
given time. However in EnergyPlus, the plant modeling approach
currently dictates that the heating loops and cooling loops
are separate and equipment is connected to one or the other
for the entire simulation. Therefore a plant heat pump is
modeled with two companion machines that represent a single
real machine. The heating side companion is connected to the
heating loop and the cooling side companion is connected to
the cooling loop.
PlantEquipmentOperation:ChillerHeaterChangeover
provides supervisory control over both the heating and cooling
systems so that switching the operation between heating and
cooling can be coordinated adn take in consideration the loads
on the building and plant systems. In addition to a main set
of one or more heat pumps, this operation scheme controls
auxiliary boilers and a special water to water heat pump that
is dedicated to moving heat between the returns of cooling and
heating distribution systems. The control decisions involve
turning heat pump equipment on and off, calculating and
applying setpoint temperatures, calculating and applying load
distributions for back up boilers. Control decisions are based
on inputs to the PlantEquipmentOperation:ChillerHeaterChangeover,
outdoor air temperatures, current building loads, current
loads on plant loops. The rest of this section provides more
detail. The code is in EquipAndOperation.cc/hh.
The control routine detects the how the building is
currently being loaded as part of deciding how the heat pump
equipment should be run. These so-called “Polled Building
Loads” mimic what a real building automation system might do
to understand what is happening in the building. These
detected loads are reported as “Supervisory Plant Operation
Polled Building
Heating Load” and “Supervisory Plant Operation Polled Building
Cooling Load.” The loads are determined from predicted
sensible loads to setpoint, air system ventilation loads, and
any process loads (see routine named
DetermineCurrentBuildingLoads). The input to the operation
scheme includes the name of a zone list. The zones in that
list are polled to aggregate the sum of sensible cooling and
heating loads predicted by the zone heat balance model. These
are loads-to-setpoint with the sign convention such that
cooling loads are negative and summations neglect values that
indicate times of no load. These are sensible heat load rates
before applying multipliers so zone multiplier and zone list
multiplier impacts are applied on a per zone basis.
\[\dot
Q_{ZonePredictedCooling} = \sum_{n=1}^{zones} \min({0.0, \dot
Q_{OutputRequiredToCoolingSP}}) {Mult_{zonelist}}\]\[\dot Q_{ZonePredictedHeating} =
\sum_{n=1}^{zones} \max({0.0, \dot
Q_{OutputRequiredToHeatingSP}}) {Mult_{zonelist}}\]
Ventilation loads on the air system are modeled from the total
heat transfer needed to bring the outdoor air to the
conditions of the return air. The program detects which
primary air systems are connected to zones included in the
list of polled zones. Then ventilation loads, which need to be
added to the sensible predicted zone loads, are modeled using
the mass flow rate multiplied by the change in enthalpy. \[\dot Q_{AirSysVentCooling} =
\sum_{n=1}^{AirSystems} min(0.0, {\dot m_{OA}} ( {h_{ret}} -
{h_{OA}}))\]\[\dot
Q_{AirSysVentHeating} = \sum_{n=1}^{AirSystems} max(0.0, {\dot
m_{OA}} ( {h_{ret}} - {h_{OA}}))\] Process loads on a
plant system that are not associated with conditioning the
building’s zones are included from any LoadProfile:Plant
objects connected to the plant loops controlled by this
operation scheme. \[\dot
Q_{ProcessCooling} = \sum_{n=1}^{LoadProfiles} min({0.0, \dot
Q_{n,ProcessLoad}})\]\[\dot
Q_{ProcessHeating} = \sum_{n=1}^{LoadProfiles} max({0.0, \dot
Q_{n,ProcessLoad}})\] Finally the overall polled
building loads are combined from the three components. \[\dot Q_{BuildingCooling} = \dot
Q_{ZonePredictedCooling} + \dot Q_{AirSysVentCooling} + \dot
Q_{ProcessCooling}\]\[\dot
Q_{BuildingHeating} = \dot Q_{ZonePredictedHeating} + \dot
Q_{AirSysVentHeating} + \dot Q_{ProcessHeating}\]
PlantEquipmentOperation:ChillerHeaterChangeover
also determines current loads on the plant loops to use in
control decisions. Plant loading uses a SingleSetPoint scheme
in much the same way as for Component Setpoint Based
Operation. Therefore single temperature setpoint values
(Node().TempSetPoint) are used and applied as described in
Loop Demand Calculation Scheme SingleSetPoint (regardless of
the setting in the PlantLoop
object). These calculations \(\dot
Q_{LoopDemand} = {\dot m }{ C_p} { \Delta {T}}\) are
used to determine plant loading and the values calculated are
reported as “Supervisory Plant Operation Primary Plant Heating
Load” and “Supervisory Plant Operation Primary Plant Cooling
Load.” The routines detect if there is a buffer tank
(ThermalStorage:ChilledWater:Mixed or
ThermalStorage:ChilledWater:Stratified) on the supply side
inlet branch of the primary chilled water loop and if there
is, the outlet node of the buffer tank is used for the
temperature of the fluid entering the supply side when
determining primary hydronic cooling load. If a dedicated
heatpump for recovery is being controlled, the loads on
secondary plant loops are also determined using single
setpoint method with the loop temperature determined at the
inlet of the source sides of the water-to-water heatpump
companion machines (HeatPump:PlantLoop:EIR:Cooling and
HeatPump:PlantLoop:EIR:Heating). These secondary plant loads
are reported to the output variables called “Supervisory Plant
Operation Secondary Plant Heating Load” and “Supervisory Plant
Operation Secondary Plant Cooling Load.”
The supervisory control routine uses the results of
building and plant loads at the current timestep to decide if
the heat-pump-based hydronic plant should be operated in one
of four modes: off, heating-only, cooling-only, or
simultaneous-heating-and-cooling. If \(\dot Q_{BuildingHeating}\) is
less than zero and \(\dot
Q_{BuildingCooling}\) is also negative (cooling loads
are negative) then based on builing loads, the plant is
expected to be in cooling-only mode. if \(\dot Q_{BuildingCooling}\) is
positive and \(\dot
Q_{BuildingHeating}\) is postive, then the plant is
expected to be in heating-only mode. However, if the outdoor
air temperature is lower than the input used in the field
called “Outdoor Low Temperature” then the heat pump cannot
operate in heating and the mode is reset to off. If the
building shows both heating and cooling loads, when \(\dot Q_{BuildingHeating}\) is
postive and \(\dot
Q_{BuildingCooling}\) is negative, then the plant is
expected to be in simultaneous-heating-and-cooling mode. In
the case of a very small plant with only a single heat pump
that cannot operate in simultaneous mode, the plant is set to
cooling-only or heating-only depending on which has the more
dominant load. However, if the outdoor air temperature is
lower than the input used in the field called “Outdoor Low
Temperature” then the heat pump cannot operate in heating and
the mode is reset to cooling-only. After the building loads
have been used, additional changes in mode are considered
using the current plant loads. If the building loads indicate
that the plant is expected to be in heating-only mode but the
current primary cooling hydronic plant load is negative, \(\dot Q_{LoopDemand, ChW} <
0.0\), then the mode is changed to
simultaneous-heating-and-cooling (if available). Similarly, if
the building loads indicate that the plant is expected to be
in cooling-only mode but the current primary heating hydronic
plant load is positive, \(\dot
Q_{LoopDemand, HW} > 0.0\), and the outdoor air
temperature is higher than the minimum limit, then the mode is
changed to simultaneous-heating-and-cooling (if available).
The selected mode is reported to the output variable called
“Supervisory Plant Heat Pump Operation Mode.”
Once the supervisory control has determined the mode,
equipment is dispatched based on the user input entered that
declare what equipment should be operated for each of the
three operating modes. This input is entered in the PlantEquipmentOperation:CoolingLoad
and PlantEquipmentOperation:HeatingLoad
and the associated PlantEquipmentLists. The cooling companion
machines are listed in the PlantEquipmentLists named by PlantEquipmentOperation:CoolingLoad
and the heating companion machines are listed in the
PlantEquipmentLists named by PlantEquipmentOperation:HeatingLoad.
The load-range-based approach is used to select between
different sets of equipment. The equipment is not directly
loaded, but rather a temperature setpoint is placed on the
outlet node (load side) and the component is set to “ON” and
“Available.” This supervisory control includes important
temperature inputs that are used for limits and controlling
setpoints. “Primary Cooling Plant Setpoint Temperature,” or
\({T_{set, ChW, Prim}}\), is
the target temperature for the primary chilled water plant.
When machines are called to operate as chillers the outlet
node’s temperature setpoint is set to this value. The
temperature setpoint is also placed on the supply side outlet
node.
Hot Water Temperature Setpoint
Vs Outdoor Air Temperature
[fig:HW-reset-aux-backup-setpoint-reset]
This operation scheme includes special handling of a
water-to-water heat pump situated between the return hot water
and return chilled water in a building’s hydronic plant
system. Operating the mechanical heat pump between these two
return streams offers an efficient way to move heat between
them. The figure shows how this operation scheme expects the
unit to be connected. The companion approach to heating and
cooling versions of the same machine used in EnergyPlus offers
a way to have one machine get plumbed into different loops.
The diagram shows an “X” configuration for a heat pump machine
that is modeled as having a heating companion and a cooling
companion. Whenever either side is operating the heat transfer
is in the same general direction with heat moving from the
chilled water to the hot water. The companion side that is in
effect at any given time is the one being controlled, so that
the conditions leaving the the load side are controlled to
meet a setpoint. A cooling-led heat pump will attempt to cool
the chilled water supply inlet branch to the setpoint, while
at the same time beneficial heat is transferred to the hot
water loop in sort of an uncontrolled way. A heating-led heat
pump will attempt to heat the hot water supply inlet branch to
the setpoint, while providing beneficial cooling to the
chilled water returns.
This is very similar to the plant operation schemes, but
there are several more options available with the CondenserLoop.
The condenser operation schemes apply to the equipment on the
‘supply side’ of the condenser loop—pumps, cooling towers,
ground coupled heat exchangers, etc. The keywords select the
algorithm that will be used to determine which equipment is
available for each time step. The ‘Range Based
Operation’ schemes select a user specified set of
equipment for each user specified range of a particular
simulation variable.’LoadRangeBased’ schemes compare the demand on the condenser
supply side with specified load ranges and associated
equipment lists. ’Outdoor…Range Based’ schemes
compare the current value of an environmental parameter with
user specified ranges of that parameter. See the Input Output
Reference for input field details.
The PlantEquipmentOperation:Uncontrolled
scheme takes the full capacity of the supply equipment and
cools or heats the loop accordingly. An example would be a
cooling tower where the cooling tower would cool the condenser
loop with all of its available capacity and not be limited by
a capacity range or setpoint. Uncontrolled loop operation
simply specifies a group of equipment that runs
‘uncontrolled’. If the loop runs, this equipment will run
also, unless turned off by the loop flow resolver to maintain
continuity in the fluid loop.
Cooling
Load Range Based Operation or Heating Load Range Based
Operation[LINK]
PlantEquipmentOperation:CoolingLoad
(or PlantEquipmentOperation:HeatingLoad) statement defines the
different ranges and which equipment list is valid for each
range. In each trio, there is a lower limit for the load
range, an upper limit for the load range, and a name that
links to an equipment availability list
(CondenserEquipmentList). Load range operation is used when
the loop load is calculated and then the equipment is selected
in the proper range. This allows for the most efficient
operation of the plant equipment or for the user to determine
the most efficient plant configuration. When the equipment
list has been determined then the load is allocated to the
equipment in a manner selected by the user with “Optimal or
Sequential” load distribution scheme. The load range based
operation scheme has two statements associated with it: a main
statement that defines the ranges that individual priority
settings are valid and the lists of equipment that may be used
for each range.
Outdoor
Drybulb Range Based Operation, Outdoor Wetbulb Range Based
Operation, Outdoor RHPercent Range Based Operation[LINK]
The various “PlantEquipmentOperation:Outdoor*” statements
define the different ranges of the various environmental
parameters and which equipment list is valid for each range.
After the keyword and the identifying name, a series of data
trios is expected. In each trio, there is a lower limit for
the load range, an upper limit for the load range, and a name
that links to an equipment availability list (the “CondenserEquipmentList”).
Outdoor
Drybulb Temperature Difference Based Operation,. Outdoor
Wetbulb Temperature Difference Based Operation[LINK]
The various “PlantEquipmentOperation:Outdoor*Difference”
statements control strategies help to control any condenser
equipment based on the difference between a reference node
temperature and any environmental temperature. For example a
cooling tower can be controlled by a strategy, which looks at
the difference between the tower inlet temperature and
wet-bulb temperature. A difference range is specified for each
equipment list.
Common pipe feature eliminates the need of specifying two
different EnergyPlus loops each for Primary and Secondary half
loops. Instead the user can set up the system as it is used in
real life applications. A common pipe simulation requires that
pumps be placed on both Demand (Secondary) and Supply
(Primary) sides of the loop. A typical Common Pipe layout as
used in EnergyPlus is shown in Figure 8. The
major assumptions in the common pipe implementation are as
follows:
Pumps are placed on both demand and supply side of the
loop.
Secondary pump flow rate can be less than, equal to or
greater than the primary pump flow rate.
The flow at the inlet node of the half loop is equal to
the flow at the outlet node of the half loop.
The pumps can have different schedules and any loop can
be shut off when the other loop is still running.
Common Pipe Layout Schematic
[fig:common-pipe-layout-schematic]
Common pipe simulation is done during the interface update
call at both Supply-to-Demand and Demand-to-Supply.
Appropriate checks are used to make sure that the effect of
flow reversal in between iteration is taken care of. Moreover,
the common pipe keeps track of the flow rates and temperatures
at all the four nodes linked to it; namely, the inlet and
outlet nodes of each sub loop. This record will help to decide
if loops have converged or not. In situations where the
primary component meets the setpoint and the coil controls
does not change its flow request, the common pipe converges
quickly. The simple description of the control algorithm for
common Pipe implementation is as follows:
At FirstHVACiteration, the common pipe flow is
initialized to zero.
Common pipe is simulated at interfaces and thus we will
have 2 different flows handle on either side of
interface.
Loops and corresponding flow rates are assigned inlet
or outlet (to common pipe) depending on the interface which
calls it. So when common pipe is called from demand to supply
interface, the inlet loop is demand side and outlet loop is
supply side and vice versa.
Inlet flow is compared to outlet flow and the
difference is set as the common pipe flow.
At each interface the common pipe flow is assigned a
direction which can be into the interface (Inlet flow <
Outlet flow) or away from interface (Inlet flow > Outlet
flow).
Outlet temperature is calculated depending on the flow
rate and flow direction. When flow is away from interface
outlet flow temperature is same as inlet flow temperature. For
a common pipe flow into the interface, the outlet flow
temperature is calculated as mixed temperature of inlet flow
and the common pipe flow.
At demand to supply interface, the supply side inlet
node temperature and flow rate are updated every iteration. At
supply to demand interface, only flow is updated. The
temperature is updated only at the end of timestep.
Loops iterate till the flow and temperatures at all the
4 concerned nodes do not change.
A model referred to as Two-Way Common Pipe is available
which provides a way to model Primary-Secondary systems as a
single Plant Loop. In a typical EnergyPlus plant loop
simulation, the only half loop inlet/outlet node that is
controlled is the supply side outlet node. In some cases this
requirement becomes a limitation in analyzing different
options. A good example is ice thermal storage application,
where during charging phase, the coil setpoint can be
different from the ice storage equipment setpoint. With this
model, the interface between the two half loops includes two
additional flow paths that essentially split a single plant
loop into both primary and secondary loop sides. Though the
Two-Way common pipe is designed to be generic some assumptions
apply in modeling the component. The assumptions are as
follows
The secondary flow may be less than, equal to, or
greater than the primary flow.
The mass flow rate at the Primary Side Outlet Node is
always equal to the mass flow rate at the Primary Side Inlet
Node.
The mass flow rate at the Secondary Side Outlet Node is
always equal to the mass flow rate at the Secondary Side Inlet
Node.
Only one additional node, either primary-side inlet or
secondary-side inlet, (along with the primary-side/supply-side
outlet node) can be controlled. The system of equations that
describe the loop interface will be under specified if both
the Primary and Secondary Inlet nodes have to be
controlled.
Figure 9
shows a schematic of the Two-Way Common Pipe. There are two
common pipe legs, shown as broken lines, allow for some
recirculation at the half loop level. The model allows for
common pipe flow in either or both directions. The model
determines flow rates in the common pipes and temperatures at
nodes based on the following:
Which additional node is being controlled to meet a
temperature setpoint? If the primary-side inlet node is
controlled, then the flows are controlled to deliver the
desired temperature at supply side inlet. If the
secondary-side inlet node is controlled then the flows are
controlled to deliver the desired temperature at the demand
side inlet.
Is the specified setpoint achievable with current
secondary and primary outlet conditions? If the setpoint is
not achievable, then the flow in each common pipe leg is
reduced to its minimum possible value.
At the controlled node, with known demand outlet
temperature, supply outlet temperature, primary flow rate and
secondary flow rate, and energy balance is used to calculate
recirculation flows in the common pipes for that particular
half loop, so that the desired temperature setpoint is
achieved.
With a known flow in one common pipe leg, the flow on
Primary to Secondary (or secondary to primary) is easily
obtained by mass balance.
When the Two Way Common Pipe is controlling conditions
at the secondary-side, or demand side, inlet node, then the
loop capacitance model usually used for the conditions at the
demand inlet is not used as it would interfere with
control.
Schematic of a Two-Way Common
Pipe used in Primary-Secondary System. [fig:schematic-of-a-two-way-common-pipe-used-in]
Heat Recovery is accomplished by specifying another set of
supply and demand loops. Each of the heat recovery components,
i.e. engine driven and combustion turbine chillers, and
internal combustion and combustion turbine generators is
designed to use the existing component/loop/solution structure
to facilitate the simulation with the existing demand side
manager and the supply side manager. Heat recovery normally
contains components that produce heat that can be recovered,
and the ability to store or use that heat elsewhere in the
system. The component that can store the excess heat and allow
it to be used elsewhere in the system or for domestic hot
water is the Water Heater:Simple and is defined in the
Input/Output Reference.
.
In the example above there is a chilled water Loop with
chilled water supplied by a diesel engine driven chiller.
There is a hot water Loop that is being supplied by the water
heater: simple. There is also scheduled domestic hot water
usage on the water heater which excess demand can be met by a
number of user-specified heating sources. Then on the demand
side of the heat recovery loop there is the engine driven
chiller, internal combustion, and combustion turbine electric
generators with specified mass flows to recover the heat. This
hot water is pump on the supply side by the heat recovery pump
and provides the heat to the water heater to meet the water
heater setpoint. This is probably one of the more complex
configurations and interactions that would take place in heat
recovery, but using the Plant supply and demand side
configurations this can be extended to meet most user
configurations. The plant water heater can also be used to
just meet scheduled domestic hot water use, provide a hot
water source for PlantLoop
equipment, or provide a hot water storage tank for heat
recovery as a single function. Or any combination of the above
can be configured. Example files of some of these
configurations are provided with the installation.
As of version 4.0, there is an added feature which allows
better calculation of pressure in plant and condenser loops.
Without any method, the loops essentially ignore the node
pressures. This is suitable for many applications, however may
cause inaccuracies in the pump power. This is especially
prominent in cases where the loop flow may change drastically
over a wide range of configurations, as the pump power is
based on a rated power value and rated pump head value. As the
loop components turn on and off, the pressure drop will
change, and so the pump power should be dynamically updated
with these changes.
Calculates loop pressure drop based on pressure drop
information which is placed on branches. These are entered in
terms of generic curves (linear, quadratic) or pressure drop
information (minor loss/friction factor).
Loop pressure drop is used as the new pump head. No
information is entered about the pump curve, so it is assumed
that the pump will always be able to meet this operating
point. Future enhancements will allow the pump to ride a curve
based on the given pressure head.
Model does not resolve flow rates on parallel branches to
match pressure drop, this is explained further below, but
basically it takes the maximum pressure drop from parallel
pressure components and applies that to all parallel
components.
The supply side inlet (before the pump) is always set to
standard atmospheric pressure. This allows the node pressures
around the loop to stay positive. The actual values of
pressure are not all that important, it is the delta pressure
that is of interest for our calculations, but this makes the
pressure values appear realistic if one plots the pressure
around the loop.
The pressure drop is at the branch level, not the component
level. If multiple components are found on a single branch,
the pressure drop is always applied to the last component on
the branch. This is coordinated with the rule that a pump must
always be the first component if it is found on a branch.
Calculations use the branch flow rate and the branch
entering temperature to calculate properties for the whole
branch.
Pressure drop curves must not be placed on branches which
only contain a pump. Pressure curves may be placed on the
supply inlet branch with a pump as long as there are other
components on that same branch, following the pump.
If using branch pumps, pressure drop curves found on the
supply inlet branch will be ignored. Put pressure drop
information after pumps.
Currently, pressure drop simulations are not allowed with
common pipe (demand pump) simulations. A future version of the
pressure drop system will allow this by allowing each pump to
handle the pressure drop of the given loop side (demand or
supply).
Before the demand side is simulated, the pressure system is
initialized. All node pressures are reset, and pressure drop
values for branches are re-initialized.
After all components on a branch are simulated, the
pressure drop for that branch is calculated. This pressure
drop is registered in the pressure drop system to be used in
subsequent loop level calculations.
Once the entire loop (demand then supply sides) is
simulated, the loop level pressure drop calculations are
performed using the following steps:
Beginning at demand side outlet (linked to supply inlet),
and working backwards, the node pressure is updated and loop
pressure is summed by “adding pressure drops” as they are
found around the loop. By working backward, we are able to
easily preserve the pump inlet pressure as a realistic value
(standard atmospheric pressure).
When a parallel system is encountered, a special operation
is performed. Since we are not resolving flows with this
version of the pressure simulation, the parallel system is set
to use the largest value of pressure drop found on the
parallel branches. In this manner, the highest pressure drop
component essentially governs the set of parallel branches,
and the other components must match the pressure drop in order
to achieve their desired flow rate. This is performed by
placing “imaginary” valves in the splitter. This allows
individual branches to report their own pressure information,
while the splitter accounts for the required pressure drop to
match the governing branch. This is shown graphically in the
figure below.
Explanation of valves
inherently built into Splitter object [fig:explanation-of-valves-inherently-built-into]
Because the splitter automatically handles the pressure
drop required to match the pressures in the parallel system,
the mixer will have uniform flow entering from all branches
and exiting.
These calculations are performed around the loop and result
in a value of pressure drop for the entire loop.
Pump power requires a value of pressure head before it can
add heat to the loop, which is done before any components are
calculated, and any pressure system calculations are
performed. Because of this, the pump power is based on rated
head during the first iteration. On subsequent iterations, the
pump power is based on the dynamic pressure head calculated by
pressure drop information.
If anything drastically changes between one iteration and
the next, the loop will be re-simulated, and the latest value
of pressure head will be used. By the time the loop is
converged, the pressure head between the current and most
previous iterations will agree to within simulation tolerance.
Thus the pump is using a lagged value of pressure head, but
once the loop is converged, the lagged and current values will
agree.
There are two types of pressure drop curves that can be
entered, each with its own calculation engine:
Generic: A curve of any form (single independent variable)
such as linear or quadratic may represent the pressure drop in
Pascals as a function of current mass flow rate in kg/s. This
is common for regressing component pressure drop such as heat
pumps into a quadratic best fit form. The branch pressure drop
is then calculated by evaluating this curve with the given
branch flow rate.
Pressure Information: This calculation involves two types
of pressure drop: frictional effects and minor losses. The
governing equation is:
\[\Delta P = \left(
{f\frac{L}{D} + K} \right)\frac{{\rho {V^2}}}{2}\]
The user enters value for the minor loss coefficient K to
represent all the minor losses on that branch. If the user is
entering friction information, the minor loss coefficient may
be zero or blank.
The user enters roughness, e, or a fixed value of friction
factor to account for frictional losses on the branch, as well
as an equivalent length L. If the user enters roughness then
the friction factor is calculated from a Moody chart
approximation (Haaland, 1983):
If the user enters minor loss information, then the
friction factor information can be left out.
The diameter is an equivalent value and is used to
calculate relative roughness for friction calculations as well
as velocity for any pressure drop calculation.
Riding
Pump Curves to Determine Loop Operating Point[LINK]
In addition to being able to provide a means of calculating
loop pressure drop, EnergyPlus can also perform a “loop-level”
pump-system flow resolution. The pressure drop components
that were described in the previous sections are combined with
the input of a dimensionless pump pressure-flow curve and at
each iteration, these are utilized in determining a proper
operating point for the loop.
Some restrictions do apply to this simulation. As with the
basic pressure drop simulation, common pipes are not valid in
the current release. For this pump curve phase, the
simulation is also restricted to “loop pumps” such that pumps
should not be used on the parallel branches between a mixer
and splitter.
The idea of riding a pump curve, as it is currently
implemented, is based on a constant speed pump. A variable
speed pump in EnergyPlus can already effectively vary its
flow/pressure characteristics to meet the demand. Thus, this
phase is only implemented for the Pump:ConstantSpeed
model.
The model works by approximating the loop with a quadratic
pressure drop form, then iterating to find an operating
point. The entire plant loop then iterates to find the
operating point that attempts to match the requested flows.
Note that when doing a pressure based pump simulation, the
loop will likely not hit setpoint every timestep, while doing
the simpler approach (non-pressure) may result in a
tighter-controlled simulation. In deciding this, you must
consider the realism of the pressure approach vs. the
non-pressure approach which may be more tightly controlled and
will have less input requirements.
In the first iteration of the plant, there is not yet
enough information to determine a pressure-flow simulation, so
flow through the loop is set to the rated flow rate of the
pump (irrespective of pump performance curve). For this rated
flow rate pressure drop in each branch will be calculated by
plant pressure system. So after this first pass through the
loop, the pressure system now has a valid system flow-pressure
point. From this point (pressure drop in the branch and rated
mass flow rate) a pressure constant for each branch is
calculated assuming quadratic relationship between pressure
drop and mass flow rate.
From all these ‘K’ values of the branches a corresponding K
value for complete loop is calculated. This representative K
value for the loop will lock down a system curve for a single
iteration. This K value will change throughout the
higher-level plant iterations and simulation time steps.
The Non-dimensional pump curve is entered in following
way,
The user preprocesses mass flow and pressure values into
these nondimensional forms in order to generate the curve
fit. The program then resolves the nondimensional forms into
actual values based on the pump speed, diameter, and fluid
density. This gives the proper pressure-flow relationship for
the simulation.
The pressure drop components and the pump curve are
described in the prior sections. The routine which actually
uses these curves to resolve to an operating point is
described here. This routine is called by the pump model as
it is determining what flow it should be using. The flow
resolver reads the non-dimensional pump curve, loop pressure
constant (K value) and rated mass flow rate (or mass flow rate
from last iteration). The resolver finds the intersection of
the two curves by successive substitution with 0.9 as a
damping factor. If the flow rate is outside (or if in any
iteration move out of) the range for which pump curve-fit is
suggested, the resolver will bring the value within range,
thus it is important to specify the curve-fit range (in terms
of non-dimensional flow rate) for pump curve by the user. It
was observed that simple successive substitution (sometimes)
diverges depending on shape of curves and/or location of
operating point. Damping factor provides stability to
successive substitution and it was observed that it converges
for less number of iteration, speeding up the function. The
damping factor was set as 0.9 as it showed full stability
during testing, although a more optimum value may be available
for a particular set of curves. A future version may have an
improved selection algorithm for the damping factor
itself.
Haaland, SE. 1983. “Simple and Explicit Formulas for the
Friction Factor in Turbulent Flow”. Transactions ASIVIE,
Journal of Fluids Engineering 103: pp. 89-90.
Plant/Condenser Loops[LINK]
Integration of System and Plant[LINK]
In order to integrate the air handling system simulation with the zones simulation, methods were developed to model the system air loop and its interactions with the zones due to temperature controls and the relative difference between the zone and supply air temperatures. A similar situation is encountered when integrating the central plant simulation. Typically, the central plant interacts with the systems via a fluid loop between the plant components and heat exchangers, called either heating or cooling coils. In EnergyPlus the performance of the air systems and plant are interdependent because the simulations are combined. The plant outputs must match the system inputs and vice versa. That is, the temperature of the chilled water leaving the plant must equal the temperature of the water entering the coils, and the chilled water flow rate must satisfy mass continuity. In addition, coil controls are usually necessary to ensure that the values of chilled water flow variables entering and leaving the coil remain in a reasonable range. Plants can also interact with each other so that the operation of a chilled water loop and chiller will affect the operation of a condenser water loop.
Current Primary System Modeling Methodology[LINK]
There are two main types of loops within the HVAC simulation in EnergyPlus: an air loop and a plant loop. The air loop is assumed to use air as the transport medium as part of an air handling system while the plant loops use a liquid fluid of the user’s choosing (typically water). Condenser loops are a special case of plant loop that are for heat rejection and are distinguished by slightly different control options and applicable equipment types. A user may have any number of each type of loop in a particular input file. There are no explicit limits on the number of loops within the program—the user is only limited by computer hardware. Execution speed will naturally vary with the complexity of the input file.
Plant loops are further divided into “half-loops” or “semi-loops” for organizational clarity and simulation logistics (see Figure “Connections between the Main HVAC Simulation Loops and Half-Loops”). These sub-loops, or half-loop sides, are matched pairs that consist of half of a main plant loop. Plant loops are broken into supply and demand sides. The plant demand side half-loop contains equipment that places a load on the primary equipment. This might include coils, baseboards, radiant systems, etc. The load is met by primary equipment such as chillers or boilers on the supply side half-loop. Each supply side half-loop must be connected to a demand side half-loop and vice versa. A similar breakdown is present on condenser loops where the demand side includes the water side of chiller’s condensers while the supply side includes condenser equipment such as cooling towers.
The breakdown into two half-loops allows for better handling and control of information and simulation flow throughout the program. Direct connections between the half-loops of the air, plant, and condenser loops are enhanced by components with connections between the various main loop types. For example, coils (heating or cooling) are in reality heat exchangers with an air and a water or refrigerant side. The air side of the coil is handled within the air loop where the control of the device is also maintained. The fluid side of the coil is handled within the plant demand side, which passes the energy requirements of the coil on to the plant supply side. All loops are simulated together by successively modeling each half-loop in a particular calling order. Overall iterations ensure that the results for the current time step are balanced and updated information has been passed to both sides of the sub-loops as well as across to the other side of air loop connections such as coils.
The plant equipment on a half-loop is described by a set of branches for that half-loop. Components can be arranged on a branch in series, and branches can be placed in parallel, with some restrictions. Figure “Branch Layout for Individual Plant Half-Loops” provides an overview of the intended branch layout for each plant half-loop. Branches are individual legs within the loop structure. Thus, the segment between point A and point B is defined as a branch, as is the section between points E and F. There may be multiple sections (C1 to D1 through Cn to Dn) in between the splitter and mixer.
Each half-loop may only have one splitter and one mixer. Thus, equipment may be in parallel between the mixer and splitter, however, within any single branch, there can only be components in series and not in parallel. The topology rules for individual half-loops allow a reasonable amount of flexibility without requiring a complicated solver routine to determine the actual flow and temperature conditions. Note that since plant supply and demand are broken up into two separate half-loops, chillers or boilers may be in parallel to each other in the supply side and coils may be in parallel to each other on the demand side. Thus, the restriction of only a single splitter and mixer on a particular half-loop does not unduly limit the allowable configurations. In some cases a single branch can be used to define an entire half-loop, but in general a half-loop should have a splitter and a mixer even if all equipment on the sub-loop is simply in series.
In addition, to avoid the need for overly complex solver routines, there are some restrictions on the placement of pumps within a particular half-loop. There are two general types of pumps, loop pumps and branch pumps. A pump that is the first component on the first branch (between A and B) is termed a “loop pump” while any pump in the parallel section (between Ci and Di) is termed a “branch pump”. The simplest and most common arrangement is to have one loop pump on the supply side inlet. In plant demand half-loops pumps can be placed only in the inlet branch. This will allow simulation of primary-secondary systems. For more information on pumps and pump placement rules, see the section on PipingSystem:Underground Simulation Pumps in this document.
Essentially, each branch is made up of one or more components linked together in series. The branch has system nodes that store properties at a location on the loop (temperature, enthalpy, flow rate, etc.) at the beginning and end of the branch as well as between components. Components on the branch take the conditions of the node at their inlet and use that information as well as overall control information to simulate the component and write the outlet data to the node following the component. This information is then used either by the next component on the branch or establishes the outlet conditions for the branch.
Although the plant model in EnergyPlus is quite flexible, in most cases the topology of the plant system in the model will be somewhat different from the topology of the actual plant system in a building. EnergyPlus is focused on modeling building energy performance over long periods of time and is not intended as a completely flexible system that can directly model any actual plant system with its full complexity and exact layout. Given the design of an actual complex plant system, the modeler will typically need to develop a simpler system that conforms to EnergyPlus’s capabilities and strives to capture the issues important for energy consumption modeling. Just like complex geometry should be simplified into thermal zones for energy models, complex plants should to be simplified into sets of pairs of closed half-loops with the allowed branch topologies.
Plant Manager[LINK]
Plant Half-Loop Calling Order[LINK]
Because there can be multiple plant loops in a model that depend on each other, one job of the plant manager is to determine an appropriate calling order for the half-loops. The initial starting calling order (and the order always used prior to EnergyPlus Version 7) is as follows:
1. Call all the demand side half-loops of the plant loops (in input object order)
2. Call all the supply side half-loops of plant loops (in input object order)
3. Call all the demand side half-loops of condenser loops (in input object order)
4. Call all the supply side half-loops of the condenser loops (in input object order).
This initial calling order is then revised during a setup phase of program execution when the plant component models are iteratively read in, initialized and sized. The algorithm is based on information provided by those component models that connect loops together. The components register that two loop-sides are connected and declare which one places demands on the other. If a half loop is connected and places demands on anther loop, then the calling order for the independent demanding loop is placed just ahead of the dependent loaded half-loop. For example a water cooled chiller component model reports that the supply side of the chilled water loop is connected to the demand side of the condenser loop and that the chilled water loop places demands on the condenser loop. The plant manger algorithm is iterative and repeatedly calls all of the half loops a total of four times. After this setup phase, the calling order is fixed for the rest of the simulation.
Plant Flow Resolver[LINK]
Overview of the Plant Flow Resolver Concept[LINK]
An important aspect of the solution procedure within plant loops is the method used to solve for the fluid flow rates throughout the various half-loops. This involves making the supply side meet a particular load and flow situation based on the simulation of the demand side loops. Load distribution is an issue that must be addressed as well as how flow rates are adjusted and temperatures are updated. These issues are discussed in the next several subsections, and the algorithms described are important to how the plant simulation functions.
In the first step, the plant loop manager calls the appropriate module to simulate (in flow order) all of the components on each branch of the loop except for splitters and mixers. In this step, each component would set the conditions at the outlet node including temperature, flow rate, maximum allowed (design) flow rate, minimum allowed (design) flow rate, maximum available flow rate, and minimum available flow rate. This would be based purely on the component’s own control scheme and thus each component would be free to request as much (or as little) flow as desired.
In the second step, the loop manager would resolve the flow at all nodes and through all branches of the local loop. The components are then simulated with the corrected flows. For this iteration, the flow resolver sets the flow rate through each loop component.
Overall Loop Flow Rate[LINK]
The plant models determine an overall fluid flow rate for each loop based on the dynamic requests and needs of the components on the loop. The flow resolver examines the requests and needs of each half-loop and chooses an overall flow rate. As individual plant components are modeled, they register their requests for fluid flow which are stored on the inlet node (variable called MassFlowRateRequest). These requests for flow are used for two purposes, overall loop flows and resolution of parallel flows inside a splitter/mixer. For determining the overall loop flow request, the requests by individual components are further qualified into three categories based on the nature of the device.
1. Need flow and turns loop on
2. Need flow if loop is already on
3. Take what ever flow they get.
The loop will only run at all if there are flow requests of type 1. If there are flow requests of type 2, they will not turn on the loop but may affect the overall flow rate if it is already on because of some non-zero type 1 requests. Flow requests of type 3 will not affect the overall loop flow rate. These classifications are hard coded and cannot be altered by the user.
Pump Control for Plant and Condenser Loops.[LINK]
The pump is quite simply the component that drives the flow (also see PipingSystem:Underground Simulation Pumps). . How it reacts depends on several different conditions. In total, there are three different decision variables, two of which are defined by user input. These three deciding factors are whether the pump is constant or variable speed, whether the pump operation is continuous or intermittent, and whether or not there is a request for overall loop flow. After the overall loop flow request has been determined the simulation knows what the loop would like to do. The next thing it does is simulation all the loop pumps to see what the pumps can actually provide. Then the overall loop flow is bounded by the minimum and maximum that the loop pumps can provide at that time. The operation of a constant speed pump is fairly straightforward. If the user designates a constant speed pump that is operating continuously, the pump will run regardless of whether or not there is a load. This may have the net effect of adding heat to the loop if no equipment is turned on. If the pump is constant speed and operates intermittently, the pump will run at its capacity if a load is sensed and will shut off if there is no load on the loop.
A variable speed pump is defined with maximum and minimum flow rates that are the physical limits of the device. If there is no load on the loop and the pump is operating intermittently, then the pump can shutdown. For any other condition such as the loop having a load and the pump is operating intermittently or the pump is continuously operating (regardless of the loading condition), the pump will operate and select a flow somewhere between the minimum and maximum limits. In these cases where the pump is running, it will try to meet the flow request for the overall loop.
In many cases, the first estimate of flow requested by the demand side tends to be fairly accurate and the flow rate does not vary in subsequent iterations. However, because there is the possibility that the coils or some other component might request more flow in future iterations during the same time step, the program must not only set flow rates but also maintain a record of the current maximum and minimum flow rate limits. This information is important not only to the pump itself but also to other pieces of equipment which may control their flow rates and thus require knowledge of the limits within which they may work. In general, the decisions on what to set the maximum and minimum flow rates is directly related to the type of pump (constant or variable speed). For constant speed pumps, the maximum and minimum flow rate values are the same and thus if the flow requested does not match this, the other components must either deal with the flow or a bypass branch must be available to handle the excess flow. For variable speed pumps, the maximum and minimum flow rates are set by the user-defined limits.
Plant/Condenser Supply Side[LINK]
Component models, such as boilers, chillers, condensers and cooling towers are simulated on the supply side of the plant and condenser loops. In order to allow specification of realistic configurations, the plant loop managers were designed to support parallel-serial connection of component models on the loop. In addition, loop managers were designed to support both semi-deterministic models (e.g. the parameter estimation models of the ASHRAE Primary Toolkit [Pedersen 2001]) and “demand based” models (e.g. the performance map models of BLAST and DOE2.1E). As a result, the loop manager must be able to simulate models that require the mass flow rate as an input and models that calculate the mass flow rate as an output—sometimes in the context of a single loop configuration.
In order to achieve these design criteria without resorting to a pressure based flow network solver in the HVAC portion of the code, a rules-based “flow resolver” was developed for the EnergyPlus plant manager. The flow resolver is based on the following assumptions and limitations:
Each loop is only allowed to have a single splitter and a single mixer
Due to the fact that there can only be one splitter and one mixer on a given loop, it follows logically that there can be at most one bypass on each loop side
No other components may be in series with a bypass, i.e., a branch that contains a bypass may have no other equipment on that branch
Equipment may be in parallel only between the splitter and mixer components of a loop
Equipment may be hooked together in series in each branch of the loop
Flow rates on individual branches will be controlled using maximum and minimum available flow rate limits
The flow resolver employs a simple predictor-corrector algorithm to enforce mass continuity across the plant loop splitter as shown in the following figure.
As previously discussed, the pump establishes the total loop mass flow rate by setting the flow in the first supply side branch. In the second step, a predictor algorithm calls to simulate each piece of equipment on the loop and they update their mass flow rate requests based on the current flow rates, temperatures and load dispatch requests. The loop manager calls the appropriate module to simulate (in flow order) all of the components on each branch of the loop except for splitters and mixers. In this step, each component sets the conditions at its outlet node including temperature and sets component flows on the inlet node. Each component and branch is classified for their type of flow control. Prior to version 7 this was input by the user where branch objects were tagged in the user input file as an ACTIVE, SERIESACTIVE, PASSIVE or BYPASS type of model. As of version 7 this has been hard coded and the input is no longer used. An ACTIVE flow control type describes a demand based plant model that calculates mass flow rate as an output. An ACTIVE component when OFF will shut down the whole branch irrespective of the type of other components on the branch. A SERIESACTIVE branch is like an ACTIVE component except that there are more than one ACTIVE components on the branch so that two components requests may be at odds with each other and so it might not shut down the whole branch when the component is OFF. The flow resolution algorithm is same for both ACTIVE and SERIESACTIVE components and in the rest of the document description of one type will fit the other type too. A PASSIVE type describes a semi-deterministic model that is simulated with the mass flow rate as an input. The BYPASS type designates a loop bypass.
The predictor algorithm first establishes the desired flow rate of each branch by searching for ACTIVE components on the branch. The first ACTIVE component in simulation order sets the desired branch flow. Branches with only PASSIVE components require a flow rate between the minimum and maximum allowable branch flow. Branches with a BYPASS component have a branch flow only when all other branches combined cannot handle the entire loop flow.
The loop flow resolver makes any necessary “corrections” to the requested branch flows in order to enforce overall continuity on the loop. If mass conservation allows all ACTIVE branches to be satisfied, then the remaining flow is divided between the PASSIVE branches and as a last resort, the BYPASS. If there is insufficient flow to meet the branch demand, ACTIVE branch requests are met first in the order that the branches appear in the branch list in the input file.
The flow rate is resolved first for each individual branch. For every branch, the program cycles through each node on the branch and determines what the flow requests and flow limits are. The most restrictive flow constraints are assumed to be valid for the entire branch regardless of component type. Active components are given highest priority for requesting a particular flow rate. If there is more than one active component on a particular branch, then it is assumed that the active component on the branch with the highest flow request dictates the flow request for the entire branch.
Once all of the branches have set their flow rates and constraints, the splitter and mixer must resolve the various flow requests. The mixer and any branch following the mixer is passive. Thus, all of the flow control happens at the splitter. The splitter first attempts to sum the maximum and minimum constraints from all of the active branches coming out of the device and compares those to the constraints that are valid for the branch leading into the splitter. When there is a mismatch between the outlet constraints and the inlet constraints, the simulation will defer to the inlet constraints due to the fact that the pump is in reality controlling flow on the loop. Since the constraints of the pump would be passed across to the demand side from the supply side, an assumption is made that the coils or other demand side components must live within the bounds of the pump.
Once the flow has been resolved at the splitter, the branch flow rates and constraints between the splitter and mixer can be adjusted, if necessary. In some cases, this will be mandatory to maintain a mass balance at the splitter. When the flow rate coming out of the splitter does not match the active branch requests, individual branch flow rates must be adjusted to provide for the extra flow or the “flow deficit”. When there is extra flow, the excess flow is sent through any bypass branch first and then is sent to passive branches in reverse order of their appearance in the splitter outlet list. When all of these branches have been exhausted and there is still excess flow, flow will be increased to the active branches, also in reverse order. The reverse order guarantees that the branch appearing first has the highest priority to receive the flow rate it has requested.
If there is not enough flow to meet all active branch requests (i.e., a “flow deficit”), then the flow rates through the bypass and passive branches are set to zero. The flow rates through the active branches will then be decreased in reverse order until the splitter outlet flow rate matches the available flow at the splitter inlet. For a plant loop flow deficit, the bypass and passive branch flows are also set to zero, and flow rates for each active branch are calculated as follows:
\[{\dot m_{br}} = \frac{{{{\dot m}_{br\_request}}}}{{{{\dot m}_{tot\_request}}}}*{\dot m_{tot\_available}}\]
where:
\(\dot m_{br}\) = final resolved branch flow rate
\(\dot m_{br\_request}\) = requested branch flow rate
\(\dot m_{tot\_request}\) = total loop mass flow rate request
\(\dot m_{tot\_available}\) = total loop mass flow rate available
It is also necessary to monitor the flow constraints at the branches and components since once the flow rates are changed, the components must be resimulated by the controlling loop (air loop, zone equipment, or plant supply side). The controllers for these components must know if the constraints have been modified so that the simulation does not toggle between a component requesting a flow that the pump cannot meet and the pump then resetting the flow to what it can provide. Note that once a flow rate for any component has changed that this signals the need to resimulate any sub-loop to which it might have an indirect connection. Currently, this means that if a flow rate on the plant demand side changes, the simulation must recalculate the conditions on both the air loop and zone equipment sub-loops since coils and other equipment could be on either side of the main air loop. Similarly, if the condenser demand side simulation results in a change in flow rate through a chiller condenser, then the plant supply side must be triggered to perform its calculations again. Care has been taken to avoid cases where the various half-loops might simply keep triggering the resimulation of their indirect connections in an infinite loop.
Loop Capacitance and Pump Heat[LINK]
The plant model includes simplified methods of modeling fluid capacitance and the temperature rise because of pumping and friction. The transition from load or energy based plant models to a loop based arrangement makes variables of both the flow rate and the fluid temperature. This means there are more degrees of freedom that must be controlled. The flow resolver concept discussed previously controls the fluid flow rates through the components and maintains an overall mass flow balance through the loop. However, the temperatures still need to be controlled and modeled. A purely iterative procedure can be expected to converge to the appropriate loop temperatures, but the procedure can become slow to converge under conditions where the demand changes rapidly or the supply components may not have enough capacity to meet the system demand. This situation is somewhat analogous to that existing in the link between the zone and the air system. In that case, the convergence and stability of the iterative solution was greatly improved by adding the thermal capacitance of the zone air and other fast responding mass within the zone. Based on that experience, it was decided to add thermal capacitance to the plant loop model to benefit from the added stability. Because the thermal capacitance in the zone/system interaction is relatively small, it was necessary to use a third order numerical solution there. Although the plant loop’s fluid thermal capacitance is relatively high, the fluid flows also have high heat capacity and can change temperatures rapidly a simple first order solution was not found to be satisfactory and an exact analytical solution was needed.
In realistic conditions there is often some delay between changes in supply conditions and corresponding changes at demand side components due to the transport of fluid round the loop having a finite velocity.
The act of pumping fluid around a loop adds heat to the fluid through friction. The slight warming occurs at the pump and all around the circuit. The amount of heat is equal to the work done on the fluid by the pump. This so-called pump heat is a complicating factor in plant simulation because the pump heat alters the load on primary equipment. A simple method of accounting for pumping heat is needed that doesn’t increase the difficulties of the numerical solution and (as of version 7) in EnergyPlus this accomplished by including the pump heat in the loop capacitance model.
Plant loops include a simple loop capacitance model to simulate these effects based on a well-stirred tank model. Each half-loop has a well-stirred tank located at its inlet as indicated in Figure 4. The temperature of the tank is modeled as a function of the tank mass, inlet fluid flow rate and temperature, and pump heat. No energy is lost or gained because of storage in the loop capacitance.
The total plant loop volume is separated into two tanks, on on each half-loop inlet. For normal loops (without common pipes) each tank is one half of the plant loop volume. For common pipe plant loops, the tank on the supply side inlet has three fourths of the volume and the tank on the demand side inlet has one fourth. Each plant loop is assigned a total fluid volume as user input or an autocalculate routine based on the design flow rate. The size of the thermal capacitance affects the speed of recovery from situations where the setpoint was not maintained. The user must estimate a fluid volume based on the size of the pipes in the loop. Note that rough estimates seem to be sufficient. Loop capacitance (m\(^{3}\)) could be calculated from pipe size data but this is not usually known. If zero capacitance is specified the above formulation reduces to an instantaneous update in demand update temperature and the demand inlet temperature becomes the supply outlet temperature at the previous time step. If a very large capacitance is specified unrealistic time delay may result and there may be poor response to changes in loop setpoint temperature. The loop capacitance ‘autocalculate’ option sets the loop volume to the product of the maximum loop flow rate and the loop circulation time (a user input which defaults to 2 minutes).
The tank temperature is modeled by drawing a control volume and energy balance around the tank and solving for the temperature. The temperature of each tank is recalculated whenever the two half-loops are interfaced together. The tank temperature history is stored at the end of the simulation timestep. The model equation for tank (and outlet temperature) is formulated as follows:
\[{T_{tank,new}} = \frac{{\dot m{c_p}{T_{inlet}} + \frac{{{M_{tank}}{c_p}{T_{tank,old}}}}{{{t_{sys}}3600}} + {{\dot Q}_{pumpheat}}}}{{m{c_P}} + \frac{{{M_{tank}}{c_p}}}{{{t_{sys}}3600}}}\]
The tank temperature at the end of the simulation timestep is solved by the analytical approach and expressed as
\[T_{tank}^t = \left( {T_{tank}^{t - \delta t} - \frac{{\dot m{c_p}{T_{inlet}} + {{\dot Q}_{pumpheat}}}}{{\dot m{c_p}}}} \right)\exp \left( { - \frac{{\dot m{c_p}}}{{{M_{tank}}{c_p}}}t} \right) + \frac{{\dot m{c_p}{T_{inlet}} + {{\dot Q}_{pumpheat}}}}{{\dot m{c_p}}}\]
where:
\(T_{tank}^{t - \delta t}\) is the previous system time-step tank temperature [°C]
\(T_{tank}^t\) is the current tank and tank outlet temperature [°C]
\(\dot m\) is the current fluid mass flow rate through the tank [kg/s]
\(\delta t\) is the duration of system time step [second]
\({c_P}\) is the heat capacity of fluid [J/kg]
\({M_{tank}}\) is the mass of the water in the tank [kg]
\({\dot Q_{pumpheat}}\) is the heat generated by a pump in the tank [W]
When modeling plants using one of the common pipe modes for plant loops, the same tank model is used but the tanks are situated differently and account for extra connections. For common pipe situation, the tanks are located on the outlet of a half loop with common pipe interactions downstream of the tank.
The average temperature is reported as the tank temperature. The average temperature is defined as the value of an integral function of tank temperature on an interval [0,\(\delta\)t].
\[\begin{split} \mathop T\limits^ - =& \frac{1}{{\delta t}}\int_0^{\delta t} {T_{tank}^tdt} \;\; = \frac{{{M_{tank}}{c_p}}}{{\dot m{c_p}\delta t}}\left( {T_{tank}^{t - \delta t} - \frac{{\dot m{c_p}{T_{inlet}} + {{\dot Q}_{pumpheat}}}}{{\dot m{c_p}}}} \right)\left( {1 - \exp \left( { - \frac{{\dot m{c_p}}}{{{M_{tank}}{c_p}}}\delta t} \right)} \right) \\ &+ \frac{{\dot m{c_p}{T_{inlet}} + {{\dot Q}_{pumpheat}}}}{{\dot m{c_p}}} \end{split}\]
Plant Flow Resolver Input[LINK]
The input specifically related to the flow resolver consists of the plant BranchList and the plant ConnectorList as shown in the Input Output Reference. User defined names link the plant loop to its branches (contained in the BranchList) and define the loop splitters and mixers contained in the ConnectorList. The Connector:Splitter and Connector:Mixer syntax in turn define the relative connection of the branches to each other on the loop.
The Branch definition is input in simulation and connection order for all of the components on the branch. The simulation assumes that the inlet node of the first component listed on the branch is the branch inlet node and the outlet node of the last component listed on the branch is the branch outlet node. Examples of all the input syntax is shown in the Input/Output Reference for the appropriate object.
Summary of Load Distribution Schemes[LINK]
Five load distribution schemes are employed in EnergyPlus. The figure below illustrates the plant load distribution algorithm. The total loop demand is calculated and used in the ManagePlantLoopOperation routine to determine which equipment is available based on the supervisory control scheme specified by the user. Once all available components have been identified the loop demand is distributed to the available components based on the user specified load distribution scheme.
The OPTIMAL scheme first loads each component to its optimal part load ratio (specified in input). Any remaining loop demand is distributed evenly to all the components.
The UNIFORMLOAD scheme first divides the load evenly among all available components. If some components do not have the capacity to meet the uniformly distributed load, the remaining load is distributed sequentially to the other available components.
The SEQUENTIALLOAD scheme loads each component one at a time to capacity until the loop demand is met. The components are loaded up in the order that they appear in the equipment list specified in input.
The UNIFORMPLR scheme loads all equipment uniformly by maintaining uniform part load ratios across all equipment on the equipment list. If the load is below the load required by the plant to operate at the largest component minimum part load ratio, the last item is removed from each equipment list. This process is repeated until the plant can operate above the largest component minimum part load ratio.
The SEQUENTIALUNIFORMPLR scheme loads all equipment in the order specified on the equipment list to capacity while operating all operational equipment at uniform part load ratios.
Note: For all schemes, if the load for any individual component is less than the component load at the minimum PLR, the individual component model will false load or reduce duty cycle while operating at the minimum part load ratio until the load is met.
Examples of application of each Load Distribution schemes can be found in the following tables. Each example assume that we have two pieces of equipment, with Equipment A being first in line in the
PlantEquipmentList, and having the following characteristics:Note: In the examples below:
"*" Means it will false load or cycle
"**" Means it is capped by maximum PLR
OptimalLoad[LINK]
The OptimalLoad Load Distribution occurs in three steps:
Sequentially load each equipment to the Minimum of Optimal Load (= Load corresponding to optimal Part Load Ratio) and Loop Demand
Evenly distribute the remaining loop demand, without exceeding the maximum Part Load Ratio of each equipment
It there is still some remaining demand, look for any equipment that is not yet at maximum Part Load Ratio and load it (up to its maximum Part Load Ratio)
UniformLoad[LINK]
The UniformLoad Load Distribution occurs in two steps:
Distribute the load equally to all machines, without exceeding the maximum PLR of the equipment
If there is a remaining loop demand, sequentially distribute it to all machines, without exceeding the maximum Part Load Ratio.
SequentialLoad[LINK]
The SequentialLoad simply loads all machine sequentially up to their maximum Part Load Ratio.
UniformPLR[LINK]
The UniformPLR Load Distribution occurs in three steps:
Determine PlantCapacity and LargestMinCompPLR for each successive equipment being turned on. PlantCapacity is the capacity of all equipment that is turned on and considered. LargestMinCompPLR is the max of minimum Part Load Ratio for each equipment considered.
While the load to be met is below the LargestMinCompPLR equipment still in consideration, remove the last equipment in the Plant Equipment List. Always keep one equipment.
Divide the Plant Load across the remaining equipment
SequentialUniformPLR[LINK]
The SequentialUniformPLR Load Distribution occurs in two steps:
Turn on each equipment sequentially to have enough capacity to meet the loop demand.
Operate the resulting equipment at uniform part load ratio
Summary of Plant Loop Demand Calculation Schemes[LINK]
There are two plant loop demand calculations schemes in EnergyPlus. There is a SingleSetPoint and a DualSetPointDeadband; the SingleSetPoint is the default if that field is left blank in the PlantLoop object. In the SingleSetPoint scheme the Plant Loop requires that a Setpoint Manager set a single setpoint value that sets Node%TempSetPoint. Examples of this Setpoint Manager would be: the objects SetpointManager:Scheduled, SetpointManager:OutdoorAirReset, etc. For the DualSetPointDeadband scheme the Plant Loop requires one or two Setpoint Managers that set the high and low setpoint values for Node%TempSetPointHi and Node%TempSetPointLo. SetpointManager:Scheduled:DualSetpoint sets both the high and low setpoints. Otherwise, two setpoint managers are required, one with Control Variable = MaximumTemperature and another with Control Variable = MinimumTemperature. Examples of applicable setpoint managers include: SetpointManager:Scheduled, SetpointManager:OutdoorAirReset, SetpointManager:FollowOutdoorAirTemperature, etc. Look in the Input Output Reference for the correct usage of these SetpointManagers.
The Plant Loop Demand Calculation Scheme determines the amount of heating or cooling necessary to bring the temperature of the Plant Loop to its setpoint(s). When this value is determined then the Load Distribution scheme explained in the previous section takes this value and distributes the load to the appropriate equipment. The demand calculation scheme determines how the load is calculated. In the next section is a summary of the 2 algorithms and how they are used.
Loop Demand Calculation Scheme SingleSetPoint[LINK]
The SingleSetPoint scheme for the PlantLoop takes the value that is placed on the Node%TempSetPoint and calculates the heating or cooling load necessary to obtain that setpoint.
DeltaTemp = LoopSetPoint - LoopTempIn
LoopDemand = mdot * Cp * DeltaTemp
The sign of the Loop Demand determines if the loop has a cooling or heating load. Then the Load Distribution scheme distributes this calculated load to the appropriate equipment.
Loop Demand Calculation Scheme DualSetPointDeadband[LINK]
The DualSetPointDeadband scheme for the PlantLoop takes the value that is placed on the Node%TempSetPointHi and Node%TempSetPointLo calculates the heating or cooling load necessary to obtain that setpoint; if in the DeadBand then no load is calculated. The pseudo code below shows the basis of the algorithm.
The sign of the Loop Demand determines if the loop has a cooling or heating load. Then the Load Distribution scheme distributes this calculated load to the appropriate equipment, if there is any.
Plant and Condenser Equipment Operation Schemes[LINK]
Plants and condenser loops must have some mechanism for controlling the operation of the loop and which equipment is available under different operating conditions. Once the Loop load is calculated by the return conditions from the demand side and using the loop setpoint, this load needs to be allocated to the supply equipment according to the users input. This is mainly done by the operation schemes.
Each operation scheme must have the type of operation scheme, its identifying name, and the schedule that defines its availability. The first scheme appearing in the list is given the highest priority; the second scheme has second highest priority, etc. In other words, if according to its schedule, the first operation scheme is available, then it is used by the simulation to define how the plant or condenser loop operates. If it is not available, the second operation scheme in the list is checked to see if it is available until the highest priority scheme that is also available is found. See the Input Output Reference for input field details.
Plant Operation Schemes[LINK]
See the Input Output Reference for input field details. The options for plant control schemes are:
Uncontrolled Loop Operation[LINK]
The PlantEquipmentOperation:Uncontrolled scheme takes the full capacity of the supply equipment and cools or heats the loop accordingly. An example would be a cooling tower where the cooling tower would cool the condenser loop with all of its available capacity and not be limited by a capacity range or setpoint. Uncontrolled loop operation simply specifies a group of equipment that runs ‘uncontrolled’. If the loop runs, this equipment will run also, unless turned off by the loop flow resolver to maintain continuity in the fluid loop.
Cooling Load Range Based Operation or Heating Load Range Based Operation[LINK]
PlantEquipmentOperation:CoolingLoad (or PlantEquipmentOperation:HeatingLoad) defines the different ranges and which equipment list is valid for each range. In each trio, there is a lower limit for the load range, an upper limit for the load range, and a name that links to an equipment availability list (PlantEquipmentList). Load range operation is used when the loop load is calculated and then the equipment is selected in the proper range. This allows for the most efficient operation of the plant equipment or for the user to determine the most efficient plant configuration. When the equipment list has been determined then the load is allocated to the equipment in a manner selected by the user with “Optimal or Sequential” load distribution scheme. The load range based operation scheme has two statements associated with it: a main statement that defines the ranges that individual priority settings are valid and the lists of equipment that may be used for each range.
Outdoor Drybulb Range Based Operation, Outdoor Wetbulb Range Based Operation, Outdoor RHPercent Range Based Operation[LINK]
The various “PlantEquipmentOperation:Outdoor*” statements define the different ranges of the various environmental parameters and which equipment list is valid for each range. After the keyword and the identifying name, a series of data trios is expected. In each trio, there is a lower limit for the load range, an upper limit for the load range, and a name that links to an equipment availability list (the “PlantEquipmentList”).
Component Setpoint Based Operation[LINK]
PlantEquipmentOperation:ComponentSetpoint provides an alternative way to control plant equipment operation. Equipment is listed in order and loads are calculated for each individual peice of equipment using the difference between the temperature at a demand node, typically the inlet node, and the temperature of a setpoint node, typically the outlet node. These calculated loads are then distributed to the specific peice of equipment that they were calculated for.
\[\dot Q_{load} = {\dot m}{c_p}( {T_{demand} - T_{setpoint}} )\]
Supervisory Control of Heat Pumps that Changeover Between Heating and Cooling Operation[LINK]
PlantEquipmentOperation:ChillerHeaterChangeover provides capabilities to control multiple plant loops using just one operation scheme. This operation scheme is intended for commercial building applications with hydronic heating and cooling systems served by heatpumps. While most plant controls in EnergyPlus provide control over operation of a single plant loop, some applications require heating and cooling plants to be controlled together. Heat pump type plant equipment systems can provide heating or cooling or both. Individual air source plant heat pumps can only operate in cooling or heating at a given time. However in EnergyPlus, the plant modeling approach currently dictates that the heating loops and cooling loops are separate and equipment is connected to one or the other for the entire simulation. Therefore a plant heat pump is modeled with two companion machines that represent a single real machine. The heating side companion is connected to the heating loop and the cooling side companion is connected to the cooling loop.
PlantEquipmentOperation:ChillerHeaterChangeover provides supervisory control over both the heating and cooling systems so that switching the operation between heating and cooling can be coordinated adn take in consideration the loads on the building and plant systems. In addition to a main set of one or more heat pumps, this operation scheme controls auxiliary boilers and a special water to water heat pump that is dedicated to moving heat between the returns of cooling and heating distribution systems. The control decisions involve turning heat pump equipment on and off, calculating and applying setpoint temperatures, calculating and applying load distributions for back up boilers. Control decisions are based on inputs to the PlantEquipmentOperation:ChillerHeaterChangeover, outdoor air temperatures, current building loads, current loads on plant loops. The rest of this section provides more detail. The code is in EquipAndOperation.cc/hh.
The control routine detects the how the building is currently being loaded as part of deciding how the heat pump equipment should be run. These so-called “Polled Building Loads” mimic what a real building automation system might do to understand what is happening in the building. These detected loads are reported as “Supervisory Plant Operation Polled Building Heating Load” and “Supervisory Plant Operation Polled Building Cooling Load.” The loads are determined from predicted sensible loads to setpoint, air system ventilation loads, and any process loads (see routine named DetermineCurrentBuildingLoads). The input to the operation scheme includes the name of a zone list. The zones in that list are polled to aggregate the sum of sensible cooling and heating loads predicted by the zone heat balance model. These are loads-to-setpoint with the sign convention such that cooling loads are negative and summations neglect values that indicate times of no load. These are sensible heat load rates before applying multipliers so zone multiplier and zone list multiplier impacts are applied on a per zone basis.
\[\dot Q_{ZonePredictedCooling} = \sum_{n=1}^{zones} \min({0.0, \dot Q_{OutputRequiredToCoolingSP}}) {Mult_{zonelist}}\] \[\dot Q_{ZonePredictedHeating} = \sum_{n=1}^{zones} \max({0.0, \dot Q_{OutputRequiredToHeatingSP}}) {Mult_{zonelist}}\] Ventilation loads on the air system are modeled from the total heat transfer needed to bring the outdoor air to the conditions of the return air. The program detects which primary air systems are connected to zones included in the list of polled zones. Then ventilation loads, which need to be added to the sensible predicted zone loads, are modeled using the mass flow rate multiplied by the change in enthalpy. \[\dot Q_{AirSysVentCooling} = \sum_{n=1}^{AirSystems} min(0.0, {\dot m_{OA}} ( {h_{ret}} - {h_{OA}}))\] \[\dot Q_{AirSysVentHeating} = \sum_{n=1}^{AirSystems} max(0.0, {\dot m_{OA}} ( {h_{ret}} - {h_{OA}}))\] Process loads on a plant system that are not associated with conditioning the building’s zones are included from any LoadProfile:Plant objects connected to the plant loops controlled by this operation scheme. \[\dot Q_{ProcessCooling} = \sum_{n=1}^{LoadProfiles} min({0.0, \dot Q_{n,ProcessLoad}})\] \[\dot Q_{ProcessHeating} = \sum_{n=1}^{LoadProfiles} max({0.0, \dot Q_{n,ProcessLoad}})\] Finally the overall polled building loads are combined from the three components. \[\dot Q_{BuildingCooling} = \dot Q_{ZonePredictedCooling} + \dot Q_{AirSysVentCooling} + \dot Q_{ProcessCooling}\] \[\dot Q_{BuildingHeating} = \dot Q_{ZonePredictedHeating} + \dot Q_{AirSysVentHeating} + \dot Q_{ProcessHeating}\]
PlantEquipmentOperation:ChillerHeaterChangeover also determines current loads on the plant loops to use in control decisions. Plant loading uses a SingleSetPoint scheme in much the same way as for Component Setpoint Based Operation. Therefore single temperature setpoint values (Node().TempSetPoint) are used and applied as described in Loop Demand Calculation Scheme SingleSetPoint (regardless of the setting in the PlantLoop object). These calculations \(\dot Q_{LoopDemand} = {\dot m }{ C_p} { \Delta {T}}\) are used to determine plant loading and the values calculated are reported as “Supervisory Plant Operation Primary Plant Heating Load” and “Supervisory Plant Operation Primary Plant Cooling Load.” The routines detect if there is a buffer tank (ThermalStorage:ChilledWater:Mixed or ThermalStorage:ChilledWater:Stratified) on the supply side inlet branch of the primary chilled water loop and if there is, the outlet node of the buffer tank is used for the temperature of the fluid entering the supply side when determining primary hydronic cooling load. If a dedicated heatpump for recovery is being controlled, the loads on secondary plant loops are also determined using single setpoint method with the loop temperature determined at the inlet of the source sides of the water-to-water heatpump companion machines (HeatPump:PlantLoop:EIR:Cooling and HeatPump:PlantLoop:EIR:Heating). These secondary plant loads are reported to the output variables called “Supervisory Plant Operation Secondary Plant Heating Load” and “Supervisory Plant Operation Secondary Plant Cooling Load.”
The supervisory control routine uses the results of building and plant loads at the current timestep to decide if the heat-pump-based hydronic plant should be operated in one of four modes: off, heating-only, cooling-only, or simultaneous-heating-and-cooling. If \(\dot Q_{BuildingHeating}\) is less than zero and \(\dot Q_{BuildingCooling}\) is also negative (cooling loads are negative) then based on builing loads, the plant is expected to be in cooling-only mode. if \(\dot Q_{BuildingCooling}\) is positive and \(\dot Q_{BuildingHeating}\) is postive, then the plant is expected to be in heating-only mode. However, if the outdoor air temperature is lower than the input used in the field called “Outdoor Low Temperature” then the heat pump cannot operate in heating and the mode is reset to off. If the building shows both heating and cooling loads, when \(\dot Q_{BuildingHeating}\) is postive and \(\dot Q_{BuildingCooling}\) is negative, then the plant is expected to be in simultaneous-heating-and-cooling mode. In the case of a very small plant with only a single heat pump that cannot operate in simultaneous mode, the plant is set to cooling-only or heating-only depending on which has the more dominant load. However, if the outdoor air temperature is lower than the input used in the field called “Outdoor Low Temperature” then the heat pump cannot operate in heating and the mode is reset to cooling-only. After the building loads have been used, additional changes in mode are considered using the current plant loads. If the building loads indicate that the plant is expected to be in heating-only mode but the current primary cooling hydronic plant load is negative, \(\dot Q_{LoopDemand, ChW} < 0.0\), then the mode is changed to simultaneous-heating-and-cooling (if available). Similarly, if the building loads indicate that the plant is expected to be in cooling-only mode but the current primary heating hydronic plant load is positive, \(\dot Q_{LoopDemand, HW} > 0.0\), and the outdoor air temperature is higher than the minimum limit, then the mode is changed to simultaneous-heating-and-cooling (if available). The selected mode is reported to the output variable called “Supervisory Plant Heat Pump Operation Mode.”
Once the supervisory control has determined the mode, equipment is dispatched based on the user input entered that declare what equipment should be operated for each of the three operating modes. This input is entered in the PlantEquipmentOperation:CoolingLoad and PlantEquipmentOperation:HeatingLoad and the associated PlantEquipmentLists. The cooling companion machines are listed in the PlantEquipmentLists named by PlantEquipmentOperation:CoolingLoad and the heating companion machines are listed in the PlantEquipmentLists named by PlantEquipmentOperation:HeatingLoad. The load-range-based approach is used to select between different sets of equipment. The equipment is not directly loaded, but rather a temperature setpoint is placed on the outlet node (load side) and the component is set to “ON” and “Available.” This supervisory control includes important temperature inputs that are used for limits and controlling setpoints. “Primary Cooling Plant Setpoint Temperature,” or \({T_{set, ChW, Prim}}\), is the target temperature for the primary chilled water plant. When machines are called to operate as chillers the outlet node’s temperature setpoint is set to this value. The temperature setpoint is also placed on the supply side outlet node.
[fig:HW-reset-aux-backup-setpoint-reset]
This operation scheme includes special handling of a water-to-water heat pump situated between the return hot water and return chilled water in a building’s hydronic plant system. Operating the mechanical heat pump between these two return streams offers an efficient way to move heat between them. The figure shows how this operation scheme expects the unit to be connected. The companion approach to heating and cooling versions of the same machine used in EnergyPlus offers a way to have one machine get plumbed into different loops. The diagram shows an “X” configuration for a heat pump machine that is modeled as having a heating companion and a cooling companion. Whenever either side is operating the heat transfer is in the same general direction with heat moving from the chilled water to the hot water. The companion side that is in effect at any given time is the one being controlled, so that the conditions leaving the the load side are controlled to meet a setpoint. A cooling-led heat pump will attempt to cool the chilled water supply inlet branch to the setpoint, while at the same time beneficial heat is transferred to the hot water loop in sort of an uncontrolled way. A heating-led heat pump will attempt to heat the hot water supply inlet branch to the setpoint, while providing beneficial cooling to the chilled water returns.
[fig:dhru-plant-config]
Condenser Operation Schemes[LINK]
This is very similar to the plant operation schemes, but there are several more options available with the CondenserLoop. The condenser operation schemes apply to the equipment on the ‘supply side’ of the condenser loop—pumps, cooling towers, ground coupled heat exchangers, etc. The keywords select the algorithm that will be used to determine which equipment is available for each time step. The ‘Range Based Operation’ schemes select a user specified set of equipment for each user specified range of a particular simulation variable.’Load Range Based’ schemes compare the demand on the condenser supply side with specified load ranges and associated equipment lists. ’Outdoor…Range Based’ schemes compare the current value of an environmental parameter with user specified ranges of that parameter. See the Input Output Reference for input field details.
Uncontrolled Loop Operation[LINK]
The PlantEquipmentOperation:Uncontrolled scheme takes the full capacity of the supply equipment and cools or heats the loop accordingly. An example would be a cooling tower where the cooling tower would cool the condenser loop with all of its available capacity and not be limited by a capacity range or setpoint. Uncontrolled loop operation simply specifies a group of equipment that runs ‘uncontrolled’. If the loop runs, this equipment will run also, unless turned off by the loop flow resolver to maintain continuity in the fluid loop.
Cooling Load Range Based Operation or Heating Load Range Based Operation[LINK]
PlantEquipmentOperation:CoolingLoad (or PlantEquipmentOperation:HeatingLoad) statement defines the different ranges and which equipment list is valid for each range. In each trio, there is a lower limit for the load range, an upper limit for the load range, and a name that links to an equipment availability list (CondenserEquipmentList). Load range operation is used when the loop load is calculated and then the equipment is selected in the proper range. This allows for the most efficient operation of the plant equipment or for the user to determine the most efficient plant configuration. When the equipment list has been determined then the load is allocated to the equipment in a manner selected by the user with “Optimal or Sequential” load distribution scheme. The load range based operation scheme has two statements associated with it: a main statement that defines the ranges that individual priority settings are valid and the lists of equipment that may be used for each range.
Outdoor Drybulb Range Based Operation, Outdoor Wetbulb Range Based Operation, Outdoor RHPercent Range Based Operation[LINK]
The various “PlantEquipmentOperation:Outdoor*” statements define the different ranges of the various environmental parameters and which equipment list is valid for each range. After the keyword and the identifying name, a series of data trios is expected. In each trio, there is a lower limit for the load range, an upper limit for the load range, and a name that links to an equipment availability list (the “CondenserEquipmentList”).
Outdoor Drybulb Temperature Difference Based Operation,. Outdoor Wetbulb Temperature Difference Based Operation[LINK]
The various “PlantEquipmentOperation:Outdoor*Difference” statements control strategies help to control any condenser equipment based on the difference between a reference node temperature and any environmental temperature. For example a cooling tower can be controlled by a strategy, which looks at the difference between the tower inlet temperature and wet-bulb temperature. A difference range is specified for each equipment list.
Primary-Secondary Loop Systems[LINK]
The method to simulate a primary-secondary system in EnergyPlus is termed Common Pipe.
Common Pipe[LINK]
Common pipe feature eliminates the need of specifying two different EnergyPlus loops each for Primary and Secondary half loops. Instead the user can set up the system as it is used in real life applications. A common pipe simulation requires that pumps be placed on both Demand (Secondary) and Supply (Primary) sides of the loop. A typical Common Pipe layout as used in EnergyPlus is shown in Figure 8. The major assumptions in the common pipe implementation are as follows:
Pumps are placed on both demand and supply side of the loop.
Secondary pump flow rate can be less than, equal to or greater than the primary pump flow rate.
The flow at the inlet node of the half loop is equal to the flow at the outlet node of the half loop.
The pumps can have different schedules and any loop can be shut off when the other loop is still running.
Common pipe simulation is done during the interface update call at both Supply-to-Demand and Demand-to-Supply. Appropriate checks are used to make sure that the effect of flow reversal in between iteration is taken care of. Moreover, the common pipe keeps track of the flow rates and temperatures at all the four nodes linked to it; namely, the inlet and outlet nodes of each sub loop. This record will help to decide if loops have converged or not. In situations where the primary component meets the setpoint and the coil controls does not change its flow request, the common pipe converges quickly. The simple description of the control algorithm for common Pipe implementation is as follows:
At FirstHVACiteration, the common pipe flow is initialized to zero.
Common pipe is simulated at interfaces and thus we will have 2 different flows handle on either side of interface.
Loops and corresponding flow rates are assigned inlet or outlet (to common pipe) depending on the interface which calls it. So when common pipe is called from demand to supply interface, the inlet loop is demand side and outlet loop is supply side and vice versa.
Inlet flow is compared to outlet flow and the difference is set as the common pipe flow.
At each interface the common pipe flow is assigned a direction which can be into the interface (Inlet flow < Outlet flow) or away from interface (Inlet flow > Outlet flow).
Outlet temperature is calculated depending on the flow rate and flow direction. When flow is away from interface outlet flow temperature is same as inlet flow temperature. For a common pipe flow into the interface, the outlet flow temperature is calculated as mixed temperature of inlet flow and the common pipe flow.
At demand to supply interface, the supply side inlet node temperature and flow rate are updated every iteration. At supply to demand interface, only flow is updated. The temperature is updated only at the end of timestep.
Loops iterate till the flow and temperatures at all the 4 concerned nodes do not change.
Two-Way Common Pipe[LINK]
A model referred to as Two-Way Common Pipe is available which provides a way to model Primary-Secondary systems as a single Plant Loop. In a typical EnergyPlus plant loop simulation, the only half loop inlet/outlet node that is controlled is the supply side outlet node. In some cases this requirement becomes a limitation in analyzing different options. A good example is ice thermal storage application, where during charging phase, the coil setpoint can be different from the ice storage equipment setpoint. With this model, the interface between the two half loops includes two additional flow paths that essentially split a single plant loop into both primary and secondary loop sides. Though the Two-Way common pipe is designed to be generic some assumptions apply in modeling the component. The assumptions are as follows
The secondary flow may be less than, equal to, or greater than the primary flow.
The mass flow rate at the Primary Side Outlet Node is always equal to the mass flow rate at the Primary Side Inlet Node.
The mass flow rate at the Secondary Side Outlet Node is always equal to the mass flow rate at the Secondary Side Inlet Node.
Only one additional node, either primary-side inlet or secondary-side inlet, (along with the primary-side/supply-side outlet node) can be controlled. The system of equations that describe the loop interface will be under specified if both the Primary and Secondary Inlet nodes have to be controlled.
Figure 9 shows a schematic of the Two-Way Common Pipe. There are two common pipe legs, shown as broken lines, allow for some recirculation at the half loop level. The model allows for common pipe flow in either or both directions. The model determines flow rates in the common pipes and temperatures at nodes based on the following:
Which additional node is being controlled to meet a temperature setpoint? If the primary-side inlet node is controlled, then the flows are controlled to deliver the desired temperature at supply side inlet. If the secondary-side inlet node is controlled then the flows are controlled to deliver the desired temperature at the demand side inlet.
Is the specified setpoint achievable with current secondary and primary outlet conditions? If the setpoint is not achievable, then the flow in each common pipe leg is reduced to its minimum possible value.
At the controlled node, with known demand outlet temperature, supply outlet temperature, primary flow rate and secondary flow rate, and energy balance is used to calculate recirculation flows in the common pipes for that particular half loop, so that the desired temperature setpoint is achieved.
With a known flow in one common pipe leg, the flow on Primary to Secondary (or secondary to primary) is easily obtained by mass balance.
When the Two Way Common Pipe is controlling conditions at the secondary-side, or demand side, inlet node, then the loop capacitance model usually used for the conditions at the demand inlet is not used as it would interfere with control.
Heat Recovery Loop Systems[LINK]
Heat Recovery is accomplished by specifying another set of supply and demand loops. Each of the heat recovery components, i.e. engine driven and combustion turbine chillers, and internal combustion and combustion turbine generators is designed to use the existing component/loop/solution structure to facilitate the simulation with the existing demand side manager and the supply side manager. Heat recovery normally contains components that produce heat that can be recovered, and the ability to store or use that heat elsewhere in the system. The component that can store the excess heat and allow it to be used elsewhere in the system or for domestic hot water is the Water Heater:Simple and is defined in the Input/Output Reference.
In the example above there is a chilled water Loop with chilled water supplied by a diesel engine driven chiller. There is a hot water Loop that is being supplied by the water heater: simple. There is also scheduled domestic hot water usage on the water heater which excess demand can be met by a number of user-specified heating sources. Then on the demand side of the heat recovery loop there is the engine driven chiller, internal combustion, and combustion turbine electric generators with specified mass flows to recover the heat. This hot water is pump on the supply side by the heat recovery pump and provides the heat to the water heater to meet the water heater setpoint. This is probably one of the more complex configurations and interactions that would take place in heat recovery, but using the Plant supply and demand side configurations this can be extended to meet most user configurations. The plant water heater can also be used to just meet scheduled domestic hot water use, provide a hot water source for PlantLoop equipment, or provide a hot water storage tank for heat recovery as a single function. Or any combination of the above can be configured. Example files of some of these configurations are provided with the installation.
Plant Pressure Drop Simulation[LINK]
As of version 4.0, there is an added feature which allows better calculation of pressure in plant and condenser loops. Without any method, the loops essentially ignore the node pressures. This is suitable for many applications, however may cause inaccuracies in the pump power. This is especially prominent in cases where the loop flow may change drastically over a wide range of configurations, as the pump power is based on a rated power value and rated pump head value. As the loop components turn on and off, the pressure drop will change, and so the pump power should be dynamically updated with these changes.
Overall model features:[LINK]
Calculates loop pressure drop based on pressure drop information which is placed on branches. These are entered in terms of generic curves (linear, quadratic) or pressure drop information (minor loss/friction factor).
Loop pressure drop is used as the new pump head. No information is entered about the pump curve, so it is assumed that the pump will always be able to meet this operating point. Future enhancements will allow the pump to ride a curve based on the given pressure head.
Model does not resolve flow rates on parallel branches to match pressure drop, this is explained further below, but basically it takes the maximum pressure drop from parallel pressure components and applies that to all parallel components.
Model works for the following configurations:
Pump Location
Loop Pump
Branch Pumps
Loop Types
PlantLoop
CondenserLoop
The supply side inlet (before the pump) is always set to standard atmospheric pressure. This allows the node pressures around the loop to stay positive. The actual values of pressure are not all that important, it is the delta pressure that is of interest for our calculations, but this makes the pressure values appear realistic if one plots the pressure around the loop.
The pressure drop is at the branch level, not the component level. If multiple components are found on a single branch, the pressure drop is always applied to the last component on the branch. This is coordinated with the rule that a pump must always be the first component if it is found on a branch.
Calculations use the branch flow rate and the branch entering temperature to calculate properties for the whole branch.
Detailed Restrictions:[LINK]
Pressure drop curves must not be placed on branches which only contain a pump. Pressure curves may be placed on the supply inlet branch with a pump as long as there are other components on that same branch, following the pump.
If using branch pumps, pressure drop curves found on the supply inlet branch will be ignored. Put pressure drop information after pumps.
Currently, pressure drop simulations are not allowed with common pipe (demand pump) simulations. A future version of the pressure drop system will allow this by allowing each pump to handle the pressure drop of the given loop side (demand or supply).
Detailed Calculation Steps:[LINK]
Before the demand side is simulated, the pressure system is initialized. All node pressures are reset, and pressure drop values for branches are re-initialized.
After all components on a branch are simulated, the pressure drop for that branch is calculated. This pressure drop is registered in the pressure drop system to be used in subsequent loop level calculations.
Once the entire loop (demand then supply sides) is simulated, the loop level pressure drop calculations are performed using the following steps:
Beginning at demand side outlet (linked to supply inlet), and working backwards, the node pressure is updated and loop pressure is summed by “adding pressure drops” as they are found around the loop. By working backward, we are able to easily preserve the pump inlet pressure as a realistic value (standard atmospheric pressure).
When a parallel system is encountered, a special operation is performed. Since we are not resolving flows with this version of the pressure simulation, the parallel system is set to use the largest value of pressure drop found on the parallel branches. In this manner, the highest pressure drop component essentially governs the set of parallel branches, and the other components must match the pressure drop in order to achieve their desired flow rate. This is performed by placing “imaginary” valves in the splitter. This allows individual branches to report their own pressure information, while the splitter accounts for the required pressure drop to match the governing branch. This is shown graphically in the figure below.
Because the splitter automatically handles the pressure drop required to match the pressures in the parallel system, the mixer will have uniform flow entering from all branches and exiting.
These calculations are performed around the loop and result in a value of pressure drop for the entire loop.
Pump power requires a value of pressure head before it can add heat to the loop, which is done before any components are calculated, and any pressure system calculations are performed. Because of this, the pump power is based on rated head during the first iteration. On subsequent iterations, the pump power is based on the dynamic pressure head calculated by pressure drop information.
If anything drastically changes between one iteration and the next, the loop will be re-simulated, and the latest value of pressure head will be used. By the time the loop is converged, the pressure head between the current and most previous iterations will agree to within simulation tolerance. Thus the pump is using a lagged value of pressure head, but once the loop is converged, the lagged and current values will agree.
Pressure Drop Calculations:[LINK]
There are two types of pressure drop curves that can be entered, each with its own calculation engine:
Generic: A curve of any form (single independent variable) such as linear or quadratic may represent the pressure drop in Pascals as a function of current mass flow rate in kg/s. This is common for regressing component pressure drop such as heat pumps into a quadratic best fit form. The branch pressure drop is then calculated by evaluating this curve with the given branch flow rate.
Pressure Information: This calculation involves two types of pressure drop: frictional effects and minor losses. The governing equation is:
\[\Delta P = \left( {f\frac{L}{D} + K} \right)\frac{{\rho {V^2}}}{2}\]
The user enters value for the minor loss coefficient K to represent all the minor losses on that branch. If the user is entering friction information, the minor loss coefficient may be zero or blank.
The user enters roughness, e, or a fixed value of friction factor to account for frictional losses on the branch, as well as an equivalent length L. If the user enters roughness then the friction factor is calculated from a Moody chart approximation (Haaland, 1983):
\[f = {\left\{ { - 1.8\log \left[ {{{\left( {\frac{{e/D}}{{3.7}}} \right)}^{1.11}} + \frac{{6.9}}{{{\mathop{\rm Re}\nolimits} }}} \right]} \right\}^{ - 2}}\]
If the user enters minor loss information, then the friction factor information can be left out.
The diameter is an equivalent value and is used to calculate relative roughness for friction calculations as well as velocity for any pressure drop calculation.
Riding Pump Curves to Determine Loop Operating Point[LINK]
In addition to being able to provide a means of calculating loop pressure drop, EnergyPlus can also perform a “loop-level” pump-system flow resolution. The pressure drop components that were described in the previous sections are combined with the input of a dimensionless pump pressure-flow curve and at each iteration, these are utilized in determining a proper operating point for the loop.
Some restrictions do apply to this simulation. As with the basic pressure drop simulation, common pipes are not valid in the current release. For this pump curve phase, the simulation is also restricted to “loop pumps” such that pumps should not be used on the parallel branches between a mixer and splitter.
The idea of riding a pump curve, as it is currently implemented, is based on a constant speed pump. A variable speed pump in EnergyPlus can already effectively vary its flow/pressure characteristics to meet the demand. Thus, this phase is only implemented for the Pump:ConstantSpeed model.
The model works by approximating the loop with a quadratic pressure drop form, then iterating to find an operating point. The entire plant loop then iterates to find the operating point that attempts to match the requested flows. Note that when doing a pressure based pump simulation, the loop will likely not hit setpoint every timestep, while doing the simpler approach (non-pressure) may result in a tighter-controlled simulation. In deciding this, you must consider the realism of the pressure approach vs. the non-pressure approach which may be more tightly controlled and will have less input requirements.
In the first iteration of the plant, there is not yet enough information to determine a pressure-flow simulation, so flow through the loop is set to the rated flow rate of the pump (irrespective of pump performance curve). For this rated flow rate pressure drop in each branch will be calculated by plant pressure system. So after this first pass through the loop, the pressure system now has a valid system flow-pressure point. From this point (pressure drop in the branch and rated mass flow rate) a pressure constant for each branch is calculated assuming quadratic relationship between pressure drop and mass flow rate.
\[{K_{Branch(i)}} = \Delta {P_{Branch(i)}}/{m_{Rated}}^2\]
If there are parallel branches then equivalent K is calculated from following formula.
\[\frac{1}{{\sqrt {{K_{ParallelEquivalent}}} }} = \sum\limits_{j = 1}^m {\frac{1}{{\sqrt {{K_{Branch(j)}}} }}}\]
From all these ‘K’ values of the branches a corresponding K value for complete loop is calculated. This representative K value for the loop will lock down a system curve for a single iteration. This K value will change throughout the higher-level plant iterations and simulation time steps.
The Non-dimensional pump curve is entered in following way,
\[\psi = {C_4} \times {\varphi ^4} + {C_3} \times {\varphi ^3} + {C_2} \times {\varphi ^2} + {C_1} \times \varphi + {C_0}.\]
C\(_{1-4}\) are curve coefficients with last mandatory non-zero constant term C\(_{0}\) (as pump curve will not pass through origin).
The nondimensional variables in the previous equation are defined in terms of the following expressions:
\(\psi\) – Non-dimensional pressure rise: \(\psi = \frac{{\Delta P}}{{\rho {N^2}{D^2}}}\)
\(\varphi\) - Non-dimensional flow: \(\varphi = \frac{{\dot m}}{{\rho N{D^3}}}\)
The user preprocesses mass flow and pressure values into these nondimensional forms in order to generate the curve fit. The program then resolves the nondimensional forms into actual values based on the pump speed, diameter, and fluid density. This gives the proper pressure-flow relationship for the simulation.
Pump-System Operating Point Flow Resolver:[LINK]
The pressure drop components and the pump curve are described in the prior sections. The routine which actually uses these curves to resolve to an operating point is described here. This routine is called by the pump model as it is determining what flow it should be using. The flow resolver reads the non-dimensional pump curve, loop pressure constant (K value) and rated mass flow rate (or mass flow rate from last iteration). The resolver finds the intersection of the two curves by successive substitution with 0.9 as a damping factor. If the flow rate is outside (or if in any iteration move out of) the range for which pump curve-fit is suggested, the resolver will bring the value within range, thus it is important to specify the curve-fit range (in terms of non-dimensional flow rate) for pump curve by the user. It was observed that simple successive substitution (sometimes) diverges depending on shape of curves and/or location of operating point. Damping factor provides stability to successive substitution and it was observed that it converges for less number of iteration, speeding up the function. The damping factor was set as 0.9 as it showed full stability during testing, although a more optimum value may be available for a particular set of curves. A future version may have an improved selection algorithm for the damping factor itself.
References[LINK]
Haaland, SE. 1983. “Simple and Explicit Formulas for the Friction Factor in Turbulent Flow”. Transactions ASIVIE, Journal of Fluids Engineering 103: pp. 89-90.
Documentation content copyright © 1996-2026 The Board of Trustees of the University of Illinois and the Regents of the University of California through the Ernest Orlando Lawrence Berkeley National Laboratory. All rights reserved. EnergyPlus is a trademark of the US Department of Energy.
This documentation is made available under the EnergyPlus Open Source License v1.0.