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 : #ifndef Material_hh_INCLUDED
49 : #define Material_hh_INCLUDED
50 :
51 : // EnergyPlus Headers
52 : #include <EnergyPlus/Data/BaseData.hh>
53 : #include <EnergyPlus/DataSurfaces.hh>
54 : #include <EnergyPlus/EnergyPlus.hh>
55 : #include <EnergyPlus/PhaseChangeModeling/HysteresisModel.hh>
56 :
57 : namespace EnergyPlus {
58 :
59 : namespace Material {
60 :
61 27997 : struct MaterialProperties
62 : {
63 : // Members
64 : std::string Name; // Name of material layer
65 : DataHeatBalance::MaterialGroup Group; // Material group type (see Material Parameters above. Currently
66 : // active: RegularMaterial, Shade, Air, WindowGlass,
67 : // WindowGas, WindowBlind, WindowGasMixture, Screen, EcoRoof,
68 : // IRTMaterial, WindowSimpleGlazing, ComplexWindowShade, ComplexWindowGap)
69 : DataSurfaces::SurfaceRoughness Roughness; // Surface roughness index (See Surface Roughness parameters
70 : // above. Current: VerySmooth, Smooth, MediumSmooth,
71 : // MediumRough, Rough, VeryRough)
72 : // Thermo-physical material properties
73 : Real64 Conductivity; // Thermal conductivity of layer (W/m2K)
74 : Real64 Density; // Layer density (kg/m3)
75 : Real64 IsoMoistCap; // Isothermal moisture capacity on water vapor density (m3/kg)
76 : Real64 Porosity; // Layer porosity
77 : Real64 Resistance; // Layer thermal resistance (alternative to Density,
78 : // Conductivity, Thickness, and Specific Heat; K/W)
79 : bool ROnly; // Material defined with "R" only
80 : Real64 SpecHeat; // Layer specific heat (J/kgK)
81 : Real64 ThermGradCoef; // Thermal-gradient coefficient for moisture capacity
82 : // based on the water vapor density (kg/kgK)
83 : Real64 Thickness; // Layer thickness (m)
84 : Real64 VaporDiffus; // Layer vapor diffusivity
85 : Array1D_int GasType; // Gas type (air=1, argon=2, krypton=3, xenon=4, custom=0) for
86 : // up to 5 gases in a mixture [Window gas only]. It is defined as parameter (GasCoefs)
87 : int GlassSpectralDataPtr; // Number of a spectral data set associated with a window glass material
88 : int NumberOfGasesInMixture; // Number of gases in a window gas mixture
89 : Array2D<Real64> GasCon; // Gas conductance coefficients for up to 5 gases in a mixture
90 : Array2D<Real64> GasVis; // Gas viscosity coefficients for up to 5 gases in a mixture
91 : Array2D<Real64> GasCp; // Gas specific-heat coefficients for up to 5 gases in a mixture
92 : Array1D<Real64> GasWght; // Gas molecular weight for up to 5 gases in a mixture
93 : Array1D<Real64> GasSpecHeatRatio; // Gas specific heat ratio (used for low pressure calculations)
94 : Array1D<Real64> GasFract; // Gas fractions for up to 5 gases in a mixture
95 : // Radiation parameters
96 : Real64 AbsorpSolar; // Layer solar absorptance
97 : Real64 AbsorpSolarInput; // Layer solar absorptance input by user
98 : bool AbsorpSolarEMSOverrideOn; // if true, then EMS calling to override value for solar absorptance
99 : Real64 AbsorpSolarEMSOverride; // value to use when EMS calling to override value for solar absorptance
100 : Real64 AbsorpThermal; // Layer thermal absorptance
101 : Real64 AbsorpThermalInput; // Layer thermal absorptance input by user
102 : bool AbsorpThermalEMSOverrideOn; // if true, then EMS calling to override value for thermal absorptance
103 : Real64 AbsorpThermalEMSOverride; // value to use when EMS calling to override value for thermal absorptance
104 : Real64 AbsorpVisible; // Layer Visible Absorptance
105 : Real64 AbsorpVisibleInput; // Layer Visible Absorptance input by user
106 : bool AbsorpVisibleEMSOverrideOn; // if true, then EMS calling to override value for visible absorptance
107 : Real64 AbsorpVisibleEMSOverride; // value to use when EMS calling to override value for visible absorptance
108 : // Window-related radiation parameters
109 : Real64 Trans; // Transmittance of layer (glass, shade)
110 : Real64 TransVis; // Visible transmittance (at normal incidence)
111 : Real64 GlassTransDirtFactor; // Multiplier on glass transmittance due to dirt
112 : bool SolarDiffusing; // True if glass diffuses beam solar radiation
113 : Real64 ReflectShade; // Shade or screen reflectance (interior shade only)
114 : Real64 ReflectShadeVis; // Shade reflectance for visible radiation
115 : Real64 AbsorpThermalBack; // Infrared radiation back absorption
116 : Real64 AbsorpThermalFront; // Infrared radiation front absorption
117 : Real64 ReflectSolBeamBack; // Solar back reflectance (beam to everything)
118 : Real64 ReflectSolBeamFront; // Solar front reflectance (beam to everything)
119 : Real64 ReflectSolDiffBack; // Solar back diffuse reflectance
120 : Real64 ReflectSolDiffFront; // Solar front diffuse reflectance
121 : Real64 ReflectVisBeamBack; // Visible back reflectance (beam to everything)
122 : Real64 ReflectVisBeamFront; // Visible front reflectance (beam to everything)
123 : Real64 ReflectVisDiffBack; // Visible back diffuse reflectance
124 : Real64 ReflectVisDiffFront; // Visible front diffuse reflectance
125 : std::string ReflectanceModeling; // method used to account for screen scattering
126 : Real64 TransSolBeam; // Solar transmittance (beam to everything)
127 : Real64 TransThermal; // Infrared radiation transmittance
128 : Real64 TransVisBeam; // Visible transmittance (beam to everything)
129 : int BlindDataPtr; // Pointer to window blind data
130 : int ScreenDataPtr; // Pointer to window screen data
131 : int ScreenMapResolution; // Resolution of azimuth and altitude angles to print in transmittance map
132 : // Complex fenestration parameters
133 : Real64 YoungModulus; // Young's modulus (Pa) - used in window deflection calculations
134 : Real64 PoissonsRatio; // Poisson's ratio - used in window deflection calculations
135 : Real64 DeflectedThickness; // Minimum gap thickness in deflected state (m). Used with measured deflection
136 : Real64 Pressure; // Window Gap pressure (Pa)
137 : int SupportPillarPtr; // Pointer to support pillar data
138 : int DeflectionStatePtr; // Pointer to deflection state
139 : int ComplexShadePtr; // Pointer to complex shade data
140 : int GasPointer; // Pointer to gas or gas mixture used in the gap
141 : // Window-shade thermal model parameters
142 : Real64 WinShadeToGlassDist; // Distance between window shade and adjacent glass (m)
143 : Real64 WinShadeTopOpeningMult; // Area of air-flow opening at top of shade, expressed as a fraction
144 : // of the shade-to-glass opening area at the top of the shade
145 : Real64 WinShadeBottomOpeningMult; // Area of air-flow opening at bottom of shade, expressed as a fraction
146 : // of the shade-to-glass opening area at the bottom of the shade
147 : Real64 WinShadeLeftOpeningMult; // Area of air-flow opening at left side of shade, expressed as a fraction
148 : // of the shade-to-glass opening area at the left side of the shade
149 : Real64 WinShadeRightOpeningMult; // Area of air-flow opening at right side of shade, expressed as a fraction
150 : // of the shade-to-glass opening area at the right side of the shade
151 : Real64 WinShadeAirFlowPermeability; // The effective area of openings in the shade itself, expressed as a
152 : // fraction of the shade area
153 : bool EMPDMaterialProps; // True if EMPD properties have been assigned
154 : Real64 EMPDmu; // Water Vapor Diffusion Resistance Factor (dimensionless)
155 : Real64 MoistACoeff; // Moisture Equation Coefficient a
156 : Real64 MoistBCoeff; // Moisture Equation Coefficient b
157 : Real64 MoistCCoeff; // Moisture Equation Coefficient c
158 : Real64 MoistDCoeff; // Moisture Equation Coefficient d
159 : Real64 EMPDSurfaceDepth; // Surface-layer penetration depth (m)
160 : Real64 EMPDDeepDepth; // Deep-layer penetration depth (m)
161 : Real64 EMPDCoatingThickness; // Coating Layer Thickness (m)
162 : Real64 EMPDmuCoating; // Coating Layer water vapor diffusion resistance factor (dimensionless)
163 : // EcoRoof-Related properties, essentially for the plant layer,
164 : // the soil layer uses the same resource as a regular material
165 : int EcoRoofCalculationMethod; // 1-Simple, 2-SchaapGenuchten
166 : Real64 HeightOfPlants; // plants' height
167 : Real64 LAI; // LeafAreaIndex (Dimensionless???)
168 : Real64 Lreflectivity; // LeafReflectivity
169 : Real64 LEmissitivity; // LeafEmissivity
170 : Real64 InitMoisture; // Initial soil moisture DJS
171 : Real64 MinMoisture; // Minimum moisture allowed DJS
172 : Real64 RStomata; // Minimum stomatal resistance DJS
173 : // HAMT
174 : int niso; // Number of data points
175 : Array1D<Real64> isodata; // isotherm values
176 : Array1D<Real64> isorh; // isotherm RH values
177 : int nsuc; // Number of data points
178 : Array1D<Real64> sucdata; // suction values
179 : Array1D<Real64> sucwater; // suction water values
180 : int nred; // Number of data points
181 : Array1D<Real64> reddata; // redistribution values
182 : Array1D<Real64> redwater; // redistribution water values
183 : int nmu; // Number of data points
184 : Array1D<Real64> mudata; // mu values
185 : Array1D<Real64> murh; // mu rh values
186 : int ntc; // Number of data points
187 : Array1D<Real64> tcdata; // thermal conductivity values
188 : Array1D<Real64> tcwater; // thermal conductivity water values
189 : Real64 itemp; // initial Temperature
190 : Real64 irh; // Initial RH
191 : Real64 iwater; // Initial water content kg/kg
192 : int divs; // Number of divisions
193 : Real64 divsize; // Average Cell Size
194 : int divmin; // Minimum number of cells
195 : int divmax; // Maximum number of cells
196 : // Added 12/22/2008 for thermochromic window glazing material
197 : Real64 SpecTemp; // Temperature corresponding to the specified material properties
198 : int TCParent; // Reference to the parent object WindowMaterial:Glazing:Thermochromic
199 : // Simple Glazing System
200 : Real64 SimpleWindowUfactor; // user input for simple window U-factor with film coeffs (W/m2-k)
201 : Real64 SimpleWindowSHGC; // user input for simple window Solar Heat Gain Coefficient (non-dimensional)
202 : Real64 SimpleWindowVisTran; // (optional) user input for simple window Visual Transmittance (non-dimensional)
203 : bool SimpleWindowVTinputByUser; // false means not input, true means user provide VT input
204 : bool WarnedForHighDiffusivity; // used to limit error messaging to just the first instance
205 : // Equivalent Layer (ASHWAT) Model
206 : Real64 ReflFrontBeamBeam; // Beam-Beam solar reflectance front at zero incident
207 : Real64 ReflBackBeamBeam; // Beam-Beam solar reflectance back at zero incident
208 : Real64 TausFrontBeamBeam; // Beam-Beam solar transmittance front at zero incident
209 : Real64 TausBackBeamBeam; // Beam-Beam solar transmittance back at zero incident
210 : Real64 ReflFrontBeamBeamVis; // Beam-Beam visible reflectance front at zero incident
211 : Real64 ReflBackBeamBeamVis; // Beam-Beam visible reflectance back at zero incident
212 : Real64 TausFrontBeamBeamVis; // Beam-Beam visible transmittance front at zero incident
213 : Real64 TausBackBeamBeamVis; // Beam-Beam visible transmittance back at zero incident
214 : Real64 ReflFrontBeamDiff; // Beam-Diffuse solar reflectance front at zero incident
215 : Real64 ReflBackBeamDiff; // Beam-Diffuse solar reflectance back at zero incident
216 : Real64 TausFrontBeamDiff; // Beam-Diffuse solar transmittance front at zero incident
217 : Real64 TausBackBeamDiff; // Beam-Diffuse solar transmittance back at zero incident
218 : Real64 ReflFrontBeamDiffVis; // Beam-Diffuse visible reflectance front at zero incident
219 : Real64 ReflBackBeamDiffVis; // Beam-Diffuse visible reflectance back at zero incident
220 : Real64 TausFrontBeamDiffVis; // Beam-Diffuse visible transmittance front at zero incident
221 : Real64 TausBackBeamDiffVis; // Beam-Diffuse visible transmittance back at zero incident
222 : Real64 ReflFrontDiffDiff; // Diffuse-Diffuse solar reflectance front
223 : Real64 ReflBackDiffDiff; // Diffuse-Diffuse solar reflectance back
224 : Real64 TausDiffDiff; // Diffuse-Diffuse solar transmittance (front and back)
225 : Real64 ReflFrontDiffDiffVis; // Diffuse-Diffuse visible reflectance front
226 : Real64 ReflBackDiffDiffVis; // Diffuse-Diffuse visible reflectance back
227 : Real64 TausDiffDiffVis; // Diffuse-Diffuse visible transmittance (front and back)
228 : Real64 EmissThermalFront; // Front side thermal or infrared Emissivity
229 : Real64 EmissThermalBack; // Back side thermal or infrared Emissivity
230 : Real64 TausThermal; // Thermal transmittance (front and back)
231 : int GapVentType; // Gap Ven type for equivalent Layer window model
232 : bool ISPleatedDrape; // if pleated drape= true, if nonpleated drape = false
233 : Real64 PleatedDrapeWidth; // width of the pleated drape fabric section
234 : Real64 PleatedDrapeLength; // length of the pleated drape fabric section
235 : Real64 ScreenWireSpacing; // insect screen wire spacing
236 : Real64 ScreenWireDiameter; // insect screen wire diameter
237 : Real64 SlatWidth; // slat width
238 : Real64 SlatSeparation; // slat separation
239 : Real64 SlatCrown; // slat crown
240 : Real64 SlatAngle; // slat angle
241 : int SlatAngleType; // slat angle control type, 0=fixed, 1=maximize solar, 2=block beam
242 : DataWindowEquivalentLayer::Orientation SlatOrientation; // horizontal or vertical
243 : std::string GasName; // Name of gas type ("Air", "Argon", "Krypton", "Xenon")
244 : HysteresisPhaseChange::HysteresisPhaseChange *phaseChange = nullptr;
245 : bool GlassSpectralAndAngle; // if SpectralAndAngle is an entered choice
246 : int GlassSpecAngTransDataPtr; // Data set index of transmittance as a function of spectral and angle associated with a window glass material
247 : int GlassSpecAngFRefleDataPtr; // Data set index of front reflectance as a function of spectral and angle associated with a window glass
248 : // material
249 : int GlassSpecAngBRefleDataPtr; // Data set index of back reflectance as a function of spectral and angle associated with a window glass
250 : // material
251 :
252 : // Default Constructor
253 777 : MaterialProperties()
254 777 : : Group(DataHeatBalance::MaterialGroup::Invalid), Roughness(DataSurfaces::SurfaceRoughness::Invalid), Conductivity(0.0), Density(0.0),
255 : IsoMoistCap(0.0), Porosity(0.0), Resistance(0.0), ROnly(false), SpecHeat(0.0), ThermGradCoef(0.0), Thickness(0.0), VaporDiffus(0.0),
256 : GasType(5, 0), GlassSpectralDataPtr(0), NumberOfGasesInMixture(0), GasCon(3, 5, 0.0), GasVis(3, 5, 0.0), GasCp(3, 5, 0.0),
257 : GasWght(5, 0.0), GasSpecHeatRatio(5, 0.0), GasFract(5, 0.0), AbsorpSolar(0.0), AbsorpSolarInput(0.0), AbsorpSolarEMSOverrideOn(false),
258 : AbsorpSolarEMSOverride(0.0), AbsorpThermal(0.0), AbsorpThermalInput(0.0), AbsorpThermalEMSOverrideOn(false),
259 : AbsorpThermalEMSOverride(0.0), AbsorpVisible(0.0), AbsorpVisibleInput(0.0), AbsorpVisibleEMSOverrideOn(false),
260 : AbsorpVisibleEMSOverride(0.0), Trans(0.0), TransVis(0.0), GlassTransDirtFactor(1.0), SolarDiffusing(false), ReflectShade(0.0),
261 : ReflectShadeVis(0.0), AbsorpThermalBack(0.0), AbsorpThermalFront(0.0), ReflectSolBeamBack(0.0), ReflectSolBeamFront(0.0),
262 : ReflectSolDiffBack(0.0), ReflectSolDiffFront(0.0), ReflectVisBeamBack(0.0), ReflectVisBeamFront(0.0), ReflectVisDiffBack(0.0),
263 : ReflectVisDiffFront(0.0), TransSolBeam(0.0), TransThermal(0.0), TransVisBeam(0.0), BlindDataPtr(0), ScreenDataPtr(0),
264 : ScreenMapResolution(0), YoungModulus(0.0), PoissonsRatio(0.0), DeflectedThickness(0.0), Pressure(0.0), SupportPillarPtr(0),
265 : DeflectionStatePtr(0), ComplexShadePtr(0), GasPointer(0), WinShadeToGlassDist(0.0), WinShadeTopOpeningMult(0.0),
266 : WinShadeBottomOpeningMult(0.0), WinShadeLeftOpeningMult(0.0), WinShadeRightOpeningMult(0.0), WinShadeAirFlowPermeability(0.0),
267 : EMPDMaterialProps(false), EMPDmu(0.0), MoistACoeff(0.0), MoistBCoeff(0.0), MoistCCoeff(0.0), MoistDCoeff(0.0), EMPDSurfaceDepth(0.0),
268 : EMPDDeepDepth(0.0), EMPDCoatingThickness(0.0), EMPDmuCoating(0.0), EcoRoofCalculationMethod(0), HeightOfPlants(0.0), LAI(0.0),
269 : Lreflectivity(0.0), LEmissitivity(0.0), InitMoisture(0.0), MinMoisture(0.0), RStomata(0.0), niso(-1), isodata(27, 0.0), isorh(27, 0.0),
270 : nsuc(-1), sucdata(27, 0.0), sucwater(27, 0.0), nred(-1), reddata(27, 0.0), redwater(27, 0.0), nmu(-1), mudata(27, 0.0), murh(27, 0.0),
271 : ntc(-1), tcdata(27, 0.0), tcwater(27, 0.0), itemp(10.0), irh(0.5), iwater(0.2), divs(3), divsize(0.005), divmin(3), divmax(10),
272 : SpecTemp(0.0), TCParent(0), SimpleWindowUfactor(0.0), SimpleWindowSHGC(0.0), SimpleWindowVisTran(0.0), SimpleWindowVTinputByUser(false),
273 : WarnedForHighDiffusivity(false), ReflFrontBeamBeam(0.0), ReflBackBeamBeam(0.0), TausFrontBeamBeam(0.0), TausBackBeamBeam(0.0),
274 : ReflFrontBeamBeamVis(0.0), ReflBackBeamBeamVis(0.0), TausFrontBeamBeamVis(0.0), TausBackBeamBeamVis(0.0), ReflFrontBeamDiff(0.0),
275 : ReflBackBeamDiff(0.0), TausFrontBeamDiff(0.0), TausBackBeamDiff(0.0), ReflFrontBeamDiffVis(0.0), ReflBackBeamDiffVis(0.0),
276 : TausFrontBeamDiffVis(0.0), TausBackBeamDiffVis(0.0), ReflFrontDiffDiff(0.0), ReflBackDiffDiff(0.0), TausDiffDiff(0.0),
277 : ReflFrontDiffDiffVis(0.0), ReflBackDiffDiffVis(0.0), TausDiffDiffVis(0.0), EmissThermalFront(0.0), EmissThermalBack(0.0),
278 : TausThermal(0.0), GapVentType(0), ISPleatedDrape(false), PleatedDrapeWidth(0.0), PleatedDrapeLength(0.0), ScreenWireSpacing(0.0),
279 : ScreenWireDiameter(0.0), SlatWidth(0.0), SlatSeparation(0.0), SlatCrown(0.0), SlatAngle(0.0), SlatAngleType(0),
280 : SlatOrientation(DataWindowEquivalentLayer::Orientation::Invalid), GlassSpectralAndAngle(false), GlassSpecAngTransDataPtr(0),
281 777 : GlassSpecAngFRefleDataPtr(0), GlassSpecAngBRefleDataPtr(0)
282 : {
283 777 : }
284 : };
285 :
286 : } // namespace Material
287 :
288 1542 : struct MaterialData : BaseGlobalStruct
289 : {
290 : Array1D<Material::MaterialProperties> Material;
291 :
292 0 : void clear_state() override
293 : {
294 0 : Material.deallocate();
295 0 : }
296 : };
297 :
298 : } // namespace EnergyPlus
299 :
300 : #endif
|