LCOV - code coverage report
Current view: top level - EnergyPlus - DataBSDFWindow.hh (source / functions) Coverage Total Hit
Test: lcov.output.filtered Lines: 100.0 % 12 12
Test Date: 2025-05-22 16:09:37 Functions: 100.0 % 5 5

            Line data    Source code
       1              : // EnergyPlus, Copyright (c) 1996-2025, The Board of Trustees of the University of Illinois,
       2              : // The Regents of the University of California, through Lawrence Berkeley National Laboratory
       3              : // (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
       4              : // National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
       5              : // contributors. All rights reserved.
       6              : //
       7              : // NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
       8              : // U.S. Government consequently retains certain rights. As such, the U.S. Government has been
       9              : // granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
      10              : // worldwide license in the Software to reproduce, distribute copies to the public, prepare
      11              : // derivative works, and perform publicly and display publicly, and to permit others to do so.
      12              : //
      13              : // Redistribution and use in source and binary forms, with or without modification, are permitted
      14              : // provided that the following conditions are met:
      15              : //
      16              : // (1) Redistributions of source code must retain the above copyright notice, this list of
      17              : //     conditions and the following disclaimer.
      18              : //
      19              : // (2) Redistributions in binary form must reproduce the above copyright notice, this list of
      20              : //     conditions and the following disclaimer in the documentation and/or other materials
      21              : //     provided with the distribution.
      22              : //
      23              : // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
      24              : //     the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
      25              : //     used to endorse or promote products derived from this software without specific prior
      26              : //     written permission.
      27              : //
      28              : // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
      29              : //     without changes from the version obtained under this License, or (ii) Licensee makes a
      30              : //     reference solely to the software portion of its product, Licensee must refer to the
      31              : //     software as "EnergyPlus version X" software, where "X" is the version number Licensee
      32              : //     obtained under this License and may not use a different name for the software. Except as
      33              : //     specifically required in this Section (4), Licensee shall not use in a company name, a
      34              : //     product name, in advertising, publicity, or other promotional activities any name, trade
      35              : //     name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
      36              : //     similar designation, without the U.S. Department of Energy's prior written consent.
      37              : //
      38              : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
      39              : // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
      40              : // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
      41              : // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      42              : // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
      43              : // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      44              : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
      45              : // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      46              : // POSSIBILITY OF SUCH DAMAGE.
      47              : 
      48              : #ifndef DataBSDFWindow_hh_INCLUDED
      49              : #define DataBSDFWindow_hh_INCLUDED
      50              : 
      51              : // ObjexxFCL Headers
      52              : #include <ObjexxFCL/Array1D.hh>
      53              : #include <ObjexxFCL/Array2D.hh>
      54              : #include <ObjexxFCL/Array3D.hh>
      55              : #include <ObjexxFCL/Vector3.fwd.hh>
      56              : 
      57              : using ObjexxFCL::Vector3;
      58              : 
      59              : // EnergyPlus Headers
      60              : #include <EnergyPlus/Data/BaseData.hh>
      61              : #include <EnergyPlus/DataVectorTypes.hh>
      62              : #include <EnergyPlus/EPVector.hh>
      63              : #include <EnergyPlus/EnergyPlus.hh>
      64              : 
      65              : namespace EnergyPlus {
      66              : 
      67              : namespace DataBSDFWindow {
      68              : 
      69              :     // Using/Aliasing
      70              :     using DataVectorTypes::Vector;
      71              : 
      72              :     enum class Basis
      73              :     {
      74              :         Invalid = -1,
      75              :         WINDOW,
      76              :         Custom,
      77              :         Num
      78              :     };
      79              : 
      80              :     static constexpr std::array<std::string_view, (int)Basis::Num> basisNamesUC = {"LBNLWINDOW", "USERDEFINED"};
      81              : 
      82              :     enum class BasisSymmetry
      83              :     {
      84              :         Invalid = -1,
      85              :         Axisymmetric,
      86              :         None,
      87              :         Num
      88              :     };
      89              : 
      90              :     static constexpr std::array<std::string_view, (int)BasisSymmetry::Num> basisSymmetryNamesUC = {"AXISSYMMETRIC", "NONE"};
      91              : 
      92              :     // Thermal calculations for complex fenestration can be used to generate reports for standard cases
      93              :     // noCondition is used when performing timestep calculations
      94              :     // 'Summer' will override certain parameters so that produced results are matching standard summer WINDOW  = software results
      95              :     // 'Winter' will override certain parameters so that produced results are matching standard winter WINDOW  = software results
      96              :     enum class Condition
      97              :     {
      98              :         Invalid = -1,
      99              :         Summer,
     100              :         Winter,
     101              :         Num
     102              :     };
     103              : 
     104              :     struct BasisElemDescr
     105              :     {
     106              :         // Members
     107              :         // The following are in the local coordinate system corresponding to the matrix
     108              :         Real64 Theta = 0.0;     // Centroid Theta value
     109              :         Real64 Phi = 0.0;       // Centroid Phi value
     110              :         Real64 dTheta = 0.0;    // Element width, Theta
     111              :         Real64 dPhi = 0.0;      // Element width, Phi
     112              :         Real64 UpprTheta = 0.0; // Patch upper edge, Theta
     113              :         Real64 LwrTheta = 0.0;  // Patch lower edge, Theta
     114              :         Real64 UpprPhi = 0.0;   // Patch upper edge, Phi
     115              :         Real64 LwrPhi = 0.0;    // Patch lower edge, Phi
     116              :         // Note: The dimension index of the BasisElementDescription object corresponds to
     117              :         // the position (index) of this element in the row or column of property matrix
     118              :         // Note:  the following are intended to be used for interpolating directions among basis elements
     119              :         int INNbInL = 0;  // Index of inward (lower Theta) neighbor, lower phi
     120              :         int INNbInH = 0;  // Index of inward (lower Theta) neighbor, higher phi
     121              :         int INNbOutL = 0; // Index of outward (higher Theta) neighbor, lower phi
     122              :         int INNbOutH = 0; // Index of outward (higher Theta) neighbor, higher phi
     123              :         int INNbLft = 0;  // Index of leftward (higher Phi) neighbor (same Theta)
     124              :         int INNbRt = 0;   // Index of rightward (lower Phi) neighbor (same Theta)
     125              :         // These indices are in the BasisElement array, which matches the row/column of the matrix
     126              :     };
     127              : 
     128              :     struct BSDFDaylghtPosition
     129              :     {
     130              :         // Members
     131              :         Real64 Altitude; // Altitude range is from -pi/2 to pi/2. Horizontal vector have altitude of zero
     132              :         Real64 Azimuth;  // Azimuth is measured from positive x counter clockwise. Its range is from -pi to pi
     133              : 
     134              :         // Default Constructor
     135          580 :         BSDFDaylghtPosition() : Altitude(0.0), Azimuth(0.0)
     136              :         {
     137          580 :         }
     138              : 
     139              :         // Member Constructor
     140            2 :         BSDFDaylghtPosition(Real64 const Altitude, // Altitude range is from -pi/2 to pi/2. Horizontal vector have altitude of zero
     141              :                             Real64 const Azimuth   // Azimuth is measured from positive x counter clockwise. Its range is from -pi to pi
     142              :                             )
     143            2 :             : Altitude(Altitude), Azimuth(Azimuth)
     144              :         {
     145            2 :         }
     146              :     };
     147              : 
     148              :     struct BasisStruct
     149              :     {
     150              :         // Members
     151              :         Basis BasisType = Basis::Invalid;                         // BasisType_WINDOW or BasisType_Custom  (see HeatBalanceManager)
     152              :         BasisSymmetry BasisSymmetryType = BasisSymmetry::Invalid; // BasisSymmetry_Axisymmetric or BasisSymmetry_None  (see HeatBalanceManager)
     153              :         int BasisMatIndex = 0;                                    // pointer to matrix for basis
     154              :         int NBasis = 0;                                           // No. elements in basis
     155              :         Array1D<Real64> Lamda;                                    // Vector of diagonal Lamda matrix elems for grid
     156              :         Array1D<Real64> SolAng;                                   // Vector of basis element solid angles for grid
     157              :         int NThetas = 0;                                          // No. Theta values in basis
     158              :         Array1D<Real64> Thetas;                                   // List of basis theta values
     159              :         Array1D_int NPhis;                                        // No. basis phi values for each theta
     160              :         Array2D<Real64> Phis;                                     // List of basis phi values for each theta
     161              :         Array2D_int BasisIndex;                                   // Index of basis element for theta, phi
     162              :         Array1D<BasisElemDescr> Grid;                             // actual basis (to be constructed from matrix)
     163              :     };
     164              : 
     165              :     struct BSDFGeomDescr
     166              :     {
     167              :         // Members
     168              :         BasisStruct Inc;                   // Basis for incident hemisphere
     169              :         Array1D<Vector> sInc;              // Central direction vectors of incident grid (World coords)
     170              :         Array1D<BSDFDaylghtPosition> pInc; // azimuth and altitude of incidence vectors
     171              :         Array1D<Real64> CosInc;            // cosine of incident angle
     172              :         Array1D<Real64> DAInc;             // cosine of incident angle times delta theta time delta phi (used in daylighting calculations)
     173              :         int NSkyUnobs = 0;                 // Number of Inc basis rays from unobstructed sky
     174              :         int NGndUnobs = 0;                 // Number of Inc basis rays from unobstructed ground
     175              :         int NSky = 0;                      // Number of Inc basis rays from sky
     176              :         int NGnd = 0;                      // Number of Inc basis rays from gnd
     177              :         int NReflSurf = 0;                 // Number of Inc basis rays from (potentially reflecting) surfaces
     178              :         Array1D_int SkyIndex;              // list of sky basis indices
     179              :         Array1D_int GndIndex;              // list of gnd basis indices
     180              :         Array1D<Vector> GndPt;             // gnd intersection pt of gnd basis ray (z=0)
     181              :         Array1D_int RefSurfIndex;          // list of basis indices of rays striking exterior surf
     182              :         Array1D_int RefRayNHits;           // for a given ray striking a surface, no. of surfaces pierced
     183              :         Array2D_int HitSurfNo;             // for a given ray striking surface, list of intersected surf nos
     184              :         Array2D<Real64> HitSurfDSq;        // for a given ray striking surface, list of distance^2
     185              :         //  from window
     186              :         Array2D<Vector> HitPt;       // for a given ray striking surface, list of hit pts
     187              :         Array1D<Real64> SolSkyWt;    // Sky intensity weights
     188              :         Array1D<Real64> SolSkyGndWt; // Wts for sky rad refl from grn
     189              :         Array3D<Real64> SolBmGndWt;  // Wts for beam rad refl from gnd (hour, timestep)
     190              :         Array2D_int SolBmIndex;      // Basis index corresponding to beam dir (hour, timestep)
     191              :         // Note this is zero if sun is not in incident hemisphere
     192              :         // otherwise in range 1..NBasis
     193              :         Array2D<Real64> ThetaBm; // Theta angle corresponging to beam dir (hour, timestep) (rad)
     194              :         Array2D<Real64> PhiBm;   // Theta angle corresponging to beam dir (hour, timestep) (rad)
     195              :         BasisStruct Trn;
     196              :         Array1D<Vector> sTrn;              // Central direction vectors of Outgoing grid (World coords)
     197              :         Array1D<BSDFDaylghtPosition> pTrn; // azimuth and altitude of incidence vectors
     198              :         Array1D_int NSurfInt;              // No. of basis rays intersecting back surface (dim from
     199              :         // NBkSurf in BSDF State Descr)
     200              :         Array2D_int SurfInt;    // Basis index (IBkSurf, j) of the jth ray intersecting IBkSurf
     201              :         Array2D<Real64> SjdotN; // dot product (IBksurf, j) of the jth ray direction with
     202              :         // the normal to the back surface
     203              :         Array2D<Real64> AOverlap; // Overlap areas for each outgoing
     204              :         // direction (Trn) (no of outgoing dir, NBKSurf)
     205              :         Array2D<Real64>
     206              :             ARhoVisOverlap; // Overlap areas multiplied with surface reflectance for each outgoing direction (Trn) (no of outgoing dir, NBKSurf)
     207              :         Array1D<Real64> AveRhoVisOverlap; // Average visible reflectance from overlap surface which originates from one outgoing direction
     208              :         bool InitState = true;            // Flag for marking that state needs to be initialized
     209              :     };
     210              : 
     211              :     struct BSDFRefPoints
     212              :     {
     213              :         // Members
     214              :         Array1D_int NSky;                   // number of sky elements for each window element (# window el)
     215              :         Array1D_int NGnd;                   // number of ground elements for each window element (# window el)
     216              :         Array1D_int NReflSurf;              // number of Inc basis rays from reflecting surfaces (# window el)
     217              :         Array2D_int SkyIndex;               // list of sky basis indices (# window el, NSky)
     218              :         Array2D_int GndIndex;               // list of gnd basis indices (# window el, NGnd)
     219              :         Array2D<Vector> GndPt;              // gnd intersection pt of gnd basis ray (z=0) (# window el, NGnd)
     220              :         Array2D<Real64> GndObstrMultiplier; // ground obstruction multiplier used in reflection calculatations (# window el, NGnd)
     221              :         Array2D_int RefSurfIndex;           // list of basis indices of rays striking exterior surf (# window el, NReflSurf)
     222              :         Array2D_int RefRayNHits;            // for a given ray striking a surface, no. of surfaces pierced (# window el, NReflSurf)
     223              :         Array2D<Real64> TransOutSurf; // total transmittance of exterior obstructions for given incoming basis direction. (# window el, NReflSurf)
     224              :         Array3D_int HitSurfNo;        // for a given ray striking surface, list of intersected surf nos (# window el, NReflSurf, RefRayNHits)
     225              :         Array3D<Real64> HitSurfDSq;   // for a given ray striking surface, list of distance^2 from window (# window el, NReflSurf, RefRayNHits)
     226              :         Array3D<Vector> HitPt;        // for a given ray striking surface, list of hit pts (# window el, NReflSurf, RefRayNHits)
     227              :         Array1D_int RefPointIndex;    // outgoing direction which containts reference point (# window el)
     228              :         Array1D_bool RefPointIntersection; // determines if reference point is laying in light tube of bsdf outgoing direction (NTrnBasis)
     229              :         Array1D<Real64> RefPtIntPosFac; // position factors for intersections from reference point to window for each outgoing direction (NTrnBasis)
     230              :     };
     231              : 
     232              :     struct BSDFDaylghtGeomDescr
     233              :     {
     234              :         // Members
     235              :         Array2D<BSDFRefPoints>
     236              :             IlluminanceMap; // array to keep bsdf coefficients for different illuminance maps (# of illuminance maps, # of reference points)
     237              :         Array1D<BSDFRefPoints> RefPoint; // keep reference points daylight coefficients (# of reference points)
     238              :     };
     239              : 
     240              :     struct BSDFBkSurfDescr
     241              :     {
     242              :         // Members
     243              :         Array2D<Real64> WinDHBkRefl; // Back directional hemispherical reflectance (hour, timestep)
     244              :         // of this window for radiation from the back surface window
     245              :         Array3D<Real64> WinDirBkAbs; // back absorptance (hr, timestep, layer)
     246              :         //   for beam radiation absorbed in this
     247              :         //   window that comes from the back surface window
     248              :         // Performance May be faster in (layer,hr,timestep) order (loops are not consistent)
     249              :         // Note:  WinDHBkRefl and WinDirBkAbs are the same for all hours & timesteps if the back surface window is a
     250              :         // Complex Fenestration; they depend on the sun direction if the back surface window is a regular window
     251              :     };
     252              : 
     253              :     struct BSDFStateDescr
     254              :     {
     255              :         // Members
     256              :         int Konst = 0; // pointer to construction for this state; property matrices are in the construction
     257              :         // INTEGER      :: ThermConst =0  ! pointer to thermal construction for this state
     258              :         Real64 WinDiffTrans = 0.0; // Window hemispherical ave diff trans
     259              :         // for use in corrections requiring a diffuse trans
     260              :         // that have not been redone in detail for Compex Fen
     261              :         Real64 WinDiffVisTrans = 0.0;    // Window hemispherical ave diff trans for visible spectrum
     262              :         Array2D<Real64> WinDirHemiTrans; // Directional-hemispherical transmittance(hr,ts)
     263              :         Array2D<Real64> WinDirSpecTrans; // Directional specular transmittance(hr,ts)
     264              :         Real64 WinSkyTrans = 0.0;        // Transmittance for sky radiation (weighted average over sky viewed)
     265              :         Real64 WinSkyGndTrans = 0.0;     // Transmittance for sky radiation reflected from ground (average over
     266              :         // viewed part of ground)
     267              :         Array2D<Real64> WinBmGndTrans; // Transmittance (hour, timestep) for beam radiation reflected
     268              :         // from ground (average over unshaded ground viewed)
     269              :         Real64 WinBkHemRefl = 0.0;    // Window back hemispherical reflectance
     270              :         Real64 WinBkHemVisRefl = 0.0; // Window back hemispherical reflectance (visible spectrum)
     271              :         //(for reflection of interior diffuse radiation)
     272              :         int NLayers = 0;              // Number of absorbing layers in this window
     273              :         Array3D<Real64> WinBmFtAbs;   // Front directional absorptance (hour, timestep, layer)
     274              :         Array1D<Real64> WinSkyFtAbs;  // Front absorptance (layer) averaged over sky
     275              :         Array1D<Real64> WinSkyGndAbs; // Front absorptance (layer) averaged over ground
     276              :         // viewed part of gnd  (for ground-reflected sky radiation)
     277              :         Array3D<Real64> WinBmGndAbs; // Front absorptance (hour, timestep, layer) averaged
     278              :         // over unshaded ground viewed by beam
     279              :         Array1D<Real64> WinFtHemAbs;      // Front hemispherical absorptance (layers)
     280              :         Array1D<Real64> WinBkHemAbs;      // Back hemispherical absorptance (layers)
     281              :         Array3D<Real64> WinToSurfBmTrans; // Beam transmittance (hour, timestep, bk surf no)
     282              :         // to back surface
     283              :         // Note: the following will be evaluated only if the given back surface is a  window
     284              :         Array1D<BSDFBkSurfDescr> BkSurf; // Structure dimensioned (bk surface no)
     285              :         // Integrated beam values at front and back sides of window.  It is used in calculations of how much of the energy is
     286              :         // leaving throught the window to other zone or to the outside for certain beam direction
     287              :         Array1D<Real64> IntegratedFtAbs;   // Sum of all back layer absorptances (for each back direction)
     288              :         Array1D<Real64> IntegratedFtRefl;  // Integrated back layer reflectance (for each back direction)
     289              :         Array1D<Real64> IntegratedFtTrans; // Integrated back layer transmittance (for each back direction)
     290              :         Array1D<Real64> IntegratedBkAbs;   // Sum of all back layer absorptances (for each back direction)
     291              :         Array1D<Real64> IntegratedBkRefl;  // Integrated back layer reflectance (for each back direction)
     292              :         Array1D<Real64> IntegratedBkTrans; // Integrated back layer transmittance (for each back direction)
     293              :     };
     294              : 
     295              :     struct BSDFRefPointsGeomDescr
     296              :     {
     297              :         // Members
     298              :         Array1D<Real64> SolidAngle;    // Solid angle from daylighting reference point to each window element (# window el)
     299              :         Array1D<Vector> SolidAngleVec; // unit vector from reference point towards center of window element (# window el)
     300              :     };
     301              : 
     302              :     struct BSDFWindowGeomDescr
     303              :     {
     304              :         // Members
     305              :         // This contains all the geometry info that we don't want to carry around in SurfaceWindow
     306              :         // This is dimensioned like SurfaceWindow, but only surfaces that are complex windows
     307              :         // will have the structure below allocated
     308              :         int NumStates = 0;                         // Number of states for this window
     309              :         Array1D<BSDFGeomDescr> Geom;               // This is dimensioned with number of states
     310              :         Array1D<BSDFDaylghtGeomDescr> DaylghtGeom; // This is dimensioned with number of states
     311              :         bool DaylightingInitialized = false;       // used for one time initialization only
     312              :         int NBkSurf = 0;                           // Number of back (interior) surfaces viewed by this window
     313              :         Array1D<Vector> sWinSurf;                  // Unit vector from window center to center of IBkSurf
     314              :         Array1D<Real64> sdotN;                     // Dot product of unit vector s with back surface normal
     315              :         // here s is vector from center of window to center of back surface
     316              :         // Function of the following subsumed by using an index of 0 if no beam incidence
     317              :         Array2D<BSDFRefPointsGeomDescr>
     318              :             IlluminanceMap; // array to keep bsdf coefficients for different illuminance maps (# of illuminance maps, # of reference points)
     319              :         Array1D<BSDFRefPointsGeomDescr> RefPoint; // keep reference points daylight coefficients (# of reference points)
     320              :     };
     321              : 
     322              :     struct BSDFWindowDescript
     323              :     {
     324              :         // Members
     325              :         int NumStates = 0;               // Number of states for this window
     326              :         int CurrentState = 1;            // Current state of this window
     327              :         Array2D<Real64> ResultAllStates; // Array to hold calculated
     328              :         // quantities for all states.
     329              :         // Currently unallocated.  To be defined when control
     330              :         // scheme worked out.  This is an array (nvar, nstates)
     331              :         // to be set up for some number of variables, and calculated
     332              :         // for all states 1...NumStates each time step.  e.g., one variable could be
     333              :         // total beam transmitted solar, another total transmitted diffuse
     334              :         // The idea is that for a given time step when one has the
     335              :         // actual result (total cooling load or whatever), one needs to have
     336              :         // some information about all the states to decide where to
     337              :         // set the state variable for the next time step
     338              :         Array1D<BSDFStateDescr> State; // State description, dimensioned with number of states
     339              :     };
     340              : 
     341              :     struct BSDFLayerAbsorpStruct
     342              :     {
     343              :         // Members
     344              :         int MaterialIndex = 0;  // pointer to material layer
     345              :         int FrtAbsIndex = 0;    // pointer to matrix for Front directional absorptance vector
     346              :         int AbsNcols = 0;       // Number of elements (columns) in each of the absorption (row) vectors
     347              :         Array2D<Real64> FrtAbs; // Front directional absorptance vector
     348              :         int BkAbsIndex = 0;     // pointer to matrix for Back directional absorptance vector
     349              :         Array2D<Real64> BkAbs;  // Back directional absorptance vector
     350              :     };
     351              : 
     352              :     struct BSDFWindowInputStruct
     353              :     {
     354              :         // Members
     355              :         // nested data for Construction
     356              :         Basis BasisType = Basis::Invalid;
     357              :         BasisSymmetry BasisSymmetryType = BasisSymmetry::Invalid;
     358              :         int ThermalModel = 0;        // Pointer to thermal model
     359              :         int BasisMatIndex = 0;       // pointer to matrix for basis
     360              :         int BasisMatNrows = 0;       // No. rows in matrix
     361              :         int BasisMatNcols = 0;       // No. columns in matrix
     362              :         int NBasis = 0;              // No. elements in basis
     363              :         Array2D<Real64> BasisMat;    // basis matrix
     364              :         int SolFrtTransIndex = 0;    // pointer to matrix for Front optical transmittance matrix
     365              :         int SolFrtTransNrows = 0;    // No. rows in matrix
     366              :         int SolFrtTransNcols = 0;    // No. columns in matrix
     367              :         Array2D<Real64> SolFrtTrans; // Front optical transmittance matrix
     368              :         int SolBkReflIndex = 0;      // pointer to matrix for Back optical reflectance matrix
     369              :         int SolBkReflNrows = 0;      // No. rows in matrix
     370              :         int SolBkReflNcols = 0;      // No. columns in matrix
     371              :         Array2D<Real64> SolBkRefl;   // Back optical reflectance matrix
     372              :         int VisFrtTransIndex = 0;    // pointer to matrix for Front visible transmittance matrix
     373              :         int VisFrtTransNrows = 0;    // No. rows in matrix
     374              :         int VisFrtTransNcols = 0;    // No. columns in matrix
     375              :         Array2D<Real64> VisFrtTrans; // Front visible transmittance matrix
     376              :         int VisBkReflIndex = 0;      // pointer to matrix for Back visible reflectance matrix
     377              :         int VisBkReflNrows = 0;      // No. rows in matrix
     378              :         int VisBkReflNcols = 0;      // No. columns in matrix
     379              :         Array2D<Real64> VisBkRefl;   // Back visible reflectance matrix
     380              :         int NumLayers = 0;
     381              :         Array1D<BSDFLayerAbsorpStruct> Layer;
     382              :     };
     383              : 
     384              : } // namespace DataBSDFWindow
     385              : 
     386              : struct BSDFWindowData : BaseGlobalStruct
     387              : {
     388              : 
     389              :     int TotComplexFenStates = 0; // Number of complex fenestration construction definitions
     390              :     int FirstBSDF = 0;           // Location of first complex fenestration construction definition in Constr array
     391              :     int MaxBkSurf = 20;          // was 20    Maximum number of back surfaces in solar overlap & interior solar distribution
     392              :     int TotThermalModels = 0;    // Number of thermal models
     393              : 
     394              :     // calculation
     395              :     Array2D<Vector3<Real64>> SUNCOSTS = Array2D<Vector3<Real64>>(60, 24); // Timestep values of solar direction cosines
     396              :     Array2D<Real64> BSDFTempMtrx;                                         // Temporary matrix for holding axisymmetric input
     397              :     EPVector<DataBSDFWindow::BSDFWindowGeomDescr> ComplexWind;            // Window geometry structure: set in CalcPerSolarBeam/SolarShading
     398              : 
     399         2126 :     void init_constant_state([[maybe_unused]] EnergyPlusData &state) override
     400              :     {
     401         2126 :     }
     402              : 
     403         1152 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
     404              :     {
     405         1152 :     }
     406              : 
     407         2100 :     void clear_state() override
     408              :     {
     409         2100 :         new (this) BSDFWindowData();
     410         2100 :     }
     411              : };
     412              : 
     413              : } // namespace EnergyPlus
     414              : 
     415              : #endif
        

Generated by: LCOV version 2.0-1