- bottom_leftThe bottom left point (in x,y,z with spaces in-between).
C++ Type:libMesh::VectorValue<double>
Unit:(no unit assumed)
Controllable:No
Description:The bottom left point (in x,y,z with spaces in-between).
 - boundary_newBoundary on specified block within the bounding box to assign
C++ Type:BoundaryName
Controllable:No
Description:Boundary on specified block within the bounding box to assign
 - inputThe mesh we want to modify
C++ Type:MeshGeneratorName
Controllable:No
Description:The mesh we want to modify
 - top_rightThe bottom left point (in x,y,z with spaces in-between).
C++ Type:libMesh::VectorValue<double>
Unit:(no unit assumed)
Controllable:No
Description:The bottom left point (in x,y,z with spaces in-between).
 
SideSetsFromBoundingBoxGenerator
Defines new sidesets using currently-defined sideset IDs inside or outside of a bounding box.
Overview
This MeshGenerator can be used in two ways:
To define a new sideset on multiple boundaries (default) - provide multiple boundary names or IDs, and all nodes existing on each provided boundary within the bounding box (or outside if
location = OUTSIDE) will be assigned the new boundary name/ID.To define a new sideset only on overlapping boundaries (
boundary_id_overlap = True) - provide multiple boundary names or IDs, and all nodes within the bounding box (or outside iflocation = OUTSIDE) that are currently assigned to ALL of the listed boundary names/IDs will be assigned the new boundary name/ID.
Input Parameters
- boundary_id_overlapFalseSet to true if boundaries need to overlap on sideset to be detected.
Default:False
C++ Type:bool
Controllable:No
Description:Set to true if boundaries need to overlap on sideset to be detected.
 - locationINSIDEControl of where the subdomain id is to be set
Default:INSIDE
C++ Type:MooseEnum
Options:INSIDE, OUTSIDE
Controllable:No
Description:Control of where the subdomain id is to be set
 - replaceFalseIf true, replace the old sidesets. If false, the current sidesets (if any) will be preserved.
Default:False
C++ Type:bool
Controllable:No
Description:If true, replace the old sidesets. If false, the current sidesets (if any) will be preserved.
 
Optional Parameters
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:No
Description:Set the enabled status of the MooseObject.
 - save_with_nameKeep the mesh from this mesh generator in memory with the name specified
C++ Type:std::string
Controllable:No
Description:Keep the mesh from this mesh generator in memory with the name specified
 
Advanced Parameters
- excluded_boundariesA set of boundary names or ids whose sides will be excluded from the new sidesets. A side is only added if does not belong to any of these boundaries.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:A set of boundary names or ids whose sides will be excluded from the new sidesets. A side is only added if does not belong to any of these boundaries.
 - include_only_external_sidesFalseWhether to only include external sides when considering sides to add to the sideset
Default:False
C++ Type:bool
Controllable:No
Description:Whether to only include external sides when considering sides to add to the sideset
 - included_boundariesA set of boundary names or ids whose sides will be included in the new sidesets. A side is only added if it also belongs to one of these boundaries.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:A set of boundary names or ids whose sides will be included in the new sidesets. A side is only added if it also belongs to one of these boundaries.
 - included_neighborsA set of neighboring subdomain names or ids. A face is only added if the subdomain id of the neighbor is in this set
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:A set of neighboring subdomain names or ids. A face is only added if the subdomain id of the neighbor is in this set
 - included_subdomainsA set of subdomain names or ids whose sides will be included in the new sidesets. A side is only added if the subdomain id of the corresponding element is in this set.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:A set of subdomain names or ids whose sides will be included in the new sidesets. A side is only added if the subdomain id of the corresponding element is in this set.
 - normal0 0 0If supplied, only faces with normal equal to this, up to normal_tol, will be added to the sidesets specified
Default:0 0 0
C++ Type:libMesh::Point
Controllable:No
Description:If supplied, only faces with normal equal to this, up to normal_tol, will be added to the sidesets specified
 - normal_tol0.1If normal is supplied then faces are only added if face_normal.normal_hat >= 1 - normal_tol, where normal_hat = normal/|normal|
Default:0.1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:If normal is supplied then faces are only added if face_normal.normal_hat >= 1 - normal_tol, where normal_hat = normal/|normal|
 
Sideset Restrictions Parameters
- nemesisFalseWhether or not to output the mesh file in the nemesisformat (only if output = true)
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to output the mesh file in the nemesisformat (only if output = true)
 - outputFalseWhether or not to output the mesh file after generating the mesh
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to output the mesh file after generating the mesh
 - show_infoFalseWhether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not to show mesh info after generating the mesh (bounding box, element types, sidesets, nodesets, subdomains, etc)
 
Debugging Parameters
Input Files
- (test/tests/meshgenerators/stitch_boundary_mesh_generator/stitch_2d.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/generate_sidesets_bounding_box.i)
 - (modules/combined/examples/optimization/thermomechanical/thermomechanical_main.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/block-restriction/segregated/empty-block-segregated.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/overlapping_sidesets_not_found.i)
 - (modules/xfem/test/tests/nucleation_uo/nucleate_edge_bulk_crack_2d.i)
 - (test/tests/meshgenerators/flip_sideset_generator/flux_flip_2D.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/error_boundary_number.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/multiple_boundary_ids_3d.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/error_no_nodes_found.i)
 - (modules/combined/examples/optimization/thermomechanical/thermal_sub.i)
 - (modules/navier_stokes/test/tests/finite_volume/pins/block-restriction/with-empty-block.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/multiple_boundary_ids.i)
 - (modules/contact/test/tests/avoid-aligned-node-exception/test.i)
 - (modules/combined/test/tests/optimization/compliance_sensitivity/thermal_test.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/overlapping_sidesets.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/generate_outside.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/error_no_side_sets_found.i)
 - (modules/optimization/test/tests/executioners/constrained/shape_optimization/forward.i)
 - (test/tests/meshgenerators/sidesets_bounding_box_generator/error_no_elements_in_bounding_box.i)
 - (modules/combined/examples/optimization/thermomechanical/structural_sub.i)
 - (test/tests/meshgenerators/stitch_boundary_mesh_generator/stitch_3d.i)
 
