# Creating a Layered1D Input File from a 2D-RZ Input File

The Bison Layered1D capability was designed to ensure reusability of the governing PDE equations and many of the consititutive thermal and mechanical material models. This reusability significantly reduces the number of changes that must be made to convert a 2D-RZ axisymmetric input file to Layered1D.

Nonetheless, the assumptions made about the out-of-plane mechanical stress and strain (see the introduction on GeneralizedPlaneStrain) require some changes to the strain calculators and to the displacement variables used. Additionally the mesh must also be changed to reflect the change in simulation dimension when transitioning to a Layered1D problem.

warning:Tensor Mechanics 2D-RZ Input File Assumed

This guide assumes a working 2D-RZ tensor mechanics assessment case input file. See the migration guidelines for changing a solid mechanics input file to use tensor mechanics if you are beginning with a 2D-RZ solid mechanics input file.

## Layered 1D Model Definition

The term 'Layered 1D' in Bison is defined as a cylindrical fuel geometry model composed of coupled 1D simulations on each axial fuel slice at given axial positions along the rod. The fuel rod is divided into several axial slices, where 1D versions of the thermal and mechanical governing PDEs are solved.

note:Bison Layered 1D Model Overview

See the Introduction to Layered 1D Models for a description of how the Layered 1D capability is implemented in Bison, including a useful schematic which illustrates the key concept of axial slices.

## Global Variables

These variables are defined outside of the usual block structure of the Bison input file. By definition, the Layered 1D problem has one fewer displacement variable the corresponding 2D-RZ Axisymmetric problem:


displacements = 'disp_x'


## Problem Block

To use the ReferenceResidualProblem option with the Layered 1D model, all of the scalar out-of-plane strain variables must be listed in the ReferenceResidualProblem input file block, as shown below


[Problem]
coord_type = RZ
type = ReferenceResidualProblem
[]
(test/tests/layered_1D/multi_block.i)

and the AuxVariable saved_x for the displacement variable must be added to the Layered1DMaster.

[./Layered1DMaster]
[./fuel_1]
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
block = fuel_1
out_of_plane_pressure = fuel_axial_pressure
use_displaced_mesh = true
strain = finite
eigenstrain_names = 'fuelthermal_strain'
save_in = saved_x
[../]
[./fuel_2]
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
block = fuel_2
out_of_plane_pressure = fuel_axial_pressure
use_displaced_mesh = true
strain = finite
eigenstrain_names = 'fuelthermal_strain'
save_in = saved_x
[../]
[./fuel_3]
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
block = fuel_3
out_of_plane_pressure = fuel_axial_pressure
use_displaced_mesh = true
strain = finite
eigenstrain_names = 'fuelthermal_strain'
save_in = saved_x
[../]
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
use_displaced_mesh = true
strain = finite
save_in = saved_x
[../]
[../]
(test/tests/layered_1D/multi_block.i)

## UserObject Block

Regardless if the fuel pin geometry user object is used in the 2D-RZ Axisymmetric input file, the Layered1DFuelPinGeometry user object is required for use in Layered 1D simulations.


[UserObjects]
[./pin_geometry]
type = Layered1DFuelPinGeometry
[../]
[]
(test/tests/layered_1D/internal_volume.i)

## Mesh Block

The mesh for Layered 1D simulations is generated by the internal Bison mesh generator, Layered1DMesh. An example Layered1D model mesh block is:


[Mesh]
type = Layered1DMesh
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
slices_per_block = 10
fuel_height = 0.1186
plenum_height = 0.027
[]
(examples/tensor_mechanics/1.5D_rodlet_10pellets/Smeared_1.5D.i)

Particular attention should be given to ensuring that these variables correctly represent the geometry of the 2D-RZ mesh geometry. Even small differences in the geometry can significantly alter the results.

• fuel_height: Ensure this parameter matches the overall total height of the fuel stack in the 2D-RZ mesh at the start of the simulation

• plenum_height: The value must be the sum of the vertical clad-fuel gap at the bottom of the pellet stack and the vertical clad-fuel gap at the top of the fuel stack. Analysts should verify this sum within Paraview or another mesh viewing software

• slices_per_block: The number of slices per blocks; if multiple fuel blocks are present in the mesh block (e.g. for insulator pellets) list multiple values as the argument for this parameter.

• slice_height: If the height varies among the axial fuel slices, add the specific heights as a string argument to this parameter.

