- neighbor_varThe variable on the other side of the interface.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The variable on the other side of the interface.
 - penaltyThe penalty that penalizes jump between primary and neighbor variables.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The penalty that penalizes jump between primary and neighbor variables.
 - 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
 
PenaltyInterfaceDiffusion
Overview
PenaltyInterfaceDiffusion is an interface condition that forces the variable equivalence using a penalty. At the same time, the flux equivalence is implicitly satisfied as long as no other side (interface) residual objects are present. Mathematically, it is written as follows:  where  and  are material properties for the current element and its neighbor, respectively,  and  are the outward normal vectors from the element and its neighbor (typically .  is the penalty supplied in the parameter "penalty".
Example Input File Syntax
  [./penalty]
    type = PenaltyInterfaceDiffusion
    variable = v
    neighbor_var = u
    boundary = primary1_interface
    penalty = 1e3
  [../](test/tests/interfacekernels/hybrid/interface.i)Input Parameters
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
 - jump_prop_namethe name of the material property that calculates the jump.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:the name of the material property that calculates the jump.
 - 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)
 
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.
 - 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
 - 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
 - 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
- diag_save_inThe name of auxiliary variables to save this Kernel'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 Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
 - diag_save_in_var_sideThis parameter must exist if diag_save_in variables are specified and must have the same length as diag_save_in. This vector specifies whether the corresponding aux_var should save-in jacobian contributions from the primary ('p') or secondary side ('s').
C++ Type:MultiMooseEnum
Options:m, s
Controllable:No
Description:This parameter must exist if diag_save_in variables are specified and must have the same length as diag_save_in. This vector specifies whether the corresponding aux_var should save-in jacobian contributions from the primary ('p') or secondary side ('s').
 - save_inThe name of auxiliary variables to save this Kernel'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 Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
 - save_in_var_sideThis parameter must exist if save_in variables are specified and must have the same length as save_in. This vector specifies whether the corresponding aux_var should save-in residual contributions from the primary ('p') or secondary side ('s').
C++ Type:MultiMooseEnum
Options:m, s
Controllable:No
Description:This parameter must exist if save_in variables are specified and must have the same length as save_in. This vector specifies whether the corresponding aux_var should save-in residual contributions from the primary ('p') or secondary side ('s').
 
Residual And Jacobian Debug Output 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
- (test/tests/interfacekernels/resid_jac_together/jump.i)
 - (test/tests/interfacekernels/1d_interface/coupled_value_coupled_flux_with_jump_material.i)
 - (test/tests/interfacekernels/hybrid/interface.i)
 - (test/tests/interfacekernels/3d_interface/coupled_value_coupled_flux_with_jump_material.i)
 - (test/tests/materials/interface_material/interface_value_material_split_mesh_stateful.i)
 - (test/tests/userobjects/domain-user-object/measure-conservation-interface.i)
 - (test/tests/misc/boundary_variable_check/test.i)
 - (test/tests/interfacekernels/1d_interface/coupled_value_coupled_flux.i)
 - (test/tests/misc/save_in/block-restricted-save-in.i)
 - (test/tests/interfacekernels/2d_interface/coupled_value_coupled_flux.i)
 - (test/tests/interfacekernels/gmsh_sidesets/coupled_value_coupled_flux.i)
 - (test/tests/tag/tag_interface_kernels.i)
 - (test/tests/materials/interface_material/interface_value_material.i)
 - (test/tests/interfacekernels/3d_interface/coupled_value_coupled_flux.i)
 - (test/tests/interfacekernels/auxiliary_variables/reaction_1D_steady.i)
 - (test/tests/interfacekernels/1d_interface/no-failed-point-inversions.i)
 - (test/tests/interfacekernels/2d_interface/coupled_value_coupled_flux_with_jump_material.i)
 - (test/tests/interfacekernels/1d_interface/ad-coupled-value-coupled-flux.i)
 - (test/tests/interfacekernels/adaptivity/adaptivity.i)
 - (test/tests/materials/interface_material/interface_value_material_split_mesh.i)
 
