- prop_nameThe name of the property to declare. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
C++ Type:MooseFunctorName
Unit:(no unit assumed)
Controllable:No
Description:The name of the property to declare. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
 - subdomain_to_prop_valueMap from subdomain to property value. The value may be a constant or any kind of functor (functions, variables, functor material properties)
C++ Type:std::map<std::string,std::string, std::less<std::string>, std::allocator<std::pair<std::stringconst,std::string>>>
Controllable:No
Description:Map from subdomain to property value. The value may be a constant or any kind of functor (functions, variables, functor material properties)
 
PiecewiseByBlockFunctorMaterial ADPiecewiseByBlockFunctorMaterial
Computes a property value on a per-subdomain basis
Overview
This object is useful for providing a material property value that is discontinuous from subdomain to subdomain. "prop_name" is required to specify the name of the material property. The map parameter "subdomain_to_prop_value" is used for specifying the property value on a subdomain name basis; the first member of each pair should be a subdomain name while the second member should be a functor.
This material is a shorthand for specifying GenericFunctorMaterial restricted to each block.
ADPiecewiseByBlockFunctorMaterial is the version of this object with automatic differentiation AD functors must be specified as the values on each block.
Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
 - declare_suffixAn optional suffix parameter that can be appended to any declared 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 declared properties. The suffix will be prepended with a '_' character.
 - execute_onALWAYSThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:ALWAYS
C++ Type:ExecFlagEnum
Options:XFEM_MARK, FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, LINEAR_CONVERGENCE, NONLINEAR, NONLINEAR_CONVERGENCE, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, MULTIAPP_FIXED_POINT_CONVERGENCE, FINAL, CUSTOM, ALWAYS
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
 
Optional 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
 - 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
 
Advanced Parameters
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
 - outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
 
Outputs Parameters
Input Files
- (test/tests/fvkernels/mms/harmonic_interpolation/diffusion.i)
 - (test/tests/materials/piecewise_by_block_material/discontinuous_functor.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/bernoulli-1d-functor-material.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/formloss/formloss_single.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/formloss/formloss_multiple.i)
 - (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_force_corrected.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-mixing-physics.i)
 - (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_pressure_corrected.i)
 - (test/tests/meshdivisions/block_division.i)
 - (test/tests/fvkernels/mms/broken-domain/diffusion.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/scalar_advection/2d-rc-physics.i)
 - (test/tests/postprocessors/side_integral/side_integral_functor.i)
 - (test/tests/postprocessors/element_integral/functors/element_integral_test.i)
 - (test/tests/actioncomponents/interfaces/component_with_ics.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-mixing.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/2d-rc-epsjump.i)
 - (test/tests/postprocessors/side_average_value/side_average_functor_test.i)
 - (test/tests/interfacekernels/1d_interface/ad-coupled-value-coupled-flux.i)
 
prop_name
C++ Type:MooseFunctorName
Unit:(no unit assumed)
Controllable:No
Description:The name of the property to declare. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number.
subdomain_to_prop_value
C++ Type:std::map<std::string,std::string, std::less<std::string>, std::allocator<std::pair<std::stringconst,std::string>>>
Controllable:No
Description:Map from subdomain to property value. The value may be a constant or any kind of functor (functions, variables, functor material properties)
(test/tests/fvkernels/mms/harmonic_interpolation/diffusion.i)
d1 = 1
d2 = 10
[Mesh]
  [gen_mesh]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 2
    ny = 2
    elem_type = TRI3
  []
  [subdomain]
    type = ParsedSubdomainMeshGenerator
    input = gen_mesh
    combinatorial_geometry = 'y > 0.5'
    block_id = 1
  []
[]
[Variables]
  [v]
    type = MooseVariableFVReal
  []
[]
[FVKernels]
  [diff]
    type = FVDiffusion
    variable = v
    coeff = 'diff_coeff'
    coeff_interp_method = average
  []
  [body_v]
    type = FVBodyForce
    variable = v
    function = 'forcing'
  []
[]
[FVBCs]
  [exact]
    type = FVFunctionDirichletBC
    boundary = 'left right top bottom'
    function = 'exact'
    variable = v
  []
[]
[Functions]
  [exact]
    type = ParsedFunction
    expression = 'if (y < 0.5, 1 + x + 3*y*y*y, (11*d2-3*d1)/ (8*d2) + x + 3*d1/d2*y*y*y)'
    symbol_names = 'd1 d2'
    symbol_values = '${d1} ${d2}'
  []
  [forcing]
    type = ParsedFunction
    expression = '-d1*18*y'
    symbol_names = 'd1'
    symbol_values = '${d1}'
  []
[]
[Materials]
  [diff_coeff]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'diff_coeff'
    subdomain_to_prop_value = '0 ${d1}
                               1 ${d2}'
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  csv = true
  exodus = true
[]
[Postprocessors]
  [error]
    type = ElementL2Error
    variable = v
    function = exact
    outputs = 'console csv'
  []
  [h]
    type = AverageElementSize
    outputs = 'console csv'
  []
[]
(test/tests/materials/piecewise_by_block_material/discontinuous_functor.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'
  []
[]
[Variables]
  [u]
    type = MooseVariableFVReal
  []
[]
[FVKernels]
  [diff]
    type = FVDiffusion
    variable = u
    coeff = 'coeff'
    coeff_interp_method = average
  []
[]
[FVBCs]
  [left]
    type = FVDirichletBC
    variable = u
    boundary = 'left'
    value = 1
  []
  [right]
    type = FVDirichletBC
    variable = u
    boundary = 'right'
    value = 0
  []
[]
[Materials]
  [coeff_mat]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'coeff'
    subdomain_to_prop_value = '0 4
                               1 2'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
[]
[Outputs]
  exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/bernoulli-1d-functor-material.i)
rho = 1.1
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
[Mesh]
  [mesh]
    type = CartesianMeshGenerator
    dim = 1
    dx = '1 1'
    ix = '3 3'
    subdomain_id = '1 2'
  []
[]
[GlobalParams]
  rhie_chow_user_object = 'rc'
[]
[UserObjects]
  [rc]
    type = PINSFVRhieChowInterpolator
    u = u
    pressure = pressure
    porosity = porosity
  []
[]
[Variables]
  [u]
    type = PINSFVSuperficialVelocityVariable
    initial_condition = 1
  []
  [pressure]
    type = BernoulliPressureVariable
    u = u
    porosity = porosity
    rho = ${rho}
  []
[]
[AuxVariables]
  [has_porosity_jump_face]
    type = MooseVariableFVReal
  []
  [porosity_out]
    type = MooseVariableFVReal
  []
[]
[AuxKernels]
  [has_porosity_jump_face]
    type = HasPorosityJumpFace
    porosity = porosity
    execute_on = 'initial timestep_end'
    variable = has_porosity_jump_face
  []
  [porosity_out]
    type = FunctorAux
    variable = porosity_out
    functor = porosity
    execute_on = 'initial timestep_end'
  []
[]
[FVKernels]
  [mass]
    type = PINSFVMassAdvection
    variable = pressure
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
  []
  [u_advection]
    type = PINSFVMomentumAdvection
    variable = u
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
    porosity = porosity
    momentum_component = 'x'
  []
  [u_pressure]
    type = PINSFVMomentumPressure
    variable = u
    pressure = pressure
    porosity = porosity
    momentum_component = 'x'
  []
[]
[FVBCs]
  [inlet-u]
    type = INSFVInletVelocityBC
    boundary = 'left'
    variable = u
    functor = '1'
  []
  [outlet_p]
    type = INSFVOutletPressureBC
    boundary = 'right'
    variable = pressure
    function = 1
  []
[]
[FunctorMaterials]
  [porosity]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'porosity'
    subdomain_to_prop_value = '1 1 2 0.5'
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu NONZERO'
  line_search = 'none'
[]
[Postprocessors]
  [inlet_p]
    type = SideAverageValue
    variable = 'pressure'
    boundary = 'left'
  []
  [outlet-u]
    type = SideIntegralVariablePostprocessor
    variable = u
    boundary = 'right'
  []