The number of slices required for a Layered 1D simulation depends on the axial power profile. For a smooth profile, generally 10 or more slices are recommended for modeling a fuel rod. For a complex axial profile, significantly more slices may be required.

## AuxVariables and AuxKernels

The Layered1DMaster action used for Layered 1D simulations generates the same set of Rank-2 auxvariable and auxkernel pairs for output the data as the TensorMechanics MasterAction used in the 2D-RZ Axisymmetric models. Therefore no changes are required to the auxvariables and auxkernels when transitioning a 2D-RZ Axisymmetric input file to a Layered 1D model.

## Functions Block

The majority of the entries in the functions block are identical to the 2D-RZ Axisymmetric simulation input files; however, two additional functions are required to correctly model the axial pressure due to the plenum pressure and coolant pressure: the ParsedFunction and the CladdingAxialPressureFunction.


[./fuel_axial_pressure]
type = ParsedFunction
value = plenum_pressure
vars = plenum_pressure
vals = plenum_pressure
[../]
(examples/tensor_mechanics/1.5D_rodlet_10pellets/Smeared_1.5D.i)

plenum_pressure = plenum_pressure
coolant_pressure = pressure_ramp
coolant_pressure_scaling_factor = 15.5e6
fuel_pin_geometry = pin_geometry
[../]
(examples/tensor_mechanics/1.5D_rodlet_10pellets/Smeared_1.5D.i)

Take care in setting the coolant_pressure_scaling_factor; this value must be equal to the value of the factor parameter in the coolant pressure boundary condition block. The incorrect use of this parameter, or the mismatch between this parameter and the analogous coolant pressure boundary condition block is a potential source of error.

## Kernels Block

The kernels for temperature are the same for both the 2D-RZ Axisymmetric input file and the Layered 1D input file.

## Modules Block

The general TensorMechanics MasterAction used in the 2D-RZ input file is replaced by the specific Layered1DMaster action:


[Modules]
[./TensorMechanics]
[./Layered1DMaster]
[./fuel]
block = fuel
strain = FINITE
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
out_of_plane_pressure = fuel_axial_pressure
eigenstrain_names = 'fuelthermal_strain swelling_strain fuel_relocation_strain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_xx'
[../]
strain = FINITE
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_xx'
[../]
[../]
[../]
[]
(examples/tensor_mechanics/1.5D_rodlet_10pellets/Smeared_1.5D.i)

## Contact Blocks

Changes to the contact module settings in the Layered 1D input file are necessary because of the limited number of interaction points across the slices. The majority of the changes required are only in the contact module:

• formulation: set this parameter equal to kinematic

• system: change the argument for this parameter to constraint

The limited number of slices affects the smoothing distance in both mechanical and thermal contact:

• Remove the normal_smoothing_distance parameter from both the mechanical contact block and the thermal contact block.

## BCs Block

Changes to the boundary condition block are reflective of the reduced number of degrees of freedom within a Layered 1D simulation.

• Remove all boundary conditions associated with the y-displacement variable, disp_y

• Ensure that all displacement variable strings refer to only the x-displacement variable, that is, displacements = 'disp_x'

• If the pellets in the Layered 1D simulation are annular, remove all x-displacement variable boundary conditions: the hoop stress generated by the axisymmetric materials constrains displacement in the x-direction.

• Modify the clad_surface_temperature boundary condition to apply to only boundary = 2

• Modify the coolant_pressure boundary condition to apply to only boundary = 2

## Materials Block

Because the Layered 1D Bison capability is built on the Tensor Mechanics module, no changes are required to the Materials block.

## Executioner Block

If running the 1.5D simulation on a machine with PETSc 3.7.4 or PETSc 3.7.5, use lu as the solver. Generally it is possible to run a Layered 1D simulation on a single processor, and using the lu solver is acceptable whenever running with a single processor.

## PostProcessors Block

Different postprocessors are required for Layered 1D simulations; these new postprocessors account for the geometrical simplifications made by the Layered 1D mesh.

• SideAverageValueLayered1D: Replace the type SideAverageValue with this Layered 1D specific post processor and add the parameter setting fuel_pin_geometry = pin_geometry.

• InternalVolumeLayered1D: Replace the post processor type InternalVolume with this Layered 1D specific post processor and add the parameter setting fuel_pin_geometry = pin_geometry.

• In the total rod power post processor, ElementIntegralPower, add the parameter fuel_pin_geometry = pin_geometry`.