Guide for Module Developers — EnergyPlus 9.0

<< Prev | Table of Contents | 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.