(test/tests/meshgenerators/stitch_boundary_mesh_generator/stitch_2d.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    nx = 4
    ny = 4
    dim = 2
  []
  [block1]
    type = SubdomainBoundingBoxGenerator
    block_id = 1
    bottom_left = '0 0 0'
    top_right = '0.5 1 0'
    input = gen
  []
  [block2]
    type = SubdomainBoundingBoxGenerator
    block_id = 2
    bottom_left = '0.5 0 0'
    top_right = '1 1 0'
    input = block1
  []
  [breakmesh]
    input = block2
    type = BreakMeshByBlockGenerator
    block_pairs = '1 2'
    split_interface = true
    add_interface_on_two_sides = true
  []
  [block1_block2_top]
    type = SideSetsFromBoundingBoxGenerator
    input = breakmesh
    included_boundaries = 'Block1_Block2'
    boundary_new = '103'
    bottom_left = '0 0.5 0'
    top_right = '1 1 0'
  []
  [block1_block2_bottom]
    type = SideSetsFromBoundingBoxGenerator
    input = block1_block2_top
    included_boundaries = 'Block1_Block2'
    boundary_new = '102'
    bottom_left = '0 0.5 0'
    top_right = '1 1 0'
    location = OUTSIDE
  []
  [block2_block1_top]
    type = SideSetsFromBoundingBoxGenerator
    input = block1_block2_bottom
    included_boundaries = 'Block2_Block1'
    boundary_new = '101'
    bottom_left = '0 0.5 0'
    top_right = '1 1 0'
  []
  [block2_block1_bottom]
    type = SideSetsFromBoundingBoxGenerator
    input = block2_block1_top
    included_boundaries = 'Block2_Block1'
    boundary_new = '100'
    bottom_left = '0 0.5 0'
    top_right = '1 1 0'
    location = OUTSIDE
  []
  [stitch]
    type = StitchBoundaryMeshGenerator
    input = block2_block1_bottom
    clear_stitched_boundary_ids = false
    stitch_boundaries_pair = '101 103'
  []
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/generate_sidesets_bounding_box.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'left'
    boundary_new = 10
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.5 0.5 0'
  []
[]
[Outputs]
  exodus = true
[]
(modules/combined/examples/optimization/thermomechanical/thermomechanical_main.i)
vol_frac = 0.4
power = 2.0
E0 = 1.0e-6
E1 = 1.0
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [MeshGenerator]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 40
    ny = 40
    xmin = 0
    xmax = 40
    ymin = 0
    ymax = 40
  []
  [node]
    type = ExtraNodesetGenerator
    input = MeshGenerator
    new_boundary = hold
    nodes = 0
  []
  [push_left]
    type = ExtraNodesetGenerator
    input = node
    new_boundary = push_left
    coord = '16 0 0'
  []
  [push_center]
    type = ExtraNodesetGenerator
    input = push_left
    new_boundary = push_center
    coord = '24 0 0'
  []
  [extra]
    type = SideSetsFromBoundingBoxGenerator
    input = push_center
    bottom_left = '-0.01 17.999  0'
    top_right = '5 22.001  0'
    boundary_new = n1
    included_boundaries = left
  []
  [dirichlet_bc]
    type = SideSetsFromNodeSetsGenerator
    input = extra
  []
[]
[Variables]
  [disp_x]
  []
  [disp_y]
  []
[]
[AuxVariables]
  [mat_den]
    family = MONOMIAL
    order = FIRST
    initial_condition = 0.02
  []
  [sensitivity_one]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [sensitivity_two]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [total_sensitivity]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
[]
[AuxKernels]
  [total_sensitivity]
    type = ParsedAux
    variable = total_sensitivity
    expression = '(1-1.0e-7)*sensitivity_one + 1.0e-7*sensitivity_two'
    coupled_variables = 'sensitivity_one sensitivity_two'
    execute_on = 'LINEAR TIMESTEP_END'
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [all]
    strain = SMALL
    add_variables = true
    incremental = false
  []
[]
[BCs]
  [no_y]
    type = DirichletBC
    variable = disp_y
    boundary = hold
    value = 0.0
  []
  [no_x_symm]
    type = DirichletBC
    variable = disp_x
    boundary = right
    value = 0.0
  []
[]
[Materials]
  [elasticity_tensor]
    type = ComputeVariableIsotropicElasticityTensor
    youngs_modulus = E_phys
    poissons_ratio = poissons_ratio
    args = 'mat_den'
  []
  [E_phys]
    type = DerivativeParsedMaterial
    # Emin + (density^penal) * (E0 - Emin)
    expression = '${E1} + (mat_den ^ ${power}) * (${E1}-${E0})'
    coupled_variables = 'mat_den'
    property_name = E_phys
  []
  [poissons_ratio]
    type = GenericConstantMaterial
    prop_names = poissons_ratio
    prop_values = 0.3
  []
  [stress]
    type = ComputeLinearElasticStress
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[UserObjects]
  # We do filtering in the subapps
  [update]
    type = DensityUpdate
    density_sensitivity = total_sensitivity
    design_density = mat_den
    volume_fraction = ${vol_frac}
    execute_on = MULTIAPP_FIXED_POINT_BEGIN
  []
[]
[Executioner]
  type = Transient
  solve_type = NEWTON
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  nl_abs_tol = 1e-8
  dt = 1.0
  num_steps = 2
[]
[Outputs]
  [out]
    type = CSV
    execute_on = 'TIMESTEP_END'
  []
  print_linear_residuals = false
  exodus = true
[]
[Postprocessors]
  [mesh_volume]
    type = VolumePostprocessor
    execute_on = 'initial timestep_end'
  []
  [total_vol]
    type = ElementIntegralVariablePostprocessor
    variable = mat_den
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [vol_frac]
    type = ParsedPostprocessor
    expression = 'total_vol / mesh_volume'
    pp_names = 'total_vol mesh_volume'
  []
  [sensitivity]
    type = ElementIntegralVariablePostprocessor
    variable = total_sensitivity
  []
[]
[MultiApps]
  [sub_app_one]
    type = TransientMultiApp
    input_files = structural_sub.i
  []
  [sub_app_two]
    type = TransientMultiApp
    input_files = thermal_sub.i
  []
[]
[Transfers]
  # First SUB-APP: STRUCTURAL
  # To subapp densities
  [subapp_one_density]
    type = MultiAppCopyTransfer
    to_multi_app = sub_app_one
    source_variable = mat_den # Here
    variable = mat_den
  []
  # From subapp sensitivity
  [subapp_one_sensitivity]
    type = MultiAppCopyTransfer
    from_multi_app = sub_app_one
    source_variable = Dc # sensitivity_var
    variable = sensitivity_one # Here
  []
  # Second SUB-APP: HEAT CONDUCTIVITY
  # To subapp densities
  [subapp_two_density]
    type = MultiAppCopyTransfer
    to_multi_app = sub_app_two
    source_variable = mat_den # Here
    variable = mat_den
  []
  # From subapp sensitivity
  [subapp_two_sensitivity]
    type = MultiAppCopyTransfer
    from_multi_app = sub_app_two
    source_variable = Tc # sensitivity_var
    variable = sensitivity_two # Here
  []
[]
(modules/navier_stokes/test/tests/finite_volume/pins/block-restriction/segregated/empty-block-segregated.i)
mu = 1.2
rho_fluid = 0.2
k_fluid = 1.1
cp_fluid = 2.3
T_cold = 310
alpha = 1e-3
Q = 200
pressure_tag = "pressure_grad"
[Problem]
  kernel_coverage_check = false
[]
[GlobalParams]
  rhie_chow_user_object = 'rc'
  velocity_interp_method = 'rc'
  advected_interp_method = 'average'
[]
[Mesh]
  [cmg]
    type = CartesianMeshGenerator
    dim = 2
    dx = '0.3683 0.0127'
    dy = '0.0127 0.2292 2.5146 0.2292 0.0127'
    ix = '2 1'
    iy = '1 2 3 2 1'
    subdomain_id = '0 0
                    1 0
                    2 0
                    1 0
                    0 0
                    '
  []
  [rename_block_name]
    type = RenameBlockGenerator
    input = cmg
    old_block = '0 1 2'
    new_block = 'wall_block spacer_block porous_block'
  []
  [solid_fluid_interface_1]
    type = SideSetsBetweenSubdomainsGenerator
    input = rename_block_name
    primary_block = porous_block
    paired_block = wall_block
    new_boundary = 'solid_fluid_interface'
  []
  [solid_fluid_interface_2]
    type = SideSetsBetweenSubdomainsGenerator
    input = solid_fluid_interface_1
    primary_block = spacer_block
    paired_block = wall_block
    new_boundary = 'solid_fluid_interface'
  []
  [wall_left_boundary_1]
    type = SideSetsFromBoundingBoxGenerator
    input = solid_fluid_interface_2
    bottom_left = '0 0 0'
    top_right = '0.1 0.0127 0'
    included_boundaries = left
    boundary_new = wall_left
  []
  [wall_left_boundary_2]
    type = SideSetsFromBoundingBoxGenerator
    input = wall_left_boundary_1
    bottom_left = '0 2.9857 0'
    top_right = '0.1 2.9984 0'
    included_boundaries = left
    boundary_new = wall_left
  []
  [fluid_left_boundary]
    type = SideSetsFromBoundingBoxGenerator
    input = wall_left_boundary_2
    bottom_left = '0 0.0127 0'
    top_right = '0.1 2.9857 0'
    included_boundaries = left
    boundary_new = fluid_left
  []
  coord_type = RZ
  rz_coord_axis = Y
[]
[UserObjects]
  [rc]
    type = PINSFVRhieChowInterpolatorSegregated
    u = superficial_vel_x
    v = superficial_vel_y
    pressure = pressure
    porosity = porosity
    block = 'spacer_block porous_block'
  []
[]
[Problem]
  nl_sys_names = 'u_system v_system pressure_system t_system'
  previous_nl_solution_required = true
  error_on_jacobian_nonzero_reallocation = true
[]
[Variables]
  [superficial_vel_x]
    type = PINSFVSuperficialVelocityVariable
    block = 'spacer_block porous_block'
    solver_sys = u_system
  []
  [superficial_vel_y]
    type = PINSFVSuperficialVelocityVariable
    block = 'spacer_block porous_block'
    solver_sys = v_system
  []
  [pressure]
    type = INSFVPressureVariable
    block = 'spacer_block porous_block'
    solver_sys = pressure_system
  []
  [T_fluid]
    type = INSFVEnergyVariable
    block = 'spacer_block porous_block'
    solver_sys = t_system
  []
[]
[AuxVariables]
  [porosity]
    type = MooseVariableFVReal
    block = 'spacer_block porous_block'
  []
[]
[FVKernels]
  [u_advection]
    type = PINSFVMomentumAdvection
    variable = superficial_vel_x
    rho = ${rho_fluid}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_viscosity]
    type = PINSFVMomentumDiffusion
    variable = superficial_vel_x
    mu = ${mu}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_pressure]
    type = PINSFVMomentumPressure
    variable = superficial_vel_x
    momentum_component = 'x'
    pressure = pressure
    block = 'spacer_block porous_block'
    porosity = porosity
    extra_vector_tags = ${pressure_tag}
  []
  [u_buoyancy]
    type = PINSFVMomentumBoussinesq
    variable = superficial_vel_x
    T_fluid = T_fluid
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    ref_temperature = ${T_cold}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_gravity]
    type = PINSFVMomentumGravity
    variable = superficial_vel_x
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_advection]
    type = PINSFVMomentumAdvection
    variable = superficial_vel_y
    rho = ${rho_fluid}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_viscosity]
    type = PINSFVMomentumDiffusion
    variable = superficial_vel_y
    mu = ${mu}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_pressure]
    type = PINSFVMomentumPressure
    variable = superficial_vel_y
    momentum_component = 'y'
    pressure = pressure
    block = 'spacer_block porous_block'
    porosity = porosity
    extra_vector_tags = ${pressure_tag}
  []
  [v_buoyancy]
    type = PINSFVMomentumBoussinesq
    variable = superficial_vel_y
    T_fluid = T_fluid
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    ref_temperature = ${T_cold}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_gravity]
    type = PINSFVMomentumGravity
    variable = superficial_vel_y
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [temp_conduction]
    type = PINSFVEnergyDiffusion
    k = 'k_fluid'
    variable = T_fluid
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [temp_advection]
    type = PINSFVEnergyAdvection
    variable = T_fluid
    block = 'spacer_block porous_block'
    boundaries_to_force = fluid_left
  []
  [heat_source]
    type = FVBodyForce
    variable = T_fluid
    function = ${Q}
    block = 'porous_block'
  []
  [p_diffusion]
    type = FVAnisotropicDiffusion
    variable = pressure
    coeff = "Ainv"
    coeff_interp_method = 'average'
    block = 'spacer_block porous_block'
  []
  [p_source]
    type = FVDivergence
    variable = pressure
    vector_field = "HbyA"
    force_boundary_execution = true
    block = 'spacer_block porous_block'
  []
[]
[FVBCs]
  [no_slip_x]
    type = INSFVNoSlipWallBC
    variable = superficial_vel_x
    boundary = 'solid_fluid_interface'
    function = 0
  []
  [no_slip_y]
    type = INSFVNoSlipWallBC
    variable = superficial_vel_y
    boundary = 'solid_fluid_interface'
    function = 0
  []
  [reflective_x]
    type = INSFVSymmetryVelocityBC
    variable = superficial_vel_x
    boundary = fluid_left
    momentum_component = 'x'
    mu = ${mu}
    u = superficial_vel_x
    v = superficial_vel_y
  []
  [reflective_y]
    type = INSFVSymmetryVelocityBC
    variable = superficial_vel_y
    boundary = fluid_left
    momentum_component = 'y'
    mu = ${mu}
    u = superficial_vel_x
    v = superficial_vel_y
  []
  [reflective_p]
    type = INSFVSymmetryPressureBC
    boundary = fluid_left
    variable = pressure
  []
  [T_reflective]
    type = FVNeumannBC
    variable = T_fluid
    boundary = fluid_left
    value = 0
  []
  [T_cold_boundary]
    type = FVDirichletBC
    variable = T_fluid
    boundary = solid_fluid_interface
    value = ${T_cold}
  []
[]
[ICs]
  [porosity_spacer]
    type = ConstantIC
    variable = porosity
    block = spacer_block
    value = 1.0
  []
  [porosity_fuel]
    type = ConstantIC
    variable = porosity
    block = porous_block
    value = 0.1
  []
  [temp_ic_fluid]
    type = ConstantIC
    variable = T_fluid
    value = ${T_cold}
    block = 'spacer_block porous_block'
  []
  [superficial_vel_x]
    type = ConstantIC
    variable = superficial_vel_x
    value = 1E-5
    block = 'spacer_block porous_block'
  []
  [superficial_vel_y]
    type = ConstantIC
    variable = superficial_vel_y
    value = 1E-5
    block = 'spacer_block porous_block'
  []
[]
[FunctorMaterials]
  [functor_constants_fluid]
    type = ADGenericFunctorMaterial
    prop_names = 'alpha_b cp k_fluid'
    prop_values = '${alpha} ${cp_fluid} ${k_fluid}'
    block = 'spacer_block porous_block'
  []
  [density_fluid]
    type = INSFVEnthalpyFunctorMaterial
    temperature = 'T_fluid'
    rho = ${rho_fluid}
    block = 'spacer_block porous_block'
  []
  [functor_constants_steel]
    # We need this to avoid errors for materials not existing on every block
    type = ADGenericFunctorMaterial
    prop_names = 'dummy'
    prop_values = 0.0
    block = wall_block
  []