[]
[Outputs]
  exodus = true
  csv = true
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/formloss/formloss_single.i)
# The expected pressure increase from textbook correlations for an expansion is: -355.68 Pa
# The form loss coefficient is computed with the following expression:
#
# K = (1-\beta)^2 = 0.25,
#
# where $\beta$ is the area ratio (0.5 in our case). With this, the total pressure drop
# can be computed using:
#
# \Delta p = 0.5 * K * \rho * v_upstream^2 + 0.5 * \rho * (v_downstream^2 - v_upstream^2)
#
# The expected pressure drop from textbook correlations for a contraction is: 2980.03437 Pa
# The form loss coefficient is computed with the following expression:
#
# K = 0.5*(1-/beta)^0.75 = 0.29730,
#
# where $\beta$ is the area ratio (0.5 in our case). With this, the total pressure drop
# can be computed using:
#
# \Delta p = 0.5 * K * rho * v_downstream^2 + 0.5 * \rho * (v_downstream^2 - v_upstream^2)
#
# Every velocity in these expressions is interstitial normal velocity to the surface.
[Mesh]
  [gen]
    type = CartesianMeshGenerator
    dim = 2
    dx = '1.0 1.0'
    dy = '1.0'
    subdomain_id = '1 2'
  []
  [area_change]
    type = SideSetsAroundSubdomainGenerator
    input = gen
    block = 1
    normal = '1 0 0'
    new_boundary = 'area_change'
  []
[]
[Materials]
  [all_constant_props]
    type = ADGenericConstantFunctorMaterial
    prop_names = 'rho  mu   '
    prop_values = '988  1e-3 '
  []
  [porosity]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = porosity
    subdomain_to_prop_value = '1 0.50
                               2 1.00'
  []
[]
[Physics]
  [NavierStokes]
    [Flow]
      [flow]
        block = '1 2'
        compressibility = 'weakly-compressible'
        porous_medium_treatment = true
        # Material property parameters
        density = rho
        dynamic_viscosity = mu
        # Porous medium parameters
        porosity = porosity
        porosity_interface_pressure_treatment = 'bernoulli'
        pressure_drop_sidesets = 'area_change'
        pressure_drop_form_factors = '0.25'
        # Boundary conditions
        inlet_boundaries = 'left'
        outlet_boundaries = 'right'
        momentum_inlet_types = fixed-velocity
        momentum_inlet_functors = '0.6 0.0'
        momentum_outlet_types = fixed-pressure
        pressure_functors = '1.01e5'
      []
    []
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu NONZERO'
  nl_rel_tol = 1e-12
[]
[Postprocessors]
  [inlet_pressure]
    type = ElementAverageValue
    variable = pressure
    block = 1
    outputs = none
  []
  [outlet_pressure]
    type = ElementAverageValue
    variable = pressure
    block = 2
    outputs = none
  []
  [pressure_drop]
    type = ParsedPostprocessor
    pp_names = 'inlet_pressure outlet_pressure'
    expression = 'inlet_pressure - outlet_pressure'
  []
[]
[Outputs]
  csv = true
  execute_on = FINAL
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/formloss/formloss_multiple.i)
# The expected pressure drop from textbook correlations for this example is: 1081.468315
[Mesh]
  [gen]
      type = CartesianMeshGenerator
      dim = 2
      dx = '1.0 1.0 1.0 1.0 1.0 1.0'
      dy = '1.0'
      subdomain_id = '1 2 3 3 4 5'
  []
  [area_change_1]
    type = SideSetsAroundSubdomainGenerator
    input = gen
    block = 1
    normal = '1 0 0'
    new_boundary = 'area_change_1'
  []
  [area_change_2]
    type = SideSetsAroundSubdomainGenerator
    input = area_change_1
    block = 4
    normal = '1 0 0'
    new_boundary = 'area_change_2'
  []
[]
[Variables]
  [pressure]
    type = BernoulliPressureVariable
    pressure_drop_sidesets = 'area_change_1 area_change_2'
    pressure_drop_form_factors = '0.2973 0.25'
    porosity = porosity
    u = superficial_vel_x
    v = superficial_vel_y
    rho = 988.0
    initial_condition = 1.01e5
    block = '1 2 3 4 5'
  []
[]
[Materials]
  [all_constant_props]
    type = ADGenericConstantFunctorMaterial
    prop_names = 'u rho  mu   '
    prop_values = '0.50 988  1e-3 '
  []
  [porosityMat]
      type = ADPiecewiseByBlockFunctorMaterial
      prop_name = porosity
      subdomain_to_prop_value = '1 1.00
                                  2 0.50
                                  3 0.50
                                  4 0.50
                                  5 1.00'
  []
[]
[Modules]
  [NavierStokesFV]
    block = '1 2 3 4 5'
    compressibility = 'weakly-compressible'
    porous_medium_treatment = true
    # Material property parameters
    density = rho
    dynamic_viscosity = mu
    pressure_variable = pressure
    # Porous medium parameters
    porosity = porosity
    porosity_interface_pressure_treatment = 'bernoulli'
    # Boundary conditions
    inlet_boundaries = 'left'
    outlet_boundaries = 'right'
    momentum_inlet_types = fixed-velocity
    momentum_inlet_functors = '1.0 0.0'
    momentum_outlet_types = fixed-pressure
    pressure_functors = '1.01e5'
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu NONZERO'
  nl_rel_tol = 1e-6
  l_max_its = 100
  nl_max_its = 100
  automatic_scaling = true
  off_diagonals_in_auto_scaling = true
  line_search = none
[]
[Postprocessors]
  [inlet_pressure]
    type = ElementAverageValue
    variable = pressure
    block = 1
  []
  [middle_pressure]
    type = ElementAverageValue
    variable = pressure
    block = 2
  []
  [outlet_pressure]
    type = ElementAverageValue
    variable = pressure
    block = 5
  []
  [pressure_drop]
    type = ParsedPostprocessor
    pp_names = 'inlet_pressure outlet_pressure'
    expression = 'inlet_pressure - outlet_pressure'
  []
[]
[Outputs]
  csv = true
  execute_on = FINAL
[]
(modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_force_corrected.i)
mu = 1.0
rho = 1.0
[Mesh]
  [gen]
    type = CartesianMeshGenerator
    dim = 2
    dx = '0.1 0.8 0.1'
    dy = '0.1 0.8 0.1'
    ix = '5 20 5'
    iy = '5 20 5'
    subdomain_id = '1 1 1
                    1 2 1
                    1 1 1'
  []
  [delete_internal_part]
    type = BlockDeletionGenerator
    input = gen
    block = '2'
    new_boundary = 'wall-internal'
  []
  [lump_bdries_to_wall]
    type = RenameBoundaryGenerator
    input = delete_internal_part
    old_boundary = 'bottom right top left'
    new_boundary = 'wall-external wall-external wall-external wall-external'
  []
  [pump_domain]
    type = ParsedSubdomainMeshGenerator
    input = lump_bdries_to_wall
    combinatorial_geometry = 'x > 0.3 & x < 0.7 & y > 0.5'
    block_id = '3'
  []
  [rename_blocks]
    type = RenameBlockGenerator
    input = pump_domain
    old_block = '1 3'
    new_block = 'pipe pump'
  []
  [side_pump]
    type = ParsedGenerateSideset
    input = rename_blocks
    included_subdomains = 'pump'
    included_neighbors = 'pipe'
    new_sideset_name = 'pump_side'
    normal = '1 0 0'
    combinatorial_geometry = 'x > 0.35'
  []
[]
[GlobalParams]
  velocity_interp_method = 'rc'
  advected_interp_method = 'upwind'
  rhie_chow_user_object = 'rc'
[]
[Problem]
  material_coverage_check = False
