TYPE SurfaceData
CHARACTER(len=MaxNameLength) :: Name = ' ' ! User supplied name of the surface (must be unique)
INTEGER :: Construction = 0 ! Pointer to the construction in the Construct derived type
LOGICAL :: EMSConstructionOverrideON = .FALSE. ! if true, EMS is calling to override the construction value
INTEGER :: EMSConstructionOverrideValue = 0 ! pointer value to use for Construction when overridden
INTEGER :: ConstructionStoredInputValue = 0 ! holds the original value for Construction per surface input
INTEGER :: Class =0
! Geometry related parameters
INTEGER :: Shape = 0 ! Surface shape (Triangle=1,Quadrilateral=2,Rectangle=3,
! Rectangular Window/Door=4,Rectangular Overhang=5,
! Rectangular Left Fin=6,Rectangular Right Fin=7,
! Triangular Window=8)
INTEGER :: Sides = 0 ! Number of side/vertices for this surface (based on Shape)
REAL(r64) :: Area = 0.0d0 ! Surface area of the surface (less any subsurfaces) {m2}
REAL(r64) :: GrossArea = 0.0d0 ! Surface area of the surface (including subsurfaces) {m2}
REAL(r64) :: NetAreaShadowCalc = 0.0d0 ! Area of a wall/floor/ceiling less subsurfaces assuming
! all windows, if present, have unity multiplier.
! Wall/floor/ceiling/roof areas that include windows include
! frame (unity) areas.
! Areas of Windows including divider (unity) area.
! These areas are used in shadowing / sunlit area calculations.
REAL(r64) :: Perimeter = 0.0d0 ! Perimeter length of the surface {m}
REAL(r64) :: Azimuth = 0.0d0 ! Direction the surface outward normal faces (degrees) or FACING
REAL(r64) :: Height = 0.0d0 ! Height of the surface (m)
REAL(r64) :: Reveal = 0.0d0 ! Depth of the window reveal (m) if this surface is a window
REAL(r64) :: Tilt = 0.0d0 ! Angle (deg) between the ground outward normal and the surface outward normal
REAL(r64) :: Width = 0.0d0 ! Width of the surface (m)
! Boundary conditions and interconnections
LOGICAL :: HeatTransSurf = .false. ! True if surface is a heat transfer surface,
! False if a (detached) shadowing (sub)surface
INTEGER :: HeatTransferAlgorithm = HeatTransferModel_NotSet ! used for surface-specific heat transfer algorithm.
CHARACTER(len=MaxNameLength) :: BaseSurfName = ' ' ! Name of BaseSurf
INTEGER :: BaseSurf = 0 ! "Base surface" for this surface. Applies mainly to subsurfaces
! in which case it points back to the base surface number.
! Equals 0 for detached shading.
! BaseSurf equals surface number for all other surfaces.
INTEGER :: NumSubSurfaces = 0 ! Number of subsurfaces this surface has (doors/windows)
CHARACTER(len=MaxNameLength) :: ZoneName = ' ' ! User supplied name of the Zone
INTEGER :: Zone = 0 ! Interior environment or zone the surface is a part of
! Note that though attached shading surfaces are part of a zone, this
! value is 0 there to facilitate using them as detached surfaces (more
! accurate shading.
CHARACTER(len=MaxNameLength) :: ExtBoundCondName = ' ' ! Name for the Outside Environment Object
INTEGER :: ExtBoundCond = 0 ! For an "interzone" surface, this is the adjacent surface number.
! for an internal/adiabatic surface this is the current surface number.
! Otherwise, 0=external environment, -1=ground,
! -2=other side coefficients (OSC--won't always use CTFs)
! -3=other side conditions model
! During input, interim values of UnreconciledZoneSurface ("Surface") and
! UnenteredAdjacentZoneSurface ("Zone") are used until reconciled.
INTEGER :: LowTempErrCount = 0
INTEGER :: HighTempErrCount = 0
LOGICAL :: ExtSolar = .false. ! True if the "outside" of the surface is exposed to solar
LOGICAL :: ExtWind = .false. ! True if the "outside" of the surface is exposed to wind
! Heat transfer coefficients
INTEGER :: IntConvCoeff = 0 ! Interior Convection Coefficient pointer (different data structure)
! when being overridden
LOGICAL :: EMSOverrideIntConvCoef = .FALSE. ! if true, EMS is calling to override interior convection coefficeint
REAL(r64) :: EMSValueForIntConvCoef = 0.0D0 ! Value EMS is calling to use for interior convection coefficient [W/m2-K]
INTEGER :: ExtConvCoeff = 0 ! Exterior Convection Coefficient pointer (different data structure)
! when being overridden
LOGICAL :: EMSOverrideExtConvCoef = .FALSE. ! if true, EMS is calling to override exterior convection coefficeint
REAL(r64) :: EMSValueForExtConvCoef = 0.0D0 ! Value EMS is calling to use for exterior convection coefficient [W/m2-K]
REAL(r64) :: ViewFactorGround = 0.0d0 ! View factor to the ground from the exterior of the surface
! for diffuse solar radiation
REAL(r64) :: ViewFactorSky = 0.0d0 ! View factor to the sky from the exterior of the surface
! for diffuse solar radiation
REAL(r64) :: ViewFactorGroundIR = 0.0d0 ! View factor to the ground and shadowing surfaces from the
! exterior of the surface for IR radiation
REAL(r64) :: ViewFactorSkyIR = 0.0d0 ! View factor to the sky from the exterior of the surface for IR radiation
! Special/optional other side coefficients (OSC)
INTEGER :: OSCPtr = 0 ! Pointer to OSC data structure
INTEGER :: OSCMPtr = 0 ! "Pointer" to OSCM data structure (other side conditions from a model)
! Optional parameters specific to shadowing surfaces and subsurfaces (detached shading, overhangs, wings, etc.)
INTEGER :: SchedShadowSurfIndex = 0 ! Schedule for a shadowing (sub)surface
LOGICAL :: ShadowSurfSchedVaries = .false. ! true if the scheduling (transmittance) on a shading surface varies.
LOGICAL :: ShadowingSurf = .false. ! True if a surface is a shadowing surface
LOGICAL :: IsTransparent = .false. ! True if the schedule values are always 1.0 (or the minimum is 1.0)
REAL(r64) :: SchedMinValue = 0.0d0 ! Schedule minimum value.
! Optional parameters specific to solar reflection from surfaces
REAL(r64) :: ShadowSurfDiffuseSolRefl = 0.0d0 ! Diffuse solar reflectance of opaque portion
REAL(r64) :: ShadowSurfDiffuseVisRefl = 0.0d0 ! Diffuse visible reflectance of opaque portion
REAL(r64) :: ShadowSurfGlazingFrac = 0.0d0 ! Glazing fraction
INTEGER :: ShadowSurfGlazingConstruct = 0 ! Glazing construction number
LOGICAL :: ShadowSurfPossibleObstruction = .TRUE. ! True if a surface can be an exterior obstruction
LOGICAL :: ShadowSurfPossibleReflector = .FALSE. ! True if a surface can be an exterior reflector, not used!
INTEGER :: ShadowSurfRecSurfNum = 0 ! Receiving surface number
! Optional movable insulation parameters
INTEGER :: MaterialMovInsulExt = 0 ! Pointer to the material used for exterior movable insulation
INTEGER :: MaterialMovInsulInt = 0 ! Pointer to the material used for interior movable insulation
INTEGER :: SchedMovInsulExt = 0 ! Schedule for exterior movable insulation
INTEGER :: SchedMovInsulInt = 0 ! Schedule for interior movable insulation
! Vertices
TYPE (vector), ALLOCATABLE, DIMENSION(:) :: Vertex ! Surface Vertices are represented by Number of Sides and Vector (type)
TYPE (vector) :: Centroid =vector(0.0d0,0.0d0,0.0d0) ! computed centroid (also known as center of mass or surface balance point)
type (vector) :: lcsx =vector(0.0d0,0.0d0,0.0d0)
type (vector) :: lcsy =vector(0.0d0,0.0d0,0.0d0)
type (vector) :: lcsz =vector(0.0d0,0.0d0,0.0d0)
type (vector) :: NewellAreaVector =vector(0.0d0,0.0d0,0.0d0)
type (vector) :: NewellSurfaceNormalVector =vector(0.0d0,0.0d0,0.0d0) ! same as OutNormVec in vector notation
REAL(r64), DIMENSION(3) :: OutNormVec = 0.0d0 ! Direction cosines (outward normal vector) for surface
REAL(r64) :: SinAzim = 0.0d0 ! Sine of surface azimuth angle
REAL(r64) :: CosAzim = 0.0d0 ! Cosine of surface azimuth angle
REAL(r64) :: SinTilt = 0.0d0 ! Sine of surface tilt angle
REAL(r64) :: CosTilt = 0.0d0 ! Cosine of surface tilt angle
LOGICAL :: IsConvex = .true. ! true if the surface is convex.
LOGICAL :: IsDegenerate = .false. ! true if the surface is degenerate.
! Window Parameters (when surface is Window)
INTEGER :: WindowShadingControlPtr = 0 ! Pointer to shading control (windows only)
INTEGER :: ShadedConstruction = 0 ! Shaded construction (windows only)
INTEGER :: StormWinConstruction = 0 ! Construction with storm window (windows only)
INTEGER :: StormWinShadedConstruction = 0 ! Shaded construction with storm window (windows only)
INTEGER :: FrameDivider = 0 ! Pointer to frame and divider information (windows only)
REAL(r64) :: Multiplier = 1.0d0 ! Multiplies glazed area, frame area and divider area (windows only)
! Daylighting pointers
INTEGER :: Shelf = 0 ! Pointer to daylighting shelf
INTEGER :: TAirRef = ZoneMeanAirTemp ! Flag for reference air temperature
! ZoneMeanAirTemp = 1 = mean air temperature or MAT => for mixing air model with all convection algos
! except inlet-dependent algo
! AdjacentAirTemp = 2 = adjacent air temperature or TempEffBulkAir => for nodal or zonal air model
! with all convection algos except inlet-dependent algo
! ZoneSupplyAirTemp = 3 = supply air temperature => for mixing air model with inlet-dependent algo
! Default value is 'ZoneMeanAirTemp' and value for each particular surface will be changed only if
! the inlet-dependent convection algorithm and/or nodal and zonal air models are used.
REAL(r64) :: OutDryBulbTemp = 0.0d0 ! Surface outside dry bulb air temperature, for surface heat balance (C)
LOGICAL :: OutDryBulbTempEMSOverrideOn = .FALSE. ! if true, EMS is calling to override the surface's outdoor air temp
REAL(r64) :: OutDryBulbTempEMSOverrideValue = 0.d0 ! value to use for EMS override of outdoor air dryblub temp (C)
REAL(r64) :: OutWetBulbTemp = 0.0d0 ! Surface outside wet bulb air temperature, for surface heat balance (C)
LOGICAL :: OutWetBulbTempEMSOverrideOn = .FALSE. ! if true, EMS is calling to override the surface's outdoor wetbulb
REAL(r64) :: OutWetBulbTempEMSOverrideValue = 0.d0 ! value to use for EMS override of outdoor air wetblub temp (C)
REAL(r64) :: WindSpeed = 0.0d0 ! Surface outside wind speed, for surface heat balance (m/s)
LOGICAL :: WindSpeedEMSOverrideOn = .FALSE. !
REAL(r64) :: WindSpeedEMSOverrideValue = 0.d0 !
CHARACTER(len=15) :: UNomWOFilm = '-' ! Nominal U Value without films stored as string
CHARACTER(len=15) :: UNomFilm = '-' ! Nominal U Value with films stored as string
LOGICAL :: ExtEcoRoof = .false. ! True if the top outside construction material is of type Eco Roof
LOGICAL :: ExtCavityPresent = .false. ! true if there is an exterior vented cavity on surface
INTEGER :: ExtCavNum = 0 ! index for this surface in ExtVentedCavity structure (if any)
LOGICAL :: IsPV = .false. ! true if this is a photovoltaic surface (dxf output)
LOGICAL :: IsICS = .false. ! true if this is an ICS collector
INTEGER :: ICSPtr = 0 ! Index to ICS collector
! TH added 3/26/2010
LOGICAL :: MirroredSurf = .false. ! Ture if it is a mirrored surface
! additional attributes for convection correlations
INTEGER :: IntConvClassification = 0 ! current classification for inside face air flow regime and surface orientation
INTEGER :: IntConvHcModelEq = 0 ! current convection model for inside face
INTEGER :: IntConvHcUserCurveIndex = 0 ! current index to user convection model if used
INTEGER :: OutConvClassification = 0 ! current classification for outside face wind regime and convection orientation
INTEGER :: OutConvHfModelEq = 0 ! current convection model for forced convection at outside face
INTEGER :: OutConvHfUserCurveIndex = 0 ! current index to user forced convection model if used
INTEGER :: OutConvHnModelEq = 0 ! current Convection model for natural convection at outside face
INTEGER :: OutConvHnUserCurveIndex = 0 ! current index to user natural convection model if used
REAL(r64) :: OutConvFaceArea = 0.0d0 ! area of larger building envelope facade that surface is a part of
REAL(r64) :: OutConvFacePerimeter = 0.0d0 ! perimeter of larger building envelope facade that surface is a part of
REAL(r64) :: OutConvFaceHeight = 0.0d0 ! height of larger building envelope facade that surface is a part of
REAL(r64) :: IntConvZoneWallHeight = 0.0d0 ! [m] height of larger inside building wall element that surface is a part of
REAL(r64) :: IntConvZonePerimLength = 0.0d0 ! [m] length of perimeter zone's exterior wall
REAL(r64) :: IntConvZoneHorizHydrDiam = 0.0d0 ! [m] hydraulic diameter, usually 4 times the zone floor area div by perimeter
REAL(r64) :: IntConvWindowWallRatio = 0.0d0 ! [-] area of windows over area of exterior wall for zone
INTEGER :: IntConvWindowLocation = InConvWinLoc_NotSet ! relative location of window in zone for interior Hc models
LOGICAL :: IntConvSurfGetsRadiantHeat= .FALSE.
LOGICAL :: IntConvSurfHasActiveInIt = .FALSE.
LOGICAL :: PartOfVentSlabOrRadiantSurface = .false. ! surface cannot be part of both a radiant surface & ventilated slab group
! LG added 1/6/12
REAL(r64) :: GenericContam = 0.d0 ! [ppm] Surface generic contaminant as a storage term for
! the surface diffusion model
END TYPE SurfaceData