Input File Content

The six key parts of an input file are as follows: [Mesh], [Variables], [Kernels], [BCs], [Executioner], and [Outputs]. This guide is an overview of what elements to modify (or not modify) within these parts to run an electrothermal simulation with the desired parameters. A key term to keep in mind is “block.” The six key parts as mentioned earlier are considered high-level blocks and will be referred to as blocks for the remainder of this guide. View the MOOSE Workshop to explore these six parts in greater detail. The majority of this input file is presented as a template, and only a few lines of the input file will need to be modified for the purposes of this tutorial. The full input file is available within the MALAMUTE github repository:

# Demonstration simulation of standard DCS-5 run for MALAMUTE tutorial
#       Uses 4 graphite spacers, 2 carbon-carbon spacers, 2 straight graphite punches
#           working powder is copper, assumed to be fully dense at simulation start
#       Geometry for all 6 spacers, the 2 punches, mold, and initial working powder volume
#           are defined below by radius and height, in meters
#       The simulation is defined using axisymmetric RZ assumptions
#       Electric and thermal physics are included in the simulation, and a constant
#           interface pressure of 1.0 MPa
#
# BCs:
#    Potential:
#       (top electrode, top surface) --> Neumann condition function of time,
#                                        generalized from an uninsulated, 20mm G535 graphite tooling DCS-5 run
#                                        from Preston et al. Composites Part B: Engineering 283 (August 2024) 111679
#       (bottom electrode, bottom surface) = 0 V
#       (elsewhere) --> natural boundary conditions (no current external to circuit)
#    Temperature:
#       (top electrode, top surface) = 300 K
#       (bottom electrode, bottom surface) = 300 K
#       (external right side of spacers, die wall) --> simple radiative BC into black body at 300 K
#       (external right side of punches, uncovered) --> simple radiative BC into black body at 300 K
#       (internal left side, along centerline) --> symmetry boundary conditions
# Modeling across interfaces uses the mortar contact, for both thermal and electrical:
#       (for contact with blocks touching) --> GapFluxModelPressureDependentConduction
#                                              A constant interface pressure of 1.0 MPa is prescribed
#       (for contact across gap filled with graphite foil)  --> GapFluxModelConduction
#       (for contact across gap, argon gas filled)  --> GapFluxModelConduction
# Initial Conditions:
#       Potential: 0 V
#       Temperature = 300 K

## Parameters for the standard DCS-5 geometry to build the mesh, units in meters
ram_spacer_radius = 0.031
ram_spacer_height = 0.020
ram_spacer_overhang_radius = 0.01
ram_spacer_overhang_height = 0.002

cc_spacer_radius = 0.020
cc_spacer_height = 0.00635

sinter_spacer_radius = 0.020
sinter_spacer_height = 0.027
sinter_spacer_overhang_radius = 0.0135 ## is less than the 13.55 that actually exists to facilitate node matching in mesh building step
sinter_spacer_overhang_height = 0.002

punch_radius = 0.006
punch_height = 0.020

powder_radius = 0.006
powder_height = 0.00984

die_wall_height = 0.030
die_wall_inner_radius = 0.006125
die_wall_thickness = 0.013875