penalty
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The penalty that penalizes jump between primary and neighbor variables.
(test/tests/interfacekernels/hybrid/interface.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 40
    xmax = 2
    ny = 40
    ymax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0.5 0.5 0'
    top_right = '1.5 1.5 0'
    block_id = 1
  []
  [interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '1'
    paired_block = '0'
    new_boundary = 'primary1_interface'
  []
[]
[Variables]
  [u]
    block = 0
  []
  [v]
    block = 1
  []
[]
[Kernels]
  [diff_u]
    type = MatDiffusion
    variable = u
    diffusivity = D
    block = 0
  []
  [diff_v]
    type = MatDiffusion
    variable = v
    diffusivity = D
    block = 1
  []
  [source_u]
    type = BodyForce
    variable = u
    value = 1
    block = 0
  []
  [source_v]
    type = BodyForce
    variable = v
    value = 1
    block = 1
  []
[]
[BCs]
  [u]
    type = VacuumBC
    variable = u
    boundary = 'left bottom right top'
  []
  [interface_bc]
    type = ADMatchedValueBC
    variable = v
    v = u
    boundary = primary1_interface
  []
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
[InterfaceKernels]
  active = 'diffusion'
  [./diffusion]
    type = InterfaceDiffusion
    variable = v
    neighbor_var = u
    boundary = primary1_interface
    D = 'D'
    D_neighbor = 'D'
  [../]
  [./penalty]
    type = PenaltyInterfaceDiffusion
    variable = v
    neighbor_var = u
    boundary = primary1_interface
    penalty = 1e3
  [../]
[]
[Materials]
  [mat0]
    type = GenericConstantMaterial
    prop_names = 'D'
    prop_values = '1'
    block = 0
  []
  [mat1]
    type = GenericConstantMaterial
    prop_names = 'D'
    prop_values = '1'
    block = 1
  []
[]
[AuxVariables]
  [c][]
[]
[AuxKernels]
  [u]
    type = ParsedAux
    variable = c
    coupled_variables = 'u'
    expression = 'u'
    block = 0
  []
  [v]
    type = ParsedAux
    variable = c
    coupled_variables = 'v'
    expression = 'v'
    block = 1
  []
[]
(test/tests/interfacekernels/resid_jac_together/jump.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 0'
    block_id = 1
  []
  [interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  []
  [break_boundary]
    input = interface
    type = BreakBoundaryOnSubdomainGenerator
  []
[]
[Variables]
  [u]
    block = 0
  []
  [v]
    block = 1
  []
[]
[Kernels]
  [diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  []
  [diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  []
  [source_u]
    type = BodyForce
    variable = u
    value = 1
  []
[]
[InterfaceKernels]
  [interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  []
[]
[BCs]
  [u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 right top'
  []
  [v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1'
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
  residual_and_jacobian_together = true
[]
[Outputs]
  exodus = true
[]
(test/tests/interfacekernels/1d_interface/coupled_value_coupled_flux_with_jump_material.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [./subdomain1]
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
    input = gen
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = '0'
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = '1'
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
[]
[InterfaceKernels]
  [./penalty_interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
    jump_prop_name = jump
  [../]
[]
[BCs]
  [./left]
    type = DirichletBC
    variable = u
    boundary = 'left'
    value = 1
  [../]
  [./right]
    type = DirichletBC
    variable = v
    boundary = 'right'
    value = 0
  [../]
[]
[Materials]
    [./jump]
      type = JumpInterfaceMaterial
      var = u
      neighbor_var = v
      boundary = primary0_interface
    [../]
  [./stateful]
    type = StatefulMaterial
    initial_diffusivity = 1
    boundary = primary0_interface
  [../]
  [./block0]
    type = GenericConstantMaterial
    block = '0'
    prop_names = 'D'
    prop_values = '4'
  [../]
  [./block1]
    type = GenericConstantMaterial
    block = '1'
    prop_names = 'D'
    prop_values = '2'
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
[Debug]
  show_var_residual_norms = true
[]
(test/tests/interfacekernels/hybrid/interface.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 40
    xmax = 2
    ny = 40
    ymax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0.5 0.5 0'
    top_right = '1.5 1.5 0'
    block_id = 1
  []
  [interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '1'
    paired_block = '0'
    new_boundary = 'primary1_interface'
  []
[]
[Variables]
  [u]
    block = 0
  []
  [v]
    block = 1
  []
[]
[Kernels]
  [diff_u]
    type = MatDiffusion
    variable = u
    diffusivity = D
    block = 0
  []
  [diff_v]
    type = MatDiffusion
    variable = v
    diffusivity = D
    block = 1
  []
  [source_u]
    type = BodyForce
    variable = u
    value = 1
    block = 0
  []
  [source_v]
    type = BodyForce
    variable = v
    value = 1
    block = 1
  []
[]
[BCs]
  [u]
    type = VacuumBC
    variable = u
    boundary = 'left bottom right top'
  []
  [interface_bc]
    type = ADMatchedValueBC
    variable = v
    v = u
    boundary = primary1_interface
  []
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
[InterfaceKernels]
  active = 'diffusion'
  [./diffusion]
    type = InterfaceDiffusion
    variable = v
    neighbor_var = u
    boundary = primary1_interface
    D = 'D'
    D_neighbor = 'D'
  [../]
  [./penalty]
    type = PenaltyInterfaceDiffusion
    variable = v
    neighbor_var = u
    boundary = primary1_interface
    penalty = 1e3
  [../]
[]
[Materials]
  [mat0]
    type = GenericConstantMaterial
    prop_names = 'D'
    prop_values = '1'
    block = 0
  []
  [mat1]
    type = GenericConstantMaterial
    prop_names = 'D'
    prop_values = '1'
    block = 1
  []
[]
[AuxVariables]
  [c][]
[]
[AuxKernels]
  [u]
    type = ParsedAux
    variable = c
    coupled_variables = 'u'
    expression = 'u'
    block = 0
  []
  [v]
    type = ParsedAux
    variable = c
    coupled_variables = 'v'
    expression = 'v'
    block = 1
  []
[]
(test/tests/interfacekernels/3d_interface/coupled_value_coupled_flux_with_jump_material.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
    nz = 2
    zmax = 2
  []
  [./subdomain1]
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 1'
    block_id = 1
    input = gen
  [../]
  [./break_boundary]
    input = subdomain1
    type = BreakBoundaryOnSubdomainGenerator
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = break_boundary
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
  [../]
[]
[AuxVariables]
  [./jump_var]
    order = CONSTANT
    family = MONOMIAL
  [../]
[]
[AuxKernels]
  [jump_aux]
    type = MaterialRealAux
    boundary = primary0_interface
    property = jump
    variable = jump_var
  []
[]
[InterfaceKernels]
  [./interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
    jump_prop_name = jump
  [../]
[]
[Materials]
  [./jump]
    type = JumpInterfaceMaterial
    var = u
    neighbor_var = v
    boundary = primary0_interface
  [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 back_to_0 right top front'
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1 back_to_1'
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 0
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 1
  [../]
  [interface_var_jump]
    type = InterfaceAverageVariableValuePostprocessor
    interface_value_type = jump_abs
    variable = u
    neighbor_variable = v
    execute_on = TIMESTEP_END
    boundary = primary0_interface
  []
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
(test/tests/materials/interface_material/interface_value_material_split_mesh_stateful.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
    elem_type = QUAD4
  []
  [./subdomain_id]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1 0 0'
    top_right = '2 2 0'
    block_id = 1
  [../]
  [./split]
    type = BreakMeshByBlockGenerator
    input = subdomain_id
  [../]
[]
[Variables]
  [./u]
    block = 0
  [../]
  [./v]
    block = 1
  [../]
[]
[Kernels]
  [./diff]
    type = MatDiffusion
    variable = u
    diffusivity = 'diffusivity'
    block = 0
  [../]
  [./diff_v]
    type = MatDiffusion
    variable = v
    diffusivity = 'diffusivity'
    block = 1
  [../]
[]
[InterfaceKernels]
  [tied]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    penalty = 1e6
    jump_prop_name = "average_jump"
    boundary = 'interface'
  []
[]
[BCs]
  [u_left]
    type = DirichletBC
    boundary = 'left'
    variable = u
    value = 1
  []
  [v_right]
    type = DirichletBC
    boundary = 'right'
    variable = v
    value = 0
  []
[]
[Materials]
  [./stateful1]
    type = StatefulMaterial
    block = 0
    initial_diffusivity = 1
    # outputs = all
  [../]
  [./stateful2]
    type = StatefulMaterial
    block = 1
    initial_diffusivity = 2
    # outputs = all
  [../]
  [./interface_material_avg]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = average
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
      couple_old_values_and_properties = true
  [../]
  [./interface_material_jump_primary_minus_secondary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_primary_minus_secondary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
      couple_old_values_and_properties = true
  [../]
  [./interface_material_jump_secondary_minus_primary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_secondary_minus_primary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
      couple_old_values_and_properties = true
  [../]
  [./interface_material_jump_abs]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_abs
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
      couple_old_values_and_properties = true
  [../]
  [./interface_material_primary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = primary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
      couple_old_values_and_properties = true
  [../]
  [./interface_material_secondary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      mat_prop_var_out_basename = diff_var
      boundary = interface
      interface_value_type = secondary
      nl_var_primary = u
      nl_var_secondary = v
      couple_old_values_and_properties = true
  [../]
[]
[AuxKernels]
  [./interface_material_avg]
    type = MaterialRealAux
    property = diff_average
    variable = diffusivity_average
    boundary = interface
  []
  [./interface_material_jump_primary_minus_secondary]
    type = MaterialRealAux
    property = diff_jump_primary_minus_secondary
    variable = diffusivity_jump_primary_minus_secondary
    boundary = interface
  []
  [./interface_material_jump_secondary_minus_primary]
    type = MaterialRealAux
    property = diff_jump_secondary_minus_primary
    variable = diffusivity_jump_secondary_minus_primary
    boundary = interface
  []
  [./interface_material_jump_abs]
    type = MaterialRealAux
    property = diff_jump_abs
    variable = diffusivity_jump_abs
    boundary = interface
  []
  [./interface_material_primary]
    type = MaterialRealAux
    property = diff_primary
    variable = diffusivity_primary
    boundary = interface
  []
  [./interface_material_secondary]
    type = MaterialRealAux
    property = diff_secondary
    variable = diffusivity_secondary
    boundary = interface
  []
  [./interface_material_avg_prev]
    type = MaterialRealAux
    property = diff_average_prev
    variable = diffusivity_average_prev
    boundary = interface
  []
  [./interface_material_jump_primary_minus_secondary_prev]
    type = MaterialRealAux
    property = diff_jump_primary_minus_secondary_prev
    variable = diffusivity_jump_primary_minus_secondary_prev
    boundary = interface
  []
  [./interface_material_jump_secondary_minus_primary_prev]
    type = MaterialRealAux
    property = diff_jump_secondary_minus_primary_prev
    variable = diffusivity_jump_secondary_minus_primary_prev
    boundary = interface
  []
  [./interface_material_jump_abs_prev]
    type = MaterialRealAux
    property = diff_jump_abs_prev
    variable = diffusivity_jump_abs_prev
    boundary = interface
  []
  [./interface_material_primary_prev]
    type = MaterialRealAux
    property = diff_primary_prev
    variable = diffusivity_primary_prev
    boundary = interface
  []
  [./interface_material_secondary_prev]
    type = MaterialRealAux
    property = diff_secondary_prev
    variable = diffusivity_secondary_prev
    boundary = interface
  []
  [diffusivity_var]
    type = MaterialRealAux
    property = diffusivity
    variable = diffusivity_var
  []
[]
[AuxVariables]
  [diffusivity_var]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_average]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_primary_minus_secondary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_secondary_minus_primary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_abs]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_primary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_secondary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_average_prev]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_primary_minus_secondary_prev]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_secondary_minus_primary_prev]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_abs_prev]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_primary_prev]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_secondary_prev]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[Executioner]
  type = Transient
  solve_type = NEWTON
  num_steps = 3
  dt = 0.5
[]
[Outputs]
  exodus = true
[]
(test/tests/userobjects/domain-user-object/measure-conservation-interface.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  []
  [interface]
    input = subdomain1
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  []
[]
[Variables]
  [u]
    block = '0'
  []
  [v]
    block = '1'
  []
[]
[UserObjects]
  [test]
    type = InterfaceDomainUserObject
    u = u
    v = v
    block = '0'
    robin_boundaries = 'left'
    interface_boundaries = 'primary0_interface'
    interface_penalty = 1e6
    nl_abs_tol = 1e-10
  []
[]
[Kernels]
  [diff_u]
    type = Diffusion
    variable = u
    block = 0
  []
  [force_u]
    type = BodyForce
    variable = u
    block = 0
  []
  [diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  []
[]
[InterfaceKernels]
  [penalty_interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  []
[]
[BCs]
  [left]
    type = RobinBC
    variable = u
    boundary = 'left'
  []
  [right]
    type = RobinBC
    variable = v
    boundary = 'right'
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
  nl_rel_tol = 0
  nl_abs_tol = 1e-10
[]
[Outputs]
  exodus = true
[]
(test/tests/misc/boundary_variable_check/test.i)
[Problem]
  boundary_restricted_elem_integrity_check = true
[]
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  []
  [interface]
    input = subdomain1
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  []
[]
[AuxVariables]
  [dummy][]
  [dummy2]
    family = MONOMIAL
    order = CONSTANT
    block = 1
  []
  [dummy3]
    family = MONOMIAL
    order = CONSTANT
    block = 0
  []
[]
[AuxKernels]
  active = 'bad'
  [bad]
    type = ProjectionAux
    variable = dummy
    v = v
    boundary = 'left'
  []
  [bad_elemental]
    type = ProjectionAux
    variable = dummy3
    v = dummy2
    boundary = 'left'
  []
[]
[Variables]
  [u]
    block = '0'
  []
  [v]
    block = '1'
  []
[]
[Kernels]
  [diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  []
  [diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  []
[]
[InterfaceKernels]
  active = 'interface'
  [interface]
    type = InterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    D = 'D'
    D_neighbor = 'D'
  []
  [penalty_interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  []
[]
[BCs]
  active = 'left right middle'
  [left]
    type = DirichletBC
    variable = u
    boundary = 'left'
    value = 1
  []
  [bad]
    type = MatchedValueBC
    variable = u
    boundary = 'left'
    v = v
  []
  [bad_integrated]
    type = CoupledVarNeumannBC
    variable = u
    boundary = 'left'
    v = v
  []
  [right]
    type = DirichletBC
    variable = v
    boundary = 'right'
    value = 0
  []
  [middle]
    type = MatchedValueBC
    variable = v
    boundary = 'primary0_interface'
    v = u
  []
[]
[Materials]
  [stateful]
    type = StatefulMaterial
    initial_diffusivity = 1
    boundary = primary0_interface
  []
  [block0]
    type = GenericConstantMaterial
    block = '0'
    prop_names = 'D'
    prop_values = '4'
  []
  [block1]
    type = GenericConstantMaterial
    block = '1'
    prop_names = 'D'
    prop_values = '2'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
[]
[Postprocessors]
  active = ''
  [bad]
    type = NodalExtremeValue
    boundary = 'left'
    variable = v
  []
  [bad_side]
    type = SideDiffusiveFluxIntegral
    variable = v
    diffusivity = 1
    boundary = 'left'
  []
[]
(test/tests/interfacekernels/1d_interface/coupled_value_coupled_flux.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [./subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  [../]
  [./interface]
    input = subdomain1
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = '0'
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = '1'
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
[]
[InterfaceKernels]
  active = 'interface'
  [./interface]
    type = InterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    D = 'D'
    D_neighbor = 'D'
  [../]
  [./penalty_interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  [../]
[]
[BCs]
  active = 'left right middle'
  [./left]
    type = DirichletBC
    variable = u
    boundary = 'left'
    value = 1
  [../]
  [./right]
    type = DirichletBC
    variable = v
    boundary = 'right'
    value = 0
  [../]
  [./middle]
    type = MatchedValueBC
    variable = v
    boundary = 'primary0_interface'
    v = u
  [../]
[]
[Materials]
  [./stateful]
    type = StatefulMaterial
    initial_diffusivity = 1
    boundary = primary0_interface
  [../]
  [./block0]
    type = GenericConstantMaterial
    block = '0'
    prop_names = 'D'
    prop_values = '4'
  [../]
  [./block1]
    type = GenericConstantMaterial
    block = '1'
    prop_names = 'D'
    prop_values = '2'
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
[Debug]
  show_var_residual_norms = true
[]
(test/tests/misc/save_in/block-restricted-save-in.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
  []
  [./subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 0'
    block_id = 1
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
  [./break_boundary]
    input = interface
    type = BreakBoundaryOnSubdomainGenerator
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[AuxVariables]
  [./vres]
    block = 1
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
  [../]
[]
[InterfaceKernels]
  [./interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 right top'
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1'
    save_in = 'vres'
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 0
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 1
  [../]
  [./vres_int]
    type = ElementIntegralVariablePostprocessor
    variable = vres
    block = 1
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
(test/tests/interfacekernels/2d_interface/coupled_value_coupled_flux.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
  []
  [./subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 0'
    block_id = 1
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
  [./break_boundary]
    input = interface
    type = BreakBoundaryOnSubdomainGenerator
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
  [../]
[]
[InterfaceKernels]
  [./interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 right top'
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1'
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 0
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 1
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
(test/tests/interfacekernels/gmsh_sidesets/coupled_value_coupled_flux.i)
[Mesh]
  file = gmsh_mesh.msh
[]
[Variables]
  [./u]
    block = 6
  [../]
  [./v]
    block = 5
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 6
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 5
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
  [../]
[]
[InterfaceKernels]
 [./interface]
   type = PenaltyInterfaceDiffusion
   variable = u
   neighbor_var = v
   boundary = '1 2'
   penalty = 1e6
 [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 4
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 3
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 6
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 5
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
(test/tests/tag/tag_interface_kernels.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
    nz = 2
    zmax = 2
  []
  [./subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 1'
    block_id = 1
  [../]
  [./break_boundary]
    input = subdomain1
    type = BreakBoundaryOnSubdomainGenerator
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = break_boundary
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
    extra_matrix_tags = 'mat_tag1 mat_tag2'
    extra_vector_tags = 'vec_tag1'
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
    extra_matrix_tags = 'mat_tag1 mat_tag2'
    extra_vector_tags = 'vec_tag1'
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
    extra_matrix_tags = 'mat_tag1 mat_tag2'
    extra_vector_tags = 'vec_tag1 vec_tag2'
  [../]
[]
[InterfaceKernels]
  [./interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
    extra_matrix_tags = 'mat_tag1 mat_tag2'
    extra_vector_tags = 'vec_tag1 vec_tag2'
  [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 back_to_0 right top front'
    extra_matrix_tags = 'mat_tag1 mat_tag2'
    extra_vector_tags = 'vec_tag1'
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1 back_to_1'
    extra_matrix_tags = 'mat_tag1 mat_tag2'
    extra_vector_tags = 'vec_tag1'
  [../]
[]
[AuxVariables]
  [./tag_variable1]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./tag_variable2]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[AuxKernels]
  [./TagVectorAux1]
    type = TagVectorAux
    variable = tag_variable1
    v = u
    block = 0
    vector_tag = vec_tag2
  [../]
  [./TagVectorAux2]
    type = TagMatrixAux
    variable = tag_variable2
    v = v
    block = 1
    matrix_tag = mat_tag2
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 0
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 1
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Problem]
  type = TagTestProblem
  test_tag_vectors =  'nontime residual vec_tag1 vec_tag2'
  test_tag_matrices = 'mat_tag1 mat_tag2'
  extra_tag_matrices = 'mat_tag1 mat_tag2'
  extra_tag_vectors  = 'vec_tag1 vec_tag2'
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
[]
(test/tests/materials/interface_material/interface_value_material.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
    elem_type = QUAD4
  []
  [./subdomain_id]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1 0 0'
    top_right = '2 2 0'
    block_id = 1
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain_id
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'interface'
  [../]
[]
[Variables]
  [./u]
    block = 0
  [../]
  [./v]
    block = 1
  [../]
[]
[Kernels]
  [./diff]
    type = MatDiffusion
    variable = u
    diffusivity = 'diffusivity'
    block = 0
  [../]
  [./diff_v]
    type = MatDiffusion
    variable = v
    diffusivity = 'diffusivity'
    block = 1
  [../]
[]
[InterfaceKernels]
  [tied]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    jump_prop_name = "average_jump"
    penalty = 1e6
    boundary = 'interface'
  []
[]
[BCs]
  [u_left]
    type = DirichletBC
    boundary = 'left'
    variable = u
    value = 1
  []
  [v_right]
    type = DirichletBC
    boundary = 'right'
    variable = v
    value = 0
  []
[]
[Materials]
  [./stateful1]
    type = StatefulMaterial
    block = 0
    initial_diffusivity = 1
    # outputs = all
  [../]
  [./stateful2]
    type = StatefulMaterial
    block = 1
    initial_diffusivity = 2
    # outputs = all
  [../]
  [./interface_material_avg]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = average
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_jump_primary_minus_secondary]
      type = ADInterfaceValueMaterial # To test generic routines
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_primary_minus_secondary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_jump_secondary_minus_primary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_secondary_minus_primary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_jump_abs]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_abs
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_primary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = primary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_secondary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      mat_prop_var_out_basename = diff_var
      boundary = interface
      interface_value_type = secondary
      nl_var_primary = u
      nl_var_secondary = v
  [../]
[]
[AuxKernels]
  [./interface_material_avg]
    type = MaterialRealAux
    property = diff_average
    variable = diffusivity_average
    boundary = interface
  []
  [./interface_material_jump_primary_minus_secondary]
    type = MaterialRealAux
    property = diff_jump_primary_minus_secondary
    variable = diffusivity_jump_primary_minus_secondary
    boundary = interface
  []
  [./interface_material_jump_secondary_minus_primary]
    type = MaterialRealAux
    property = diff_jump_secondary_minus_primary
    variable = diffusivity_jump_secondary_minus_primary
    boundary = interface
  []
  [./interface_material_jump_abs]
    type = MaterialRealAux
    property = diff_jump_abs
    variable = diffusivity_jump_abs
    boundary = interface
  []
  [./interface_material_primary]
    type = MaterialRealAux
    property = diff_primary
    variable = diffusivity_primary
    boundary = interface
  []
  [./interface_material_secondary]
    type = MaterialRealAux
    property = diff_secondary
    variable = diffusivity_secondary
    boundary = interface
  []
  [diffusivity_var]
    type = MaterialRealAux
    property = diffusivity
    variable = diffusivity_var
  []
[]
[AuxVariables]
  [diffusivity_var]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_average]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_primary_minus_secondary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_secondary_minus_primary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_abs]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_primary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_secondary]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
[]
(test/tests/interfacekernels/3d_interface/coupled_value_coupled_flux.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
    nz = 2
    zmax = 2
  []
  [./subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 1'
    block_id = 1
  [../]
  [./break_boundary]
    input = subdomain1
    type = BreakBoundaryOnSubdomainGenerator
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = break_boundary
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
  [../]
[]
[InterfaceKernels]
  [./interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 back_to_0 right top front'
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1 back_to_1'
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 0
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 1
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
(test/tests/interfacekernels/auxiliary_variables/reaction_1D_steady.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  []
  [interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = 'subdomain1'
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  []
[]
[Variables]
  [u]
    order = FIRST
    family = LAGRANGE
    block = '0'
  []
[]
[AuxVariables]
  [v]
    order = FIRST
    family = LAGRANGE
    block = '1'
    initial_condition = 4
  []
[]
[Kernels]
  [diff_u]
    type = MatDiffusion
    variable = u
    block = '0'
    diffusivity = D
  []
[]
[InterfaceKernels]
  [interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = 'v'
    boundary = 'primary0_interface'
    # D = D
    # D_neighbor = D
    penalty = 1e3
  []
[]
[Materials]
  [block0]
    type = GenericConstantMaterial
    block = '0'
    prop_names = 'D'
    prop_values = '4'
  []
  [block1]
    type = GenericConstantMaterial
    block = '1'
    prop_names = 'D'
    prop_values = '2'
  []
[]
[Executioner]
  type = Steady
  solve_type = PJFNK
  nl_rel_tol = 1e-10
  nl_forced_its = 2
[]
[Problem]
  kernel_coverage_check = false
[]
[Outputs]
  csv = true
[]
[Postprocessors]
  [min]
    type = ElementExtremeValue
    variable = 'u'
    value_type = 'min'
    block = '0'
  []
  [max]
    type = ElementExtremeValue
    variable = 'u'
    block = '0'
  []
[]
(test/tests/interfacekernels/1d_interface/no-failed-point-inversions.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  []
  [interface]
    input = subdomain1
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  []
  [break]
    type = BreakMeshByBlockGenerator
    input = interface
  []
  displacements = 'disp_x'
[]
[AuxVariables]
  [disp_x][]
[]
[ICs]
  [right]
    type = ConstantIC
    variable = disp_x
    block = 1
    value = 1
  []
[]
[Variables]
  [u]
    order = FIRST
    family = LAGRANGE
    block = '0'
  []
  [v]
    order = FIRST
    family = LAGRANGE
    block = '1'
  []
[]
[Kernels]
  [diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  []
  [diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  []
[]
[InterfaceKernels]
  [penalty_interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
  []
[]
[BCs]
  [left]
    type = DirichletBC
    variable = u
    boundary = 'left'
    value = 1
  []
  [right]
    type = DirichletBC
    variable = v
    boundary = 'right'
    value = 0
  []
[]
[Materials]
  [block0]
    type = GenericConstantMaterial
    block = '0'
    prop_names = 'D'
    prop_values = '4'
  []
  [block1]
    type = GenericConstantMaterial
    block = '1'
    prop_names = 'D'
    prop_values = '2'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
[Debug]
  show_var_residual_norms = true
[]
[Postprocessors]
  [area]
    type = AreaPostprocessor
    use_displaced_mesh = true
    boundary = 'right'
  []
[]
(test/tests/interfacekernels/2d_interface/coupled_value_coupled_flux_with_jump_material.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
  []
  [./subdomain1]
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0 0 0'
    top_right = '1 1 0'
    block_id = 1
    input = gen
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
  [./break_boundary]
    input = interface
    type = BreakBoundaryOnSubdomainGenerator
  [../]
[]
[Variables]
  [./u]
    order = FIRST
    family = LAGRANGE
    block = 0
  [../]
  [./v]
    order = FIRST
    family = LAGRANGE
    block = 1
  [../]
[]
[Kernels]
  [./diff_u]
    type = CoeffParamDiffusion
    variable = u
    D = 4
    block = 0
  [../]
  [./diff_v]
    type = CoeffParamDiffusion
    variable = v
    D = 2
    block = 1
  [../]
  [./source_u]
    type = BodyForce
    variable = u
    value = 1
  [../]
[]
[InterfaceKernels]
  [./interface]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
    jump_prop_name = jump
  [../]
[]
[Materials]
  [./jump]
    type = JumpInterfaceMaterial
    var = u
    neighbor_var = v
    boundary = primary0_interface
  [../]
[]
[BCs]
  [./u]
    type = VacuumBC
    variable = u
    boundary = 'left_to_0 bottom_to_0 right top'
  [../]
  [./v]
    type = VacuumBC
    variable = v
    boundary = 'left_to_1 bottom_to_1'
  [../]
[]
[Postprocessors]
  [./u_int]
    type = ElementIntegralVariablePostprocessor
    variable = u
    block = 0
  [../]
  [./v_int]
    type = ElementIntegralVariablePostprocessor
    variable = v
    block = 1
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
  print_linear_residuals = true
[]
(test/tests/interfacekernels/1d_interface/ad-coupled-value-coupled-flux.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 10
    xmax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  []
  [interface]
    input = subdomain1
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  []
[]
[Variables]
  [u]
    block = '0'
  []
  [v]
    block = '1'
  []
[]
[Kernels]
  [diff_u]
    type = ADMatDiffusion
    variable = u
    diffusivity = 4
    block = 0
  []
  [diff_v]
    type = ADMatDiffusion
    variable = v
    diffusivity = 2
    block = 1
  []
[]
[InterfaceKernels]
  [penalty_interface]
    type = ADPenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    boundary = primary0_interface
    penalty = 1e6
    jump_prop_name = "jump"
  []
[]
[Materials]
  [bulk]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'functor_var_mat_prop'
    subdomain_to_prop_value = '0 u 1 v'
  []
  [bulk_traditional]
    type = ScalarPropFromFunctorProp
    functor = 'functor_var_mat_prop'
    prop = 'var_mat_prop'
  []
  [jump]
    type = PropertyJumpInterfaceMaterial
    property = var_mat_prop
    boundary = primary0_interface
  []
[]
[BCs]
  [left]
    type = ADDirichletBC
    variable = u
    boundary = 'left'
    value = 1
  []
  [right]
    type = ADDirichletBC
    variable = v
    boundary = 'right'
    value = 0
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
[]
(test/tests/interfacekernels/adaptivity/adaptivity.i)
# This input file is used for two tests:
# 1) Check that InterfaceKernels work with mesh adaptivity
# 2) Error out when InterfaceKernels are used with adaptivity
#    and stateful material prpoerties
[Mesh]
  parallel_type = 'replicated'
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    ny = 2
  []
  [./subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '0.5 0 0'
    top_right = '1 1 0'
    block_id = 1
  [../]
  [./interface]
    type = SideSetsBetweenSubdomainsGenerator
    input = subdomain1
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary0_interface'
  [../]
  [./break_boundary]
    input = interface
    type = BreakBoundaryOnSubdomainGenerator
  [../]
[]
[Variables]
  [./u]
    [./InitialCondition]
      type = ConstantIC
      value = 1
    [../]
    block = 0
  [../]
  [./u_neighbor]
    [./InitialCondition]
      type = ConstantIC
      value = 1
    [../]
    block = 1
  [../]
[]
[Functions]
  [./forcing_fn]
    type = ParsedFunction
    expression = (x*x*x)-6.0*x
  [../]
  [./bc_fn]
    type = ParsedFunction
    expression = (x*x*x)
  [../]
[]
[Kernels]
  [./diff]
    type = MatDiffusionTest
    variable = u
    prop_name = diffusivity
    block = 0
  [../]
  [./abs]
    type = Reaction
    variable = u
    block = 0
  [../]
  [./forcing]
    type = BodyForce
    variable = u
    function = forcing_fn
    block = 0
  [../]
  [./diffn]
    type = MatDiffusionTest
    variable = u_neighbor
    prop_name = diffusivity
    block = 1
  [../]
  [./absn]
    type = Reaction
    variable = u_neighbor
    block = 1
  [../]
  [./forcingn]
    type = BodyForce
    variable = u_neighbor
    function = forcing_fn
    block = 1
  [../]
[]
[InterfaceKernels]
  [./flux_match]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = u_neighbor
    boundary = primary0_interface
    penalty = 1e6
  [../]
[]
[BCs]
  [./u]
    type = FunctionDirichletBC
    variable = u
    boundary = 'left'
    function = bc_fn
  [../]
  [./u_neighbor]
    type = FunctionDirichletBC
    variable = u_neighbor
    boundary = 'right'
    function = bc_fn
  [../]
[]
[Materials]
  active = 'constant'
  [./stateful]
    type = StatefulTest
    prop_names = 'diffusivity'
    prop_values = '1'
    block = '0 1'
  [../]
  [./constant]
    type = GenericConstantMaterial
    prop_names = 'diffusivity'
    prop_values = '1'
    block = '0 1'
  [../]
[]
[Preconditioning]
  [./smp]
    type = SMP
    full = true
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
[]
[Adaptivity]
  marker = 'marker'
  steps = 1
  [./Markers]
    [./marker]
      type = BoxMarker
      bottom_left = '0 0 0'
      top_right = '1 1 0'
      inside = refine
      outside = coarsen
    [../]
  [../]
[]
[Outputs]
  exodus = true
[]
(test/tests/materials/interface_material/interface_value_material_split_mesh.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    xmax = 2
    ny = 2
    ymax = 2
    elem_type = QUAD4
  []
  [./subdomain_id]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1 0 0'
    top_right = '2 2 0'
    block_id = 1
  [../]
  [./split]
    type = BreakMeshByBlockGenerator
    input = subdomain_id
  [../]
[]
[Variables]
  [./u]
    block = 0
  [../]
  [./v]
    block = 1
  [../]
[]
[Kernels]
  [./diff]
    type = MatDiffusion
    variable = u
    diffusivity = 'diffusivity'
    block = 0
  [../]
  [./diff_v]
    type = MatDiffusion
    variable = v
    diffusivity = 'diffusivity'
    block = 1
  [../]
[]
[InterfaceKernels]
  [tied]
    type = PenaltyInterfaceDiffusion
    variable = u
    neighbor_var = v
    jump_prop_name = "average_jump"
    penalty = 1e6
    boundary = 'interface'
  []
[]
[BCs]
  [u_left]
    type = DirichletBC
    boundary = 'left'
    variable = u
    value = 1
  []
  [v_right]
    type = DirichletBC
    boundary = 'right'
    variable = v
    value = 0
  []
[]
[Materials]
  [./stateful1]
    type = StatefulMaterial
    block = 0
    initial_diffusivity = 1
    # outputs = all
  [../]
  [./stateful2]
    type = StatefulMaterial
    block = 1
    initial_diffusivity = 2
    # outputs = all
  [../]
  [./interface_material_avg]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = average
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_jump_primary_minus_secondary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_primary_minus_secondary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_jump_secondary_minus_primary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_secondary_minus_primary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_jump_abs]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = jump_abs
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_primary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      boundary = interface
      interface_value_type = primary
      mat_prop_var_out_basename = diff_var
      nl_var_primary = u
      nl_var_secondary = v
  [../]
  [./interface_material_secondary]
      type = InterfaceValueMaterial
      mat_prop_primary = diffusivity
      mat_prop_secondary = diffusivity
      var_primary = diffusivity_var
      var_secondary = diffusivity_var
      mat_prop_out_basename = diff
      mat_prop_var_out_basename = diff_var
      boundary = interface
      interface_value_type = secondary
      nl_var_primary = u
      nl_var_secondary = v
  [../]
[]
[AuxKernels]
  [./interface_material_avg]
    type = MaterialRealAux
    property = diff_average
    variable = diffusivity_average
    boundary = interface
  []
  [./interface_material_jump_primary_minus_secondary]
    type = MaterialRealAux
    property = diff_jump_primary_minus_secondary
    variable = diffusivity_jump_primary_minus_secondary
    boundary = interface
  []
  [./interface_material_jump_secondary_minus_primary]
    type = MaterialRealAux
    property = diff_jump_secondary_minus_primary
    variable = diffusivity_jump_secondary_minus_primary
    boundary = interface
  []
  [./interface_material_jump_abs]
    type = MaterialRealAux
    property = diff_jump_abs
    variable = diffusivity_jump_abs
    boundary = interface
  []
  [./interface_material_primary]
    type = MaterialRealAux
    property = diff_primary
    variable = diffusivity_primary
    boundary = interface
  []
  [./interface_material_secondary]
    type = MaterialRealAux
    property = diff_secondary
    variable = diffusivity_secondary
    boundary = interface
  []
  [diffusivity_var]
    type = MaterialRealAux
    property = diffusivity
    variable = diffusivity_var
  []
[]
[AuxVariables]
  [diffusivity_var]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_average]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_primary_minus_secondary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_secondary_minus_primary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_jump_abs]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_primary]
    family = MONOMIAL
    order = CONSTANT
  []
  [./diffusivity_secondary]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
[]