- boundaryThe list of boundary IDs from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundary IDs from the mesh where this object applies
 - variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this residual object operates on
 
GapHeatTransfer
Transfers heat across a gap between two surfaces dependent on the gap geometry specified.
Description
GapHeatTransfer calculates the amount of heat transferred across unmeshed gaps between two different blocks.
The quadrature option is generally recommended for most models. With this option, heat flux is computed and applied as an integrated boundary condition at the quadrature points on both faces. Use of the quadrature options generally gives smoother results, although there can be small differences in the heat flux on the two surfaces.
It is also important to use the appropriate gap_geometry_type parameter (PLATE, CYLINDER, or SPHERE) for the model geometry.
Two-dimensional Cartesian geometries are not restricted to be in or parallel to the X-Y coordinate plane.
See GeometricSearchData for more information on the treatment of geometric pairing between boundaries across a gap.
Example Input syntax
[ThermalContact<<<{"href": "../../syntax/ThermalContact/index.html"}>>>]
  [./left_to_right]
    emissivity_primary = 0
    emissivity_secondary = 0
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    type = GapHeatTransfer
  [../]
[](modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/nonmatching.i)Input Parameters
- appended_property_nameName appended to material properties to make them unique
C++ Type:std::string
Controllable:No
Description:Name appended to material properties to make them unique
 - cylinder_axis_point_1Start point for line defining cylindrical axis
C++ Type:libMesh::VectorValue<double>
Unit:(no unit assumed)
Controllable:No
Description:Start point for line defining cylindrical axis
 - cylinder_axis_point_2End point for line defining cylindrical axis
C++ Type:libMesh::VectorValue<double>
Unit:(no unit assumed)
Controllable:No
Description:End point for line defining cylindrical axis
 - displacementsThe displacements appropriate for the simulation geometry and coordinate system
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacements appropriate for the simulation geometry and coordinate system
 - gap_distanceDistance across the gap
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Distance across the gap
 - gap_geometry_typeGap calculation type. Choices are: PLATE CYLINDER SPHERE
C++ Type:MooseEnum
Options:PLATE, CYLINDER, SPHERE
Controllable:No
Description:Gap calculation type. Choices are: PLATE CYLINDER SPHERE
 - gap_tempTemperature on the other side of the gap
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Temperature on the other side of the gap
 - matrix_onlyFalseWhether this object is only doing assembly to matrices (no vectors)
Default:False
C++ Type:bool
Controllable:No
Description:Whether this object is only doing assembly to matrices (no vectors)
 - max_gap1e+06A maximum gap size
Default:1e+06
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:A maximum gap size
 - min_gap1e-06A minimum gap size
Default:1e-06
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:A minimum gap size
 - min_gap_order0Order of the Taylor expansion below min_gap
Default:0
C++ Type:unsigned int
Controllable:No
Description:Order of the Taylor expansion below min_gap
 - orderFIRSTThe finite element order
Default:FIRST
C++ Type:MooseEnum
Options:CONSTANT, FIRST, SECOND, THIRD, FOURTH
Controllable:No
Description:The finite element order
 - paired_boundaryThe boundary to be penetrated
C++ Type:BoundaryName
Controllable:No
Description:The boundary to be penetrated
 - quadratureFalseWhether or not to do Quadrature point based gap heat transfer. If this is true then gap_distance and gap_temp should NOT be provided (and will be ignored) however paired_boundary IS then required.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to do Quadrature point based gap heat transfer. If this is true then gap_distance and gap_temp should NOT be provided (and will be ignored) however paired_boundary IS then required.
 - sphere_originOrigin for sphere geometry
C++ Type:libMesh::VectorValue<double>
Unit:(no unit assumed)
Controllable:No
Description:Origin for sphere geometry
 - warningsFalseWhether to output warning messages concerning nodes not being found
Default:False
C++ Type:bool
Controllable:No
Description:Whether to output warning messages concerning nodes not being found
 
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
 - extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
 - extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
 - matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Options:nontime, system
Controllable:No
Description:The tag for the matrices this Kernel should fill
 - vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Options:nontime, time
Controllable:No
Description:The tag for the vectors this Kernel should fill
 
Contribution To Tagged Field Data Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
 - diag_save_inThe name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
 - enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
 - implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
 - save_inThe name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
 - search_methodnearest_node_connected_sidesChoice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).
Default:nearest_node_connected_sides
C++ Type:MooseEnum
Options:nearest_node_connected_sides, all_proximate_sides
Controllable:No
Description:Choice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).
 - seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
 - skip_execution_outside_variable_domainFalseWhether to skip execution of this boundary condition when the variable it applies to is not defined on the boundary. This can facilitate setups with moving variable domains and fixed boundaries. Note that the FEProblem boundary-restricted integrity checks will also need to be turned off if using this option
Default:False
C++ Type:bool
Controllable:No
Description:Whether to skip execution of this boundary condition when the variable it applies to is not defined on the boundary. This can facilitate setups with moving variable domains and fixed boundaries. Note that the FEProblem boundary-restricted integrity checks will also need to be turned off if using this option
 - use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
 
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
 - use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
 
Material Property Retrieval Parameters
Input Files
- (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/bc_gap_heat_transfer_displaced_radiation.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_radiation/cylinder.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/1D.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/sphere2DRZ.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/large_gap_heat_transfer_test_cylinder.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/gap_conductivity_property.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/planar_yz.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_balance/large_gap_heat_transfer_test_sphere.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/corner_wrap.i)
 - (modules/combined/test/tests/umat/gap_heat_transfer_umat.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl2D.i)
 - (modules/combined/test/tests/gap_heat_transfer_convex/gap_heat_transfer_convex.i)
 - (modules/combined/test/tests/generalized_plane_strain_tm_contact/generalized_plane_strain_tm_contact.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/gap_heat_transfer_sphere3D.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/bc_gap_heat_transfer_displaced_conduction.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfectQ8.i)
 - (modules/combined/test/tests/break_mesh_interface_contact/break_mesh_interface_contact.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl2D_yz.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_it_plot_test.i)
 - (modules/heat_transfer/test/tests/heat_conduction/3d_quadrature_gap_heat_transfer/moving.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfectQ9.i)
 - (modules/heat_transfer/test/tests/recover/ad_recover.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl3D.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/planar_xy.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_radiation/sphere.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/large_gap_heat_transfer_test_sphere.i)
 - (modules/heat_transfer/test/tests/meshed_gap_thermal_contact/meshed_gap_thermal_contact_constant_conductance.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_radiation/gap_heat_transfer_radiation_test.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl2D_xz.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfect_split.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/sphere3D.i)
 - (modules/combined/test/tests/gap_heat_transfer_jac/two_blocks.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_rz_test.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_balance/large_gap_heat_transfer_test_cylinder.i)
 - (modules/heat_transfer/test/tests/meshed_gap_thermal_contact/meshed_annulus_thermal_contact.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_syntax.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_test.i)
 - (modules/heat_transfer/test/tests/heat_conduction/3d_quadrature_gap_heat_transfer/nonmatching.i)
 - (modules/combined/test/tests/gap_heat_transfer_convex/gap_heat_transfer_convex_gap_offsets.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_rspherical.i)
 - (modules/heat_transfer/test/tests/meshed_gap_thermal_contact/meshed_gap_thermal_contact.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/large_gap_heat_transfer_test_rz_cylinder.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/second_order.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfect.i)
 - (modules/heat_transfer/test/tests/heat_conduction/3d_quadrature_gap_heat_transfer/second.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_mortar/gap_heat_transfer_3D.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/nonmatching.i)
 - (modules/heat_transfer/test/tests/heat_conduction/min_gap/min_gap.i)
 - (modules/heat_transfer/test/tests/multiple_contact_pairs/multiple_contact_pairs.i)
 - (modules/heat_transfer/test/tests/recover/recover.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_balance/large_gap_heat_transfer_test_rz_cylinder.i)
 - (modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/moving.i)
 - (modules/heat_transfer/test/tests/gap_heat_transfer_htonly/planar_xz.i)
 
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/nonmatching.i)
[Mesh]
  file = nonmatching.e
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 1000
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    emissivity_primary = 0
    emissivity_secondary = 0
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
  [./gap_conductance]
    type = GenericConstantMaterial
    prop_names = 'gap_conductance gap_conductance_dT'
    boundary = 'leftright rightleft'
    prop_values = '1 0'
  [../]
[]
[Postprocessors]
  [./left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  [../]
  [./right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/bc_gap_heat_transfer_displaced_radiation.i)
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [file]
    type = FileMeshGenerator
    file = 2blk-gap.e
  []
  allow_renumbering = false
[]
[Problem]
  kernel_coverage_check = false
  material_coverage_check = false
[]
[Variables]
  [temp]
    order = FIRST
    family = LAGRANGE
    block = '1 2'
  []
  [disp_x]
    order = FIRST
    family = LAGRANGE
    block = '1 2'
  []
  [disp_y]
    order = FIRST
    family = LAGRANGE
    block = '1 2'
  []
[]
[Materials]
  [left]
    type = ADHeatConductionMaterial
    block = 1
    thermal_conductivity = 0.01
    specific_heat = 1
  []
  [right]
    type = ADHeatConductionMaterial
    block = 2
    thermal_conductivity = 0.005
    specific_heat = 1
  []
[]
[Kernels]
  [hc_displaced_block]
    type = ADHeatConduction
    variable = temp
    use_displaced_mesh = true
    block = '1'
  []
  [hc_undisplaced_block]
    type = ADHeatConduction
    variable = temp
    use_displaced_mesh = false
    block = '2'
  []
  [disp_x]
    type = Diffusion
    variable = disp_x
    block = '1 2'
  []
  [disp_y]
    type = Diffusion
    variable = disp_y
    block = '1 2'
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 100
    secondary = 101
    emissivity_primary = 1.0
    emissivity_secondary = 1.0
    gap_conductivity = 1.0e-12
    quadrature = true
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = temp
    boundary = 'left'
    value = 100
  []
  [right]
    type = DirichletBC
    variable = temp
    boundary = 'right'
    value = 0
  []
  [left_disp_x]
    type = DirichletBC
    preset = false
    variable = disp_x
    boundary = 'left'
    value = .1
  []
  [right_disp_x]
    type = DirichletBC
    preset = false
    variable = disp_x
    boundary = 'right'
    value = 0
  []
  [bottom_disp_y]
    type = DirichletBC
    preset = false
    variable = disp_y
    boundary = 'bottom'
    value = 0
  []
[]
[Preconditioning]
  [fmp]
    type = SMP
    full = true
    solve_type = 'NEWTON'
  []
[]
[Executioner]
  type = Steady
  nl_rel_tol = 1e-11
  nl_abs_tol = 1.0e-10
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = '100 101'
    variable = 'temp'
  []
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_radiation/cylinder.i)
#
# This problem is one of radiation boundary conditions between two
# cylindrical surfaces.
#
#            S(T1^4 - T2^4)                       R1
# flux1 = - ---------------- and flux2 = -flux1 * --
#           1    1 - e2   R1                      R2
#           -- + ------ * --
#           e1     e2     R2
#
# where S is the Stefan Boltzmann constant         5.67e-8 W/m^2/K^4
#       T1 is the temperature on the left surface  278 K
#       T2 is the temperature on the right surface 333 K
#       e1 is the emissivity for the left surface  0.8
#       e2 is the emissivity for the left surface  0.9
#       R1 is the radius of the inner surface      0.1 m
#       R2 is the radius of the outer surface      0.11 m
#
# Flux1:
# Exact           Code
# -------------   -------------
# -265.29 W/m^2   -265.26 W/m^2
#
# Flux2:
# Exact           Code
# -------------   -------------
#  241.26 W/m^2    241.15 W/m^2
#
thick = 0.01
R1 = 0.1
R2 = 0.11
[GlobalParams]
  order = second
  family = lagrange
[]
[Mesh]
  coord_type = RZ
  [mesh1]
    type = GeneratedMeshGenerator
    dim = 2
    elem_type = quad8
    nx = 4
    ny = 1
    xmin = '${fparse R1 - thick}'
    xmax = '${R1}'
    ymin = 0
    ymax = '${R1}'
    boundary_name_prefix = left
  []
  [mesh2]
    type = GeneratedMeshGenerator
    dim = 2
    elem_type = quad8
    nx = 4
    ny = 1
    xmin = '${R2}'
    xmax = '${fparse R2 + thick}'
    ymin = 0
    ymax = '${R1}'
    boundary_id_offset = 4
    boundary_name_prefix = right
  []
  [final]
    type = CombinerGenerator
    inputs = 'mesh1 mesh2'
  []
[]
[Variables]
  [temperature]
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temperature
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = temperature
    boundary = left_left
    value = 278
  []
  [right]
    type = DirichletBC
    variable = temperature
    boundary = right_right
    value = 333
  []
[]
[Materials]
  [heat]
    type = HeatConductionMaterial
    thermal_conductivity = 200 # W/m/K
    specific_heat = 4.2e5
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temperature
    primary = left_right
    secondary = right_left
    emissivity_primary = 0.8
    emissivity_secondary = 0.9
    quadrature = true
    gap_conductivity = 1e-40 # requires a positive value
    gap_geometry_type = cylinder
  []
[]
[Functions]
  [analytic_flux_1]
    type = ParsedFunction
    symbol_names = 'S        T1  T2  e1  e2  R1    R2'
    symbol_values = '5.67e-8 278 333 0.8 0.9 ${R1} ${R2}'
    expression = 'T14 := T1*T1*T1*T1;
                  T24 := T2*T2*T2*T2;
                  S*(T14-T24)/(1/e1+(1-e2)/e2*R1/R2)'
  []
  [analytic_flux_2]
    type = ParsedFunction
    symbol_names = 'S        T1  T2  e1  e2  R1    R2'
    symbol_values = '5.67e-8 278 333 0.8 0.9 ${R1} ${R2}'
    expression = 'T14 := T1*T1*T1*T1;
                  T24 := T2*T2*T2*T2;
                  -S*(T14-T24)/(1/e1+(1-e2)/e2*R1/R2)*R1/R2'
  []
[]
[Postprocessors]
  [code_flux_1]
    type = SideDiffusiveFluxAverage
    variable = temperature
    boundary = left_right
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  []
  [analytic_flux_1]
    type = FunctionValuePostprocessor
    function = analytic_flux_1
    execute_on = 'initial timestep_end'
  []
  [error_1]
    type = ParsedPostprocessor
    pp_names = 'code_flux_1 analytic_flux_1'
    expression = '(analytic_flux_1 - code_flux_1)/analytic_flux_1*100'
    execute_on = 'initial timestep_end'
  []
  [code_flux_2]
    type = SideDiffusiveFluxAverage
    variable = temperature
    boundary = right_left
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  []
  [analytic_flux_2]
    type = FunctionValuePostprocessor
    function = analytic_flux_2
    execute_on = 'initial timestep_end'
  []
  [error_2]
    type = ParsedPostprocessor
    pp_names = 'code_flux_2 analytic_flux_2'
    expression = '(analytic_flux_2 - code_flux_2)/analytic_flux_2*100'
    execute_on = 'initial timestep_end'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Transient
  solve_type = newton
  num_steps = 1
  dt = 1
  end_time = 1
  nl_abs_tol = 1e-12
  nl_rel_tol = 1e-10