[]
[Executioner]
  type = SIMPLENonlinearAssembly
  momentum_l_abs_tol = 1e-14
  pressure_l_abs_tol = 1e-14
  energy_l_abs_tol = 1e-14
  momentum_l_tol = 0
  pressure_l_tol = 0
  energy_l_tol = 0
  rhie_chow_user_object = 'rc'
  momentum_systems = 'u_system v_system'
  pressure_system = 'pressure_system'
  energy_system = 't_system'
  pressure_gradient_tag = ${pressure_tag}
  momentum_equation_relaxation = 0.85
  energy_equation_relaxation = 0.95
  pressure_variable_relaxation = 0.45
  num_iterations = 150
  pressure_absolute_tolerance = 1e-13
  momentum_absolute_tolerance = 1e-13
  pin_pressure = true
  pressure_pin_point = '0.2 1.5 0.0'
  pressure_pin_value = 0
  print_fields = false
  continue_on_max_its = true
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/overlapping_sidesets_not_found.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 10
    ny = 10
    nz = 10
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'bottom top'
    boundary_new = 11
    bottom_left = '-1.1 -1.1 -1.1'
    top_right = '1.1 1.1 1.1'
    boundary_id_overlap = true
  [../]
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./BCone]
    type = DirichletBC
    variable = u
    boundary = 'left'
    value = 1
  [../]
  [./BCtwo]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 0
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/xfem/test/tests/nucleation_uo/nucleate_edge_bulk_crack_2d.i)
# Nucleate cracks in the bulk and then on the edges
# checking that the domain integral fracture integrals
# are being computed at every crack tip (6 crack tips)
[GlobalParams]
  displacements = 'disp_x disp_y'
  volumetric_locking_correction = true
[]
[XFEM]
  geometric_cut_userobjects = 'cut_mesh2'
  qrule = volfrac
  output_cut_plane = true
[]
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 60
    ny = 10
    xmin = -3
    xmax = 3
    ymin = 0.0
    ymax = 1.0
    elem_type = QUAD4
  []
  [top_left]
    type = BoundingBoxNodeSetGenerator
    new_boundary = pull_top_left
    bottom_left = '-3.01 0.99 0'
    top_right = '-2.99 1.01 0'
    input = gen
  []
  [top_mid_left]
    type = BoundingBoxNodeSetGenerator
    new_boundary = pull_mid_left
    bottom_left = '-1.01 0.99 0'
    top_right = '-0.99 1.01 0'
    input = top_left
  []
  [top_mid_right]
    type = BoundingBoxNodeSetGenerator
    new_boundary = pull_mid_right
    bottom_left = '0.99 0.99 0'
    top_right = '1.01 1.01 0'
    input = top_mid_left
  []
  [top_right]
    type = BoundingBoxNodeSetGenerator
    new_boundary = pull_top_right
    bottom_left = '2.99 0.99 0'
    top_right = '3.01 1.01 0'
    input = top_mid_right
  []
  [top_mid_left_ss]
    type = SideSetsFromBoundingBoxGenerator
    input = top_right
    bottom_left = '-2.21 0.89 0'
    top_right = '-1.79 1.01 0'
    boundary_new = top_mid_left_ss
    included_boundaries = top
  []
  [top_mid_ss]
    type = SideSetsFromBoundingBoxGenerator
    input = top_mid_left_ss
    bottom_left = '-0.21 0.89 0'
    top_right = '0.21 1.01 0'
    boundary_new = top_mid_ss
    included_boundaries = top
  []
  [top_mid_right_ss]
    type = SideSetsFromBoundingBoxGenerator
    input = top_mid_ss
    bottom_left = '1.79 0.89 0'
    top_right = '2.21 1.01 0'
    boundary_new = top_mid_right_ss
    included_boundaries = top
  []
  [nucleation_strip]
    # strip in middle of domain where cracks can nucleate
    type = ParsedSubdomainMeshGenerator
    input = top_mid_right_ss
    combinatorial_geometry = 'y > 0.39 & y < 0.51'
    block_id = 10
  []
[]
[DomainIntegral]
  integrals = 'InteractionIntegralKI InteractionIntegralKII'
  displacements = 'disp_x disp_y'
  crack_front_points_provider = cut_mesh2
  2d = true
  number_points_from_provider = 0
  crack_direction_method = CurvedCrackFront
  radius_inner = '0.15'
  radius_outer = '0.45'
  poissons_ratio = 0.3
  youngs_modulus = 207000
  block = 0
  incremental = false
[]
[UserObjects]
  [nucleate]
    type = MeshCut2DRankTwoTensorNucleation
    tensor = stress
    scalar_type = MaxPrincipal
    nucleation_threshold = nucleation_threshold
    # initiate_on_boundary = 'left right'
    nucleation_radius = .41
    nucleation_length = 0.21
  []
  [cut_mesh2]
    type = MeshCut2DFractureUserObject
    mesh_file = make_edge_crack_in.e
    k_critical = 230
    growth_increment = 0.11
    nucleate_uo = nucleate
    execute_on = 'XFEM_MARK'
  []
[]
[AuxVariables]
  [nucleation_threshold]
    order = CONSTANT
    family = MONOMIAL
  []
[]
[ICs]
  [nucleation_bulk]
    type = ConstantIC
    value = 10000
    variable = nucleation_threshold
    block = 0
  []
  [nucleation_weak]
    type = FunctionIC
    function = nucleation_x
    variable = nucleation_threshold
    block = 10
  []
[]
[Functions]
  [nucleation_x]
    type = ParsedFunction
    expression = 'A*cos(pi*x)+D'
    symbol_names = 'A D'
    symbol_values = '100 200'
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [all]
    strain = SMALL
    planar_formulation = PLANE_STRAIN
    add_variables = true
  []
[]
[Functions]
  [bc_pull_edge]
    type = ParsedFunction
    expression = 0.0004*t
  []
  [bc_pull_mid]
    type = ParsedFunction
    expression = 0.0005*t
  []
[]
[BCs]
  [top_edge_nodes]
    type = FunctionDirichletBC
    boundary = 'pull_top_left pull_top_right'
    variable = disp_y
    function = bc_pull_edge
  []
  [top_mid_nodes]
    type = FunctionDirichletBC
    boundary = 'pull_mid_left pull_mid_right'
    variable = disp_y
    function = bc_pull_mid
  []
  # [top_middle]
  #   type = NeumannBC
  #   boundary = 'top_mid_left_ss top_mid_ss top_mid_right_ss'
  #   variable = disp_y
  #   value = -2000
  # []
  [top_middle]
    type = DirichletBC
    boundary = 'top_mid_left_ss top_mid_ss top_mid_right_ss'
    variable = disp_y
    value = 0
  []
  [bottom_x]
    type = DirichletBC
    boundary = bottom
    variable = disp_x
    value = 0.0
  []
  [bottom_y]
    type = DirichletBC
    boundary = bottom
    variable = disp_y
    value = 0.0
  []
[]
[Materials]
  [elasticity_tensor]
    type = ComputeIsotropicElasticityTensor
    youngs_modulus = 207000
    poissons_ratio = 0.3
  []
  [stress]
    type = ComputeLinearElasticStress
  []
[]
[Executioner]
  type = Transient
  solve_type = 'NEWTON'
  petsc_options_iname = '-ksp_type -pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'gmres lu superlu_dist'
  line_search = 'none'
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
  reuse_preconditioner = true
  reuse_preconditioner_max_linear_its = 25
  # controls for linear iterations
  l_max_its = 100
  l_tol = 1e-2
  # controls for nonlinear iterations
  nl_max_its = 15
  nl_rel_tol = 1e-8
  nl_abs_tol = 1e-9
  # time control
  start_time = 0.0
  dt = 1.0
  end_time = 10
  max_xfem_update = 100
[]
[Outputs]
  csv = true
  execute_on = FINAL
  # exodus = true
  # [xfemcutter]
  #   type = XFEMCutMeshOutput
  #   xfem_cutter_uo = cut_mesh2
  # []
  [console]
    type = Console
    output_linear = false
    output_nonlinear = false
  []
[]
(test/tests/meshgenerators/flip_sideset_generator/flux_flip_2D.i)
[Mesh]
    [gmg]
        type = GeneratedMeshGenerator
        dim = 2
        nx = 3
        ny = 3
        xmax = 3
        ymax = 3
    []
    [s1]
        type = ParsedGenerateSideset
        input = gmg
        combinatorial_geometry = 'x > 0.9 & x < 1.1 & y > -0.1 & y < 1.1'
        normal = '1 0 0'
        new_sideset_name = s1
    []
    [s2]
        type = ParsedGenerateSideset
        input = s1
        combinatorial_geometry = 'x > 0.9 & x < 2.1 & y > 0.9 & y < 1.1'
        normal = '0 1 0'
        new_sideset_name = s2
    []
    [s3]
        type = ParsedGenerateSideset
        input = s2
        combinatorial_geometry = 'x > 1.9 & x < 2.1 & y > 0.9 & y < 2.1'
        normal = '1 0 0'
        new_sideset_name = s3
    []
    [s4]
        type = ParsedGenerateSideset
        input = s3
        combinatorial_geometry = 'x > 1.9 & x < 3.1 & y > 1.9 & y < 2.1'
        normal = '0 1 0'
        new_sideset_name = s4
    []
    [sideset]
        type = SideSetsFromBoundingBoxGenerator
        input = s4
        bottom_left = '0 0 0'
        top_right = '3 3 3'
        included_boundaries = 's1 s2 s3 s4'
        boundary_new = 's_combined'
    []
    [flip]
        type = FlipSidesetGenerator
        input = sideset
        boundary = s_combined
    []
[]
[AuxVariables]
    [u]
    []
[]
[AuxKernels]
    [diffusion]
        type = FunctionAux
        variable = u
        function = func
    []
[]
[Functions]
    [func]
        type = ParsedFunction
        expression = x+y
    []
[]
[Problem]
    type = FEProblem
    solve = false
[]
[Postprocessors]
    [flux]
        type = SideDiffusiveFluxIntegral
        variable = u
        boundary = s_combined
        diffusivity = 1
    []
    [area]
        type = AreaPostprocessor
        boundary = s_combined
    []
[]
[Executioner]
    type = Steady