[]
[UserObjects]
  [rc]
    type = INSFVRhieChowInterpolator
    u = vel_x
    v = vel_y
    pressure = pressure
    correct_volumetric_force = true
    volumetric_force_functors = 'pump_force'
    volume_force_correction_method = 'force-consistent'
  []
[]
[Variables]
  [vel_x]
    type = INSFVVelocityVariable
    initial_condition = 1
  []
  [vel_y]
    type = INSFVVelocityVariable
    initial_condition = 1
  []
  [pressure]
    type = INSFVPressureVariable
  []
  [lambda]
    family = SCALAR
    order = FIRST
  []
[]
[AuxVariables]
  [U]
    order = CONSTANT
    family = MONOMIAL
    fv = true
  []
[]
[AuxKernels]
  [mag]
    type = VectorMagnitudeAux
    variable = U
    x = vel_x
    y = vel_y
  []
[]
[FVKernels]
  [mass]
    type = INSFVMassAdvection
    variable = pressure
    rho = ${rho}
  []
  [mean_zero_pressure]
    type = FVIntegralValueConstraint
    variable = pressure
    lambda = lambda
    phi0 = 0.0
  []
  [u_advection]
    type = INSFVMomentumAdvection
    variable = vel_x
    rho = ${rho}
    momentum_component = 'x'
  []
  [u_viscosity]
    type = INSFVMomentumDiffusion
    variable = vel_x
    mu = ${mu}
    momentum_component = 'x'
  []
  [u_pressure]
    type = INSFVMomentumPressure
    variable = vel_x
    momentum_component = 'x'
    pressure = pressure
  []
  [u_pump]
    type = INSFVBodyForce
    variable = vel_x
    momentum_component = 'x'
    functor = 'pump_force'
    block = 'pump'
  []
  [v_advection]
    type = INSFVMomentumAdvection
    variable = vel_y
    rho = ${rho}
    momentum_component = 'y'
  []
  [v_viscosity]
    type = INSFVMomentumDiffusion
    variable = vel_y
    mu = ${mu}
    momentum_component = 'y'
  []
  [v_pressure]
    type = INSFVMomentumPressure
    variable = vel_y
    momentum_component = 'y'
    pressure = pressure
  []
[]
[FVBCs]
  [walls-u]
    type = INSFVNoSlipWallBC
    boundary = 'wall-internal wall-external'
    variable = vel_x
    function = '0'
  []
  [walls-v]
    type = INSFVNoSlipWallBC
    boundary = 'wall-internal wall-external'
    variable = vel_y
    function = '0'
  []
[]
[FunctorMaterials]
  [pump_force]
    type = PiecewiseByBlockFunctorMaterial
    prop_name = 'pump_force'
    subdomain_to_prop_value = 'pump 1000.0
                               pipe 0.0'
  []
[]
[Postprocessors]
  [flow_rate]
    type = Receiver
    default = 1.0
  []
  [flow_rate_to_pipe]
    type = VolumetricFlowRate
    advected_quantity = ${rho}
    boundary = 'pump_side'
    vel_x = 'vel_x'
    vel_y = 'vel_y'
  []
  [maximum_speed]
    type = ADElementExtremeFunctorValue
    functor = vel_x
    value_type = max
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu NONZERO'
  nl_rel_tol = 1e-12
[]
[Outputs]
  exodus = false
  [out]
    type = CSV
    execute_on = FINAL
    show = 'flow_rate_to_pipe maximum_speed'
  []
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-mixing-physics.i)
# This test is designed to check for energy conservation
# in separated channels. The three inlet temperatures should be
# preserved at the outlets.
rho=1.1
mu=1e-4
k=2.1
cp=5.5
[Mesh]
  [mesh]
    type = CartesianMeshGenerator
    dim = 2
    dx = '0.25 1.0 0.25'
    dy = '0.25 0.25 0.25'
    ix = '4 20 4'
    iy = '5 5 5'
    subdomain_id = '1 2 5 1 3 5 1 4 5'
  []
  [separator-1]
    type = SideSetsBetweenSubdomainsGenerator
    input = mesh
    primary_block = '2'
    paired_block = '3'
    new_boundary = 'separator-1'
  []
  [separator-2]
    type = SideSetsBetweenSubdomainsGenerator
    input = separator-1
    primary_block = '3'
    paired_block = '4'
    new_boundary = 'separator-2'
  []
  [jump-1]
    type = SideSetsBetweenSubdomainsGenerator
    input = separator-2
    primary_block = '1'
    paired_block = '2'
    new_boundary = jump-1
  []
  [jump-2]
    type = SideSetsBetweenSubdomainsGenerator
    input = jump-1
    primary_block = '1'
    paired_block = '3'
    new_boundary = jump-2
  []
  [jump-3]
    type = SideSetsBetweenSubdomainsGenerator
    input = jump-2
    primary_block = '1'
    paired_block = '4'
    new_boundary = jump-3
  []
  [outlet-1]
    type = SideSetsBetweenSubdomainsGenerator
    input = jump-3
    primary_block = '2'
    paired_block = '5'
    new_boundary = outlet-1
  []
  [outlet-2]
    type = SideSetsBetweenSubdomainsGenerator
    input = outlet-1
    primary_block = '3'
    paired_block = '5'
    new_boundary = outlet-2
  []
  [outlet-3]
    type = SideSetsBetweenSubdomainsGenerator
    input = outlet-2
    primary_block = '4'
    paired_block = '5'
    new_boundary = outlet-3
  []
[]
[Physics]
  [NavierStokes]
    [Flow]
      [flow]
        compressibility = 'incompressible'
        porous_medium_treatment = true
        # Material property parameters
        density = ${rho}
        dynamic_viscosity = ${mu}
        # Porous medium parameters
        porosity = porosity
        porosity_interface_pressure_treatment = 'bernoulli'
        pressure_drop_sidesets = 'jump-1 jump-2 jump-3 outlet-1 outlet-2 outlet-3'
        pressure_drop_form_factors = '0.1 0.2 0.3 0.1 0.2 0.3'
        friction_types = 'forchheimer'
        friction_coeffs = 'Forchheimer_coefficient'
        # Initial conditions
        initial_velocity = '0.1 0 0'
        initial_pressure = 0.0
        # Boundary conditions
        inlet_boundaries = 'left'
        momentum_inlet_types = 'fixed-velocity'
        momentum_inlet_functors = '0.1 0'
        wall_boundaries = 'top bottom'
        momentum_wall_types = 'slip slip'
        outlet_boundaries = 'right'
        momentum_outlet_types = 'fixed-pressure'
        pressure_functors = '0.4'
        hydraulic_separator_sidesets = 'separator-1 separator-2'
      []
    []
    [FluidHeatTransfer]
      [heat]
        # Material properties
        thermal_conductivity = ${k}
        specific_heat = ${cp}
        # Initial conditions
        initial_temperature = 300.0
        # Boundary conditions
        energy_inlet_types = 'fixed-temperature'
        energy_inlet_functors = 300.0
        energy_wall_types = 'heatflux heatflux'
        energy_wall_functors = '0 0'
        # Heat source
        external_heat_source = heating
      []
    []
  []
[]
[Functions]
  [heating]
    type = ParsedFunction
    expression = 'if(x>0.25 & x<1.25, if(y<0.25, 10, if(y<0.5, 20, 30)), 0)'
  []
[]
[FunctorMaterials]
  [porosity]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = porosity
    subdomain_to_prop_value = '1 0.8
                               2 0.7
                               3 0.6
                               4 0.5
                               5 0.8'
  []
  [fc-1]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '1.0 1.0 1.0'
    block = '1 5'
  []
  [fc-2]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '3.0 3.0 3.0'
    block = 2
  []
  [fc-3]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '1.5 1.5 1.5'
    block = 3
  []
  [fc-4]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '0.75 0.75 0.75'
    block = 4
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
  petsc_options_value = ' lu       NONZERO               1e-10'
  line_search = 'none'
  nl_rel_tol = 1e-10