[]
[Outputs]
  csv = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/1D.i)
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  coord_type = RZ
  [fred]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 25
    xmin = 0
    xmax = 1
    boundary_name_prefix = left
    elem_type = edge3
  []
  [wilma]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 25
    xmin = 2
    xmax = 3
    boundary_id_offset = 10
    boundary_name_prefix = right
    elem_type = edge3
  []
  [combine]
    type = CombinerGenerator
    inputs = 'fred wilma'
  []
[]
[Functions]
  [temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  []
[]
[Variables]
  [temp]
    initial_condition = 100
  []
[]
[Kernels]
  [heat]
    type = HeatConduction
    variable = temp
  []
[]
[BCs]
  [temp_far_left]
    type = FunctionDirichletBC
    boundary = left_left
    variable = temp
    function = temp
  []
  [temp_far_right]
    type = DirichletBC
    boundary = right_right
    variable = temp
    value = 100
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = right_left
    secondary = left_right
    emissivity_primary = 0
    emissivity_secondary = 0
  []
[]
[Materials]
  [heat]
    type = HeatConductionMaterial
    specific_heat = 1.0
    thermal_conductivity = 1.0e6
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_abs_tol = 1e-3
  nl_rel_tol = 1e-12
  l_tol = 1e-8
  l_max_its = 100
  start_time = 0.0
  dt = 2e-1
  end_time = 2.0
[]
[Postprocessors]
  [temp_left]
    type = SideAverageValue
    boundary = left_right
    variable = temp
    execute_on = 'initial timestep_end'
  []
  [temp_right]
    type = SideAverageValue
    boundary = right_left
    variable = temp
    execute_on = 'initial timestep_end'
  []
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/sphere2DRZ.i)
#
# 2DRZ Spherical Gap Heat Transfer Test.
#
# This test exercises 2D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of an inner solid sphere of radius = 1 unit, and outer
# hollow sphere with an inner radius of 2. In other words, the gap between
# them is 1 radial unit in length.
#
# The conductivity of both spheres is set very large to achieve a uniform
# temperature in each sphere. The temperature of the center node of the
# inner sphere is ramped from 100 to 200 over one time unit. The
# temperature of the outside of the outer, hollow sphere is held fixed
# at 100.
#
# A simple analytical solution is possible for the integrated heat flux
# between the inner and outer spheres:
#
#  Integrated Flux = (T_left - T_right) * (gapK/(r^2*((1/r1)-(1/r2)))) * Area
#
# For gapK = 1 (default value)
#
# The area is taken as the area of the secondary (inner) surface:
#
# Area = 4 * pi * 1^2 (4*pi*r^2)
#
# The integrated heat flux across the gap at time 1 is then:
#
# 4*pi*k*delta_T/((1/r1)-(1/r2))
# 4*pi*1*100/((1/1) - (1/2)) =  2513.3 watts
#
# For comparison, see results from the integrated flux post processors.
# This simulation makes use of symmetry, so only 1/2 of the spheres is meshed
# As such, the integrated flux from the post processors is 1/2 of the total,
# or 1256.6 watts... i.e. 400*pi.
# The value coming from the post processor is slightly less than this
# but converges as mesh refinement increases.
#
# Simulating contact is challenging. Regression tests that exercise
# contact features can be difficult to solve consistently across multiple
# platforms. While designing these tests, we felt it worth while to note
# some aspects of these tests. The following applies to:
# sphere3D.i, sphere2DRZ.i, cyl2D.i, and cyl3D.i.
# 1. We decided that to perform consistently across multiple platforms we
# would use very small convergence tolerance. In this test we chose an
# nl_rel_tol of 1e-12.
# 2. Due to such a high value for thermal conductivity (used here so that the
# domains come to a uniform temperature) the integrated flux at time = 0
# was relatively large (the value coming from SideIntegralFlux =
#  -_diffusion_coef[_qp]*_grad_u[_qp]*_normals[_qp] where the diffusion coefficient
# here is thermal conductivity).
# Even though _grad_u[_qp] is small, in this case the diffusion coefficient
# is large. The result is a number that isn't exactly zero and tends to
# fail exodiff. For this reason the parameter execute_on = initial should not
# be used. That parameter is left to default settings in these regression tests.
#
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  file = cyl2D.e
  coord_type = RZ
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  [../]
[]
[Variables]
  [./temp]
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat_conduction]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1000000.0
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1
    quadrature = true
    gap_geometry_type = SPHERE
    sphere_origin = '0 0 0'
  [../]
[]
[BCs]
  [./mid]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [./Quadrature]
    order = fifth
    side_order = seventh
  [../]
[]
[Outputs]
  exodus = true
  [./Console]
    type = Console
  [../]
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/large_gap_heat_transfer_test_cylinder.i)
rpv_core_gap_size = 0.15
core_outer_radius = 2
rpv_inner_radius = '${fparse 2 + rpv_core_gap_size}'
rpv_outer_radius = '${fparse 2.5 + rpv_core_gap_size}'
rpv_outer_htc = 10 # W/m^2/K
rpv_outer_Tinf = 300 # K
core_blocks = '1'
rpv_blocks = '3'
[Mesh]
  [core_gap_rpv]
    type = ConcentricCircleMeshGenerator
    num_sectors = 10
    radii = '${core_outer_radius} ${rpv_inner_radius} ${rpv_outer_radius}'
    rings = '2 1 2'
    has_outer_square = false
    preserve_volumes = true
    portion = full
  []
  [rename_core_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = core_gap_rpv
    primary_block = 1
    paired_block = 2
    new_boundary = 'core_outer'
  []
  [rename_inner_rpv_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = rename_core_bdy
    primary_block = 3
    paired_block = 2
    new_boundary = 'rpv_inner'
  []
  [2d_mesh]
    type = BlockDeletionGenerator
    input = rename_inner_rpv_bdy
    block = 2
  []
  allow_renumbering = false
[]
[Variables]
  [Tsolid]
    initial_condition = 500
  []
[]
[Kernels]
  [heat_source]
    type = CoupledForce
    variable = Tsolid
    block = '${core_blocks}'
    v = power_density
  []
  [heat_conduction]
    type = HeatConduction
    variable = Tsolid
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = Tsolid
    boundary = 'outer' # outer RPV
    coefficient = ${rpv_outer_htc}
    T_infinity = ${rpv_outer_Tinf}
  []
[]
[ThermalContact]
  [RPV_gap]
    type = GapHeatTransfer
    gap_geometry_type = 'CYLINDER'
    emissivity_primary = 0.8
    emissivity_secondary = 0.8
    variable = Tsolid
    primary = 'core_outer'
    secondary = 'rpv_inner'
    gap_conductivity = 0.1
    quadrature = true
    cylinder_axis_point_1 = '0 0 0'
    cylinder_axis_point_2 = '0 0 5'
  []
[]
[AuxVariables]
  [power_density]
    block = '${core_blocks}'
    initial_condition = 50e3
  []
[]
[Materials]
  [simple_mat]
    type = HeatConductionMaterial
    thermal_conductivity = 34.6 # W/m/K
  []
[]
[Postprocessors]
  [Tcore_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Trpv_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = '${core_blocks}'
  []
  [rpv_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = Tsolid
    boundary = 'outer' # outer RVP
    T_fluid = ${rpv_outer_Tinf}
    htc = ${rpv_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(rpv_convective_out - ptot) / ptot'
    pp_names = 'rpv_convective_out ptot'
  []
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = 'rpv_inner core_outer'
    variable = Tsolid
  []
[]
[Executioner]
  type = Steady
  automatic_scaling = true
  compute_scaling_once = false
  petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
  petsc_options_value = 'hypre boomeramg 100'
  nl_rel_tol = 1e-10
  nl_abs_tol = 1e-10
  l_max_its = 100
  [Quadrature]
    side_order = seventh
  []
  line_search = none
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/gap_conductivity_property.i)
[Mesh]
  file = perfect.e
[]
[Variables]
  [./temp]
  [../]
[]
[AuxVariables]
  [./gap_conductivity]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_conductivity]
    type = MaterialRealAux
    boundary = leftright
    property = gap_conductivity
    variable = gap_conductivity
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 300
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    type = GapHeatTransfer
    gap_conductivity = 3.0
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/planar_yz.i)
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks in the y-z plane.  Each element block
# is a square. They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
# across each block. The temperature of the far bottom boundary
# is ramped from 100 to 200 over one time unit.  The temperature of the far top
# boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
# Flux = (T_left - T_right) * (gapK/gap_width)
#
# The gap conductivity is specified as 1, thus
#
# gapK(Tavg) = 1.0*Tavg
#
# The heat flux across the gap at time = 1 is then:
#
# Flux = 100 * (1.0/1.0) = 100
#
# For comparison, see results from the flux post processors.  These results
# are the same as for the unit 1-D gap heat transfer between two unit cubes.
[Mesh]
  [file]
    type = FileMeshGenerator
    file = simple_2D.e
  []
  [./rotate]
    type = TransformGenerator
    transform = ROTATE
    vector_value = '0 90 90'
    input = file
  [../]
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./temp_far_bottom]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_top]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_rel_tol = 1e-12
  l_tol = 1e-3
  l_max_its = 100
  dt = 1e-1
  end_time = 1.0
[]
[Postprocessors]
  [./temp_bottom]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_top]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_bottom]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./flux_top]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_balance/large_gap_heat_transfer_test_sphere.i)
sphere_outer_htc = 10 # W/m^2/K
sphere_outer_Tinf = 300 # K
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  [file]
    type = FileMeshGenerator
    file = cyl2D.e
  []
  coord_type = RZ
