Engineering Reference — EnergyPlus 9.4

<< Prev | Table of Contents | Next >>

Air Loop Simulation[LINK]

A complete simulation of each primary air system – zone equipment air loop is done in the following manner.

  • If this is the first simulation this system time-step, just call ManageAirLoops (simulates the primary air systems) and ManageZoneEquipment (simulates the zone equipment sets) once and quit. This initial pass is simulated with full design air flow rates and allows the zone equipment to set the flow rates for each zone that will meet the zone loads.

  • Otherwise loop over primary air systems and zone equipment sets until the temperatures, flow rates, enthalpies, humidity ratios etc. agree to within tolerance at each primary air system – zone equipment gap.

<!-- -->
while ( ( SimAirLoops || SimZoneEquipment ) && ( IterAir <= MaxAir ) ) {
    ++IterAir; // Increment the iteration counter
    // Call AirflowNetwork simulation to calculate air flows and pressures
    ResimulateAirZone = false;
    if ( SimulateAirflowNetwork > AirflowNetworkControlSimple ) {
        ManageAirflowNetworkBalance( FirstHVACIteration, IterAir, ResimulateAirZone );
    if ( SimAirLoops ) {
        ManageAirLoops( FirstHVACIteration, SimAirLoops, SimZoneEquipment );
        SimElecCircuits = true; //If this was simulated there are possible electric changes that need to be simulated

    // make sure flow resolution gets done
    if ( FlowResolutionNeeded ) {
        SimZoneEquipment = true;
    if ( SimZoneEquipment ) {
        if ( ( IterAir == 1 ) && ( ! FlowMaxAvailAlreadyReset ) ) { // don't do reset if already done in FirstHVACIteration
            // ResetTerminalUnitFlowLimits(); // don't do reset at all - interferes with convergence and terminal unit flow controls
            FlowResolutionNeeded = true;
        } else {
            FlowResolutionNeeded = false;
        ManageZoneEquipment( FirstHVACIteration, SimZoneEquipment, SimAirLoops );
        SimElecCircuits = true; // If this was simulated there are possible electric changes that need to be simulated

    FlowMaxAvailAlreadyReset = false;

    //      IterAir = IterAir + 1   ! Increment the iteration counter
    if ( SimulateAirflowNetwork > AirflowNetworkControlSimple ) {
        if ( ResimulateAirZone ) { // Need to make sure that SimAirLoop and SimZoneEquipment are simulated
            SimAirLoops = true; // at min three times using ONOFF fan with the AirflowNetwork model
            SimZoneEquipment = true;


RepIterAir += IterAir;
if ( IterAir > MaxAir ) {
    AirLoopConvergFail = 1;
} else {
    AirLoopConvergFail = 0;
// Check to see if any components have been locked out. If so, SimAirLoops will be reset to TRUE.
ResolveLockoutFlags( SimAirLoops );

The logical flags SimAirLoops and SimZoneEquipment are used to signal whether the primary air systems or the zone equipment sets need to be resimulated. These flags are set by the subroutine UpdateHVACInterface which is called from within ManageAirLoops and ManageZoneEquipment at the end of each half-loop simulation. UpdateHVACInterface (when called from ManageAirLoops) passes the values at the outlet nodes of a primary air system on to the inlet nodes of the corresponding zone equipment half-loop and similarly (when called from ManageZoneEquipment) passes the values of the outlet nodes of a zone equipment half-loop on to the inlet nodes of its corresponding primary air system. Each time UpdateHVACInterface is called it also checks whether the values at the half-loop outlet nodes are in agreement with the values at the downstream half-loop inlet nodes. If they are not it sets the simulate flag of the downstream half-loop to true. The values checked by UpdateHVACInterface and their tolerances are as follows. If the air loop has no return path, then UpdateHVACInterface compares and passes only the mass flow rate from the zone equipment inlet node to the primary air system inlet node.

Quantities Tolerances
specific enthalpy [J/kg} 10.0
mass flow rate [kg/s] 0.01
humidity ratio [kg H O / kg dry air] 0.0001
quality 0.01
air pressure [Pa] 10.0
temperature [C] 0.01
energy [J] 10.0

ResolveAirLoopFlowLimits is invoked to deal with zone equipment – primary air system flow mismatches. For instance the zone air terminal units (ATUs) may be asking for more air than the central fan can supply. In this case ResolveAirLoopFlowLimits takes the air flow that the fan can supply and apportions it among the ATUs in proportion to their design maximum air flow rates (ResolveAirLoopFlowLimits sets the ˙mmaxavail,node at the entering node of each ATU in the system).

At the end of the air loop simulation ResolveLockoutFlags is called. This subroutine checks if any air system component has requested that the economizer be locked out. If such a request has been made and if the economizer is active, ResolveLockoutFlags sets SimAirLoops to true and the EconoLockout flag to true to ensure that the air loop will be resimulated with the economizer forced off.