- boundaryThe boundaries that participate in the radiative exchange.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The boundaries that participate in the radiative exchange.
- emissivityEmissivities for each boundary.
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:Emissivities for each boundary.
- n_patchesNumber of radiation patches per sideset.
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Number of radiation patches per sideset.
- temperatureThe coupled temperature variable.
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:The coupled temperature variable.
GrayDiffuseRadiation System
The GrayDiffuseRadiation syntax sets up radiative heat transfer between opaque, gray, diffuse surfaces problems.
Geometry and Boundary Types
This implementation assumes that radiation is exchanged in a cavity that is filled by a vacuum or a medium that is transparent to thermal radiation. The cavity must be enclosed by the boundaries specified in parameter "boundary". If the cavity is not enclosed, the result of the computation may be incorrect without MOOSE issuing a warning or error.
The following boundary conditions have support:
| Boundary Type | Description | Parameters |
|---|---|---|
| Adiabatic | "boundary" and "adiabatic_boundary" | |
| Fixed temperature | known; provided by function via "fixed_boundary_temperatures" | "boundary" and "fixed_temperature_boundary" |
| Variable temperature | unknown | "boundary" only |
| Symmetry | symmetry about some plane | "symmetry_boundary" only |
In summary:
"boundary" should contain all boundaries that participate in radiative exchange.
Symmetry boundaries are the only type not participating in radiative exchange and thus do not appear in "boundary".
Any boundary in "boundary" that is not in "adiabatic_boundary" nor "fixed_temperature_boundary" is a variable-temperature boundary.
Boundary Patches
The surfaces in radiation exchange correspond to sidesets. Radiation quantities are averaged over each of these surfaces. The accuracy of the method can be improved by creating new sub-surfaces (called "patches") using the "n_patches" parameter.
View Factors
By default, MOOSE's raytracing module is used for calculating view factors. The method is discussed in detail in RayTracingViewFactor. The parameter "view_factor_calculator" can be set to "analytical" to force the use of UnobstructedPlanarViewFactor; at this point this is maintained as backward compatibility option and it may be removed in the future.
The "ray_tracing_face_order" parameter is important because it controls the accuracy of the view factor computation. The raytracing computation uses the QGRID quadrature available in libMesh which places quadrature points at uniform distances on the from and to boundary faces. Increasing the "ray_tracing_face_order" increases the accuracy of the view factors. Note, that mesh refinement also enhances the accuracy of view factors, but at the expense of more elements being crossed during the raytracing procedure. Uniformly increasing the number of quadrature points using "ray_tracing_face_order" is essentially equivalent to selectively refining the mesh on the faces in radiative transfer.
Implementation
The following tasks are performed by this syntax/action:
New sidesets are created with PatchSidesetGenerator, corresponding to the numbers of patches specified by "n_patches".
A GrayLambertSurfaceRadiationBase object is created.
GrayLambertNeumannBC objects are created for boundaries requiring BC.
A UnobstructedPlanarViewFactor ("view_factor_calculator" is
analytical) or RayTracingViewFactor ("view_factor_calculator" isray_tracing) object is created to compute view factors.A ViewFactorRayStudy is created if "view_factor_calculator" is
ray_tracing.ViewFactorRayBC and ReflectRayBC objects are created if "view_factor_calculator" is
ray_tracing.A CONSTANT MONOMIAL aux variable is created with a GrayLambertRadiationHeatFluxAux aux kernel if "add_heat_flux_aux" is true.
Associated Objects
The following objects are useful for querying a GrayLambertSurfaceRadiationBase object:
GrayLambertSurfaceRadiationPP is a post-processor that retrieves the radiosity, heat flux, or temperature for a boundary.
SurfaceRadiationVectorPostprocessor is a vector post-processor that retrieves one or more of the following for all surfaces: emissivity, radiosity, temperature, and heat flux.
The following objects are useful for querying a ViewFactorBase object:
ViewFactorPP is a post-processor that can retrieve a view factor.
ViewFactorVectorPostprocessor is a vector post-processor that retrieves the view factors between all boundaries.
Available Actions
- Heat Transfer App
- RadiationTransferActionThis action sets up the net radiation calculation between specified sidesets.
Example Input syntax
[Problem<<<{"href": "../Problem/index.html"}>>>]
kernel_coverage_check = false
[]
[Mesh<<<{"href": "../Mesh/index.html"}>>>]
type = MeshGeneratorMesh
[./cmg]
type = CartesianMeshGenerator<<<{"description": "This CartesianMeshGenerator creates a non-uniform Cartesian mesh.", "href": "../../source/meshgenerators/CartesianMeshGenerator.html"}>>>
dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
dx<<<{"description": "Intervals in the X direction"}>>> = '1 1.3 1.9'
ix<<<{"description": "Number of grids in all intervals in the X direction (default to all one)"}>>> = '3 3 3'
dy<<<{"description": "Intervals in the Y direction (required when dim>1 otherwise ignored)"}>>> = '2 1.2 0.9'
iy<<<{"description": "Number of grids in all intervals in the Y direction (default to all one)"}>>> = '3 3 3'
subdomain_id<<<{"description": "Block IDs (default to all zero)"}>>> = '0 1 0
4 5 2
0 3 0'
[../]
[./inner_bottom]
type = SideSetsBetweenSubdomainsGenerator<<<{"description": "MeshGenerator that creates a sideset composed of the nodes located between two or more subdomains.", "href": "../../source/meshgenerators/SideSetsBetweenSubdomainsGenerator.html"}>>>
input<<<{"description": "The mesh we want to modify"}>>> = cmg
primary_block<<<{"description": "The primary set of blocks for which to draw a sideset between"}>>> = 1
paired_block<<<{"description": "The paired set of blocks for which to draw a sideset between"}>>> = 5
new_boundary<<<{"description": "The list of boundary names to create on the supplied subdomain"}>>> = 'inner_bottom'
[../]
[./inner_left]
type = SideSetsBetweenSubdomainsGenerator<<<{"description": "MeshGenerator that creates a sideset composed of the nodes located between two or more subdomains.", "href": "../../source/meshgenerators/SideSetsBetweenSubdomainsGenerator.html"}>>>
input<<<{"description": "The mesh we want to modify"}>>> = inner_bottom
primary_block<<<{"description": "The primary set of blocks for which to draw a sideset between"}>>> = 4
paired_block<<<{"description": "The paired set of blocks for which to draw a sideset between"}>>> = 5
new_boundary<<<{"description": "The list of boundary names to create on the supplied subdomain"}>>> = 'inner_left'
[../]
[./inner_right]
type = SideSetsBetweenSubdomainsGenerator<<<{"description": "MeshGenerator that creates a sideset composed of the nodes located between two or more subdomains.", "href": "../../source/meshgenerators/SideSetsBetweenSubdomainsGenerator.html"}>>>
input<<<{"description": "The mesh we want to modify"}>>> = inner_left
primary_block<<<{"description": "The primary set of blocks for which to draw a sideset between"}>>> = 2
paired_block<<<{"description": "The paired set of blocks for which to draw a sideset between"}>>> = 5
new_boundary<<<{"description": "The list of boundary names to create on the supplied subdomain"}>>> = 'inner_right'
[../]
[./inner_top]
type = SideSetsBetweenSubdomainsGenerator<<<{"description": "MeshGenerator that creates a sideset composed of the nodes located between two or more subdomains.", "href": "../../source/meshgenerators/SideSetsBetweenSubdomainsGenerator.html"}>>>
input<<<{"description": "The mesh we want to modify"}>>> = inner_right
primary_block<<<{"description": "The primary set of blocks for which to draw a sideset between"}>>> = 3
paired_block<<<{"description": "The paired set of blocks for which to draw a sideset between"}>>> = 5
new_boundary<<<{"description": "The list of boundary names to create on the supplied subdomain"}>>> = 'inner_top'
[../]
[./rename]
type = RenameBlockGenerator<<<{"description": "Changes the block IDs and/or block names for a given set of blocks defined by either block ID or block name. The changes are independent of ordering. The merging of blocks is supported.", "href": "../../source/meshgenerators/RenameBlockGenerator.html"}>>>
old_block<<<{"description": "Elements with these block ID(s)/name(s) will be given the new block information specified in 'new_block'"}>>> = '1 2 3 4'
new_block<<<{"description": "The new block ID(s)/name(s) to be given by the elements defined in 'old_block'."}>>> = '0 0 0 0'
input<<<{"description": "The mesh we want to modify"}>>> = inner_top
[../]
[]
[Variables<<<{"href": "../Variables/index.html"}>>>]
[./temperature]
block = 0
[../]
[]
[Kernels<<<{"href": "../Kernels/index.html"}>>>]
[./heat_conduction]
type = HeatConduction<<<{"description": "Diffusive heat conduction term $-\\nabla\\cdot(k\\nabla T)$ of the thermal energy conservation equation", "href": "../../source/kernels/HeatConduction.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
thermal_conductivity<<<{"description": "Property name of the thermal conductivity"}>>> = 5
[../]
[]
[GrayDiffuseRadiation<<<{"href": "index.html"}>>>]
[./cavity]
boundary<<<{"description": "The boundaries that participate in the radiative exchange."}>>> = '4 5 6 7'
emissivity<<<{"description": "Emissivities for each boundary."}>>> = '0.9 0.8 0.4 1'
n_patches<<<{"description": "Number of radiation patches per sideset."}>>> = '2 2 2 3'
partitioners<<<{"description": "Specifies a mesh partitioner to use when preparing the radiation patches."}>>> = 'centroid centroid centroid centroid'
centroid_partitioner_directions<<<{"description": "Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial"}>>> = 'x y y x'
temperature<<<{"description": "The coupled temperature variable."}>>> = temperature
adiabatic_boundary<<<{"description": "The adiabatic boundaries that participate in the radiative exchange."}>>> = '7'
fixed_temperature_boundary<<<{"description": "The fixed temperature boundaries that participate in the radiative exchange."}>>> = '4'
fixed_boundary_temperatures<<<{"description": "The temperatures of the fixed boundary."}>>> = '1200'
view_factor_calculator<<<{"description": "The view factor calculator being used."}>>> = analytical
[../]
[]
[BCs<<<{"href": "../BCs/index.html"}>>>]
[./left]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
value<<<{"description": "Value of the BC"}>>> = 600
[../]
[./right]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
value<<<{"description": "Value of the BC"}>>> = 300
[../]
[]
[Postprocessors<<<{"href": "../Postprocessors/index.html"}>>>]
[./average_T_inner_right]
type = SideAverageValue<<<{"description": "Computes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.", "href": "../../source/postprocessors/SideAverageValue.html"}>>>
variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = temperature
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = inner_right
[../]
[]
[Executioner<<<{"href": "../Executioner/index.html"}>>>]
type = Steady
[]
[Outputs<<<{"href": "../Outputs/index.html"}>>>]
exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
[](moose/modules/heat_transfer/test/tests/radiation_transfer_action/radiative_transfer_action.i)Input Parameters
- active__all__ If specified only the blocks named will be visited and made active
Default:__all__
C++ Type:std::vector<std::string>
Controllable:No
Description:If specified only the blocks named will be visited and made active
- add_heat_flux_auxFalseIf true, add a heat flux aux variable
Default:False
C++ Type:bool
Controllable:No
Description:If true, add a heat flux aux variable
- adiabatic_boundaryThe adiabatic boundaries that participate in the radiative exchange.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The adiabatic boundaries that participate in the radiative exchange.
- azimuthal_quad_order8Order of the azimuthal quadrature per quadrant [azimuthal angle is measured in a plane perpendicular to the normal]. Only used if view_factor_calculator = ray_tracing.
Default:8
C++ Type:unsigned int
Controllable:No
Description:Order of the azimuthal quadrature per quadrant [azimuthal angle is measured in a plane perpendicular to the normal]. Only used if view_factor_calculator = ray_tracing.
- centroid_partitioner_directionsSpecifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial
C++ Type:MultiMooseEnum
Controllable:No
Description:Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial
- fixed_boundary_temperaturesThe temperatures of the fixed boundary.
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:The temperatures of the fixed boundary.
- fixed_temperature_boundaryThe fixed temperature boundaries that participate in the radiative exchange.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The fixed temperature boundaries that participate in the radiative exchange.
- heat_flux_aux_blockSubdomains to use for heat flux aux if 'add_heat_flux_aux' is true
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:Subdomains to use for heat flux aux if 'add_heat_flux_aux' is true
- heat_flux_variableHeat flux aux variable name; this must be provided if 'add_heat_flux_aux' is true
C++ Type:VariableName
Unit:(no unit assumed)
Controllable:No
Description:Heat flux aux variable name; this must be provided if 'add_heat_flux_aux' is true
- inactiveIf specified blocks matching these identifiers will be skipped.
C++ Type:std::vector<std::string>
Controllable:No
Description:If specified blocks matching these identifiers will be skipped.
- normalize_view_factorTrueDetermines if view factors are normalized to sum to one (consistent with their definition).
Default:True
C++ Type:bool
Controllable:No
Description:Determines if view factors are normalized to sum to one (consistent with their definition).
- partitionersdefaultSpecifies a mesh partitioner to use when preparing the radiation patches.
Default:default
C++ Type:MultiMooseEnum
Controllable:No
Description:Specifies a mesh partitioner to use when preparing the radiation patches.
- polar_quad_order16Order of the polar quadrature [polar angle is between ray and normal]. Must be even. Only used if view_factor_calculator = ray_tracing.
Default:16
C++ Type:unsigned int
Controllable:No
Description:Order of the polar quadrature [polar angle is between ray and normal]. Must be even. Only used if view_factor_calculator = ray_tracing.
- print_view_factor_infoFalseFlag to print information about computed view factors.
Default:False
C++ Type:bool
Controllable:No
Description:Flag to print information about computed view factors.
- ray_tracing_face_orderCONSTANTThe face quadrature rule order used for ray tracing.
Default:CONSTANT
C++ Type:MooseEnum
Controllable:No
Description:The face quadrature rule order used for ray tracing.
- ray_tracing_face_typeGRIDThe face quadrature rule type used for ray tracing.
Default:GRID
C++ Type:MooseEnum
Controllable:No
Description:The face quadrature rule type used for ray tracing.
- symmetry_boundaryThe sidesets that represent symmetry lines/planes for the problem. These sidesets do not participate in the radiative exchangeso they should not be listed in the sidesets parameter.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The sidesets that represent symmetry lines/planes for the problem. These sidesets do not participate in the radiative exchangeso they should not be listed in the sidesets parameter.
- view_factor_calculatorray_tracingThe view factor calculator being used.
Default:ray_tracing
C++ Type:MooseEnum
Controllable:No
Description:The view factor calculator being used.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.