[]
[Outputs]
    csv = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/error_boundary_number.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    parallel_type = replicated
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'right'
    boundary_new = 11
    bottom_left = '0.5 0.5 0'
    top_right = '1.9 1.9 0'
  []
  [./createNewSidesetTwo]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetOne
    included_boundaries = 'left'
    boundary_new = 10
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.3 0.3 0'
    boundary_id_overlap = true
  [../]
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/multiple_boundary_ids_3d.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 10
    ny = 10
    nz = 10
    #parallel_type = replicated
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'left bottom front'
    boundary_new = 10
    bottom_left = '-0.1 -0.1 -0.1'
    top_right = '0.1 0.2 0.3'
  []
  [./createNewSidesetTwo]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetOne
    included_boundaries = 'right top back'
    boundary_new = 11
    bottom_left = '0.6 0.7 0.8'
    top_right = '1.1 1.1 1.1'
  []
  [./createNewSidesetThree]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetTwo
    included_boundaries = 'left top back'
    boundary_new = 12
    bottom_left = '-0.1 0.9 0.9'
    top_right = '0.1 1.1 1.1'
  []
  [./createNewSidesetFour]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetThree
    included_boundaries = 'front'
    boundary_new = 13
    bottom_left = '0.4 0.4 0.9'
    top_right = '0.6 0.6 1.1'
  [../]
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./firstBC]
    type = DirichletBC
    variable = u
    boundary = 10
    value = 1
  [../]
  [./secondBC]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 0
  [../]
  [./thirdBC]
    type = DirichletBC
    variable = u
    boundary = 12
    value = 0
  [../]
  [./fourthBC]
    type = DirichletBC
    variable = u
    boundary = 13
    value = 0.5
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/error_no_nodes_found.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    #parallel_type = replicated
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'right'
    boundary_new = 11
    bottom_left = '0.5 0.5 0'
    top_right = '1.9 1.9 0'
  []
  [./createNewSidesetTwo]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetOne
    included_boundaries = 'top right'
    boundary_new = 10
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.7 0.3 0'
    boundary_id_overlap = true
  []
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./leftBC]
    type = DirichletBC
    variable = u
    boundary = 10
    value = 1
  [../]
  [./rightBC]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 0
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/combined/examples/optimization/thermomechanical/thermal_sub.i)
vol_frac = 0.4
power = 2.0
E0 = 1.0e-6
E1 = 1.0
rho0 = 0.0
rho1 = 1.0
C0 = 1.0e-6
C1 = 1.0
TC0 = 1.0e-16
TC1 = 1.0
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [MeshGenerator]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 40
    ny = 40
    xmin = 0
    xmax = 40
    ymin = 0
    ymax = 40
  []
  [node]
    type = ExtraNodesetGenerator
    input = MeshGenerator
    new_boundary = hold
    nodes = 0
  []
  [push_left]
    type = ExtraNodesetGenerator
    input = node
    new_boundary = push_left
    coord = '16 0 0'
  []
  [push_center]
    type = ExtraNodesetGenerator
    input = push_left
    new_boundary = push_center
    coord = '24 0 0'
  []
  [extra]
    type = SideSetsFromBoundingBoxGenerator
    input = push_center
    bottom_left = '-0.01 17.999  0'
    top_right = '5 22.001  0'
    boundary_new = n1
    included_boundaries = left
  []
  [dirichlet_bc]
    type = SideSetsFromNodeSetsGenerator
    input = extra
  []
[]
[Variables]
  [disp_x]
  []
  [disp_y]
  []
  [temp]
    initial_condition = 100.0
  []
[]
[AuxVariables]
  [Dc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [Cc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [Tc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [Cost]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [mat_den]
    family = MONOMIAL
    order = FIRST
    initial_condition = ${vol_frac}
  []
[]
[AuxKernels]
  [Cost]
    type = MaterialRealAux
    variable = Cost
    property = Cost_mat
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temp
    diffusion_coefficient = thermal_cond
  []
  [heat_source]
    type = HeatSource
    value = 1e-2 # W/m^3
    variable = temp
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [all]
    strain = SMALL
    add_variables = true
    incremental = false
  []
[]
[BCs]
  [no_y]
    type = DirichletBC
    variable = disp_y
    boundary = hold
    value = 0.0
  []
  [no_x_symm]
    type = DirichletBC
    variable = disp_x
    boundary = right
    value = 0.0
  []
  [left_n1]
    type = DirichletBC
    variable = temp
    boundary = n1
    value = 0.0
  []
  [top]
    type = NeumannBC
    variable = temp
    boundary = top
    value = 0
  []
  [bottom]
    type = NeumannBC
    variable = temp
    boundary = bottom
    value = 0
  []
  [right]
    type = NeumannBC
    variable = temp
    boundary = right
    value = 0
  []
  [left]
    type = NeumannBC
    variable = temp
    boundary = left
    value = 0
  []
[]
[NodalKernels]
  [push_left]
    type = NodalGravity
    variable = disp_y
    boundary = push_left
    gravity_value = 0.0 # -1e-8
    mass = 1
  []
  [push_center]
    type = NodalGravity
    variable = disp_y
    boundary = push_center
    gravity_value = 0.0 # -1e-8
    mass = 1
  []
[]
[Materials]
  [thermal_cond]
    type = DerivativeParsedMaterial
    # ordered multimaterial simp
    expression = "A1:=(${TC0}-${TC1})/(${rho0}^${power}-${rho1}^${power}); "
                 "B1:=${TC0}-A1*${rho0}^${power}; TC1:=A1*mat_den^${power}+B1; TC1"
    coupled_variables = 'mat_den'
    property_name = thermal_cond
    outputs = 'exodus'
  []
  [thermal_compliance]
    type = ThermalCompliance
    temperature = temp
    thermal_conductivity = thermal_cond
    outputs = 'exodus'
  []
  [elasticity_tensor]
    type = ComputeVariableIsotropicElasticityTensor
    youngs_modulus = E_phys
    poissons_ratio = poissons_ratio
    args = 'mat_den'
  []
  [E_phys]
    type = DerivativeParsedMaterial
    # ordered multimaterial simp
    expression = "A1:=(${E0}-${E1})/(${rho0}^${power}-${rho1}^${power}); "
                 "B1:=${E0}-A1*${rho0}^${power}; E1:=A1*mat_den^${power}+B1; E1"
    coupled_variables = 'mat_den'
    property_name = E_phys
  []
  [Cost_mat]
    type = DerivativeParsedMaterial
    # ordered multimaterial simp
    expression = "A1:=(${C0}-${C1})/(${rho0}^(1/${power})-${rho1}^(1/${power})); "
                 "B1:=${C0}-A1*${rho0}^(1/${power}); C1:=A1*mat_den^(1/${power})+B1; C1"
    coupled_variables = 'mat_den'
    property_name = Cost_mat
  []
  [CostDensity]
    type = ParsedMaterial
    property_name = CostDensity
    coupled_variables = 'mat_den Cost'
    expression = 'mat_den*Cost'
  []
  [poissons_ratio]
    type = GenericConstantMaterial
    prop_names = poissons_ratio
    prop_values = 0.3
  []
  [stress]
    type = ComputeLinearElasticStress
  []
  [dc]
    type = ComplianceSensitivity
    design_density = mat_den
    youngs_modulus = E_phys
  []
  [cc]
    type = CostSensitivity
    design_density = mat_den
    cost = Cost_mat
    outputs = 'exodus'
  []
  [tc]
    type = ThermalSensitivity
    design_density = mat_den
    thermal_conductivity = thermal_cond
    temperature = temp
    outputs = 'exodus'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[UserObjects]
  [rad_avg]
    type = RadialAverage
    radius = 0.1
    weights = linear
    prop_name = sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  [rad_avg_cost]
    type = RadialAverage
    radius = 0.1
    weights = linear
    prop_name = cost_sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  [rad_avg_thermal]
    type = RadialAverage
    radius = 0.1
    weights = linear
    prop_name = thermal_sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  # Provides Dc
  [calc_sense]
    type = SensitivityFilter
    density_sensitivity = Dc
    design_density = mat_den
    filter_UO = rad_avg
    execute_on = TIMESTEP_END
    force_postaux = true
  []
  # Provides Cc
  [calc_sense_cost]
    type = SensitivityFilter
    density_sensitivity = Cc
    design_density = mat_den
    filter_UO = rad_avg_cost
    execute_on = TIMESTEP_END
    force_postaux = true
  []
  # Provides Tc
  [calc_sense_thermal]
    type = SensitivityFilter
    density_sensitivity = Tc
    design_density = mat_den
    filter_UO = rad_avg_thermal
    execute_on = TIMESTEP_END
    force_postaux = true
  []
[]
[Executioner]
  type = Transient
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  nl_abs_tol = 1e-12
  dt = 1.0
  num_steps = 500
[]
[Outputs]
  exodus = true
  [out]
    type = CSV
    execute_on = 'TIMESTEP_END'
  []
  print_linear_residuals = false
[]
[Postprocessors]
  [right_flux]
    type = SideDiffusiveFluxAverage
    variable = temp
    boundary = right
    diffusivity = 10
  []
  [mesh_volume]
    type = VolumePostprocessor
    execute_on = 'initial timestep_end'
  []
  [total_vol]
    type = ElementIntegralVariablePostprocessor
    variable = mat_den
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [vol_frac]
    type = ParsedPostprocessor
    expression = 'total_vol / mesh_volume'
    pp_names = 'total_vol mesh_volume'
  []
  [sensitivity]
    type = ElementIntegralMaterialProperty
    mat_prop = sensitivity
  []
  [cost_sensitivity]
    type = ElementIntegralMaterialProperty
    mat_prop = cost_sensitivity
  []
  [cost]
    type = ElementIntegralMaterialProperty
    mat_prop = CostDensity
  []
  [cost_frac]
    type = ParsedPostprocessor
    expression = 'cost / mesh_volume'
    pp_names = 'cost mesh_volume'
  []
  [objective]
    type = ElementIntegralMaterialProperty
    mat_prop = strain_energy_density
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [objective_thermal]
    type = ElementIntegralMaterialProperty
    mat_prop = thermal_compliance
    execute_on = 'INITIAL TIMESTEP_END'
  []
[]
(modules/navier_stokes/test/tests/finite_volume/pins/block-restriction/with-empty-block.i)
mu = 1.2
rho_fluid = 0.2
k_fluid = 1.1
cp_fluid = 2.3
T_cold = 310
alpha = 1e-3
Q = 200
[Problem]
  kernel_coverage_check = false
[]
[GlobalParams]
  rhie_chow_user_object = 'rc'
  velocity_interp_method = 'rc'
  advected_interp_method = 'average'
[]
[Mesh]
  [cmg]
    type = CartesianMeshGenerator
    dim = 2
    dx = '0.3683 0.0127'
    dy = '0.0127 0.2292 2.5146 0.2292 0.0127'
    ix = '2 1'
    iy = '1 2 3 2 1'
    subdomain_id = '0 0
                    1 0
                    2 0
                    1 0
                    0 0
                    '
  []
  [rename_block_name]
    type = RenameBlockGenerator
    input = cmg
    old_block = '0 1 2'
    new_block = 'wall_block spacer_block porous_block'
  []
  [solid_fluid_interface_1]
    type = SideSetsBetweenSubdomainsGenerator
    input = rename_block_name
    primary_block = porous_block
    paired_block = wall_block
    new_boundary = 'solid_fluid_interface'
  []
  [solid_fluid_interface_2]
    type = SideSetsBetweenSubdomainsGenerator
    input = solid_fluid_interface_1
    primary_block = spacer_block
    paired_block = wall_block
    new_boundary = 'solid_fluid_interface'
  []
  [wall_left_boundary_1]
    type = SideSetsFromBoundingBoxGenerator
    input = solid_fluid_interface_2
    bottom_left = '0 0 0'
    top_right = '0.1 0.0127 0'
    included_boundaries = left
    boundary_new = wall_left
  []
  [wall_left_boundary_2]
    type = SideSetsFromBoundingBoxGenerator
    input = wall_left_boundary_1
    bottom_left = '0 2.9857 0'
    top_right = '0.1 2.9984 0'
    included_boundaries = left
    boundary_new = wall_left
  []
  [fluid_left_boundary]
    type = SideSetsFromBoundingBoxGenerator
    input = wall_left_boundary_2
    bottom_left = '0 0.0127 0'
    top_right = '0.1 2.9857 0'
    included_boundaries = left
    boundary_new = fluid_left
  []
  coord_type = RZ
  rz_coord_axis = Y
[]
[UserObjects]
  [rc]
    type = PINSFVRhieChowInterpolator
    u = superficial_vel_x
    v = superficial_vel_y
    pressure = pressure
    porosity = porosity
    block = 'spacer_block porous_block'
  []
[]
[Variables]
  [superficial_vel_x]
    type = PINSFVSuperficialVelocityVariable
    block = 'spacer_block porous_block'
  []
  [superficial_vel_y]
    type = PINSFVSuperficialVelocityVariable
    block = 'spacer_block porous_block'
  []
  [pressure]
    type = INSFVPressureVariable
    block = 'spacer_block porous_block'
  []
  [T_fluid]
    type = INSFVEnergyVariable
    block = 'spacer_block porous_block'
  []
  [lambda]
    family = SCALAR
    order = FIRST
    block = 'spacer_block porous_block'
  []
[]
[AuxVariables]
  [porosity]
    type = MooseVariableFVReal
    block = 'spacer_block porous_block'
  []
[]
[FVKernels]
  # No mass time derivative because imcompressible (derivative = 0)
  [mass]
    type = PINSFVMassAdvection
    variable = pressure
    rho = ${rho_fluid}
    block = 'spacer_block porous_block'
  []
  [mean_zero_pressure]
    type = FVIntegralValueConstraint
    variable = pressure
    lambda = lambda
    block = 'spacer_block porous_block'
  []
  [u_advection]
    type = PINSFVMomentumAdvection
    variable = superficial_vel_x
    rho = ${rho_fluid}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_viscosity]
    type = PINSFVMomentumDiffusion
    variable = superficial_vel_x
    mu = ${mu}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_pressure]
    type = PINSFVMomentumPressure
    variable = superficial_vel_x
    momentum_component = 'x'
    pressure = pressure
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_buoyancy]
    type = PINSFVMomentumBoussinesq
    variable = superficial_vel_x
    T_fluid = T_fluid
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    ref_temperature = ${T_cold}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [u_gravity]
    type = PINSFVMomentumGravity
    variable = superficial_vel_x
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    momentum_component = 'x'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_advection]
    type = PINSFVMomentumAdvection
    variable = superficial_vel_y
    rho = ${rho_fluid}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_viscosity]
    type = PINSFVMomentumDiffusion
    variable = superficial_vel_y
    mu = ${mu}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_pressure]
    type = PINSFVMomentumPressure
    variable = superficial_vel_y
    momentum_component = 'y'
    pressure = pressure
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_buoyancy]
    type = PINSFVMomentumBoussinesq
    variable = superficial_vel_y
    T_fluid = T_fluid
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    ref_temperature = ${T_cold}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [v_gravity]
    type = PINSFVMomentumGravity
    variable = superficial_vel_y
    gravity = '0 -1 0'
    rho = ${rho_fluid}
    momentum_component = 'y'
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [temp_conduction]
    type = PINSFVEnergyDiffusion
    k = 'k_fluid'
    variable = T_fluid
    block = 'spacer_block porous_block'
    porosity = porosity
  []
  [temp_advection]
    type = PINSFVEnergyAdvection
    variable = T_fluid
    block = 'spacer_block porous_block'
  []
  [heat_source]
    type = FVBodyForce
    variable = T_fluid
    function = ${Q}
    block = 'porous_block'
  []