#######################################################################################
### Calculated values from user-provided results
ram_spacer_surface_area = ${fparse pi * ram_spacer_radius * ram_spacer_radius}
# ram_spacer_overhang_offset = ${fparse ram_spacer_radius - ram_spacer_overhang_radius}
ram_cc_spacers_height = ${fparse ram_spacer_height + cc_spacer_height}
ram_cc_sinter_spacers_height = ${fparse ram_cc_spacers_height + sinter_spacer_height}
ram_cc_sinter_punch_height = ${fparse ram_cc_sinter_spacers_height + punch_height}
die_wall_outer_radius = ${fparse die_wall_inner_radius + die_wall_thickness}
stack_with_powder = ${fparse ram_cc_sinter_punch_height + powder_height}

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  [bottom_ram_spacer]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 31
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 20
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${ram_spacer_radius}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${ram_spacer_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = bottom_ram_spacer
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
  []
  [bottom_ram_overhang]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 10
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 2
    xmin<<<{"description": "Lower X Coordinate of the generated mesh"}>>> = ${fparse ram_spacer_radius - ram_spacer_overhang_radius}
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${ram_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${ram_spacer_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse ram_spacer_height + ram_spacer_overhang_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = bottom_ram_spacer_overhang
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
  []
  [stitch_bottom_ram_spacer]
    type = StitchedMeshGenerator<<<{"description": "Allows multiple mesh files to be stitched together to form a single mesh.", "href": "../../../source/meshgenerators/StitchedMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'bottom_ram_spacer bottom_ram_overhang'
    stitch_boundaries_pairs<<<{"description": "Pairs of boundaries to be stitched together between the 1st mesh in inputs and each consecutive mesh"}>>> = 'bottom_ram_spacer_top bottom_ram_spacer_overhang_bottom'
  []
  [bottom_ram_spacer_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'stitch_bottom_ram_spacer'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = '1'
  []
  [bottom_cc_spacer]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 35
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 7
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${cc_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${ram_spacer_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${ram_cc_spacers_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = 'bottom_cc_spacer'
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 8
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
  []
  [bottom_cc_spacer_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'bottom_cc_spacer'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = '2'
  []
  [bottom_sinter_spacer]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 40
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 27
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${sinter_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${ram_cc_spacers_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${ram_cc_sinter_spacers_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = bottom_sinter_spacer
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 12
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
  []
  [bottom_sinter_overhang]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 27
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 2
    xmin<<<{"description": "Lower X Coordinate of the generated mesh"}>>> = ${fparse sinter_spacer_radius - sinter_spacer_overhang_radius}
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${sinter_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${ram_cc_sinter_spacers_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse ram_cc_sinter_spacers_height + sinter_spacer_overhang_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = bottom_sinter_spacer_overhang
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 16
  []
  [stitch_bottom_sinter_spacer]
    type = StitchedMeshGenerator<<<{"description": "Allows multiple mesh files to be stitched together to form a single mesh.", "href": "../../../source/meshgenerators/StitchedMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'bottom_sinter_spacer bottom_sinter_overhang'
    stitch_boundaries_pairs<<<{"description": "Pairs of boundaries to be stitched together between the 1st mesh in inputs and each consecutive mesh"}>>> = 'bottom_sinter_spacer_top bottom_sinter_spacer_overhang_bottom'
  []
  [bottom_sinter_spacer_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'stitch_bottom_sinter_spacer'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = '3'
  []
  [bottom_punch]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 10
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 24
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${punch_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${ram_cc_sinter_spacers_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${ram_cc_sinter_punch_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = 'bottom_punch'
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 20
  []
  [bottom_punch_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_punch
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = 4
  []

  [powder]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 15
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 18
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${powder_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${ram_cc_sinter_punch_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${stack_with_powder}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = powder
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 24
  []
  [powder_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = powder
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = 5
  []

  [top_punch]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 10
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 24
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${punch_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${stack_with_powder}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + punch_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = 'top_punch'
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 28
  []
  [top_punch_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = top_punch
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = 6
  []
  [top_sinter_spacer]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 40
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 27
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${sinter_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + punch_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height - ram_cc_spacers_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = top_sinter_spacer
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 32
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
  []
  [top_sinter_overhang]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 27
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 2
    xmin<<<{"description": "Lower X Coordinate of the generated mesh"}>>> = ${fparse sinter_spacer_radius - sinter_spacer_overhang_radius}
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${sinter_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + punch_height - sinter_spacer_overhang_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + punch_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = top_sinter_spacer_overhang
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 36
  []
  [stitch_top_sinter_spacer]
    type = StitchedMeshGenerator<<<{"description": "Allows multiple mesh files to be stitched together to form a single mesh.", "href": "../../../source/meshgenerators/StitchedMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'top_sinter_spacer top_sinter_overhang'
    stitch_boundaries_pairs<<<{"description": "Pairs of boundaries to be stitched together between the 1st mesh in inputs and each consecutive mesh"}>>> = 'top_sinter_spacer_bottom top_sinter_spacer_overhang_top'
  []
  [top_sinter_spacer_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'stitch_top_sinter_spacer'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = '7'
  []
  [top_cc_spacer]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 35
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 7
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${cc_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height - ram_cc_spacers_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height - ram_spacer_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = 'top_cc_spacer'
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 40
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
  []
  [top_cc_spacer_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'top_cc_spacer'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = '8'
  []
  [top_ram_spacer]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 31
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 20
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${ram_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height - ram_spacer_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = top_ram_spacer
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 44
  []
  [top_ram_overhang]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 10
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 2
    xmin<<<{"description": "Lower X Coordinate of the generated mesh"}>>> = ${fparse ram_spacer_radius - ram_spacer_overhang_radius}
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${ram_spacer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height - ram_spacer_height - ram_spacer_overhang_height}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse stack_with_powder + ram_cc_sinter_punch_height - ram_spacer_height}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = top_ram_spacer_overhang
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 48
  []
  [stitch_top_ram_spacer]
    type = StitchedMeshGenerator<<<{"description": "Allows multiple mesh files to be stitched together to form a single mesh.", "href": "../../../source/meshgenerators/StitchedMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'top_ram_spacer top_ram_overhang'
    stitch_boundaries_pairs<<<{"description": "Pairs of boundaries to be stitched together between the 1st mesh in inputs and each consecutive mesh"}>>> = 'top_ram_spacer_bottom top_ram_spacer_overhang_top'
  []
  [top_ram_spacer_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'stitch_top_ram_spacer'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = '9'
  []

  [die_wall]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
    nx<<<{"description": "Number of elements in the X direction"}>>> = 14
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 30
    xmin<<<{"description": "Lower X Coordinate of the generated mesh"}>>> = ${die_wall_inner_radius}
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = ${die_wall_outer_radius}
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = ${fparse ram_cc_sinter_punch_height + (powder_height - die_wall_height) / 2.0}
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${fparse ram_cc_sinter_punch_height + (powder_height + die_wall_height) / 2.0}
    boundary_name_prefix<<<{"description": "If provided, prefix the built in boundary names with this string"}>>> = die_wall
    elem_type<<<{"description": "The type of element from libMesh to generate (default: linear element for requested dimension)"}>>> = QUAD8
    boundary_id_offset<<<{"description": "This offset is added to the generated boundary IDs"}>>> = 52
  []
  [die_wall_block]
    type = SubdomainIDGenerator<<<{"description": "Sets all the elements of the input mesh to a unique subdomain ID.", "href": "../../../source/meshgenerators/SubdomainIDGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'die_wall'
    subdomain_id<<<{"description": "New subdomain IDs of all elements"}>>> = 10
  []

  [ten_blocks]
    type = MeshCollectionGenerator<<<{"description": "Collects multiple meshes into a single (unconnected) mesh.", "href": "../../../source/meshgenerators/MeshCollectionGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'bottom_ram_spacer_block bottom_cc_spacer_block bottom_sinter_spacer_block
              bottom_punch_block powder_block top_punch_block top_sinter_spacer_block
              top_cc_spacer_block top_ram_spacer_block die_wall_block'
  []
  [block_rename]
    type = RenameBlockGenerator<<<{"description": "Changes the block IDs and/or block names for a given set of blocks defined by either block ID or block name. The changes are independent of ordering. The merging of blocks is supported.", "href": "../../../source/meshgenerators/RenameBlockGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = ten_blocks
    old_block<<<{"description": "Elements with these block ID(s)/name(s) will be given the new block information specified in 'new_block'"}>>> = '1 2 3 4 5 6 7 8 9 10'
    new_block<<<{"description": "The new block ID(s)/name(s) to be given by the elements defined in 'old_block'."}>>> = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
                 powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []

  [uncovered_bottom_punch_right]
    type = SideSetsFromBoundingBoxGenerator<<<{"description": "Defines new sidesets using currently-defined sideset IDs inside or outside of a bounding box.", "href": "../../../source/meshgenerators/SideSetsFromBoundingBoxGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = block_rename
    bottom_left<<<{"description": "The bottom left point (in x,y,z with spaces in-between)."}>>> = '${fparse punch_radius - 1.0e-3} ${fparse ram_cc_sinter_spacers_height + sinter_spacer_overhang_height + 1.0e-4} 0.0'
    top_right<<<{"description": "The bottom left point (in x,y,z with spaces in-between)."}>>> = '${fparse punch_radius + 1.0e-3} ${fparse ram_cc_sinter_punch_height + (powder_height - die_wall_height) / 2.0 - 1.0e-4} 0.0'
    boundary_new<<<{"description": "Boundary on specified block within the bounding box to assign"}>>> = 'uncovered_bottom_punch_right'
    included_boundaries<<<{"description": "A set of boundary names or ids whose sides will be included in the new sidesets.  A side is only added if it also belongs to one of these boundaries."}>>> = 'bottom_punch_right'
  []
  [uncovered_top_punch_right]
    type = SideSetsFromBoundingBoxGenerator<<<{"description": "Defines new sidesets using currently-defined sideset IDs inside or outside of a bounding box.", "href": "../../../source/meshgenerators/SideSetsFromBoundingBoxGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = uncovered_bottom_punch_right
    bottom_left<<<{"description": "The bottom left point (in x,y,z with spaces in-between)."}>>> = '${fparse punch_radius - 1.0e-3} ${fparse ram_cc_sinter_punch_height + (powder_height + die_wall_height) / 2.0 + 1.0e-4} 0.0'
    top_right<<<{"description": "The bottom left point (in x,y,z with spaces in-between)."}>>> = '${fparse punch_radius + 1.0e-3} ${fparse stack_with_powder + punch_height - sinter_spacer_overhang_height - 1.0e-4} 0.0'
    boundary_new<<<{"description": "Boundary on specified block within the bounding box to assign"}>>> = 'uncovered_top_punch_right'
    included_boundaries<<<{"description": "A set of boundary names or ids whose sides will be included in the new sidesets.  A side is only added if it also belongs to one of these boundaries."}>>> = 'top_punch_right'
  []

  [bottom_ram_cc_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_ram_spacer_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 111
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_ram_cc_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = uncovered_top_punch_right
  []
  [bottom_ram_cc_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_cc_spacer_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 212
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_ram_cc_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_ram_cc_primary_subdomain
  []
  [bottom_cc_sinter_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_cc_spacer_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 211
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_cc_sinter_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_ram_cc_secondary_subdomain
  []
  [bottom_cc_sinter_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_sinter_spacer_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 312
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_cc_sinter_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_cc_sinter_primary_subdomain
  []
  [bottom_sinter_punch_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_sinter_spacer_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 311
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_sinter_punch_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_cc_sinter_secondary_subdomain
  []
  [bottom_sinter_punch_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_punch_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 412
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_sinter_punch_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_sinter_punch_primary_subdomain
  []
  [bottom_punch_powder_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_punch_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 411
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_punch_powder_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_sinter_punch_secondary_subdomain
  []
  [bottom_punch_powder_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'powder_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 512
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'bottom_punch_powder_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_punch_powder_primary_subdomain
  []

  [powder_top_punch_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'powder_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 511
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'powder_top_punch_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = bottom_punch_powder_secondary_subdomain
  []
  [powder_top_punch_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_punch_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 612
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'powder_top_punch_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = powder_top_punch_primary_subdomain
  []
  [top_punch_sinter_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_punch_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 611
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'top_punch_sinter_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = powder_top_punch_secondary_subdomain
  []
  [top_punch_sinter_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_sinter_spacer_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 712
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'top_punch_sinter_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = top_punch_sinter_primary_subdomain
  []
  [top_sinter_cc_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_sinter_spacer_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 711
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'top_sinter_cc_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = top_punch_sinter_secondary_subdomain
  []
  [top_sinter_cc_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_cc_spacer_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 812
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'top_sinter_cc_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = top_sinter_cc_primary_subdomain
  []
  [top_cc_ram_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_cc_spacer_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 811
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'top_cc_ram_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = top_sinter_cc_secondary_subdomain
  []
  [top_cc_ram_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_ram_spacer_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 912
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'top_cc_ram_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = top_cc_ram_primary_subdomain
  []

  [inside_die_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'die_wall_left'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 1013
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'inside_die_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = top_cc_ram_secondary_subdomain
  []
  [inside_low_punch_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_punch_right'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 414
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'inside_low_punch_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = inside_die_primary_subdomain
  []
  [inside_powder_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'powder_right'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 514
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'inside_powder_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = inside_low_punch_secondary_subdomain
  []
  [inside_top_punch_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_punch_right'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 614
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'inside_top_punch_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = inside_powder_secondary_subdomain
  []

  [gap_bottom_sinter_die_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'bottom_sinter_spacer_overhang_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 3111
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'gap_bottom_sinter_die_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = inside_top_punch_secondary_subdomain
  []
  [gap_bottom_sinter_die_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'die_wall_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 1022
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'gap_bottom_sinter_die_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = gap_bottom_sinter_die_primary_subdomain
  []
  [gap_top_sinter_die_primary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'top_sinter_spacer_overhang_bottom'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 7222
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'gap_top_sinter_die_primary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = gap_bottom_sinter_die_secondary_subdomain
  []
  [gap_top_sinter_die_secondary_subdomain]
    type = LowerDBlockFromSidesetGenerator<<<{"description": "Adds lower dimensional elements on the specified sidesets.", "href": "../../../source/meshgenerators/LowerDBlockFromSidesetGenerator.html"}>>>
    sidesets<<<{"description": "The sidesets from which to create the new block"}>>> = 'die_wall_top'
    new_block_id<<<{"description": "The lower dimensional block id to create"}>>> = 1011
    new_block_name<<<{"description": "The lower dimensional block name to create (optional)"}>>> = 'gap_top_sinter_die_secondary_subdomain'
    input<<<{"description": "The mesh we want to modify"}>>> = gap_top_sinter_die_primary_subdomain
  []

  patch_update_strategy = iteration
  second_order<<<{"description": "Converts a first order mesh to a second order mesh.  Note: This is NOT needed if you are reading an actual first order mesh."}>>> = true
  coord_type = RZ
[]

[Problem<<<{"href": "../../../syntax/Problem/index.html"}>>>]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
  converge_on = 'temperature potential'
[]

[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
  [temperature]
    initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 300.0
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential]
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []

  [temperature_bottom_ram_cc_lm]
    block = 'bottom_ram_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_ram_cc_lm]
    block = 'bottom_ram_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_bottom_cc_sinter_lm]
    block = 'bottom_cc_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_cc_sinter_lm]
    block = 'bottom_cc_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_bottom_sinter_punch_lm]
    block = 'bottom_sinter_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_sinter_punch_lm]
    block = 'bottom_sinter_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_bottom_punch_powder_lm]
    block = ' bottom_punch_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_punch_powder_lm]
    block = 'bottom_punch_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_powder_top_punch_lm]
    block = 'powder_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_powder_top_punch_lm]
    block = ' powder_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_top_punch_sinter_lm]
    block = 'top_punch_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_top_punch_sinter_lm]
    block = 'top_punch_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_top_sinter_cc_lm]
    block = 'top_sinter_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_top_sinter_cc_lm]
    block = 'top_sinter_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_top_cc_ram_lm]
    block = 'top_cc_ram_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_top_cc_ram_lm]
    block = 'top_cc_ram_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_inside_low_punch_lm]
    block = 'inside_low_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_inside_low_punch_lm]
    block = 'inside_low_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_inside_powder_lm]
    block = 'inside_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_inside_powder_lm]
    block = 'inside_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_inside_top_punch_lm]
    block = 'inside_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_inside_top_punch_lm]
    block = 'inside_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []

  [temperature_gap_top_sinter_die_lm]
    block = 'gap_top_sinter_die_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_gap_bottom_sinter_die_lm]
    block = 'gap_bottom_sinter_die_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
[]

[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
  [heat_transfer_radiation]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []

  [electric_field_x]
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL #prettier pictures with smoother values
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []
  [electric_field_y]
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []

  [interface_normal_lm]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
    block = 'bottom_ram_cc_secondary_subdomain bottom_cc_sinter_secondary_subdomain
             bottom_sinter_punch_secondary_subdomain bottom_punch_powder_secondary_subdomain
             powder_top_punch_secondary_subdomain top_punch_sinter_secondary_subdomain
             top_sinter_cc_secondary_subdomain top_cc_ram_secondary_subdomain
             inside_low_punch_secondary_subdomain inside_powder_secondary_subdomain
             inside_top_punch_secondary_subdomain'
    initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 1.0e6
  []
[]

[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
  [HeatDiff_graphite]
    type = ADHeatConduction<<<{"description": "Same as `Diffusion` in terms of physics/residual, but the Jacobian is computed using forward automatic differentiation", "href": "../../../source/kernels/ADHeatConduction.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    thermal_conductivity<<<{"description": "the name of the thermal conductivity material property"}>>> = graphite_thermal_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []
  [HeatTdot_graphite]
    type = ADHeatConductionTimeDerivative<<<{"description": "AD Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the heat equation for quasi-constant specific heat $c_p$ and the density $\\rho$.", "href": "../../../source/kernels/ADHeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    specific_heat<<<{"description": "Property name of the specific heat material property"}>>> = graphite_heat_capacity
    density_name<<<{"description": "Property name of the density material property"}>>> = graphite_density
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []
  [electric_graphite]
    type = ADMatDiffusion<<<{"description": "Diffusion equation kernel that takes an isotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = graphite_electrical_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []
  [JouleHeating_graphite]
    type = ADJouleHeatingSource<<<{"description": "Calculates the heat source term corresponding to electrostatic or electromagnetic Joule heating, with Jacobian contributions calculated using the automatic differentiation system.", "href": "../../../source/kernels/ADJouleHeatingSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    elec<<<{"description": "Electrostatic potential for joule heating."}>>> = potential
    electrical_conductivity<<<{"description": "Material property providing electrical conductivity of the material."}>>> = graphite_electrical_conductivity
    # use_displaced_mesh = true
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []

  [HeatDiff_anistropic_carbon_fiber]
    type = ADMatAnisoDiffusion<<<{"description": "Diffusion equation kernel that takes an anisotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatAnisoDiffusion.html"}>>>
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = ccfiber_aniso_thermal_conductivity
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []
  [HeatTdot_carbon_fiber]
    type = ADHeatConductionTimeDerivative<<<{"description": "AD Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the heat equation for quasi-constant specific heat $c_p$ and the density $\\rho$.", "href": "../../../source/kernels/ADHeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    specific_heat<<<{"description": "Property name of the specific heat material property"}>>> = ccfiber_heat_capacity
    density_name<<<{"description": "Property name of the density material property"}>>> = ccfiber_density
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []
  [electric_carbon_fiber]
    type = ADMatDiffusion<<<{"description": "Diffusion equation kernel that takes an isotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = ccfiber_electrical_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []
  [JouleHeating_carbon_fiber]
    type = ADJouleHeatingSource<<<{"description": "Calculates the heat source term corresponding to electrostatic or electromagnetic Joule heating, with Jacobian contributions calculated using the automatic differentiation system.", "href": "../../../source/kernels/ADJouleHeatingSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    elec<<<{"description": "Electrostatic potential for joule heating."}>>> = potential
    electrical_conductivity<<<{"description": "Material property providing electrical conductivity of the material."}>>> = ccfiber_electrical_conductivity
    # use_displaced_mesh = true
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []

  [HeatDiff_powder]
    type = ADHeatConduction<<<{"description": "Same as `Diffusion` in terms of physics/residual, but the Jacobian is computed using forward automatic differentiation", "href": "../../../source/kernels/ADHeatConduction.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    thermal_conductivity<<<{"description": "the name of the thermal conductivity material property"}>>> = copper_thermal_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
  [HeatTdot_powder]
    type = ADHeatConductionTimeDerivative<<<{"description": "AD Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the heat equation for quasi-constant specific heat $c_p$ and the density $\\rho$.", "href": "../../../source/kernels/ADHeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    specific_heat<<<{"description": "Property name of the specific heat material property"}>>> = copper_heat_capacity
    density_name<<<{"description": "Property name of the density material property"}>>> = copper_density
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
  [electric_powder]
    type = ADMatDiffusion<<<{"description": "Diffusion equation kernel that takes an isotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = copper_electrical_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
  [JouleHeating_powder]
    type = ADJouleHeatingSource<<<{"description": "Calculates the heat source term corresponding to electrostatic or electromagnetic Joule heating, with Jacobian contributions calculated using the automatic differentiation system.", "href": "../../../source/kernels/ADJouleHeatingSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    elec<<<{"description": "Electrostatic potential for joule heating."}>>> = potential
    electrical_conductivity<<<{"description": "Material property providing electrical conductivity of the material."}>>> = copper_electrical_conductivity
    # use_displaced_mesh = true
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
[]

[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
  [heat_transfer_radiation]
    type = ParsedAux<<<{"description": "Sets a field variable value to the evaluation of a parsed expression.", "href": "../../../source/auxkernels/ParsedAux.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = heat_transfer_radiation
    boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = 'bottom_ram_spacer_right bottom_ram_spacer_overhang_right bottom_cc_spacer_right
                bottom_sinter_spacer_right bottom_sinter_spacer_overhang_right uncovered_bottom_punch_right
                top_sinter_spacer_overhang_right top_sinter_spacer_right die_wall_right uncovered_top_punch_right
                top_cc_spacer_right top_ram_spacer_overhang_right top_ram_spacer_right'
    coupled_variables<<<{"description": "Vector of coupled variable names"}>>> = 'temperature'
    constant_names<<<{"description": "Vector of constants used in the parsed function (use this for kB etc.)"}>>> = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
    constant_expressions<<<{"description": "Vector of values for the constants in constant_names (can be an FParser expression)"}>>> = '5.67e-8 0.85 300.0' #roughly room temperature, which is probably too cold
    expression<<<{"description": "Parsed function expression to compute"}>>> = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
  []

  [electrostatic_calculation_x]
    type = PotentialToFieldAux<<<{"description": "An AuxKernel that calculates the electrostatic electric field given the electrostatic potential.", "href": "../../../source/auxkernels/PotentialToFieldAux.html"}>>>
    gradient_variable<<<{"description": "The variable from which to compute the gradient component"}>>> = potential
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = electric_field_x
    sign<<<{"description": "Sign of potential gradient."}>>> = negative
    component<<<{"description": "The gradient component to compute"}>>> = x
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []
  [electrostatic_calculation_y]
    type = PotentialToFieldAux<<<{"description": "An AuxKernel that calculates the electrostatic electric field given the electrostatic potential.", "href": "../../../source/auxkernels/PotentialToFieldAux.html"}>>>
    gradient_variable<<<{"description": "The variable from which to compute the gradient component"}>>> = potential
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = electric_field_y
    sign<<<{"description": "Sign of potential gradient."}>>> = negative
    component<<<{"description": "The gradient component to compute"}>>> = y
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []
[]

[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
  [current_application]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
    x<<<{"description": "The abscissa values"}>>> = '0            40                                    60                                   160                                   200                                   230                                   340                                   850                                   890                                   900                                   950                                   1010                                  1050                                  1100                                  1200                                  1240                                1250                        1260 1800'
    y<<<{"description": "The ordinate values"}>>> = '0  ${fparse 561/ram_spacer_surface_area} ${fparse 502/ram_spacer_surface_area} ${fparse 500/ram_spacer_surface_area} ${fparse 417/ram_spacer_surface_area} ${fparse 417/ram_spacer_surface_area} ${fparse 566/ram_spacer_surface_area} ${fparse 952/ram_spacer_surface_area} ${fparse 926/ram_spacer_surface_area} ${fparse 926/ram_spacer_surface_area} ${fparse 977/ram_spacer_surface_area}  ${fparse 902/ram_spacer_surface_area} ${fparse 902/ram_spacer_surface_area} ${fparse 927/ram_spacer_surface_area} ${fparse 926/ram_spacer_surface_area} ${fparse 903/ram_spacer_surface_area} ${fparse 4/ram_spacer_surface_area}  0    0'
    scale_factor<<<{"description": "Scale factor to be applied to the output values"}>>> = 1.0
  []
[]

[BCs<<<{"href": "../../../syntax/BCs/index.html"}>>>]
  [temperature_rams]
    type = ADDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/ADDirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    value<<<{"description": "Value of the BC"}>>> = 300.0
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'top_ram_spacer_top bottom_ram_spacer_bottom'
  []
  [external_surface_temperature]
    type = CoupledVarNeumannBC<<<{"description": "Imposes the integrated boundary condition $\\frac{\\partial u}{\\partial n}=v$, where $v$ is a variable.", "href": "../../../source/bcs/CoupledVarNeumannBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    v<<<{"description": "Coupled variable setting the gradient on the boundary."}>>> = heat_transfer_radiation
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom_ram_spacer_right bottom_ram_spacer_overhang_right bottom_cc_spacer_right
                bottom_sinter_spacer_right bottom_sinter_spacer_overhang_right uncovered_bottom_punch_right
                top_sinter_spacer_overhang_right top_sinter_spacer_right die_wall_right uncovered_top_punch_right
                top_cc_spacer_right top_ram_spacer_overhang_right top_ram_spacer_right'
  []
  [electric_top]
    type = ADFunctionNeumannBC<<<{"description": "Imposes the integrated boundary condition $\\frac{\\partial u}{\\partial n}=h(t,\\vec{x})$, where $h$ is a (possibly) time and space-dependent MOOSE Function.", "href": "../../../source/bcs/ADFunctionNeumannBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    function<<<{"description": "The function."}>>> = 'current_application'
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'top_ram_spacer_top'
  []
  [electric_bottom]
    type = ADDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/ADDirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    value<<<{"description": "Value of the BC"}>>> = 0.0
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom_ram_spacer_bottom'
  []
[]

[Constraints<<<{"href": "../../../syntax/Constraints/index.html"}>>>]
  [thermal_contact_interface_low_ram_cc_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_ram_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_ram_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_ram_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_ram_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_ram_cc'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_ram_cc_low_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_ram_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_ram_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_ram_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_ram_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_ram_cc'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_cc_sinter_low_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_cc_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_cc_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_cc_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_cc_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_cc_sinter_low_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_cc_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_cc_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_cc_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_cc_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_low_sinter_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_sinter_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_sinter_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_sinter_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_sinter_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_low_sinter_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_sinter_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_sinter_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_sinter_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_sinter_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_low_punch_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_punch_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_punch_powder_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_punch_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_punch_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_low_punch_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_punch_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_punch_powder_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_punch_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_punch_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_powder_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_powder_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = powder_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = powder_top_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = powder_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_powder_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_powder_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_powder_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = powder_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = powder_top_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = powder_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_powder_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_top_punch_sinter]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_top_punch_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_punch_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_punch_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_top_punch_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_top_punch_sinter]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_top_punch_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_punch_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_punch_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_top_punch_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_top_sinter_cc_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_top_sinter_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_sinter_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_sinter_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_top_sinter_cc_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_top_sinter_cc_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_top_sinter_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_sinter_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_sinter_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_top_sinter_cc_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_top_cc_ram_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_top_cc_ram_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_cc_ram_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_ram_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_cc_ram_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_top_cc_ram_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_top_cc_ram_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_top_cc_ram_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_cc_ram_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_ram_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_cc_ram_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_top_cc_ram_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_inside_die_low_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_inside_low_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_low_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'thermal_conduction_wall_low_punch closed_thermal_interface_inside_die_low_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_inside_die_low_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_inside_low_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_low_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'electrical_conduction_wall_low_punch closed_electric_interface_inside_die_low_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_inside_die_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_inside_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'thermal_conduction_wall_powder closed_thermal_interface_inside_die_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_inside_die_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_inside_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'electrical_conduction_wall_powder closed_electric_interface_inside_die_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_inside_die_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_inside_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'thermal_conduction_wall_top_punch closed_thermal_interface_inside_die_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_inside_die_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_inside_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'electrical_conduction_wall_top_punch closed_electric_interface_inside_die_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []

  [thermal_gap_contact_interface_bottom_sinter_die]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_gap_bottom_sinter_die_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_sinter_spacer_overhang_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = gap_bottom_sinter_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = die_wall_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = gap_bottom_sinter_die_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'gap_thermal_interface_bottom_sinter_die'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_gap_contact_interface_top_sinter_die]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_gap_top_sinter_die_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_sinter_spacer_overhang_bottom
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = gap_top_sinter_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = die_wall_top
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = gap_top_sinter_die_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'gap_thermal_interface_top_sinter_die'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
[]

[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
  [graphite_electro_thermal_properties]
    type = ADGenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'graphite_density graphite_thermal_conductivity graphite_heat_capacity graphite_electrical_conductivity graphite_hardness'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = '        1.82e3           81                            1.303e3                5.88e4                           1.0'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall
             bottom_cc_sinter_secondary_subdomain bottom_sinter_punch_secondary_subdomain
             top_punch_sinter_secondary_subdomain top_cc_ram_secondary_subdomain
             inside_low_punch_secondary_subdomain inside_top_punch_secondary_subdomain'
    # density (kg/m^3), thermal conductivity (W/m-K), and electrical conductivity (S/m) from manufacture datasheet for G535,
    #           available at http://schunk-tokai.pl/pl/wp-content/uploads/Schunk-Tokai-2015-englisch.pdf
    # specific heat capacity for IG110 graphite, https://www.nrc.gov/docs/ML2121/ML21215A346.pdf, equation on pg A-40 at 293K,
  []
  [carbon_fiber_electro_thermal_properties]
    type = ADGenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'ccfiber_density ccfiber_thermal_conductivity ccfiber_heat_capacity ccfiber_electrical_conductivity ccfiber_hardness'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = ' 1.5e3                 5.0                     1.25e3                   4.0e4                           1.0'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer bottom_ram_cc_secondary_subdomain top_sinter_cc_secondary_subdomain'
    # density (kg/m^3) and electrical conductivity (S/m) from Schunk CF226 manufacturer's datasheet, available at http://schunk-tokai.pl/en/wp-content/uploads/e_CF-226.pdf
    # thermal conductivity (W/m-K), perpendicular to fiber direction, from Schunk CF226 manufacturer's datasheet, available at http://schunk-tokai.pl/en/wp-content/uploads/e_CF-226.pdf
    # specific heat capacity (J/kg-K) from Sommers et al. App. Thermal Engineering 30(11-12) (2010) 1277-1291 for Schunk FU2952
    # hardness set to unity to remove dependence on that quantity
  []
  [carbon_fiber_anisotropic_thermal_cond]
    type = ADConstantAnisotropicMobility<<<{"description": "Provide a constant mobility tensor value", "href": "../../../source/materials/ConstantAnisotropicMobility.html"}>>>
    tensor<<<{"description": "Tensor values"}>>> = '40 0 0
              0  5 0
              0  0 40'
    M_name<<<{"description": "Name of the mobility tensor property to generate"}>>> = ccfiber_aniso_thermal_conductivity
    # data sourced from Schunk CF226 manufacturer's datasheet, available at http://schunk-tokai.pl/en/wp-content/uploads/e_CF-226.pdf
  []
  [copper_electro_thermal_properties]
    type = ADGenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'copper_density copper_thermal_conductivity copper_heat_capacity copper_electrical_conductivity copper_hardness'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = ' 8.96e3            401.2                     0.385e3             5.8e7                      1.0'
    # all properties assume fully dense copper
    # density (kg/m^3) and heat capacity (J/kg-K) from Stevens and Boerio-Goates. J. Chem. Thermodaynamics 36(10) 857-863(2004)
    # thermal conductivity (W/m-K) and electrical conductivity (S/m) from Moore, McElroy, and Graves. Cand. J. Phys 45 3849-3865 (1967).
    # hardness set to unity to remove dependence on that quantity
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder bottom_punch_powder_secondary_subdomain powder_top_punch_secondary_subdomain
             inside_powder_secondary_subdomain'
  []
[]

[UserObjects<<<{"href": "../../../syntax/UserObjects/index.html"}>>>]
  [closed_thermal_interface_bottom_ram_cc]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = ccfiber_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = ccfiber_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_cc_spacer_bottom
  []
  [closed_electric_interface_bottom_ram_cc]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = ccfiber_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = ccfiber_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_cc_spacer_bottom
  []
  [closed_thermal_interface_bottom_cc_sinter]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = ccfiber_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = ccfiber_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_sinter_spacer_bottom
  []
  [closed_electric_interface_bottom_cc_sinter]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = ccfiber_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = ccfiber_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_sinter_spacer_bottom
  []
  [closed_thermal_interface_bottom_sinter_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_punch_bottom
  []
  [closed_electric_interface_bottom_sinter_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_punch_bottom
  []
  [closed_thermal_interface_bottom_punch_powder]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = copper_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = copper_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = powder_bottom
  []
  [closed_electric_interface_bottom_punch_powder]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = copper_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = copper_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = powder_bottom
  []
  [closed_thermal_interface_powder_top_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = copper_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = copper_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_punch_bottom
  []
  [closed_electric_interface_powder_top_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = copper_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = copper_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_punch_bottom
  []
  [closed_thermal_interface_top_punch_sinter]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_sinter_spacer_bottom
  []
  [closed_electric_interface_top_punch_sinter]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_sinter_spacer_bottom
  []
  [closed_thermal_interface_top_sinter_cc_spacer]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = ccfiber_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = ccfiber_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_cc_spacer_bottom
  []
  [closed_electric_interface_top_sinter_cc_spacer]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = ccfiber_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = ccfiber_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_cc_spacer_bottom
  []
  [closed_thermal_interface_top_cc_ram_spacer]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_ram_spacer_bottom
  []
  [closed_electric_interface_top_cc_ram_spacer]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_ram_spacer_bottom
  []

  [thermal_conduction_wall_low_punch]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_punch_right
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 5  # W/m-K ceramaterials, through thickness for graphite foil: https://www.ceramaterials.com/wp-content/uploads/2022/01/GRAPHITE_FOIL_TDS_CM_01_22.pdf
    # use_displaced_mesh = true
  []
  [electrical_conduction_wall_low_punch]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_punch_right
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 6.67e-2  # S/m ceramaterials, through thickness for graphite foil: https://www.ceramaterials.com/wp-content/uploads/2022/01/GRAPHITE_FOIL_TDS_CM_01_22.pdf
    # use_displaced_mesh = true
  []
  [closed_thermal_interface_inside_die_low_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_punch_right
  []
  [closed_electric_interface_inside_die_low_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = bottom_punch_right
  []
  [thermal_conduction_wall_powder]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = powder_right
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 5  # W/m-K ceramaterials, through thickness for graphite foil: https://www.ceramaterials.com/wp-content/uploads/2022/01/GRAPHITE_FOIL_TDS_CM_01_22.pdf
    # use_displaced_mesh = true
  []
  [electrical_conduction_wall_powder]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = powder_right
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 6.67e-2  # S/m ceramaterials, through thickness for graphite foil: https://www.ceramaterials.com/wp-content/uploads/2022/01/GRAPHITE_FOIL_TDS_CM_01_22.pdf
    # use_displaced_mesh = true
  []
  [closed_thermal_interface_inside_die_powder]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = copper_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = copper_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = powder_right
  []
  [closed_electric_interface_inside_die_powder]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = copper_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = copper_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = powder_right
  []
  [thermal_conduction_wall_top_punch]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_punch_right
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 5  # W/m-K ceramaterials, through thickness for graphite foil: https://www.ceramaterials.com/wp-content/uploads/2022/01/GRAPHITE_FOIL_TDS_CM_01_22.pdf
    # use_displaced_mesh = true
  []
  [electrical_conduction_wall_top_punch]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_punch_right
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 6.67e-2  # S/m ceramaterials, through thickness for graphite foil: https://www.ceramaterials.com/wp-content/uploads/2022/01/GRAPHITE_FOIL_TDS_CM_01_22.pdf
    # use_displaced_mesh = true
  []
  [closed_thermal_interface_inside_die_top_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_thermal_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_thermal_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_punch_right
  []
  [closed_electric_interface_inside_die_top_punch]
    type = GapFluxModelPressureDependentConduction<<<{"description": "Heat flux model across a closed gap to calculate the conductance between two solid materials", "href": "../../../source/userobjects/GapFluxModelPressureDependentConduction.html"}>>>
    primary_conductivity<<<{"description": "The thermal conductivity of the primary surface solid material"}>>> = graphite_electrical_conductivity
    secondary_conductivity<<<{"description": "The thermal conductivity of the secondary surface solid material"}>>> = graphite_electrical_conductivity
    temperature<<<{"description": "The name of the temperature variable"}>>> = potential
    contact_pressure<<<{"description": "The name of the contact pressure variable"}>>> = interface_normal_lm
    primary_hardness<<<{"description": "The hardness value of the primary surface material"}>>> = graphite_hardness
    secondary_hardness<<<{"description": "The hardness of the secondary surface material"}>>> = graphite_hardness
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = top_punch_right
  []

  [gap_thermal_interface_bottom_sinter_die]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = die_wall_bottom
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 0.0306  # W/m-K for argon at 600K: https://www.engineersedge.com/heat_transfer/thermal-conductivity-gases.htm
    # use_displaced_mesh = true
  []
  [gap_thermal_interface_top_sinter_die]
    type = GapFluxModelConduction<<<{"description": "Gap flux model for varying gap conductance using a coupled variable for temperature", "href": "../../../source/userobjects/GapFluxModelConduction.html"}>>>
    temperature<<<{"description": "The name of the temperature variable"}>>> = temperature
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = die_wall_top
    gap_conductivity<<<{"description": "Gap conductivity value"}>>> = 0.0306  # W/m-K for argon at 600K: https://www.engineersedge.com/heat_transfer/thermal-conductivity-gases.htm
    # use_displaced_mesh = true
  []
[]

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [applied_current]
    type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
    function<<<{"description": "The function which supplies the postprocessor value."}>>> = current_application
  []

  [pyrometer_point]
    type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../source/postprocessors/PointValue.html"}>>>
    variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = temperature
    point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '${fparse powder_radius + 0.004} ${fparse ram_cc_sinter_punch_height + powder_height / 2.0} 0'
  []
[]

[Preconditioning<<<{"href": "../../../syntax/Preconditioning/index.html"}>>>]
  [smp]
    type = SMP<<<{"description": "Single matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.", "href": "../../../source/preconditioners/SingleMatrixPreconditioner.html"}>>>
    full<<<{"description": "Set to true if you want the full set of couplings between variables simply for convenience so you don't have to set every off_diag_row and off_diag_column combination."}>>> = true
  []
[]

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
  type = Transient
  solve_type = NEWTON
  automatic_scaling = false
  line_search = 'none'

  # mortar contact solver options
  petsc_options = '-snes_converged_reason -pc_svd_monitor'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_type'
  petsc_options_value = ' lu       superlu_dist'
  snesmf_reuse_base = false

  nl_rel_tol = 1e-6
  nl_abs_tol = 1e-8
  nl_max_its = 20
  nl_forced_its = 2
  l_max_its = 50

  dtmax = 10
  dt = 6
  end_time = 1800
[]

[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
  color<<<{"description": "Set to false to turn off all coloring in all outputs"}>>> = false
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = true
[]
(tutorials/efas/introduction/dcs5_copper_constant_properties_electrothermal.i)

The Mesh block maps out and displays the geometry of the distinct sections of the EFAS tooling stack, as described in the MALAMUTE Engineering Scale EFAS Tutorial Motivation section, that are shown in open-source data visualization software such as ParaView. The [Problem] block sets up the handling of numerical convergence. Please do not modify any values in the [Mesh] and [Problem] blocks as to allow for easier understanding of the tutorial.

The [Variables] block has two parts of note, in particular the [temperature] and [potential] blocks:

[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
  [temperature]
    initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 300.0
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential]
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []

  [temperature_bottom_ram_cc_lm]
    block = 'bottom_ram_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_ram_cc_lm]
    block = 'bottom_ram_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_bottom_cc_sinter_lm]
    block = 'bottom_cc_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_cc_sinter_lm]
    block = 'bottom_cc_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_bottom_sinter_punch_lm]
    block = 'bottom_sinter_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_sinter_punch_lm]
    block = 'bottom_sinter_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_bottom_punch_powder_lm]
    block = ' bottom_punch_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_bottom_punch_powder_lm]
    block = 'bottom_punch_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_powder_top_punch_lm]
    block = 'powder_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_powder_top_punch_lm]
    block = ' powder_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_top_punch_sinter_lm]
    block = 'top_punch_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_top_punch_sinter_lm]
    block = 'top_punch_sinter_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_top_sinter_cc_lm]
    block = 'top_sinter_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_top_sinter_cc_lm]
    block = 'top_sinter_cc_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_top_cc_ram_lm]
    block = 'top_cc_ram_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_top_cc_ram_lm]
    block = 'top_cc_ram_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_inside_low_punch_lm]
    block = 'inside_low_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_inside_low_punch_lm]
    block = 'inside_low_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_inside_powder_lm]
    block = 'inside_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_inside_powder_lm]
    block = 'inside_powder_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_inside_top_punch_lm]
    block = 'inside_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [potential_inside_top_punch_lm]
    block = 'inside_top_punch_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []

  [temperature_gap_top_sinter_die_lm]
    block = 'gap_top_sinter_die_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
  [temperature_gap_bottom_sinter_die_lm]
    block = 'gap_bottom_sinter_die_secondary_subdomain'
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []
[]

The initial condition value of 300 K should remain as such. Also, understand that temperature and potential will be showcased in ParaView. While the remaining “_lm” listings are shown in [Variables], these variables are associated with the many interfaces within the simulation. These variables will not be included directly in the analyses performed in this tutorial, and more information on these variables and their use in the Constraint system is available here.

[AuxVariables] contains a block that applies boundary conditions related to heat transfer and includes a block that displays pictures of the electric field with smoother values.

[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
  [heat_transfer_radiation]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
  []

  [electric_field_x]
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL #prettier pictures with smoother values
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []
  [electric_field_y]
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
    block = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []

  [interface_normal_lm]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = FIRST
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
    block = 'bottom_ram_cc_secondary_subdomain bottom_cc_sinter_secondary_subdomain
             bottom_sinter_punch_secondary_subdomain bottom_punch_powder_secondary_subdomain
             powder_top_punch_secondary_subdomain top_punch_sinter_secondary_subdomain
             top_sinter_cc_secondary_subdomain top_cc_ram_secondary_subdomain
             inside_low_punch_secondary_subdomain inside_powder_secondary_subdomain
             inside_top_punch_secondary_subdomain'
    initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 1.0e6
  []
[]

The [Kernels] block uses the same equation for diffusion of temperature and diffusion of electric potential. The goal of this block is to couple temperature and electrical physics with joule heating. There are 12 sub-blocks inside the high-level [Kernel] block which are named according to the material it supports. For example, there are four out of twelve sub-blocks that include graphite in their name and include temperature diffusion (“HeatDiff_graphite”), electric potential diffusion (“electric_graphite”), and joule heating (“JouleHeating_graphite”).

[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
  [HeatDiff_graphite]
    type = ADHeatConduction<<<{"description": "Same as `Diffusion` in terms of physics/residual, but the Jacobian is computed using forward automatic differentiation", "href": "../../../source/kernels/ADHeatConduction.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    thermal_conductivity<<<{"description": "the name of the thermal conductivity material property"}>>> = graphite_thermal_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []
  [HeatTdot_graphite]
    type = ADHeatConductionTimeDerivative<<<{"description": "AD Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the heat equation for quasi-constant specific heat $c_p$ and the density $\\rho$.", "href": "../../../source/kernels/ADHeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    specific_heat<<<{"description": "Property name of the specific heat material property"}>>> = graphite_heat_capacity
    density_name<<<{"description": "Property name of the density material property"}>>> = graphite_density
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []
  [electric_graphite]
    type = ADMatDiffusion<<<{"description": "Diffusion equation kernel that takes an isotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = graphite_electrical_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []
  [JouleHeating_graphite]
    type = ADJouleHeatingSource<<<{"description": "Calculates the heat source term corresponding to electrostatic or electromagnetic Joule heating, with Jacobian contributions calculated using the automatic differentiation system.", "href": "../../../source/kernels/ADJouleHeatingSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    elec<<<{"description": "Electrostatic potential for joule heating."}>>> = potential
    electrical_conductivity<<<{"description": "Material property providing electrical conductivity of the material."}>>> = graphite_electrical_conductivity
    # use_displaced_mesh = true
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_sinter_spacer bottom_punch
             top_punch top_sinter_spacer top_ram_spacer die_wall'
  []

  [HeatDiff_anistropic_carbon_fiber]
    type = ADMatAnisoDiffusion<<<{"description": "Diffusion equation kernel that takes an anisotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatAnisoDiffusion.html"}>>>
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = ccfiber_aniso_thermal_conductivity
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []
  [HeatTdot_carbon_fiber]
    type = ADHeatConductionTimeDerivative<<<{"description": "AD Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the heat equation for quasi-constant specific heat $c_p$ and the density $\\rho$.", "href": "../../../source/kernels/ADHeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    specific_heat<<<{"description": "Property name of the specific heat material property"}>>> = ccfiber_heat_capacity
    density_name<<<{"description": "Property name of the density material property"}>>> = ccfiber_density
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []
  [electric_carbon_fiber]
    type = ADMatDiffusion<<<{"description": "Diffusion equation kernel that takes an isotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = ccfiber_electrical_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []
  [JouleHeating_carbon_fiber]
    type = ADJouleHeatingSource<<<{"description": "Calculates the heat source term corresponding to electrostatic or electromagnetic Joule heating, with Jacobian contributions calculated using the automatic differentiation system.", "href": "../../../source/kernels/ADJouleHeatingSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    elec<<<{"description": "Electrostatic potential for joule heating."}>>> = potential
    electrical_conductivity<<<{"description": "Material property providing electrical conductivity of the material."}>>> = ccfiber_electrical_conductivity
    # use_displaced_mesh = true
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer'
  []

  [HeatDiff_powder]
    type = ADHeatConduction<<<{"description": "Same as `Diffusion` in terms of physics/residual, but the Jacobian is computed using forward automatic differentiation", "href": "../../../source/kernels/ADHeatConduction.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    thermal_conductivity<<<{"description": "the name of the thermal conductivity material property"}>>> = copper_thermal_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
  [HeatTdot_powder]
    type = ADHeatConductionTimeDerivative<<<{"description": "AD Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the heat equation for quasi-constant specific heat $c_p$ and the density $\\rho$.", "href": "../../../source/kernels/ADHeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    specific_heat<<<{"description": "Property name of the specific heat material property"}>>> = copper_heat_capacity
    density_name<<<{"description": "Property name of the density material property"}>>> = copper_density
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
  [electric_powder]
    type = ADMatDiffusion<<<{"description": "Diffusion equation kernel that takes an isotropic diffusivity from a material property", "href": "../../../source/kernels/ADMatDiffusion.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = copper_electrical_conductivity
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
  [JouleHeating_powder]
    type = ADJouleHeatingSource<<<{"description": "Calculates the heat source term corresponding to electrostatic or electromagnetic Joule heating, with Jacobian contributions calculated using the automatic differentiation system.", "href": "../../../source/kernels/ADJouleHeatingSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    elec<<<{"description": "Electrostatic potential for joule heating."}>>> = potential
    electrical_conductivity<<<{"description": "Material property providing electrical conductivity of the material."}>>> = copper_electrical_conductivity
    # use_displaced_mesh = true
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'powder'
  []
[]

The [AuxKernels] block contains a sub-block (“heat_transfer_radiation”) from the [AuxVariables] block that applies radiation heat loss boundary conditions on the external right side of spacers and die wall, as well as on the external right side of punches when uncovered. Constant expressions are also included in the [AuxKernels] block, such as graphite emissivity and initial temperature.

[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
  [heat_transfer_radiation]
    type = ParsedAux<<<{"description": "Sets a field variable value to the evaluation of a parsed expression.", "href": "../../../source/auxkernels/ParsedAux.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = heat_transfer_radiation
    boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = 'bottom_ram_spacer_right bottom_ram_spacer_overhang_right bottom_cc_spacer_right
                bottom_sinter_spacer_right bottom_sinter_spacer_overhang_right uncovered_bottom_punch_right
                top_sinter_spacer_overhang_right top_sinter_spacer_right die_wall_right uncovered_top_punch_right
                top_cc_spacer_right top_ram_spacer_overhang_right top_ram_spacer_right'
    coupled_variables<<<{"description": "Vector of coupled variable names"}>>> = 'temperature'
    constant_names<<<{"description": "Vector of constants used in the parsed function (use this for kB etc.)"}>>> = 'boltzmann epsilon temperature_farfield' #published emissivity for graphite is 0.85
    constant_expressions<<<{"description": "Vector of values for the constants in constant_names (can be an FParser expression)"}>>> = '5.67e-8 0.85 300.0' #roughly room temperature, which is probably too cold
    expression<<<{"description": "Parsed function expression to compute"}>>> = '-boltzmann*epsilon*(temperature^4-temperature_farfield^4)'
  []

  [electrostatic_calculation_x]
    type = PotentialToFieldAux<<<{"description": "An AuxKernel that calculates the electrostatic electric field given the electrostatic potential.", "href": "../../../source/auxkernels/PotentialToFieldAux.html"}>>>
    gradient_variable<<<{"description": "The variable from which to compute the gradient component"}>>> = potential
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = electric_field_x
    sign<<<{"description": "Sign of potential gradient."}>>> = negative
    component<<<{"description": "The gradient component to compute"}>>> = x
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []
  [electrostatic_calculation_y]
    type = PotentialToFieldAux<<<{"description": "An AuxKernel that calculates the electrostatic electric field given the electrostatic potential.", "href": "../../../source/auxkernels/PotentialToFieldAux.html"}>>>
    gradient_variable<<<{"description": "The variable from which to compute the gradient component"}>>> = potential
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = electric_field_y
    sign<<<{"description": "Sign of potential gradient."}>>> = negative
    component<<<{"description": "The gradient component to compute"}>>> = y
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_ram_spacer bottom_cc_spacer bottom_sinter_spacer bottom_punch
             powder top_punch top_sinter_spacer top_cc_spacer top_ram_spacer die_wall'
  []
[]

Current from the DCS-5 sintering machine is generalized in the [Functions] block. Please note a few aspects of the Neumann boundary condition. It is a function of time and is generalized from an uninsulated, 20 mm G535 graphite tooling DCS-5 run. Also, the Neumann boundary condition is the current divided by the surface area of the top surface of the top ram spacer.

[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
  [current_application]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
    x<<<{"description": "The abscissa values"}>>> = '0            40                                    60                                   160                                   200                                   230                                   340                                   850                                   890                                   900                                   950                                   1010                                  1050                                  1100                                  1200                                  1240                                1250                        1260 1800'
    y<<<{"description": "The ordinate values"}>>> = '0  ${fparse 561/ram_spacer_surface_area} ${fparse 502/ram_spacer_surface_area} ${fparse 500/ram_spacer_surface_area} ${fparse 417/ram_spacer_surface_area} ${fparse 417/ram_spacer_surface_area} ${fparse 566/ram_spacer_surface_area} ${fparse 952/ram_spacer_surface_area} ${fparse 926/ram_spacer_surface_area} ${fparse 926/ram_spacer_surface_area} ${fparse 977/ram_spacer_surface_area}  ${fparse 902/ram_spacer_surface_area} ${fparse 902/ram_spacer_surface_area} ${fparse 927/ram_spacer_surface_area} ${fparse 926/ram_spacer_surface_area} ${fparse 903/ram_spacer_surface_area} ${fparse 4/ram_spacer_surface_area}  0    0'
    scale_factor<<<{"description": "Scale factor to be applied to the output values"}>>> = 1.0
  []
[]

The [BCs] block sets the temperature and electrical boundary conditions on various parts of the sintering machine. For example, the ("temperature_rams") sub-block sets the edge of the top ram spacer and the edge of the bottom ram spacer to 300 K.

[BCs<<<{"href": "../../../syntax/BCs/index.html"}>>>]
  [temperature_rams]
    type = ADDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/ADDirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    value<<<{"description": "Value of the BC"}>>> = 300.0
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'top_ram_spacer_top bottom_ram_spacer_bottom'
  []
  [external_surface_temperature]
    type = CoupledVarNeumannBC<<<{"description": "Imposes the integrated boundary condition $\\frac{\\partial u}{\\partial n}=v$, where $v$ is a variable.", "href": "../../../source/bcs/CoupledVarNeumannBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    v<<<{"description": "Coupled variable setting the gradient on the boundary."}>>> = heat_transfer_radiation
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom_ram_spacer_right bottom_ram_spacer_overhang_right bottom_cc_spacer_right
                bottom_sinter_spacer_right bottom_sinter_spacer_overhang_right uncovered_bottom_punch_right
                top_sinter_spacer_overhang_right top_sinter_spacer_right die_wall_right uncovered_top_punch_right
                top_cc_spacer_right top_ram_spacer_overhang_right top_ram_spacer_right'
  []
  [electric_top]
    type = ADFunctionNeumannBC<<<{"description": "Imposes the integrated boundary condition $\\frac{\\partial u}{\\partial n}=h(t,\\vec{x})$, where $h$ is a (possibly) time and space-dependent MOOSE Function.", "href": "../../../source/bcs/ADFunctionNeumannBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    function<<<{"description": "The function."}>>> = 'current_application'
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'top_ram_spacer_top'
  []
  [electric_bottom]
    type = ADDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/ADDirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = potential
    value<<<{"description": "Value of the BC"}>>> = 0.0
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom_ram_spacer_bottom'
  []
[]

The [Constraints] block is meant to specify contact interfaces and should remain unmodified throughout the tutorial.

[Constraints<<<{"href": "../../../syntax/Constraints/index.html"}>>>]
  [thermal_contact_interface_low_ram_cc_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_ram_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_ram_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_ram_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_ram_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_ram_cc'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_ram_cc_low_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_ram_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_ram_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_ram_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_ram_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_ram_cc'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_cc_sinter_low_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_cc_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_cc_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_cc_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_cc_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_cc_sinter_low_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_cc_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_cc_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_cc_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_cc_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_low_sinter_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_sinter_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_sinter_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_sinter_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_sinter_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_low_sinter_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_sinter_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_sinter_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_sinter_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_sinter_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_low_punch_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_bottom_punch_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_punch_powder_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_punch_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_bottom_punch_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_low_punch_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_bottom_punch_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = bottom_punch_powder_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = bottom_punch_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_bottom_punch_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_powder_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_powder_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = powder_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = powder_top_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = powder_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_powder_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_powder_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_powder_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = powder_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = powder_top_punch_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = powder_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_powder_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_top_punch_sinter]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_top_punch_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_punch_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_punch_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_top_punch_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_top_punch_sinter]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_top_punch_sinter_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_punch_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_punch_sinter_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_sinter_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_punch_sinter_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_top_punch_sinter'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_top_sinter_cc_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_top_sinter_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_sinter_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_sinter_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_top_sinter_cc_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_top_sinter_cc_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_top_sinter_cc_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_sinter_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_sinter_cc_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_cc_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_sinter_cc_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_top_sinter_cc_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_top_cc_ram_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_top_cc_ram_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_cc_ram_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_ram_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_cc_ram_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_thermal_interface_top_cc_ram_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_top_cc_ram_spacers]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_top_cc_ram_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_cc_spacer_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = top_cc_ram_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_ram_spacer_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = top_cc_ram_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'closed_electric_interface_top_cc_ram_spacer'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_inside_die_low_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_inside_low_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_low_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'thermal_conduction_wall_low_punch closed_thermal_interface_inside_die_low_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_inside_die_low_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_inside_low_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = bottom_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_low_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'electrical_conduction_wall_low_punch closed_electric_interface_inside_die_low_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_inside_die_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_inside_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'thermal_conduction_wall_powder closed_thermal_interface_inside_die_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_inside_die_powder]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_inside_powder_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = powder_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_powder_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'electrical_conduction_wall_powder closed_electric_interface_inside_die_powder'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_contact_interface_inside_die_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_inside_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'thermal_conduction_wall_top_punch closed_thermal_interface_inside_die_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [electrical_contact_interface_inside_die_top_punch]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = potential_inside_top_punch_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = potential
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = die_wall_left
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = inside_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = top_punch_right
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = inside_top_punch_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = CYLINDER
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'electrical_conduction_wall_top_punch closed_electric_interface_inside_die_top_punch'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []

  [thermal_gap_contact_interface_bottom_sinter_die]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_gap_bottom_sinter_die_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = bottom_sinter_spacer_overhang_top
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = gap_bottom_sinter_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = die_wall_bottom
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = gap_bottom_sinter_die_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'gap_thermal_interface_bottom_sinter_die'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
  [thermal_gap_contact_interface_top_sinter_die]
    type = ModularGapConductanceConstraint<<<{"description": "Computes the residual and Jacobian contributions for the 'Lagrange Multiplier' implementation of the thermal contact problem. For more information, see the detailed description here: http://tinyurl.com/gmmhbe9", "href": "../../../source/constraints/ModularGapConductanceConstraint.html"}>>>
    variable<<<{"description": "The name of the lagrange multiplier variable that this constraint is applied to. This parameter may not be supplied in the case of using penalty methods for example"}>>> = temperature_gap_top_sinter_die_lm
    secondary_variable<<<{"description": "Primal variable on secondary surface."}>>> = temperature
    primary_boundary<<<{"description": "The name of the primary boundary sideset."}>>> = top_sinter_spacer_overhang_bottom
    primary_subdomain<<<{"description": "The name of the primary subdomain."}>>> = gap_top_sinter_die_primary_subdomain
    secondary_boundary<<<{"description": "The name of the secondary boundary sideset."}>>> = die_wall_top
    secondary_subdomain<<<{"description": "The name of the secondary subdomain."}>>> = gap_top_sinter_die_secondary_subdomain
    gap_geometry_type<<<{"description": "Gap calculation type. The geometry type is used to compute gap distances and scale fluxes to ensure energy balance. If AUTO is selected, the gap geometry is automatically set via the mesh coordinate system."}>>> = PLATE
    gap_flux_models<<<{"description": "List of GapFluxModel user objects"}>>> = 'gap_thermal_interface_top_sinter_die'
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
    correct_edge_dropping<<<{"description": "Whether to enable correct edge dropping treatment for mortar constraints. When disabled any Lagrange Multiplier degree of freedom on a secondary element without full primary contributions will be set (strongly) to 0."}>>> = true
    # use_displaced_mesh = true
  []
[]

All three materials (copper, graphite, C-C fiber) involved with the EFAS machine are described in the [Materials] block. Property values for each the materials are constant values as opposed to variable values, as shown in the "carbon_fiber_electro_thermal_properties" sub-block, for example. In the same sub-block, at prop_values, note the value for ccfiber_thermal_conductivity. The value “5” is the thermal conductivity of the C-C fiber in the y direction. This “5” value is the same as the middle value in the tensor matrix shown below under the sub-block titled “carbon_fiber_anisotropic_thermal_cond”. This matrix is a representation of anisoptropic thermal conductivity of C-C fiber.

[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
  [carbon_fiber_electro_thermal_properties]
    type = ADGenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'ccfiber_density ccfiber_thermal_conductivity ccfiber_heat_capacity ccfiber_electrical_conductivity ccfiber_hardness'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = ' 1.5e3                 5.0                     1.25e3                   4.0e4                           1.0'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'bottom_cc_spacer top_cc_spacer bottom_ram_cc_secondary_subdomain top_sinter_cc_secondary_subdomain'
    # density (kg/m^3) and electrical conductivity (S/m) from Schunk CF226 manufacturer's datasheet, available at http://schunk-tokai.pl/en/wp-content/uploads/e_CF-226.pdf
    # thermal conductivity (W/m-K), perpendicular to fiber direction, from Schunk CF226 manufacturer's datasheet, available at http://schunk-tokai.pl/en/wp-content/uploads/e_CF-226.pdf
    # specific heat capacity (J/kg-K) from Sommers et al. App. Thermal Engineering 30(11-12) (2010) 1277-1291 for Schunk FU2952
    # hardness set to unity to remove dependence on that quantity
  []
[]

The [UserObjects] block is used for contact models and should remain untouched for the tutorial’s ease of use. When opening an output csv file, the [Postprocessors] block allows for a better understanding of boundary conditions by exporting the data to a program such as Excel. The "pyrometer_point" sub-block under the [Postprocessors] block points to where the pyrometer reads temperature at the end of the view hole.

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [applied_current]
    type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
    function<<<{"description": "The function which supplies the postprocessor value."}>>> = current_application
  []

  [pyrometer_point]
    type = PointValue<<<{"description": "Compute the value of a variable at a specified location", "href": "../../../source/postprocessors/PointValue.html"}>>>
    variable<<<{"description": "The name of the variable that this postprocessor operates on."}>>> = temperature
    point<<<{"description": "The physical point where the solution will be evaluated."}>>> = '${fparse powder_radius + 0.004} ${fparse ram_cc_sinter_punch_height + powder_height / 2.0} 0'
  []
[]

[Preconditioning] and [Executioner] blocks are typically used for numerical convergence and for the sake of this tutorial, should remain unmodified. The [Outputs] block should also remain unmodified and simply exists to display data in Excel and ParaView.

[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
  color<<<{"description": "Set to false to turn off all coloring in all outputs"}>>> = false
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = true
[]

Now that we are familiar with the sections of an input file, we are ready to make changes to the input file.