[]
[Functions]
  [temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  []
[]
[Variables]
  [temp]
    initial_condition = 500
  []
[]
[AuxVariables]
  [gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  []
  [power_density]
    block = 'fuel'
    initial_condition = 50e3
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temp
  []
  [heat_source]
    type = CoupledForce
    variable = temp
    block = 'fuel'
    v = power_density
  []
[]
[AuxKernels]
  [gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  []
[]
[Materials]
  [heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 34.6
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0.8
    emissivity_secondary = 0.8
    gap_conductivity = 0.1
    quadrature = true
    gap_geometry_type = SPHERE
    sphere_origin = '0 0 0'
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = temp
    boundary = '4' # outer RPV
    coefficient = ${sphere_outer_htc}
    T_infinity = ${sphere_outer_Tinf}
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [Quadrature]
    order = fifth
    side_order = seventh
  []
[]
[Outputs]
  exodus = false
  csv = true
  [Console]
    type = Console
  []
[]
[Postprocessors]
  [temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  []
  [temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  []
  [flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  []
  [flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = 'fuel'
  []
  [sphere_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = temp
    boundary = '4' # outer RVP
    T_fluid = ${sphere_outer_Tinf}
    htc = ${sphere_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(sphere_convective_out - ptot) / ptot'
    pp_names = 'sphere_convective_out ptot'
  []
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/corner_wrap.i)
[Mesh]
  file = corner_wrap.e
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    check_boundary_restricted = false
    quadrature = true
  []
[]
[Variables]
  [temp]
    initial_condition = 100
  []
[]
[Kernels]
  [heat]
    type = HeatConduction
    variable = temp
  []
[]
[BCs]
  [temp_bot_right]
    type = DirichletBC
    boundary = 1
    variable = temp
    value = 50
  []
  [temp_top_left]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  []
[]
[Materials]
  [heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1.0
  []
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  line_search = 'none'
  nl_rel_tol = 1e-14
  l_tol = 1e-3
  l_max_its = 100
#  dt = 1e-1
#  end_time = 1.0
[]
[Outputs]
  exodus = true
[]
(modules/combined/test/tests/umat/gap_heat_transfer_umat.i)
[GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  temperature = temp
[]
[Mesh]
  file = gap_heat_transfer_mesh.e
[]
[Functions]
  [disp]
    type = PiecewiseLinear
    x = '0 2.0'
    y = '0 1.0'
  []
  [temp]
    type = PiecewiseLinear
    x = '0     1'
    y = '273 2000'
  []
  [pressure_function]
    type = PiecewiseLinear
    x = '0     1'
    y = '0 200'
  []
[]
[Variables]
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
  [temp]
    initial_condition = 273
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 2
    secondary = 3
    emissivity_primary = 0
    emissivity_secondary = 0
  []
[]
[Physics/SolidMechanics/QuasiStatic/All]
  volumetric_locking_correction = true
  strain = FINITE
  generate_output = 'strain_yy stress_yy'
[]
[Kernels]
  [heat]
    type = HeatConduction
    variable = temp
  []
[]
[BCs]
  [move_right]
    type = FunctionDirichletBC
    boundary = '3'
    variable = disp_x
    function = disp
  []
  [fixed_x]
    type = DirichletBC
    boundary = '1'
    variable = disp_x
    value = 0
  []
  [fixed_y]
    type = DirichletBC
    boundary = '1 2 4'
    variable = disp_y
    value = 0
  []
  [fixed_z]
    type = DirichletBC
    boundary = '1 2 3 4'
    variable = disp_z
    value = 0
  []
  [temp_bottom]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  []
  [temp_top]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  []
  [Pressure]
    [example]
      boundary = 3
      function = pressure_function
    []
  []
[]
[Materials]
  # 1. Active for umat calculation
  [umat]
    type = AbaqusUMATStress
    constant_properties = '1.0e6 0.3'
    plugin = '../../../../solid_mechanics/test/plugins/elastic_temperature'
    num_state_vars = 0
    temperature = temp
    use_one_based_indexing = true
  []
  #  2. Active for reference MOOSE computations
  [elasticity_tensor]
    type = ComputeIsotropicElasticityTensor
    block = '1 2'
    base_name = 'base'
    youngs_modulus = 1e6
    poissons_ratio = 0.3
  []
  [temp_dependent_elasticity_tensor]
    type = CompositeElasticityTensor
    block = '1 2'
    coupled_variables = temp
    tensors = 'base'
    weights = 'prefactor_material'
  []
  [prefactor_material_block]
    type = DerivativeParsedMaterial
    block = '1 2'
    property_name = prefactor_material
    coupled_variables = temp
    expression = '273/(temp)'
  []
  [stress]
    type = ComputeFiniteStrainElasticStress
    block = '1 2'
  []
  [heat]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1.0
  []
  [density]
    type = Density
    block = '1 2'
    density = 1.0
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  start_time = 0.0
  dt = 0.1
  end_time = 2.0
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl2D.i)
#
# 2D Cylindrical Gap Heat Transfer Test.
#
# This test exercises 2D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of an inner solid cylinder of radius = 1 unit, and outer
# hollow cylinder with an inner radius of 2 in the x-y plane. In other words,
# the gap between them is 1 radial unit in length.
#
# The conductivity of both cylinders is set very large to achieve a uniform
# temperature in each cylinder. The temperature of the center node of the
# inner cylinder is ramped from 100 to 200 over one time unit. The temperature
# of the outside of the outer, hollow cylinder is held fixed at 100.
#
# A simple analytical solution is possible for the integrated heat flux
# between the inner and outer cylinders:
#
#  Integrated Flux = (T_left - T_right) * (gapK/(r*ln(r2/r1))) * Area
#
# For gapK = 1 (default value)
#
# The area is taken as the area of the secondary (inner) surface:
#
# Area = 2 * pi * h * r, where h is the height of the cylinder.
#
# The integrated heat flux across the gap at time 1 is then:
#
# 2*pi*h*k*delta_T/(ln(r2/r1))
# 2*pi*1*1*100/(ln(2/1)) = 906.5 watts
#
# For comparison, see results from the integrated flux post processors.
# This simulation makes use of symmetry, so only 1/4 of the cylinders is meshed
# As such, the integrated flux from the post processors is 1/4 of the total,
# or 226.6 watts.
# The value coming from the post processor is slightly less than this
# but converges as mesh refinement increases.
# Note that the 2D and 3D results are the same.
#
# Simulating contact is challenging. Regression tests that exercise
# contact features can be difficult to solve consistently across multiple
# platforms. While designing these tests, we felt it worth while to note
# some aspects of these tests. The following applies to:
# sphere3D.i, sphere2DRZ.i, cyl2D.i, and cyl3D.i.
# 1. We decided that to perform consistently across multiple platforms we
# would use very small convergence tolerance. In this test we chose an
# nl_rel_tol of 1e-12.
# 2. Due to such a high value for thermal conductivity (used here so that the
# domains come to a uniform temperature) the integrated flux at time = 0
# was relatively large (the value coming from SideIntegralFlux =
#  -_diffusion_coef[_qp]*_grad_u[_qp]*_normals[_qp] where the diffusion coefficient
# here is thermal conductivity).
# Even though _grad_u[_qp] is small, in this case the diffusion coefficient
# is large. The result is a number that isn't exactly zero and tends to
# fail exodiff. For this reason the parameter execute_on = initial should not
# be used. That parameter is left to default settings in these regression tests.
#
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  file = cyl2D.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  [../]
[]
[Variables]
  [./temp]
   initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat_conduction]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1000000.0
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1
    quadrature = true
    gap_geometry_type = CYLINDER
    cylinder_axis_point_1 = '0 0 0'
    cylinder_axis_point_2 = '0 0 1'
  [../]
[]
[BCs]
  [./mid]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [./Quadrature]
     order = fifth
     side_order = seventh
  [../]
[]
[Outputs]
  exodus = true
  [./Console]
    type = Console
  [../]
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
(modules/combined/test/tests/gap_heat_transfer_convex/gap_heat_transfer_convex.i)
[GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  temperature = temp
[]
[Mesh]
  file = gap_heat_transfer_convex.e
[]
[Functions]
  [./disp]
    type = PiecewiseLinear
    x = '0 2.0'
    y = '0 1.0'
  [../]
  [./temp]
    type = PiecewiseLinear
    x = '0     1'
    y = '200 200'
  [../]
[]
[Variables]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
  [./temp]
    initial_condition = 100
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 2
    secondary = 3
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
[]
[Physics/SolidMechanics/QuasiStatic/All]
  volumetric_locking_correction = true
  strain = FINITE
  eigenstrain_names = eigenstrain
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./move_right]
    type = FunctionDirichletBC
    boundary = '3'
    variable = disp_x
    function = disp
  [../]
  [./fixed_x]
    type = DirichletBC
    boundary = '1'
    variable = disp_x
    value = 0
  [../]
  [./fixed_y]
    type = DirichletBC
    boundary = '1 2 3 4'
    variable = disp_y
    value = 0
  [../]
  [./fixed_z]
    type = DirichletBC
    boundary = '1 2 3 4'
    variable = disp_z
    value = 0
  [../]
  [./temp_bottom]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_top]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Materials]
  [./elasticity_tensor]
    type = ComputeIsotropicElasticityTensor
    block = '1 2'
    youngs_modulus = 1e6
    poissons_ratio = 0.3
  [../]
  [./thermal_strain]
    type = ComputeThermalExpansionEigenstrain
    stress_free_temperature = 100
    thermal_expansion_coeff = 0
    eigenstrain_name = eigenstrain
  [../]
  [./stress]
    type = ComputeFiniteStrainElasticStress
  [../]
  [./heat1]
    type = HeatConductionMaterial
    block = 1
    specific_heat = 1.0
    thermal_conductivity = 1.0
  [../]
  [./heat2]
    type = HeatConductionMaterial
    block = 2
    specific_heat = 1.0
    thermal_conductivity = 1.0
  [../]
  [./density]
    type = Density
    block = '1 2'
    density = 1.0
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  start_time = 0.0
  dt = 0.1
  end_time = 2.0
[]
[Outputs]
  exodus = true
[]
(modules/combined/test/tests/generalized_plane_strain_tm_contact/generalized_plane_strain_tm_contact.i)
[GlobalParams]
  order = FIRST
  family = LAGRANGE
  displacements = 'disp_x disp_y'
  scalar_out_of_plane_strain = scalar_strain_zz
  temperature = temp
[]
[Mesh]
  file = 2squares.e
[]
[Variables]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./temp]
  [../]
  [./scalar_strain_zz]
    order = FIRST
    family = SCALAR
  [../]
[]
[AuxVariables]
  [./stress_xx]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./stress_xy]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./stress_yy]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./stress_zz]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./strain_xx]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./strain_xy]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./strain_yy]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./strain_zz]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Postprocessors]
  [./react_z]
    type = MaterialTensorIntegral
    rank_two_tensor = stress
    index_i = 2
    index_j = 2
  [../]
[]
[Kernels]
  [./TensorMechanics]
    use_displaced_mesh = true
  [../]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[Physics]
  [./SolidMechanics]
    [./GeneralizedPlaneStrain]
      [./gps]
        use_displaced_mesh = true
      [../]
    [../]
  [../]
[]
[AuxKernels]
  [./stress_xx]
    type = RankTwoAux
    rank_two_tensor = stress
    variable = stress_xx
    index_i = 0
    index_j = 0
  [../]
  [./stress_xy]
    type = RankTwoAux
    rank_two_tensor = stress
    variable = stress_xy
    index_i = 0
    index_j = 1
  [../]
  [./stress_yy]
    type = RankTwoAux
    rank_two_tensor = stress
    variable = stress_yy
    index_i = 1
    index_j = 1
  [../]
  [./stress_zz]
    type = RankTwoAux
    rank_two_tensor = stress
    variable = stress_zz
    index_i = 2
    index_j = 2
  [../]
  [./strain_xx]
    type = RankTwoAux
    rank_two_tensor = total_strain
    variable = strain_xx
    index_i = 0
    index_j = 0
  [../]
  [./strain_xy]
    type = RankTwoAux
    rank_two_tensor = total_strain
    variable = strain_xy
    index_i = 0
    index_j = 1
  [../]
  [./strain_yy]
    type = RankTwoAux
    rank_two_tensor = total_strain
    variable = strain_yy
    index_i = 1
    index_j = 1
  [../]
  [./strain_zz]
    type = RankTwoAux
    rank_two_tensor = total_strain
    variable = strain_zz
    index_i = 2
    index_j = 2
  [../]
[]
[Functions]
  [./tempramp]
    type = ParsedFunction
    expression = 't'
  [../]
[]
[BCs]
  [./x]
    type = DirichletBC
    boundary = '4 6'
    variable = disp_x
    value = 0.0
  [../]
  [./y]
    type = DirichletBC
    boundary = '4 6'
    variable = disp_y
    value = 0.0
  [../]
  [./t]
    type = DirichletBC
    boundary = '4'
    variable = temp
    value = 0.0
  [../]
  [./tramp]
    type = FunctionDirichletBC
    variable = temp
    boundary = '6'
    function = tempramp
  [../]
[]
[Preconditioning]
  [./SMP]
    type = SMP
    off_diag_row =    'disp_x disp_y'
    off_diag_column = 'disp_y disp_x'
  [../]
[]
[Contact]
  [./mech]
    primary = 8
    secondary = 2
    penalty = 1e+10
    normalize_penalty = true
    tangential_tolerance = .1
    normal_smoothing_distance = .1
    model = frictionless
    formulation = kinematic
  [../]
[]
[ThermalContact]
  [./thermal]
    type = GapHeatTransfer
    primary = 8
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    tangential_tolerance = .1
    normal_smoothing_distance = .1
    gap_conductivity = 0.01
    min_gap = 0.001
    quadrature = true
  [../]
[]
[Materials]
  [./elastic_tensor]
    type = ComputeIsotropicElasticityTensor
    poissons_ratio = 0.3
    youngs_modulus = 1e6
    block = '1 2'
  [../]
  [./strain]
    type = ComputePlaneSmallStrain
    eigenstrain_names = eigenstrain
    block = '1 2'
  [../]
  [./thermal_strain]
    type = ComputeThermalExpansionEigenstrain
    temperature = temp
    thermal_expansion_coeff = 0.02
    stress_free_temperature = 0.0
    eigenstrain_name = eigenstrain
    block = '1 2'
  [../]
  [./stress]
    type = ComputeLinearElasticStress
    block = '1 2'
  [../]
  [./heatcond]
    type = HeatConductionMaterial
    thermal_conductivity = 3.0
    specific_heat = 300.0
    block = '1 2'
  [../]
  [./density]
    type = GenericConstantMaterial
    prop_names = 'density'
    prop_values = '1'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = PJFNK
  line_search = none
  petsc_options_iname = '-pc_type -ps_sub_type -pc_factor_mat_solver_package'
  petsc_options_value = 'asm      lu           superlu_dist'
# controls for linear iterations
  l_max_its = 100
  l_tol = 1e-4
# controls for nonlinear iterations
  nl_max_its = 20
  nl_rel_tol = 1e-9
  nl_abs_tol = 1e-10
