Guide for Module Developers — EnergyPlus 8.6

<< Prev | Table of Contents | Object Index | Next >>

Nodes in the simulation[LINK]

In the EnergyPlus data structure, the nodes are where each component model gets its input and where it places its output. The module DataLoopNode contains all the node related data. In particular, the array Node contains the state variables and mass flows for all the nodes in the problem being simulated.

  ! Valid Fluid Types for Nodes

  INTEGER, PARAMETER :: NodeType_Unknown = 0  ! ‘blank’

  INTEGER, PARAMETER :: NodeType_Air     = 1  ! ‘Air’

  INTEGER, PARAMETER :: NodeType_Water   = 2  ! ‘Water’

  INTEGER, PARAMETER :: NodeType_Steam   = 3  ! ‘Steam’

  INTEGER, PARAMETER :: NodeType_Electric = 4  ! ‘Electric’

 TYPE NodeData

   INTEGER  :: FluidType                 = 0   ! must be one of the valid parameters

   INTEGER  :: FluidIndex                = 0   ! For Fluid Properties

   REAL(r64)     :: Temp                      = 0.d0 ! {C}

   REAL(r64)     :: TempMin                   = 0.d0 ! {C}

   REAL(r64)     :: TempMax                   = 0.d0 ! {C}

   REAL(r64)     :: TempSetPoint              = SensedNodeFlagValue ! {C}

   REAL(r64)     :: TempLastTimestep          = 0.d0 ! [C}   DSU

   REAL(r64)     :: MassFlowRateRequest       = 0.d0 ! {kg/s}  DSU

   REAL(r64)     :: MassFlowRate              = 0.d0 ! {kg/s}

   REAL(r64)     :: MassFlowRateMin           = 0.d0 ! {kg/s}

   REAL(r64)     :: MassFlowRateMax           = SensedNodeFlagValue ! {kg/s}

   REAL(r64)     :: MassFlowRateMinAvail      = 0.d0 ! {kg/s}

   REAL(r64)     :: MassFlowRateMaxAvail      = 0.d0 ! {kg/s}

   REAL(r64)     :: MassFlowRateSetPoint      = 0.d0 ! {kg/s}

   REAL(r64)     :: Quality                   = 0.d0 ! {0.0-1.0 vapor fraction/percent}

   REAL(r64)     :: Press                      = 0.d0 ! {Pa}

   REAL(r64)     :: Enthalpy                  = 0.d0 ! {J/kg}

   REAL(r64)     :: EnthalpyLastTimestep      = 0.d0 ! {J/kg}  DSU for steam?

   REAL(r64)     :: HumRat                    = 0.d0 ! {}

   REAL(r64)     :: HumRatMin                 = SensedNodeFlagValue ! {}

   REAL(r64)     :: HumRatMax                 = SensedNodeFlagValue ! {}

   REAL(r64)     :: HumRatSetPoint            = SensedNodeFlagValue ! {}

   REAL(r64)     :: TempSetPointHi            = SensedNodeFlagValue ! {C}

   REAL(r64)     :: TempSetPointLo            = SensedNodeFlagValue ! {C}

   REAL(r64)     :: Height                    = -1.d0 !  {m}

   !  Following are for Outdoor Air Nodes “read only”

   REAL(r64)     :: OutAirDryBulb             = 0.d0 ! {C}

   LOGICAL       :: EMSOverrideOutAirDryBulb  = .FALSE. ! if true, the EMS is calling to override outdoor air node drybulb setting

   REAL(r64)     :: EMSValueForOutAirDryBulb  = 0.d0 ! value EMS is directing to use for outdoor air node’s drybulb {C}

   REAL(r64)     :: OutAirWetBulb             = 0.d0 ! {C}

   LOGICAL       :: EMSOverrideOutAirWetBulb  = .FALSE. ! if true, the EMS is calling to override outdoor air node wetbulb setting

   REAL(r64)     :: EMSValueForOutAirWetBulb  = 0.d0 ! value EMS is directing to use for outdoor air node’s wetbulb {C}

   ! Contaminant

   REAL(r64)     :: CO2                       = 0.d0 ! {ppm}

   REAL(r64)     :: CO2SetPoint               = 0.d0 ! {ppm}

 END TYPE NodeData