[]
[FVBCs]
  [no_slip_x]
    type = INSFVNoSlipWallBC
    variable = superficial_vel_x
    boundary = 'solid_fluid_interface'
    function = 0
  []
  [no_slip_y]
    type = INSFVNoSlipWallBC
    variable = superficial_vel_y
    boundary = 'solid_fluid_interface'
    function = 0
  []
  [reflective_x]
    type = INSFVSymmetryVelocityBC
    variable = superficial_vel_x
    boundary = fluid_left
    momentum_component = 'x'
    mu = ${mu}
    u = superficial_vel_x
    v = superficial_vel_y
  []
  [reflective_y]
    type = INSFVSymmetryVelocityBC
    variable = superficial_vel_y
    boundary = fluid_left
    momentum_component = 'y'
    mu = ${mu}
    u = superficial_vel_x
    v = superficial_vel_y
  []
  [reflective_p]
    type = INSFVSymmetryPressureBC
    boundary = fluid_left
    variable = pressure
  []
  [T_reflective]
    type = FVNeumannBC
    variable = T_fluid
    boundary = fluid_left
    value = 0
  []
  [T_cold_boundary]
    type = FVDirichletBC
    variable = T_fluid
    boundary = solid_fluid_interface
    value = ${T_cold}
  []
[]
[ICs]
  [porosity_spacer]
    type = ConstantIC
    variable = porosity
    block = spacer_block
    value = 1.0
  []
  [porosity_fuel]
    type = ConstantIC
    variable = porosity
    block = porous_block
    value = 0.1
  []
  [temp_ic_fluid]
    type = ConstantIC
    variable = T_fluid
    value = ${T_cold}
    block = 'spacer_block porous_block'
  []
  [superficial_vel_x]
    type = ConstantIC
    variable = superficial_vel_x
    value = 1E-5
    block = 'spacer_block porous_block'
  []
  [superficial_vel_y]
    type = ConstantIC
    variable = superficial_vel_y
    value = 1E-5
    block = 'spacer_block porous_block'
  []
[]
[FunctorMaterials]
  [functor_constants_fluid]
    type = ADGenericFunctorMaterial
    prop_names = 'alpha_b cp k_fluid'
    prop_values = '${alpha} ${cp_fluid} ${k_fluid}'
    block = 'spacer_block porous_block'
  []
  [density_fluid]
    type = INSFVEnthalpyFunctorMaterial
    temperature = 'T_fluid'
    rho = ${rho_fluid}
    block = 'spacer_block porous_block'
  []
  [functor_constants_steel]
    # We need this to avoid errors for materials not existing on every block
    type = ADGenericFunctorMaterial
    prop_names = 'dummy'
    prop_values = 0.0
    block = wall_block
  []
[]
[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
  nl_abs_tol = 1e-10
[]
[Outputs]
  exodus = true
[]
[Debug]
  show_var_residual_norms = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/multiple_boundary_ids.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'left bottom'
    boundary_new = 10
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.2 0.9 0'
  [../]
  [./createNewSidesetTwo]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetOne
    included_boundaries = 'right'
    boundary_new = 11
    bottom_left = '0.5 0.5 0'
    top_right = '1.1 1.1 0'
  [../]
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./leftBC]
    type = DirichletBC
    variable = u
    boundary = 10
    value = 1
  [../]
  [./rightBC]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 0
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/contact/test/tests/avoid-aligned-node-exception/test.i)
youngs_modulus = 10e11
[Mesh]
  type = MeshGeneratorMesh
  patch_update_strategy = iteration
  #
  # Binder
  #
  [binder_block]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 20
    ny = 36
    xmin = 0
    xmax = 3.75e+2
    ymin = 0
    ymax = 3.00e+2
    boundary_id_offset = 800
    subdomain_ids = 800
    boundary_name_prefix = 'binder'
    elem_type = QUAD4
  []
  [binder_rm]
    type = SubdomainBoundingBoxGenerator
    input = binder_block
    block_id = 200
    bottom_left = '0.75e+2 0.75e+2 0'
    top_right = '3.75e+2 2.25e+2 0'
  []
  [binder_rm_nodeset]
    type = BoundingBoxNodeSetGenerator
    input = binder_rm
    new_boundary = 807
    bottom_left = '0.75e+2 0.75e+2 0'
    top_right = '7.5e+2 4.0e+2 0'
  []
  [binder_initial]
    type = BlockDeletionGenerator
    block = 200
    input = binder_rm_nodeset
    new_boundary = 815
  []
  [binder_inner_top]
    type = SideSetsFromBoundingBoxGenerator
    input = binder_initial
    included_boundaries = 815
    boundary_new = 812
    bottom_left = '0.7e+2 2.24e+2 0'
    top_right = '4e+2 2.5e+2 0'
  []
  [binder_inner_bottom]
    type = SideSetsFromBoundingBoxGenerator
    input = binder_inner_top
    included_boundaries = 815
    boundary_new = 810
    bottom_left = '0.7e+2 0.5e+2 0'
    top_right = '4e+2 0.8e+2 0'
  []
  [binder]
    type = SideSetsFromBoundingBoxGenerator
    input = binder_inner_bottom
    included_boundaries = 815
    boundary_new = 813
    bottom_left = '0.6e+2 0.6e+2 0'
    top_right = '0.78e+2 2.5e+2 0'
  []
  #
  # Crystal
  #
  [crystal_subdomain]
    type = GeneratedMeshGenerator
    nx = 13
    ny = 60
    dim = 2
    xmin = 0.75e+2
    xmax = 3.75e+2
    ymin = 0.75e+2
    ymax = 2.25e+2
    boundary_id_offset = 100
    subdomain_ids = 100
    boundary_name_prefix = 'sd1'
  []
  [crack1_subdomain]
    type = SubdomainBoundingBoxGenerator
    input = crystal_subdomain
    block_id = 510
    bottom_left = '1.25e+2 1.125e+2 0'
    top_right = '4.0e+2 1.15e+2 0'
  []
  [crack1_nodeset]
    type = BoundingBoxNodeSetGenerator
    input = crack1_subdomain
    new_boundary = crack1_ns
    bottom_left = '1.25e+2 1.125e+2 0'
    top_right = '4.0e+2 1.15e+2 0'
  []
  [crystal_c1]
    type = BlockDeletionGenerator
    block = 510
    input = crack1_nodeset
    new_boundary = 500
  []
  [crack2_subdomain]
    type = SubdomainBoundingBoxGenerator
    input = crystal_c1
    block_id = 610
    bottom_left = '1.25e+2 1.5e+2 0'
    top_right = '4.0e+2 1.525e+2 0'
  []
  [crack2_nodeset]
    type = BoundingBoxNodeSetGenerator
    input = crack2_subdomain
    new_boundary = crack2_ns
    bottom_left = '1.25e+2 1.5e+2 0'
    top_right = '4.0e+2 1.525e+2 0'
  []
  [crystal_c2]
    type = BlockDeletionGenerator
    block = 610
    input = crack2_nodeset
    new_boundary = 600
  []
  [crack3_subdomain]
    type = SubdomainBoundingBoxGenerator
    input = crystal_c2
    block_id = 710
    bottom_left = '1.25e+2 1.875e+2 0'
    top_right = '4.0e+2 1.9e+2 0'
  []
  [crack3_nodeset]
    type = BoundingBoxNodeSetGenerator
    input = crack3_subdomain
    new_boundary = crack3_ns
    bottom_left = '1.25e+2 1.875e+2 0'
    top_right = '4.0e+2 1.9e+2 0'
  []
  [crystal_c3]
    type = BlockDeletionGenerator
    block = 710
    input = crack3_nodeset
    new_boundary = 700
  []
  [crack1_lower]
    type = SideSetsFromBoundingBoxGenerator
    input = crystal_c3
    included_boundaries = 500
    boundary_new = 511
    bottom_left = '1e+2 1.1e+2 0'
    top_right = '4.0e+2 1.13e+2 0'
  []
  [crack1_upper]
    type = SideSetsFromBoundingBoxGenerator
    input = crack1_lower
    included_boundaries = 500
    boundary_new = 512
    bottom_left = '1e+2 1.14e+2 0'
    top_right = '4.0e+2 1.18e+2 0'
  []
  [crack2_lower]
    type = SideSetsFromBoundingBoxGenerator
    input = crack1_upper
    included_boundaries = 600
    boundary_new = 611
    bottom_left = '1e+2 1.3e+2 0'
    top_right = '4.0e+2 1.51e+2 0'
  []
  [crack2_upper]
    type = SideSetsFromBoundingBoxGenerator
    input = crack2_lower
    included_boundaries = 600
    boundary_new = 612
    bottom_left = '1e+2 1.52e+2 0'
    top_right = '4.0e+2 1.6e+2 0'
  []
  [crack3_lower]
    type = SideSetsFromBoundingBoxGenerator
    input = crack2_upper
    included_boundaries = 700
    boundary_new = 711
    bottom_left = '1e+2 1.8e+2 0'
    top_right = '4.0e+2 1.88e+2 0'
  []
  [crystal]
    type = SideSetsFromBoundingBoxGenerator
    input = crack3_lower
    included_boundaries = 700
    boundary_new = 712
    bottom_left = '1e+2 1.89e+2 0'
    top_right = '4.0e+2 1.95e+2 0'
  []
  [rve_final]
    type = CombinerGenerator
    inputs = 'binder crystal'
  []
