Simulation Manager[LINK]
The simulation manager of EnergyPlus is contained in a single module. The main subroutine is shown below. Flow within the entire program is managed using a series of flags. These paired flags, in order (from the highest to the lowest) are:
Simulation Flags
BeginSimulationFlag |
EndSimulationFlag |
BeginEnvironmentFlag |
EndEnvironmentFlag (one to many days) |
BeginDayFlag |
EndDayFlag |
BeginHourFlag |
EndHourFlag |
BeginTimeStepFlag |
EndTimeStepFlag |
There is also a WarmupFlag to signal that the program is in warmup state. The operation of these flags can be seen in the following subroutine. This code is actually simplified, old EnergyPlus FORTRAN code but it concisely demonstrates the use of these flags in the code. The advantage of using the flag system is that any subroutine throughout the code can determine the exact state of the simulation by checking the status of the flags.
SUBROUTINE ManageSimulation ! Main driver routine for this module
BeginSimFlag = .TRUE.
EndSimFlag = .FALSE.
CALL OpenOutputFiles
CALL GetProjectData
CALL GetEnvironmentInfo ! Get the number and type of Environments
DO Envrn = 1, NumOfEnvrn ! Begin environment loop ...
BeginEnvrnFlag = .TRUE.
EndEnvrnFlag = .FALSE.
WarmupFlag = .TRUE.
DayOfSim = 0
DO WHILE ((DayOfSim.LT.NumOfDayInEnvrn).OR.(WarmupFlag)) ! Begin day loop ...
DayOfSim = DayOfSim + 1
BeginDayFlag = .TRUE.
EndDayFlag = .FALSE.
DO HourOfDay = 1, 24 ! Begin hour loop ...
BeginHourFlag = .TRUE.
EndHourFlag = .FALSE.
DO TimeStep = 1, NumOfTimeStepInHour ! Begin time step (TINC) loop ...
BeginTimeStepFlag = .TRUE.
EndTimeStepFlag = .FALSE.
! Set the End_Flag variables to true if necessary. Note that each flag builds on
! the previous level. EndDayFlag cannot be .true. unless EndHourFlag is also .true.,
! etc.
! Note that the EndEnvrnFlag and the EndSimFlag cannot be set during warmup.
! Note also that BeginTimeStepFlag, EndTimeStepFlag, and the
! SubTimeStepFlags can/will be set/reset in the HVAC Manager.
IF ((TimeStep.EQ.NumOfTimeStepInHour)) THEN
EndHourFlag = .TRUE.
IF (HourOfDay.EQ.24) THEN
EndDayFlag = .TRUE.
IF ((.NOT.WarmupFlag).AND.(DayOfSim.EQ.NumOfDayInEnvrn)) THEN
EndEnvrnFlag = .TRUE.
IF (Envrn.EQ.NumOfEnvrn) THEN
EndSimFlag = .TRUE.
END IF
END IF
END IF
END IF
CALL ManageWeather
CALL ManageHeatBalance
BeginHourFlag = .FALSE.
BeginDayFlag = .FALSE.
BeginEnvrnFlag = .FALSE.
BeginSimFlag = .FALSE.
END DO ! ... End time step (TINC) loop.
END DO ! ... End hour loop.
END DO ! ... End day loop.
END DO ! ... End environment loop.
CALL CloseOutputFiles
RETURN
END SUBROUTINE ManageSimulation
Simulation Manager[LINK]
The simulation manager of EnergyPlus is contained in a single module. The main subroutine is shown below. Flow within the entire program is managed using a series of flags. These paired flags, in order (from the highest to the lowest) are:
There is also a WarmupFlag to signal that the program is in warmup state. The operation of these flags can be seen in the following subroutine. This code is actually simplified, old EnergyPlus FORTRAN code but it concisely demonstrates the use of these flags in the code. The advantage of using the flag system is that any subroutine throughout the code can determine the exact state of the simulation by checking the status of the flags.
Documentation content copyright © 1996-2020 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.