# time control
  start_time = 0.0
  dt = 0.2
  dtmin = 0.2
  end_time = 2.0
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/gap_heat_transfer_sphere3D.i)
sphere_outer_htc = 10 # W/m^2/K
sphere_outer_Tinf = 300 # K
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  file = sphere3D.e
[]
[Functions]
  [temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  []
[]
[Variables]
  [temp]
    initial_condition = 500
  []
[]
[AuxVariables]
  [gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  []
  [power_density]
    block = 'fuel'
    initial_condition = 50e3
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temp
  []
  [heat_source]
    type = CoupledForce
    variable = temp
    block = 'fuel'
    v = power_density
  []
[]
[AuxKernels]
  [gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  []
[]
[Materials]
  [heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 34.6
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 5
    gap_geometry_type = SPHERE
    sphere_origin = '0 0 0'
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = temp
    boundary = '4' # outer RPV
    coefficient = ${sphere_outer_htc}
    T_infinity = ${sphere_outer_Tinf}
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [Quadrature]
    order = fifth
    side_order = seventh
  []
[]
[Outputs]
  exodus = true
  csv = true
  [Console]
    type = Console
  []
[]
[Postprocessors]
  [temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  []
  [temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  []
  [flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  []
  [flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = 'fuel'
  []
  [sphere_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = temp
    boundary = '4' # outer RVP
    T_fluid = ${sphere_outer_Tinf}
    htc = ${sphere_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(sphere_convective_out - ptot) / ptot'
    pp_names = 'sphere_convective_out ptot'
  []
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = '2 3'
    variable = temp
  []
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/bc_gap_heat_transfer_displaced_conduction.i)
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [file]
    type = FileMeshGenerator
    file = 2blk-gap.e
  []
  allow_renumbering = false
[]
[Problem]
  kernel_coverage_check = false
  material_coverage_check = false
[]
[Variables]
  [temp]
    order = FIRST
    family = LAGRANGE
    block = '1 2'
  []
  [disp_x]
    order = FIRST
    family = LAGRANGE
    block = '1 2'
  []
  [disp_y]
    order = FIRST
    family = LAGRANGE
    block = '1 2'
  []
[]
[Materials]
  [left]
    type = ADHeatConductionMaterial
    block = 1
    thermal_conductivity = 0.01
    specific_heat = 1
  []
  [right]
    type = ADHeatConductionMaterial
    block = 2
    thermal_conductivity = 0.005
    specific_heat = 1
  []
[]
[Kernels]
  [hc_displaced_block]
    type = ADHeatConduction
    variable = temp
    use_displaced_mesh = true
    block = '1'
  []
  [hc_undisplaced_block]
    type = ADHeatConduction
    variable = temp
    use_displaced_mesh = false
    block = '2'
  []
  [disp_x]
    type = Diffusion
    variable = disp_x
    block = '1 2'
  []
  [disp_y]
    type = Diffusion
    variable = disp_y
    block = '1 2'
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 100
    secondary = 101
    emissivity_primary = 0.0
    emissivity_secondary = 0.0
    gap_conductivity = 100.0
    quadrature = true
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = temp
    boundary = 'left'
    value = 100
  []
  [right]
    type = DirichletBC
    variable = temp
    boundary = 'right'
    value = 0
  []
  [left_disp_x]
    type = DirichletBC
    preset = false
    variable = disp_x
    boundary = 'left'
    value = .1
  []
  [right_disp_x]
    type = DirichletBC
    preset = false
    variable = disp_x
    boundary = 'right'
    value = 0
  []
  [bottom_disp_y]
    type = DirichletBC
    preset = false
    variable = disp_y
    boundary = 'bottom'
    value = 0
  []
[]
[Preconditioning]
  [fmp]
    type = SMP
    full = true
    solve_type = 'NEWTON'
  []
[]
[Executioner]
  type = Steady
  nl_rel_tol = 1e-11
  nl_abs_tol = 1.0e-10
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = '100 101'
    variable = 'temp'
  []
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfectQ8.i)
[GlobalParams]
  order = SECOND
[]
[Mesh]
  file = perfectQ8.e
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 300
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  [./Quadrature]
    order = THIRD
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/combined/test/tests/break_mesh_interface_contact/break_mesh_interface_contact.i)
[GlobalParams]
  order = FIRST
  family = LAGRANGE
  displacements = 'disp_x disp_y'
  volumetric_locking_correction = true
[]
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    nx = 5
    ny = 5
    dim = 2
  []
  [block1]
    type = SubdomainBoundingBoxGenerator
    block_id = 1
    bottom_left = '0 0 0'
    top_right = '0.5 1 0'
    input = gen
  []
  [block2]
    type = SubdomainBoundingBoxGenerator
    block_id = 2
    bottom_left = '0.5 0 0'
    top_right = '1 1 0'
    input = block1
  []
  [breakmesh]
    input = block2
    type = BreakMeshByBlockGenerator
    block_pairs = '1 2'
    split_interface = true
    add_interface_on_two_sides = true
  []
[]
[Variables]
  [temperature]
  []
  [disp_x]
  []
  [disp_y]
  []
[]
[Kernels]
  [thermal_cond]
    type = HeatConduction
    variable = temperature
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  generate_output = 'stress_xx stress_yy strain_xx strain_yy'
  add_variables = true
  strain = FINITE
  incremental = true
  [block1]
    block = 1
  []
  [block2]
    block = 2
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temperature
    primary = Block1_Block2
    secondary = Block2_Block1
    emissivity_primary = 0
    emissivity_secondary = 0
    quadrature = true
    gap_conductivity = 1
  []
[]
[Contact]
  [mechanical]
    primary = Block1_Block2
    secondary = Block2_Block1
    penalty = 1000
    model = coulomb
    friction_coefficient = 0.5
    formulation = tangential_penalty
    tangential_tolerance = 0.1
  []
[]
[BCs]
  [left_temp]
    type = DirichletBC
    value = 100
    variable = temperature
    boundary = left
  []
  [right_temp]
    type = DirichletBC
    value = 0
    variable = temperature
    boundary = right
  []
  [left_disp_x]
    type = FunctionDirichletBC
    variable = disp_x
    boundary = left
    function = 0
  []
  [left_disp_y]
    type = DirichletBC
    variable = disp_y
    boundary = left
    value = 0.0
  []
  [right_disp_x]
    type = FunctionDirichletBC
    variable = disp_x
    boundary = right
    function = '-t'
  []
  [right_disp_y]
    type = FunctionDirichletBC
    variable = disp_y
    boundary = right
    function = '0'
  []
[]
[Materials]
  [thermal_cond]
    type = GenericConstantMaterial
    prop_names = 'thermal_conductivity'
    prop_values = 1
  []
  [elasticity_tensor]
    type = ComputeIsotropicElasticityTensor
    poissons_ratio = 0.3
    youngs_modulus = 100
  []
  [stress]
    type = ComputeFiniteStrainElasticStress
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Dampers]
  [contact_slip]
    type = ContactSlipDamper
    secondary = Block1_Block2
    primary = Block2_Block1
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_type'
  petsc_options_value = 'lu mumps'
  line_search = none
  nl_rel_tol = 1e-9
  nl_abs_tol = 1e-9
  l_tol = 1e-4
  l_max_its = 50
  nl_max_its = 20
  start_time = 0.0
  num_steps = 2
  dtmin = 1e-8
  dt = 1e-2
  automatic_scaling = true
[]
[Outputs]
  print_linear_residuals = false
  time_step_interval = 1
  csv = false
  perf_graph = false
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl2D_yz.i)
#
# 2D Cylindrical Gap Heat Transfer Test.
#
# This test exercises 2D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of an inner solid cylinder of radius = 1 unit, and outer
# hollow cylinder with an inner radius of 2 in the y-z plane. In other words,
# the gap between them is 1 radial unit in length.
#
# The calculated results are the same as for the cyl2D.i case in the x-y plane.
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  [file]
    type = FileMeshGenerator
    file = cyl2D.e
  []
  [./rotate]
    type = TransformGenerator
    transform = ROTATE
    vector_value = '0 90 90'
    input = file
  [../]
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  [../]
[]
[Variables]
  [./temp]
   initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat_conduction]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1000000.0
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1
    quadrature = true
    gap_geometry_type = CYLINDER
    cylinder_axis_point_1 = '0 0 0'
    cylinder_axis_point_2 = '1 0 0'
  [../]
[]
[BCs]
  [./mid]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [./Quadrature]
     order = fifth
     side_order = seventh
  [../]
[]
[Outputs]
  exodus = true
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_it_plot_test.i)
#
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks containing one element each.  Each
#   element is a unit cube.  They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
#  across each block. The temperature of the far left boundary
#  is ramped from 100 to 200 over one time unit, and then held fixed for an additional
#  time unit.  The temperature of the far right boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
#  Flux = (T_left - T_right) * (gapK/gap_width)
#
# The gap conductivity is specified as 1, thus
#
#  gapK(Tavg) = 1.0*Tavg
#
#
# The heat flux across the gap at time = 2 is then:
#
#  Flux(2) = 100 * (1.0/1.0) = 100
#
# For comparison, see results from the flux post processors
#
[Mesh]
  file = gap_heat_transfer_htonly_test.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./temp_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_abs_tol = 1e-5
  nl_rel_tol = 1e-12
  l_tol = 1e-10
  l_max_its = 100
  start_time = 0.0
  dt = 1e-1
  end_time = 2.0
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
[Outputs]
  file_base = out_it_plot
  [./exodus]
    type = Exodus
    execute_on = 'initial timestep_end nonlinear'
    nonlinear_residual_dt_divisor = 100
  [../]
[]
(modules/heat_transfer/test/tests/heat_conduction/3d_quadrature_gap_heat_transfer/moving.i)
[Mesh]
  file = nonmatching.e
  displacements = 'disp_x disp_y disp_z'
[]
[Variables]
  [temp]
  []
[]
[AuxVariables]
  [disp_x]
  []
  [disp_y]
  []
  [disp_z]
  []
[]
[Functions]
  [disp_y]
    type = ParsedFunction
    expression = 0.1*t
  []
  [left_temp]
    type = ParsedFunction
    expression = 1000+t
  []
[]
[Kernels]
  [hc]
    type = HeatConduction
    variable = temp
  []
[]
[AuxKernels]
  [disp_y]
    type = FunctionAux
    variable = disp_y
    function = disp_y
    block = left
    execute_on = 'INITIAL TIMESTEP_BEGIN'
  []
[]
[BCs]
  [left]
    type = FunctionDirichletBC
    variable = temp
    boundary = leftleft
    function = left_temp
  []
  [right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  []
[]
[ThermalContact]
  [left_to_right]
    type = GapHeatTransfer
    variable = temp
    primary = rightleft
    secondary = leftright
    emissivity_primary = 0
    emissivity_secondary = 0
    quadrature = true
  []
[]
[Materials]
  [hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
    use_displaced_mesh = true
  []
[]
[Postprocessors]
  [left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  []
  [right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  []
[]
[Executioner]
  type = Transient
  num_steps = 9
  dt = 1
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfectQ9.i)
[GlobalParams]
  order = SECOND
[]
[Mesh]
  file = perfectQ9.e
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 300
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Executioner]
  type = Steady
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  [./Quadrature]
    order = THIRD
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/recover/ad_recover.i)
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  file = recover_in.e
  coord_type = RZ
[]
[Variables]
  [./temp]
    initial_condition = 580.0
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = ADHeatConduction
    variable = temp
  [../]
  [./heat_source]
    type = ADMatHeatSource
    material_property = volumetric_heat
    variable = temp
    scalar = 1e3
    block = pellet_type_1
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 5
    secondary = 10
    emissivity_primary = 0
    emissivity_secondary = 0
    quadrature = true
  [../]
[]
[BCs]
  [./outside]
    type = DirichletBC
    value = 580
    boundary = '1 2 3'
    variable = temp
  [../]
  [./edge]
    type = DirichletBC
    value = 700
    boundary = 10
    variable = temp
  [../]
[]
[Materials]
  [./volumetric_heat]
    type = ADGenericFunctionMaterial
    prop_names = 'volumetric_heat'
    prop_values = 't'
  [../]
  [./thermal_3]
    type = ADHeatConductionMaterial
    block = 3
    thermal_conductivity = 5
    specific_heat = 12
  [../]
  [./thermal_1]
    type = ADHeatConductionMaterial
    block = 1
    thermal_conductivity = 16.0
    specific_heat = 330.0
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = ' lu       superlu_dist'
  nl_rel_tol = 1e-9
  nl_abs_tol = 1e-11
  start_time = -200
  n_startup_steps = 1
  end_time = 1.02e5
  num_steps = 10
  dtmax = 2e6
  dtmin = 1
  [./TimeStepper]
    type = IterationAdaptiveDT
    dt = 2.0e2
    optimal_iterations = 15
    iteration_window = 2
  [../]
  [./Quadrature]
    order = FIFTH
    side_order = SEVENTH
  [../]
[]
[Postprocessors]
  [./ave_temp_interior]
     type = SideAverageValue
     boundary = 9
     variable = temp
     execute_on = 'initial linear'
  [../]
  [./avg_clad_temp]
    type = SideAverageValue
    boundary = 7
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_from_clad]
    type = ADSideDiffusiveFluxIntegral
    variable = temp
    boundary = 5
    diffusivity = thermal_conductivity
  [../]
  [./_dt]
    type = TimestepSize
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl3D.i)
#
# 3D Cylindrical Gap Heat Transfer Test.
#
# This test exercises 3D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of an inner solid cylinder of radius = 1 unit, and outer
# hollow cylinder with an inner radius of 2. In other words, the gap between
# them is 1 radial unit in length.
#
# The conductivity of both cylinders is set very large to achieve a uniform
# temperature in each cylinder. The temperature of the center node of the
# inner cylinder is ramped from 100 to 200 over one time unit. The temperature
# of the outside of the outer, hollow cylinder is held fixed at 100.
#
# A simple analytical solution is possible for the integrated heat flux
# between the inner and outer cylinders:
#
#  Integrated Flux = (T_left - T_right) * (gapK/(r*ln(r2/r1))) * Area
#
# For gapK = 1 (default value)
#
# The area is taken as the area of the secondary (inner) surface:
#
# Area = 2 * pi * h * r, where h is the height of the cylinder.
#
# The integrated heat flux across the gap at time 1 is then:
#
# 2*pi*h*k*delta_T/(ln(r2/r1))
# 2*pi*1*1*100/(ln(2/1)) = 906.5 watts
#
# For comparison, see results from the integrated flux post processors.
# This simulation makes use of symmetry, so only 1/4 of the cylinders is meshed
# As such, the integrated flux from the post processors is 1/4 of the total,
# or 226.6 watts.
# The value coming from the post processor is slightly less than this
# but converges as mesh refinement increases.
#
# Simulating contact is challenging. Regression tests that exercise
# contact features can be difficult to solve consistently across multiple
# platforms. While designing these tests, we felt it worth while to note
# some aspects of these tests. The following applies to:
# sphere3D.i, sphere2DRZ.i, cyl2D.i, and cyl3D.i.
# 1. We decided that to perform consistently across multiple platforms we
# would use very small convergence tolerance. In this test we chose an
# nl_rel_tol of 1e-12.
# 2. Due to such a high value for thermal conductivity (used here so that the
# domains come to a uniform temperature) the integrated flux at time = 0
# was relatively large (the value coming from SideIntegralFlux =
#  -_diffusion_coef[_qp]*_grad_u[_qp]*_normals[_qp] where the diffusion coefficient
# here is thermal conductivity).
# Even though _grad_u[_qp] is small, in this case the diffusion coefficient
# is large. The result is a number that isn't exactly zero and tends to
# fail exodiff. For this reason the parameter execute_on = initial should not
# be used. That parameter is left to default settings in these regression tests.
#
 [GlobalParams]
  order = SECOND
  family = LAGRANGE
  []
[Mesh]
  file = cyl3D.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  [../]
[]
[Variables]
  [./temp]
   initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat_conduction]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1000000.0
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1
    quadrature = true
    gap_geometry_type = CYLINDER
    cylinder_axis_point_1 = '0 0 0'
    cylinder_axis_point_2 = '0 1 0'
  [../]
[]
[BCs]
  [./mid]
    type = FunctionDirichletBC
    boundary = 5
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Executioner]
  type = Transient
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [./Quadrature]
     order = fifth
     side_order = seventh
  [../]
[]
[Outputs]
  exodus = true
   [./Console]
    type = Console
   [../]
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/planar_xy.i)
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks in the x-y plane.  Each element block
# is a square. They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
# across each block. The temperature of the far bottom boundary
# is ramped from 100 to 200 over one time unit.  The temperature of the far top
# boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
# Flux = (T_left - T_right) * (gapK/gap_width)
#
# The gap conductivity is specified as 1, thus
#
# gapK(Tavg) = 1.0*Tavg
#
# The heat flux across the gap at time = 1 is then:
#
# Flux = 100 * (1.0/1.0) = 100
#
# For comparison, see results from the flux post processors.  These results
# are the same as for the unit 1-D gap heat transfer between two unit cubes.
[Mesh]
  file = simple_2D.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./temp_far_bottom]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_top]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_rel_tol = 1e-14
  l_tol = 1e-3
  l_max_its = 100
  dt = 1e-1
  end_time = 1.0
[]
[Postprocessors]
  [./temp_bottom]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_top]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_bottom]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./flux_top]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_radiation/sphere.i)
#
# This problem is one of radiation boundary conditions between two
# spherical surfaces.
#
#            S(T1^4 - T2^4)                         R1^2
# flux1 = - ----------------   and flux2 = -flux1 * ----
#           1    1 - e2   R1^2                      R2^2
#           -- + ------ * ----
#           e1     e2     R2^2
#
# where S is the Stefan Boltzmann constant         5.67e-8 W/m^2/K^4
#       T1 is the temperature on the left surface  278 K
#       T2 is the temperature on the right surface 333 K
#       e1 is the emissivity for the left surface  0.8
#       e2 is the emissivity for the left surface  0.9
#       R1 is the radius of the inner surface      0.1 m
#       R2 is the radius of the outer surface      0.11 m
#
# Flux1:
# Exact           Code
# -------------   -------------
# -267.21 W/m^2   -267.02 W/m^2
#
# Flux2:
# Exact           Code
# -------------   -------------
#  220.83 W/m^2    220.70 W/m^2
#
thick = 0.01
R1 = 0.1
R2 = 0.11
[GlobalParams]
  order = second
  family = lagrange
[]
[Mesh]
  coord_type = RSPHERICAL
  [mesh1]
    type = GeneratedMeshGenerator
    dim = 1
    elem_type = edge3
    nx = 4
    xmin = '${fparse R1 - thick}'
    xmax = '${R1}'
    boundary_name_prefix = left
  []
  [mesh2]
    type = GeneratedMeshGenerator
    dim = 1
    elem_type = edge3
    nx = 4
    ny = 1
    xmin = '${R2}'
    xmax = '${fparse R2 + thick}'
    boundary_id_offset = 4
    boundary_name_prefix = right
  []
  [final]
    type = CombinerGenerator
    inputs = 'mesh1 mesh2'
  []