[]
##################################################################################
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Variables]
  [disp_x]
    order = FIRST
    family = LAGRANGE
  []
  [disp_y]
    order = FIRST
    family = LAGRANGE
  []
[]
###################################################################################
[AuxVariables]
  [temp]
    order = CONSTANT
    family = MONOMIAL
  []
  [irr]
    order = CONSTANT
    family = MONOMIAL
  []
  [initial_x]
    order = CONSTANT
    family = MONOMIAL
  []
  [strain_x]
    order = CONSTANT
    family = MONOMIAL
  []
  [strain_y]
    order = CONSTANT
    family = MONOMIAL
  []
[]
###################################################################################
[Functions]
  [temp_def]
    type = ConstantFunction
    value = 800
  []
  [irr_def]
    type = ConstantFunction
    value = 9
  []
  [initial_x_def]
    type = ConstantFunction
    value = 825
  []
[]
###################################################################################
[Physics]
  [SolidMechanics]
    [QuasiStatic]
      [all]
        eigenstrain_names = 'thermal_strain irr_strain'
        add_variables = true
        generate_output = 'vonmises_stress'
        block = '100 800'
      []
    []
  []
[]
###################################################################################
[AuxKernels]
  [initial_x]
    type = FunctionAux
    variable = initial_x
    function = initial_x_def
    use_displaced_mesh = false
  []
  [tempfuncaux]
    type = FunctionAux
    variable = temp
    function = temp_def
    use_displaced_mesh = false
  []
  [irrfuncaux]
    type = FunctionAux
    variable = irr
    function = irr_def
    use_displaced_mesh = false
  []
[]
###################################################################################
[BCs]
  [right]
    type = DirichletBC
    boundary = 'binder_right sd1_right'
    variable = disp_x
    value = 0.
  []
  [top]
    type = DirichletBC
    boundary = 'binder_top'
    variable = disp_y
    value = 0
  []
[]
###################################################################################
[Contact]
  [bc_top]
    primary = 812
    secondary = 102
    formulation = mortar
    model = frictionless
    correct_edge_dropping = true
  []
  [bc_bottom]
    primary = 810
    secondary = 100
    formulation = mortar
    model = frictionless
    correct_edge_dropping = true
  []
  [bc_left]
    primary = 103
    secondary = 813
    formulation = mortar
    model = frictionless
    correct_edge_dropping = true
  []
  [crack_1]
    primary = 511
    secondary = 512
    formulation = mortar
    model = frictionless
    correct_edge_dropping = true
  []
  [crack_2]
    primary = 611
    secondary = 612
    formulation = mortar
    model = frictionless
    correct_edge_dropping = true
  []
  [crack_3]
    primary = 711
    secondary = 712
    formulation = mortar
    model = frictionless
    correct_edge_dropping = true
  []
[]
###################################################################################
[Materials]
  #
  # Binder properties - isotropic elasticity + 2 eigenstrains
  #
  [binder_elasticity_tensor]
    block = '800'
    type = ComputeIsotropicElasticityTensor
    youngs_modulus = ${youngs_modulus}
    poissons_ratio = 0.01
  []
  [binder_therm_prefactor]
    type = DerivativeParsedMaterial
    block = '800'
    coupled_variables = 'temp'
    property_name = binder_therm_prefactor
    constant_names = 'a T'
    constant_expressions = '1.3e-5 298' #'1.3e-5 298'
    expression = '(a*(temp-T))'
  []
  [binder_thermal_strain]
    type = ComputeVariableEigenstrain
    block = '800'
    eigen_base = '1 0 0 0 1 0 0 0 1'
    args = 'temp'
    prefactor = binder_therm_prefactor
    eigenstrain_name = thermal_strain
  []
  [binder_irr_prefactor]
    type = DerivativeParsedMaterial
    block = '800'
    coupled_variables = 'irr initial_x'
    property_name = binder_irr_prefactor
    constant_names = 'm'
    constant_expressions = '0'
    expression = '((m*irr)/100)'
  []
  [binder_irr_strain]
    type = ComputeVariableEigenstrain
    block = '800'
    eigen_base = '1 0 0 0 1 0 0 0 1'
    args = 'irr'
    prefactor = binder_irr_prefactor
    eigenstrain_name = irr_strain
  []
  #
  # Crystal properties - orthotropic elasticity + 2 eigenstrains
  #
  [elasticity_tensor]
    type = ComputeElasticityTensor
    block = '100'
    fill_method = orthotropic
    C_ijkl = '1.095e9 3.65e7 1.095e9 2.8568e8 9.549e6 9.549e6 0.01 0.01 0.3 0.3 0.01 0.01'
  []
  [therm_prefactor]
    type = DerivativeParsedMaterial
    block = '100'
    coupled_variables = 'temp'
    property_name = therm_prefactor
    constant_names = 'a T'
    constant_expressions = '1.3e-5 298' #'2.65e-5 298'
    expression = '(a*(temp-T))'
  []
  [thermal_strain]
    type = ComputeVariableEigenstrain
    block = '100'
    eigen_base = '-0.0577 0 0 0 1 0 0 0 1'
    args = 'temp'
    prefactor = therm_prefactor
    eigenstrain_name = thermal_strain
  []
  [irr_prefactor]
    type = DerivativeParsedMaterial
    block = '100'
    coupled_variables = 'irr initial_x'
    property_name = irr_prefactor
    constant_names = 'm'
    constant_expressions = '1'
    expression = '((m*irr)/100)'
  []
  [irr_strain]
    type = ComputeVariableEigenstrain
    block = '100'
    eigen_base = '-0.31 0 0 0 1 0 0 0 1'
    args = 'irr'
    prefactor = irr_prefactor
    eigenstrain_name = irr_strain
  []
  [stress]
    type = ComputeLinearElasticStress
    block = '100 800'
  []
[]
[Preconditioning]
  [prec1]
    type = SMP
    full = true
  []
[]
[Executioner]
  type = Steady
  solve_type = 'Newton'
  petsc_options = '-snes_ksp_ew'
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  nl_rel_tol = 1e-7
[]
[Outputs]
  exodus = true
[]
(modules/combined/test/tests/optimization/compliance_sensitivity/thermal_test.i)
vol_frac = 0.4
cost_frac = 10.0
power = 2.0
E0 = 1.0e-6
E1 = 1.0
rho0 = 0.0
rho1 = 1.0
C0 = 1.0e-6
C1 = 1.0
TC0 = 1.0e-16
TC1 = 1.0
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [MeshGenerator]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    xmin = 0
    xmax = 40
    ymin = 0
    ymax = 40
  []
  [node]
    type = ExtraNodesetGenerator
    input = MeshGenerator
    new_boundary = hold
    nodes = 0
  []
  [push_left]
    type = ExtraNodesetGenerator
    input = node
    new_boundary = push_left
    coord = '16 0 0'
  []
  [push_center]
    type = ExtraNodesetGenerator
    input = push_left
    new_boundary = push_center
    coord = '24 0 0'
  []
  [extra]
    type = SideSetsFromBoundingBoxGenerator
    input = push_center
    bottom_left = '-0.01 17.999  0'
    top_right = '5 22.001  0'
    boundary_new = n1
    included_boundaries = left
  []
  [dirichlet_bc]
    type = SideSetsFromNodeSetsGenerator
    input = extra
  []
[]
[Variables]
  [disp_x]
  []
  [disp_y]
  []
  [temp]
    initial_condition = 100.0
  []
