LCOV - code coverage report
Current view: top level - EnergyPlus - TARCOGMain.cc (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 101 131 77.1 %
Date: 2023-01-17 19:17:23 Functions: 3 3 100.0 %

          Line data    Source code
       1             : // EnergyPlus, Copyright (c) 1996-2023, 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             : // ObjexxFCL Headers
      49             : #include <ObjexxFCL/Array1D.hh>
      50             : 
      51             : // EnergyPlus Headers
      52             : #include <EnergyPlus/Data/EnergyPlusData.hh>
      53             : #include <EnergyPlus/TARCOGArgs.hh>
      54             : #include <EnergyPlus/TARCOGDeflection.hh>
      55             : #include <EnergyPlus/TARCOGGassesParams.hh>
      56             : #include <EnergyPlus/TARCOGMain.hh>
      57             : #include <EnergyPlus/TARCOGOutput.hh>
      58             : #include <EnergyPlus/TARCOGParams.hh>
      59             : #include <EnergyPlus/ThermalEN673Calc.hh>
      60             : #include <EnergyPlus/ThermalISO15099Calc.hh>
      61             : 
      62             : namespace EnergyPlus::TARCOGMain {
      63             : // TARCOG: Thermal Analysis Routine for Center of Glazing
      64             : 
      65             : // MODULE INFORMATION:
      66             : //       AUTHOR         D. Charlie Curcija
      67             : //       DATE WRITTEN   July 2000
      68             : //       MODIFIED       na
      69             : //       RE-ENGINEERED  (see information bellow)
      70             : //  Revision: 7.0.13  (March/27/2012), Simon Vidanovic
      71             : //   - feature: New set of equaitons is set instead of hhat coefficents and new approach to solution which improves
      72             : //               speed and stability.  Note that this solution does not include laminates
      73             : //  Revision: 7.0.12  (March/06/2012), Simon Vidanovic
      74             : //   - feature: Additional state for isky introduced.  Tarcog now can accept IR radiance from external source.
      75             : //  Revision: 7.0.11  (January/04/2012), Simon Vidanovic
      76             : //   - imrovements/bug fixes: Several items merged from Windows tarcog version into this one:
      77             : //      - bug fix: Correct foramtting for VacuumMaxGapThickness when program writes input file
      78             : //      - improvement: Gamma coefficient is now written in scientific notation (needed for correct output file generation)
      79             : //      - imporvement: Gap data are now saved with higer precision to wincog input file (test purposes, debug mode only)
      80             : //      - bug fix: Gap temperatures are recalculated within iterations (for thermally driven and forced ventilation)
      81             : //  Revision: 7.0.10  (December/15/2011), Simon Vidanovic
      82             : //   - imrovement: Flag for performing SHGC calculations
      83             : //  Revision: 7.0.09  (November/15/2011), Simon Vidanovic
      84             : //   - imrovement: Added error message tolerance (This is necessary to handle error messages in correct way)
      85             : //  Revision: 7.0.08  (November/15/2011), Simon Vidanovic
      86             : //   - bug fix: Fixed program crashing when warrning message 1007 occurred (output could not fit in string)
      87             : //   - feature: relaxation parameter changed
      88             : //  Revision: 7.0.07  (November/08/2011), Simon Vidanovic
      89             : //   - feature: Error message (as string) is now return from tarcog
      90             : //  Revision: 7.0.06  (November/07/2011), Simon Vidanovic
      91             : //   - bug fix: Error report now actually use passed VacuumMaxGapThickness value
      92             : //  Revision: 7.0.05  (November/07/2011), Simon Vidanovic
      93             : //   - bug fix: Troom and Tamb are not passed out of hhat routine after recalculation is performed.
      94             : //              This will cause differences in calculation of U-factor
      95             : //   - feature: VacuumMaxGapThickness is added to list of input paramters
      96             : //  Revision: 7.0.04  (November/03/2011), Simon Vidanovic
      97             : //   - bug fix: one of debug files did not update properly
      98             : //  Revision: 7.0.03  (November/01/2011), Simon Vidanovic
      99             : //   - tarcog will now exit if error code is in range from 2000 to 3000
     100             : //   - tarcog now accepts file name which is template for debug output files creation
     101             : //   - temperature correction added in case temperatures on the layers are equal
     102             : //     which in case of energy calculation will give division with zero
     103             : //   - iteration results now can be saved in the file (just for debugging purposes)
     104             : //  Revision: 7.0.02  (October/10/2011), Simon Vidanovic
     105             : //   - Deflection calculations implemented.
     106             : //  Revision: 7.0.01  (September/23/2011), Simon Vidanovic
     107             : //   - Support pillars implemented.
     108             : //  Revision: 7.0.00  (August/23/2011), Simon Vidanovic
     109             : //   - Added comments to input arguments; Fixed bug in Nu calculation for angle between 60 and 90 degrees.
     110             : //  Revision: 6.0.36  (June/22/2010)
     111             : //   - Converted to F95; refactoring.
     112             : //  Revision: 6.0.35  (June/4/2010)
     113             : //   - Fixed a few potential bugs
     114             : //  Revision: 6.0.34  (May/26/2009)
     115             : //   - Updated creation of W6 debug file (added ClosedBlind flag)
     116             : //  Revision: 6.0.33  (March/03/2008)
     117             : //   - Fixed a bug in arguments checking.
     118             : //   - Added creation of WINCOG input file in debug mode.
     119             : //  Revision: 6.0.32  (February/29/2008)
     120             : //   - Applied CSM thermal model to Woven Shades layers.
     121             : //   - Introduced a new error message (#39)
     122             : //  Revision: 6.0.31  (February/15/2008)
     123             : //   - EN673 Design and Declared standards added/fixed (it used to be EN673 and ISO 10292).
     124             : //  Revision: 6.0.30  (May/05/2007)
     125             : //   - Scalar model (CSM) fixed.
     126             : //  Revision: 6.0.29  (September/14/2006)
     127             : //   - Fixed a bug in CSM calculation that affected some cases.
     128             : //  Revision: 6.0.28  (September/05/2006)
     129             : //   - Woven Shade layer type introduced. These layers will be treated
     130             : //    the same way as Venetian Blind layers.
     131             : //  Revision: 6.0.27  (August/24/2006)
     132             : //   - Implemented new thermal model (thermal model 2 - Convection Scalar Model)
     133             : //   - Added new input argument - SDScalar:
     134             : //      0.0  - No SD (in terms of convection)
     135             : //      1.0  - Closed SD (SD treated as a 'regular' specular layer)
     136             : //      between 0 and 1 - cobination of No SD and Closed SD cases
     137             : //   - A bug in unshaded run (remapping gas properties in removal of indoor SD layer) was fixed
     138             : //   - TARCOG error codes have been updated (error codes 30 and 37 added)
     139             : //  Revision: 6.0.26  (May/31/2006)
     140             : //   - Hard-coded Xenon gas properties for EN673 were updated.
     141             : //   - hrin equation in EN673 routine was updated.
     142             : //  Revision: 6.0.25  (March/29/2006)
     143             : //   - Bug fixes in EN673/ISO10292 procedure:
     144             : //    .values of gas properties for EN673 and ISO10292 procedure can now be passed to TARCOG
     145             : //     via A coefficients in gvis, gcon and gcp matrices and wght array
     146             : //    .gas mixture buid-up limited to number of gasses used in the mix
     147             : //    .dT array is now updated correctly after each iteration
     148             : //    .hrin formula fixed
     149             : //   - Bug fix (checking of slat tilt angle - negative values are now allowed)
     150             : //  Revision: 6.0.24  (November/25/2005)
     151             : //   - Code responsible for ETR calculation (in U factor calculation)
     152             : //    has been redesigned and cleared of all bugs.
     153             : //  Revision: 6.0.23  (November/24/2005)
     154             : //   - Bug fix (wrong U factor results for IGUs with one glass + indoor SD)
     155             : //   - Bug fix (wrong results for Hc modification ratios)
     156             : //    when fixed H or fixed Hc model is used.
     157             : //   - Allowed DiffuseShade as layer type (does not affect calculation algorithm).
     158             : //   - hflux value has been updated - includes contribution from freely ventilated air
     159             : //    around indoor SD layer (this affects SHGC value)
     160             : //   - Debug file has been updated:
     161             : //      . qr is shown in each gap,
     162             : //      . hcgas values have been updated to include contribution from freely ventilated air
     163             : //        around SD layers (this affects output argument as well),
     164             : //      . hrgas values have been introduced in debug file.
     165             : //  Revision: 6.0.22  (November/04/2005)
     166             : //   - Added an internal "unshaded" calculation run for glazing systems with
     167             : //     outdoor and/or indoor SD layer(s). This run is needed for proper calculation
     168             : //     of Hc modification ratios.
     169             : //   - Added two new output arguments needed for connection with T6:
     170             : //      HcUnshadedOut,
     171             : //      HcUnshadeIn.
     172             : //   - Changed the way ShadeHcRatioOut and ShadeHcRatioIn are caculated.
     173             : //  Revision: 6.0.21  (October/28/2005)
     174             : //   - Fixed another serious bug in new routine for calculation of U factor.
     175             : //  Revision: 6.0.20  (October/20/2005)
     176             : //   - Fixed a bug in new calculation of U factor.
     177             : //   - Fixed a bug in formulas for calculation of SD thickness.
     178             : //   - Forced ventilation calc has been disabled (since v6.0.19)
     179             : //  Revision: 6.0.19  (October/19/2005)
     180             : //   - New input arguments added:
     181             : //      SlatThick, SlatWidth, SlatAngle, SlatCond, SlatSpacing, SlatCurve, ThermalMod.
     182             : //   - Argument gltype renamed to LayerType.
     183             : //   - Thermal_model_1 implemented
     184             : //   - U factor calculation has been updated.
     185             : //   - Description of arguments has been updated.
     186             : //   - Forced ventilation calc has been disabled.
     187             : //  Revision: 6.0.18  (September/16/2005)
     188             : //   - Changed Tvent for outdoor and indoor SD layers to Tout and Tin, respectivelly.
     189             : //   - Keff is now calculated for each gap.
     190             : //  Revision: 6.0.17  (September/08/2005)
     191             : //   - Fixed a bug involving Al, Ar & Ah values (patch for a case of Al+Ar+Ah = 0).
     192             : //  Revision: 6.0.16  (September/07/2005)
     193             : //   - Added new output arguments needed for connection with T6:
     194             : //      ShadeEmisRatioOut,
     195             : //      ShadeEmisRatioIn,
     196             : //      ShadeHcRatioOut,
     197             : //      ShadeHcRatioIn,
     198             : //      Keff,
     199             : //      ShadeGapKeffConv
     200             : //  Revision: 6.0.15  (August/30/2005)
     201             : //   - Removed CHDIR call; used filepath//filename instead.
     202             : //  Revision: 6.0.14  (August/26/2005)
     203             : //   - New arguments introduced:
     204             : //      Debug_dir  - character array: target directory for debug output
     205             : //      Window_ID  - integer: window ID (from W6)
     206             : //      IGU_ID  - integer: IGU ID (from W6)
     207             : //  Revision: 6.0.13  (August/19/2005)
     208             : //   - Bug fix #9 - allows calculations for Atop=Abot=0, by setting both values to 1e-6
     209             : //  Revision: 6.0.12  (August/12/2005)
     210             : //   - Minor change in Picard coefficients for vented gaps - MaxIter cannot
     211             : //     be less than 800. This solves issue with theta buffer in Therm1d.
     212             : //   - Implemented creation of TARCOG debug file w/ i/o arguments/results (Tarcog.dbg)
     213             : //     (fetaure #8); debug file will be created depending on Debug_mode switch:
     214             : //      Debug_mode = 0 : debug file will not be created
     215             : //      Debug_mode = 1 : debug file will be appended
     216             : //      Debug_mode = 2 : new debug file will be created
     217             : //   - Bug fix #7- qin result corrected in SHGC run.
     218             : //  Revision: 6.0.11  (July/15/2005)
     219             : //   - Bug fix #4: an issue in original formulas that causes Therm1d
     220             : //     to fail to converge for in certain cases. Changes were made in Therm1d
     221             : //     that allow regular calculation outcome in these cases.
     222             : //  Revision: 6.0.10  (June/3/2005)
     223             : //   - Bug fix #00005: added IGU Height in term A in ShadingIn and ShadingEdge
     224             : //     procedures. This term is used in calculations of free vent air velocity
     225             : //  Revision: 6.0.09  (May/16/2005)
     226             : //   - Bug fix #00001: for fixed combined coef. BC -> Trmout = Tout, Trmin = Tind
     227             : //  Revision: 6.0.08  (May/12/2005)
     228             : //   - Debug flag introduced in Tarcog, Therm1d and dtemp procedures:
     229             : //     debug info is stored in two files: tarcog.dbg and temps.out
     230             : //  Revision: 6.0.07  (April/12/2005)
     231             : //   - Fixed a bug (#00002) in calculation of
     232             : //     Picard method coefficients, in Therm1d procedure:
     233             : //     fixes SD ventilation velocity related calcs.
     234             : //  Revision: 6.0.06  (October/22/2004)
     235             : //   - Fixed a bug in velocity calculations
     236             : //  Revision: 6.0.05  (October/01/2004)
     237             : //   - Changed name from w5cog to TARCOG
     238             : //   - Changed version numbering
     239             : //---------------------------------------------
     240             : //  Revision: 5.3.105  (September/07/04)
     241             : //   - Changed argument 'standard' from string to integer
     242             : //  Revision: 5.3.02.03  (January/16/04)
     243             : //   - Slice temperatures calculated
     244             : //   - Write out Nusselt and Rayleigh (in debug mode)
     245             : //   - sol converted to asol in input format
     246             : //  Revision: 5.3.02.02  (11/14/03)
     247             : //   - Implemented CEN Standard
     248             : //  Revision: 5.3.02.01  (11/06/03)
     249             : //   - implemented Laminate procedure
     250             : //  Revision: 5.3.01  (09/22/03)
     251             : //   - fixed bug in Tgap initial calculation
     252             : //   - reduce dimension of Tgap
     253             : //  Revision: 5.3.00  (08/25/03)
     254             : //   - make code more readable and rename version
     255             : //  Revision: 6.0.07  (08/10/03)
     256             : //   - implemented arrays for ventilation temperature and speed
     257             : //   - repaired equation 121 in ISO (instead of cos(tilt) now is ABS(cos(tilt)))
     258             : //   - implemented input field for forced ventilation velocity (for all cases)
     259             : //   - fixed bug in shading edge: coefficients B1, C1 and D1 repaired to calcluate value for gap temperature (not enviroment)
     260             : //   - fixed bug in routine shading edge: characteristic Height is calculated for gap (not for enviroment)
     261             : //   - fixed bug in proccesing error messages (this was produced slightly wrong in some cases results)
     262             : //  Revision: 6.0.06 rv  (04/22/03)
     263             : //   - write out heat flux calculation for shading device panes
     264             : //   - qv smoothing: make vented heat flux same in adjacent gaps (gaps are divided by shading pane)
     265             : //   - fixed bug in routine "shadingin": make that vented heat flow direction is calculated correct, according
     266             : //     to temeratures in adjecent gaps
     267             : //  Revision: 6.0.05  (04/14/03)
     268             : //   - implemented "Picard" method in iteration loop
     269             : //   - number of iterations is increased to 1000
     270             : //   - alpha coefficient is set to 0.01 (Picard method)
     271             : //  Revision: 6.0.04  (03/03/03)
     272             : //   - implemented forced ventilation for indoor and outdoor shading devices
     273             : //   - maximum number of iterations is increased to 100
     274             : //  Revision: 6.0.03 (02/25/03)
     275             : //   - fixed bug in error message for "nlayer<1"
     276             : //   - error messages update
     277             : //   - repaired U-value calculation and Tgap1, Tgap2 calculation for shading inside
     278             : //   - shading devices implemented
     279             : //   - error messages and warnings updated and tolerance is decreased to 1e-5
     280             : //   - write out heat fluxes
     281             : //   - fixed bug in hrin and hrout calculation
     282             : //   - fixed bug in nusselt number for gap calculation for angle > 90 degrees
     283             : //    and new error messages are added
     284             : // pr  Revision: 5.13 (01/16/02)
     285             : // pr
     286             : // pr   - pi value updated
     287             : // pr
     288             : //  Revision: 5.12 (10/27/01)
     289             : //   - deleted extra lines in hatter (just cleanup)
     290             : //  Revision: 5.11 (10/23/01)
     291             : //   - fixed bug in reporting SHGC
     292             : // pr  Revision: 5.10 (10/15/01) [Not included here - under testing]
     293             : // pr
     294             : // pr  - updated gas properties for Xenon (for EN673 standard)
     295             : // pr  Revision: 5.09 (10/12/01) [Not included here - under testing]
     296             : // pr
     297             : // pr  - implemented EN673 standard
     298             : //  Revision: 5.08 (10/11/01)
     299             : //   - corrected reporting for solar conditions
     300             : //   - corrected array declaration for nmix in filmg
     301             : //  Revision: 5.07 (9/21/01) [not included here - under testing]
     302             : //   - implemented Laminate procedure
     303             : // pr  Revision: 5.06(09/18/00) [not included here - under testing]
     304             : // pr
     305             : // pr  - implemented CEN algorithms
     306             : // Revised: June, 2001
     307             : //   - further implementation of ISO 15099
     308             : //     * new def. of shgc
     309             : //     * revised gas constants
     310             : //     * implemented mean radiant temperature on indoor side
     311             : //     *
     312             : //   - cleaned bugs
     313             : //     * fixed film coefficient didn't work correctly
     314             : //   - removed condensation calculations (part of main w5 code now)
     315             : //   - implemented environmental temperatures
     316             : // Revised: January, 2001
     317             : //   - revised input format
     318             : //   - streamlined code
     319             : //   - implemented dll's
     320             : // Revised: July 2000 (Major revision of the new code)
     321             : //   - checked for accuracy, cleaned bunch of bugs
     322             : //   - implemented gas mixtures
     323             : // Initial update of the old "therm" (WINDOW 4.1) code: Around 1998/99
     324             : 
     325             : // PURPOSE OF THIS MODULE:
     326             : //   Module For Calculation of Thermal Performance Indices For Center
     327             : //     of Glass According to ISO 15099/ASHRAE SPC142, ISO10292, and EN673
     328             : 
     329             : // METHODOLOGY EMPLOYED:
     330             : //  Standard ISO 15099/ASHRAE SPC142, ISO10292 and EN673
     331             : 
     332             : // REFERENCES:
     333             : // ISO 15099/ASHRAE SPC142, ISO10292, EN673, Tarcog technical documentation
     334             : 
     335             : // Using/Aliasing
     336             : using namespace TARCOGOutput;
     337             : using namespace TARCOGGassesParams;
     338             : using namespace TARCOGParams;
     339             : using namespace TARCOGArgs;
     340             : using namespace ThermalISO15099Calc;
     341             : using namespace ThermalEN673Calc;
     342             : using namespace TARCOGDeflection;
     343             : 
     344             : // Functions
     345             : 
     346       37990 : void TARCOG90(EnergyPlusData &state,
     347             :               int const nlayer,                           // Number of layers (glass + SD)
     348             :               int const iwd,                              // Wind direction:
     349             :               Real64 &tout,                               // Outdoor temperature [K]
     350             :               Real64 &tind,                               // Indoor temperature [K]
     351             :               Real64 &trmin,                              // Indoor mean radiant temperature [K]
     352             :               Real64 const wso,                           // Outdoor wind speed [m/s]
     353             :               Real64 const wsi,                           // Inside forced air speed [m/s]
     354             :               Real64 const dir,                           // Direct solar radiation [W/m2]
     355             :               Real64 const outir,                         // IR radiance of window's exterior surround [W/m2]
     356             :               int const isky,                             // Flag for sky temperature(Tsky) and sky emittance(esky)
     357             :               Real64 const tsky,                          // Night sky temperature [K]
     358             :               Real64 &esky,                               // Effective night sky emittance
     359             :               Real64 const fclr,                          // Fraction of sky that is clear
     360             :               Real64 const VacuumPressure,                // maximal pressure for gas to be considered as vacuum
     361             :               Real64 &VacuumMaxGapThickness,              // maximum allowed thickness without producing warning message
     362             :               DeflectionCalculation const CalcDeflection, // Deflection calculation flag:
     363             :               Real64 const Pa,                            // Atmospheric (outside/inside) pressure (used onlu if CalcDeflection = 1)
     364             :               Real64 const Pini,                          // Initial presssure at time of fabrication (used only if CalcDeflection = 1)
     365             :               Real64 const Tini,                          // Initial temperature at time of fabrication (used only if CalcDeflection = 1)
     366             :               Array1D<Real64> &gap,                       // Vector of gap widths [m]
     367             :               Array1D<Real64> &GapDefMax,                 // Vector of gap widths in deflected state. It will be used as input
     368             :               Array1D<Real64> &thick,                     // Vector of glazing layer thicknesses [m]
     369             :               Array1D<Real64> &scon,                      // Vector of conductivities of each glazing layer  [W/mK]
     370             :               const Array1D<Real64> &YoungsMod,           // Youngs Modulus coefficients used in deflection calculations
     371             :               const Array1D<Real64> &PoissonsRat,         // Poissons Ratio coefficients used in deflection calculations
     372             :               const Array1D<Real64> &tir,                 // Vector of IR transmittances of each surface
     373             :               const Array1D<Real64> &emis,                // Vector of IR emittances of each surface
     374             :               Real64 const totsol,                        // Total solar transmittance of the IGU
     375             :               Real64 const tilt,                          // Window tilt [degrees]
     376             :               const Array1D<Real64> &asol,                // Vector of Absorbed solar energy fractions for each layer
     377             :               Real64 const height,                        // IGU cavity height
     378             :               Real64 const heightt,                       // Window height
     379             :               Real64 const width,                         // Window width
     380             :               const Array1D<Real64> &presure,             // Vector of gas pressures in gaps [N/m2]
     381             :               Array2A_int const iprop,                    // Matrix of gas codes - see mgas definition
     382             :               Array2A<Real64> const frct,                 // Matrix of mass percentages in gap mixtures
     383             :               Array2A<Real64> const xgcon,                // Matrix of constants for gas conductivity calc
     384             :               Array2A<Real64> const xgvis,                // Matrix of constants for gas dynamic viscosity calc
     385             :               Array2A<Real64> const xgcp,                 // Matrix of constants for gas specific heat calc at constant pressure
     386             :               const Array1D<Real64> &xwght,               // Vector of Molecular weights for gasses
     387             :               const Array1D<Real64> &gama,                // Vector of spefic heat ration for low pressure calc
     388             :               const Array1D_int &nmix,                    // Vector of number of gasses in gas mixture of each gap
     389             :               const Array1D_int &SupportPillar,           // Shows whether or not gap have support pillar
     390             :               const Array1D<Real64> &PillarSpacing,       // Pillar spacing for each gap (used in case there is support pillar)
     391             :               const Array1D<Real64> &PillarRadius,        // Pillar radius for each gap (used in case there is support pillar)
     392             :               Array1D<Real64> &theta,                     // Vector of average temperatures of glazing surfaces [K]
     393             :               Array1D<Real64> &LayerDef,                  // Vector of layers deflection. [m]
     394             :               Array1D<Real64> &q,                         // Vector of various heat fluxes [W/m2]
     395             :               Array1D<Real64> &qv,                        // Vector of heat fluxes to each gap by ventillation [W/m2]
     396             :               Real64 &ufactor,                            // Center of glass U-value [W/m2 K]
     397             :               Real64 &sc,                                 // Shading Coefficient
     398             :               Real64 &hflux,                              // Net heat flux between room and window [W/m2]
     399             :               Real64 &hcin,                               // Indoor convective surface heat transfer coefficient  [W/m2 K]
     400             :               Real64 &hcout,                              // Outdoor convective surface heat transfer coefficient [W/m2 K]
     401             :               Real64 &hrin,                               // Indoor radiative surface heat transfer coefficient [W/m2 K]
     402             :               Real64 &hrout,                              // Outdoor radiative surface heat transfer coefficient [W/m2 K]
     403             :               Real64 &hin,                                // Indoor combined film coefficient (if non-zero) [W/m2K]
     404             :               Real64 &hout,                               // Outdoor combined film coefficient (if non-zero) [W/m2K]
     405             :               Array1D<Real64> &hcgas,                     // Convective part of gap effective conductivity (including in and out)
     406             :               Array1D<Real64> &hrgas,                     // Radiative part of gap effective conductivity (including in and out)
     407             :               Real64 &shgc,                               // Solar heat gain coefficient - per ISO 15099
     408             :               int &nperr,                                 // Error code
     409             :               std::string &ErrorMessage,                  // To store error message from tarcog execution
     410             :               Real64 &shgct,                              // Solar heat gain coefficient - per old procedure
     411             :               Real64 &tamb,                               // Outdoor environmental temperature [K]
     412             :               Real64 &troom,                              // Indoor environmental temperature [K]
     413             :               const Array1D_int &ibc,                     // Vector of boundary condition flags (ibc(1) - outdoor, ibc(2) - indoor
     414             :               const Array1D<Real64> &Atop,                // Vector with areas of top openings - between SD layers and top of
     415             :               const Array1D<Real64> &Abot,                // Vector with areas of bottom openings - between SD layers and
     416             :               const Array1D<Real64> &Al,                  // Vector with areas of left-hand side openings - between SD layers and
     417             :               const Array1D<Real64> &Ar,                  // Vector of areas of right-hand side openings - between SD layers and
     418             :               const Array1D<Real64> &Ah,                  // Vector of total areas of holes for each SD [m2]
     419             :               const Array1D<Real64> &SlatThick,           // Thickness of the slat material [m]
     420             :               const Array1D<Real64> &SlatWidth,           // Slat width [m]
     421             :               const Array1D<Real64> &SlatAngle,           // Slat tilt angle [deg]
     422             :               const Array1D<Real64> &SlatCond,            // Conductivity of the slat material [W/m.K]
     423             :               const Array1D<Real64> &SlatSpacing,         // Distance between slats [m]
     424             :               const Array1D<Real64> &SlatCurve,           // Curvature radius of the slat [m]
     425             :               const Array1D<Real64> &vvent,               // Vector of velocities for forced ventilation, for each gap, and for
     426             :               const Array1D<Real64> &tvent,               // Vector of temperatures of ventilation gas for forced ventilation,
     427             :               const Array1D<TARCOGLayerType> &LayerType,  // Glazing layer type flag
     428             :               const Array1D_int &nslice,                  // Vector of numbers of slices in a laminated glazing layers
     429             :               const Array1D<Real64> &LaminateA,           // Left-hand side array for creating slice equations
     430             :               const Array1D<Real64> &LaminateB,           // Right-hand side array for creating slice equations
     431             :               const Array1D<Real64> &sumsol,              // Array of absorbed solar energy fractions for each laminated
     432             :               Array1D<Real64> &hg,                        // Gas conductance of the glazing cavity [W/m2 K]
     433             :               Array1D<Real64> &hr,                        // Radiation conductance of the glazing cavity [W/m2 K]
     434             :               Array1D<Real64> &hs,                        // Thermal conductance of the glazing cavity [W/m2 K]
     435             :               Real64 &he,                                 // External heat transfer coefficient [W/m2 K] - EN673 and ISO 10292 procedure
     436             :               Real64 &hi,                                 // Internal heat transfer coefficient [W/m2 K] - EN673 and ISO 10292 procedure
     437             :               Array1D<Real64> &Ra,                        // Vector of Rayleigh numbers, for each gap
     438             :               Array1D<Real64> &Nu,                        // Vector of Nusselt numbers, for each gap
     439             :               TARCOGGassesParams::Stdrd const standard,   // Calculation standard switch:
     440             :               TARCOGThermalModel const ThermalMod,        // Thermal model:
     441             :               int const Debug_mode,                       // Switch for debug output files:
     442             :               std::string const &Debug_dir,               // Target directory for debug files
     443             :               std::string const &Debug_file,              // File name template for debug files
     444             :               int const win_ID,                           // ID of window (passed by W6)
     445             :               int const igu_ID,                           // ID of the IGU (passed by W6)
     446             :               Real64 &ShadeEmisRatioOut,                  // Ratio of modified to glass emissivity at the outermost glazing surface
     447             :               Real64 &ShadeEmisRatioIn,                   // Ratio of modified to glass emissivity at the innermost glazing surface
     448             :               Real64 &ShadeHcRatioOut,                    // Ratio of modified to unshaded Hc at the outermost glazing surface
     449             :               Real64 &ShadeHcRatioIn,                     // Ratio of modified to unshaded Hc at the innermost glazing surface
     450             :               Real64 &HcUnshadedOut,                      // Hc value at outermost glazing surface of an unshaded subsystem [W/m2 K]
     451             :               Real64 &HcUnshadedIn,                       // Hc value at innermost glazing surface of an unshaded subsystem [W/m2 K]
     452             :               Array1D<Real64> &Keff,                      // Vector of keff values for gaps [W/m.K]
     453             :               Array1D<Real64> &ShadeGapKeffConv,          // Vector of convective keff values for areas above/below
     454             :               Real64 const SDScalar,                      // Factor of Venetian SD layer contribution to convection
     455             :               int const SHGCCalc,                         // SHGC calculation switch:
     456             :               int &NumOfIterations,                       // Number of iterations for reacing solution
     457             :               Real64 const edgeGlCorrFac                  // Edge of glass correction factor
     458             : )
     459             : {
     460             : 
     461             :     /// function attributes:
     462             : 
     463             :     /// INPUTS:
     464             : 
     465             :     /// General:
     466             : 
     467             :     // Argument array dimensioning
     468       37990 :     EP_SIZE_CHECK(gap, maxlay);
     469       37990 :     EP_SIZE_CHECK(GapDefMax, MaxGap);
     470       37990 :     EP_SIZE_CHECK(thick, maxlay);
     471       37990 :     EP_SIZE_CHECK(scon, maxlay);
     472       37990 :     EP_SIZE_CHECK(YoungsMod, maxlay);
     473       37990 :     EP_SIZE_CHECK(PoissonsRat, maxlay);
     474       37990 :     EP_SIZE_CHECK(tir, maxlay2);
     475       37990 :     EP_SIZE_CHECK(emis, maxlay2);
     476       37990 :     EP_SIZE_CHECK(asol, maxlay);
     477       37990 :     EP_SIZE_CHECK(presure, maxlay1);
     478       37990 :     iprop.dim(maxgas, maxlay1);
     479       37990 :     frct.dim(maxgas, maxlay1);
     480       37990 :     xgcon.dim(3, maxgas);
     481       37990 :     xgvis.dim(3, maxgas);
     482       37990 :     xgcp.dim(3, maxgas);
     483       37990 :     EP_SIZE_CHECK(xwght, maxgas);
     484       37990 :     EP_SIZE_CHECK(gama, maxgas);
     485       37990 :     EP_SIZE_CHECK(nmix, maxlay1);
     486       37990 :     EP_SIZE_CHECK(SupportPillar, maxlay);
     487       37990 :     EP_SIZE_CHECK(PillarSpacing, maxlay);
     488       37990 :     EP_SIZE_CHECK(PillarRadius, maxlay);
     489       37990 :     EP_SIZE_CHECK(theta, maxlay2);
     490       37990 :     EP_SIZE_CHECK(LayerDef, maxlay);
     491       37990 :     EP_SIZE_CHECK(q, maxlay3);
     492       37990 :     EP_SIZE_CHECK(qv, maxlay1);
     493       37990 :     EP_SIZE_CHECK(hcgas, maxlay1);
     494       37990 :     EP_SIZE_CHECK(hrgas, maxlay1);
     495       37990 :     EP_SIZE_CHECK(ibc, 2);
     496       37990 :     EP_SIZE_CHECK(Atop, maxlay);
     497       37990 :     EP_SIZE_CHECK(Abot, maxlay);
     498       37990 :     EP_SIZE_CHECK(Al, maxlay);
     499       37990 :     EP_SIZE_CHECK(Ar, maxlay);
     500       37990 :     EP_SIZE_CHECK(Ah, maxlay);
     501       37990 :     EP_SIZE_CHECK(SlatThick, maxlay);
     502       37990 :     EP_SIZE_CHECK(SlatWidth, maxlay);
     503       37990 :     EP_SIZE_CHECK(SlatAngle, maxlay);
     504       37990 :     EP_SIZE_CHECK(SlatCond, maxlay);
     505       37990 :     EP_SIZE_CHECK(SlatSpacing, maxlay);
     506       37990 :     EP_SIZE_CHECK(SlatCurve, maxlay);
     507       37990 :     EP_SIZE_CHECK(vvent, maxlay1);
     508       37990 :     EP_SIZE_CHECK(tvent, maxlay1);
     509       37990 :     EP_SIZE_CHECK(LayerType, maxlay);
     510       37990 :     EP_SIZE_CHECK(nslice, maxlay);
     511       37990 :     EP_SIZE_CHECK(LaminateA, maxlay);
     512       37990 :     EP_SIZE_CHECK(LaminateB, maxlay);
     513       37990 :     EP_SIZE_CHECK(sumsol, maxlay);
     514       37990 :     EP_SIZE_CHECK(hg, maxlay);
     515       37990 :     EP_SIZE_CHECK(hr, maxlay);
     516       37990 :     EP_SIZE_CHECK(hs, maxlay);
     517       37990 :     EP_SIZE_CHECK(Ra, maxlay);
     518       37990 :     EP_SIZE_CHECK(Nu, maxlay);
     519       37990 :     EP_SIZE_CHECK(Keff, maxlay);
     520       37990 :     EP_SIZE_CHECK(ShadeGapKeffConv, MaxGap);
     521             : 
     522             :     // Locals
     523             :     //    1 - ISO15099
     524             :     //    2 - ISO10292
     525             :     //    3 - EN673
     526             :     //    0 - ISO15099
     527             :     //    1 - Thermal model 1
     528             :     //    2 - Thermal model 2 (not implemented)
     529             :     //    0 - don't create debug output files
     530             :     //    1 - append results to existing debug output file
     531             :     //    2 - store results in new debug output file
     532             :     //   3 - save in-between results (in all iterations) to existing debug file
     533             :     //    0 - do not perform SHGC calculations
     534             :     //    1 - perform SHGC calculations
     535             : 
     536             :     /// Environment related:
     537             :     //    0 - windward
     538             :     //    1 - leeward
     539             :     //    0 - both Tsky and Esky are specified
     540             :     //    1 - Tsky specified; esky = 1
     541             :     //    2 - Swinbank model for effective sky emittance
     542             :     //    3 - IR radiance is provided from external source
     543             :     // integer, intent(in) :: mgas  ! Flag for gas property constants:
     544             :     //    0 - gas constants supplied (through gcon, gvis and gcp arrays)
     545             :     //    1 - use internal constants; when internal then first index
     546             :     //        in gcon, gciv and gcp is:
     547             :     //          1 - Air
     548             :     //          2 - Argon
     549             :     //          3 - Krypton
     550             :     //          4 - Xenon
     551             :     //    0 - h to be calculated
     552             :     //    1 - combined film coefficient h prescribed
     553             :     //    2 - convective film coefficient (hc) prescibed
     554             :     // Also used in old algorithms for calculating h, accessible through negative
     555             :     // values for flags:
     556             :     //    -1 - old SPC142 correlation
     557             :     //    -2 - Klems-Yazdanian correlation (applicable to outdoor only)
     558             :     //    -3 - Kimura correlation (applicable to outdoor only)
     559             : 
     560             :     /// Layers:
     561             :     //    0 - Specular layer
     562             :     //    1 - Venetian blind (SD)
     563             :     //    2 - Woven shade (SD) (not implemented)
     564             :     //    3 - Diffuse shade
     565             : 
     566             :     /// Venetians:
     567             :     // glazing cavity [m2]
     568             :     // bottom of glazing cavity [m2]
     569             :     // left end of glazing cavity [m2]
     570             :     // right end of glazing cavity [m2]
     571             :     // outdoor and indoor environment [m/s]
     572             :     // for each gap, and for outdoor and indoor environment
     573             : 
     574             :     /// Laminates:
     575             :     // (0 - monolithic layer)
     576             :     // glazing layer [W/m2]
     577             : 
     578             :     /// Gaps:
     579             :     //  (A, B, C for max of 10 gasses)
     580             :     //  (A, B, C for max of 10 gasses)
     581             :     //  (A, B, C for max of 10 gasses)
     582             : 
     583             :     //   0 - does not have support pillar
     584             :     //   1 - have support pillar
     585             : 
     586             :     // (used in conjunction with Thermal Model 2; otherwise, this value is ignored by TARCOG)
     587             :     // - REAL(r64) value between 0 (SD contribution to convection is neglected) and
     588             :     //  1 (SD treated as "closed" - as if it is a glass layer with thermal
     589             :     //  properties of SD slat material)
     590             : 
     591             :     // Deflection
     592             :     //    0 - no deflection calculations
     593             :     //    1 - perform deflection calculation (input is Pressure/Temp)
     594             :     //    2 - perform deflection calculation (input is measured deflection)
     595             :     // if CalcDeflection = 2. In case CalcDeflection = 1 it will return
     596             :     // recalculated gap widths. [m]
     597             : 
     598             :     //// INPUTS/OUTPUTS:
     599             : 
     600             :     /// OUTPUTS:
     601             :     /// Overall:
     602             : 
     603             :     /// Layers:
     604             :     // depending on element index:
     605             :     //    1 - qout (heat flux from outer-most glazing surface to outdoor space)
     606             :     //    2*i = qpane(i) (heat flux through i-th glazing layer
     607             :     //    2*i-1 = qgap(i) (heat flux from i-th glazing cavity to indoor-faced
     608             :     //                      surface of the adjacent glazing layer)
     609             :     //    2*nlayer + 1 = qin (heat flux from indoor space to inner-most glazing
     610             :     //                        surface)
     611             : 
     612             :     /// Gaps:
     613             :     //      - EN673 and ISO 10292 procedure
     614             :     //      - EN673 and ISO 10292 procedure
     615             :     //      - EN673 and ISO 10292 procedure
     616             : 
     617             :     /// Shading related:
     618             :     //  SD layers [W/m.K]
     619             : 
     620             :     // temporary variables stored between deflection iterations because tarcog need to produce result with exact same
     621             :     // input variables
     622             :     Real64 eskyTemp;
     623             :     Real64 trminTemp;
     624             :     Real64 hinTemp;
     625             :     Real64 houtTemp;
     626             : 
     627             :     // REAL(r64), dimension(maxlay) ::  sol ! Vector of Absorbed solar energy for each layer [W/m2] = dir*asol
     628             : 
     629             :     Real64 dtmax;
     630             :     int i;
     631             :     int counter;
     632             : 
     633             :     //!! Body of TARCOG90
     634             : 
     635       37990 :     he = 0.0;
     636       37990 :     hi = 0.0;
     637       37990 :     hcin = 0.0;
     638       37990 :     hrin = 0.0;
     639       37990 :     hcout = 0.0;
     640       37990 :     hrout = 0.0;
     641       37990 :     LayerDef = 0.0;
     642       37990 :     dtmax = 0.0;
     643       37990 :     i = 0;
     644       37990 :     counter = 0;
     645       37990 :     eskyTemp = 0.0;
     646       37990 :     trminTemp = 0.0;
     647       37990 :     hinTemp = 0.0;
     648       37990 :     houtTemp = 0.0;
     649       37990 :     ErrorMessage = "Normal Termination";
     650             : 
     651      106572 :     for (i = 1; i <= nlayer - 1; ++i) {
     652       68582 :         state.dataTARCOGMain->CurGap(i) = gap(i);
     653             :     }
     654             : 
     655       73962 :     Files files;
     656             : 
     657             :     //  Prepare common debug variables:
     658       37990 :     PrepDebugFilesAndVariables(state, files, Debug_dir, Debug_file, Debug_mode, win_ID, igu_ID);
     659             : 
     660             :     // Check input arguments:
     661       37990 :     nperr = ArgCheck(state,
     662             :                      files,
     663             :                      nlayer,
     664             :                      iwd,
     665             :                      tout,
     666             :                      tind,
     667             :                      trmin,
     668             :                      wso,
     669             :                      wsi,
     670             :                      dir,
     671             :                      outir,
     672             :                      isky,
     673             :                      tsky,
     674             :                      esky,
     675             :                      fclr,
     676             :                      VacuumPressure,
     677             :                      VacuumMaxGapThickness,
     678             :                      CalcDeflection,
     679             :                      Pa,
     680             :                      Pini,
     681             :                      Tini,
     682             :                      gap,
     683             :                      GapDefMax,
     684             :                      thick,
     685             :                      scon,
     686             :                      YoungsMod,
     687             :                      PoissonsRat,
     688             :                      tir,
     689             :                      emis,
     690             :                      totsol,
     691             :                      tilt,
     692             :                      asol,
     693             :                      height,
     694             :                      heightt,
     695             :                      width,
     696             :                      presure,
     697             :                      iprop,
     698             :                      frct,
     699             :                      xgcon,
     700             :                      xgvis,
     701             :                      xgcp,
     702             :                      xwght,
     703             :                      gama,
     704             :                      nmix,
     705             :                      SupportPillar,
     706             :                      PillarSpacing,
     707             :                      PillarRadius,
     708             :                      hin,
     709             :                      hout,
     710             :                      ibc,
     711             :                      Atop,
     712             :                      Abot,
     713             :                      Al,
     714             :                      Ar,
     715             :                      Ah,
     716             :                      SlatThick,
     717             :                      SlatWidth,
     718             :                      SlatAngle,
     719             :                      SlatCond,
     720             :                      SlatSpacing,
     721             :                      SlatCurve,
     722             :                      vvent,
     723             :                      tvent,
     724             :                      LayerType,
     725             :                      nslice,
     726             :                      LaminateA,
     727             :                      LaminateB,
     728             :                      sumsol,
     729             :                      standard,
     730             :                      ThermalMod,
     731             :                      SDScalar,
     732             :                      ErrorMessage);
     733             : 
     734             :     // in case of provided deflected gap widths just store deflected widhts before temperatures calculation
     735             :     // deflections in this case do not depend of temperatures and it should be calculated before to avoid
     736             :     // one extra call of temperatures calculations
     737       37990 :     if (CalcDeflection == DeflectionCalculation::GAP_WIDTHS) {
     738        2018 :         PanesDeflection(CalcDeflection,
     739             :                         width,
     740             :                         height,
     741             :                         nlayer,
     742             :                         Pa,
     743             :                         Pini,
     744             :                         Tini,
     745             :                         thick,
     746             :                         gap,
     747             :                         GapDefMax,
     748        2018 :                         state.dataTARCOGMain->GapDefMean,
     749             :                         theta,
     750             :                         YoungsMod,
     751             :                         PoissonsRat,
     752             :                         LayerDef,
     753             :                         nperr,
     754             :                         ErrorMessage);
     755        8072 :         for (i = 1; i <= nlayer - 1; ++i) {
     756        6054 :             state.dataTARCOGMain->CurGap(i) = state.dataTARCOGMain->GapDefMean(i);
     757             :         } // do i = 1, nlayer - 1
     758             :     }
     759             : 
     760             :     // in case of deflection calculation for temperature & pressure input some variables needs to be stored because
     761             :     // Calc_ISO15099 and EN673 routines will change them and for deflection recalculation everything needs to be
     762             :     // called in same way except for changed gap widths
     763       37990 :     if (CalcDeflection == DeflectionCalculation::TEMPERATURE) {
     764        2018 :         eskyTemp = esky;
     765        2018 :         trminTemp = trmin;
     766        2018 :         hinTemp = hin;
     767        2018 :         houtTemp = hout;
     768        2018 :         state.dataTARCOGMain->sconTemp = scon;
     769        2018 :         state.dataTARCOGMain->thickTemp = thick;
     770             :     }
     771             : 
     772       37990 :     if (GoAhead(nperr)) {
     773             : 
     774       37990 :         if (standard == TARCOGGassesParams::Stdrd::ISO15099) {
     775       75980 :             Calc_ISO15099(state,
     776             :                           files,
     777             :                           nlayer,
     778             :                           iwd,
     779             :                           tout,
     780             :                           tind,
     781             :                           trmin,
     782             :                           wso,
     783             :                           wsi,
     784             :                           dir,
     785             :                           outir,
     786             :                           isky,
     787             :                           tsky,
     788             :                           esky,
     789             :                           fclr,
     790             :                           VacuumPressure,
     791             :                           VacuumMaxGapThickness,
     792       37990 :                           state.dataTARCOGMain->CurGap,
     793             :                           thick,
     794             :                           scon,
     795             :                           tir,
     796             :                           emis,
     797             :                           totsol,
     798             :                           tilt,
     799             :                           asol,
     800             :                           height,
     801             :                           heightt,
     802             :                           width,
     803             :                           presure,
     804             :                           iprop,
     805             :                           frct,
     806             :                           xgcon,
     807             :                           xgvis,
     808             :                           xgcp,
     809             :                           xwght,
     810             :                           gama,
     811             :                           nmix,
     812             :                           SupportPillar,
     813             :                           PillarSpacing,
     814             :                           PillarRadius,
     815             :                           theta,
     816             :                           q,
     817             :                           qv,
     818             :                           ufactor,
     819             :                           sc,
     820             :                           hflux,
     821             :                           hcin,
     822             :                           hcout,
     823             :                           hrin,
     824             :                           hrout,
     825             :                           hin,
     826             :                           hout,
     827             :                           hcgas,
     828             :                           hrgas,
     829             :                           shgc,
     830             :                           nperr,
     831             :                           ErrorMessage,
     832             :                           shgct,
     833             :                           tamb,
     834             :                           troom,
     835             :                           ibc,
     836             :                           Atop,
     837             :                           Abot,
     838             :                           Al,
     839             :                           Ar,
     840             :                           Ah,
     841             :                           SlatThick,
     842             :                           SlatWidth,
     843             :                           SlatAngle,
     844             :                           SlatCond,
     845             :                           SlatSpacing,
     846             :                           SlatCurve,
     847             :                           vvent,
     848             :                           tvent,
     849             :                           LayerType,
     850             :                           nslice,
     851             :                           LaminateA,
     852             :                           LaminateB,
     853             :                           sumsol,
     854             :                           Ra,
     855             :                           Nu,
     856             :                           ThermalMod,
     857             :                           Debug_mode,
     858             :                           ShadeEmisRatioOut,
     859             :                           ShadeEmisRatioIn,
     860             :                           ShadeHcRatioOut,
     861             :                           ShadeHcRatioIn,
     862             :                           HcUnshadedOut,
     863             :                           HcUnshadedIn,
     864             :                           Keff,
     865             :                           ShadeGapKeffConv,
     866             :                           SDScalar,
     867             :                           SHGCCalc,
     868             :                           NumOfIterations,
     869             :                           edgeGlCorrFac);
     870           0 :         } else if ((standard == TARCOGGassesParams::Stdrd::EN673) || (standard == TARCOGGassesParams::Stdrd::EN673Design)) {
     871           0 :             Calc_EN673(state,
     872             :                        files,
     873             :                        standard,
     874             :                        nlayer,
     875             :                        tout,
     876             :                        tind,
     877           0 :                        state.dataTARCOGMain->CurGap,
     878             :                        thick,
     879             :                        scon,
     880             :                        emis,
     881             :                        totsol,
     882             :                        tilt,
     883             :                        dir,
     884             :                        asol,
     885             :                        presure,
     886             :                        iprop,
     887             :                        frct,
     888             :                        nmix,
     889             :                        xgcon,
     890             :                        xgvis,
     891             :                        xgcp,
     892             :                        xwght,
     893             :                        theta,
     894             :                        ufactor,
     895             :                        hcin,
     896             :                        hin,
     897             :                        hout,
     898             :                        shgc,
     899             :                        nperr,
     900             :                        ErrorMessage,
     901             :                        ibc,
     902             :                        hg,
     903             :                        hr,
     904             :                        hs,
     905             :                        Ra,
     906             :                        Nu);
     907             :         } else {
     908             :         }
     909             :     }
     910             : 
     911             :     // Deflection calculations in case of temperature & pressure inputs
     912       37990 :     if (GoAhead(nperr)) {
     913       37990 :         if (!(GoAhead(nperr))) {
     914           0 :             return;
     915             :         }
     916             : 
     917       37990 :         if (CalcDeflection == DeflectionCalculation::TEMPERATURE) {
     918        2018 :             state.dataTARCOGMain->converged = false;
     919        2018 :             while (!(state.dataTARCOGMain->converged)) {
     920        2018 :                 PanesDeflection(CalcDeflection,
     921             :                                 width,
     922             :                                 height,
     923             :                                 nlayer,
     924             :                                 Pa,
     925             :                                 Pini,
     926             :                                 Tini,
     927             :                                 thick,
     928             :                                 gap,
     929             :                                 GapDefMax,
     930        2018 :                                 state.dataTARCOGMain->GapDefMean,
     931             :                                 theta,
     932             :                                 YoungsMod,
     933             :                                 PoissonsRat,
     934             :                                 LayerDef,
     935             :                                 nperr,
     936             :                                 ErrorMessage);
     937             : 
     938        2018 :                 if (!(GoAhead(nperr))) {
     939        2018 :                     return;
     940             :                 }
     941             : 
     942             :                 // store temperatures before new calculations are performed. This is necessary in order to determine
     943           0 :                 for (i = 1; i <= 2 * nlayer; ++i) {
     944           0 :                     state.dataTARCOGMain->told(i) = theta(i);
     945             :                 } // do i=1, 2*nlayer
     946             : 
     947             :                 // before calling thermal calculations, return back old variables
     948           0 :                 esky = eskyTemp;
     949           0 :                 trmin = trminTemp;
     950           0 :                 hin = hinTemp;
     951           0 :                 hout = houtTemp;
     952           0 :                 scon = state.dataTARCOGMain->sconTemp;
     953           0 :                 thick = state.dataTARCOGMain->thickTemp;
     954             : 
     955             :                 // after performed deflection recalculate temperatures with new gap widths
     956           0 :                 if (standard == TARCOGGassesParams::Stdrd::ISO15099) {
     957           0 :                     Calc_ISO15099(state,
     958             :                                   files,
     959             :                                   nlayer,
     960             :                                   iwd,
     961             :                                   tout,
     962             :                                   tind,
     963             :                                   trmin,
     964             :                                   wso,
     965             :                                   wsi,
     966             :                                   dir,
     967             :                                   outir,
     968             :                                   isky,
     969             :                                   tsky,
     970             :                                   esky,
     971             :                                   fclr,
     972             :                                   VacuumPressure,
     973             :                                   VacuumMaxGapThickness,
     974           0 :                                   state.dataTARCOGMain->GapDefMean,
     975             :                                   thick,
     976             :                                   scon,
     977             :                                   tir,
     978             :                                   emis,
     979             :                                   totsol,
     980             :                                   tilt,
     981             :                                   asol,
     982             :                                   height,
     983             :                                   heightt,
     984             :                                   width,
     985             :                                   presure,
     986             :                                   iprop,
     987             :                                   frct,
     988             :                                   xgcon,
     989             :                                   xgvis,
     990             :                                   xgcp,
     991             :                                   xwght,
     992             :                                   gama,
     993             :                                   nmix,
     994             :                                   SupportPillar,
     995             :                                   PillarSpacing,
     996             :                                   PillarRadius,
     997             :                                   theta,
     998             :                                   q,
     999             :                                   qv,
    1000             :                                   ufactor,
    1001             :                                   sc,
    1002             :                                   hflux,
    1003             :                                   hcin,
    1004             :                                   hcout,
    1005             :                                   hrin,
    1006             :                                   hrout,
    1007             :                                   hin,
    1008             :                                   hout,
    1009             :                                   hcgas,
    1010             :                                   hrgas,
    1011             :                                   shgc,
    1012             :                                   nperr,
    1013             :                                   ErrorMessage,
    1014             :                                   shgct,
    1015             :                                   tamb,
    1016             :                                   troom,
    1017             :                                   ibc,
    1018             :                                   Atop,
    1019             :                                   Abot,
    1020             :                                   Al,
    1021             :                                   Ar,
    1022             :                                   Ah,
    1023             :                                   SlatThick,
    1024             :                                   SlatWidth,
    1025             :                                   SlatAngle,
    1026             :                                   SlatCond,
    1027             :                                   SlatSpacing,
    1028             :                                   SlatCurve,
    1029             :                                   vvent,
    1030             :                                   tvent,
    1031             :                                   LayerType,
    1032             :                                   nslice,
    1033             :                                   LaminateA,
    1034             :                                   LaminateB,
    1035             :                                   sumsol,
    1036             :                                   Ra,
    1037             :                                   Nu,
    1038             :                                   ThermalMod,
    1039             :                                   Debug_mode,
    1040             :                                   ShadeEmisRatioOut,
    1041             :                                   ShadeEmisRatioIn,
    1042             :                                   ShadeHcRatioOut,
    1043             :                                   ShadeHcRatioIn,
    1044             :                                   HcUnshadedOut,
    1045             :                                   HcUnshadedIn,
    1046             :                                   Keff,
    1047             :                                   ShadeGapKeffConv,
    1048             :                                   SDScalar,
    1049             :                                   SHGCCalc,
    1050             :                                   NumOfIterations,
    1051             :                                   edgeGlCorrFac);
    1052           0 :                 } else if ((standard == TARCOGGassesParams::Stdrd::EN673) || (standard == TARCOGGassesParams::Stdrd::EN673Design)) {
    1053           0 :                     Calc_EN673(state,
    1054             :                                files,
    1055             :                                standard,
    1056             :                                nlayer,
    1057             :                                tout,
    1058             :                                tind,
    1059           0 :                                state.dataTARCOGMain->GapDefMean,
    1060             :                                thick,
    1061             :                                scon,
    1062             :                                emis,
    1063             :                                totsol,
    1064             :                                tilt,
    1065             :                                dir,
    1066             :                                asol,
    1067             :                                presure,
    1068             :                                iprop,
    1069             :                                frct,
    1070             :                                nmix,
    1071             :                                xgcon,
    1072             :                                xgvis,
    1073             :                                xgcp,
    1074             :                                xwght,
    1075             :                                theta,
    1076             :                                ufactor,
    1077             :                                hcin,
    1078             :                                hin,
    1079             :                                hout,
    1080             :                                shgc,
    1081             :                                nperr,
    1082             :                                ErrorMessage,
    1083             :                                ibc,
    1084             :                                hg,
    1085             :                                hr,
    1086             :                                hs,
    1087             :                                Ra,
    1088             :                                Nu);
    1089             :                 } else {
    1090             :                 } // select case (standard)
    1091             : 
    1092           0 :                 if (!(GoAhead(nperr))) {
    1093           0 :                     return;
    1094             :                 }
    1095             : 
    1096             :                 // calc error
    1097           0 :                 dtmax = 0.0;
    1098           0 :                 for (i = 1; i <= 2 * nlayer; ++i) {
    1099           0 :                     dtmax = std::abs(state.dataTARCOGMain->told(i) - theta(i));
    1100             :                 } // do i=1, 2*nlayer
    1101             : 
    1102           0 :                 if (dtmax < DeflectionErrorMargin) {
    1103           0 :                     state.dataTARCOGMain->converged = true;
    1104             :                 }
    1105           0 :                 ++counter;
    1106             : 
    1107           0 :                 if (counter > DeflectionMaxIterations) {
    1108           0 :                     state.dataTARCOGMain->converged = true;
    1109           0 :                     nperr = 41; // Deflection calculations failed to converge
    1110           0 :                     ErrorMessage = "Deflection calculations failed to converge";
    1111             :                 }
    1112             :             } // do while (.not.(converged))
    1113             :         }     // if ((CalcDeflection.eq.DeflectionCalculation::TEMPERATURE).or.(CalcDeflection.eq.DeflectionCalculation::GAP_WIDTHS)) then
    1114             :     }         // if (GoAhead(nperr)) then
    1115             : 
    1116       35972 :     FinishDebugOutputFiles(files, nperr);
    1117             : }
    1118             : 
    1119        2313 : } // namespace EnergyPlus::TARCOGMain

Generated by: LCOV version 1.13