- material_typesType(s) of materials on this block. Specify one material for claddings or two materials (a fuel and a refractory metal) for cermets. The choices are: UN MN Tungsten Molybdenum Alloy366
C++ Type:MultiMooseEnum
Controllable:No
Description:Type(s) of materials on this block. Specify one material for claddings or two materials (a fuel and a refractory metal) for cermets. The choices are: UN MN Tungsten Molybdenum Alloy366
- ntp_modelsType(s) of physics models used on this block. The choices are: LinearElastic ThermalExpansion
C++ Type:MultiMooseEnum
Controllable:No
Description:Type(s) of physics models used on this block. The choices are: LinearElastic ThermalExpansion
NuclearMaterialNTP
Sets up the material objects needed to define the thermomechanical properties of Nuclear Thermal Propulsion (NTP) materials
Description
This action reduces the input file size for Nuclear Thermal Propulsion (NTP) simulations by generating a set of material classes. The action can be used to generate material properties for cladding and ceramic-metal (cermet) composites composed of the following materials:
Fuels: uranium mononitride (UN)
Refractory metals:
Tungsten
Molybdenum
Alloy 366 (Mo-30W weight-percent)
The user must specify one or more materials using the material_types parameter. If one material is specified, it must be a refractory metal, and the action sets up material classes for a cladding. If two materials are specified, they must be a fuel and a refractory metal, and the action sets up material classes for a cermet by applying a volume-averaged mixture rule.
The action uses material-specific Thermal, ElasticityTensor, and ThermalExpansionEigenstrain classes to calculate the thermal conductivity, isobaric specific heat capacity, elasticity tensor, and thermal expansion of each material. One notable exception is that the elasticity tensor of Alloy 366 is defined by applying a volume-averaged mixture rule to the elasticity tensors of tungsten and molybdenum. This will be updated when data for the elastic properties of Alloy 366 become available.
Table 1 shows an example of the material classes generated when material_types = 'UN Molybdenum'. Regardless of whether the action is applied to generate the material properties of a cladding or cermet, the material properties and their derivatives are defined using common naming conventions: thermal_conductivity, specific_heat, and elasticity_tensor.
Fission Operation
This required parameter describes the characteristic type of fission study that will occur. For NTP type simulations, this is simply labeled as fission_operation = Normal. This must be placed under the NuclearMaterials block heading and cannot be placed under sub-blocks such as NTP.
Table 1: Example of the material classes created by the NuclearMaterialNTP action when material_types = 'UN Molybdenum'
| Created Classes | Block Name | Material Property Name(s) |
|---|---|---|
| UNThermal | UN_thermal_properties | UN_thermal_conductivity |
| UN_specific_heat | ||
| MolybdenumThermal | Molybdenum_thermal_properties | Molybdenum_thermal_conductivity |
| Molybdenum_specific_heat | ||
| GenericConstantMaterial | Cermet_weights | fuel_fraction |
| matrix_fraction | ||
| ParsedMaterial | Cermet_thermal_conductivity | thermal_conductivity |
| ParsedMaterial | Cermet_specific_heat | specific_heat |
| UNElasticityTensor | UN_elasticity_tensor | UN_elasticity_tensor |
| MolybdenumElasticityTensor | Molybdenum_elasticity_tensor | Molybdenum_elasticity_tensor |
| CompositeElasticityTensor | Cermet_elasticity_tensor | elasticity_tensor |
| UNThermalExpansionEigenstrain | UN_thermal_expansion | UN_thermal_expansion |
| MolybdenumThermalExpansionEigenstrain | Molybdenum_thermal_expansion | Molybdenum_thermal_expansion |
| CompositeEigenstrain | Cermet_thermal_expansion | thermal_expansion |
| StrainAdjustedDensity | density |
Example Input Syntax
An example of the expanded and simplified input syntax is provided below for material_types = 'UN Alloy366' and fuel_fraction = 0.6.
Expanded Syntax
[Materials]
# This input file sets up a nuclear thermal propulsion problem by calculating
# the material properties of a tungsten clad Alloy366-UN cermet at various
# temperatures ranging from 200 to 2800 K. These are used along with the
# following objects to set up a simple stress divergence problem:
# - solid mechanics quasi-static action
# - linear elastic stress formulation
# - fixed displacement boundary condition on the left side of the 1D domain
# - heat conduction kernels
# - a generic value for density
[GlobalParams]
displacements = disp_x
value_range_behavior = IGNORE
[]
[Mesh]
use_displaced_mesh = false
[generated_mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 2
[]
[block_0]
type = ParsedSubdomainMeshGenerator
input = generated_mesh
block_id = 0
block_name = block_0
combinatorial_geometry = 'x <= 0.5'
[]
[block_1]
type = ParsedSubdomainMeshGenerator
input = block_0
block_id = 1
block_name = block_1
combinatorial_geometry = 'x > 0.5'
[]
uniform_refine = 4
[]
[Variables]
[temperature]
[InitialCondition]
type = FunctionIC
function = temperature_function
[]
[]
[]
[AuxVariables]
[elasticity_tensor_0000]
family = MONOMIAL
order = CONSTANT
[]
[thermal_expansion_000]
family = MONOMIAL
order = CONSTANT
[]
[]
[BCs]
[fix_left]
type = DirichletBC
variable = disp_x
value = 0
boundary = left
[]
[]
[Physics]
[SolidMechanics/QuasiStatic/All]
strain = SMALL
add_variables = true
eigenstrain_names = thermal_expansion
temperature = temperature
[]
[]
[Kernels]
[heat_time_derivative]
type = HeatConductionTimeDerivative
variable = temperature
density_name = density
specific_heat = specific_heat
[]
[heat_conduction]
type = HeatConduction
variable = temperature
diffusion_coefficient = specific_heat
diffusion_coefficient_dT = specific_heat_dT
[]
[]
[AuxKernels]
[elasticity_tensor_0000_auxkernel]
type = RankFourAux
variable = elasticity_tensor_0000
rank_four_tensor = elasticity_tensor
index_i = 0
index_j = 0
index_k = 0
index_l = 0
[]
[thermal_expansion_000_auxkernel]
type = RankTwoAux
variable = thermal_expansion_000
rank_two_tensor = thermal_expansion
index_i = 0
index_j = 0
[]
[]
[Functions]
[temperature_function]
type = ParsedFunction
expression = '200 + (2800 - 200) * x'
[]
[]
[Materials]
[stress]
type = ComputeLinearElasticStress
[]
[block_0_Alloy366_thermal_properties]
type = Alloy366Thermal
base_name = Alloy366
block = block_0
silence_warnings = true
temperature = temperature
[]
[block_0_Tungsten_elasticity_tensor]
type = TungstenElasticityTensor
base_name = Tungsten
block = block_0
silence_warnings = true
temperature = temperature
[]
[block_0_Molybdenum_elasticity_tensor]
type = MolybdenumElasticityTensor
base_name = Molybdenum
block = block_0
silence_warnings = true
temperature = temperature
[]
[block_0_Alloy366_weights]
type = GenericConstantMaterial
block = block_0
prop_names = 'Tungsten_fraction Molybdenum_fraction'
prop_values = '0.3 0.7'
[]
[block_0_Alloy366_elasticity_tensor]
type = CompositeElasticityTensor
coupled_variables = temperature
base_name = Alloy366
block = block_0
tensors = 'Tungsten Molybdenum'
weights = 'Tungsten_fraction Molybdenum_fraction'
[]
[block_0_Alloy366_thermal_expansion]
type = Alloy366ThermalExpansionEigenstrain
base_name = Alloy366
block = block_0
eigenstrain_name = thermal_expansion
silence_warnings = true
stress_free_temperature = 293
temperature = temperature
[]
[block_0_UN_thermal_properties]
type = MNThermal
formulation = NASAGRC
base_name = UN
block = block_0
temperature = temperature
porosity = 0
[]
[block_0_UN_elasticity_tensor]
type = UNElasticityTensor
base_name = UN
block = block_0
silence_warnings = true
temperature = temperature
[]
[block_0_UN_thermal_expansion]
type = UNThermalExpansionEigenstrain
base_name = UN
block = block_0
eigenstrain_name = thermal_expansion
silence_warnings = true
stress_free_temperature = 293
temperature = temperature
[]
[block_0_Cermet_weights]
type = GenericConstantMaterial
block = block_0
prop_names = 'fuel_fraction matrix_fraction'
prop_values = '0.6 0.4'
[]
[block_0_Cermet_thermal_conductivity]
type = ParsedMaterial
block = block_0
property_name = thermal_conductivity
expression = 'fuel_fraction * UN_thermal_conductivity + matrix_fraction * Alloy366_thermal_conductivity'
material_property_names = 'fuel_fraction UN_thermal_conductivity matrix_fraction Alloy366_thermal_conductivity'
output_properties = thermal_conductivity
outputs = exodus
[]
[block_0_Cermet_thermal_conductivity_dT]
type = ParsedMaterial
block = block_0
property_name = thermal_conductivity_dT
expression = 'fuel_fraction * UN_thermal_conductivity_dT + matrix_fraction * Alloy366_thermal_conductivity_dT'
material_property_names = 'fuel_fraction UN_thermal_conductivity_dT matrix_fraction Alloy366_thermal_conductivity_dT'
output_properties = thermal_conductivity_dT
outputs = exodus
[]
[block_0_Cermet_density]
type = StrainAdjustedDensity
strain_free_density = 11916
[]
[block_0_Cermet_specific_heat]
type = ParsedMaterial
block = block_0
property_name = specific_heat
expression = 'fuel_fraction * UN_specific_heat + matrix_fraction * Alloy366_specific_heat'
material_property_names = 'fuel_fraction UN_specific_heat matrix_fraction Alloy366_specific_heat'
output_properties = specific_heat
outputs = exodus
[]
[block_0_Cermet_specific_heat_dT]
type = ParsedMaterial
block = block_0
property_name = specific_heat_dT
expression = 'fuel_fraction * UN_specific_heat_dT + matrix_fraction * Alloy366_specific_heat_dT'
material_property_names = 'fuel_fraction UN_specific_heat_dT matrix_fraction Alloy366_specific_heat_dT'
output_properties = specific_heat_dT
outputs = exodus
[]
[block_0_Cermet_elasticity_tensor]
type = CompositeElasticityTensor
coupled_variables = temperature
block = block_0
tensors = 'UN Alloy366'
weights = 'fuel_fraction matrix_fraction'
[]
[block_0_Cermet_thermal_expansion]
type = CompositeEigenstrain
coupled_variables = temperature
block = block_0
eigenstrain_name = thermal_expansion
tensors = 'UN_thermal_expansion Alloy366_thermal_expansion'
weights = 'fuel_fraction matrix_fraction'
[]
[block_0_Cermet_thermal_expansion_dT]
type = GenericConstantRankTwoTensor
block = block_0
tensor_name = 'dthermal_expansion/dtemperature'
tensor_values = '0 0 0 0 0 0 0 0 0'
[]
[block_1_Tungsten_thermal_properties]
type = TungstenThermal
block = block_1
output_properties = 'thermal_conductivity thermal_conductivity_dT specific_heat specific_heat_dT'
outputs = exodus
silence_warnings = true
temperature = temperature
[]
[block_1_Tungsten_elasticity_tensor]
type = TungstenElasticityTensor
block = block_1
silence_warnings = true
temperature = temperature
[]
[block_1_Tungsten_thermal_expansion]
type = TungstenThermalExpansionEigenstrain
block = block_1
eigenstrain_name = thermal_expansion
silence_warnings = true
stress_free_temperature = 293
temperature = temperature
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
dt = 1
num_steps = 1
[]
[Outputs]
exodus = true
[]
(test/tests/nuclearMaterialNTPAction/two_blocks_manual.i)Simplified Syntax
[NuclearMaterials<<<{"href": "../index.html"}>>>]
[NTP<<<{"href": "index.html"}>>>]
[block_0]
block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = block_0
ntp_models<<<{"description": "Type(s) of physics models used on this block. The choices are: LinearElastic ThermalExpansion"}>>> = 'ThermalExpansion LinearElastic'
material_types<<<{"description": "Type(s) of materials on this block. Specify one material for claddings or two materials (a fuel and a refractory metal) for cermets. The choices are: UN MN Tungsten Molybdenum Alloy366"}>>> = 'Alloy366 UN'
# fuel_fraction = 0.6 //removed for testing conditions. see tests
silence_warnings<<<{"description": "Whether to silence correlation out of bound warnings"}>>> = true
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = exodus
output_properties<<<{"description": "List of material properties to output"}>>> = 'thermal_conductivity thermal_conductivity_dT specific_heat specific_heat_dT'
[]
[]
[](test/tests/nuclearMaterialNTPAction/two_blocks.i)The eigenstrains have been automatically parsed and included by wrapping the SolidMechanics QuasiStatic Action inside the NuclearMaterials following the naming convention created by this class.
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_variablesFalseAdd the displacement variables
Default:False
C++ Type:bool
Controllable:No
Description:Add the displacement variables
- additional_physicsType(s) of physics used on this block. The choices are: Mechanics Thermal
C++ Type:MultiMooseEnum
Controllable:No
Description:Type(s) of physics used on this block. The choices are: Mechanics Thermal
- automatic_eigenstrain_namesTrueCollects all material eigenstrains and passes to required strain calculator within the solid mechanics physics internally.
Default:True
C++ Type:bool
Controllable:No
Description:Collects all material eigenstrains and passes to required strain calculator within the solid mechanics physics internally.
- d1_functionFunction to be multiplied by d1
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:Function to be multiplied by d1
- d1_function_variableVariable to be used when evaluating d1_function. If not given, time will be used.
C++ Type:std::vector<std::string>
Controllable:No
Description:Variable to be used when evaluating d1_function. If not given, time will be used.
- decomposition_methodEigenSolutionMethods to calculate the finite strain and rotation increments
Default:EigenSolution
C++ Type:MooseEnum
Controllable:No
Description:Methods to calculate the finite strain and rotation increments
- densityInitial material density [kg/m3].
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Initial material density [kg/m3].
- diffusion_1st_activation_energiesDiffusion activation energies.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Diffusion activation energies.
- diffusion_1st_coefficients1st diffusion coefficient.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:1st diffusion coefficient.
- diffusion_2nd_activation_energiesSecond diffusion activation energy
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Second diffusion activation energy
- diffusion_2nd_coefficients2nd diffusion coefficient
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:2nd diffusion coefficient
- element_decay_constantsRadioactive decay constant for elements tracked
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Radioactive decay constant for elements tracked
- element_scalingRelative scaling of element percentages
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Relative scaling of element percentages
- elements_initial_concentrationRelative ratio of element concentration
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Relative ratio of element concentration
- elements_trackedThe elements tracked within TRISO simulations.
C++ Type:MultiMooseEnum
Controllable:No
Description:The elements tracked within TRISO simulations.
- extra_vector_tagsThe tag names for extra vectors that residual data should be saved into
C++ Type:std::vector<TagName>
Controllable:No
Description:The tag names for extra vectors that residual data should be saved into
- familyLAGRANGESpecifies the family of FE shape functions to use for this variable.
Default:LAGRANGE
C++ Type:MooseEnum
Controllable:No
Description:Specifies the family of FE shape functions to use for this variable.
- flux_factor1Constant multiplied against the function, rod average linear power, or q_variable.
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Constant multiplied against the function, rod average linear power, or q_variable.
- flux_functionThe function that describes the fast neutron flux
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:The function that describes the fast neutron flux
- fuel_fraction0.6Volume fraction of fuel (required only if block contains a cermet material)
Default:0.6
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Volume fraction of fuel (required only if block contains a cermet material)
- fuel_pin_geometryName of the UserObject that reads the pin geometry from the mesh.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that reads the pin geometry from the mesh.
- generate_outputAdd scalar quantity output for stress and/or strain
C++ Type:MultiMooseEnum
Controllable:No
Description:Add scalar quantity output for stress and/or strain
- 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.
- incrementalFalseUse incremental or total strain
Default:False
C++ Type:bool
Controllable:No
Description:Use incremental or total strain
- localized_initial_temperatureLocalized Initial temperature in Kelvins. This allows individual blocks to have different temperature conditions apart from the global initial conditions.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Localized Initial temperature in Kelvins. This allows individual blocks to have different temperature conditions apart from the global initial conditions.
- localized_temperature_functionFunction that describes localized temperature within the block.
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:Function that describes localized temperature within the block.
- orderSECONDSpecifies the order of the FE shape function to use for this variable.
Default:SECOND
C++ Type:MooseEnum
Controllable:No
Description:Specifies the order of the FE shape function to use for this variable.
- out_of_plane_pressure0Function used to prescribe pressure in the out-of-plane direction (y for 1D Axisymmetric or z for 2D Cartesian problems)
Default:0
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:Function used to prescribe pressure in the out-of-plane direction (y for 1D Axisymmetric or z for 2D Cartesian problems)
- output_propertiesnone List of material properties to output
Default:none
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties to output
- physicsType(s) of physics used on this block.
C++ Type:MultiMooseEnum
Controllable:No
Description:Type(s) of physics used on this block.
- poissons_ratioPoisson's ratio for the material.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Poisson's ratio for the material.
- porosity0Fractional porosity required by the uranium mononitride (UN) thermal conductivity, Young's modulus, and shear modulus correlations (required only if block contains UN or MN)
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Fractional porosity required by the uranium mononitride (UN) thermal conductivity, Young's modulus, and shear modulus correlations (required only if block contains UN or MN)
- silence_warningsFalseWhether to silence correlation out of bound warnings
Default:False
C++ Type:bool
Controllable:No
Description:Whether to silence correlation out of bound warnings
- strainSMALLStrain formulation
Default:SMALL
C++ Type:MooseEnum
Controllable:No
Description:Strain formulation
- stress_free_temperatureReference temperature for thermal eigenstrain calculation
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Reference temperature for thermal eigenstrain calculation
- system_pressure_functionThe function to use for the pressure on the exterior of the cladding.
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:The function to use for the pressure on the exterior of the cladding.
- temperatureCoupled temperature: Used in multiple models
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature: Used in multiple models
- use_automatic_differentiationFalseFlag to use automatic differentiation (AD) objects when possible
Default:False
C++ Type:bool
Controllable:No
Description:Flag to use automatic differentiation (AD) objects when possible
- youngs_modulusYoung's modulus of the material.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Young's modulus of the material.
Optional Parameters
- additional_generate_outputAdd scalar quantity output for stress and/or strain (will be appended to the list in `generate_output`)
C++ Type:MultiMooseEnum
Controllable:No
Description:Add scalar quantity output for stress and/or strain (will be appended to the list in `generate_output`)
- blockThe list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to
- displacementsThe displacements appropriate for the simulation geometry and coordinate system: Used in density and strain models
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacements appropriate for the simulation geometry and coordinate system: Used in density and strain models
- volumetric_locking_correctionFalseFlag to correct volumetric locking
Default:False
C++ Type:bool
Controllable:No
Description:Flag to correct volumetric locking
Mechanics 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.
- outputsVector of output names where you would like to restrict the output of variables(s) associated with this object
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object