[]
[AuxVariables]
  [Dc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [Cc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [Tc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [Cost]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [mat_den]
    family = MONOMIAL
    order = FIRST
    initial_condition = ${vol_frac}
  []
[]
[AuxKernels]
  [Cost]
    type = MaterialRealAux
    variable = Cost
    property = Cost_mat
  []
[]
[Kernels]
  [heat_conduction]
    type = HeatConduction
    variable = temp
    diffusion_coefficient = thermal_cond
  []
  [heat_source]
    type = HeatSource
    value = 1e-2 # W/m^3
    variable = temp
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [all]
    strain = SMALL
    add_variables = true
    incremental = false
  []
[]
[BCs]
  [no_y]
    type = DirichletBC
    variable = disp_y
    boundary = hold
    value = 0.0
  []
  [no_x_symm]
    type = DirichletBC
    variable = disp_x
    boundary = right
    value = 0.0
  []
  [left_n1]
    type = DirichletBC
    variable = temp
    boundary = n1
    value = 0.0
  []
  [top]
    type = NeumannBC
    variable = temp
    boundary = top
    value = 0
  []
  [bottom]
    type = NeumannBC
    variable = temp
    boundary = bottom
    value = 0
  []
  [right]
    type = NeumannBC
    variable = temp
    boundary = right
    value = 0
  []
  [left]
    type = NeumannBC
    variable = temp
    boundary = left
    value = 0
  []
[]
[NodalKernels]
  [push_left]
    type = NodalGravity
    variable = disp_y
    boundary = push_left
    gravity_value = 0.0 # -1e-8
    mass = 1
  []
  [push_center]
    type = NodalGravity
    variable = disp_y
    boundary = push_center
    gravity_value = 0.0 # -1e-8
    mass = 1
  []
[]
[Materials]
  [thermal_cond]
    type = DerivativeParsedMaterial
    # ordered multimaterial simp
    expression = "A1:=(${TC0}-${TC1})/(${rho0}^${power}-${rho1}^${power}); "
                 "B1:=${TC0}-A1*${rho0}^${power}; TC1:=A1*mat_den^${power}+B1; TC1"
    coupled_variables = 'mat_den'
    property_name = thermal_cond
    outputs = 'exodus'
  []
  [thermal_compliance]
    type = ThermalCompliance
    temperature = temp
    thermal_conductivity = thermal_cond
    outputs = 'exodus'
  []
  [elasticity_tensor]
    type = ComputeVariableIsotropicElasticityTensor
    youngs_modulus = E_phys
    poissons_ratio = poissons_ratio
    args = 'mat_den'
  []
  [E_phys]
    type = DerivativeParsedMaterial
    # ordered multimaterial simp
    expression = "A1:=(${E0}-${E1})/(${rho0}^${power}-${rho1}^${power}); "
                 "B1:=${E0}-A1*${rho0}^${power}; E1:=A1*mat_den^${power}+B1; E1"
    coupled_variables = 'mat_den'
    property_name = E_phys
  []
  [Cost_mat]
    type = DerivativeParsedMaterial
    # ordered multimaterial simp
    expression = "A1:=(${C0}-${C1})/(${rho0}^(1/${power})-${rho1}^(1/${power})); "
                 "B1:=${C0}-A1*${rho0}^(1/${power}); C1:=A1*mat_den^(1/${power})+B1; C1"
    coupled_variables = 'mat_den'
    property_name = Cost_mat
  []
  [CostDensity]
    type = ParsedMaterial
    property_name = CostDensity
    coupled_variables = 'mat_den Cost'
    expression = 'mat_den*Cost'
  []
  [poissons_ratio]
    type = GenericConstantMaterial
    prop_names = poissons_ratio
    prop_values = 0.3
  []
  [stress]
    type = ComputeLinearElasticStress
  []
  [dc]
    type = ComplianceSensitivity
    design_density = mat_den
    youngs_modulus = E_phys
  []
  [cc]
    type = CostSensitivity
    design_density = mat_den
    cost = Cost_mat
    outputs = 'exodus'
  []
  [tc]
    type = ThermalSensitivity
    design_density = mat_den
    thermal_conductivity = thermal_cond
    temperature = temp
    outputs = 'exodus'
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[UserObjects]
  [rad_avg]
    type = RadialAverage
    radius = 0.1
    weights = linear
    prop_name = sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  [rad_avg_cost]
    type = RadialAverage
    radius = 0.1
    weights = linear
    prop_name = cost_sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  [rad_avg_thermal]
    type = RadialAverage
    radius = 0.1
    weights = linear
    prop_name = thermal_sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  [update]
    type = DensityUpdateTwoConstraints
    density_sensitivity = Dc
    cost_density_sensitivity = Cc
    cost = Cost
    cost_fraction = ${cost_frac}
    design_density = mat_den
    volume_fraction = ${vol_frac}
    bisection_lower_bound = 0
    bisection_upper_bound = 1.0e12 # 100
    use_thermal_compliance = true
    thermal_sensitivity = Tc
    weight_mechanical_thermal = '0 1'
    relative_tolerance = 1.0e-12
    bisection_move = 0.015
    adaptive_move = false
    execute_on = TIMESTEP_BEGIN
  []
  # Provides Dc
  [calc_sense]
    type = SensitivityFilter
    density_sensitivity = Dc
    design_density = mat_den
    filter_UO = rad_avg
    execute_on = TIMESTEP_END
    force_postaux = true
  []
  # Provides Cc
  [calc_sense_cost]
    type = SensitivityFilter
    density_sensitivity = Cc
    design_density = mat_den
    filter_UO = rad_avg_cost
    execute_on = TIMESTEP_END
    force_postaux = true
  []
  # Provides Tc
  [calc_sense_thermal]
    type = SensitivityFilter
    density_sensitivity = Tc
    design_density = mat_den
    filter_UO = rad_avg_thermal
    execute_on = TIMESTEP_END
    force_postaux = true
  []
[]
[Executioner]
  type = Transient
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  nl_abs_tol = 1e-12
  dt = 1.0
  num_steps = 5
[]
[Outputs]
  exodus = true
  [out]
    type = CSV
    execute_on = 'TIMESTEP_END'
  []
  print_linear_residuals = false
[]
[Postprocessors]
  [right_flux]
    type = SideDiffusiveFluxAverage
    variable = temp
    boundary = right
    diffusivity = 10
  []
  [mesh_volume]
    type = VolumePostprocessor
    execute_on = 'initial timestep_end'
  []
  [total_vol]
    type = ElementIntegralVariablePostprocessor
    variable = mat_den
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [vol_frac]
    type = ParsedPostprocessor
    expression = 'total_vol / mesh_volume'
    pp_names = 'total_vol mesh_volume'
  []
  [sensitivity]
    type = ElementIntegralMaterialProperty
    mat_prop = sensitivity
  []
  [cost_sensitivity]
    type = ElementIntegralMaterialProperty
    mat_prop = cost_sensitivity
  []
  [cost]
    type = ElementIntegralMaterialProperty
    mat_prop = CostDensity
  []
  [cost_frac]
    type = ParsedPostprocessor
    expression = 'cost / mesh_volume'
    pp_names = 'cost mesh_volume'
  []
  [objective]
    type = ElementIntegralMaterialProperty
    mat_prop = strain_energy_density
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [objective_thermal]
    type = ElementIntegralMaterialProperty
    mat_prop = thermal_compliance
    execute_on = 'INITIAL TIMESTEP_END'
  []
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/overlapping_sidesets.i)
[Mesh]
#active = 'gmg'
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 3
    nx = 10
    ny = 10
    nz = 10
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'bottom back left'
    boundary_new = 10
    bottom_left = '-1.1 -1.1 -1.1'
    top_right = '1.1 1.1 1.1'
    boundary_id_overlap = true
  []
  [./createNewSidesetTwo]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetOne
    included_boundaries = 'right bottom'
    boundary_new = 11
    bottom_left = '-1.1 -1.1 -1.1'
    top_right = '1.1 1.1 1.1'
    boundary_id_overlap = true
  []
  [./createNewSidesetThree]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetTwo
    included_boundaries = 'top front'
    boundary_new = 12
    bottom_left = '-1.1 -1.1 -1.1'
    top_right = '1.1 1.1 1.1'
    boundary_id_overlap = true
  [../]
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./BCone]
    type = DirichletBC
    variable = u
    boundary = 10
    value = 1
  [../]
  [./BCtwo]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 1
  [../]
  [./BCthree]
    type = DirichletBC
    variable = u
    boundary = 12
    value = 0
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/generate_outside.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'left'
    boundary_new = 10
    location = OUTSIDE
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.5 0.5 0'
  []
[]
[Outputs]
  exodus = true
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/error_no_side_sets_found.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    #parallel_type = replicated
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'right'
    boundary_new = 11
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.9 0.9 0'
  []
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./leftBC]
    type = DirichletBC
    variable = u
    boundary = 'left'
    value = 1
  [../]
  [./rightBC]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 0
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/optimization/test/tests/executioners/constrained/shape_optimization/forward.i)
# This test is documented as an example for ConstrainedShapeOptimization. This
# test should not be changed without updating the documentation.
inner_radius = 6
outer_radius = 10
volume_constraint = 200
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [mesh]
    type = ConcentricCircleMeshGenerator
    has_outer_square = no
    num_sectors = 16
    radii = '${inner_radius} ${outer_radius}'
    rings = '16 16'
    preserve_volumes = false
  []
  [inner_radius]
    type = SideSetsBetweenSubdomainsGenerator
    input = mesh
    new_boundary = inner
    primary_block = 2
    paired_block = 1
  []
  [delete]
    type = BlockDeletionGenerator
    input = inner_radius
    block = 1
  []
  [gather_all]
    type = BoundingBoxNodeSetGenerator
    input = delete
    bottom_left = '-100 -100 -100'
    top_right = '100 100 100'
    new_boundary = total
  []
  [combine]
    type = SideSetsFromBoundingBoxGenerator
    input = gather_all
    bottom_left = '-100 -100 -100'
    top_right = '100 100 100'
    included_boundaries = 'inner outer'
    boundary_new = moving
  []
[]
[Variables]
  [disp_x]
  []
  [disp_y]
  []
  [T]
  []
[]
[AuxVariables]
  [dist_between]
    [AuxKernel]
      type = NearestNodeDistanceAux
      variable = dist_between
      paired_boundary = moving
      boundary = total
      block = 2
      use_displaced_mesh = false
      execute_on = "INITIAL"
    []
  []
[]
[Kernels]
  [disp_x]
    type = MatDiffusion
    variable = disp_x
    use_displaced_mesh = false
    diffusivity = diff_coef
  []
  [disp_y]
    type = MatDiffusion
    variable = disp_y
    use_displaced_mesh = false
    diffusivity = diff_coef
  []
  # run physics of interest on deformed mesh
  [Diffusion]
    type = FunctionDiffusion
    variable = T
    use_displaced_mesh = true
  []
  [Source]
    type = BodyForce
    variable = T
    value = 1
    use_displaced_mesh = true
  []
[]
[Materials]
  # perserve elements near the boundary
  [diff_coef]
    type = ParsedMaterial
    coupled_variables = 'dist_between'
    expression = '1/(dist_between+0.5)'
    property_name = 'diff_coef'
  []
  [h]
    type = ADGenericFunctionMaterial
    prop_names = h
    prop_values = h
  []
  # convection type boundary condition
  [convection_bc]
    type = ADParsedMaterial
    coupled_variables = "T"
    expression = "h*(100-T)"
    material_property_names = "h"
    property_name = convection
  []
