Repository navigation
Implementation of Fixed and Variable Absorptances at the Inside Face of Materials - #11750
Conversation
This initial commit includes code to get the new feature to work and modifications to maintain current results. Mods were also made to existing unit tests so that everything passes.
During the initial commit, shades were not dealt with properly which cause a crash for three input files that had an interior shade in the test suite. For this situation, the new variables used to set thermal absorptance did not get initialized. These code changes corrects the problem.
Commit to add the ability to control variable absorptance at both the interior and exterior face of a material.
This is the remainder of the planned changes to implement interior face material properties (constant and variable). It includes new output variables to report thermal and solar absorptances at the inside and outside face of surfaces. A new unit test and a significantly enhanced existing one that include various new tests are also included. A new IDF was added to show the functionality of the new capabilities and the new output variables. Finally, various documentation changes and additions were made to document what has been added. A PR will be created based on this work now.
…lementation # Conflicts: # src/EnergyPlus/Material.cc
|
| This field represents the specific heat of the material layer in units of J/(kg-K). Note that these units are most likely different than those reported in textbooks and references which tend to use kJ/(kg-K) or J/(g-K). They were chosen for internal consistency within EnergyPlus. \textbf{Only values of specific heat of 100 or larger are allowed. Typical ranges are from 800 to 2000 J/(kg-K).} | ||
|
|
||
| \paragraph{Field: Thermal Absorptance}\label{field-thermal-absorptance} | ||
| \paragraph{Field: Thermal Absorptance Outside Face}\label{field-thermal-absorptance-outside-face} |
There was a problem hiding this comment.
I think we need to make it clear that this is the bulk value by default, and only interpreted as the outside value when the inside value is present. Maybe we should just leave the names on these three alone so as to not cause confusion, and then make sure it's clear in the description?
There was a problem hiding this comment.
I can understand what you are saying. It looked good in the NFP, but I see your point. The default is to make both out and in values the same if only the "out" value is present. I don't have a problem with changing the IDD and the docs to make this clearer and have the existing fields keep the "old" names.
| \paragraph{Field: Solar Absorptance Schedule Name Outside Face}\label{field-solar-absorptance-schedule-name-outside-face} | ||
|
|
||
| \paragraph{Field: Thermal Absorptance Function Name}\label{field-thermal-absorptance-function-name} | ||
| TThe name of a Schedule object that overwrites the material solar absorptance at the outside face or exterior side. If neither this field or the previous field are defined, then the solar absorptance is assumed to be constant. |
There was a problem hiding this comment.
Just when you think that everything has a spell correct...
I'll fix this.
| \note Regular Material Name to which the additional properties will be added. | ||
| \note this the material name for the basic material properties. | ||
| A3 , \field Control Signal | ||
| A3 , \field Control Signal Outside Face |
There was a problem hiding this comment.
Similar question about naming convention on this feature.
There was a problem hiding this comment.
Yup, got it. I'll change things back for the "existing" fields and modify the docs as well. So, there will be changes in three places: Material, Material:NoMass, and the variable absorptivity stuff. I will also make sure that when I get the EMS part of this moving forward (it will be in a separate branch; it's a separate issue in GitHub, too) that I do this there as well.
There was a problem hiding this comment.
I'm open to others thoughts regarding this. I just think it would create less confusion if we made it super clear that we're not changing anything, unless they want to adopt the interior absorptances.
There was a problem hiding this comment.
@shorowit What do you think about this? Since you were the original poster of this issue, I wonder what you think about leaving the existing fields as is rather than renaming them with "outside face" and then making it more clear in the docs that the default is that the value entered in the existing fields will define the values at both sides UNLESS the new interior parameters are provided.
There was a problem hiding this comment.
I'm supportive of that change. I do think that is clearer to the user as to how E+ will use the two sets of fields.
|
|
|
|
Hmmm...I just thought of something and I wonder what the impact will be. Right now, for the Materal and Material:NoMass, the default is that if you don't specify the inside face values that they default to the outside face values. I think that is definitely what we want. As I was going back over the variable absorptivity code as a result of the desire to leave the names of the existing fields alone, I remembered that with variable absorptivity that it was only setting the exterior values for absorptance but not the inside values. In the current code on this branch, it actually forces the interior values to the exterior ones which is a change from the current method. Is that what we want? Or do we want to stick with only allowing the variation of the exterior values if interior ones are not specified? It's a subtle difference, but a difference nonetheless. So, what do we want here? I think that if we want to go with the only override the inside if the inside override is specified, then a few code changes are necessary. I don't think it will be difficult to do at this point. Thoughts, @mitchute, @shorowit? |
|
And what we do with the variable absorptivity will likely somewhat determine what we do with the EMS values in the follow up EMS variation of this. The code in place before all of this started only impacted the exterior from what I can see. So, we can simply let the inside only get updated when the user uses that actuator. I think whatever we decide, we should be consistent between the variable absorptivity and the EMS stuff. |
Took out references to outside face in the field names and clarified various issues in the documentation. Should now line up with requests made during review.
|
|
A couple of stragglers that got missed in the last commit.
|
|
|
|
|
|
|
|
|
@RKStrand I think this one has moved in the right direction, and is only emitting the new outputs when the interior absorptances are used. I just made one comment about some suspicious code, but I need to keep looking to see if there are others. Please review this all carefully. |
|
|
|
|
|
|
| When a Material is used for the Construction of a building surface, care should be taken to not attempt to model assemblies that were not included in the intended scope of applicability for the underlying heat transfer models.~ The building surface models are for normal applications to building energy efficiency where the main focus is on assemblies with some thermal resistance. Extremely thin and/or highly conductive material layers should be neglected from the Construction rather than included because they will not contribute to the assembly's overall thermal resistance or heat capacity. For some cases, thin and/or highly conductive materials are a serious problem for the heat transfer modeling and the values for thickness, conductivity, density and specific heat are checked for appropriateness. This check calculates the Material's thermal diffusivity from the inputs for conductivity, density, and specific heat and compares it to a maximum threshold of $10^{-5}$ (m\(^{2}\)/s). If the diffusivity is above this threshold, then the program checks if the layer is sufficiently thick and may issue a warning if it is too thin and highly conductive. | ||
|
|
||
| The absorptance values in this object impart surface properties to the construction and should be applied to the thermally significant inner and outer layers in the overall assembly.~ Attempting to trick the program by modeling thin ``paint'' layers to apply surface properties is not a good idea; the models were not intended to support such strategies. | ||
| The absorptance values in this object impart surface properties to the construction and should be applied to the thermally significant inner and outer layers in the overall assembly.~ For an opaque construction, only the outside-face properties of the outermost layer and the inside-face properties of the innermost layer affect the surface heat balances; absorptance values on intermediate layers are not surface properties. Attempting to trick the program by modeling thin ``paint'' layers to apply surface properties is not a good idea; the models were not intended to support such strategies. |
There was a problem hiding this comment.
That's the gist of the PR.
| \paragraph{Field: Thermal Absorptance}\label{field-thermal-absorptance} | ||
|
|
||
| The thermal absorptance field in the Material input syntax represents the fraction of incident long wavelength (>2.5 microns) radiation that is absorbed by the material. This parameter is used when calculating the long wavelength radiant exchange between various surfaces and affects the surface heat balances (both inside and outside as appropriate). For long wavelength radiant exchange, thermal emissivity and thermal emittance are equal to thermal absorptance. Values for this field must be between 0.0 and 1.0 (with 1.0 representing ``black body'' conditions). The default value for this field is 0.9. | ||
| This field specifies the bulk thermal absorptance: the fraction of incident longwave radiation (wavelengths greater than 2.5~$\mu{}m$) absorbed by the material. When Thermal Absorptance Inside Face is blank, this value is used at both faces. When that optional field is entered, this value applies to the outside face. Thermal absorptance is used in longwave radiant exchange and the surface heat balances; by Kirchhoff's law, thermal emissivity and emittance equal thermal absorptance. The value must be greater than 0.0 and no greater than 0.99999. The default is 0.9. |
There was a problem hiding this comment.
Updated docs on the existing fields. Similar updates for other existing fields.
| \paragraph{Field: Thermal Absorptance Inside Face}\label{field-thermal-absorptance-inside-face} | ||
|
|
||
| This optional field specifies the thermal absorptance used at the inside face when this material is the innermost layer of a construction. When blank, it inherits the Thermal Absorptance value above. The value must be greater than 0.0 and no greater than 0.99999. | ||
|
|
||
| \paragraph{Field: Solar Absorptance Inside Face}\label{field-solar-absorptance-inside-face} | ||
|
|
||
| This optional field specifies the solar absorptance used at the inside face when this material is the innermost layer of a construction. When blank, it inherits the Solar Absorptance value above. The value must be between 0.0 and 1.0. | ||
|
|
||
| \paragraph{Field: Visible Absorptance Inside Face}\label{field-visible-absorptance-inside-face} | ||
|
|
||
| This optional field specifies the visible absorptance used at the inside face when this material is the innermost layer of a construction. When blank, it inherits the Visible Absorptance value above. The value must be between 0.0 and 1.0. | ||
|
|
| Material, | ||
| Material Diff Absorptances, !- Material Name | ||
| Rough, !- Roughness | ||
| 0.05, !- Thickness {m} | ||
| 2.5, !- Conductivity {W/M*K} | ||
| 1500.0, !- Density {Kg/M**3} | ||
| 888.8, !- Specific Heat {J/Kg*K} | ||
| 0.9000000, !- Thermal Absorptance | ||
| 0.7000000, !- Solar Absorptance | ||
| 0.7000000, !- Visible Absorptance | ||
| 0.6000000, !- Thermal Absorptance Inside Face | ||
| 0.4500000, !- Solar Absorptance Inside Face | ||
| 0.4500000; !- Visible Absorptance Inside Face | ||
| \end{lstlisting} |
There was a problem hiding this comment.
Example object with optional new fields. We're not updating the field names on the existing ones so as to not create confusion on those that don't need this new feature.
| Material:NoMass, | ||
| R13LAYER with diff abs, !- Material Name | ||
| Rough, !- Roughness | ||
| 2.290965, !- Resistance {M**2K/W} | ||
| 0.9000000, !- Thermal Absorptance | ||
| 0.7500000, !- Solar Absorptance | ||
| 0.7500000, !- Visible Absorptance | ||
| 0.2000000, !- Thermal Absorptance Inside Face | ||
| 0.2000000, !- Solar Absorptance Inside Face | ||
| 0.2000000; !- Visible Absorptance Inside Face | ||
| \end{lstlisting} |
| # Object Change: Material | ||
|
|
||
| Append three optional numeric fields: | ||
|
|
||
| - N8, "Thermal Absorptance Inside Face" | ||
| - N9, "Solar Absorptance Inside Face" | ||
| - N10, "Visible Absorptance Inside Face" | ||
|
|
||
| When any new field is blank, its value is inherited from the corresponding existing absorptance field. Existing input files therefore retain their prior bulk-material behavior without modification. When a new field is entered, the corresponding existing field supplies the outside-face value and the new field supplies the inside-face value. | ||
|
|
||
| See pull request [#11750](https://github.com/NatLabRockies/EnergyPlus/pull/11750) | ||
|
|
There was a problem hiding this comment.
Documenting optional input changes
There was a problem hiding this comment.
Oops...sorry, I didn't think that I had to do anything here because old files will work just fine.
| ### Surface absorptance report variables | ||
|
|
||
| PR #11750 adds surface thermal and solar absorptance report variables. Availability is determined separately for each surface and each absorptance type: | ||
|
|
||
| - `Surface Thermal Absorptance` and `Surface Solar Absorptance` use the generic/bulk names when no independent inside-face value or active inside-face variable-absorptance control applies to that surface. | ||
| - `Surface Thermal Absorptance Outside Face` and `Surface Thermal Absorptance Inside Face` replace the generic thermal variable for a surface that uses an independent inside-face thermal value or control. | ||
| - `Surface Solar Absorptance Outside Face` and `Surface Solar Absorptance Inside Face` replace the generic solar variable for a surface that uses an independent inside-face solar value or control. | ||
|
|
There was a problem hiding this comment.
Documenting report variable changes
| ### EIO Material Details absorptance columns | ||
|
|
||
| PR #11750 expands the `Material Details` record in `eplusout.eio`. The three absorptance columns | ||
|
|
||
| - `Absorptance:Thermal` | ||
| - `Absorptance:Solar` | ||
| - `Absorptance:Visible` | ||
|
|
||
| are replaced by six face-specific columns in the same location: | ||
|
|
||
| - `Absorptance:Thermal:OutsideFace` | ||
| - `Absorptance:Solar:OutsideFace` | ||
| - `Absorptance:Visible:OutsideFace` | ||
| - `Absorptance:Thermal:InsideFace` | ||
| - `Absorptance:Solar:InsideFace` | ||
| - `Absorptance:Visible:InsideFace` | ||
|
|
||
| For `Material` and `Material:NoMass`, the corresponding outside- and inside-face columns contain the same value when no independent inside-face value is entered. For other material types, including complex glazing, the columns report their existing front/back or derived face properties and may differ. | ||
|
|
| , !- Solar Absorptance Schedule Name | ||
| SurfaceTemperature, !- Control Signal Inside Face | ||
| ThermalAbsorptanceTemperatureTable, !- Thermal Absorptance Function Name Inside Face | ||
| , !- Thermal Absorptance Schedule Name Inside Face | ||
| SolarAbsorptanceTemperatureCurve, !- Solar Absorptance Function Name Inside Face | ||
| ; !- Solar Absorptance Schedule Name Inside Face | ||
|
|
There was a problem hiding this comment.
Exercising the new inputs on this object. Diffs expected for this file due to the temperature dependent curves being applied at the each face.
| true); | ||
| } | ||
|
|
||
| TEST_F(EnergyPlusFixture, GetMaterialDataConstructAbsorpTest) |
There was a problem hiding this comment.
Lots of new and updated unit tests
|
|
|
Thanks @RKStrand. This one is ready. Merging. |

Pull request overview
Constructionto better model roofs/radiant barriers/etc. #11393Description of the purpose of this PR
Materials in EnergyPlus have traditionally assumed that the thermal, solar, and visible absorptances are the same on both the inside and outside face and characterized by a single value. This has also been true even for the variable absorptance value entered with the MaterialProperty:VariableAbsorptance input since though it allowed the value to vary that value was used on both faces of the material. This feature implements the ability to control the value of the thermal, solar, and visible absorptances at both the inside and outside face of regular and no-mass materials. Existing input files still operate as they have previously since when only the outside values of these absorptances are entered the inside values default to the outside values. In addition, for variable absorptance input, new input fields allows the user to varying the values at either the inside or outside face and these variations can be independent and different. As with constant value material definitions, when the new fields for the inside face of a variable absorptance input are not entered, they default to the information entered for the outside face. Along with new unit tests and a new input file in the test suite to show the use of these new features, new output variables were added to allow the user to report the thermal and solar absorptance at the
inside and outside face of surfaces. The new input file also demonstrates the new output variables and verifies their correct assignment inside the code.
New differences in existing input files are expected because in the absence of the new input fields/capabilities, EnergyPlus will default to use the same values at the inside and outside face for absorptances.
Pull Request Author
Reviewer