[]
[Postprocessors]
  [outlet_T1]
    type = SideAverageValue
    variable = 'T_fluid'
    boundary = 'right'
  []
[]
[Outputs]
  csv = true
  execute_on = final
[]
(modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_pressure_corrected.i)
mu = 1.0
rho = 1.0
[Mesh]
  [gen]
    type = CartesianMeshGenerator
    dim = 2
    dx = '0.1 0.8 0.1'
    dy = '0.1 0.8 0.1'
    ix = '5 20 5'
    iy = '5 20 5'
    subdomain_id = '1 1 1
                    1 2 1
                    1 1 1'
  []
  [delete_internal_part]
    type = BlockDeletionGenerator
    input = gen
    block = '2'
    new_boundary = 'wall-internal'
  []
  [lump_bdries_to_wall]
    type = RenameBoundaryGenerator
    input = delete_internal_part
    old_boundary = 'bottom right top left'
    new_boundary = 'wall-external wall-external wall-external wall-external'
  []
  [pump_domain]
    type = ParsedSubdomainMeshGenerator
    input = lump_bdries_to_wall
    combinatorial_geometry = 'x > 0.3 & x < 0.7 & y > 0.5'
    block_id = '3'
  []
  [rename_blocks]
    type = RenameBlockGenerator
    input = pump_domain
    old_block = '1 3'
    new_block = 'pipe pump'
  []
  [side_pump]
    type = ParsedGenerateSideset
    input = rename_blocks
    included_subdomains = 'pump'
    included_neighbors = 'pipe'
    new_sideset_name = 'pump_side'
    normal = '1 0 0'
    combinatorial_geometry = 'x > 0.35'
  []
[]
[GlobalParams]
  velocity_interp_method = 'rc'
  advected_interp_method = 'upwind'
  rhie_chow_user_object = 'rc'
[]
[Problem]
  material_coverage_check = False
[]
[UserObjects]
  [rc]
    type = INSFVRhieChowInterpolator
    u = vel_x
    v = vel_y
    pressure = pressure
    correct_volumetric_force = true
    volumetric_force_functors = 'pump_force'
    volume_force_correction_method = 'pressure-consistent'
  []
[]
[Variables]
  [vel_x]
    type = INSFVVelocityVariable
    initial_condition = 1
  []
  [vel_y]
    type = INSFVVelocityVariable
    initial_condition = 1
  []
  [pressure]
    type = INSFVPressureVariable
  []
  [lambda]
    family = SCALAR
    order = FIRST
  []
[]
[AuxVariables]
  [U]
    order = CONSTANT
    family = MONOMIAL
    fv = true
  []
[]
[AuxKernels]
  [mag]
    type = VectorMagnitudeAux
    variable = U
    x = vel_x
    y = vel_y
  []
[]
[FVKernels]
  [mass]
    type = INSFVMassAdvection
    variable = pressure
    rho = ${rho}
  []
  [mean_zero_pressure]
    type = FVIntegralValueConstraint
    variable = pressure
    lambda = lambda
    phi0 = 0.0
  []
  [u_advection]
    type = INSFVMomentumAdvection
    variable = vel_x
    rho = ${rho}
    momentum_component = 'x'
  []
  [u_viscosity]
    type = INSFVMomentumDiffusion
    variable = vel_x
    mu = ${mu}
    momentum_component = 'x'
  []
  [u_pressure]
    type = INSFVMomentumPressure
    variable = vel_x
    momentum_component = 'x'
    pressure = pressure
  []
  [u_pump]
    type = INSFVBodyForce
    variable = vel_x
    momentum_component = 'x'
    functor = 'pump_force'
    block = 'pump'
  []
  [v_advection]
    type = INSFVMomentumAdvection
    variable = vel_y
    rho = ${rho}
    momentum_component = 'y'
  []
  [v_viscosity]
    type = INSFVMomentumDiffusion
    variable = vel_y
    mu = ${mu}
    momentum_component = 'y'
  []
  [v_pressure]
    type = INSFVMomentumPressure
    variable = vel_y
    momentum_component = 'y'
    pressure = pressure
  []
[]
[FVBCs]
  [walls-u]
    type = INSFVNoSlipWallBC
    boundary = 'wall-internal wall-external'
    variable = vel_x
    function = '0'
  []
  [walls-v]
    type = INSFVNoSlipWallBC
    boundary = 'wall-internal wall-external'
    variable = vel_y
    function = '0'
  []
[]
[FunctorMaterials]
  [pump_force]
    type = PiecewiseByBlockFunctorMaterial
    prop_name = 'pump_force'
    subdomain_to_prop_value = 'pump 1000.0
                               pipe 0.0'
  []
[]
[Postprocessors]
  [flow_rate]
    type = Receiver
    default = 1.0
  []
  [flow_rate_to_pipe]
    type = VolumetricFlowRate
    advected_quantity = ${rho}
    boundary = 'pump_side'
    vel_x = 'vel_x'
    vel_y = 'vel_y'
  []
  [maximum_speed]
    type = ADElementExtremeFunctorValue
    functor = vel_x
    value_type = max
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu NONZERO'
  nl_rel_tol = 1e-12
[]
[Outputs]
  exodus = false
  [out]
    type = CSV
    execute_on = FINAL
    show = 'flow_rate_to_pipe maximum_speed'
  []
[]
(test/tests/meshdivisions/block_division.i)
[Mesh]
  [cmg]
    type = CartesianMeshGenerator
    dim = 3
    dx = '1.5 2.4 0.1'
    dy = '1.3 0.9'
    dz = '0.4 0.5 0.6 0.7'
    ix = '2 1 1'
    iy = '2 3'
    iz = '1 1 1 1'
    subdomain_id = '0 1 1
                    2 2 2
                    3 4 4
                    5 5 5
                    0 1 1
                    2 2 2
                    3 4 4
                    5 5 5
                    '
  []
[]
[MeshDivisions]
  [block_div]
    type = SubdomainsDivision
  []
[]
[AuxVariables]
  [blocks]
    family = MONOMIAL
    order = CONSTANT
  []
  [div]
    family = MONOMIAL
    order = CONSTANT
  []
  [diff]
    family = MONOMIAL
    order = CONSTANT
  []
[]
[AuxKernels]
  [mesh_div]
    type = MeshDivisionAux
    variable = div
    mesh_division = 'block_div'
  []
  [subdomains]
    type = FunctorAux
    functor = 'blocks_fmat'
    variable = 'blocks'
  []
  [difference]
    type = ParsedAux
    variable = diff
    expression = 'blocks - div'
    coupled_variables = 'blocks div'
  []
[]
[FunctorMaterials]
  [fmat]
    type = PiecewiseByBlockFunctorMaterial
    prop_name = 'blocks_fmat'
    subdomain_to_prop_value = '0 0 1 1 2 2 3 3 4 4 5 5'
  []
[]
[Postprocessors]
  [min_diff]
    type = ElementExtremeValue
    variable = diff
    value_type = 'min'
  []
  [max_diff]
    type = ElementExtremeValue
    variable = diff
  []
[]
[Problem]
  solve = false
[]
[Executioner]
  type = Steady
[]
[Outputs]
  csv = true