[]
[Functions]
  [r1_x]
    type = ParsedOptimizationFunction
    expression = 'r1 * cos((atan(y/x)))'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
  [r1_y]
    type = ParsedOptimizationFunction
    expression = 'r1 * sin((atan(y/x)))'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
  [r0_x]
    type = ParsedOptimizationFunction
    expression = 'r0 * cos((atan(y/x)))'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
  [r0_y]
    type = ParsedOptimizationFunction
    expression = 'r0 * sin((atan(y/x)))'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
  [h]
    type = ParsedOptimizationFunction
    # r0+${inner_radius} is the true current inner radius
    expression = '10 /(pi * (r0+${inner_radius})^3)'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
  [eq_grad_r0]
    type = ParsedOptimizationFunction
    expression = '-2 * pi * (r0 + ${inner_radius})'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
  [eq_grad_r1]
    type = ParsedOptimizationFunction
    # r1+${outer_radius} is the true current outer radius
    expression = '2 * pi * (r1+${outer_radius})'
    param_symbol_names = 'r0 r1'
    param_vector_name = 'params/radii'
  []
[]
[BCs]
  [diffuse_r1_x]
    type = ADFunctionDirichletBC
    variable = disp_x
    boundary = 'outer'
    function = r1_x
    preset = false
  []
  [diffuse_r1_y]
    type = ADFunctionDirichletBC
    variable = disp_y
    boundary = 'outer'
    function = r1_y
    preset = false
  []
  [diffuse_r0_x]
    type = ADFunctionDirichletBC
    variable = disp_x
    boundary = 'inner'
    function = r0_x
    preset = false
  []
  [diffuse_r0_y]
    type = ADFunctionDirichletBC
    variable = disp_y
    boundary = 'inner'
    function = r0_y
    preset = false
  []
  # run physics on deformed mesh
  [convection]
    type = ADMatNeumannBC
    variable = T
    boundary = inner
    boundary_material = convection
    use_displaced_mesh = true
    value = 1
  []
[]
[Preconditioning]
  [SMP]
    type = SMP
    full = true
  []
[]
[Reporters]
  [params]
    type = ConstantReporter
    real_vector_names = 'radii'
    real_vector_values = '0 0'
    dof_id_type_vector_names = 'num_params'
    dof_id_type_vector_values = '2'
  []
[]
[Postprocessors]
  [current_volume]
    type = VolumePostprocessor
    use_displaced_mesh = true
  []
  # objective function
  [objective]
    type = NodalExtremeValue
    variable = T
  []
  [eq_constraint]
    type = ParsedPostprocessor
    pp_names = current_volume
    expression = 'current_volume - ${volume_constraint}'
  []
  [func_r0]
    type = FunctionValuePostprocessor
    function = eq_grad_r0
  []
  [func_r1]
    type = FunctionValuePostprocessor
    function = eq_grad_r1
  []
[]
[VectorPostprocessors]
  # convert "Real" postprocessors to vectors
  [vol_constraint]
    type = VectorOfPostprocessors
    postprocessors = 'eq_constraint'
    force_postaux = true
  []
  [eq_grad]
    type = VectorOfPostprocessors
    postprocessors = 'func_r0 func_r1'
    force_postaux = true
  []
[]
[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-8
  nl_abs_tol = 1e-8
[]
[Outputs]
  console = false
[]
(test/tests/meshgenerators/sidesets_bounding_box_generator/error_no_elements_in_bounding_box.i)
[Mesh]
  [./gmg]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 10
    ny = 10
    #parallel_type = replicated
  []
  [./createNewSidesetOne]
    type = SideSetsFromBoundingBoxGenerator
    input = gmg
    included_boundaries = 'left bottom'
    boundary_new = 10
    bottom_left = '-0.1 -0.1 0'
    top_right = '0.8 0.2 0'
  []
  [./createNewSidesetTwo]
    type = SideSetsFromBoundingBoxGenerator
    input = createNewSidesetOne
    included_boundaries = 'right top'
    boundary_new = 11
    bottom_left = '1.7 0.7 0'
    top_right = '2.1 1.1 0'
  []
[]
[Variables]
  [./u]
  [../]
[]
[Kernels]
  [./diff]
    type = Diffusion
    variable = u
  [../]
[]
[BCs]
  [./leftBC]
    type = DirichletBC
    variable = u
    boundary = 10
    value = 1
  [../]
  [./rightBC]
    type = DirichletBC
    variable = u
    boundary = 11
    value = 0
  [../]
[]
[Executioner]
  type = Steady
  solve_type = 'PJFNK'
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
  exodus = true
[]
(modules/combined/examples/optimization/thermomechanical/structural_sub.i)
vol_frac = 0.4
power = 2.0
E0 = 1.0e-6
E1 = 1.0
rho0 = 0.0
rho1 = 1.0
[GlobalParams]
  displacements = 'disp_x disp_y'
[]
[Mesh]
  [MeshGenerator]
    type = GeneratedMeshGenerator
    dim = 2
    nx = 40
    ny = 40
    xmin = 0
    xmax = 40
    ymin = 0
    ymax = 40
  []
  [node]
    type = ExtraNodesetGenerator
    input = MeshGenerator
    new_boundary = hold
    nodes = 0
  []
  [push_left]
    type = ExtraNodesetGenerator
    input = node
    new_boundary = push_left
    coord = '16 0 0'
  []
  [push_center]
    type = ExtraNodesetGenerator
    input = push_left
    new_boundary = push_center
    coord = '24 0 0'
  []
  [extra]
    type = SideSetsFromBoundingBoxGenerator
    input = push_center
    bottom_left = '-0.01 17.999  0'
    top_right = '5 22.001  0'
    boundary_new = n1
    included_boundaries = left
  []
  [dirichlet_bc]
    type = SideSetsFromNodeSetsGenerator
    input = extra
  []
[]
[Variables]
  [disp_x]
  []
  [disp_y]
  []
[]
[AuxVariables]
  [Dc]
    family = MONOMIAL
    order = FIRST
    initial_condition = -1.0
  []
  [mat_den]
    family = MONOMIAL
    order = FIRST
    initial_condition = ${vol_frac}
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [all]
    strain = SMALL
    add_variables = true
    incremental = false
  []
[]
[BCs]
  [no_y]
    type = DirichletBC
    variable = disp_y
    boundary = hold
    value = 0.0
  []
  [no_x_symm]
    type = DirichletBC
    variable = disp_x
    boundary = right
    value = 0.0
  []
[]
[NodalKernels]
  [push_left]
    type = NodalGravity
    variable = disp_y
    boundary = push_left
    gravity_value = -1.0e-3
    mass = 1
  []
  [push_center]
    type = NodalGravity
    variable = disp_y
    boundary = push_center
    gravity_value = -1.0e-3
    mass = 1
  []
[]
[Materials]
  [elasticity_tensor]
    type = ComputeVariableIsotropicElasticityTensor
    youngs_modulus = E_phys
    poissons_ratio = poissons_ratio
    args = 'mat_den'
  []
  [E_phys]
    type = DerivativeParsedMaterial
    expression = "A1:=(${E0}-${E1})/(${rho0}^${power}-${rho1}^${power}); "
                 "B1:=${E0}-A1*${rho0}^${power}; E1:=A1*mat_den^${power}+B1; E1"
    coupled_variables = 'mat_den'
    property_name = E_phys
  []
  [poissons_ratio]
    type = GenericConstantMaterial
    prop_names = poissons_ratio
    prop_values = 0.3
  []
  [stress]
    type = ComputeLinearElasticStress
  []
  [dc]
    type = ComplianceSensitivity
    design_density = mat_den
    youngs_modulus = E_phys
  []
[]
[Preconditioning]
  [smp]
    type = SMP
    full = true
  []
[]
[UserObjects]
  [rad_avg]
    type = RadialAverage
    radius = 1.2
    weights = linear
    prop_name = sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  [calc_sense]
    type = SensitivityFilter
    density_sensitivity = Dc
    design_density = mat_den
    filter_UO = rad_avg
    execute_on = TIMESTEP_END
    force_postaux = true
  []
[]
[Executioner]
  type = Transient
  solve_type = PJFNK
  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'
  nl_abs_tol = 1e-12
  dt = 1.0
  num_steps = 500
[]
[Outputs]
  exodus = true
  [out]
    type = CSV
    execute_on = 'TIMESTEP_END'
  []
  print_linear_residuals = false
[]
[Postprocessors]
  [mesh_volume]
    type = VolumePostprocessor
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [total_vol]
    type = ElementIntegralVariablePostprocessor
    variable = mat_den
    execute_on = 'INITIAL TIMESTEP_END'
  []
  [vol_frac]
    type = ParsedPostprocessor
    expression = 'total_vol / mesh_volume'
    pp_names = 'total_vol mesh_volume'
  []
  [sensitivity]
    type = ElementIntegralMaterialProperty
    mat_prop = sensitivity
  []
  [objective]
    type = ElementIntegralMaterialProperty
    mat_prop = strain_energy_density
    execute_on = 'INITIAL TIMESTEP_END'
  []
[]
(test/tests/meshgenerators/stitch_boundary_mesh_generator/stitch_3d.i)
[Mesh]
  [gen]
    type = GeneratedMeshGenerator
    nx = 4
    ny = 4
    nz = 4
    dim = 3
  []
  [block1]
    type = SubdomainBoundingBoxGenerator
    block_id = 1
    bottom_left = '0 0 0'
    top_right = '0.5 1 1'
    input = gen
  []
  [block2]
    type = SubdomainBoundingBoxGenerator
    block_id = 2
    bottom_left = '0.5 0 0'
    top_right = '1 1 1'
    input = block1
  []
  [breakmesh]
    input = block2
    type = BreakMeshByBlockGenerator
    block_pairs = '1 2'
    split_interface = true
    add_interface_on_two_sides = true
  []
  [block1_block2_top]
    type = SideSetsFromBoundingBoxGenerator
    input = breakmesh
    included_boundaries = 'Block1_Block2'
    boundary_new = '103'
    bottom_left = '0 0.5 0'
    top_right = '1 1 1'
  []
  [block1_block2_bottom]
    type = SideSetsFromBoundingBoxGenerator
    input = block1_block2_top
    included_boundaries = 'Block1_Block2'
    boundary_new = '102'
    bottom_left = '0 0.5 0'
    top_right = '1 1 1'
    location = OUTSIDE
  []
  [block2_block1_top]
    type = SideSetsFromBoundingBoxGenerator
    input = block1_block2_bottom
    included_boundaries = 'Block2_Block1'
    boundary_new = '101'
    bottom_left = '0 0.5 0'
    top_right = '1 1 1'
  []
  [block2_block1_bottom]
    type = SideSetsFromBoundingBoxGenerator
    input = block2_block1_top
    included_boundaries = 'Block2_Block1'
    boundary_new = '100'
    bottom_left = '0 0.5 0'
    top_right = '1 1 1'
    location = OUTSIDE
  []
  [stitch]
    type = StitchBoundaryMeshGenerator
    input = block2_block1_bottom
    clear_stitched_boundary_ids = false
    stitch_boundaries_pair = '101 103'
  []
[]
[Outputs]
  exodus = true
[]