[]
[Variables]
  [temperature]
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temperature
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = temperature
    boundary = left_left
    value = 278
  []
  [right]
    type = DirichletBC
    variable = temperature
    boundary = right_right
    value = 333
  []
[]
[Materials]
  [heat]
    type = HeatConductionMaterial
    thermal_conductivity = 200 # W/m/K
    specific_heat = 4.2e5
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temperature
    primary = left_right
    secondary = right_left
    emissivity_primary = 0.8
    emissivity_secondary = 0.9
    quadrature = true
    gap_conductivity = 1e-40 # requires a positive value
    gap_geometry_type = sphere
  []
[]
[Functions]
  [analytic_flux_1]
    type = ParsedFunction
    symbol_names = 'S        T1  T2  e1  e2  R1    R2'
    symbol_values = '5.67e-8 278 333 0.8 0.9 ${R1} ${R2}'
    expression = 'T14 := T1*T1*T1*T1;
                  T24 := T2*T2*T2*T2;
                  S*(T14-T24)/(1/e1+(1-e2)/e2*R1*R1/R2/R2)'
  []
  [analytic_flux_2]
    type = ParsedFunction
    symbol_names = 'S        T1  T2  e1  e2  R1    R2'
    symbol_values = '5.67e-8 278 333 0.8 0.9 ${R1} ${R2}'
    expression = 'T14 := T1*T1*T1*T1;
                  T24 := T2*T2*T2*T2;
                  -S*(T14-T24)/(1/e1+(1-e2)/e2*R1*R1/R2/R2)*R1*R1/R2/R2'
  []
[]
[Postprocessors]
  [code_flux_1]
    type = SideDiffusiveFluxAverage
    variable = temperature
    boundary = left_right
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  []
  [analytic_flux_1]
    type = FunctionValuePostprocessor
    function = analytic_flux_1
    execute_on = 'initial timestep_end'
  []
  [error_1]
    type = ParsedPostprocessor
    pp_names = 'code_flux_1 analytic_flux_1'
    expression = '(analytic_flux_1 - code_flux_1)/analytic_flux_1*100'
    execute_on = 'initial timestep_end'
  []
  [code_flux_2]
    type = SideDiffusiveFluxAverage
    variable = temperature
    boundary = right_left
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  []
  [analytic_flux_2]
    type = FunctionValuePostprocessor
    function = analytic_flux_2
    execute_on = 'initial timestep_end'
  []
  [error_2]
    type = ParsedPostprocessor
    pp_names = 'code_flux_2 analytic_flux_2'
    expression = '(analytic_flux_2 - code_flux_2)/analytic_flux_2*100'
    execute_on = 'initial timestep_end'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Transient
  solve_type = newton
  num_steps = 1
  dt = 1
  end_time = 1
  nl_abs_tol = 1e-12
  nl_rel_tol = 1e-10
[]
[Outputs]
  csv = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/large_gap_heat_transfer_test_sphere.i)
sphere_outer_htc = 10 # W/m^2/K
sphere_outer_Tinf = 300 # K
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  [file]
    type = FileMeshGenerator
    file = cyl2D.e
  []
  allow_renumbering = false
  coord_type = RZ