TYPE MoreNodeData

   REAL(r64)     :: RelHumidity               = 0.d0 ! {%}

   REAL(r64)     :: ReportEnthalpy            = 0.d0 ! specific enthalpy calculated at the HVAC timestep [J/kg]

   REAL(r64)     :: VolFlowRateStdRho         = 0.d0 ! volume flow rate at standard density [m3/s]

   REAL(r64)     :: VolFlowRateCrntRho        = 0.d0 ! volume flow rate at current density, only used for air nodes [m3/s]

   REAL(r64)     :: WetbulbTemp               = 0.d0 ! wetbulb temperature [C]

   REAL(r64)     :: AirDensity                = 0.d0 ! reported air density at standard density [kg/m3]

 END TYPE MoreNodeData

TYPE (NodeData), ALLOCATABLE, DIMENSION(:) :: Node !dim to num nodes in SimHVAC

 TYPE (NodeData) :: DefaultNodeValues =   &

     NodeData(0,          & ! FluidType

              0,          & ! FluidIndex

              0.0D0,        & ! Temp {C}

              0.0D0,        & ! TempMin {C}

              0.0D0,        & ! TempMax {C}

     SensedNodeFlagValue,   & ! TempSetPoint {C}

              0.0D0,        & ! TempLastTimeStep {C}

              0.0D0,        & ! MassFlowRateRequest {kg/s}

              0.0D0,        & ! MassFlowRate {kg/s}

              0.0D0,        & ! MassFlowRateMin {kg/s}

              0.0D0,        & ! MassFlowRateMax {kg/s}

              0.0D0,        & ! MassFlowRateMinAvail {kg/s}

              0.0D0,        & ! MassFlowRateMaxAvail {kg/s}

              0.0D0,        & ! MassFlowRateSetPoint {kg/s}

              0.0D0,        & ! Quality {0.0-1.0 vapor fraction/percent}

              0.0D0,        & ! Press {Pa}   REAL(r64)     ::

              0.0D0,        & ! Enthalpy {J/kg}

              0.0D0,        & ! EnthalpyLastTimeStep {J/kg}

              0.0D0,        & ! HumRat {}

     SensedNodeFlagValue,   & ! HumRatMin {}

     SensedNodeFlagValue,   & ! HumRatMax {}

     SensedNodeFlagValue,   & ! HumRatSetPoint {}

     SensedNodeFlagValue,   & ! TempSetPointHi {C}

     SensedNodeFlagValue,   & ! TempSetPointLo {C}

             -1.0D0,        & ! Height {m}

              0.0D0,        & ! OutAirDryBulb {C}

              .FALSE.,      & ! EMSOverrideOutAirDryBulb

              0.0D0,        & ! EMSValueForOutAirDryBulb {C}

              0.0D0,          & ! OutAirWetBulb {C}

              .FALSE.,      & ! EMSOverrideOutAirWetBulb

              0.0D0,        & ! EMSValueForOutAirWetBulb {C}

              0.0D0,        & ! CO2 {ppm}

              0.0D0)          ! CO2 setpoint {ppm}

 TYPE (MoreNodeData), ALLOCATABLE, DIMENSION(:) :: MoreNodeInfo

In our example module NewHVACComponent, the subroutine InitNewHVACComponent is responsible for obtaining the input data from the inlet node(s) and putting it into the component data structure for use in CalcNewHVACComponent. Then UpdateNewHVACComponent takes the calculated data and moves it to the outlet nodes for use by other components. EnergyPlus component models are assumed to be direct models: inlets are input to the calculation and outlets are output from the calculations.