[]
(test/tests/fvkernels/mms/broken-domain/diffusion.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 1
    nx = 2
    xmax = 2
  []
  [subdomain1]
    input = gen
    type = SubdomainBoundingBoxGenerator
    bottom_left = '1.0 0 0'
    block_id = 1
    top_right = '2.0 1.0 0'
  []
  [interface_primary_side]
    input = subdomain1
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'primary_interface'
  []
  [interface_secondary_side]
    input = interface_primary_side
    type = SideSetsBetweenSubdomainsGenerator
    primary_block = '1'
    paired_block = '0'
    new_boundary = 'secondary_interface'
  []
[]
[Variables]
  [u]
    type = MooseVariableFVReal
    block = 0
    initial_condition = 0.5
  []
  [v]
    type = MooseVariableFVReal
    block = 1
    initial_condition = 0.5
  []
[]
[FVKernels]
  [diff_left]
    type = FVDiffusion
    variable = u
    coeff = 'left'
    block = 0
  []
  [diff_right]
    type = FVDiffusion
    variable = v
    coeff = 'right'
    block = 1
  []
  [body_left]
    type = FVBodyForce
    variable = u
    function = 'forcing'
    block = 0
  []
  [body_right]
    type = FVBodyForce
    variable = v
    function = 'forcing'
    block = 1
  []
[]
[FVInterfaceKernels]
  # This will add a flux term for variable1, e.g. u
  [interface]
    type = FVOnlyAddDiffusionToOneSideOfInterface
    variable1 = u
    variable2 = v
    boundary = 'primary_interface'
    subdomain1 = '0'
    subdomain2 = '1'
    coeff2 = 'right'
  []
[]
[FVBCs]
  [left]
    type = FVFunctionDirichletBC
    variable = u
    boundary = 'left'
    function = 'exact'
  []
  [right]
    type = FVFunctionDirichletBC
    variable = v
    boundary = 'right'
    function = 'exact'
  []
  [middle]
    # by adding a dirichlet BC we ensure that flux kernels will run for variable v
    type = FVADUseFunctorSideForSsfDirichletBC
    variable = v
    functor = u
    boundary = 'secondary_interface'
  []
[]
[FunctorMaterials]
  [block0]
    type = ADGenericFunctorMaterial
    block = '0'
    prop_names = 'left'
    prop_values = '1'
  []
  [block1]
    type = ADGenericFunctorMaterial
    block = '1'
    prop_names = 'right'
    prop_values = '1'
  []
  [composite]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'composite'
    subdomain_to_prop_value = '0 u 1 v'
  []
[]
[Executioner]
  type = Steady
  solve_type = NEWTON
  petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type'
  petsc_options_value = 'asm lu NONZERO'
[]
[Outputs]
  exodus = true
  csv = true
[]
[Functions]
  [exact]
    type = ParsedFunction
    expression = '3*x^2 + 2*x + 1'
  []
  [forcing]
    type = ParsedFunction
    expression = '-6'
  []
[]
[Postprocessors]
  [error]
    type = ElementL2FunctorError
    approximate = composite
    exact = exact
    outputs = 'console csv'
  []
  [h]
    type = AverageElementSize
    outputs = 'console csv'
  []
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/scalar_advection/2d-rc-physics.i)
mu = 1.1
rho = 1.1
# No scalar diffusion, as we are looking at advective flow rate for conservation
diff = 0
advected_interp_method = 'upwind'
[Problem]
  error_on_jacobian_nonzero_reallocation = true
[]
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    xmin = 0
    xmax = 5
    ymin = 0
    ymax = 1
    nx = 20
    ny = 10
  []
  [second_block]
    type = ParsedSubdomainMeshGenerator
    input = 'gen'
    combinatorial_geometry = 'x > 2.5001'
    block_id = '1'
  []
  [middle]
    type = SideSetsBetweenSubdomainsGenerator
    input = 'second_block'
    primary_block = '0'
    paired_block = '1'
    new_boundary = 'mid'
  []
[]
[Physics]
  [NavierStokes]
    [Flow]
      [flow]
        compressibility = 'incompressible'
        porous_medium_treatment = true
        density = 'rho'
        dynamic_viscosity = 'mu'
        # Porosity settings
        porosity = 'porosity'
        porosity_interface_pressure_treatment = 'bernoulli'
        initial_velocity = '1 1e-6 0'
        initial_pressure = 0.0
        inlet_boundaries = 'left'
        momentum_inlet_types = 'fixed-velocity'
        momentum_inlet_functors = '1 0'
        wall_boundaries = 'top bottom'
        momentum_wall_types = 'slip slip'
        outlet_boundaries = 'right'
        momentum_outlet_types = 'fixed-pressure'
        pressure_functors = '0'
        mass_advection_interpolation = '${advected_interp_method}'
        momentum_advection_interpolation = '${advected_interp_method}'
      []
    []
    [ScalarTransport]
      [flow]
        passive_scalar_names = 'scalar'
        passive_scalar_diffusivity = '${diff}'
        # Should add +1.25 to scalar concentration on left domain
        # Then multiply by 2: 3.25 -> 6.5
        # then +2.5 on the right domain -> outlet flow at 9
        passive_scalar_coupled_source = Q
        passive_scalar_coupled_source_coeff = 0.1
        # See flow for inlet boundary
        passive_scalar_inlet_types = 'fixed-value'
        passive_scalar_inlet_functors = '2'
        # No need to specify wall or outlet boundaries here
        passive_scalar_advection_interpolation = '${advected_interp_method}'
      []
    []
  []
[]
[FunctorMaterials]
  [const]
    type = ADGenericFunctorMaterial
    prop_names = 'rho mu Q'
    prop_values = '${rho} ${mu} 10'
  []
  [eps_step]
    type = PiecewiseByBlockFunctorMaterial
    prop_name = 'porosity'
    subdomain_to_prop_value = '0 0.5
                               1 1'
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu NONZERO'
  nl_rel_tol = 1e-11
  nl_abs_tol = 1e-14
[]
# Some basic Postprocessors to visually examine the solution
[Postprocessors]
  [inlet-u]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = '1'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'left'
  []
  [outlet-u]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = '1'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'right'
  []
  [inlet-momx]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = 'superficial_vel_x'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'left'
  []
  [outlet-momx]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = 'superficial_vel_x'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'right'
  []
  [inlet-scalar]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = 'scalar'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'left'
  []
  [mid-scalar]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = 'scalar'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'mid'
  []
  [outlet-scalar]
    type = VolumetricFlowRate
    vel_x = 'superficial_vel_x'
    vel_y = 'superficial_vel_y'
    advected_quantity = 'scalar'
    rhie_chow_user_object = 'pins_rhie_chow_interpolator'
    advected_interp_method = '${advected_interp_method}'
    subtract_mesh_velocity = 'false'
    boundary = 'right'
  []
[]
[Outputs]
  exodus = true
  csv = true
[]
(test/tests/postprocessors/side_integral/side_integral_functor.i)
[Mesh]
  inactive = 'refine'
  # U-shaped domains to have internal boundaries in
  # a variety of directions
  [cmg]
     type = CartesianMeshGenerator
     dim = 2
     dx = '1 1 1'
     dy = '3 1'
     ix = '4 5 3'
     iy = '12 4'
     subdomain_id = '1 2 1
                     1 1 1'
  []
  [internal_boundary_dir1]
     type = SideSetsBetweenSubdomainsGenerator
     input = cmg
     primary_block = 1
     paired_block = 2
     new_boundary = 'inside_1'
  []
  [internal_boundary_dir2]
     type = SideSetsBetweenSubdomainsGenerator
     input = internal_boundary_dir1
     primary_block = 2
     paired_block = 1
     new_boundary = 'inside_2'
  []
  [refine]
    type = RefineBlockGenerator
    input = internal_boundary_dir2
    block = '1 2'
    refinement = '2 1'
  []
[]
[Variables]
  [u]
    type = MooseVariableFVReal
    block = 1
  []
[]
[AuxVariables]
  [v1]
    type = MooseVariableFVReal
    block = 1
    [FVInitialCondition]
      type = FVFunctionIC
      function = 'x + y'
    []
  []
  [v2]
    type = MooseVariableFVReal
    block = 2
    [FVInitialCondition]
      type = FVFunctionIC
      function = '2*x*x - y'
    []
  []
[]
[Functions]
  [f1]
    type = ParsedFunction
    expression = 'exp(x - y)'
  []
[]
[Materials]
  [m1]
    type = ADGenericFunctorMaterial
    prop_names = 'm1'
    prop_values = 'f1'
  []
  [m2]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'm2'
    subdomain_to_prop_value = '1 12
                               2 4'
  []
[]
[FVKernels]
  [diff]
    type = FVDiffusion
    variable = u
    coeff = '1'
  []