[]
[Functions]
  [temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  []
[]
[Variables]
  [temp]
    initial_condition = 500
  []
[]
[AuxVariables]
  [gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  []
  [power_density]
    block = 'fuel'
    initial_condition = 50e3
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temp
  []
  [heat_source]
    type = CoupledForce
    variable = temp
    block = 'fuel'
    v = power_density
  []
[]
[AuxKernels]
  [gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  []
[]
[Materials]
  [heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 34.6
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0.0
    emissivity_secondary = 0.0
    gap_conductivity = 5
  #  quadrature = true
    gap_geometry_type = SPHERE
    sphere_origin = '0 0 0'
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = temp
    boundary = '4' # outer RPV
    coefficient = ${sphere_outer_htc}
    T_infinity = ${sphere_outer_Tinf}
  []
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = '2 3'
    variable = temp
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [Quadrature]
    order = fifth
    side_order = seventh
  []
[]
[Outputs]
  exodus = true
  csv = true
  [Console]
    type = Console
  []
[]
[Postprocessors]
  [temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  []
  [temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  []
  [flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  []
  [flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = 'fuel'
  []
  [sphere_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = temp
    boundary = '4' # outer RVP
    T_fluid = ${sphere_outer_Tinf}
    htc = ${sphere_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(sphere_convective_out - ptot) / ptot'
    pp_names = 'sphere_convective_out ptot'
  []
[]
(modules/heat_transfer/test/tests/meshed_gap_thermal_contact/meshed_gap_thermal_contact_constant_conductance.i)
[Mesh]
  [fmesh]
    type = FileMeshGenerator
    file = meshed_gap.e
  []
  [block0]
    type = SubdomainBoundingBoxGenerator
    input = fmesh
    bottom_left = '.5 -.5 0'
    top_right = '.7 .5 0'
    block_id = 4
  []
[]
[Variables]
  [./temp]
    block = '1 3'
    initial_condition = 1.0
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
    block = '1 3'
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = 1
    value = 1
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = 4
    value = 2
  [../]
[]
[ThermalContact]
  [./gap_conductance]
    type = GapHeatTransfer
    variable = temp
    primary = 2
    secondary = 3
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductance = 2.5
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = '1 3'
    temp = temp
    thermal_conductivity = 1
  [../]
[]
[Problem]
  type = FEProblem
  kernel_coverage_check = false
  material_coverage_check = false
[]
[Executioner]
  type = Steady
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  [./out]
    type = Exodus
  [../]
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_radiation/gap_heat_transfer_radiation_test.i)
#
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a helium-filled gap including radiation.
#
# The mesh consists of two element blocks containing one element each.  Each
#   element is a unit cube.  They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
#  across each block. The temperature of the far left boundary
#  is ramped from 100 to 200 over one time unit, and then held fixed for an additional
#  time unit.  The temperature of the far right boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
#  Flux = (T_left - T_right) * h_gap
#
#    where  h_gap = h_gas + h_cont + h_rad
#
# By setting the contact pressure, roughnesses, and jump distances to zero, the gap
#   conductance simplifies to:
#
#    h_gap = gapK/d_gap + sigma*Fe*(T_left^2 + T_right^2)*(T_left + T_right)
#
#      where Fe = 1/(1/eps_left + 1/eps_right - 1)
#            eps = emissivity
#
# For pure helium, BISON computes the gas conductivity as:
#
#  gapK(Tavg) = 2.639e-3*Tavg^0.7085
#
# For the test, the final (t=2) average gas temperature is (200 +100)/2 = 150,
#  giving gapK(150) = 0.09187557
#
# Assuming ems_left = ems_right = 0.5, Fe = 1/3
#
# The heat flux across the gap at that time is then:
#
#  Flux(2) = 100 * ((0.09187557/1.0) + (5.669e-8/3)*(200^2 + 100^2)*(200 + 100))
#          = 37.532557
#
# The flux post processors give 37.53255
#
[Mesh]
  file = gap_heat_transfer_radiation_test.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '200 200'
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./temp_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[ThermalContact]
  [./gap]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    gap_conductivity = 0.09187557
    emissivity_primary = 0.5
    emissivity_secondary = 0.5
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 10000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_abs_tol = 1e-6
  nl_rel_tol = 1e-10
  l_tol = 1e-3
  l_max_its = 100
  start_time = 0.0
  dt = 1
  end_time = 1.0
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/cyl2D_xz.i)
#
# 2D Cylindrical Gap Heat Transfer Test.
#
# This test exercises 2D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of an inner solid cylinder of radius = 1 unit, and outer
# hollow cylinder with an inner radius of 2 in the x-z plane. In other words,
# the gap between them is 1 radial unit in length.
#
# The calculated results are the same as for the cyl2D.i case in the x-y plane.
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  [file]
    type = FileMeshGenerator
    file = cyl2D.e
  []
  [./rotate]
    type = TransformGenerator
    transform = ROTATE
    vector_value = '0 90 0'
    input = file
  [../]
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  [../]
[]
[Variables]
  [./temp]
   initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat_conduction]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1000000.0
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1
    quadrature = true
    gap_geometry_type = CYLINDER
    cylinder_axis_point_1 = '0 0 0'
    cylinder_axis_point_2 = '0 1 0'
  [../]
[]
[BCs]
  [./mid]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [./Quadrature]
     order = fifth
     side_order = seventh
  [../]
[]
[Outputs]
  exodus = true
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfect_split.i)
[Mesh]
  [fmg]
    type = FileMeshGenerator
    file = 'perfect.cpa.gz'
  []
  parallel_type = distributed
[]
[Variables]
  [temp]
  []
[]
[Kernels]
  [hc]
    type = HeatConduction
    variable = temp
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 300
  []
  [right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  []
[]
[ThermalContact]
  [left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    type = GapHeatTransfer
  []
[]
[Materials]
  [hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  []
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/sphere3D.i)
#
# 3D Spherical Gap Heat Transfer Test.
#
# This test exercises 3D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of an inner solid sphere of radius = 1 unit, and outer
# hollow sphere with an inner radius of 2. In other words, the gap between
# them is 1 radial unit in length.
#
# The conductivity of both spheres is set very large to achieve a uniform
# temperature in each sphere. The temperature of the center node of the
# inner sphere is ramped from 100 to 200 over one time unit. The
# temperature of the outside of the outer, hollow sphere is held fixed
# at 100.
#
# A simple analytical solution is possible for the integrated heat flux
# between the inner and outer spheres:
#
#  Integrated Flux = (T_left - T_right) * (gapK/(r^2*((1/r1)-(1/r2)))) * Area
#
# For gapK = 1 (default value)
#
# The area is taken as the area of the secondary (inner) surface:
#
# Area = 4 * pi * 1^2 (4*pi*r^2)
#
# The integrated heat flux across the gap at time 1 is then:
#
# 4*pi*k*delta_T/((1/r1)-(1/r2))
# 4*pi*1*100/((1/1) - (1/2)) =  2513.3 watts
#
# For comparison, see results from the integrated flux post processors.
# This simulation makes use of symmetry, so only 1/8 of the spheres is meshed
# As such, the integrated flux from the post processors is 1/8 of the total,
# or 314.159 watts... i.e. 100*pi.
# The value coming from the post processor is slightly less than this
# but converges as mesh refinement increases.
#
# Simulating contact is challenging. Regression tests that exercise
# contact features can be difficult to solve consistently across multiple
# platforms. While designing these tests, we felt it worth while to note
# some aspects of these tests. The following applies to:
# sphere3D.i, sphere2DRZ.i, cyl2D.i, and cyl3D.i.
# 1. We decided that to perform consistently across multiple platforms we
# would use very small convergence tolerance. In this test we chose an
# nl_rel_tol of 1e-12.
# 2. Due to such a high value for thermal conductivity (used here so that the
# domains come to a uniform temperature) the integrated flux at time = 0
# was relatively large (the value coming from SideIntegralFlux =
#  -_diffusion_coef[_qp]*_grad_u[_qp]*_normals[_qp] where the diffusion coefficient
# here is thermal conductivity).
# Even though _grad_u[_qp] is small, in this case the diffusion coefficient
# is large. The result is a number that isn't exactly zero and tends to
# fail exodiff. For this reason the parameter execute_on = initial should not
# be used. That parameter is left to default settings in these regression tests.
#
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  file = sphere3D.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  [../]
[]
[Variables]
  [./temp]
   initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat_conduction]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1
    quadrature = true
    gap_geometry_type = SPHERE
    sphere_origin = '0 0 0'
  [../]
[]
[BCs]
  [./mid]
    type = FunctionDirichletBC
    boundary = 5
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-7
  [./Quadrature]
     order = fifth
     side_order = seventh
  [../]
[]
[Outputs]
  exodus = true
  [./Console]
    type = Console
  [../]
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
(modules/combined/test/tests/gap_heat_transfer_jac/two_blocks.i)
# This problem consists of two beams with different prescribed temperatures on
# the top of the top beam and the bottom of the bottom beam.  The top beam is
# fixed against vertical displacement on the top surface, and the bottom beam
# bends downward due to thermal expansion.
# This is a test of the effectiveness of the Jacobian terms coupling temperature
# and displacement for thermal contact. The Jacobian is not exactly correct,
# but is close enough that this challenging problem converges in a small number
# of nonlinear iterations using NEWTON.
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [./msh]
    type = FileMeshGenerator
    file = two_blocks.e
  []
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./heat]
    type = ADHeatConduction
    variable = temp
  [../]
[]
[Physics/SolidMechanics/QuasiStatic]
  [./all]
    strain = FINITE
    add_variables = true
    eigenstrain_names = thermal_expansion
    generate_output = 'stress_xx stress_yy stress_zz stress_yz stress_xz stress_xy'
    use_automatic_differentiation = true
  [../]
[]
[Contact]
  [./mechanical]
    primary = 4
    secondary = 5
    formulation = kinematic
    tangential_tolerance = 1e-1
    penalty = 1e10
  [../]
[]
[ThermalContact]
  [./thermal]
    type = GapHeatTransfer
    variable = temp
    primary = 4
    secondary = 5
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 1e4
    quadrature = true
  [../]
[]
[BCs]
  [./left_x]
    type = DirichletBC
    variable = disp_x
    boundary = 1
    value = 0.0
  [../]
  [./left_y]
    type = DirichletBC
    variable = disp_y
    boundary = 1
    value = 0.0
  [../]
  [./top_y]
    type = DirichletBC
    variable = disp_y
    boundary = 7
    value = 0
  [../]
  [./top_temp]
    type = DirichletBC
    variable = temp
    boundary = 7
    value = 1000.0
  [../]
  [./bot_temp]
    type = DirichletBC
    variable = temp
    boundary = 6
    value = 500.0
  [../]
[]
[Materials]
  [./density]
    type = Density
    density = 100
  [../]
  [./temp]
    type = ADHeatConductionMaterial
    thermal_conductivity = 1e5
    specific_heat = 620.0
  [../]
  [./Elasticity_tensor]
    type = ADComputeElasticityTensor
    fill_method = symmetric_isotropic
    C_ijkl = '0.3 0.5e8'
  [../]
  [./thermal_eigenstrain]
    type = ADComputeThermalExpansionEigenstrain
    thermal_expansion_coeff = 1e-5
    stress_free_temperature = 500
    temperature = temp
    eigenstrain_name = thermal_expansion
  [../]
  [./stress]
    type = ADComputeFiniteStrainElasticStress
  [../]
[]
[Preconditioning]
  [./SMP]
    type = SMP
    full = true
  [../]
[]
[Outputs]
  exodus = true
[]
[Executioner]
  automatic_scaling = true
  type = Transient
  petsc_options_iname = '-pc_type'
  petsc_options_value = 'lu'
  solve_type = NEWTON
  nl_max_its = 15
  l_tol = 1e-10
  l_max_its = 50
  start_time = 0.0
  dt = 0.2
  dtmin = 0.2
  num_steps = 1
  line_search = none
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_rz_test.i)
#
# 2-D RZ Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks containing one element each.  Each
#   element is a unit cube.  They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
#  across each block. The temperature of the far left boundary
#  is ramped from 100 to 200 over one time unit, and then held fixed for an additional
#  time unit.  The temperature of the far right boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks, or cylinders in the case of RZ.:
#
#  Flux = (T_left - T_right) * (gapK/(r*ln(r2/r1)))
#
# For gapK = 1 (default value)
#
# The integrated heat flux across the gap at time 2 is then:
#
# 2*pi*h*k*delta_T/(ln(r2/r1))
# 2*pi*1*1*100/(ln(2/1)) = 906.5 watts
#
# For comparison, see results from the flux post processors.
#
# As a second test, use the rectilinear (parallel plate) form of the gap heat transfer.
#
#  Flux = (T_left - T_right) * (gapK/gapL)
#
# For gapK = 1 (default value)
#
# The integrated heat flux across the gap at time 2 is then:
#
# 2*pi*h*k*delta_T/(1)
# 2*pi*1*1*100/(1) = 628.3 watts
#
# For comparison, see results from the flux post processors.
#
[Mesh]
  active = 'file'
  [file]
    type = FileMeshGenerator
    file = gap_heat_transfer_htonly_rz_test.e
  []
  [rotate]
    type = TransformGenerator
    transform = ROTATE
    vector_value = '90 0 0'
    input = file
  []
  rz_coord_axis = Y # this is modified through CLI args to test Z-R as opposed to R-Z
  coord_type = RZ
[]
[Functions]
  [./ramp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
  [./thermal_contact2]
    type = GapHeatTransfer
    variable = temp2
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_geometry_type = PLATE
    appended_property_name = 2
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
  [./temp2]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./gap_cond2]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
  [./heat2]
    type = HeatConduction
    variable = temp2
  [../]
[]
[BCs]
  [./temp_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = ramp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
  [./temp_far_left2]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp2
    function = ramp
  [../]
  [./temp_far_right2]
    type = DirichletBC
    boundary = 4
    variable = temp2
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
  [./conductance2]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond2
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1e6
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
#  petsc_options = '-snes_mf_operator -ksp_monitor -snes_ksp_ew'
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
#  petsc_options_iname = '-snes_type -snes_ls -snes_linesearch_type -ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
#  petsc_options_value = 'ls         basic    basic                    201                hypre    boomeramg      4'
#  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
#  petsc_options_value = '201                hypre    boomeramg      4'
  nl_abs_tol = 1e-3
  nl_rel_tol = 1e-8
  l_tol = 1e-6
  l_max_its = 100
  start_time = 0.0
  dt = 1e-1
  dtmin = 1e-1
  end_time = 2.0
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
  [./temp_left2]
    type = SideAverageValue
    boundary = 2
    variable = temp2
    execute_on = 'initial timestep_end'
  [../]
  [./temp_right2]
    type = SideAverageValue
    boundary = 3
    variable = temp2
    execute_on = 'initial timestep_end'
  [../]
  [./flux_left2]
    type = SideDiffusiveFluxIntegral
    variable = temp2
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right2]
    type = SideDiffusiveFluxIntegral
    variable = temp2
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_balance/large_gap_heat_transfer_test_cylinder.i)
rpv_core_gap_size = 0.15
core_outer_radius = 2
rpv_inner_radius = ${fparse 2 + rpv_core_gap_size}
rpv_outer_radius = ${fparse 2.5 + rpv_core_gap_size}
rpv_outer_htc = 10 # W/m^2/K
rpv_outer_Tinf = 300 # K
core_blocks = '1'
rpv_blocks = '3'
[Mesh]
  [core_gap_rpv]
    type = ConcentricCircleMeshGenerator
    num_sectors = 10
    radii = '${core_outer_radius} ${rpv_inner_radius} ${rpv_outer_radius}'
    rings = '2 1 2'
    has_outer_square = false
    preserve_volumes = true
    portion = full
  []
  [rename_core_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = core_gap_rpv
    primary_block = 1
    paired_block = 2
    new_boundary = 'core_outer'
  []
  [rename_inner_rpv_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = rename_core_bdy
    primary_block = 3
    paired_block = 2
    new_boundary = 'rpv_inner'
  []
  [2d_mesh]
    type = BlockDeletionGenerator
    input = rename_inner_rpv_bdy
    block = 2
  []
[]
[Variables]
  [Tsolid]
    initial_condition = 500
  []
[]
[Kernels]
  [heat_source]
    type = CoupledForce
    variable = Tsolid
    block = '${core_blocks}'
    v = power_density
  []
  [heat_conduction]
    type = HeatConduction
    variable = Tsolid
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = Tsolid
    boundary = 'outer' # outer RPV
    coefficient = ${rpv_outer_htc}
    T_infinity = ${rpv_outer_Tinf}
  []
[]
[ThermalContact]
  [RPV_gap]
    type = GapHeatTransfer
    gap_geometry_type = 'CYLINDER'
    emissivity_primary = 0.8
    emissivity_secondary = 0.8
    variable = Tsolid
    primary = 'core_outer'
    secondary = 'rpv_inner'
    gap_conductivity = 0.1
    quadrature = true
    cylinder_axis_point_1 = '0 0 0'
    cylinder_axis_point_2 = '0 0 5'
  []
[]
[AuxVariables]
  [power_density]
    block = '${core_blocks}'
    initial_condition = 50e3
  []
[]
[Materials]
  [simple_mat]
    type = HeatConductionMaterial
    thermal_conductivity = 34.6 # W/m/K
  []
[]
[Postprocessors]
  [Tcore_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Trpv_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = '${core_blocks}'
  []
  [rpv_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = Tsolid
    boundary = 'outer' # outer RVP
    T_fluid = ${rpv_outer_Tinf}
    htc = ${rpv_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(rpv_convective_out - ptot) / ptot'
    pp_names = 'rpv_convective_out ptot'
  []
[]
[Executioner]
  type = Steady
  automatic_scaling = true
  compute_scaling_once = false
  petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
  petsc_options_value = 'hypre boomeramg 100'
  nl_rel_tol = 1e-10
  nl_abs_tol = 1e-10
  l_max_its = 100
  [Quadrature]
    side_order = seventh
  []
  line_search = none
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/meshed_gap_thermal_contact/meshed_annulus_thermal_contact.i)
[Mesh]
  [fmesh]
    type = FileMeshGenerator
    file = meshed_annulus.e
  []
  [rename]
    type = RenameBlockGenerator
    input = fmesh
    old_block = '1 2 3'
    new_block = '1 4 3'
  []
[]
[Variables]
  [./temp]
    block = '1 3'
    initial_condition = 1.0
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
    block = '1 3'
  [../]
  [./source]
    type = HeatSource
    variable = temp
    block = 3
    value = 10.0
  [../]
[]
[BCs]
  [./outside]
    type = DirichletBC
    variable = temp
    boundary = 1
    value = 1.0
  [../]
[]
[ThermalContact]
  [./gap_conductivity]
    type = GapHeatTransfer
    variable = temp
    primary = 2
    secondary = 3
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 0.5
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = '1 3'
    temp = temp
    thermal_conductivity = 1
  [../]
[]
[Problem]
  type = FEProblem
  kernel_coverage_check = false
  material_coverage_check = false
[]
[Executioner]
  type = Steady
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  [./out]
    type = Exodus
  [../]
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_syntax.i)
#
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks containing one element each.  Each
#   element is a unit cube.  They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
#  across each block. The temperature of the far left boundary
#  is ramped from 100 to 200 over one time unit.  The temperature of the far right
#  boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
#  Flux = (T_left - T_right) * (gapK/gap_width)
#
# The gap conductivity is specified as 1, thus
#
#  gapK(Tavg) = 1.0*Tavg
#
#
# The heat flux across the gap at time = 1 is then:
#
#  Flux(2) = 100 * (1.0/1.0) = 100
#
# For comparison, see results from the flux post processors
#
# This test has been augmented with a second scalar field that solves nearly
#   the same problem.  The conductivity has been changed to 10.  Thus, the
#   flux for the second field is 1000.
#
[Mesh]
  file = gap_heat_transfer_htonly_test.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
  [./awesomium_contact]
    type = GapHeatTransfer
    variable = awesomium
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 10
    appended_property_name = _awesomium
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
  [./awesomium]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./gap_cond_awesomium]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
  [./awe]
    type = HeatConduction
    variable = awesomium
  [../]
[]
[BCs]
  [./temp_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
  [./awesomium_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = awesomium
    function = temp
  [../]
  [./awesomium_far_right]
    type = DirichletBC
    boundary = 4
    variable = awesomium
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
  [./conductance_awe]
    type = MaterialRealAux
    property = gap_conductance_awesomium
    variable = gap_cond_awesomium
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_rel_tol = 1e-12
  l_tol = 1e-3
  l_max_its = 100
  dt = 1e-1
  end_time = 1.0
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./awe_left]
    type = SideAverageValue
    boundary = 2
    variable = awesomium
    execute_on = 'initial timestep_end'
  [../]
  [./awe_right]
    type = SideAverageValue
    boundary = 3
    variable = awesomium
    execute_on = 'initial timestep_end'
  [../]
  [./awe_flux_left]
    type = SideDiffusiveFluxIntegral
    variable = awesomium
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./awe_flux_right]
    type = SideDiffusiveFluxIntegral
    variable = awesomium
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_test.i)
#
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks containing one element each.  Each
#   element is a unit cube.  They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
#  across each block. The temperature of the far left boundary
#  is ramped from 100 to 200 over one time unit.  The temperature of the far right
#  boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
#  Flux = (T_left - T_right) * (gapK/gap_width)
#
# The gap conductivity is specified as 1, thus
#
#  gapK(Tavg) = 1.0*Tavg
#
#
# The heat flux across the gap at time = 1 is then:
#
#  Flux(2) = 100 * (1.0/1.0) = 100
#
# For comparison, see results from the flux post processors
#
# This test has been augmented with a second scalar field that solves nearly
#   the same problem.  The conductivity has been changed to 10.  Thus, the
#   flux for the second field is 1000.
#
[Mesh]
  file = gap_heat_transfer_htonly_test.e
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
  [./awesomium_contact]
    type = GapHeatTransfer
    variable = awesomium
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 10
    appended_property_name = _awesomium
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
  [./awesomium]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
  [./gap_cond_awesomium]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
  [./awe]
    type = HeatConduction
    variable = awesomium
  [../]
[]
[BCs]
  [./temp_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
  [./awesomium_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = awesomium
    function = temp
  [../]
  [./awesomium_far_right]
    type = DirichletBC
    boundary = 4
    variable = awesomium
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
  [./conductance_awe]
    type = MaterialRealAux
    property = gap_conductance_awesomium
    variable = gap_cond_awesomium
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_rel_tol = 1e-12
  l_tol = 1e-3
  l_max_its = 100
  dt = 1e-1
  end_time = 1.0
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./awe_left]
    type = SideAverageValue
    boundary = 2
    variable = awesomium
    execute_on = 'initial timestep_end'
  [../]
  [./awe_right]
    type = SideAverageValue
    boundary = 3
    variable = awesomium
    execute_on = 'initial timestep_end'
  [../]
  [./awe_flux_left]
    type = SideDiffusiveFluxIntegral
    variable = awesomium
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./awe_flux_right]
    type = SideDiffusiveFluxIntegral
    variable = awesomium
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/heat_conduction/3d_quadrature_gap_heat_transfer/nonmatching.i)
[Mesh]
  file = nonmatching.e
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 1000
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    emissivity_primary = 0
    emissivity_secondary = 0
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Postprocessors]
  [./left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  [../]
  [./right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  [../]
[]
[Executioner]
  type = Steady
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/combined/test/tests/gap_heat_transfer_convex/gap_heat_transfer_convex_gap_offsets.i)
#The two blocks were moved apart by the value of 0.005 in the y-direction, respectively.
#This value was compensated by the gap offsets from both secondary and primary sides
[GlobalParams]
  displacements = 'disp_x disp_y disp_z'
  temperature = temp
[]
[Mesh]
  file = gap_heat_transfer_convex_gap_offsets.e
[]
[Functions]
  [./disp]
    type = PiecewiseLinear
    x = '0 2.0'
    y = '0 1.0'
  [../]
  [./temp]
    type = PiecewiseLinear
    x = '0     1'
    y = '200 200'
  [../]
[]
[Variables]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./disp_z]
  [../]
  [./temp]
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./primary_gap_offset]
  [../]
  [./secondary_gap_offset]
  [../]
  [./mapped_primary_gap_offset]
  [../]
[]
[AuxKernels]
  [./primary_gap_offset]
    type = ConstantAux
    variable = primary_gap_offset
    value = -0.005
    boundary = 2
  [../]
  [./mapped_primary_gap_offset]
    type = GapValueAux
    variable = mapped_primary_gap_offset
    paired_variable = primary_gap_offset
    boundary = 3
    paired_boundary = 2
  [../]
  [./secondary_gap_offset]
    type = ConstantAux
    variable = secondary_gap_offset
    value = -0.005
    boundary = 3
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 2
    secondary = 3
    emissivity_primary = 0
    emissivity_secondary = 0
    secondary_gap_offset = secondary_gap_offset
    mapped_primary_gap_offset = mapped_primary_gap_offset
  [../]
[]
[Physics/SolidMechanics/QuasiStatic/All]
  volumetric_locking_correction = true
  strain = FINITE
  eigenstrain_names = eigenstrain
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./move_right]
    type = FunctionDirichletBC
    boundary = '3'
    variable = disp_x
    function = disp
  [../]
  [./fixed_x]
    type = DirichletBC
    boundary = '1'
    variable = disp_x
    value = 0
  [../]
  [./fixed_y]
    type = DirichletBC
    boundary = '1 2 3 4'
    variable = disp_y
    value = 0
  [../]
  [./fixed_z]
    type = DirichletBC
    boundary = '1 2 3 4'
    variable = disp_z
    value = 0
  [../]
  [./temp_bottom]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_top]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[Materials]
  [./elasticity_tensor]
    type = ComputeIsotropicElasticityTensor
    block = '1 2'
    youngs_modulus = 1e6
    poissons_ratio = 0.3
  [../]
  [./thermal_strain]
    type = ComputeThermalExpansionEigenstrain
    stress_free_temperature = 100
    thermal_expansion_coeff = 0
    eigenstrain_name = eigenstrain
  [../]
  [./stress]
    type = ComputeFiniteStrainElasticStress
  [../]
  [./heat1]
    type = HeatConductionMaterial
    block = 1
    specific_heat = 1.0
    thermal_conductivity = 1.0
  [../]
  [./heat2]
    type = HeatConductionMaterial
    block = 2
    specific_heat = 1.0
    thermal_conductivity = 1.0
  [../]
  [./density]
    type = Density
    block = '1 2'
    density = 1.0
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  start_time = 0.0
  dt = 0.1
  end_time = 2.0
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/gap_heat_transfer_htonly_rspherical.i)
#
# 1-D spherical Gap Heat Transfer Test
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two "blocks" with a mesh biased toward the gap
#   between them.  Each block is unit length.  The gap between them is one
#   unit in length.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
#  across each block. The temperature of the far left boundary
#  is ramped from 100 to 200 over one time unit, and then held fixed for an additional
#  time unit.  The temperature of the far right boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks, or spheres in the case of RSPHERICAL.:
#
#  Flux = (T_left - T_right) * (gapK/(r^2*((1/r1)-(1/r2))))
#
# For gapK = 1 (default value)
#
# The area is taken as the area of the secondary (inner) surface:
#
# Area = 4 * pi * 1 * 1
#
# The integrated heat flux across the gap at time 2 is then:
#
# 4*pi*k*delta_T/((1/r1)-(1/r2))
# 4*pi*1*100/((1/1) - (1/2)) =  2513.3 watts
#
# For comparison, see results from the flux post processors.
#
#
[Mesh]
  file = gap_heat_transfer_htonly_rspherical.e
  construct_side_list_from_node_list = true
  coord_type = RSPHERICAL
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_geometry_type = sphere
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./temp_far_left]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_right]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 1e6
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  # I don't know enough about this test to say why it needs such a
  # loose nl_abs_tol... after timestep 10 the residual basically can't
  # be reduced much beyond the initial residual.  The test probably
  # needs to be revisited to determine why.
  nl_abs_tol = 1e-3
  nl_rel_tol = 1e-10
  l_tol = 1e-6
  l_max_its = 100
  line_search = 'none'
  nl_max_its = 10
  dt = 1e-1
  dtmin = 1e-1
  end_time = 2.0
