LCOV - code coverage report
Current view: top level - EnergyPlus - SurfaceGeometry.hh (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 11 44 25.0 %
Date: 2024-08-24 18:31:18 Functions: 3 4 75.0 %

          Line data    Source code
       1             : // EnergyPlus, Copyright (c) 1996-2024, 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 SurfaceGeometry_hh_INCLUDED
      49             : #define SurfaceGeometry_hh_INCLUDED
      50             : 
      51             : // ObjexxFCL Headers
      52             : #include <ObjexxFCL/Array1S.hh>
      53             : 
      54             : // EnergyPlus Headers
      55             : #include <EnergyPlus/DataSurfaces.hh>
      56             : #include <EnergyPlus/DataVectorTypes.hh>
      57             : #include <EnergyPlus/DataViewFactorInformation.hh>
      58             : #include <EnergyPlus/EnergyPlus.hh>
      59             : #include <EnergyPlus/HeatBalanceKivaManager.hh>
      60             : #include <EnergyPlus/Vectors.hh>
      61             : 
      62             : // C++ Headers
      63             : #include <map>
      64             : 
      65             : namespace EnergyPlus {
      66             : 
      67             : // Forward declarations
      68             : struct EnergyPlusData;
      69             : 
      70             : namespace SurfaceGeometry {
      71             : 
      72             :     // Using/Aliasing
      73             :     using DataSurfaces::SurfaceClass;
      74             :     using DataSurfaces::SurfaceData;
      75             :     using DataVectorTypes::Vector;
      76             : 
      77             :     enum enclosureType
      78             :     {
      79             :         RadiantEnclosures,
      80             :         SolarEnclosures
      81             :     };
      82             : 
      83             :     void SetupZoneGeometry(EnergyPlusData &state, bool &ErrorsFound);
      84             : 
      85             :     void AllocateSurfaceArrays(EnergyPlusData &state);
      86             : 
      87             :     void AllocateSurfaceWindows(EnergyPlusData &state, int NumSurfaces);
      88             : 
      89             :     void GetSurfaceData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input
      90             : 
      91             :     void CreateMissingSpaces(EnergyPlusData &state, Array1D<SurfaceGeometry::SurfaceData> &Surfaces);
      92             : 
      93             :     void createSpaceSurfaceLists(EnergyPlusData &state);
      94             : 
      95             :     void setSurfaceFirstLast(EnergyPlusData &state);
      96             : 
      97             :     void checkSubSurfAzTiltNorm(EnergyPlusData &state,
      98             :                                 SurfaceData &baseSurface, // Base surface data (in)
      99             :                                 SurfaceData &subSurface,  // Subsurface data (in)
     100             :                                 bool &surfaceError        // True if there is subsurface error that requires a fatal
     101             :     );
     102             : 
     103             :     void GetGeometryParameters(EnergyPlusData &state, bool &ErrorsFound); // set to true if errors found during input
     104             : 
     105             :     void GetDetShdSurfaceData(EnergyPlusData &state,
     106             :                               bool &ErrorsFound,          // Error flag indicator (true if errors found)
     107             :                               int &SurfNum,               // Count of Current SurfaceNumber
     108             :                               int const TotDetachedFixed, // Number of Fixed Detached Shading Surfaces to obtain
     109             :                               int const TotDetachedBldg   // Number of Building Detached Shading Surfaces to obtain
     110             :     );
     111             : 
     112             :     void GetRectDetShdSurfaceData(EnergyPlusData &state,
     113             :                                   bool &ErrorsFound,              // Error flag indicator (true if errors found)
     114             :                                   int &SurfNum,                   // Count of Current SurfaceNumber
     115             :                                   int const TotRectDetachedFixed, // Number of Fixed Detached Shading Surfaces to obtain
     116             :                                   int const TotRectDetachedBldg   // Number of Building Detached Shading Surfaces to obtain
     117             :     );
     118             : 
     119             :     void GetHTSurfaceData(EnergyPlusData &state,
     120             :                           bool &ErrorsFound,                 // Error flag indicator (true if errors found)
     121             :                           int &SurfNum,                      // Count of Current SurfaceNumber
     122             :                           int const TotHTSurfs,              // Number of Heat Transfer Base Surfaces to obtain
     123             :                           int const TotDetailedWalls,        // Number of Wall:Detailed items to obtain
     124             :                           int const TotDetailedRoofs,        // Number of RoofCeiling:Detailed items to obtain
     125             :                           int const TotDetailedFloors,       // Number of Floor:Detailed items to obtain
     126             :                           const Array1D_string &BaseSurfCls, // Valid Classes for Base Surfaces
     127             :                           const Array1D<SurfaceClass> &BaseSurfIDs,
     128             :                           int &NeedToAddSurfaces // Number of surfaces to add, based on unentered IZ surfaces
     129             :     );
     130             : 
     131             :     void GetRectSurfaces(EnergyPlusData &state,
     132             :                          bool &ErrorsFound,                        // Error flag indicator (true if errors found)
     133             :                          int &SurfNum,                             // Count of Current SurfaceNumber
     134             :                          int const TotRectExtWalls,                // Number of Exterior Walls to obtain
     135             :                          int const TotRectIntWalls,                // Number of Adiabatic Walls to obtain
     136             :                          int const TotRectIZWalls,                 // Number of Interzone Walls to obtain
     137             :                          int const TotRectUGWalls,                 // Number of Underground to obtain
     138             :                          int const TotRectRoofs,                   // Number of Roofs to obtain
     139             :                          int const TotRectCeilings,                // Number of Adiabatic Ceilings to obtain
     140             :                          int const TotRectIZCeilings,              // Number of Interzone Ceilings to obtain
     141             :                          int const TotRectGCFloors,                // Number of Floors with Ground Contact to obtain
     142             :                          int const TotRectIntFloors,               // Number of Adiabatic Walls to obtain
     143             :                          int const TotRectIZFloors,                // Number of Interzone Floors to obtain
     144             :                          const Array1D<SurfaceClass> &BaseSurfIDs, // ID Assignments for valid surface classes
     145             :                          int &NeedToAddSurfaces                    // Number of surfaces to add, based on unentered IZ surfaces
     146             :     );
     147             : 
     148             :     void MakeRectangularVertices(EnergyPlusData &state,
     149             :                                  int const SurfNum,
     150             :                                  Real64 const XCoord,
     151             :                                  Real64 const YCoord,
     152             :                                  Real64 const ZCoord,
     153             :                                  Real64 const Length,
     154             :                                  Real64 const Height,
     155             :                                  bool const SurfWorldCoordSystem);
     156             : 
     157             :     void GetHTSubSurfaceData(EnergyPlusData &state,
     158             :                              bool &ErrorsFound,                       // Error flag indicator (true if errors found)
     159             :                              int &SurfNum,                            // Count of Current SurfaceNumber
     160             :                              int const TotHTSubs,                     // Number of Heat Transfer SubSurfaces to obtain
     161             :                              const Array1D_string &SubSurfCls,        // Valid Classes for Sub Surfaces
     162             :                              const Array1D<SurfaceClass> &SubSurfIDs, // ID Assignments for valid sub surface classes
     163             :                              int &AddedSubSurfaces,                   // Subsurfaces added when windows reference Window5
     164             :                              int &NeedToAddSurfaces                   // Number of surfaces to add, based on unentered IZ surfaces
     165             :     );
     166             : 
     167             :     void GetRectSubSurfaces(EnergyPlusData &state,
     168             :                             bool &ErrorsFound,                       // Error flag indicator (true if errors found)
     169             :                             int &SurfNum,                            // Count of Current SurfaceNumber
     170             :                             int const TotWindows,                    // Number of Window SubSurfaces to obtain
     171             :                             int const TotDoors,                      // Number of Door SubSurfaces to obtain
     172             :                             int const TotGlazedDoors,                // Number of Glass Door SubSurfaces to obtain
     173             :                             int const TotIZWindows,                  // Number of Interzone Window SubSurfaces to obtain
     174             :                             int const TotIZDoors,                    // Number of Interzone Door SubSurfaces to obtain
     175             :                             int const TotIZGlazedDoors,              // Number of Interzone Glass Door SubSurfaces to obtain
     176             :                             const Array1D<SurfaceClass> &SubSurfIDs, // ID Assignments for valid sub surface classes
     177             :                             int &AddedSubSurfaces,                   // Subsurfaces added when windows reference Window5
     178             :                             int &NeedToAddSubSurfaces                // Number of surfaces to add, based on unentered IZ surfaces
     179             :     );
     180             : 
     181             :     void CheckWindowShadingControlFrameDivider(EnergyPlusData &state,
     182             :                                                std::string_view const cRoutineName, // routine name calling this one (for error messages)
     183             :                                                bool &ErrorsFound,                   // true if errors have been found or are found here
     184             :                                                int const SurfNum,                   // current surface number
     185             :                                                int const FrameField                 // field number for frame/divider
     186             :     );
     187             : 
     188             :     void CheckSubSurfaceMiscellaneous(EnergyPlusData &state,
     189             :                                       std::string_view const cRoutineName,       // routine name calling this one (for error messages)
     190             :                                       bool &ErrorsFound,                         // true if errors have been found or are found here
     191             :                                       int const SurfNum,                         // current surface number
     192             :                                       std::string const &SubSurfaceName,         // name of the surface
     193             :                                       std::string const &SubSurfaceConstruction, // name of the construction
     194             :                                       int &AddedSubSurfaces);
     195             : 
     196             :     void MakeRelativeRectangularVertices(EnergyPlusData &state,
     197             :                                          int const BaseSurfNum, // Base surface
     198             :                                          int const SurfNum,
     199             :                                          Real64 const XCoord,
     200             :                                          Real64 const ZCoord,
     201             :                                          Real64 const Length,
     202             :                                          Real64 const Height);
     203             : 
     204             :     void MakeEquivalentRectangle(EnergyPlusData &state,
     205             :                                  int const SurfNum, // Surface number
     206             :                                  bool &ErrorsFound  // Error flag indicator (true if errors found)
     207             :     );
     208             : 
     209             :     void GetAttShdSurfaceData(EnergyPlusData &state,
     210             :                               bool &ErrorsFound,   // Error flag indicator (true if errors found)
     211             :                               int &SurfNum,        // Count of Current SurfaceNumber
     212             :                               int const TotShdSubs // Number of Attached Shading SubSurfaces to obtain
     213             :     );
     214             : 
     215             :     void GetSimpleShdSurfaceData(EnergyPlusData &state,
     216             :                                  bool &ErrorsFound,                // Error flag indicator (true if errors found)
     217             :                                  int &SurfNum,                     // Count of Current SurfaceNumber
     218             :                                  int const TotOverhangs,           // Number of Overhangs to obtain
     219             :                                  int const TotOverhangsProjection, // Number of Overhangs (projection) to obtain
     220             :                                  int const TotFins,                // Number of Fins to obtain
     221             :                                  int const TotFinsProjection       // Number of Fins (projection) to obtain
     222             :     );
     223             : 
     224             :     void GetIntMassSurfaceData(EnergyPlusData &state,
     225             :                                bool &ErrorsFound, // Error flag indicator (true if errors found)
     226             :                                int &SurfNum       // Count of Current SurfaceNumber
     227             :     );
     228             : 
     229             :     int GetNumIntMassSurfaces(EnergyPlusData &state); // Number of Internal Mass Surfaces to obtain
     230             : 
     231             :     void GetShadingSurfReflectanceData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input
     232             : 
     233             :     void GetSurfaceSrdSurfsData(EnergyPlusData &state, bool &ErrorsFound); // Error flag indicator (true if errors found)
     234             : 
     235             :     void GetSurfaceLocalEnvData(EnergyPlusData &state, bool &ErrorsFound); // Error flag indicator (true if errors found)
     236             : 
     237             :     void GetHTSurfExtVentedCavityData(EnergyPlusData &state, bool &ErrorsFound); // Error flag indicator (true if errors found)
     238             : 
     239             :     void GetSurfaceHeatTransferAlgorithmOverrides(EnergyPlusData &state, bool &ErrorsFound);
     240             : 
     241             :     void GetSurfaceGroundSurfsData(EnergyPlusData &state, bool &ErrorsFound); // Error flag indicator (true if errors found)
     242             : 
     243             :     // Roof perimeter, Area, weighted-by-area average height azimuth
     244             :     struct GeoSummary
     245             :     {
     246             :         // Members
     247             :         Real64 Area = 0.0;      // Sum of all roof surface areas
     248             :         Real64 Perimeter = 0.0; // Actual perimeter of all roof surfaces, after removing all edges that are used twice (and inserting vertices
     249             :                                 // to split surfaces as needed)
     250             :         Real64 Height = 0.0;    // Weighted average mean vertical height: for each surface, take max - Zmin value,
     251             :                                 // then do a weighted average by surface area
     252             :         Real64 Azimuth = 0.0;   // Weighted average azimuth
     253             :         Real64 Tilt = 0.0;      // Weighted average tilt
     254             : 
     255             :         Real64 Zmax = 0;
     256             :         Real64 Zmin = 0;
     257             :         Real64 Ymax = 0;
     258             :         Real64 Ymin = 0;
     259             :         Real64 Xmax = 0;
     260             :         Real64 Xmin = 0;
     261             :     };
     262             : 
     263             :     void GetGeoSummaryRoof(EnergyPlusData &state, GeoSummary &geoSumRoof);
     264             : 
     265             :     class ExposedFoundationPerimeter
     266             :     {
     267             :     public:
     268             :         void getData(EnergyPlusData &state, bool &ErrorsFound);
     269             :         struct Data
     270             :         {
     271             :             double exposedFraction = -1; // hush up cppcheck
     272             :             std::vector<bool> isExposedPerimeter;
     273             :             bool useDetailedExposedPerimeter;
     274             :         };
     275             :         std::map<int, Data> surfaceMap;
     276             :     };
     277             : 
     278             :     void GetVertices(EnergyPlusData &state,
     279             :                      int const SurfNum,             // Current surface number
     280             :                      int const NSides,              // Number of sides to figure
     281             :                      Array1S<Real64> const Vertices // Vertices, in specified order
     282             :     );
     283             : 
     284             :     void ReverseAndRecalculate(EnergyPlusData &state,
     285             :                                int const SurfNum,   // Surface number for the surface
     286             :                                int const NSides,    // number of sides to surface
     287             :                                Real64 &SurfAzimuth, // Surface Facing angle (will be 0 for roofs/floors)
     288             :                                Real64 &SurfTilt     // Surface tilt (
     289             :     );
     290             : 
     291             :     void MakeMirrorSurface(EnergyPlusData &state, int &SurfNum); // In=>Surface to Mirror, Out=>new Surface index
     292             : 
     293             :     void GetWindowShadingControlData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input
     294             : 
     295             :     void InitialAssociateWindowShadingControlFenestration(EnergyPlusData &state, bool &ErrorsFound, int &SurfNum);
     296             : 
     297             :     void FinalAssociateWindowShadingControlFenestration(EnergyPlusData &state, bool &ErrorsFound);
     298             : 
     299             :     void CheckWindowShadingControlSimilarForWindow(EnergyPlusData &state, bool &ErrorsFound);
     300             : 
     301             :     bool isWindowShadingControlSimilar(EnergyPlusData &state, int a, int b);
     302             : 
     303             :     void GetStormWindowData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input
     304             : 
     305             :     void GetWindowGapAirflowControlData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input
     306             : 
     307             :     void GetOSCData(EnergyPlusData &state, bool &ErrorsFound);
     308             : 
     309             :     void GetOSCMData(EnergyPlusData &state, bool &ErrorsFound);
     310             : 
     311             :     void GetFoundationData(EnergyPlusData &state, bool &ErrorsFound);
     312             : 
     313             :     void GetMovableInsulationData(EnergyPlusData &state, bool &ErrorsFound); // If errors found in input
     314             : 
     315             :     void CalculateZoneVolume(EnergyPlusData &state);
     316             : 
     317             :     struct EdgeOfSurf
     318             :     {
     319             :         int surfNum = 0;
     320             :         Vector start;
     321             :         Vector end;
     322             :         std::vector<int> otherSurfNums;
     323             :         int count = 0;
     324       20934 :         EdgeOfSurf() : start(Vector(0., 0., 0.)), end(Vector(0., 0., 0.))
     325             :         {
     326       20934 :         }
     327             : 
     328             :         bool operator==(const EdgeOfSurf &other) const;
     329             :         bool operator!=(const EdgeOfSurf &other) const;
     330             :         bool containsPoints(const Vector &vertex) const;
     331             :         double length() const;
     332             :     };
     333             : 
     334             :     bool isEnclosedVolume(DataVectorTypes::Polyhedron const &zonePoly, std::vector<EdgeOfSurf> &edgeNot2);
     335             : 
     336             :     std::vector<EdgeOfSurf> edgesInBoth(std::vector<EdgeOfSurf> edges1, std::vector<EdgeOfSurf> edges2);
     337             : 
     338             :     bool edgesEqualOnSameSurface(EdgeOfSurf a, EdgeOfSurf b);
     339             : 
     340             :     std::vector<EdgeOfSurf> edgesNotTwoForEnclosedVolumeTest(DataVectorTypes::Polyhedron const &zonePoly, std::vector<Vector> const &uniqueVertices);
     341             : 
     342             :     std::vector<Vector> makeListOfUniqueVertices(DataVectorTypes::Polyhedron const &zonePoly);
     343             : 
     344             :     DataVectorTypes::Polyhedron updateZonePolygonsForMissingColinearPoints(DataVectorTypes::Polyhedron const &zonePoly,
     345             :                                                                            std::vector<Vector> const &uniqVertices);
     346             : 
     347             :     bool areFloorAndCeilingSame(EnergyPlusData &state, DataVectorTypes::Polyhedron const &zonePoly);
     348             : 
     349             :     bool areWallHeightSame(EnergyPlusData &state, DataVectorTypes::Polyhedron const &zonePoly);
     350             : 
     351             :     std::tuple<bool, bool, bool> areSurfaceHorizAndVert(EnergyPlusData &state, DataVectorTypes::Polyhedron const &zonePoly);
     352             : 
     353             :     bool areOppositeWallsSame(EnergyPlusData &state,
     354             :                               DataVectorTypes::Polyhedron const &zonePoly,
     355             :                               Real64 &oppositeWallArea,
     356             :                               Real64 &distanceBetweenOppositeWalls);
     357             : 
     358             :     std::vector<int> listOfFacesFacingAzimuth(EnergyPlusData &state, DataVectorTypes::Polyhedron const &zonePoly, Real64 azimuth);
     359             : 
     360             :     int findPossibleOppositeFace(EnergyPlusData &state, DataVectorTypes::Polyhedron const &zonePoly, int faceIndex);
     361             : 
     362             :     bool areCornersEquidistant(DataVectorTypes::Polyhedron const &zonePoly, int faceIndex, int opFaceIndex, Real64 &distanceBetween);
     363             : 
     364             :     bool isAlmostEqual3dPt(DataVectorTypes::Vector v1, DataVectorTypes::Vector v2);
     365             : 
     366             :     bool isAlmostEqual2dPt(DataVectorTypes::Vector_2d v1, DataVectorTypes::Vector_2d v2);
     367             : 
     368             :     int findIndexOfVertex(DataVectorTypes::Vector vertexToFind, std::vector<DataVectorTypes::Vector> listOfVertices);
     369             : 
     370             :     Real64 distance(DataVectorTypes::Vector v1, DataVectorTypes::Vector v2);
     371             : 
     372             :     Real64 distanceFromPointToLine(DataVectorTypes::Vector start, DataVectorTypes::Vector end, DataVectorTypes::Vector test);
     373             : 
     374             :     bool isPointOnLineBetweenPoints(DataVectorTypes::Vector start, DataVectorTypes::Vector end, DataVectorTypes::Vector test);
     375             : 
     376             :     void ProcessSurfaceVertices(EnergyPlusData &state, int const ThisSurf, bool &ErrorsFound);
     377             : 
     378             :     void CalcCoordinateTransformation(EnergyPlusData &state,
     379             :                                       int const SurfNum,            // Surface Number
     380             :                                       Vector &CompCoordTranslVector // Coordinate Translation Vector
     381             :     );
     382             : 
     383             :     void CreateShadedWindowConstruction(EnergyPlusData &state,
     384             :                                         int const SurfNum,          // Surface number
     385             :                                         int const WSCPtr,           // Pointer to WindowShadingControl for SurfNum
     386             :                                         int const ShDevNum,         // Shading device material number for WSCptr
     387             :                                         int const shadeControlIndex // index to the Surface().windowShadingControlList,
     388             :                                                                     // Surface().shadedConstructionList, and Surface().shadedStormWinConstructionList
     389             :     );
     390             : 
     391             :     void CreateStormWindowConstructions(EnergyPlusData &state);
     392             : 
     393             :     int createAirMaterialFromDistance(EnergyPlusData &state, Real64 distance, std::string_view namePrefix); // return new material number
     394             : 
     395             :     // create a new construction with storm based on an old construction and storm and gap materials
     396             :     int createConstructionWithStorm(EnergyPlusData &state, int oldConstruction, std::string name, int stormMaterial, int gapMaterial);
     397             : 
     398             :     void ModifyWindow(EnergyPlusData &state,
     399             :                       int const SurfNum,    // SurfNum has construction of glazing system from Window5 Data File;
     400             :                       bool &ErrorsFound,    // Set to true if errors found
     401             :                       int &AddedSubSurfaces // Subsurfaces added when window references a
     402             :     );
     403             : 
     404             :     void AddWindow(EnergyPlusData &state,
     405             :                    int const SurfNum,    // SurfNum has construction of glazing system from Window5 Data File;
     406             :                    bool &ErrorsFound,    // Set to true if errors found
     407             :                    int &AddedSubSurfaces // Subsurfaces added when window references a
     408             :     );
     409             : 
     410             :     void TransformVertsByAspect(EnergyPlusData &state,
     411             :                                 int const SurfNum, // Current surface number
     412             :                                 int const NSides   // Number of sides to figure
     413             :     );
     414             : 
     415             :     void CalcSurfaceCentroid(EnergyPlusData &state);
     416             : 
     417             :     void SetupShadeSurfacesForSolarCalcs(EnergyPlusData &state);
     418             : 
     419             :     void
     420             :     SetupEnclosuresAndAirBoundaries(EnergyPlusData &state,
     421             :                                     EPVector<DataViewFactorInformation::EnclosureViewFactorInformation> &Enclosures, // Radiant or Solar Enclosures
     422             :                                     SurfaceGeometry::enclosureType EnclosureType,                                    // Radiant or Solar
     423             :                                     bool &ErrorsFound);                                                              // Set to true if errors found
     424             : 
     425             :     void CheckConvexity(EnergyPlusData &state,
     426             :                         int const SurfNum, // Current surface number
     427             :                         int const NSides   // Number of sides to figure
     428             :     );
     429             : 
     430             :     bool isRectangle(EnergyPlusData &state, int const ThisSurf // Current surface number
     431             :     );
     432             : 
     433             :     void CheckForReversedLayers(EnergyPlusData &state,
     434             :                                 bool &RevLayerDiffs,    // true when differences are discovered in interzone constructions
     435             :                                 int const ConstrNum,    // construction index
     436             :                                 int const ConstrNumRev, // construction index for reversed construction
     437             :                                 int const TotalLayers   // total layers for construction definition
     438             :     );
     439             : 
     440             : } // namespace SurfaceGeometry
     441             : 
     442             : struct SurfaceGeometryData : BaseGlobalStruct
     443             : {
     444             : 
     445             :     Real64 CosBldgRelNorth = 0.0;    // Cosine of the building rotation (relative north) (includes appendix G rotation)
     446             :     Real64 SinBldgRelNorth = 0.0;    // Sine of the building rotation (relative north)   (includes appendix G rotation)
     447             :     Real64 CosBldgRotAppGonly = 0.0; // Cosine of the building rotation for appendix G only(relative north)
     448             :     Real64 SinBldgRotAppGonly = 0.0; // Sine of the building rotation for appendix G only (relative north)
     449             :     Array1D<Real64> CosZoneRelNorth; // Cosine of the zone rotation (relative north)
     450             :     Array1D<Real64> SinZoneRelNorth; // Sine of the zone rotation (relative north)
     451             : 
     452             :     bool NoGroundTempObjWarning = true;   // This will cause a warning to be issued if surfaces with "Ground"
     453             :                                           // outside environment are used but no ground temperature object was input.
     454             :     bool NoFCGroundTempObjWarning = true; // This will cause a warning to be issued if surfaces with "GroundFCfactorMethod"
     455             :                                           // outside environment are used but no FC ground temperatures was input.
     456             :     bool RectSurfRefWorldCoordSystem =
     457             :         false;             // GlobalGeometryRules:Field Rectangular Surface Coordinate System (A5) = World (true) or Relative (false)
     458             :     int Warning1Count = 0; // counts of Modify Window 5/6 windows
     459             :     int Warning2Count = 0; // counts of overriding exterior windows with Window 5/6 glazing systems
     460             :     int Warning3Count = 0; // counts of overriding interior windows with Window 5/6 glazing systems
     461             : 
     462             :     bool ProcessSurfaceVerticesOneTimeFlag = true;
     463             :     int checkSubSurfAzTiltNormErrCount = 0;
     464             :     Array1D<Real64> Xpsv;
     465             :     Array1D<Real64> Ypsv;
     466             :     Array1D<Real64> Zpsv;
     467             : 
     468             :     bool GetSurfaceDataOneTimeFlag = false;
     469             :     std::unordered_map<std::string, std::string> UniqueSurfaceNames;
     470             :     bool firstTime = true;
     471             :     bool noTransform = true;
     472             :     bool CheckConvexityFirstTime = true;
     473             : 
     474             :     Array1D_string const BaseSurfCls;
     475             :     Array1D_string const SubSurfCls;
     476             :     Array1D<DataSurfaces::SurfaceClass> const BaseSurfIDs;
     477             :     Array1D<DataSurfaces::SurfaceClass> const SubSurfIDs;
     478             :     Array1D<SurfaceGeometry::SurfaceData> SurfaceTmp; // Allocated/Deallocated during input processing
     479             :     HeatBalanceKivaManager::KivaManager kivaManager;
     480             :     SurfaceGeometry::ExposedFoundationPerimeter exposedFoundationPerimeter;
     481             : 
     482             :     int ErrCount = 0;
     483             :     bool WarningDisplayed = false;
     484             :     int ErrCount2 = 0;
     485             :     int ErrCount3 = 0;
     486             :     int ErrCount4 = 0; // counts of interzone area mismatches.
     487             :     bool ShowZoneSurfaceHeaders = true;
     488             :     int ErrCount5 = 0;
     489             :     Real64 OldAspectRatio = 0.0;
     490             :     Real64 NewAspectRatio = 0.0;
     491             :     std::string transformPlane;
     492             :     Array1D<Vectors::Vector> Triangle1 = Array1D<Vectors::Vector>(3); // working struct for a 3-sided surface
     493             :     Array1D<Vectors::Vector> Triangle2 = Array1D<Vectors::Vector>(3); // working struct for a 3-sided surface
     494             :     Array1D<Real64> X;                                                // containers for x,y,z vertices of the surface
     495             :     Array1D<Real64> Y;
     496             :     Array1D<Real64> Z;
     497             :     Array1D<Real64> A; // containers for convexity test
     498             :     Array1D<Real64> B;
     499             :     int VertSize = 0; // size of X,Y,Z,A,B arrays
     500             : 
     501         796 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
     502             :     {
     503         796 :     }
     504             : 
     505           0 :     void clear_state() override
     506             :     {
     507           0 :         ProcessSurfaceVerticesOneTimeFlag = true;
     508           0 :         checkSubSurfAzTiltNormErrCount = 0;
     509           0 :         Xpsv.deallocate();
     510           0 :         Ypsv.deallocate();
     511           0 :         Zpsv.deallocate();
     512             :         // Following are used only during getting vertices, so are module variables here.
     513           0 :         CosBldgRelNorth = 0.0;
     514           0 :         SinBldgRelNorth = 0.0;
     515           0 :         CosBldgRotAppGonly = 0.0;
     516           0 :         SinBldgRotAppGonly = 0.0;
     517           0 :         CosZoneRelNorth.deallocate();
     518           0 :         SinZoneRelNorth.deallocate();
     519           0 :         NoGroundTempObjWarning = true;
     520           0 :         NoFCGroundTempObjWarning = true;
     521           0 :         RectSurfRefWorldCoordSystem = false;
     522           0 :         Warning1Count = 0;
     523           0 :         Warning2Count = 0;
     524           0 :         Warning3Count = 0;
     525           0 :         SurfaceTmp.deallocate();
     526           0 :         GetSurfaceDataOneTimeFlag = false;
     527           0 :         UniqueSurfaceNames.clear();
     528           0 :         kivaManager = HeatBalanceKivaManager::KivaManager();
     529           0 :         firstTime = true;
     530           0 :         noTransform = true;
     531           0 :         CheckConvexityFirstTime = true;
     532           0 :         ErrCount = 0;
     533           0 :         WarningDisplayed = false;
     534           0 :         ErrCount2 = 0;
     535           0 :         ErrCount3 = 0;
     536           0 :         ErrCount4 = 0;
     537           0 :         ErrCount5 = 0;
     538           0 :         ShowZoneSurfaceHeaders = true;
     539           0 :     }
     540             : 
     541             :     // Default Constructor
     542         796 :     SurfaceGeometryData()
     543         796 :         : BaseSurfCls(3, {"WALL", "FLOOR", "ROOF"}),
     544         796 :           SubSurfCls(6, {"WINDOW", "DOOR", "GLASSDOOR", "SHADING", "TUBULARDAYLIGHTDOME", "TUBULARDAYLIGHTDIFFUSER"}),
     545         796 :           BaseSurfIDs(3, {DataSurfaces::SurfaceClass::Wall, DataSurfaces::SurfaceClass::Floor, DataSurfaces::SurfaceClass::Roof}),
     546         796 :           SubSurfIDs(6,
     547             :                      {DataSurfaces::SurfaceClass::Window,
     548             :                       DataSurfaces::SurfaceClass::Door,
     549             :                       DataSurfaces::SurfaceClass::GlassDoor,
     550             :                       DataSurfaces::SurfaceClass::Shading,
     551             :                       DataSurfaces::SurfaceClass::TDD_Dome,
     552        1592 :                       DataSurfaces::SurfaceClass::TDD_Diffuser})
     553             :     {
     554         796 :     }
     555             : };
     556             : } // namespace EnergyPlus
     557             : 
     558             : #endif

Generated by: LCOV version 1.14