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 : // C++ Headers
49 : #include <cassert>
50 : #include <cstddef>
51 : #include <functional>
52 : #include <limits>
53 :
54 : // ObjexxFCL Headers
55 : #include <ObjexxFCL/Fmath.hh>
56 :
57 : // EnergyPlus Headers
58 : #include <EnergyPlus/Data/EnergyPlusData.hh>
59 : #include <EnergyPlus/DataIPShortCuts.hh>
60 : #include <EnergyPlus/FluidProperties.hh>
61 : #include <EnergyPlus/General.hh>
62 : #include <EnergyPlus/InputProcessing/InputProcessor.hh>
63 : #include <EnergyPlus/UtilityRoutines.hh>
64 :
65 : namespace EnergyPlus {
66 :
67 : namespace FluidProperties {
68 :
69 : // MODULE INFORMATION:
70 : // AUTHOR Mike Turner
71 : // DATE WRITTEN 10 December 99
72 : // MODIFIED Rick Strand (April 2000, May 2000)
73 : // Simon Rees (May, June 2002)
74 : // Rick Strand (June 2004)
75 : // Linda Lawrie (March 2008)
76 : // RE-ENGINEERED Rick Strand (April 2000, May 2000)
77 :
78 : // PURPOSE OF THIS MODULE:
79 : // This module contains subroutines which determine and return properties
80 : // of materials including enthalpy, quality, specific heat, and density.
81 : // The module uses InputProcessor to read the material type and the
82 : // associated charts from IN.IDF. The module is only as powerful as the
83 : // amount of data loaded into this file.
84 :
85 : // METHODOLOGY EMPLOYED:
86 : // The module will first check if the current refrigerant has been read
87 : // in yet. If not, it will get the data from IN.IDF and "store" it into
88 : // a set of variables. Any future iterations with that refrigerant will
89 : // simply retrieve the data from storage instead of reading from the .IDF
90 : // file again. After the data is made available, the module uses input
91 : // temperatures, pressures, and either quality or enthalpy to locate the
92 : // state point and choose the proper routine. Finally, it performs a
93 : // double interpolation between temperatures and pressures or qualities
94 : // which surround the point on a chart specified by the input conditions.
95 : // The program is designed to work on either side of or under the vapor
96 : // dome. This data can be added as needed.
97 : // Where properties are invalid at particular pressure/temperature points
98 : // in the data input file, zeros have to be inserted. This is necessary
99 : // as the data structures are rectangular. The zero values are used to detect
100 : // bounds of the data and issue appropriate warnings.
101 : // Properties of liquids (e.g. water) can be specified as glycol properties by
102 : // supplying the same data for concentrations of 0.0 and 1.0 only.
103 : // Temperature data has to be supplied in ascending order only.
104 :
105 : // Data
106 : // MODULE PARAMETER DEFINITIONS
107 :
108 : // DERIVED TYPE DEFINITIONS
109 :
110 : // INTERFACE BLOCK SPECIFICATIONS
111 : // na
112 :
113 : // MODULE VARIABLE DECLARATIONS
114 :
115 : // ACCESSIBLE SPECIFICATIONS OF MODULE SUBROUTINES OR FUNCTONS:
116 :
117 : // Object Data
118 :
119 : #ifdef EP_cache_GlycolSpecificHeat
120 771 : std::array<cached_tsh, t_sh_cache_size> cached_t_sh;
121 : #endif
122 : // Data Initializer Forward Declarations
123 : // See GetFluidPropertiesData "SUBROUTINE LOCAL DATA" for actual data.
124 :
125 : // MODULE SUBROUTINES:
126 :
127 : // Functions
128 :
129 469 : void InitializeGlycRoutines()
130 : {
131 : #ifdef EP_cache_GlycolSpecificHeat
132 469 : cached_t_sh.fill({});
133 : #endif
134 469 : }
135 :
136 469 : void GetFluidPropertiesData(EnergyPlusData &state)
137 : {
138 :
139 : // SUBROUTINE INFORMATION:
140 : // AUTHOR Rick Strand
141 : // DATE WRITTEN April 2000
142 : // MODIFIED May 2002 Simon Rees (Added saturated pressure data retreaval)
143 : // June 2004 Rick Strand (Added glycol defaults and modified glycol data structure)
144 : // August 2011 Linda Lawrie (Added steam as default refrigerant)
145 : // August 2012 Linda Lawrie (more error checks on data input)
146 : // RE-ENGINEERED na
147 :
148 : // PURPOSE OF THIS SUBROUTINE:
149 : // The purpose of this subroutine is to read in all of the fluid
150 : // property data contained in the user input file.
151 :
152 : // METHODOLOGY EMPLOYED:
153 : // Standard EnergyPlus methodology. Derived type portions are
154 : // allocated as necessary as the data is read into the program.
155 :
156 : // REFERENCES:
157 : // na
158 :
159 : // Using/Aliasing
160 : using namespace std::placeholders; // For use with 'std::bind' in Array initializers
161 :
162 : // Locals
163 : // SUBROUTINE ARGUMENT DEFINITIONS:
164 : // na
165 :
166 : // SUBROUTINE PARAMETER DEFINITIONS:
167 469 : Real64 constexpr PressToler(1.0); // Some reasonable value for comparisons
168 : static constexpr std::string_view RoutineName("GetFluidPropertiesData: ");
169 :
170 : // INTERFACE BLOCK SPECIFICATIONS
171 : // na
172 :
173 : // DERIVED TYPE DEFINITIONS
174 :
175 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
176 938 : Array1D_string Alphas; // Reads string value from input file
177 938 : Array1D_string cAlphaFieldNames; // field names for alpha fields
178 938 : Array1D_string cNumericFieldNames; // field names for numeric fields
179 : int Loop; // DO loop counter (various uses)
180 : int NumAlphas; // States which alpha value to read from a "Number" line
181 938 : Array1D<Real64> Numbers; // brings in data from IP
182 938 : Array1D_bool lAlphaFieldBlanks; // logical for blank alpha fields
183 938 : Array1D_bool lNumericFieldBlanks; // logical for blank numeric fields
184 : int NumNumbers; // States which number value to read from a "Numbers" line
185 : int MaxAlphas; // maximum number of alphas
186 : int MaxNumbers; // maximum number of numbers
187 : int Status; // Either 1 "object found" or -1 "not found" (also used as temp)
188 : int InData;
189 : int TempLoop;
190 : int NumOfFluidTempArrays;
191 : int NumOfSatFluidPropArrays;
192 : int NumOfSHFluidPropArrays;
193 : int NumOfGlyFluidPropArrays;
194 938 : std::string TempsName;
195 : bool FirstSHMatch;
196 : int NumOfPressPts;
197 : int NumOfConcPts;
198 469 : bool ErrorsFound(false);
199 : int Index;
200 : int NumOfGlyConcs;
201 : bool GlycolFound;
202 : int NumOfOptionalInput;
203 938 : std::string CurrentModuleObject; // for ease in renaming.
204 : Real64 pTemp;
205 : int iTemp;
206 : int j;
207 : int FluidNum;
208 :
209 : // SUBROUTINE LOCAL DATA:
210 :
211 : // Note two methods of Array initialization in use:
212 : // - Fixed list of values. The second parameter is an initializer list (brace
213 : // delimited list of numbers).
214 : // - Initializer function. The second parameter is the function name.
215 : // In several cases we need to pass water data to the initializer, but an
216 : // Array initializer only takes one argument. std::bind is used to convert the
217 : // actual initializer into a function of one argument.
218 :
219 : // For default "glycol" fluids of Water, Ethylene Glycol, and Propylene Glycol
220 :
221 : static constexpr std::array<Real64, DefaultNumGlyTemps> DefaultGlycolTemps = {
222 : -35.0, -30.0, -25.0, -20.0, -15.0, -10.0, -5.0, 0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0,
223 : 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0}; // 33 total temperature
224 : // points
225 :
226 : static constexpr std::array<Real64, DefaultNumGlyConcs> DefaultGlycolConcs = {
227 : 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}; // 10 total concentration points
228 :
229 : static constexpr std::array<Real64, DefaultNumGlyTemps> DefaultWaterCpData = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
230 : 4217.0, 4198.0, 4191.0, 4185.0, 4181.0, 4179.0, 4180.0,
231 : 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0,
232 : 4192.0, 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0,
233 : 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}; // in J/kg-K
234 :
235 : static constexpr std::array<Real64, DefaultNumGlyTemps> DefaultWaterViscData = {
236 : 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 1.7912e-3, 1.5183e-3, 1.306e-3, 1.1376e-3,
237 : 1.0016e-3, 0.8901e-3, 0.7974e-3, 0.7193e-3, 0.653e-3, 0.5961e-3, 0.5468e-3, 0.504e-3, 0.4664e-3, 0.4332e-3, 0.4039e-3,
238 : 0.3777e-3, 0.3543e-3, 0.3333e-3, 0.3144e-3, 0.2973e-3, 0.2817e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3}; // in Pa-s
239 :
240 : static constexpr std::array<Real64, DefaultNumGlyTemps> DefaultWaterRhoData = {
241 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.8, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2,
242 : 988.0, 985.7, 983.2, 980.5, 977.7, 974.8, 971.8, 968.6, 965.3, 961.9, 958.3, 0.0, 0.0, 0.0, 0.0, 0.0}; // in kg/m3
243 :
244 : static constexpr std::array<Real64, DefaultNumGlyTemps> DefaultWaterCondData = {
245 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893, 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373,
246 : 0.6436, 0.6492, 0.6543, 0.659, 0.6631, 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}; // in W/mK
247 :
248 : // Ethylene Glycol Data: Specific Heat in J/(kg-k)
249 :
250 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultEthGlyCpData = {
251 : {
252 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0,
253 : 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, 4192.0,
254 : 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData
255 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3937.0, 3946.0, 3954.0, 3963.0,
256 : 3972.0, 3981.0, 3989.0, 3998.0, 4007.0, 4015.0, 4024.0, 4033.0, 4042.0, 4050.0, 4059.0,
257 : 4068.0, 4077.0, 4085.0, 4094.0, 4103.0, 4112.0, 4120.0, 4129.0, 4138.0, 4147.0, 4155.0}, // Conc=0.1
258 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3757.0, 3769.0, 3780.0, 3792.0, 3803.0,
259 : 3815.0, 3826.0, 3838.0, 3849.0, 3861.0, 3872.0, 3884.0, 3895.0, 3907.0, 3918.0, 3930.0,
260 : 3941.0, 3953.0, 3964.0, 3976.0, 3987.0, 3999.0, 4010.0, 4022.0, 4033.0, 4045.0, 4056.0}, // Conc=0.2
261 : {0.0, 0.0, 0.0, 0.0, 0.0, 3560.0, 3574.0, 3589.0, 3603.0, 3617.0, 3631.0,
262 : 3645.0, 3660.0, 3674.0, 3688.0, 3702.0, 3716.0, 3730.0, 3745.0, 3759.0, 3773.0, 3787.0,
263 : 3801.0, 3816.0, 3830.0, 3844.0, 3858.0, 3872.0, 3886.0, 3901.0, 3915.0, 3929.0, 3943.0}, // Conc=0.3
264 : {0.0, 0.0, 0.0, 3334.0, 3351.0, 3367.0, 3384.0, 3401.0, 3418.0, 3435.0, 3451.0,
265 : 3468.0, 3485.0, 3502.0, 3518.0, 3535.0, 3552.0, 3569.0, 3585.0, 3602.0, 3619.0, 3636.0,
266 : 3653.0, 3669.0, 3686.0, 3703.0, 3720.0, 3736.0, 3753.0, 3770.0, 3787.0, 3804.0, 3820.0}, // Conc=0.4
267 : {3068.0, 3088.0, 3107.0, 3126.0, 3145.0, 3165.0, 3184.0, 3203.0, 3223.0, 3242.0, 3261.0,
268 : 3281.0, 3300.0, 3319.0, 3339.0, 3358.0, 3377.0, 3396.0, 3416.0, 3435.0, 3454.0, 3474.0,
269 : 3493.0, 3512.0, 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, 3647.0, 3667.0, 3686.0}, // Conc=0.5
270 : {2844.0, 2866.0, 2888.0, 2909.0, 2931.0, 2953.0, 2975.0, 2997.0, 3018.0, 3040.0, 3062.0,
271 : 3084.0, 3106.0, 3127.0, 3149.0, 3171.0, 3193.0, 3215.0, 3236.0, 3258.0, 3280.0, 3302.0,
272 : 3324.0, 3345.0, 3367.0, 3389.0, 3411.0, 3433.0, 3454.0, 3476.0, 3498.0, 3520.0, 3542.0}, // Conc=0.6
273 : {2612.0, 2636.0, 2660.0, 2685.0, 2709.0, 2733.0, 2757.0, 2782.0, 2806.0, 2830.0, 2854.0,
274 : 2878.0, 2903.0, 2927.0, 2951.0, 2975.0, 3000.0, 3024.0, 3048.0, 3072.0, 3097.0, 3121.0,
275 : 3145.0, 3169.0, 3193.0, 3218.0, 3242.0, 3266.0, 3290.0, 3315.0, 3339.0, 3363.0, 3387.0}, // Conc=0.7
276 : {2370.0, 2397.0, 2423.0, 2450.0, 2477.0, 2503.0, 2530.0, 2556.0, 2583.0, 2610.0, 2636.0,
277 : 2663.0, 2690.0, 2716.0, 2743.0, 2770.0, 2796.0, 2823.0, 2850.0, 2876.0, 2903.0, 2929.0,
278 : 2956.0, 2983.0, 3009.0, 3036.0, 3063.0, 3089.0, 3116.0, 3143.0, 3169.0, 3196.0, 3223.0}, // Conc=0.8
279 : {0.0, 0.0, 2177.0, 2206.0, 2235.0, 2264.0, 2293.0, 2322.0, 2351.0, 2380.0, 2409.0,
280 : 2438.0, 2467.0, 2496.0, 2525.0, 2554.0, 2583.0, 2612.0, 2641.0, 2670.0, 2699.0, 2728.0,
281 : 2757.0, 2786.0, 2815.0, 2844.0, 2873.0, 2902.0, 2931.0, 2960.0, 2989.0, 3018.0, 3047.0} // Conc=0.9
282 : }};
283 :
284 : // Ethylene Glycol Data: Viscosity in mPa-s
285 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultEthGlyViscData = {{
286 : {0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 1.7912e-3, 1.5183e-3, 1.306e-3, 1.1376e-3,
287 : 1.0016e-3, 0.8901e-3, 0.7974e-3, 0.7193e-3, 0.653e-3, 0.5961e-3, 0.5468e-3, 0.504e-3, 0.4664e-3, 0.4332e-3, 0.4039e-3,
288 : 0.3777e-3, 0.3543e-3, 0.3333e-3, 0.3144e-3, 0.2973e-3, 0.2817e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3},
289 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 2.08e-03, 1.79e-03, 1.56e-03, 1.37e-03,
290 : 1.21e-03, 1.08e-03, 9.7e-04, 8.8e-04, 8.0e-04, 7.3e-04, 6.7e-04, 6.2e-04, 5.7e-04, 5.3e-04, 5.0e-04,
291 : 4.7e-04, 4.4e-04, 4.1e-04, 3.9e-04, 3.7e-04, 3.5e-04, 3.3e-04, 3.2e-04, 3.0e-04, 2.9e-04, 2.8e-04}, // Conc = 0.1
292 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 3.65e-03, 3.02e-03, 2.54e-03, 2.18e-03, 1.89e-03,
293 : 1.65e-03, 1.46e-03, 1.30e-03, 1.17e-03, 1.06e-03, 9.6e-04, 8.8e-04, 8.1e-04, 7.4e-04, 6.9e-04, 6.4e-04,
294 : 5.9e-04, 5.5e-04, 5.2e-04, 4.9e-04, 4.6e-04, 4.3e-04, 4.0e-04, 3.8e-04, 3.6e-04, 3.4e-04, 3.3e-04}, // Conc = 0.2
295 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 6.19e-03, 5.03e-03, 4.15e-03, 3.48e-03, 2.95e-03, 2.53e-03,
296 : 2.20e-03, 1.92e-03, 1.69e-03, 1.50e-03, 1.34e-03, 1.21e-03, 1.09e-03, 9.9e-04, 9.0e-04, 8.3e-04, 7.6e-04,
297 : 7.0e-04, 6.5e-04, 6.0e-04, 5.6e-04, 5.2e-04, 4.9e-04, 4.6e-04, 4.3e-04, 4.1e-04, 3.8e-04, 3.6e-04}, // Conc = 0.3
298 : {0.0e+00, 0.0e+00, 0.0e+00, 1.575e-02, 1.174e-02, 9.06e-03, 7.18e-03, 5.83e-03, 4.82e-03, 4.04e-03, 3.44e-03,
299 : 2.96e-03, 2.57e-03, 2.26e-03, 1.99e-03, 1.77e-03, 1.59e-03, 1.43e-03, 1.29e-03, 1.17e-03, 1.06e-03, 9.7e-04,
300 : 8.9e-04, 8.2e-04, 7.6e-04, 7.0e-04, 6.5e-04, 6.0e-04, 5.6e-04, 5.3e-04, 4.9e-04, 4.6e-04, 4.3e-04}, // Conc = 0.4
301 : {6.693e-02, 4.398e-02, 3.050e-02, 2.207e-02, 1.653e-02, 1.274e-02, 1.005e-02, 8.09e-03, 6.63e-03, 5.50e-03, 4.63e-03,
302 : 3.94e-03, 3.39e-03, 2.94e-03, 2.56e-03, 2.26e-03, 2.00e-03, 1.78e-03, 1.59e-03, 1.43e-03, 1.29e-03, 1.17e-03,
303 : 1.07e-03, 9.8e-04, 8.9e-04, 8.2e-04, 7.6e-04, 7.0e-04, 6.5e-04, 6.0e-04, 5.6e-04, 5.3e-04, 4.9e-04}, // Conc = 0.5
304 : {9.344e-02, 6.525e-02, 4.675e-02, 3.428e-02, 2.569e-02, 1.962e-02, 1.525e-02, 1.205e-02, 9.66e-03, 7.85e-03, 6.46e-03,
305 : 5.38e-03, 4.52e-03, 3.84e-03, 3.29e-03, 2.84e-03, 2.47e-03, 2.16e-03, 1.91e-03, 1.69e-03, 1.51e-03, 1.35e-03,
306 : 1.22e-03, 1.10e-03, 1.00e-03, 9.2e-04, 8.4e-04, 7.7e-04, 7.1e-04, 6.6e-04, 6.1e-04, 5.7e-04, 5.3e-04}, // Conc = 0.6
307 : {1.3353e-01, 9.657e-02, 7.038e-02, 5.194e-02, 3.888e-02, 2.953e-02, 2.276e-02, 1.779e-02, 1.409e-02, 1.131e-02, 9.18e-03,
308 : 7.53e-03, 6.24e-03, 5.23e-03, 4.42e-03, 3.76e-03, 3.23e-03, 2.80e-03, 2.43e-03, 2.13e-03, 1.88e-03, 1.67e-03,
309 : 1.49e-03, 1.33e-03, 1.20e-03, 1.09e-03, 9.9e-04, 9.0e-04, 8.2e-04, 7.6e-04, 7.0e-04, 6.4e-04, 6.0e-04}, // Conc = 0.7
310 : {1.9109e-01, 1.4102e-01, 1.0221e-01, 7.453e-02, 5.509e-02, 4.136e-02, 3.156e-02, 2.444e-02, 1.920e-02, 1.529e-02, 1.233e-02,
311 : 1.005e-02, 8.29e-03, 6.90e-03, 5.79e-03, 4.91e-03, 4.19e-03, 3.61e-03, 3.12e-03, 2.72e-03, 2.39e-03, 2.11e-03,
312 : 1.87e-03, 1.66e-03, 1.49e-03, 1.34e-03, 1.21e-03, 1.10e-03, 1.00e-03, 9.1e-04, 8.3e-04, 7.7e-04, 7.1e-04}, // Conc = 0.8
313 : {0.0e+00, 0.0e+00, 1.9687e-01, 1.2843e-01, 8.752e-02, 6.185e-02, 4.508e-02, 3.374e-02, 2.584e-02, 2.018e-02, 1.604e-02,
314 : 1.295e-02, 1.059e-02, 8.77e-03, 7.34e-03, 6.21e-03, 5.30e-03, 4.56e-03, 3.95e-03, 3.45e-03, 3.03e-03, 2.67e-03,
315 : 2.37e-03, 2.12e-03, 1.90e-03, 1.71e-03, 1.54e-03, 1.40e-03, 1.27e-03, 1.16e-03, 1.07e-03, 9.8e-04, 9.0e-04} // Conc = 0.9
316 : }};
317 :
318 : // Ethylene Glycol Data: Density in kg/m3
319 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultEthGlyRhoData = {{
320 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.8, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2,
321 : 988.0, 985.7, 983.2, 980.5, 977.7, 974.8, 971.8, 968.6, 965.3, 961.9, 958.3, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterRhoData
322 : {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1018.73, 1017.57, 1016.28, 1014.87,
323 : 1013.34, 1011.69, 1009.92, 1008.02, 1006.01, 1003.87, 1001.61, 999.23, 996.72, 994.10, 991.35,
324 : 988.49, 985.50, 982.39, 979.15, 975.80, 972.32, 968.73, 965.01, 961.17, 957.21, 953.12}, // Conc=0.1
325 : {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1036.85, 1035.67, 1034.36, 1032.94, 1031.39,
326 : 1029.72, 1027.93, 1026.02, 1023.99, 1021.83, 1019.55, 1017.16, 1014.64, 1011.99, 1009.23, 1006.35,
327 : 1003.34, 1000.21, 996.96, 993.59, 990.10, 986.48, 982.75, 978.89, 974.91, 970.81, 966.59}, // Conc=0.2
328 : {0.00, 0.00, 0.00, 0.00, 0.00, 1054.31, 1053.11, 1051.78, 1050.33, 1048.76, 1047.07,
329 : 1045.25, 1043.32, 1041.26, 1039.08, 1036.78, 1034.36, 1031.36, 1029.15, 1026.36, 1023.45, 1020.42,
330 : 1017.27, 1014.00, 1010.60, 1007.09, 1003.45, 999.69, 995.81, 991.81, 987.68, 983.43, 979.07}, // Conc=0.3
331 : {0.00, 0.00, 0.00, 1071.98, 1070.87, 1069.63, 1068.28, 1066.80, 1065.21, 1063.49, 1061.65,
332 : 1059.68, 1057.60, 1055.39, 1053.07, 1050.62, 1048.05, 1045.35, 1042.54, 1039.61, 1036.55, 1033.37,
333 : 1030.07, 1026.65, 1023.10, 1019.44, 1015.65, 1011.74, 1007.70, 1003.56, 999.29, 994.90, 990.38}, // Conc=0.4
334 : {1089.94, 1089.04, 1088.01, 1086.87, 1085.61, 1084.22, 1082.71, 1081.08, 1079.33, 1077.46, 1075.46,
335 : 1073.35, 1071.11, 1068.75, 1066.27, 1063.66, 1060.94, 1058.09, 1055.13, 1052.04, 1048.83, 1045.49,
336 : 1042.04, 1038.46, 1034.77, 1030.95, 1027.01, 1022.95, 1018.76, 1014.46, 1010.03, 1005.48, 1000.81}, // Conc=0.5
337 : {1104.60, 1103.54, 1102.36, 1101.06, 1099.64, 1098.09, 1096.43, 1094.64, 1092.73, 1090.70, 1088.54,
338 : 1086.27, 1083.87, 1081.35, 1078.71, 1075.95, 1073.07, 1070.06, 1066.94, 1063.69, 1060.32, 1056.83,
339 : 1053.22, 1049.48, 1045.63, 1041.65, 1037.55, 1033.33, 1028.99, 1024.52, 1019.94, 1015.23, 1010.40}, // Conc=0.6
340 : {1118.61, 1117.38, 1116.04, 1114.58, 1112.99, 1111.28, 1109.45, 1107.50, 1105.43, 1103.23, 1100.92,
341 : 1098.48, 1095.92, 1093.24, 1090.43, 1087.51, 1084.46, 1081.30, 1078.01, 1074.60, 1071.06, 1067.41,
342 : 1063.64, 1059.74, 1055.72, 1051.58, 1047.32, 1042.93, 1038.43, 1033.80, 1029.05, 1024.18, 1019.19}, // Conc=0.7
343 : {1132.11, 1130.72, 1129.21, 1127.57, 1125.82, 1123.94, 1121.94, 1119.82, 1117.58, 1115.22, 1112.73,
344 : 1110.13, 1107.40, 1104.55, 1101.58, 1098.48, 1095.27, 1091.93, 1088.48, 1084.90, 1081.20, 1077.37,
345 : 1073.43, 1069.36, 1065.18, 1060.87, 1056.44, 1051.88, 1047.21, 1042.41, 1037.50, 1032.46, 1027.30}, // Conc=0.8
346 : {0.00, 0.00, 1141.87, 1140.07, 1138.14, 1136.09, 1133.91, 1131.62, 1129.20, 1126.67, 1124.01,
347 : 1121.23, 1118.32, 1115.30, 1112.15, 1108.89, 1105.50, 1101.99, 1098.36, 1094.60, 1090.73, 1086.73,
348 : 1082.61, 1078.37, 1074.01, 1069.53, 1064.92, 1060.20, 1055.35, 1050.38, 1045.29, 1040.08, 1034.74}, // Conc=0.9
349 : }};
350 :
351 : // Ethylene Glycol Data: Conductivity in W/(m-K)
352 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultEthGlyCondData =
353 : {
354 : {
355 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893,
356 : 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631,
357 : 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterCondData
358 : {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.511, 0.520, 0.528, 0.537, 0.545, 0.552, 0.559, 0.566, 0.572, 0.577,
359 : 0.583, 0.588, 0.592, 0.596, 0.600, 0.603, 0.606, 0.608, 0.610, 0.612, 0.613, 0.614, 0.614, 0.614, 0.613, 0.612}, // Conc=0.1
360 : {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.460, 0.468, 0.476, 0.483, 0.490, 0.497, 0.503, 0.509, 0.515, 0.520, 0.525,
361 : 0.529, 0.534, 0.538, 0.541, 0.544, 0.547, 0.549, 0.551, 0.553, 0.555, 0.556, 0.556, 0.557, 0.557, 0.556, 0.555}, // Conc=0.2
362 : {0.000, 0.000, 0.000, 0.000, 0.000, 0.415, 0.422, 0.429, 0.436, 0.442, 0.448, 0.453, 0.459, 0.464, 0.469, 0.473, 0.477,
363 : 0.481, 0.485, 0.488, 0.491, 0.494, 0.496, 0.498, 0.500, 0.501, 0.503, 0.504, 0.504, 0.505, 0.505, 0.504, 0.504}, // Conc=0.3
364 : {0.000, 0.000, 0.000, 0.371, 0.377, 0.383, 0.389, 0.395, 0.400, 0.405, 0.410, 0.415, 0.419, 0.424, 0.428, 0.431, 0.435,
365 : 0.438, 0.441, 0.444, 0.446, 0.449, 0.451, 0.452, 0.454, 0.455, 0.456, 0.457, 0.458, 0.458, 0.458, 0.458, 0.458}, // Conc=0.4
366 : {0.328, 0.333, 0.339, 0.344, 0.349, 0.354, 0.359, 0.364, 0.368, 0.373, 0.377, 0.380, 0.384, 0.387, 0.391, 0.394, 0.397,
367 : 0.399, 0.402, 0.404, 0.406, 0.408, 0.410, 0.411, 0.413, 0.414, 0.415, 0.416, 0.416, 0.417, 0.417, 0.417, 0.417}, // Conc=0.5
368 : {0.307, 0.312, 0.316, 0.321, 0.325, 0.329, 0.333, 0.336, 0.340, 0.343, 0.346, 0.349, 0.352, 0.355, 0.358, 0.360, 0.363,
369 : 0.365, 0.367, 0.369, 0.371, 0.372, 0.374, 0.375, 0.376, 0.377, 0.378, 0.379, 0.379, 0.380, 0.380, 0.380, 0.380}, // Conc=0.6
370 : {0.289, 0.293, 0.296, 0.300, 0.303, 0.306, 0.309, 0.312, 0.314, 0.317, 0.320, 0.322, 0.324, 0.327, 0.329, 0.331, 0.332,
371 : 0.334, 0.336, 0.337, 0.339, 0.340, 0.341, 0.342, 0.343, 0.344, 0.345, 0.346, 0.346, 0.347, 0.347, 0.347, 0.347}, // Conc=0.7
372 : {0.274, 0.276, 0.279, 0.281, 0.283, 0.286, 0.288, 0.290, 0.292, 0.294, 0.296, 0.298, 0.299, 0.301, 0.303, 0.304, 0.306,
373 : 0.307, 0.308, 0.310, 0.311, 0.312, 0.313, 0.314, 0.314, 0.315, 0.316, 0.316, 0.317, 0.317, 0.318, 0.318, 0.318}, // Conc=0.8
374 : {0.000, 0.000, 0.263, 0.265, 0.266, 0.268, 0.269, 0.271, 0.272, 0.274, 0.275, 0.276, 0.278, 0.279, 0.280, 0.281, 0.282,
375 : 0.283, 0.284, 0.285, 0.286, 0.287, 0.288, 0.288, 0.289, 0.290, 0.290, 0.291, 0.291, 0.292, 0.292, 0.293, 0.293}, // Conc=0.9
376 : }};
377 :
378 : // Propylene Glycol Data: Specific Heat in J/(kg-k)
379 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultPropGlyCpData = {
380 : {
381 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0,
382 : 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, 4192.0,
383 : 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData in J/kg-K
384 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4042.0, 4050.0, 4058.0, 4067.0,
385 : 4075.0, 4083.0, 4091.0, 4099.0, 4107.0, 4115.0, 4123.0, 4131.0, 4139.0, 4147.0, 4155.0,
386 : 4163.0, 4171.0, 4179.0, 4187.0, 4195.0, 4203.0, 4211.0, 4219.0, 4227.0, 4235.0, 4243.0}, // Conc=0.1
387 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3918.0, 3929.0, 3940.0, 3951.0, 3962.0,
388 : 3973.0, 3983.0, 3994.0, 4005.0, 4016.0, 4027.0, 4038.0, 4049.0, 4060.0, 4071.0, 4082.0,
389 : 4093.0, 4104.0, 4115.0, 4126.0, 4136.0, 4147.0, 4158.0, 4169.0, 4180.0, 4191.0, 4202.0}, // Conc=0.2
390 : {0.0, 0.0, 0.0, 0.0, 0.0, 3765.0, 3779.0, 3793.0, 3807.0, 3820.0, 3834.0,
391 : 3848.0, 3862.0, 3875.0, 3889.0, 3903.0, 3917.0, 3930.0, 3944.0, 3958.0, 3972.0, 3985.0,
392 : 3999.0, 4013.0, 4027.0, 4040.0, 4054.0, 4068.0, 4082.0, 4095.0, 4109.0, 4123.0, 4137.0}, // Conc=0.3
393 : {0.0, 0.0, 0.0, 0.0, 3586.0, 3603.0, 3619.0, 3636.0, 3652.0, 3669.0, 3685.0,
394 : 3702.0, 3718.0, 3735.0, 3751.0, 3768.0, 3784.0, 3801.0, 3817.0, 3834.0, 3850.0, 3867.0,
395 : 3883.0, 3900.0, 3916.0, 3933.0, 3949.0, 3966.0, 3982.0, 3999.0, 4015.0, 4032.0, 4049.0}, // Conc=0.4
396 : {0.0, 0.0, 3358.0, 3378.0, 3397.0, 3416.0, 3435.0, 3455.0, 3474.0, 3493.0, 3513.0,
397 : 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, 3648.0, 3667.0, 3686.0, 3706.0, 3725.0,
398 : 3744.0, 3763.0, 3783.0, 3802.0, 3821.0, 3841.0, 3860.0, 3879.0, 3898.0, 3918.0, 3937.0}, // Conc=0.5
399 : {3096.0, 3118.0, 3140.0, 3162.0, 3184.0, 3206.0, 3228.0, 3250.0, 3272.0, 3295.0, 3317.0,
400 : 3339.0, 3361.0, 3383.0, 3405.0, 3427.0, 3449.0, 3471.0, 3493.0, 3515.0, 3537.0, 3559.0,
401 : 3581.0, 3603.0, 3625.0, 3647.0, 3670.0, 3692.0, 3714.0, 3736.0, 3758.0, 3780.0, 3802.0}, // Conc=0.6
402 : {2843.0, 2868.0, 2893.0, 2918.0, 2943.0, 2968.0, 2993.0, 3018.0, 3042.0, 3067.0, 3092.0,
403 : 3117.0, 3142.0, 3167.0, 3192.0, 3217.0, 3242.0, 3266.0, 3291.0, 3316.0, 3341.0, 3366.0,
404 : 3391.0, 3416.0, 3441.0, 3465.0, 3490.0, 3515.0, 3540.0, 3565.0, 3590.0, 3615.0, 3640.0}, // Conc=0.7
405 : {2572.0, 2600.0, 2627.0, 2655.0, 2683.0, 2710.0, 2738.0, 2766.0, 2793.0, 2821.0, 2849.0,
406 : 2876.0, 2904.0, 2931.0, 2959.0, 2987.0, 3014.0, 3042.0, 3070.0, 3097.0, 3125.0, 3153.0,
407 : 3180.0, 3208.0, 3236.0, 3263.0, 3291.0, 3319.0, 3346.0, 3374.0, 3402.0, 3429.0, 3457.0}, // Conc=0.8
408 : {2264.0, 2295.0, 2326.0, 2356.0, 2387.0, 2417.0, 2448.0, 2478.0, 2509.0, 2539.0, 2570.0,
409 : 2600.0, 2631.0, 2661.0, 2692.0, 2723.0, 2753.0, 2784.0, 2814.0, 2845.0, 2875.0, 2906.0,
410 : 2936.0, 2967.0, 2997.0, 3028.0, 3058.0, 3089.0, 3119.0, 3150.0, 3181.0, 3211.0, 3242.0}, // Conc=0.9
411 : }};
412 :
413 : // Propylene Glycol Data: Viscosity in mPa-s
414 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultPropGlyViscData = {{
415 : {0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 1.7912e-3, 1.5183e-3, 1.306e-3, 1.1376e-3, 1.0016e-3,
416 : 0.8901e-3, 0.7974e-3, 0.7193e-3, 0.653e-3, 0.5961e-3, 0.5468e-3, 0.504e-3, 0.4664e-3, 0.4332e-3, 0.4039e-3, 0.3777e-3, 0.3543e-3,
417 : 0.3333e-3, 0.3144e-3, 0.2973e-3, 0.2817e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3}, // DefaultWaterViscData in Pa-s
418 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 2.68e-03, 2.23e-03, 1.89e-03, 1.63e-03,
419 : 1.42e-03, 1.25e-03, 1.11e-03, 9.9e-04, 8.9e-04, 8.1e-04, 7.3e-04, 6.7e-04, 6.2e-04, 5.7e-04, 5.3e-04,
420 : 4.9e-04, 4.6e-04, 4.3e-04, 4.0e-04, 3.8e-04, 3.5e-04, 3.3e-04, 3.2e-04, 3.0e-04, 2.8e-04, 2.7e-04}, // Conc=0.1
421 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 4.98e-03, 4.05e-03, 3.34e-03, 2.79e-03, 2.36e-03,
422 : 2.02e-03, 1.74e-03, 1.52e-03, 1.34e-03, 1.18e-03, 1.06e-03, 9.5e-04, 8.6e-04, 7.8e-04, 7.1e-04, 6.6e-04,
423 : 6.0e-04, 5.6e-04, 5.2e-04, 4.9e-04, 4.5e-04, 4.3e-04, 4.0e-04, 3.8e-04, 3.6e-04, 3.4e-04, 3.2e-04}, // Conc=0.2
424 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 1.187e-02, 9.08e-03, 7.08e-03, 5.61e-03, 4.52e-03, 3.69e-03,
425 : 3.06e-03, 2.57e-03, 2.18e-03, 1.88e-03, 1.63e-03, 1.43e-03, 1.26e-03, 1.13e-03, 1.01e-03, 9.1e-04, 8.3e-04,
426 : 7.6e-04, 7.0e-04, 6.5e-04, 6.1e-04, 5.7e-04, 5.3e-04, 5.0e-04, 4.7e-04, 4.5e-04, 4.3e-04, 4.1e-04}, // Conc=0.3
427 : {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 3.322e-02, 2.327e-02, 1.675e-02, 1.237e-02, 9.35e-03, 7.22e-03, 5.69e-03,
428 : 4.57e-03, 3.73e-03, 3.09e-03, 2.60e-03, 2.21e-03, 1.91e-03, 1.66e-03, 1.47e-03, 1.30e-03, 1.17e-03, 1.06e-03,
429 : 9.6e-04, 8.8e-04, 8.1e-04, 7.5e-04, 7.0e-04, 6.6e-04, 6.2e-04, 5.9e-04, 5.6e-04, 5.3e-04, 5.1e-04}, // Conc=0.4
430 : {0.0e+00, 0.0e+00, 1.1059e-01, 7.303e-02, 4.970e-02, 3.478e-02, 2.499e-02, 1.840e-02, 1.385e-02, 1.065e-02, 8.34e-03,
431 : 6.65e-03, 5.39e-03, 4.43e-03, 3.69e-03, 3.11e-03, 2.65e-03, 2.29e-03, 1.99e-03, 1.75e-03, 1.55e-03, 1.38e-03,
432 : 1.24e-03, 1.12e-03, 1.02e-03, 9.3e-04, 8.6e-04, 7.9e-04, 7.4e-04, 6.9e-04, 6.4e-04, 6.0e-04, 5.7e-04}, // Conc=0.5
433 : {5.2401e-01, 3.3039e-01, 2.1143e-01, 1.3796e-01, 9.200e-02, 6.278e-02, 4.384e-02, 3.132e-02, 2.287e-02, 1.705e-02, 1.296e-02,
434 : 1.004e-02, 7.91e-03, 6.34e-03, 5.15e-03, 4.25e-03, 3.55e-03, 3.00e-03, 2.57e-03, 2.22e-03, 1.93e-03, 1.70e-03,
435 : 1.51e-03, 1.35e-03, 1.22e-03, 1.10e-03, 1.01e-03, 9.2e-04, 8.5e-04, 7.9e-04, 7.4e-04, 6.9e-04, 6.5e-04}, // Conc=0.6
436 : {9.1618e-01, 5.5112e-01, 3.4009e-01, 2.1567e-01, 1.4062e-01, 9.423e-02, 6.483e-02, 4.574e-02, 3.304e-02, 2.441e-02, 1.841e-02,
437 : 1.415e-02, 1.108e-02, 8.81e-03, 7.12e-03, 5.84e-03, 4.85e-03, 4.08e-03, 3.46e-03, 2.98e-03, 2.58e-03, 2.26e-03,
438 : 1.99e-03, 1.77e-03, 1.59e-03, 1.43e-03, 1.30e-03, 1.18e-03, 1.08e-03, 1.00e-03, 9.3e-04, 8.6e-04, 8.0e-04}, // Conc=0.7
439 : {1.43422e+00, 9.0847e-01, 5.7592e-01, 3.6877e-01, 2.3986e-01, 1.5902e-01, 1.0764e-01, 7.445e-02, 5.263e-02,
440 : 3.799e-02, 2.800e-02, 2.104e-02, 1.610e-02, 1.255e-02, 9.94e-03, 7.99e-03, 6.52e-03, 5.39e-03,
441 : 4.51e-03, 3.82e-03, 3.28e-03, 2.83e-03, 2.47e-03, 2.18e-03, 1.94e-03, 1.73e-03, 1.56e-03,
442 : 1.42e-03, 1.29e-03, 1.19e-03, 1.09e-03, 1.02e-03, 9.5e-04}, // Conc=0.8
443 : {3.81329e+00, 2.07134e+00, 1.17609e+00, 6.9609e-01, 4.2819e-01, 2.7294e-01, 1.7978e-01, 1.2203e-01, 8.515e-02,
444 : 6.093e-02, 4.462e-02, 3.338e-02, 2.545e-02, 1.976e-02, 1.560e-02, 1.249e-02, 1.015e-02, 8.35e-03,
445 : 6.95e-03, 5.85e-03, 4.97e-03, 4.26e-03, 3.69e-03, 3.22e-03, 2.83e-03, 2.50e-03, 2.23e-03,
446 : 2.00e-03, 1.80e-03, 1.63e-03, 1.48e-03, 1.35e-03, 1.24e-03}, // Conc=0.9
447 : }};
448 :
449 : // Propylene Glycol Data: Density in kg/m3
450 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultPropGlyRhoData = {{
451 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.8, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2,
452 : 988.0, 985.7, 983.2, 980.5, 977.7, 974.8, 971.8, 968.6, 965.3, 961.9, 958.3, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterRhoData in
453 : // kg/m3
454 : {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1013.85, 1012.61, 1011.24, 1009.75,
455 : 1008.13, 1006.40, 1004.54, 1002.56, 1000.46, 998.23, 995.88, 993.41, 990.82, 988.11, 985.27,
456 : 982.31, 979.23, 976.03, 972.70, 969.25, 965.68, 961.99, 958.17, 954.24, 950.18, 945.99}, // Conc=0.1
457 : {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1027.24, 1025.84, 1024.32, 1022.68, 1020.91,
458 : 1019.01, 1016.99, 1014.84, 1012.56, 1010.16, 1007.64, 1004.99, 1002.21, 999.31, 996.28, 993.12,
459 : 989.85, 986.44, 982.91, 979.25, 975.47, 971.56, 967.53, 963.37, 959.09, 954.67, 950.14}, // Conc=0.2
460 : {0.00, 0.00, 0.00, 0.00, 0.00, 1039.42, 1037.89, 1036.24, 1034.46, 1032.55, 1030.51,
461 : 1028.35, 1026.06, 1023.64, 1021.09, 1018.42, 1015.62, 1012.69, 1009.63, 1006.44, 1003.13, 999.69,
462 : 996.12, 992.42, 988.60, 984.65, 980.57, 976.36, 972.03, 967.56, 962.97, 958.26, 953.41}, // Conc=0.3
463 : {0.00, 0.00, 0.00, 0.00, 1050.43, 1048.79, 1047.02, 1045.12, 1043.09, 1040.94, 1038.65,
464 : 1036.24, 1033.70, 1031.03, 1028.23, 1025.30, 1022.24, 1019.06, 1015.75, 1012.30, 1008.73, 1005.03,
465 : 1001.21, 997.25, 993.17, 988.95, 984.61, 980.14, 975.54, 970.81, 965.95, 960.97, 955.86}, // Conc=0.4
466 : {0.00, 0.00, 1062.11, 1060.49, 1058.73, 1056.85, 1054.84, 1052.71, 1050.44, 1048.04, 1045.52,
467 : 1042.87, 1040.09, 1037.18, 1034.15, 1030.98, 1027.69, 1024.27, 1020.72, 1017.04, 1013.23, 1009.30,
468 : 1005.24, 1001.05, 996.73, 992.28, 987.70, 983.00, 978.16, 973.20, 968.11, 962.89, 957.55}, // Conc=0.5
469 : {1072.92, 1071.31, 1069.58, 1067.72, 1065.73, 1063.61, 1061.37, 1059.00, 1056.50, 1053.88, 1051.13,
470 : 1048.25, 1045.24, 1042.11, 1038.85, 1035.47, 1031.95, 1028.32, 1024.55, 1020.66, 1016.63, 1012.49,
471 : 1008.21, 1003.81, 999.28, 994.63, 989.85, 984.94, 979.90, 974.74, 969.45, 964.03, 958.49}, // Conc=0.6
472 : {1079.67, 1077.82, 1075.84, 1073.74, 1071.51, 1069.16, 1066.69, 1064.09, 1061.36, 1058.51, 1055.54,
473 : 1052.44, 1049.22, 1045.87, 1042.40, 1038.81, 1035.09, 1031.25, 1027.28, 1023.19, 1018.97, 1014.63,
474 : 1010.16, 1005.57, 1000.86, 996.02, 991.06, 985.97, 980.76, 975.42, 969.96, 964.38, 958.67}, // Conc=0.7
475 : {1094.50, 1090.85, 1087.18, 1083.49, 1079.77, 1076.04, 1072.27, 1068.49, 1064.68, 1060.85, 1057.00,
476 : 1053.12, 1049.22, 1045.30, 1041.35, 1037.38, 1033.39, 1029.37, 1025.33, 1021.27, 1017.19, 1013.08,
477 : 1008.95, 1004.79, 1000.62, 996.41, 992.19, 987.94, 983.68, 979.38, 975.07, 970.73, 966.37}, // Conc=0.8
478 : {1092.46, 1088.82, 1085.15, 1081.46, 1077.74, 1074.00, 1070.24, 1066.46, 1062.65, 1058.82, 1054.96,
479 : 1051.09, 1047.19, 1043.26, 1039.32, 1035.35, 1031.35, 1027.34, 1023.30, 1019.24, 1015.15, 1011.04,
480 : 1006.91, 1002.76, 998.58, 994.38, 990.16, 985.91, 981.64, 977.35, 973.03, 968.69, 964.33}, // Conc=0.9
481 : }};
482 :
483 : // Propylene Glycol Data: Conductivity in W/(m-K)
484 : static constexpr std::array<std::array<Real64, DefaultNumGlyTemps>, DefaultNumGlyConcs> DefaultPropGlyCondData =
485 : {
486 : {
487 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893,
488 : 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631,
489 : 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterCondData
490 : // in W/mK
491 : {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.510, 0.518, 0.527, 0.535, 0.543, 0.550, 0.557, 0.563, 0.569, 0.575,
492 : 0.580, 0.585, 0.589, 0.593, 0.596, 0.599, 0.602, 0.604, 0.606, 0.607, 0.608, 0.609, 0.609, 0.608, 0.608, 0.606}, // Conc=0.1
493 : {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.456, 0.464, 0.472, 0.479, 0.485, 0.492, 0.498, 0.503, 0.508, 0.513, 0.518,
494 : 0.522, 0.526, 0.529, 0.532, 0.535, 0.538, 0.540, 0.541, 0.543, 0.544, 0.544, 0.544, 0.544, 0.544, 0.543, 0.542}, // Conc=0.2
495 : {0.000, 0.000, 0.000, 0.000, 0.000, 0.410, 0.416, 0.423, 0.429, 0.434, 0.440, 0.445, 0.449, 0.454, 0.458, 0.462, 0.466,
496 : 0.469, 0.472, 0.475, 0.477, 0.479, 0.481, 0.482, 0.484, 0.484, 0.485, 0.485, 0.485, 0.485, 0.485, 0.484, 0.482}, // Conc=0.3
497 : {0.000, 0.000, 0.000, 0.000, 0.369, 0.375, 0.380, 0.385, 0.389, 0.394, 0.398, 0.402, 0.406, 0.409, 0.412, 0.415, 0.418,
498 : 0.420, 0.423, 0.425, 0.426, 0.428, 0.429, 0.430, 0.431, 0.431, 0.432, 0.432, 0.432, 0.431, 0.430, 0.429, 0.428}, // Conc=0.4
499 : {0.000, 0.000, 0.329, 0.334, 0.338, 0.342, 0.346, 0.349, 0.353, 0.356, 0.359, 0.362, 0.365, 0.367, 0.370, 0.372, 0.374,
500 : 0.375, 0.377, 0.378, 0.379, 0.380, 0.381, 0.382, 0.382, 0.382, 0.382, 0.382, 0.382, 0.381, 0.380, 0.379, 0.378}, // Conc=0.5
501 : {0.296, 0.300, 0.303, 0.306, 0.309, 0.312, 0.314, 0.317, 0.319, 0.321, 0.323, 0.325, 0.327, 0.329, 0.330, 0.331, 0.333,
502 : 0.334, 0.335, 0.335, 0.336, 0.336, 0.337, 0.337, 0.337, 0.337, 0.336, 0.336, 0.335, 0.335, 0.334, 0.333, 0.332}, // Conc=0.6
503 : {0.275, 0.277, 0.278, 0.280, 0.282, 0.284, 0.285, 0.286, 0.289, 0.290, 0.291, 0.292, 0.293, 0.293, 0.294, 0.294, 0.295,
504 : 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.294, 0.294, 0.293, 0.292, 0.292, 0.291, 0.290, 0.288}, // Conc=0.7
505 : {0.255, 0.256, 0.257, 0.257, 0.258, 0.259, 0.259, 0.259, 0.260, 0.260, 0.260, 0.261, 0.261, 0.261, 0.261, 0.261, 0.260,
506 : 0.260, 0.260, 0.260, 0.259, 0.259, 0.258, 0.258, 0.257, 0.256, 0.256, 0.255, 0.254, 0.253, 0.252, 0.251, 0.250}, // Conc=0.8
507 : {0.237, 0.237, 0.236, 0.236, 0.236, 0.235, 0.235, 0.234, 0.234, 0.233, 0.233, 0.232, 0.233, 0.231, 0.230, 0.229, 0.229,
508 : 0.228, 0.227, 0.227, 0.226, 0.225, 0.224, 0.223, 0.222, 0.221, 0.220, 0.219, 0.218, 0.217, 0.216, 0.215, 0.214}, // Conc=0.9
509 : }};
510 :
511 : // Steam Refrigerant Data
512 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamTemps{
513 : 1.00e-002, 1.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 72.0, 74.0, 76.0,
514 : 78.0, 80.0, 82.0, 84.0, 86.0, 88.0, 90.0, 92.0, 94.0, 96.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0,
515 : 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0,
516 : 126.0, 127.0, 128.0, 129.0, 130.0, 132.0, 134.0, 136.0, 138.0, 140.0, 142.0, 144.0, 146.0, 148.0, 150.0, 152.0, 154.0, 156.0, 158.0,
517 : 160.0, 162.0, 164.0, 166.0, 168.0, 170.0, 172.0, 174.0, 176.0, 178.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0,
518 : 225.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0};
519 :
520 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamPressData{
521 : 611.7, 657.1, 872.6, 1228.0, 1706.0, 2339.0, 3170.0, 4247.0, 5629.0, 7385.0, 9595.0, 12350.0,
522 : 15760.0, 19950.0, 25040.0, 31200.0, 34000.0, 37010.0, 40240.0, 43700.0, 47410.0, 51390.0, 55640.0, 60170.0,
523 : 65020.0, 70180.0, 75680.0, 81540.0, 87770.0, 94390.0, 97850.0, 101400.0, 105100.0, 108900.0, 112800.0, 116800.0,
524 : 120900.0, 125100.0, 129500.0, 134000.0, 138600.0, 143400.0, 148300.0, 153300.0, 158400.0, 163700.0, 169200.0, 174800.0,
525 : 180500.0, 186400.0, 192500.0, 198700.0, 205000.0, 211600.0, 218300.0, 225200.0, 232200.0, 239500.0, 246900.0, 254500.0,
526 : 262300.0, 270300.0, 286800.0, 304200.0, 322400.0, 341500.0, 361500.0, 382500.0, 404400.0, 427300.0, 451200.0, 476200.0,
527 : 502200.0, 529500.0, 557800.0, 587400.0, 618200.0, 650300.0, 683700.0, 718500.0, 754600.0, 792200.0, 831200.0, 871800.0,
528 : 913800.0, 957500.0, 1003000.0, 1123000.0, 1255000.0, 1399000.0, 1555000.0, 1724000.0, 1908000.0, 2106000.0, 2320000.0, 2550000.0,
529 : 2797000.0, 3347000.0, 3976000.0, 4692000.0, 5503000.0, 6417000.0, 7442000.0, 8588000.0, 9865000.0, 11280000.0, 12860000.0, 14600000.0,
530 : 16530000.0, 18670000.0, 21040000.0};
531 :
532 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamEnthalpyFluidData{
533 : 0.59, 4177.0, 21020.0, 42020.0, 62980.0, 83910.0, 104800.0, 125700.0, 146600.0, 167500.0, 188400.0, 209300.0,
534 : 230300.0, 251200.0, 272100.0, 293100.0, 301400.0, 309800.0, 318200.0, 326600.0, 335000.0, 343400.0, 351800.0, 360200.0,
535 : 368600.0, 377000.0, 385500.0, 393900.0, 402300.0, 410700.0, 414900.0, 419200.0, 423400.0, 427600.0, 431800.0, 436000.0,
536 : 440300.0, 444500.0, 448700.0, 453000.0, 457200.0, 461400.0, 465600.0, 469900.0, 474100.0, 478400.0, 482600.0, 486800.0,
537 : 491100.0, 495300.0, 499600.0, 503800.0, 508100.0, 512300.0, 516600.0, 520800.0, 525100.0, 529300.0, 533600.0, 537900.0,
538 : 542100.0, 546400.0, 554900.0, 563500.0, 572000.0, 580600.0, 589200.0, 597700.0, 606300.0, 614900.0, 623600.0, 632200.0,
539 : 640800.0, 649500.0, 658100.0, 666800.0, 675500.0, 684200.0, 692900.0, 701600.0, 710300.0, 719100.0, 727800.0, 736600.0,
540 : 745400.0, 754200.0, 763100.0, 785200.0, 807400.0, 829800.0, 852300.0, 874900.0, 897600.0, 920500.0, 943600.0, 966800.0,
541 : 990200.0, 1038000.0, 1086000.0, 1135000.0, 1185000.0, 1237000.0, 1290000.0, 1345000.0, 1402000.0, 1462000.0, 1526000.0, 1595000.0,
542 : 1671000.0, 1762000.0, 1891000.0};
543 :
544 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamEnthalpyGasFluidData{
545 : 2501000.0, 2503000.0, 2510000.0, 2519000.0, 2528000.0, 2537000.0, 2547000.0, 2556000.0, 2565000.0, 2574000.0, 2582000.0, 2591000.0,
546 : 2600000.0, 2609000.0, 2618000.0, 2626000.0, 2630000.0, 2633000.0, 2636000.0, 2640000.0, 2643000.0, 2646000.0, 2650000.0, 2653000.0,
547 : 2656000.0, 2660000.0, 2663000.0, 2666000.0, 2669000.0, 2672000.0, 2674000.0, 2676000.0, 2677000.0, 2679000.0, 2680000.0, 2682000.0,
548 : 2683000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0, 2693000.0, 2694000.0, 2696000.0, 2697000.0, 2699000.0, 2700000.0,
549 : 2702000.0, 2703000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2710000.0, 2712000.0, 2713000.0, 2715000.0, 2716000.0, 2717000.0,
550 : 2719000.0, 2720000.0, 2723000.0, 2726000.0, 2728000.0, 2731000.0, 2733000.0, 2736000.0, 2739000.0, 2741000.0, 2744000.0, 2746000.0,
551 : 2748000.0, 2751000.0, 2753000.0, 2755000.0, 2757000.0, 2760000.0, 2762000.0, 2764000.0, 2766000.0, 2768000.0, 2770000.0, 2772000.0,
552 : 2774000.0, 2775000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2792000.0, 2795000.0, 2797000.0, 2799000.0, 2801000.0, 2802000.0,
553 : 2803000.0, 2803000.0, 2801000.0, 2797000.0, 2790000.0, 2780000.0, 2767000.0, 2750000.0, 2728000.0, 2701000.0, 2666000.0, 2622000.0,
554 : 2564000.0, 2481000.0, 2335000.0};
555 :
556 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamCpFluidData{
557 : 4220.0, 4217.0, 4205.0, 4196.0, 4189.0, 4184.0, 4182.0, 4180.0, 4180.0, 4180.0, 4180.0, 4182.0, 4183.0, 4185.0, 4187.0, 4190.0,
558 : 4191.0, 4193.0, 4194.0, 4195.0, 4197.0, 4198.0, 4200.0, 4202.0, 4203.0, 4205.0, 4207.0, 4209.0, 4211.0, 4213.0, 4215.0, 4216.0,
559 : 4217.0, 4218.0, 4219.0, 4220.0, 4222.0, 4223.0, 4224.0, 4226.0, 4227.0, 4228.0, 4230.0, 4231.0, 4233.0, 4234.0, 4236.0, 4237.0,
560 : 4239.0, 4240.0, 4242.0, 4244.0, 4245.0, 4247.0, 4249.0, 4250.0, 4252.0, 4254.0, 4256.0, 4258.0, 4260.0, 4261.0, 4265.0, 4270.0,
561 : 4274.0, 4278.0, 4283.0, 4287.0, 4292.0, 4297.0, 4302.0, 4307.0, 4312.0, 4318.0, 4324.0, 4329.0, 4335.0, 4341.0, 4348.0, 4354.0,
562 : 4361.0, 4368.0, 4375.0, 4382.0, 4390.0, 4397.0, 4405.0, 4425.0, 4447.0, 4471.0, 4496.0, 4523.0, 4551.0, 4582.0, 4615.0, 4650.0,
563 : 4688.0, 4772.0, 4870.0, 4986.0, 5123.0, 5289.0, 5493.0, 5750.0, 6085.0, 6537.0, 7186.0, 8208.0, 10120.0, 15000.0, 45160.0};
564 :
565 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamCpGasFluidData{
566 : 1884.0, 1885.0, 1889.0, 1895.0, 1900.0, 1906.0, 1912.0, 1918.0, 1925.0, 1931.0, 1939.0, 1947.0, 1955.0, 1965.0, 1975.0, 1986.0,
567 : 1991.0, 1996.0, 2001.0, 2006.0, 2012.0, 2018.0, 2024.0, 2030.0, 2036.0, 2043.0, 2050.0, 2057.0, 2064.0, 2072.0, 2076.0, 2080.0,
568 : 2084.0, 2088.0, 2093.0, 2097.0, 2101.0, 2106.0, 2110.0, 2115.0, 2120.0, 2124.0, 2129.0, 2134.0, 2139.0, 2144.0, 2150.0, 2155.0,
569 : 2160.0, 2166.0, 2171.0, 2177.0, 2183.0, 2189.0, 2195.0, 2201.0, 2207.0, 2213.0, 2219.0, 2226.0, 2232.0, 2239.0, 2252.0, 2266.0,
570 : 2281.0, 2296.0, 2311.0, 2327.0, 2343.0, 2359.0, 2376.0, 2394.0, 2412.0, 2430.0, 2449.0, 2468.0, 2488.0, 2509.0, 2529.0, 2551.0,
571 : 2572.0, 2594.0, 2617.0, 2640.0, 2664.0, 2688.0, 2713.0, 2777.0, 2844.0, 2915.0, 2990.0, 3068.0, 3150.0, 3237.0, 3329.0, 3426.0,
572 : 3528.0, 3754.0, 4011.0, 4308.0, 4656.0, 5073.0, 5582.0, 6220.0, 7045.0, 8159.0, 9753.0, 12240.0, 16690.0, 27360.0, 96600.0};
573 :
574 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamDensityFluidData{
575 : 999.8, 999.9, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2, 988.0, 985.7, 983.2, 980.5, 977.7, 976.6, 975.4, 974.2,
576 : 973.0, 971.8, 970.5, 969.2, 967.9, 966.6, 965.3, 963.9, 962.6, 961.2, 959.8, 959.1, 958.3, 957.6, 956.9, 956.2, 955.4, 954.7, 954.0,
577 : 953.2, 952.5, 951.7, 950.9, 950.2, 949.4, 948.6, 947.9, 947.1, 946.3, 945.5, 944.7, 943.9, 943.1, 942.3, 941.5, 940.7, 939.8, 939.0,
578 : 938.2, 937.4, 936.5, 935.7, 934.8, 933.1, 931.4, 929.7, 927.9, 926.1, 924.3, 922.5, 920.7, 918.9, 917.0, 915.1, 913.2, 911.3, 909.4,
579 : 907.4, 905.5, 903.5, 901.5, 899.5, 897.5, 895.4, 893.3, 891.2, 889.1, 887.0, 881.6, 876.1, 870.4, 864.7, 858.8, 852.7, 846.5, 840.2,
580 : 833.7, 827.1, 813.4, 798.9, 783.6, 767.5, 750.3, 731.9, 712.1, 690.7, 667.1, 640.8, 610.7, 574.7, 527.6, 451.4};
581 :
582 : static constexpr std::array<Real64, DefaultNumSteamTemps> DefaultSteamDensityGasFluidData{
583 : 4.86e-003, 5.20e-003, 6.80e-003, 9.41e-003, 1.28e-002, 1.73e-002, 2.31e-002, 3.04e-002, 3.97e-002, 5.12e-002, 6.56e-002, 8.32e-002, 0.10,
584 : 0.13, 0.16, 0.20, 0.22, 0.23, 0.25, 0.27, 0.29, 0.32, 0.34, 0.37, 0.39, 0.42,
585 : 0.45, 0.49, 0.52, 0.56, 0.58, 0.60, 0.62, 0.64, 0.66, 0.68, 0.71, 0.73, 0.75,
586 : 0.78, 0.80, 0.83, 0.85, 0.88, 0.91, 0.94, 0.97, 1.00, 1.03, 1.06, 1.09, 1.12,
587 : 1.16, 1.19, 1.23, 1.26, 1.30, 1.34, 1.38, 1.42, 1.46, 1.50, 1.58, 1.67, 1.77,
588 : 1.86, 1.97, 2.07, 2.19, 2.30, 2.42, 2.55, 2.68, 2.82, 2.96, 3.11, 3.26, 3.42,
589 : 3.59, 3.76, 3.94, 4.12, 4.32, 4.52, 4.72, 4.94, 5.16, 5.75, 6.40, 7.10, 7.86,
590 : 8.69, 9.59, 10.56, 11.62, 12.75, 13.99, 16.75, 19.97, 23.71, 28.07, 33.16, 39.13, 46.17,
591 : 54.54, 64.64, 77.05, 92.76, 113.60, 143.90, 201.80};
592 :
593 : static constexpr std::array<Real64, DefaultNumSteamSuperheatedTemps> DefaultSteamSuperheatedTemps{
594 : 1.00e-002, 1.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 72.0, 74.0, 76.0,
595 : 78.0, 80.0, 82.0, 84.0, 86.0, 88.0, 90.0, 92.0, 94.0, 96.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0,
596 : 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0,
597 : 126.0, 127.0, 128.0, 129.0, 130.0, 132.0, 134.0, 136.0, 138.0, 140.0, 142.0, 144.0, 146.0, 148.0, 150.0, 152.0, 154.0, 156.0, 158.0,
598 : 160.0, 162.0, 164.0, 166.0, 168.0, 170.0, 172.0, 174.0, 176.0, 178.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0,
599 : 225.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0, 400.0, 450.0, 500.0};
600 :
601 : static constexpr std::array<Real64, DefaultNumSteamSuperheatedTemps> DefaultSteamSuperheatedPressData{
602 : 611.70, 657.10, 872.60, 1228.0, 1706.0, 2339.0, 3170.0, 4247.0, 5629.0, 7385.0, 9595.0,
603 : 12350.0, 15760.0, 19950.0, 25040.0, 31200.0, 34000.0, 37010.0, 40240.0, 43700.0, 47410.0, 51390.0,
604 : 55640.0, 60170.0, 65020.0, 70180.0, 75680.0, 81540.0, 87770.0, 94390.0, 97850.0, 101400.0, 105100.0,
605 : 108900.0, 112800.0, 116800.0, 120900.0, 125100.0, 129500.0, 134000.0, 138600.0, 143400.0, 148300.0, 153300.0,
606 : 158400.0, 163700.0, 169200.0, 174800.0, 180500.0, 186400.0, 192500.0, 198700.0, 205000.0, 211600.0, 218300.0,
607 : 225200.0, 232200.0, 239500.0, 246900.0, 254500.0, 262300.0, 270300.0, 286800.0, 304200.0, 322400.0, 341500.0,
608 : 361500.0, 382500.0, 404400.0, 427300.0, 451200.0, 476200.0, 502200.0, 529500.0, 557800.0, 587400.0, 618200.0,
609 : 650300.0, 683700.0, 718500.0, 754600.0, 792200.0, 831200.0, 871800.0, 913800.0, 957500.0, 1003000.0, 1123000.0,
610 : 1255000.0, 1399000.0, 1555000.0, 1724000.0, 1908000.0, 2106000.0, 2320000.0, 2550000.0, 2797000.0, 3347000.0, 3976000.0,
611 : 4692000.0, 5503000.0, 6417000.0, 7442000.0, 8588000.0, 9865000.0, 11280000.0, 12860000.0, 14600000.0, 16530000.0, 18670000.0,
612 : 21040000.0, 30000000.0, 35000000.0, 40000000.0};
613 :
614 938 : Array2D<Real64> DefaultSteamSuperheatedEnthalpyData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps);
615 :
616 938 : Array2D<Real64> DefaultSteamSuperheatedDensityData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps);
617 :
618 589 : struct FluidTempData
619 : {
620 : // Members
621 : std::string Name; // Name of the temperature list
622 : int NumOfTemps; // Number of temperatures in a particular arry
623 : Array1D<Real64> Temps; // Temperature values (degrees C)
624 :
625 : // Default Constructor
626 469 : FluidTempData() : NumOfTemps(0)
627 : {
628 469 : }
629 : };
630 :
631 : struct PressureSequence
632 : {
633 : // Members
634 : Real64 Pressure;
635 : int InPtr;
636 :
637 : // Default Constructor
638 56 : PressureSequence() : Pressure(0.0), InPtr(0)
639 : {
640 56 : }
641 : };
642 :
643 547 : struct FluidData
644 : {
645 : // Members
646 : std::string Name;
647 : bool IsGlycol;
648 :
649 : // Default Constructor
650 469 : FluidData() : IsGlycol(false)
651 : {
652 469 : }
653 : };
654 :
655 : // Object Data
656 938 : Array1D<FluidTempData> FluidTemps;
657 938 : Array1D<PressureSequence> PressurePtr;
658 938 : Array1D<FluidData> FluidNames;
659 :
660 469 : MaxAlphas = 0;
661 469 : MaxNumbers = 0;
662 469 : if (state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:Name") > 0) {
663 36 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, "FluidProperties:Name", Status, NumAlphas, NumNumbers);
664 36 : MaxAlphas = max(MaxAlphas, NumAlphas);
665 36 : MaxNumbers = max(MaxNumbers, NumNumbers);
666 : }
667 469 : if (state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:GlycolConcentration") > 0) {
668 56 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(
669 28 : state, "FluidProperties:GlycolConcentration", Status, NumAlphas, NumNumbers);
670 28 : MaxAlphas = max(MaxAlphas, NumAlphas);
671 28 : MaxNumbers = max(MaxNumbers, NumNumbers);
672 : }
673 469 : NumOfFluidTempArrays = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:Temperatures");
674 469 : if (NumOfFluidTempArrays > 0) {
675 29 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, "FluidProperties:Temperatures", Status, NumAlphas, NumNumbers);
676 29 : MaxAlphas = max(MaxAlphas, NumAlphas);
677 29 : MaxNumbers = max(MaxNumbers, NumNumbers);
678 : }
679 469 : NumOfSatFluidPropArrays = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:Saturated");
680 469 : if (NumOfSatFluidPropArrays > 0) {
681 27 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, "FluidProperties:Saturated", Status, NumAlphas, NumNumbers);
682 27 : MaxAlphas = max(MaxAlphas, NumAlphas);
683 27 : MaxNumbers = max(MaxNumbers, NumNumbers);
684 : }
685 469 : NumOfSHFluidPropArrays = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:Superheated");
686 469 : if (NumOfSHFluidPropArrays > 0) {
687 27 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, "FluidProperties:Superheated", Status, NumAlphas, NumNumbers);
688 27 : MaxAlphas = max(MaxAlphas, NumAlphas);
689 27 : MaxNumbers = max(MaxNumbers, NumNumbers);
690 : }
691 469 : NumOfGlyFluidPropArrays = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:Concentration");
692 469 : if (NumOfGlyFluidPropArrays > 0) {
693 4 : state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, "FluidProperties:Concentration", Status, NumAlphas, NumNumbers);
694 4 : MaxAlphas = max(MaxAlphas, NumAlphas);
695 4 : MaxNumbers = max(MaxNumbers, NumNumbers);
696 : }
697 :
698 469 : Alphas.allocate(MaxAlphas);
699 469 : cAlphaFieldNames.allocate(MaxAlphas);
700 469 : lAlphaFieldBlanks.allocate(MaxAlphas);
701 :
702 469 : Alphas = "";
703 469 : cAlphaFieldNames = "";
704 469 : lAlphaFieldBlanks = false;
705 :
706 469 : Numbers.allocate(MaxNumbers);
707 469 : cNumericFieldNames.allocate(MaxNumbers);
708 469 : lNumericFieldBlanks.allocate(MaxNumbers);
709 :
710 469 : Numbers = 0.0;
711 469 : cNumericFieldNames = "";
712 469 : lNumericFieldBlanks = false;
713 :
714 469 : InitializeGlycRoutines();
715 :
716 : // Check to see if there is any FluidName input. If not, this is okay as
717 : // long as the user only desires to simulate loops with water. More than
718 : // one FluidName input is not allowed.
719 469 : CurrentModuleObject = "FluidProperties:Name";
720 469 : NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject);
721 :
722 469 : FluidNames.allocate(NumOfOptionalInput);
723 :
724 : // Get a count on the number of refrigerants and the number of glycols entered
725 : // so that the main derived types can be allocated
726 469 : FluidNum = 0;
727 508 : for (Loop = 1; Loop <= NumOfOptionalInput; ++Loop) {
728 39 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
729 : CurrentModuleObject,
730 : Loop,
731 : Alphas,
732 : NumAlphas,
733 : Numbers,
734 : NumNumbers,
735 : Status,
736 : lNumericFieldBlanks,
737 : lAlphaFieldBlanks,
738 : cAlphaFieldNames,
739 : cNumericFieldNames);
740 39 : if (UtilityRoutines::IsNameEmpty(state, Alphas(1), CurrentModuleObject, ErrorsFound)) continue;
741 39 : ++FluidNum;
742 39 : FluidNames(FluidNum).Name = Alphas(1);
743 39 : if (UtilityRoutines::SameString(Alphas(2), Refrig)) {
744 28 : ++state.dataFluidProps->NumOfRefrigerants;
745 28 : FluidNames(FluidNum).IsGlycol = false;
746 11 : } else if (UtilityRoutines::SameString(Alphas(2), Glycol)) {
747 11 : ++state.dataFluidProps->NumOfGlycols;
748 11 : FluidNames(FluidNum).IsGlycol = true;
749 : } else {
750 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + "=\"" + Alphas(1) + "\", invalid type");
751 0 : ShowContinueError(state, "...entered value=\"" + Alphas(2) + ", Only REFRIGERANT or GLYCOL allowed as " + cAlphaFieldNames(2));
752 0 : ErrorsFound = true;
753 : }
754 : }
755 :
756 469 : if (ErrorsFound) {
757 0 : ShowFatalError(state, std::string{RoutineName} + " Previous errors in input cause program termination.");
758 : }
759 :
760 469 : if (state.dataFluidProps->NumOfRefrigerants + 1 > 0) {
761 469 : state.dataFluidProps->RefrigData.allocate(state.dataFluidProps->NumOfRefrigerants + 1);
762 469 : state.dataFluidProps->RefrigUsed.allocate(state.dataFluidProps->NumOfRefrigerants + 1);
763 469 : state.dataFluidProps->RefrigUsed = false;
764 469 : state.dataFluidProps->RefrigErrorTracking.allocate(state.dataFluidProps->NumOfRefrigerants + 1);
765 : }
766 469 : if (state.dataFluidProps->NumOfGlycols > 0) {
767 11 : state.dataFluidProps->GlyRawData.allocate(state.dataFluidProps->NumOfGlycols);
768 : }
769 :
770 : // Take the fluid names and assign them to the appropriate derived type
771 469 : state.dataFluidProps->NumOfRefrigerants = 1;
772 469 : state.dataFluidProps->NumOfGlycols = 0;
773 469 : state.dataFluidProps->RefrigData(1).Name = "STEAM";
774 469 : state.dataFluidProps->RefrigUsed(1) = true;
775 469 : state.dataFluidProps->RefrigErrorTracking(1).Name = "STEAM";
776 508 : for (Loop = 1; Loop <= FluidNum; ++Loop) {
777 39 : if (!FluidNames(Loop).IsGlycol) {
778 28 : ++state.dataFluidProps->NumOfRefrigerants;
779 28 : state.dataFluidProps->RefrigData(state.dataFluidProps->NumOfRefrigerants).Name = FluidNames(Loop).Name;
780 28 : state.dataFluidProps->RefrigErrorTracking(state.dataFluidProps->NumOfRefrigerants).Name = FluidNames(Loop).Name;
781 11 : } else if (FluidNames(Loop).IsGlycol) {
782 11 : ++state.dataFluidProps->NumOfGlycols;
783 11 : state.dataFluidProps->GlyRawData(state.dataFluidProps->NumOfGlycols).Name = FluidNames(Loop).Name;
784 : }
785 : }
786 :
787 469 : FluidNames.deallocate();
788 :
789 469 : state.dataFluidProps->RefrigData(1).NumPsPoints = DefaultNumSteamTemps;
790 469 : state.dataFluidProps->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps);
791 469 : state.dataFluidProps->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps);
792 469 : state.dataFluidProps->RefrigData(1).NumHPoints = DefaultNumSteamTemps;
793 469 : state.dataFluidProps->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps);
794 469 : state.dataFluidProps->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps);
795 469 : state.dataFluidProps->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps);
796 469 : state.dataFluidProps->RefrigData(1).NumCpPoints = DefaultNumSteamTemps;
797 469 : state.dataFluidProps->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps);
798 469 : state.dataFluidProps->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps);
799 469 : state.dataFluidProps->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps);
800 469 : state.dataFluidProps->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps;
801 469 : state.dataFluidProps->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps);
802 469 : state.dataFluidProps->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps);
803 469 : state.dataFluidProps->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps);
804 :
805 469 : state.dataFluidProps->RefrigData(1).PsTemps = DefaultSteamTemps;
806 469 : state.dataFluidProps->RefrigData(1).PsValues = DefaultSteamPressData;
807 469 : state.dataFluidProps->RefrigData(1).HTemps = DefaultSteamTemps;
808 469 : state.dataFluidProps->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData;
809 469 : state.dataFluidProps->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData;
810 469 : state.dataFluidProps->RefrigData(1).CpTemps = DefaultSteamTemps;
811 469 : state.dataFluidProps->RefrigData(1).CpfValues = DefaultSteamCpFluidData;
812 469 : state.dataFluidProps->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData;
813 469 : state.dataFluidProps->RefrigData(1).RhoTemps = DefaultSteamTemps;
814 469 : state.dataFluidProps->RefrigData(1).RhofValues = DefaultSteamDensityFluidData;
815 469 : state.dataFluidProps->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData;
816 :
817 469 : state.dataFluidProps->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps;
818 469 : state.dataFluidProps->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure;
819 469 : state.dataFluidProps->RefrigData(1).SHTemps.allocate(state.dataFluidProps->RefrigData(1).NumSuperTempPts);
820 469 : state.dataFluidProps->RefrigData(1).SHPress.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts);
821 1407 : state.dataFluidProps->RefrigData(1).HshValues.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts,
822 1407 : state.dataFluidProps->RefrigData(1).NumSuperTempPts);
823 1407 : state.dataFluidProps->RefrigData(1).RhoshValues.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts,
824 1407 : state.dataFluidProps->RefrigData(1).NumSuperTempPts);
825 469 : state.dataFluidProps->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps;
826 469 : state.dataFluidProps->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData;
827 469 : state.dataFluidProps->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData;
828 469 : state.dataFluidProps->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData;
829 :
830 : // Read in all of the temperature arrays in the input file
831 469 : FluidTemps.allocate(NumOfFluidTempArrays);
832 :
833 469 : CurrentModuleObject = "FluidProperties:Temperatures";
834 :
835 529 : for (Loop = 1; Loop <= NumOfFluidTempArrays; ++Loop) {
836 :
837 60 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
838 : CurrentModuleObject,
839 : Loop,
840 : Alphas,
841 : NumAlphas,
842 : Numbers,
843 : NumNumbers,
844 : Status,
845 : lNumericFieldBlanks,
846 : lAlphaFieldBlanks,
847 : cAlphaFieldNames,
848 : cNumericFieldNames);
849 :
850 60 : FluidTemps(Loop).Name = Alphas(1);
851 60 : FluidTemps(Loop).NumOfTemps = NumNumbers;
852 :
853 60 : FluidTemps(Loop).Temps.allocate(FluidTemps(Loop).NumOfTemps);
854 60 : FluidTemps(Loop).Temps = Numbers({1, NumNumbers});
855 :
856 4785 : for (TempLoop = 2; TempLoop <= FluidTemps(Loop).NumOfTemps; ++TempLoop) {
857 4725 : if (FluidTemps(Loop).Temps(TempLoop) <= FluidTemps(Loop).Temps(TempLoop - 1)) {
858 0 : ShowSevereError(state,
859 0 : std::string{RoutineName} + CurrentModuleObject + " name=" + FluidTemps(Loop).Name +
860 : ", lists must have data in ascending order");
861 0 : ShowContinueError(state,
862 0 : format("First out of order occurrence at Temperature #({}) {{{:.R3}}} >= Temp({}) {{{:.R3}}}",
863 0 : TempLoop - 1,
864 0 : FluidTemps(Loop).Temps(TempLoop - 1),
865 : TempLoop,
866 0 : FluidTemps(Loop).Temps(TempLoop)));
867 0 : ErrorsFound = true;
868 0 : break;
869 : }
870 : }
871 : }
872 :
873 : // *************** REFRIGERANTS ***************
874 : // Go through each refrigerant found in the fluid names statement and read in the data
875 : // Note that every valid fluid must have ALL of the necessary data or a fatal error will
876 : // be produced.
877 497 : for (Loop = 2; Loop <= state.dataFluidProps->NumOfRefrigerants; ++Loop) {
878 :
879 : // For each property, cycle through all the valid input until the proper match is found.
880 :
881 : // ********** SATURATED DATA SECTION **********
882 :
883 : // Get: ***** Saturation Pressure temperatures and data (fluidgas only) *****
884 : // This section added by S.J.Rees May 2002.
885 28 : CurrentModuleObject = "FluidProperties:Saturated";
886 28 : TempsName = "";
887 35 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
888 :
889 35 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
890 : CurrentModuleObject,
891 : InData,
892 : Alphas,
893 : NumAlphas,
894 : Numbers,
895 : NumNumbers,
896 : Status,
897 : lNumericFieldBlanks,
898 : lAlphaFieldBlanks,
899 : cAlphaFieldNames,
900 : cNumericFieldNames);
901 :
902 98 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
903 63 : (UtilityRoutines::SameString(Alphas(2), Pressure)) && (UtilityRoutines::SameString(Alphas(3), GasFluid))) {
904 :
905 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
906 :
907 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
908 28 : TempsName = FluidTemps(TempLoop).Name;
909 : // At this point, we have found the correct input line and found a match
910 : // for the temperature array. It's time to load up the local derived type.
911 28 : state.dataFluidProps->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps;
912 28 : state.dataFluidProps->RefrigData(Loop).PsTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumPsPoints);
913 28 : state.dataFluidProps->RefrigData(Loop).PsValues.allocate(state.dataFluidProps->RefrigData(Loop).NumPsPoints);
914 :
915 : // Make sure the number of points in the two arrays (temps and values) are the same
916 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumPsPoints) {
917 0 : ShowSevereError(
918 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
919 0 : ShowContinueError(state,
920 0 : "Temperature Name=" + TempsName +
921 : ", Temperature array and fluid saturation pressure array must have the same number of points");
922 0 : ShowContinueError(state,
923 0 : format("Temperature # points={} whereas {} # pressure points={}",
924 : NumNumbers,
925 0 : state.dataFluidProps->RefrigData(Loop).Name,
926 0 : state.dataFluidProps->RefrigData(Loop).NumPsPoints));
927 0 : ErrorsFound = true;
928 0 : break; // the TempLoop DO Loop
929 : }
930 :
931 : // Same number of points so assign the values
932 28 : state.dataFluidProps->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps;
933 28 : state.dataFluidProps->RefrigData(Loop).PsValues = Numbers({1, NumNumbers});
934 :
935 28 : break; // the TempLoop DO loop
936 : }
937 :
938 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
939 3 : if (TempLoop == NumOfFluidTempArrays) {
940 0 : ShowSevereError(state,
941 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
942 0 : ShowContinueError(state, "Found saturated fluid gas/fluid pressure input but no matching temperature array");
943 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
944 0 : ErrorsFound = true;
945 : }
946 :
947 : } // ...end of FluidTemps DO loop
948 :
949 28 : break; // the InData DO loop
950 : }
951 :
952 : // If it made it all the way to the last input occurrence and didn't find a match,
953 : // then no sat press data found
954 7 : if (InData == NumOfSatFluidPropArrays) {
955 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
956 0 : ShowContinueError(state,
957 0 : "No Gas/Fluid Saturation Pressure found. Need properties with " + cAlphaFieldNames(2) + "=\"Pressure\" and " +
958 0 : cAlphaFieldNames(3) + "=\"FluidGas\".");
959 0 : ErrorsFound = true;
960 : }
961 :
962 : } // ...end of DO loop through all of the input syntax trying to find saturation pressure for this refrigerant
963 :
964 : // Get: ***** ENTHALPY of SATURATED LIQUID *****
965 28 : CurrentModuleObject = "FluidProperties:Saturated";
966 28 : TempsName = "";
967 63 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
968 :
969 63 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
970 : CurrentModuleObject,
971 : InData,
972 : Alphas,
973 : NumAlphas,
974 : Numbers,
975 : NumNumbers,
976 : Status,
977 : lNumericFieldBlanks,
978 : lAlphaFieldBlanks,
979 : cAlphaFieldNames,
980 : cNumericFieldNames);
981 :
982 182 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
983 91 : (UtilityRoutines::SameString(Alphas(2), Enthalpy)) && (UtilityRoutines::SameString(Alphas(3), Fluid))) {
984 :
985 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
986 :
987 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
988 28 : TempsName = FluidTemps(TempLoop).Name;
989 : // At this point, we have found the correct input line and found a match
990 : // for the temperature array. It's time to load up the local derived type.
991 28 : state.dataFluidProps->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps;
992 28 : state.dataFluidProps->RefrigData(Loop).HTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints);
993 28 : state.dataFluidProps->RefrigData(Loop).HfValues.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints);
994 :
995 : // Make sure the number of points in the two arrays (temps and values) are the same
996 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumHPoints) {
997 0 : ShowSevereError(
998 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
999 0 : ShowSevereError(state,
1000 0 : "Temperature Name=" + TempsName +
1001 : ", Temperature array and saturated fluid enthalpy array must have the same number of points");
1002 0 : ShowContinueError(state,
1003 0 : format("Temperature # points={} whereas {} # points={}",
1004 : NumNumbers,
1005 0 : state.dataFluidProps->RefrigData(Loop).Name,
1006 0 : state.dataFluidProps->RefrigData(Loop).NumHPoints));
1007 0 : ErrorsFound = true;
1008 0 : break; // the TempLoop DO Loop
1009 : }
1010 :
1011 : // Same number of points so assign the values
1012 28 : state.dataFluidProps->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps;
1013 28 : state.dataFluidProps->RefrigData(Loop).HfValues = Numbers({1, NumNumbers});
1014 :
1015 28 : break; // the TempLoop DO loop
1016 : }
1017 :
1018 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
1019 3 : if (TempLoop == NumOfFluidTempArrays) {
1020 0 : ShowSevereError(state,
1021 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1022 0 : ShowContinueError(state, "Found saturated fluid enthalpy input but no matching temperature array");
1023 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1024 0 : ErrorsFound = true;
1025 : }
1026 :
1027 : } // ...end of FluidTemps DO loop
1028 :
1029 28 : break; // the InData DO loop
1030 : }
1031 :
1032 : // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid enthalpy data found
1033 35 : if (InData == NumOfSatFluidPropArrays) {
1034 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1035 0 : ShowContinueError(state,
1036 0 : "No Saturated Fluid Enthalpy found. Need properties to be entered with " + cAlphaFieldNames(2) +
1037 0 : "=\"Enthalpy\" and " + cAlphaFieldNames(3) + "=\"Fluid\".");
1038 0 : ErrorsFound = true;
1039 : }
1040 :
1041 : } // ...end of DO loop through all of the input syntax trying to find saturated fluid enthalpy for this refrigerant
1042 :
1043 : // Get: ***** ENTHALPY of SATURATED LIQUID/VAPOR ***** (difference between Hf and Hg, i.e. Hfg)
1044 28 : CurrentModuleObject = "FluidProperties:Saturated";
1045 91 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
1046 :
1047 91 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1048 : CurrentModuleObject,
1049 : InData,
1050 : Alphas,
1051 : NumAlphas,
1052 : Numbers,
1053 : NumNumbers,
1054 : Status,
1055 : lNumericFieldBlanks,
1056 : lAlphaFieldBlanks,
1057 : cAlphaFieldNames,
1058 : cNumericFieldNames);
1059 :
1060 266 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1061 147 : (UtilityRoutines::SameString(Alphas(2), Enthalpy)) && (UtilityRoutines::SameString(Alphas(3), GasFluid))) {
1062 :
1063 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1064 :
1065 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
1066 28 : if (!UtilityRoutines::SameString(FluidTemps(TempLoop).Name, TempsName)) {
1067 0 : ShowSevereError(
1068 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1069 0 : ShowContinueError(state, "Temperatures for enthalpy fluid and gas/fluid points are not the same");
1070 0 : ShowContinueError(state, "Name=" + Alphas(4) + " => " + FluidTemps(TempLoop).Name + " /= " + TempsName);
1071 0 : ErrorsFound = true;
1072 0 : break;
1073 : }
1074 : // At this point, we have found the correct input line and found a match
1075 : // for the temperature array. It's time to load up the local derived type.
1076 28 : state.dataFluidProps->RefrigData(Loop).HfgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints);
1077 :
1078 : // Make sure the number of points in the two arrays (temps and values) are the same
1079 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumHPoints) {
1080 0 : ShowSevereError(
1081 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1082 0 : ShowContinueError(
1083 : state,
1084 0 : "Temperature Name=" + TempsName +
1085 : ", Temperature array and saturated gas/fluid enthalpy array must have the same number of points");
1086 0 : ShowContinueError(state,
1087 0 : format("Temperature # points={} whereas {} # points={}",
1088 : NumNumbers,
1089 0 : state.dataFluidProps->RefrigData(Loop).Name,
1090 0 : state.dataFluidProps->RefrigData(Loop).NumHPoints));
1091 0 : ErrorsFound = true;
1092 0 : break; // the TempLoop DO Loop
1093 : }
1094 :
1095 : // Same number of points so assign the values
1096 28 : state.dataFluidProps->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers});
1097 :
1098 28 : break; // the TempLoop DO loop
1099 : }
1100 :
1101 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
1102 3 : if (TempLoop == NumOfFluidTempArrays) {
1103 0 : ShowSevereError(state,
1104 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1105 0 : ShowContinueError(state, "Found saturated gas/fluid enthalpy input but no matching temperature array");
1106 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1107 0 : ErrorsFound = true;
1108 : }
1109 :
1110 : } // ...end of FluidTemps DO loop
1111 :
1112 28 : break; // the InData DO loop
1113 : }
1114 :
1115 : // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g enthalpy data found
1116 63 : if (InData == NumOfSatFluidPropArrays) {
1117 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1118 0 : ShowContinueError(state,
1119 0 : "No Saturated Gas/Fluid Enthalpy found. Need properties to be entered with " + cAlphaFieldNames(2) +
1120 0 : "=\"Enthalpy\" and " + cAlphaFieldNames(3) + "=\"FluidGas\".");
1121 0 : ErrorsFound = true;
1122 : }
1123 :
1124 : } // ...end of DO loop through all of the input syntax trying to find saturated gas/fluid enthalpy for this refrigerant
1125 :
1126 : // Get: ***** SPECIFIC HEAT of SATURATED LIQUID *****
1127 28 : CurrentModuleObject = "FluidProperties:Saturated";
1128 28 : TempsName = "";
1129 175 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
1130 :
1131 175 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1132 : CurrentModuleObject,
1133 : InData,
1134 : Alphas,
1135 : NumAlphas,
1136 : Numbers,
1137 : NumNumbers,
1138 : Status,
1139 : lNumericFieldBlanks,
1140 : lAlphaFieldBlanks,
1141 : cAlphaFieldNames,
1142 : cNumericFieldNames);
1143 :
1144 518 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1145 203 : (UtilityRoutines::SameString(Alphas(2), SpecificHeat)) && (UtilityRoutines::SameString(Alphas(3), Fluid))) {
1146 :
1147 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1148 :
1149 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
1150 28 : TempsName = FluidTemps(TempLoop).Name;
1151 : // At this point, we have found the correct input line and found a match
1152 : // for the temperature array. It's time to load up the local derived type.
1153 28 : state.dataFluidProps->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps;
1154 28 : state.dataFluidProps->RefrigData(Loop).CpTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints);
1155 28 : state.dataFluidProps->RefrigData(Loop).CpfValues.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints);
1156 :
1157 : // Make sure the number of points in the two arrays (temps and values) are the same
1158 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumCpPoints) {
1159 0 : ShowSevereError(
1160 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1161 0 : ShowSevereError(state,
1162 0 : "Temperature Name=" + TempsName +
1163 : ", Temperature array and saturated fluid Cp array must have the same number of points");
1164 0 : ShowContinueError(state,
1165 0 : format("Temperature # points={} whereas {} # Cp points={}",
1166 : NumNumbers,
1167 0 : state.dataFluidProps->RefrigData(Loop).Name,
1168 0 : state.dataFluidProps->RefrigData(Loop).NumCpPoints));
1169 0 : ErrorsFound = true;
1170 0 : break; // the TempLoop DO Loop
1171 : }
1172 :
1173 : // Same number of points so assign the values
1174 28 : state.dataFluidProps->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps;
1175 28 : state.dataFluidProps->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers});
1176 :
1177 28 : break; // the TempLoop DO loop
1178 : }
1179 :
1180 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
1181 3 : if (TempLoop == NumOfFluidTempArrays) {
1182 0 : ShowSevereError(state,
1183 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1184 0 : ShowContinueError(state, "Found saturated fluid specific heat (Cp) input but no matching temperature array");
1185 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1186 0 : ErrorsFound = true;
1187 : }
1188 :
1189 : } // ...end of FluidTemps DO loop
1190 :
1191 28 : break; // the InData DO loop
1192 : }
1193 :
1194 : // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid Cp data found
1195 147 : if (InData == NumOfSatFluidPropArrays) {
1196 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1197 0 : ShowContinueError(state,
1198 0 : "No Saturated Fluid Specific Heat found. Need properties to be entered with " + cAlphaFieldNames(2) +
1199 0 : "=\"SpecificHeat\" and " + cAlphaFieldNames(3) + "=\"Fluid\".");
1200 0 : ErrorsFound = true;
1201 : }
1202 :
1203 : } // ...end of DO loop through all of the input syntax trying to find saturated fluid Cp for this refrigerant
1204 :
1205 : // Get: ***** SPECIFIC HEAT of SATURATED LIQUID/VAPOR ***** (difference between Cpf and Cpg, i.e. Cpfg)
1206 28 : CurrentModuleObject = "FluidProperties:Saturated";
1207 203 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
1208 :
1209 203 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1210 : CurrentModuleObject,
1211 : InData,
1212 : Alphas,
1213 : NumAlphas,
1214 : Numbers,
1215 : NumNumbers,
1216 : Status,
1217 : lNumericFieldBlanks,
1218 : lAlphaFieldBlanks,
1219 : cAlphaFieldNames,
1220 : cNumericFieldNames);
1221 :
1222 602 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1223 259 : (UtilityRoutines::SameString(Alphas(2), SpecificHeat)) && (UtilityRoutines::SameString(Alphas(3), GasFluid))) {
1224 :
1225 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1226 :
1227 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
1228 28 : if (!UtilityRoutines::SameString(FluidTemps(TempLoop).Name, TempsName)) {
1229 0 : ShowSevereError(
1230 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1231 0 : ShowContinueError(state, "Temperatures for specific heat fluid and gas/fluid points are not the same");
1232 0 : ShowContinueError(state, "Name=" + Alphas(4) + " => " + FluidTemps(TempLoop).Name + " /= " + TempsName);
1233 0 : ErrorsFound = true;
1234 0 : break;
1235 : }
1236 : // At this point, we have found the correct input line and found a match
1237 : // for the temperature array. It's time to load up the local derived type.
1238 28 : state.dataFluidProps->RefrigData(Loop).CpfgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints);
1239 :
1240 : // Make sure the number of points in the two arrays (temps and values) are the same
1241 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumCpPoints) {
1242 0 : ShowSevereError(
1243 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1244 0 : ShowContinueError(state,
1245 0 : "Temperature Name=" + TempsName +
1246 : ", Temperature array and saturated gas/fluid Cp array must have the same number of points");
1247 0 : ShowContinueError(state,
1248 0 : format("Temperature # points={} whereas {} # Cp points={}",
1249 : NumNumbers,
1250 0 : state.dataFluidProps->RefrigData(Loop).Name,
1251 0 : state.dataFluidProps->RefrigData(Loop).NumCpPoints));
1252 0 : ErrorsFound = true;
1253 0 : break; // the TempLoop DO Loop
1254 : }
1255 :
1256 : // Same number of points so assign the values
1257 28 : state.dataFluidProps->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers});
1258 :
1259 28 : break; // the TempLoop DO loop
1260 : }
1261 :
1262 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
1263 3 : if (TempLoop == NumOfFluidTempArrays) {
1264 0 : ShowSevereError(state,
1265 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1266 0 : ShowContinueError(state, "Found saturated gas/fluid specific heat (Cp) input but no matching temperature array");
1267 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1268 0 : ErrorsFound = true;
1269 : }
1270 :
1271 : } // ...end of FluidTemps DO loop
1272 :
1273 28 : break; // the InData DO loop
1274 : }
1275 :
1276 : // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g Cp data found
1277 175 : if (InData == NumOfSatFluidPropArrays) {
1278 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1279 0 : ShowContinueError(state,
1280 0 : "No Saturated Gas/Fluid Specific Heat found. Need properties to be entered with " + cAlphaFieldNames(2) +
1281 0 : "=\"SpecificHeat\" and " + cAlphaFieldNames(3) + "=\"FluidGas\".");
1282 0 : ErrorsFound = true;
1283 : }
1284 :
1285 : } // ...end of DO loop through all of the input syntax trying to find saturated gas/fluid Cp for this refrigerant
1286 :
1287 : // Get: ***** DENSITY of SATURATED LIQUID *****
1288 28 : CurrentModuleObject = "FluidProperties:Saturated";
1289 28 : TempsName = "";
1290 119 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
1291 :
1292 119 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1293 : CurrentModuleObject,
1294 : InData,
1295 : Alphas,
1296 : NumAlphas,
1297 : Numbers,
1298 : NumNumbers,
1299 : Status,
1300 : lNumericFieldBlanks,
1301 : lAlphaFieldBlanks,
1302 : cAlphaFieldNames,
1303 : cNumericFieldNames);
1304 :
1305 350 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1306 147 : (UtilityRoutines::SameString(Alphas(2), Density)) && (UtilityRoutines::SameString(Alphas(3), Fluid))) {
1307 :
1308 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1309 :
1310 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
1311 28 : TempsName = FluidTemps(TempLoop).Name;
1312 : // At this point, we have found the correct input line and found a match
1313 : // for the temperature array. It's time to load up the local derived type.
1314 28 : state.dataFluidProps->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps;
1315 28 : state.dataFluidProps->RefrigData(Loop).RhoTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints);
1316 28 : state.dataFluidProps->RefrigData(Loop).RhofValues.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints);
1317 :
1318 : // Make sure the number of points in the two arrays (temps and values) are the same
1319 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumRhoPoints) {
1320 0 : ShowSevereError(
1321 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1322 0 : ShowContinueError(state,
1323 0 : "Temperature Name=" + TempsName +
1324 : ", Temperature array and saturated fluid density array must have the same number of points");
1325 0 : ShowContinueError(state,
1326 0 : format("Temperature # points={} whereas {} # Density points={}",
1327 : NumNumbers,
1328 0 : state.dataFluidProps->RefrigData(Loop).Name,
1329 0 : state.dataFluidProps->RefrigData(Loop).NumRhoPoints));
1330 0 : ErrorsFound = true;
1331 0 : break; // the TempLoop DO Loop
1332 : }
1333 :
1334 : // Same number of points so assign the values
1335 28 : state.dataFluidProps->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps;
1336 28 : state.dataFluidProps->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers});
1337 :
1338 28 : break; // the TempLoop DO loop
1339 : }
1340 :
1341 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
1342 3 : if (TempLoop == NumOfFluidTempArrays) {
1343 0 : ShowSevereError(state,
1344 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1345 0 : ShowContinueError(state, "Found saturated fluid density input but no matching temperature array");
1346 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1347 0 : ErrorsFound = true;
1348 : }
1349 :
1350 : } // ...end of FluidTemps DO loop
1351 :
1352 28 : break; // the InData DO loop
1353 : }
1354 :
1355 : // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid density data found
1356 91 : if (InData == NumOfSatFluidPropArrays) {
1357 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1358 0 : ShowContinueError(state,
1359 0 : "No Saturated Fluid Density found. Need properties to be entered with " + cAlphaFieldNames(2) +
1360 0 : "=\"Density\" and " + cAlphaFieldNames(3) + "=\"Fluid\".");
1361 0 : ErrorsFound = true;
1362 : }
1363 :
1364 : } // ...end of DO loop through all of the input syntax trying to find saturated fluid enthalpy for this refrigerant
1365 :
1366 : // Get: ***** DENSITY of SATURATED LIQUID/VAPOR ***** (difference between Rhof and Rhog, i.e. Rhofg)
1367 28 : CurrentModuleObject = "FluidProperties:Saturated";
1368 147 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
1369 :
1370 147 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1371 : CurrentModuleObject,
1372 : InData,
1373 : Alphas,
1374 : NumAlphas,
1375 : Numbers,
1376 : NumNumbers,
1377 : Status,
1378 : lNumericFieldBlanks,
1379 : lAlphaFieldBlanks,
1380 : cAlphaFieldNames,
1381 : cNumericFieldNames);
1382 :
1383 434 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1384 203 : (UtilityRoutines::SameString(Alphas(2), Density)) && (UtilityRoutines::SameString(Alphas(3), GasFluid))) {
1385 :
1386 31 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1387 :
1388 31 : if (UtilityRoutines::SameString(Alphas(4), FluidTemps(TempLoop).Name)) {
1389 28 : if (!UtilityRoutines::SameString(FluidTemps(TempLoop).Name, TempsName)) {
1390 0 : ShowSevereError(
1391 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1392 0 : ShowContinueError(state, "Temperatures for density fluid and gas/fluid points are not the same");
1393 0 : ShowContinueError(state, "Name=" + Alphas(4) + " => " + FluidTemps(TempLoop).Name + " /= " + TempsName);
1394 0 : ErrorsFound = true;
1395 0 : break;
1396 : }
1397 : // At this point, we have found the correct input line and found a match
1398 : // for the temperature array. It's time to load up the local derived type.
1399 28 : state.dataFluidProps->RefrigData(Loop).RhofgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints);
1400 :
1401 : // Make sure the number of points in the two arrays (temps and values) are the same
1402 28 : if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumRhoPoints) {
1403 0 : ShowSevereError(
1404 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1405 0 : ShowContinueError(
1406 : state,
1407 0 : "Temperature Name=" + TempsName +
1408 : ", Temperature array and saturated gas/fluid density array must have the same number of points");
1409 0 : ShowContinueError(state,
1410 0 : format("Temperature # points={} whereas {} # density points={}",
1411 : NumNumbers,
1412 0 : state.dataFluidProps->RefrigData(Loop).Name,
1413 0 : state.dataFluidProps->RefrigData(Loop).NumRhoPoints));
1414 0 : ErrorsFound = true;
1415 0 : break; // the TempLoop DO Loop
1416 : }
1417 :
1418 : // Same number of points so assign the values
1419 28 : state.dataFluidProps->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers});
1420 :
1421 28 : break; // the TempLoop DO loop
1422 : }
1423 :
1424 : // If it made it all the way to the last temperature array and didn't find a match, then no match was found
1425 3 : if (TempLoop == NumOfFluidTempArrays) {
1426 0 : ShowSevereError(state,
1427 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1428 0 : ShowContinueError(state, "Found saturated gas/fluid density input but no matching temperature array");
1429 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1430 0 : ErrorsFound = true;
1431 : }
1432 :
1433 : } // ...end of FluidTemps DO loop
1434 :
1435 28 : break; // the InData DO loop
1436 : }
1437 :
1438 : // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g density data found
1439 119 : if (InData == NumOfSatFluidPropArrays) {
1440 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1441 0 : ShowSevereError(state,
1442 0 : "No Saturated Gas/Fluid Density found. Need properties to be entered with " + cAlphaFieldNames(2) +
1443 0 : "=\"Density\" and " + cAlphaFieldNames(3) + "=\"FluidGas\".");
1444 0 : ErrorsFound = true;
1445 : }
1446 :
1447 : } // ...end of DO loop through all of the input syntax trying to find saturated gas/fluid density for this refrigerant
1448 :
1449 : // Check: TEMPERATURES for saturated density (must all be the same)
1450 : // IF (RefrigData(Loop)%NumCpPoints /= RefrigData(Loop)%NumCpPoints) THEN
1451 : //!!! Error -- can never happen, does this mean NumCp vs. NumRho?
1452 : // CALL ShowFatalError(state, 'GetFluidPropertiesData: Number of specific heat fluid and gas/fluid points are not the same')
1453 : // ELSE
1454 : // DO TempLoop = 1, RefrigData(Loop)%NumCpPoints
1455 : //!!! Error -- something else that can never happen
1456 : // IF (ABS(RefrigData(Loop)%CpTemps(TempLoop)-RefrigData(Loop)%CpTemps(TempLoop)) > TempToler) THEN
1457 : // CALL ShowSevereError(state, 'GetFluidPropertiesData: Temperatures for specific heat fluid and '// &
1458 : // 'gas/fluid points are not the same')
1459 : // CALL ShowContinueError(state, 'Error occurs in Refrigerant Data Name='//TRIM(RefrigData(Loop)%Name))
1460 : // WRITE(String1,*) TempLoop
1461 : // String1=ADJUSTL(String1)
1462 : // String2=TrimSigDigits(RefrigData(Loop)%CpTemps(TempLoop),3)
1463 : // String2=ADJUSTL(String2)
1464 : // String4=TrimSigDigits(RefrigData(Loop)%CpTemps(TempLoop),3)
1465 : // String4=ADJUSTL(String4)
1466 : // CALL ShowContinueError(state, 'First Occurrence at CpTemp('//TRIM(String1)//') {'//TRIM(String2)//'} /=
1467 : // {'//TRIM(String4)//'}') ErrorsFound=.TRUE. EXIT
1468 : // ENDIF
1469 : // END DO
1470 : // END IF
1471 :
1472 : // Error check on entering saturated data
1473 28 : iTemp = 0;
1474 28 : CurrentModuleObject = "FluidProperties:Saturated";
1475 238 : for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) {
1476 :
1477 210 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1478 : CurrentModuleObject,
1479 : InData,
1480 : Alphas,
1481 : NumAlphas,
1482 : Numbers,
1483 : NumNumbers,
1484 : Status,
1485 : lNumericFieldBlanks,
1486 : lAlphaFieldBlanks,
1487 : cAlphaFieldNames,
1488 : cNumericFieldNames);
1489 210 : if (UtilityRoutines::SameString(Alphas(3), Fluid)) {
1490 120 : if (!UtilityRoutines::SameString(Alphas(2), Enthalpy) && !UtilityRoutines::SameString(Alphas(2), SpecificHeat) &&
1491 30 : !UtilityRoutines::SameString(Alphas(2), Density)) {
1492 0 : if (iTemp == 0) {
1493 0 : ShowWarningError(state,
1494 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1495 0 : ShowContinueError(state,
1496 0 : cAlphaFieldNames(3) + "=\"" + std::string{Fluid} + "\", but " + cAlphaFieldNames(2) + "=\"" +
1497 0 : Alphas(2) + "\" is not valid.");
1498 0 : ShowContinueError(state,
1499 0 : "Valid choices are \"" + std::string{Enthalpy} + "\", \"" + std::string{SpecificHeat} + "\", \"" +
1500 0 : std::string{Density} + "\".");
1501 0 : ShowContinueError(state, "This fluid property will not be processed mor available for the simulation.");
1502 : }
1503 0 : ++iTemp;
1504 : }
1505 120 : } else if (UtilityRoutines::SameString(Alphas(3), GasFluid)) {
1506 390 : if (!UtilityRoutines::SameString(Alphas(2), Pressure) && !UtilityRoutines::SameString(Alphas(2), Enthalpy) &&
1507 210 : !UtilityRoutines::SameString(Alphas(2), SpecificHeat) && !UtilityRoutines::SameString(Alphas(2), Density)) {
1508 0 : if (iTemp == 0) {
1509 0 : ShowWarningError(state,
1510 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1511 0 : ShowContinueError(state,
1512 0 : cAlphaFieldNames(3) + "=\"" + std::string{Fluid} + "\", but " + cAlphaFieldNames(2) + "=\"" +
1513 0 : Alphas(2) + "\" is not valid.");
1514 0 : ShowContinueError(state,
1515 0 : "Valid choices are \"" + std::string{Pressure} + "\", \"" + std::string{Enthalpy} + "\", \"" +
1516 0 : std::string{SpecificHeat} + "\", \"" + std::string{Density} + "\".");
1517 0 : ShowContinueError(state, "This fluid property will not be processed nor available for the simulation.");
1518 : }
1519 0 : ++iTemp;
1520 : }
1521 : } else {
1522 0 : if (iTemp == 0) {
1523 0 : ShowWarningError(state,
1524 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1525 0 : ShowContinueError(state, cAlphaFieldNames(3) + "=\"" + Alphas(3) + "\" is not valid.");
1526 0 : ShowContinueError(state, "Valid choices are \"" + std::string{Fluid} + "\", \"" + std::string{GasFluid} + "\".");
1527 0 : ShowContinueError(state, "This fluid property will not be processed nor available for the simulation.");
1528 : }
1529 0 : ++iTemp;
1530 : }
1531 : }
1532 :
1533 28 : if (iTemp > 1) {
1534 0 : ShowWarningError(state, format("{}{} has {} similar errors to the previous.", RoutineName, CurrentModuleObject, iTemp - 1));
1535 : }
1536 :
1537 : // ********** SUPERHEATED DATA SECTION **********
1538 : // Get: ***** ENTHALPY of SUPERHEATED GAS *****
1539 : // First find the number of pressure value syntax lines have been entered and
1540 : // make sure that all of the pressure input is linked to the same temperature list
1541 28 : CurrentModuleObject = "FluidProperties:Superheated";
1542 28 : TempsName = "";
1543 28 : FirstSHMatch = true;
1544 28 : NumOfPressPts = 0;
1545 3630 : for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) {
1546 3602 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1547 : CurrentModuleObject,
1548 : InData,
1549 : Alphas,
1550 : NumAlphas,
1551 : Numbers,
1552 : NumNumbers,
1553 : Status,
1554 : lNumericFieldBlanks,
1555 : lAlphaFieldBlanks,
1556 : cAlphaFieldNames,
1557 : cNumericFieldNames);
1558 :
1559 7064 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1560 3462 : (UtilityRoutines::SameString(Alphas(2), Enthalpy))) {
1561 1731 : ++NumOfPressPts;
1562 1731 : if (FirstSHMatch) {
1563 28 : TempsName = Alphas(3);
1564 28 : FirstSHMatch = false;
1565 : } else {
1566 1703 : if (!UtilityRoutines::SameString(TempsName, Alphas(3))) {
1567 0 : ShowSevereError(state,
1568 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1569 0 : ShowContinueError(state, "All superheated data for the same property must use the same temperature list");
1570 0 : ShowContinueError(state, "Expected name=" + TempsName + ", Entered name=" + Alphas(3));
1571 0 : ErrorsFound = true;
1572 : }
1573 : }
1574 : }
1575 : }
1576 28 : if (NumOfPressPts == 0) {
1577 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1578 0 : ShowContinueError(state, "No pressure data found for superheated enthalpy");
1579 0 : ErrorsFound = true;
1580 : }
1581 :
1582 : // Now allocate the arrays and read the data into the proper place
1583 : // First, allocate the temperature array and transfer the data from the FluidTemp array
1584 59 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1585 59 : if (UtilityRoutines::SameString(TempsName, FluidTemps(TempLoop).Name)) {
1586 28 : state.dataFluidProps->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps;
1587 28 : state.dataFluidProps->RefrigData(Loop).SHTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperTempPts);
1588 28 : state.dataFluidProps->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps;
1589 28 : break; // the TempLoop DO loop
1590 : }
1591 31 : if (TempLoop == NumOfFluidTempArrays) {
1592 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1593 0 : ShowContinueError(state, "No match for temperature array name found with superheated enthalpy data");
1594 0 : ShowContinueError(state, "Entered Temperature Name=" + TempsName);
1595 0 : ErrorsFound = true;
1596 : }
1597 : }
1598 :
1599 : // Next, allocate the pressure related arrays
1600 28 : state.dataFluidProps->RefrigData(Loop).NumSuperPressPts = NumOfPressPts;
1601 28 : state.dataFluidProps->RefrigData(Loop).SHPress.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts);
1602 84 : state.dataFluidProps->RefrigData(Loop).HshValues.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts,
1603 84 : state.dataFluidProps->RefrigData(Loop).NumSuperTempPts);
1604 :
1605 : // Finally, get the pressure and enthalpy values from the user input
1606 28 : CurrentModuleObject = "FluidProperties:Superheated";
1607 28 : NumOfPressPts = 0;
1608 28 : PressurePtr.allocate(NumOfSHFluidPropArrays);
1609 3630 : for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) {
1610 3602 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1611 : CurrentModuleObject,
1612 : InData,
1613 : Alphas,
1614 : NumAlphas,
1615 : Numbers,
1616 : NumNumbers,
1617 : Status,
1618 : lNumericFieldBlanks,
1619 : lAlphaFieldBlanks,
1620 : cAlphaFieldNames,
1621 : cNumericFieldNames);
1622 :
1623 7064 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1624 3462 : (UtilityRoutines::SameString(Alphas(2), Enthalpy))) {
1625 1731 : ++NumOfPressPts;
1626 1731 : if (Numbers(1) <= 0.0) {
1627 0 : ShowSevereError(state,
1628 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1629 0 : ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1)));
1630 0 : ErrorsFound = true;
1631 : }
1632 1731 : PressurePtr(NumOfPressPts).Pressure = Numbers(1);
1633 1731 : PressurePtr(NumOfPressPts).InPtr = InData;
1634 : }
1635 : }
1636 :
1637 : // Sort Pressure list
1638 : // insertionSort
1639 1731 : for (InData = 2; InData <= NumOfPressPts; ++InData) {
1640 1703 : pTemp = PressurePtr(InData).Pressure;
1641 1703 : iTemp = PressurePtr(InData).InPtr;
1642 1703 : j = InData - 1;
1643 1703 : while (j >= 1 && PressurePtr(j).Pressure > pTemp) {
1644 0 : PressurePtr(j + 1).Pressure = PressurePtr(j).Pressure;
1645 0 : PressurePtr(j + 1).InPtr = PressurePtr(j).InPtr;
1646 0 : --j;
1647 0 : if (j == 0) break;
1648 : }
1649 1703 : PressurePtr(j + 1).Pressure = pTemp;
1650 1703 : PressurePtr(j + 1).InPtr = iTemp;
1651 : }
1652 :
1653 1759 : for (InData = 1; InData <= NumOfPressPts; ++InData) {
1654 3462 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1655 : CurrentModuleObject,
1656 1731 : PressurePtr(InData).InPtr,
1657 : Alphas,
1658 : NumAlphas,
1659 : Numbers,
1660 : NumNumbers,
1661 : Status,
1662 : lNumericFieldBlanks,
1663 : lAlphaFieldBlanks,
1664 : cAlphaFieldNames,
1665 : cNumericFieldNames);
1666 1731 : state.dataFluidProps->RefrigData(Loop).SHPress(InData) = Numbers(1);
1667 : // a little error trapping
1668 1731 : if (InData > 1) {
1669 1703 : if (state.dataFluidProps->RefrigData(Loop).SHPress(InData) <= state.dataFluidProps->RefrigData(Loop).SHPress(InData - 1)) {
1670 0 : ShowSevereError(state,
1671 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1672 0 : ShowContinueError(state, "Pressures must be entered in ascending order for fluid property data");
1673 0 : ShowContinueError(state,
1674 0 : format("First Occurrence at Pressure({}) {{{:.3R}}} >= Pressure({}) {{{:.3R}}}",
1675 0 : InData - 1,
1676 0 : state.dataFluidProps->RefrigData(Loop).SHPress(InData - 1),
1677 : InData,
1678 0 : state.dataFluidProps->RefrigData(Loop).SHPress(InData)));
1679 0 : ErrorsFound = true;
1680 0 : break;
1681 : }
1682 : }
1683 1731 : if ((NumNumbers - 1) == state.dataFluidProps->RefrigData(Loop).NumSuperTempPts) {
1684 1731 : state.dataFluidProps->RefrigData(Loop).HshValues(InData, {1, state.dataFluidProps->RefrigData(Loop).NumSuperTempPts}) =
1685 3462 : Numbers({2, NumNumbers});
1686 : } else {
1687 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1688 0 : ShowContinueError(state, "Number of superheated enthalpy data points not equal to number of temperature points");
1689 0 : ErrorsFound = true;
1690 : }
1691 : }
1692 :
1693 28 : PressurePtr.deallocate();
1694 :
1695 : // Get: ***** DENSITY of SUPERHEATED GAS *****
1696 : // First find the number of pressure value syntax lines have been entered and
1697 : // make sure that all of the pressure input is linked to the same temperature list
1698 : // Then allocate the arrays and read the data into the proper place
1699 84 : state.dataFluidProps->RefrigData(Loop).RhoshValues.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts,
1700 84 : state.dataFluidProps->RefrigData(Loop).NumSuperTempPts);
1701 28 : CurrentModuleObject = "FluidProperties:Superheated";
1702 28 : NumOfPressPts = 0;
1703 28 : PressurePtr.allocate(NumOfSHFluidPropArrays);
1704 3630 : for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) {
1705 3602 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1706 : CurrentModuleObject,
1707 : InData,
1708 : Alphas,
1709 : NumAlphas,
1710 : Numbers,
1711 : NumNumbers,
1712 : Status,
1713 : lNumericFieldBlanks,
1714 : lAlphaFieldBlanks,
1715 : cAlphaFieldNames,
1716 : cNumericFieldNames);
1717 7064 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) &&
1718 3462 : (UtilityRoutines::SameString(Alphas(2), Density))) {
1719 1731 : ++NumOfPressPts;
1720 1731 : if (Numbers(1) <= 0.0) {
1721 0 : ShowSevereError(state,
1722 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1723 0 : ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1)));
1724 0 : ErrorsFound = true;
1725 : }
1726 1731 : PressurePtr(NumOfPressPts).Pressure = Numbers(1);
1727 1731 : PressurePtr(NumOfPressPts).InPtr = InData;
1728 : }
1729 : }
1730 :
1731 : // Sort Pressure list
1732 : // insertionSort
1733 1731 : for (InData = 2; InData <= NumOfPressPts; ++InData) {
1734 1703 : pTemp = PressurePtr(InData).Pressure;
1735 1703 : iTemp = PressurePtr(InData).InPtr;
1736 1703 : j = InData - 1;
1737 1703 : while (j >= 1 && PressurePtr(j).Pressure > pTemp) {
1738 0 : PressurePtr(j + 1).Pressure = PressurePtr(j).Pressure;
1739 0 : PressurePtr(j + 1).InPtr = PressurePtr(j).InPtr;
1740 0 : --j;
1741 0 : if (j == 0) break;
1742 : }
1743 1703 : PressurePtr(j + 1).Pressure = pTemp;
1744 1703 : PressurePtr(j + 1).InPtr = iTemp;
1745 : }
1746 :
1747 1759 : for (InData = 1; InData <= NumOfPressPts; ++InData) {
1748 3462 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1749 : CurrentModuleObject,
1750 1731 : PressurePtr(InData).InPtr,
1751 : Alphas,
1752 : NumAlphas,
1753 : Numbers,
1754 : NumNumbers,
1755 : Status,
1756 : lNumericFieldBlanks,
1757 : lAlphaFieldBlanks,
1758 : cAlphaFieldNames,
1759 : cNumericFieldNames);
1760 1731 : if (std::abs(Numbers(1) - state.dataFluidProps->RefrigData(Loop).SHPress(InData)) > PressToler) {
1761 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1762 0 : ShowContinueError(state, "All superheated data for the same refrigerant must use the same pressure data");
1763 0 : ErrorsFound = true;
1764 : }
1765 1731 : if (!UtilityRoutines::SameString(TempsName, Alphas(3))) {
1766 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1767 0 : ShowContinueError(state, "All superheated data for the same property must use the same temperature list");
1768 0 : ErrorsFound = true;
1769 : }
1770 1731 : if ((NumNumbers - 1) == state.dataFluidProps->RefrigData(Loop).NumSuperTempPts) {
1771 1731 : state.dataFluidProps->RefrigData(Loop).RhoshValues(InData, {1, state.dataFluidProps->RefrigData(Loop).NumSuperTempPts}) =
1772 3462 : Numbers({2, NumNumbers});
1773 : } else {
1774 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1775 0 : ShowContinueError(state, "Number of superheated density data points not equal to number of temperature points");
1776 0 : ErrorsFound = true;
1777 : }
1778 : }
1779 :
1780 28 : PressurePtr.deallocate();
1781 :
1782 : // Error check on entering superheated data
1783 28 : iTemp = 0;
1784 28 : CurrentModuleObject = "FluidProperties:Superheated";
1785 3630 : for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) {
1786 :
1787 3602 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1788 : CurrentModuleObject,
1789 : InData,
1790 : Alphas,
1791 : NumAlphas,
1792 : Numbers,
1793 : NumNumbers,
1794 : Status,
1795 : lNumericFieldBlanks,
1796 : lAlphaFieldBlanks,
1797 : cAlphaFieldNames,
1798 : cNumericFieldNames);
1799 3602 : if (!UtilityRoutines::SameString(Alphas(2), Enthalpy) && !UtilityRoutines::SameString(Alphas(2), Density)) {
1800 0 : if (iTemp == 0) {
1801 0 : ShowWarningError(state,
1802 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1803 0 : ShowContinueError(state, cAlphaFieldNames(2) + "=\"" + Alphas(2) + "\" is not valid.");
1804 0 : ShowContinueError(state, "Valid choices are \"" + std::string{Enthalpy} + "\", \"" + std::string{Density} + "\".");
1805 0 : ShowContinueError(state, format("Pressure value of this item=[{:.2R}].", Numbers(1)));
1806 0 : ShowContinueError(state, "This fluid property will not be processed nor available for the simulation.");
1807 : }
1808 0 : ++iTemp;
1809 : }
1810 : }
1811 :
1812 28 : if (iTemp > 1) {
1813 0 : ShowWarningError(state, format("{}{} has {} similar errors to the previous.", RoutineName, CurrentModuleObject, iTemp - 1));
1814 : }
1815 :
1816 28 : if (NumOfPressPts == 0) {
1817 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1818 0 : ShowSevereError(state, "No pressure data found for superheated density");
1819 0 : ErrorsFound = true;
1820 : }
1821 28 : if (NumOfPressPts != state.dataFluidProps->RefrigData(Loop).NumSuperPressPts) {
1822 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->RefrigData(Loop).Name);
1823 0 : ShowSevereError(state, "Number of pressure points for superheated data different for enthalpy and density");
1824 0 : ErrorsFound = true;
1825 : }
1826 :
1827 : } // ...end of DO loop through all of the refrigerants
1828 :
1829 : // *************** GLYCOLS ***************
1830 : // Go through each glycol found in the fluid names statement and read in the data
1831 : // Note that every valid fluid must have ALL of the necessary data or a fatal error will
1832 : // be produced.
1833 469 : CurrentModuleObject = "FluidProperties:Concentration";
1834 480 : for (Loop = 1; Loop <= state.dataFluidProps->NumOfGlycols; ++Loop) {
1835 :
1836 : // Get: ***** SPECIFIC HEAT of GLYCOLS *****
1837 : // First find the number of concentration value syntax lines have been entered and
1838 : // make sure that all of the concentration input is linked to the same temperature list
1839 11 : TempsName = "";
1840 11 : FirstSHMatch = true;
1841 11 : NumOfConcPts = 0;
1842 11 : state.dataFluidProps->GlyRawData(Loop).CpDataPresent = false;
1843 111 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant
1844 100 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1845 : CurrentModuleObject,
1846 : InData,
1847 : Alphas,
1848 : NumAlphas,
1849 : Numbers,
1850 : NumNumbers,
1851 : Status,
1852 : lNumericFieldBlanks,
1853 : lAlphaFieldBlanks,
1854 : cAlphaFieldNames,
1855 : cNumericFieldNames);
1856 160 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
1857 60 : (UtilityRoutines::SameString(Alphas(2), SpecificHeat))) {
1858 15 : ++NumOfConcPts;
1859 15 : if (FirstSHMatch) {
1860 3 : TempsName = Alphas(3);
1861 3 : FirstSHMatch = false;
1862 : } else {
1863 12 : if (!UtilityRoutines::SameString(TempsName, Alphas(3))) {
1864 0 : ShowSevereError(state,
1865 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1866 0 : ShowContinueError(state, "All glycol specific heat data for the same glycol must use the same temperature list");
1867 0 : ShowContinueError(state, "Expected name=" + TempsName + ", Entered name=" + Alphas(3));
1868 0 : ErrorsFound = true;
1869 : }
1870 : }
1871 : }
1872 : }
1873 11 : if (NumOfConcPts > 0) {
1874 : // Now allocate the arrays and read the data into the proper place
1875 : // First, allocate the temperature array and transfer the data from the FluidTemp array
1876 3 : state.dataFluidProps->GlyRawData(Loop).CpDataPresent = true;
1877 5 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1878 5 : if (UtilityRoutines::SameString(TempsName, FluidTemps(TempLoop).Name)) {
1879 3 : state.dataFluidProps->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps;
1880 3 : state.dataFluidProps->GlyRawData(Loop).CpTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpTempPts);
1881 3 : state.dataFluidProps->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps;
1882 3 : break; // the TempLoop DO loop
1883 : }
1884 2 : if (TempLoop == NumOfFluidTempArrays) {
1885 0 : ShowSevereError(state,
1886 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1887 0 : ShowContinueError(state, "No match for temperature array name found with glycol data");
1888 0 : ErrorsFound = true;
1889 : }
1890 : }
1891 :
1892 : // Next, allocate the specific heat related arrays
1893 3 : state.dataFluidProps->GlyRawData(Loop).NumCpConcPts = NumOfConcPts;
1894 3 : state.dataFluidProps->GlyRawData(Loop).CpConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpConcPts);
1895 9 : state.dataFluidProps->GlyRawData(Loop).CpValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpConcPts,
1896 9 : state.dataFluidProps->GlyRawData(Loop).NumCpTempPts);
1897 :
1898 : // Finally, get the specific heat and concentration values from the user input
1899 3 : CurrentModuleObject = "FluidProperties:Concentration";
1900 3 : NumOfConcPts = 0;
1901 63 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) {
1902 60 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1903 : CurrentModuleObject,
1904 : InData,
1905 : Alphas,
1906 : NumAlphas,
1907 : Numbers,
1908 : NumNumbers,
1909 : Status,
1910 : lNumericFieldBlanks,
1911 : lAlphaFieldBlanks,
1912 : cAlphaFieldNames,
1913 : cNumericFieldNames);
1914 120 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
1915 60 : (UtilityRoutines::SameString(Alphas(2), SpecificHeat))) {
1916 15 : ++NumOfConcPts;
1917 15 : state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1);
1918 : // a little error trapping
1919 15 : if (NumOfConcPts == 1) {
1920 3 : if (state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) {
1921 0 : ShowSevereError(
1922 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1923 0 : ShowContinueError(state, "Negative concentrations not allowed in fluid property input data");
1924 0 : ErrorsFound = true;
1925 : }
1926 : } else {
1927 24 : if (state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) <=
1928 12 : state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) {
1929 0 : ShowSevereError(
1930 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1931 0 : ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data");
1932 0 : ErrorsFound = true;
1933 : }
1934 : }
1935 15 : if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumCpTempPts) {
1936 15 : state.dataFluidProps->GlyRawData(Loop).CpValues(NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumCpTempPts}) =
1937 30 : Numbers({2, NumNumbers});
1938 : } else {
1939 0 : ShowSevereError(state,
1940 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1941 0 : ShowContinueError(state, "Number of specific heat data points not equal to number of temperature points");
1942 0 : ErrorsFound = true;
1943 : }
1944 : }
1945 : }
1946 : }
1947 : // Get: ***** DENSITY of GLYCOLS *****
1948 : // First find the number of concentration value syntax lines have been entered and
1949 : // make sure that all of the concentration input is linked to the same temperature list
1950 11 : TempsName = "";
1951 11 : FirstSHMatch = true;
1952 11 : NumOfConcPts = 0;
1953 11 : state.dataFluidProps->GlyRawData(Loop).RhoDataPresent = false;
1954 11 : CurrentModuleObject = "FluidProperties:Concentration";
1955 111 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for density are consistant
1956 100 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
1957 : CurrentModuleObject,
1958 : InData,
1959 : Alphas,
1960 : NumAlphas,
1961 : Numbers,
1962 : NumNumbers,
1963 : Status,
1964 : lNumericFieldBlanks,
1965 : lAlphaFieldBlanks,
1966 : cAlphaFieldNames,
1967 : cNumericFieldNames);
1968 160 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
1969 60 : (UtilityRoutines::SameString(Alphas(2), Density))) {
1970 15 : ++NumOfConcPts;
1971 15 : if (FirstSHMatch) {
1972 3 : TempsName = Alphas(3);
1973 3 : FirstSHMatch = false;
1974 : } else {
1975 12 : if (!UtilityRoutines::SameString(TempsName, Alphas(3))) {
1976 0 : ShowSevereError(state,
1977 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1978 0 : ShowContinueError(state, "All glycol density data for the same glycol must use the same temperature list");
1979 0 : ShowContinueError(state, "Expected name=" + TempsName + ", Entered name=" + Alphas(3));
1980 0 : ErrorsFound = true;
1981 : }
1982 : }
1983 : }
1984 : }
1985 11 : if (NumOfConcPts > 0) {
1986 : // Now allocate the arrays and read the data into the proper place
1987 : // First, allocate the temperature array and transfer the data from the FluidTemp array
1988 3 : state.dataFluidProps->GlyRawData(Loop).RhoDataPresent = true;
1989 5 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
1990 5 : if (UtilityRoutines::SameString(TempsName, FluidTemps(TempLoop).Name)) {
1991 3 : state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps;
1992 3 : state.dataFluidProps->GlyRawData(Loop).RhoTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts);
1993 3 : state.dataFluidProps->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps;
1994 3 : break; // the TempLoop DO loop
1995 : }
1996 2 : if (TempLoop == NumOfFluidTempArrays) {
1997 0 : ShowSevereError(state,
1998 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
1999 0 : ShowContinueError(state, "No match for temperature array name found with glycol data");
2000 0 : ErrorsFound = true;
2001 : }
2002 : }
2003 :
2004 : // Next, allocate the density related arrays
2005 3 : state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts;
2006 3 : state.dataFluidProps->GlyRawData(Loop).RhoConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts);
2007 9 : state.dataFluidProps->GlyRawData(Loop).RhoValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts,
2008 9 : state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts);
2009 :
2010 : // Finally, get the density and concentration values from the user input
2011 3 : NumOfConcPts = 0;
2012 3 : CurrentModuleObject = "FluidProperties:Concentration";
2013 63 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) {
2014 60 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
2015 : CurrentModuleObject,
2016 : InData,
2017 : Alphas,
2018 : NumAlphas,
2019 : Numbers,
2020 : NumNumbers,
2021 : Status,
2022 : lNumericFieldBlanks,
2023 : lAlphaFieldBlanks,
2024 : cAlphaFieldNames,
2025 : cNumericFieldNames);
2026 120 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
2027 60 : (UtilityRoutines::SameString(Alphas(2), Density))) {
2028 15 : ++NumOfConcPts;
2029 15 : state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1);
2030 : // a little error trapping
2031 15 : if (NumOfConcPts == 1) {
2032 3 : if (state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) {
2033 0 : ShowSevereError(
2034 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2035 0 : ShowContinueError(state, "Negative concentrations not allowed in fluid property input data");
2036 0 : ErrorsFound = true;
2037 : }
2038 : } else {
2039 24 : if (state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) <=
2040 12 : state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) {
2041 0 : ShowSevereError(
2042 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2043 0 : ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data");
2044 0 : ErrorsFound = true;
2045 : }
2046 : }
2047 15 : if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts) {
2048 45 : state.dataFluidProps->GlyRawData(Loop).RhoValues(
2049 60 : NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers});
2050 : } else {
2051 0 : ShowSevereError(state,
2052 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2053 0 : ShowContinueError(state, "Number of density data points not equal to number of temperature points");
2054 0 : ErrorsFound = true;
2055 : }
2056 : }
2057 : }
2058 : }
2059 : // Get: ***** CONDUCTIVITY of GLYCOLS *****
2060 : // First find the number of concentration value syntax lines have been entered and
2061 : // make sure that all of the concentration input is linked to the same temperature list
2062 11 : TempsName = "";
2063 11 : FirstSHMatch = true;
2064 11 : NumOfConcPts = 0;
2065 11 : state.dataFluidProps->GlyRawData(Loop).CondDataPresent = false;
2066 11 : CurrentModuleObject = "FluidProperties:Concentration";
2067 111 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for conductivity are consistant
2068 100 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
2069 : CurrentModuleObject,
2070 : InData,
2071 : Alphas,
2072 : NumAlphas,
2073 : Numbers,
2074 : NumNumbers,
2075 : Status,
2076 : lNumericFieldBlanks,
2077 : lAlphaFieldBlanks,
2078 : cAlphaFieldNames,
2079 : cNumericFieldNames);
2080 160 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
2081 60 : (UtilityRoutines::SameString(Alphas(2), Conductivity))) {
2082 15 : ++NumOfConcPts;
2083 15 : if (FirstSHMatch) {
2084 3 : TempsName = Alphas(3);
2085 3 : FirstSHMatch = false;
2086 : } else {
2087 12 : if (!UtilityRoutines::SameString(TempsName, Alphas(3))) {
2088 0 : ShowSevereError(state,
2089 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2090 0 : ShowContinueError(state, "All glycol conductivity data for the same glycol must use the same temperature list");
2091 0 : ShowContinueError(state, "Expected name=" + TempsName + ", Entered name=" + Alphas(3));
2092 0 : ErrorsFound = true;
2093 : }
2094 : }
2095 : }
2096 : }
2097 11 : if (NumOfConcPts > 0) {
2098 : // Now allocate the arrays and read the data into the proper place
2099 : // First, allocate the temperature array and transfer the data from the FluidTemp array
2100 3 : state.dataFluidProps->GlyRawData(Loop).CondDataPresent = true;
2101 5 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
2102 5 : if (UtilityRoutines::SameString(TempsName, FluidTemps(TempLoop).Name)) {
2103 3 : state.dataFluidProps->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps;
2104 3 : state.dataFluidProps->GlyRawData(Loop).CondTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondTempPts);
2105 3 : state.dataFluidProps->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps;
2106 3 : break; // the TempLoop DO loop
2107 : }
2108 2 : if (TempLoop == NumOfFluidTempArrays) {
2109 0 : ShowSevereError(state,
2110 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2111 0 : ShowContinueError(state, "No match for temperature array name found with glycol data");
2112 0 : ErrorsFound = true;
2113 : }
2114 : }
2115 :
2116 : // Next, allocate the conductivity related arrays
2117 3 : state.dataFluidProps->GlyRawData(Loop).NumCondConcPts = NumOfConcPts;
2118 3 : state.dataFluidProps->GlyRawData(Loop).CondConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondConcPts);
2119 9 : state.dataFluidProps->GlyRawData(Loop).CondValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondConcPts,
2120 9 : state.dataFluidProps->GlyRawData(Loop).NumCondTempPts);
2121 :
2122 : // Finally, get the conductivity and concentration values from the user input
2123 3 : NumOfConcPts = 0;
2124 3 : CurrentModuleObject = "FluidProperties:Concentration";
2125 63 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) {
2126 60 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
2127 : CurrentModuleObject,
2128 : InData,
2129 : Alphas,
2130 : NumAlphas,
2131 : Numbers,
2132 : NumNumbers,
2133 : Status,
2134 : lNumericFieldBlanks,
2135 : lAlphaFieldBlanks,
2136 : cAlphaFieldNames,
2137 : cNumericFieldNames);
2138 120 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
2139 60 : (UtilityRoutines::SameString(Alphas(2), Conductivity))) {
2140 15 : ++NumOfConcPts;
2141 15 : state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1);
2142 : // a little error trapping
2143 15 : if (NumOfConcPts == 1) {
2144 3 : if (state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) {
2145 0 : ShowSevereError(
2146 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2147 0 : ShowContinueError(state, "Negative concentrations not allowed in fluid property input data");
2148 0 : ErrorsFound = true;
2149 : }
2150 : } else {
2151 24 : if (state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) <=
2152 12 : state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) {
2153 0 : ShowSevereError(
2154 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2155 0 : ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data");
2156 0 : ErrorsFound = true;
2157 : }
2158 : }
2159 15 : if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumCondTempPts) {
2160 45 : state.dataFluidProps->GlyRawData(Loop).CondValues(
2161 60 : NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers});
2162 : } else {
2163 0 : ShowSevereError(state,
2164 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2165 0 : ShowContinueError(state, "Number of conductivity data points not equal to number of temperature points");
2166 0 : ErrorsFound = true;
2167 : }
2168 : }
2169 : }
2170 : }
2171 : // Get: ***** VISCOSITY of GLYCOLS *****
2172 : // First find the number of concentration value syntax lines have been entered and
2173 : // make sure that all of the concentration input is linked to the same temperature list
2174 11 : TempsName = "";
2175 11 : FirstSHMatch = true;
2176 11 : NumOfConcPts = 0;
2177 11 : state.dataFluidProps->GlyRawData(Loop).ViscDataPresent = false;
2178 11 : CurrentModuleObject = "FluidProperties:Concentration";
2179 111 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for viscosity are consistant
2180 100 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
2181 : CurrentModuleObject,
2182 : InData,
2183 : Alphas,
2184 : NumAlphas,
2185 : Numbers,
2186 : NumNumbers,
2187 : Status,
2188 : lNumericFieldBlanks,
2189 : lAlphaFieldBlanks,
2190 : cAlphaFieldNames,
2191 : cNumericFieldNames);
2192 160 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
2193 60 : (UtilityRoutines::SameString(Alphas(2), Viscosity))) {
2194 15 : ++NumOfConcPts;
2195 15 : if (FirstSHMatch) {
2196 3 : TempsName = Alphas(3);
2197 3 : FirstSHMatch = false;
2198 : } else {
2199 12 : if (!UtilityRoutines::SameString(TempsName, Alphas(3))) {
2200 0 : ShowSevereError(state,
2201 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2202 0 : ShowContinueError(state, "All glycol viscosity data for the same glycol must use the same temperature list");
2203 0 : ShowContinueError(state, "Expected name=" + TempsName + ", Entered name=" + Alphas(3));
2204 0 : ErrorsFound = true;
2205 : }
2206 : }
2207 : }
2208 : }
2209 11 : if (NumOfConcPts > 0) {
2210 3 : state.dataFluidProps->GlyRawData(Loop).ViscDataPresent = true;
2211 : // Now allocate the arrays and read the data into the proper place
2212 : // First, allocate the temperature array and transfer the data from the FluidTemp array
2213 5 : for (TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) {
2214 5 : if (UtilityRoutines::SameString(TempsName, FluidTemps(TempLoop).Name)) {
2215 3 : state.dataFluidProps->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps;
2216 3 : state.dataFluidProps->GlyRawData(Loop).ViscTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscTempPts);
2217 3 : state.dataFluidProps->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps;
2218 3 : break; // the TempLoop DO loop
2219 : }
2220 2 : if (TempLoop == NumOfFluidTempArrays) {
2221 0 : ShowSevereError(state,
2222 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2223 0 : ShowContinueError(state, "No match for temperature array name found with glycol data");
2224 0 : ErrorsFound = true;
2225 : }
2226 : }
2227 :
2228 : // Next, allocate the viscosity related arrays
2229 3 : state.dataFluidProps->GlyRawData(Loop).NumViscConcPts = NumOfConcPts;
2230 3 : state.dataFluidProps->GlyRawData(Loop).ViscConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscConcPts);
2231 9 : state.dataFluidProps->GlyRawData(Loop).ViscValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscConcPts,
2232 9 : state.dataFluidProps->GlyRawData(Loop).NumViscTempPts);
2233 :
2234 : // Finally, get the viscosity and concentration values from the user input
2235 3 : NumOfConcPts = 0;
2236 3 : CurrentModuleObject = "FluidProperties:Concentration";
2237 63 : for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) {
2238 60 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
2239 : CurrentModuleObject,
2240 : InData,
2241 : Alphas,
2242 : NumAlphas,
2243 : Numbers,
2244 : NumNumbers,
2245 : Status,
2246 : lNumericFieldBlanks,
2247 : lAlphaFieldBlanks,
2248 : cAlphaFieldNames,
2249 : cNumericFieldNames);
2250 120 : if ((UtilityRoutines::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) &&
2251 60 : (UtilityRoutines::SameString(Alphas(2), Viscosity))) {
2252 15 : ++NumOfConcPts;
2253 15 : state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1);
2254 : // a little error trapping
2255 15 : if (NumOfConcPts == 1) {
2256 3 : if (state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) {
2257 0 : ShowSevereError(
2258 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2259 0 : ShowContinueError(state, "Negative concentrations not allowed in fluid property input data");
2260 0 : ErrorsFound = true;
2261 : }
2262 : } else {
2263 24 : if (state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) <=
2264 12 : state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) {
2265 0 : ShowSevereError(
2266 0 : state, std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2267 0 : ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data");
2268 0 : ErrorsFound = true;
2269 : }
2270 : }
2271 15 : if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumViscTempPts) {
2272 45 : state.dataFluidProps->GlyRawData(Loop).ViscValues(
2273 60 : NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers});
2274 : } else {
2275 0 : ShowSevereError(state,
2276 0 : std::string{RoutineName} + CurrentModuleObject + " Name=" + state.dataFluidProps->GlyRawData(Loop).Name);
2277 0 : ShowContinueError(state, "Number of viscosity data points not equal to number of temperature points");
2278 0 : ErrorsFound = true;
2279 : }
2280 : }
2281 : }
2282 : }
2283 : } // glycol loop
2284 :
2285 : // Get: ***** GLYCOL CONCENTRATIONS *****
2286 : // Read in the GlycolConcentrations input and then set the property data accordingly
2287 : // Input Syntax:
2288 : // FluidProperties:GlycolConcentration,
2289 : // \memo glycol and what concentration it is
2290 : // A1, \field Name
2291 : // \type alpha
2292 : // \required-field
2293 : // \reference GlycolConcentrations
2294 : // A2, \field Glycol Type
2295 : // \required-field
2296 : // \type choice
2297 : // \key EthyleneGlycol
2298 : // \key PropyleneGlycol
2299 : // \key UserDefinedGlycolType
2300 : // \note or UserDefined Fluid (must show up as a glycol in FluidProperties:Name object)
2301 : // A3, \field User Defined Glycol Name
2302 : // \type object-list
2303 : // \object-list FluidAndGlycolNames
2304 : // N1; \field Glycol Concentration
2305 : // \type real
2306 : // \minimum 0.0
2307 : // \maximum 1.0
2308 :
2309 : // Check to see if there is any GlycolConcentrations input. If not, this
2310 : // is okay as long as the user only desires to simulate loops with water.
2311 : // More than one GlycolConcentrations input is not allowed.
2312 :
2313 469 : CurrentModuleObject = "FluidProperties:GlycolConcentration";
2314 469 : NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject);
2315 :
2316 469 : NumOfGlyConcs = NumOfOptionalInput + 1;
2317 469 : state.dataFluidProps->GlycolData.allocate(NumOfGlyConcs);
2318 469 : state.dataFluidProps->GlycolUsed.dimension(NumOfGlyConcs, false);
2319 :
2320 469 : state.dataFluidProps->GlycolUsed(1) = true; // mark Water as always used
2321 :
2322 : // First "glycol" is always pure water. Load data from default arrays
2323 469 : state.dataFluidProps->GlycolData(1).Name = "WATER";
2324 469 : state.dataFluidProps->GlycolData(1).GlycolName = "WATER";
2325 469 : state.dataFluidProps->GlycolData(1).GlycolIndex = 0;
2326 469 : state.dataFluidProps->GlycolData(1).Concentration = 1.0;
2327 469 : state.dataFluidProps->GlycolData(1).CpDataPresent = true;
2328 469 : state.dataFluidProps->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps;
2329 469 : state.dataFluidProps->GlycolData(1).RhoDataPresent = true;
2330 469 : state.dataFluidProps->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps;
2331 469 : state.dataFluidProps->GlycolData(1).CondDataPresent = true;
2332 469 : state.dataFluidProps->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps;
2333 469 : state.dataFluidProps->GlycolData(1).ViscDataPresent = true;
2334 469 : state.dataFluidProps->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps;
2335 469 : state.dataFluidProps->GlycolData(1).CpTemps.allocate(state.dataFluidProps->GlycolData(1).NumCpTempPts);
2336 469 : state.dataFluidProps->GlycolData(1).CpValues.allocate(state.dataFluidProps->GlycolData(1).NumCpTempPts);
2337 469 : state.dataFluidProps->GlycolData(1).RhoTemps.allocate(state.dataFluidProps->GlycolData(1).NumRhoTempPts);
2338 469 : state.dataFluidProps->GlycolData(1).RhoValues.allocate(state.dataFluidProps->GlycolData(1).NumRhoTempPts);
2339 469 : state.dataFluidProps->GlycolData(1).CondTemps.allocate(state.dataFluidProps->GlycolData(1).NumCondTempPts);
2340 469 : state.dataFluidProps->GlycolData(1).CondValues.allocate(state.dataFluidProps->GlycolData(1).NumCondTempPts);
2341 469 : state.dataFluidProps->GlycolData(1).ViscTemps.allocate(state.dataFluidProps->GlycolData(1).NumViscTempPts);
2342 469 : state.dataFluidProps->GlycolData(1).ViscValues.allocate(state.dataFluidProps->GlycolData(1).NumViscTempPts);
2343 469 : state.dataFluidProps->GlycolData(1).CpTemps = DefaultGlycolTemps;
2344 469 : state.dataFluidProps->GlycolData(1).CpValues = DefaultWaterCpData;
2345 469 : state.dataFluidProps->GlycolData(1).RhoTemps = DefaultGlycolTemps;
2346 469 : state.dataFluidProps->GlycolData(1).RhoValues = DefaultWaterRhoData;
2347 469 : state.dataFluidProps->GlycolData(1).CondTemps = DefaultGlycolTemps;
2348 469 : state.dataFluidProps->GlycolData(1).CondValues = DefaultWaterCondData;
2349 469 : state.dataFluidProps->GlycolData(1).ViscTemps = DefaultGlycolTemps;
2350 469 : state.dataFluidProps->GlycolData(1).ViscValues = DefaultWaterViscData;
2351 :
2352 469 : NumOfGlyConcs = 1; // Water is always available, everything else must be specified
2353 :
2354 497 : for (Loop = 1; Loop <= NumOfOptionalInput; ++Loop) {
2355 28 : state.dataInputProcessing->inputProcessor->getObjectItem(state,
2356 : CurrentModuleObject,
2357 : Loop,
2358 : Alphas,
2359 : NumAlphas,
2360 : Numbers,
2361 : NumNumbers,
2362 : Status,
2363 : lNumericFieldBlanks,
2364 : lAlphaFieldBlanks,
2365 : cAlphaFieldNames,
2366 : cNumericFieldNames);
2367 28 : if (UtilityRoutines::IsNameEmpty(state, Alphas(1), CurrentModuleObject, ErrorsFound)) {
2368 0 : continue;
2369 : }
2370 28 : GlycolFound = false;
2371 28 : if (UtilityRoutines::SameString(Alphas(2), EthyleneGlycol)) {
2372 16 : GlycolFound = true;
2373 16 : ++NumOfGlyConcs;
2374 16 : state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1);
2375 16 : state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2);
2376 12 : } else if (UtilityRoutines::SameString(Alphas(2), PropyleneGlycol)) {
2377 9 : GlycolFound = true;
2378 9 : ++NumOfGlyConcs;
2379 9 : state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1);
2380 9 : state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2);
2381 3 : } else if (UtilityRoutines::SameString(Alphas(2), "UserDefinedGlycolType")) {
2382 3 : for (InData = 1; InData <= state.dataFluidProps->NumOfGlycols; ++InData) {
2383 3 : if (UtilityRoutines::SameString(Alphas(3), state.dataFluidProps->GlyRawData(InData).Name)) {
2384 3 : GlycolFound = true;
2385 3 : break; // DO LOOP through user defined glycols
2386 : }
2387 : }
2388 3 : if (GlycolFound) {
2389 3 : ++NumOfGlyConcs;
2390 3 : state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1);
2391 3 : state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3);
2392 : } else {
2393 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + "=\"" + Alphas(1) + "\", invalid reference");
2394 0 : ShowContinueError(state, "... not found in the FluidProperties:Name list: \"" + Alphas(3) + "\".");
2395 0 : ErrorsFound = true;
2396 : }
2397 : } else {
2398 0 : ShowSevereError(state, std::string{RoutineName} + CurrentModuleObject + "=\"" + Alphas(1) + "\", invalid field");
2399 0 : ShowContinueError(state, "..." + cAlphaFieldNames(2) + "=\"" + Alphas(2) + "\".");
2400 0 : ShowContinueError(state, "... Legal values are PropyleneGlycol, EthyleneGlycol or UserDefinedGlycolType.");
2401 0 : ErrorsFound = true;
2402 : }
2403 28 : if (!GlycolFound) continue;
2404 28 : state.dataFluidProps->GlycolData(NumOfGlyConcs).Concentration = Numbers(1);
2405 : }
2406 :
2407 : // Now initialize the rest of the data for the glycols
2408 497 : for (Loop = 2; Loop <= NumOfGlyConcs; ++Loop) {
2409 : // Check to see if glycol name is one of the defaults or is listed in the Fluid Name list
2410 28 : if (UtilityRoutines::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, EthyleneGlycol)) {
2411 16 : state.dataFluidProps->GlycolData(Loop).GlycolIndex = EthyleneGlycolIndex;
2412 12 : } else if (UtilityRoutines::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, PropyleneGlycol)) {
2413 9 : state.dataFluidProps->GlycolData(Loop).GlycolIndex = PropyleneGlycolIndex;
2414 : } else {
2415 3 : for (InData = 1; InData <= state.dataFluidProps->NumOfGlycols; ++InData) {
2416 3 : if (UtilityRoutines::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName,
2417 3 : state.dataFluidProps->GlyRawData(InData).Name)) {
2418 3 : state.dataFluidProps->GlycolData(Loop).GlycolIndex = InData;
2419 3 : break; // DO LOOP through user defined glycols
2420 : }
2421 : }
2422 : }
2423 :
2424 : // Set the rest of the parameters...
2425 40 : if ((state.dataFluidProps->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) ||
2426 12 : (state.dataFluidProps->GlycolData(Loop).GlycolIndex == PropyleneGlycolIndex)) {
2427 :
2428 25 : state.dataFluidProps->GlycolData(Loop).CpDataPresent = true;
2429 25 : state.dataFluidProps->GlycolData(Loop).NumCpTempPts = DefaultNumGlyTemps;
2430 25 : state.dataFluidProps->GlycolData(Loop).RhoDataPresent = true;
2431 25 : state.dataFluidProps->GlycolData(Loop).NumRhoTempPts = DefaultNumGlyTemps;
2432 25 : state.dataFluidProps->GlycolData(Loop).CondDataPresent = true;
2433 25 : state.dataFluidProps->GlycolData(Loop).NumCondTempPts = DefaultNumGlyTemps;
2434 25 : state.dataFluidProps->GlycolData(Loop).ViscDataPresent = true;
2435 25 : state.dataFluidProps->GlycolData(Loop).NumViscTempPts = DefaultNumGlyTemps;
2436 25 : state.dataFluidProps->GlycolData(Loop).CpTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts);
2437 25 : state.dataFluidProps->GlycolData(Loop).CpValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts);
2438 25 : state.dataFluidProps->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts);
2439 25 : state.dataFluidProps->GlycolData(Loop).RhoValues.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts);
2440 25 : state.dataFluidProps->GlycolData(Loop).CondTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts);
2441 25 : state.dataFluidProps->GlycolData(Loop).CondValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts);
2442 25 : state.dataFluidProps->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts);
2443 25 : state.dataFluidProps->GlycolData(Loop).ViscValues.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts);
2444 25 : state.dataFluidProps->GlycolData(Loop).CpTemps = DefaultGlycolTemps;
2445 25 : state.dataFluidProps->GlycolData(Loop).RhoTemps = DefaultGlycolTemps;
2446 25 : state.dataFluidProps->GlycolData(Loop).CondTemps = DefaultGlycolTemps;
2447 25 : state.dataFluidProps->GlycolData(Loop).ViscTemps = DefaultGlycolTemps;
2448 :
2449 25 : if (state.dataFluidProps->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) {
2450 32 : InterpDefValuesForGlycolConc(state,
2451 : DefaultGlycolConcs,
2452 : DefaultEthGlyCpData,
2453 16 : state.dataFluidProps->GlycolData(Loop).Concentration,
2454 16 : state.dataFluidProps->GlycolData(Loop).CpValues);
2455 32 : InterpDefValuesForGlycolConc(state,
2456 : DefaultGlycolConcs,
2457 : DefaultEthGlyRhoData,
2458 16 : state.dataFluidProps->GlycolData(Loop).Concentration,
2459 16 : state.dataFluidProps->GlycolData(Loop).RhoValues);
2460 32 : InterpDefValuesForGlycolConc(state,
2461 : DefaultGlycolConcs,
2462 : DefaultEthGlyCondData,
2463 16 : state.dataFluidProps->GlycolData(Loop).Concentration,
2464 16 : state.dataFluidProps->GlycolData(Loop).CondValues);
2465 32 : InterpDefValuesForGlycolConc(state,
2466 : DefaultGlycolConcs,
2467 : DefaultEthGlyViscData,
2468 16 : state.dataFluidProps->GlycolData(Loop).Concentration,
2469 16 : state.dataFluidProps->GlycolData(Loop).ViscValues);
2470 : } else { // == PropyleneGlycolIndex
2471 18 : InterpDefValuesForGlycolConc(state,
2472 : DefaultGlycolConcs,
2473 : DefaultPropGlyCpData,
2474 9 : state.dataFluidProps->GlycolData(Loop).Concentration,
2475 9 : state.dataFluidProps->GlycolData(Loop).CpValues);
2476 18 : InterpDefValuesForGlycolConc(state,
2477 : DefaultGlycolConcs,
2478 : DefaultPropGlyRhoData,
2479 9 : state.dataFluidProps->GlycolData(Loop).Concentration,
2480 9 : state.dataFluidProps->GlycolData(Loop).RhoValues);
2481 18 : InterpDefValuesForGlycolConc(state,
2482 : DefaultGlycolConcs,
2483 : DefaultPropGlyCondData,
2484 9 : state.dataFluidProps->GlycolData(Loop).Concentration,
2485 9 : state.dataFluidProps->GlycolData(Loop).CondValues);
2486 18 : InterpDefValuesForGlycolConc(state,
2487 : DefaultGlycolConcs,
2488 : DefaultPropGlyViscData,
2489 9 : state.dataFluidProps->GlycolData(Loop).Concentration,
2490 9 : state.dataFluidProps->GlycolData(Loop).ViscValues);
2491 : }
2492 :
2493 : } else { // User-defined fluid
2494 :
2495 3 : Index = state.dataFluidProps->GlycolData(Loop).GlycolIndex;
2496 :
2497 : // Specific heat data:
2498 3 : if (state.dataFluidProps->GlyRawData(Index).CpDataPresent) {
2499 3 : state.dataFluidProps->GlycolData(Loop).CpDataPresent = true;
2500 3 : state.dataFluidProps->GlycolData(Loop).NumCpTempPts = state.dataFluidProps->GlyRawData(Index).NumCpTempPts;
2501 3 : state.dataFluidProps->GlycolData(Loop).CpTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts);
2502 3 : state.dataFluidProps->GlycolData(Loop).CpValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts);
2503 3 : state.dataFluidProps->GlycolData(Loop).CpTemps = state.dataFluidProps->GlyRawData(Index).CpTemps;
2504 18 : InterpValuesForGlycolConc(state,
2505 3 : state.dataFluidProps->GlyRawData(Index).NumCpConcPts,
2506 3 : state.dataFluidProps->GlyRawData(Index).NumCpTempPts,
2507 3 : state.dataFluidProps->GlyRawData(Index).CpConcs,
2508 3 : state.dataFluidProps->GlyRawData(Index).CpValues,
2509 3 : state.dataFluidProps->GlycolData(Loop).Concentration,
2510 3 : state.dataFluidProps->GlycolData(Loop).CpValues);
2511 : } else {
2512 0 : ShowSevereError(state, std::string{RoutineName} + "Specific heat data not entered for a " + CurrentModuleObject);
2513 0 : ShowContinueError(state, "ALL data must be entered for user-defined glycols");
2514 0 : ShowContinueError(state, "Glycol mixture name = " + state.dataFluidProps->GlycolData(Loop).Name);
2515 0 : ShowContinueError(state, "Glycol fluid name = " + state.dataFluidProps->GlycolData(Loop).GlycolName);
2516 0 : ErrorsFound = true;
2517 : }
2518 :
2519 : // Density data:
2520 3 : if (state.dataFluidProps->GlyRawData(Index).CpDataPresent) {
2521 3 : state.dataFluidProps->GlycolData(Loop).RhoDataPresent = true;
2522 3 : state.dataFluidProps->GlycolData(Loop).NumRhoTempPts = state.dataFluidProps->GlyRawData(Index).NumRhoTempPts;
2523 3 : state.dataFluidProps->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts);
2524 3 : state.dataFluidProps->GlycolData(Loop).RhoValues.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts);
2525 3 : state.dataFluidProps->GlycolData(Loop).RhoTemps = state.dataFluidProps->GlyRawData(Index).RhoTemps;
2526 18 : InterpValuesForGlycolConc(state,
2527 3 : state.dataFluidProps->GlyRawData(Index).NumRhoConcPts,
2528 3 : state.dataFluidProps->GlyRawData(Index).NumRhoTempPts,
2529 3 : state.dataFluidProps->GlyRawData(Index).RhoConcs,
2530 3 : state.dataFluidProps->GlyRawData(Index).RhoValues,
2531 3 : state.dataFluidProps->GlycolData(Loop).Concentration,
2532 3 : state.dataFluidProps->GlycolData(Loop).RhoValues);
2533 : } else {
2534 0 : ShowSevereError(state, std::string{RoutineName} + "Density data not entered for a " + CurrentModuleObject);
2535 0 : ShowContinueError(state, "ALL data must be entered for user-defined glycols");
2536 0 : ShowContinueError(state, "Glycol mixture name = " + state.dataFluidProps->GlycolData(Loop).Name);
2537 0 : ShowContinueError(state, "Glycol fluid name = " + state.dataFluidProps->GlycolData(Loop).GlycolName);
2538 0 : ErrorsFound = true;
2539 : }
2540 :
2541 : // Conductivity data:
2542 3 : if (state.dataFluidProps->GlyRawData(Index).CondDataPresent) {
2543 3 : state.dataFluidProps->GlycolData(Loop).CondDataPresent = true;
2544 3 : state.dataFluidProps->GlycolData(Loop).NumCondTempPts = state.dataFluidProps->GlyRawData(Index).NumCondTempPts;
2545 3 : state.dataFluidProps->GlycolData(Loop).CondTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts);
2546 3 : state.dataFluidProps->GlycolData(Loop).CondValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts);
2547 3 : state.dataFluidProps->GlycolData(Loop).CondTemps = state.dataFluidProps->GlyRawData(Index).CondTemps;
2548 18 : InterpValuesForGlycolConc(state,
2549 3 : state.dataFluidProps->GlyRawData(Index).NumCondConcPts,
2550 3 : state.dataFluidProps->GlyRawData(Index).NumCondTempPts,
2551 3 : state.dataFluidProps->GlyRawData(Index).CondConcs,
2552 3 : state.dataFluidProps->GlyRawData(Index).CondValues,
2553 3 : state.dataFluidProps->GlycolData(Loop).Concentration,
2554 3 : state.dataFluidProps->GlycolData(Loop).CondValues);
2555 : } else {
2556 0 : ShowSevereError(state, std::string{RoutineName} + "Conductivity data not entered for a " + CurrentModuleObject);
2557 0 : ShowContinueError(state, "ALL data must be entered for user-defined glycols");
2558 0 : ShowContinueError(state, "Glycol mixture name = " + state.dataFluidProps->GlycolData(Loop).Name);
2559 0 : ShowContinueError(state, "Glycol fluid name = " + state.dataFluidProps->GlycolData(Loop).GlycolName);
2560 0 : ErrorsFound = true;
2561 : }
2562 :
2563 : // Viscosity data:
2564 3 : if (state.dataFluidProps->GlyRawData(Index).ViscDataPresent) {
2565 3 : state.dataFluidProps->GlycolData(Loop).ViscDataPresent = true;
2566 3 : state.dataFluidProps->GlycolData(Loop).NumViscTempPts = state.dataFluidProps->GlyRawData(Index).NumViscTempPts;
2567 3 : state.dataFluidProps->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts);
2568 3 : state.dataFluidProps->GlycolData(Loop).ViscValues.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts);
2569 3 : state.dataFluidProps->GlycolData(Loop).ViscTemps = state.dataFluidProps->GlyRawData(Index).ViscTemps;
2570 18 : InterpValuesForGlycolConc(state,
2571 3 : state.dataFluidProps->GlyRawData(Index).NumViscConcPts,
2572 3 : state.dataFluidProps->GlyRawData(Index).NumViscTempPts,
2573 3 : state.dataFluidProps->GlyRawData(Index).ViscConcs,
2574 3 : state.dataFluidProps->GlyRawData(Index).ViscValues,
2575 3 : state.dataFluidProps->GlycolData(Loop).Concentration,
2576 3 : state.dataFluidProps->GlycolData(Loop).ViscValues);
2577 : } else {
2578 0 : ShowSevereError(state, std::string{RoutineName} + "Viscosity data not entered for a " + CurrentModuleObject);
2579 0 : ShowContinueError(state, "ALL data must be entered for user-defined glycols");
2580 0 : ShowContinueError(state, "Glycol mixture name = " + state.dataFluidProps->GlycolData(Loop).Name);
2581 0 : ShowContinueError(state, "Glycol fluid name = " + state.dataFluidProps->GlycolData(Loop).GlycolName);
2582 0 : ErrorsFound = true;
2583 : }
2584 : }
2585 : }
2586 :
2587 469 : state.dataFluidProps->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number
2588 469 : state.dataFluidProps->GlycolErrorTracking.allocate(state.dataFluidProps->NumOfGlycols);
2589 966 : for (std::size_t i = 0; i < state.dataFluidProps->GlycolErrorTracking.size(); ++i)
2590 497 : state.dataFluidProps->GlycolErrorTracking[i].Name = state.dataFluidProps->GlycolData[i].Name;
2591 :
2592 469 : if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols
2593 :
2594 469 : if (!ErrorsFound) InitializeRefrigerantLimits(state, ErrorsFound); // Initialize the limits for the refrigerants
2595 :
2596 469 : FluidTemps.deallocate();
2597 :
2598 469 : Alphas.deallocate();
2599 469 : cAlphaFieldNames.deallocate();
2600 469 : lAlphaFieldBlanks.deallocate();
2601 469 : Numbers.deallocate();
2602 469 : cNumericFieldNames.deallocate();
2603 469 : lNumericFieldBlanks.deallocate();
2604 :
2605 469 : if (ErrorsFound) {
2606 0 : ShowFatalError(state, std::string{RoutineName} + "Previous errors in input cause program termination.");
2607 : }
2608 :
2609 469 : if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) state.dataFluidProps->DebugReportGlycols = true;
2610 469 : if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTREFRIGERANTS") > 0)
2611 0 : state.dataFluidProps->DebugReportRefrigerants = true;
2612 469 : if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEGLYCOLERRORLIMIT") > 0)
2613 0 : state.dataFluidProps->GlycolErrorLimitTest += 10;
2614 469 : if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEREFRIGERANTERRORLIMIT") > 0)
2615 0 : state.dataFluidProps->RefrigerantErrorLimitTest += 10;
2616 :
2617 469 : if (state.dataFluidProps->DebugReportGlycols) ReportAndTestGlycols(state);
2618 469 : if (state.dataFluidProps->DebugReportRefrigerants) ReportAndTestRefrigerants(state);
2619 469 : }
2620 :
2621 : [[maybe_unused]] static constexpr std::array<std::array<Real64, DefaultNumSteamSuperheatedTemps>, DefaultNumSteamSuperheatedPressure>
2622 : DefaultSteamSuperheatedEnthalpyDataTable = {{
2623 : {2501000.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0,
2624 : 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0,
2625 : 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2626 : 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2627 : 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0,
2628 : 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2629 : 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2630 : 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2631 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2632 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2633 : {0.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0,
2634 : 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0,
2635 : 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2636 : 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2637 : 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0,
2638 : 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2639 : 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2640 : 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2641 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2642 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2643 : {0.0, 0.0, 2510000.0, 2519000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0,
2644 : 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0,
2645 : 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2646 : 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2647 : 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0,
2648 : 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2649 : 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2650 : 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2651 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2652 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2653 : {0.0, 0.0, 0.0, 2519000.0, 2529000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0,
2654 : 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0,
2655 : 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2656 : 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2657 : 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0,
2658 : 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2659 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2660 : 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2661 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2662 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2663 : {0.0, 0.0, 0.0, 0.0, 2528000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0,
2664 : 2604000.0, 2613000.0, 2622000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0,
2665 : 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2666 : 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2667 : 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0,
2668 : 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2669 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2670 : 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2671 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2672 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2673 : {0.0, 0.0, 0.0, 0.0, 0.0, 2537000.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0,
2674 : 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0,
2675 : 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2676 : 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2677 : 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0,
2678 : 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2679 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2680 : 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2681 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2682 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2683 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2584000.0, 2594000.0,
2684 : 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0,
2685 : 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2686 : 2698000.0, 2700000.0, 2702000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2687 : 2721000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2741000.0,
2688 : 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0,
2689 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2690 : 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2691 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2692 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2693 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2556000.0, 2565000.0, 2575000.0, 2584000.0, 2594000.0,
2694 : 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0,
2695 : 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2696 : 2698000.0, 2700000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0,
2697 : 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2739000.0, 2741000.0,
2698 : 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0,
2699 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0,
2700 : 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2701 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2702 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2703 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2565000.0, 2574000.0, 2584000.0, 2593000.0,
2704 : 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2661000.0,
2705 : 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0,
2706 : 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2718000.0,
2707 : 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2737000.0, 2739000.0, 2741000.0,
2708 : 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0,
2709 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0,
2710 : 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0,
2711 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2712 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2713 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2574000.0, 2583000.0, 2593000.0,
2714 : 2602000.0, 2612000.0, 2621000.0, 2631000.0, 2635000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2657000.0, 2661000.0,
2715 : 2665000.0, 2669000.0, 2673000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2693000.0, 2695000.0,
2716 : 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2714000.0, 2716000.0, 2718000.0,
2717 : 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0,
2718 : 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, 2783000.0,
2719 : 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0,
2720 : 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0,
2721 : 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2722 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2723 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2582000.0, 2592000.0,
2724 : 2602000.0, 2611000.0, 2621000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2649000.0, 2653000.0, 2657000.0, 2661000.0,
2725 : 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0,
2726 : 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0,
2727 : 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0,
2728 : 2743000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2775000.0, 2779000.0, 2783000.0,
2729 : 2787000.0, 2791000.0, 2795000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2825000.0, 2829000.0,
2730 : 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0,
2731 : 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2732 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2733 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2591000.0,
2734 : 2601000.0, 2611000.0, 2620000.0, 2630000.0, 2634000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, 2660000.0,
2735 : 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0,
2736 : 2697000.0, 2699000.0, 2701000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0,
2737 : 2720000.0, 2722000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0,
2738 : 2743000.0, 2745000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0,
2739 : 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2821000.0, 2825000.0, 2829000.0,
2740 : 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0,
2741 : 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2742 : 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2743 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2744 : 2600000.0, 2610000.0, 2620000.0, 2629000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2648000.0, 2652000.0, 2656000.0, 2660000.0,
2745 : 2664000.0, 2668000.0, 2671000.0, 2675000.0, 2679000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2692000.0, 2694000.0,
2746 : 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2715000.0, 2717000.0,
2747 : 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, 2740000.0,
2748 : 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0,
2749 : 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0,
2750 : 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0,
2751 : 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2752 : 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2753 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2754 : 0.0, 2609000.0, 2619000.0, 2628000.0, 2632000.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2655000.0, 2659000.0,
2755 : 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0,
2756 : 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0,
2757 : 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0,
2758 : 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2778000.0, 2782000.0,
2759 : 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0,
2760 : 2833000.0, 2836000.0, 2840000.0, 2850000.0, 2860000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2908000.0, 2918000.0, 2928000.0,
2761 : 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3076000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0,
2762 : 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2763 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2764 : 0.0, 0.0, 2618000.0, 2627000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2659000.0,
2765 : 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0,
2766 : 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2716000.0,
2767 : 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0,
2768 : 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0,
2769 : 2786000.0, 2790000.0, 2794000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2828000.0,
2770 : 2832000.0, 2836000.0, 2840000.0, 2850000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0,
2771 : 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3117000.0, 3137000.0, 3157000.0,
2772 : 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0},
2773 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2774 : 0.0, 0.0, 0.0, 2626000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0,
2775 : 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0,
2776 : 2695000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0,
2777 : 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0,
2778 : 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0,
2779 : 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0,
2780 : 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0,
2781 : 2937000.0, 2957000.0, 2977000.0, 2997000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0,
2782 : 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0},
2783 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2784 : 0.0, 0.0, 0.0, 0.0, 2630000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0,
2785 : 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0,
2786 : 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0,
2787 : 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0,
2788 : 2741000.0, 2743000.0, 2747000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, 2781000.0,
2789 : 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0,
2790 : 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0,
2791 : 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0,
2792 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0},
2793 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2794 : 0.0, 0.0, 0.0, 0.0, 0.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0,
2795 : 2661000.0, 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0,
2796 : 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0,
2797 : 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0,
2798 : 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2773000.0, 2777000.0, 2781000.0,
2799 : 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0,
2800 : 2832000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0,
2801 : 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0,
2802 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0},
2803 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2804 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0,
2805 : 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0,
2806 : 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0,
2807 : 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0,
2808 : 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0,
2809 : 2785000.0, 2789000.0, 2793000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0,
2810 : 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2917000.0, 2927000.0,
2811 : 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0,
2812 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0},
2813 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2814 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0,
2815 : 2660000.0, 2664000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0,
2816 : 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0,
2817 : 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0,
2818 : 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0,
2819 : 2785000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2823000.0, 2827000.0,
2820 : 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2907000.0, 2917000.0, 2927000.0,
2821 : 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0,
2822 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0},
2823 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2824 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0,
2825 : 2659000.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0,
2826 : 2693000.0, 2695000.0, 2697000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0,
2827 : 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0,
2828 : 2740000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2780000.0,
2829 : 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0,
2830 : 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0,
2831 : 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0,
2832 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0},
2833 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2834 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2646000.0, 2650000.0, 2654000.0,
2835 : 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0,
2836 : 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0,
2837 : 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0,
2838 : 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0,
2839 : 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0,
2840 : 2831000.0, 2835000.0, 2839000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0,
2841 : 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0,
2842 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0},
2843 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2844 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2650000.0, 2654000.0,
2845 : 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0,
2846 : 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0,
2847 : 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0,
2848 : 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0,
2849 : 2784000.0, 2788000.0, 2792000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0,
2850 : 2831000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0,
2851 : 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0,
2852 : 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0},
2853 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2854 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2653000.0,
2855 : 2657000.0, 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0,
2856 : 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0,
2857 : 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2732000.0, 2734000.0, 2736000.0,
2858 : 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0,
2859 : 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2822000.0, 2826000.0,
2860 : 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2926000.0,
2861 : 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3035000.0, 3055000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0,
2862 : 3177000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2863 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2864 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2865 : 2656000.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0,
2866 : 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0,
2867 : 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0,
2868 : 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0,
2869 : 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0,
2870 : 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2916000.0, 2926000.0,
2871 : 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0,
2872 : 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2873 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2874 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2875 : 0.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0,
2876 : 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0,
2877 : 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2735000.0,
2878 : 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0,
2879 : 2783000.0, 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0,
2880 : 2830000.0, 2834000.0, 2838000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0,
2881 : 2936000.0, 2956000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0,
2882 : 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2883 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2884 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2885 : 0.0, 0.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0,
2886 : 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0,
2887 : 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0,
2888 : 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2774000.0, 2778000.0,
2889 : 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0,
2890 : 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0,
2891 : 2936000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0,
2892 : 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2893 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2894 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2895 : 0.0, 0.0, 0.0, 2666000.0, 2670000.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0,
2896 : 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0,
2897 : 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0,
2898 : 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0,
2899 : 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0,
2900 : 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0,
2901 : 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0,
2902 : 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2903 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2904 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2905 : 0.0, 0.0, 0.0, 0.0, 2669000.0, 2673000.0, 2675000.0, 2677000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0,
2906 : 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0,
2907 : 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0,
2908 : 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0,
2909 : 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0,
2910 : 2829000.0, 2833000.0, 2837000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2915000.0, 2925000.0,
2911 : 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0,
2912 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2913 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2914 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2915 : 0.0, 0.0, 0.0, 0.0, 0.0, 2672000.0, 2674000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0,
2916 : 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0,
2917 : 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0,
2918 : 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0,
2919 : 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2820000.0, 2824000.0,
2920 : 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0,
2921 : 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0,
2922 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2923 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2924 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2925 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0,
2926 : 2686000.0, 2688000.0, 2690000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0,
2927 : 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0,
2928 : 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0,
2929 : 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0,
2930 : 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0,
2931 : 2935000.0, 2955000.0, 2975000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0,
2932 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2933 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2934 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2935 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0,
2936 : 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0,
2937 : 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0,
2938 : 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2776000.0,
2939 : 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0,
2940 : 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0,
2941 : 2935000.0, 2955000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0,
2942 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2943 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2944 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2945 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0,
2946 : 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0,
2947 : 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0,
2948 : 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0,
2949 : 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0,
2950 : 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0,
2951 : 2935000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0,
2952 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2953 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2954 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2955 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2679000.0, 2681000.0, 2683000.0,
2956 : 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2706000.0, 2708000.0,
2957 : 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0,
2958 : 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0,
2959 : 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0,
2960 : 2828000.0, 2832000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0,
2961 : 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0,
2962 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2963 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2964 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2965 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2680000.0, 2682000.0,
2966 : 2684000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0,
2967 : 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, 2732000.0,
2968 : 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0,
2969 : 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0,
2970 : 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2914000.0, 2924000.0,
2971 : 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0,
2972 : 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0},
2973 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2974 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2975 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2682000.0,
2976 : 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0,
2977 : 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0,
2978 : 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0,
2979 : 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0,
2980 : 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0,
2981 : 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0,
2982 : 3176000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0},
2983 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2984 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2985 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2986 : 2683000.0, 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0,
2987 : 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0,
2988 : 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0,
2989 : 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0,
2990 : 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0,
2991 : 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0,
2992 : 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0},
2993 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2994 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2995 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2996 : 0.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0,
2997 : 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0,
2998 : 2732000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0,
2999 : 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0,
3000 : 2827000.0, 2831000.0, 2835000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0,
3001 : 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0,
3002 : 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3488000.0},
3003 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3004 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3005 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3006 : 0.0, 0.0, 2686000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0,
3007 : 2707000.0, 2709000.0, 2711000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0,
3008 : 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0,
3009 : 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0,
3010 : 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0,
3011 : 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0,
3012 : 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3013 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3014 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3015 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3016 : 0.0, 0.0, 0.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0,
3017 : 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0,
3018 : 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0,
3019 : 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0,
3020 : 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0,
3021 : 2934000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0,
3022 : 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3023 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3024 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3025 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3026 : 0.0, 0.0, 0.0, 0.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0,
3027 : 2706000.0, 2708000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0,
3028 : 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0,
3029 : 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0,
3030 : 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2903000.0, 2913000.0, 2923000.0,
3031 : 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0,
3032 : 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3033 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3034 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3035 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3036 : 0.0, 0.0, 0.0, 0.0, 0.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0,
3037 : 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2727000.0, 2729000.0,
3038 : 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0,
3039 : 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0,
3040 : 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0,
3041 : 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0,
3042 : 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3043 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3044 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3045 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3046 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0,
3047 : 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0,
3048 : 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0,
3049 : 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0,
3050 : 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0,
3051 : 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3154000.0,
3052 : 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3053 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3054 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3055 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3056 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2703000.0,
3057 : 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2724000.0, 2726000.0, 2728000.0,
3058 : 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, 2773000.0,
3059 : 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0,
3060 : 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0,
3061 : 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0,
3062 : 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3063 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3064 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3065 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3066 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0,
3067 : 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0,
3068 : 2729000.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0,
3069 : 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0,
3070 : 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0,
3071 : 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0,
3072 : 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3073 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3074 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3075 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3076 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2697000.0, 2699000.0, 2701000.0,
3077 : 2703000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2725000.0, 2727000.0,
3078 : 2729000.0, 2731000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0,
3079 : 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0,
3080 : 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0,
3081 : 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0,
3082 : 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3083 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3084 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3085 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3086 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2699000.0, 2701000.0,
3087 : 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0,
3088 : 2728000.0, 2730000.0, 2734000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0,
3089 : 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0,
3090 : 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0,
3091 : 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0,
3092 : 3174000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0},
3093 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3094 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3095 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3096 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2700000.0,
3097 : 2702000.0, 2704000.0, 2706000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2726000.0,
3098 : 2728000.0, 2730000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0,
3099 : 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0,
3100 : 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0,
3101 : 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0,
3102 : 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0},
3103 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3104 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3105 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3106 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3107 : 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0,
3108 : 2727000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2771000.0,
3109 : 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0,
3110 : 2823000.0, 2827000.0, 2831000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0,
3111 : 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0,
3112 : 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0},
3113 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3114 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3115 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3116 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3117 : 0.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0,
3118 : 2726000.0, 2729000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0,
3119 : 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0,
3120 : 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2922000.0,
3121 : 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0,
3122 : 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0},
3123 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3124 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3125 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3126 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3127 : 0.0, 0.0, 2704000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, 2722000.0, 2724000.0,
3128 : 2726000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2766000.0, 2770000.0,
3129 : 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, 2815000.0, 2819000.0,
3130 : 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0,
3131 : 2931000.0, 2951000.0, 2971000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0,
3132 : 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0},
3133 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3134 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3135 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3136 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3137 : 0.0, 0.0, 0.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0,
3138 : 2725000.0, 2727000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0,
3139 : 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0,
3140 : 2822000.0, 2826000.0, 2830000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0,
3141 : 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0,
3142 : 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0},
3143 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3144 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3145 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3146 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3147 : 0.0, 0.0, 0.0, 0.0, 2707000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0,
3148 : 2725000.0, 2727000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0,
3149 : 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0,
3150 : 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0,
3151 : 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0,
3152 : 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0},
3153 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3154 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3155 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3156 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3157 : 0.0, 0.0, 0.0, 0.0, 0.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2718000.0, 2720000.0, 2722000.0,
3158 : 2724000.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0,
3159 : 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2818000.0,
3160 : 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2921000.0,
3161 : 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0,
3162 : 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3488000.0},
3163 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3164 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3165 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3166 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3167 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0,
3168 : 2723000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, 2768000.0,
3169 : 2772000.0, 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0,
3170 : 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0,
3171 : 2930000.0, 2950000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0,
3172 : 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0},
3173 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3174 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3175 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3176 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3177 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0,
3178 : 2723000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0,
3179 : 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2813000.0, 2817000.0,
3180 : 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0,
3181 : 2930000.0, 2950000.0, 2970000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0,
3182 : 3173000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0},
3183 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3184 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3185 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3186 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3187 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0,
3188 : 2722000.0, 2724000.0, 2728000.0, 2733000.0, 2737000.0, 2741000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2767000.0,
3189 : 2771000.0, 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0,
3190 : 2820000.0, 2824000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2900000.0, 2910000.0, 2920000.0,
3191 : 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0,
3192 : 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0},
3193 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3194 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3195 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3196 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3197 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2715000.0, 2717000.0, 2719000.0,
3198 : 2721000.0, 2723000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2758000.0, 2762000.0, 2766000.0,
3199 : 2770000.0, 2774000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, 2816000.0,
3200 : 2820000.0, 2824000.0, 2828000.0, 2838000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0,
3201 : 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3010000.0, 3031000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3153000.0,
3202 : 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0},
3203 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3204 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3205 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3206 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3207 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2716000.0, 2718000.0,
3208 : 2720000.0, 2723000.0, 2727000.0, 2731000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0,
3209 : 2770000.0, 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0,
3210 : 2819000.0, 2824000.0, 2828000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0,
3211 : 2929000.0, 2949000.0, 2970000.0, 2990000.0, 3010000.0, 3030000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3152000.0,
3212 : 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0},
3213 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3214 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3215 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3216 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3217 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2717000.0,
3218 : 2720000.0, 2722000.0, 2726000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2761000.0, 2765000.0,
3219 : 2769000.0, 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2807000.0, 2811000.0, 2815000.0,
3220 : 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2899000.0, 2909000.0, 2919000.0,
3221 : 2929000.0, 2949000.0, 2969000.0, 2990000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0,
3222 : 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0},
3223 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3224 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3225 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3226 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3227 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3228 : 2719000.0, 2721000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0,
3229 : 2768000.0, 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0,
3230 : 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2847000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2919000.0,
3231 : 2929000.0, 2949000.0, 2969000.0, 2989000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0,
3232 : 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0},
3233 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3234 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3235 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3236 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3237 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3238 : 0.0, 2720000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0,
3239 : 2768000.0, 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2806000.0, 2810000.0, 2814000.0,
3240 : 2818000.0, 2822000.0, 2826000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0,
3241 : 2928000.0, 2949000.0, 2969000.0, 2989000.0, 3009000.0, 3030000.0, 3050000.0, 3070000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0,
3242 : 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0},
3243 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3244 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3245 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3246 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3247 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3248 : 0.0, 0.0, 2723000.0, 2727000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0,
3249 : 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2805000.0, 2809000.0, 2813000.0,
3250 : 2817000.0, 2821000.0, 2825000.0, 2836000.0, 2846000.0, 2856000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2918000.0,
3251 : 2928000.0, 2948000.0, 2968000.0, 2989000.0, 3009000.0, 3029000.0, 3050000.0, 3070000.0, 3090000.0, 3111000.0, 3131000.0, 3152000.0,
3252 : 3172000.0, 3193000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0},
3253 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3254 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3255 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3256 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3257 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3258 : 0.0, 0.0, 0.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, 2757000.0, 2761000.0,
3259 : 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0,
3260 : 2816000.0, 2820000.0, 2824000.0, 2835000.0, 2845000.0, 2855000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2907000.0, 2917000.0,
3261 : 2927000.0, 2947000.0, 2968000.0, 2988000.0, 3008000.0, 3029000.0, 3049000.0, 3069000.0, 3090000.0, 3110000.0, 3131000.0, 3151000.0,
3262 : 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0},
3263 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3264 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3265 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3266 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3267 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3268 : 0.0, 0.0, 0.0, 0.0, 2728000.0, 2733000.0, 2737000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0,
3269 : 2764000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0,
3270 : 2815000.0, 2819000.0, 2823000.0, 2834000.0, 2844000.0, 2854000.0, 2865000.0, 2875000.0, 2885000.0, 2896000.0, 2906000.0, 2916000.0,
3271 : 2926000.0, 2947000.0, 2967000.0, 2987000.0, 3008000.0, 3028000.0, 3049000.0, 3069000.0, 3089000.0, 3110000.0, 3130000.0, 3151000.0,
3272 : 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3486000.0},
3273 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3274 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3275 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3276 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3277 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3278 : 0.0, 0.0, 0.0, 0.0, 0.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2749000.0, 2753000.0, 2758000.0,
3279 : 2762000.0, 2767000.0, 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0,
3280 : 2814000.0, 2818000.0, 2822000.0, 2833000.0, 2843000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0,
3281 : 2926000.0, 2946000.0, 2966000.0, 2987000.0, 3007000.0, 3028000.0, 3048000.0, 3069000.0, 3089000.0, 3109000.0, 3130000.0, 3151000.0,
3282 : 3171000.0, 3192000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0},
3283 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3284 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3285 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3286 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3287 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3288 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2733000.0, 2738000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0,
3289 : 2761000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0,
3290 : 2812000.0, 2817000.0, 2821000.0, 2831000.0, 2842000.0, 2852000.0, 2863000.0, 2873000.0, 2884000.0, 2894000.0, 2904000.0, 2915000.0,
3291 : 2925000.0, 2945000.0, 2966000.0, 2986000.0, 3007000.0, 3027000.0, 3048000.0, 3068000.0, 3089000.0, 3109000.0, 3130000.0, 3150000.0,
3292 : 3171000.0, 3191000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0},
3293 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3294 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3295 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3296 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3297 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3298 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2736000.0, 2741000.0, 2745000.0, 2750000.0, 2754000.0,
3299 : 2759000.0, 2763000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2803000.0, 2807000.0,
3300 : 2811000.0, 2815000.0, 2820000.0, 2830000.0, 2841000.0, 2851000.0, 2862000.0, 2872000.0, 2883000.0, 2893000.0, 2903000.0, 2914000.0,
3301 : 2924000.0, 2945000.0, 2965000.0, 2986000.0, 3006000.0, 3027000.0, 3047000.0, 3068000.0, 3088000.0, 3109000.0, 3129000.0, 3150000.0,
3302 : 3170000.0, 3191000.0, 3212000.0, 3280000.0, 3379000.0, 3486000.0},
3303 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3304 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3305 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3306 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3307 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3308 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0,
3309 : 2757000.0, 2761000.0, 2766000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0,
3310 : 2810000.0, 2814000.0, 2818000.0, 2829000.0, 2840000.0, 2850000.0, 2861000.0, 2871000.0, 2882000.0, 2892000.0, 2902000.0, 2913000.0,
3311 : 2923000.0, 2944000.0, 2964000.0, 2985000.0, 3005000.0, 3026000.0, 3046000.0, 3067000.0, 3088000.0, 3108000.0, 3129000.0, 3149000.0,
3312 : 3170000.0, 3191000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0},
3313 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3314 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3315 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3316 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3317 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3318 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2741000.0, 2746000.0, 2750000.0,
3319 : 2755000.0, 2760000.0, 2764000.0, 2769000.0, 2773000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0,
3320 : 2808000.0, 2813000.0, 2817000.0, 2828000.0, 2838000.0, 2849000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2912000.0,
3321 : 2922000.0, 2943000.0, 2964000.0, 2984000.0, 3005000.0, 3025000.0, 3046000.0, 3066000.0, 3087000.0, 3108000.0, 3128000.0, 3149000.0,
3322 : 3170000.0, 3190000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0},
3323 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3324 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3325 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3326 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3327 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3328 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2744000.0, 2748000.0,
3329 : 2753000.0, 2758000.0, 2762000.0, 2767000.0, 2771000.0, 2776000.0, 2780000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0,
3330 : 2807000.0, 2811000.0, 2815000.0, 2826000.0, 2837000.0, 2848000.0, 2858000.0, 2869000.0, 2879000.0, 2890000.0, 2900000.0, 2911000.0,
3331 : 2921000.0, 2942000.0, 2963000.0, 2983000.0, 3004000.0, 3025000.0, 3045000.0, 3066000.0, 3086000.0, 3107000.0, 3128000.0, 3148000.0,
3332 : 3169000.0, 3190000.0, 3211000.0, 3280000.0, 3378000.0, 3485000.0},
3333 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3334 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3335 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3336 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3337 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3338 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2746000.0,
3339 : 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2801000.0,
3340 : 2805000.0, 2810000.0, 2814000.0, 2825000.0, 2836000.0, 2846000.0, 2857000.0, 2868000.0, 2878000.0, 2889000.0, 2899000.0, 2910000.0,
3341 : 2920000.0, 2941000.0, 2962000.0, 2983000.0, 3003000.0, 3024000.0, 3045000.0, 3065000.0, 3086000.0, 3106000.0, 3127000.0, 3148000.0,
3342 : 3169000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3485000.0},
3343 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3344 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3345 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3346 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3347 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3348 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3349 : 2748000.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2776000.0, 2781000.0, 2786000.0, 2790000.0, 2795000.0, 2799000.0,
3350 : 2803000.0, 2808000.0, 2812000.0, 2823000.0, 2834000.0, 2845000.0, 2856000.0, 2866000.0, 2877000.0, 2888000.0, 2898000.0, 2909000.0,
3351 : 2919000.0, 2940000.0, 2961000.0, 2982000.0, 3002000.0, 3023000.0, 3044000.0, 3064000.0, 3085000.0, 3106000.0, 3127000.0, 3147000.0,
3352 : 3168000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3484000.0},
3353 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3354 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3355 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3356 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3357 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3358 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3359 : 0.0, 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0,
3360 : 2802000.0, 2806000.0, 2811000.0, 2822000.0, 2833000.0, 2843000.0, 2854000.0, 2865000.0, 2876000.0, 2886000.0, 2897000.0, 2908000.0,
3361 : 2918000.0, 2939000.0, 2960000.0, 2981000.0, 3002000.0, 3022000.0, 3043000.0, 3064000.0, 3085000.0, 3105000.0, 3126000.0, 3147000.0,
3362 : 3168000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0},
3363 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3364 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3365 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3366 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3367 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3368 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3369 : 0.0, 0.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, 2791000.0, 2795000.0,
3370 : 2800000.0, 2804000.0, 2809000.0, 2820000.0, 2831000.0, 2842000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2896000.0, 2906000.0,
3371 : 2917000.0, 2938000.0, 2959000.0, 2980000.0, 3001000.0, 3022000.0, 3042000.0, 3063000.0, 3084000.0, 3105000.0, 3125000.0, 3146000.0,
3372 : 3167000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0},
3373 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3374 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3375 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3376 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3377 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3378 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3379 : 0.0, 0.0, 0.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2789000.0, 2793000.0,
3380 : 2798000.0, 2802000.0, 2807000.0, 2818000.0, 2829000.0, 2840000.0, 2851000.0, 2862000.0, 2873000.0, 2884000.0, 2894000.0, 2905000.0,
3381 : 2916000.0, 2937000.0, 2958000.0, 2979000.0, 3000000.0, 3021000.0, 3042000.0, 3062000.0, 3083000.0, 3104000.0, 3125000.0, 3146000.0,
3382 : 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3377000.0, 3484000.0},
3383 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3384 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3385 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3386 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3387 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3388 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3389 : 0.0, 0.0, 0.0, 0.0, 2757000.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2782000.0, 2786000.0, 2791000.0,
3390 : 2796000.0, 2800000.0, 2805000.0, 2816000.0, 2827000.0, 2839000.0, 2850000.0, 2861000.0, 2872000.0, 2882000.0, 2893000.0, 2904000.0,
3391 : 2915000.0, 2936000.0, 2957000.0, 2978000.0, 2999000.0, 3020000.0, 3041000.0, 3062000.0, 3082000.0, 3103000.0, 3124000.0, 3145000.0,
3392 : 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3376000.0, 3483000.0},
3393 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3394 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3395 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3396 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3397 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3398 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3399 : 0.0, 0.0, 0.0, 0.0, 0.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2789000.0,
3400 : 2793000.0, 2798000.0, 2803000.0, 2814000.0, 2826000.0, 2837000.0, 2848000.0, 2859000.0, 2870000.0, 2881000.0, 2892000.0, 2902000.0,
3401 : 2913000.0, 2935000.0, 2956000.0, 2977000.0, 2998000.0, 3019000.0, 3040000.0, 3061000.0, 3082000.0, 3102000.0, 3123000.0, 3144000.0,
3402 : 3165000.0, 3186000.0, 3207000.0, 3280000.0, 3376000.0, 3483000.0},
3403 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3404 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3405 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3406 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3407 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3408 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3409 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0,
3410 : 2791000.0, 2796000.0, 2800000.0, 2812000.0, 2824000.0, 2835000.0, 2846000.0, 2857000.0, 2868000.0, 2879000.0, 2890000.0, 2901000.0,
3411 : 2912000.0, 2933000.0, 2955000.0, 2976000.0, 2997000.0, 3018000.0, 3039000.0, 3060000.0, 3081000.0, 3102000.0, 3123000.0, 3144000.0,
3412 : 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3483000.0},
3413 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3414 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3415 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3416 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3417 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3418 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3419 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2764000.0, 2769000.0, 2774000.0, 2779000.0, 2784000.0,
3420 : 2789000.0, 2793000.0, 2798000.0, 2810000.0, 2821000.0, 2833000.0, 2844000.0, 2855000.0, 2867000.0, 2878000.0, 2889000.0, 2900000.0,
3421 : 2910000.0, 2932000.0, 2953000.0, 2975000.0, 2996000.0, 3017000.0, 3038000.0, 3059000.0, 3080000.0, 3101000.0, 3122000.0, 3143000.0,
3422 : 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3482000.0},
3423 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3424 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3425 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3426 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3427 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3428 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3429 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2766000.0, 2771000.0, 2776000.0, 2781000.0,
3430 : 2786000.0, 2791000.0, 2796000.0, 2808000.0, 2819000.0, 2831000.0, 2842000.0, 2854000.0, 2865000.0, 2876000.0, 2887000.0, 2898000.0,
3431 : 2909000.0, 2931000.0, 2952000.0, 2973000.0, 2995000.0, 3016000.0, 3037000.0, 3058000.0, 3079000.0, 3100000.0, 3121000.0, 3142000.0,
3432 : 3163000.0, 3184000.0, 3205000.0, 3280000.0, 3374000.0, 3482000.0},
3433 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3434 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3435 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3436 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3437 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3438 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3439 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2768000.0, 2773000.0, 2778000.0,
3440 : 2783000.0, 2788000.0, 2793000.0, 2805000.0, 2817000.0, 2829000.0, 2840000.0, 2852000.0, 2863000.0, 2874000.0, 2885000.0, 2896000.0,
3441 : 2907000.0, 2929000.0, 2951000.0, 2972000.0, 2994000.0, 3015000.0, 3036000.0, 3057000.0, 3078000.0, 3099000.0, 3120000.0, 3141000.0,
3442 : 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3374000.0, 3481000.0},
3443 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3444 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3445 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3446 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3447 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3448 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3449 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2770000.0, 2775000.0,
3450 : 2780000.0, 2785000.0, 2790000.0, 2802000.0, 2814000.0, 2826000.0, 2838000.0, 2850000.0, 2861000.0, 2872000.0, 2883000.0, 2895000.0,
3451 : 2906000.0, 2928000.0, 2949000.0, 2971000.0, 2992000.0, 3014000.0, 3035000.0, 3056000.0, 3077000.0, 3098000.0, 3119000.0, 3140000.0,
3452 : 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3373000.0, 3481000.0},
3453 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3454 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3455 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3456 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3457 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3458 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3459 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2772000.0,
3460 : 2777000.0, 2782000.0, 2787000.0, 2800000.0, 2812000.0, 2824000.0, 2836000.0, 2847000.0, 2859000.0, 2870000.0, 2882000.0, 2893000.0,
3461 : 2904000.0, 2926000.0, 2948000.0, 2969000.0, 2991000.0, 3012000.0, 3034000.0, 3055000.0, 3076000.0, 3097000.0, 3118000.0, 3140000.0,
3462 : 3161000.0, 3182000.0, 3203000.0, 3280000.0, 3373000.0, 3480000.0},
3463 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3464 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3465 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3466 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3467 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3468 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3469 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3470 : 2774000.0, 2779000.0, 2784000.0, 2797000.0, 2809000.0, 2821000.0, 2833000.0, 2845000.0, 2857000.0, 2868000.0, 2880000.0, 2891000.0,
3471 : 2902000.0, 2924000.0, 2946000.0, 2968000.0, 2990000.0, 3011000.0, 3033000.0, 3054000.0, 3075000.0, 3096000.0, 3118000.0, 3139000.0,
3472 : 3160000.0, 3181000.0, 3202000.0, 3280000.0, 3372000.0, 3480000.0},
3473 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3474 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3475 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3476 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3477 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3478 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3479 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3480 : 0.0, 2775000.0, 2781000.0, 2794000.0, 2806000.0, 2819000.0, 2831000.0, 2843000.0, 2854000.0, 2866000.0, 2878000.0, 2889000.0,
3481 : 2900000.0, 2923000.0, 2945000.0, 2967000.0, 2988000.0, 3010000.0, 3031000.0, 3053000.0, 3074000.0, 3095000.0, 3117000.0, 3138000.0,
3482 : 3159000.0, 3180000.0, 3201000.0, 3280000.0, 3372000.0, 3480000.0},
3483 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3484 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3485 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3486 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3487 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3488 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3489 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3490 : 0.0, 0.0, 2777000.0, 2790000.0, 2803000.0, 2816000.0, 2828000.0, 2840000.0, 2852000.0, 2864000.0, 2875000.0, 2887000.0,
3491 : 2898000.0, 2921000.0, 2943000.0, 2965000.0, 2987000.0, 3009000.0, 3030000.0, 3052000.0, 3073000.0, 3094000.0, 3116000.0, 3137000.0,
3492 : 3158000.0, 3179000.0, 3201000.0, 3280000.0, 3371000.0, 3479000.0},
3493 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3494 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3495 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3496 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3497 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3498 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3499 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3500 : 0.0, 0.0, 0.0, 2781000.0, 2795000.0, 2808000.0, 2821000.0, 2833000.0, 2846000.0, 2858000.0, 2870000.0, 2881000.0,
3501 : 2893000.0, 2916000.0, 2939000.0, 2961000.0, 2983000.0, 3005000.0, 3027000.0, 3048000.0, 3070000.0, 3091000.0, 3113000.0, 3134000.0,
3502 : 3156000.0, 3177000.0, 3198000.0, 3280000.0, 3370000.0, 3478000.0},
3503 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3504 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3505 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3506 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3507 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3508 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3509 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3510 : 0.0, 0.0, 0.0, 0.0, 2785000.0, 2799000.0, 2813000.0, 2826000.0, 2838000.0, 2851000.0, 2863000.0, 2875000.0,
3511 : 2887000.0, 2910000.0, 2933000.0, 2956000.0, 2979000.0, 3001000.0, 3023000.0, 3045000.0, 3067000.0, 3088000.0, 3110000.0, 3132000.0,
3512 : 3153000.0, 3175000.0, 3196000.0, 3280000.0, 3368000.0, 3476000.0},
3513 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3514 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3515 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3516 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3517 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3518 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3519 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3520 : 0.0, 0.0, 0.0, 0.0, 0.0, 2789000.0, 2803000.0, 2817000.0, 2830000.0, 2843000.0, 2856000.0, 2868000.0,
3521 : 2880000.0, 2904000.0, 2928000.0, 2951000.0, 2974000.0, 2996000.0, 3019000.0, 3041000.0, 3063000.0, 3085000.0, 3107000.0, 3128000.0,
3522 : 3150000.0, 3172000.0, 3193000.0, 3280000.0, 3366000.0, 3475000.0},
3523 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3524 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3525 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3526 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3527 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3528 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3529 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3530 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2792000.0, 2807000.0, 2821000.0, 2834000.0, 2847000.0, 2860000.0,
3531 : 2873000.0, 2898000.0, 2922000.0, 2945000.0, 2969000.0, 2992000.0, 3014000.0, 3037000.0, 3059000.0, 3081000.0, 3103000.0, 3125000.0,
3532 : 3147000.0, 3169000.0, 3190000.0, 3280000.0, 3364000.0, 3473000.0},
3533 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3534 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3535 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3536 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3537 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3538 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3539 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3540 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2795000.0, 2810000.0, 2824000.0, 2838000.0, 2851000.0,
3541 : 2864000.0, 2890000.0, 2915000.0, 2939000.0, 2963000.0, 2986000.0, 3009000.0, 3032000.0, 3055000.0, 3077000.0, 3099000.0, 3121000.0,
3542 : 3143000.0, 3165000.0, 3187000.0, 3280000.0, 3362000.0, 3471000.0},
3543 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3544 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3545 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3546 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3547 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3548 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3549 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3550 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2797000.0, 2813000.0, 2827000.0, 2841000.0,
3551 : 2855000.0, 2882000.0, 2907000.0, 2932000.0, 2956000.0, 2980000.0, 3004000.0, 3027000.0, 3050000.0, 3072000.0, 3095000.0, 3117000.0,
3552 : 3140000.0, 3162000.0, 3184000.0, 3280000.0, 3359000.0, 3469000.0},
3553 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3554 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3555 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3556 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3557 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3558 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3559 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3560 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2799000.0, 2815000.0, 2830000.0,
3561 : 2844000.0, 2872000.0, 2899000.0, 2924000.0, 2949000.0, 2974000.0, 2998000.0, 3021000.0, 3044000.0, 3067000.0, 3090000.0, 3113000.0,
3562 : 3135000.0, 3158000.0, 3180000.0, 3280000.0, 3357000.0, 3467000.0},
3563 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3564 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3565 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3566 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3567 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3568 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3569 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3570 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2801000.0, 2817000.0,
3571 : 2832000.0, 2862000.0, 2889000.0, 2916000.0, 2941000.0, 2966000.0, 2991000.0, 3015000.0, 3039000.0, 3062000.0, 3085000.0, 3108000.0,
3572 : 3131000.0, 3154000.0, 3176000.0, 3280000.0, 3354000.0, 3465000.0},
3573 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3574 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3575 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3576 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3577 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3578 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3579 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3580 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2802000.0,
3581 : 2819000.0, 2850000.0, 2879000.0, 2906000.0, 2933000.0, 2958000.0, 2984000.0, 3008000.0, 3032000.0, 3056000.0, 3080000.0, 3103000.0,
3582 : 3126000.0, 3149000.0, 3172000.0, 3280000.0, 3351000.0, 3462000.0},
3583 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3584 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3585 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3586 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3587 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3588 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3589 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3590 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3591 : 2803000.0, 2836000.0, 2867000.0, 2895000.0, 2923000.0, 2950000.0, 2975000.0, 3001000.0, 3025000.0, 3050000.0, 3073000.0, 3097000.0,
3592 : 3121000.0, 3144000.0, 3167000.0, 3280000.0, 3348000.0, 3459000.0},
3593 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3594 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3595 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3596 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3597 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3598 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3599 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3600 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3601 : 0.0, 2803000.0, 2838000.0, 2870000.0, 2900000.0, 2929000.0, 2957000.0, 2983000.0, 3009000.0, 3035000.0, 3060000.0, 3084000.0,
3602 : 3108000.0, 3132000.0, 3156000.0, 3280000.0, 3340000.0, 3453000.0},
3603 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3604 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3605 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3606 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3607 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3608 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3609 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3610 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3611 : 0.0, 0.0, 2801000.0, 2838000.0, 2872000.0, 2904000.0, 2934000.0, 2963000.0, 2990000.0, 3017000.0, 3043000.0, 3069000.0,
3612 : 3094000.0, 3119000.0, 3143000.0, 3280000.0, 3332000.0, 3446000.0},
3613 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3614 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3615 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3616 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3617 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3618 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3619 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3620 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3621 : 0.0, 0.0, 0.0, 2797000.0, 2837000.0, 2873000.0, 2906000.0, 2937000.0, 2967000.0, 2996000.0, 3023000.0, 3050000.0,
3622 : 3077000.0, 3103000.0, 3128000.0, 3280000.0, 3322000.0, 3438000.0},
3623 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3624 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3625 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3626 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3627 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3628 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3629 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3630 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3631 : 0.0, 0.0, 0.0, 0.0, 2790000.0, 2833000.0, 2871000.0, 2906000.0, 2939000.0, 2970000.0, 3000000.0, 3029000.0,
3632 : 3057000.0, 3084000.0, 3110000.0, 3280000.0, 3310000.0, 3429000.0},
3633 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3634 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3635 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3636 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3637 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3638 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3639 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3640 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3641 : 0.0, 0.0, 0.0, 0.0, 0.0, 2780000.0, 2826000.0, 2867000.0, 2905000.0, 2939000.0, 2972000.0, 3003000.0,
3642 : 3033000.0, 3062000.0, 3090000.0, 3280000.0, 3297000.0, 3418000.0},
3643 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3644 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3645 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3646 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3647 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3648 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3649 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3650 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2767000.0, 2817000.0,
3651 : 2861000.0, 2901000.0, 2938000.0, 2972000.0, 3004000.0, 3036000.0, 3066000.0, 3280000.0, 3282000.0, 3406000.0},
3652 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3653 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3654 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3655 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3656 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3657 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3658 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3659 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2750000.0,
3660 : 2806000.0, 2853000.0, 2895000.0, 2934000.0, 2970000.0, 3004000.0, 3037000.0, 3280000.0, 3264000.0, 3392000.0},
3661 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3662 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3663 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3664 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3665 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3666 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3667 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2728000.0,
3668 : 2790000.0, 2842000.0, 2887000.0, 2929000.0, 2967000.0, 3003000.0, 3280000.0, 3244000.0, 3377000.0},
3669 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3670 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3671 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3672 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3673 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3674 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3675 : 0.0, 0.0, 0.0, 2701000.0, 2771000.0, 2828000.0, 2877000.0, 2921000.0, 2961000.0, 3280000.0, 3222000.0, 3359000.0},
3676 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3677 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3678 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3679 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3680 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3681 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3682 : 0.0, 0.0, 0.0, 0.0, 2666000.0, 2747000.0, 2810000.0, 2864000.0, 2911000.0, 3280000.0, 3195000.0, 3339000.0},
3683 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3684 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3685 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3686 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3687 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3688 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2622000.0, 2718000.0, 2789000.0, 2847000.0, 3280000.0, 3165000.0, 3316000.0},
3689 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3690 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3691 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3692 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3693 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3694 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2564000.0, 2683000.0, 2763000.0, 3280000.0, 3130000.0, 3290000.0},
3695 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3696 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3697 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3698 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3699 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3700 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2481000.0, 2641000.0, 3280000.0, 3089000.0, 3260000.0},
3701 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3702 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3703 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3704 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3705 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2335000.0, 3280000.0, 3040000.0, 3226000.0},
3706 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3707 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3708 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3709 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3710 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2821000.0, 3085000.0},
3711 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3712 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3713 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3714 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3715 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2671000.0, 2998000.0},
3716 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3717 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3718 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3719 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3720 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2512000.0, 2906000.0},
3721 : }};
3722 :
3723 : [[maybe_unused]] static constexpr std::array<std::array<Real64, DefaultNumSteamSuperheatedTemps>, DefaultNumSteamSuperheatedPressure>
3724 : DefaultSteamSuperheatedDensityDataTable = {{
3725 : {4.855e-03, 4.837e-03, 4.767e-03, 4.683e-03, 4.601e-03, 4.522e-03, 4.446e-03, 4.373e-03, 4.302e-03, 4.233e-03, 4.167e-03, 4.102e-03,
3726 : 4.039e-03, 3.979e-03, 3.920e-03, 3.863e-03, 3.840e-03, 3.818e-03, 3.796e-03, 3.775e-03, 3.753e-03, 3.732e-03, 3.711e-03, 3.691e-03,
3727 : 3.670e-03, 3.650e-03, 3.630e-03, 3.610e-03, 3.591e-03, 3.571e-03, 3.562e-03, 3.552e-03, 3.543e-03, 3.533e-03, 3.524e-03, 3.514e-03,
3728 : 3.505e-03, 3.496e-03, 3.487e-03, 3.477e-03, 3.468e-03, 3.459e-03, 3.450e-03, 3.441e-03, 3.432e-03, 3.424e-03, 3.415e-03, 3.406e-03,
3729 : 3.397e-03, 3.388e-03, 3.380e-03, 3.371e-03, 3.363e-03, 3.354e-03, 3.346e-03, 3.337e-03, 3.329e-03, 3.321e-03, 3.312e-03, 3.304e-03,
3730 : 3.296e-03, 3.288e-03, 3.271e-03, 3.255e-03, 3.239e-03, 3.224e-03, 3.208e-03, 3.193e-03, 3.177e-03, 3.162e-03, 3.147e-03, 3.132e-03,
3731 : 3.117e-03, 3.103e-03, 3.088e-03, 3.074e-03, 3.060e-03, 3.046e-03, 3.032e-03, 3.018e-03, 3.004e-03, 2.991e-03, 2.977e-03, 2.964e-03,
3732 : 2.951e-03, 2.938e-03, 2.925e-03, 2.893e-03, 2.862e-03, 2.831e-03, 2.801e-03, 2.772e-03, 2.743e-03, 2.715e-03, 2.688e-03, 2.661e-03,
3733 : 2.634e-03, 2.583e-03, 2.533e-03, 2.486e-03, 2.440e-03, 2.396e-03, 2.353e-03, 2.312e-03, 2.273e-03, 2.234e-03, 2.197e-03, 2.162e-03,
3734 : 2.127e-03, 2.093e-03, 2.061e-03, 3.542e-05, 1.833e-03, 1.714e-03},
3735 : {0.0, 5.196e-03, 5.121e-03, 5.031e-03, 4.943e-03, 4.859e-03, 4.777e-03, 4.698e-03, 4.622e-03, 4.548e-03, 4.476e-03, 4.407e-03,
3736 : 4.340e-03, 4.274e-03, 4.211e-03, 4.150e-03, 4.126e-03, 4.102e-03, 4.078e-03, 4.055e-03, 4.032e-03, 4.009e-03, 3.987e-03, 3.965e-03,
3737 : 3.943e-03, 3.921e-03, 3.899e-03, 3.878e-03, 3.857e-03, 3.836e-03, 3.826e-03, 3.816e-03, 3.806e-03, 3.795e-03, 3.785e-03, 3.775e-03,
3738 : 3.765e-03, 3.755e-03, 3.746e-03, 3.736e-03, 3.726e-03, 3.716e-03, 3.707e-03, 3.697e-03, 3.687e-03, 3.678e-03, 3.668e-03, 3.659e-03,
3739 : 3.650e-03, 3.640e-03, 3.631e-03, 3.622e-03, 3.612e-03, 3.603e-03, 3.594e-03, 3.585e-03, 3.576e-03, 3.567e-03, 3.558e-03, 3.549e-03,
3740 : 3.541e-03, 3.532e-03, 3.514e-03, 3.497e-03, 3.480e-03, 3.463e-03, 3.446e-03, 3.430e-03, 3.413e-03, 3.397e-03, 3.381e-03, 3.365e-03,
3741 : 3.349e-03, 3.333e-03, 3.318e-03, 3.302e-03, 3.287e-03, 3.272e-03, 3.257e-03, 3.242e-03, 3.228e-03, 3.213e-03, 3.198e-03, 3.184e-03,
3742 : 3.170e-03, 3.156e-03, 3.142e-03, 3.108e-03, 3.074e-03, 3.041e-03, 3.009e-03, 2.978e-03, 2.947e-03, 2.917e-03, 2.887e-03, 2.858e-03,
3743 : 2.830e-03, 2.775e-03, 2.722e-03, 2.671e-03, 2.621e-03, 2.574e-03, 2.528e-03, 2.484e-03, 2.442e-03, 2.400e-03, 2.361e-03, 2.322e-03,
3744 : 2.285e-03, 2.249e-03, 2.214e-03, 3.542e-05, 1.969e-03, 1.841e-03},
3745 : {0.0, 0.0, 6.802e-03, 6.681e-03, 6.565e-03, 6.453e-03, 6.344e-03, 6.239e-03, 6.138e-03, 6.040e-03, 5.944e-03, 5.852e-03,
3746 : 5.763e-03, 5.676e-03, 5.592e-03, 5.511e-03, 5.479e-03, 5.447e-03, 5.416e-03, 5.385e-03, 5.355e-03, 5.324e-03, 5.295e-03, 5.265e-03,
3747 : 5.236e-03, 5.207e-03, 5.178e-03, 5.150e-03, 5.122e-03, 5.095e-03, 5.081e-03, 5.067e-03, 5.054e-03, 5.040e-03, 5.027e-03, 5.014e-03,
3748 : 5.000e-03, 4.987e-03, 4.974e-03, 4.961e-03, 4.948e-03, 4.935e-03, 4.922e-03, 4.909e-03, 4.897e-03, 4.884e-03, 4.871e-03, 4.859e-03,
3749 : 4.846e-03, 4.834e-03, 4.822e-03, 4.809e-03, 4.797e-03, 4.785e-03, 4.773e-03, 4.761e-03, 4.749e-03, 4.737e-03, 4.725e-03, 4.714e-03,
3750 : 4.702e-03, 4.690e-03, 4.667e-03, 4.644e-03, 4.621e-03, 4.599e-03, 4.577e-03, 4.555e-03, 4.533e-03, 4.511e-03, 4.490e-03, 4.468e-03,
3751 : 4.447e-03, 4.427e-03, 4.406e-03, 4.385e-03, 4.365e-03, 4.345e-03, 4.325e-03, 4.306e-03, 4.286e-03, 4.267e-03, 4.247e-03, 4.228e-03,
3752 : 4.210e-03, 4.191e-03, 4.172e-03, 4.127e-03, 4.082e-03, 4.039e-03, 3.996e-03, 3.954e-03, 3.913e-03, 3.873e-03, 3.834e-03, 3.796e-03,
3753 : 3.758e-03, 3.685e-03, 3.614e-03, 3.546e-03, 3.481e-03, 3.418e-03, 3.357e-03, 3.299e-03, 3.242e-03, 3.188e-03, 3.135e-03, 3.084e-03,
3754 : 3.034e-03, 2.986e-03, 2.940e-03, 3.542e-05, 2.615e-03, 2.445e-03},
3755 : {0.0, 0.0, 0.0, 9.407e-03, 9.243e-03, 9.084e-03, 8.931e-03, 8.783e-03, 8.640e-03, 8.502e-03, 8.368e-03, 8.238e-03,
3756 : 8.113e-03, 7.991e-03, 7.872e-03, 7.757e-03, 7.712e-03, 7.668e-03, 7.624e-03, 7.580e-03, 7.537e-03, 7.495e-03, 7.453e-03, 7.411e-03,
3757 : 7.370e-03, 7.330e-03, 7.289e-03, 7.250e-03, 7.210e-03, 7.172e-03, 7.152e-03, 7.133e-03, 7.114e-03, 7.095e-03, 7.076e-03, 7.057e-03,
3758 : 7.039e-03, 7.020e-03, 7.002e-03, 6.983e-03, 6.965e-03, 6.947e-03, 6.929e-03, 6.911e-03, 6.893e-03, 6.875e-03, 6.857e-03, 6.840e-03,
3759 : 6.822e-03, 6.805e-03, 6.787e-03, 6.770e-03, 6.753e-03, 6.736e-03, 6.719e-03, 6.702e-03, 6.685e-03, 6.668e-03, 6.651e-03, 6.635e-03,
3760 : 6.618e-03, 6.602e-03, 6.569e-03, 6.537e-03, 6.505e-03, 6.473e-03, 6.442e-03, 6.411e-03, 6.380e-03, 6.350e-03, 6.320e-03, 6.290e-03,
3761 : 6.260e-03, 6.231e-03, 6.202e-03, 6.173e-03, 6.144e-03, 6.116e-03, 6.088e-03, 6.060e-03, 6.033e-03, 6.006e-03, 5.979e-03, 5.952e-03,
3762 : 5.925e-03, 5.899e-03, 5.873e-03, 5.809e-03, 5.746e-03, 5.685e-03, 5.625e-03, 5.566e-03, 5.508e-03, 5.452e-03, 5.397e-03, 5.342e-03,
3763 : 5.289e-03, 5.186e-03, 5.087e-03, 4.992e-03, 4.900e-03, 4.811e-03, 4.726e-03, 4.643e-03, 4.564e-03, 4.487e-03, 4.412e-03, 4.340e-03,
3764 : 4.271e-03, 4.203e-03, 4.138e-03, 3.542e-05, 3.680e-03, 3.442e-03},
3765 : {0.0, 0.0, 0.0, 0.0, 1.284e-02, 1.262e-02, 1.241e-02, 1.220e-02, 1.200e-02, 1.181e-02, 1.162e-02, 1.144e-02,
3766 : 1.127e-02, 1.110e-02, 1.093e-02, 1.078e-02, 1.071e-02, 1.065e-02, 1.059e-02, 1.053e-02, 1.047e-02, 1.041e-02, 1.035e-02, 1.029e-02,
3767 : 1.024e-02, 1.018e-02, 1.012e-02, 1.007e-02, 1.001e-02, 9.961e-03, 9.934e-03, 9.907e-03, 9.881e-03, 9.855e-03, 9.828e-03, 9.802e-03,
3768 : 9.776e-03, 9.750e-03, 9.725e-03, 9.699e-03, 9.674e-03, 9.649e-03, 9.623e-03, 9.598e-03, 9.574e-03, 9.549e-03, 9.524e-03, 9.500e-03,
3769 : 9.475e-03, 9.451e-03, 9.427e-03, 9.403e-03, 9.379e-03, 9.355e-03, 9.332e-03, 9.308e-03, 9.285e-03, 9.261e-03, 9.238e-03, 9.215e-03,
3770 : 9.192e-03, 9.170e-03, 9.124e-03, 9.079e-03, 9.035e-03, 8.991e-03, 8.947e-03, 8.904e-03, 8.862e-03, 8.819e-03, 8.777e-03, 8.736e-03,
3771 : 8.695e-03, 8.654e-03, 8.614e-03, 8.574e-03, 8.534e-03, 8.495e-03, 8.456e-03, 8.417e-03, 8.379e-03, 8.341e-03, 8.304e-03, 8.267e-03,
3772 : 8.230e-03, 8.193e-03, 8.157e-03, 8.068e-03, 7.981e-03, 7.896e-03, 7.812e-03, 7.731e-03, 7.651e-03, 7.572e-03, 7.495e-03, 7.420e-03,
3773 : 7.346e-03, 7.203e-03, 7.065e-03, 6.933e-03, 6.805e-03, 6.682e-03, 6.563e-03, 6.449e-03, 6.338e-03, 6.231e-03, 6.128e-03, 6.028e-03,
3774 : 5.931e-03, 5.838e-03, 5.747e-03, 3.542e-05, 5.111e-03, 4.781e-03},
3775 : {0.0, 0.0, 0.0, 0.0, 0.0, 1.731e-02, 1.702e-02, 1.674e-02, 1.646e-02, 1.620e-02, 1.594e-02, 1.570e-02,
3776 : 1.546e-02, 1.522e-02, 1.500e-02, 1.478e-02, 1.469e-02, 1.461e-02, 1.452e-02, 1.444e-02, 1.436e-02, 1.428e-02, 1.420e-02, 1.412e-02,
3777 : 1.404e-02, 1.396e-02, 1.389e-02, 1.381e-02, 1.374e-02, 1.366e-02, 1.362e-02, 1.359e-02, 1.355e-02, 1.352e-02, 1.348e-02, 1.344e-02,
3778 : 1.341e-02, 1.337e-02, 1.334e-02, 1.330e-02, 1.327e-02, 1.323e-02, 1.320e-02, 1.316e-02, 1.313e-02, 1.310e-02, 1.306e-02, 1.303e-02,
3779 : 1.300e-02, 1.296e-02, 1.293e-02, 1.290e-02, 1.286e-02, 1.283e-02, 1.280e-02, 1.277e-02, 1.273e-02, 1.270e-02, 1.267e-02, 1.264e-02,
3780 : 1.261e-02, 1.258e-02, 1.251e-02, 1.245e-02, 1.239e-02, 1.233e-02, 1.227e-02, 1.221e-02, 1.215e-02, 1.210e-02, 1.204e-02, 1.198e-02,
3781 : 1.192e-02, 1.187e-02, 1.181e-02, 1.176e-02, 1.170e-02, 1.165e-02, 1.160e-02, 1.154e-02, 1.149e-02, 1.144e-02, 1.139e-02, 1.134e-02,
3782 : 1.129e-02, 1.124e-02, 1.119e-02, 1.107e-02, 1.095e-02, 1.083e-02, 1.071e-02, 1.060e-02, 1.049e-02, 1.038e-02, 1.028e-02, 1.018e-02,
3783 : 1.007e-02, 9.879e-03, 9.690e-03, 9.508e-03, 9.333e-03, 9.164e-03, 9.001e-03, 8.844e-03, 8.692e-03, 8.546e-03, 8.404e-03, 8.267e-03,
3784 : 8.134e-03, 8.006e-03, 7.881e-03, 3.542e-05, 7.009e-03, 6.556e-03},
3785 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.307e-02, 2.269e-02, 2.232e-02, 2.196e-02, 2.161e-02, 2.128e-02,
3786 : 2.095e-02, 2.063e-02, 2.033e-02, 2.003e-02, 1.991e-02, 1.980e-02, 1.968e-02, 1.957e-02, 1.946e-02, 1.935e-02, 1.924e-02, 1.913e-02,
3787 : 1.903e-02, 1.892e-02, 1.882e-02, 1.872e-02, 1.862e-02, 1.851e-02, 1.846e-02, 1.842e-02, 1.837e-02, 1.832e-02, 1.827e-02, 1.822e-02,
3788 : 1.817e-02, 1.812e-02, 1.808e-02, 1.803e-02, 1.798e-02, 1.793e-02, 1.789e-02, 1.784e-02, 1.779e-02, 1.775e-02, 1.770e-02, 1.766e-02,
3789 : 1.761e-02, 1.757e-02, 1.752e-02, 1.748e-02, 1.743e-02, 1.739e-02, 1.734e-02, 1.730e-02, 1.726e-02, 1.721e-02, 1.717e-02, 1.713e-02,
3790 : 1.708e-02, 1.704e-02, 1.696e-02, 1.687e-02, 1.679e-02, 1.671e-02, 1.663e-02, 1.655e-02, 1.647e-02, 1.639e-02, 1.631e-02, 1.624e-02,
3791 : 1.616e-02, 1.608e-02, 1.601e-02, 1.593e-02, 1.586e-02, 1.579e-02, 1.572e-02, 1.564e-02, 1.557e-02, 1.550e-02, 1.543e-02, 1.536e-02,
3792 : 1.530e-02, 1.523e-02, 1.516e-02, 1.499e-02, 1.483e-02, 1.467e-02, 1.452e-02, 1.437e-02, 1.422e-02, 1.407e-02, 1.393e-02, 1.379e-02,
3793 : 1.365e-02, 1.339e-02, 1.313e-02, 1.288e-02, 1.265e-02, 1.242e-02, 1.220e-02, 1.198e-02, 1.178e-02, 1.158e-02, 1.139e-02, 1.120e-02,
3794 : 1.102e-02, 1.085e-02, 1.068e-02, 3.542e-05, 9.498e-03, 8.884e-03},
3795 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.042e-02, 2.992e-02, 2.943e-02, 2.897e-02, 2.851e-02,
3796 : 2.808e-02, 2.765e-02, 2.724e-02, 2.684e-02, 2.669e-02, 2.653e-02, 2.638e-02, 2.623e-02, 2.608e-02, 2.593e-02, 2.579e-02, 2.564e-02,
3797 : 2.550e-02, 2.536e-02, 2.522e-02, 2.508e-02, 2.494e-02, 2.481e-02, 2.474e-02, 2.468e-02, 2.461e-02, 2.454e-02, 2.448e-02, 2.441e-02,
3798 : 2.435e-02, 2.428e-02, 2.422e-02, 2.416e-02, 2.409e-02, 2.403e-02, 2.397e-02, 2.391e-02, 2.384e-02, 2.378e-02, 2.372e-02, 2.366e-02,
3799 : 2.360e-02, 2.354e-02, 2.348e-02, 2.342e-02, 2.336e-02, 2.330e-02, 2.324e-02, 2.318e-02, 2.312e-02, 2.306e-02, 2.301e-02, 2.295e-02,
3800 : 2.289e-02, 2.284e-02, 2.272e-02, 2.261e-02, 2.250e-02, 2.239e-02, 2.228e-02, 2.217e-02, 2.207e-02, 2.196e-02, 2.186e-02, 2.175e-02,
3801 : 2.165e-02, 2.155e-02, 2.145e-02, 2.135e-02, 2.125e-02, 2.115e-02, 2.106e-02, 2.096e-02, 2.087e-02, 2.077e-02, 2.068e-02, 2.059e-02,
3802 : 2.049e-02, 2.040e-02, 2.031e-02, 2.009e-02, 1.987e-02, 1.966e-02, 1.945e-02, 1.925e-02, 1.905e-02, 1.885e-02, 1.866e-02, 1.848e-02,
3803 : 1.829e-02, 1.794e-02, 1.759e-02, 1.726e-02, 1.694e-02, 1.664e-02, 1.634e-02, 1.606e-02, 1.578e-02, 1.552e-02, 1.526e-02, 1.501e-02,
3804 : 1.477e-02, 1.453e-02, 1.431e-02, 3.542e-05, 1.273e-02, 1.190e-02},
3805 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.967e-02, 3.903e-02, 3.841e-02, 3.781e-02,
3806 : 3.723e-02, 3.666e-02, 3.612e-02, 3.559e-02, 3.538e-02, 3.518e-02, 3.497e-02, 3.477e-02, 3.457e-02, 3.438e-02, 3.419e-02, 3.399e-02,
3807 : 3.380e-02, 3.362e-02, 3.343e-02, 3.325e-02, 3.307e-02, 3.289e-02, 3.280e-02, 3.271e-02, 3.262e-02, 3.254e-02, 3.245e-02, 3.236e-02,
3808 : 3.228e-02, 3.219e-02, 3.211e-02, 3.202e-02, 3.194e-02, 3.186e-02, 3.177e-02, 3.169e-02, 3.161e-02, 3.153e-02, 3.144e-02, 3.136e-02,
3809 : 3.128e-02, 3.120e-02, 3.112e-02, 3.104e-02, 3.096e-02, 3.089e-02, 3.081e-02, 3.073e-02, 3.065e-02, 3.058e-02, 3.050e-02, 3.042e-02,
3810 : 3.035e-02, 3.027e-02, 3.012e-02, 2.997e-02, 2.983e-02, 2.968e-02, 2.954e-02, 2.939e-02, 2.925e-02, 2.911e-02, 2.897e-02, 2.884e-02,
3811 : 2.870e-02, 2.857e-02, 2.843e-02, 2.830e-02, 2.817e-02, 2.804e-02, 2.791e-02, 2.778e-02, 2.766e-02, 2.753e-02, 2.741e-02, 2.729e-02,
3812 : 2.716e-02, 2.704e-02, 2.692e-02, 2.663e-02, 2.634e-02, 2.606e-02, 2.579e-02, 2.552e-02, 2.525e-02, 2.499e-02, 2.474e-02, 2.449e-02,
3813 : 2.425e-02, 2.377e-02, 2.332e-02, 2.288e-02, 2.246e-02, 2.205e-02, 2.166e-02, 2.128e-02, 2.092e-02, 2.057e-02, 2.022e-02, 1.989e-02,
3814 : 1.957e-02, 1.927e-02, 1.897e-02, 3.542e-05, 1.687e-02, 1.578e-02},
3815 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.124e-02, 5.042e-02, 4.963e-02,
3816 : 4.887e-02, 4.812e-02, 4.741e-02, 4.671e-02, 4.644e-02, 4.617e-02, 4.590e-02, 4.564e-02, 4.537e-02, 4.512e-02, 4.486e-02, 4.461e-02,
3817 : 4.436e-02, 4.412e-02, 4.387e-02, 4.363e-02, 4.340e-02, 4.316e-02, 4.304e-02, 4.293e-02, 4.281e-02, 4.270e-02, 4.258e-02, 4.247e-02,
3818 : 4.236e-02, 4.225e-02, 4.213e-02, 4.202e-02, 4.191e-02, 4.180e-02, 4.169e-02, 4.158e-02, 4.148e-02, 4.137e-02, 4.126e-02, 4.116e-02,
3819 : 4.105e-02, 4.094e-02, 4.084e-02, 4.073e-02, 4.063e-02, 4.053e-02, 4.043e-02, 4.032e-02, 4.022e-02, 4.012e-02, 4.002e-02, 3.992e-02,
3820 : 3.982e-02, 3.972e-02, 3.952e-02, 3.933e-02, 3.914e-02, 3.895e-02, 3.876e-02, 3.857e-02, 3.838e-02, 3.820e-02, 3.802e-02, 3.784e-02,
3821 : 3.766e-02, 3.748e-02, 3.731e-02, 3.713e-02, 3.696e-02, 3.679e-02, 3.662e-02, 3.646e-02, 3.629e-02, 3.613e-02, 3.596e-02, 3.580e-02,
3822 : 3.564e-02, 3.548e-02, 3.533e-02, 3.494e-02, 3.456e-02, 3.419e-02, 3.383e-02, 3.348e-02, 3.313e-02, 3.279e-02, 3.246e-02, 3.213e-02,
3823 : 3.181e-02, 3.119e-02, 3.059e-02, 3.002e-02, 2.947e-02, 2.893e-02, 2.842e-02, 2.792e-02, 2.744e-02, 2.698e-02, 2.653e-02, 2.610e-02,
3824 : 2.568e-02, 2.528e-02, 2.488e-02, 3.542e-05, 2.213e-02, 2.070e-02},
3825 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.556e-02, 6.453e-02,
3826 : 6.353e-02, 6.256e-02, 6.163e-02, 6.072e-02, 6.036e-02, 6.001e-02, 5.966e-02, 5.932e-02, 5.898e-02, 5.864e-02, 5.831e-02, 5.799e-02,
3827 : 5.766e-02, 5.734e-02, 5.702e-02, 5.671e-02, 5.640e-02, 5.610e-02, 5.594e-02, 5.579e-02, 5.564e-02, 5.549e-02, 5.535e-02, 5.520e-02,
3828 : 5.505e-02, 5.490e-02, 5.476e-02, 5.461e-02, 5.447e-02, 5.433e-02, 5.419e-02, 5.404e-02, 5.390e-02, 5.376e-02, 5.362e-02, 5.349e-02,
3829 : 5.335e-02, 5.321e-02, 5.307e-02, 5.294e-02, 5.280e-02, 5.267e-02, 5.254e-02, 5.240e-02, 5.227e-02, 5.214e-02, 5.201e-02, 5.188e-02,
3830 : 5.175e-02, 5.162e-02, 5.136e-02, 5.111e-02, 5.086e-02, 5.061e-02, 5.036e-02, 5.012e-02, 4.988e-02, 4.964e-02, 4.940e-02, 4.917e-02,
3831 : 4.894e-02, 4.871e-02, 4.848e-02, 4.825e-02, 4.803e-02, 4.781e-02, 4.759e-02, 4.737e-02, 4.716e-02, 4.694e-02, 4.673e-02, 4.652e-02,
3832 : 4.632e-02, 4.611e-02, 4.591e-02, 4.540e-02, 4.491e-02, 4.443e-02, 4.396e-02, 4.350e-02, 4.305e-02, 4.261e-02, 4.218e-02, 4.175e-02,
3833 : 4.134e-02, 4.053e-02, 3.975e-02, 3.901e-02, 3.829e-02, 3.759e-02, 3.693e-02, 3.628e-02, 3.566e-02, 3.506e-02, 3.448e-02, 3.391e-02,
3834 : 3.337e-02, 3.284e-02, 3.233e-02, 3.542e-05, 2.875e-02, 2.689e-02},
3835 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.315e-02,
3836 : 8.185e-02, 8.060e-02, 7.939e-02, 7.821e-02, 7.775e-02, 7.730e-02, 7.685e-02, 7.641e-02, 7.597e-02, 7.553e-02, 7.511e-02, 7.468e-02,
3837 : 7.426e-02, 7.385e-02, 7.344e-02, 7.304e-02, 7.264e-02, 7.224e-02, 7.205e-02, 7.185e-02, 7.166e-02, 7.147e-02, 7.128e-02, 7.108e-02,
3838 : 7.090e-02, 7.071e-02, 7.052e-02, 7.033e-02, 7.015e-02, 6.996e-02, 6.978e-02, 6.960e-02, 6.942e-02, 6.923e-02, 6.906e-02, 6.888e-02,
3839 : 6.870e-02, 6.852e-02, 6.835e-02, 6.817e-02, 6.800e-02, 6.782e-02, 6.765e-02, 6.748e-02, 6.731e-02, 6.714e-02, 6.697e-02, 6.680e-02,
3840 : 6.664e-02, 6.647e-02, 6.614e-02, 6.581e-02, 6.549e-02, 6.517e-02, 6.485e-02, 6.454e-02, 6.423e-02, 6.392e-02, 6.361e-02, 6.331e-02,
3841 : 6.301e-02, 6.272e-02, 6.242e-02, 6.213e-02, 6.185e-02, 6.156e-02, 6.128e-02, 6.100e-02, 6.072e-02, 6.044e-02, 6.017e-02, 5.990e-02,
3842 : 5.963e-02, 5.937e-02, 5.911e-02, 5.846e-02, 5.783e-02, 5.721e-02, 5.660e-02, 5.601e-02, 5.543e-02, 5.486e-02, 5.430e-02, 5.375e-02,
3843 : 5.322e-02, 5.218e-02, 5.118e-02, 5.022e-02, 4.929e-02, 4.840e-02, 4.754e-02, 4.671e-02, 4.591e-02, 4.513e-02, 4.438e-02, 4.366e-02,
3844 : 4.296e-02, 4.228e-02, 4.162e-02, 3.542e-05, 3.701e-02, 3.462e-02},
3845 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3846 : 0.10460, 0.10290, 0.10140, 9.988e-02, 9.929e-02, 9.871e-02, 9.813e-02, 9.757e-02, 9.700e-02, 9.645e-02, 9.590e-02, 9.536e-02,
3847 : 9.482e-02, 9.430e-02, 9.377e-02, 9.325e-02, 9.274e-02, 9.224e-02, 9.199e-02, 9.174e-02, 9.149e-02, 9.124e-02, 9.100e-02, 9.075e-02,
3848 : 9.051e-02, 9.027e-02, 9.003e-02, 8.979e-02, 8.955e-02, 8.932e-02, 8.908e-02, 8.885e-02, 8.862e-02, 8.839e-02, 8.816e-02, 8.793e-02,
3849 : 8.770e-02, 8.747e-02, 8.725e-02, 8.703e-02, 8.680e-02, 8.658e-02, 8.636e-02, 8.614e-02, 8.592e-02, 8.571e-02, 8.549e-02, 8.528e-02,
3850 : 8.506e-02, 8.485e-02, 8.443e-02, 8.401e-02, 8.360e-02, 8.319e-02, 8.278e-02, 8.238e-02, 8.198e-02, 8.159e-02, 8.120e-02, 8.081e-02,
3851 : 8.043e-02, 8.005e-02, 7.968e-02, 7.931e-02, 7.894e-02, 7.857e-02, 7.821e-02, 7.786e-02, 7.750e-02, 7.715e-02, 7.680e-02, 7.646e-02,
3852 : 7.611e-02, 7.578e-02, 7.544e-02, 7.461e-02, 7.380e-02, 7.301e-02, 7.224e-02, 7.148e-02, 7.074e-02, 7.001e-02, 6.930e-02, 6.860e-02,
3853 : 6.792e-02, 6.659e-02, 6.532e-02, 6.409e-02, 6.291e-02, 6.177e-02, 6.067e-02, 5.961e-02, 5.859e-02, 5.760e-02, 5.664e-02, 5.572e-02,
3854 : 5.482e-02, 5.395e-02, 5.312e-02, 3.542e-05, 4.724e-02, 4.418e-02},
3855 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3856 : 0.0, 0.13040, 0.12840, 0.12650, 0.12580, 0.125, 0.12430, 0.12360, 0.12290, 0.12220, 0.12150, 0.12080,
3857 : 0.12010, 0.11940, 0.11870, 0.11810, 0.11740, 0.11680, 0.11650, 0.11620, 0.11580, 0.11550, 0.11520, 0.11490,
3858 : 0.11460, 0.11430, 0.114, 0.11370, 0.11340, 0.11310, 0.11280, 0.11250, 0.11220, 0.11190, 0.11160, 0.11130,
3859 : 0.111, 0.11080, 0.11050, 0.11020, 0.10990, 0.10960, 0.10930, 0.10910, 0.10880, 0.10850, 0.10820, 0.108,
3860 : 0.10770, 0.10740, 0.10690, 0.10640, 0.10580, 0.10530, 0.10480, 0.10430, 0.10380, 0.10330, 0.10280, 0.10230,
3861 : 0.10180, 0.10130, 0.10090, 0.10040, 9.993e-02, 9.946e-02, 9.901e-02, 9.855e-02, 9.810e-02, 9.766e-02, 9.722e-02, 9.678e-02,
3862 : 9.635e-02, 9.592e-02, 9.549e-02, 9.444e-02, 9.342e-02, 9.242e-02, 9.144e-02, 9.048e-02, 8.954e-02, 8.862e-02, 8.771e-02, 8.683e-02,
3863 : 8.597e-02, 8.429e-02, 8.267e-02, 8.112e-02, 7.962e-02, 7.818e-02, 7.678e-02, 7.544e-02, 7.415e-02, 7.289e-02, 7.168e-02, 7.051e-02,
3864 : 6.938e-02, 6.828e-02, 6.722e-02, 3.542e-05, 5.978e-02, 5.591e-02},
3865 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3866 : 0.0, 0.0, 0.16150, 0.159, 0.15810, 0.15710, 0.15620, 0.15530, 0.15440, 0.15350, 0.15260, 0.15180,
3867 : 0.15090, 0.15, 0.14920, 0.14840, 0.14760, 0.14670, 0.14630, 0.14590, 0.14550, 0.14520, 0.14480, 0.14440,
3868 : 0.144, 0.14360, 0.14320, 0.14280, 0.14250, 0.14210, 0.14170, 0.14130, 0.141, 0.14060, 0.14020, 0.13990,
3869 : 0.13950, 0.13910, 0.13880, 0.13840, 0.13810, 0.13770, 0.13730, 0.137, 0.13660, 0.13630, 0.136, 0.13560,
3870 : 0.13530, 0.13490, 0.13430, 0.13360, 0.13290, 0.13230, 0.13160, 0.131, 0.13040, 0.12970, 0.12910, 0.12850,
3871 : 0.12790, 0.12730, 0.12670, 0.12610, 0.12550, 0.12490, 0.12430, 0.12380, 0.12320, 0.12260, 0.12210, 0.12150,
3872 : 0.121, 0.12050, 0.11990, 0.11860, 0.11730, 0.11610, 0.11480, 0.11360, 0.11240, 0.11130, 0.11010, 0.109,
3873 : 0.10790, 0.10580, 0.10380, 0.10190, 9.997e-02, 9.816e-02, 9.641e-02, 9.473e-02, 9.310e-02, 9.152e-02, 9.000e-02, 8.853e-02,
3874 : 8.711e-02, 8.573e-02, 8.440e-02, 3.542e-05, 7.505e-02, 7.019e-02},
3875 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3876 : 0.0, 0.0, 0.19840, 0.19720, 0.19610, 0.19490, 0.19370, 0.19260, 0.19150, 0.19040, 0.18930, 0.18820, 0.18720,
3877 : 0.18610, 0.18510, 0.184, 0.183, 0.18250, 0.182, 0.18150, 0.181, 0.18050, 0.18, 0.17960, 0.17910, 0.17860,
3878 : 0.17810, 0.17760, 0.17720, 0.17670, 0.17620, 0.17580, 0.17530, 0.17480, 0.17440, 0.17390, 0.17350, 0.173, 0.17260,
3879 : 0.17210, 0.17170, 0.17120, 0.17080, 0.17040, 0.16990, 0.16950, 0.16910, 0.16870, 0.16820, 0.16740, 0.16660, 0.16570,
3880 : 0.16490, 0.16410, 0.16330, 0.16250, 0.16170, 0.16090, 0.16020, 0.15940, 0.15870, 0.15790, 0.15720, 0.15640, 0.15570,
3881 : 0.155, 0.15430, 0.15360, 0.15290, 0.15220, 0.15150, 0.15080, 0.15010, 0.14950, 0.14780, 0.14620, 0.14460, 0.14310,
3882 : 0.14160, 0.14010, 0.13870, 0.13730, 0.13590, 0.13450, 0.13190, 0.12940, 0.12690, 0.12460, 0.12230, 0.12010, 0.118,
3883 : 0.116, 0.11410, 0.11220, 0.11030, 0.10850, 0.10680, 0.10520, 3.542e-05, 9.352e-02, 8.746e-02},
3884 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3885 : 0.0, 0.21510, 0.21380, 0.21250, 0.21130, 0.21, 0.20880, 0.20760, 0.20640, 0.20520, 0.204, 0.20290, 0.20180, 0.20060, 0.19950,
3886 : 0.199, 0.19840, 0.19790, 0.19730, 0.19680, 0.19630, 0.19570, 0.19520, 0.19470, 0.19420, 0.19360, 0.19310, 0.19260, 0.19210, 0.19160,
3887 : 0.19110, 0.19060, 0.19010, 0.18960, 0.18910, 0.18860, 0.18810, 0.18760, 0.18720, 0.18670, 0.18620, 0.18570, 0.18520, 0.18480, 0.18430,
3888 : 0.18380, 0.18340, 0.18250, 0.18150, 0.18060, 0.17980, 0.17890, 0.178, 0.17710, 0.17630, 0.17540, 0.17460, 0.17380, 0.17290, 0.17210,
3889 : 0.17130, 0.17050, 0.16970, 0.16890, 0.16820, 0.16740, 0.16660, 0.16590, 0.16510, 0.16440, 0.16360, 0.16290, 0.16110, 0.15940, 0.15770,
3890 : 0.156, 0.15430, 0.15270, 0.15110, 0.14960, 0.14810, 0.14660, 0.14370, 0.141, 0.13830, 0.13580, 0.13330, 0.13090, 0.12860, 0.12640,
3891 : 0.12430, 0.12220, 0.12020, 0.11830, 0.11640, 0.11460, 3.542e-05, 0.10190, 9.531e-02},
3892 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3893 : 0.0, 0.0, 0.23290, 0.23150, 0.23010, 0.22870, 0.22740, 0.22610, 0.22480, 0.22350, 0.22220, 0.221, 0.21970, 0.21850, 0.21730,
3894 : 0.21670, 0.21610, 0.21550, 0.21490, 0.21430, 0.21370, 0.21310, 0.21260, 0.212, 0.21140, 0.21090, 0.21030, 0.20970, 0.20920, 0.20860,
3895 : 0.20810, 0.20750, 0.207, 0.20640, 0.20590, 0.20540, 0.20480, 0.20430, 0.20380, 0.20330, 0.20270, 0.20220, 0.20170, 0.20120, 0.20070,
3896 : 0.20020, 0.19970, 0.19870, 0.19770, 0.19670, 0.19570, 0.19480, 0.19380, 0.19290, 0.19190, 0.191, 0.19010, 0.18920, 0.18830, 0.18740,
3897 : 0.18650, 0.18560, 0.18480, 0.18390, 0.18310, 0.18220, 0.18140, 0.18060, 0.17980, 0.179, 0.17820, 0.17740, 0.17540, 0.17350, 0.17160,
3898 : 0.16980, 0.168, 0.16630, 0.16450, 0.16290, 0.16120, 0.15960, 0.15650, 0.15350, 0.15060, 0.14780, 0.14510, 0.14250, 0.14, 0.13760,
3899 : 0.13530, 0.133, 0.13090, 0.12880, 0.12670, 0.12480, 3.542e-05, 0.11090, 0.1037},
3900 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3901 : 0.0, 0.0, 0.0, 0.25180, 0.25030, 0.24890, 0.24740, 0.246, 0.24450, 0.24310, 0.24170, 0.24040, 0.239, 0.23770, 0.23640,
3902 : 0.23570, 0.23510, 0.23440, 0.23380, 0.23310, 0.23250, 0.23190, 0.23120, 0.23060, 0.23, 0.22940, 0.22880, 0.22810, 0.22750, 0.22690,
3903 : 0.22630, 0.22570, 0.22510, 0.22460, 0.224, 0.22340, 0.22280, 0.22220, 0.22160, 0.22110, 0.22050, 0.21990, 0.21940, 0.21880, 0.21830,
3904 : 0.21770, 0.21720, 0.21610, 0.215, 0.21390, 0.21290, 0.21180, 0.21080, 0.20970, 0.20870, 0.20770, 0.20670, 0.20570, 0.20480, 0.20380,
3905 : 0.20280, 0.20190, 0.201, 0.2, 0.19910, 0.19820, 0.19730, 0.19640, 0.19550, 0.19460, 0.19370, 0.19290, 0.19080, 0.18870, 0.18660,
3906 : 0.18470, 0.18270, 0.18080, 0.17890, 0.17710, 0.17530, 0.17360, 0.17020, 0.16690, 0.16370, 0.16070, 0.15780, 0.155, 0.15230, 0.14960,
3907 : 0.14710, 0.14470, 0.14230, 0.14, 0.13780, 0.13560, 3.542e-05, 0.12060, 0.1128},
3908 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3909 : 0.0, 0.0, 0.0, 0.0, 0.27210, 0.27050, 0.26890, 0.26730, 0.26580, 0.26420, 0.26270, 0.26120, 0.25970, 0.25830, 0.25680,
3910 : 0.25610, 0.25540, 0.25470, 0.254, 0.25330, 0.25260, 0.25190, 0.25130, 0.25060, 0.24990, 0.24920, 0.24860, 0.24790, 0.24720, 0.24660,
3911 : 0.24590, 0.24530, 0.24460, 0.244, 0.24330, 0.24270, 0.24210, 0.24140, 0.24080, 0.24020, 0.23960, 0.239, 0.23840, 0.23770, 0.23710,
3912 : 0.23650, 0.23590, 0.23480, 0.23360, 0.23240, 0.23130, 0.23010, 0.229, 0.22790, 0.22680, 0.22570, 0.22460, 0.22350, 0.22250, 0.22140,
3913 : 0.22040, 0.21930, 0.21830, 0.21730, 0.21630, 0.21530, 0.21430, 0.21330, 0.21240, 0.21140, 0.21050, 0.20950, 0.20720, 0.205, 0.20270,
3914 : 0.20060, 0.19850, 0.19640, 0.19440, 0.19240, 0.19040, 0.18850, 0.18480, 0.18130, 0.17790, 0.17460, 0.17140, 0.16830, 0.16540, 0.16250,
3915 : 0.15980, 0.15710, 0.15460, 0.15210, 0.14970, 0.14730, 3.542e-05, 0.131, 0.1225},
3916 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3917 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.29370, 0.29190, 0.29020, 0.28850, 0.28690, 0.28520, 0.28360, 0.282, 0.28040, 0.27880,
3918 : 0.278, 0.27730, 0.27650, 0.27570, 0.275, 0.27420, 0.27350, 0.27270, 0.272, 0.27130, 0.27050, 0.26980, 0.26910, 0.26840, 0.26760,
3919 : 0.26690, 0.26620, 0.26550, 0.26480, 0.26410, 0.26340, 0.26280, 0.26210, 0.26140, 0.26070, 0.26, 0.25940, 0.25870, 0.258, 0.25740,
3920 : 0.25670, 0.25610, 0.25480, 0.25350, 0.25220, 0.251, 0.24980, 0.24850, 0.24730, 0.24610, 0.24490, 0.24370, 0.24260, 0.24140, 0.24030,
3921 : 0.23910, 0.238, 0.23690, 0.23580, 0.23470, 0.23360, 0.23260, 0.23150, 0.23050, 0.22940, 0.22840, 0.22740, 0.22490, 0.22240, 0.22,
3922 : 0.21770, 0.21540, 0.21310, 0.21090, 0.20880, 0.20660, 0.20460, 0.20060, 0.19670, 0.193, 0.18940, 0.186, 0.18270, 0.17950, 0.17640,
3923 : 0.17340, 0.17050, 0.16770, 0.165, 0.16240, 0.15990, 3.542e-05, 0.14210, 0.1329},
3924 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3925 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.31660, 0.31480, 0.31290, 0.31110, 0.30930, 0.30760, 0.30580, 0.30410, 0.30240,
3926 : 0.30150, 0.30070, 0.29990, 0.299, 0.29820, 0.29740, 0.29660, 0.29580, 0.295, 0.29420, 0.29340, 0.29260, 0.29180, 0.291, 0.29020,
3927 : 0.28940, 0.28870, 0.28790, 0.28720, 0.28640, 0.28560, 0.28490, 0.28420, 0.28340, 0.28270, 0.282, 0.28120, 0.28050, 0.27980, 0.27910,
3928 : 0.27840, 0.27760, 0.27620, 0.27490, 0.27350, 0.27210, 0.27080, 0.26940, 0.26810, 0.26680, 0.26550, 0.26430, 0.263, 0.26170, 0.26050,
3929 : 0.25930, 0.258, 0.25680, 0.25560, 0.25450, 0.25330, 0.25210, 0.251, 0.24980, 0.24870, 0.24760, 0.24650, 0.24380, 0.24110, 0.23850,
3930 : 0.23590, 0.23350, 0.231, 0.22860, 0.22630, 0.224, 0.22170, 0.21740, 0.21320, 0.20920, 0.20530, 0.20160, 0.198, 0.19450, 0.19120,
3931 : 0.18790, 0.18480, 0.18180, 0.17880, 0.176, 0.17330, 3.542e-05, 0.154, 0.1441},
3932 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3933 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34110, 0.33910, 0.33710, 0.33520, 0.33320, 0.33130, 0.32940, 0.32760,
3934 : 0.32670, 0.32580, 0.32490, 0.324, 0.32310, 0.32220, 0.32130, 0.32040, 0.31950, 0.31870, 0.31780, 0.31690, 0.31610, 0.31520, 0.31440,
3935 : 0.31350, 0.31270, 0.31190, 0.31110, 0.31020, 0.30940, 0.30860, 0.30780, 0.307, 0.30620, 0.30540, 0.30460, 0.30380, 0.30310, 0.30230,
3936 : 0.30150, 0.30070, 0.29920, 0.29770, 0.29620, 0.29470, 0.29330, 0.29180, 0.29040, 0.289, 0.28760, 0.28620, 0.28480, 0.28350, 0.28210,
3937 : 0.28080, 0.27950, 0.27820, 0.27690, 0.27560, 0.27430, 0.27310, 0.27180, 0.27060, 0.26930, 0.26810, 0.26690, 0.264, 0.26110, 0.25830,
3938 : 0.25550, 0.25280, 0.25020, 0.24760, 0.245, 0.24260, 0.24010, 0.23540, 0.23090, 0.22650, 0.22230, 0.21830, 0.21440, 0.21060, 0.207,
3939 : 0.20350, 0.20010, 0.19680, 0.19360, 0.19060, 0.18760, 3.542e-05, 0.16680, 0.156},
3940 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3941 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.36710, 0.36490, 0.36280, 0.36070, 0.35860, 0.35660, 0.35460,
3942 : 0.35360, 0.35260, 0.35160, 0.35060, 0.34960, 0.34870, 0.34770, 0.34680, 0.34580, 0.34490, 0.34390, 0.343, 0.34210, 0.34110, 0.34020,
3943 : 0.33930, 0.33840, 0.33750, 0.33660, 0.33570, 0.33480, 0.334, 0.33310, 0.33220, 0.33130, 0.33050, 0.32960, 0.32880, 0.32790, 0.32710,
3944 : 0.32630, 0.32540, 0.32380, 0.32210, 0.32050, 0.31890, 0.31730, 0.31580, 0.31420, 0.31270, 0.31120, 0.30970, 0.30820, 0.30670, 0.30520,
3945 : 0.30380, 0.30240, 0.30090, 0.29950, 0.29820, 0.29680, 0.29540, 0.29410, 0.29270, 0.29140, 0.29010, 0.28880, 0.28560, 0.28250, 0.27940,
3946 : 0.27640, 0.27350, 0.27060, 0.26780, 0.26510, 0.26240, 0.25980, 0.25460, 0.24970, 0.245, 0.24050, 0.23610, 0.23190, 0.22780, 0.22390,
3947 : 0.22010, 0.21640, 0.21290, 0.20940, 0.20610, 0.20290, 3.542e-05, 0.18040, 0.1687},
3948 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3949 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.39460, 0.39230, 0.39010, 0.38780, 0.38560, 0.38340,
3950 : 0.38230, 0.38120, 0.38020, 0.37910, 0.37810, 0.377, 0.376, 0.37490, 0.37390, 0.37290, 0.37190, 0.37080, 0.36980, 0.36880, 0.36780,
3951 : 0.36690, 0.36590, 0.36490, 0.36390, 0.363, 0.362, 0.361, 0.36010, 0.35920, 0.35820, 0.35730, 0.35640, 0.35540, 0.35450, 0.35360,
3952 : 0.35270, 0.35180, 0.35, 0.34820, 0.34650, 0.34470, 0.343, 0.34130, 0.33970, 0.338, 0.33640, 0.33470, 0.33310, 0.33150, 0.32990,
3953 : 0.32840, 0.32680, 0.32530, 0.32380, 0.32230, 0.32080, 0.31930, 0.31780, 0.31640, 0.315, 0.31350, 0.31210, 0.30870, 0.30530, 0.302,
3954 : 0.29870, 0.29560, 0.29250, 0.28940, 0.28650, 0.28360, 0.28070, 0.27520, 0.26990, 0.26480, 0.25990, 0.25510, 0.25060, 0.24620, 0.24190,
3955 : 0.23780, 0.23390, 0.23, 0.22630, 0.22270, 0.21930, 3.542e-05, 0.19490, 0.1823},
3956 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3957 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.42390, 0.42140, 0.419, 0.41660, 0.41420,
3958 : 0.413, 0.41190, 0.41070, 0.40960, 0.40840, 0.40730, 0.40610, 0.405, 0.40390, 0.40280, 0.40170, 0.40060, 0.39950, 0.39840, 0.39730,
3959 : 0.39630, 0.39520, 0.39410, 0.39310, 0.392, 0.391, 0.39, 0.38890, 0.38790, 0.38690, 0.38590, 0.38490, 0.38390, 0.38290, 0.38190,
3960 : 0.38090, 0.37990, 0.378, 0.37610, 0.37420, 0.37230, 0.37050, 0.36860, 0.36680, 0.365, 0.36320, 0.36150, 0.35970, 0.358, 0.35630,
3961 : 0.35460, 0.35290, 0.35130, 0.34960, 0.348, 0.34640, 0.34480, 0.34320, 0.34160, 0.34010, 0.33860, 0.337, 0.33330, 0.32960, 0.32610,
3962 : 0.32260, 0.31910, 0.31580, 0.31250, 0.30930, 0.30620, 0.30310, 0.29710, 0.29140, 0.28590, 0.28060, 0.27540, 0.27050, 0.26580, 0.26120,
3963 : 0.25680, 0.25250, 0.24830, 0.24430, 0.24050, 0.23670, 3.542e-05, 0.21040, 0.1968},
3964 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3965 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45490, 0.45230, 0.44970, 0.44710,
3966 : 0.44580, 0.44450, 0.44330, 0.442, 0.44080, 0.43960, 0.43830, 0.43710, 0.43590, 0.43470, 0.43350, 0.43230, 0.43110, 0.43, 0.42880,
3967 : 0.42760, 0.42650, 0.42530, 0.42420, 0.42310, 0.42190, 0.42080, 0.41970, 0.41860, 0.41750, 0.41640, 0.41530, 0.41420, 0.41320, 0.41210,
3968 : 0.411, 0.41, 0.40790, 0.40580, 0.40380, 0.40170, 0.39970, 0.39770, 0.39580, 0.39380, 0.39190, 0.39, 0.38810, 0.38620, 0.38440,
3969 : 0.38260, 0.38080, 0.379, 0.37720, 0.37540, 0.37370, 0.372, 0.37030, 0.36860, 0.36690, 0.36520, 0.36360, 0.35950, 0.35560, 0.35170,
3970 : 0.34790, 0.34420, 0.34060, 0.33710, 0.33360, 0.33020, 0.32690, 0.32050, 0.31430, 0.30830, 0.30260, 0.29710, 0.29180, 0.28660, 0.28170,
3971 : 0.27690, 0.27230, 0.26780, 0.26350, 0.25930, 0.25530, 3.542e-05, 0.22690, 0.2122},
3972 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3973 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48780, 0.48490, 0.48210,
3974 : 0.48080, 0.47940, 0.478, 0.47670, 0.47530, 0.474, 0.47270, 0.47130, 0.47, 0.46870, 0.46740, 0.46620, 0.46490, 0.46360, 0.46230,
3975 : 0.46110, 0.45980, 0.45860, 0.45740, 0.45610, 0.45490, 0.45370, 0.45250, 0.45130, 0.45010, 0.44890, 0.44780, 0.44660, 0.44540, 0.44430,
3976 : 0.44310, 0.442, 0.43970, 0.43750, 0.43530, 0.43310, 0.43090, 0.42870, 0.42660, 0.42450, 0.42240, 0.42040, 0.41830, 0.41630, 0.41430,
3977 : 0.41240, 0.41040, 0.40850, 0.40650, 0.40460, 0.40280, 0.40090, 0.39910, 0.39720, 0.39540, 0.39360, 0.39190, 0.38750, 0.38320, 0.37910,
3978 : 0.375, 0.371, 0.36710, 0.36330, 0.35950, 0.35590, 0.35230, 0.34530, 0.33870, 0.33230, 0.32610, 0.32010, 0.31440, 0.30890, 0.30350,
3979 : 0.29840, 0.29340, 0.28860, 0.28390, 0.27940, 0.27510, 3.542e-05, 0.24450, 0.2287},
3980 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3981 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.52250, 0.51950,
3982 : 0.518, 0.51650, 0.51510, 0.51360, 0.51210, 0.51070, 0.50920, 0.50780, 0.50640, 0.505, 0.50360, 0.50220, 0.50080, 0.49940, 0.49810,
3983 : 0.49670, 0.49540, 0.494, 0.49270, 0.49140, 0.49010, 0.48870, 0.48740, 0.48610, 0.48490, 0.48360, 0.48230, 0.481, 0.47980, 0.47850,
3984 : 0.47730, 0.47610, 0.47360, 0.47120, 0.46880, 0.46640, 0.46410, 0.46180, 0.45950, 0.45720, 0.455, 0.45270, 0.45050, 0.44840, 0.44620,
3985 : 0.44410, 0.442, 0.43990, 0.43780, 0.43580, 0.43370, 0.43170, 0.42970, 0.42780, 0.42580, 0.42390, 0.422, 0.41730, 0.41270, 0.40820,
3986 : 0.40380, 0.39950, 0.39530, 0.39110, 0.38710, 0.38320, 0.37930, 0.37180, 0.36460, 0.35770, 0.35110, 0.34460, 0.33850, 0.33250, 0.32680,
3987 : 0.32120, 0.31590, 0.31070, 0.30570, 0.30080, 0.29610, 3.542e-05, 0.26320, 0.2461},
3988 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3989 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.55930,
3990 : 0.55770, 0.55610, 0.55450, 0.55290, 0.55130, 0.54980, 0.54820, 0.54670, 0.54510, 0.54360, 0.54210, 0.54060, 0.53910, 0.53760, 0.53610,
3991 : 0.53460, 0.53320, 0.53170, 0.53030, 0.52890, 0.52740, 0.526, 0.52460, 0.52320, 0.52180, 0.52050, 0.51910, 0.51770, 0.51640, 0.515,
3992 : 0.51370, 0.51230, 0.50970, 0.50710, 0.50450, 0.50190, 0.49940, 0.49690, 0.49440, 0.492, 0.48960, 0.48720, 0.48480, 0.48240, 0.48010,
3993 : 0.47780, 0.47550, 0.47330, 0.47110, 0.46880, 0.46670, 0.46450, 0.46230, 0.46020, 0.45810, 0.456, 0.454, 0.44890, 0.44390, 0.43910,
3994 : 0.43440, 0.42970, 0.42520, 0.42080, 0.41640, 0.41220, 0.408, 0.4, 0.39220, 0.38480, 0.37760, 0.37070, 0.36410, 0.35760, 0.35150,
3995 : 0.34550, 0.33970, 0.33410, 0.32870, 0.32350, 0.31850, 3.542e-05, 0.28310, 0.2647},
3996 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3997 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
3998 : 0.57850, 0.57680, 0.57510, 0.57350, 0.57180, 0.57020, 0.56860, 0.567, 0.56540, 0.56380, 0.56220, 0.56070, 0.55910, 0.55760, 0.556,
3999 : 0.55450, 0.553, 0.55150, 0.55, 0.54850, 0.547, 0.54550, 0.54410, 0.54260, 0.54120, 0.53980, 0.53830, 0.53690, 0.53550, 0.53410,
4000 : 0.53270, 0.53130, 0.52860, 0.52590, 0.52320, 0.52050, 0.51790, 0.51530, 0.51270, 0.51020, 0.50770, 0.50520, 0.50270, 0.50030, 0.49790,
4001 : 0.49550, 0.49310, 0.49080, 0.48850, 0.48620, 0.48390, 0.48160, 0.47940, 0.47720, 0.475, 0.47290, 0.47070, 0.46550, 0.46030, 0.45530,
4002 : 0.45040, 0.44560, 0.44090, 0.43630, 0.43180, 0.42740, 0.423, 0.41470, 0.40660, 0.39890, 0.39150, 0.38430, 0.37740, 0.37080, 0.36440,
4003 : 0.35820, 0.35220, 0.34640, 0.34080, 0.33540, 0.33020, 3.542e-05, 0.29350, 0.2744},
4004 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4005 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4006 : 0.0, 0.59820, 0.59640, 0.59470, 0.593, 0.59130, 0.58960, 0.588, 0.58630, 0.58470, 0.583, 0.58140, 0.57980, 0.57820, 0.57660,
4007 : 0.575, 0.57340, 0.57180, 0.57030, 0.56870, 0.56720, 0.56570, 0.56420, 0.56270, 0.56120, 0.55970, 0.55820, 0.55670, 0.55520, 0.55380,
4008 : 0.55230, 0.55090, 0.548, 0.54520, 0.54240, 0.53970, 0.53690, 0.53420, 0.53160, 0.52890, 0.52630, 0.52370, 0.52120, 0.51870, 0.51620,
4009 : 0.51370, 0.51120, 0.50880, 0.50640, 0.504, 0.50170, 0.49930, 0.497, 0.49470, 0.49250, 0.49020, 0.488, 0.48250, 0.47720, 0.472,
4010 : 0.46690, 0.46190, 0.457, 0.45220, 0.44760, 0.443, 0.43850, 0.42980, 0.42150, 0.41350, 0.40580, 0.39840, 0.39120, 0.38430, 0.37770,
4011 : 0.37130, 0.36510, 0.35910, 0.35330, 0.34760, 0.34220, 3.542e-05, 0.30420, 0.2844},
4012 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4013 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4014 : 0.0, 0.0, 0.61840, 0.61660, 0.61480, 0.61310, 0.61130, 0.60960, 0.60790, 0.60620, 0.60450, 0.60280, 0.60110, 0.59940, 0.59780,
4015 : 0.59610, 0.59450, 0.59280, 0.59120, 0.58960, 0.588, 0.58640, 0.58490, 0.58330, 0.58170, 0.58020, 0.57860, 0.57710, 0.57560, 0.57410,
4016 : 0.57260, 0.57110, 0.56810, 0.56520, 0.56230, 0.55940, 0.55660, 0.55380, 0.551, 0.54830, 0.54560, 0.54290, 0.54020, 0.53760, 0.535,
4017 : 0.53240, 0.52990, 0.52740, 0.52490, 0.52240, 0.52, 0.51750, 0.51510, 0.51280, 0.51040, 0.50810, 0.50580, 0.50010, 0.49460, 0.48920,
4018 : 0.48390, 0.47870, 0.47360, 0.46870, 0.46390, 0.45910, 0.45450, 0.44550, 0.43680, 0.42850, 0.42050, 0.41290, 0.40540, 0.39830, 0.39140,
4019 : 0.38470, 0.37830, 0.37210, 0.36610, 0.36030, 0.35460, 3.542e-05, 0.31520, 0.2948},
4020 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4021 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4022 : 0.0, 0.0, 0.0, 0.63920, 0.63740, 0.63550, 0.63370, 0.63190, 0.63010, 0.62830, 0.62660, 0.62480, 0.623, 0.62130, 0.61960,
4023 : 0.61790, 0.61620, 0.61450, 0.61280, 0.61110, 0.60950, 0.60780, 0.60620, 0.60460, 0.60290, 0.60130, 0.59970, 0.59810, 0.59660, 0.595,
4024 : 0.59340, 0.59190, 0.58880, 0.58580, 0.58270, 0.57980, 0.57680, 0.57390, 0.571, 0.56820, 0.56540, 0.56260, 0.55990, 0.55710, 0.55440,
4025 : 0.55180, 0.54910, 0.54650, 0.54390, 0.54140, 0.53880, 0.53630, 0.53380, 0.53140, 0.52890, 0.52650, 0.52410, 0.51820, 0.51250, 0.50690,
4026 : 0.50140, 0.496, 0.49080, 0.48570, 0.48060, 0.47570, 0.47090, 0.46160, 0.45260, 0.444, 0.43570, 0.42780, 0.42010, 0.41270, 0.40550,
4027 : 0.39860, 0.392, 0.38550, 0.37930, 0.37330, 0.36740, 3.542e-05, 0.32660, 0.3054},
4028 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4029 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4030 : 0.0, 0.0, 0.0, 0.0, 0.66060, 0.65870, 0.65680, 0.65490, 0.653, 0.65120, 0.64930, 0.64750, 0.64570, 0.64390, 0.64210,
4031 : 0.64030, 0.63850, 0.63680, 0.635, 0.63330, 0.63160, 0.62990, 0.62820, 0.62650, 0.62480, 0.62310, 0.62150, 0.61980, 0.61820, 0.61650,
4032 : 0.61490, 0.61330, 0.61010, 0.607, 0.60380, 0.60070, 0.59770, 0.59470, 0.59170, 0.58870, 0.58580, 0.58290, 0.58010, 0.57720, 0.57440,
4033 : 0.57170, 0.56890, 0.56620, 0.56350, 0.56090, 0.55820, 0.55560, 0.55310, 0.55050, 0.548, 0.54550, 0.543, 0.53690, 0.53090, 0.52510,
4034 : 0.51940, 0.51390, 0.50840, 0.50310, 0.49790, 0.49280, 0.48780, 0.47820, 0.46890, 0.46, 0.45140, 0.44310, 0.43510, 0.42750, 0.42010,
4035 : 0.41290, 0.406, 0.39930, 0.39290, 0.38660, 0.38060, 3.542e-05, 0.33830, 0.3163},
4036 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4037 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4038 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.68250, 0.68050, 0.67860, 0.67660, 0.67470, 0.67280, 0.67090, 0.669, 0.66710, 0.66530,
4039 : 0.66340, 0.66160, 0.65980, 0.658, 0.65620, 0.65440, 0.65260, 0.65080, 0.64910, 0.64730, 0.64560, 0.64390, 0.64210, 0.64040, 0.63870,
4040 : 0.63710, 0.63540, 0.63210, 0.62880, 0.62550, 0.62230, 0.61920, 0.616, 0.61290, 0.60990, 0.60690, 0.60390, 0.60090, 0.598, 0.59510,
4041 : 0.59220, 0.58930, 0.58650, 0.58370, 0.581, 0.57830, 0.57560, 0.57290, 0.57020, 0.56760, 0.565, 0.56240, 0.55610, 0.54990, 0.54390,
4042 : 0.538, 0.53230, 0.52660, 0.52110, 0.51570, 0.51040, 0.50530, 0.49520, 0.48560, 0.47640, 0.46750, 0.45890, 0.45070, 0.44270, 0.435,
4043 : 0.42760, 0.42050, 0.41360, 0.40690, 0.40040, 0.39410, 3.542e-05, 0.35030, 0.3276},
4044 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4045 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4046 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.705, 0.703, 0.701, 0.699, 0.697, 0.695, 0.69310, 0.69110, 0.68920,
4047 : 0.68730, 0.68530, 0.68350, 0.68160, 0.67970, 0.67780, 0.676, 0.67420, 0.67230, 0.67050, 0.66870, 0.66690, 0.66510, 0.66340, 0.66160,
4048 : 0.65990, 0.65810, 0.65470, 0.65130, 0.64790, 0.64460, 0.64130, 0.63810, 0.63480, 0.63170, 0.62850, 0.62540, 0.62230, 0.61930, 0.61630,
4049 : 0.61330, 0.61040, 0.60740, 0.60460, 0.60170, 0.59890, 0.59610, 0.59330, 0.59050, 0.58780, 0.58510, 0.58250, 0.57590, 0.56950, 0.56330,
4050 : 0.55710, 0.55120, 0.54530, 0.53960, 0.534, 0.52860, 0.52320, 0.51280, 0.50280, 0.49330, 0.484, 0.47520, 0.46660, 0.45840, 0.45050,
4051 : 0.44280, 0.43540, 0.42820, 0.42130, 0.41460, 0.40810, 3.542e-05, 0.36270, 0.3391},
4052 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4053 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4054 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.72820, 0.72610, 0.724, 0.72190, 0.71990, 0.71780, 0.71580, 0.71380,
4055 : 0.71180, 0.70980, 0.70790, 0.70590, 0.704, 0.702, 0.70010, 0.69820, 0.69630, 0.69440, 0.69250, 0.69070, 0.68880, 0.687, 0.68520,
4056 : 0.68340, 0.68160, 0.678, 0.67450, 0.671, 0.66750, 0.66410, 0.66070, 0.65740, 0.65410, 0.65080, 0.64760, 0.64440, 0.64130, 0.63810,
4057 : 0.63510, 0.632, 0.629, 0.626, 0.623, 0.62010, 0.61720, 0.61430, 0.61150, 0.60860, 0.60580, 0.60310, 0.59630, 0.58960, 0.58320,
4058 : 0.57680, 0.57060, 0.56460, 0.55870, 0.55290, 0.54720, 0.54170, 0.53090, 0.52060, 0.51060, 0.50110, 0.49190, 0.48310, 0.47450, 0.46630,
4059 : 0.45840, 0.45070, 0.44330, 0.43610, 0.42920, 0.42240, 3.542e-05, 0.37540, 0.3511},
4060 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4061 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4062 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75190, 0.74970, 0.74760, 0.74550, 0.74330, 0.74120, 0.73920,
4063 : 0.73710, 0.735, 0.733, 0.73090, 0.72890, 0.72690, 0.72490, 0.723, 0.721, 0.719, 0.71710, 0.71520, 0.71320, 0.71130, 0.70940,
4064 : 0.70760, 0.70570, 0.702, 0.69830, 0.69470, 0.69110, 0.68760, 0.68410, 0.68060, 0.67720, 0.67380, 0.67050, 0.66720, 0.66390, 0.66060,
4065 : 0.65740, 0.65430, 0.65110, 0.648, 0.645, 0.64190, 0.63890, 0.63590, 0.633, 0.63010, 0.62720, 0.62430, 0.61730, 0.61040, 0.60370,
4066 : 0.59710, 0.59070, 0.58440, 0.57830, 0.57230, 0.56640, 0.56070, 0.54950, 0.53880, 0.52850, 0.51870, 0.50910, 0.5, 0.49120, 0.48260,
4067 : 0.47440, 0.46650, 0.45880, 0.45140, 0.44420, 0.43720, 3.542e-05, 0.38860, 0.3633},
4068 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4069 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4070 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.77630, 0.774, 0.77180, 0.76960, 0.76740, 0.76530,
4071 : 0.76310, 0.761, 0.75890, 0.75670, 0.75470, 0.75260, 0.75050, 0.74840, 0.74640, 0.74440, 0.74240, 0.74040, 0.73840, 0.73640, 0.73440,
4072 : 0.73250, 0.73050, 0.72670, 0.72290, 0.71910, 0.71540, 0.71170, 0.70810, 0.70450, 0.701, 0.69750, 0.694, 0.69060, 0.68720, 0.68380,
4073 : 0.68050, 0.67720, 0.674, 0.67070, 0.66760, 0.66440, 0.66130, 0.65820, 0.65510, 0.65210, 0.64910, 0.64610, 0.63880, 0.63170, 0.62480,
4074 : 0.618, 0.61130, 0.60480, 0.59850, 0.59230, 0.58620, 0.58020, 0.56870, 0.55760, 0.547, 0.53670, 0.52690, 0.51740, 0.50820, 0.49940,
4075 : 0.49090, 0.48270, 0.47470, 0.46710, 0.45960, 0.45240, 3.542e-05, 0.40210, 0.3759},
4076 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4077 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4078 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.80130, 0.799, 0.79670, 0.79440, 0.79220,
4079 : 0.78990, 0.78770, 0.78550, 0.78330, 0.78110, 0.779, 0.77680, 0.77470, 0.77260, 0.77050, 0.76840, 0.76630, 0.76420, 0.76220, 0.76010,
4080 : 0.75810, 0.75610, 0.75210, 0.74820, 0.74430, 0.74040, 0.73660, 0.73280, 0.72910, 0.72540, 0.72180, 0.71820, 0.71470, 0.71110, 0.70770,
4081 : 0.70420, 0.70080, 0.69740, 0.69410, 0.69080, 0.68750, 0.68430, 0.68110, 0.67790, 0.67480, 0.67170, 0.66860, 0.661, 0.65370, 0.64650,
4082 : 0.63940, 0.63250, 0.62580, 0.61920, 0.61280, 0.60650, 0.60030, 0.58840, 0.57690, 0.56590, 0.55530, 0.54510, 0.53530, 0.52580, 0.51670,
4083 : 0.50790, 0.49940, 0.49110, 0.48320, 0.47550, 0.468, 3.542e-05, 0.41590, 0.3889},
4084 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4085 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4086 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.82690, 0.82460, 0.82220, 0.81990,
4087 : 0.81750, 0.81520, 0.81290, 0.81070, 0.80840, 0.80620, 0.80390, 0.80170, 0.79950, 0.79730, 0.79520, 0.793, 0.79090, 0.78870, 0.78660,
4088 : 0.78450, 0.78240, 0.77830, 0.77420, 0.77010, 0.76610, 0.76220, 0.75830, 0.75440, 0.75060, 0.74690, 0.74310, 0.73940, 0.73580, 0.73220,
4089 : 0.72860, 0.72510, 0.72160, 0.71810, 0.71470, 0.71130, 0.708, 0.70470, 0.70140, 0.69810, 0.69490, 0.69170, 0.68390, 0.67630, 0.66880,
4090 : 0.66150, 0.65440, 0.64740, 0.64060, 0.63390, 0.62740, 0.621, 0.60870, 0.59680, 0.58540, 0.57440, 0.56390, 0.55370, 0.54390, 0.53450,
4091 : 0.52530, 0.51650, 0.508, 0.49980, 0.49180, 0.48410, 3.542e-05, 0.43020, 0.4023},
4092 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4093 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4094 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.85320, 0.85080, 0.84840,
4095 : 0.846, 0.84360, 0.84120, 0.83880, 0.83650, 0.83410, 0.83180, 0.82950, 0.82730, 0.825, 0.82270, 0.82050, 0.81830, 0.81610, 0.81390,
4096 : 0.81170, 0.80950, 0.80520, 0.801, 0.79680, 0.79260, 0.78850, 0.78450, 0.78050, 0.77650, 0.77260, 0.76880, 0.76490, 0.76120, 0.75740,
4097 : 0.75370, 0.75010, 0.74650, 0.74290, 0.73930, 0.73580, 0.73240, 0.72890, 0.72550, 0.72210, 0.71880, 0.71550, 0.70740, 0.69950, 0.69180,
4098 : 0.68420, 0.67680, 0.66960, 0.66260, 0.65570, 0.64890, 0.64230, 0.62950, 0.61720, 0.60540, 0.59410, 0.58310, 0.57260, 0.56250, 0.55270,
4099 : 0.54330, 0.53420, 0.52540, 0.51690, 0.50860, 0.50060, 3.542e-05, 0.44490, 0.416},
4100 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4101 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4102 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.88020, 0.87770,
4103 : 0.87520, 0.87270, 0.87030, 0.86780, 0.86540, 0.86290, 0.86050, 0.85820, 0.85580, 0.85340, 0.85110, 0.84880, 0.84650, 0.84420, 0.84190,
4104 : 0.83960, 0.83740, 0.83290, 0.82850, 0.82420, 0.81990, 0.81560, 0.81140, 0.80730, 0.80320, 0.79920, 0.79510, 0.79120, 0.78730, 0.78340,
4105 : 0.77960, 0.77580, 0.772, 0.76830, 0.76460, 0.761, 0.75740, 0.75390, 0.75030, 0.74680, 0.74340, 0.74, 0.73160, 0.72340, 0.71540,
4106 : 0.70760, 0.69990, 0.69240, 0.68510, 0.678, 0.671, 0.66420, 0.65090, 0.63820, 0.626, 0.61430, 0.603, 0.59210, 0.58160, 0.57150,
4107 : 0.56170, 0.55230, 0.54320, 0.53440, 0.52590, 0.51760, 3.542e-05, 0.46, 0.4301},
4108 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4109 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4110 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.90790,
4111 : 0.90530, 0.90270, 0.90020, 0.89760, 0.89510, 0.89260, 0.89010, 0.88760, 0.88520, 0.88270, 0.88030, 0.87790, 0.87550, 0.87310, 0.87070,
4112 : 0.86840, 0.86610, 0.86140, 0.85690, 0.85240, 0.84790, 0.84350, 0.83920, 0.83490, 0.83060, 0.82640, 0.82230, 0.81820, 0.81410, 0.81010,
4113 : 0.80610, 0.80220, 0.79830, 0.79450, 0.79070, 0.78690, 0.78320, 0.77950, 0.77590, 0.77220, 0.76870, 0.76510, 0.75640, 0.74790, 0.73970,
4114 : 0.73160, 0.72370, 0.71590, 0.70840, 0.701, 0.69380, 0.68670, 0.673, 0.65980, 0.64720, 0.635, 0.62340, 0.61210, 0.60130, 0.59080,
4115 : 0.58070, 0.571, 0.56150, 0.55240, 0.54360, 0.53510, 3.542e-05, 0.47550, 0.4446},
4116 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4117 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4118 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4119 : 0.93630, 0.93360, 0.931, 0.92830, 0.92570, 0.92310, 0.92050, 0.91790, 0.91540, 0.91280, 0.91030, 0.90780, 0.90530, 0.90290, 0.90040,
4120 : 0.898, 0.89560, 0.89080, 0.886, 0.88140, 0.87680, 0.87220, 0.86770, 0.86320, 0.85880, 0.85450, 0.85020, 0.84590, 0.84170, 0.83760,
4121 : 0.83340, 0.82940, 0.82540, 0.82140, 0.81740, 0.81350, 0.80970, 0.80590, 0.80210, 0.79840, 0.79460, 0.791, 0.782, 0.77320, 0.76460,
4122 : 0.75620, 0.74810, 0.74010, 0.73220, 0.72460, 0.71710, 0.70980, 0.69560, 0.682, 0.66890, 0.65640, 0.64430, 0.63270, 0.62150, 0.61060,
4123 : 0.60020, 0.59010, 0.58040, 0.571, 0.56190, 0.553, 3.542e-05, 0.49140, 0.4594},
4124 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4125 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4126 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4127 : 0.0, 0.96540, 0.96260, 0.95990, 0.95720, 0.95450, 0.95180, 0.94910, 0.94650, 0.94380, 0.94120, 0.93860, 0.93610, 0.93350, 0.93090,
4128 : 0.92840, 0.92590, 0.92090, 0.916, 0.91120, 0.90640, 0.90170, 0.897, 0.89240, 0.88780, 0.88330, 0.87890, 0.87450, 0.87010, 0.86580,
4129 : 0.86150, 0.85730, 0.85320, 0.849, 0.845, 0.84090, 0.83690, 0.833, 0.82910, 0.82520, 0.82140, 0.81760, 0.80830, 0.79920, 0.79030,
4130 : 0.78160, 0.77310, 0.76490, 0.75680, 0.74890, 0.74110, 0.73360, 0.71890, 0.70480, 0.69130, 0.67830, 0.66580, 0.65380, 0.64220, 0.631,
4131 : 0.62020, 0.60980, 0.59970, 0.59, 0.58060, 0.57150, 3.542e-05, 0.50780, 0.4747},
4132 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4133 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4134 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4135 : 0.0, 0.0, 0.99520, 0.99240, 0.98950, 0.98670, 0.984, 0.98120, 0.97840, 0.97570, 0.973, 0.97030, 0.96760, 0.965, 0.96230,
4136 : 0.95970, 0.95710, 0.952, 0.94690, 0.94190, 0.93690, 0.932, 0.92720, 0.92240, 0.91770, 0.913, 0.90840, 0.90380, 0.89930, 0.89480,
4137 : 0.89040, 0.88610, 0.88170, 0.87750, 0.87320, 0.86910, 0.86490, 0.86080, 0.85680, 0.85280, 0.84880, 0.84490, 0.83520, 0.82580, 0.81670,
4138 : 0.80770, 0.79890, 0.79040, 0.782, 0.77380, 0.76580, 0.758, 0.74280, 0.72830, 0.71430, 0.70090, 0.68790, 0.67550, 0.66350, 0.652,
4139 : 0.64080, 0.63, 0.61960, 0.60960, 0.59980, 0.59040, 3.542e-05, 0.52460, 0.4905},
4140 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4141 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4142 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4143 : 0.0, 0.0, 0.0, 1.026, 1.023, 1.02, 1.017, 1.014, 1.011, 1.008, 1.006, 1.003, 1.0, 0.99740, 0.99460,
4144 : 0.99190, 0.98920, 0.98390, 0.97860, 0.97340, 0.96830, 0.96320, 0.95820, 0.95320, 0.94830, 0.94350, 0.93870, 0.934, 0.92930, 0.92470,
4145 : 0.92010, 0.91560, 0.91110, 0.90670, 0.90230, 0.898, 0.89370, 0.88950, 0.88530, 0.88110, 0.877, 0.873, 0.863, 0.85330, 0.84380,
4146 : 0.83450, 0.82540, 0.81660, 0.80790, 0.79940, 0.79120, 0.78310, 0.76740, 0.75230, 0.73790, 0.724, 0.71060, 0.69780, 0.68540, 0.67350,
4147 : 0.66190, 0.65080, 0.64010, 0.62970, 0.61960, 0.60990, 3.542e-05, 0.54180, 0.5066},
4148 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4149 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4150 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4151 : 0.0, 0.0, 0.0, 0.0, 1.057, 1.054, 1.051, 1.048, 1.045, 1.042, 1.039, 1.036, 1.034, 1.031, 1.028,
4152 : 1.025, 1.022, 1.017, 1.011, 1.006, 1.0, 0.99520, 0.99, 0.98490, 0.97980, 0.97480, 0.96990, 0.965, 0.96010, 0.95530,
4153 : 0.95060, 0.94590, 0.94130, 0.93670, 0.93220, 0.92770, 0.92330, 0.91890, 0.91460, 0.91030, 0.906, 0.90180, 0.89150, 0.88140, 0.87160,
4154 : 0.862, 0.85260, 0.84350, 0.83450, 0.82580, 0.81720, 0.80880, 0.79260, 0.77710, 0.76210, 0.74780, 0.734, 0.72070, 0.70790, 0.69550,
4155 : 0.68360, 0.67210, 0.661, 0.65030, 0.63990, 0.62980, 3.542e-05, 0.55960, 0.5232},
4156 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4157 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4158 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4159 : 0.0, 0.0, 0.0, 0.0, 0.0, 1.089, 1.086, 1.083, 1.08, 1.077, 1.074, 1.071, 1.068, 1.065, 1.062,
4160 : 1.059, 1.056, 1.05, 1.045, 1.039, 1.034, 1.028, 1.023, 1.017, 1.012, 1.007, 1.002, 0.99680, 0.99180, 0.98680,
4161 : 0.982, 0.97710, 0.97230, 0.96760, 0.96290, 0.95830, 0.95370, 0.94910, 0.94470, 0.94020, 0.93580, 0.93150, 0.92080, 0.91040, 0.90020,
4162 : 0.89030, 0.88060, 0.87110, 0.86190, 0.85280, 0.844, 0.83530, 0.81850, 0.80250, 0.787, 0.77220, 0.75790, 0.74420, 0.731, 0.71820,
4163 : 0.70590, 0.694, 0.68260, 0.67150, 0.66070, 0.65030, 3.542e-05, 0.57780, 0.5402},
4164 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4165 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4166 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4167 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.122, 1.119, 1.116, 1.113, 1.109, 1.106, 1.103, 1.1, 1.097,
4168 : 1.094, 1.091, 1.085, 1.079, 1.073, 1.068, 1.062, 1.056, 1.051, 1.045, 1.04, 1.035, 1.03, 1.024, 1.019,
4169 : 1.014, 1.009, 1.004, 0.99930, 0.99440, 0.98960, 0.98490, 0.98020, 0.97560, 0.971, 0.96640, 0.96190, 0.95090, 0.94010, 0.92960,
4170 : 0.91930, 0.90930, 0.89950, 0.88990, 0.88060, 0.87140, 0.86250, 0.84510, 0.82850, 0.81260, 0.79730, 0.78250, 0.76830, 0.75470, 0.74150,
4171 : 0.72880, 0.71650, 0.70470, 0.69320, 0.68210, 0.67140, 3.542e-05, 0.59640, 0.5576},
4172 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4173 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4174 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4175 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.156, 1.152, 1.149, 1.146, 1.143, 1.139, 1.136, 1.133,
4176 : 1.13, 1.127, 1.121, 1.115, 1.109, 1.103, 1.097, 1.091, 1.085, 1.08, 1.074, 1.069, 1.063, 1.058, 1.052,
4177 : 1.047, 1.042, 1.037, 1.032, 1.027, 1.022, 1.017, 1.012, 1.007, 1.003, 0.99790, 0.99320, 0.98180, 0.97060, 0.95970,
4178 : 0.94910, 0.93880, 0.92860, 0.91880, 0.90910, 0.89960, 0.89040, 0.87250, 0.85530, 0.83880, 0.823, 0.80780, 0.79310, 0.779, 0.76540,
4179 : 0.75230, 0.73960, 0.72740, 0.71550, 0.70410, 0.693, 3.542e-05, 0.61560, 0.5755},
4180 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4181 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4182 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4183 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.19, 1.187, 1.183, 1.18, 1.177, 1.173, 1.17,
4184 : 1.167, 1.164, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.121, 1.115, 1.109, 1.103, 1.098, 1.092, 1.087,
4185 : 1.081, 1.076, 1.071, 1.065, 1.06, 1.055, 1.05, 1.045, 1.04, 1.035, 1.03, 1.025, 1.013, 1.002, 0.99070,
4186 : 0.97970, 0.969, 0.95860, 0.94840, 0.93840, 0.92860, 0.919, 0.90050, 0.88280, 0.86580, 0.84940, 0.83370, 0.81860, 0.804, 0.78990,
4187 : 0.77640, 0.76330, 0.75070, 0.73840, 0.72660, 0.71520, 3.542e-05, 0.63530, 0.5939},
4188 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4189 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4190 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4191 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.226, 1.222, 1.219, 1.215, 1.212, 1.208,
4192 : 1.205, 1.202, 1.195, 1.188, 1.182, 1.176, 1.169, 1.163, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.122,
4193 : 1.116, 1.111, 1.105, 1.1, 1.094, 1.089, 1.084, 1.079, 1.073, 1.068, 1.063, 1.058, 1.046, 1.034, 1.023,
4194 : 1.011, 1.0, 0.98930, 0.97870, 0.96840, 0.95830, 0.94840, 0.92930, 0.911, 0.89340, 0.87650, 0.86030, 0.84470, 0.82960, 0.81510,
4195 : 0.80110, 0.78760, 0.77460, 0.76190, 0.74970, 0.73790, 3.542e-05, 0.65550, 0.6128},
4196 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4197 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4198 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4199 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.262, 1.258, 1.254, 1.251, 1.247,
4200 : 1.244, 1.24, 1.234, 1.227, 1.22, 1.213, 1.207, 1.201, 1.194, 1.188, 1.182, 1.176, 1.17, 1.164, 1.158,
4201 : 1.152, 1.146, 1.141, 1.135, 1.129, 1.124, 1.118, 1.113, 1.108, 1.102, 1.097, 1.092, 1.08, 1.067, 1.055,
4202 : 1.043, 1.032, 1.021, 1.01, 0.99920, 0.98880, 0.97860, 0.95890, 0.93990, 0.92180, 0.90440, 0.88760, 0.87150, 0.85590, 0.84090,
4203 : 0.82650, 0.81260, 0.79910, 0.78610, 0.77350, 0.76130, 3.542e-05, 0.67620, 0.6321},
4204 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4205 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4206 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4207 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.299, 1.295, 1.291, 1.288,
4208 : 1.284, 1.28, 1.273, 1.266, 1.259, 1.252, 1.246, 1.239, 1.232, 1.226, 1.22, 1.213, 1.207, 1.201, 1.195,
4209 : 1.189, 1.183, 1.177, 1.171, 1.165, 1.16, 1.154, 1.149, 1.143, 1.138, 1.132, 1.127, 1.114, 1.101, 1.089,
4210 : 1.077, 1.065, 1.053, 1.042, 1.031, 1.02, 1.01, 0.98920, 0.96960, 0.95090, 0.93290, 0.91560, 0.89890, 0.88290, 0.86740,
4211 : 0.85250, 0.83810, 0.82420, 0.81080, 0.79780, 0.78520, 3.542e-05, 0.69740, 0.652},
4212 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4213 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4214 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4215 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.337, 1.333, 1.329,
4216 : 1.325, 1.321, 1.314, 1.307, 1.3, 1.292, 1.285, 1.279, 1.272, 1.265, 1.258, 1.252, 1.245, 1.239, 1.233,
4217 : 1.227, 1.22, 1.214, 1.208, 1.202, 1.196, 1.191, 1.185, 1.179, 1.174, 1.168, 1.163, 1.149, 1.136, 1.123,
4218 : 1.111, 1.098, 1.086, 1.075, 1.063, 1.052, 1.041, 1.02, 1.0, 0.98080, 0.96220, 0.94430, 0.92710, 0.91060, 0.89460,
4219 : 0.87920, 0.86440, 0.85, 0.83620, 0.82280, 0.80980, 3.542e-05, 0.7192, 0.6723},
4220 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4221 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4222 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4223 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.375, 1.371,
4224 : 1.367, 1.364, 1.356, 1.348, 1.341, 1.334, 1.326, 1.319, 1.312, 1.305, 1.298, 1.292, 1.285, 1.278, 1.272,
4225 : 1.265, 1.259, 1.253, 1.246, 1.24, 1.234, 1.228, 1.222, 1.216, 1.211, 1.205, 1.199, 1.185, 1.172, 1.158,
4226 : 1.145, 1.133, 1.12, 1.108, 1.097, 1.085, 1.074, 1.052, 1.031, 1.011, 0.99220, 0.97380, 0.956, 0.939, 0.92250,
4227 : 0.90660, 0.89130, 0.87650, 0.86220, 0.84840, 0.835, 3.542e-05, 0.7416, 0.6932},
4228 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4229 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4230 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4231 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.415,
4232 : 1.411, 1.407, 1.399, 1.391, 1.383, 1.376, 1.368, 1.361, 1.354, 1.346, 1.339, 1.332, 1.325, 1.319, 1.312,
4233 : 1.305, 1.299, 1.292, 1.286, 1.279, 1.273, 1.267, 1.261, 1.255, 1.249, 1.243, 1.237, 1.222, 1.208, 1.195,
4234 : 1.181, 1.168, 1.155, 1.143, 1.131, 1.119, 1.107, 1.085, 1.063, 1.043, 1.023, 1.004, 0.98570, 0.96810, 0.95110,
4235 : 0.93470, 0.91890, 0.90360, 0.88890, 0.87460, 0.86080, 3.542e-05, 0.7645, 0.7146},
4236 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4237 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4238 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4239 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4240 : 1.455, 1.451, 1.443, 1.435, 1.427, 1.419, 1.411, 1.404, 1.396, 1.389, 1.381, 1.374, 1.367, 1.36, 1.353,
4241 : 1.346, 1.339, 1.332, 1.326, 1.319, 1.313, 1.306, 1.3, 1.294, 1.287, 1.281, 1.275, 1.26, 1.246, 1.232,
4242 : 1.218, 1.204, 1.191, 1.178, 1.166, 1.154, 1.142, 1.118, 1.096, 1.075, 1.055, 1.035, 1.016, 0.99790, 0.98040,
4243 : 0.96350, 0.94720, 0.93140, 0.91620, 0.90150, 0.88730, 3.542e-05, 0.7879, 0.7365},
4244 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4245 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4246 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4247 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.497, 1.488, 1.48, 1.472, 1.464, 1.456, 1.448,
4248 : 1.44, 1.432, 1.425, 1.417, 1.41, 1.402, 1.395, 1.388, 1.381, 1.374, 1.367, 1.36, 1.354, 1.347, 1.34, 1.334, 1.327,
4249 : 1.321, 1.315, 1.299, 1.284, 1.27, 1.255, 1.242, 1.228, 1.215, 1.202, 1.189, 1.177, 1.153, 1.13, 1.108, 1.087, 1.067,
4250 : 1.047, 1.028, 1.01, 0.993, 0.97620, 0.95990, 0.94420, 0.92910, 0.91440, 3.542e-05, 0.812, 0.759},
4251 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4252 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4253 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4254 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.583, 1.574, 1.565, 1.556, 1.548, 1.539,
4255 : 1.531, 1.522, 1.514, 1.506, 1.498, 1.49, 1.483, 1.475, 1.468, 1.46, 1.453, 1.445, 1.438, 1.431, 1.424, 1.417, 1.41,
4256 : 1.404, 1.397, 1.38, 1.364, 1.349, 1.334, 1.319, 1.304, 1.29, 1.276, 1.263, 1.25, 1.224, 1.2, 1.177, 1.154, 1.133,
4257 : 1.112, 1.092, 1.073, 1.054, 1.036, 1.019, 1.002, 0.98630, 0.97070, 3.542e-05, 0.8619, 0.8056},
4258 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4259 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4260 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4261 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.673, 1.663, 1.654, 1.644, 1.635,
4262 : 1.626, 1.617, 1.609, 1.6, 1.592, 1.583, 1.575, 1.567, 1.559, 1.551, 1.543, 1.535, 1.527, 1.52, 1.512, 1.505, 1.498,
4263 : 1.49, 1.483, 1.466, 1.449, 1.432, 1.416, 1.4, 1.385, 1.37, 1.355, 1.341, 1.327, 1.299, 1.273, 1.249, 1.225, 1.202,
4264 : 1.18, 1.159, 1.138, 1.119, 1.1, 1.081, 1.063, 1.046, 1.03, 3.542e-05, 0.9143, 0.8546},
4265 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4266 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4267 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4268 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.766, 1.756, 1.746, 1.737,
4269 : 1.727, 1.717, 1.708, 1.699, 1.69, 1.681, 1.672, 1.663, 1.655, 1.646, 1.638, 1.629, 1.621, 1.613, 1.605, 1.597, 1.589,
4270 : 1.582, 1.574, 1.555, 1.537, 1.519, 1.502, 1.485, 1.469, 1.453, 1.437, 1.422, 1.407, 1.378, 1.351, 1.324, 1.299, 1.274,
4271 : 1.251, 1.229, 1.207, 1.186, 1.166, 1.146, 1.128, 1.109, 1.092, 3.542e-05, 0.9692, 0.9059},
4272 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4273 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4274 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4275 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.864, 1.854, 1.843,
4276 : 1.833, 1.823, 1.813, 1.803, 1.793, 1.784, 1.774, 1.765, 1.755, 1.746, 1.737, 1.729, 1.72, 1.711, 1.703, 1.694, 1.686,
4277 : 1.678, 1.669, 1.649, 1.63, 1.611, 1.593, 1.575, 1.557, 1.54, 1.524, 1.507, 1.492, 1.461, 1.432, 1.403, 1.377, 1.351,
4278 : 1.326, 1.302, 1.279, 1.257, 1.235, 1.215, 1.195, 1.175, 1.157, 3.542e-05, 1.027, 0.9597},
4279 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4280 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4281 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4282 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.967, 1.955, 1.944, 1.933, 1.923, 1.912, 1.902, 1.891, 1.881, 1.871,
4283 : 1.861, 1.852, 1.842, 1.833, 1.823, 1.814, 1.805, 1.796, 1.787, 1.778, 1.77, 1.748, 1.728, 1.707, 1.688, 1.669, 1.65, 1.632, 1.614,
4284 : 1.597, 1.58, 1.548, 1.516, 1.487, 1.458, 1.431, 1.404, 1.379, 1.354, 1.331, 1.308, 1.286, 1.265, 1.245, 1.225, 3.542e-05, 1.087, 1.016},
4285 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4286 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4287 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4288 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.074, 2.062, 2.05, 2.038, 2.027, 2.016, 2.005, 1.994, 1.983,
4289 : 1.973, 1.962, 1.952, 1.942, 1.932, 1.922, 1.912, 1.903, 1.893, 1.884, 1.875, 1.852, 1.83, 1.809, 1.788, 1.767, 1.748, 1.728, 1.709,
4290 : 1.691, 1.673, 1.639, 1.605, 1.574, 1.543, 1.514, 1.486, 1.459, 1.434, 1.409, 1.384, 1.361, 1.339, 1.317, 1.296, 3.542e-05, 1.15, 1.075},
4291 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4292 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4293 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4294 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.185, 2.172, 2.16, 2.148, 2.136, 2.124, 2.112, 2.101,
4295 : 2.09, 2.079, 2.068, 2.057, 2.046, 2.036, 2.025, 2.015, 2.005, 1.995, 1.985, 1.961, 1.937, 1.915, 1.892, 1.871, 1.85, 1.829, 1.809,
4296 : 1.79, 1.771, 1.734, 1.699, 1.665, 1.633, 1.602, 1.572, 1.544, 1.516, 1.49, 1.464, 1.44, 1.416, 1.393, 1.371, 3.542e-05, 1.216, 1.137},
4297 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4298 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4299 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4300 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.301, 2.288, 2.275, 2.262, 2.249, 2.237, 2.225,
4301 : 2.213, 2.201, 2.189, 2.177, 2.166, 2.155, 2.144, 2.133, 2.122, 2.111, 2.101, 2.075, 2.05, 2.026, 2.002, 1.979, 1.957, 1.935, 1.914,
4302 : 1.893, 1.873, 1.834, 1.796, 1.761, 1.727, 1.694, 1.662, 1.632, 1.603, 1.575, 1.548, 1.522, 1.497, 1.473, 1.449, 3.542e-05, 1.286, 1.201},
4303 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4304 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4305 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4306 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.422, 2.408, 2.394, 2.381, 2.367, 2.354,
4307 : 2.341, 2.329, 2.316, 2.304, 2.292, 2.28, 2.268, 2.256, 2.245, 2.233, 2.222, 2.195, 2.168, 2.142, 2.117, 2.093, 2.069, 2.046, 2.023,
4308 : 2.001, 1.98, 1.938, 1.899, 1.861, 1.825, 1.79, 1.757, 1.725, 1.694, 1.664, 1.635, 1.608, 1.581, 1.556, 1.531, 3.542e-05, 1.358, 1.269},
4309 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4310 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4311 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4312 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.548, 2.533, 2.519, 2.505, 2.491,
4313 : 2.477, 2.463, 2.45, 2.437, 2.424, 2.411, 2.398, 2.386, 2.373, 2.361, 2.349, 2.32, 2.292, 2.264, 2.238, 2.212, 2.186, 2.162, 2.138,
4314 : 2.114, 2.091, 2.048, 2.006, 1.965, 1.927, 1.89, 1.855, 1.821, 1.789, 1.757, 1.727, 1.698, 1.67, 1.642, 1.616, 3.542e-05, 1.433, 1.339},
4315 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4316 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4317 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4318 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.679, 2.664, 2.648, 2.633,
4319 : 2.619, 2.604, 2.59, 2.576, 2.562, 2.548, 2.535, 2.522, 2.508, 2.495, 2.483, 2.452, 2.421, 2.392, 2.364, 2.336, 2.309, 2.283, 2.258,
4320 : 2.233, 2.209, 2.162, 2.117, 2.075, 2.034, 1.995, 1.958, 1.922, 1.888, 1.854, 1.822, 1.792, 1.762, 1.733, 1.705, 3.542e-05, 1.512, 1.413},
4321 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4322 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4323 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4324 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.816, 2.8, 2.783,
4325 : 2.768, 2.752, 2.737, 2.722, 2.707, 2.692, 2.678, 2.664, 2.65, 2.636, 2.622, 2.589, 2.557, 2.526, 2.496, 2.466, 2.438, 2.41, 2.383,
4326 : 2.357, 2.331, 2.282, 2.234, 2.189, 2.146, 2.105, 2.066, 2.028, 1.991, 1.956, 1.922, 1.89, 1.858, 1.828, 1.799, 3.542e-05, 1.595, 1.490},
4327 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4328 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4329 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4330 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.958, 2.941,
4331 : 2.924, 2.907, 2.891, 2.875, 2.859, 2.843, 2.828, 2.813, 2.798, 2.783, 2.769, 2.733, 2.699, 2.666, 2.634, 2.603, 2.572, 2.543, 2.514,
4332 : 2.486, 2.459, 2.407, 2.357, 2.309, 2.263, 2.22, 2.178, 2.138, 2.099, 2.062, 2.026, 1.992, 1.959, 1.927, 1.896, 3.542e-05, 1.681, 1.570},
4333 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4334 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4335 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4336 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.106,
4337 : 3.088, 3.07, 3.052, 3.035, 3.018, 3.001, 2.985, 2.969, 2.953, 2.937, 2.922, 2.884, 2.848, 2.812, 2.778, 2.745, 2.713, 2.682, 2.651,
4338 : 2.622, 2.593, 2.537, 2.484, 2.434, 2.386, 2.34, 2.295, 2.253, 2.212, 2.173, 2.135, 2.099, 2.064, 2.03, 1.997, 3.542e-05, 1.77, 1.654},
4339 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4340 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4341 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4342 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4343 : 3.26, 3.24, 3.222, 3.203, 3.185, 3.167, 3.15, 3.132, 3.115, 3.099, 3.082, 3.042, 3.003, 2.966, 2.929, 2.894, 2.86, 2.827, 2.794,
4344 : 2.763, 2.732, 2.674, 2.618, 2.564, 2.513, 2.465, 2.418, 2.373, 2.33, 2.289, 2.249, 2.21, 2.173, 2.138, 2.103, 3.542e-05, 1.864, 1.741},
4345 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4346 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4347 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4348 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4349 : 0.0, 3.419, 3.399, 3.379, 3.36, 3.341, 3.322, 3.304, 3.286, 3.268, 3.25, 3.207, 3.166, 3.126, 3.087, 3.05, 3.014, 2.978, 2.944,
4350 : 2.911, 2.878, 2.816, 2.757, 2.7, 2.646, 2.595, 2.546, 2.498, 2.453, 2.409, 2.367, 2.326, 2.287, 2.25, 2.213, 3.542e-05, 1.961, 1.832},
4351 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4352 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4353 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4354 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4355 : 0.0, 0.0, 3.585, 3.564, 3.543, 3.523, 3.503, 3.483, 3.464, 3.445, 3.426, 3.38, 3.336, 3.294, 3.253, 3.213, 3.174, 3.137, 3.1,
4356 : 3.065, 3.031, 2.965, 2.902, 2.842, 2.785, 2.731, 2.679, 2.629, 2.581, 2.535, 2.49, 2.448, 2.406, 2.367, 2.328, 3.542e-05, 2.063, 1.926},
4357 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4358 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4359 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4360 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4361 : 0.0, 0.0, 0.0, 3.758, 3.735, 3.713, 3.692, 3.671, 3.65, 3.63, 3.61, 3.561, 3.514, 3.469, 3.425, 3.383, 3.342, 3.302, 3.264,
4362 : 3.226, 3.19, 3.12, 3.054, 2.99, 2.93, 2.873, 2.818, 2.765, 2.714, 2.665, 2.619, 2.574, 2.53, 2.488, 2.448, 3.542e-05, 2.168, 2.025},
4363 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4364 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4365 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4366 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4367 : 0.0, 0.0, 0.0, 0.0, 3.937, 3.913, 3.89, 3.867, 3.845, 3.823, 3.802, 3.75, 3.7, 3.652, 3.605, 3.561, 3.517, 3.475, 3.434,
4368 : 3.394, 3.356, 3.282, 3.212, 3.145, 3.081, 3.02, 2.962, 2.907, 2.853, 2.802, 2.752, 2.705, 2.659, 2.615, 2.573, 3.542e-05, 2.278, 2.127},
4369 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4370 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4371 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4372 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4373 : 0.0, 0.0, 0.0, 0.0, 0.0, 4.122, 4.097, 4.073, 4.049, 4.026, 4.003, 3.948, 3.895, 3.843, 3.794, 3.746, 3.7, 3.655, 3.612,
4374 : 3.57, 3.529, 3.451, 3.376, 3.306, 3.238, 3.174, 3.113, 3.054, 2.998, 2.944, 2.892, 2.842, 2.794, 2.747, 2.702, 3.542e-05, 2.392, 2.234},
4375 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4376 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4377 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4378 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4379 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.315, 4.289, 4.263, 4.238, 4.214, 4.155, 4.098, 4.043, 3.991, 3.94, 3.891, 3.843, 3.797,
4380 : 3.753, 3.709, 3.627, 3.548, 3.473, 3.402, 3.335, 3.27, 3.208, 3.148, 3.091, 3.037, 2.984, 2.933, 2.884, 2.837, 3.542e-05, 2.511, 2.344},
4381 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4382 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4383 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4384 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4385 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.515, 4.487, 4.46, 4.434, 4.371, 4.31, 4.252, 4.196, 4.142, 4.09, 4.04, 3.991,
4386 : 3.944, 3.898, 3.81, 3.727, 3.648, 3.573, 3.501, 3.433, 3.368, 3.305, 3.245, 3.187, 3.132, 3.079, 3.027, 2.977, 3.542e-05, 2.635, 2.459},
4387 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4388 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4389 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4390 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4391 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.722, 4.693, 4.665, 4.597, 4.532, 4.47, 4.411, 4.353, 4.298, 4.244, 4.193,
4392 : 4.143, 4.094, 4.001, 3.913, 3.83, 3.751, 3.675, 3.603, 3.534, 3.468, 3.405, 3.344, 3.286, 3.23, 3.176, 3.123, 3.542e-05, 2.763, 2.579},
4393 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4394 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4395 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4396 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4397 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.936, 4.906, 4.833, 4.764, 4.698, 4.635, 4.574, 4.515, 4.458, 4.403,
4398 : 4.35, 4.298, 4.2, 4.107, 4.019, 3.935, 3.856, 3.78, 3.707, 3.638, 3.571, 3.507, 3.446, 3.387, 3.33, 3.275, 3.542e-05, 2.896, 2.703},
4399 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4400 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4401 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4402 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4403 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.159, 5.081, 5.007, 4.936, 4.868, 4.803, 4.741, 4.681, 4.622,
4404 : 4.566, 4.512, 4.407, 4.309, 4.216, 4.128, 4.044, 3.964, 3.887, 3.814, 3.744, 3.677, 3.612, 3.55, 3.49, 3.432, 3.542e-05, 3.035, 2.832},
4405 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4406 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4407 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4408 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4409 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.75, 5.662, 5.579, 5.499, 5.423, 5.35, 5.28, 5.212,
4410 : 5.147, 5.084, 4.964, 4.851, 4.744, 4.643, 4.547, 4.456, 4.369, 4.286, 4.206, 4.13, 4.056, 3.986, 3.918, 3.853, 3.542e-05, 3.404, 3.176},
4411 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4412 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4413 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4414 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4415 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.395, 6.296, 6.202, 6.112, 6.027, 5.945, 5.866,
4416 : 5.79, 5.717, 5.579, 5.449, 5.327, 5.211, 5.102, 4.998, 4.898, 4.804, 4.714, 4.627, 4.544, 4.464, 4.388, 4.314, 3.542e-05, 3.808, 3.552},
4417 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4418 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4419 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4420 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4421 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.098, 6.985, 6.879, 6.779, 6.683, 6.591,
4422 : 6.503, 6.418, 6.258, 6.108, 5.968, 5.836, 5.711, 5.593, 5.48, 5.373, 5.27, 5.172, 5.078, 4.988, 4.902, 4.819, 3.542e-05, 4.25, 3.962},
4423 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4424 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4425 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4426 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4427 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.861, 7.734, 7.615, 7.502, 7.395,
4428 : 7.292, 7.193, 7.008, 6.835, 6.674, 6.523, 6.38, 6.245, 6.118, 5.996, 5.88, 5.769, 5.663, 5.561, 5.464, 5.37, 3.542e-05, 4.732, 4.410},
4429 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4430 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4431 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4432 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4433 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.69, 8.547, 8.413, 8.286,
4434 : 8.166, 8.051, 7.835, 7.636, 7.451, 7.278, 7.115, 6.961, 6.816, 6.678, 6.547, 6.421, 6.302, 6.187, 6.078, 5.972, 3.542e-05, 5.257, 4.897},
4435 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4436 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4437 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4438 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4439 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.588, 9.428, 9.277,
4440 : 9.135, 9.0, 8.749, 8.519, 8.305, 8.106, 7.92, 7.745, 7.58, 7.423, 7.275, 7.133, 6.998, 6.87, 6.746, 6.628, 3.542e-05, 5.827, 5.425},
4441 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4442 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4443 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4444 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4445 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.56, 10.38,
4446 : 10.21, 10.05, 9.759, 9.491, 9.244, 9.016, 8.803, 8.603, 8.415, 8.238, 8.069, 7.91, 7.758, 7.613, 7.474, 7.341, 3.542e-05, 6.445, 5.998},
4447 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4448 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4449 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4450 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4451 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.62,
4452 : 11.41, 11.22, 10.88, 10.56, 10.28, 10.01, 9.769, 9.541, 9.328, 9.126, 8.936, 8.756, 8.584, 8.421, 8.265, 8.116, 3.542e-05, 7.115, 6.618},
4453 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4454 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4455 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4456 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4457 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4458 : 12.75, 12.53, 12.11, 11.75, 11.41, 11.11, 10.83, 10.57, 10.32, 10.1, 9.88, 9.676, 9.483, 9.299, 9.124, 8.957, 3.542e-05, 7.84, 7.288},
4459 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4460 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4461 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4462 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4463 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4464 : 0.0, 13.99, 13.49, 13.05, 12.67, 12.31, 11.99, 11.69, 11.41, 11.15, 10.91, 10.68, 10.46, 10.25, 10.06, 9.869, 3.542e-05, 8.623, 8.011},
4465 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4466 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4467 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4468 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4469 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4470 : 0.0, 0.0, 16.75, 16.12, 15.58, 15.1, 14.66, 14.26, 13.9, 13.56, 13.25, 12.95, 12.67, 12.41, 12.16, 11.93, 3.542e-05, 10.38, 9.628},
4471 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4472 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4473 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4474 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4475 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4476 : 0.0, 0.0, 0.0, 19.97, 19.17, 18.49, 17.89, 17.36, 16.87, 16.43, 16.02, 15.64, 15.28, 14.95, 14.63, 14.34, 3.542e-05, 12.42, 11.5},
4477 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4478 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4479 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4480 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4481 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4482 : 0.0, 0.0, 0.0, 0.0, 23.71, 22.7, 21.85, 21.1, 20.45, 19.85, 19.31, 18.81, 18.35, 17.93, 17.53, 17.15, 3.542e-05, 14.77, 13.65},
4483 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4484 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4485 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4486 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4487 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4488 : 0.0, 0.0, 0.0, 0.0, 0.0, 28.07, 26.78, 25.71, 24.79, 23.97, 23.25, 22.59, 21.99, 21.44, 20.93, 20.45, 3.542e-05, 17.48, 16.12},
4489 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4490 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4491 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4492 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4493 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4494 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 33.16, 31.5, 30.15, 29.0, 28.0, 27.11, 26.31, 25.59, 24.92, 24.31, 3.542e-05, 20.6, 18.94},
4495 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4496 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4497 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4498 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4499 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4500 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.13, 36.97, 35.25, 33.82, 32.58, 31.5, 30.53, 29.65, 28.86, 3.542e-05, 24.19, 22.16},
4501 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4502 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4503 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4504 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4505 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4506 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 46.17, 43.33, 41.13, 39.33, 37.8, 36.47, 35.29, 34.24, 3.542e-05, 28.31, 25.84},
4507 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4508 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4509 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4510 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4511 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 54.54, 50.75, 47.92, 45.65, 43.75, 42.11, 40.68, 3.542e-05, 33.07, 30.03},
4512 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4513 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4514 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4515 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4516 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 64.64, 59.47, 55.78, 52.9, 50.53, 48.51, 3.542e-05, 38.55, 34.81},
4517 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4518 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4519 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4520 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4521 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 77.05, 69.8, 64.93, 61.24, 58.27, 3.542e-05, 44.92, 40.28},
4522 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4523 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4524 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4525 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4526 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 92.76, 82.18, 75.63, 70.87, 3.542e-05, 52.35, 46.54},
4527 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4528 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4529 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4530 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4531 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 113.6, 97.22, 88.27, 3.542e-05, 61.12, 53.76},
4532 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4533 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4534 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4535 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4536 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 143.9, 115.8, 3.542e-05, 71.6, 62.15},
4537 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4538 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4539 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4540 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4541 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 201.8, 3.542e-05, 84.38, 71.99},
4542 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4543 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4544 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4545 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4546 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 148.4, 115.1},
4547 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4548 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4549 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4550 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4551 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 201.7, 144.2},
4552 : {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4553 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4554 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4555 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
4556 : 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 270.9, 177.8},
4557 : }};
4558 :
4559 : //*****************************************************************************
4560 :
4561 : template <size_t NumOfTemps, size_t NumOfConcs>
4562 100 : void InterpDefValuesForGlycolConc(
4563 : EnergyPlusData &state,
4564 : const std::array<Real64, NumOfConcs> &RawConcData, // concentrations for raw data
4565 : const std::array<std::array<Real64, NumOfTemps>, NumOfConcs> &RawPropData, // raw property data (concentration, temperature)
4566 : Real64 Concentration, // concentration of actual fluid mix
4567 : Array1D<Real64> &InterpData // interpolated output data at proper concentration
4568 : )
4569 : {
4570 :
4571 : // SUBROUTINE INFORMATION:
4572 : // AUTHOR Rick Strand
4573 : // DATE WRITTEN June 2004
4574 : // MODIFIED na
4575 : // RE-ENGINEERED na
4576 :
4577 : // PURPOSE OF THIS SUBROUTINE:
4578 : // The purpose of this subroutine is to find the values for the property
4579 : // data at a particular concentration from default data that is at "generic"
4580 : // concentrations. This is then returned to the main get routine and
4581 : // then used later in the program to find values at various temperatures.
4582 : // The ultimate purpose of this is to avoid double interpolation during
4583 : // the simulation. Since concentration does not change during the simulation,
4584 : // there is no reason to do a double interpolation every time a property
4585 : // value is needed.
4586 :
4587 : // METHODOLOGY EMPLOYED:
4588 : // Fairly straight forward--find the two concentrations between which
4589 : // the actual concentration falls and then interpolate the property
4590 : // data using standard linear interpolation. Note that data is stored
4591 : // in the format: std::array[Concentration][Temperature]
4592 :
4593 : // REFERENCES:
4594 : // na
4595 :
4596 : // USE STATEMENTS:
4597 : // na
4598 :
4599 : // Argument array dimensioning
4600 :
4601 : // Locals
4602 : // FUNCTION ARGUMENT DEFINITIONS:
4603 :
4604 : // INTERFACE BLOCK SPECIFICATIONS:
4605 : // na
4606 :
4607 : // DERIVED TYPE DEFINITIONS:
4608 : // na
4609 :
4610 : // SUBROUTINE PARAMETER DEFINITIONS:
4611 100 : constexpr Real64 ConcToler(0.0001); // Some reasonable value for comparisons
4612 : static constexpr std::string_view RoutineName("InterpDefValuesForGlycolConc: ");
4613 :
4614 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
4615 : size_t HiIndex; // index on the high side of the concentration
4616 : Real64 InterpFrac; // intermediate value for interpolations
4617 : size_t LoopC; // loop counter for concentration
4618 : size_t LoopT; // loop counter for temperature
4619 :
4620 : // First, find where the actual concentration falls between the concentration data.
4621 : // Then, interpolate if necessary.
4622 100 : if (Concentration < RawConcData[0]) { // Concentration too low
4623 0 : ShowWarningError(state,
4624 0 : format("{}Glycol concentration out of range for data (too low), concentration = {:.3R}", RoutineName, Concentration));
4625 0 : ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input");
4626 0 : ShowContinueError(state, "Property data set to data for lowest concentration entered");
4627 0 : InterpData = RawPropData[0][0];
4628 100 : } else if (Concentration > RawConcData[NumOfConcs - 1]) { // Concentration too high
4629 0 : ShowWarningError(state,
4630 0 : format("{}Glycol concentration out of range for data (too high), concentration = {:.3R}", RoutineName, Concentration));
4631 0 : ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input");
4632 0 : ShowContinueError(state, "Property data set to data for highest concentration entered");
4633 0 : InterpData = RawPropData[NumOfConcs - 1][0];
4634 : } else { // Concentration somewhere between lowest and highest point--interpolate
4635 100 : HiIndex = NumOfConcs - 1; // Default to highest concentration - 1, since std::arrays start at 0
4636 480 : for (LoopC = 1; LoopC < NumOfConcs - 1; ++LoopC) {
4637 480 : if (Concentration <= RawConcData[LoopC]) {
4638 100 : HiIndex = LoopC;
4639 100 : break; // LoopC DO loop
4640 : }
4641 : }
4642 100 : if (std::abs(RawConcData[HiIndex] - RawConcData[HiIndex - 1]) >= ConcToler) {
4643 100 : InterpFrac = (RawConcData[HiIndex] - Concentration) / (RawConcData[HiIndex] - RawConcData[HiIndex - 1]);
4644 3400 : for (LoopT = 0; LoopT < NumOfTemps; ++LoopT) {
4645 3300 : if ((RawPropData[HiIndex][LoopT] < ConcToler) || (RawPropData[HiIndex - 1][LoopT] < ConcToler)) {
4646 : // One of the two values is zero--so we cannot interpolate for this point (assign to zero)
4647 352 : InterpData(LoopT + 1) = 0.0;
4648 : } else {
4649 2948 : InterpData(LoopT + 1) =
4650 2948 : RawPropData[HiIndex][LoopT] - (InterpFrac * (RawPropData[HiIndex][LoopT] - RawPropData[HiIndex - 1][LoopT]));
4651 : }
4652 : }
4653 : } else { // user has input data for concentrations that are too close or repeated, this must be fixed
4654 0 : ShowFatalError(state,
4655 : std::string{RoutineName} + "concentration values too close or data repeated, check your fluid property input data");
4656 : }
4657 : }
4658 100 : }
4659 :
4660 : //*****************************************************************************
4661 :
4662 12 : void InterpValuesForGlycolConc(EnergyPlusData &state,
4663 : int const NumOfConcs, // number of concentrations (dimension of raw data)
4664 : int const NumOfTemps, // number of temperatures (dimension of raw data)
4665 : const Array1D<Real64> &RawConcData, // concentrations for raw data
4666 : Array2S<Real64> const RawPropData, // raw property data (temperature,concentration)
4667 : Real64 const Concentration, // concentration of actual fluid mix
4668 : Array1D<Real64> &InterpData // interpolated output data at proper concentration
4669 : )
4670 : {
4671 :
4672 : // SUBROUTINE INFORMATION:
4673 : // AUTHOR Rick Strand
4674 : // DATE WRITTEN June 2004
4675 : // MODIFIED na
4676 : // RE-ENGINEERED na
4677 :
4678 : // PURPOSE OF THIS SUBROUTINE:
4679 : // The purpose of this subroutine is to find the values for the property
4680 : // data at a particular concentration from default data that is at "generic"
4681 : // concentrations. This is then returned to the main get routine and
4682 : // then used later in the program to find values at various temperatures.
4683 : // The ultimate purpose of this is to avoid double interpolation during
4684 : // the simulation. Since concentration does not change during the simulation,
4685 : // there is no reason to do a double interpolation every time a property
4686 : // value is needed.
4687 :
4688 : // METHODOLOGY EMPLOYED:
4689 : // Fairly straight forward--find the two concentrations between which
4690 : // the actual concentration falls and then interpolate the property
4691 : // data using standard linear interpolation. Note that data is stored
4692 : // in the format: 2dArray(Temperature,Concentration). Temperature
4693 : // data is not needed here since we are only interpolating to eliminate
4694 : // the concentration as a variable (it really isn't one during the
4695 : // simulation).
4696 :
4697 : // REFERENCES:
4698 : // GetFluidPropertiesData--subroutine forces user to input data in
4699 : // order of increasing concentration. This is assumed in this subroutine.
4700 :
4701 : // USE STATEMENTS:
4702 : // na
4703 :
4704 : // Argument array dimensioning
4705 :
4706 : // Locals
4707 : // FUNCTION ARGUMENT DEFINITIONS:
4708 :
4709 : // INTERFACE BLOCK SPECIFICATIONS:
4710 : // na
4711 :
4712 : // DERIVED TYPE DEFINITIONS:
4713 : // na
4714 :
4715 : // SUBROUTINE PARAMETER DEFINITIONS:
4716 12 : constexpr Real64 ConcToler(0.0001); // Some reasonable value for comparisons
4717 : static constexpr std::string_view RoutineName("InterpValuesForGlycolConc: ");
4718 :
4719 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
4720 : int HiIndex; // index on the high side of the concentration
4721 : Real64 InterpFrac; // intermediate value for interpolations
4722 : int LoopC; // loop counter for concentration
4723 : int LoopT; // loop counter for temperature
4724 :
4725 : // First, find where the actual concentration falls between the concentration data.
4726 : // Then, interpolate if necessary.
4727 12 : if (Concentration < RawConcData(1)) { // Concentration too low
4728 0 : ShowWarningError(state,
4729 0 : format("{}Glycol concentration out of range for data (too low), concentration = {:.3R}", RoutineName, Concentration));
4730 0 : ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input");
4731 0 : ShowContinueError(state, "Property data set to data for lowest concentration entered");
4732 0 : InterpData = RawPropData(1, _);
4733 12 : } else if (Concentration > RawConcData(NumOfConcs)) { // Concentration too high
4734 0 : ShowWarningError(state,
4735 0 : format("{}Glycol concentration out of range for data (too high), concentration = {:.3R}", RoutineName, Concentration));
4736 0 : ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input");
4737 0 : ShowContinueError(state, "Property data set to data for highest concentration entered");
4738 0 : InterpData = RawPropData(NumOfConcs, _);
4739 : } else { // Concentration somewhere between lowest and highest point--interpolate
4740 12 : HiIndex = NumOfConcs; // Default to highest concentration
4741 20 : for (LoopC = 2; LoopC <= NumOfConcs - 1; ++LoopC) {
4742 20 : if (Concentration <= RawConcData(LoopC)) {
4743 12 : HiIndex = LoopC;
4744 12 : break; // LoopC DO loop
4745 : }
4746 : }
4747 :
4748 12 : if (HiIndex == 1) {
4749 0 : for (LoopT = 1; LoopT <= NumOfTemps; ++LoopT) {
4750 0 : InterpData(LoopT) = RawPropData(HiIndex, LoopT);
4751 : }
4752 12 : } else if (std::abs(RawConcData(HiIndex) - RawConcData(HiIndex - 1)) >= ConcToler) {
4753 12 : InterpFrac = (RawConcData(HiIndex) - Concentration) / (RawConcData(HiIndex) - RawConcData(HiIndex - 1));
4754 84 : for (LoopT = 1; LoopT <= NumOfTemps; ++LoopT) {
4755 72 : if ((RawPropData(HiIndex, LoopT) < ConcToler) || (RawPropData(HiIndex - 1, LoopT) < ConcToler)) {
4756 28 : InterpData(LoopT) = 0.0;
4757 : } else {
4758 44 : InterpData(LoopT) =
4759 44 : RawPropData(HiIndex, LoopT) - (InterpFrac * (RawPropData(HiIndex, LoopT) - RawPropData(HiIndex - 1, LoopT)));
4760 : }
4761 : }
4762 : } else { // user has input data for concentrations that are too close or repeated, this must be fixed
4763 0 : ShowFatalError(state,
4764 0 : std::string{RoutineName} + "concentration values too close or data repeated, check your fluid property input data");
4765 : }
4766 : }
4767 12 : }
4768 :
4769 : //*****************************************************************************
4770 :
4771 469 : void InitializeGlycolTempLimits(EnergyPlusData &state, bool &ErrorsFound) // set to true if errors found here
4772 : {
4773 :
4774 : // SUBROUTINE INFORMATION:
4775 : // AUTHOR Linda Lawrie
4776 : // DATE WRITTEN March 2008
4777 : // MODIFIED na
4778 : // RE-ENGINEERED na
4779 :
4780 : // PURPOSE OF THIS SUBROUTINE:
4781 : // This routine sets up the min/max temperature limits for the glycol properties.
4782 : // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may
4783 : // be set up for symmetry and not be limited to just valid values.
4784 :
4785 : // METHODOLOGY EMPLOYED:
4786 : // na
4787 :
4788 : // REFERENCES:
4789 : // na
4790 :
4791 : // USE STATEMENTS:
4792 : // na
4793 :
4794 : // Locals
4795 : // SUBROUTINE ARGUMENT DEFINITIONS:
4796 :
4797 : // SUBROUTINE PARAMETER DEFINITIONS:
4798 : // na
4799 :
4800 : // INTERFACE BLOCK SPECIFICATIONS:
4801 : // na
4802 :
4803 : // DERIVED TYPE DEFINITIONS:
4804 : // na
4805 :
4806 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
4807 : int GlycolNum;
4808 : int IndexNum;
4809 : bool Failure;
4810 :
4811 966 : for (GlycolNum = 1; GlycolNum <= state.dataFluidProps->NumOfGlycols; ++GlycolNum) {
4812 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CpDataPresent) {
4813 : // check for lowest non-zero value by referencing temp data
4814 3875 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts; ++IndexNum) {
4815 3875 : if (state.dataFluidProps->GlycolData(GlycolNum).CpValues(IndexNum) <= 0.0) continue;
4816 497 : state.dataFluidProps->GlycolData(GlycolNum).CpLowTempIndex = IndexNum;
4817 497 : state.dataFluidProps->GlycolData(GlycolNum).CpLowTempValue = state.dataFluidProps->GlycolData(GlycolNum).CpTemps(IndexNum);
4818 497 : break;
4819 : }
4820 : // check for highest non-zero value by referencing temp data
4821 497 : for (IndexNum = state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts; IndexNum >= 1; --IndexNum) {
4822 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CpValues(IndexNum) <= 0.0) continue;
4823 497 : state.dataFluidProps->GlycolData(GlycolNum).CpHighTempIndex = IndexNum;
4824 497 : state.dataFluidProps->GlycolData(GlycolNum).CpHighTempValue = state.dataFluidProps->GlycolData(GlycolNum).CpTemps(IndexNum);
4825 497 : break;
4826 : }
4827 : }
4828 497 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoDataPresent) {
4829 : // check for lowest non-zero value by referencing temp data
4830 3875 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts; ++IndexNum) {
4831 3875 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoValues(IndexNum) <= 0.0) continue;
4832 497 : state.dataFluidProps->GlycolData(GlycolNum).RhoLowTempIndex = IndexNum;
4833 497 : state.dataFluidProps->GlycolData(GlycolNum).RhoLowTempValue = state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(IndexNum);
4834 497 : break;
4835 : }
4836 : // check for highest non-zero value by referencing temp data
4837 2842 : for (IndexNum = state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts; IndexNum >= 1; --IndexNum) {
4838 2842 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoValues(IndexNum) <= 0.0) continue;
4839 497 : state.dataFluidProps->GlycolData(GlycolNum).RhoHighTempIndex = IndexNum;
4840 497 : state.dataFluidProps->GlycolData(GlycolNum).RhoHighTempValue = state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(IndexNum);
4841 497 : break;
4842 : }
4843 : }
4844 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CondDataPresent) {
4845 : // check for lowest non-zero value by referencing temp data
4846 3875 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts; ++IndexNum) {
4847 3875 : if (state.dataFluidProps->GlycolData(GlycolNum).CondValues(IndexNum) <= 0.0) continue;
4848 497 : state.dataFluidProps->GlycolData(GlycolNum).CondLowTempIndex = IndexNum;
4849 497 : state.dataFluidProps->GlycolData(GlycolNum).CondLowTempValue = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(IndexNum);
4850 497 : break;
4851 : }
4852 : // check for highest non-zero value by referencing temp data
4853 2842 : for (IndexNum = state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts; IndexNum >= 1; --IndexNum) {
4854 2842 : if (state.dataFluidProps->GlycolData(GlycolNum).CondValues(IndexNum) <= 0.0) continue;
4855 497 : state.dataFluidProps->GlycolData(GlycolNum).CondHighTempIndex = IndexNum;
4856 497 : state.dataFluidProps->GlycolData(GlycolNum).CondHighTempValue = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(IndexNum);
4857 497 : break;
4858 : }
4859 : }
4860 497 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscDataPresent) {
4861 : // check for lowest non-zero value by referencing temp data
4862 3875 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts; ++IndexNum) {
4863 3875 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscValues(IndexNum) <= 0.0) continue;
4864 497 : state.dataFluidProps->GlycolData(GlycolNum).ViscLowTempIndex = IndexNum;
4865 497 : state.dataFluidProps->GlycolData(GlycolNum).ViscLowTempValue = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(IndexNum);
4866 497 : break;
4867 : }
4868 : // check for highest non-zero value by referencing temp data
4869 2842 : for (IndexNum = state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts; IndexNum >= 1; --IndexNum) {
4870 2842 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscValues(IndexNum) <= 0.0) continue;
4871 497 : state.dataFluidProps->GlycolData(GlycolNum).ViscHighTempIndex = IndexNum;
4872 497 : state.dataFluidProps->GlycolData(GlycolNum).ViscHighTempValue = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(IndexNum);
4873 497 : break;
4874 : }
4875 : }
4876 497 : Failure = false;
4877 : // Check to see that all are set to non-zero
4878 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CpDataPresent) {
4879 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CpLowTempIndex == 0) Failure = true;
4880 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CpHighTempIndex == 0) Failure = true;
4881 : }
4882 497 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoDataPresent) {
4883 497 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoLowTempIndex == 0) Failure = true;
4884 497 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoHighTempIndex == 0) Failure = true;
4885 : }
4886 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CondDataPresent) {
4887 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CondLowTempIndex == 0) Failure = true;
4888 497 : if (state.dataFluidProps->GlycolData(GlycolNum).CondHighTempIndex == 0) Failure = true;
4889 : }
4890 497 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscDataPresent) {
4891 497 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscLowTempIndex == 0) Failure = true;
4892 497 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscHighTempIndex == 0) Failure = true;
4893 : }
4894 497 : if (Failure) {
4895 0 : ShowSevereError(state,
4896 0 : "InitializeGlycolTempLimits: Required values for Glycol=" + state.dataFluidProps->GlycolData(GlycolNum).Name +
4897 : " are all zeroes for some data types.");
4898 0 : ErrorsFound = true;
4899 : }
4900 : }
4901 469 : }
4902 :
4903 : //*****************************************************************************
4904 :
4905 469 : void InitializeRefrigerantLimits(EnergyPlusData &state, bool &ErrorsFound) // set to true if errors found here
4906 : {
4907 :
4908 : // SUBROUTINE INFORMATION:
4909 : // AUTHOR Linda Lawrie
4910 : // DATE WRITTEN March 2008
4911 : // MODIFIED na
4912 : // RE-ENGINEERED na
4913 :
4914 : // PURPOSE OF THIS SUBROUTINE:
4915 : // This routine sets up the min/max limits (usually temperature and/or pressure)
4916 : // for the refrigerant properties.
4917 : // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may
4918 : // be set up for symmetry and not be limited to just valid values.
4919 :
4920 : // METHODOLOGY EMPLOYED:
4921 : // na
4922 :
4923 : // REFERENCES:
4924 : // na
4925 :
4926 : // USE STATEMENTS:
4927 : // na
4928 :
4929 : // Locals
4930 : // SUBROUTINE ARGUMENT DEFINITIONS:
4931 :
4932 : // SUBROUTINE PARAMETER DEFINITIONS:
4933 : // na
4934 :
4935 : // INTERFACE BLOCK SPECIFICATIONS:
4936 : // na
4937 :
4938 : // DERIVED TYPE DEFINITIONS:
4939 : // na
4940 :
4941 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
4942 : int RefrigNum;
4943 : int IndexNum;
4944 : bool Failure;
4945 :
4946 966 : for (RefrigNum = 1; RefrigNum <= state.dataFluidProps->NumOfRefrigerants; ++RefrigNum) {
4947 497 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints; ++IndexNum) {
4948 497 : if (state.dataFluidProps->RefrigData(RefrigNum).PsValues(IndexNum) <= 0.0) continue;
4949 497 : state.dataFluidProps->RefrigData(RefrigNum).PsLowPresIndex = IndexNum;
4950 497 : state.dataFluidProps->RefrigData(RefrigNum).PsLowPresValue = state.dataFluidProps->RefrigData(RefrigNum).PsValues(IndexNum);
4951 497 : state.dataFluidProps->RefrigData(RefrigNum).PsLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(IndexNum);
4952 497 : state.dataFluidProps->RefrigData(RefrigNum).PsLowTempIndex = IndexNum;
4953 497 : break;
4954 : }
4955 497 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints; IndexNum >= 1; --IndexNum) {
4956 497 : if (state.dataFluidProps->RefrigData(RefrigNum).PsValues(IndexNum) <= 0.0) continue;
4957 497 : state.dataFluidProps->RefrigData(RefrigNum).PsHighPresIndex = IndexNum;
4958 497 : state.dataFluidProps->RefrigData(RefrigNum).PsHighPresValue = state.dataFluidProps->RefrigData(RefrigNum).PsValues(IndexNum);
4959 497 : state.dataFluidProps->RefrigData(RefrigNum).PsHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(IndexNum);
4960 497 : state.dataFluidProps->RefrigData(RefrigNum).PsHighTempIndex = IndexNum;
4961 497 : break;
4962 : }
4963 514 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints; ++IndexNum) {
4964 514 : if (state.dataFluidProps->RefrigData(RefrigNum).HfValues(IndexNum) <= 0.0) continue;
4965 497 : state.dataFluidProps->RefrigData(RefrigNum).HfLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).HfValues(IndexNum);
4966 497 : state.dataFluidProps->RefrigData(RefrigNum).HfLowTempIndex = IndexNum;
4967 497 : break;
4968 : }
4969 497 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumHPoints; IndexNum >= 1; --IndexNum) {
4970 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfValues(IndexNum) <= 0.0) continue;
4971 497 : state.dataFluidProps->RefrigData(RefrigNum).HfHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).HfValues(IndexNum);
4972 497 : state.dataFluidProps->RefrigData(RefrigNum).HfHighTempIndex = IndexNum;
4973 497 : break;
4974 : }
4975 497 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints; ++IndexNum) {
4976 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfgValues(IndexNum) <= 0.0) continue;
4977 497 : state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).HfgValues(IndexNum);
4978 497 : state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempIndex = IndexNum;
4979 497 : break;
4980 : }
4981 497 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumHPoints; IndexNum >= 1; --IndexNum) {
4982 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfgValues(IndexNum) <= 0.0) continue;
4983 497 : state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).HfgValues(IndexNum);
4984 497 : state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempIndex = IndexNum;
4985 497 : break;
4986 : }
4987 497 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints; ++IndexNum) {
4988 497 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfValues(IndexNum) <= 0.0) continue;
4989 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).CpfValues(IndexNum);
4990 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempIndex = IndexNum;
4991 497 : break;
4992 : }
4993 518 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints; IndexNum >= 1; --IndexNum) {
4994 518 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfValues(IndexNum) <= 0.0) continue;
4995 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).CpfValues(IndexNum);
4996 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempIndex = IndexNum;
4997 497 : break;
4998 : }
4999 497 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints; ++IndexNum) {
5000 497 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(IndexNum) <= 0.0) continue;
5001 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(IndexNum);
5002 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempIndex = IndexNum;
5003 497 : break;
5004 : }
5005 518 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints; IndexNum >= 1; --IndexNum) {
5006 518 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(IndexNum) <= 0.0) continue;
5007 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(IndexNum);
5008 497 : state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempIndex = IndexNum;
5009 497 : break;
5010 : }
5011 497 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints; ++IndexNum) {
5012 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofValues(IndexNum) <= 0.0) continue;
5013 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).RhofValues(IndexNum);
5014 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempIndex = IndexNum;
5015 497 : break;
5016 : }
5017 497 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints; IndexNum >= 1; --IndexNum) {
5018 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofValues(IndexNum) <= 0.0) continue;
5019 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).RhofValues(IndexNum);
5020 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempIndex = IndexNum;
5021 497 : break;
5022 : }
5023 497 : for (IndexNum = 1; IndexNum <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints; ++IndexNum) {
5024 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(IndexNum) <= 0.0) continue;
5025 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempValue = state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(IndexNum);
5026 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempIndex = IndexNum;
5027 497 : break;
5028 : }
5029 497 : for (IndexNum = state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints; IndexNum >= 1; --IndexNum) {
5030 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(IndexNum) <= 0.0) continue;
5031 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempValue = state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(IndexNum);
5032 497 : state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempIndex = IndexNum;
5033 497 : break;
5034 : }
5035 497 : Failure = false;
5036 : // Check to see that all are set to non-zero
5037 497 : if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) {
5038 497 : if (state.dataFluidProps->RefrigData(RefrigNum).PsLowPresIndex == 0) Failure = true;
5039 497 : if (state.dataFluidProps->RefrigData(RefrigNum).PsLowTempIndex == 0) Failure = true;
5040 497 : if (state.dataFluidProps->RefrigData(RefrigNum).PsHighPresIndex == 0) Failure = true;
5041 497 : if (state.dataFluidProps->RefrigData(RefrigNum).PsHighTempIndex == 0) Failure = true;
5042 : }
5043 497 : if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) {
5044 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfLowTempIndex == 0) Failure = true;
5045 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempIndex == 0) Failure = true;
5046 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfHighTempIndex == 0) Failure = true;
5047 497 : if (state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempIndex == 0) Failure = true;
5048 : }
5049 497 : if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) {
5050 497 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempIndex == 0) Failure = true;
5051 497 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempIndex == 0) Failure = true;
5052 497 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempIndex == 0) Failure = true;
5053 497 : if (state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempIndex == 0) Failure = true;
5054 : }
5055 497 : if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) {
5056 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempIndex == 0) Failure = true;
5057 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempIndex == 0) Failure = true;
5058 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempIndex == 0) Failure = true;
5059 497 : if (state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempIndex == 0) Failure = true;
5060 : }
5061 497 : if (Failure) {
5062 0 : ShowSevereError(state,
5063 0 : "InitializeRefrigerantLimits: Required values for Refrigerant=" + state.dataFluidProps->RefrigData(RefrigNum).Name +
5064 : " are all zeroes for some data types.");
5065 0 : ErrorsFound = true;
5066 : }
5067 : }
5068 469 : }
5069 :
5070 : //*****************************************************************************
5071 :
5072 0 : void ReportAndTestGlycols(EnergyPlusData &state)
5073 : {
5074 :
5075 : // SUBROUTINE INFORMATION:
5076 : // AUTHOR Linda Lawrie
5077 : // DATE WRITTEN March 2008
5078 : // MODIFIED na
5079 : // RE-ENGINEERED na
5080 :
5081 : // PURPOSE OF THIS SUBROUTINE:
5082 : // This subroutine is written to report and test glycols through their range
5083 : // of temperatures and make sure that proper values will be returned.
5084 :
5085 : // METHODOLOGY EMPLOYED:
5086 : // Use internal structure as the temperature limits. Write output to the
5087 : // debug output file.
5088 :
5089 : // REFERENCES:
5090 : // na
5091 :
5092 : // USE STATEMENTS:
5093 : // na
5094 :
5095 : // Locals
5096 : // SUBROUTINE ARGUMENT DEFINITIONS:
5097 : // na
5098 :
5099 : // SUBROUTINE PARAMETER DEFINITIONS:
5100 0 : constexpr Real64 incr(10.0);
5101 : static constexpr std::string_view RoutineName("ReportAndTestGlycols");
5102 :
5103 : // INTERFACE BLOCK SPECIFICATIONS:
5104 : // na
5105 :
5106 : // DERIVED TYPE DEFINITIONS:
5107 : // na
5108 :
5109 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
5110 : int GlycolNum; // Loop Counter
5111 : Real64 Temperature; // Temperature to drive values
5112 : Real64 ReturnValue; // Values returned from glycol functions
5113 : int Loop; // Loop Counter
5114 : int GlycolIndex; // index used in routine / function calls, value is returned on first use (when index=0)
5115 :
5116 0 : state.dataFluidProps->GetInput = false; // input has already been gotten
5117 :
5118 0 : for (GlycolNum = 1; GlycolNum <= state.dataFluidProps->NumOfGlycols; ++GlycolNum) {
5119 0 : GlycolIndex = 0; // used in routine calls -- value is returned when first 0
5120 : // Lay out the basic values:
5121 0 : if (state.dataFluidProps->GlycolData(GlycolNum).GlycolName != "") {
5122 0 : print(state.files.debug,
5123 : "Glycol={}, Mixture fluid={}\n",
5124 0 : state.dataFluidProps->GlycolData(GlycolNum).Name,
5125 0 : state.dataFluidProps->GlycolData(GlycolNum).GlycolName);
5126 : } else {
5127 0 : print(state.files.debug, "Glycol={}\n", state.dataFluidProps->GlycolData(GlycolNum).Name);
5128 : }
5129 0 : print(state.files.debug, "Concentration:,{:.2R}\n", state.dataFluidProps->GlycolData(GlycolNum).Concentration);
5130 0 : if (state.dataFluidProps->GlycolData(GlycolNum).CpDataPresent) {
5131 0 : print(state.files.debug,
5132 : "Specific Heat Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5133 0 : state.dataFluidProps->GlycolData(GlycolNum).CpLowTempValue,
5134 0 : state.dataFluidProps->GlycolData(GlycolNum).CpLowTempIndex,
5135 0 : state.dataFluidProps->GlycolData(GlycolNum).CpHighTempValue,
5136 0 : state.dataFluidProps->GlycolData(GlycolNum).CpHighTempIndex);
5137 0 : print(state.files.debug, "{}", "Temperatures:");
5138 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts - 1; ++Loop) {
5139 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop));
5140 : }
5141 0 : print(state.files.debug,
5142 : ",{}\n",
5143 0 : state.dataFluidProps->GlycolData(GlycolNum).CpTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts));
5144 0 : print(state.files.debug, "{}", "Specific Heat:");
5145 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts - 1; ++Loop) {
5146 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CpValues(Loop));
5147 : }
5148 0 : print(state.files.debug,
5149 : ",{}\n",
5150 0 : state.dataFluidProps->GlycolData(GlycolNum).CpValues(state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts));
5151 : }
5152 0 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoDataPresent) {
5153 0 : print(state.files.debug,
5154 : "Density Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5155 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoLowTempValue,
5156 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoLowTempIndex,
5157 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoHighTempValue,
5158 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoHighTempIndex);
5159 0 : print(state.files.debug, "{}", "Temperatures:");
5160 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts - 1; ++Loop) {
5161 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop));
5162 : }
5163 0 : print(state.files.debug,
5164 : ",{}\n",
5165 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts));
5166 0 : print(state.files.debug, "{}", "Density:");
5167 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts - 1; ++Loop) {
5168 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).RhoValues(Loop));
5169 : }
5170 0 : print(state.files.debug,
5171 : ",{}\n",
5172 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts));
5173 : }
5174 0 : if (state.dataFluidProps->GlycolData(GlycolNum).CondDataPresent) {
5175 0 : print(state.files.debug,
5176 : "Conductivity Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5177 0 : state.dataFluidProps->GlycolData(GlycolNum).CondLowTempValue,
5178 0 : state.dataFluidProps->GlycolData(GlycolNum).CondLowTempIndex,
5179 0 : state.dataFluidProps->GlycolData(GlycolNum).CondHighTempValue,
5180 0 : state.dataFluidProps->GlycolData(GlycolNum).CondHighTempIndex);
5181 0 : print(state.files.debug, "{}", "Temperatures:");
5182 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts - 1; ++Loop) {
5183 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop));
5184 : }
5185 0 : print(state.files.debug,
5186 : ",{}\n",
5187 0 : state.dataFluidProps->GlycolData(GlycolNum).CondTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts));
5188 0 : print(state.files.debug, "{}", "Conductivity:");
5189 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts - 1; ++Loop) {
5190 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CondValues(Loop));
5191 : }
5192 0 : print(state.files.debug,
5193 : ",{}\n",
5194 0 : state.dataFluidProps->GlycolData(GlycolNum).CondValues(state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts));
5195 : }
5196 0 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscDataPresent) {
5197 0 : print(state.files.debug,
5198 : "Viscosity Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5199 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscLowTempValue,
5200 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscLowTempIndex,
5201 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscHighTempValue,
5202 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscHighTempIndex);
5203 0 : print(state.files.debug, "{}", "Temperatures:");
5204 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts - 1; ++Loop) {
5205 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop));
5206 : }
5207 0 : print(state.files.debug,
5208 : ",{}\n",
5209 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts));
5210 0 : print(state.files.debug, "{}", "Viscosity:");
5211 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts - 1; ++Loop) {
5212 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).ViscValues(Loop));
5213 : }
5214 0 : print(state.files.debug,
5215 : ",{}\n",
5216 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscValues(state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts));
5217 : }
5218 : // ============================================
5219 : // Glycol Results, using out of bounds to out of bounds values in calling
5220 : // ============================================
5221 :
5222 : // ========= Specific Heat from Temperatures
5223 0 : print(state.files.debug, "Glycol={} **** Results ****\n", state.dataFluidProps->GlycolData(GlycolNum).Name);
5224 0 : if (state.dataFluidProps->GlycolData(GlycolNum).CpDataPresent) {
5225 0 : print(state.files.debug, "Specific Heat Results at Temperatures:");
5226 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CpTemps(1) - incr);
5227 :
5228 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts - 1; ++Loop) {
5229 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop));
5230 0 : Temperature =
5231 0 : state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop) +
5232 0 : (state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop + 1) - state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop)) /
5233 : 2.0;
5234 0 : print(state.files.debug, ",{:.2R}", Temperature);
5235 : }
5236 0 : print(state.files.debug,
5237 : ",{:.2R}",
5238 0 : state.dataFluidProps->GlycolData(GlycolNum).CpTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts));
5239 0 : print(state.files.debug,
5240 : ",{:.2R}\n",
5241 0 : state.dataFluidProps->GlycolData(GlycolNum).CpTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts) + incr);
5242 0 : print(state.files.debug, "Specific Heat:");
5243 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CpTemps(1) - incr;
5244 0 : ReturnValue = GetSpecificHeatGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5245 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5246 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts - 1; ++Loop) {
5247 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop);
5248 0 : ReturnValue =
5249 0 : GetSpecificHeatGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5250 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5251 0 : Temperature =
5252 0 : state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop) +
5253 0 : (state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop + 1) - state.dataFluidProps->GlycolData(GlycolNum).CpTemps(Loop)) /
5254 : 2.0;
5255 0 : ReturnValue =
5256 0 : GetSpecificHeatGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5257 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5258 : }
5259 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CpTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts);
5260 0 : ReturnValue = GetSpecificHeatGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5261 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5262 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CpTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCpTempPts) + incr;
5263 0 : ReturnValue = GetSpecificHeatGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5264 0 : print(state.files.debug, ",{:.2R}\n", ReturnValue);
5265 : }
5266 :
5267 : // ========= Density from Temperatures
5268 0 : if (state.dataFluidProps->GlycolData(GlycolNum).RhoDataPresent) {
5269 0 : print(state.files.debug, "Density Results at Temperatures:");
5270 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(1) - incr);
5271 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts - 1; ++Loop) {
5272 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop));
5273 0 : Temperature =
5274 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop) + (state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop + 1) -
5275 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop)) /
5276 : 2.0;
5277 0 : print(state.files.debug, ",{:.2R}", Temperature);
5278 : }
5279 0 : print(state.files.debug,
5280 : ",{}",
5281 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts));
5282 0 : print(state.files.debug,
5283 : ",{:.2R}\n",
5284 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts) + incr);
5285 0 : print(state.files.debug, "Density:");
5286 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(1) - incr;
5287 0 : ReturnValue = GetDensityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5288 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5289 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts - 1; ++Loop) {
5290 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop);
5291 0 : ReturnValue = GetDensityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5292 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5293 0 : Temperature =
5294 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop) + (state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop + 1) -
5295 0 : state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(Loop)) /
5296 : 2.0;
5297 0 : ReturnValue = GetDensityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5298 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5299 : }
5300 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts);
5301 0 : ReturnValue = GetDensityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5302 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5303 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).RhoTemps(state.dataFluidProps->GlycolData(GlycolNum).NumRhoTempPts) + incr;
5304 0 : ReturnValue = GetDensityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5305 0 : print(state.files.debug, ",{:.3R}\n", ReturnValue);
5306 : }
5307 :
5308 : // ========= Conductivity from Temperatures
5309 0 : if (state.dataFluidProps->GlycolData(GlycolNum).CondDataPresent) {
5310 0 : print(state.files.debug, "Conductivity Results at Temperatures:");
5311 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CondTemps(1) - incr);
5312 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts - 1; ++Loop) {
5313 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop));
5314 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop) +
5315 0 : (state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop + 1) -
5316 0 : state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop)) /
5317 : 2.0;
5318 0 : print(state.files.debug, ",{:.2R}", Temperature);
5319 : }
5320 0 : print(state.files.debug,
5321 : ",{:.2R}",
5322 0 : state.dataFluidProps->GlycolData(GlycolNum).CondTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts));
5323 0 : print(state.files.debug,
5324 : ",{:.2R}\n",
5325 0 : state.dataFluidProps->GlycolData(GlycolNum).CondTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts) + incr);
5326 0 : print(state.files.debug, "Conductivity:");
5327 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(1) - incr;
5328 0 : ReturnValue = GetConductivityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5329 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5330 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts - 1; ++Loop) {
5331 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop);
5332 0 : ReturnValue =
5333 0 : GetConductivityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5334 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5335 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop) +
5336 0 : (state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop + 1) -
5337 0 : state.dataFluidProps->GlycolData(GlycolNum).CondTemps(Loop)) /
5338 : 2.0;
5339 0 : ReturnValue =
5340 0 : GetConductivityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5341 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5342 : }
5343 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).CondTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts);
5344 0 : ReturnValue = GetConductivityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5345 0 : print(state.files.debug, ",{:.3R}", ReturnValue);
5346 0 : Temperature =
5347 0 : state.dataFluidProps->GlycolData(GlycolNum).CondTemps(state.dataFluidProps->GlycolData(GlycolNum).NumCondTempPts) + incr;
5348 0 : ReturnValue = GetConductivityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5349 0 : print(state.files.debug, ",{:.3R}\n", ReturnValue);
5350 : }
5351 :
5352 : // ========= Viscosity from Temperatures
5353 0 : if (state.dataFluidProps->GlycolData(GlycolNum).ViscDataPresent) {
5354 0 : print(state.files.debug, "Viscosity Results at Temperatures:");
5355 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(1) - incr);
5356 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts - 1; ++Loop) {
5357 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop));
5358 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop) +
5359 0 : (state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop + 1) -
5360 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop)) /
5361 : 2.0;
5362 0 : print(state.files.debug, ",{:.2R}", Temperature);
5363 : }
5364 0 : print(state.files.debug,
5365 : ",{:.2R}",
5366 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts));
5367 0 : print(state.files.debug,
5368 : ",{:.2R}\n",
5369 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts) + incr);
5370 0 : print(state.files.debug, "Viscosity:");
5371 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(1) - incr;
5372 0 : ReturnValue = GetViscosityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5373 0 : print(state.files.debug, ",{:.4R}", ReturnValue);
5374 0 : for (Loop = 1; Loop <= state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts - 1; ++Loop) {
5375 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop);
5376 0 : ReturnValue = GetViscosityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5377 0 : print(state.files.debug, ",{:.4R}", ReturnValue);
5378 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop) +
5379 0 : (state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop + 1) -
5380 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(Loop)) /
5381 : 2.0;
5382 0 : ReturnValue = GetViscosityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5383 0 : print(state.files.debug, ",{:.4R}", ReturnValue);
5384 : }
5385 0 : Temperature = state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts);
5386 0 : ReturnValue = GetViscosityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5387 0 : print(state.files.debug, ",{:.4R}", ReturnValue);
5388 0 : Temperature =
5389 0 : state.dataFluidProps->GlycolData(GlycolNum).ViscTemps(state.dataFluidProps->GlycolData(GlycolNum).NumViscTempPts) + incr;
5390 0 : ReturnValue = GetViscosityGlycol(state, state.dataFluidProps->GlycolData(GlycolNum).Name, Temperature, GlycolIndex, RoutineName);
5391 0 : print(state.files.debug, ",{:.4R}\n", ReturnValue);
5392 : }
5393 : }
5394 0 : }
5395 :
5396 : //*****************************************************************************
5397 :
5398 0 : void ReportAndTestRefrigerants(EnergyPlusData &state)
5399 : {
5400 :
5401 : // SUBROUTINE INFORMATION:
5402 : // AUTHOR Linda Lawrie
5403 : // DATE WRITTEN March 2008; only stub provided to satisfy calling programs.
5404 : // MODIFIED na
5405 : // RE-ENGINEERED na
5406 :
5407 : // PURPOSE OF THIS SUBROUTINE:
5408 : // This subroutine is written to report and test refrigerants through their range
5409 : // of inputs (temperatures?) and make sure that proper values will be returned.
5410 :
5411 : // METHODOLOGY EMPLOYED:
5412 : // Use internal structure as the range limits. Write output to the
5413 : // debug output file.
5414 :
5415 : // REFERENCES:
5416 : // na
5417 :
5418 : // USE STATEMENTS:
5419 : // na
5420 :
5421 : // Locals
5422 : // SUBROUTINE ARGUMENT DEFINITIONS:
5423 : // na
5424 :
5425 : // SUBROUTINE PARAMETER DEFINITIONS:
5426 0 : constexpr Real64 incr(10.0);
5427 0 : constexpr Real64 Quality(1.0);
5428 : static constexpr std::string_view RoutineName("ReportAndTestRefrigerants");
5429 :
5430 : // INTERFACE BLOCK SPECIFICATIONS:
5431 : // na
5432 :
5433 : // DERIVED TYPE DEFINITIONS:
5434 : // na
5435 :
5436 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
5437 : int RefrigNum; // Loop Counter
5438 : Real64 Temperature; // Temperature to drive values
5439 : Real64 ReturnValue; // Values returned from refrigerant functions
5440 : int Loop; // Loop Counter
5441 : int Loop1; // Loop Counter
5442 : int RefrigIndex;
5443 :
5444 0 : state.dataFluidProps->GetInput = false; // input has already been gotten
5445 :
5446 0 : for (RefrigNum = 1; RefrigNum <= state.dataFluidProps->NumOfRefrigerants; ++RefrigNum) {
5447 0 : RefrigIndex = 0; // used in routine calls -- value is returned when first 0
5448 : // Lay out the basic values:
5449 0 : if (!state.dataFluidProps->RefrigData(RefrigNum).Name.empty()) {
5450 0 : print(state.files.debug, "Refrigerant={}", state.dataFluidProps->RefrigData(RefrigNum).Name);
5451 : }
5452 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) {
5453 0 : print(state.files.debug,
5454 : "Saturation Pressures Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5455 0 : state.dataFluidProps->RefrigData(RefrigNum).PsLowTempValue,
5456 0 : state.dataFluidProps->RefrigData(RefrigNum).PsLowTempIndex,
5457 0 : state.dataFluidProps->RefrigData(RefrigNum).PsHighTempValue,
5458 0 : state.dataFluidProps->RefrigData(RefrigNum).PsHighTempIndex);
5459 0 : print(state.files.debug, "Temperatures:");
5460 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) {
5461 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop));
5462 : }
5463 0 : print(state.files.debug,
5464 : ",{:.2R}\n",
5465 0 : state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints));
5466 0 : print(state.files.debug, "Saturation Pressure:");
5467 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) {
5468 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsValues(Loop));
5469 : }
5470 0 : print(state.files.debug,
5471 : ",{:.2R}\n",
5472 0 : state.dataFluidProps->RefrigData(RefrigNum).PsValues(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints));
5473 : }
5474 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) {
5475 0 : print(state.files.debug,
5476 : "Enthalpy Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5477 0 : state.dataFluidProps->RefrigData(RefrigNum).HfLowTempValue,
5478 0 : state.dataFluidProps->RefrigData(RefrigNum).HfLowTempIndex,
5479 0 : state.dataFluidProps->RefrigData(RefrigNum).HfHighTempValue,
5480 0 : state.dataFluidProps->RefrigData(RefrigNum).HfHighTempIndex);
5481 0 : print(state.files.debug, "Temperatures:");
5482 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) {
5483 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop));
5484 : }
5485 0 : print(state.files.debug,
5486 : ",{:.2R}\n",
5487 0 : state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints));
5488 0 : print(state.files.debug, "Enthalpy Saturated Fluid:");
5489 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) {
5490 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HfValues(Loop));
5491 : }
5492 0 : print(state.files.debug,
5493 : ",{:.2R}\n",
5494 0 : state.dataFluidProps->RefrigData(RefrigNum).HfValues(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints));
5495 0 : print(state.files.debug,
5496 : "Enthalpy Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5497 0 : state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempValue,
5498 0 : state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempIndex,
5499 0 : state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempValue,
5500 0 : state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempIndex);
5501 :
5502 0 : print(state.files.debug, "Temperatures:");
5503 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) {
5504 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop));
5505 : }
5506 0 : print(state.files.debug,
5507 : ",{:.2R}\n",
5508 0 : state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints));
5509 0 : print(state.files.debug, "Enthalpy Saturated Fluid/Gas:");
5510 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) {
5511 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HfgValues(Loop));
5512 : }
5513 0 : print(state.files.debug,
5514 : ",{:.2R}\n",
5515 0 : state.dataFluidProps->RefrigData(RefrigNum).HfgValues(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints));
5516 : }
5517 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) {
5518 0 : print(state.files.debug,
5519 : "Specific Heat Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5520 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempValue,
5521 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempIndex,
5522 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempValue,
5523 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempIndex);
5524 0 : print(state.files.debug, "Temperatures:");
5525 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) {
5526 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop));
5527 : }
5528 0 : print(state.files.debug,
5529 : ",{:.2R}\n",
5530 0 : state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints));
5531 0 : print(state.files.debug, "Specific Heat Saturated Fluid:");
5532 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) {
5533 0 : print(state.files.debug, ",{:.2R}\n", state.dataFluidProps->RefrigData(RefrigNum).CpfValues(Loop));
5534 : }
5535 0 : print(state.files.debug,
5536 : ",{:.2R}",
5537 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfValues(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints));
5538 0 : print(state.files.debug,
5539 : "Specific Heat Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5540 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempValue,
5541 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempIndex,
5542 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempValue,
5543 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempIndex);
5544 0 : print(state.files.debug, "Temperatures:");
5545 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) {
5546 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop));
5547 : }
5548 0 : print(state.files.debug,
5549 : ",{:.2R}\n",
5550 0 : state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints));
5551 0 : print(state.files.debug, "Specific Heat Saturated Fluid/Gas:");
5552 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) {
5553 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(Loop));
5554 : }
5555 0 : print(state.files.debug,
5556 : ",{:.2R}\n",
5557 0 : state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints));
5558 : }
5559 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) {
5560 0 : print(state.files.debug,
5561 : "Density Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5562 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempValue,
5563 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempIndex,
5564 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempValue,
5565 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempIndex);
5566 0 : print(state.files.debug, "Temperatures:");
5567 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) {
5568 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop));
5569 : }
5570 0 : print(state.files.debug,
5571 : ",{:.2R}",
5572 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints));
5573 0 : print(state.files.debug, "Density Saturated Fluid:");
5574 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) {
5575 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhofValues(Loop));
5576 : }
5577 0 : print(state.files.debug,
5578 : ",{:.2R}",
5579 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofValues(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints));
5580 0 : print(state.files.debug,
5581 : "Density Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n",
5582 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempValue,
5583 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempIndex,
5584 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempValue,
5585 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempIndex);
5586 0 : print(state.files.debug, "Temperatures:");
5587 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) {
5588 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop));
5589 : }
5590 0 : print(state.files.debug,
5591 : ",{:.2R}\n",
5592 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints));
5593 0 : print(state.files.debug, "Density Saturated Fluid/Gas:");
5594 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) {
5595 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(Loop));
5596 : }
5597 0 : print(state.files.debug,
5598 : ",{:.2R}\n",
5599 0 : state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints));
5600 : }
5601 :
5602 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts > 0 && state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts > 0) {
5603 0 : print(state.files.debug,
5604 : "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n",
5605 0 : state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts,
5606 0 : state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts);
5607 0 : print(state.files.debug, "Superheated Temperatures:");
5608 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop) {
5609 0 : print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop));
5610 : }
5611 0 : print(state.files.debug,
5612 : ",{:.3R}\n",
5613 0 : state.dataFluidProps->RefrigData(RefrigNum).SHTemps(state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts));
5614 0 : print(state.files.debug, "Superheated Pressures:");
5615 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop) {
5616 0 : print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop));
5617 : }
5618 0 : print(state.files.debug,
5619 : ",{:.3R}\n",
5620 0 : state.dataFluidProps->RefrigData(RefrigNum).SHPress(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts));
5621 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) {
5622 0 : print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop));
5623 0 : print(state.files.debug, "Enthalpy Superheated Gas:");
5624 0 : for (Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) {
5625 0 : print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop, Loop1));
5626 : }
5627 0 : print(state.files.debug,
5628 : ",{:.3R}\n",
5629 0 : state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop, state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts));
5630 : }
5631 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) {
5632 0 : print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop));
5633 0 : print(state.files.debug, "Density Superheated Gas:");
5634 0 : for (Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) {
5635 0 : print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop, Loop1));
5636 : }
5637 0 : print(state.files.debug,
5638 : ",{:.3R}\n",
5639 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop, state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts));
5640 : }
5641 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) {
5642 0 : print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop));
5643 0 : print(state.files.debug, "Enthalpy Superheated Gas:");
5644 0 : for (Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) {
5645 0 : print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop1, Loop));
5646 : }
5647 0 : print(state.files.debug,
5648 : ",{:.3R}\n",
5649 0 : state.dataFluidProps->RefrigData(RefrigNum).HshValues(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts, Loop));
5650 : }
5651 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) {
5652 0 : print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop));
5653 0 : print(state.files.debug, "Density Superheated Gas:");
5654 0 : for (Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) {
5655 0 : print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop1, Loop));
5656 : }
5657 0 : print(
5658 : state.files.debug,
5659 : ",{:.3R}\n",
5660 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts, Loop));
5661 : }
5662 : }
5663 :
5664 : // ============================================
5665 : // Refrigeration Results, using out of bounds to out of bounds values in calling
5666 : // ============================================
5667 :
5668 : // ========= Pressure from Temperatures
5669 0 : print(state.files.debug, "Refrigerant={} **** Results ****\n", state.dataFluidProps->RefrigData(RefrigNum).Name);
5670 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) {
5671 0 : print(state.files.debug, "Pressure Results at Temperatures:");
5672 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(1) - incr);
5673 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) {
5674 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop));
5675 0 : Temperature =
5676 0 : state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop) +
5677 0 : (state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)) /
5678 : 2.0;
5679 0 : print(state.files.debug, ",{:.2R}", Temperature);
5680 : }
5681 0 : print(state.files.debug,
5682 : ",{:.2R}",
5683 0 : state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints));
5684 0 : print(state.files.debug,
5685 : ",{:.2R}\n",
5686 0 : state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints) + incr);
5687 0 : print(state.files.debug, "Saturated Pressures:");
5688 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(1) - incr;
5689 0 : ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName);
5690 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5691 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) {
5692 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop);
5693 0 : ReturnValue =
5694 0 : GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName);
5695 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5696 0 : Temperature =
5697 0 : state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop) +
5698 0 : (state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)) /
5699 : 2.0;
5700 0 : ReturnValue =
5701 0 : GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName);
5702 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5703 : }
5704 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints);
5705 0 : ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName);
5706 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5707 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints) + incr;
5708 0 : ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName);
5709 0 : print(state.files.debug, ",{:.2R}\n", ReturnValue);
5710 : }
5711 :
5712 : // ========= Enthalpy from Temperatures
5713 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) {
5714 0 : print(state.files.debug, "Enthalpy Results at Temperatures:");
5715 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(1) - incr);
5716 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) {
5717 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop));
5718 0 : Temperature =
5719 0 : state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop) +
5720 0 : (state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)) /
5721 : 2.0;
5722 0 : print(state.files.debug, ",{:.2R}", Temperature);
5723 : }
5724 0 : print(state.files.debug,
5725 : ",{:.2R}",
5726 0 : state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints));
5727 0 : print(state.files.debug,
5728 : ",{:.2R}\n",
5729 0 : state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints) + incr);
5730 0 : print(state.files.debug, "Saturated Enthalpy:");
5731 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(1) - incr;
5732 0 : ReturnValue =
5733 0 : GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5734 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5735 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) {
5736 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop);
5737 0 : ReturnValue =
5738 0 : GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5739 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5740 0 : Temperature =
5741 0 : state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop) +
5742 0 : (state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)) /
5743 : 2.0;
5744 0 : ReturnValue =
5745 0 : GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5746 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5747 : }
5748 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints);
5749 0 : ReturnValue =
5750 0 : GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5751 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5752 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints) + incr;
5753 0 : ReturnValue =
5754 0 : GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5755 0 : print(state.files.debug, ",{:.2R}\n", ReturnValue);
5756 : }
5757 :
5758 : // ========= Specific Heat from Temperatures
5759 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) {
5760 0 : print(state.files.debug, "Specific Heat Results at Temperatures:");
5761 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(1) - incr);
5762 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) {
5763 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop));
5764 0 : Temperature =
5765 0 : state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop) +
5766 0 : (state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)) /
5767 : 2.0;
5768 0 : print(state.files.debug, ",{:.2R}", Temperature);
5769 : }
5770 0 : print(state.files.debug,
5771 : ",{:.2R}",
5772 0 : state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints));
5773 0 : print(state.files.debug,
5774 : ",{:.2R}\n",
5775 0 : state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints) + incr);
5776 0 : print(state.files.debug, "Saturated Specific Heat:");
5777 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(1) - incr;
5778 0 : ReturnValue =
5779 0 : GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5780 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5781 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) {
5782 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop);
5783 0 : ReturnValue = GetSatSpecificHeatRefrig(
5784 0 : state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5785 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5786 0 : Temperature =
5787 0 : state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop) +
5788 0 : (state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)) /
5789 : 2.0;
5790 0 : ReturnValue = GetSatSpecificHeatRefrig(
5791 0 : state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5792 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5793 : }
5794 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints);
5795 0 : ReturnValue =
5796 0 : GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5797 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5798 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints) + incr;
5799 0 : ReturnValue =
5800 0 : GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5801 0 : print(state.files.debug, ",{:.2R}\n", ReturnValue);
5802 : }
5803 :
5804 : // ========= Density from Temperatures
5805 0 : if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) {
5806 0 : print(state.files.debug, "Density Results at Temperatures:");
5807 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(1) - incr);
5808 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) {
5809 0 : print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop));
5810 0 : Temperature =
5811 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop + 1) -
5812 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)) /
5813 : 2.0;
5814 0 : print(state.files.debug, ",{:.2R}", Temperature);
5815 : }
5816 0 : print(state.files.debug,
5817 : ",{:.2R}",
5818 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints));
5819 0 : print(state.files.debug,
5820 : ",{:.2R}\n",
5821 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints) + incr);
5822 0 : print(state.files.debug, "Saturated Density:");
5823 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(1) - incr;
5824 0 : ReturnValue =
5825 0 : GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5826 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5827 0 : for (Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) {
5828 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop);
5829 0 : ReturnValue =
5830 0 : GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5831 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5832 0 : Temperature =
5833 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop + 1) -
5834 0 : state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)) /
5835 : 2.0;
5836 0 : ReturnValue =
5837 0 : GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5838 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5839 : }
5840 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints);
5841 0 : ReturnValue =
5842 0 : GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5843 0 : print(state.files.debug, ",{:.2R}", ReturnValue);
5844 0 : Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints) + incr;
5845 0 : ReturnValue =
5846 0 : GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName);
5847 0 : print(state.files.debug, ",{:.2R}\n", ReturnValue);
5848 : }
5849 : }
5850 0 : }
5851 :
5852 : //*****************************************************************************
5853 :
5854 35664855 : Real64 GetSatPressureRefrig(EnergyPlusData &state,
5855 : std::string_view const Refrigerant, // carries in substance name
5856 : Real64 const Temperature, // actual temperature given as input
5857 : int &RefrigIndex, // Index to Refrigerant Properties
5858 : std::string_view const CalledFrom // routine this function was called from (error messages)
5859 : )
5860 : {
5861 :
5862 : // SUBROUTINE INFORMATION:
5863 : // AUTHOR Simon Rees
5864 : // DATE WRITTEN 24 May 2002
5865 : // MODIFIED na
5866 : // RE-ENGINEERED na
5867 :
5868 : // PURPOSE OF THIS FUNCTION:
5869 : // This finds the saturation pressure for given temperature.
5870 :
5871 : // METHODOLOGY EMPLOYED:
5872 : // Calls FindArrayIndex to find indices either side of requested temperature
5873 : // and linearly interpolates the corresponding saturation pressure values.
5874 :
5875 : // REFERENCES:
5876 : // na
5877 :
5878 : // USE STATEMENTS:
5879 : // na
5880 :
5881 : // Return value
5882 : Real64 ReturnValue;
5883 :
5884 : // Locals
5885 : // FUNCTION ARGUMENT DEFINITIONS:
5886 :
5887 : // FUNCTION PARAMETER DEFINITIONS:
5888 : static constexpr std::string_view RoutineName("GetSatPressureRefrig: ");
5889 :
5890 : // INTERFACE BLOCK SPECIFICATIONS:
5891 : // na
5892 :
5893 : // DERIVED TYPE DEFINITIONS:
5894 : // na
5895 :
5896 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
5897 : int HiTempIndex; // index value of next highest Temperature from table
5898 : int LoTempIndex; // index value of next lowest Temperature from table
5899 : int RefrigNum; // index for refrigerant under consideration
5900 : Real64 TempInterpRatio; // ratio to interpolate in temperature domain
5901 : // error counters and dummy string
5902 : bool ErrorFlag; // error flag for current call
5903 :
5904 35664855 : if (state.dataFluidProps->GetInput) {
5905 2 : GetFluidPropertiesData(state);
5906 2 : state.dataFluidProps->GetInput = false;
5907 : }
5908 :
5909 35664855 : RefrigNum = 0;
5910 35664855 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
5911 0 : ReportFatalRefrigerantErrors(
5912 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom);
5913 : }
5914 :
5915 35664855 : ErrorFlag = false;
5916 :
5917 35664855 : if (RefrigIndex > 0) {
5918 35664847 : RefrigNum = RefrigIndex;
5919 : } else {
5920 : // Find which refrigerant (index) is being requested
5921 8 : RefrigNum = FindRefrigerant(state, Refrigerant);
5922 8 : if (RefrigNum == 0) {
5923 0 : ReportFatalRefrigerantErrors(
5924 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom);
5925 : }
5926 8 : RefrigIndex = RefrigNum;
5927 : }
5928 35664855 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
5929 :
5930 : // determine array indices for
5931 35664855 : LoTempIndex = FindArrayIndex(Temperature, refrig.PsTemps, refrig.PsLowTempIndex, refrig.PsHighTempIndex);
5932 35664855 : HiTempIndex = LoTempIndex + 1;
5933 :
5934 : // check for out of data bounds problems
5935 35664855 : if (LoTempIndex == 0) {
5936 0 : ReturnValue = refrig.PsValues(refrig.PsLowTempIndex);
5937 0 : ErrorFlag = true;
5938 35664855 : } else if (HiTempIndex > refrig.PsHighTempIndex) {
5939 0 : ReturnValue = refrig.PsValues(refrig.PsHighTempIndex);
5940 0 : ErrorFlag = true;
5941 : } else {
5942 : // find interpolation ratio w.r.t temperature
5943 35664855 : TempInterpRatio = (Temperature - refrig.PsTemps(LoTempIndex)) / (refrig.PsTemps(HiTempIndex) - refrig.PsTemps(LoTempIndex));
5944 :
5945 : // apply final linear interpolation
5946 35664855 : ReturnValue = refrig.PsValues(LoTempIndex) + TempInterpRatio * (refrig.PsValues(HiTempIndex) - refrig.PsValues(LoTempIndex));
5947 : }
5948 :
5949 35664855 : if (!state.dataGlobal->WarmupFlag && ErrorFlag) {
5950 0 : ++state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempErrCount;
5951 : // send warning
5952 0 : if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) {
5953 0 : ShowSevereMessage(state,
5954 0 : std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" +
5955 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **");
5956 0 : ShowContinueError(state,
5957 0 : format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]",
5958 : CalledFrom,
5959 0 : refrig.PsTemps(refrig.PsLowTempIndex),
5960 0 : refrig.PsTemps(refrig.PsHighTempIndex)));
5961 0 : ShowContinueError(
5962 0 : state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated pressure value = {:.0R}", Temperature, ReturnValue));
5963 0 : ShowContinueErrorTimeStamp(state, "");
5964 : }
5965 0 : ShowRecurringSevereErrorAtEnd(state,
5966 0 : std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" +
5967 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **",
5968 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempErrIndex,
5969 : Temperature,
5970 : Temperature,
5971 : _,
5972 : "{C}",
5973 : "{C}");
5974 : }
5975 :
5976 35664855 : return ReturnValue;
5977 : }
5978 :
5979 : //*****************************************************************************
5980 :
5981 6411007 : Real64 GetSatTemperatureRefrig(EnergyPlusData &state,
5982 : std::string_view const Refrigerant, // carries in substance name
5983 : Real64 const Pressure, // actual temperature given as input
5984 : int &RefrigIndex, // Index to Refrigerant Properties
5985 : std::string_view const CalledFrom // routine this function was called from (error messages)
5986 : )
5987 : {
5988 :
5989 : // SUBROUTINE INFORMATION:
5990 : // AUTHOR Simon Rees
5991 : // DATE WRITTEN 24 May 2002
5992 : // MODIFIED na
5993 : // RE-ENGINEERED na
5994 :
5995 : // PURPOSE OF THIS FUNCTION:
5996 : // This finds the saturation temperature for given pressure.
5997 :
5998 : // METHODOLOGY EMPLOYED:
5999 : // Calls FindArrayIndex to find indices either side of requested pressure
6000 : // and linearly interpolates the corresponding saturation temperature values.
6001 :
6002 : // REFERENCES:
6003 : // na
6004 :
6005 : // USE STATEMENTS:
6006 : // na
6007 :
6008 : // Return value
6009 : Real64 ReturnValue;
6010 :
6011 : // Locals
6012 : // FUNCTION ARGUMENT DEFINITIONS:
6013 :
6014 : // FUNCTION PARAMETER DEFINITIONS:
6015 : static constexpr std::string_view RoutineName("GetSatTemperatureRefrig: ");
6016 :
6017 : // INTERFACE BLOCK SPECIFICATIONS:
6018 : // na
6019 :
6020 : // DERIVED TYPE DEFINITIONS:
6021 : // na
6022 :
6023 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
6024 : int HiPresIndex; // index value of next highest Temperature from table
6025 : int LoPresIndex; // index value of next lowest Temperature from table
6026 : int RefrigNum; // index for refrigerant under consideration
6027 : Real64 PresInterpRatio; // ratio to interpolate in temperature domain
6028 : // error counters and dummy string
6029 : bool ErrorFlag; // error flag for current call
6030 :
6031 6411007 : if (state.dataFluidProps->GetInput) {
6032 0 : GetFluidPropertiesData(state);
6033 0 : state.dataFluidProps->GetInput = false;
6034 : }
6035 :
6036 6411007 : RefrigNum = 0;
6037 6411007 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
6038 0 : ReportFatalRefrigerantErrors(
6039 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatTemperatureRefrig", "properties", CalledFrom);
6040 : }
6041 :
6042 6411007 : ErrorFlag = false;
6043 :
6044 6411007 : if (RefrigIndex > 0) {
6045 6411007 : RefrigNum = RefrigIndex;
6046 : } else {
6047 : // Find which refrigerant (index) is being requested
6048 0 : RefrigNum = FindRefrigerant(state, Refrigerant);
6049 0 : if (RefrigNum == 0) {
6050 0 : ReportFatalRefrigerantErrors(state,
6051 0 : state.dataFluidProps->NumOfRefrigerants,
6052 : RefrigNum,
6053 : true,
6054 : Refrigerant,
6055 : "GetSatTemperatureRefrig",
6056 : "properties",
6057 0 : CalledFrom);
6058 : }
6059 0 : RefrigIndex = RefrigNum;
6060 : }
6061 6411007 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
6062 :
6063 : // get the array indices
6064 6411007 : LoPresIndex = FindArrayIndex(Pressure, refrig.PsValues, refrig.PsLowPresIndex, refrig.PsHighPresIndex);
6065 6411007 : HiPresIndex = LoPresIndex + 1;
6066 :
6067 : // check for out of data bounds problems
6068 6411007 : if (LoPresIndex == 0) {
6069 0 : ReturnValue = refrig.PsTemps(refrig.PsLowPresIndex);
6070 0 : ErrorFlag = true;
6071 6411007 : } else if (HiPresIndex > refrig.PsHighPresIndex) {
6072 0 : ReturnValue = refrig.PsTemps(refrig.PsHighPresIndex);
6073 0 : ErrorFlag = true;
6074 : } else {
6075 : // find interpolation ratio w.r.t temperature
6076 6411007 : PresInterpRatio = (Pressure - refrig.PsValues(LoPresIndex)) / (refrig.PsValues(HiPresIndex) - refrig.PsValues(LoPresIndex));
6077 :
6078 : // apply final linear interpolation
6079 6411007 : ReturnValue = refrig.PsTemps(LoPresIndex) + PresInterpRatio * (refrig.PsTemps(HiPresIndex) - refrig.PsTemps(LoPresIndex));
6080 : }
6081 :
6082 6411007 : if (!state.dataGlobal->WarmupFlag && ErrorFlag) {
6083 0 : ++state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatPressErrCount;
6084 : // send warning
6085 0 : if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatPressErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) {
6086 0 : ShowSevereMessage(state,
6087 0 : std::string{RoutineName} + "Saturation pressure is out of range for refrigerant [" +
6088 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **");
6089 0 : ShowContinueError(state,
6090 0 : format("...Called From:{}, supplied data range=[{:.0R},{:.0R}]",
6091 : CalledFrom,
6092 0 : refrig.PsValues(refrig.PsLowPresIndex),
6093 0 : refrig.PsValues(refrig.PsHighPresIndex)));
6094 0 : ShowContinueError(
6095 0 : state, format("...Supplied Refrigerant Pressure={:.0R} Returned saturated temperature value ={:.2R}", Pressure, ReturnValue));
6096 0 : ShowContinueErrorTimeStamp(state, "");
6097 : }
6098 0 : ShowRecurringSevereErrorAtEnd(state,
6099 0 : std::string{RoutineName} + "Saturation pressure is out of range for refrigerant [" +
6100 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **",
6101 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatPressErrIndex,
6102 : Pressure,
6103 : Pressure,
6104 : _,
6105 : "{Pa}",
6106 : "{Pa}");
6107 : }
6108 6411007 : return ReturnValue;
6109 : }
6110 :
6111 : //*****************************************************************************
6112 :
6113 119091582 : Real64 GetSatEnthalpyRefrig(EnergyPlusData &state,
6114 : std::string_view const Refrigerant, // carries in substance name
6115 : Real64 const Temperature, // actual temperature given as input
6116 : Real64 const Quality, // actual quality given as input
6117 : int &RefrigIndex, // Index to Refrigerant Properties
6118 : std::string_view const CalledFrom // routine this function was called from (error messages)
6119 : )
6120 : {
6121 :
6122 : // SUBROUTINE INFORMATION:
6123 : // AUTHOR Mike Turner
6124 : // DATE WRITTEN 10 December 99
6125 : // MODIFIED Rick Strand (April 2000, May 2000)
6126 : // Simon Rees (May 2002)
6127 : // RE-ENGINEERED na
6128 :
6129 : // PURPOSE OF THIS FUNCTION:
6130 : // This finds enthalpy for given temperature and a quality under the vapor dome.
6131 : // This fucntion is only called with a valid refrigerant and quality between 0 and 1.
6132 :
6133 : // METHODOLOGY EMPLOYED:
6134 : // Calls GetInterpolatedSatProp to linearly interpolate between the saturated
6135 : // liquid and vapour enthalpies according to the given quality.
6136 :
6137 : // REFERENCES:
6138 : // na
6139 :
6140 : // USE STATEMENTS:
6141 : // na
6142 :
6143 : // Return value
6144 :
6145 : // Locals
6146 : // FUNCTION ARGUMENT DEFINITIONS:
6147 :
6148 : // FUNCTION PARAMETER DEFINITIONS:
6149 : static constexpr std::string_view RoutineName("GetSatEnthalpyRefrig");
6150 :
6151 : // INTERFACE BLOCK SPECIFICATIONS:
6152 : // na
6153 :
6154 : // DERIVED TYPE DEFINITIONS:
6155 : // na
6156 :
6157 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
6158 : int RefrigNum; // index for refrigerant under consideration
6159 :
6160 119091582 : if (state.dataFluidProps->GetInput) {
6161 0 : GetFluidPropertiesData(state);
6162 0 : state.dataFluidProps->GetInput = false;
6163 : }
6164 :
6165 119091582 : RefrigNum = 0;
6166 119091582 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
6167 0 : ReportFatalRefrigerantErrors(
6168 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom);
6169 : }
6170 :
6171 119091582 : if ((Quality < 0.0) || (Quality > 1.0)) {
6172 0 : ShowSevereError(state, fmt::format("{}: Refrigerant \"{}\", invalid quality, called from {}", RoutineName, Refrigerant, CalledFrom));
6173 0 : ShowContinueError(state, format("Saturated refrigerant quality must be between 0 and 1, entered value=[{:.4R}].", Quality));
6174 0 : ShowFatalError(state, "Program terminates due to preceding condition.");
6175 : }
6176 :
6177 119091582 : if (RefrigIndex > 0) {
6178 119091560 : RefrigNum = RefrigIndex;
6179 : } else {
6180 : // Find which refrigerant (index) is being requested
6181 22 : RefrigNum = FindRefrigerant(state, Refrigerant);
6182 22 : if (RefrigNum == 0) {
6183 0 : ReportFatalRefrigerantErrors(
6184 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom);
6185 : }
6186 22 : RefrigIndex = RefrigNum;
6187 : }
6188 119091582 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
6189 :
6190 : // Apply linear interpolation function
6191 119091582 : return GetInterpolatedSatProp(
6192 238183164 : state, Temperature, refrig.HTemps, refrig.HfValues, refrig.HfgValues, Quality, CalledFrom, refrig.HfLowTempIndex, refrig.HfHighTempIndex);
6193 : }
6194 :
6195 : //*****************************************************************************
6196 :
6197 2308980 : Real64 GetSatDensityRefrig(EnergyPlusData &state,
6198 : std::string_view const Refrigerant, // carries in substance name
6199 : Real64 const Temperature, // actual temperature given as input
6200 : Real64 const Quality, // actual quality given as input
6201 : int &RefrigIndex, // Index to Refrigerant Properties
6202 : std::string_view const CalledFrom // routine this function was called from (error messages)
6203 : )
6204 : {
6205 :
6206 : // SUBROUTINE INFORMATION:
6207 : // AUTHOR Mike Turner
6208 : // DATE WRITTEN 10 December 99
6209 : // MODIFIED Rick Strand (April 2000, May 2000)
6210 : // Simon Rees (May 2002); Kenneth Tang (Jan 2004)
6211 : // RE-ENGINEERED na
6212 :
6213 : // PURPOSE OF THIS SUBROUTINE:
6214 : // This finds density for given temperature and a quality under the vapor dome.
6215 : // This function is only called with a valid refrigerant and quality between 0 and 1.
6216 :
6217 : // METHODOLOGY EMPLOYED:
6218 : // Calls GetInterpolatedSatProp to linearly interpolate between the saturated
6219 : // liquid and vapour densities according to the given quality.
6220 :
6221 : // REFERENCES:
6222 : // na
6223 :
6224 : // USE STATEMENTS:
6225 : // na
6226 :
6227 : // Return value
6228 : Real64 ReturnValue;
6229 :
6230 : // Locals
6231 : // FUNCTION ARGUMENT DEFINITIONS:
6232 :
6233 : // FUNCTION PARAMETER DEFINITIONS:
6234 : static constexpr std::string_view RoutineName("GetSatDensityRefrig: ");
6235 :
6236 : // INTERFACE BLOCK SPECIFICATIONS:
6237 : // na
6238 :
6239 : // DERIVED TYPE DEFINITIONS:
6240 : // na
6241 :
6242 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
6243 :
6244 : int RefrigNum; // index for refrigerant under consideration
6245 : int HiTempIndex; // array index for temp above input temp
6246 : int LoTempIndex; // array index for temp below input temp
6247 : Real64 LoSatProp; // Sat. prop. at lower temp & given quality
6248 : Real64 HiSatProp; // Sat. prop. at higher temp & given quality
6249 : Real64 TempInterpRatio; // ratio to interpolate in temperature domain
6250 : bool ErrorFlag; // error flag for current call
6251 :
6252 : // error counters and dummy string
6253 :
6254 2308980 : if (state.dataFluidProps->GetInput) {
6255 0 : GetFluidPropertiesData(state);
6256 0 : state.dataFluidProps->GetInput = false;
6257 : }
6258 :
6259 2308980 : RefrigNum = 0;
6260 2308980 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
6261 0 : ReportFatalRefrigerantErrors(
6262 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom);
6263 : }
6264 :
6265 2308980 : if ((Quality < 0.0) || (Quality > 1.0)) {
6266 0 : ShowSevereError(state, fmt::format("{}Refrigerant \"{}\", invalid quality, called from {}", RoutineName, Refrigerant, CalledFrom));
6267 0 : ShowContinueError(state, format("Saturated density quality must be between 0 and 1, entered value=[{:.4R}].", Quality));
6268 0 : ShowFatalError(state, "Program terminates due to preceding condition.");
6269 : }
6270 :
6271 : // Find which refrigerant (index) is being requested and then determine
6272 : // where the temperature is within the temperature array
6273 2308980 : if (RefrigIndex > 0) {
6274 2308965 : RefrigNum = RefrigIndex;
6275 : } else {
6276 : // Find which refrigerant (index) is being requested
6277 15 : RefrigNum = FindRefrigerant(state, Refrigerant);
6278 15 : if (RefrigNum == 0) {
6279 0 : ReportFatalRefrigerantErrors(
6280 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom);
6281 : }
6282 15 : RefrigIndex = RefrigNum;
6283 : }
6284 2308980 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
6285 :
6286 2308980 : ErrorFlag = false;
6287 :
6288 2308980 : LoTempIndex = FindArrayIndex(Temperature, refrig.RhoTemps, refrig.RhofLowTempIndex, refrig.RhofHighTempIndex);
6289 2308980 : HiTempIndex = LoTempIndex + 1;
6290 :
6291 : // Error check to make sure the temperature is not out of bounds
6292 2308980 : if (LoTempIndex == 0) {
6293 : // Give the lowest density value if the temperature is below than the minimum
6294 : // temperature in the refrigerant table
6295 0 : ReturnValue = 1.0 / refrig.RhofValues(refrig.RhofLowTempIndex) +
6296 0 : Quality * (1.0 / refrig.RhofgValues(refrig.RhofLowTempIndex) - 1.0 / refrig.RhofValues(refrig.RhofLowTempIndex));
6297 0 : ReturnValue = 1.0 / ReturnValue;
6298 0 : ErrorFlag = true;
6299 2308980 : } else if (HiTempIndex > refrig.RhofHighTempIndex) {
6300 : // Give the highest density value if the temperature is higher than the maximum
6301 : // temperature in the refrigerant table
6302 0 : ReturnValue = 1.0 / refrig.RhofValues(refrig.RhofHighTempIndex) +
6303 0 : Quality * (1.0 / refrig.RhofgValues(refrig.RhofHighTempIndex) - 1.0 / refrig.RhofValues(refrig.RhofHighTempIndex));
6304 0 : ReturnValue = 1.0 / ReturnValue;
6305 0 : ErrorFlag = true;
6306 : } else { // Okay
6307 :
6308 : // Calculate the specific volume for the lower temperature index based on linear
6309 : // interpolation of the quality
6310 2308980 : LoSatProp =
6311 2308980 : 1.0 / refrig.RhofValues(LoTempIndex) + Quality * (1.0 / refrig.RhofgValues(LoTempIndex) - 1.0 / refrig.RhofValues(LoTempIndex));
6312 :
6313 : // Calculate the specific volume for the higher temperature index based on linear
6314 : // interpolation of the quality
6315 2308980 : HiSatProp =
6316 2308980 : 1.0 / refrig.RhofValues(HiTempIndex) + Quality * (1.0 / refrig.RhofgValues(HiTempIndex) - 1.0 / refrig.RhofValues(HiTempIndex));
6317 :
6318 : // Find interpolation ratio in temperature direction
6319 2308980 : TempInterpRatio = (Temperature - refrig.RhoTemps(LoTempIndex)) / (refrig.RhoTemps(HiTempIndex) - refrig.RhoTemps(LoTempIndex));
6320 :
6321 : // Apply final linear interpolation to find the specific volume
6322 2308980 : ReturnValue = LoSatProp + TempInterpRatio * (HiSatProp - LoSatProp);
6323 : // Convert the specific volume to density
6324 2308980 : ReturnValue = 1.0 / ReturnValue;
6325 : }
6326 :
6327 2308980 : if (!state.dataGlobal->WarmupFlag && ErrorFlag) {
6328 0 : ++state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount;
6329 : // send warning
6330 0 : if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) {
6331 0 : ShowSevereMessage(state,
6332 0 : std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" +
6333 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **");
6334 0 : ShowContinueError(state,
6335 0 : format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]",
6336 : CalledFrom,
6337 0 : refrig.RhoTemps(refrig.RhofLowTempIndex),
6338 0 : refrig.RhoTemps(refrig.RhofHighTempIndex)));
6339 0 : ShowContinueError(
6340 0 : state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated density value ={:.2R}", Temperature, ReturnValue));
6341 0 : ShowContinueErrorTimeStamp(state, "");
6342 : }
6343 0 : ShowRecurringSevereErrorAtEnd(state,
6344 0 : std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" +
6345 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **",
6346 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrIndex,
6347 : Temperature,
6348 : Temperature,
6349 : _,
6350 : "{C}",
6351 : "{C}");
6352 : }
6353 2308980 : return ReturnValue;
6354 : }
6355 :
6356 : //*****************************************************************************
6357 :
6358 74365304 : Real64 GetSatSpecificHeatRefrig(EnergyPlusData &state,
6359 : std::string_view const Refrigerant, // carries in substance name
6360 : Real64 const Temperature, // actual temperature given as input
6361 : Real64 const Quality, // actual quality given as input
6362 : int &RefrigIndex, // Index to Refrigerant Properties
6363 : std::string_view const CalledFrom // routine this function was called from (error messages)
6364 : )
6365 : {
6366 :
6367 : // SUBROUTINE INFORMATION:
6368 : // AUTHOR Mike Turner
6369 : // DATE WRITTEN 10 December 99
6370 : // MODIFIED Rick Strand (April 2000, May 2000)
6371 : // Simon Rees (May 2002)
6372 : // RE-ENGINEERED na
6373 :
6374 : // PURPOSE OF THIS SUBROUTINE:
6375 : // This finds specific heat for given temperature and a quality under the vapor dome.
6376 : // This fucntion is only called with a valid refrigerant and quality between 0 and 1.
6377 :
6378 : // METHODOLOGY EMPLOYED:
6379 : // Calls GetInterpolatedSatProp to linearly interpolate between the saturated
6380 : // liquid and vapour specific heats according to the given quality.
6381 :
6382 : // REFERENCES:
6383 : // na
6384 :
6385 : // USE STATEMENTS:
6386 : // na
6387 :
6388 : // Return value
6389 : Real64 ReturnValue;
6390 :
6391 : // Locals
6392 : // FUNCTION ARGUMENT DEFINITIONS:
6393 :
6394 : // FUNCTION PARAMETER DEFINITIONS:
6395 : static constexpr std::string_view RoutineName("GetSatSpecificHeatRefrig: ");
6396 :
6397 : // INTERFACE BLOCK SPECIFICATIONS:
6398 : // na
6399 :
6400 : // DERIVED TYPE DEFINITIONS:
6401 : // na
6402 :
6403 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
6404 : int RefrigNum; // index for refrigerant under consideration
6405 :
6406 74365304 : if (state.dataFluidProps->GetInput) {
6407 7 : GetFluidPropertiesData(state);
6408 7 : state.dataFluidProps->GetInput = false;
6409 : }
6410 :
6411 74365304 : RefrigNum = 0;
6412 74365304 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
6413 0 : ReportFatalRefrigerantErrors(
6414 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatSpecificHeatRefrig", "properties", CalledFrom);
6415 : }
6416 :
6417 74365304 : if ((Quality < 0.0) || (Quality > 1.0)) {
6418 0 : ShowSevereError(state, fmt::format("{}Refrigerant \"{}\", invalid quality, called from {}", RoutineName, Refrigerant, CalledFrom));
6419 0 : ShowContinueError(state, format("Saturated density quality must be between 0 and 1, entered value=[{:.4R}].", Quality));
6420 0 : ShowFatalError(state, "Program terminates due to preceding condition.");
6421 : }
6422 :
6423 : // Find which refrigerant (index) is being requested and then determine
6424 : // where the temperature is within the temperature array
6425 74365304 : if (RefrigIndex > 0) {
6426 74365266 : RefrigNum = RefrigIndex;
6427 : } else {
6428 : // Find which refrigerant (index) is being requested
6429 38 : RefrigNum = FindRefrigerant(state, Refrigerant);
6430 38 : if (RefrigNum == 0) {
6431 0 : ReportFatalRefrigerantErrors(state,
6432 0 : state.dataFluidProps->NumOfRefrigerants,
6433 : RefrigNum,
6434 : true,
6435 : Refrigerant,
6436 : "GetSatSpecificHeatRefrig",
6437 : "properties",
6438 0 : CalledFrom);
6439 : }
6440 38 : RefrigIndex = RefrigNum;
6441 : }
6442 74365304 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
6443 :
6444 : // Apply linear interpolation function
6445 74365304 : ReturnValue = GetInterpolatedSatProp(state,
6446 : Temperature,
6447 : refrig.CpTemps,
6448 : refrig.CpfValues,
6449 : refrig.CpfgValues,
6450 : Quality,
6451 : CalledFrom,
6452 74365304 : refrig.CpfLowTempIndex,
6453 74365304 : refrig.CpfHighTempIndex);
6454 :
6455 74365304 : return ReturnValue;
6456 : }
6457 :
6458 : //*****************************************************************************
6459 :
6460 22655929 : Real64 GetSupHeatEnthalpyRefrig(EnergyPlusData &state,
6461 : std::string_view const Refrigerant, // carries in substance name
6462 : Real64 const Temperature, // actual temperature given as input
6463 : Real64 const Pressure, // actual pressure given as input
6464 : int &RefrigIndex, // Index to Refrigerant Properties
6465 : std::string_view const CalledFrom // routine this function was called from (error messages)
6466 : )
6467 : {
6468 :
6469 : // SUBROUTINE INFORMATION:
6470 : // AUTHOR Mike Turner
6471 : // DATE WRITTEN 10 December 99
6472 : // MODIFIED Rick Strand (April 2000, May 2000)
6473 : // MODIFIED Simon Rees (May 2002)
6474 : // RE-ENGINEERED N/A
6475 :
6476 : // PURPOSE OF THIS SUBROUTINE:
6477 : // Performs linear interpolation between pressures and temperatures and
6478 : // returns enthalpy values. Works only in superheated region.
6479 :
6480 : // METHODOLOGY EMPLOYED:
6481 : // Double linear interpolation is used with enthalpy values at four
6482 : // pressure/temperature input points surrounding the given temperature
6483 : // and pressure argument values.
6484 : // With enthalpy data it is assumed that zero values in the data are in
6485 : // the saturated region. Hence, values near the saturation line are
6486 : // approximated using the saturation value instead of the zero data value.
6487 : // points completely in the saturation region are given the saturation value
6488 : // at the given temperature. Points at the upper limits of pressure/temperature
6489 : // have the pressure/temperature capped. Warnings are given if the point
6490 : // is not clearly in the bounds of the superheated data.
6491 :
6492 : // REFERENCES:
6493 : // na
6494 :
6495 : // USE STATEMENTS:
6496 : // na
6497 :
6498 : // Return value
6499 : Real64 ReturnValue;
6500 :
6501 : // Locals
6502 : // FUNCTION ARGUMENT DEFINITIONS:
6503 :
6504 : // FUNCTION PARAMETER DEFINITIONS:
6505 : static constexpr std::string_view RoutineName("GetSupHeatEnthalpyRefrig: ");
6506 : static constexpr std::string_view RoutineNameNoSpace("GetSupHeatEnthalpyRefrig:");
6507 : static constexpr std::string_view RoutineNameNoColon("GetSupHeatEnthalpyRefrig");
6508 :
6509 : // INTERFACE BLOCK SPECIFICATIONS:
6510 : // na
6511 :
6512 : // DERIVED TYPE DEFINITIONS:
6513 : // na
6514 :
6515 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
6516 : Real64 PressInterpRatio; // Interpolation factor w.r.t pressure
6517 : Real64 TempInterpRatio; // Interpolation factor w.r.t temperature
6518 : Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature
6519 : Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature
6520 : Real64 LoTempLoEnthalpy; // Enthalpy value at low pressure and low temperature
6521 : Real64 LoTempHiEnthalpy; // Enthalpy value at high pressure and low temperature
6522 : Real64 HiTempLoEnthalpy; // Enthalpy value at low pressure and high temperature
6523 : Real64 HiTempHiEnthalpy; // Enthalpy value at high pressure and high temperature
6524 :
6525 : int HiTempIndex; // high temperature index value
6526 : int HiPressIndex; // high pressure index value
6527 : int LoPressIndex; // low index value of Pressure from table
6528 : int RefrigNum; // index for refrigerant under consideration
6529 : int TempIndex; // low index value of Temperature from table
6530 :
6531 : // error counters and dummy string
6532 : int ErrCount; // error counter for current call
6533 : int CurTempRangeErrCount; // error counter for current call
6534 : int CurPresRangeErrCount; // error counter for current call
6535 :
6536 : // see if data is there
6537 22655929 : if (state.dataFluidProps->GetInput) {
6538 1 : GetFluidPropertiesData(state);
6539 1 : state.dataFluidProps->GetInput = false;
6540 : }
6541 :
6542 22655929 : RefrigNum = 0;
6543 22655929 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
6544 0 : ReportFatalRefrigerantErrors(
6545 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom);
6546 : }
6547 :
6548 22655929 : ErrCount = 0;
6549 22655929 : CurTempRangeErrCount = 0;
6550 22655929 : CurPresRangeErrCount = 0;
6551 :
6552 : // Find which refrigerant (index) is being requested and then determine
6553 : // where the temperature and pressure are within the temperature and
6554 : // pressure arrays, respectively
6555 22655929 : if (RefrigIndex > 0) {
6556 22655928 : RefrigNum = RefrigIndex;
6557 : } else {
6558 : // Find which refrigerant (index) is being requested
6559 1 : RefrigNum = FindRefrigerant(state, Refrigerant);
6560 1 : if (RefrigNum == 0) {
6561 0 : ReportFatalRefrigerantErrors(
6562 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom);
6563 : }
6564 1 : RefrigIndex = RefrigNum;
6565 : }
6566 22655929 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
6567 :
6568 22655929 : TempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts);
6569 22655929 : LoPressIndex = FindArrayIndex(Pressure, refrig.SHPress, 1, refrig.NumSuperPressPts);
6570 :
6571 : // check temperature data range and attempt to cap if necessary
6572 22655929 : if ((TempIndex > 0) && (TempIndex < refrig.NumSuperTempPts)) { // in range
6573 22655929 : HiTempIndex = TempIndex + 1;
6574 22655929 : TempInterpRatio = (Temperature - refrig.SHTemps(TempIndex)) / (refrig.SHTemps(HiTempIndex) - refrig.SHTemps(TempIndex));
6575 0 : } else if (TempIndex < 1) {
6576 0 : ++CurTempRangeErrCount;
6577 0 : ++ErrCount;
6578 0 : TempIndex = 1;
6579 0 : HiTempIndex = TempIndex;
6580 0 : TempInterpRatio = 0.0;
6581 : } else { // out of range
6582 0 : ++CurTempRangeErrCount;
6583 0 : ++ErrCount;
6584 : // FindArrayIndex will return upper or lower bound so TempIndex gives upper/lower limit
6585 0 : HiTempIndex = TempIndex;
6586 0 : TempInterpRatio = 0.0;
6587 : }
6588 :
6589 : // check pressure data range and attempt to cap if necessary
6590 22655929 : if ((LoPressIndex > 0) && (LoPressIndex < refrig.NumSuperPressPts)) { // in range
6591 22655929 : HiPressIndex = LoPressIndex + 1;
6592 22655929 : PressInterpRatio = (Pressure - refrig.SHPress(LoPressIndex)) / (refrig.SHPress(HiPressIndex) - refrig.SHPress(LoPressIndex));
6593 0 : } else if (LoPressIndex < 1) {
6594 0 : ++CurPresRangeErrCount;
6595 0 : ++ErrCount;
6596 : // FindArrayIndex will return upper or lower bound so TempIndex gives upper/lower limit
6597 0 : LoPressIndex = 1;
6598 0 : HiPressIndex = LoPressIndex;
6599 0 : PressInterpRatio = 0.0;
6600 : } else { // out of range
6601 0 : ++CurPresRangeErrCount;
6602 0 : ++ErrCount;
6603 0 : HiPressIndex = LoPressIndex;
6604 0 : PressInterpRatio = 0.0;
6605 : }
6606 :
6607 : // get interpolation point values
6608 22655929 : LoTempLoEnthalpy = refrig.HshValues(LoPressIndex, TempIndex);
6609 22655929 : LoTempHiEnthalpy = refrig.HshValues(HiPressIndex, TempIndex);
6610 22655929 : HiTempLoEnthalpy = refrig.HshValues(LoPressIndex, HiTempIndex);
6611 22655929 : HiTempHiEnthalpy = refrig.HshValues(HiPressIndex, HiTempIndex);
6612 :
6613 : // to give reasonable interpolation near saturation reset any point with zero value
6614 : // in table to saturation value
6615 22655929 : if (LoTempLoEnthalpy <= 0.0) {
6616 486 : LoTempLoEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon);
6617 : }
6618 22655929 : if (LoTempHiEnthalpy <= 0.0) {
6619 9110306 : LoTempHiEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon);
6620 : }
6621 22655929 : if (HiTempLoEnthalpy <= 0.0) {
6622 0 : HiTempLoEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon);
6623 : }
6624 22655929 : if (HiTempHiEnthalpy <= 0.0) {
6625 486 : HiTempHiEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon);
6626 : }
6627 :
6628 : // interpolate w.r.t. pressure
6629 22655929 : EnthalpyLow = PressInterpRatio * LoTempHiEnthalpy + (1.0 - PressInterpRatio) * LoTempLoEnthalpy;
6630 :
6631 22655929 : EnthalpyHigh = PressInterpRatio * HiTempHiEnthalpy + (1.0 - PressInterpRatio) * HiTempLoEnthalpy;
6632 :
6633 : // interpolate w.r.t. temperature
6634 22655929 : ReturnValue = TempInterpRatio * EnthalpyHigh + (1.0 - TempInterpRatio) * EnthalpyLow;
6635 :
6636 : // Check to see if all data is at zero. In this case we are completely
6637 : // inside the saturation dome. Best thing we can do is return saturation value
6638 45312830 : if ((refrig.HshValues(LoPressIndex, TempIndex) <= 0.0) && (refrig.HshValues(HiPressIndex, TempIndex) <= 0.0) &&
6639 22656415 : (refrig.HshValues(LoPressIndex, HiTempIndex) <= 0.0) && (refrig.HshValues(HiPressIndex, HiTempIndex) <= 0.0)) {
6640 0 : ++state.dataFluidProps->SatErrCountGetSupHeatEnthalpyRefrig;
6641 : // set return value
6642 0 : ReturnValue = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom));
6643 : // send warning
6644 0 : if (!state.dataGlobal->WarmupFlag) {
6645 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrCount +=
6646 0 : state.dataFluidProps->SatErrCountGetSupHeatEnthalpyRefrig;
6647 : // send warning
6648 0 : if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) {
6649 0 : ShowWarningMessage(state,
6650 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6651 : "] is saturated at the given conditions, saturated enthalpy at given temperature returned. **");
6652 0 : ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom));
6653 0 : ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature));
6654 0 : ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure));
6655 0 : ShowContinueError(state, format("Returned Enthalpy value = {:.3R}", ReturnValue));
6656 0 : ShowContinueErrorTimeStamp(state, "");
6657 : }
6658 0 : ShowRecurringWarningErrorAtEnd(state,
6659 0 : std::string{RoutineName} + "Refrigerant [" +
6660 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6661 : "] saturated at the given conditions **",
6662 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex,
6663 : Temperature,
6664 : Temperature,
6665 : _,
6666 : "{C}",
6667 : "{C}");
6668 : }
6669 0 : return ReturnValue;
6670 : }
6671 :
6672 22655929 : if (!state.dataGlobal->WarmupFlag) {
6673 : // some checks...
6674 3183456 : if (ErrCount > 0) {
6675 : // send temp range error if flagged
6676 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount += CurTempRangeErrCount;
6677 0 : if (CurTempRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount <=
6678 0 : state.dataFluidProps->RefrigerantErrorLimitTest) {
6679 0 : ShowWarningMessage(state,
6680 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6681 : "] Temperature is out of range for superheated refrigerant enthalpy: values capped **");
6682 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
6683 0 : ShowContinueErrorTimeStamp(state, "");
6684 : }
6685 0 : if (CurTempRangeErrCount > 0) {
6686 0 : ShowRecurringWarningErrorAtEnd(state,
6687 0 : std::string{RoutineName} + "Refrigerant [" +
6688 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6689 : "] Temperature is out of range for superheated refrigerant enthalpy: values capped **",
6690 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrIndex,
6691 : Temperature,
6692 : Temperature,
6693 : _,
6694 : "{C}",
6695 : "{C}");
6696 : }
6697 :
6698 : // send pressure range error if flagged
6699 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount += CurPresRangeErrCount;
6700 0 : if (CurPresRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount <=
6701 0 : state.dataFluidProps->RefrigerantErrorLimitTest) {
6702 0 : ShowWarningMessage(state,
6703 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6704 : "] Pressure is out of range for superheated refrigerant enthalpy: values capped **");
6705 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
6706 0 : ShowContinueErrorTimeStamp(state, "");
6707 : }
6708 0 : if (CurPresRangeErrCount > 0) {
6709 0 : ShowRecurringWarningErrorAtEnd(state,
6710 0 : std::string{RoutineName} + "Refrigerant [" +
6711 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6712 : "] Pressure is out of range for superheated refrigerant enthalpy: values capped **",
6713 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrIndex,
6714 : Pressure,
6715 : Pressure,
6716 : _,
6717 : "{Pa}",
6718 : "{Pa}");
6719 : }
6720 : } // end error checking
6721 : }
6722 :
6723 22655929 : return ReturnValue;
6724 : }
6725 :
6726 : //*****************************************************************************
6727 :
6728 0 : Real64 GetSupHeatPressureRefrig(EnergyPlusData &state,
6729 : std::string const &Refrigerant, // carries in substance name
6730 : Real64 const Temperature, // actual temperature given as input
6731 : Real64 const Enthalpy, // actual enthalpy given as input
6732 : int &RefrigIndex, // Index to Refrigerant Properties
6733 : std::string_view const CalledFrom // routine this function was called from (error messages)
6734 : )
6735 : {
6736 :
6737 : // SUBROUTINE INFORMATION:
6738 : // AUTHOR Rick Strand
6739 : // DATE WRITTEN May 2000
6740 : // MODIFIED Simon Rees (May 2002)
6741 : // RE-ENGINEERED na
6742 :
6743 : // PURPOSE OF THIS SUBROUTINE:
6744 : // Performs linear interpolation between enthalpy and temperatures and
6745 : // returns pressure values. Works only in superheated region.
6746 :
6747 : // METHODOLOGY EMPLOYED:
6748 : // Double linear interpolation is used with pressure values at four
6749 : // enthalpy/temperature input points surrounding the given temperature
6750 : // and enthalpy argument values.
6751 : // All enthalpies have to be calculated at the given temperature before a
6752 : // search is made for the data adjacent to the given enthalpy. Linear interpolation
6753 : // using the enthalpy data is used to interpolate the correspondng pressures.
6754 : // Temperatures and enthalpies outside the bounds of the available data are capped
6755 : // and warnings given. For enthlpys lower than the saturated vapour value at the
6756 : // given temperature result in the saturation pressure being returned (calls to
6757 : // GetSatEnthalpy and GetSatPressure are made.)
6758 :
6759 : // REFERENCES:
6760 : // na
6761 :
6762 : // USE STATEMENTS:
6763 : // na
6764 :
6765 : // Return value
6766 : Real64 ReturnValue;
6767 :
6768 : // Locals
6769 : // FUNCTION ARGUMENT DEFINITIONS:
6770 :
6771 : // FUNCTION PARAMETERS:
6772 : // the enthalpy calculated from the pressure found
6773 : static constexpr std::string_view RoutineName("GetSupHeatPressureRefrig: ");
6774 : static constexpr std::string_view RoutineNameNoSpace("GetSupHeatPressureRefrig:");
6775 :
6776 : // INTERFACE BLOCK SPECIFICATIONS:
6777 : // na
6778 :
6779 : // DERIVED TYPE DEFINITIONS:
6780 : // na
6781 :
6782 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
6783 : Real64 EnthalpyCheck; // recalculates enthalpy based on calculated pressure
6784 : Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature
6785 : Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature
6786 : Real64 EnthalpyMax; // Enthalpy value at interpolated pressure and high temperature
6787 : Real64 EnthalpyMin; // Enthalpy value at interpolated pressure and low temperature
6788 : Real64 SatEnthalpy; // Saturated vapour enthalpy
6789 : Real64 TempInterpRatio; // Interpolation ratio w.r.t temperature
6790 : Real64 EnthInterpRatio; // Interpolation ratio w.r.t enthalpy
6791 :
6792 : int finish; // index of high end of enthalpy values
6793 : int start; // index of high end of enthalpy values
6794 : int Loop; // DO loop counter
6795 : int middle; // mid-point for interval halving
6796 :
6797 : int RefrigNum; // index for refrigerant under consideration
6798 : int LoTempStart; // lower non-zero index of enthalpy values at lower temp.
6799 : int LoTempFinish; // upper non-zero index of enthalpy values at lower temp.
6800 : int HiTempStart; // lower non-zero index of enthalpy values at higher temp.
6801 : int HiTempFinish; // upper non-zero index of enthalpy values at higher temp.
6802 : int TempStart; // corrected lower non-zero index of enthalpy values
6803 : int TempFinish; // corrected upper non-zero index of enthalpy values
6804 :
6805 : int LoTempIndex; // Index value of lower temperature from data
6806 : int HiTempIndex; // Index value of higher temperature from data
6807 : int LoEnthalpyIndex; // Index value of lower enthalpy from data
6808 : int HiEnthalpyIndex; // Index value of higher enthalpy from data
6809 :
6810 : // error counters and dummy string
6811 : int ErrCount; // error counter for current call
6812 : int CurTempRangeErrCount; // error counter for current call
6813 : int CurEnthalpyRangeErrCount; // error counter for current call
6814 : int CurSatErrCount; // error counter for current call
6815 :
6816 0 : if (state.dataFluidProps->GetInput) {
6817 0 : GetFluidPropertiesData(state);
6818 0 : state.dataFluidProps->GetInput = false;
6819 : }
6820 :
6821 0 : RefrigNum = 0;
6822 0 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
6823 0 : ReportFatalRefrigerantErrors(
6824 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom);
6825 : }
6826 :
6827 0 : ErrCount = 0;
6828 0 : CurTempRangeErrCount = 0;
6829 0 : CurEnthalpyRangeErrCount = 0;
6830 0 : CurSatErrCount = 0;
6831 :
6832 : // Find which refrigerant (index) is being requested and then determine
6833 : // where the temperature is within the temperature array
6834 0 : if (RefrigIndex > 0) {
6835 0 : RefrigNum = RefrigIndex;
6836 : } else {
6837 : // Find which refrigerant (index) is being requested
6838 0 : RefrigNum = FindRefrigerant(state, Refrigerant);
6839 0 : if (RefrigNum == 0) {
6840 0 : ReportFatalRefrigerantErrors(state,
6841 0 : state.dataFluidProps->NumOfRefrigerants,
6842 : RefrigNum,
6843 : true,
6844 : Refrigerant,
6845 : "GetSupHeatPressureRefrig",
6846 : "properties",
6847 0 : CalledFrom);
6848 : }
6849 0 : RefrigIndex = RefrigNum;
6850 : }
6851 0 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
6852 :
6853 0 : LoTempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts);
6854 0 : HiTempIndex = LoTempIndex + 1;
6855 :
6856 : // check temperature data range and attempt to cap if necessary
6857 0 : if ((LoTempIndex > 0) && (LoTempIndex < refrig.NumSuperTempPts)) { // in range
6858 0 : HiTempIndex = LoTempIndex + 1;
6859 0 : } else if (LoTempIndex < 1) { // below lower bound
6860 0 : ++CurTempRangeErrCount;
6861 0 : LoTempIndex = 1;
6862 0 : HiTempIndex = LoTempIndex;
6863 : } else { // out of range
6864 0 : ++CurTempRangeErrCount;
6865 0 : HiTempIndex = LoTempIndex;
6866 : }
6867 :
6868 : // check for lowest non-zero value in lower temp data
6869 0 : LoTempStart = refrig.NumSuperPressPts;
6870 0 : for (Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) {
6871 0 : if (refrig.HshValues(Loop, LoTempIndex) > 0.0) {
6872 0 : LoTempStart = Loop;
6873 0 : break;
6874 : }
6875 : }
6876 : // check for highest non-zero value in lower temp data
6877 0 : LoTempFinish = 1;
6878 0 : for (Loop = refrig.NumSuperPressPts; Loop >= 1; --Loop) {
6879 0 : if (refrig.HshValues(Loop, LoTempIndex) <= 0.0) {
6880 0 : LoTempFinish = Loop;
6881 : // EXIT
6882 : }
6883 : }
6884 : // check for lowest non-zero value in high temp data
6885 0 : HiTempStart = refrig.NumSuperPressPts;
6886 0 : for (Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) {
6887 0 : if (refrig.HshValues(Loop, HiTempIndex) > 0.0) {
6888 0 : HiTempStart = Loop;
6889 0 : break;
6890 : }
6891 : }
6892 :
6893 : // check for highest non-zero value in high temp data
6894 0 : HiTempFinish = 1;
6895 0 : for (Loop = refrig.NumSuperPressPts; Loop >= 1; --Loop) {
6896 0 : if (refrig.HshValues(Loop, HiTempIndex) <= 0.0) {
6897 0 : HiTempFinish = Loop;
6898 : }
6899 : }
6900 :
6901 : // find bounds of both hi and lo temp data
6902 0 : TempStart = max(LoTempStart, HiTempStart);
6903 0 : TempFinish = min(LoTempFinish, HiTempFinish);
6904 : // calculate interpolation ratio w.r.t temperature
6905 : // This ratio is used to find enthalpies at the given temperature
6906 0 : TempInterpRatio = (Temperature - refrig.SHTemps(LoTempIndex)) / (refrig.SHTemps(HiTempIndex) - refrig.SHTemps(LoTempIndex));
6907 :
6908 : // search for array index by bisection
6909 0 : start = TempStart; // set the bounds
6910 0 : finish = TempFinish;
6911 :
6912 : // find the bounds of the enthalpy data available
6913 0 : EnthalpyMax = max(refrig.HshValues(TempStart, LoTempIndex), refrig.HshValues(TempStart, HiTempIndex));
6914 0 : EnthalpyMin = min(refrig.HshValues(TempFinish, LoTempIndex), refrig.HshValues(TempFinish, HiTempIndex));
6915 : // get saturated enthalpy for checking
6916 0 : SatEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom));
6917 :
6918 : // make some checks on the data before interpolating
6919 0 : if (Enthalpy < SatEnthalpy) {
6920 : // flag error
6921 0 : ++CurSatErrCount;
6922 0 : ++ErrCount;
6923 : // return sat pressure at this temperature
6924 0 : ReturnValue = GetSatPressureRefrig(state, Refrigerant, Temperature, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom));
6925 :
6926 0 : } else if (EnthalpyMax < Enthalpy || EnthalpyMin > Enthalpy) {
6927 : // out of range error
6928 0 : ++CurEnthalpyRangeErrCount;
6929 0 : ++ErrCount;
6930 0 : if (Enthalpy > EnthalpyMax) {
6931 : // return min pressure
6932 0 : ReturnValue = refrig.SHPress(HiTempStart);
6933 : } else {
6934 : // return max pressure
6935 0 : ReturnValue = refrig.SHPress(LoTempFinish);
6936 : }
6937 : } else {
6938 : // go ahead and search
6939 0 : while ((finish - start) > 1) {
6940 0 : middle = (finish + start) / 2;
6941 :
6942 : // calc enthalpy at middle index for given temperature
6943 0 : EnthalpyCheck = refrig.HshValues(middle, LoTempIndex) +
6944 0 : TempInterpRatio * (refrig.HshValues(middle, HiTempIndex) - refrig.HshValues(middle, LoTempIndex));
6945 :
6946 0 : if (Enthalpy < EnthalpyCheck) {
6947 0 : start = middle;
6948 : } else {
6949 0 : finish = middle;
6950 : }
6951 : }
6952 0 : LoEnthalpyIndex = start;
6953 0 : HiEnthalpyIndex = start + 1;
6954 :
6955 : // calculate enthalpies adjacent specified enthalpy at given temperature
6956 0 : EnthalpyLow = refrig.HshValues(LoEnthalpyIndex, LoTempIndex) +
6957 0 : TempInterpRatio * (refrig.HshValues(LoEnthalpyIndex, HiTempIndex) - refrig.HshValues(LoEnthalpyIndex, LoTempIndex));
6958 :
6959 0 : EnthalpyHigh = refrig.HshValues(HiEnthalpyIndex, LoTempIndex) +
6960 0 : TempInterpRatio * (refrig.HshValues(HiEnthalpyIndex, HiTempIndex) - refrig.HshValues(HiEnthalpyIndex, LoTempIndex));
6961 : // calculate an interpolation ratio
6962 0 : EnthInterpRatio = (Enthalpy - EnthalpyLow) / (EnthalpyHigh - EnthalpyLow);
6963 : // apply this interpolation ratio to find the final pressure
6964 0 : ReturnValue = refrig.SHPress(LoEnthalpyIndex) + EnthInterpRatio * (refrig.SHPress(HiEnthalpyIndex) - refrig.SHPress(LoEnthalpyIndex));
6965 : }
6966 :
6967 0 : if (!state.dataGlobal->WarmupFlag) {
6968 : // ** make error checks **
6969 0 : if (ErrCount > 0) {
6970 : // send near saturation warning if flagged
6971 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount += CurSatErrCount;
6972 : // send warning
6973 0 : if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) {
6974 0 : ShowSevereMessage(
6975 : state,
6976 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6977 : "] is saturated at the given enthalpy and temperature, saturated enthalpy at given temperature returned. **");
6978 0 : ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom));
6979 0 : ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature));
6980 0 : ShowContinueError(state, format("Refrigerant Enthalpy = {:.3R}", Enthalpy));
6981 0 : ShowContinueError(state, format("Returned Pressure value = {:.0R}", ReturnValue));
6982 0 : ShowContinueErrorTimeStamp(state, "");
6983 : }
6984 0 : if (CurSatErrCount > 0) {
6985 0 : ShowRecurringSevereErrorAtEnd(state,
6986 0 : std::string{RoutineName} + "Refrigerant [" +
6987 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
6988 : "] saturated at the given enthalpy and temperature **",
6989 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureErrIndex,
6990 : ReturnValue,
6991 : ReturnValue,
6992 : _,
6993 : "{Pa}",
6994 : "{Pa}");
6995 : }
6996 :
6997 : // send temp range error if flagged
6998 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount += CurTempRangeErrCount;
6999 0 : if (CurTempRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount <=
7000 0 : state.dataFluidProps->RefrigerantErrorLimitTest) {
7001 0 : ShowWarningMessage(state,
7002 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7003 : "] Temperature is out of range for superheated refrigerant pressure: values capped **");
7004 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7005 0 : ShowContinueErrorTimeStamp(state, "");
7006 : }
7007 0 : if (CurTempRangeErrCount > 0) {
7008 0 : ShowRecurringWarningErrorAtEnd(state,
7009 0 : std::string{RoutineName} + "Refrigerant [" +
7010 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7011 : "] Temperature is out of range for superheated refrigerant pressure: values capped **",
7012 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrIndex,
7013 : Temperature,
7014 : Temperature,
7015 : _,
7016 : "{C}",
7017 : "{C}");
7018 : }
7019 :
7020 : // send enthalpy range error if flagged
7021 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount += CurEnthalpyRangeErrCount;
7022 0 : if (CurEnthalpyRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount <=
7023 0 : state.dataFluidProps->RefrigerantErrorLimitTest) {
7024 0 : ShowWarningMessage(state,
7025 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7026 : "] Pressure is out of range for superheated refrigerant enthalpy: values capped **");
7027 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7028 0 : ShowContinueErrorTimeStamp(state, "");
7029 : }
7030 0 : if (CurEnthalpyRangeErrCount > 0) {
7031 0 : ShowRecurringWarningErrorAtEnd(state,
7032 0 : std::string{RoutineName} + "Refrigerant [" +
7033 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7034 : "] Pressure is out of range for superheated refrigerant pressure: values capped **",
7035 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrIndex,
7036 : Enthalpy,
7037 : Enthalpy,
7038 : _,
7039 : "{J}",
7040 : "{J}");
7041 : }
7042 : } // end error checking
7043 : }
7044 :
7045 0 : return ReturnValue;
7046 : }
7047 :
7048 : //*****************************************************************************
7049 :
7050 32356 : Real64 GetSupHeatTempRefrig(EnergyPlusData &state,
7051 : std::string_view const Refrigerant, // carries in substance name
7052 : Real64 const Pressure, // actual pressure given as input
7053 : Real64 const Enthalpy, // actual enthalpy given as input
7054 : Real64 TempLow, // lower bound of temperature in the iteration
7055 : Real64 TempUp, // upper bound of temperature in the iteration
7056 : int &RefrigIndex, // Index to Refrigerant Properties
7057 : std::string_view const CalledFrom // routine this function was called from (error messages)
7058 : )
7059 : {
7060 : // SUBROUTINE INFORMATION:
7061 : // AUTHOR Rongpeng Zhang
7062 : // DATE WRITTEN Jan 2016
7063 : // RE-ENGINEERED na
7064 :
7065 : // PURPOSE OF THIS SUBROUTINE:
7066 : // Performs iterations to calculate the refrigerant temperature corresponding to the given
7067 : // enthalpy and pressure. Works only in superheated region.
7068 :
7069 : // METHODOLOGY EMPLOYED:
7070 : // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig.
7071 :
7072 : // USE STATEMENTS:
7073 : using General::SolveRoot;
7074 :
7075 : // Return value
7076 : Real64 ReturnValue;
7077 :
7078 : // FUNCTION PARAMETERS:
7079 : // the enthalpy calculated from the pressure found
7080 : static constexpr std::string_view RoutineName("GetSupHeatTempRefrig: ");
7081 : static constexpr std::string_view RoutineNameNoSpace("GetSupHeatTempRefrig:");
7082 :
7083 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
7084 : int RefrigNum; // index for refrigerant under consideration
7085 : Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature
7086 : Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature
7087 : Real64 RefTHigh; // High Temperature Value for Ps (max in tables)
7088 : Real64 RefTSat; // Saturated temperature of the refrigerant. Used to check whether the refrigernat is in the superheat area
7089 : Real64 Temp; // Temperature of the superheated refrigerant at the given enthalpy and pressure
7090 :
7091 32356 : if (state.dataFluidProps->GetInput) {
7092 0 : GetFluidPropertiesData(state);
7093 0 : state.dataFluidProps->GetInput = false;
7094 : }
7095 :
7096 32356 : RefrigNum = 0;
7097 32356 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
7098 0 : ReportFatalRefrigerantErrors(
7099 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom);
7100 : }
7101 :
7102 : // Find which refrigerant (index) is being requested and then determine
7103 : // where the temperature is within the temperature array
7104 32356 : if (RefrigIndex > 0) {
7105 32356 : RefrigNum = RefrigIndex;
7106 : } else {
7107 : // Find which refrigerant (index) is being requested
7108 0 : RefrigNum = FindRefrigerant(state, Refrigerant);
7109 0 : if (RefrigNum == 0) {
7110 0 : ReportFatalRefrigerantErrors(state,
7111 0 : state.dataFluidProps->NumOfRefrigerants,
7112 : RefrigNum,
7113 : true,
7114 : Refrigerant,
7115 : "GetSupHeatPressureRefrig",
7116 : "properties",
7117 0 : CalledFrom);
7118 : }
7119 0 : RefrigIndex = RefrigNum;
7120 : }
7121 32356 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
7122 :
7123 : // check temperature data range and attempt to cap if necessary
7124 32356 : RefTHigh = refrig.PsHighTempValue;
7125 32356 : RefTSat = GetSatTemperatureRefrig(state, Refrigerant, Pressure, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom));
7126 :
7127 32356 : if (TempLow < RefTSat) {
7128 0 : ShowWarningMessage(state,
7129 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7130 : "] temperature lower bound is out of range for superheated refrigerant: values capped **");
7131 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7132 0 : ShowContinueErrorTimeStamp(state, "");
7133 0 : TempLow = RefTSat;
7134 : }
7135 32356 : if (TempUp > RefTHigh) {
7136 0 : ShowWarningMessage(state,
7137 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7138 : "] temperature lower bound is out of range for superheated refrigerant: values capped **");
7139 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7140 0 : ShowContinueErrorTimeStamp(state, "");
7141 0 : TempUp = RefTHigh;
7142 : }
7143 32356 : if (TempLow >= TempUp) {
7144 0 : ShowWarningMessage(state,
7145 0 : std::string{RoutineName} + "Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7146 : "] temperature lower bound is out of range for superheated refrigerant: values capped **");
7147 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7148 0 : ShowContinueErrorTimeStamp(state, "");
7149 0 : TempLow = RefTSat;
7150 0 : TempUp = RefTHigh;
7151 : }
7152 :
7153 : // check enthalpy data range and attempt to cap if necessary
7154 32356 : EnthalpyLow = GetSupHeatEnthalpyRefrig(state, Refrigerant, TempLow, Pressure, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom));
7155 32356 : EnthalpyHigh = GetSupHeatEnthalpyRefrig(state, Refrigerant, TempUp, Pressure, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom));
7156 32356 : if (Enthalpy <= EnthalpyLow) {
7157 6984 : ReturnValue = TempLow;
7158 6984 : return ReturnValue;
7159 : }
7160 25372 : if (Enthalpy >= EnthalpyHigh) {
7161 70 : ReturnValue = TempUp;
7162 70 : return ReturnValue;
7163 : }
7164 :
7165 : // Perform iterations to obtain the temperature level
7166 : {
7167 25302 : Real64 constexpr ErrorTol(0.001); // tolerance for RegulaFalsi iterations
7168 25302 : int constexpr MaxIte(500); // maximum number of iterations
7169 : int SolFla; // Flag of RegulaFalsi solver
7170 :
7171 534438 : auto f = [&state, RefrigNum, Enthalpy, Pressure](Real64 Temp) {
7172 : static constexpr std::string_view RoutineNameNoSpace("GetSupHeatTempRefrigResidual");
7173 89073 : Real64 Enthalpy_Req = Enthalpy;
7174 178146 : std::string const &Refrigerant = state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name;
7175 89073 : if (std::abs(Enthalpy_Req) < 100.0) Enthalpy_Req = sign(100.0, Enthalpy_Req);
7176 89073 : int nonConstRefrigNum = RefrigNum;
7177 178146 : Real64 Enthalpy_Act = GetSupHeatEnthalpyRefrig(state, Refrigerant, Temp, Pressure, nonConstRefrigNum, RoutineNameNoSpace);
7178 89073 : return (Enthalpy_Act - Enthalpy_Req) / Enthalpy_Req;
7179 25302 : };
7180 :
7181 25302 : General::SolveRoot(state, ErrorTol, MaxIte, SolFla, Temp, f, TempLow, TempUp);
7182 25302 : ReturnValue = Temp;
7183 : }
7184 :
7185 25302 : return ReturnValue;
7186 : }
7187 :
7188 : //*****************************************************************************
7189 :
7190 95073908 : Real64 GetSupHeatDensityRefrig(EnergyPlusData &state,
7191 : std::string_view const Refrigerant, // carries in substance name
7192 : Real64 const Temperature, // actual temperature given as input
7193 : Real64 const Pressure, // actual pressure given as input
7194 : int &RefrigIndex, // Index to Refrigerant Properties
7195 : std::string_view const CalledFrom // routine this function was called from (error messages)
7196 : )
7197 : {
7198 :
7199 : // SUBROUTINE INFORMATION:
7200 : // AUTHOR Mike Turner
7201 : // DATE WRITTEN 10 December 99
7202 : // MODIFIED Rick Strand (April 2000, May 2000)
7203 : // MODIFIED Simon Rees (May 2002)
7204 : // RE-ENGINEERED N/A
7205 :
7206 : // PURPOSE OF THIS SUBROUTINE:
7207 : // Performs linear interpolation between pressures and temperatures and
7208 : // returns Density values. Works only in superheated region.
7209 :
7210 : // METHODOLOGY EMPLOYED:
7211 : // Double linear interpolation is used with Density values at four
7212 : // pressure/temperature input points surrounding the given temperature
7213 : // and pressure arguments.
7214 : // With Density data it is assumed that zero values in the data are in
7215 : // the saturated region. Hence, values near the saturation line are
7216 : // approximated using the saturation value instead of the zero data value.
7217 : // points completely in the saturation region are given the saturation value
7218 : // at the given temperature. Points at the upper limits of pressure/temperature
7219 : // have the pressure/temperature capped. Warnings are given if the point
7220 : // is not clearly in the bounds of the superheated data.
7221 :
7222 : // REFERENCES:
7223 : // na
7224 :
7225 : // USE STATEMENTS:
7226 : // na
7227 :
7228 : // Return value
7229 : Real64 ReturnValue;
7230 :
7231 : // Locals
7232 : // FUNCTION ARGUMENT DEFINITIONS:
7233 :
7234 : // FUNCTION PARAMETERS:
7235 : static constexpr std::string_view RoutineName("GetSupHeatDensityRefrig");
7236 :
7237 : // INTERFACE BLOCK SPECIFICATIONS:
7238 : // na
7239 :
7240 : // DERIVED TYPE DEFINITIONS:
7241 : // na
7242 :
7243 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
7244 : Real64 TempInterpRatio; // Interpolation ratio w.r.t temperature
7245 : Real64 PressInterpRatio; // Interpolation ratio w.r.t pressures
7246 : Real64 DensityHigh; // Density value at interpolated pressure and high temperature
7247 : Real64 DensityLow; // Density value at interpolated pressure and low temperature
7248 : Real64 LoTempLoDensity; // Density value at low pressure and low temperature
7249 : Real64 LoTempHiDensity; // Density value at high pressure and low temperature
7250 : Real64 HiTempLoDensity; // Density value at low pressure and high temperature
7251 : Real64 HiTempHiDensity; // Density value at high pressure and high temperature
7252 :
7253 : int HiTempIndex; // high temperature index value
7254 : int HiPressIndex; // high pressure index value
7255 : int LoPressIndex; // low index value of Pressure from table
7256 : int RefrigNum; // index for refrigerant under consideration
7257 : int TempIndex; // low index value of Temperature from table
7258 : // error counters and dummy string
7259 : int ErrCount; // error counter for current call
7260 : int CurTempRangeErrCount; // error counter for current call
7261 : int CurPresRangeErrCount; // error counter for current call
7262 :
7263 : // see if data is there
7264 95073908 : if (state.dataFluidProps->GetInput) {
7265 0 : GetFluidPropertiesData(state);
7266 0 : state.dataFluidProps->GetInput = false;
7267 : }
7268 :
7269 95073908 : RefrigNum = 0;
7270 95073908 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
7271 0 : ReportFatalRefrigerantErrors(
7272 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom);
7273 : }
7274 :
7275 95073908 : ErrCount = 0; // initialize for this call
7276 95073908 : CurTempRangeErrCount = 0;
7277 95073908 : CurPresRangeErrCount = 0;
7278 :
7279 : // Find which refrigerant (index) is being requested and then determine
7280 : // where the temperature and pressure are within the temperature and
7281 : // pressure arrays, respectively
7282 95073908 : if (RefrigIndex > 0) {
7283 95073908 : RefrigNum = RefrigIndex;
7284 : } else {
7285 : // Find which refrigerant (index) is being requested
7286 0 : RefrigNum = FindRefrigerant(state, Refrigerant);
7287 0 : if (RefrigNum == 0) {
7288 0 : ReportFatalRefrigerantErrors(
7289 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom);
7290 : }
7291 0 : RefrigIndex = RefrigNum;
7292 : }
7293 95073908 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
7294 :
7295 : // check temperature data range and attempt to cap if necessary
7296 95073908 : TempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts);
7297 95073908 : if ((TempIndex > 0) && (TempIndex < refrig.NumSuperTempPts)) { // in range
7298 95073908 : HiTempIndex = TempIndex + 1;
7299 95073908 : TempInterpRatio = (Temperature - refrig.SHTemps(TempIndex)) / (refrig.SHTemps(HiTempIndex) - refrig.SHTemps(TempIndex));
7300 0 : } else if (TempIndex < 1) {
7301 0 : ++CurTempRangeErrCount;
7302 0 : ++ErrCount;
7303 : // FindArrayIndex will return upper or lower bound so TempIndex gives upper/lower limit
7304 0 : TempIndex = 1;
7305 0 : HiTempIndex = TempIndex;
7306 0 : TempInterpRatio = 0.0;
7307 : } else { // out of range
7308 0 : ++CurTempRangeErrCount;
7309 0 : ++ErrCount;
7310 : // FindArrayIndex will return upper or lower bound so TempIndex gives upper/lower limit
7311 0 : HiTempIndex = TempIndex;
7312 0 : TempInterpRatio = 0.0;
7313 : }
7314 :
7315 : // check pressure data range and attempt to cap if necessary
7316 95073908 : LoPressIndex = FindArrayIndex(Pressure, refrig.SHPress, 1, refrig.NumSuperPressPts);
7317 95073908 : if ((LoPressIndex > 0) && (LoPressIndex < refrig.NumSuperPressPts)) { // in range
7318 95073908 : HiPressIndex = LoPressIndex + 1;
7319 95073908 : Real64 const SHPress_Lo(refrig.SHPress(LoPressIndex));
7320 95073908 : PressInterpRatio = (Pressure - SHPress_Lo) / (refrig.SHPress(HiPressIndex) - SHPress_Lo);
7321 0 : } else if (LoPressIndex < 1) {
7322 0 : ++CurPresRangeErrCount;
7323 0 : ++ErrCount;
7324 0 : LoPressIndex = 1;
7325 0 : HiPressIndex = LoPressIndex;
7326 0 : PressInterpRatio = 0.0;
7327 : } else { // out of range
7328 0 : ++CurPresRangeErrCount;
7329 0 : ++ErrCount;
7330 : // FindArrayIndex will return upper or lower bound so LoPressIndex gives upper/lower limit
7331 0 : HiPressIndex = LoPressIndex;
7332 0 : PressInterpRatio = 0.0;
7333 : }
7334 :
7335 : // get interpolation point values
7336 95073908 : auto const &Rhosh(refrig.RhoshValues);
7337 95073908 : LoTempLoDensity = Rhosh(LoPressIndex, TempIndex);
7338 95073908 : LoTempHiDensity = Rhosh(HiPressIndex, TempIndex);
7339 95073908 : HiTempLoDensity = Rhosh(LoPressIndex, HiTempIndex);
7340 95073908 : HiTempHiDensity = Rhosh(HiPressIndex, HiTempIndex);
7341 :
7342 : // to give reasonable interpolation near saturation reset any point with zero value
7343 : // in table to saturation value
7344 95073908 : int n_zero(0);
7345 95073908 : Real64 saturated_density(0.0);
7346 95073908 : if (min(LoTempLoDensity, LoTempHiDensity, HiTempLoDensity, HiTempHiDensity) <= 0.0) {
7347 2268956 : saturated_density = GetSatDensityRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineName);
7348 2268956 : if (LoTempLoDensity <= 0.0) {
7349 0 : LoTempLoDensity = saturated_density;
7350 0 : ++n_zero;
7351 : }
7352 2268956 : if (LoTempHiDensity <= 0.0) {
7353 2268956 : LoTempHiDensity = saturated_density;
7354 2268956 : ++n_zero;
7355 : }
7356 2268956 : if (HiTempLoDensity <= 0.0) {
7357 0 : HiTempLoDensity = saturated_density;
7358 0 : ++n_zero;
7359 : }
7360 2268956 : if (HiTempHiDensity <= 0.0) {
7361 0 : HiTempHiDensity = saturated_density;
7362 0 : ++n_zero;
7363 : }
7364 : }
7365 :
7366 95073908 : if (n_zero < 4) {
7367 : // interpolate w.r.t. pressure
7368 95073908 : DensityLow = PressInterpRatio * LoTempHiDensity + (1.0 - PressInterpRatio) * LoTempLoDensity;
7369 95073908 : DensityHigh = PressInterpRatio * HiTempHiDensity + (1.0 - PressInterpRatio) * HiTempLoDensity;
7370 :
7371 : // interpolate w.r.t. temperature
7372 95073908 : ReturnValue = TempInterpRatio * DensityHigh + (1.0 - TempInterpRatio) * DensityLow;
7373 : } else { // All data is at zero: we are completely inside the saturation dome. Best thing we can do is return saturation value
7374 0 : ++state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig;
7375 : // send warning
7376 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount += state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig;
7377 : // send warning
7378 0 : if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) {
7379 0 : ShowWarningMessage(state,
7380 0 : std::string{RoutineName} + ": Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7381 : "] is saturated at the given conditions, saturated density at given temperature returned. **");
7382 0 : ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom));
7383 0 : ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature));
7384 0 : ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure));
7385 0 : ShowContinueError(state, format("Returned Density value = {:.3R}", saturated_density));
7386 0 : ShowContinueErrorTimeStamp(state, "");
7387 : }
7388 0 : if (state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig > 0) {
7389 0 : ShowRecurringWarningErrorAtEnd(state,
7390 0 : std::string{RoutineName} + ": Refrigerant [" +
7391 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7392 : "] saturated at the given conditions **",
7393 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex,
7394 : Temperature,
7395 : Temperature,
7396 : _,
7397 : "{C}",
7398 : "{C}");
7399 : }
7400 0 : return saturated_density;
7401 : }
7402 :
7403 95073908 : if (!state.dataGlobal->WarmupFlag) {
7404 : // some checks...
7405 5442971 : if (ErrCount > 0) {
7406 : // send temp range error if flagged
7407 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount += CurTempRangeErrCount;
7408 0 : if (CurTempRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount <=
7409 0 : state.dataFluidProps->RefrigerantErrorLimitTest) {
7410 0 : ShowWarningMessage(state,
7411 0 : std::string{RoutineName} + ": Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7412 : "] Temperature is out of range for superheated refrigerant density: values capped **");
7413 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7414 0 : ShowContinueErrorTimeStamp(state, "");
7415 : }
7416 0 : if (CurTempRangeErrCount > 0) {
7417 0 : ShowRecurringWarningErrorAtEnd(state,
7418 0 : std::string{RoutineName} + ": Refrigerant [" +
7419 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7420 : "] Temperature is out of range for superheated refrigerant density: values capped **",
7421 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrIndex,
7422 : Temperature,
7423 : Temperature,
7424 : _,
7425 : "{C}",
7426 : "{C}");
7427 : }
7428 :
7429 : // send pressure range error if flagged
7430 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount += CurPresRangeErrCount;
7431 0 : if (CurPresRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount <=
7432 0 : state.dataFluidProps->RefrigerantErrorLimitTest) {
7433 0 : ShowWarningMessage(state,
7434 0 : std::string{RoutineName} + ": Refrigerant [" + state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7435 : "] Pressure is out of range for superheated refrigerant density: values capped **");
7436 0 : ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom));
7437 0 : ShowContinueErrorTimeStamp(state, "");
7438 : }
7439 0 : if (CurPresRangeErrCount > 0) {
7440 0 : ShowRecurringWarningErrorAtEnd(state,
7441 0 : std::string{RoutineName} + ": Refrigerant [" +
7442 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name +
7443 : "] Pressure is out of range for superheated refrigerant density: values capped **",
7444 0 : state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrIndex,
7445 : Pressure,
7446 : Pressure,
7447 : _,
7448 : "{Pa}",
7449 : "{Pa}");
7450 : }
7451 : } // end error checking
7452 : }
7453 :
7454 95073908 : return ReturnValue;
7455 : }
7456 :
7457 : //*****************************************************************************
7458 : #ifdef EP_cache_GlycolSpecificHeat
7459 21209813 : Real64 GetSpecificHeatGlycol_raw(EnergyPlusData &state,
7460 : std::string_view const Glycol, // carries in substance name
7461 : Real64 const Temperature, // actual temperature given as input
7462 : int &GlycolIndex, // Index to Glycol Properties
7463 : std::string_view const CalledFrom // routine this function was called from (error messages)
7464 : )
7465 : #else
7466 : Real64 GetSpecificHeatGlycol(EnergyPlusData &state,
7467 : std::string_view const Glycol, // carries in substance name
7468 : Real64 const Temperature, // actual temperature given as input
7469 : int &GlycolIndex, // Index to Glycol Properties
7470 : std::string_view const CalledFrom // routine this function was called from (error messages)
7471 : )
7472 : #endif
7473 : {
7474 :
7475 : // FUNCTION INFORMATION:
7476 : // AUTHOR Rick Strand
7477 : // DATE WRITTEN June 2004
7478 : // MODIFIED N/A
7479 : // RE-ENGINEERED N/A
7480 :
7481 : // PURPOSE OF THIS FUNCTION:
7482 : // This subroutine finds specific heats for glycols at different
7483 : // temperatures.
7484 :
7485 : // METHODOLOGY EMPLOYED:
7486 : // Linear interpolation is used to find specific heat values for a
7487 : // particular glycol (water or some mixture of water and another fluid).
7488 : // Warnings are given if the point is not clearly in the bounds of the
7489 : // glycol data. The value returned is the appropriate limit value.
7490 :
7491 : // REFERENCES:
7492 : // GetFluidPropertiesData: subroutine enforces that temperatures in
7493 : // all temperature lists are entered in ascending order.
7494 :
7495 : // USE STATEMENTS:
7496 : // na
7497 :
7498 : // Return value
7499 :
7500 : // Locals
7501 : // FUNCTION ARGUMENT DEFINITIONS:
7502 :
7503 : // FUNCTION PARAMETERS:
7504 : static constexpr std::string_view RoutineName("GetSpecificHeatGlycol: ");
7505 :
7506 : // Get the input if we haven't already
7507 21209813 : if (state.dataFluidProps->GetInput) {
7508 0 : GetFluidPropertiesData(state);
7509 0 : state.dataFluidProps->GetInput = false;
7510 : }
7511 :
7512 : // If no glycols, no fluid properties can be evaluated
7513 21209813 : int GlycolNum(0);
7514 21209813 : if (state.dataFluidProps->NumOfGlycols == 0)
7515 0 : ReportFatalGlycolErrors(
7516 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom);
7517 :
7518 : // If glycol index has not yet been found for this fluid, find its value now
7519 21209813 : if (GlycolIndex > 0) {
7520 21209810 : GlycolNum = GlycolIndex;
7521 : } else { // Find which glycol (index) is being requested
7522 3 : GlycolNum = FindGlycol(state, Glycol);
7523 3 : if (GlycolNum == 0) {
7524 0 : ReportFatalGlycolErrors(
7525 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom);
7526 : }
7527 3 : GlycolIndex = GlycolNum;
7528 : }
7529 21209813 : auto const &glycol_data(state.dataFluidProps->GlycolData(GlycolIndex));
7530 :
7531 : // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value
7532 21209813 : if (!glycol_data.CpDataPresent) {
7533 0 : ReportFatalGlycolErrors(state,
7534 0 : state.dataFluidProps->NumOfGlycols,
7535 : GlycolNum,
7536 0 : glycol_data.CpDataPresent,
7537 : Glycol,
7538 : "GetSpecificHeatGlycol",
7539 : "specific heat",
7540 0 : CalledFrom);
7541 : }
7542 :
7543 : // Now determine the value of specific heat using interpolation
7544 21209813 : if (Temperature < glycol_data.CpLowTempValue) { // Temperature too low
7545 42 : if (!state.dataGlobal->WarmupFlag) {
7546 44 : state.dataFluidProps->LowTempLimitErrGetSpecificHeatGlycol_raw =
7547 44 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrCount;
7548 22 : if (state.dataFluidProps->LowTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProps->GlycolErrorLimitTest) {
7549 12 : ShowWarningMessage(state,
7550 8 : std::string{RoutineName} + "Temperature is out of range (too low) for fluid [" + glycol_data.Name +
7551 : "] specific heat supplied values **");
7552 12 : ShowContinueError(state,
7553 12 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
7554 : CalledFrom,
7555 : Temperature,
7556 : glycol_data.CpLowTempValue,
7557 4 : glycol_data.CpHighTempValue));
7558 4 : ShowContinueErrorTimeStamp(state, "");
7559 : }
7560 88 : ShowRecurringWarningErrorAtEnd(state,
7561 44 : std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + glycol_data.Name +
7562 : "] specific heat **",
7563 22 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrIndex,
7564 : Temperature,
7565 : Temperature,
7566 : _,
7567 : "{C}",
7568 : "{C}");
7569 : }
7570 42 : return glycol_data.CpValues(glycol_data.CpLowTempIndex);
7571 21209771 : } else if (Temperature > glycol_data.CpHighTempValue) { // Temperature too high
7572 69 : if (!state.dataGlobal->WarmupFlag) {
7573 4 : state.dataFluidProps->HighTempLimitErrGetSpecificHeatGlycol_raw =
7574 4 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrCount;
7575 2 : if (state.dataFluidProps->HighTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProps->GlycolErrorLimitTest) {
7576 3 : ShowWarningMessage(state,
7577 2 : std::string{RoutineName} + "Temperature is out of range (too high) for fluid [" + glycol_data.Name +
7578 : "] specific heat **");
7579 3 : ShowContinueError(state,
7580 3 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
7581 : CalledFrom,
7582 : Temperature,
7583 : glycol_data.CpLowTempValue,
7584 1 : glycol_data.CpHighTempValue));
7585 1 : ShowContinueErrorTimeStamp(state, "");
7586 : }
7587 8 : ShowRecurringWarningErrorAtEnd(state,
7588 4 : std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + glycol_data.Name +
7589 : "] specific heat **",
7590 2 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrIndex,
7591 : Temperature,
7592 : Temperature,
7593 : _,
7594 : "{C}",
7595 : "{C}");
7596 : }
7597 69 : return glycol_data.CpValues(glycol_data.CpHighTempIndex);
7598 : } else { // Temperature somewhere between the lowest and highest value
7599 21209702 : auto const &glycol_CpTemps(glycol_data.CpTemps);
7600 21209702 : auto const &glycol_CpValues(glycol_data.CpValues);
7601 : // bracket is temp > low, <= high (for interpolation
7602 : // for ( int Loop = glycol_data.CpLowTempIndex + 1; Loop <= glycol_data.CpHighTempIndex; ++Loop ) { //Tuned Replaced by binary search
7603 : // below if ( Temperature > glycol_data.CpTemps( Loop ) ) continue; return GetInterpValue( Temperature, glycol_CpTemps( Loop - 1
7604 : //), glycol_CpTemps( Loop ), glycol_CpValues( Loop - 1 ), glycol_CpValues( Loop ) ); break; // DO loop
7605 : //}
7606 : // assert( std::is_sorted( glycol_CpTemps.begin(), glycol_CpTemps.end() ) ); // Sorted temperature array is assumed: Enable if/when arrays
7607 : // have begin()/end()
7608 21209702 : assert(glycol_CpTemps.size() <=
7609 : static_cast<std::size_t>(std::numeric_limits<int>::max())); // Array indexes are int now so this is future protection
7610 21209702 : int beg(1), mid, end(glycol_CpTemps.isize()); // 1-based indexing
7611 21209702 : assert(end > 0);
7612 233064250 : while (beg + 1 < end) {
7613 105927274 : mid = ((beg + end) >> 1); // bit shifting is faster than /2
7614 105927274 : (Temperature > glycol_CpTemps(mid) ? beg : end) = mid;
7615 : } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end]
7616 21209702 : return GetInterpValue_fast(Temperature, glycol_CpTemps(beg), glycol_CpTemps(end), glycol_CpValues(beg), glycol_CpValues(end));
7617 : }
7618 : }
7619 :
7620 : //*****************************************************************************
7621 :
7622 90160649 : Real64 GetDensityGlycol(EnergyPlusData &state,
7623 : std::string_view const Glycol, // carries in substance name
7624 : Real64 const Temperature, // actual temperature given as input
7625 : int &GlycolIndex, // Index to Glycol Properties
7626 : std::string_view const CalledFrom // routine this function was called from (error messages)
7627 : )
7628 : {
7629 :
7630 : // FUNCTION INFORMATION:
7631 : // AUTHOR Rick Strand
7632 : // DATE WRITTEN June 2004
7633 : // MODIFIED N/A
7634 : // RE-ENGINEERED N/A
7635 :
7636 : // PURPOSE OF THIS FUNCTION:
7637 : // This subroutine finds the density for glycols at different
7638 : // temperatures.
7639 :
7640 : // METHODOLOGY EMPLOYED:
7641 : // Linear interpolation is used to find density values for a
7642 : // particular glycol (water or some mixture of water and another fluid).
7643 : // Warnings are given if the point is not clearly in the bounds of the
7644 : // glycol data. The value returned is the appropriate limit value.
7645 :
7646 : // REFERENCES:
7647 : // GetFluidPropertiesData: subroutine enforces that temperatures in
7648 : // all temperature lists are entered in ascending order.
7649 :
7650 : // USE STATEMENTS:
7651 : // na
7652 :
7653 : // Return value
7654 : Real64 ReturnValue;
7655 :
7656 : // Locals
7657 : // FUNCTION ARGUMENT DEFINITIONS:
7658 :
7659 : // FUNCTION PARAMETERS:
7660 : static constexpr std::string_view RoutineName("GetDensityGlycol: ");
7661 :
7662 : // INTERFACE BLOCK SPECIFICATIONS:
7663 : // na
7664 :
7665 : // DERIVED TYPE DEFINITIONS:
7666 : // na
7667 :
7668 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
7669 : int Loop; // DO loop counter
7670 : int GlycolNum;
7671 : bool LowErrorThisTime;
7672 : bool HighErrorThisTime;
7673 :
7674 90160649 : LowErrorThisTime = false;
7675 90160649 : HighErrorThisTime = false;
7676 :
7677 : // Get the input if we haven't already
7678 90160649 : if (state.dataFluidProps->GetInput) {
7679 115 : GetFluidPropertiesData(state);
7680 115 : state.dataFluidProps->GetInput = false;
7681 : }
7682 :
7683 : // If no glycols, no fluid properties can be evaluated
7684 90160649 : GlycolNum = 0;
7685 90160649 : if (state.dataFluidProps->NumOfGlycols == 0)
7686 0 : ReportFatalGlycolErrors(state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom);
7687 :
7688 : // If glycol index has not yet been found for this fluid, find its value now
7689 90160649 : if (GlycolIndex > 0) {
7690 90160648 : GlycolNum = GlycolIndex;
7691 : } else { // Find which refrigerant (index) is being requested
7692 1 : GlycolNum = FindGlycol(state, Glycol);
7693 1 : if (GlycolNum == 0) {
7694 0 : ReportFatalGlycolErrors(
7695 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom);
7696 : }
7697 1 : GlycolIndex = GlycolNum;
7698 : }
7699 :
7700 : // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value
7701 90160649 : if (!state.dataFluidProps->GlycolData(GlycolIndex).RhoDataPresent) {
7702 0 : ReportFatalGlycolErrors(state,
7703 0 : state.dataFluidProps->NumOfGlycols,
7704 : GlycolNum,
7705 0 : state.dataFluidProps->GlycolData(GlycolIndex).RhoDataPresent,
7706 : Glycol,
7707 : "GetDensityGlycol",
7708 : "density",
7709 0 : CalledFrom);
7710 : }
7711 :
7712 : // Now determine the value of specific heat using interpolation
7713 90160649 : if (Temperature < state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempValue) { // Temperature too low
7714 775 : LowErrorThisTime = true;
7715 775 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempIndex);
7716 90159874 : } else if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempValue) { // Temperature too high
7717 16272 : HighErrorThisTime = true;
7718 16272 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempIndex);
7719 : } else { // Temperature somewhere between the lowest and highest value
7720 90143602 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempIndex);
7721 : // bracket is temp > low, <= high (for interpolation
7722 538138906 : for (Loop = state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempIndex + 1;
7723 538138906 : Loop <= state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempIndex;
7724 : ++Loop) {
7725 538138906 : if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).RhoTemps(Loop)) continue;
7726 360574408 : ReturnValue = GetInterpValue(state,
7727 : Temperature,
7728 90143602 : state.dataFluidProps->GlycolData(GlycolIndex).RhoTemps(Loop - 1),
7729 90143602 : state.dataFluidProps->GlycolData(GlycolIndex).RhoTemps(Loop),
7730 90143602 : state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(Loop - 1),
7731 90143602 : state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(Loop));
7732 90143602 : break; // DO loop
7733 : }
7734 : }
7735 :
7736 : // Error handling
7737 90160649 : if (!state.dataGlobal->WarmupFlag) {
7738 :
7739 57449491 : if (LowErrorThisTime) {
7740 774 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityLowErrCount;
7741 774 : state.dataFluidProps->LowTempLimitErrGetDensityGlycol = state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityLowErrCount;
7742 : }
7743 57449491 : if (HighErrorThisTime) {
7744 9812 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityHighErrCount;
7745 9812 : state.dataFluidProps->HighTempLimitErrGetDensityGlycol = state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityHighErrCount;
7746 : }
7747 :
7748 57449491 : if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetDensityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) {
7749 12 : ShowWarningMessage(state,
7750 8 : std::string{RoutineName} + "Temperature is out of range (too low) for fluid [" +
7751 12 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] density **");
7752 12 : ShowContinueError(state,
7753 16 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
7754 : CalledFrom,
7755 : Temperature,
7756 4 : state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempValue,
7757 8 : state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempValue));
7758 4 : ShowContinueErrorTimeStamp(state, "");
7759 : }
7760 57449491 : if (LowErrorThisTime) {
7761 3096 : ShowRecurringWarningErrorAtEnd(state,
7762 1548 : std::string{RoutineName} + "Temperature out of range (too low) for fluid [" +
7763 2322 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] density **",
7764 774 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityLowErrIndex,
7765 : Temperature,
7766 : Temperature,
7767 : _,
7768 : "{C}",
7769 : "{C}");
7770 : }
7771 :
7772 57449491 : if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetDensityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) {
7773 12 : ShowWarningMessage(state,
7774 8 : std::string{RoutineName} + "Temperature is out of range (too high) for fluid [" +
7775 12 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] density **");
7776 12 : ShowContinueError(state,
7777 16 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
7778 : CalledFrom,
7779 : Temperature,
7780 4 : state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempValue,
7781 8 : state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempValue));
7782 4 : ShowContinueErrorTimeStamp(state, "");
7783 : }
7784 57449491 : if (HighErrorThisTime) {
7785 39248 : ShowRecurringWarningErrorAtEnd(state,
7786 19624 : std::string{RoutineName} + "Temperature out of range (too high) for fluid [" +
7787 29436 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] density **",
7788 9812 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityHighErrIndex,
7789 : Temperature,
7790 : Temperature,
7791 : _,
7792 : "{C}",
7793 : "{C}");
7794 : }
7795 : }
7796 :
7797 90160649 : return ReturnValue;
7798 : }
7799 :
7800 : //*****************************************************************************
7801 :
7802 7103101 : Real64 GetConductivityGlycol(EnergyPlusData &state,
7803 : std::string_view const Glycol, // carries in substance name
7804 : Real64 const Temperature, // actual temperature given as input
7805 : int &GlycolIndex, // Index to Glycol Properties
7806 : std::string_view const CalledFrom // routine this function was called from (error messages)
7807 : )
7808 : {
7809 :
7810 : // FUNCTION INFORMATION:
7811 : // AUTHOR Rick Strand
7812 : // DATE WRITTEN June 2004
7813 : // MODIFIED N/A
7814 : // RE-ENGINEERED N/A
7815 :
7816 : // PURPOSE OF THIS FUNCTION:
7817 : // This subroutine finds the conductivity for glycols at different
7818 : // temperatures.
7819 :
7820 : // METHODOLOGY EMPLOYED:
7821 : // Linear interpolation is used to find conductivity values for a
7822 : // particular glycol (water or some mixture of water and another fluid).
7823 : // Warnings are given if the point is not clearly in the bounds of the
7824 : // glycol data. The value returned is the appropriate limit value.
7825 :
7826 : // REFERENCES:
7827 : // GetFluidPropertiesData: subroutine enforces that temperatures in
7828 : // all temperature lists are entered in ascending order.
7829 :
7830 : // USE STATEMENTS:
7831 : // na
7832 :
7833 : // Return value
7834 : Real64 ReturnValue;
7835 :
7836 : // Locals
7837 : // FUNCTION ARGUMENT DEFINITIONS:
7838 :
7839 : // FUNCTION PARAMETERS:
7840 : static constexpr std::string_view RoutineName("GetConductivityGlycol: ");
7841 :
7842 : // INTERFACE BLOCK SPECIFICATIONS:
7843 : // na
7844 :
7845 : // DERIVED TYPE DEFINITIONS:
7846 : // na
7847 :
7848 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
7849 : int Loop; // DO loop counter
7850 : int GlycolNum;
7851 : bool LowErrorThisTime;
7852 : bool HighErrorThisTime;
7853 :
7854 7103101 : LowErrorThisTime = false;
7855 7103101 : HighErrorThisTime = false;
7856 :
7857 : // Get the input if we haven't already
7858 7103101 : if (state.dataFluidProps->GetInput) {
7859 0 : GetFluidPropertiesData(state);
7860 0 : state.dataFluidProps->GetInput = false;
7861 : }
7862 :
7863 : // If no glycols, no fluid properties can be evaluated
7864 7103101 : GlycolNum = 0;
7865 7103101 : if (state.dataFluidProps->NumOfGlycols == 0)
7866 0 : ReportFatalGlycolErrors(
7867 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom);
7868 :
7869 : // If glycol index has not yet been found for this fluid, find its value now
7870 7103101 : if (GlycolIndex > 0) {
7871 7103101 : GlycolNum = GlycolIndex;
7872 : } else { // Find which refrigerant (index) is being requested
7873 0 : GlycolNum = FindGlycol(state, Glycol);
7874 0 : if (GlycolNum == 0) {
7875 0 : ReportFatalGlycolErrors(
7876 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom);
7877 : }
7878 0 : GlycolIndex = GlycolNum;
7879 : }
7880 :
7881 : // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value
7882 7103101 : if (!state.dataFluidProps->GlycolData(GlycolIndex).CondDataPresent) {
7883 0 : ReportFatalGlycolErrors(state,
7884 0 : state.dataFluidProps->NumOfGlycols,
7885 : GlycolNum,
7886 0 : state.dataFluidProps->GlycolData(GlycolIndex).CondDataPresent,
7887 : Glycol,
7888 : "GetConductivityGlycol",
7889 : "conductivity",
7890 0 : CalledFrom);
7891 : }
7892 :
7893 : // Now determine the value of specific heat using interpolation
7894 7103101 : if (Temperature < state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempValue) { // Temperature too low
7895 0 : LowErrorThisTime = true;
7896 0 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).CondValues(state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempIndex);
7897 7103101 : } else if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempValue) { // Temperature too high
7898 0 : HighErrorThisTime = true;
7899 0 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).CondValues(state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempIndex);
7900 : } else { // Temperature somewhere between the lowest and highest value
7901 7103101 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).CondValues(state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempIndex);
7902 : // bracket is temp > low, <= high (for interpolation
7903 26359242 : for (Loop = state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempIndex + 1;
7904 26359242 : Loop <= state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempIndex;
7905 : ++Loop) {
7906 26359242 : if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).CondTemps(Loop)) continue;
7907 28412404 : ReturnValue = GetInterpValue(state,
7908 : Temperature,
7909 7103101 : state.dataFluidProps->GlycolData(GlycolIndex).CondTemps(Loop - 1),
7910 7103101 : state.dataFluidProps->GlycolData(GlycolIndex).CondTemps(Loop),
7911 7103101 : state.dataFluidProps->GlycolData(GlycolIndex).CondValues(Loop - 1),
7912 7103101 : state.dataFluidProps->GlycolData(GlycolIndex).CondValues(Loop));
7913 7103101 : break; // DO loop
7914 : }
7915 : }
7916 :
7917 : // Error handling
7918 7103101 : if (!state.dataGlobal->WarmupFlag) {
7919 :
7920 997998 : if (LowErrorThisTime) {
7921 0 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount;
7922 0 : state.dataFluidProps->LowTempLimitErrGetConductivityGlycol =
7923 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount;
7924 : }
7925 997998 : if (HighErrorThisTime) {
7926 0 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount;
7927 0 : state.dataFluidProps->HighTempLimitErrGetConductivityGlycol =
7928 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount;
7929 : }
7930 :
7931 997998 : if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetConductivityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) {
7932 0 : ShowWarningMessage(state,
7933 0 : std::string{RoutineName} + "Temperature is out of range (too low) for fluid [" +
7934 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] conductivity **");
7935 0 : ShowContinueError(state,
7936 0 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
7937 : CalledFrom,
7938 : Temperature,
7939 0 : state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempValue,
7940 0 : state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempValue));
7941 0 : ShowContinueErrorTimeStamp(state, "");
7942 : }
7943 997998 : if (LowErrorThisTime) {
7944 0 : ShowRecurringWarningErrorAtEnd(state,
7945 0 : std::string{RoutineName} + "Temperature out of range (too low) for fluid [" +
7946 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] conductivity **",
7947 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityLowErrIndex,
7948 : Temperature,
7949 : Temperature,
7950 : _,
7951 : "{C}",
7952 : "{C}");
7953 : }
7954 :
7955 997998 : if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetConductivityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) {
7956 0 : ShowWarningMessage(state,
7957 0 : std::string{RoutineName} + "Temperature is out of range (too high) for fluid [" +
7958 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] conductivity **");
7959 0 : ShowContinueError(state,
7960 0 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
7961 : CalledFrom,
7962 : Temperature,
7963 0 : state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempValue,
7964 0 : state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempValue));
7965 0 : ShowContinueErrorTimeStamp(state, "");
7966 : }
7967 997998 : if (HighErrorThisTime) {
7968 0 : ShowRecurringWarningErrorAtEnd(state,
7969 0 : std::string{RoutineName} + "Temperature out of range (too high) for fluid [" +
7970 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] conductivity **",
7971 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityHighErrIndex,
7972 : Temperature,
7973 : Temperature,
7974 : _,
7975 : "{C}",
7976 : "{C}");
7977 : }
7978 : }
7979 :
7980 7103101 : return ReturnValue;
7981 : }
7982 :
7983 : //*****************************************************************************
7984 :
7985 7118311 : Real64 GetViscosityGlycol(EnergyPlusData &state,
7986 : std::string_view const Glycol, // carries in substance name
7987 : Real64 const Temperature, // actual temperature given as input
7988 : int &GlycolIndex, // Index to Glycol Properties
7989 : std::string_view const CalledFrom // routine this function was called from (error messages)
7990 : )
7991 : {
7992 :
7993 : // FUNCTION INFORMATION:
7994 : // AUTHOR Rick Strand
7995 : // DATE WRITTEN June 2004
7996 : // MODIFIED N/A
7997 : // RE-ENGINEERED N/A
7998 :
7999 : // PURPOSE OF THIS FUNCTION:
8000 : // This subroutine finds the viscosity for glycols at different
8001 : // temperatures.
8002 :
8003 : // METHODOLOGY EMPLOYED:
8004 : // Linear interpolation is used to find viscosity values for a
8005 : // particular glycol (water or some mixture of water and another fluid).
8006 : // Warnings are given if the point is not clearly in the bounds of the
8007 : // glycol data. The value returned is the appropriate limit value.
8008 :
8009 : // REFERENCES:
8010 : // GetFluidPropertiesData: subroutine enforces that temperatures in
8011 : // all temperature lists are entered in ascending order.
8012 :
8013 : // USE STATEMENTS:
8014 : // na
8015 :
8016 : // Return value
8017 : Real64 ReturnValue; // Value for function
8018 :
8019 : // Locals
8020 : // FUNCTION ARGUMENT DEFINITIONS:
8021 :
8022 : // FUNCTION PARAMETERS:
8023 : static constexpr std::string_view RoutineName("GetViscosityGlycol: ");
8024 :
8025 : // INTERFACE BLOCK SPECIFICATIONS:
8026 : // na
8027 :
8028 : // DERIVED TYPE DEFINITIONS:
8029 : // na
8030 :
8031 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8032 : int Loop; // DO loop counter
8033 : int GlycolNum;
8034 : bool LowErrorThisTime;
8035 : bool HighErrorThisTime;
8036 :
8037 7118311 : LowErrorThisTime = false;
8038 7118311 : HighErrorThisTime = false;
8039 :
8040 : // Get the input if we haven't already
8041 7118311 : if (state.dataFluidProps->GetInput) {
8042 0 : GetFluidPropertiesData(state);
8043 0 : state.dataFluidProps->GetInput = false;
8044 : }
8045 :
8046 : // If no glycols, no fluid properties can be evaluated
8047 7118311 : GlycolNum = 0;
8048 7118311 : if (state.dataFluidProps->NumOfGlycols == 0)
8049 0 : ReportFatalGlycolErrors(
8050 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom);
8051 :
8052 : // If glycol index has not yet been found for this fluid, find its value now
8053 7118311 : if (GlycolIndex > 0) {
8054 7118311 : GlycolNum = GlycolIndex;
8055 : } else { // Find which refrigerant (index) is being requested
8056 0 : GlycolNum = FindGlycol(state, Glycol);
8057 0 : if (GlycolNum == 0) {
8058 0 : ReportFatalGlycolErrors(
8059 0 : state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom);
8060 : }
8061 0 : GlycolIndex = GlycolNum;
8062 : }
8063 :
8064 : // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value
8065 7118311 : if (!state.dataFluidProps->GlycolData(GlycolIndex).ViscDataPresent) {
8066 0 : ReportFatalGlycolErrors(state,
8067 0 : state.dataFluidProps->NumOfGlycols,
8068 : GlycolNum,
8069 0 : state.dataFluidProps->GlycolData(GlycolIndex).ViscDataPresent,
8070 : Glycol,
8071 : "GetViscosityGlycol",
8072 : "viscosity",
8073 0 : CalledFrom);
8074 : }
8075 :
8076 : // Now determine the value of specific heat using interpolation
8077 7118311 : if (Temperature < state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempValue) { // Temperature too low
8078 0 : LowErrorThisTime = true;
8079 0 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempIndex);
8080 7118311 : } else if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempValue) { // Temperature too high
8081 0 : HighErrorThisTime = true;
8082 0 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempIndex);
8083 : } else { // Temperature somewhere between the lowest and highest value
8084 7118311 : ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempIndex);
8085 : // bracket is temp > low, <= high (for interpolation
8086 26497814 : for (Loop = state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempIndex + 1;
8087 26497814 : Loop <= state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempIndex;
8088 : ++Loop) {
8089 26497814 : if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).ViscTemps(Loop)) continue;
8090 28473244 : ReturnValue = GetInterpValue(state,
8091 : Temperature,
8092 7118311 : state.dataFluidProps->GlycolData(GlycolIndex).ViscTemps(Loop - 1),
8093 7118311 : state.dataFluidProps->GlycolData(GlycolIndex).ViscTemps(Loop),
8094 7118311 : state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(Loop - 1),
8095 7118311 : state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(Loop));
8096 7118311 : break; // DO loop
8097 : }
8098 : }
8099 :
8100 : // Error handling
8101 7118311 : if (!state.dataGlobal->WarmupFlag) {
8102 :
8103 1005486 : if (LowErrorThisTime) {
8104 0 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount;
8105 0 : state.dataFluidProps->LowTempLimitErrGetViscosityGlycol = state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount;
8106 : }
8107 1005486 : if (HighErrorThisTime) {
8108 0 : ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount;
8109 0 : state.dataFluidProps->HighTempLimitErrGetViscosityGlycol =
8110 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount;
8111 : }
8112 :
8113 1005486 : if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetViscosityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) {
8114 0 : ShowWarningMessage(state,
8115 0 : std::string{RoutineName} + "Temperature is out of range (too low) for fluid [" +
8116 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] viscosity **");
8117 0 : ShowContinueError(state,
8118 0 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
8119 : CalledFrom,
8120 : Temperature,
8121 0 : state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempValue,
8122 0 : state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempValue));
8123 0 : ShowContinueErrorTimeStamp(state, "");
8124 : }
8125 1005486 : if (LowErrorThisTime) {
8126 0 : ShowRecurringWarningErrorAtEnd(state,
8127 0 : std::string{RoutineName} + "Temperature out of range (too low) for fluid [" +
8128 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] viscosity **",
8129 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityLowErrIndex,
8130 : Temperature,
8131 : Temperature,
8132 : _,
8133 : "{C}",
8134 : "{C}");
8135 : }
8136 :
8137 1005486 : if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetViscosityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) {
8138 0 : ShowWarningMessage(state,
8139 0 : std::string{RoutineName} + "Temperature is out of range (too high) for fluid [" +
8140 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] viscosity **");
8141 0 : ShowContinueError(state,
8142 0 : format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]",
8143 : CalledFrom,
8144 : Temperature,
8145 0 : state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempValue,
8146 0 : state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempValue));
8147 0 : ShowContinueErrorTimeStamp(state, "");
8148 : }
8149 1005486 : if (HighErrorThisTime) {
8150 0 : ShowRecurringWarningErrorAtEnd(state,
8151 0 : std::string{RoutineName} + "Temperature out of range (too high) for fluid [" +
8152 0 : state.dataFluidProps->GlycolData(GlycolIndex).Name + "] viscosity **",
8153 0 : state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityHighErrIndex,
8154 : Temperature,
8155 : Temperature,
8156 : _,
8157 : "{C}",
8158 : "{C}");
8159 : }
8160 : }
8161 :
8162 7118311 : return ReturnValue;
8163 : }
8164 :
8165 : //*****************************************************************************
8166 :
8167 0 : void GetInterpValue_error(EnergyPlusData &state)
8168 : {
8169 0 : ShowFatalError(state, "GetInterpValue: Temperatures for fluid property data too close together, division by zero");
8170 0 : }
8171 :
8172 : //*****************************************************************************
8173 :
8174 0 : Real64 GetQualityRefrig(EnergyPlusData &state,
8175 : std::string const &Refrigerant, // carries in substance name
8176 : Real64 const Temperature, // actual temperature given as input
8177 : Real64 const Enthalpy, // actual enthalpy given as input
8178 : int &RefrigIndex, // Index to Refrigerant Properties
8179 : std::string_view const CalledFrom // routine this function was called from (error messages)
8180 : )
8181 : {
8182 :
8183 : // FUNCTION INFORMATION:
8184 : // AUTHOR Rick Strand
8185 : // DATE WRITTEN May 2000
8186 : // MODIFIED Simon Rees (May 2002)
8187 : // RE-ENGINEERED na
8188 :
8189 : // PURPOSE OF THIS FUNCTION:
8190 : // This function determines the quality of a refrigerant in the saturate
8191 : // region based on its temperature and enthalpy
8192 :
8193 : // METHODOLOGY EMPLOYED:
8194 : // Just checks to see whether or not the refrigerant name coming in can
8195 : // be found in the refrigerant derived type. If so, the "reverse" of the
8196 : // GetSatEnthalpyRefrig function is performed.
8197 :
8198 : // REFERENCES:
8199 : // na
8200 :
8201 : // USE STATEMENTS:
8202 : // na
8203 :
8204 : // Return value
8205 : Real64 ReturnValue;
8206 :
8207 : // Locals
8208 : // FUNCTION ARGUMENT DEFINITIONS:
8209 :
8210 : // INTERFACE BLOCK SPECIFICATIONS:
8211 : // na
8212 :
8213 : // DERIVED TYPE DEFINITIONS:
8214 : // na
8215 :
8216 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8217 : Real64 SatVapEnthalpy; // value of enthalpy at hi index value for given Quality
8218 : Real64 SatLiqEnthalpy; // value of enthalpy at TempIndex index value for given Quality
8219 : int RefrigNum; // index for refrigerant under consideration
8220 : int HiTempIndex; // array index for temp above input temp
8221 : int LoTempIndex; // array index for temp below input temp
8222 : Real64 TempInterpRatio; // ratio to interpolate in temperature domain
8223 :
8224 0 : if (state.dataFluidProps->GetInput) {
8225 0 : GetFluidPropertiesData(state);
8226 0 : state.dataFluidProps->GetInput = false;
8227 : }
8228 :
8229 0 : RefrigNum = 0;
8230 0 : if (state.dataFluidProps->NumOfRefrigerants == 0) {
8231 0 : ReportFatalRefrigerantErrors(
8232 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetQualityRefrig", "enthalpy", CalledFrom);
8233 : }
8234 :
8235 : // Find which refrigerant (index) is being requested and then determine
8236 : // where the temperature is within the temperature array
8237 0 : if (RefrigIndex > 0) {
8238 0 : RefrigNum = RefrigIndex;
8239 : } else {
8240 : // Find which refrigerant (index) is being requested
8241 0 : RefrigNum = FindRefrigerant(state, Refrigerant);
8242 0 : if (RefrigNum == 0) {
8243 0 : ReportFatalRefrigerantErrors(
8244 0 : state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetQualityRefrig", "enthalpy", CalledFrom);
8245 : }
8246 0 : RefrigIndex = RefrigNum;
8247 : }
8248 0 : auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum));
8249 :
8250 0 : LoTempIndex = FindArrayIndex(Temperature, refrig.HTemps, refrig.HfLowTempIndex, refrig.HfHighTempIndex);
8251 0 : HiTempIndex = LoTempIndex + 1;
8252 :
8253 : // check on the data bounds and adjust indices to give clamped return value
8254 0 : if (LoTempIndex == 0) {
8255 0 : SatLiqEnthalpy = refrig.HfValues(refrig.HfLowTempIndex);
8256 0 : SatVapEnthalpy = refrig.HfgValues(refrig.HfLowTempIndex);
8257 : // Temperature supplied is out of bounds--produce an error message...
8258 0 : if (!state.dataGlobal->WarmupFlag)
8259 0 : ShowRecurringWarningErrorAtEnd(state,
8260 : "GetQualityRefrig: ** Temperature for requested quality is below the range of data supplied **",
8261 0 : state.dataFluidProps->TempLoRangeErrIndexGetQualityRefrig,
8262 : Temperature,
8263 : Temperature,
8264 : _,
8265 : "{C}",
8266 : "{C}");
8267 :
8268 0 : } else if (HiTempIndex > refrig.NumHPoints) {
8269 0 : SatLiqEnthalpy = refrig.HfValues(refrig.HfHighTempIndex);
8270 0 : SatVapEnthalpy = refrig.HfgValues(refrig.HfHighTempIndex);
8271 : // Temperature supplied is out of bounds--produce an error message...
8272 0 : if (!state.dataGlobal->WarmupFlag)
8273 0 : ShowRecurringWarningErrorAtEnd(state,
8274 : "GetQualityRefrig: ** Temperature requested quality is above the range of data supplied **",
8275 0 : state.dataFluidProps->TempHiRangeErrIndexGetQualityRefrig,
8276 : Temperature,
8277 : Temperature,
8278 : _,
8279 : "{C}",
8280 : "{C}");
8281 :
8282 : } else { // in normal range work out interpolated liq and gas enthalpies
8283 0 : TempInterpRatio = (Temperature - refrig.HTemps(LoTempIndex)) / (refrig.HTemps(HiTempIndex) - refrig.HTemps(LoTempIndex));
8284 0 : SatLiqEnthalpy = TempInterpRatio * refrig.HfValues(HiTempIndex) + (1.0 - TempInterpRatio) * refrig.HfValues(LoTempIndex);
8285 0 : SatVapEnthalpy = TempInterpRatio * refrig.HfgValues(HiTempIndex) + (1.0 - TempInterpRatio) * refrig.HfgValues(LoTempIndex);
8286 : }
8287 :
8288 : // calculate final quality value from enthalpy ratio
8289 0 : ReturnValue = (Enthalpy - SatLiqEnthalpy) / (SatVapEnthalpy - SatLiqEnthalpy);
8290 :
8291 : // final check to bound returned quality value
8292 0 : if (ReturnValue < 0.0) {
8293 : // CALL ShowRecurringWarningErrorAtEnd(state, 'GetQualityRefrig: ** '// &
8294 : // 'Quality is less than zero in GetQualityRefrig; Quality reset to 0.0 **')
8295 0 : ReturnValue = 0.0;
8296 0 : } else if (ReturnValue > 1.0) {
8297 : // CALL ShowRecurringWarningErrorAtEnd(state, 'GetQualityRefrig: ** '// &
8298 : // 'Quality is greater than one in GetQualityRefrig; refrigerant is superheated **')
8299 0 : ReturnValue = 2.0;
8300 : }
8301 :
8302 0 : return ReturnValue;
8303 : }
8304 :
8305 : //*****************************************************************************
8306 :
8307 716510 : int FindRefrigerant(EnergyPlusData &state, std::string_view const Refrigerant) // carries in substance name
8308 : {
8309 :
8310 : // FUNCTION INFORMATION:
8311 : // AUTHOR Rick Strand
8312 : // DATE WRITTEN May 2000
8313 : // MODIFIED Simon Rees (June 2002)
8314 : // RE-ENGINEERED na
8315 :
8316 : // PURPOSE OF THIS FUNCTION:
8317 : // This function simply determines the index of the refrigerant named
8318 : // in the input variable to this routine within the derived type.
8319 :
8320 : // METHODOLOGY EMPLOYED:
8321 : // Just checks to see whether or not the refrigerant name coming in can
8322 : // be found in the refrigerant derived type. If so, the function is set
8323 : // to the index within the derived type. If the input has not been read
8324 : // yet for some reason, that must be done.
8325 :
8326 : // Return value
8327 : int FindRefrigerant;
8328 :
8329 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8330 : int Found; // Indicator for found item
8331 :
8332 : // Make sure we have already read in the input
8333 716510 : if (state.dataFluidProps->GetInput) {
8334 2 : GetFluidPropertiesData(state);
8335 2 : state.dataFluidProps->GetInput = false;
8336 : }
8337 :
8338 : // Check to see if this glycol shows up in the glycol data
8339 716510 : Found = UtilityRoutines::FindItemInList(UtilityRoutines::MakeUPPERCase(Refrigerant), state.dataFluidProps->RefrigData);
8340 :
8341 716510 : if (Found > 0) {
8342 716510 : FindRefrigerant = Found;
8343 716510 : state.dataFluidProps->RefrigUsed(Found) = true;
8344 : } else { // not found - errors handled in calling proceedure
8345 0 : FindRefrigerant = 0;
8346 : }
8347 :
8348 716510 : return FindRefrigerant;
8349 : }
8350 :
8351 : //*****************************************************************************
8352 :
8353 55156 : int FindGlycol(EnergyPlusData &state, std::string_view const Glycol) // carries in substance name
8354 : {
8355 :
8356 : // FUNCTION INFORMATION:
8357 : // AUTHOR Rick Strand
8358 : // DATE WRITTEN May 2000
8359 : // MODIFIED Simon Rees (June 2002)
8360 : // RE-ENGINEERED na
8361 :
8362 : // PURPOSE OF THIS FUNCTION:
8363 : // This function simply determines the index of the glycol named
8364 : // in the input variable to this routine within the derived type.
8365 :
8366 : // METHODOLOGY EMPLOYED:
8367 : // Just checks to see whether or not the glycol name coming in can
8368 : // be found in the glycol derived type. If so, the function is set
8369 : // to the index within the derived type. If the input has not been read
8370 : // yet for some reason, that must be done.
8371 :
8372 : // Return value
8373 : int FindGlycol;
8374 :
8375 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8376 : int Found; // Indicator for found item
8377 :
8378 : // Make sure we have already read in the input
8379 55156 : if (state.dataFluidProps->GetInput) {
8380 331 : GetFluidPropertiesData(state);
8381 331 : state.dataFluidProps->GetInput = false;
8382 : }
8383 :
8384 : // Check to see if this glycol shows up in the glycol data
8385 110312 : Found = UtilityRoutines::FindItemInList(UtilityRoutines::MakeUPPERCase(Glycol),
8386 55156 : state.dataFluidProps->GlycolData,
8387 55156 : state.dataFluidProps->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs
8388 :
8389 55156 : if (Found > 0) {
8390 55156 : FindGlycol = Found;
8391 55156 : state.dataFluidProps->GlycolUsed(Found) = true;
8392 : } else { // return zero - error checking in calling proceedure
8393 0 : FindGlycol = 0;
8394 : }
8395 :
8396 55156 : return FindGlycol;
8397 : }
8398 :
8399 : //*****************************************************************************
8400 :
8401 59428 : std::string GetGlycolNameByIndex(EnergyPlusData &state, int const Idx) // carries in substance index
8402 : {
8403 : // FUNCTION INFORMATION:
8404 : // AUTHOR Edwin Lee
8405 : // DATE WRITTEN May 2009
8406 : // MODIFIED na
8407 : // RE-ENGINEERED na
8408 :
8409 : // PURPOSE OF THIS FUNCTION:
8410 : // This function simply returns the glycol name by index from the
8411 : // GlycolData data structure. This is needed to expose the name
8412 : // as the data structure is private.
8413 : // This is used by plant equipment to pass in both the proper index
8414 : // and the proper name when calling glycol routines. Thus, the index
8415 : // is already known, and the input is assumed to be found.
8416 :
8417 : // METHODOLOGY EMPLOYED:
8418 : // Just checks to see whether or not the glycol index is valid
8419 : // and if so, the function returns the name. If not, it returns ' '
8420 :
8421 : // REFERENCES:
8422 : // na
8423 :
8424 : // USE STATEMENTS:
8425 : // na
8426 :
8427 : // Return value
8428 : // na
8429 :
8430 : // Locals
8431 : // FUNCTION ARGUMENT DEFINITIONS:
8432 :
8433 : // FUNCTION PARAMETER DEFINITIONS:
8434 : // na
8435 :
8436 : // INTERFACE BLOCK SPECIFICATIONS
8437 : // na
8438 :
8439 : // DERIVED TYPE DEFINITIONS
8440 : // na
8441 :
8442 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8443 : // na
8444 :
8445 : // Check to see if this glycol shows up in the glycol data
8446 : // ArrayLength = SIZE(GlycolData)
8447 :
8448 59428 : if (Idx > 0 && Idx <= state.dataFluidProps->NumOfGlycols) {
8449 25800 : return state.dataFluidProps->GlycolData(Idx).Name;
8450 : } else { // return blank - error checking in calling proceedure
8451 33628 : return "";
8452 : }
8453 : }
8454 :
8455 : //*****************************************************************************
8456 :
8457 473301402 : int FindArrayIndex(Real64 const Value, // Value to be placed/found within the array of values
8458 : Array1D<Real64> const &Array, // Array of values in ascending order
8459 : int const LowBound, // Valid values lower bound (set by calling program)
8460 : int const UpperBound // Valid values upper bound (set by calling program)
8461 : )
8462 : {
8463 : // FUNCTION INFORMATION:
8464 : // AUTHOR Rick Strand
8465 : // DATE WRITTEN May 2000
8466 : // MODIFIED Simon Rees (May 2002)
8467 : // RE-ENGINEERED Autodesk (Nov 2013) (performance tuned on C++)
8468 :
8469 : // PURPOSE OF THIS FUNCTION:
8470 : // This generic function simply finds the points in an array between
8471 : // which a single value is found. The returned value is the index of
8472 : // the low point.
8473 :
8474 : // METHODOLOGY EMPLOYED:
8475 : // Straight interval halving. It is assumed that the values in the array
8476 : // appear in ascending order. If the value is below that in the supplied
8477 : // data array a zero index is returned. If the value is above that in the
8478 : // supplied data array, the max index is returned. This allows some error
8479 : // checking in the calling routine.
8480 :
8481 : // Autodesk:Tuned Profiling hot spot: Slightly slower when inlined
8482 :
8483 : // Bit shifting is substantially faster than /2 at least on GCC even with high optimization
8484 : // Linear indexing used to assure we are bit shifting positive values where behavior is assured
8485 : // std::lower_bound was 4x slower for the small (~100) array sizes seen in EnergyPlus use
8486 : typedef Array1D<Real64>::size_type size_type;
8487 473301402 : int const l(Array.l());
8488 473301402 : assert(LowBound >= l);
8489 473301402 : assert(LowBound <= UpperBound);
8490 473301402 : assert(UpperBound <= Array.u());
8491 473301402 : assert(Array.size() > 0u); // Empty arrays are not currently supported
8492 473301402 : assert(l > 0); // Returning 0 for Value smaller than lowest doesn't make sense if l() <= 0
8493 473301402 : size_type beg(LowBound - l);
8494 473301402 : if (Value < Array[beg]) {
8495 0 : return 0;
8496 : } else {
8497 473301402 : size_type end(UpperBound - l);
8498 473301402 : if (Value > Array[end]) {
8499 0 : return UpperBound;
8500 : } else { // Binary search
8501 : size_type mid;
8502 6477466780 : while (beg + 1 < end) {
8503 3002082689 : mid = ((beg + end) >> 1);
8504 3002082689 : (Value > Array[mid] ? beg : end) = mid;
8505 : }
8506 473301402 : return l + beg;
8507 : }
8508 : }
8509 : }
8510 :
8511 990964 : int FindArrayIndex(Real64 const Value, // Value to be placed/found within the array of values
8512 : Array1D<Real64> const &Array // Array of values in ascending order
8513 : )
8514 : {
8515 : // FUNCTION INFORMATION:
8516 : // AUTHOR Rick Strand
8517 : // DATE WRITTEN May 2000
8518 : // MODIFIED Simon Rees (May 2002)
8519 : // RE-ENGINEERED Autodesk (Nov 2013) (performance tuned on C++)
8520 :
8521 : // PURPOSE OF THIS FUNCTION:
8522 : // This generic function simply finds the points in an array between
8523 : // which a single value is found. The returned value is the index of
8524 : // the low point.
8525 :
8526 : // METHODOLOGY EMPLOYED:
8527 : // Straight interval halving. It is assumed that the values in the array
8528 : // appear in ascending order. If the value is below that in the supplied
8529 : // data array a zero index is returned. If the value is above that in the
8530 : // supplied data array, the max index is returned. This allows some error
8531 : // checking in the calling routine.
8532 :
8533 : // Autodesk:Tuned Profiling hot spot: Slightly slower when inlined
8534 :
8535 : // Bit shifting is substantially faster than /2 at least on GCC even with high optimization
8536 : // Linear indexing used to assure we are bit shifting positive values where behavior is assured
8537 : // std::lower_bound was 4x slower for the small (~100) array sizes seen in EnergyPlus use
8538 : typedef Array1D<Real64>::size_type size_type;
8539 990964 : assert(Array.size() > 0u); // Empty arrays are not currently supported
8540 990964 : assert(Array.l() > 0); // Returning 0 for Value smaller than lowest doesn't make sense if l() <= 0
8541 990964 : if (Value < Array[0]) {
8542 5288 : return 0;
8543 : } else {
8544 985676 : size_type end(Array.size() - 1u);
8545 985676 : if (Value > Array[end]) {
8546 4868 : return Array.u();
8547 : } else { // Binary search
8548 980808 : size_type beg(0), mid;
8549 8866872 : while (beg + 1 < end) {
8550 3943032 : mid = ((beg + end) >> 1);
8551 3943032 : (Value > Array[mid] ? beg : end) = mid;
8552 : }
8553 980808 : return Array.l() + beg;
8554 : }
8555 : }
8556 : }
8557 :
8558 : //*****************************************************************************
8559 :
8560 193456886 : Real64 GetInterpolatedSatProp(EnergyPlusData &state,
8561 : Real64 const Temperature, // Saturation Temp.
8562 : Array1D<Real64> const &PropTemps, // Array of temperature at which props are available
8563 : Array1D<Real64> const &LiqProp, // Array of saturated liquid properties
8564 : Array1D<Real64> const &VapProp, // Array of saturatedvapour properties
8565 : Real64 const Quality, // Quality
8566 : std::string_view const CalledFrom, // routine this function was called from (error messages)
8567 : int const LowBound, // Valid values lower bound (set by calling program)
8568 : int const UpperBound // Valid values upper bound (set by calling program)
8569 : )
8570 : {
8571 :
8572 : // FUNCTION INFORMATION:
8573 : // AUTHOR Simon Rees
8574 : // DATE WRITTEN May 2002
8575 : // MODIFIED na
8576 : // RE-ENGINEERED na
8577 :
8578 : // PURPOSE OF THIS FUNCTION:
8579 : // This generic function performs an interpolation on the supplied saturated
8580 : // liquid and vapor data to find the saturated property value at a given
8581 : // temperature and quality. This function is used by all the functions that
8582 : // get saturated property values.
8583 :
8584 : // METHODOLOGY EMPLOYED:
8585 : // Index of arrays either side of given temperature is found using FindArrayIndex.
8586 : // Double linear interpolation is used to first find property values at the given
8587 : // quality bounding the required temperature. These values are interpolated in the
8588 : // temperature domain to find the final value.
8589 :
8590 : // REFERENCES:
8591 : // na
8592 :
8593 : // USE STATEMENTS:
8594 : // na
8595 :
8596 : // Return value
8597 : Real64 ReturnValue;
8598 :
8599 : // Argument array dimensioning
8600 :
8601 : // Locals
8602 : // FUNCTION ARGUMENT DEFINITIONS:
8603 :
8604 : // FUNCTION PARAMETER DEFINITIONS:
8605 : // na
8606 :
8607 : // INTERFACE BLOCK SPECIFICATIONS
8608 : // na
8609 :
8610 : // DERIVED TYPE DEFINITIONS
8611 : // na
8612 :
8613 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8614 :
8615 : // error counters and dummy string
8616 193456886 : bool ErrorFlag(false); // error flag for current call
8617 :
8618 193456886 : int const LoTempIndex = FindArrayIndex(Temperature, PropTemps, LowBound, UpperBound); // array index for temp above input temp
8619 :
8620 193456886 : if (LoTempIndex == 0) {
8621 0 : ReturnValue = LiqProp(LowBound) + Quality * (VapProp(LowBound) - LiqProp(LowBound));
8622 0 : ErrorFlag = true;
8623 193456886 : } else if (LoTempIndex >= UpperBound) {
8624 0 : ReturnValue = LiqProp(UpperBound) + Quality * (VapProp(UpperBound) - LiqProp(UpperBound));
8625 0 : ErrorFlag = true;
8626 : } else {
8627 193456886 : int const HiTempIndex = LoTempIndex + 1; // array index for temp below input temp
8628 :
8629 : // find adjacent property values at the given quality
8630 193456886 : Real64 const LiqProp_Lo = LiqProp(LoTempIndex);
8631 193456886 : Real64 const LoSatProp = LiqProp_Lo + Quality * (VapProp(LoTempIndex) - LiqProp_Lo); // Sat. prop. at lower temp & given quality
8632 :
8633 193456886 : Real64 const LiqProp_Hi = LiqProp(HiTempIndex);
8634 193456886 : Real64 const HiSatProp = LiqProp_Hi + Quality * (VapProp(HiTempIndex) - LiqProp_Hi); // Sat. prop. at higher temp & given quality
8635 :
8636 : // find interpolation ratio in temperature direction
8637 193456886 : Real64 const PropTemps_Lo = PropTemps(LoTempIndex);
8638 193456886 : Real64 const TempInterpRatio = (Temperature - PropTemps_Lo) / (PropTemps(HiTempIndex) - PropTemps_Lo);
8639 :
8640 : // apply final linear interpolation
8641 193456886 : ReturnValue = LoSatProp + TempInterpRatio * (HiSatProp - LoSatProp);
8642 : }
8643 :
8644 193456886 : if (ErrorFlag && (CalledFrom != "ReportAndTestRefrigerants")) {
8645 0 : ++state.dataFluidProps->TempRangeErrCountGetInterpolatedSatProp;
8646 : // send warning
8647 0 : if (state.dataFluidProps->TempRangeErrCountGetInterpolatedSatProp <= state.dataFluidProps->RefrigerantErrorLimitTest) {
8648 0 : ShowWarningError(state, "GetInterpolatedSatProp: Saturation temperature for interpolation is out of range of data supplied: **");
8649 0 : ShowContinueErrorTimeStamp(state, fmt::format(" Called from:{}", CalledFrom));
8650 0 : ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature));
8651 0 : ShowContinueError(state, format("Returned saturated property value = {:.3R}", ReturnValue));
8652 : } else {
8653 0 : ShowRecurringWarningErrorAtEnd(state,
8654 : "GetInterpolatedSatProp: Refrigerant temperature for interpolation out of range error",
8655 0 : state.dataFluidProps->TempRangeErrIndexGetInterpolatedSatProp,
8656 : Temperature,
8657 : Temperature,
8658 : _,
8659 : "{C}",
8660 : "{C}");
8661 : }
8662 : }
8663 :
8664 193456886 : return ReturnValue;
8665 : }
8666 :
8667 : //*****************************************************************************
8668 :
8669 26 : int CheckFluidPropertyName(EnergyPlusData &state,
8670 : std::string const &NameToCheck) // Name from input(?) to be checked against valid FluidPropertyNames
8671 : {
8672 :
8673 : // FUNCTION INFORMATION:
8674 : // AUTHOR Linda K. Lawrie
8675 : // DATE WRITTEN October 2002
8676 : // MODIFIED na
8677 : // RE-ENGINEERED na
8678 :
8679 : // PURPOSE OF THIS FUNCTION:
8680 : // This function checks on an input fluid property to make sure it is valid.
8681 :
8682 : // Return value
8683 : int CheckFluidPropertyName;
8684 :
8685 : // FUNCTION LOCAL VARIABLE DECLARATIONS:
8686 : int Found;
8687 :
8688 26 : if (state.dataFluidProps->GetInput) {
8689 9 : GetFluidPropertiesData(state);
8690 9 : state.dataFluidProps->GetInput = false;
8691 : }
8692 :
8693 : // Item must be either in Refrigerant or Glycol list
8694 26 : Found = 0;
8695 26 : if (state.dataFluidProps->NumOfRefrigerants > 0) {
8696 26 : Found = UtilityRoutines::FindItemInList(NameToCheck, state.dataFluidProps->RefrigData);
8697 : }
8698 26 : if (Found == 0) {
8699 26 : if (state.dataFluidProps->NumOfGlycols > 0) {
8700 52 : Found = UtilityRoutines::FindItemInList(
8701 52 : NameToCheck, state.dataFluidProps->GlycolData, state.dataFluidProps->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs
8702 : }
8703 : }
8704 :
8705 26 : CheckFluidPropertyName = Found;
8706 :
8707 26 : return CheckFluidPropertyName;
8708 : }
8709 :
8710 769 : void ReportOrphanFluids(EnergyPlusData &state)
8711 : {
8712 :
8713 : // SUBROUTINE INFORMATION:
8714 : // AUTHOR Linda Lawrie
8715 : // DATE WRITTEN March 2010
8716 : // MODIFIED na
8717 : // RE-ENGINEERED na
8718 :
8719 : // PURPOSE OF THIS SUBROUTINE:
8720 : // In response to CR8008, report orphan (unused) fluid items.
8721 :
8722 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
8723 : bool NeedOrphanMessage;
8724 : int Item;
8725 : int NumUnusedRefrig;
8726 : int NumUnusedGlycol;
8727 :
8728 769 : NeedOrphanMessage = true;
8729 769 : NumUnusedRefrig = 0;
8730 :
8731 1264 : for (Item = 1; Item <= state.dataFluidProps->NumOfRefrigerants; ++Item) {
8732 495 : if (state.dataFluidProps->RefrigUsed(Item)) continue;
8733 0 : if (UtilityRoutines::SameString(state.dataFluidProps->RefrigData(Item).Name, Steam)) continue;
8734 0 : if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) {
8735 0 : ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf");
8736 0 : ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used.");
8737 0 : NeedOrphanMessage = false;
8738 : }
8739 0 : if (state.dataGlobal->DisplayUnusedObjects) {
8740 0 : ShowMessage(state, "Refrigerant=" + state.dataFluidProps->RefrigData(Item).Name);
8741 : } else {
8742 0 : ++NumUnusedRefrig;
8743 : }
8744 : }
8745 :
8746 769 : NumUnusedGlycol = 0;
8747 :
8748 1264 : for (Item = 1; Item <= state.dataFluidProps->NumOfGlycols; ++Item) {
8749 495 : if (state.dataFluidProps->GlycolUsed(Item)) continue;
8750 1 : if (UtilityRoutines::SameString(state.dataFluidProps->GlycolData(Item).Name, Water)) continue;
8751 1 : if (UtilityRoutines::SameString(state.dataFluidProps->GlycolData(Item).Name, EthyleneGlycol)) continue;
8752 1 : if (UtilityRoutines::SameString(state.dataFluidProps->GlycolData(Item).Name, PropyleneGlycol)) continue;
8753 1 : if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) {
8754 0 : ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf");
8755 0 : ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used.");
8756 0 : NeedOrphanMessage = false;
8757 : }
8758 1 : if (state.dataGlobal->DisplayUnusedObjects) {
8759 0 : ShowMessage(state, "Glycol=" + state.dataFluidProps->GlycolData(Item).Name);
8760 : } else {
8761 1 : ++NumUnusedGlycol;
8762 : }
8763 : }
8764 :
8765 769 : if (NumUnusedRefrig > 0 || NumUnusedGlycol > 0) {
8766 1 : if (NumUnusedRefrig > 0) ShowMessage(state, format("There are {} unused refrigerants in input.", NumUnusedRefrig));
8767 1 : if (NumUnusedGlycol > 0) ShowMessage(state, format("There are {} unused glycols in input.", NumUnusedGlycol));
8768 1 : ShowMessage(state, "Use Output:Diagnostics,DisplayUnusedObjects; to see them.");
8769 : }
8770 769 : }
8771 :
8772 0 : void ReportFatalGlycolErrors(EnergyPlusData &state,
8773 : int const NumGlycols, // Number of Glycols in input/data
8774 : int const GlycolNum, // Glycol Index
8775 : bool const DataPresent, // data is present for this fluid.
8776 : std::string_view const GlycolName, // Name being reported
8777 : std::string_view const RoutineName, // Routine name to show
8778 : std::string_view const Property, // Property being requested
8779 : std::string_view const CalledFrom // original called from (external to fluid properties)
8780 : )
8781 : {
8782 :
8783 : // SUBROUTINE INFORMATION:
8784 : // AUTHOR Linda Lawrie
8785 : // DATE WRITTEN July 2011
8786 : // MODIFIED na
8787 : // RE-ENGINEERED na
8788 :
8789 : // PURPOSE OF THIS SUBROUTINE:
8790 : // Consolidate fatal error reporting for glycols.
8791 :
8792 : // METHODOLOGY EMPLOYED:
8793 : // na
8794 :
8795 : // REFERENCES:
8796 : // na
8797 :
8798 : // USE STATEMENTS:
8799 : // na
8800 :
8801 : // Locals
8802 : // SUBROUTINE ARGUMENT DEFINITIONS:
8803 :
8804 : // SUBROUTINE PARAMETER DEFINITIONS:
8805 : // na
8806 :
8807 : // INTERFACE BLOCK SPECIFICATIONS:
8808 : // na
8809 :
8810 : // DERIVED TYPE DEFINITIONS:
8811 : // na
8812 :
8813 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
8814 : int RefrigNo;
8815 :
8816 : // check and see if it might be a refrigerant
8817 0 : RefrigNo = FindRefrigerant(state, GlycolName);
8818 :
8819 0 : if (NumGlycols == 0) {
8820 0 : ShowSevereError(
8821 : state,
8822 0 : fmt::format(
8823 : "{}: no glycols found -- cannot evaluate fluid {} for \"{}\", called from: {}", RoutineName, Property, GlycolName, CalledFrom));
8824 0 : } else if (GlycolNum == 0) {
8825 0 : ShowSevereError(
8826 0 : state, fmt::format("{}: data not found in input for requested glycol \"{}\", called from: {}", RoutineName, GlycolName, CalledFrom));
8827 0 : } else if (!DataPresent) {
8828 0 : ShowSevereError(state,
8829 0 : std::string{RoutineName} + ": " + std::string{Property} + " data not found in input for requested glycol \"" +
8830 0 : std::string{GlycolName} + fmt::format("\", called from: {}", CalledFrom));
8831 : }
8832 0 : if (RefrigNo > 0) ShowContinueError(state, "Note: that fluid is listed as a Refrigerant from input.");
8833 :
8834 0 : ShowFatalError(state, "Program terminates due to preceding condition.");
8835 0 : }
8836 :
8837 0 : void ReportFatalRefrigerantErrors(EnergyPlusData &state,
8838 : int const NumRefrigerants, // Number of Refrigerants in input/data
8839 : int const RefrigerantNum, // Refrigerant Index
8840 : bool const DataPresent, // data is present for this fluid.
8841 : std::string_view const RefrigerantName, // Name being reported
8842 : std::string_view const RoutineName, // Routine name to show
8843 : std::string_view const Property, // Property being requested
8844 : std::string_view const CalledFrom // original called from (external to fluid properties)
8845 : )
8846 : {
8847 :
8848 : // SUBROUTINE INFORMATION:
8849 : // AUTHOR Linda Lawrie
8850 : // DATE WRITTEN July 2011
8851 : // MODIFIED na
8852 : // RE-ENGINEERED na
8853 :
8854 : // PURPOSE OF THIS SUBROUTINE:
8855 : // Consolidate fatal error reporting for refrigerants.
8856 :
8857 : // METHODOLOGY EMPLOYED:
8858 : // na
8859 :
8860 : // REFERENCES:
8861 : // na
8862 :
8863 : // USE STATEMENTS:
8864 : // na
8865 :
8866 : // Locals
8867 : // SUBROUTINE ARGUMENT DEFINITIONS:
8868 :
8869 : // SUBROUTINE PARAMETER DEFINITIONS:
8870 : // na
8871 :
8872 : // INTERFACE BLOCK SPECIFICATIONS:
8873 : // na
8874 :
8875 : // DERIVED TYPE DEFINITIONS:
8876 : // na
8877 :
8878 : // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
8879 : int GlycolNo;
8880 :
8881 : // check and see if it might be a refrigerant
8882 0 : GlycolNo = FindGlycol(state, RefrigerantName);
8883 :
8884 0 : if (NumRefrigerants == 0) {
8885 0 : ShowSevereError(state,
8886 0 : fmt::format("{}: no refrigerants found -- cannot evaluate fluid {} for \"{}\", called from: {}",
8887 : RoutineName,
8888 : Property,
8889 : RefrigerantName,
8890 : CalledFrom));
8891 0 : } else if (RefrigerantNum == 0) {
8892 0 : ShowSevereError(
8893 : state,
8894 0 : fmt::format(
8895 : "{}: data not found in input for requested refrigerant \"{}\", called from: {}", RoutineName, RefrigerantName, CalledFrom));
8896 0 : } else if (!DataPresent) {
8897 0 : ShowSevereError(state,
8898 0 : fmt::format("{}: {} data not found in input for requested refrigerant \"{}\", called from: {}",
8899 : RoutineName,
8900 : Property,
8901 : RefrigerantName,
8902 : CalledFrom));
8903 : }
8904 0 : if (GlycolNo > 0) ShowContinueError(state, "Note: that fluid is listed as a Glycol from input.");
8905 :
8906 0 : ShowFatalError(state, "Program terminates due to preceding condition.");
8907 0 : }
8908 :
8909 0 : void GetFluidDensityTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit)
8910 : {
8911 :
8912 : // Get the input if we haven't already
8913 0 : if (state.dataFluidProps->GetInput) {
8914 0 : GetFluidPropertiesData(state);
8915 0 : state.dataFluidProps->GetInput = false;
8916 : }
8917 :
8918 0 : if (FluidIndex > 0) {
8919 0 : MinTempLimit = state.dataFluidProps->GlycolData(FluidIndex).RhoLowTempValue;
8920 0 : MaxTempLimit = state.dataFluidProps->GlycolData(FluidIndex).RhoHighTempValue;
8921 : }
8922 0 : }
8923 :
8924 0 : void GetFluidSpecificHeatTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit)
8925 : {
8926 : // Get the input if we haven't already
8927 0 : if (state.dataFluidProps->GetInput) {
8928 0 : GetFluidPropertiesData(state);
8929 0 : state.dataFluidProps->GetInput = false;
8930 : }
8931 :
8932 0 : if (FluidIndex > 0) {
8933 0 : MinTempLimit = state.dataFluidProps->GlycolData(FluidIndex).CpLowTempValue;
8934 0 : MaxTempLimit = state.dataFluidProps->GlycolData(FluidIndex).CpHighTempValue;
8935 : }
8936 0 : }
8937 :
8938 2 : GlycolAPI::GlycolAPI(EnergyPlusData &state, std::string const &glycolName)
8939 : {
8940 2 : this->glycolName = EnergyPlus::UtilityRoutines::MakeUPPERCase(glycolName);
8941 2 : this->glycolIndex = 0;
8942 2 : this->cf = "GlycolAPI:Instance";
8943 2 : if (this->glycolName != "WATER") {
8944 0 : EnergyPlus::ShowFatalError(state, "Can only do water right now");
8945 : }
8946 2 : }
8947 42547 : Real64 GlycolAPI::specificHeat(EnergyPlusData &state, Real64 temperature)
8948 : {
8949 42547 : return FluidProperties::GetSpecificHeatGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf);
8950 : }
8951 195 : Real64 GlycolAPI::density(EnergyPlusData &state, Real64 temperature)
8952 : {
8953 195 : return FluidProperties::GetDensityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf);
8954 : }
8955 0 : Real64 GlycolAPI::conductivity(EnergyPlusData &state, Real64 temperature)
8956 : {
8957 0 : return FluidProperties::GetConductivityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf);
8958 : }
8959 0 : Real64 GlycolAPI::viscosity(EnergyPlusData &state, Real64 temperature)
8960 : {
8961 0 : return FluidProperties::GetViscosityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf);
8962 : }
8963 :
8964 0 : RefrigerantAPI::RefrigerantAPI(EnergyPlusData &state, std::string const &refrigName)
8965 : {
8966 0 : this->rName = EnergyPlus::UtilityRoutines::MakeUPPERCase(refrigName);
8967 0 : this->rIndex = 0;
8968 0 : this->cf = "RefrigerantAPI:Instance";
8969 0 : if (this->rName != "STEAM") {
8970 0 : EnergyPlus::ShowFatalError(state, "Can only do steam right now");
8971 : }
8972 0 : }
8973 0 : Real64 RefrigerantAPI::saturationPressure(EnergyPlusData &state, Real64 temperature)
8974 : {
8975 0 : return FluidProperties::GetSatPressureRefrig(state, this->rName, temperature, this->rIndex, this->cf);
8976 : }
8977 0 : Real64 RefrigerantAPI::saturationTemperature(EnergyPlusData &state, Real64 pressure)
8978 : {
8979 0 : return FluidProperties::GetSatTemperatureRefrig(state, this->rName, pressure, this->rIndex, this->cf);
8980 : }
8981 0 : Real64 RefrigerantAPI::saturatedEnthalpy(EnergyPlusData &state, Real64 temperature, Real64 quality)
8982 : {
8983 0 : return FluidProperties::GetSatEnthalpyRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf);
8984 : }
8985 0 : Real64 RefrigerantAPI::saturatedDensity(EnergyPlusData &state, Real64 temperature, Real64 quality)
8986 : {
8987 0 : return FluidProperties::GetSatDensityRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf);
8988 : }
8989 0 : Real64 RefrigerantAPI::saturatedSpecificHeat(EnergyPlusData &state, Real64 temperature, Real64 quality)
8990 : {
8991 0 : return FluidProperties::GetSatSpecificHeatRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf);
8992 : }
8993 0 : Real64 RefrigerantAPI::superHeatedEnthalpy(EnergyPlusData &state, Real64 temperature, Real64 pressure)
8994 : {
8995 0 : return FluidProperties::GetSupHeatEnthalpyRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf);
8996 : }
8997 0 : Real64 RefrigerantAPI::superHeatedPressure(EnergyPlusData &state, Real64 temperature, Real64 enthalpy)
8998 : {
8999 0 : return FluidProperties::GetSupHeatPressureRefrig(state, this->rName, temperature, enthalpy, this->rIndex, this->cf);
9000 : }
9001 0 : Real64 RefrigerantAPI::superHeatedDensity(EnergyPlusData &state, Real64 temperature, Real64 pressure)
9002 : {
9003 0 : return FluidProperties::GetSupHeatDensityRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf);
9004 : }
9005 :
9006 : } // namespace FluidProperties
9007 :
9008 2313 : } // namespace EnergyPlus
|