[]
[Postprocessors]
  [./temp_left]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_right]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
  [../]
  [./flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/meshed_gap_thermal_contact/meshed_gap_thermal_contact.i)
[Mesh]
  [fmesh]
    type = FileMeshGenerator
    file = meshed_gap.e
  []
  [block0]
    type = SubdomainBoundingBoxGenerator
    input = fmesh
    bottom_left = '.5 -.5 0'
    top_right = '.7 .5 0'
    block_id = 4
  []
[]
[Variables]
  [./temp]
    block = '1 3'
    initial_condition = 1.0
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
    block = '1 3'
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = 1
    value = 1
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = 4
    value = 2
  [../]
[]
[ThermalContact]
  [./gap_conductivity]
    type = GapHeatTransfer
    variable = temp
    primary = 2
    secondary = 3
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 0.5
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = '1 3'
    temp = temp
    thermal_conductivity = 1
  [../]
[]
[Problem]
  type = FEProblem
  kernel_coverage_check = false
  material_coverage_check = false
[]
[Executioner]
  type = Steady
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  [./out]
    type = Exodus
  [../]
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/large_gap_heat_transfer_test_rz_cylinder.i)
rpv_core_gap_size = 0.2
core_outer_radius = 2
rpv_inner_radius = '${fparse 2 + rpv_core_gap_size}'
rpv_outer_radius = '${fparse 2.5 + rpv_core_gap_size}'
rpv_width = '${fparse rpv_outer_radius - rpv_inner_radius}'
rpv_outer_htc = 10 # W/m^2/K
rpv_outer_Tinf = 300 # K
core_blocks = '1'
rpv_blocks = '3'
[Mesh]
  [gmg]
    type = CartesianMeshGenerator
    dim = 2
    dx = '${core_outer_radius} ${rpv_core_gap_size} ${rpv_width}'
    ix = '400 1 100'
    dy = 1
    iy = '5'
  []
  [set_block_id1]
    type = SubdomainBoundingBoxGenerator
    input = gmg
    bottom_left = '0 0 0'
    top_right = '${core_outer_radius} 1 0'
    block_id = 1
    location = INSIDE
  []
  [rename_core_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = set_block_id1
    primary_block = 1
    paired_block = 0
    new_boundary = 'core_outer'
  []
  [set_block_id3]
    type = SubdomainBoundingBoxGenerator
    input = rename_core_bdy
    bottom_left = '${rpv_inner_radius} 0 0'
    top_right = '${rpv_outer_radius} 1 0'
    block_id = 3
    location = INSIDE
  []
  [rename_inner_rpv_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = set_block_id3
    primary_block = 3
    paired_block = 0
    new_boundary = 'rpv_inner'
  []
  # comment out for test without gap
  [2d_mesh]
    type = BlockDeletionGenerator
    input = rename_inner_rpv_bdy
    block = 0
  []
  allow_renumbering = false
  coord_type = RZ
[]
[Variables]
  [Tsolid]
    initial_condition = 500
  []
[]
[Kernels]
  [heat_source]
    type = CoupledForce
    variable = Tsolid
    block = '${core_blocks}'
    v = power_density
  []
  [heat_conduction]
    type = HeatConduction
    variable = Tsolid
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = Tsolid
    boundary = 'right' # outer RPV
    coefficient = ${rpv_outer_htc}
    T_infinity = ${rpv_outer_Tinf}
  []
[]
[ThermalContact]
  [RPV_gap]
    type = GapHeatTransfer
    gap_geometry_type = 'CYLINDER'
    emissivity_primary = 0.8
    emissivity_secondary = 0.8
    variable = Tsolid
    primary = 'core_outer'
    secondary = 'rpv_inner'
    gap_conductivity = 0.1
    quadrature = true
  []
[]
[AuxVariables]
  [power_density]
    block = '${core_blocks}'
    initial_condition = 50e3
  []
[]
[Materials]
  [simple_mat]
    type = HeatConductionMaterial
    thermal_conductivity = 34.6 # W/m/K
  []
[]
[Postprocessors]
  [Tcore_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Trpv_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = '${core_blocks}'
  []
  [rpv_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = Tsolid
    boundary = 'right' # outer RVP
    T_fluid = ${rpv_outer_Tinf}
    htc = ${rpv_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(rpv_convective_out - ptot) / ptot'
    pp_names = 'rpv_convective_out ptot'
  []
  [flux_from_core] # converges to ptot as the mesh is refined
    type = SideDiffusiveFluxIntegral
    variable = Tsolid
    boundary = core_outer
    diffusivity = thermal_conductivity
  []
  [flux_into_rpv] # converges to rpv_convective_out as the mesh is refined
    type = SideDiffusiveFluxIntegral
    variable = Tsolid
    boundary = rpv_inner
    diffusivity = thermal_conductivity
  []
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = 'rpv_inner core_outer'
    variable = Tsolid
  []
[]
[Executioner]
  type = Steady
  automatic_scaling = true
  compute_scaling_once = false
  petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
  petsc_options_value = 'hypre boomeramg 100'
  nl_rel_tol = 1e-10
  nl_abs_tol = 1e-10
  l_max_its = 100
  [Quadrature]
    # order = fifth
    side_order = seventh
  []
  line_search = none
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/second_order.i)
[Mesh]
  file = nonmatching.e
  second_order = true
[]
[Variables]
  [./temp]
    order = SECOND
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 1000
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    emissivity_primary = 0
    emissivity_secondary = 0
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    type = GapHeatTransfer
    order = SECOND
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Postprocessors]
  [./left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  [../]
  [./right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  [../]
[]
[Executioner]
  type = Steady
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/perfect.i)
[Mesh]
  file = perfect.e
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 300
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/heat_conduction/3d_quadrature_gap_heat_transfer/second.i)
[Mesh]
  file = nonmatching.e
  second_order = true
[]
[Variables]
  [./temp]
    order = SECOND
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 1000
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    emissivity_primary = 0
    emissivity_secondary = 0
    type = GapHeatTransfer
    order = SECOND
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
[]
[Postprocessors]
  [./left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  [../]
  [./right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  [../]
[]
[Executioner]
  type = Steady
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_mortar/gap_heat_transfer_3D.i)
outer_htc = 10 # W/m^2/K
outer_Tinf = 300 # K
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  [left_block]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 3
    ny = 6
    nz = 6
    xmin = -1
    xmax = -0.5
    ymin = -0.5
    ymax = 0.5
    zmin = -0.5
    zmax = 0.5
    elem_type = HEX27
  []
  [left_block_sidesets]
    type = RenameBoundaryGenerator
    input = left_block
    old_boundary = '0 1 2 3 4 5'
    new_boundary = 'left_bottom left_back left_right left_front left_left left_top'
  []
  [left_block_id]
    type = SubdomainIDGenerator
    input = left_block_sidesets
    subdomain_id = 1
  []
  [right_block]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 4
    ny = 8
    nz = 8
    xmin = 0.5
    xmax = 1
    ymin = -0.5
    ymax = 0.5
    zmin = -0.5
    zmax = 0.5
    elem_type = HEX27
  []
  [right_block_sidesets]
    type = RenameBoundaryGenerator
    input = right_block
    old_boundary = '0 1 2 3 4 5'
    # new_boundary = 'right_bottom right_back right_right right_front right_left right_top'
    new_boundary = '100 101 102 103 104 105'
  []
  [right_block_sidesets_rename]
    type = RenameBoundaryGenerator
    input = right_block_sidesets
    old_boundary = '100 101 102 103 104 105'
    new_boundary = 'right_bottom right_back right_right right_front right_left right_top'
  []
  [right_block_id]
    type = SubdomainIDGenerator
    input = right_block_sidesets_rename
    subdomain_id = 2
  []
  [combined_mesh]
    type = MeshCollectionGenerator
    inputs = 'left_block_id right_block_id'
  []
[]
[Functions]
  [temp]
    type = PiecewiseLinear
    x = '0   1'
    y = '100 200'
  []
[]
[Variables]
  [temp]
    initial_condition = 500
  []
[]
[AuxVariables]
  [gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  []
  [power_density]
    block = 1
    initial_condition = 50e3
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temp
  []
  [heat_source]
    type = CoupledForce
    variable = temp
    block = 1
    v = power_density
  []
[]
[AuxKernels]
  [gap_cond]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_conductance
    boundary = 'left_right'
  []
[]
[Materials]
  [heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 34.6
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 'right_left'
    secondary = 'left_right'
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductivity = 5
    gap_geometry_type = PLATE
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = temp
    boundary = 'right_right' # outer RPV
    coefficient = ${outer_htc}
    T_infinity = ${outer_Tinf}
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu       superlu_dist'
  dt = 1
  dtmin = 0.01
  end_time = 1
  nl_rel_tol = 1e-12
  nl_abs_tol = 1e-8
  [Quadrature]
    order = fifth
    side_order = seventh
  []
[]
[Outputs]
  exodus = true
  csv = true
  [Console]
    type = Console
  []
[]
[Postprocessors]
  [temp_left]
    type = SideAverageValue
    boundary = 'left_right'
    variable = temp
  []
  [temp_right]
    type = SideAverageValue
    boundary = 'right_left'
    variable = temp
  []
  [flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 'left_right'
    diffusivity = thermal_conductivity
  []
  [flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 'right_left'
    diffusivity = thermal_conductivity
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = 1
  []
  [convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = temp
    boundary = 'right_right' # outer RVP
    T_fluid = ${outer_Tinf}
    htc = ${outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(convective_out - ptot) / ptot'
    pp_names = 'convective_out ptot'
  []
[]
[VectorPostprocessors]
  [NodalTemperature]
    type = NodalValueSampler
    sort_by = id
    boundary = 'left_right right_left'
    variable = temp
  []
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/nonmatching.i)
[Mesh]
  file = nonmatching.e
[]
[Variables]
  [./temp]
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = temp
    boundary = leftleft
    value = 1000
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    emissivity_primary = 0
    emissivity_secondary = 0
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
  [../]
  [./gap_conductance]
    type = GenericConstantMaterial
    prop_names = 'gap_conductance gap_conductance_dT'
    boundary = 'leftright rightleft'
    prop_values = '1 0'
  [../]
[]
[Postprocessors]
  [./left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  [../]
  [./right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/heat_conduction/min_gap/min_gap.i)
[Mesh]
  type = MeshGeneratorMesh
  displacements = 'disp_x disp_y'
  [./left_gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    ny = 3
    xmin = -3
    xmax = 0
    ymin = -5
    ymax = 5
  [../]
  [./right_gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    ny = 3
    xmin = 3
    xmax = 6
    ymin = -5
    ymax = 5
  [../]
  [./left_and_right]
    type = MeshCollectionGenerator
    inputs = 'left_gen right_gen'
  [../]
  [./leftleft]
    type = SideSetsAroundSubdomainGenerator
    block = 0
    new_boundary = leftleft
    normal = '-1 0 0'
    input = left_and_right
  [../]
  [./leftright]
    type = SideSetsAroundSubdomainGenerator
    block = 0
    new_boundary = leftright
    normal = '1 0 0'
    input = leftleft
  [../]
  [./right]
    type = SubdomainBoundingBoxGenerator
    top_right = '6 5 0'
    bottom_left = '3 -5 0'
    block_id = 1
    input = leftright
  [../]
  [./rightleft]
    type = SideSetsAroundSubdomainGenerator
    block = 1
    new_boundary = rightleft
    normal = '-1 0 0'
    input = right
  [../]
  [./rightright]
    type = SideSetsAroundSubdomainGenerator
    block = 1
    new_boundary = rightright
    normal = '1 0 0'
    input = rightleft
  [../]
[]
[Variables]
  [./temp]
  [../]
[]
[AuxVariables]
  [./disp_x]
  [../]
  [./disp_y]
  [../]
  [./gap_conductance]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Functions]
  [./disp_x]
    type = ParsedFunction
    expression = -3+t
  [../]
  [./left_temp]
    type = ParsedFunction
    expression = 1000+t
  [../]
[]
[Kernels]
  [./hc]
    type = HeatConduction
    variable = temp
  [../]
[]
[AuxKernels]
  [./disp_x]
    type = FunctionAux
    block = 1
    variable = disp_x
    function = disp_x
    execute_on = 'INITIAL TIMESTEP_END'
  [../]
  [./gap_conductivity]
    type = MaterialRealAux
    boundary = leftright
    property = gap_conductance
    variable = gap_conductance
    execute_on = 'INITIAL TIMESTEP_END'
  [../]
[]
[BCs]
  [./left]
    type = FunctionDirichletBC
    variable = temp
    boundary = leftleft
    function = left_temp
  [../]
  [./right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  [../]
[]
[ThermalContact]
  [./left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    variable = temp
    min_gap = 1
    min_gap_order = 1
    emissivity_primary = 0
    emissivity_secondary = 0
    type = GapHeatTransfer
  [../]
[]
[Materials]
  [./hcm]
    type = HeatConductionMaterial
    block = '0 1'
    specific_heat = 1
    thermal_conductivity = 1
    use_displaced_mesh = true
  [../]
[]
[Postprocessors]
  [./gap_conductance]
    type = PointValue
    point = '0 0 0'
    variable = gap_conductance
  [../]
[]
[Executioner]
  type = Transient
  dt = 0.25
  end_time = 3.0
  solve_type = 'PJFNK'
[]
[Outputs]
  csv = true
  execute_on = 'TIMESTEP_END'
[]
(modules/heat_transfer/test/tests/multiple_contact_pairs/multiple_contact_pairs.i)
[Mesh]
  file = 3blk.e
[]
[Functions]
  [temperature]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 300 300'
  []
[]
[ThermalContact]
  [thermal_contact]
    type = GapHeatTransfer
    variable = temperature
    primary = '101 201'
    secondary = '100 200'
    emissivity_primary = 0
    emissivity_secondary = 0
    gap_conductance = 1.0e9
  []
[]
[Variables]
  [temperature]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  []
[]
[AuxVariables]
  [gap_cond]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[Kernels]
  [heat]
    type = HeatConduction
    variable = temperature
  []
[]
[BCs]
  [temp_far_left]
    type = FunctionDirichletBC
    boundary = '101 201'
    variable = temperature
    function = temperature
  []
  [temp_far_right]
    type = DirichletBC
    boundary = 'left right'
    variable = temperature
    value = 100
  []
[]
[AuxKernels]
  [conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 100
  []
[]
[Materials]
  [heat1]
    type = HeatConductionMaterial
    block = '1 2 3'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  []
  [density]
    type = GenericConstantMaterial
    block = '1 2 3'
    prop_names = 'density'
    prop_values = '1.0'
  []
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_rel_tol = 1e-8
  l_tol = 1e-3
  l_max_its = 100
  dt = 1e-1
  end_time = 1.0
[]
[Postprocessors]
  [temp_left]
    type = SideAverageValue
    boundary = 100
    variable = temperature
    execute_on = 'initial timestep_end'
  []
  [temp_right]
    type = SideAverageValue
    boundary = 200
    variable = temperature
    execute_on = 'initial timestep_end'
  []
  [flux_left]
    type = SideDiffusiveFluxIntegral
    variable = temperature
    boundary = 100
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  []
  [flux_right]
    type = SideDiffusiveFluxIntegral
    variable = temperature
    boundary = 200
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  []
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/recover/recover.i)
[GlobalParams]
  order = SECOND
  family = LAGRANGE
[]
[Mesh]
  file = recover_in.e
  coord_type = RZ
[]
[Variables]
  [./temp]
    initial_condition = 580.0
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
  [./heat_source]
    type = BodyForce
    variable = temp
    block = pellet_type_1
    value = 1e3
    function = 't'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 5
    secondary = 10
    emissivity_primary = 0
    emissivity_secondary = 0
    quadrature = true
  [../]
[]
[BCs]
  [./outside]
    type = DirichletBC
    value = 580
    boundary = '1 2 3'
    variable = temp
  [../]
  [./edge]
    type = DirichletBC
    value = 700
    boundary = 10
    variable = temp
  [../]
[]
[Materials]
  [./thermal_3]
    type = HeatConductionMaterial
    block = 3
    thermal_conductivity = 5
    specific_heat = 12
  [../]
  [./thermal_1]
    type = HeatConductionMaterial
    block = 1
    thermal_conductivity = 16.0
    specific_heat = 330.0
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = ' lu       superlu_dist'
  nl_rel_tol = 1e-9
  nl_abs_tol = 1e-11
  start_time = -200
  n_startup_steps = 1
  end_time = 1.02e5
  num_steps = 10
  dtmax = 2e6
  dtmin = 1
  [./TimeStepper]
    type = IterationAdaptiveDT
    dt = 2.0e2
    optimal_iterations = 15
    iteration_window = 2
  [../]
  [./Quadrature]
    order = FIFTH
    side_order = SEVENTH
  [../]
[]
[Postprocessors]
  [./ave_temp_interior]
     type = SideAverageValue
     boundary = 9
     variable = temp
     execute_on = 'initial linear'
  [../]
  [./avg_clad_temp]
    type = SideAverageValue
    boundary = 7
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_from_clad]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 5
    diffusivity = thermal_conductivity
  [../]
  [./_dt]
    type = TimestepSize
  [../]
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_balance/large_gap_heat_transfer_test_rz_cylinder.i)
rpv_core_gap_size = 0.2
core_outer_radius = 2
rpv_inner_radius = '${fparse 2 + rpv_core_gap_size}'
rpv_outer_radius = '${fparse 2.5 + rpv_core_gap_size}'
rpv_width = '${fparse rpv_outer_radius - rpv_inner_radius}'
rpv_outer_htc = 10 # W/m^2/K
rpv_outer_Tinf = 300 # K
core_blocks = '1'
rpv_blocks = '3'
[Mesh]
  [gmg]
    type = CartesianMeshGenerator
    dim = 2
    dx = '${core_outer_radius} ${rpv_core_gap_size} ${rpv_width}'
    ix = '400 1 100'
    dy = 1
    iy = '5'
  []
  [set_block_id1]
    type = SubdomainBoundingBoxGenerator
    input = gmg
    bottom_left = '0 0 0'
    top_right = '${core_outer_radius} 1 0'
    block_id = 1
    location = INSIDE
  []
  [rename_core_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = set_block_id1
    primary_block = 1
    paired_block = 0
    new_boundary = 'core_outer'
  []
  [set_block_id3]
    type = SubdomainBoundingBoxGenerator
    input = rename_core_bdy
    bottom_left = '${rpv_inner_radius} 0 0'
    top_right = '${rpv_outer_radius} 1 0'
    block_id = 3
    location = INSIDE
  []
  [rename_inner_rpv_bdy]
    type = SideSetsBetweenSubdomainsGenerator
    input = set_block_id3
    primary_block = 3
    paired_block = 0
    new_boundary = 'rpv_inner'
  []
  # comment out for test without gap
  [2d_mesh]
    type = BlockDeletionGenerator
    input = rename_inner_rpv_bdy
    block = 0
  []
  coord_type = RZ
[]
[Variables]
  [Tsolid]
    initial_condition = 500
  []
[]
[Kernels]
  [heat_source]
    type = CoupledForce
    variable = Tsolid
    block = '${core_blocks}'
    v = power_density
  []
  [heat_conduction]
    type = HeatConduction
    variable = Tsolid
  []
[]
[BCs]
  [RPV_out_BC] # k \nabla T = h (T- T_inf) at RPV outer boundary
    type = ConvectiveFluxFunction # (Robin BC)
    variable = Tsolid
    boundary = 'right' # outer RPV
    coefficient = ${rpv_outer_htc}
    T_infinity = ${rpv_outer_Tinf}
  []
[]
[ThermalContact]
  [RPV_gap]
    type = GapHeatTransfer
    gap_geometry_type = 'CYLINDER'
    emissivity_primary = 0.8
    emissivity_secondary = 0.8
    variable = Tsolid
    primary = 'core_outer'
    secondary = 'rpv_inner'
    gap_conductivity = 0.1
    quadrature = true
  []
[]
[AuxVariables]
  [power_density]
    block = '${core_blocks}'
    initial_condition = 50e3
  []
[]
[Materials]
  [simple_mat]
    type = HeatConductionMaterial
    thermal_conductivity = 34.6 # W/m/K
  []
[]
[Postprocessors]
  [Tcore_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Tcore_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${core_blocks}'
  []
  [Trpv_avg]
    type = ElementAverageValue
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_max]
    type = ElementExtremeValue
    value_type = max
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [Trpv_min]
    type = ElementExtremeValue
    value_type = min
    variable = Tsolid
    block = '${rpv_blocks}'
  []
  [ptot]
    type = ElementIntegralVariablePostprocessor
    variable = power_density
    block = '${core_blocks}'
  []
  [rpv_convective_out]
    type = ConvectiveHeatTransferSideIntegral
    T_solid = Tsolid
    boundary = 'right' # outer RVP
    T_fluid = ${rpv_outer_Tinf}
    htc = ${rpv_outer_htc}
  []
  [heat_balance] # should be equal to 0 upon convergence
    type = ParsedPostprocessor
    expression = '(rpv_convective_out - ptot) / ptot'
    pp_names = 'rpv_convective_out ptot'
  []
  [flux_from_core] # converges to ptot as the mesh is refined
    type = SideDiffusiveFluxIntegral
    variable = Tsolid
    boundary = core_outer
    diffusivity = thermal_conductivity
  []
  [flux_into_rpv] # converges to rpv_convective_out as the mesh is refined
    type = SideDiffusiveFluxIntegral
    variable = Tsolid
    boundary = rpv_inner
    diffusivity = thermal_conductivity
  []
[]
[Executioner]
  type = Steady
  automatic_scaling = true
  compute_scaling_once = false
  petsc_options_iname = '-pc_type -pc_hypre_type -ksp_gmres_restart '
  petsc_options_value = 'hypre boomeramg 100'
  nl_rel_tol = 1e-10
  nl_abs_tol = 1e-10
  l_max_its = 100
  [Quadrature]
    # order = fifth
    side_order = seventh
  []
  line_search = none
[]
[Outputs]
  exodus = false
  csv = true
[]
(modules/heat_transfer/test/tests/heat_conduction/2d_quadrature_gap_heat_transfer/moving.i)
[Mesh]
  file = nonmatching.e
  displacements = 'disp_x disp_y'
[]
[Variables]
  [temp]
  []
[]
[AuxVariables]
  [disp_x]
  []
  [disp_y]
  []
[]
[Functions]
  [disp_y]
    type = ParsedFunction
    expression = 0.1*t
  []
  [left_temp]
    type = ParsedFunction
    expression = 1000+t
  []
[]
[Kernels]
  [hc]
    type = HeatConduction
    variable = temp
  []
[]
[AuxKernels]
  [disp_y]
    type = FunctionAux
    variable = disp_y
    function = disp_y
    block = left
    execute_on = 'INITIAL TIMESTEP_BEGIN'
  []
[]
[BCs]
  [left]
    type = FunctionDirichletBC
    variable = temp
    boundary = leftleft
    function = left_temp
  []
  [right]
    type = DirichletBC
    variable = temp
    boundary = rightright
    value = 400
  []
[]
[ThermalContact]
  [left_to_right]
    secondary = leftright
    quadrature = true
    primary = rightleft
    emissivity_primary = 0
    emissivity_secondary = 0
    variable = temp
    type = GapHeatTransfer
  []
[]
[Materials]
  [hcm]
    type = HeatConductionMaterial
    block = 'left right'
    specific_heat = 1
    thermal_conductivity = 1
    use_displaced_mesh = true
  []
[]
[Postprocessors]
  [left]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = leftright
    diffusivity = thermal_conductivity
  []
  [right]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = rightleft
    diffusivity = thermal_conductivity
  []
[]
[Executioner]
  type = Transient
  num_steps = 9
  dt = 1
  #Preconditioned JFNK (default)
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/heat_transfer/test/tests/gap_heat_transfer_htonly/planar_xz.i)
# 1-D Gap Heat Transfer Test without mechanics
#
# This test exercises 1-D gap heat transfer for a constant conductivity gap.
#
# The mesh consists of two element blocks in the x-z plane.  Each element block
# is a square. They sit next to one another with a unit between them.
#
# The conductivity of both blocks is set very large to achieve a uniform temperature
# across each block. The temperature of the far bottom boundary
# is ramped from 100 to 200 over one time unit.  The temperature of the far top
# boundary is held fixed at 100.
#
# A simple analytical solution is possible for the heat flux between the blocks:
#
# Flux = (T_left - T_right) * (gapK/gap_width)
#
# The gap conductivity is specified as 1, thus
#
# gapK(Tavg) = 1.0*Tavg
#
# The heat flux across the gap at time = 1 is then:
#
# Flux = 100 * (1.0/1.0) = 100
#
# For comparison, see results from the flux post processors.  These results
# are the same as for the unit 1-D gap heat transfer between two unit cubes.
[Mesh]
  [file]
    type = FileMeshGenerator
    file = simple_2D.e
  []
  [./rotate]
    type = TransformGenerator
    transform = ROTATE
    vector_value = '0 90 0'
    input = file
  [../]
[]
[Functions]
  [./temp]
    type = PiecewiseLinear
    x = '0   1   2'
    y = '100 200 200'
  [../]
[]
[ThermalContact]
  [./thermal_contact]
    type = GapHeatTransfer
    variable = temp
    primary = 3
    secondary = 2
    emissivity_primary = 0
    emissivity_secondary = 0
  [../]
[]
[Variables]
  [./temp]
    order = FIRST
    family = LAGRANGE
    initial_condition = 100
  [../]
[]
[AuxVariables]
  [./gap_cond]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[Kernels]
  [./heat]
    type = HeatConduction
    variable = temp
  [../]
[]
[BCs]
  [./temp_far_bottom]
    type = FunctionDirichletBC
    boundary = 1
    variable = temp
    function = temp
  [../]
  [./temp_far_top]
    type = DirichletBC
    boundary = 4
    variable = temp
    value = 100
  [../]
[]
[AuxKernels]
  [./conductance]
    type = MaterialRealAux
    property = gap_conductance
    variable = gap_cond
    boundary = 2
  [../]
[]
[Materials]
  [./heat1]
    type = HeatConductionMaterial
    block = '1 2'
    specific_heat = 1.0
    thermal_conductivity = 100000000.0
  [../]
  [./density]
    type = GenericConstantMaterial
    block = '1 2'
    prop_names = 'density'
    prop_values = '1.0'
  [../]
[]
[Executioner]
  type = Transient
  solve_type = 'PJFNK'
  petsc_options_iname = '-ksp_gmres_restart -pc_type -pc_hypre_type -pc_hypre_boomeramg_max_iter'
  petsc_options_value = '201                hypre    boomeramg      4'
  line_search = 'none'
  nl_rel_tol = 1e-12
  l_tol = 1e-3
  l_max_its = 100
  dt = 1e-1
  end_time = 1.0
[]
[Postprocessors]
  [./temp_bottom]
    type = SideAverageValue
    boundary = 2
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./temp_top]
    type = SideAverageValue
    boundary = 3
    variable = temp
    execute_on = 'initial timestep_end'
  [../]
  [./flux_bottom]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 2
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
  [./flux_top]
    type = SideDiffusiveFluxIntegral
    variable = temp
    boundary = 3
    diffusivity = thermal_conductivity
    execute_on = 'initial timestep_end'
  [../]
[]
[Outputs]
  exodus = true
[]