# Layered 1D Mesh

Creates an axisymmetric mesh composed of layers of 1-dimensional elements.

## Description

This mesh class generates a sliced or layered 1-dimensional mesh of fuel and cladding. It allows the user to specify radii, heights, mesh density, and number of layers. The fuel or cladding portion of the mesh can be disabled if desired. Details about common input paramters are as follows.

With uniform_slice_heights set to true, fuel slice heights are computed based on fuel_height. If set to false, provide slice_heights but not fuel_height. slice_heights is a list of heights for every slice in the model, including the plenum if a plenum is used.

plenum_height is the total height of cladding not adjacent to fuel.

note:Proper calculation of plenum_height

For comparison with 2D meshes, plenum_height must be the total of any non-fueled height above and below the fuel. Also note that plenum_height is only used with uniform_slice_heights set to true. If uniform_slice_heights is false and include_plenum is true, the last entry in slice_heights is the height of the plenum (again, the total non-fueled height).

pellet_bottom_coor is the vertical coordinate of the start of the fuel column. This means that the vertical coordinate of the first mesh layer will be at pellet_bottom_coor plus one half of the first layer height.

Figure 1: Diagram of simplified fuel and cladding mesh generated by Layered1DMesh. Coordinate positions of layers are listed along the vertical axis. Model radii are given along the horizontal axis.

## Example Input Syntax

In the follow example, a simple mesh with two layers will be created. Since slices_per_block is 1, only 1 fuel/cladding layer will be created. A cladding-only plenum layer will also be created.


[Mesh]
type = Layered1DMesh
fuel_height = 0.3183098861837907 # 1 / pi
plenum_height = 0.3183098861837907 # 1 / pi
slices_per_block = 1
pellet_bottom_coor = 0
pellet_mesh_density = customize
nx_p = 2
nx_c = 1
bx_p = 2
[]
(test/tests/layered_1D/internal_volume.i)

In this example, both the fuel and plenum portions of the mesh are turned off. A single layer will be created (slices_per_block is 1) that has a height of 0.1 (fuel_height).


[Mesh]
type = Layered1DMesh
fuel_height = 0.01
include_fuel = false
include_plenum = false
slices_per_block = 1
pellet_bottom_coor = 0
elem_type = EDGE2
nx_c = 1
[]
(test/tests/layered_1D/creep_limback.i)

## Input Parameters

• slices_per_blockNumber of slices per block. Multiple values are provided if multiple fuel blocks are used.For cases with only cladding, this is a single number providing the total number of slices for the cladding.

C++ Type:std::vector

Description:Number of slices per block. Multiple values are provided if multiple fuel blocks are used.For cases with only cladding, this is a single number providing the total number of slices for the cladding.

### Required Parameters

Default:medium

C++ Type:MooseEnum

Description:Sets the mesh density of the cladding (coarse, medium, fine).

Default:0.00041

C++ Type:double

• pellet_mesh_densitymediumSets the mesh density of the pellet (coarse, medium, fine).

Default:medium

C++ Type:MooseEnum

Description:Sets the mesh density of the pellet (coarse, medium, fine).

• elem_typeEDGE3The type of element from libMesh to generate.

Default:EDGE3

C++ Type:MooseEnum

Description:The type of element from libMesh to generate.

• slice_heightsHeight of each slice for cases when non-uniform slice heights are used.The number of slices provided must be the total number of fuel slices, plus one slice for the plenum, if a plenum is used.This equals the number of slices in the cladding.

C++ Type:std::vector

Description:Height of each slice for cases when non-uniform slice heights are used.The number of slices provided must be the total number of fuel slices, plus one slice for the plenum, if a plenum is used.This equals the number of slices in the cladding.

• nx_p8number of fuel elements in radial direction.

Default:8

C++ Type:unsigned int

Description:number of fuel elements in radial direction.

• fuel_heightHeight of the fuel.

C++ Type:double

Description:Height of the fuel.

Default:2

C++ Type:unsigned int

• include_fuelTrueWhether to include the fuel block.

Default:True

C++ Type:bool

Description:Whether to include the fuel block.

• pellet_outer_radius0.0041 Pellet outer radius. If more than one given, number must match number of blocks.

