- axial_relocation_objectName of the AxialRelocationUserObject that determines whether the fuel has crumbled.
C++ Type:UserObjectName
Controllable:No
Description:Name of the AxialRelocationUserObject that determines whether the fuel has crumbled.
- cladding_failure_statusName of the UserObject that contains the failure status in each layer.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the failure status in each layer.
- fuel_pin_geometryName of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject
C++ Type:UserObjectName
Controllable:No
Description:Name of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject
- gas_mixtureCalculates the gas mixture in the void space of a fuel element.
C++ Type:VectorPostprocessorName
Unit:(no unit assumed)
Controllable:No
Description:Calculates the gas mixture in the void space of a fuel element.
- layered_clad_internal_volumeName of the UserObject that contains the layered internal volume.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered internal volume.
- layered_fuel_temperatureThe name of the UserObject that contains the layered average temperature for the fuel.
C++ Type:UserObjectName
Controllable:No
Description:The name of the UserObject that contains the layered average temperature for the fuel.
- layered_gas_gap_temperatureName of the UserObject that contains the layered plenum temperature.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered plenum temperature.
- layered_maximum_clad_radiusName of the UserObject that contains the layered maximum cladding inner radius.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered maximum cladding inner radius.
- layered_maximum_fuel_radiusName of the UserObject that contains the layered maximum fuel outer radius.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered maximum fuel outer radius.
- out_of_plane_strain_claddingName of the UserObject that contains the layered average out_of_plane_strain in the cladding.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered average out_of_plane_strain in the cladding.
- out_of_plane_strain_fuelName of the UserObject that contains the layered average out_of_plane_strain in the fuel.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered average out_of_plane_strain in the fuel.
AxialGasCommunication
Computes the axial transport of gas inside a fuel rod post rupture.
Description
AxialGasCommunication calculates movement of the fill gas from the plenum to the ballooned area of the fuel rod under Loss of Coolant Accident (LOCA) conditions after cladding rupture. As the gas moves the local gas pressure varies. The rate at which the gas is able to flow depends upon the state of the fuel between the plenum and ballooned regions. The implementation of the axial gas communication model currently makes use of the Layered1DAction capabilities in BISON. The model is based off of Khvostov et al. (2011).
The gas flow through a junction is given by
where is the dynamic viscosity Lemmon et al. (2025) of the gas in the rod, is the effective local hydraulic diameter of the rod at axial co-ordinate and is the gas volume at that co-ordinate. Using the ideal gas law and separation of variables one arrives at:
where is the number of moles passing through length , is the ideal gas constant (8.3145 J/mol-K) and is the local gas temperature. Upon integration:
where is the pressure in the plenum and is the pressure in the ballooned region
where is the rupture location and is the effective length between the plenum and the rupture location.
Since the implementation in BISON uses the Layered1D framework, the calculation is completed by computing for each layer from the plenum to the the rupture coordinate. The effective hydraulic diameter is computed based upon the state of the fuel. It is a function of the initial hydraulic diameter between the fuel and cladding starting from the base irradiation of the fuel as well as the additional pathways that form within the fuel during cladding ballooning. Parallel connection of the initial and emergent paths sum to allow for a combined total hydraulic diameter:
where is the initial gap path and is the hydraulic diameter that evolves with the fuel during the transient.
For the initial gap path:
where is the inner diameter of the deforming cladding and is the pellet diameter. For the evolving fuel component, this follows the relation:
where is the average particle size of the fragmented fuel, is the effective packing fraction of the fuel, is the initial fuel outer diameter, and is the current pellet diameter. Once the rate of moles leaving the plenum into the balloon is known, the updated local pressure can be computed using the new amount of moles.
Immediately upon rupture, the pressure in the balloon region is set to the external pressure of the rod.
Example Input Syntax
[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
[axial_gas_communication]
type = AxialGasCommunication<<<{"description": "Computes the axial transport of gas inside a fuel rod post rupture.", "href": "AxialGasCommunication.html"}>>>
direction<<<{"description": "The direction of the layers."}>>> = y
num_layers<<<{"description": "The number of layers."}>>> = 33
fuel_pin_geometry<<<{"description": "Name of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject"}>>> = fuel_pin_geometry
out_of_plane_strain_fuel<<<{"description": "Name of the UserObject that contains the layered average out_of_plane_strain in the fuel."}>>> = fuel_strain_yy
out_of_plane_strain_cladding<<<{"description": "Name of the UserObject that contains the layered average out_of_plane_strain in the cladding."}>>> = cladding_strain_yy
layered_clad_internal_volume<<<{"description": "Name of the UserObject that contains the layered internal volume."}>>> = layered_clad_internal_volume
layered_maximum_clad_radius<<<{"description": "Name of the UserObject that contains the layered maximum cladding inner radius."}>>> = layered_maximum_clad_radius
layered_maximum_fuel_radius<<<{"description": "Name of the UserObject that contains the layered maximum fuel outer radius."}>>> = layered_maximum_fuel_radius
layered_fuel_temperature<<<{"description": "The name of the UserObject that contains the layered average temperature for the fuel."}>>> = layered_fuel_average
layered_gas_gap_temperature<<<{"description": "Name of the UserObject that contains the layered plenum temperature."}>>> = gap_layer_temperature
gas_mixture<<<{"description": "Calculates the gas mixture in the void space of a fuel element."}>>> = gas_mixture_thermal_contact
axial_relocation_object<<<{"description": "Name of the AxialRelocationUserObject that determines whether the fuel has crumbled."}>>> = axial_relocation
cladding_failure_status<<<{"description": "Name of the UserObject that contains the failure status in each layer."}>>> = cladding_failure_status
initial_pressure<<<{"description": "The initial pressure in the rod."}>>> = 4.0e6
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial TIMESTEP_END'
#debug_output = true
[]
[](test/tests/axial_gas_communication/clad_displacement_only.i)Input Parameters
- absolute_tolerance1e-13Absolute convergence tolerance for Newton iteration
Default:1e-13
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Absolute convergence tolerance for Newton iteration
- acceptable_multiplier10Factor applied to relative and absolute tolerance for acceptable nonlinear convergence if iterations are no longer making progress
Default:10
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Factor applied to relative and absolute tolerance for acceptable nonlinear convergence if iterations are no longer making progress
- blockThe list of block ids (SubdomainID) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of block ids (SubdomainID) that this object will be applied
- damping_factor0.8Factor applied to step size if guess does not satisfy damping criteria
Default:0.8
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Factor applied to step size if guess does not satisfy damping criteria
- debug_outputFalseDisplays in-depth information on gas flow, moles, and Ideal Gas Law quantities for each layer.
Default:False
C++ Type:bool
Controllable:No
Description:Displays in-depth information on gas flow, moles, and Ideal Gas Law quantities for each layer.
- distanceThe gap distance variable name
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The gap distance variable name
- equilibrium_pressure101325The pressure outside the pellet. Atomospheric pressure of 101325 Pascals is default.
Default:101325
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The pressure outside the pellet. Atomospheric pressure of 101325 Pascals is default.
- fluid_properties_mixName of the UserObject that calculates the fluid(gas) properties within the pellet.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that calculates the fluid(gas) properties within the pellet.
- initial_pressureThe initial pressure in the rod.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The initial pressure in the rod.
- layer_bounding_blockList of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:List of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.
- material_inputThe name of the postprocessor(s) that holds the amount of material injected into the plenum.
C++ Type:std::vector<PostprocessorName>
Unit:(no unit assumed)
Controllable:No
Description:The name of the postprocessor(s) that holds the amount of material injected into the plenum.
- material_input_typeFISSION_GAS_RELEASESelect type of method material is added or subtracted from gas. The choices are: FISSION_GAS_RELEASE OTHER. NOTE: Currently only fission gas is valid.
Default:FISSION_GAS_RELEASE
C++ Type:MultiMooseEnum
Options:FISSION_GAS_RELEASE, OTHER
Controllable:No
Description:Select type of method material is added or subtracted from gas. The choices are: FISSION_GAS_RELEASE OTHER. NOTE: Currently only fission gas is valid.
- max_damping_iterations100Maximum number of damping steps per linear iteration of nested solve
Default:100
C++ Type:unsigned int
Controllable:No
Description:Maximum number of damping steps per linear iteration of nested solve
- max_iterations1000Maximum number of nonlinear iterations
Default:1000
C++ Type:unsigned int
Controllable:No
Description:Maximum number of nonlinear iterations
- min_iterations3Minimum number of nonlinear iterations to execute before accepting convergence
Default:3
C++ Type:unsigned int
Controllable:No
Description:Minimum number of nonlinear iterations to execute before accepting convergence
- refab_pressureThe pressure of fill gas at refabrication.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The pressure of fill gas at refabrication.
- refab_temperatureThe temperature at refabrication.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The temperature at refabrication.
- refab_timeThe time at which the plenum pressure must be reinitialized due to fuel rod refabrication.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The time at which the plenum pressure must be reinitialized due to fuel rod refabrication.
- refab_typeThe type of refabrication. 0 for instantaneous reset of gas, 1 for reset with constant fraction until next refabrication
C++ Type:std::vector<unsigned int>
Controllable:No
Description:The type of refabrication. 0 for instantaneous reset of gas, 1 for reset with constant fraction until next refabrication
- refab_volumeThe gas volume at refabrication.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The gas volume at refabrication.
- relative_tolerance1e-08Relative convergence tolerance for Newton iteration
Default:1e-08
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Relative convergence tolerance for Newton iteration
- step_size_tolerance1e-15Minimum step size of linear iterations relative to value of the solution
Default:1e-15
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Minimum step size of linear iterations relative to value of the solution
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Options:XFEM_MARK, NONE, INITIAL, LINEAR, NONLINEAR_CONVERGENCE, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
Execution Scheduling Parameters
- average_radius1When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.
Default:1
C++ Type:unsigned int
Controllable:No
Description:When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.
- cumulativeFalseWhen true the value in each layer is the sum of the values up to and including that layer
Default:False
C++ Type:bool
Controllable:No
Description:When true the value in each layer is the sum of the values up to and including that layer
- positive_cumulative_directionTrueWhen 'cumulative' is true, whether the direction for summing the cumulative value is the positive direction or negative direction
Default:True
C++ Type:bool
Controllable:No
Description:When 'cumulative' is true, whether the direction for summing the cumulative value is the positive direction or negative direction
- sample_typedirectHow to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
Default:direct
C++ Type:MooseEnum
Options:direct, interpolate, average
Controllable:No
Description:How to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.
Value Sampling / Aggregating Parameters
- boundsThe 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.
- directionThe direction of the layers.
C++ Type:MooseEnum
Options:x, y, z
Controllable:No
Description:The direction of the layers.
- direction_maxMaximum coordinate along 'direction' that bounds the layers
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Maximum coordinate along 'direction' that bounds the layers
- direction_minMinimum coordinate along 'direction' that bounds the layers
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Minimum coordinate along 'direction' that bounds the layers
- num_layersThe number of layers.
C++ Type:unsigned int
Controllable:No
Description:The number of layers.
Layers Extent And Definition 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.
- use_displaced_meshTrueWhether 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:True
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
- 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
- (assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_4/IFA_650_4_part2_gas_communication.i)
- (test/tests/axial_gas_communication/expanding_fuel_impermeable.i)
- (test/tests/axial_gas_communication/clad_displacement_only.i)
- (test/tests/axial_gas_communication/cladding_burst_with_permeable_fuel.i)
- (test/tests/axial_gas_communication/temperature_increase_only.i)
- (test/tests/axial_gas_communication/dynamic_viscosity.i)
- (assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_4/IFA_650_4_part1_gas_communication.i)
- (test/tests/axial_gas_communication/expanding_fuel_permeable.i)
- (assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_4/IFA_650_4_part3_gas_communication.i)
- (test/tests/axial_gas_communication/fission_gas_release_only.i)
- (test/tests/axial_gas_communication/split_into_two_seperate_regions.i)
- (test/tests/axial_gas_communication/cladding_burst_with_impermeable_fuel.i)
References
- G. Khvostov, Wiesenack W., Zimmermann, M.A., and G. Ledergerber.
Some insights into the role of axial gas flow in fuel rod behaviour during the loca based on halden tests and calculations with the FALCON-PSI code.
Nuclear Engineering and Design, 241:1500–1507, 2011.[BibTeX]
@ARTICLE{Khvostov2011_b, author = "Khvostov, G. and Wiesenack W. and Zimmermann, M.A. and Ledergerber, G.", title = "Some insights into the role of axial gas flow in fuel rod behaviour during the LOCA based on Halden tests and calculations with the {FALCON-PSI} code", journal = "Nuclear Engineering and Design", year = "2011", volume = "241", pages = "1500-1507" } - E. W. Lemmon, I. H. Bell, M. L. Huber, and M. O. McLinden.
NIST Chemistry WebBook, NIST Standard Reference Database.
Volume 69.
National Institute of Standards and Technology, 2025.
doi:https://doi.org/10.18434/T4D303.[BibTeX]
@book{NIST_thermophysical_properties, editor = "Linstrom, P.J. and Mallard, W.G.", author = "Lemmon, E. W. and Bell, I. H. and Huber, M. L. and McLinden, M. O.", title = "NIST Chemistry WebBook, NIST Standard Reference Database", volume = "69", chapter = "Thermophysical Properties of Fluid Systems", publisher = "National Institute of Standards and Technology", year = "2025", doi = "https://doi.org/10.18434/T4D303", language = "en" }
(test/tests/axial_gas_communication/clad_displacement_only.i)
# The lowest level of the clad is displaced in the x direction, increasing the volume.
# The temperature is held constant. Since it is a closed system, the number of moles
# must be constant. The pressure must decrease following the Ideal Gas Law.
# Volume = (.0051^2-.005^2)*pi*.5 + .0051^2*.3*pi = 2.6072e-5
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.012542963362695812
#
[Functions]
[clad_displacement_function]
type = ParsedFunction
expression = 'if(t > .1,if(y = 0.011573333333333333, 2.0e-1 * t * sin(pi * y / 0.771185), 0.0),0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.01255660309737312643751928
[]
[]
[BCs]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[outer_radius_displacement]
type = DirichletBC
variable = disp_x
boundary = '10'
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[]
[AuxKernels]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
gas_mixture = gas_mixture_thermal_contact
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
#debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
# automatic_scaling = true
# compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.1
n_startup_steps = 1
dt = .1
end_time =.5
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_BEGIN'
[]
[change_over_time_moles]
type = ChangeOverTimePostprocessor
postprocessor = total_moles
change_with_respect_to_initial = true
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[chkfile]
type = CSV
show = 'change_over_time_moles'
execute_on = 'FINAL'
[]
[]
(assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_4/IFA_650_4_part2_gas_communication.i)
[GlobalParams]
density = 10452.96
initial_porosity = 0.048
order = SECOND
family = LAGRANGE
displacements = disp_x
temperature = temperature
energy_per_fission = 3.2e-11 #J/fission
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
acceptable_multiplier = 10
restart_file_base = 'IFA_650_4_part1_gas_communication_checkpoint_cp/LATEST'
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
slices_per_block = 30
slices_within_upper_plenum = 3
pellet_outer_radius = 4.565e-3
clad_gap_width = 0.085e-3
clad_thickness = 0.725e-3
fuel_height = 0.480
plenum_height = 0.291185
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 11
nx_c = 5
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[disp_x]
[]
[temperature]
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
scale_factor = 1.0
format = columns
[]
[axial_peaking_factors]
type = PiecewiseBilinear
data_file = axial_peaking_factors.csv
axis = 1
scale_factor = 1
[]
[pressure_ramp]
type = PiecewiseLinear
data_file = coolant_pressure.csv
scale_factor = 1
format = columns
[]
[average_htc]
type = PiecewiseLinear
data_file = average_coolant_htc.csv
format = columns
scale_factor = 1
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[heat_sink_temperature]
type = PiecewiseBilinear
data_file = heater_temp.csv
scale_factor = 1
axis = 1
[]
[clad_outer_temperature]
type = PiecewiseBilinear
data_file = clad_surface_temp.csv
scale_factor = 1
axis = 1
[]
[heat_transfer_mode]
type = PiecewiseConstant
x = '-200 172489073 172489661'
y = '9 9 8 '
direction = 'right'
[]
[clad_axial_pressure]
type = CladdingAxialPressureFunction
plenum_pressure = plenum_pressure
coolant_pressure = pressure_ramp
coolant_pressure_scaling_factor = 1.0
fuel_pin_geometry = fuel_pin_geometry
[]
[fuel_axial_pressure]
type = ParsedFunction
expression = plenum_pressure
symbol_names = plenum_pressure
symbol_values = plenum_pressure
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = fuel
[]
[hoop_stress]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase]
order = CONSTANT
family = MONOMIAL
[]
[oxide_thickness]
order = CONSTANT
family = MONOMIAL
[]
[burst]
order = CONSTANT
family = MONOMIAL
[]
[gap_conductance]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[creep_rate]
order = CONSTANT
family = MONOMIAL
[]
[gap_thermal_conductivity]
order = CONSTANT
family = MONOMIAL
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[layered_maximum_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[gap_layer_pressure]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_moles]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_mole_rate]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_temperature]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_volume]
order = CONSTANT
family = MONOMIAL
[]
[plenum_layer_pressure]
order = CONSTANT
family = MONOMIAL
[]
[total_moles]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
block = fuel
burnup_function = burnup
axial_relocation_object = axial_relocation
extra_vector_tags = 'ref'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_pressure_function = fuel_axial_pressure
strain = finite
block = fuel
eigenstrain_names = 'fuel_thermal_strain fuel_swelling_strain fuel_relocation_strain axial_relocation_eigenstrain'
decomposition_method = EigenSolution
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress'
extra_vector_tags = 'ref'
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
out_of_plane_pressure_function = clad_axial_pressure
block = clad
eigenstrain_names = 'clad_thermal_strain clad_irradiation_strain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_zz creep_strain_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[Burnup]
[burnup]
block = fuel
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.035 0.965 0 0 0 0'
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
block = clad
variable = fast_neutron_flux
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
block = clad
variable = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = fuel
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[hoop_stress]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = hoop_stress
scalar_type = HoopStress
execute_on = timestep_end
[]
[effective_creep_strain]
type = MaterialRealAux
block = clad
variable = effective_creep_strain
property = effective_creep_strain
execute_on = 'timestep_end'
[]
[layered_maximum_fuel_radius]
type = SpatialUserObjectAux
block = fuel
user_object = layered_maximum_fuel_radius
variable = layered_maximum_fuel_radius
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_pressure]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
variable = gap_layer_pressure
output_option = 'LAYER_PRESSURE'
execute_on = 'final timestep_end'
[]
[gap_layer_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_MOLES'
variable = gap_layer_moles
execute_on = 'timestep_end'
[]
[gap_layer_mole_rate]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'PLENUM_MOLE_RATE'
variable = gap_layer_mole_rate
execute_on = 'timestep_end'
[]
[gap_layer_temperature]
type = SpatialUserObjectAux
user_object = gap_layer_temperature
variable = gap_layer_temperature
execute_on = 'timestep_end'
[]
[gap_layer_volume]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_VOLUME'
variable = gap_layer_volume
execute_on = 'timestep_end'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
execute_on = 'initial linear'
[]
[oxide_thickness]
type = MaterialRealAux
boundary = 2
variable = oxide_thickness
property = oxide_scale_thickness
execute_on = 'initial linear'
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
boundary = 10
property = gap_conductance
variable = gap_conductance
execute_on = 'initial linear'
[]
[coolant_htc]
type = MaterialRealAux
property = coolant_channel_htc
variable = coolant_htc
boundary = 2
execute_on = 'initial linear'
[]
[creep_rate]
type = MaterialRealAux
block = clad
variable = creep_rate
property = creep_rate
execute_on = timestep_end
[]
[gas_th_cond]
type = MaterialRealAux
variable = gap_thermal_conductivity
property = gap_conductivity
boundary = 10
execute_on = 'initial linear'
[]
[]
[AxialRelocation]
[relocation]
mesh_generator = layered1D_mesh
rod_ave_lin_pow = power_history
axial_direction = y
fuel_blocks = fuel
clad_blocks = clad
contact_pressure_variable = contact_pressure
out_of_plane_strain_variable = strain_yy
penetration_variable = penetration
clad_inner_volume_addition = 3.17755E-06 # Addition of the volume to bring the starting total volume to 21.5cm^3 to begin the transient experiment
burnup_variable = burnup
temperature = temperature
axial_relocation_output_options = 'MASS_FRACTION PACKING_FRACTION'
use_axial_gas_communication = true
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
heat_transfer_mode = heat_transfer_mode
heat_transfer_coefficient = average_htc # Calculated from an initial simulation of the base irradiation using the inlet_pressure, inlet_massflux, and inlet_temperature commented out below.
inlet_temperature = heat_sink_temperature # K
effective_emissivity = 0.75
# inlet_temperature = 580
# inlet_pressure = 15.3e6 # Pa
# inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.01075 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_gas_types = 'He Ar'
initial_fractions = '0.05 0.95'
# initial_moles = initial_moles
# gas_released = fis_gas_released
plenum_pressure = plenum_pressure
contact_pressure = contact_pressure
jump_distance_model = LANNING
roughness_coef = 3.2
refab_gas_types = 'He Ar'
refab_fractions = '0.05 0.95'
refab_time = 172387800
refab_type = 0
output_gas_mixture = true
outputs = GasMixture
execution_order_group = -2
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = 2
function = pressure_ramp
factor = 1.0
[]
[]
[clad_outer_temp]
type = FunctionDirichletBC
boundary = 2
variable = temperature
function = clad_outer_temperature
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 2.0e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = 'clad_volume pellet_volume'
output = plenum_pressure
refab_time = 172387800
refab_pressure = 4.0e6
refab_temperature = 295.0
refab_volume = 2.15e-05
incremental_calculation = true
execute_on = 'INITIAL LINEAR'
axial_gas_communication = axial_gas_communication
[]
[]
[]
[LayeredPlenumTemperature]
[plenum_temp]
boundary = 5
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[Controls]
[period1]
type = TimePeriod
disable_objects = 'BCs/clad_outer_temp'
start_time = 172489043
end_time = 172489661
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = fuel
thermal_conductivity_model = STAICU
hbs_porosity_correction = KAMPF
model_hbs_formation = true
temperature = temperature
burnup_function = burnup
axial_relocation_object = axial_relocation
gap_thermal_conductivity = layered_average_gap_conductivity
[]
[relocation]
type = UO2RelocationEigenstrain
block = fuel
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
fuel_pin_geometry = fuel_pin_geometry
burnup_relocation_stop = 0.024
relocation_activation1 = 5000.0
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
[]
[fuel_thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 10.0e-6
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
[]
[fuel_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = fuel
burnup_function = burnup
initial_fuel_density = 10452.96
eigenstrain_name = fuel_swelling_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = fuel
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
transient_option = MICROCRACKING_BURNUP
diff_coeff_option = TURNBULL_D1_D2
gbs_model = true
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = fuel
fragmentation_model = BARANI
temperature = temperature
rod_ave_lin_pow = power_history
#axial_relocation_object = axial_relocation
crumbling_scale_factor = 0.0001
[]
[fuel_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = fuel
[]
[fuel_creep]
type = UO2CreepUpdate
block = fuel
temperature = temperature
burnup_function = burnup
initial_grain_radius = 5.0e-6
[]
[HBS]
type = HighBurnupStructureFormation
block = fuel
burnup_function = burnup
temperature = temperature
output_properties = 'hbs_volume_fraction'
outputs = 'exodus'
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
[]
[stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zrycreep'
block = clad
[]
[zrycreep]
type = ZryCreepLOCAUpdate
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
zircaloy_material_type = stress_relief_annealed
block = clad
[]
[thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_strain
[]
[irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.65e-03
clad_outer_radius = 5.375e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = cathcart
use_coolant_channel = true
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = plastic_instability
hoop_stress = hoop_stress
#hoop_creep_strain = creep_strain_zz
effective_strain_rate_creep = creep_rate
temperature = temperature
fraction_beta_phase = fract_beta_phase
[]
[clad_thermal]
type = ZryThermal
block = clad
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = 10452.96
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[]
[UserObjects]
[terminator]
type = Terminator
expression = 'burst > 0'
execute_on = timestep_end
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[layered_fuel_average]
type = LayeredSideAverage
variable = temperature
direction = y
num_layers = 30
boundary = 2
direction_min = 0
direction_max = .48
use_displaced_mesh = false
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_temperature]
type = LayeredGasGapTemperatureUserObject
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
gap_temp = gap_value
variable = temperature
boundary = '5'
distance = pt_distance
execute_on = 'INITIAL TIMESTEP_BEGIN'
execution_order_group = -1
[]
[cladding_failure_status]
type = LayeredSideAverage
variable = burst
direction = y
num_layers = 30
boundary = 2
direction_min = 0
direction_max = .48
execute_on = 'TIMESTEP_BEGIN'
[]
[layered_maximum_fuel_radius]
type = LayeredNodalExtremeValue
variable = 'outer_fuel_radius'
direction_min = 0.0
direction_max = 0.48
num_layers = 30
direction = y
boundary = 10
value_type = max
execute_on = 'INITIAL TIMESTEP_END'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 2.0e6
material_input = 'fis_gas_released'
execute_on = 'initial timestep_end'
debug_output = true
[]
[]
[Postprocessors]
[ave_temp_interior]
type = LayeredSideAverageValuePostprocessor
boundary = 9
variable = temperature
execute_on = 'initial linear'
fuel_pin_geometry = fuel_pin_geometry
[]
[pellet_volume_2]
type = LayeredInternalVolumePostprocessor
boundary = 8
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial linear'
[]
[avg_clad_temp]
type = LayeredSideAverageValuePostprocessor
boundary = 7
variable = temperature
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial linear'
[]
[fis_gas_produced]
type = LayeredElementIntegralFisGasGeneratedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_released]
type = LayeredElementIntegralFisGasReleasedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_grain]
type = LayeredElementIntegralFisGasGrainSifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_boundary]
type = LayeredElementIntegralFisGasBoundarySifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = fuel_pin_geometry
[]
[fission_gas_release]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[average_coolant_htc]
type = LayeredSideAverageValuePostprocessor
boundary = 2
variable = coolant_htc
execute_on = 'initial linear'
fuel_pin_geometry = fuel_pin_geometry
[]
[average_burnup]
type = RodAverageBurnup
burnup_function = burnup
[]
[temp_clad_max]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[temp_fuel_max]
type = NodalExtremeValue
block = fuel
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[betaph_fract_max]
type = ElementExtremeValue
value_type = max
variable = fract_beta_phase
block = clad
execute_on = 'initial timestep_end'
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[timestep_material]
type = MaterialTimeStepPostprocessor
block = clad
execute_on = 'initial timestep_end'
[]
[peak_hoop_strain]
type = ElementExtremeValue
value_type = max
variable = strain_zz
block = clad
[]
[zry_burst_opening_area]
type = ZryBurstOpening
fuel_pin_geometry = fuel_pin_geometry
peak_hoop_strain = peak_hoop_strain
estimate = limiting
opening_shape = rectangle
output = area
[]
[plenum_volume]
type = LayeredInternalVolumePostprocessor
boundary = 9
execute_on = 'initial TIMESTEP_BEGIN'
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
[]
[gap_layer_pressure_min]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = min
execute_on = 'initial timestep_end'
[]
[gap_layer_pressure_max]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = max
execute_on = 'initial timestep_end'
[]
[gap_layer_moles]
type = ElementExtremeValue
value_type = max
variable = gap_layer_moles
execute_on = 'initial timestep_end'
[]
[plenum_mole_rate]
type = ElementAverageValue
variable = gap_layer_mole_rate
execute_on = 'initial timestep_end'
[]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Dampers]
[limitT]
type = BoundingValueNodalDamper
variable = temperature
max_value = 3200.0
min_value = 0.0
[]
[limitX]
type = MaxIncrement
max_increment = 1e-5
variable = disp_x
[]
[]
[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 = 50
l_tol = 1e-3
nl_max_its = 100
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
dtmax = 5e5
dtmin = 1e-5
end_time = 172489661 # End
[TimeStepper]
type = IterationAdaptiveDT
dt = 200
timestep_limiting_postprocessor = timestep_material
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
timestep_limiting_function = forced_times
force_step_every_function_point = true
max_function_change = 2000
time_t = '172387800 172388043 172488043 172489043 172489073 172489661'
time_dt = '1.0e04 1.0e04 10.0 5.0 3.0 5.0'
[]
[]
[VectorPostprocessors]
[clad_radial_disp]
type = NodalValueSampler
variable = disp_x
boundary = 2
sort_by = y
outputs = 'outfile_2'
[]
[clad_out_temp]
type = NodalValueSampler
variable = temperature
boundary = 2
sort_by = y
outputs = 'outfile_temp_2'
[]
[]
[PerformanceMetricOutputs]
[]
[Outputs]
csv = true
color = false
perf_graph = true
exodus = true
[exodus2]
type = Exodus
file_base = IFA_650_4_gas_part2_out
execute_on = 'initial timestep_end'
[]
[checkpoint2]
type = Checkpoint
time_step_interval = 1
num_files = 1
[]
[outfile_2]
type = CSV
#execute_on = 'FINAL'
#create_final_symlink = true
file_base = 'clad2/new'
[]
[outfile_temp_2]
type = CSV
execute_on = 'FINAL'
create_final_symlink = true
[]
[outfile_mass_2]
type = CSV
execute_on = 'FINAL'
create_final_symlink = true
[]
[GasMixture]
type = CSV
file_base = 'GasMixture/'
[]
[]
(test/tests/axial_gas_communication/expanding_fuel_impermeable.i)
# The fuel is expanded and allowed to relocate, but it remains impermeable. Since it is a closed system, the number of moles
# must be constant. The pressure must increase following the Ideal Gas Law within the plenum
# Volume(i) = (.00501^2-.005^2)*pi*.5 + .0051^2*.3*pi = 2.610035177e-5
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.01145643
#
# Volume(f) = .0051^2*.3*pi = 0.0000236563
# Temp = 1000
# R = 8.3144621815
# n = 0.01145643
# P = nRT/V = 4.02659e6
#
[Functions]
[fuel_displacement_function]
type = ParsedFunction
expression = 'if(t>0, 1e-4 * t, 0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[]
[Controls]
[second_period]
type = TimePeriod
start_time = .02
disable_objects = 'BCs::outer_fuel_radius_displacement'
execute_on = 'initial timestep_begin'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[]
[BCs]
[inner_clad_displacement]
type = DirichletBC
variable = disp_x
boundary = '5'
value = 0.0
[]
[outer_clad_displacement]
type = DirichletBC
variable = disp_x
boundary = '2'
value = 0.0
[]
[outer_fuel_radius_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '10'
function = fuel_displacement_function
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[]
[AuxKernels]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_BEGIN'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
automatic_scaling = true
compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.01
n_startup_steps = 1
dt = .01
end_time = .1
[]
[Outputs]
csv = true
[console]
type = Console
max_rows = 50
[]
[chkfile]
type = CSV
hide = 'burst clad_volume gas_volume maximum_power pellet_volume plenum_mole_rate plenum_pressure plenum_temp plenum_volume rod_input_power'
execute_on = 'FINAL'
[]
[]
(test/tests/axial_gas_communication/clad_displacement_only.i)
# The lowest level of the clad is displaced in the x direction, increasing the volume.
# The temperature is held constant. Since it is a closed system, the number of moles
# must be constant. The pressure must decrease following the Ideal Gas Law.
# Volume = (.0051^2-.005^2)*pi*.5 + .0051^2*.3*pi = 2.6072e-5
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.012542963362695812
#
[Functions]
[clad_displacement_function]
type = ParsedFunction
expression = 'if(t > .1,if(y = 0.011573333333333333, 2.0e-1 * t * sin(pi * y / 0.771185), 0.0),0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.01255660309737312643751928
[]
[]
[BCs]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[outer_radius_displacement]
type = DirichletBC
variable = disp_x
boundary = '10'
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[]
[AuxKernels]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
gas_mixture = gas_mixture_thermal_contact
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
#debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
# automatic_scaling = true
# compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.1
n_startup_steps = 1
dt = .1
end_time =.5
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_BEGIN'
[]
[change_over_time_moles]
type = ChangeOverTimePostprocessor
postprocessor = total_moles
change_with_respect_to_initial = true
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[chkfile]
type = CSV
show = 'change_over_time_moles'
execute_on = 'FINAL'
[]
[]
(test/tests/axial_gas_communication/cladding_burst_with_permeable_fuel.i)
# The fuel is expanded and allowed to relocate, but it remains impermeable. Since it is a closed system, the number of moles
# must be constant. The pressure must increase following the Ideal Gas Law within the plenum
# Volume(i) = (.0059^2-.005^2)*pi*.5 + .00501^2*.3*pi = 0.0000482172
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.02319677
#
# This matches the results from a Mathematica simulation. Reaching true equalibrium takes
#
[Functions]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[burst_function]
type = ParsedFunction # Failure at the lowest fuel-cladding layer
expression = 'if(t > .01,if( y = 0.028240000000000001, 1.0, 0.0),0.0)'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.01309558663687155
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[]
[BCs]
[inner_clad_displacement]
type = DirichletBC
variable = disp_x
boundary = '5'
value = 0.0
[]
[outer_clad_displacement]
type = DirichletBC
variable = disp_x
boundary = '2'
value = 0.0
[]
[outer_fuel_radius_displacement]
type = DirichletBC
variable = disp_x
boundary = '10'
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '8 12 5'
value = 1000
[]
[]
[AuxKernels]
[bursted]
type = FunctionAux
variable = burst
function = burst_function
boundary = 2
execute_on = 'initial TIMESTEP_BEGIN'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 13
distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
gas_mixture = gas_mixture_thermal_contact
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
#debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.213036e6 0 0 0 0 0 0 0 -4.213036e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
automatic_scaling = true
compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.2
n_startup_steps = 2
dt = .1
end_time = 1 #50
[]
[Outputs]
csv = true
exodus = true
[chkfile]
type = CSV
hide = 'burst clad_volume gas_volume maximum_power pellet_volume plenum_mole_rate plenum_pressure plenum_temp plenum_volume rod_input_power'
execute_on = 'FINAL'
[]
[]
(test/tests/axial_gas_communication/temperature_increase_only.i)
# The temperature is increased as a function on axial position while the pressure is held constant.
# Since it is a closed system, the number of moles must be constant while the volume increases.
#
# Following the ideal gas law:
#
# Volume = (.0051^2-.005^2)*pi*.5 + .0051^2*.3*pi = 2.610035177e-5
# Temp = 1000
# R = 8.31446261815324
# Pressure = 4e6
# n =PV/RT = 0.0125565954649452
#
[Functions]
[clad_displacement_function]
type = ParsedFunction
symbol_names = 'R_clad T_i R n h_plenum h_fuel P R_fuel'
symbol_values = '.0051 1000 8.31446261815324 0.01255660309737312643751928 .3 .5 4e6 .005'
expression = 'displacement:=sqrt(n*R*(1+t)*T_i/P/3.14159265359/(h_plenum+h_fuel)+R_fuel*R_fuel*h_fuel/(h_plenum+h_fuel))-R_clad; if(t > 0.0,displacement, 0.0)'
[]
[temp_function]
type = ParsedFunction
expression = 'if(t>0.0, 1000+1000*t, 1000)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.01255660309737312643751928
[]
[disp_y]
[]
[disp_z]
[]
[]
[BCs]
[temp_bc]
type = FunctionDirichletBC
variable = temperature
function = temp_function
boundary = '10 12 5'
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
preset = false
[]
[fuel_radius_displacement]
type = DirichletBC
variable = disp_x
boundary = '10 12'
value = 0.0
[]
[]
[AuxKernels]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 30
direction_min = 0.00324
direction_max = 0.50324
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 30
direction_min = 0.00324
direction_max = 0.50324
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
# distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Postprocessors]
[displace_clad]
type = NodalExtremeValue
boundary = 5
variable = disp_x
[]
[displace]
type = NodalExtremeValue
variable = disp_y
[]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[change_over_time_moles]
type = ChangeOverTimePostprocessor
postprocessor = total_moles
change_with_respect_to_initial = true
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
exodus = true
[chkfile]
type = CSV
show = 'change_over_time_moles'
execute_on = 'FINAL'
[]
[]
(test/tests/axial_gas_communication/dynamic_viscosity.i)
# The lowest level of the clad is displaced in the x direction, increasing the volume.
# The temperature is held constant. Since it is a closed system, the number of moles
# must be constant. The pressure must decrease following the Ideal Gas Law. The fuel
# is allowed to relocate, which makes the fuel permeable, opening a new path for the gas
# to escape after the cladding is breached.
# Volume = (.0055^2-.005^2)*pi*.5 + .0055^2*.3*pi = 0.0000367566
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.017683228689781283
#
# This test is for the dynamic viscosity of the gas within each layer. The gas is helium and
# data is from the NIST Chemistry WebBook
# Temp (K) | Pressure (MPa) | Viscosity (Pa*s)
# 1000 | 3.5 | 4.6195e-5
# 1000 | 3.6 | 4.6196e-5
# 1000 | 3.7 | 4.6197e-5
# 1000 | 3.8 | 4.6198e-5
# 1000 | 3.9 | 4.6199e-5
# 1000 | 4.0 | 4.6200e-5
[GlobalParams]
density = 10431.0
order = SECOND
family = LAGRANGE
displacements = 'disp_x'
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
slices_per_block = 30
slices_within_upper_plenum = 3
pellet_outer_radius = 5e-3
pellet_bottom_coor = 0.00324
clad_gap_width = 5e-4
clad_thickness = 1e-3
fuel_height = 0.5
plenum_height = 0.3
pellet_mesh_density = customize
clad_mesh_density = customize
include_plenum = true
nx_p = 11
nx_c = 5
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[disp_x]
[]
[temperature]
initial_condition = 1000
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 0.07
[]
[outer_pressure_function]
type = PiecewiseLinear
x = '-100 10'
y = '1.0 1.0'
[]
[fuel_displacement_function]
type = ParsedFunction
expression = 'if(t>0, if(y = 0.26157333333333332, 1e-2 * t, 0.0),0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[burst]
order = CONSTANT
family = MONOMIAL
initial_condition = 0
[]
[layered_maximum_fuel_radius]
order = CONSTANT
family = MONOMIAL
# initial_condition = 0.005
[]
[gap_layer_pressure]
order = CONSTANT
family = MONOMIAL
initial_condition = 4e6
[]
[gap_layer_moles]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_mole_rate]
order = CONSTANT
family = MONOMIAL
initial_condition = 0
[]
[gap_layer_temperature]
initial_condition = 1000
[]
[gap_layer_volume]
[]
[plenum_layer_pressure]
order = CONSTANT
family = MONOMIAL
initial_condition = 4e6
[]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.017683228689781283
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[layer_viscosity]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
generate_output = 'strain_yy'
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
automatic_eigenstrain_names = true
initial_eigenstrain_name = 'ini_stress'
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
generate_output = 'strain_yy'
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[layered_maximum_fuel_radius]
type = SpatialUserObjectAux
block = fuel
user_object = layered_maximum_fuel_radius
variable = layered_maximum_fuel_radius
execute_on = 'TIMESTEP_END'
[]
[gap_layer_pressure]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
variable = gap_layer_pressure
output_option = 'LAYER_PRESSURE'
execute_on = 'final timestep_end'
[]
[gap_layer_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_MOLES'
variable = gap_layer_moles
execute_on = 'timestep_end'
[]
[gap_layer_mole_rate]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'PLENUM_MOLE_RATE'
variable = gap_layer_mole_rate
execute_on = 'timestep_end'
[]
[gap_layer_temperature]
type = SpatialUserObjectAux
user_object = gap_layer_temperature
variable = gap_layer_temperature
execute_on = 'timestep_end'
[]
[gap_layer_volume]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_VOLUME'
variable = gap_layer_volume
execute_on = 'timestep_end'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[layer_viscosity]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_VISCOSITY'
variable = layer_viscosity
execute_on = 'timestep_end'
[]
[]
[AxialRelocation]
[relocation]
rod_ave_lin_pow = power
axial_direction = y
fuel_blocks = fuel
clad_blocks = clad
contact_pressure_variable = contact_pressure
out_of_plane_strain_variable = strain_yy
penetration_variable = penetration
clad_inner_volume_addition = 0
burnup_variable = burnup
temperature = temperature
axial_relocation_output_options = 'MASS_FRACTION PACKING_FRACTION'
mesh_generator = layered1D_mesh
gap_thickness_threshold = 2e-6
nonrelocatable_fuel_fraction = 0.01
fragment_packing_fraction = 1
pulver_packing_fraction = 1
use_axial_gas_communication = true
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_gas_types = 'He'
initial_fractions = '1'
#initial_moles = initial_moles
# gas_released = fis_gas_released
plenum_pressure = plenum_pressure
contact_pressure = contact_pressure
jump_distance_model = LANNING
output_gas_mixture = true
outputs = GasMixture
execution_order_group = -2
[]
[]
[BCs]
[outersurface]
type = Pressure
boundary = '2'
variable = disp_x
factor = 101325.0
function = outer_pressure_function
[]
[outer_temperature]
type = DirichletBC
boundary = '2'
variable = temperature
value = 273
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = '12'
value = 0.0
[]
[fuel_layer_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '10'
function = fuel_displacement_function
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 4.0e6
initial_temperature = 1000
startup_time = -1
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = 'clad_volume pellet_volume'
output = 'plenum_pressure'
incremental_calculation = true
execute_on = 'INITIAL TIMESTEP_END'
axial_gas_communication = axial_gas_communication
[]
[]
[]
[LayeredPlenumTemperature]
[plenum_temp]
boundary = 5
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[Materials]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = 10431.0
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[UserObjects]
[terminator]
type = Terminator
expression = 'gap_layer_pressure_max < 101325.01'
execute_on = 'TIMESTEP_END'
[]
[layered_fuel_average]
type = LayeredSideAverage
variable = temperature
direction = y
num_layers = 30
boundary = 2
direction_min = 0.00324
direction_max = 0.50324
use_displaced_mesh = false
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_temperature]
type = LayeredGasGapTemperatureUserObject
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
gap_temp = gap_value
variable = temperature
boundary = '5'
distance = pt_distance
execute_on = 'INITIAL TIMESTEP_BEGIN'
execution_order_group = -1
[]
[cladding_failure_status]
type = LayeredSideAverage
variable = burst
direction = y
boundary = 2
direction_min = 0.00324
direction_max = 0.50324
num_layers = 30
execute_on = 'TIMESTEP_BEGIN'
[]
[layered_maximum_fuel_radius]
type = LayeredNodalExtremeValue
variable = 'outer_fuel_radius'
direction_min = 0.00324
direction_max = 0.50324
num_layers = 30
direction = y
boundary = 10
value_type = max
execute_on = 'INITIAL TIMESTEP_END'
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 30
direction_min = 0.00324
direction_max = 0.50324
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 30
direction_min = 0.00324
direction_max = 0.50324
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
# distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
debug_output = true
[]
[]
[Postprocessors]
[gap_layer_pressure_max]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = max
execute_on = 'initial timestep_end'
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'Initial TIMESTEP_END'
[]
[plenum_volume]
type = LayeredInternalVolumePostprocessor
boundary = 9
execute_on = 'initial TIMESTEP_BEGIN'
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
[]
[gap_layer_pressure_min]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = min
execute_on = 'initial timestep_end'
[]
[plenum_mole_rate]
type = ElementAverageValue
variable = gap_layer_mole_rate
execute_on = 'initial timestep_end'
[]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[fuel_outer_disp_x]
type = NodalExtremeValue
boundary = 10
variable = disp_x
execute_on = 'initial timestep_end'
[]
[cladding_outer_disp_x]
type = NodalExtremeValue
boundary = 2
variable = disp_x
execute_on = 'initial timestep_end'
[]
[viscosity]
type = ElementExtremeValue
value_type = max
variable = layer_viscosity
execute_on = 'timestep_end'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
automatic_scaling = true
compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.01
n_startup_steps = 1
dt = .01
end_time = .2
[]
[Outputs]
csv = true
exodus = true
[console]
type = Console
max_rows = 50
[]
[chkfile]
type = CSV
show = 'viscosity'
execute_on = 'FINAL'
[]
[GasMixture]
type = CSV
file_base = 'GasMixture/'
[]
[]
(assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_4/IFA_650_4_part1_gas_communication.i)
[GlobalParams]
density = 10452.96
initial_porosity = 0.048
order = SECOND
family = LAGRANGE
displacements = disp_x
temperature = temperature
energy_per_fission = 3.2e-11 #J/fission
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
acceptable_multiplier = 10
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
slices_per_block = 30
slices_within_upper_plenum = 3
pellet_outer_radius = 4.565e-3
clad_gap_width = 0.085e-3
clad_thickness = 0.725e-3
fuel_height = 0.480
plenum_height = 0.291185
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 11
nx_c = 5
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[disp_x]
[]
[temperature]
initial_condition = 295.0
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
scale_factor = 1.0
format = columns
[]
[axial_peaking_factors]
type = PiecewiseBilinear
data_file = axial_peaking_factors.csv
axis = 1
scale_factor = 1
[]
[pressure_ramp]
type = PiecewiseLinear
data_file = coolant_pressure.csv
scale_factor = 1
format = columns
[]
[average_htc]
type = PiecewiseLinear
data_file = average_coolant_htc.csv
format = columns
scale_factor = 1
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[heat_sink_temperature]
type = PiecewiseBilinear
data_file = heater_temp.csv
scale_factor = 1
axis = 1
[]
[clad_outer_temperature]
type = PiecewiseBilinear
data_file = clad_surface_temp.csv
scale_factor = 1
axis = 1
[]
[heat_transfer_mode]
type = PiecewiseConstant
x = '-200 172489073 172489661'
y = '9 9 8 '
direction = 'right'
[]
[clad_axial_pressure]
type = CladdingAxialPressureFunction
plenum_pressure = plenum_pressure
coolant_pressure = pressure_ramp
coolant_pressure_scaling_factor = 1.0
fuel_pin_geometry = fuel_pin_geometry
[]
[fuel_axial_pressure]
type = ParsedFunction
expression = plenum_pressure
symbol_names = plenum_pressure
symbol_values = plenum_pressure
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = fuel
initial_condition = 5.0e-6
[]
[hoop_stress]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase]
order = CONSTANT
family = MONOMIAL
[]
[oxide_thickness]
order = CONSTANT
family = MONOMIAL
[]
[burst]
order = CONSTANT
family = MONOMIAL
[]
[gap_conductance]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[creep_rate]
order = CONSTANT
family = MONOMIAL
[]
[gap_thermal_conductivity]
order = CONSTANT
family = MONOMIAL
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[layered_maximum_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[gap_layer_pressure]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_moles]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_mole_rate]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_temperature]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_volume]
order = CONSTANT
family = MONOMIAL
[]
[plenum_layer_pressure]
order = CONSTANT
family = MONOMIAL
[]
[total_moles]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
block = fuel
burnup_function = burnup
axial_relocation_object = axial_relocation
extra_vector_tags = 'ref'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_pressure_function = fuel_axial_pressure
strain = finite
block = fuel
eigenstrain_names = 'fuel_thermal_strain fuel_swelling_strain fuel_relocation_strain axial_relocation_eigenstrain'
decomposition_method = EigenSolution
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress'
extra_vector_tags = 'ref'
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
out_of_plane_pressure_function = clad_axial_pressure
block = clad
eigenstrain_names = 'clad_thermal_strain clad_irradiation_strain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_zz creep_strain_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[Burnup]
[burnup]
block = fuel
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.035 0.965 0 0 0 0'
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
block = clad
variable = fast_neutron_flux
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
block = clad
variable = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = fuel
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[hoop_stress]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = hoop_stress
scalar_type = HoopStress
execute_on = timestep_end
[]
[effective_creep_strain]
type = MaterialRealAux
block = clad
variable = effective_creep_strain
property = effective_creep_strain
execute_on = 'timestep_end'
[]
[layered_maximum_fuel_radius]
type = SpatialUserObjectAux
block = fuel
user_object = layered_maximum_fuel_radius
variable = layered_maximum_fuel_radius
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_pressure]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
variable = gap_layer_pressure
output_option = 'LAYER_PRESSURE'
execute_on = 'final timestep_end'
[]
[gap_layer_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_MOLES'
variable = gap_layer_moles
execute_on = 'timestep_end'
[]
[gap_layer_mole_rate]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'PLENUM_MOLE_RATE'
variable = gap_layer_mole_rate
execute_on = 'timestep_end'
[]
[gap_layer_temperature]
type = SpatialUserObjectAux
user_object = gap_layer_temperature
variable = gap_layer_temperature
execute_on = 'timestep_end'
[]
[gap_layer_volume]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_VOLUME'
variable = gap_layer_volume
execute_on = 'timestep_end'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
execute_on = 'initial linear'
[]
[oxide_thickness]
type = MaterialRealAux
boundary = 2
variable = oxide_thickness
property = oxide_scale_thickness
execute_on = 'initial linear'
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
boundary = 10
property = gap_conductance
variable = gap_conductance
execute_on = 'initial linear'
[]
[coolant_htc]
type = MaterialRealAux
property = coolant_channel_htc
variable = coolant_htc
boundary = 2
execute_on = 'initial linear'
[]
[creep_rate]
type = MaterialRealAux
block = clad
variable = creep_rate
property = creep_rate
execute_on = timestep_end
[]
[gas_th_cond]
type = MaterialRealAux
variable = gap_thermal_conductivity
property = gap_conductivity
boundary = 10
execute_on = 'initial linear'
[]
[]
[AxialRelocation]
[relocation]
mesh_generator = layered1D_mesh
rod_ave_lin_pow = power_history
axial_direction = y
fuel_blocks = fuel
clad_blocks = clad
contact_pressure_variable = contact_pressure
out_of_plane_strain_variable = strain_yy
penetration_variable = penetration
clad_inner_volume_addition = 0
burnup_variable = burnup
temperature = temperature
axial_relocation_output_options = 'MASS_FRACTION PACKING_FRACTION'
use_axial_gas_communication = true
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
heat_transfer_mode = heat_transfer_mode
heat_transfer_coefficient = average_htc # Calculated from an initial simulation of the base irradiation using the inlet_pressure, inlet_massflux, and inlet_temperature commented out below.
inlet_temperature = heat_sink_temperature # K
effective_emissivity = 0.75
# inlet_temperature = 580
# inlet_pressure = 15.3e6 # Pa
# inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.01075 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_moles = 0.0170917878663391
gas_released = fis_gas_released
plenum_pressure = plenum_pressure
contact_pressure = contact_pressure
jump_distance_model = LANNING
roughness_coef = 3.2
refab_gas_types = 'He Ar'
refab_fractions = '0.05 0.95'
refab_time = 172387800
refab_type = 0
output_gas_mixture = true
outputs = GasMixture
execution_order_group = -2
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = 2
function = pressure_ramp
factor = 1.0
[]
[]
[clad_outer_temp]
type = FunctionDirichletBC
boundary = 2
variable = temperature
function = clad_outer_temperature
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 2.0e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = 'clad_volume pellet_volume'
output = plenum_pressure
refab_time = 172387800
refab_pressure = 4.0e6
refab_temperature = 295.0
refab_volume = 2.15e-05
incremental_calculation = true
execute_on = 'INITIAL LINEAR'
axial_gas_communication = axial_gas_communication
[]
[]
[]
[LayeredPlenumTemperature]
[plenum_temp]
boundary = 5
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[Controls]
[period0]
type = TimePeriod
disable_objects = 'BCs/clad_outer_temp'
start_time = -200.0
end_time = 172387800.0
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = fuel
thermal_conductivity_model = STAICU
hbs_porosity_correction = KAMPF
model_hbs_formation = true
temperature = temperature
burnup_function = burnup
axial_relocation_object = axial_relocation
gap_thermal_conductivity = layered_average_gap_conductivity
[]
[relocation]
type = UO2RelocationEigenstrain
block = fuel
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
fuel_pin_geometry = fuel_pin_geometry
burnup_relocation_stop = 0.024
relocation_activation1 = 5000.0
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
[]
[fuel_thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 10.0e-6
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
[]
[fuel_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = fuel
burnup_function = burnup
initial_fuel_density = 10452.96
eigenstrain_name = fuel_swelling_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = fuel
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
transient_option = MICROCRACKING_BURNUP
diff_coeff_option = TURNBULL_D1_D2
gbs_model = true
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = fuel
fragmentation_model = BARANI
temperature = temperature
rod_ave_lin_pow = power_history
axial_relocation_object = axial_relocation
crumbling_scale_factor = 0.0001
[]
[fuel_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = fuel
[]
[fuel_creep]
type = UO2CreepUpdate
block = fuel
temperature = temperature
burnup_function = burnup
initial_grain_radius = 5.0e-6
[]
[HBS]
type = HighBurnupStructureFormation
block = fuel
burnup_function = burnup
temperature = temperature
output_properties = 'hbs_volume_fraction'
outputs = 'exodus'
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
[]
[stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zrycreep'
block = clad
[]
[zrycreep]
type = ZryCreepLOCAUpdate
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
zircaloy_material_type = stress_relief_annealed
block = clad
[]
[thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_strain
[]
[irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.65e-03
clad_outer_radius = 5.375e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = cathcart
use_coolant_channel = true
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = overstrain
hoop_stress = hoop_stress
hoop_creep_strain = creep_strain_zz
effective_strain_rate_creep = creep_rate
temperature = temperature
fraction_beta_phase = fract_beta_phase
[]
[clad_thermal]
type = ZryThermal
block = clad
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = 10452.96
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[]
[UserObjects]
[terminator]
type = Terminator
expression = 'burst > 0'
execute_on = timestep_end
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[layered_fuel_average]
type = LayeredSideAverage
variable = temperature
direction = y
num_layers = 30
boundary = 2
direction_min = 0
direction_max = .48
use_displaced_mesh = false
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_temperature]
type = LayeredGasGapTemperatureUserObject
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
gap_temp = gap_value
variable = temperature
boundary = '5'
distance = pt_distance
execute_on = 'INITIAL TIMESTEP_BEGIN'
execution_order_group = -1
[]
[cladding_failure_status]
type = LayeredSideAverage
variable = burst
direction = y
num_layers = 30
boundary = 2
direction_min = 0
direction_max = .48
execute_on = 'TIMESTEP_BEGIN'
[]
[layered_maximum_fuel_radius]
type = LayeredNodalExtremeValue
variable = 'outer_fuel_radius'
direction_min = 0.0
direction_max = 0.48
num_layers = 30
direction = y
boundary = 10
value_type = max
execute_on = 'INITIAL TIMESTEP_END'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 2.0e6
material_input = 'fis_gas_released'
execute_on = 'initial timestep_end'
debug_output = true
refab_time = 172387800
refab_pressure = 4.0e6
refab_temperature = 295.0
refab_volume = 2.15e-05
[]
[]
[Postprocessors]
[ave_temp_interior]
type = LayeredSideAverageValuePostprocessor
boundary = 9
variable = temperature
execute_on = 'initial linear'
fuel_pin_geometry = fuel_pin_geometry
[]
[pellet_volume_2]
type = LayeredInternalVolumePostprocessor
boundary = 8
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial linear'
[]
[avg_clad_temp]
type = LayeredSideAverageValuePostprocessor
boundary = 7
variable = temperature
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial linear'
[]
[fis_gas_produced]
type = LayeredElementIntegralFisGasGeneratedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_released]
type = LayeredElementIntegralFisGasReleasedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_grain]
type = LayeredElementIntegralFisGasGrainSifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_boundary]
type = LayeredElementIntegralFisGasBoundarySifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = fuel_pin_geometry
[]
[fission_gas_release]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[average_coolant_htc]
type = LayeredSideAverageValuePostprocessor
boundary = 2
variable = coolant_htc
execute_on = 'initial linear'
fuel_pin_geometry = fuel_pin_geometry
[]
[average_burnup]
type = RodAverageBurnup
burnup_function = burnup
[]
[temp_clad_max]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[temp_fuel_max]
type = NodalExtremeValue
block = fuel
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[betaph_fract_max]
type = ElementExtremeValue
value_type = max
variable = fract_beta_phase
block = clad
execute_on = 'initial timestep_end'
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[timestep_material]
type = MaterialTimeStepPostprocessor
block = clad
execute_on = 'initial timestep_end'
[]
[peak_hoop_strain]
type = ElementExtremeValue
value_type = max
variable = strain_zz
block = clad
[]
[zry_burst_opening_area]
type = ZryBurstOpening
fuel_pin_geometry = fuel_pin_geometry
peak_hoop_strain = peak_hoop_strain
estimate = limiting
opening_shape = rectangle
output = area
[]
[plenum_volume]
type = LayeredInternalVolumePostprocessor
boundary = 9
execute_on = 'initial TIMESTEP_BEGIN'
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
[]
[gap_layer_pressure_min]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = min
execute_on = 'initial timestep_end'
[]
[gap_layer_pressure_max]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = max
execute_on = 'initial timestep_end'
[]
[gap_layer_moles]
type = ElementExtremeValue
value_type = max
variable = gap_layer_moles
execute_on = 'initial timestep_end'
[]
[plenum_mole_rate]
type = ElementAverageValue
variable = gap_layer_mole_rate
execute_on = 'initial timestep_end'
[]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Dampers]
[limitT]
type = BoundingValueNodalDamper
variable = temperature
max_value = 3200.0
min_value = 0.0
[]
[limitX]
type = MaxIncrement
max_increment = 1e-5
variable = disp_x
[]
[]
[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 = 50
l_tol = 1e-3
nl_max_its = 30
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
dtmax = 5e5
dtmin = 1e-5
start_time = -200.0
end_time = 172387800 # End base irradiation
[TimeStepper]
type = IterationAdaptiveDT
dt = 200
timestep_limiting_postprocessor = timestep_material
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
timestep_limiting_function = forced_times
force_step_every_function_point = true
max_function_change = 2000
time_t = '172387800 172388043 172488043 172489043 172489073 172489661'
time_dt = '1.0e04 1.0e04 10.0 5.0 0.5 5.0'
[]
[]
[VectorPostprocessors]
[clad_radial_disp]
type = NodalValueSampler
variable = disp_x
boundary = 2
sort_by = y
outputs = 'outfile_1'
[]
[clad_out_temp]
type = NodalValueSampler
variable = temperature
boundary = 2
sort_by = y
outputs = 'outfile_temp_1'
[]
[]
[PerformanceMetricOutputs]
[]
[Outputs]
csv = true
color = false
perf_graph = true
exodus = true
[checkpoint]
type = Checkpoint
time_step_interval = 1
num_files = 1
[]
[outfile_1]
type = CSV
# execute_on = 'FINAL'
# create_final_symlink = true
file_base = 'clad/new'
[]
[outfile_temp_1]
type = CSV
execute_on = 'FINAL'
create_final_symlink = true
[]
[outfile_mass_1]
type = CSV
execute_on = 'FINAL'
create_final_symlink = true
[]
[GasMixture]
type = CSV
file_base = 'GasMixture/'
[]
[]
(test/tests/axial_gas_communication/expanding_fuel_permeable.i)
# The fuel is expanded and allowed to relocate, but it remains impermeable. Since it is a closed system, the number of moles
# must be constant. The pressure must increase following the Ideal Gas Law within the plenum
# Volume(i) = (.0059^2-.005^2)*pi*.5 + .00501^2*.3*pi = 0.0000482172
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.02319677
#
[Functions]
[fuel_displacement_function]
type = ParsedFunction
expression = 'if(t>0, 5e-3*t,0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[]
[Controls]
[second_period]
type = TimePeriod
start_time = .19
disable_objects = 'BCs::outer_fuel_radius_displacement'
execute_on = 'initial timestep_begin'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[]
[BCs]
[inner_clad_displacement]
type = DirichletBC
variable = disp_x
boundary = '5'
value = 0.0
[]
[outer_clad_displacement]
type = DirichletBC
variable = disp_x
boundary = '2'
value = 0.0
[]
[outer_fuel_radius_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '10'
function = fuel_displacement_function
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[]
[AuxKernels]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
gas_mixture = gas_mixture_thermal_contact
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
# debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_BEGIN'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
automatic_scaling = true
compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.01
n_startup_steps = 1
dt = .01
end_time = .22
[]
[Outputs]
csv = true
[console]
type = Console
max_rows = 50
[]
[chkfile]
type = CSV
hide = 'burst clad_volume gas_volume maximum_power pellet_volume plenum_mole_rate plenum_pressure plenum_temp plenum_volume rod_input_power'
execute_on = 'FINAL'
[]
[]
(assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_4/IFA_650_4_part3_gas_communication.i)
[GlobalParams]
density = 10452.96
initial_porosity = 0.048
order = SECOND
family = LAGRANGE
displacements = disp_x
temperature = temperature
energy_per_fission = 3.2e-11 #J/fission
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
acceptable_multiplier = 10
restart_file_base = 'IFA_650_4_part2_gas_communication_checkpoint2_cp/LATEST'
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
slices_per_block = 30
slices_within_upper_plenum = 3
pellet_outer_radius = 4.565e-3
clad_gap_width = 0.085e-3
clad_thickness = 0.725e-3
fuel_height = 0.480
plenum_height = 0.291185
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 11
nx_c = 5
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[disp_x]
[]
[temperature]
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
scale_factor = 1.0
format = columns
[]
[axial_peaking_factors]
type = PiecewiseBilinear
data_file = axial_peaking_factors.csv
axis = 1
scale_factor = 1
[]
[pressure_ramp]
type = PiecewiseLinear
data_file = coolant_pressure.csv
scale_factor = 1
format = columns
[]
[average_htc]
type = PiecewiseLinear
data_file = average_coolant_htc.csv
format = columns
scale_factor = 1
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[heat_sink_temperature]
type = PiecewiseBilinear
data_file = heater_temp.csv
scale_factor = 1
axis = 1
[]
[clad_outer_temperature]
type = PiecewiseBilinear
data_file = clad_surface_temp.csv
scale_factor = 1
axis = 1
[]
[heat_transfer_mode]
type = PiecewiseConstant
x = '-200 172489073 172489661'
y = '9 9 8 '
direction = 'right'
[]
[clad_axial_pressure]
type = CladdingAxialPressureFunction
plenum_pressure = plenum_pressure
coolant_pressure = pressure_ramp
coolant_pressure_scaling_factor = 1.0
fuel_pin_geometry = fuel_pin_geometry
[]
[fuel_axial_pressure]
type = ParsedFunction
expression = plenum_pressure
symbol_names = plenum_pressure
symbol_values = plenum_pressure
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = fuel
[]
[hoop_stress]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase]
order = CONSTANT
family = MONOMIAL
[]
[oxide_thickness]
order = CONSTANT
family = MONOMIAL
[]
[burst]
order = CONSTANT
family = MONOMIAL
[]
[gap_conductance]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[creep_rate]
order = CONSTANT
family = MONOMIAL
[]
[gap_thermal_conductivity]
order = CONSTANT
family = MONOMIAL
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[layered_maximum_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[gap_layer_pressure]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_moles]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_mole_rate]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_temperature]
order = CONSTANT
family = MONOMIAL
[]
[gap_layer_volume]
order = CONSTANT
family = MONOMIAL
[]
[plenum_layer_pressure]
order = CONSTANT
family = MONOMIAL
[]
[total_moles]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
block = fuel
burnup_function = burnup
axial_relocation_object = axial_relocation
extra_vector_tags = 'ref'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_pressure_function = fuel_axial_pressure
strain = finite
block = fuel
eigenstrain_names = 'fuel_thermal_strain fuel_swelling_strain fuel_relocation_strain axial_relocation_eigenstrain'
decomposition_method = EigenSolution
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress'
extra_vector_tags = 'ref'
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
out_of_plane_pressure_function = clad_axial_pressure
block = clad
eigenstrain_names = 'clad_thermal_strain clad_irradiation_strain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_zz creep_strain_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[Burnup]
[burnup]
block = fuel
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.035 0.965 0 0 0 0'
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
block = clad
variable = fast_neutron_flux
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
block = clad
variable = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = fuel
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[hoop_stress]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = hoop_stress
scalar_type = HoopStress
execute_on = timestep_end
[]
[effective_creep_strain]
type = MaterialRealAux
block = clad
variable = effective_creep_strain
property = effective_creep_strain
execute_on = 'timestep_end'
[]
[layered_maximum_fuel_radius]
type = SpatialUserObjectAux
block = fuel
user_object = layered_maximum_fuel_radius
variable = layered_maximum_fuel_radius
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_pressure]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
variable = gap_layer_pressure
output_option = 'LAYER_PRESSURE'
execute_on = 'final timestep_end'
[]
[gap_layer_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_MOLES'
variable = gap_layer_moles
execute_on = 'timestep_end'
[]
[gap_layer_mole_rate]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'PLENUM_MOLE_RATE'
variable = gap_layer_mole_rate
execute_on = 'timestep_end'
[]
[gap_layer_temperature]
type = SpatialUserObjectAux
user_object = gap_layer_temperature
variable = gap_layer_temperature
execute_on = 'timestep_end'
[]
[gap_layer_volume]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'LAYER_VOLUME'
variable = gap_layer_volume
execute_on = 'timestep_end'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
execute_on = 'initial linear'
[]
[oxide_thickness]
type = MaterialRealAux
boundary = 2
variable = oxide_thickness
property = oxide_scale_thickness
execute_on = 'initial linear'
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
boundary = 10
property = gap_conductance
variable = gap_conductance
execute_on = 'initial linear'
[]
[coolant_htc]
type = MaterialRealAux
property = coolant_channel_htc
variable = coolant_htc
boundary = 2
execute_on = 'initial linear'
[]
[creep_rate]
type = MaterialRealAux
block = clad
variable = creep_rate
property = creep_rate
execute_on = timestep_end
[]
[gas_th_cond]
type = MaterialRealAux
variable = gap_thermal_conductivity
property = gap_conductivity
boundary = 10
execute_on = 'initial linear'
[]
[]
[AxialRelocation]
[relocation]
mesh_generator = layered1D_mesh
rod_ave_lin_pow = power_history
axial_direction = y
fuel_blocks = fuel
clad_blocks = clad
contact_pressure_variable = contact_pressure
out_of_plane_strain_variable = strain_yy
penetration_variable = penetration
clad_inner_volume_addition = 3.17755E-06 # Addition of the volume to bring the starting total volume to 21.5cm^3 to begin the transient experiment
burnup_variable = burnup
temperature = temperature
axial_relocation_output_options = 'MASS_FRACTION PACKING_FRACTION'
use_axial_gas_communication = true
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
heat_transfer_mode = heat_transfer_mode
heat_transfer_coefficient = average_htc # Calculated from an initial simulation of the base irradiation using the inlet_pressure, inlet_massflux, and inlet_temperature commented out below.
inlet_temperature = heat_sink_temperature # K
effective_emissivity = 0.75
# inlet_temperature = 580
# inlet_pressure = 15.3e6 # Pa
# inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.01075 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_gas_types = 'He Ar'
initial_fractions = '0.05 0.95'
# initial_moles = initial_moles
# gas_released = fis_gas_released
plenum_pressure = plenum_pressure
contact_pressure = contact_pressure
jump_distance_model = LANNING
roughness_coef = 3.2
refab_gas_types = 'He Ar'
refab_fractions = '0.05 0.95'
refab_time = 172387800
refab_type = 0
output_gas_mixture = true
outputs = GasMixture
execution_order_group = -2
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = 2
function = pressure_ramp
factor = 1.0
[]
[]
[clad_outer_temp]
type = FunctionDirichletBC
boundary = 2
variable = temperature
function = clad_outer_temperature
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 2.0e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = 'clad_volume pellet_volume'
output = plenum_pressure
refab_time = 172387800
refab_pressure = 4.0e6
refab_temperature = 295.0
refab_volume = 2.15e-05
incremental_calculation = true
execute_on = 'INITIAL LINEAR'
axial_gas_communication = axial_gas_communication
[]
[]
[]
[LayeredPlenumTemperature]
[plenum_temp]
boundary = 5
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = fuel
thermal_conductivity_model = STAICU
hbs_porosity_correction = KAMPF
model_hbs_formation = true
temperature = temperature
burnup_function = burnup
axial_relocation_object = axial_relocation
gap_thermal_conductivity = layered_average_gap_conductivity
[]
[relocation]
type = UO2RelocationEigenstrain
block = fuel
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
fuel_pin_geometry = fuel_pin_geometry
burnup_relocation_stop = 0.024
relocation_activation1 = 5000.0
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
[]
[fuel_thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 10.0e-6
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
[]
[fuel_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = fuel
burnup_function = burnup
initial_fuel_density = 10452.96
eigenstrain_name = fuel_swelling_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = fuel
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
transient_option = MICROCRACKING_BURNUP
diff_coeff_option = TURNBULL_D1_D2
gbs_model = true
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = fuel
fragmentation_model = BARANI
temperature = temperature
rod_ave_lin_pow = power_history
#axial_relocation_object = axial_relocation
crumbling_scale_factor = 0.0001
[]
[fuel_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = fuel
[]
[fuel_creep]
type = UO2CreepUpdate
block = fuel
temperature = temperature
burnup_function = burnup
initial_grain_radius = 5.0e-6
[]
[HBS]
type = HighBurnupStructureFormation
block = fuel
burnup_function = burnup
temperature = temperature
output_properties = 'hbs_volume_fraction'
outputs = 'exodus'
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
[]
[stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zrycreep'
block = clad
[]
[zrycreep]
type = ZryCreepLOCAUpdate
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
zircaloy_material_type = stress_relief_annealed
block = clad
[]
[thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_strain
[]
[irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.65e-03
clad_outer_radius = 5.375e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = cathcart
use_coolant_channel = true
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = plastic_instability
hoop_stress = hoop_stress
#hoop_creep_strain = creep_strain_zz
effective_strain_rate_creep = creep_rate
temperature = temperature
fraction_beta_phase = fract_beta_phase
[]
[clad_thermal]
type = ZryThermal
block = clad
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = 10452.96
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[]
[UserObjects]
[terminator]
type = Terminator
expression = 'gap_layer_pressure_max < 101325.01'
execute_on = 'TIMESTEP_END'
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[layered_fuel_average]
type = LayeredSideAverage
variable = temperature
direction = y
num_layers = 30
boundary = 2
direction_min = 0
direction_max = .48
use_displaced_mesh = false
execute_on = 'TIMESTEP_BEGIN'
[]
[gap_layer_temperature]
type = LayeredGasGapTemperatureUserObject
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
gap_temp = gap_value
variable = temperature
boundary = '5'
distance = pt_distance
execute_on = 'INITIAL TIMESTEP_BEGIN'
execution_order_group = -1
[]
[cladding_failure_status]
type = LayeredSideAverage
variable = burst
direction = y
num_layers = 30
boundary = 2
direction_min = 0
direction_max = .48
execute_on = 'TIMESTEP_BEGIN'
[]
[layered_maximum_fuel_radius]
type = LayeredNodalExtremeValue
variable = 'outer_fuel_radius'
direction_min = 0.0
direction_max = 0.48
num_layers = 30
direction = y
boundary = 10
value_type = max
execute_on = 'INITIAL TIMESTEP_END'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 2.0e6
equilibrium_pressure = 7.5e5
material_input = 'fis_gas_released'
execute_on = 'initial timestep_end'
debug_output = true
[]
[]
[Postprocessors]
[ave_temp_interior]
type = LayeredSideAverageValuePostprocessor
boundary = 9
variable = temperature
execute_on = 'initial linear'
fuel_pin_geometry = fuel_pin_geometry
[]
[pellet_volume_2]
type = LayeredInternalVolumePostprocessor
boundary = 8
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial linear'
[]
[avg_clad_temp]
type = LayeredSideAverageValuePostprocessor
boundary = 7
variable = temperature
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial linear'
[]
[fis_gas_produced]
type = LayeredElementIntegralFisGasGeneratedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_released]
type = LayeredElementIntegralFisGasReleasedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_grain]
type = LayeredElementIntegralFisGasGrainSifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = fuel_pin_geometry
[]
[fis_gas_boundary]
type = LayeredElementIntegralFisGasBoundarySifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = fuel_pin_geometry
[]
[fission_gas_release]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[average_coolant_htc]
type = LayeredSideAverageValuePostprocessor
boundary = 2
variable = coolant_htc
execute_on = 'initial linear'
fuel_pin_geometry = fuel_pin_geometry
[]
[average_burnup]
type = RodAverageBurnup
burnup_function = burnup
[]
[temp_clad_max]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[temp_fuel_max]
type = NodalExtremeValue
block = fuel
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[betaph_fract_max]
type = ElementExtremeValue
value_type = max
variable = fract_beta_phase
block = clad
execute_on = 'initial timestep_end'
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[timestep_material]
type = MaterialTimeStepPostprocessor
block = clad
execute_on = 'initial timestep_end'
[]
[peak_hoop_strain]
type = ElementExtremeValue
value_type = max
variable = strain_zz
block = clad
[]
[zry_burst_opening_area]
type = ZryBurstOpening
fuel_pin_geometry = fuel_pin_geometry
peak_hoop_strain = peak_hoop_strain
estimate = limiting
opening_shape = rectangle
output = area
[]
[plenum_volume]
type = LayeredInternalVolumePostprocessor
boundary = 9
execute_on = 'initial TIMESTEP_BEGIN'
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
[]
[gap_layer_pressure_min]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = min
execute_on = 'initial timestep_end'
[]
[gap_layer_pressure_max]
type = ElementExtremeValue
variable = gap_layer_pressure
value_type = max
execute_on = 'initial timestep_end'
[]
[gap_layer_moles]
type = ElementExtremeValue
value_type = max
variable = gap_layer_moles
execute_on = 'initial timestep_end'
[]
[plenum_mole_rate]
type = ElementAverageValue
variable = gap_layer_mole_rate
execute_on = 'initial timestep_end'
[]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[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 = 50
l_tol = 1e-3
nl_max_its = 30
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
dt = .1
end_time = 172489651 # End
[]
[VectorPostprocessors]
[clad_radial_disp]
type = NodalValueSampler
variable = disp_x
boundary = 2
sort_by = y
outputs = 'outfile_3'
[]
[clad_out_temp]
type = NodalValueSampler
variable = temperature
boundary = 2
sort_by = y
outputs = 'outfile_temp_3'
[]
[]
[PerformanceMetricOutputs]
[]
[Outputs]
csv = true
color = false
exodus = true
[exodus3]
type = Exodus
file_base = IFA_650_4_gas_part3_out
execute_on = 'initial timestep_end'
[]
[checkpoint3]
type = Checkpoint
time_step_interval = 1
num_files = 1
[]
[outfile_3]
type = CSV
#execute_on = 'FINAL'
#create_final_symlink = true
file_base = 'clad3/new'
[]
[outfile_temp_3]
type = CSV
execute_on = 'FINAL'
create_final_symlink = true
[]
[outfile_mass_3]
type = CSV
execute_on = 'FINAL'
create_final_symlink = true
[]
[GasMixture]
type = CSV
file_base = 'GasMixture/'
[]
[]
(test/tests/axial_gas_communication/fission_gas_release_only.i)
# Additional moles are released into the closed volume system at constant temperature and volume,
# increasing the pressure following the Ideal Gas Law.
#
# Volume = (.0051^2-.005^2)*pi*.5 + .0051^2*.3*pi = 2.6072e-05
# Temp = 1000
# R = 8.31446261815324
# P_0 = 4e6
# n0 = PV/RT = 0.012542967614083599
# n(t) = 2e-5 * t * sin(2*pi/0.771185)
# ->n(.6)=1.148698e-05 + 0.0125565954649452 = 0.012568090079947709000000000 => P = n(.6)RT/V = 4.00366e6
# ->n(.7)=1.340148e-05 + 0.012568090079947709000000000 = 0.012581491559618054490000000 => P = n(.7)RT/V = 4.00793e6
# ->n(.8)=1.531598e-05 + 0.012581491559618054490000000 = 0.012596807559618054490000000 => P = n(.8)RT/V = 4.01281e6
# ->n(.9)=1.723047e-05 + 0.012596807559618054490000000 = 0.012614038059618054490000000 => P = n(.9)RT/V = 4.0183e6
# ->n(1.)=1.914497e-05 + 0.012614038059618054490000000 = 0.012633183059618054490000000 => P = n(1.)RT/V = 4.02439e6
#
[Functions]
[fission_gas]
type = ParsedFunction
expression = 'if(t > .5, 2.0e-5 * t * sin(pi * 2 / 0.771185),0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[fis_gas_released]
order = CONSTANT
family = MONOMIAL
initial_condition = 0
[]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.0125566030973731
[]
[]
[BCs]
[outer_radius_displacement]
type = DirichletBC
variable = disp_x
boundary = '10 12 5'
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[]
[AuxKernels]
[fis_gas_released]
type = MaterialRealAux
variable = fis_gas_released
property = fis_gas_released
execute_on = 'TIMESTEP_BEGIN'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 30
direction_min = 0.00324
direction_max = 0.50324
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 30
direction_min = 0.00324
direction_max = 0.50324
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
gas_mixture = gas_mixture_thermal_contact
initial_pressure = 4.0e6
material_input = 'fis_gas_released'
execute_on = 'initial TIMESTEP_END'
debug_output = true
[]
[]
[Materials]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[fission_gas]
type = GenericFunctionMaterial
prop_names = fis_gas_released
prop_values = fission_gas
[]
[]
[Postprocessors]
[fis_gas_released]
type = ElementAverageMaterialProperty
mat_prop = fis_gas_released
execute_on = 'initial timestep_end'
[]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[]
[Outputs]
csv = true
[chkfile]
type = CSV
execute_on = 'TIMESTEP_END'
[]
[]
(test/tests/axial_gas_communication/split_into_two_seperate_regions.i)
# The lowest level of the clad is displaced in the x direction, increasing the volume.
# The temperature is held constant. Since it is a closed system, the number of moles
# must be constant. The pressure must decrease following the Ideal Gas Law. The fuel
# is allowed to relocate, which makes the fuel permeable, opening a new path for the gas
# to escape after the cladding is breached.
# Volume = (.0055^2-.005^2)*pi*.5 + .0055^2*.3*pi = 0.0000367566
# Temp = 1000
# R = 8.3144621815
# Pressure = 4e6
# n =PV/RT = 0.017683228689781283
#
[Functions]
[fuel_displacement_function]
type = ParsedFunction
expression = 'if(t>0, if(y = 0.26157333333333332, 1e-2 * t, 0.0),0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.017683228689781283
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[]
[BCs]
[fuel_layer_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '10'
function = fuel_displacement_function
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '10 12 5'
value = 1000
[]
[]
[AuxKernels]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_BEGIN'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 33
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
gas_mixture = gas_mixture_thermal_contact
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
#debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_BEGIN'
[]
[fuel_outer_disp_x]
type = NodalExtremeValue
boundary = 10
variable = disp_x
execute_on = 'initial timestep_end'
[]
[cladding_outer_disp_x]
type = NodalExtremeValue
boundary = 2
variable = disp_x
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
automatic_scaling = true
compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.01
n_startup_steps = 1
dt = .01
end_time = .2
[]
[Outputs]
csv = true
exodus = true
[console]
type = Console
max_rows = 50
[]
[chkfile]
type = CSV
hide = 'burst clad_volume cladding_outer_disp_x fuel_outer_disp_x gap_layer_pressure_max gap_layer_pressure_min gas_volume maximum_power pellet_volume plenum_mole_rate plenum_pressure plenum_temp plenum_volume'
execute_on = 'FINAL'
[]
[]
(test/tests/axial_gas_communication/cladding_burst_with_impermeable_fuel.i)
# Moles are released into out of the closed volume system at constant temperature and volume,
# decreasing the pressure following the Ideal Gas Law.
#
# Volume = (.0051^2-.005^2)*pi*.5 + .0051^2*.3*pi = 2.610035177e-5
# Temp = 1000
# R = 8.31446261815324
# P_0 = 4e6
# n0 = PV/RT = 0.01255660309737312643751928
#
[Functions]
[burst_function]
type = ParsedFunction # Failure at the lowest fuel-cladding layer
expression = 'if(t > .01,if( y = 0.028240000000000001, 1.0, 0.0),0.0)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[total_moles]
order = CONSTANT
family = MONOMIAL
initial_condition = 0.01255660309737312643751928
[]
[]
[BCs]
[outer_radius_displacement]
type = DirichletBC
variable = disp_x
boundary = '10 12 5'
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temperature
boundary = '8 12 5'
value = 1000
[]
[]
[AuxKernels]
[bursted]
type = FunctionAux
variable = burst
function = burst_function
boundary = 2
execute_on = 'initial TIMESTEP_BEGIN'
[]
[total_moles]
type = AxialGasCommunicationAux
axial_gas_communication = axial_gas_communication
output_option = 'TOTAL_MOLES'
variable = total_moles
execute_on = 'TIMESTEP_END'
[]
[]
[UserObjects]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[axial_gas_communication]
type = AxialGasCommunication
direction = y
num_layers = 13
distance = pt_distance
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
out_of_plane_strain_cladding = cladding_strain_yy
layered_clad_internal_volume = layered_clad_internal_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_maximum_fuel_radius = layered_maximum_fuel_radius
layered_fuel_temperature = layered_fuel_average
layered_gas_gap_temperature = gap_layer_temperature
gas_mixture = gas_mixture_thermal_contact
axial_relocation_object = axial_relocation
cladding_failure_status = cladding_failure_status
initial_pressure = 4.0e6
execute_on = 'initial TIMESTEP_END'
#debug_output = true
[]
[]
[Materials]
# This counters the initial stress from the plenum pressure,
# allowing for no compression of the fuel pellet
[ini_stress_fuel]
type = ComputeEigenstrainFromInitialStress
block = fuel
initial_stress = '-4.0e6 0 0 0 0 0 0 0 -4.0e6'
eigenstrain_name = ini_stress_fuel
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = 0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0
[]
[]
[Postprocessors]
[total_moles]
type = ElementExtremeValue
value_type = max
variable = total_moles
execute_on = 'INITIAL TIMESTEP_END'
[]
[average_gas_pressure]
type = SideAverageValue
variable = gap_layer_pressure
boundary = 5
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
automatic_scaling = true
compute_scaling_once = false
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_tol = 1e-3
l_max_its = 50
start_time = -.01
n_startup_steps = 1
dt = .01
end_time = .33 #50
[]
[Outputs]
csv = true
exodus = true
[chkfile]
type = CSV
execute_on = 'TIMESTEP_END'
[]
[]