TYPE OAControllerProps ! Derived type for Outside Air Controller data
CHARACTER(len=MaxNameLength) :: Name = ' '
CHARACTER(len=MaxNameLength) :: ControllerType = ' '
INTEGER :: ControllerType_Num = 0 ! Parameter equivalent of controller type
INTEGER :: OACtrlIndex = 0
INTEGER :: Lockout = 0 ! 0=NoLockoutPossible; 1=LockoutWithHeatingPossible;
! 2=LockoutWithCompressorPossible;
LOGICAL :: FixedMin = .true. ! Fixed Minimum or Proportional Minimum
REAL(r64) :: TempLim = 0.0d0 ! Temperature Limit
REAL(r64) :: TempLowLim = 0.0d0 ! Temperature Lower Limit
REAL(r64) :: EnthLim = 0.0d0 ! Enthalpy Limit
REAL(r64) :: DPTempLim = 0.0d0 ! Dew Point Temperature Limit
INTEGER :: EnthalpyCurvePtr = 0 ! Electronic Enthalpy Curve Index (max HumRat = f[OAT])
REAL(r64) :: MinOA = 0.0d0 ! Minimum outside air flow (m3/sec)
REAL(r64) :: MaxOA = 0.0d0 ! Maximum outside air flow (m3/sec)
INTEGER :: Econo = 0 ! 0 = NoEconomizer, 1 = FixedDryBulb, 2 = FixedEnthalpy, 3=DifferentialDryBulb,
! 4=DifferentialEnthalpy, 5=FixedDewPointAndDryBulb, 6 = ElectronicEnthalpy,
! 7 =DifferentialDryBulbAndEnthalpy
Logical :: EconBypass = .FALSE. ! ModulateFlow =FALSE , MinimumFlowWithBypass =TRUE
INTEGER :: MixNode = 0 ! Controlled node (mixed air node)
INTEGER :: OANode = 0 ! Actuated node (outside air node)
INTEGER :: InletNode = 0 ! Inlet Air Node for into Mixer (BTG Nov 2004)
INTEGER :: RelNode = 0 ! Relief Air Node Number
INTEGER :: RetNode = 0 ! Return Air Node Number
CHARACTER(len=MaxNameLength) :: MinOASch = ' ' ! Name of the minimum outside air schedule
INTEGER :: MinOASchPtr = 0 ! Index to the minimum outside air schedule
REAL(r64) :: RelMassFlow = 0.0d0
REAL(r64) :: OAMassFlow = 0.0d0
REAL(r64) :: ExhMassFlow = 0.0d0
REAL(r64) :: MixMassFlow = 0.0d0
REAL(r64) :: InletTemp = 0.0d0
REAL(r64) :: InletEnth = 0.0d0
REAL(r64) :: InletPress = 0.0d0
REAL(r64) :: InletHumRat = 0.0d0
REAL(r64) :: OATemp = 0.0d0
REAL(r64) :: OAEnth = 0.0d0
REAL(r64) :: OAPress = 0.0d0
REAL(r64) :: OAHumRat = 0.0d0
REAL(r64) :: RetTemp = 0.0d0
REAL(r64) :: RetEnth = 0.0d0
REAL(r64) :: MixSetTemp = 0.0d0
REAL(r64) :: MinOAMassFlowRate = 0.0d0 ! Minimum outside air flow (kg/s)
REAL(r64) :: MaxOAMassFlowRate = 0.0d0 ! Maximum outside air flow (kg/s)
INTEGER :: ZoneEquipZoneNum = 0
CHARACTER(len=MaxNameLength) :: VentilationMechanicalName = ' ' ! Name of ventilation:mechanical object used for DCV
INTEGER :: VentMechObjectNum = 0 ! Index to VENTILATION:MECHANICAL object for this controller
INTEGER :: HumidistatZoneNum = 0 ! zone number where humidistat is located
INTEGER :: NodeNumofHumidistatZone = 0 ! node number of zone where humidistat is located
REAL(r64) :: HighRHOAFlowRatio = 1.0d0 ! Modify ratio with respect to maximum outdoor air flow rate (high RH)
LOGICAL :: ModifyDuringHighOAMoisture = .FALSE. ! flag to Modify outdoor air flow, TRUE when modify any time
! FALSE when modify only when indoor air humrat is less than outdoor HR
INTEGER :: EconomizerOASchedPtr = 0 ! schedule to modify outdoor air flow
CHARACTER(len=MaxNameLength) :: MinOAflowSch = ' ' ! Name of the Minimum fraction of Design/Mixed Mass of air
CHARACTER(len=MaxNameLength) :: MaxOAflowSch = ' ' ! Name of the Maximum fraction of Design/Mixed Mass of air
INTEGER :: MinOAflowSchPtr = 0 ! Index to the minimum outside air schedule
INTEGER :: MaxOAflowSchPtr = 0 ! Index to the minimum outside air schedule
! Economizer Status, which is currently following the EconomizerOperationFlag, might be something like "Economizer status
! indicates when the conditions are favorable for the economizer to operate (i.e., none of the control limits have been exceeded).
! While this status signal indicates favorable conditions for economizer operation, it does not guarantee that the air-side
! economizer has increased outdoor air flow above the minimum level since the actual outdoor air flow rate is also governed
! by other controls (e.g., mixed air setpoint tempeature, time of day economizer control, etc.).
INTEGER :: EconomizerStatus = 0 ! Air Economizer status (1 = on, 0 = off or economizer not exists)
INTEGER :: HeatRecoveryBypassStatus = 0 ! OA Sys Heat Recovery Bypass status (1 = on, 0 = off or economizer not exists)
INTEGER :: HRHeatingCoilActive = 0 ! OA Sys Heat Recovery Heating Coil Was Active status (1 = on, 0 = off)
REAL(r64) :: MixedAirTempAtMinOAFlow = 0.d0 ! calculated mixed air temp when using special HX bypass control
INTEGER :: HighHumCtrlStatus = 0 ! High Humidity Control status (1 = on, 0 = off or high hum ctrl not used)
REAL(r64) :: OAFractionRpt = 0.0d0 ! Actual outdoor air fraction for reporting (based on mixed air flow rate),
! 0 to 1 (normally)
REAL(r64) :: MinOAFracLimit = 0.0d0 ! Minimum OA fraction limit
LOGICAL :: EMSOverrideOARate = .FALSE. ! if true, EMS is calling to override OA rate
REAL(r64) :: EMSOARateValue = 0.0D0 ! Value EMS is directing to use. [kg/s]
INTEGER :: HeatRecoveryBypassControlType = BypassWhenWithinEconomizerLimits ! User input selects type of heat recovery optimization
END TYPE OAControllerProps