Default:0.0041

C++ Type:std::vector

Description:Pellet outer radius. If more than one given, number must match number of blocks.

• pellet_bottom_coor0.00324Axial location of the start of the fuel stack.

Default:0.00324

C++ Type:double

Description:Axial location of the start of the fuel stack.

Default:True

C++ Type:bool

Description:Whether to include the clad block.

• include_plenumTrueWhether to include the plenum.

Default:True

C++ Type:bool

Description:Whether to include the plenum.

• pellet_inner_radius0 Pellet inner radius. If more than one given, number must match number of blocks.

Default:0

C++ Type:std::vector

Description:Pellet inner radius. If more than one given, number must match number of blocks.

• bx_p1The amount to grow (or shrink) the fuel elements in the radial direction.

Default:1

C++ Type:double

Description:The amount to grow (or shrink) the fuel elements in the radial direction.

Default:2.5e-05

C++ Type:double

Description:Gap between maximum outer radius of pellet and inside surface of cladding.

• plenum_heightHeight of the total plenum, including above and below the fuel.

C++ Type:double

Description:Height of the total plenum, including above and below the fuel.

• uniform_slice_heightsTrueWhether heights of fuel/cladding slices are uniform, excluding plenum height.

Default:True

C++ Type:bool

Description:Whether heights of fuel/cladding slices are uniform, excluding plenum height.

### Optional Parameters

• partitionerdefaultSpecifies a mesh partitioner to use when splitting the mesh for a parallel computation.

Default:default

C++ Type:MooseEnum

Description:Specifies a mesh partitioner to use when splitting the mesh for a parallel computation.

• centroid_partitioner_directionSpecifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial

C++ Type:MooseEnum

Description:Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial

### Partitioning Parameters

• dim1This is only required for certain mesh formats where the dimension of the mesh cannot be autodetected. In particular you must supply this for GMSH meshes. Note: This is completely ignored for ExodusII meshes!

Default:1

C++ Type:MooseEnum

Description:This is only required for certain mesh formats where the dimension of the mesh cannot be autodetected. In particular you must supply this for GMSH meshes. Note: This is completely ignored for ExodusII meshes!

• enableTrueSet the enabled status of the MooseObject.

Default:True

C++ Type:bool

Description:Set the enabled status of the MooseObject.

• patch_update_strategyneverHow often to update the geometric search 'patch'. The default is to never update it (which is the most efficient but could be a problem with lots of relative motion). 'always' will update the patch for all slave nodes at the beginning of every timestep which might be time consuming. 'auto' will attempt to determine at the start of which timesteps the patch for all slave nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of slave nodes for which penetration is not detected. If there can be substantial relative motion between the master and slave surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.

Default:never

C++ Type:MooseEnum

Description:How often to update the geometric search 'patch'. The default is to never update it (which is the most efficient but could be a problem with lots of relative motion). 'always' will update the patch for all slave nodes at the beginning of every timestep which might be time consuming. 'auto' will attempt to determine at the start of which timesteps the patch for all slave nodes needs to be updated automatically.'iteration' updates the patch at every nonlinear iteration for a subset of slave nodes for which penetration is not detected. If there can be substantial relative motion between the master and slave surfaces during the nonlinear iterations within a timestep, it is advisable to use 'iteration' option to ensure accurate contact detection.

• control_tagsAdds user-defined labels for accessing object parameters via control logic.

C++ Type:std::vector

Description:Adds user-defined labels for accessing object parameters via control logic.

• nemesisFalseIf nemesis=true and file=foo.e, actually reads foo.e.N.0, foo.e.N.1, ... foo.e.N.N-1, where N = # CPUs, with NemesisIO.

Default:False

C++ Type:bool

Description:If nemesis=true and file=foo.e, actually reads foo.e.N.0, foo.e.N.1, ... foo.e.N.N-1, where N = # CPUs, with NemesisIO.

• construct_node_list_from_side_listTrueWhether or not to generate nodesets from the sidesets (usually a good idea).

Default:True

C++ Type:bool

Description:Whether or not to generate nodesets from the sidesets (usually a good idea).