- eigenstrain_nameMaterial property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator.
C++ Type:std::string
Controllable:No
Description:Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator.
- fast_neutron_fluenceName of fast neutron fluence material property
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Name of fast neutron fluence material property
- fast_neutron_fluxName of fast neutron flux material property
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Name of fast neutron flux material property
- temperatureCoupled temperature in Kelvin
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature in Kelvin
SS316VolumetricSwellingEigenstrain
Computes the change in SS316 cladding volume due to irradiation by fast neutrons. This class applies a volumetric strain correction before adding the strain from this class to the diagonal entries of the eigenstrain tensor.
Description
SS316 fast reactor cladding experiences irradiation induced swelling as function of fluence and temperature. Several correlations are provided in Briggs et al. (1995). However, it should be noted that for fast flux fluence values greater than , the stress-free swelling correlation is expected to over-predict the swelling, and will only provide conservative estimates.
The volumetric swelling strain rate is given by: (1) where is the fractional volume change due to void formation, (2) Here, is the swelling rate parameter given as. (3) with (4) and (5) (6) where is temperature in Kelvin and is the incubation parameter in units of . To account for permanent swelling due to formation of voids during irradiation, the nominal stress-free swellng rate equation is used. (7) where is the negative fractional density change per second. (8) Integrating Eq. (7) over time yields the total volumetric swelling. In addition, is the curvature parameter. The neutron fluence, , is defined as the neutron fluence above 0.1 MeV. For Eq. (2), requires units of . Similarly, Eq. (8) requires to be in units of . Note, BISON requires all input to be in SI units, thus the flux is internally converted in SS316VolumetricSwellingEigenstrain.
Example Input Syntax
[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
[swelling]
type = SS316VolumetricSwellingEigenstrain<<<{"description": "Computes the change in SS316 cladding volume due to irradiation by fast neutrons. This class applies a volumetric strain correction before adding the strain from this class to the diagonal entries of the eigenstrain tensor.", "href": "SS316VolumetricSwellingEigenstrain.html"}>>>
eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = swelling
fast_neutron_fluence<<<{"description": "Name of fast neutron fluence material property"}>>> = fast_neutron_fluence
fast_neutron_flux<<<{"description": "Name of fast neutron flux material property"}>>> = fast_neutron_flux
temperature<<<{"description": "Coupled temperature in Kelvin"}>>> = temp
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = all
[]
[](test/tests/solid_mechanics/SS316_volumetric_swelling/coupled.i)The eigenstrain name must also be passed to the strain calculator via the eigenstrain_names parameter in the QuasiStatic Action:
[Physics<<<{"href": "../../../syntax/Physics/index.html"}>>>]
[SolidMechanics<<<{"href": "../../../syntax/Physics/SolidMechanics/index.html"}>>>]
[QuasiStatic<<<{"href": "../../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
[all]
add_variables<<<{"description": "Add the displacement variables"}>>> = true
strain<<<{"description": "Strain formulation"}>>> = FINITE
eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = swelling
[]
[]
[]
[](test/tests/solid_mechanics/SS316_volumetric_swelling/coupled.i)Input Parameters
- base_nameOptional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
C++ Type:std::string
Controllable:No
Description:Optional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
- 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
- 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.
- 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.
- swelling_namevolumetric_swelling_strainName of material property calculated here corresponding to burnup dependent swelling
Default:volumetric_swelling_strain
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Name of material property calculated here corresponding to burnup dependent swelling
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
- total_swelling_scaling_factor1Scaling factor to be applied to the swelling strain. Used for sensitivity and calibration studies
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Scaling factor to be applied to the swelling strain. Used for sensitivity and calibration studies
Advanced: Scaling Factors Parameters
Input Files
- (test/tests/solid_mechanics/SS316_volumetric_swelling/coupled.i)
- (assessment/metallic_fuel/FBTA/analysis/steady_state/common_inputs/ss316_clad_base.i)
- (test/tests/solid_mechanics/ad_ss316_volumetric_swelling/exact.i)
- (test/tests/solid_mechanics/ad_ss316_volumetric_swelling/coupled.i)
- (test/tests/solid_mechanics/SS316_volumetric_swelling/swelling.i)
- (assessment/metallic_fuel/EBRII/X423/analysis/x423_vp_base.i)
- (test/tests/solid_mechanics/SS316_volumetric_swelling/swelling_transient.i)
- (assessment/metallic_fuel/EBRII/X423/analysis/x423_lm_base.i)
References
- L. L. Briggs, L. K. Chang, and D. J. Hill.
Safety Analysis and Technical Basis for Establishing an Interim Burnup Limit for Mark-V and Mark-VA Fueled Subassemblies in EBR-II.
Technical Report ANL-NSE-1, Argonne National Laboratory, 1995.[BibTeX]
@techreport{satb1995, Author = "Briggs, L. L. and Chang, L. K. and Hill, D. J.", Institution = "Argonne National Laboratory", Number = "ANL-NSE-1", Title = "{Safety Analysis and Technical Basis for Establishing an Interim Burnup Limit for Mark-V and Mark-VA Fueled Subassemblies in EBR-II}", Year = "1995" }
(test/tests/solid_mechanics/SS316_volumetric_swelling/coupled.i)
# This test compares the calculated volumetric swelling calculated by SS316VolumetricSwellingEigenstrain
# to the analytical solution. The fluence is ramped from 0 to 9.9e27. A ParsedMaterial is used to compare
# the SS316VolumetricSwellingEigenstrain calculated swelling to a hand calculation. The max difference
# between the two materials is the metric of success for this test, and shows comparison within
# numerical precision
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 10
xmin = 0.01
xmax = 0.02
ymin = 0
ymax = 0.01
[]
[]
[AuxVariables]
[temp]
initial_condition = 700
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
eigenstrain_names = swelling
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[disp_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[]
[Materials]
[fluence]
type = FastNeutronFlux
calculate_fluence = true
flux_function = '(1 - y) * 1e22'
outputs = all
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.0e11
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[swelling]
type = SS316VolumetricSwellingEigenstrain
eigenstrain_name = swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist 51'
dt = 100000
end_time = 1000000
[]
[Postprocessors]
[fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
[]
[left_temp]
type = SideAverageValue
variable = temp
boundary = left
[]
[right_temp]
type = SideAverageValue
variable = temp
boundary = right
[]
[right_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(test/tests/solid_mechanics/SS316_volumetric_swelling/coupled.i)
# This test compares the calculated volumetric swelling calculated by SS316VolumetricSwellingEigenstrain
# to the analytical solution. The fluence is ramped from 0 to 9.9e27. A ParsedMaterial is used to compare
# the SS316VolumetricSwellingEigenstrain calculated swelling to a hand calculation. The max difference
# between the two materials is the metric of success for this test, and shows comparison within
# numerical precision
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 10
xmin = 0.01
xmax = 0.02
ymin = 0
ymax = 0.01
[]
[]
[AuxVariables]
[temp]
initial_condition = 700
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
eigenstrain_names = swelling
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[disp_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[]
[Materials]
[fluence]
type = FastNeutronFlux
calculate_fluence = true
flux_function = '(1 - y) * 1e22'
outputs = all
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.0e11
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[swelling]
type = SS316VolumetricSwellingEigenstrain
eigenstrain_name = swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist 51'
dt = 100000
end_time = 1000000
[]
[Postprocessors]
[fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
[]
[left_temp]
type = SideAverageValue
variable = temp
boundary = left
[]
[right_temp]
type = SideAverageValue
variable = temp
boundary = right
[]
[right_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(test/tests/solid_mechanics/SS316_volumetric_swelling/coupled.i)
# This test compares the calculated volumetric swelling calculated by SS316VolumetricSwellingEigenstrain
# to the analytical solution. The fluence is ramped from 0 to 9.9e27. A ParsedMaterial is used to compare
# the SS316VolumetricSwellingEigenstrain calculated swelling to a hand calculation. The max difference
# between the two materials is the metric of success for this test, and shows comparison within
# numerical precision
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 10
xmin = 0.01
xmax = 0.02
ymin = 0
ymax = 0.01
[]
[]
[AuxVariables]
[temp]
initial_condition = 700
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
eigenstrain_names = swelling
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[disp_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[]
[Materials]
[fluence]
type = FastNeutronFlux
calculate_fluence = true
flux_function = '(1 - y) * 1e22'
outputs = all
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.0e11
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[swelling]
type = SS316VolumetricSwellingEigenstrain
eigenstrain_name = swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist 51'
dt = 100000
end_time = 1000000
[]
[Postprocessors]
[fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
[]
[left_temp]
type = SideAverageValue
variable = temp
boundary = left
[]
[right_temp]
type = SideAverageValue
variable = temp
boundary = right
[]
[right_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(assessment/metallic_fuel/FBTA/analysis/steady_state/common_inputs/ss316_clad_base.i)
# SS316 Cladding
clad_density = 7980.0 # SS316 RT Density (same as D9)
[Physics/SolidMechanics/QuasiStatic]
[cladding]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress 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'
extra_vector_tags = 'ref'
block = '${cladding_block}'
eigenstrain_names = 'cladding_thermal_eigenstrain clad_swelling'
use_automatic_differentiation = true
volumetric_locking_correction = true
[]
[]
[Materials]
[clad_elasticity_tensor]
type = ADSS316ElasticityTensor
temperature = temp
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
block = ${cladding_block}
elastic_constants_model = legacy_ifr
[]
[clad_stress]
type = ADComputeMultipleInelasticStress
# tangent_operator = nonlinear
inelastic_models = 'clad_creep'
block = ${cladding_block}
[]
[clad_creep]
type = ADSS316CreepUpdate
block = ${cladding_block}
temperature = temp
fast_neutron_flux = fast_neutron_flux
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
[]
[thermal_expansion]
type = ADSS316ThermalExpansionEigenstrain
block = ${cladding_block}
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = cladding_thermal_eigenstrain
outputs = all
[]
[clad_swelling]
type = ADSS316VolumetricSwellingEigenstrain
eigenstrain_name = clad_swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
block = ${cladding_block}
[]
[clad_thermal]
type = ADSS316Thermal
block = ${cladding_block}
temperature = temp
[]
[clad_density]
type = ADStrainAdjustedDensity
block = ${cladding_block}
strain_free_density = ${clad_density}
[]
[clad_failure]
type = D9FailureClad
block = ${cladding_block}
method = steady_state
temperature = temp
outputs = all
hoop_stress = stress_zz # Since 2D-RZ
[]
[wastage_thickness]
type = ADMetallicFuelWastage
method = flux_ss316
temperature = temp
scale_factor = 1
boundary = cladding_inside_right
outputs = all
[]
[cc_wastage_thickness]
type = ADMetallicFuelCoolantWastage
clad_material = SS316
use_effective_method = true
temperature = temp
scale_factor = 1
boundary = cladding_outside_right
outputs = all
[]
[]
(test/tests/solid_mechanics/ad_ss316_volumetric_swelling/exact.i)
# This test compares the calculated volumetric swelling calculated by ADSS316VolumetricSwellingEigenstrain
# to the analytical solution. The fluence is ramped from 0 to 22e26. A low and high temperature
# response is tested on the left and right sides respectively. A ParsedMaterial is used to compare
# the ADSS316VolumetricSwellingEigenstrain calculated swelling to a hand calculation. Th max difference
# between the two materials is the metric of success for this test, and shows comparison within
# numerical precision
[GlobalParams]
displacements = 'disp_x'
[]
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 1
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
use_automatic_differentiation = true
eigenstrain_names = swelling
[]
[]
[AuxVariables]
[temp]
initial_condition = 300
[]
[]
[AuxKernels]
[temp_aux]
type = FunctionAux
variable = temp
function = '273 + 200 + x * 150'
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[]
[Functions]
[fluence_fcn]
type = PiecewiseLinear
x = '0 10'
y = '0 22e25'
[]
[flux_fcn]
type = PiecewiseLinear
x = '0 10'
y = '22e24 22e24'
[]
[]
[Materials]
[fluence]
type = ADGenericFunctionMaterial
prop_names = 'fluence'
prop_values = 'fluence_fcn'
outputs = all
[]
[flux]
type = ADGenericFunctionMaterial
prop_names = 'flux'
prop_values = 'flux_fcn'
outputs = all
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 1.0
poissons_ratio = 0.3
[]
[stress]
type = ADComputeFiniteStrainElasticStress
[]
[swelling]
type = ADSS316VolumetricSwellingEigenstrain
eigenstrain_name = swelling
fast_neutron_fluence = fluence
fast_neutron_flux = flux
swelling_name = volumetric_swelling_strain
temperature = temp
outputs = all
[]
[converter]
type = MaterialADConverter
ad_props_in = 'fluence flux'
reg_props_out = 'reg_fluence reg_flux'
[]
[exact]
type = ParsedMaterial
coupled_variables = 'temp'
constant_names = 'alpha dt'
constant_expressions = '0.75 0.01'
material_property_names = 'reg_fluence reg_flux'
property_name = exact
expression = 'F := reg_fluence * 1e-26;
Fl := reg_flux * 1e-26;
beta := (temp-773.15)/100;
tau := 6.58 - 0.566 * beta;
R := exp(0.497 + 0.795 * beta -0.0948 *(beta)^2 + 0.908 * (beta)^3 -1.49 * (beta)^4) + exp(-8 * (beta - 1.35)^2);
VF :=0.01 * R * (F + log((1+ exp(alpha * (tau - F))) / (1 +exp(alpha * tau))) / alpha);
Vdot := 0.01 * R * Fl / (1.0 + exp(alpha * (tau - F)));
dt * Vdot/(1 - VF)^2'
outputs = all
[]
[]
[Executioner]
type = Transient
dt = 0.01
end_time = .1
[]
[Postprocessors]
[fluence_right]
type = SideAverageValue
variable = fluence
boundary = right
[]
[flux_right]
type = SideAverageValue
variable = flux
boundary = right
[]
[swell_avg]
type = ElementAverageMaterialProperty
mat_prop = exact
[]
[swell_total]
type = CumulativeValuePostprocessor
postprocessor = swell_avg
[]
[left_temp]
type = SideAverageValue
variable = temp
boundary = left
[]
[left_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = left
[]
[left_exact]
type = SideAverageValue
variable = exact
boundary = left
[]
[left_diff]
type = DifferencePostprocessor
value1 = left_exact
value2 = left_swelling
outputs = none
[]
[left_diff_max]
type = TimeExtremeValue
postprocessor = left_diff
outputs = console
[]
[right_temp]
type = SideAverageValue
variable = temp
boundary = right
[]
[right_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = right
[]
[right_exact]
type = SideAverageValue
variable = exact
boundary = right
[]
[right_exact_total]
type = CumulativeValuePostprocessor
postprocessor = right_exact
[]
[right_diff]
type = DifferencePostprocessor
value1 = right_exact_total
value2 = right_swelling
# outputs = none
[]
[right_diff_max]
type = TimeExtremeValue
postprocessor = right_diff
outputs = console
[]
[]
[Outputs]
csv = true
[]
(test/tests/solid_mechanics/ad_ss316_volumetric_swelling/coupled.i)
# This test compares the calculated volumetric swelling calculated by ADSS316VolumetricSwellingEigenstrain
# by varying multiple inputs. The fluence is ramped from 0 to 22e26. A low and high temperature
# response is tested on the left and right sides respectively.
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 10
xmin = 0.01
xmax = 0.02
[]
[]
[Variables]
[temp]
initial_condition = 600
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
eigenstrain_names = swelling
use_automatic_differentiation = true
[]
[]
[Kernels]
[temp]
type = ADDiffusion
variable = temp
use_displaced_mesh = true
[]
[dt]
type = ADTimeDerivative
variable = temp
[]
[]
[BCs]
[disp_x]
type = ADDirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[disp_y]
type = ADDirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[temp_left]
type = ADFunctionDirichletBC
variable = temp
boundary = left
function = '850 + y * 100'
[]
[temp_right]
type = ADFunctionDirichletBC
variable = temp
boundary = left
function = '650 + y * 100'
[]
[]
[Materials]
[fluence]
type = FastNeutronFlux
calculate_fluence = true
flux_function = '(1 - y) * 22e30'
outputs = all
[]
[converter]
type = MaterialADConverter
reg_props_in = 'fast_neutron_fluence fast_neutron_flux'
ad_props_out = 'ad_fast_neutron_fluence ad_fast_neutron_flux'
[]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 1.0e11
poissons_ratio = 0.3
[]
[stress]
type = ADComputeFiniteStrainElasticStress
[]
[swelling]
type = ADSS316VolumetricSwellingEigenstrain
eigenstrain_name = swelling
fast_neutron_fluence = ad_fast_neutron_fluence
fast_neutron_flux = ad_fast_neutron_flux
swelling_name = volumetric_swelling_strain
temperature = temp
outputs = all
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
nl_abs_tol = 1e-10
dt = 1e-4
num_steps = 3
[]
[Postprocessors]
[fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
[]
[left_temp]
type = SideAverageValue
variable = temp
boundary = left
[]
[left_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = left
[]
[right_temp]
type = SideAverageValue
variable = temp
boundary = right
[]
[right_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(test/tests/solid_mechanics/SS316_volumetric_swelling/swelling.i)
# Test of volumetric swelling of SS316 alloys (700K).
#
# The model used a fast fluence of 1e28 n/m2, the volumetric
# strain should be 0.591350659. This is easily checked with
# the 'volume' postprocessor value.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
[cube]
type = GeneratedMeshGenerator
dim = 3
[]
[]
[Physics/SolidMechanics/QuasiStatic]
temperature = temperature
add_variables = true
strain = FINITE
[all]
eigenstrain_names = 'swell'
[]
[]
[AuxVariables]
[temperature]
order = CONSTANT
family = MONOMIAL
initial_condition = 700.0
[]
[]
[BCs]
[bottom_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[bottom_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[bottom_z]
type = DirichletBC
variable = disp_z
boundary = back
value = 0.0
[]
[]
[Materials]
[fast_flux]
type = FastNeutronFlux
flux_function = 2e19
calculate_fluence = true
outputs = all
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.0
poissons_ratio = 0.3
[]
[clad_swelling]
type = SS316VolumetricSwellingEigenstrain
temperature = temperature
eigenstrain_name = swell
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
outputs = all
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
[]
[thermal]
type = SS316Thermal
temperature = temperature
[]
[density]
type = StrainAdjustedDensity
strain_free_density = 7225.0
[]
[]
[Executioner]
type = Transient
nl_rel_tol = 1e-3
nl_abs_tol = 1e-4
start_time = 0.0
dt = 1000000
end_time = 5e8
[]
[Postprocessors]
[volume]
type = InternalVolume
boundary = 'left right bottom top back front'
execute_on = 'initial linear'
[]
[ave_fluence]
type = ElementAverageValue
variable = fast_neutron_fluence
[]
[]
[Outputs]
[out]
type = Exodus
time_step_interval = 50
[]
[]
(assessment/metallic_fuel/EBRII/X423/analysis/x423_vp_base.i)
[GlobalParams]
density = ${fuel_density}
order = FIRST
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
X_Pu = ${fuel_pu}
X_Zr = ${fuel_zr}
[]
[Problem]
type = ReferenceResidualProblem
extra_tag_vectors = 'ref'
reference_vector = 'ref'
group_variables = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = FIPDRodletMeshGenerator
fipd_geom_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} / ${pin_id} _design.csv'}
fipd_as_fabricated_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} / ${pin_id} _as_fabricated.csv'}
gap_bottom_length = 0.31e-3 # arbitrary
cladding_bottom_plug_length = 2.24e-3 # arbitrary
cladding_top_plug_length = 2.24e-3 # arbitrary
cladding_sidewall_radial_elements = 10
cladding_sidewall_axial_element_numbers = '2 150 150'
cladding_top_plug_radial_elements = 10
cladding_top_plug_axial_elements = 5
cladding_bottom_plug_radial_elements = 10
cladding_bottom_plug_axial_elements = 5
fuel_radial_elements = 6
fuel_axial_element_intervals = '0 1'
fuel_axial_element_numbers = '150'
use_default_cladding_sidewall_axial_element_intervals = true
elem_type = QUAD4
[]
[]
[Variables]
[temp]
initial_condition = 298
[]
[]
[AuxVariables]
# Aux variables for output
[porosity]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[cumulative_damage_index]
order = CONSTANT
family = MONOMIAL
[]
[element_failed]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
block = fuel
order = CONSTANT
family = MONOMIAL
[]
[hoop_stress]
order = CONSTANT
family = MONOMIAL
[]
[hoop_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[hoop_elastic_strain]
order = CONSTANT
family = MONOMIAL
[]
[total_hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[func_val1]
[]
[func_val2]
[]
# AuxVariables used for thermal expansion correction
[fuel_thermal_strain_xx]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[fuel_thermal_strain_yy]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[fuel_thm_exp]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[clad_thermal_eigenstrain_xx]
order = CONSTANT
family = MONOMIAL
block = cladding
[]
[clad_thm_exp]
order = CONSTANT
family = MONOMIAL
block = cladding
[]
[]
[Functions] #copied from fipd-tdep
[clad_od_temp]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /clad_od_temp_history_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
[]
[power_history]
type = PiecewiseLinear
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /power_history_ ${pin_id} .csv'}
[]
[pwr_axial_peaking_factors]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_power_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
[]
[pwr_axial_peaking_factors_elongate]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_power_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
fuel_elongation_pp = max_fuel_elongation
[]
[fflux_axial_peaking_factors]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_flux_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
extrapolate_to_zero = true
[]
[fflux_axial_peaking_factors_elongate]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_flux_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
extrapolate_to_zero = true
fuel_elongation_pp = max_fuel_elongation
[]
[flux_history]
type = PiecewiseLinear
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /flux_history_ ${pin_id} .csv'}
[]
[coolant_press_ramp]
type = PiecewiseLinear
x = '0 56465640'
y = '0.151e6 0.151e6'
[]
[id_vpp_func]
type = MetallicFuelWastageDegradationFunction
vectorpostprocessor_name = id_wastage
argument_column = y
wastage_type = ID
value_column = wastage_thickness
use_metadata = true
degradation_factor = 0.001
mesh_generator = 'gen'
transition_width = 1E-4
[]
[od_vpp_func]
type = MetallicFuelWastageDegradationFunction
vectorpostprocessor_name = od_wastage
argument_column = y
wastage_type = OD
value_column = cc_wastage_thickness
use_metadata = true
degradation_factor = 0.001
mesh_generator = 'gen'
transition_width = 1E-4
[]
[ci_temp]
type = PiecewiseLinearFromVectorPostprocessor
argument_column = y
component = y
value_column = temp
vectorpostprocessor_name = clad_inn_temp
[]
[na_vol]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = sodium_volume
scale_factor = -1.0
[]
[fuel_height]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = fuel_height
[]
[fuel_radius]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = fuel_radius
[]
[pore_volume_fcn]
type = ParsedFunction
symbol_names = 'volume_fuel interconnected_porosity_fuel_avg'
symbol_values = 'volume_fuel interconnected_porosity_fuel_avg'
expression = '-volume_fuel * interconnected_porosity_fuel_avg'
[]
[anisotropic_swelling_factor]
type = ParsedFunction
symbol_names = 'disp_x_fuel_radial_surface_avg disp_y_fuel_top_surface_avg fuel_height fuel_radius'
symbol_values = 'disp_x_fuel_radial_surface_avg disp_y_fuel_top_surface_avg fuel_height fuel_radius'
expression = '(disp_x_fuel_radial_surface_avg / fuel_radius) / (disp_y_fuel_top_surface_avg / fuel_height)'
[]
[]
# From Topher
[Physics/SolidMechanics/QuasiStatic]
[fuel]
strain = FINITE
add_variables = true
generate_output = 'firstinv_strain stress_xx stress_yy stress_zz vonmises_stress 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'
extra_vector_tags = 'ref'
block = fuel
eigenstrain_names = 'fuel_thermal_strain solid_swelling_eigenstrain'
use_automatic_differentiation = true
[]
[clad]
strain = FINITE
add_variables = true
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress 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'
extra_vector_tags = 'ref'
block = cladding
eigenstrain_names = 'clad_swelling clad_thermal_eigenstrain'
use_automatic_differentiation = true
[]
[]
[Kernels]
# Define kernels for the various terms in the PDE system
[gravity]
type = ADGravity
variable = disp_y
value = -9.81
extra_vector_tags = 'ref'
[]
[heat]
type = ADHeatConduction
variable = temp
extra_vector_tags = 'ref'
[]
[heat_ie_f]
type = ADHeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
block = fuel
density_name = density
[]
[heat_ie_c]
type = ADHeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
block = cladding
density_name = density
[]
[heat_source]
type = ADFissionRateHeatSource
variable = temp
fission_rate = fission_rate
block = fuel
extra_vector_tags = 'ref'
[]
[]
[AuxKernels]
[porosity]
type = ADMaterialRealAux
property = porosity
variable = porosity
block = fuel
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = fuel_outer_radial_surface
[]
[cdf_amount]
block = cladding
type = MaterialRealAux
property = cdf_failure
variable = cumulative_damage_index
[]
[failed_element]
boundary = 'cladding_outside_right'
type = MaterialRealAux
property = failed
variable = element_failed
[]
[volumetric_strain]
type = ADRankTwoScalarAux
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = timestep_end
block = fuel
[]
[hoop_stress]
type = ADRankTwoAux
rank_two_tensor = stress
variable = hoop_stress
index_j = 2
index_i = 2
execute_on = timestep_end
[]
[hoop_creep_strain]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = hoop_creep_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[hoop_elastic_strain]
type = ADRankTwoAux
rank_two_tensor = elastic_strain
variable = hoop_elastic_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[total_hoop_strain]
type = ADRankTwoAux
rank_two_tensor = total_strain
variable = total_hoop_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[func_val1]
type = FunctionAux
function = id_vpp_func
variable = func_val1
block = cladding
[]
[func_val2]
type = FunctionAux
function = od_vpp_func
variable = func_val2
block = cladding
[]
[fuel_thermal_strain_xx]
type = ADRankTwoAux
rank_two_tensor = fuel_thermal_strain
variable = fuel_thermal_strain_xx
index_j = 0
index_i = 0
execute_on = 'initial timestep_end'
block = fuel
[]
[fuel_thermal_strain_yy]
type = ADRankTwoAux
rank_two_tensor = fuel_thermal_strain
variable = fuel_thermal_strain_yy
index_j = 1
index_i = 1
execute_on = 'initial timestep_end'
block = fuel
[]
[fuel_thm_exp]
type = SpatialUserObjectAux
variable = fuel_thm_exp
execute_on = 'initial timestep_end'
user_object = fuel_thm_exp
block = fuel
[]
[clad_thermal_eigenstrain_xx]
type = ADRankTwoAux
rank_two_tensor = clad_thermal_eigenstrain
variable = clad_thermal_eigenstrain_xx
index_j = 0
index_i = 0
execute_on = 'initial timestep_end'
block = cladding
[]
[clad_thm_exp]
type = SpatialUserObjectAux
variable = clad_thm_exp
execute_on = 'initial timestep_end'
user_object = clad_thm_exp
block = cladding
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = cladding_inside_right
secondary = fuel_outer_radial_surface
penalty = 1e12
model = frictionless
#system = constraint
normalize_penalty = true
tangential_tolerance = 1e-3
normal_smoothing_distance = 0.1
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = temp
primary = cladding_inside_right
secondary = fuel_outer_radial_surface
quadrature = true
gap_conductivity = 61.0
min_gap = 0.5e-03
[]
[]
[BCs]
[no_x_all]
type = ADDirichletBC
variable = disp_x
boundary = centerline
value = 0.0
[]
[no_y_fuel]
type = ADDirichletBC
variable = disp_y
boundary = fuel_bottom
value = 0.0
[]
[no_y_clad]
type = ADDirichletBC
variable = disp_y
boundary = cladding_outside_bottom
value = 0.0
[]
[fuel_top_temp]
type = ADFunctionDirichletBC
boundary = fuel_top
variable = temp
function = ci_temp
[]
[surf] #copied from fipd-tdep
type = ADFunctionDirichletBC
variable = temp
boundary = 'cladding_outside_bottom cladding_outside_right cladding_outside_top'
function = clad_od_temp
[]
[Pressure]
[coolantPressure]
boundary = 'cladding_outside_bottom cladding_outside_right cladding_outside_top'
function = coolant_press_ramp
use_automatic_differentiation = true
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 'fuel_outside_all cladding_inside_all'
initial_pressure = 0.084e6 # Pa
startup_time = 0
R = 8.3143
temperature = ave_temp_interior
volume = gas_volume
output = plenum_pressure
material_input = fg_released
additional_volumes = volume_pore
temperature_of_additional_volumes = temp_fuel_avg
use_automatic_differentiation = true
[]
[]
[]
[Materials]
[interconnected_porosity] # Topher
type = ADParsedMaterial
property_name = interconnected_porosity
material_property_names = 'porosity interconnectivity'
expression = 'porosity * interconnectivity'
outputs = all
block = fuel
[]
[porosity] # Topher
type = ADPorosityFromStrain
block = fuel
initial_porosity = 1e-10
inelastic_strain = 'combined_inelastic_strain'
outputs = none
[]
[gas_swelling] # Topher
type = ADSimpleFissionGasViscoplasticityStressUpdate
temperature = temp
outputs = all
block = fuel
bubble_concentration = 1e15
initial_bubble_concentration = 1e15
compute_interconnectivity = true
fission_gas_yield = 0.3017
fission_rate = fission_rate
initial_atoms_per_bubble = 1e-05
initial_bubble_radius = 1e-15
initial_fgm_dissolved = 0
interconnection_cutoff = 0.999
interconnection_initiating_porosity = 0.26
interconnection_terminating_porosity = 0.28
max_inelastic_increment = 0.001
retained_gas_fraction = 0.25
interconnection_dependent_retained_gas_fraction = 0.5
surface_energy = 1.6
anisotropic_factor = 0.26
initial_porosity = 1e-10
[]
[solid_swelling] # Topher
type = ADBurnupDependentEigenstrain
eigenstrain_name = solid_swelling_eigenstrain
block = fuel
swelling_name = 'solid_swelling'
outputs = all
anisotropic_factor = 0.26
[]
[sodium_logging]
type = ADUPuZrSodiumLogging
block = fuel
porosity = porosity
interconnectivity = interconnectivity
sodium_infiltration_fraction = 0.08
outputs = all
[]
[fission_rate]
type = ADUPuZrFissionRate
block = fuel
rod_linear_power = power_history
axial_power_profile = pwr_axial_peaking_factors
use_metadata = true
mesh_generator = gen
outputs = all
[]
[fission_rate_elongate]
type = ADUPuZrFissionRate
block = cladding
fission_rate_name = fission_rate
rod_linear_power = power_history
axial_power_profile = pwr_axial_peaking_factors_elongate
use_metadata = true
mesh_generator = gen
outputs = all
[]
[burnup]
type = ADUPuZrBurnup
initial_X_Pu = ${fuel_pu}
initial_X_Zr = ${fuel_zr}
density = ${fuel_density}
outputs = all
block = fuel
[]
[burnup_elongate]
type = ADUPuZrBurnup
initial_X_Pu = ${fuel_pu}
initial_X_Zr = ${fuel_zr}
density = ${fuel_density}
outputs = all
block = cladding
burnup_name = burnup
[]
[fast_neutron_flux]
type = ADFastNeutronFlux
calculate_fluence = true
rod_ave_lin_pow = flux_history
axial_power_profile = fflux_axial_peaking_factors
block = fuel
factor = 1.0
outputs = all
[]
[fast_neutron_flux_elongate]
type = ADFastNeutronFlux
calculate_fluence = true
rod_ave_lin_pow = flux_history
axial_power_profile = fflux_axial_peaking_factors_elongate
block = cladding
factor = 1.0
outputs = all
[]
[fuel_elasticity_tensor]
type = ADUPuZrElasticityTensor
block = fuel
temperature = temp
use_old_porosity = true
[]
[fuel_elastic_stress]
type = ADComputeMultipleInelasticStress
# tangent_operator = nonlinear
inelastic_models = 'fuel_upuzrcreep gas_swelling'
block = fuel
outputs = all
[]
[fuel_upuzrcreep]
type = ADUPuZrCreepUpdate
block = fuel
temperature = temp
porosity = porosity
max_inelastic_increment = 2e-3
use_old_porosity = true
[]
[fuel_thermal_expansion]
type = ADComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 1.18e-5
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
outputs = all
[]
[metal_fuel_thermal]
type = ADUPuZrThermal
block = fuel
spheat_model = savage
thcond_model = lanl
porosity = porosity
temperature = temp
[]
[fuel_density]
type = ADStrainAdjustedDensity
displacements = 'disp_x disp_y'
block = fuel
strain_free_density = ${fuel_density}
[]
[clad_elasticity_tensor]
type = ADD9ElasticityTensor
temperature = temp
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
block = cladding
[]
[clad_stress]
type = ADComputeMultipleInelasticStress
# tangent_operator = nonlinear
inelastic_models = 'clad_ss316creep'
block = cladding
[]
[clad_ss316creep]
type = ADD9CreepUpdate
block = cladding
temperature = temp
fast_neutron_flux = fast_neutron_flux
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
[]
[clad_swelling]
type = ADSS316VolumetricSwellingEigenstrain
eigenstrain_name = clad_swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[thermal_expansion]
type = ADD9ThermalExpansionEigenstrain
block = cladding
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
outputs = all
[]
[clad_thermal]
type = ADD9Thermal
block = cladding
temperature = temp
[]
[clad_density]
type = ADStrainAdjustedDensity
block = cladding
strain_free_density = 7874.0
[]
[longSS316_failure]
type = D9FailureClad
block = cladding
method = steady_state
temperature = temp
outputs = all
hoop_stress = stress_zz # Since 2D-RZ
[]
[wastage_thickness]
type = ADMetallicFuelWastage
method = flux_ss316
temperature = temp
scale_factor = 1
boundary = cladding_inside_right
outputs = all
[]
[cc_wastage_thickness]
type = ADMetallicFuelCoolantWastage
clad_material = SS316
use_effective_method = true
temperature = temp
scale_factor = 1
boundary = cladding_outside_right
outputs = all
[]
[]
[Dampers]
[disp_x]
type = MaxIncrement
variable = disp_x
max_increment = 1e-3
[]
[disp_y]
type = MaxIncrement
variable = disp_y
max_increment = 1e-3
[]
[temp]
type = MaxIncrement
variable = temp
max_increment = 50
[]
[]
[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 = 100
l_tol = 1e-3
nl_max_its = 50
nl_rel_tol = 1e-5
nl_abs_tol = 1e-7
end_time = ${time_last}
dtmin = 1
dtmax = ${max_dt}
automatic_scaling = true
compute_scaling_once = false
[Quadrature]
order = fifth
side_order = seventh
[]
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_function = power_history
#max_function_change = 300 # Removed to decrease run time
timestep_limiting_postprocessor = creep_timestep
dt = 100
iteration_window = 2
optimal_iterations = 10
force_step_every_function_point = true
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
outputs = 'csv_general console'
[]
[num_lin_it]
type = NumLinearIterations
outputs = csv_general
[]
[num_nonlin_it]
type = NumNonlinearIterations
outputs = csv_general
[]
[tot_lin_it]
type = CumulativeValuePostprocessor
postprocessor = num_lin_it
outputs = csv_general
[]
[tot_nonlin_it]
type = CumulativeValuePostprocessor
postprocessor = num_nonlin_it
outputs = csv_general
[]
[alive_time]
type = PerfGraphData
section_name = Root
data_type = TOTAL
outputs = csv_general
[]
[ave_temp_interior]
type = SideAverageValue
boundary = cladding_inside_top
variable = temp
execute_on = 'initial linear'
outputs = csv_general
[]
[approx_FCT]
type = AverageNodalVariableValue
boundary = centerline
variable = temp
outputs = csv_general
[]
[max_approx_FCT]
type = TimeExtremeValue
value_type = max
postprocessor = approx_FCT
outputs = csv_general
[]
[ave_FST]
type = SideAverageValue
boundary = fuel_outer_radial_surface
variable = temp
outputs = csv_general
[]
[max_ave_FST]
type = TimeExtremeValue
value_type = max
postprocessor = ave_FST
outputs = csv_general
[]
[ave_CIT]
type = SideAverageValue
boundary = cladding_inside_right
variable = temp
outputs = csv_general
[]
[max_ave_CIT]
type = TimeExtremeValue
value_type = max
postprocessor = ave_CIT
outputs = csv_general
[]
[avg_clad_temp]
type = ElementAverageValue
variable = temp
block = cladding
outputs = csv_general
[]
[peak_clad_temp]
type = ElementExtremeValue
variable = temp
value_type = max
block = cladding
outputs = csv_general
[]
[peak_fuel_temp]
type = ElementExtremeValue
variable = temp
value_type = max
block = fuel
outputs = csv_general
[]
[max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = max
block = fuel
outputs = csv_general
[]
[min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = min
block = fuel
outputs = csv_general
[]
[avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = fuel
outputs = csv_general
[]
[peak_porosity]
type = ElementExtremeValue
variable = porosity
value_type = max
block = fuel
outputs = csv_general
[]
[clad_inner_vol]
type = InternalVolume
boundary = cladding_inside_all
outputs = csv_general
[]
[pellet_volume]
type = InternalVolume
boundary = fuel_outside_all
outputs = csv_general
[]
[gas_volume]
type = InternalVolume
boundary = 'fuel_outside_all cladding_inside_all'
execute_on = 'initial timestep_end'
addition = na_vol
outputs = csv_general
[]
[clad_fuel_gap]
type = NodalExtremeValue
variable = penetration
boundary = fuel_outer_radial_surface
outputs = csv_general
[]
[max_cont_press]
type = NodalExtremeValue
variable = contact_pressure
boundary = fuel_outer_radial_surface
outputs = csv_general
[]
[flux_from_clad]
type = ADSideDiffusiveFluxIntegral
variable = temp
boundary = cladding_inside_right
diffusivity = thermal_conductivity
outputs = csv_general
[]
[flux_from_fuel]
type = ADSideDiffusiveFluxIntegral
variable = temp
boundary = fuel_outer_radial_surface
diffusivity = thermal_conductivity
outputs = csv_general
[]
[rod_total_power]
type = ADElementIntegralPower
variable = temp
use_material_fission_rate = true
fission_rate_material = fission_rate
block = fuel
outputs = csv_general
[]
[LHGR_W_per_cm]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.01
outputs = csv_general
[]
[average_burnup]
type = ElementAverageValue
block = fuel
variable = burnup
outputs = csv_general
[]
[max_cdf]
type = ElementExtremeValue
value_type = max
variable = cumulative_damage_index
outputs = csv_general
[]
# fission gas information (Topher)
[fg_produced]
type = ADElementIntegralMaterialProperty
mat_prop = fgm_produced
block = fuel
outputs = csv_general
[]
[fg_released]
type = ADElementIntegralMaterialProperty
mat_prop = fgm_released
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[fg_percent]
type = FGRPercent
fission_gas_released = fg_released
fission_gas_generated = fg_produced
outputs = csv_general
[]
[interconnected_porosity_fuel_avg]
type = ElementAverageValue
variable = interconnected_porosity
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[porosity_fuel_avg]
type = ElementAverageValue
variable = porosity
block = fuel
outputs = csv_general
[]
[porosity_fuel_max]
type = ElementExtremeValue
variable = porosity
block = fuel
outputs = csv_general
[]
[porosity_fuel_min]
type = ElementExtremeValue
variable = porosity
value_type = min
block = fuel
outputs = csv_general
[]
[creep_timestep]
type = MaterialTimeStepPostprocessor
block = fuel
outputs = 'csv_general console'
[]
[hydrostatic_stress]
type = ElementAverageValue
variable = hydrostatic_stress
execute_on = 'initial timestep_end'
block = fuel
outputs = csv_general
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = fuel
outputs = csv_general
[]
[fission_rate]
type = ElementAverageValue
variable = fission_rate
block = fuel
outputs = csv_general
[]
[porosity]
type = ElementAverageValue
variable = porosity
block = fuel
outputs = csv_general
[]
[max_clad_hoop_creep]
type = ElementExtremeValue
value_type = max
block = cladding
variable = hoop_creep_strain
outputs = csv_general
[]
[max_clad_creep_strain_mag]
type = ElementExtremeValue
value_type = max
block = cladding
variable = creep_strain_mag
outputs = csv_general
[]
[max_total_hoop_strain]
type = ElementExtremeValue
value_type = max
block = cladding
variable = total_hoop_strain
outputs = csv_general
[]
[max_fuel_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = fuel_outside_all
outputs = csv_general
[]
[avg_fuel_ax_thm_str]
type = AxisymmetricCenterlineAverageValue
variable = fuel_thermal_strain_yy
boundary = fuel_inner_radial_surface
outputs = csv_general
[]
[max_clad_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'cladding_outside_top cladding_outside_right'
outputs = csv_general
[]
[max_wastagethickness]
type = ElementExtremeValue
value_type = max
variable = wastage_thickness
outputs = 'console'
[]
[avg_fuel_temp]
type = ElementAverageValue
variable = temp
block = fuel
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = csv_general
[]
# Fuel strain information (Topher)
[strain_solid_swelling_fuel_avg]
type = ElementAverageValue
variable = solid_swelling
block = fuel
outputs = csv_general
[]
[strain_gas_swelling_fuel_avg]
type = ElementAverageValue
variable = effective_fission_gas_strain
block = fuel
outputs = csv_general
[]
[strain_volumetric_fuel_avg]
type = ElementAverageValue
variable = firstinv_strain
block = fuel
outputs = csv_general
[]
[volume_fuel]
type = InternalVolume
boundary = 'fuel_outside_all'
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[disp_x_fuel_radial_surface_avg]
type = SideAverageValue
variable = disp_x
boundary = 'fuel_outside_all'
outputs = csv_general
[]
[disp_y_fuel_top_surface_avg]
type = SideAverageValue
variable = disp_y
boundary = 'fuel_top'
outputs = csv_general
[]
[temp_fuel_avg]
type = ElementAverageValue
variable = temp
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[volume_pore]
type = FunctionValuePostprocessor
function = pore_volume_fcn
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[]
[VectorPostprocessors]
[clad_x_disp]
type = NodalValueSampler
variable = disp_x
boundary = cladding_outside_right
sort_by = y
outputs = none
[]
[fuel_cl_temp]
type = NodalValueSampler
variable = temp
boundary = centerline
sort_by = y
outputs = none
[]
[fuel_surf_temp]
type = NodalValueSampler
variable = temp
boundary = fuel_outer_radial_surface
sort_by = y
outputs = none
[]
[clad_inn_temp]
type = NodalValueSampler
variable = temp
boundary = cladding_inside_right
sort_by = y
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
[clad_out_temp]
type = NodalValueSampler
variable = temp
boundary = cladding_outside_right
sort_by = y
outputs = none
[]
[id_wastage]
type = FuelRodLineValueSampler
variable = wastage_thickness
material = 'clad'
fraction = 0.0
num_points = 600
orientation = 'vertical'
fuel_pin_geometry = 'pin_geometry'
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
[od_wastage]
type = FuelRodLineValueSampler
variable = cc_wastage_thickness
material = 'clad'
fraction = 1.0
num_points = 600
orientation = 'vertical'
fuel_pin_geometry = 'pin_geometry'
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
# PIE Comparison VPPs
[nrad_comparison_0]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_0
enable = ${enable_0}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_0'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[nrad_comparison_a]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423A_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_a
enable = ${enable_a}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_a'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[nrad_comparison_b]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423B_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_b
enable = ${enable_b}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_b'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[nrad_comparison_c]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423C_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_c
enable = ${enable_c}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_c'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[]
[UserObjects]
[pin_geometry]
type = FuelPinGeometry
clad_bottom = cladding_outside_bottom
clad_inner_wall = cladding_inside_right
clad_outer_wall = cladding_outside_right
clad_top = cladding_outside_top
pellet_exteriors = fuel_outside_all
[]
[fuel_thm_exp]
type = LayeredAverage
variable = fuel_thermal_strain_xx
direction = y
num_layers = 1000
block = fuel
[]
[clad_thm_exp]
type = LayeredAverage
variable = clad_thermal_eigenstrain_xx
direction = y
num_layers = 1000
block = cladding
[]
[]
[Outputs]
perf_graph = true
color = false
[console]
type = Console
max_rows = 25
time_step_interval = 1
output_linear = true
sync_times = ${time_spots}
[]
[csv_vpp_0]
type = CSV
sync_only = true
sync_times = ${time_spots_0}
enable = ${enable_0}
create_latest_symlink = true
[]
[csv_vpp_a]
type = CSV
sync_only = true
sync_times = ${time_spots_a}
enable = ${enable_a}
create_latest_symlink = true
[]
[csv_vpp_b]
type = CSV
sync_only = true
sync_times = ${time_spots_b}
enable = ${enable_b}
create_latest_symlink = true
[]
[csv_vpp_c]
type = CSV
sync_only = true
sync_times = ${time_spots_c}
enable = ${enable_c}
create_latest_symlink = true
[]
[csv_general]
type = CSV
sync_times = ${time_spots}
[]
[extra_csv]
type = CSV
sync_only = true
sync_times = ${time_spots_extra}
[]
[extra_csv_0]
type = CSV
sync_only = true
sync_times = ${time_spots_0}
enable = ${enable_0}
[]
[extra_csv_a]
type = CSV
sync_only = true
sync_times = ${time_spots_a}
enable = ${enable_a}
[]
[extra_csv_b]
type = CSV
sync_only = true
sync_times = ${time_spots_b}
enable = ${enable_b}
[]
[extra_csv_c]
type = CSV
sync_only = true
sync_times = ${time_spots_c}
enable = ${enable_c}
[]
[exodus]
type = Exodus
sync_only = true
sync_times = ${time_spots}
[]
[]
(test/tests/solid_mechanics/SS316_volumetric_swelling/swelling_transient.i)
# This test compares the calculated volumetric swelling calculated by D9VolumetricSwellingEigenstrain
# to the analytical solution. The fluence is ramped from 0 to 22e26. A low and high temperature
# response is tested on the left and right sides respectively. A ParsedMaterial is used to compare
# the D9VolumetricSwellingEigenstrain calculated swelling to a hand calculation. The max difference
# between the two materials is the metric of success for this test, and shows comparison within
# numerical precision
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 10
xmin = 0.01
xmax = 0.02
[]
[]
[Variables]
[temp]
initial_condition = 800
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
eigenstrain_names = swelling
[]
[]
[Kernels]
[temp]
type = Diffusion
variable = temp
use_displaced_mesh = true
[]
[dt]
type = TimeDerivative
variable = temp
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = left
value = 0.0
[]
[disp_y]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0.0
[]
[temp_left]
type = FunctionDirichletBC
variable = temp
boundary = left
function = '850 + y * 100'
[]
[temp_right]
type = FunctionDirichletBC
variable = temp
boundary = left
function = '650 + y * 100'
[]
[]
[Materials]
[fluence]
type = FastNeutronFlux
calculate_fluence = true
flux_function = '(1 - y) * 22e30'
outputs = all
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.0e11
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[swelling]
type = SS316VolumetricSwellingEigenstrain
eigenstrain_name = swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
nl_abs_tol = 1e-10
dt = 1e-4
num_steps = 3
[]
[Postprocessors]
[fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
[]
[left_temp]
type = SideAverageValue
variable = temp
boundary = left
[]
[left_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = left
[]
[right_temp]
type = SideAverageValue
variable = temp
boundary = right
[]
[right_swelling]
type = SideAverageValue
variable = volumetric_swelling_strain
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(assessment/metallic_fuel/EBRII/X423/analysis/x423_lm_base.i)
[GlobalParams]
density = ${fuel_density}
order = FIRST
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
X_Pu = ${fuel_pu}
X_Zr = ${fuel_zr}
[]
[Problem]
type = ReferenceResidualProblem
extra_tag_vectors = 'ref'
reference_vector = 'ref'
group_variables = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = FIPDRodletMeshGenerator
fipd_geom_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} / ${pin_id} _design.csv'}
fipd_as_fabricated_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} / ${pin_id} _as_fabricated.csv'}
gap_bottom_length = 0.31e-3 # arbitrary
cladding_bottom_plug_length = 2.24e-3 # arbitrary
cladding_top_plug_length = 2.24e-3 # arbitrary
cladding_sidewall_radial_elements = 10
cladding_sidewall_axial_element_numbers = '2 150 150'
cladding_top_plug_radial_elements = 10
cladding_top_plug_axial_elements = 5
cladding_bottom_plug_radial_elements = 10
cladding_bottom_plug_axial_elements = 5
fuel_radial_elements = 6
fuel_axial_element_intervals = '0 1'
fuel_axial_element_numbers = '150'
use_default_cladding_sidewall_axial_element_intervals = true
elem_type = QUAD4
[]
[]
[Variables]
[temp]
initial_condition = 298
[]
[]
[AuxVariables]
# Aux variables for output
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[cumulative_damage_index]
order = CONSTANT
family = MONOMIAL
[]
[element_failed]
order = CONSTANT
family = MONOMIAL
[]
[solid_swell]
block = fuel
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
block = fuel
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
block = fuel
order = CONSTANT
family = MONOMIAL
[]
[hoop_stress]
order = CONSTANT
family = MONOMIAL
[]
[hoop_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[hoop_elastic_strain]
order = CONSTANT
family = MONOMIAL
[]
[total_hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[func_val1]
[]
[func_val2]
[]
# AuxVariables used for thermal expansion correction
[fuel_thermal_strain_xx]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[fuel_thermal_strain_yy]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[fuel_thm_exp]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[clad_thermal_eigenstrain_xx]
order = CONSTANT
family = MONOMIAL
block = cladding
[]
[clad_thm_exp]
order = CONSTANT
family = MONOMIAL
block = cladding
[]
[]
[Functions] #copied from fipd-tdep
[clad_od_temp]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /clad_od_temp_history_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
[]
[power_history]
type = PiecewiseLinear
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /power_history_ ${pin_id} .csv'}
[]
[pwr_axial_peaking_factors]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_power_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
[]
[pwr_axial_peaking_factors_elongate]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_power_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
fuel_elongation_pp = max_fuel_elongation
[]
[fflux_axial_peaking_factors]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_flux_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
extrapolate_to_zero = true
[]
[fflux_axial_peaking_factors_elongate]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_flux_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
extrapolate_to_zero = true
fuel_elongation_pp = max_fuel_elongation
[]
[flux_history]
type = PiecewiseLinear
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /flux_history_ ${pin_id} .csv'}
[]
[coolant_press_ramp]
type = PiecewiseLinear
x = '0 56465640'
y = '0.151e6 0.151e6'
[]
[id_vpp_func]
type = MetallicFuelWastageDegradationFunction
vectorpostprocessor_name = id_wastage
argument_column = y
wastage_type = ID
value_column = wastage_thickness
use_metadata = true
degradation_factor = 0.001
mesh_generator = 'gen'
transition_width = 1E-4
[]
[od_vpp_func]
type = MetallicFuelWastageDegradationFunction
vectorpostprocessor_name = od_wastage
argument_column = y
wastage_type = OD
value_column = cc_wastage_thickness
use_metadata = true
degradation_factor = 0.001
mesh_generator = 'gen'
transition_width = 1E-4
[]
[ci_temp]
type = PiecewiseLinearFromVectorPostprocessor
argument_column = y
component = y
value_column = temp
vectorpostprocessor_name = clad_inn_temp
[]
[na_vol]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = sodium_volume
scale_factor = -1.0
[]
[]
[Physics/SolidMechanics/QuasiStatic]
temperature = temp
[fuel]
strain = FINITE
add_variables = true
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress 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'
extra_vector_tags = 'ref'
block = fuel
eigenstrain_names = 'fuel_thermal_strain fuel_volumetric_strain'
[]
[clad]
strain = FINITE
add_variables = true
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress 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'
extra_vector_tags = 'ref'
block = cladding
eigenstrain_names = 'clad_swelling clad_thermal_eigenstrain'
[]
[]
[Kernels]
# Define kernels for the various terms in the PDE system
[gravity]
type = Gravity
variable = disp_y
value = -9.81
extra_vector_tags = 'ref'
[]
[heat]
type = HeatConduction
variable = temp
extra_vector_tags = 'ref'
[]
[heat_ie_f]
type = HeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
block = fuel
density_name = density
[]
[heat_ie_c]
type = HeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
block = cladding
density_name = density
[]
[heat_source]
type = FissionRateHeatSource
variable = temp
fission_rate = fission_rate
block = fuel
extra_vector_tags = 'ref'
[]
[]
[AuxKernels]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = fuel_outer_radial_surface
[]
[cdf_amount]
block = cladding
type = MaterialRealAux
property = cdf_failure
variable = cumulative_damage_index
[]
[failed_element]
boundary = 'cladding_outside_right'
type = MaterialRealAux
property = failed
variable = element_failed
[]
[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
[]
[volumetric_strain]
type = RankTwoScalarAux
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = timestep_end
block = fuel
[]
[hoop_stress]
type = RankTwoAux
rank_two_tensor = stress
variable = hoop_stress
index_j = 2
index_i = 2
execute_on = timestep_end
[]
[hoop_creep_strain]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = hoop_creep_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[hoop_elastic_strain]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = hoop_elastic_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[total_hoop_strain]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_hoop_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[func_val1]
type = FunctionAux
function = id_vpp_func
variable = func_val1
block = cladding
[]
[func_val2]
type = FunctionAux
function = od_vpp_func
variable = func_val2
block = cladding
[]
# AuxKernels used to correct thermal expansion
[fuel_thermal_strain_xx]
type = RankTwoAux
rank_two_tensor = fuel_thermal_strain
variable = fuel_thermal_strain_xx
index_j = 0
index_i = 0
execute_on = 'initial timestep_end'
block = fuel
[]
[fuel_thermal_strain_yy]
type = RankTwoAux
rank_two_tensor = fuel_thermal_strain
variable = fuel_thermal_strain_yy
index_j = 1
index_i = 1
execute_on = 'initial timestep_end'
block = fuel
[]
[fuel_thm_exp]
type = SpatialUserObjectAux
variable = fuel_thm_exp
execute_on = 'initial timestep_end'
user_object = fuel_thm_exp
block = fuel
[]
[clad_thermal_eigenstrain_xx]
type = RankTwoAux
rank_two_tensor = clad_thermal_eigenstrain
variable = clad_thermal_eigenstrain_xx
index_j = 0
index_i = 0
execute_on = 'initial timestep_end'
block = cladding
[]
[clad_thm_exp]
type = SpatialUserObjectAux
variable = clad_thm_exp
execute_on = 'initial timestep_end'
user_object = clad_thm_exp
block = cladding
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = cladding_inside_right
secondary = fuel_outer_radial_surface
penalty = 1e12
model = frictionless
normalize_penalty = true
tangential_tolerance = 1e-3
normal_smoothing_distance = 0.1
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = temp
primary = cladding_inside_right
secondary = fuel_outer_radial_surface
quadrature = true
gap_conductivity = 61.0
min_gap = 0.5e-03
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = centerline
value = 0.0
[]
[no_y_fuel]
type = DirichletBC
variable = disp_y
boundary = fuel_bottom
value = 0.0
[]
[no_y_clad]
type = DirichletBC
variable = disp_y
boundary = cladding_outside_bottom
value = 0.0
[]
[fuel_top_temp]
type = FunctionDirichletBC
boundary = fuel_top
variable = temp
function = ci_temp
[]
[surf] #copied from fipd-tdep
type = FunctionDirichletBC
variable = temp
boundary = 'cladding_outside_bottom cladding_outside_right cladding_outside_top'
function = clad_od_temp
[]
[Pressure]
[coolantPressure]
boundary = 'cladding_outside_bottom cladding_outside_right cladding_outside_top'
function = coolant_press_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 'fuel_outside_all cladding_inside_all'
initial_pressure = 0.084e6 # Pa
startup_time = 0
R = 8.3143
temperature = ave_temp_interior
volume = gas_volume
output = plenum_pressure
material_input = fis_gas_released
[]
[]
[]
[Materials]
[fission_rate]
type = UPuZrFissionRate
block = fuel
rod_linear_power = power_history
axial_power_profile = pwr_axial_peaking_factors
use_metadata = true
mesh_generator = gen
outputs = all
[]
[fission_rate_elongate]
type = UPuZrFissionRate
block = cladding
fission_rate_name = fission_rate
rod_linear_power = power_history
axial_power_profile = pwr_axial_peaking_factors_elongate
use_metadata = true
mesh_generator = gen
outputs = all
[]
[burnup]
type = UPuZrBurnup
initial_X_Pu = ${fuel_pu}
initial_X_Zr = ${fuel_zr}
density = ${fuel_density}
outputs = all
block = fuel
[]
[burnup_elongate]
type = UPuZrBurnup
initial_X_Pu = ${fuel_pu}
initial_X_Zr = ${fuel_zr}
density = ${fuel_density}
outputs = all
block = cladding
burnup_name = burnup
[]
[fast_neutron_flux]
type = FastNeutronFlux
calculate_fluence = true
rod_ave_lin_pow = flux_history
axial_power_profile = fflux_axial_peaking_factors
block = fuel
factor = 1.0
outputs = all
[]
[fast_neutron_flux_elongate]
type = FastNeutronFlux
calculate_fluence = true
rod_ave_lin_pow = flux_history
axial_power_profile = fflux_axial_peaking_factors_elongate
block = cladding
factor = 1.0
outputs = all
[]
[fuel_elasticity_tensor]
type = UPuZrElasticityTensor
block = fuel
temperature = temp
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'fuel_upuzrcreep'
block = fuel
[]
[fuel_upuzrcreep]
type = UPuZrCreepUpdate
block = fuel
temperature = temp
porosity = porosity
max_inelastic_increment = 2e-3
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 1.18e-5
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
[]
[fuel_volumetric_swelling]
type = UPuZrVolumetricSwellingEigenstrainLM
block = fuel
use_preset_bubble_size = true
anisotropic_factor = 1.26
temperature = temp
fission_rate = fission_rate
burnup = burnup
fis_gas_ret = fis_gas_ret
hydrostatic_stress = hydrostatic_stress
eigenstrain_name = fuel_volumetric_strain
gas_swelling_scale_factor = 1.0
outputs = all
[]
[metal_fuel_thermal]
type = UPuZrThermal
block = fuel
spheat_model = savage
thcond_model = lanl
porosity = porosity
temperature = temp
[]
[fuel_density]
type = StrainAdjustedDensity
displacements = 'disp_x disp_y'
block = fuel
strain_free_density = ${fuel_density}
[]
[fission_gas_behavior]
type = FgrUPuZrLM
block = fuel
temperature = temp
fission_rate = fission_rate
epsilon_c = 0.36
[]
[clad_elasticity_tensor]
type = SS316ElasticityTensor
temperature = temp
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
block = cladding
elastic_constants_model = legacy_ifr
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'clad_ss316creep'
block = cladding
[]
[clad_ss316creep]
type = SS316CreepUpdate
block = cladding
temperature = temp
fast_neutron_flux = fast_neutron_flux
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
[]
[clad_swelling]
type = SS316VolumetricSwellingEigenstrain
eigenstrain_name = clad_swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[thermal_expansion]
type = SS316ThermalExpansionEigenstrain
block = cladding
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_thermal]
type = SS316Thermal
block = cladding
temperature = temp
[]
[clad_density]
type = StrainAdjustedDensity
block = cladding
strain_free_density = 7874.0
[]
[longSS316_failure]
type = D9FailureClad
block = cladding
method = steady_state
temperature = temp
outputs = all
hoop_stress = stress_zz # Since 2D-RZ
[]
[wastage_thickness]
type = MetallicFuelWastage
method = flux_ss316
temperature = temp
scale_factor = 1
boundary = cladding_inside_right
outputs = all
[]
[cc_wastage_thickness]
type = MetallicFuelCoolantWastage
clad_material = SS316
use_effective_method = true
temperature = temp
scale_factor = 1
boundary = cladding_outside_right
outputs = all
[]
[]
[Dampers]
[limitT]
type = MaxIncrement
max_increment = 50
variable = 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 = 100
l_tol = 1e-3
nl_max_its = 50
nl_rel_tol = 1e-5
nl_abs_tol = 1e-7
end_time = ${time_last}
dtmin = 1
dtmax = ${max_dt}
[Quadrature]
order = fifth
side_order = seventh
[]
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_function = power_history
#max_function_change = 300 # Removed to decrease run time
timestep_limiting_postprocessor = creep_timestep
dt = 100
iteration_window = 2
optimal_iterations = 10
force_step_every_function_point = true
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
outputs = 'csv_general console'
[]
[num_lin_it]
type = NumLinearIterations
outputs = csv_general
[]
[num_nonlin_it]
type = NumNonlinearIterations
outputs = csv_general
[]
[tot_lin_it]
type = CumulativeValuePostprocessor
postprocessor = num_lin_it
outputs = csv_general
[]
[tot_nonlin_it]
type = CumulativeValuePostprocessor
postprocessor = num_nonlin_it
outputs = csv_general
[]
[alive_time]
type = PerfGraphData
section_name = Root
data_type = TOTAL
outputs = csv_general
[]
[ave_temp_interior]
type = SideAverageValue
boundary = cladding_inside_top
variable = temp
execute_on = 'initial linear'
outputs = csv_general
[]
[approx_FCT]
type = AverageNodalVariableValue
boundary = centerline
variable = temp
outputs = csv_general
[]
[max_approx_FCT]
type = TimeExtremeValue
value_type = max
postprocessor = approx_FCT
outputs = csv_general
[]
[ave_FST]
type = SideAverageValue
boundary = fuel_outer_radial_surface
variable = temp
outputs = csv_general
[]
[max_ave_FST]
type = TimeExtremeValue
value_type = max
postprocessor = ave_FST
outputs = csv_general
[]
[ave_CIT]
type = SideAverageValue
boundary = cladding_inside_right
variable = temp
outputs = csv_general
[]
[max_ave_CIT]
type = TimeExtremeValue
value_type = max
postprocessor = ave_CIT
outputs = csv_general
[]
[avg_clad_temp]
type = ElementAverageValue
variable = temp
block = cladding
outputs = csv_general
[]
[peak_clad_temp]
type = ElementExtremeValue
variable = temp
value_type = max
block = cladding
outputs = csv_general
[]
[peak_fuel_temp]
type = ElementExtremeValue
variable = temp
value_type = max
block = fuel
outputs = csv_general
[]
[max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = max
block = fuel
outputs = csv_general
[]
[min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = min
block = fuel
outputs = csv_general
[]
[avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = fuel
outputs = csv_general
[]
[peak_porosity]
type = ElementExtremeValue
variable = porosity
value_type = max
block = fuel
outputs = csv_general
[]
[clad_inner_vol]
type = InternalVolume
boundary = cladding_inside_all
outputs = csv_general
[]
[pellet_volume]
type = InternalVolume
boundary = fuel_outside_all
outputs = csv_general
[]
[gas_volume]
type = InternalVolume
boundary = 'fuel_outside_all cladding_inside_all'
execute_on = 'initial timestep_end'
addition = na_vol
outputs = csv_general
[]
[clad_fuel_gap]
type = NodalExtremeValue
variable = penetration
boundary = fuel_outer_radial_surface
outputs = csv_general
[]
[max_cont_press]
type = NodalExtremeValue
variable = contact_pressure
boundary = fuel_outer_radial_surface
outputs = csv_general
[]
[flux_from_clad]
type = SideDiffusiveFluxIntegral
variable = temp
boundary = cladding_inside_right
diffusivity = thermal_conductivity
outputs = csv_general
[]
[flux_from_fuel]
type = SideDiffusiveFluxIntegral
variable = temp
boundary = fuel_outer_radial_surface
diffusivity = thermal_conductivity
outputs = csv_general
[]
[rod_total_power]
type = ElementIntegralPower
variable = temp
use_material_fission_rate = true
fission_rate_material = fission_rate
block = fuel
outputs = csv_general
[]
[LHGR_W_per_cm]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.01
outputs = csv_general
[]
[average_burnup]
type = ElementAverageValue
block = fuel
variable = burnup
outputs = csv_general
[]
[max_cdf]
type = ElementExtremeValue
value_type = max
variable = cumulative_damage_index
outputs = csv_general
[]
[fis_gas_produced]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_prod
block = fuel
outputs = csv_general
[]
[fis_gas_released]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_rel
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[creep_timestep]
type = MaterialTimeStepPostprocessor
block = fuel
outputs = 'csv_general console'
[]
[hydrostatic_stress]
type = ElementAverageValue
variable = hydrostatic_stress
execute_on = 'initial timestep_end'
block = fuel
outputs = csv_general
[]
[solid_swelling]
type = ElementAverageValue
variable = solid_swell
block = fuel
outputs = csv_general
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = fuel
outputs = csv_general
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = fuel
outputs = csv_general
[]
[fission_rate]
type = ElementAverageValue
variable = fission_rate
block = fuel
outputs = csv_general
[]
[porosity]
type = ElementAverageValue
variable = porosity
block = fuel
outputs = csv_general
[]
[gaseous_porosity]
type = ElementAverageValue
variable = gaseous_porosity
block = fuel
outputs = csv_general
[]
[fis_gas_percent]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
outputs = csv_general
[]
[max_clad_hoop_creep]
type = ElementExtremeValue
value_type = max
block = cladding
variable = hoop_creep_strain
outputs = csv_general
[]
[max_clad_creep_strain_mag]
type = ElementExtremeValue
value_type = max
block = cladding
variable = creep_strain_mag
outputs = csv_general
[]
[max_total_hoop_strain]
type = ElementExtremeValue
value_type = max
block = cladding
variable = total_hoop_strain
outputs = csv_general
[]
[max_fuel_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = fuel_top
outputs = csv_general
[]
[avg_fuel_ax_thm_str]
type = AxisymmetricCenterlineAverageValue
variable = fuel_thermal_strain_yy
boundary = fuel_inner_radial_surface
outputs = csv_general
[]
[max_clad_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'cladding_outside_top cladding_outside_right'
outputs = csv_general
[]
[max_wastagethickness]
type = ElementExtremeValue
value_type = max
variable = wastage_thickness
outputs = 'console'
[]
[avg_fuel_temp]
type = ElementAverageValue
variable = temp
block = fuel
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = csv_general
[]
[]
[VectorPostprocessors]
[clad_x_disp]
type = NodalValueSampler
variable = disp_x
boundary = cladding_outside_right
sort_by = y
outputs = none
[]
[fuel_cl_temp]
type = NodalValueSampler
variable = temp
boundary = centerline
sort_by = y
outputs = none
[]
[fuel_surf_temp]
type = NodalValueSampler
variable = temp
boundary = fuel_outer_radial_surface
sort_by = y
outputs = none
[]
[clad_inn_temp]
type = NodalValueSampler
variable = temp
boundary = cladding_inside_right
sort_by = y
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
[clad_out_temp]
type = NodalValueSampler
variable = temp
boundary = cladding_outside_right
sort_by = y
outputs = none
[]
[id_wastage]
type = FuelRodLineValueSampler
variable = wastage_thickness
material = 'clad'
fraction = 0.0
num_points = 600
orientation = 'vertical'
fuel_pin_geometry = 'pin_geometry'
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
[od_wastage]
type = FuelRodLineValueSampler
variable = cc_wastage_thickness
material = 'clad'
fraction = 1.0
num_points = 600
orientation = 'vertical'
fuel_pin_geometry = 'pin_geometry'
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
# PIE Comparison VPPs
[nrad_comparison_0]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_0
enable = ${enable_0}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_0'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = gas_swelling
solid_swelling_pp_name = solid_swelling
[]
[nrad_comparison_a]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423A_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_a
enable = ${enable_a}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_a'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = gas_swelling
solid_swelling_pp_name = solid_swelling
[]
[nrad_comparison_b]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423B_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_b
enable = ${enable_b}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_b'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = gas_swelling
solid_swelling_pp_name = solid_swelling
[]
[nrad_comparison_c]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423C_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_c
enable = ${enable_c}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_c'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = gas_swelling
solid_swelling_pp_name = solid_swelling
[]
[]
[UserObjects]
[pin_geometry]
type = FuelPinGeometry
clad_bottom = cladding_outside_bottom
clad_inner_wall = cladding_inside_right
clad_outer_wall = cladding_outside_right
clad_top = cladding_outside_top
pellet_exteriors = fuel_outside_all
[]
[fuel_thm_exp]
type = LayeredAverage
variable = fuel_thermal_strain_xx
direction = y
num_layers = 1000
block = fuel
[]
[clad_thm_exp]
type = LayeredAverage
variable = clad_thermal_eigenstrain_xx
direction = y
num_layers = 1000
block = cladding
[]
[]
[Outputs]
perf_graph = true
color = false
[console]
type = Console
max_rows = 25
time_step_interval = 1
output_linear = true
sync_times = ${time_spots}
[]
[csv_vpp_0]
type = CSV
sync_only = true
sync_times = ${time_spots_0}
enable = ${enable_0}
create_latest_symlink = true
[]
[csv_vpp_a]
type = CSV
sync_only = true
sync_times = ${time_spots_a}
enable = ${enable_a}
create_latest_symlink = true
[]
[csv_vpp_b]
type = CSV
sync_only = true
sync_times = ${time_spots_b}
enable = ${enable_b}
create_latest_symlink = true
[]
[csv_vpp_c]
type = CSV
sync_only = true
sync_times = ${time_spots_c}
enable = ${enable_c}
create_latest_symlink = true
[]
[csv_general]
type = CSV
sync_times = ${time_spots}
[]
[extra_csv]
type = CSV
sync_only = true
sync_times = ${time_spots_extra}
[]
[extra_csv_0]
type = CSV
sync_only = true
sync_times = ${time_spots_0}
enable = ${enable_0}
[]
[extra_csv_a]
type = CSV
sync_only = true
sync_times = ${time_spots_a}
enable = ${enable_a}
[]
[extra_csv_b]
type = CSV
sync_only = true
sync_times = ${time_spots_b}
enable = ${enable_b}
[]
[extra_csv_c]
type = CSV
sync_only = true
sync_times = ${time_spots_c}
enable = ${enable_c}
[]
[exodus]
type = Exodus
sync_only = true
sync_times = ${time_spots}
[]
[]