- X_PuCoupled plutonium atom fraction.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled plutonium atom fraction.
- X_ZrCoupled zirconium atom fraction.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled zirconium atom fraction.
- temperatureCoupled temperature.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature.
PhaseUPuZr
Determines the phase for a given temperature and Zr atom concentration from the pseudo-binary phase diagram for U-Pu-Zr fuel.
Description
Zirconium redistribution in U-Zr and U-Pu-Zr based fuels impacts both fuel mechanical and thermal performance. For the detailed theoretical information of the calculation of the UPuZr phases and impact on redistribution, refer to the Zirconium Redistribution page.
Numerical Implementation in BISON
The diffusivity of zirconium in UPuZr fuel is heavily dependent on the current phase. This is true for both Fickian and Soret type diffusion. As such, it is essential to know where the current mesh point lies within the pseudo two-phase diagram as a function of temperature and zirconium concentration . This is achieved using the solubility curve solution (1) to calculate the solvus lines, typically with the default parameters, however each parameter can be set at run-time. Once each solvus line is calculated, the point described by (, ) will explicitly give the phase diagram region, either in the single phase regions (, , , ) or the two-phase regions (, ).
While determination of the phase region is important, it does not provide the necessary composition fractions of each single phase in the two-phase region. In addition, the smoothing of the diffusion coefficients and is necessary to ensure adequate convergence. As such, PhaseUPuZr explicitly tracks the fraction of each single phase type for any combination of (, ), determining each phase's contribution in the 2-phase region using the lever-rule, and artificially smoothing the transitions between phases by using an artificial smoothing width.
Two types of smoothing are required. The first occurs when the zirconium concentration is held constant, and temperature increases (or decreases) across a phase-transition line described by the transition temperatures between points A and B () and points C and D () in the simplified phase diagram. A mixing width (typically 2 K) is utilized such that if the temperature falls within of a temperature transition , the relative fraction of the upper and lower phases are smoothed across the transition region so that abrupt changes are avoided. Similar smoothing is required as temperature is held constant and moves across solvus lines. Smoothing occurs across the region of the solvus line, with typically 0.02.
After the lever rule is applied to the two-phase region and all smoothing is calculated, PhaseUPuZr returns the fraction of each single phase region at any given point. This information can then be used to calculate any phase dependent properties.
Example Input Syntax
[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
[phase]
type = PhaseUPuZr<<<{"description": "Determines the phase for a given temperature and Zr atom concentration from the pseudo-binary phase diagram for U-Pu-Zr fuel.", "href": "PhaseUPuZr.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
temperature<<<{"description": "Coupled temperature."}>>> = temp
X_Pu<<<{"description": "Coupled plutonium atom fraction."}>>> = 0.16
X_Zr<<<{"description": "Coupled zirconium atom fraction."}>>> = X_Zr
lever_weight_coeffs<<<{"description": "Weighting factor coefficients (2 total) for modifying default linear lever rule in two-phase region (default: linear [0, 1])"}>>> = '.1 .9' # different for testing, usually '0 1'
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = 'all'
[]
[](test/tests/phase_upuzr/patch.i)Input Parameters
- AB_temp868.15Material property name for the horizontal temperature line between points A and B in the pseudo-binary phase diagram.
Default:868.15
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Material property name for the horizontal temperature line between points A and B in the pseudo-binary phase diagram.
- A_conc0.04Zirconium concentration at point A in the psuedo-binary phase diagram.
Default:0.04
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Zirconium concentration at point A in the psuedo-binary phase diagram.
- B_conc0.7Zirconium concentration at point B in the psuedo-binary phase diagram.
Default:0.7
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Zirconium concentration at point B in the psuedo-binary phase diagram.
- CD_temp923.15Material property name for the horizontal temperature line between points C and D in the pseudo-binary phase diagram.
Default:923.15
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Material property name for the horizontal temperature line between points C and D in the pseudo-binary phase diagram.
- C_conc0.033Zirconium concentration at point C in the psuedo-binary phase diagram.
Default:0.033
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Zirconium concentration at point C in the psuedo-binary phase diagram.
- D_conc0.43Zirconium concentration at point D in the psuedo-binary phase diagram.
Default:0.43
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Zirconium concentration at point D in the psuedo-binary phase diagram.
- H_values100000 -50000 -100000 -3000 Phase H values. Must have four values: Alpha, Beta, Gamma, Delta
Default:100000 -50000 -100000 -3000
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Phase H values. Must have four values: Alpha, Beta, Gamma, Delta
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- calc_HTrueFlag to automatically calculate H values
Default:True
C++ Type:bool
Controllable:No
Description:Flag to automatically calculate H values
- computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
Default:True
C++ Type:bool
Controllable:No
Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
- conc_mixing_width0.02Width of mixing gap used when crossing phase boundaries by changing Zr concentration.
Default:0.02
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Width of mixing gap used when crossing phase boundaries by changing Zr concentration.
- constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
Default:NONE
C++ Type:MooseEnum
Options:NONE, ELEMENT, SUBDOMAIN
Controllable:No
Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
- declare_suffixAn optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
- lever_weight_coeffs0 1 Weighting factor coefficients (2 total) for modifying default linear lever rule in two-phase region (default: linear [0, 1])
Default:0 1
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Weighting factor coefficients (2 total) for modifying default linear lever rule in two-phase region (default: linear [0, 1])
- lower_concentrations0.002 0.05 0.98 0.76 Lower zirconium concentration points used to calculate H values. Must have four values: Alpha, Beta, Gamma, Delta
Default:0.002 0.05 0.98 0.76
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Lower zirconium concentration points used to calculate H values. Must have four values: Alpha, Beta, Gamma, Delta
- temp_mixing_width2Width of mixing gap used when crossing phase boundaries by changing temperature.
Default:2
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Width of mixing gap used when crossing phase boundaries by changing temperature.
- verboseFalsePrint diagnostic information
Default:False
C++ Type:bool
Controllable:No
Description:Print diagnostic information
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.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
- outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
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
Outputs Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
- (test/tests/zirconium_diffusion/ad_exact.i)
- (examples/metal_fuel/uzr/pin.i)
- (test/tests/phase_upuzr/ad_patch.i)
- (test/tests/zrdiffusivity_upuzr/ad_patch.i)
- (test/tests/zirconium_diffusion/exact.i)
- (test/tests/phase_upuzr/full_phase_diagram.i)
- (test/tests/phase_upuzr/ad_full_phase_diagram.i)
- (test/tests/zirconium_diffusion/ad_test.i)
- (test/tests/zrdiffusivity_upuzr/exact.i)
- (test/tests/zirconium_diffusion/test.i)
- (test/tests/zrdiffusivity_upuzr/patch.i)
- (test/tests/phase_upuzr/patch.i)
- (examples/thor_capsule_transfer/pin_with_heat_sink.i)
- (examples/metal_fuel/X447_coarse/DP21_test.i)
(test/tests/phase_upuzr/patch.i)
# Calculates phase by changing temperature and zirconium atom fraction
# Check associated excel sheet for exact solution
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
[]
[]
[Variables]
[temp]
initial_condition = 773
[]
[X_Zr]
initial_condition = 0
[]
[]
[Kernels]
[temp_diff]
type = Diffusion
variable = temp
[]
[Zr_diff]
type = Diffusion
variable = X_Zr
[]
[]
[BCs]
[temp_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = temp
function = temp_ramp
[]
[conc_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = X_Zr
function = conc_ramp
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '950 850 850 950 850'
[]
[conc_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '0.01 0.01 0.1 0.55 0.8'
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
lever_weight_coeffs = '.1 .9' # different for testing, usually '0 1'
outputs = 'all'
[]
[]
[Executioner]
type = Transient
end_time = 200
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[Zr]
type = ElementAverageValue
variable = X_Zr
[]
[phase]
type = ElementAverageValue
variable = phase
[]
[]
[Outputs]
csv = true
[]
(test/tests/zirconium_diffusion/ad_exact.i)
# This input file mirrors the method in moose/modules/misc/tests/kernels/thermo_diffusion.i
# Steady-state test for the ZirconiumDiffusion kernel.
#
# This test applies a constant temperature gradient to drive thermo-diffusion
# in the variable u. At steady state, the thermo-diffusion is balanced by
# diffusion due to Fick's Law, so the total flux is
#
# J = -D grad(u) - S grad(T) = 0
#
# If there are no fluxes at the boundaries, then there is no background flux and
# these two terms must balance each other everywhere:
#
# grad(u) = -(S / D) grad(T)
#
# Using S = D * u(1-u) * Qstar/R/T^2, and setting Qstar=R the dx can be eliminated to give
#
# du = -u(1-u) dT/T^2
#
# This can be solved to give the profile for u as a function of temperature:
#
# u = exp(T^-1 + C) / ( 1 + exp(T^-1 + C ) )
#
# Here, we are using simple heat conduction with Dirichlet boundaries on 0 <= x <= 1
# to give a linear profile for temperature: T = x + 1:
#
# u = exp(1/(x+1) + C) / ( 1 + exp(1/(x+1) + C ) )
#
# Using the BC u(x=0) = 0.5, then C = -1.
# This analytical result is tracked by the aux variable "correct_u".
#
#
# Postprocessor Values:
# +----------------+----------------+----------------+----------------+
# | time | correct_u | temp | u |
# +----------------+----------------+----------------+----------------+
# | 0.000000e+00 | 4.243783e-01 | 1.000000e+00 | 0.000000e+00 |
# | 1.000000e+00 | 4.243783e-01 | 1.500000e+00 | 4.243658e-01 |
# +----------------+----------------+----------------+----------------+
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 1
[]
[]
[Variables]
[u]
initial_condition = 0.5
[]
[temp]
initial_condition = 1
[]
[]
[Kernels]
[zr_diff]
type = ADZirconiumDiffusion
variable = u
temperature = temp
[]
# Heat diffusion gives a linear temperature profile to drive the Soret diffusion.
[diffT]
type = ADDiffusion
variable = temp
[]
[]
[BCs]
[left]
type = ADDirichletBC
variable = u
boundary = left
value = 0.5
[]
[leftt]
type = ADDirichletBC
variable = temp
boundary = left
value = 1
[]
[rightt]
type = ADDirichletBC
variable = temp
boundary = right
value = 2
[]
[]
[Materials]
[zr_diff]
type = ADZrDiffusivityUPuZr
block = 0
temperature = temp
X_Pu = 0
X_Zr = u
Qstar_alpha = 8.31446
Q_scale_alpha = 0
[]
[phase]
type = ADPhaseUPuZr
block = 0
temperature = 800
X_Pu = 0
X_Zr = 0.01
[]
[]
[Functions]
# The correct (analytical) result for the solution of u
[concentration_profile]
type = ParsedFunction
expression = 'exp(1.0/(x+1.0)-1) / ( 1.0 + exp(1.0/(x+1.0)-1) )'
[]
[]
[AuxVariables]
[correct_u]
[]
[]
[AuxKernels]
# This kernel is just being used to plot the correct result for u.
[copy_from_function]
type = FunctionAux
variable = correct_u
function = concentration_profile
execute_on = 'initial timestep_begin'
[]
[]
[Executioner]
type = Steady
nl_abs_tol = 1e-50
nl_rel_tol = 1e-12
l_tol = 1e-10
[]
[Postprocessors]
[u]
type = ElementAverageValue
variable = u
execute_on = 'initial timestep_end'
[]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[correct_u]
type = ElementAverageValue
variable = correct_u
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
exodus = true
[]
(examples/metal_fuel/uzr/pin.i)
initial_fuel_density = 15800
[GlobalParams]
energy_per_fission = 3.2e-11 # J/fission
temperature = temp
[]
[Mesh]
coord_type = RZ
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 300
xmax = 0.002
[]
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Variables]
[temp]
initial_condition = 298
[]
[X_Zr]
scaling = 1e10
initial_condition = 0.225
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
x = '0 100000 3901600 4333600 6148000 7948800 '
y = '0 40016 40344 42312 41984 41984 '
[]
[temp_history]
type = PiecewiseLinear
x = '0 100000 3901600 4333600 6148000 7948800 '
y = '298.0 805.5 803.8 811.1 808.5 807.4'
[]
[]
[Kernels]
[heat]
type = ConstitutiveHeatConduction
variable = temp
thermal_conductivity = 'thermal_conductivity'
thermal_conductivity_args = 'temp X_Zr'
thermal_conductivity_derivs = 'thermal_conductivity_dT thermal_conductivity_dZr'
extra_vector_tags = 'ref'
[]
[heat_ie]
type = ConstitutiveHeatConductionTimeDerivative
variable = temp
specific_heat = 'specific_heat'
specific_heat_args = 'temp'
specific_heat_derivs = 'specific_heat_dT'
extra_vector_tags = 'ref'
[]
[heat_source]
type = FissionRateHeatSource
variable = temp
fission_rate_args = 'X_Zr'
fission_rate_derivs = 'fission_rate_dZr'
extra_vector_tags = 'ref'
[]
[ZrDiffusion]
type = ZirconiumDiffusion
variable = X_Zr
temperature = temp
extra_vector_tags = 'ref'
[]
[diffusion_ie]
type = TimeDerivative
variable = X_Zr
extra_vector_tags = 'ref'
[]
[]
[BCs]
[temp_rightside]
type = FunctionDirichletBC
variable = temp
boundary = right
function = temp_history
[]
[]
[Materials]
[fission_rate]
type = UPuZrFissionRate
rod_linear_power = power_history
axial_power_profile = 1.0
pellet_radius = 0.002
initial_X_Zr = 0.225
X_Zr = X_Zr
X_Pu_function = 0.163
[]
[burnup]
type = UPuZrBurnup
initial_X_Zr = 0.225
initial_X_Pu = 0.163
density = ${initial_fuel_density}
[]
[metal_fuel_thermal]
type = UPuZrThermal
spheat_model = savage
thcond_model = lanl
porosity = porosity
X_Zr = X_Zr
X_Pu = 0.163
[]
[swelling]
type = UPuZrVolumetricSwellingEigenstrain
burnup = 0
hydrostatic_stress = 0
eigenstrain_name = 'swelling'
output_properties = 'porosity gaseous_porosity'
[]
[fuel_density]
type = GenericConstantMaterial
prop_names = density
prop_values = ${initial_fuel_density}
[]
[phase]
type = PhaseUPuZr
X_Zr = X_Zr
X_Pu = 0.163
AB_temp = 965.15
CD_temp = 995.15
[]
[zr_diff]
type = ZrDiffusivityUPuZr
X_Zr = X_Zr
X_Pu = 0.163
p_alpha = 0.20
p_delta = 0.20
p_beta = 0.20
p_gamma = 0.20
D0_scale_alpha = 15.0
D0_scale_delta = 1.0
D0_scale_beta = 2.0
D0_scale_gamma = 7.0
outputs = all
[]
[]
[Dampers]
[bounded_zr]
type = BoundingValueNodalDamper
variable = X_Zr
max_value = 0.83
min_value = 0
[]
[]
[Preconditioning]
[asdf]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
line_search = 'none'
end_time = 3e6
dtmin = 1e-2
dtmax = 1e6
nl_max_its = 30
l_max_its = 100
nl_abs_tol = 1e-9
nl_rel_tol = 1e-9
l_tol = 1e-05
[TimeStepper]
type = IterationAdaptiveDT
dt = 1e3
optimal_iterations = 8
iteration_window = 2
growth_factor = 2
cutback_factor = .5
timestep_limiting_function = power_history
force_step_every_function_point = true
[]
[]
[Postprocessors]
[dt]
type = TimestepSize
[]
[num_lin]
type = NumLinearIterations
[]
[num_nonlin]
type = NumNonlinearIterations
[]
[ave_temp]
type = ElementAverageValue
variable = temp
block = 0
[]
[X_Zr]
type = NodalExtremeValue
variable = X_Zr
block = 0
value_type = max
[]
[]
[Outputs]
perf_graph = true
#exodus = true
[csv_output]
type = CSV
precision = 8
file_base = pin_out
hide = 'dt num_lin num_nonlin'
execute_on = final
[]
[]
(test/tests/phase_upuzr/ad_patch.i)
# Calculates phase by changing temperature and zirconium atom fraction
# Check associated excel sheet for exact solution
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
[]
[]
[Variables]
[temp]
initial_condition = 773
[]
[X_Zr]
initial_condition = 0
[]
[]
[Kernels]
[temp_diff]
type = ADDiffusion
variable = temp
[]
[Zr_diff]
type = ADDiffusion
variable = X_Zr
[]
[]
[BCs]
[temp_BC]
type = ADFunctionDirichletBC
boundary = 'top bottom left right'
variable = temp
function = temp_ramp
[]
[conc_BC]
type = ADFunctionDirichletBC
boundary = 'top bottom left right'
variable = X_Zr
function = conc_ramp
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '950 850 850 950 850'
[]
[conc_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '0.01 0.01 0.1 0.55 0.8'
[]
[]
[Materials]
[phase]
type = ADPhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
lever_weight_coeffs = '.1 .9' # different for testing, usually '0 1'
outputs = 'all'
output_properties = 'phase'
[]
[]
[Executioner]
type = Transient
end_time = 200
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[Zr]
type = ElementAverageValue
variable = X_Zr
[]
[phase]
type = ElementAverageValue
variable = phase
[]
[]
[Outputs]
csv = true
[]
(test/tests/zrdiffusivity_upuzr/ad_patch.i)
# Calculates Fickian and Soret Diffusivty by changing temperature and zirconium atom fraction
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
[]
[]
[Variables]
[temp]
initial_condition = 773
[]
[X_Zr]
initial_condition = 0.01
[]
[]
[Kernels]
[temp_diff]
type = ADDiffusion
variable = temp
[]
[Zr_diff]
type = ADDiffusion
variable = X_Zr
[]
[]
[AuxVariables]
[alpha_solvus]
order = CONSTANT
family = MONOMIAL
[]
[beta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[gamma_solvus]
order = CONSTANT
family = MONOMIAL
[]
[delta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[alpha_2phase]
order = CONSTANT
family = MONOMIAL
[]
[beta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[gamma_2phase]
order = CONSTANT
family = MONOMIAL
[]
[delta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[alpha_solvus]
type = ADMaterialStdVectorAux
variable = alpha_solvus
property = phase_solvus
index = 0
[]
[beta_solvus]
type = ADMaterialStdVectorAux
variable = beta_solvus
property = phase_solvus
index = 1
[]
[gamma_solvus]
type = ADMaterialStdVectorAux
variable = gamma_solvus
property = phase_solvus
index = 2
[]
[delta_solvus]
type = ADMaterialStdVectorAux
variable = delta_solvus
property = phase_solvus
index = 3
[]
[alpha_2phase]
type = ADMaterialStdVectorAux
variable = alpha_2phase
property = twophase_fractions
index = 0
[]
[beta_2phase]
type = ADMaterialStdVectorAux
variable = beta_2phase
property = twophase_fractions
index = 1
[]
[gamma_2phase]
type = ADMaterialStdVectorAux
variable = gamma_2phase
property = twophase_fractions
index = 2
[]
[delta_2phase]
type = ADMaterialStdVectorAux
variable = delta_2phase
property = twophase_fractions
index = 3
[]
[]
[BCs]
[temp_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = temp
function = temp_ramp
[]
[conc_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = X_Zr
function = conc_ramp
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '950 850 850 950 850'
[]
[conc_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '0.01 0.01 0.1 0.55 0.8'
[]
[]
[Materials]
[phase]
type = ADPhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
outputs = 'all'
output_properties = 'alpha beta gamma delta phase phase_region'
lever_weight_coeffs = '.1 .9' # different for testing, usually '0 1'
calc_H = false
[]
[zr_diff]
type = ADZrDiffusivityUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
outputs = 'all'
[]
[]
[Executioner]
type = Transient
end_time = 200
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[Zr]
type = ElementAverageValue
variable = X_Zr
[]
[phase_region]
type = ElementAverageValue
variable = phase_region
[]
[alpha]
type = ElementAverageValue
variable = alpha
[]
[beta]
type = ElementAverageValue
variable = beta
[]
[gamma]
type = ElementAverageValue
variable = gamma
[]
[delta]
type = ElementAverageValue
variable = delta
[]
[alpha_2phase]
type = ElementAverageValue
variable = alpha_2phase
[]
[beta_2phase]
type = ElementAverageValue
variable = beta_2phase
[]
[gamma_2phase]
type = ElementAverageValue
variable = gamma_2phase
[]
[delta_2phase]
type = ElementAverageValue
variable = delta_2phase
[]
[alpha_solvus]
type = ElementAverageValue
variable = alpha_solvus
[]
[beta_solvus]
type = ElementAverageValue
variable = beta_solvus
[]
[gamma_solvus]
type = ElementAverageValue
variable = gamma_solvus
[]
[delta_solvus]
type = ElementAverageValue
variable = delta_solvus
[]
[zr_diff]
type = ElementAverageValue
variable = Zr_diffusivity
[]
[zr_soret]
type = ElementAverageValue
variable = Zr_Soret
[]
[]
[Outputs]
csv = true
[]
(test/tests/zirconium_diffusion/exact.i)
# This input file mirrors the method in moose/modules/misc/tests/kernels/thermo_diffusion.i
# Steady-state test for the ZirconiumDiffusion kernel.
#
# This test applies a constant temperature gradient to drive thermo-diffusion
# in the variable u. At steady state, the thermo-diffusion is balanced by
# diffusion due to Fick's Law, so the total flux is
#
# J = -D grad(u) - S grad(T) = 0
#
# If there are no fluxes at the boundaries, then there is no background flux and
# these two terms must balance each other everywhere:
#
# grad(u) = -(S / D) grad(T)
#
# Using S = D * u(1-u) * Qstar/R/T^2, and setting Qstar=R the dx can be eliminated to give
#
# du = -u(1-u) dT/T^2
#
# This can be solved to give the profile for u as a function of temperature:
#
# u = exp(T^-1 + C) / ( 1 + exp(T^-1 + C ) )
#
# Here, we are using simple heat conduction with Dirichlet boundaries on 0 <= x <= 1
# to give a linear profile for temperature: T = x + 1:
#
# u = exp(1/(x+1) + C) / ( 1 + exp(1/(x+1) + C ) )
#
# Using the BC u(x=0) = 0.5, then C = -1.
# This analytical result is tracked by the aux variable "correct_u".
#
#
# Postprocessor Values:
# +----------------+----------------+----------------+----------------+
# | time | correct_u | temp | u |
# +----------------+----------------+----------------+----------------+
# | 0.000000e+00 | 4.243783e-01 | 1.000000e+00 | 0.000000e+00 |
# | 1.000000e+00 | 4.243783e-01 | 1.500000e+00 | 4.243658e-01 |
# +----------------+----------------+----------------+----------------+
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 1
[]
[]
[Variables]
[u]
initial_condition = 0.5
[]
[temp]
initial_condition = 1
[]
[]
[Kernels]
[zr_diff]
type = ZirconiumDiffusion
variable = u
temperature = temp
[]
# Heat diffusion gives a linear temperature profile to drive the Soret diffusion.
[diffT]
type = Diffusion
variable = temp
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 0.5
[]
[leftt]
type = DirichletBC
variable = temp
boundary = left
value = 1
[]
[rightt]
type = DirichletBC
variable = temp
boundary = right
value = 2
[]
[]
[Materials]
[zr_diff]
type = ZrDiffusivityUPuZr
block = 0
temperature = temp
X_Pu = 0
X_Zr = u
Qstar_alpha = 8.31446
Q_scale_alpha = 0
[]
[phase]
type = PhaseUPuZr
block = 0
temperature = 800
X_Pu = 0
X_Zr = 0.01
[]
[]
[Functions]
# The correct (analytical) result for the solution of u
[concentration_profile]
type = ParsedFunction
expression = 'exp(1.0/(x+1.0)-1) / ( 1.0 + exp(1.0/(x+1.0)-1) )'
[]
[]
[AuxVariables]
[correct_u]
[]
[]
[AuxKernels]
# This kernel is just being used to plot the correct result for u.
[copy_from_function]
type = FunctionAux
variable = correct_u
function = concentration_profile
execute_on = 'initial timestep_begin'
[]
[]
[Executioner]
type = Steady
nl_abs_tol = 1e-50
nl_rel_tol = 1e-12
l_tol = 1e-10
[]
[Postprocessors]
[u]
type = ElementAverageValue
variable = u
execute_on = 'initial timestep_end'
[]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[correct_u]
type = ElementAverageValue
variable = correct_u
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
exodus = true
[]
(test/tests/phase_upuzr/full_phase_diagram.i)
# Reproduces psuedo two-phase diagram from Galloway JNM 286 (2015)
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 50
[]
[]
[Variables]
[temp]
[]
[X_Zr]
[]
[]
[Kernels]
[temp_diff]
type = Diffusion
variable = temp
[]
[Zr_diff]
type = Diffusion
variable = X_Zr
[]
[]
[AuxVariables]
[alpha_solvus]
order = CONSTANT
family = MONOMIAL
[]
[beta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[gamma_solvus]
order = CONSTANT
family = MONOMIAL
[]
[delta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[alpha_2phase]
order = CONSTANT
family = MONOMIAL
[]
[beta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[gamma_2phase]
order = CONSTANT
family = MONOMIAL
[]
[delta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[alpha_solvus]
type = MaterialStdVectorAux
variable = alpha_solvus
property = phase_solvus
index = 0
[]
[beta_solvus]
type = MaterialStdVectorAux
variable = beta_solvus
property = phase_solvus
index = 1
[]
[gamma_solvus]
type = MaterialStdVectorAux
variable = gamma_solvus
property = phase_solvus
index = 2
[]
[delta_solvus]
type = MaterialStdVectorAux
variable = delta_solvus
property = phase_solvus
index = 3
[]
[alpha_2phase]
type = MaterialStdVectorAux
variable = alpha_2phase
property = twophase_fractions
index = 0
[]
[beta_2phase]
type = MaterialStdVectorAux
variable = beta_2phase
property = twophase_fractions
index = 1
[]
[gamma_2phase]
type = MaterialStdVectorAux
variable = gamma_2phase
property = twophase_fractions
index = 2
[]
[delta_2phase]
type = MaterialStdVectorAux
variable = delta_2phase
property = twophase_fractions
index = 3
[]
[]
[ICs]
[temp_ic]
type = FunctionIC
variable = temp
function = temp_fcn
[]
[conc_ic]
type = FunctionIC
variable = X_Zr
function = conc_fcn
[]
[]
[Functions]
[temp_fcn]
type = ParsedFunction
expression = '773+(1023.0-773.0)*y'
[]
[conc_fcn]
type = ParsedFunction
expression = '0.8*x'
[]
[]
[BCs]
[temp_top]
type = DirichletBC
boundary = top
variable = temp
value = 1023
[]
[temp_bottom]
type = DirichletBC
boundary = bottom
variable = temp
value = 773
[]
[Zr_left]
type = DirichletBC
boundary = left
variable = X_Zr
value = 0
[]
[temp_right]
type = DirichletBC
boundary = right
variable = X_Zr
value = 0.8
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
outputs = exodus
[]
[]
[Postprocessors]
[avg_temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Steady
l_tol = 1e-7
nl_abs_tol = 1e-7
nl_rel_tol = 1e-7
petsc_options_iname = '-pc_type -sub_pc_type -ksp_gmres_restart'
petsc_options_value = 'asm lu 101'
[]
[Outputs]
exodus = true
#hide = 'H_alpha H_beta H_gamma H_delta'
[]
(test/tests/phase_upuzr/ad_full_phase_diagram.i)
# Reproduces psuedo two-phase diagram from Galloway JNM 286 (2015)
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 50
[]
[]
[Variables]
[temp]
[]
[X_Zr]
[]
[]
[Kernels]
[temp_diff]
type = ADDiffusion
variable = temp
[]
[Zr_diff]
type = ADDiffusion
variable = X_Zr
[]
[]
[AuxVariables]
[alpha_solvus]
order = CONSTANT
family = MONOMIAL
[]
[beta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[gamma_solvus]
order = CONSTANT
family = MONOMIAL
[]
[delta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[alpha_2phase]
order = CONSTANT
family = MONOMIAL
[]
[beta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[gamma_2phase]
order = CONSTANT
family = MONOMIAL
[]
[delta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[alpha_solvus]
type = ADMaterialStdVectorAux
variable = alpha_solvus
property = phase_solvus
index = 0
[]
[beta_solvus]
type = ADMaterialStdVectorAux
variable = beta_solvus
property = phase_solvus
index = 1
[]
[gamma_solvus]
type = ADMaterialStdVectorAux
variable = gamma_solvus
property = phase_solvus
index = 2
[]
[delta_solvus]
type = ADMaterialStdVectorAux
variable = delta_solvus
property = phase_solvus
index = 3
[]
[alpha_2phase]
type = ADMaterialStdVectorAux
variable = alpha_2phase
property = twophase_fractions
index = 0
[]
[beta_2phase]
type = ADMaterialStdVectorAux
variable = beta_2phase
property = twophase_fractions
index = 1
[]
[gamma_2phase]
type = ADMaterialStdVectorAux
variable = gamma_2phase
property = twophase_fractions
index = 2
[]
[delta_2phase]
type = ADMaterialStdVectorAux
variable = delta_2phase
property = twophase_fractions
index = 3
[]
[]
[ICs]
[temp_ic]
type = FunctionIC
variable = temp
function = temp_fcn
[]
[conc_ic]
type = FunctionIC
variable = X_Zr
function = conc_fcn
[]
[]
[Functions]
[temp_fcn]
type = ParsedFunction
expression = '773+(1023.0-773.0)*y'
[]
[conc_fcn]
type = ParsedFunction
expression = '0.8*x'
[]
[]
[BCs]
[temp_top]
type = ADDirichletBC
boundary = top
variable = temp
value = 1023
[]
[temp_bottom]
type = ADDirichletBC
boundary = bottom
variable = temp
value = 773
[]
[Zr_left]
type = ADDirichletBC
boundary = left
variable = X_Zr
value = 0
[]
[temp_right]
type = ADDirichletBC
boundary = right
variable = X_Zr
value = 0.8
[]
[]
[Materials]
[phase]
type = ADPhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
outputs = exodus
[]
[]
[Postprocessors]
[avg_temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Steady
l_tol = 1e-7
nl_abs_tol = 1e-7
nl_rel_tol = 1e-7
petsc_options_iname = '-pc_type -sub_pc_type -ksp_gmres_restart'
petsc_options_value = 'asm lu 101'
[]
[Outputs]
exodus = true
#hide = 'H_alpha H_beta H_gamma H_delta'
[]
(test/tests/zirconium_diffusion/ad_test.i)
# This is an example of an axial slice from the T179 EBR-II X419 experiment,
# which had 61U-16Pu-23Zr atom%, 71U-19Pu-10Zr wt%.
#
# Most importantly, this test shows that the new calculation method for zirconium
# redistribution matches the old method, to a maximum difference of 3e-3.
[Mesh]
coord_type = RZ
[mesh]
type = GeneratedMeshGenerator
dim = 2
nx = 104
ny = 1
xmax = 0.00216
ymax = 2.16e-05
[]
[]
[Variables]
[T]
[]
[zirconium]
initial_condition = 0.22 #initial mole fraction of Zr in the system
scaling = 1e17
[]
[]
[ICs]
[T]
type = FunctionIC
variable = T
function = outer2
[]
[]
[Kernels]
[heat]
type = ADHeatConduction
variable = T
[]
[ie]
type = ADHeatConductionTimeDerivative
variable = T
[]
[ZrDiffusion]
type = ADZirconiumDiffusion
variable = zirconium
temperature = T
[]
[diffusion_ie]
type = ADTimeDerivative
variable = zirconium
[]
[heat_source]
type = ADCoupledForce
variable = T
v = power
[]
[]
[AuxVariables]
[fission_rate]
[]
[power]
[]
[]
[AuxKernels]
[fission_rate_aux]
type = ConstantAux
variable = fission_rate
value = 8.74117559524e+19
[]
[power_aux]
type = ParsedAux
coupled_variables = 'zirconium fission_rate'
constant_names = 'A B epf'
constant_expressions = '-1.12884007 1.24834482 3.2e-11'
expression = 'fission_rate * epf * (A*zirconium + B)'
variable = power
[]
[]
[Functions]
[outer2]
type = ParsedFunction
expression = '918.15-3.2e7*(x*x)' #r^2 initial temperature profile
[]
[]
[BCs]
[temp_rightside]
type = ADDirichletBC
variable = T
boundary = right
value = 818.15
[]
[]
[Materials]
[porosity]
type = ADGenericConstantMaterial
block = 0
prop_names = porosity
prop_values = 0.0
[]
[phase]
type = ADPhaseUPuZr
block = 0
temperature = T
X_Pu = 0.16
X_Zr = zirconium
AB_temp = 936.15
CD_temp = 968.15
[]
[zr_diff]
type = ADZrDiffusivityUPuZr
block = 0
temperature = T
X_Pu = 0.16
X_Zr = zirconium
p_alpha = ${fparse 0.35 / 100}
p_delta = ${fparse 0.35 / 2}
p_beta = ${fparse 0.35 / 55}
p_gamma = ${fparse 0.35 / 2}
D0_scale_alpha = 100.0
D0_scale_delta = 2.0
D0_scale_beta = 55.0
D0_scale_gamma = 2.0
[]
[thermal_upuzr]
type = ADUPuZrThermal
block = 0
temperature = T
X_Pu = 0.16
X_Zr = zirconium
thcond_model = galloway
spheat_model = savage
A_Pu = .244
porosity = porosity
[]
[fuel_density]
type = ADParsedMaterial
block = 0
property_name = density
expression = 10431.0
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -pc_type -sub_pc_type -pc_hypre_type'
petsc_options_value = ' 1001 hypre hypre boomeramg'
line_search = 'none'
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-9
nl_abs_tol = 1e-18
l_max_its = 1000
dtmax = 1e5
dtmin = 1e-2
end_time = 1e5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1.0e3
optimal_iterations = 25
iteration_window = 3
linear_iteration_ratio = 35
[]
[]
[Outputs]
exodus = true
[]
(test/tests/zrdiffusivity_upuzr/exact.i)
# Calculates Fickian and Soret Diffusivty by changing temperature and zirconium atom fraction
# Check associated excel sheet for exact solution
D0_alpha = 1e-6
D0_beta = 1e-5
D0_delta = 2e-06
Q_alpha = 160000
Q_beta = 170000
Q_delta = 140000
Qstar_alpha = 190000
Qstar_beta = 400000
Qstar_delta = 150000
Qstar_gamma = -150000
D0_scale_alpha = 2
D0_scale_beta = 3
D0_scale_delta = 4
D0_scale_gamma = 5
Q_scale_alpha = 0.8
Q_scale_beta = 0.9
Q_scale_delta = 1.1
Q_scale_gamma = 1.2
S_scale_alpha = 6
S_scale_beta = 7
S_scale_delta = 8
S_scale_gamma = 9
p_beta = 0.05
p_alpha = 0.1
p_delta = 0.15
p_gamma = 0.25
R = 8.31446
X_Pu = 0.16
H_alpha = 150000
H_beta = -55000
H_gamma = -150000
H_delta = -3500
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
[]
[]
[Problem]
solve = false
[]
[AuxVariables]
[temp]
initial_condition = 773
[]
[X_Zr]
initial_condition = 0.01
[]
[]
[AuxKernels]
[temp]
type = FunctionAux
variable = temp
function = temp_ramp
[]
[zr]
type = FunctionAux
variable = X_Zr
function = conc_ramp
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '950 850 850 950 850'
[]
[conc_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '0.01 0.01 0.1 0.55 0.8'
[]
[]
[AuxVariables]
[alpha_solvus]
order = CONSTANT
family = MONOMIAL
[]
[beta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[gamma_solvus]
order = CONSTANT
family = MONOMIAL
[]
[delta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[alpha_2phase]
order = CONSTANT
family = MONOMIAL
[]
[beta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[gamma_2phase]
order = CONSTANT
family = MONOMIAL
[]
[delta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[alpha_solvus]
type = MaterialStdVectorAux
variable = alpha_solvus
property = phase_solvus
index = 0
[]
[beta_solvus]
type = MaterialStdVectorAux
variable = beta_solvus
property = phase_solvus
index = 1
[]
[gamma_solvus]
type = MaterialStdVectorAux
variable = gamma_solvus
property = phase_solvus
index = 2
[]
[delta_solvus]
type = MaterialStdVectorAux
variable = delta_solvus
property = phase_solvus
index = 3
[]
[alpha_2phase]
type = MaterialStdVectorAux
variable = alpha_2phase
property = twophase_fractions
index = 0
[]
[beta_2phase]
type = MaterialStdVectorAux
variable = beta_2phase
property = twophase_fractions
index = 1
[]
[gamma_2phase]
type = MaterialStdVectorAux
variable = gamma_2phase
property = twophase_fractions
index = 2
[]
[delta_2phase]
type = MaterialStdVectorAux
variable = delta_2phase
property = twophase_fractions
index = 3
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
temperature = temp
X_Pu = ${X_Pu}
X_Zr = X_Zr
outputs = 'all'
output_properties = 'alpha beta gamma delta phase phase_region'
lever_weight_coeffs = '.1 .9' # different for testing, usually '0 1'
calc_H = false
H_values = '${H_alpha} ${H_beta} ${H_gamma} ${H_delta}'
[]
[zr_diff]
type = ZrDiffusivityUPuZr
temperature = temp
X_Pu = ${X_Pu}
X_Zr = X_Zr
D0_alpha = ${D0_alpha}
D0_beta = ${D0_beta}
D0_delta = ${D0_delta}
Q_alpha = ${Q_alpha}
Q_beta = ${Q_beta}
Q_delta = ${Q_delta}
Qstar_alpha = ${Qstar_alpha}
Qstar_beta = ${Qstar_beta}
Qstar_delta = ${Qstar_delta}
Qstar_gamma = ${Qstar_gamma}
D0_scale_alpha = ${D0_scale_alpha}
D0_scale_beta = ${D0_scale_beta}
D0_scale_delta = ${D0_scale_delta}
D0_scale_gamma = ${D0_scale_gamma}
Q_scale_alpha = ${Q_scale_alpha}
Q_scale_beta = ${Q_scale_beta}
Q_scale_delta = ${Q_scale_delta}
Q_scale_gamma = ${Q_scale_gamma}
S_scale_alpha = ${S_scale_alpha}
S_scale_beta = ${S_scale_beta}
S_scale_delta = ${S_scale_delta}
S_scale_gamma = ${S_scale_gamma}
p_beta = ${p_beta}
p_alpha = ${p_alpha}
p_delta = ${p_delta}
p_gamma = ${p_gamma}
limit_twophase_soret = true
outputs = 'all'
[]
[]
[Executioner]
type = Transient
end_time = 200
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[X_Zr]
type = ElementAverageValue
variable = X_Zr
[]
[phase_region]
type = ElementAverageValue
variable = phase_region
[]
[alpha]
type = ElementAverageValue
variable = alpha
[]
[beta]
type = ElementAverageValue
variable = beta
[]
[gamma]
type = ElementAverageValue
variable = gamma
[]
[delta]
type = ElementAverageValue
variable = delta
[]
[alpha_2phase]
type = ElementAverageValue
variable = alpha_2phase
[]
[beta_2phase]
type = ElementAverageValue
variable = beta_2phase
[]
[gamma_2phase]
type = ElementAverageValue
variable = gamma_2phase
[]
[delta_2phase]
type = ElementAverageValue
variable = delta_2phase
[]
[alpha_solvus]
type = ElementAverageValue
variable = alpha_solvus
[]
[beta_solvus]
type = ElementAverageValue
variable = beta_solvus
[]
[gamma_solvus]
type = ElementAverageValue
variable = gamma_solvus
[]
[delta_solvus]
type = ElementAverageValue
variable = delta_solvus
[]
[D_calc]
type = ElementAverageValue
variable = Zr_diffusivity
[]
[S_calc]
type = ElementAverageValue
variable = Zr_Soret
[]
[D_alpha]
type = ParsedPostprocessor
pp_names = temp
expression = '${D0_scale_alpha} * ${D0_alpha} * exp(-${Q_alpha} * ${Q_scale_alpha} / ${R} / temp)'
outputs = none
[]
[D_beta]
type = ParsedPostprocessor
pp_names = temp
expression = '${D0_scale_beta} * ${D0_beta} * exp(-${Q_beta} * ${Q_scale_beta} / ${R} / temp)'
outputs = none
[]
[D_delta]
type = ParsedPostprocessor
pp_names = temp
expression = '${D0_scale_delta} * ${D0_delta} * exp(-${Q_delta} * ${Q_scale_delta} / ${R} / temp)'
outputs = none
[]
[D_gamma]
type = ParsedPostprocessor
pp_names = 'temp X_Zr'
expression = '${D0_scale_gamma} * exp(-11.7432 - 18.5358 * X_Zr + 21.0226 * X_Zr^2) * exp(-(1.28e5 - 1.07e5 * X_Zr + 1.74e5 * X_Zr^2) * ${Q_scale_gamma} / ${R} / temp)'
outputs = none
[]
[D_gamma_solvus]
type = ParsedPostprocessor
pp_names = 'temp gamma_solvus'
expression = '${D0_scale_gamma} * exp(-11.7432 - 18.5358 * gamma_solvus + 21.0226 * gamma_solvus^2) * exp(-(1.28e5 - 1.07e5 * gamma_solvus + 1.74e5 * gamma_solvus^2) * ${Q_scale_gamma} / ${R} / temp)'
outputs = none
[]
[D_exact]
type = ParsedPostprocessor
pp_names = 'D_alpha D_beta D_delta D_gamma D_gamma_solvus alpha beta gamma delta alpha_2phase beta_2phase gamma_2phase delta_2phase'
expression = 'D_alpha * ((alpha - alpha_2phase) + alpha_2phase * ${p_alpha}) + D_beta * ((beta - beta_2phase) + beta_2phase * ${p_beta}) + D_delta * ((delta - delta_2phase) + delta_2phase * ${p_delta}) + D_gamma * (gamma - gamma_2phase) + D_gamma_solvus * gamma_2phase * ${p_gamma}'
[]
[D_diff]
type = ParsedPostprocessor
pp_names = 'D_exact D_calc'
expression = '(D_exact - D_calc) / D_exact'
outputs = none
[]
[D_max_diff]
type = TimeExtremeValue
postprocessor = 'D_diff'
value_type = abs_max
[]
[S_twophase_mixing_alpha]
type = ParsedPostprocessor
pp_names = 'alpha_2phase'
expression = 'x := (alpha_2phase - 0.33) / (0.5 - 0.33);
relx := if(x < 0, 0, if(x > 1, 1, x));
relx^3 * (relx * (relx * 6 - 15) + 10)'
outputs = none
[]
[S_twophase_mixing_beta]
type = ParsedPostprocessor
pp_names = 'beta_2phase'
expression = 'x := (beta_2phase - 0.33) / (0.5 - 0.33);
relx := if(x < 0, 0, if(x > 1, 1, x));
relx^3 * (relx * (relx * 6 - 15) + 10)'
outputs = none
[]
[S_twophase_mixing_delta]
type = ParsedPostprocessor
pp_names = 'delta_2phase'
expression = 'x := (delta_2phase - 0.33) / (0.5 - 0.33);
relx := if(x < 0, 0, if(x > 1, 1, x));
relx^3 * (relx * (relx * 6 - 15) + 10)'
outputs = none
[]
[S_twophase_mixing_gamma]
type = ParsedPostprocessor
pp_names = 'gamma_2phase'
expression = 'x := (gamma_2phase - 0.33) / (0.5 - 0.33);
relx := if(x < 0, 0, if(x > 1, 1, x));
relx^3 * (relx * (relx * 6 - 15) + 10)'
outputs = none
[]
[S_exact]
type = ParsedPostprocessor
pp_names = 'temp X_Zr D_alpha D_beta D_delta D_gamma D_gamma_solvus alpha beta gamma delta alpha_2phase beta_2phase gamma_2phase delta_2phase alpha_solvus beta_solvus gamma_solvus delta_solvus S_twophase_mixing_alpha S_twophase_mixing_beta S_twophase_mixing_delta S_twophase_mixing_gamma'
expression = 'D_Qstar := D_alpha * (alpha - alpha_2phase) * ${Qstar_alpha} + D_beta * (beta - beta_2phase) * ${Qstar_beta} + D_delta * (delta - delta_2phase) * ${Qstar_delta} + D_gamma * (gamma - gamma_2phase) * ${Qstar_gamma};
S_single_phase := D_Qstar * X_Zr * (1.0 - X_Zr - ${X_Pu}) / (1 - ${X_Pu}) / ${R} / temp / temp;
S_two_phase_alpha := alpha_2phase * D_alpha * alpha_solvus * (1 - ${X_Pu} - alpha_solvus) * ${S_scale_alpha} * (${H_alpha} + ${Qstar_alpha}) / (1 - ${X_Pu}) / ${R} / temp / temp;
S_two_phase_beta := beta_2phase * D_beta * beta_solvus * (1 - ${X_Pu} - beta_solvus) * ${S_scale_beta} * (${H_beta} + ${Qstar_beta}) / (1 - ${X_Pu}) / ${R} / temp / temp;
S_two_phase_delta := delta_2phase * D_delta * delta_solvus * (1 - ${X_Pu} - delta_solvus) * ${S_scale_delta} * (${H_delta} + ${Qstar_delta}) / (1 - ${X_Pu}) / ${R} / temp / temp;
S_two_phase_gamma := gamma_2phase * D_gamma_solvus * gamma_solvus * (1 - ${X_Pu} - gamma_solvus) * ${S_scale_gamma} * (${H_gamma} + ${Qstar_gamma}) / (1 - ${X_Pu}) / ${R} / temp / temp;
S_single_phase + S_two_phase_alpha * S_twophase_mixing_alpha + S_two_phase_beta * S_twophase_mixing_beta + S_two_phase_delta * S_twophase_mixing_delta + S_two_phase_gamma * S_twophase_mixing_gamma'
[]
[S_diff]
type = ParsedPostprocessor
pp_names = 'S_exact S_calc'
expression = '(S_exact - S_calc) / S_exact'
outputs = none
[]
[S_max_diff]
type = TimeExtremeValue
postprocessor = 'S_diff'
value_type = abs_max
[]
[]
[Outputs]
csv = true
[]
(test/tests/zirconium_diffusion/test.i)
# This is an example of an axial slice from the T179 EBR-II X419 experiment,
# which had 61U-16Pu-23Zr atom%, 71U-19Pu-10Zr wt%.
#
# Most importantly, this test shows that the new calculation method for zirconium
# redistribution matches the old method, to a maximum difference of 3e-3.
[Mesh]
coord_type = RZ
[mesh]
type = GeneratedMeshGenerator
dim = 2
nx = 104
ny = 1
xmax = 0.00216
ymax = 2.16e-05
[]
[]
[Variables]
[T]
[]
[zirconium]
initial_condition = 0.22 #initial mole fraction of Zr in the system
scaling = 1e17
[]
[]
[ICs]
[T]
type = FunctionIC
variable = T
function = outer2
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = T
[]
[ie]
type = HeatConductionTimeDerivative
variable = T
[]
[ZrDiffusion]
type = ZirconiumDiffusion
variable = zirconium
temperature = T
[]
[diffusion_ie]
type = TimeDerivative
variable = zirconium
[]
[heat_source]
type = CoupledForce
variable = T
v = power
[]
[]
[AuxVariables]
[fission_rate]
[]
[power]
[]
[]
[AuxKernels]
[fission_rate_aux]
type = ConstantAux
variable = fission_rate
value = 8.74117559524e+19
[]
[power_aux]
type = ParsedAux
coupled_variables = 'zirconium fission_rate'
constant_names = 'A B epf'
constant_expressions = '-1.12884007 1.24834482 3.2e-11'
expression = 'fission_rate * epf * (A*zirconium + B)'
variable = power
[]
[]
[Functions]
[outer2]
type = ParsedFunction
expression = '918.15-3.2e7*(x*x)' #r^2 initial temperature profile
[]
[]
[BCs]
[temp_rightside]
type = DirichletBC
variable = T
boundary = right
value = 818.15
[]
[]
[Materials]
[porosity]
type = GenericConstantMaterial
block = 0
prop_names = porosity
prop_values = 0.0
[]
[phase]
type = PhaseUPuZr
block = 0
temperature = T
X_Pu = 0.16
X_Zr = zirconium
AB_temp = 936.15
CD_temp = 968.15
[]
[zr_diff]
type = ZrDiffusivityUPuZr
block = 0
temperature = T
X_Pu = 0.16
X_Zr = zirconium
p_alpha = ${fparse 0.35 / 100}
p_delta = ${fparse 0.35 / 2}
p_beta = ${fparse 0.35 / 55}
p_gamma = ${fparse 0.35 / 2}
D0_scale_alpha = 100.0
D0_scale_delta = 2.0
D0_scale_beta = 55.0
D0_scale_gamma = 2.0
[]
[thermal_upuzr]
type = UPuZrThermal
block = 0
temperature = T
X_Pu = 0.16
X_Zr = zirconium
thcond_model = galloway
spheat_model = savage
A_Pu = .244
porosity = porosity
[]
[fuel_density]
type = ParsedMaterial
block = 0
property_name = density
expression = 10431.0
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -pc_type -sub_pc_type -pc_hypre_type'
petsc_options_value = ' 1001 hypre hypre boomeramg'
line_search = 'none'
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-9
nl_abs_tol = 1e-18
l_max_its = 1000
dtmax = 1e5
dtmin = 1e-2
end_time = 1e5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1.0e3
optimal_iterations = 25
iteration_window = 3
linear_iteration_ratio = 35
[]
[]
[Outputs]
exodus = true
[]
(test/tests/zrdiffusivity_upuzr/patch.i)
# Calculates Fickian and Soret Diffusivty by changing temperature and zirconium atom fraction
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
[]
[]
[Variables]
[temp]
initial_condition = 773
[]
[X_Zr]
initial_condition = 0.01
[]
[]
[Kernels]
[temp_diff]
type = Diffusion
variable = temp
[]
[Zr_diff]
type = Diffusion
variable = X_Zr
[]
[]
[AuxVariables]
[alpha_solvus]
order = CONSTANT
family = MONOMIAL
[]
[beta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[gamma_solvus]
order = CONSTANT
family = MONOMIAL
[]
[delta_solvus]
order = CONSTANT
family = MONOMIAL
[]
[alpha_2phase]
order = CONSTANT
family = MONOMIAL
[]
[beta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[gamma_2phase]
order = CONSTANT
family = MONOMIAL
[]
[delta_2phase]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[alpha_solvus]
type = MaterialStdVectorAux
variable = alpha_solvus
property = phase_solvus
index = 0
[]
[beta_solvus]
type = MaterialStdVectorAux
variable = beta_solvus
property = phase_solvus
index = 1
[]
[gamma_solvus]
type = MaterialStdVectorAux
variable = gamma_solvus
property = phase_solvus
index = 2
[]
[delta_solvus]
type = MaterialStdVectorAux
variable = delta_solvus
property = phase_solvus
index = 3
[]
[alpha_2phase]
type = MaterialStdVectorAux
variable = alpha_2phase
property = twophase_fractions
index = 0
[]
[beta_2phase]
type = MaterialStdVectorAux
variable = beta_2phase
property = twophase_fractions
index = 1
[]
[gamma_2phase]
type = MaterialStdVectorAux
variable = gamma_2phase
property = twophase_fractions
index = 2
[]
[delta_2phase]
type = MaterialStdVectorAux
variable = delta_2phase
property = twophase_fractions
index = 3
[]
[]
[BCs]
[temp_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = temp
function = temp_ramp
[]
[conc_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = X_Zr
function = conc_ramp
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '950 850 850 950 850'
[]
[conc_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '0.01 0.01 0.1 0.55 0.8'
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
outputs = 'all'
output_properties = 'alpha beta gamma delta phase phase_region'
lever_weight_coeffs = '.1 .9' # different for testing, usually '0 1'
calc_H = false
[]
[zr_diff]
type = ZrDiffusivityUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
outputs = 'all'
[]
[]
[Executioner]
type = Transient
end_time = 200
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[Zr]
type = ElementAverageValue
variable = X_Zr
[]
[phase_region]
type = ElementAverageValue
variable = phase_region
[]
[alpha]
type = ElementAverageValue
variable = alpha
[]
[beta]
type = ElementAverageValue
variable = beta
[]
[gamma]
type = ElementAverageValue
variable = gamma
[]
[delta]
type = ElementAverageValue
variable = delta
[]
[alpha_2phase]
type = ElementAverageValue
variable = alpha_2phase
[]
[beta_2phase]
type = ElementAverageValue
variable = beta_2phase
[]
[gamma_2phase]
type = ElementAverageValue
variable = gamma_2phase
[]
[delta_2phase]
type = ElementAverageValue
variable = delta_2phase
[]
[alpha_solvus]
type = ElementAverageValue
variable = alpha_solvus
[]
[beta_solvus]
type = ElementAverageValue
variable = beta_solvus
[]
[gamma_solvus]
type = ElementAverageValue
variable = gamma_solvus
[]
[delta_solvus]
type = ElementAverageValue
variable = delta_solvus
[]
[zr_diff]
type = ElementAverageValue
variable = Zr_diffusivity
[]
[zr_soret]
type = ElementAverageValue
variable = Zr_Soret
[]
[]
[Outputs]
csv = true
[]
(test/tests/phase_upuzr/patch.i)
# Calculates phase by changing temperature and zirconium atom fraction
# Check associated excel sheet for exact solution
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 2
[]
[]
[Variables]
[temp]
initial_condition = 773
[]
[X_Zr]
initial_condition = 0
[]
[]
[Kernels]
[temp_diff]
type = Diffusion
variable = temp
[]
[Zr_diff]
type = Diffusion
variable = X_Zr
[]
[]
[BCs]
[temp_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = temp
function = temp_ramp
[]
[conc_BC]
type = FunctionDirichletBC
boundary = 'top bottom left right'
variable = X_Zr
function = conc_ramp
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '950 850 850 950 850'
[]
[conc_ramp]
type = PiecewiseLinear
x = '0 50 100 150 200'
y = '0.01 0.01 0.1 0.55 0.8'
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
block = 0
temperature = temp
X_Pu = 0.16
X_Zr = X_Zr
lever_weight_coeffs = '.1 .9' # different for testing, usually '0 1'
outputs = 'all'
[]
[]
[Executioner]
type = Transient
end_time = 200
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
execute_on = 'initial timestep_end'
[]
[Zr]
type = ElementAverageValue
variable = X_Zr
[]
[phase]
type = ElementAverageValue
variable = phase
[]
[]
[Outputs]
csv = true
[]
(examples/thor_capsule_transfer/pin_with_heat_sink.i)
# Example of adding a heat sink outside of an already irradiated pin.
# An example of using a base irradiation's output exodus file to initialize a
# pin with a heat sink next to it (like in THOR). This is useful for taking
# an EBR-II pin and putting it in TREAT in THOR.
initial_fuel_density = 15800.0
[GlobalParams]
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
displacements = 'disp_x disp_y'
X_Pu = 0.16029880703609925
X_Zr = 0.22566146557004974
[]
[Problem]
type = AugmentedLagrangianContactProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
# mesh options
patch_size = 50
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
# These are the setting from the base irradiation for your information
#[smear_2drz]
# type = FuelPinMeshGenerator
# clad_thickness = 0.000381
# pellet_outer_radius = 0.0021971
# pellet_height = 0.342646
# clad_top_gap_height = 0.2620678
# clad_gap_width = 0.0003429
# bottom_clad_height = 0.0127
# top_clad_height = 0.0127
# clad_bot_gap_height = 0.001 # arbitrary
# # meshing parameters
# clad_mesh_density = customize
# pellet_mesh_density = customize
# nx_p = 5
# ny_p = 150
# nx_c = 4
# ny_c = 150
# ny_cu = 3
# ny_cl = 3
# pellet_quantity = 1
# elem_type = QUAD8
#[]
[file] # This is the pin's output exodus
type = FileMeshGenerator
file = base_irradiation_out.e
use_for_exodus_restart = true
[]
[sink] # Generic sink dimensions
type = GeneratedMeshGenerator
dim = 2
xmin = 0.0032639
xmax = 0.005461
nx = 5
ymin = 0.0
ymax = 0.6311138
ny = 100
elem_type = QUAD8
boundary_id_offset = 50
[]
[combine]
type = CombinerGenerator
inputs = 'file sink'
[]
[name_sink]
type = SubdomainBoundingBoxGenerator
input = 'combine'
bottom_left = '0.0032638 -0.00001 0'
top_right = '0.005462 0.6311139 0'
block_id = 5
block_name = 'heat_sink'
[]
[]
[Variables]
[T]
initial_from_file_var = T
[]
[disp_x]
initial_from_file_var = disp_x
[]
[disp_y]
initial_from_file_var = disp_y
[]
[]
[ICs]
[sink_T]
type = ConstantIC
block = heat_sink
variable = T
value = 298 # K
[]
[]
[Problem]
# initial condition is overriding the restarted T variable
allow_initial_conditions_with_restart = true
[]
[AuxVariables]
[solid_swell]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[solid_swell]
type = MaterialRealAux
variable = solid_swell
property = solid_swelling
execute_on = timestep_end
[]
[gas_swell]
type = MaterialRealAux
variable = gas_swell
property = gas_swelling
execute_on = timestep_end
[]
[volumetric_strain]
type = RankTwoScalarAux
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = timestep_end
block = pellet
[]
[creep_strain_mag]
type = MaterialRealAux
property = effective_creep_strain
variable = creep_strain_mag
block = clad
execute_on = timestep_end
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
x = '0 360'
y = '23500 30000'
[]
[axial_peaking_factors]
type = PowerPeakingFunction
fit = custom
custom_params = '0.88416801 1.07334286 -1.26837226 0.00726538'
pellet_length = 0.342646
pellet_y_start = 0.0137
[]
[axial_flux_peaking_factors]
type = PowerPeakingFunction
fit = custom
custom_params = '0.78912541 1.7214792 -2.09297848 0.19040197'
pellet_length = 0.342646
pellet_y_start = 0.0137
zero_beyond_top_and_bottom = False
[]
[flux_history]
type = PiecewiseLinear
x = '0 86400 31536000' # 1 year
y = '1 2.0e19 1.0e19'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz hydrostatic_stress elastic_strain_xx
elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz'
[fuel]
additional_generate_output = 'creep_strain_xx creep_strain_yy creep_strain_zz'
extra_vector_tags = 'ref'
block = pellet
eigenstrain_names = 'fuel_thermal_strain gas_swelling_eigenstrain solid_swelling_eigenstrain'
[]
[clad]
additional_generate_output = 'creep_strain_xx creep_strain_yy creep_strain_zz'
extra_vector_tags = 'ref'
block = 1
eigenstrain_names = 'clad_thermal_eigenstrain clad_volume_eigenstrain'
[]
[sink]
extra_vector_tags = 'ref'
block = heat_sink
eigenstrain_names = 'sink_thermal_eigenstrain'
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
extra_vector_tags = 'ref'
[]
[heat]
type = HeatConduction
variable = T
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = T
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = T
block = pellet
fission_rate = fission_rate
extra_vector_tags = 'ref'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e12
model = coulomb
formulation = augmented_lagrange
friction_coefficient = 0.2
normalize_penalty = true
tangential_tolerance = 0.4
normal_smoothing_distance = 0.1
al_penetration_tolerance = 1e-6
al_incremental_slip_tolerance = 0.8
al_frictional_force_tolerance = 0.8
[]
[clad_sink_mechanical]
primary = 53
secondary = 2
penalty = 1e12
model = coulomb
formulation = augmented_lagrange
friction_coefficient = 0.2
normalize_penalty = true
tangential_tolerance = 0.4
normal_smoothing_distance = 0.1
al_penetration_tolerance = 1e-6
al_incremental_slip_tolerance = 0.8
al_frictional_force_tolerance = 0.8
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = T
primary = 5
secondary = 10
quadrature = true
gap_conductivity = 75.0
tangential_tolerance = 1e-4
min_gap = 0.0003429
[]
[thermal_sink]
type = GapHeatTransfer
variable = T
primary = 53
secondary = 2
quadrature = true
gap_conductivity = 75.0
tangential_tolerance = 1e-4
min_gap = 0.0003429
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_fuel]
type = DirichletBC
variable = disp_y
boundary = 20
value = 0.0
[]
[no_y_clad]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[]
[no_y_sink]
type = DirichletBC
variable = disp_y
boundary = 50
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = 51
factor = 151000.0
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 0.084e6
startup_time = 0
R = 8.3143
temperature = ave_temp_plenum
volume = gas_volume
output = plenum_pressure
material_input = fis_gas_released
execute_on = timestep_end
[]
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
block = pellet
AB_temp = 965.15
CD_temp = 995.15
outputs = all
calc_H = false
temperature = T
[]
[fission_rate]
type = UPuZrFissionRate
rod_linear_power = power_history
axial_power_profile = axial_peaking_factors
pellet_radius = 0.0021971
block = pellet
outputs = all
[]
[burnup]
type = UPuZrBurnup
initial_X_Zr = 0.22566146557004974
density = ${initial_fuel_density}
block = pellet
outputs = all
[]
[fuel_elasticity_tensor]
type = UPuZrElasticityTensor
block = pellet
temperature = T
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'fuel_upuzrcreep'
block = pellet
[]
[fuel_upuzrcreep]
type = UPuZrCreepUpdate
block = pellet
temperature = T
porosity = porosity
max_inelastic_increment = 2e-3
fission_rate = fission_rate
[]
[fuel_thermal_expansion]
type = UPuZrThermalExpansionEigenstrain
block = pellet
temperature = T
stress_free_temperature = 298.0
eigenstrain_name = fuel_thermal_strain
[]
[gas_swelling]
type = UPuZrGaseousEigenstrain
eigenstrain_name = gas_swelling_eigenstrain
temperature = T
initial_porosity = 0.0
bubble_number_density = 5e17
interconnection_initiating_porosity = 0.16
interconnection_terminating_porosity = 0.18
outputs = all
output_properties = 'porosity gaseous_porosity'
block = pellet
anisotropic_factor = 0.5
[]
[solid_swelling]
type = BurnupDependentEigenstrain
eigenstrain_name = solid_swelling_eigenstrain
block = pellet
swelling_factor = 1.5
swelling_name = 'solid_swelling'
[]
[metal_fuel_thermal]
type = UPuZrThermal
block = pellet
spheat_model = savage
thcond_model = billone
porosity = porosity
temperature = T
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[fission_gas_behavior]
type = UPuZrFissionGasRelease
block = pellet
fractional_yield = 0.25
critical_porosity = 0.17
fractional_fgr_initial = 0.4
fractional_fgr_post = 0.7354
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.88e11
poissons_ratio = 0.236
block = clad
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'clad_creep'
block = clad
[]
[fast_neutron_flux]
type = FastNeutronFlux
calculate_fluence = true
block = clad
factor = 1
axial_power_profile = axial_flux_peaking_factors
rod_ave_lin_pow = flux_history
outputs = all
[]
[clad_creep]
type = D9CreepUpdate
fast_neutron_flux = fast_neutron_flux
block = clad
temperature = T
youngs_modulus = 1.88e11
[]
[thermal_expansion]
type = D9ThermalExpansionEigenstrain
block = clad
temperature = T
stress_free_temperature = 298.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_thermal]
type = D9Thermal
block = clad
temperature = T
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 7874.0
[]
[clad_volumetric_swelling]
type = D9VolumetricSwellingEigenstrain
eigenstrain_name = clad_volume_eigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = T
[]
[sink_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 100e9
poissons_ratio = 0.35
block = heat_sink
[]
[sink_stress]
type = ComputeFiniteStrainElasticStress
block = heat_sink
[]
[sink_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = heat_sink
temperature = T
stress_free_temperature = 298.0
eigenstrain_name = sink_thermal_eigenstrain
thermal_expansion_coeff = 8.5e-6
[]
[sink_thermal]
type = HeatConductionMaterial
block = heat_sink
specific_heat = 540
thermal_conductivity = 17
[]
[sink_density]
type = StrainAdjustedDensity
block = heat_sink
strain_free_density = 4.51e3
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist 51'
line_search = 'none'
l_max_its = 60
l_tol = 8e-3
nl_max_its = 25
nl_rel_tol = 5e-3
nl_abs_tol = 1e-5
end_time = 9
dtmin = 0.01
dtmax = 3
[Quadrature]
order = fifth
side_order = seventh
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
growth_factor = 2
cutback_factor = 0.1
iteration_window = 5
optimal_iterations = 20
force_step_every_function_point = true
timestep_limiting_function = power_history
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
[]
[num_lin_it]
type = NumLinearIterations
[]
[num_nonlin_it]
type = NumNonlinearIterations
[]
[tot_lin_it]
type = CumulativeValuePostprocessor
postprocessor = num_lin_it
[]
[tot_nonlin_it]
type = CumulativeValuePostprocessor
postprocessor = num_nonlin_it
[]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = T
execute_on = 'initial linear'
[]
[ave_temp_plenum]
type = SideAverageValue
boundary = 6
variable = T
execute_on = 'initial linear'
[]
[approx_FCT]
type = AverageNodalVariableValue
boundary = 12
variable = T
[]
[ave_FST]
type = SideAverageValue
boundary = 10
variable = T
[]
[avg_clad_temp]
type = ElementAverageValue
variable = T
block = clad
[]
[peak_clad_temp]
type = ElementExtremeValue
variable = T
value_type = max
block = clad
[]
[peak_fuel_temp]
type = ElementExtremeValue
variable = T
value_type = max
block = pellet
[]
[avg_sink_temp]
type = ElementAverageValue
variable = T
block = heat_sink
[]
[peak_sink_temp]
type = ElementExtremeValue
variable = T
value_type = max
block = heat_sink
[]
[max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = max
block = pellet
[]
[min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = min
block = pellet
[]
[peak_porosity]
type = ElementExtremeValue
variable = porosity
value_type = max
block = pellet
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
[]
[pellet_volume]
type = InternalVolume
boundary = 8
[]
[gas_volume]
type = InternalVolume
boundary = 9
execute_on = 'initial timestep_end'
[]
[clad_fuel_gap]
type = NodalExtremeValue
variable = penetration
boundary = 10
[]
[flux_from_clad]
type = SideDiffusiveFluxIntegral
variable = T
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel]
type = SideDiffusiveFluxIntegral
variable = T
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_integral_power]
type = ElementIntegralPower
variable = T
use_material_fission_rate = true
fission_rate_material = fission_rate
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.343
[]
[average_burnup]
type = ElementAverageValue
block = pellet
variable = burnup
[]
[peak_burnup]
type = ElementExtremeValue
block = pellet
variable = burnup
[]
[fis_gas_produced]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_prod
block = pellet
[]
[fis_gas_released]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_rel
block = pellet
execute_on = 'initial timestep_end'
[]
[creep_timestep]
type = MaterialTimeStepPostprocessor
block = pellet
[]
[disp_x_max]
type = NodalExtremeValue
variable = disp_x
block = clad
[]
[disp_y_max]
type = NodalExtremeValue
variable = disp_y
block = pellet
[]
[hydrostatic_stress]
type = ElementAverageValue
variable = hydrostatic_stress
execute_on = 'initial timestep_end'
block = pellet
[]
[solid_swelling]
type = ElementAverageValue
variable = solid_swell
block = pellet
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = pellet
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = pellet
[]
[porosity]
type = ElementAverageValue
variable = porosity
block = pellet
[]
[fis_gas_percent]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[max_cladding_creep_strain]
type = ElementExtremeValue
variable = creep_strain_mag
block = clad
[]
[max_fuel_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'all_pellet_exterior'
[]
[max_clad_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'clad_outside_top clad_outside_right'
[]
[]
[Outputs]
color = true
exodus = true
perf_graph = true
csv = true
[console]
type = Console
max_rows = 25
time_step_interval = 1
output_linear = true
[]
[]
[Debug]
show_var_residual = 'disp_x disp_y T'
show_var_residual_norms = true
[]
[Dampers]
[max_inc_damp_x]
type = MaxIncrement
max_increment = 3e-4
variable = disp_x
[]
[max_inc_damp_y]
type = MaxIncrement
max_increment = 3e-4
variable = disp_y
[]
[max_inc_temp]
type = MaxIncrement
max_increment = 25
variable = T
[]
[]
(examples/metal_fuel/X447_coarse/DP21_test.i)
# This tests UPuZrGaseousEigenstrainwithHotPressingPuSwelling, a swelling model for UPuZr metal fuel
# that allows for further expansion after UPuZrGaseousEignestrain has reached
# terminating porosity. Swelling is allowed to continue if the hydrostatic stress
# within the fuel is negative, and is allowed to shrink when the hydrostatic force
# exceeds the plenum pressure. Thermal stress and mechanical stress caused from FCMI
# is coupled in this example to provide a variable hydrostatic stress, which determines
# the creep rate within the fuel and compressibility of the fuel matrix.
#
# The swelling model is based on Eq. (13.146) in "Fundamental aspects of nuclear
# reactor fuel elements" by Olander.
#
# The fission gas that is released is based on an empirical model
# which states that once the gaseous swelling reaches a value of
# 0.33 (corresponding to a porosity of 0.24812), 80% of the fission gas so far
# produced is immediately released. After that, 100% of the gas produced is released.
# These values were changed to represent experimental EBR-II data within the gas_swelling block.
# For information regarding swelling and porosity, see the above reference or the
# following reference:
# Karahan A., Modeling of Thermo Mechanical and Irradiation Behavior of Metallic
# and Oxide Fuels for Sodium Fast Reactors, Thesis, Massachusetts Institute of Technology 2009.
initial_fuel_density = 15800
[GlobalParams]
order = FIRST
family = LAGRANGE
energy_per_fission = 3.2e-11
displacements = 'disp_x disp_y'
X_Pu = 0.16029880703609925
X_Zr = 0.22566146557004974
temperature = temp
[]
[Problem]
type = AugmentedLagrangianContactProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
[smeared_pellet_mesh]
type = FuelPinMeshGenerator
include_fuel = true
clad_thickness = 0.000381
pellet_outer_radius = 0.0021971
pellet_height = 0.34417
clad_top_gap_height = 0.3652172
clad_gap_width = 0.0003429
bottom_clad_height = 0.0127
top_clad_height = 0.0127
clad_bot_gap_height = 0.001
clad_mesh_density = customize
pellet_mesh_density = customize
nx_p = 5
ny_p = 25
nx_c = 2
ny_c = 25
ny_cu = 2
ny_cl = 2
pellet_quantity = 1
elem_type = QUAD4
[]
patch_size = 60
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temp]
initial_condition = 298
[]
[]
[AuxVariables]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[cumulative_damage_index]
order = CONSTANT
family = MONOMIAL
[]
[solid_swell]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
x = '0 1000 1e4 1.05e4 4.9e4 5e4'
y = '0 1000 40000 39000 42000 0'
[]
[coolant_press_ramp]
type = PiecewiseLinear
x = '0 3.9e7'
y = '151000.0 151000.0'
[]
[coolant_temp_ramp]
type = PiecewiseLinear
x = '0 10000 5.9e4 6e4'
y = '648 648 648 295'
[]
[flow_rate]
type = PiecewiseConstant
x = '0 3.899e7 3.9e7'
y = '5000 5000 5000'
[]
[axial_peaking_factors]
type = PowerPeakingFunction
fit = custom
custom_params = '0.87995117 1.10795043 -1.30983206 0.01018143'
pellet_length = 0.34417
pellet_y_start = 0.0137
[]
[axial_flux_peaking_factors]
type = PowerPeakingFunction
fit = custom
custom_params = '0.79140541 1.73120833 -2.13298844 0.2151691'
pellet_length = 0.34417
pellet_y_start = 0.0137
zero_beyond_top_and_bottom = False
[]
[flux_history]
type = PiecewiseLinear
x = '0 3.899e7 3.9e7'
y = '2.5e19 2.5e19 0'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
strain = FINITE
add_variables = true
generate_output = 'stress_xx stress_yy stress_zz hydrostatic_stress creep_strain_xx creep_strain_yy creep_strain_zz elastic_strain_xx elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz volumetric_strain'
[fuel]
extra_vector_tags = 'ref'
block = pellet
eigenstrain_names = 'fuel_thermal_strain gas_swelling_eigenstrain solid_swelling_eigenstrain'
[]
[clad]
extra_vector_tags = 'ref'
block = clad
eigenstrain_names = 'clad_thermal_eigenstrain'
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
extra_vector_tags = 'ref'
[]
[heat]
type = HeatConduction
variable = temp
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temp
block = pellet
fission_rate = fission_rate
extra_vector_tags = 'ref'
[]
[]
[AuxKernels]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
[]
[gas_swell]
type = MaterialRealAux
variable = gas_swell
property = gas_swelling
execute_on = timestep_end
[]
[solid_swell]
type = MaterialRealAux
variable = solid_swell
property = solid_swelling
execute_on = timestep_end
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e12
model = coulomb
formulation = augmented_lagrange
friction_coefficient = 0.2
normalize_penalty = true
tangential_tolerance = 0.4
normal_smoothing_distance = 0.1
al_penetration_tolerance = 1e-6
al_incremental_slip_tolerance = 0.8
al_frictional_force_tolerance = 0.8
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = temp
primary = 5
secondary = 10
quadrature = true
gap_conductivity = 68.0
tangential_tolerance = 1e-4
min_gap = 0.0003429
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_fuel]
type = DirichletBC
variable = disp_y
boundary = 20
value = 0.0
[]
[no_y_clad]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = coolant_press_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 0.084e6
startup_time = 0
R = 8.3143
temperature = ave_temp_plenum
volume = gas_volume
output = plenum_pressure
material_input = fis_gas_released
execute_on = timestep_end
[]
[]
[]
[CoolantChannel]
[convective_clad_surface]
boundary = '1 2 3'
variable = temp
inlet_temperature = coolant_temp_ramp
inlet_pressure = coolant_press_ramp
inlet_massflux = flow_rate
coolant_material = sodium
rod_diameter = 0.005842
rod_pitch = 0.0069
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
subchannel_geometry = triangular
[]
[]
[Materials]
[fuel_arr]
type = ArrheniusDiffusionCoef
block = pellet
d1 = 4.47e-8
q1 = 115002
d2 = 0
q2 = 0
gas_constant = 8.3143
[]
[fuel_soret]
type = GenericConstantMaterial
block = pellet
prop_names = Qheat
prop_values = 0.2072896
[]
[wastage_thickness]
type = MetallicFuelWastage
method = flux_ht9
burnup = burnup
temperature = temp
fast_neutron_flux = fast_neutron_flux
scale_factor = 1
boundary = 5
outputs = all
[]
[phase]
type = PhaseUPuZr
X_Pu = 0.16029880703609925
X_Zr = 0.22566146557004974
block = pellet
AB_temp = 965.15
CD_temp = 995.15
outputs = all
calc_H = false
[]
[fission_rate]
type = UPuZrFissionRate
rod_linear_power = power_history
axial_power_profile = axial_peaking_factors
pellet_radius = 0.0021971
block = pellet
outputs = all
[]
[burnup]
type = UPuZrBurnup
initial_X_Zr = 0.22566146557004974
density = ${initial_fuel_density}
block = pellet
outputs = all
[]
[fuel_elasticity_tensor]
type = UPuZrElasticityTensor
block = pellet
temperature = temp
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'fuel_upuzrcreep'
block = pellet
[]
[fuel_upuzrcreep]
type = UPuZrCreepUpdate
block = pellet
temperature = temp
porosity = porosity
max_inelastic_increment = 1e-2
relative_tolerance = 1e-8
fission_rate=fission_rate
[]
[fuel_thermal_expansion]
type = UPuZrThermalExpansionEigenstrain
block = pellet
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
[]
[gas_swelling]
type = UPuZrGaseousEigenstrainwithHotPressingPuSwelling
eigenstrain_name = gas_swelling_eigenstrain
temperature = temp
initial_porosity = 0.03185
bubble_number_density = 5e17
interconnection_initiating_porosity = 0.28
interconnection_terminating_porosity = 0.30
creep_rate = creep_rate
hydrostatic_stress = hydrostatic_stress
outputs = all
output_properties = 'porosity gaseous_porosity hot_pressing'
block = pellet
hotpress_scalar = 0.4
plenum_pressure = plenum_pressure
[]
[solid_swelling]
type = BurnupDependentEigenstrain
eigenstrain_name = solid_swelling_eigenstrain
block = pellet
swelling_factor = 1.5
swelling_name = 'solid_swelling'
[]
[metal_fuel_thermal]
type = UPuZrThermal
block = pellet
spheat_model = savage
thcond_model = billone
porosity = porosity
temperature = temp
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[fission_gas_behavior]
type = UPuZrFissionGasRelease
block = pellet
fractional_yield = 0.25
critical_porosity = 0.29
fractional_fgr_initial = 0.4
fractional_fgr_post = 0.7354
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.88e11
poissons_ratio = 0.236
block = clad
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'clad_creep'
block = clad
[]
[fast_neutron_flux]
type = FastNeutronFlux
calculate_fluence = true
block = clad
factor = 1
axial_power_profile = axial_flux_peaking_factors
rod_ave_lin_pow = flux_history
outputs = all
[]
[clad_creep]
type = HT9CreepUpdate
fast_neutron_flux = fast_neutron_flux
block = clad
temperature = temp
[]
[thermal_expansion]
type = HT9ThermalExpansionEigenstrain
block = clad
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_thermal]
type = HT9Thermal
block = clad
temperature = temp
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 7874.0
[]
[clad_volumetric_swelling]
type = HT9VolumetricSwellingEigenstrain
eigenstrain_name = clad_volume_eigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist 51'
line_search = 'none'
l_max_its = 60
l_tol = 8e-3
nl_max_its = 20
nl_rel_tol = 5e-3
nl_abs_tol = 1e-5
end_time = 1000
dtmin = 1e-12
dtmax = 5e5
[Quadrature]
order = fifth
side_order = seventh
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 1e2
growth_factor = 2
cutback_factor = 0.01
iteration_window = 5
optimal_iterations = 20
force_step_every_function_point = true
timestep_limiting_function = power_history
time_t = '1e6'
time_dt = '1'
[]
[]
[Postprocessors]
[ave_temp_plenum]
type = SideAverageValue
boundary = 6
variable = temp
execute_on = 'initial linear'
[]
[peak_porosity]
type = ElementExtremeValue
variable = porosity
value_type = max
block = pellet
[]
[gas_hot_pressing]
type = ElementAverageValue
execute_on = timestep_end
variable = hot_pressing
[]
[gas_volume]
type = InternalVolume
boundary = 9
execute_on = 'initial timestep_end'
[]
[fis_gas_produced]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_prod
block = pellet
[]
[fis_gas_released]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_rel
block = pellet
execute_on = 'initial timestep_end'
[]
[hydrostatic_stress]
type = ElementAverageValue
variable = hydrostatic_stress
execute_on = 'initial timestep_end'
block = pellet
[]
[solid_swelling]
type = ElementAverageValue
variable = solid_swell
block = pellet
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = pellet
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = pellet
[]
[porosity]
type = ElementAverageValue
variable = porosity
block = pellet
[]
[fis_gas_percent]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[]
[Outputs]
exodus = true
perf_graph = true
csv = true
[console]
type = Console
max_rows = 25
time_step_interval = 1
output_linear = true
[]
[]
[Dampers]
[max_inc_damp_x]
type = MaxIncrement
max_increment = 3e-4
variable = disp_x
[]
[max_inc_damp_y]
type = MaxIncrement
max_increment = 3e-4
variable = disp_y
[]
[max_inc_temp]
type = MaxIncrement
max_increment = 25
variable = temp
[]
[]