[]
[FVBCs]
  [left]
    type = FVDirichletBC
    variable = u
    boundary = 3
    value = 0
  []
  [right]
    type = FVDirichletBC
    variable = u
    boundary = 1
    value = 1
  []
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
[]
[Postprocessors]
  # Mesh external boundaries integration
  [ext_u]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'left top right'
    functor = u
    restrict_to_functors_domain = true
  []
  [ext_v1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'left right'
    functor = v1
  []
  [ext_v2]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'top'
    functor = v2
    restrict_to_functors_domain = true
  []
  [ext_f1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'left top right'
    functor = f1
    prefactor = f1
  []
  [ext_m1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'left top right'
    functor = m1
    restrict_to_functors_domain = true
  []
  [ext_m2]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'left top right'
    functor = m2
    restrict_to_functors_domain = true
  []
  # Internal to the mesh, but a side to the variables
  # With orientation of normal 1->2
  [int_s1_u]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_1
    functor = u
  []
  [int_s1_v1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_1
    functor = v1
  []
  [int_s1_f1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_1
    functor = f1
  []
  [int_s1_m1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_1
    functor = m1
  []
  [int_s1_m2]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_1
    functor = m2
  []
  # With orientation of normal 2->1
  [int_s2_v2]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_2
    functor = v2
  []
  [int_s2_f1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_2
    functor = f1
  []
  [int_s2_m1]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_2
    functor = m1
  []
  [int_s2_m2]
    type = ADSideIntegralFunctorPostprocessor
    boundary = inside_2
    functor = m2
  []
[]
[Outputs]
  csv = true
  exodus = true
[]
[Problem]
  kernel_coverage_check = false
[]
(test/tests/postprocessors/element_integral/functors/element_integral_test.i)
[Mesh]
  second_order = true
  [square]
    type = GeneratedMeshGenerator
    nx = 2
    ny = 2
    dim = 2
  []
  [block]
    type = ParsedSubdomainMeshGenerator
    input = square
    block_id = 1
    combinatorial_geometry = 'x > 0.5'
  []
[]
[Problem]
  solve = false
[]
[Executioner]
  type = Steady
[]
[AuxVariables]
  [nodal]
    [InitialCondition]
      type = FunctionIC
      function = '1 + x*x + y*y*y'
    []
  []
  [fe_higher_order]
    order = SECOND
    [InitialCondition]
      type = FunctionIC
      function = '1 + x*x + y*y*y'
    []
  []
  [fe_elemental]
    family = MONOMIAL
    order = SECOND
    [InitialCondition]
      type = FunctionIC
      function = '1 + x*x + y*y*y'
    []
  []
  [fv_var]
    type = MooseVariableFVReal
    [FVInitialCondition]
      type = FVFunctionIC
      function = '1 + x*x + y*y*y'
    []
  []
[]
[Functions]
  [f]
    type = ParsedFunction
    expression = '1 + x*x + y*y*y'
  []
[]
[Materials]
  [two_piece]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'mat'
    subdomain_to_prop_value = '0 nodal 1 fv_var'
  []
[]
[Postprocessors]
  [fe]
    type = ADElementIntegralFunctorPostprocessor
    functor = nodal
  []
  [fe_higher_order]
    type = ADElementIntegralFunctorPostprocessor
    functor = fe_higher_order
  []
  [fe_elemental]
    type = ADElementIntegralFunctorPostprocessor
    functor = fe_elemental
  []
  [fv]
    type = ADElementIntegralFunctorPostprocessor
    functor = fv_var
  []
  [function]
    type = ElementIntegralFunctorPostprocessor
    functor = f
    prefactor = f
  []
  [functor_matprop]
    type = ADElementIntegralFunctorPostprocessor
    functor = mat
  []
[]
[Outputs]
  file_base = out
  exodus = false
  csv = true
[]
(test/tests/actioncomponents/interfaces/component_with_ics.i)
[Mesh]
  [cmg]
    type = CartesianMeshGenerator
    dim = 2
    ix = 2
    iy = 2
    dx = 1
    dy = 1
    subdomain_id = 2
  []
  final_generator = 'cmg'
[]
[Physics]
  [Diffusion]
    [FiniteVolume]
      [phy1]
        diffusivity_functor = 'diff'
        # we make this physics defined everywhere to have a vector input of initial conditions
        block = '2'
        dirichlet_boundaries = 'left cylinder_1_left cylinder_2_right'
        boundary_values = '1 3 2'
        source_functor = '1'
        source_coef = '1'
      []
      [phy2]
        variable_name = v
        diffusivity_functor = 'diff'
        source_functor = '2'
        source_coef = '1'
        dirichlet_boundaries = 'cylinder_2_right'
        boundary_values = '2'
      []
    []
  []
[]
[ActionComponents]
  [cylinder_1]
    type = CylinderComponent
    dimension = 2
    radius = 2
    length = 10
    n_axial = 1
    n_radial = 1
    position = '1 0 0'
    direction = '0 1 0'
    physics = 'phy1'
    block = 'cyl1'
    initial_condition_variables = 'u'
    initial_condition_values = '1.1'
  []
  [cylinder_2]
    type = CylinderComponent
    dimension = 2
    radius = 4
    length = 1
    n_axial = 1
    n_radial = 1
    position = '2 0 0'
    direction = '0 0 1'
    physics = 'phy1 phy2'
    block = 'cyl2'
    initial_condition_variables = 'u v'
    initial_condition_values = '1.2 1.3'
  []
[]
[FunctorMaterials]
  [diff]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'diff'
    subdomain_to_prop_value = 'cyl1 1
                               2 1
                               cyl2 2'
  []
[]
[Executioner]
  type = Steady
[]
[Postprocessors]
  [min_u_c1]
    type = ElementExtremeValue
    value_type = min
    variable = u
    block = 'cyl1'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [min_u_c2]
    type = ElementExtremeValue
    value_type = min
    variable = u
    block = 'cyl2'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [min_v]
    type = ElementExtremeValue
    value_type = min
    variable = v
    block = 'cyl2'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [max_u_c1]
    type = ElementExtremeValue
    variable = u
    block = 'cyl1'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [max_u_c2]
    type = ElementExtremeValue
    variable = u
    block = 'cyl2'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [max_v]
    type = ElementExtremeValue
    variable = v
    block = 'cyl2'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [ave_u_c1]
    type = ElementAverageValue
    variable = u
    block = 'cyl1'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [ave_u_c2]
    type = ElementAverageValue
    variable = u
    block = 'cyl2'
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [ave_v]
    type = ElementAverageValue
    variable = v
    block = 'cyl2'
    execute_on = 'INITIAL TIMESTEP_END'
  []
[]
[Outputs]
  csv = true
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-mixing.i)
# This test is designed to check for energy conservation
# in separated channels. The three inlet temperatures should be
# preserved at the outlets.
rho=1.1
mu=1e-4
k=2.1
cp=5.5
advected_interp_method='upwind'
velocity_interp_method='rc'
[Mesh]
  [mesh]
    type = CartesianMeshGenerator
    dim = 2
    dx = '0.25 1.0 0.25'
    dy = '0.25 0.25 0.25'
    ix = '4 20 4'
    iy = '5 5 5'
    subdomain_id = '1 2 5 1 3 5 1 4 5'
  []
  [separator-1]
    type = SideSetsBetweenSubdomainsGenerator
    input = mesh
    primary_block = '2'
    paired_block = '3'
    new_boundary = 'separator-1'
  []
  [separator-2]
    type = SideSetsBetweenSubdomainsGenerator
    input = separator-1
    primary_block = '3'
    paired_block = '4'
    new_boundary = 'separator-2'
  []
  [jump-1]
    type = SideSetsBetweenSubdomainsGenerator
    input = separator-2
    primary_block = '1'
    paired_block = '2'
    new_boundary = jump-1
  []
  [jump-2]
    type = SideSetsBetweenSubdomainsGenerator
    input = jump-1
    primary_block = '1'
    paired_block = '3'
    new_boundary = jump-2
  []
  [jump-3]
    type = SideSetsBetweenSubdomainsGenerator
    input = jump-2
    primary_block = '1'
    paired_block = '4'
    new_boundary = jump-3
  []
  [outlet-1]
    type = SideSetsBetweenSubdomainsGenerator
    input = jump-3
    primary_block = '2'
    paired_block = '5'
    new_boundary = outlet-1
  []
  [outlet-2]
    type = SideSetsBetweenSubdomainsGenerator
    input = outlet-1
    primary_block = '3'
    paired_block = '5'
    new_boundary = outlet-2
  []
  [outlet-3]
    type = SideSetsBetweenSubdomainsGenerator
    input = outlet-2
    primary_block = '4'
    paired_block = '5'
    new_boundary = outlet-3
  []
[]
[GlobalParams]
  rhie_chow_user_object = 'rc'
  porosity = porosity
[]
[UserObjects]
  [rc]
    type = PINSFVRhieChowInterpolator
    u = superficial_vel_x
    v = superficial_vel_y
    pressure = pressure
  []
[]
[Variables]
  [superficial_vel_x]
    type = PINSFVSuperficialVelocityVariable
    initial_condition = 0.1
  []
  [superficial_vel_y]
    type = PINSFVSuperficialVelocityVariable
  []
  [pressure]
    type = BernoulliPressureVariable
    u = superficial_vel_x
    v = superficial_vel_y
    rho = ${rho}
    pressure_drop_sidesets = 'jump-1 jump-2 jump-3 outlet-1 outlet-2 outlet-3'
    pressure_drop_form_factors = '0.1 0.2 0.3 0.1 0.2 0.3'
  []
  [T_fluid]
    type = INSFVEnergyVariable
    initial_condition = 300
  []
[]
[FVKernels]
  [mass]
    type = PINSFVMassAdvection
    variable = pressure
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
  []
  [u_advection]
    type = PINSFVMomentumAdvection
    variable = superficial_vel_x
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
    momentum_component = 'x'
  []
  [u_viscosity]
    type = PINSFVMomentumDiffusion
    variable = superficial_vel_x
    momentum_component = 'x'
    mu = ${mu}
  []
  [u_pressure]
    type = PINSFVMomentumPressure
    variable = superficial_vel_x
    pressure = pressure
    momentum_component = 'x'
  []
  [u_friction]
    type = PINSFVMomentumFriction
    variable = superficial_vel_x
    momentum_component = 'x'
    Forchheimer_name = 'Forchheimer_coefficient'
    rho = ${rho}
    speed = speed
  []
  [v_advection]
    type = PINSFVMomentumAdvection
    variable = superficial_vel_y
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
    momentum_component = 'y'
  []
  [v_viscosity]
    type = PINSFVMomentumDiffusion
    variable = superficial_vel_y
    momentum_component = 'y'
    mu = ${mu}
  []
  [v_pressure]
    type = PINSFVMomentumPressure
    variable = superficial_vel_y
    pressure = pressure
    momentum_component = 'y'
  []
  [v_friction]
    type = PINSFVMomentumFriction
    variable = superficial_vel_y
    momentum_component = 'y'
    Forchheimer_name = 'Forchheimer_coefficient'
    rho = ${rho}
    speed = speed
  []
  [temp_conduction]
    type = FVDiffusion
    coeff = ${k}
    variable = T_fluid
  []
  [temp_advection]
    type = INSFVEnergyAdvection
    variable = T_fluid
  []
  [temp_source]
    type = FVBodyForce
    variable = T_fluid
    function = heating
    block = '2 3 4'
  []
[]
[Functions]
  [heating]
    type = ParsedFunction
    expression = 'if(y<0.25, 10, if(y<0.5, 20, 30))'
  []
[]
[FVBCs]
  [inlet-u]
    type = INSFVInletVelocityBC
    boundary = 'left'
    variable = superficial_vel_x
    functor = '0.1'
  []
  [inlet-v]
    type = INSFVInletVelocityBC
    boundary = 'left'
    variable = superficial_vel_y
    functor = 0
  []
  [inlet-T]
    type = FVDirichletBC
    variable = T_fluid
    boundary = 'left'
    value = 300
  []
  [walls-u]
    type = INSFVNaturalFreeSlipBC
    boundary = 'top bottom'
    variable = superficial_vel_x
    momentum_component = 'x'
  []
  [walls-v]
    type = INSFVNaturalFreeSlipBC
    boundary = 'top bottom'
    variable = superficial_vel_y
    momentum_component = 'y'
  []
  [separator-u]
    type = INSFVVelocityHydraulicSeparatorBC
    boundary = 'separator-1 separator-2'
    variable = superficial_vel_x
    momentum_component = 'x'
  []
  [separator-v]
    type = INSFVVelocityHydraulicSeparatorBC
    boundary = 'separator-1 separator-2'
    variable = superficial_vel_y
    momentum_component = 'y'
  []
  [separator-p]
    type = INSFVScalarFieldSeparatorBC
    boundary = 'separator-1 separator-2'
    variable = pressure
  []
  [separator-T]
    type = INSFVScalarFieldSeparatorBC
    boundary = 'separator-1 separator-2'
    variable = T_fluid
  []
  [outlet_p]
    type = INSFVOutletPressureBC
    boundary = 'right'
    variable = pressure
    function = 0.4
  []
[]
[FunctorMaterials]
  [porosity]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = porosity
    subdomain_to_prop_value = '1 0.8
                               2 0.7
                               3 0.6
                               4 0.5
                               5 0.8'
  []
  [darcy-1]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '1.0 1.0 1.0'
    block = '1 5'
  []
  [darcy-2]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '3.0 3.0 3.0'
    block = 2
  []
  [darcy-3]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '1.5 1.5 1.5'
    block = 3
  []
  [darcy-4]
    type = ADGenericVectorFunctorMaterial
    prop_names = 'Forchheimer_coefficient'
    prop_values = '0.75 0.75 0.75'
    block = 4
  []
  [speed]
    type = PINSFVSpeedFunctorMaterial
    superficial_vel_x = superficial_vel_x
    superficial_vel_y = superficial_vel_y
    porosity = porosity
  []
  [ins_fv]
    type = INSFVEnthalpyFunctorMaterial
    temperature = 'T_fluid'
    rho = ${rho}
    cp = ${cp}
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount'
  petsc_options_value = ' lu       NONZERO               1e-10'
  line_search = 'none'
  nl_rel_tol = 1e-10
[]
[Postprocessors]
  [outlet_T1]
    type = SideAverageValue
    variable = 'T_fluid'
    boundary = 'right'
  []
[]
[Outputs]
  csv = true
  execute_on = final
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/2d-rc-epsjump.i)
mu=1.1
rho=1.1
advected_interp_method='upwind'
velocity_interp_method='rc'
[Mesh]
  [mesh]
    type = CartesianMeshGenerator
    dim = 2
    dx = '1 1'
    dy = '0.5'
    ix = '30 30'
    iy = '20'
    subdomain_id = '1 2'
  []
[]
[GlobalParams]
  rhie_chow_user_object = 'rc'
  porosity = porosity
[]
[UserObjects]
  [rc]
    type = PINSFVRhieChowInterpolator
    u = u
    v = v
    porosity = porosity
    pressure = pressure
  []
[]
[Variables]
  [u]
    type = PINSFVSuperficialVelocityVariable
    initial_condition = 1
  []
  [v]
    type = PINSFVSuperficialVelocityVariable
    initial_condition = 1e-6
  []
  [pressure]
    type = INSFVPressureVariable
  []
[]
[AuxVariables]
  [porosity]
    type = MooseVariableFVReal
  []
[]
[ICs]
  inactive = 'porosity_continuous'
  [porosity_1]
    type = ConstantIC
    variable = porosity
    block = 1
    value = 1
  []
  [porosity_2]
    type = ConstantIC
    variable = porosity
    block = 2
    value = 0.5
  []
  [porosity_continuous]
    type = FunctionIC
    variable = porosity
    block = '1 2'
    function = smooth_jump
  []
[]
[Functions]
  [smooth_jump]
    type = ParsedFunction
    expression = '1 - 0.5 * 1 / (1 + exp(-30*(x-1)))'
  []
[]
[FVKernels]
  [mass]
    type = PINSFVMassAdvection
    variable = pressure
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
  []
  [u_advection]
    type = PINSFVMomentumAdvection
    variable = u
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
    momentum_component = 'x'
  []
  [u_viscosity]
    type = PINSFVMomentumDiffusion
    variable = u
    mu = ${mu}
    momentum_component = 'x'
  []
  [u_pressure]
    type = PINSFVMomentumPressure
    variable = u
    pressure = pressure
    momentum_component = 'x'
  []
  [v_advection]
    type = PINSFVMomentumAdvection
    variable = v
    advected_interp_method = ${advected_interp_method}
    velocity_interp_method = ${velocity_interp_method}
    rho = ${rho}
    momentum_component = 'y'
  []
  [v_viscosity]
    type = PINSFVMomentumDiffusion
    variable = v
    mu = ${mu}
    momentum_component = 'y'
  []
  [v_pressure]
    type = PINSFVMomentumPressure
    variable = v
    pressure = pressure
    momentum_component = 'y'
  []
[]
[FVBCs]
  [inlet-u]
    type = INSFVInletVelocityBC
    boundary = 'left'
    variable = u
    functor = '1'
  []
  [inlet-v]
    type = INSFVInletVelocityBC
    boundary = 'left'
    variable = v
    functor = 0
  []
  [walls-u]
    type = INSFVNaturalFreeSlipBC
    boundary = 'top bottom'
    variable = u
    momentum_component = 'x'
  []
  [walls-v]
    type = INSFVNaturalFreeSlipBC
    boundary = 'top bottom'
    variable = v
    momentum_component = 'y'
  []
  [outlet_p]
    type = INSFVOutletPressureBC
    boundary = 'right'
    variable = pressure
    function = 0.4
  []
[]
[FunctorMaterials]
  inactive = 'smooth'
  [jump]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'porosity'
    subdomain_to_prop_value = '1 1
                               2 0.5'
  []
  [smooth]
    type = ADGenericFunctionFunctorMaterial
    prop_names = 'porosity'
    prop_values = 'smooth_jump'
  []
[]
[Executioner]
  type = Steady
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_factor_shift_type'
  petsc_options_value = 'lu       NONZERO'
  line_search = 'none'
  nl_rel_tol = 1e-10
[]
[Postprocessors]
  [inlet_p]
    type = SideAverageValue
    variable = 'pressure'
    boundary = 'left'
  []
  [outlet-u]
    type = SideIntegralVariablePostprocessor
    variable = u
    boundary = 'right'
  []
[]
[Outputs]
  exodus = true
  csv = false
[]
(test/tests/postprocessors/side_average_value/side_average_functor_test.i)
[Mesh]
  inactive = 'refine'
  # U-shaped domains to have internal boundaries in
  # a variety of directions
  [cmg]
    type = CartesianMeshGenerator
    dim = 2
    dx = '1 1 1'
    dy = '3 1'
    ix = '4 5 3'
    iy = '12 4'
    subdomain_id = '1 2 1
                    1 1 1'
  []
  [internal_boundary_dir1]
    type = SideSetsBetweenSubdomainsGenerator
    input = cmg
    primary_block = 1
    paired_block = 2
    new_boundary = 'inside_1'
  []
  [internal_boundary_dir2]
    type = SideSetsBetweenSubdomainsGenerator
    input = internal_boundary_dir1
    primary_block = 2
    paired_block = 1
    new_boundary = 'inside_2'
  []
  [refine]
    type = RefineBlockGenerator
    input = internal_boundary_dir2
    block = '1 2'
    refinement = '2 1'
  []
[]
[Variables]
  [u]
    type = MooseVariableFVReal
    block = 1
  []
[]
[AuxVariables]
  [v1]
    type = MooseVariableFVReal
    block = 1
    [FVInitialCondition]
      type = FVFunctionIC
      function = 'x + y'
    []
  []
  [v2]
    type = MooseVariableFVReal
    block = 2
    [FVInitialCondition]
      type = FVFunctionIC
      function = '2*x*x - y'
    []
  []
[]
[Functions]
  [f1]
    type = ParsedFunction
    expression = 'exp(x - y)'
  []
[]
[FunctorMaterials]
  [m1]
    type = ADGenericFunctorMaterial
    prop_names = 'm1'
    prop_values = 'f1'
  []
  [m2]
    type = ADPiecewiseByBlockFunctorMaterial
    prop_name = 'm2'
    subdomain_to_prop_value = '1 12
                               2 4'
  []
[]
[FVKernels]
  [diff]
    type = FVDiffusion
    variable = u
    coeff = '1'
  []
[]
[FVBCs]
  [left]
    type = FVDirichletBC
    variable = u
    boundary = 3
    value = 0
  []
  [right]
    type = FVDirichletBC
    variable = u
    boundary = 1
    value = 1
  []
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
[]
[Postprocessors]
  # Mesh external boundaries integration
  [ext_u]
    type = SideAverageFunctorPostprocessor
    boundary = 'left top right'
    functor = u
    restrict_to_functors_domain = true
  []
  [ext_u_int]
    type = ADSideIntegralFunctorPostprocessor
    boundary = 'left top right'
    functor = u
    restrict_to_functors_domain = true
  []
  [ext_u_area]
    type = AreaPostprocessor
    boundary = 'left top right'
  []
  [ext_u_diff]
    type = ParsedPostprocessor
    pp_names = 'ext_u ext_u_int ext_u_area'
    expression = 'ext_u - ext_u_int/ext_u_area'
  []
  [ext_v1]
    type = SideAverageFunctorPostprocessor
    boundary = 'left right'
    functor = v1
  []
  [ext_v2]
    type = SideAverageFunctorPostprocessor
    boundary = 'top'
    functor = v2
    restrict_to_functors_domain = true
  []
  [ext_f1]
    type = SideAverageFunctorPostprocessor
    boundary = 'left top right'
    functor = f1
    prefactor = f1
  []
  [ext_m1]
    type = SideAverageFunctorPostprocessor
    boundary = 'left top right'
    functor = m1
    restrict_to_functors_domain = true
  []
  [ext_m2]
    type = SideAverageFunctorPostprocessor
    boundary = 'left top right'
    functor = m2
    restrict_to_functors_domain = true
  []
  # Internal to the mesh, but a side to the variables
  # With orientation of normal 1->2
  [int_s1_u]
    type = SideAverageFunctorPostprocessor
    boundary = inside_1
    functor = u
  []
  [int_s1_v1]
    type = SideAverageFunctorPostprocessor
    boundary = inside_1
    functor = v1
  []
  [int_s1_f1]
    type = SideAverageFunctorPostprocessor
    boundary = inside_1
    functor = f1
  []
  [int_s1_m1]
    type = SideAverageFunctorPostprocessor
    boundary = inside_1
    functor = m1
  []
  [int_s1_m2]
    type = SideAverageFunctorPostprocessor
    boundary = inside_1
    functor = m2
  []
  # With orientation of normal 2->1
  [int_s2_v2]
    type = SideAverageFunctorPostprocessor
    boundary = inside_2
    functor = v2
  []
  [int_s2_f1]
    type = SideAverageFunctorPostprocessor
    boundary = inside_2
    functor = f1
  []
  [int_s2_m1]
    type = SideAverageFunctorPostprocessor
    boundary = inside_2
    functor = m1
  []
  [int_s2_m2]
    type = SideAverageFunctorPostprocessor
    boundary = inside_2
    functor = m2
  []
[]
[Outputs]
  csv = true
  exodus = true
[]
[Problem]
  kernel_coverage_check = false
[]
(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
[]