- 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
- 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
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/bernoulli-1d-functor-material.i)
- (test/tests/meshdivisions/block_division.i)
- (test/tests/postprocessors/element_integral/functors/element_integral_test.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-mixing.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_force_corrected.i)
- (test/tests/fvkernels/mms/broken-domain/diffusion.i)
- (test/tests/fvkernels/mms/harmonic_interpolation/diffusion.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-mixing-physics.i)
- (test/tests/materials/piecewise_by_block_material/discontinuous_functor.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/formloss/formloss_single.i)
- (test/tests/postprocessors/side_integral/side_integral_functor.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/actioncomponents/interfaces/component_with_ics.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/scalar_advection/2d-rc-physics.i)
- (test/tests/interfacekernels/1d_interface/ad-coupled-value-coupled-flux.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_pressure_corrected.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/porosity_jump/formloss/formloss_multiple.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)
(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
function = '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
[]
(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/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
[]
(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
function = '0.1'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'left'
variable = superficial_vel_y
function = 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/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'
[]
[]
(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'
[]
[]
(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'
[]
[]
(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_function = '0.1 0'
wall_boundaries = 'top bottom'
momentum_wall_types = 'slip slip'
outlet_boundaries = 'right'
momentum_outlet_types = 'fixed-pressure'
pressure_function = '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_function = 300.0
energy_wall_types = 'heatflux heatflux'
energy_wall_function = '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
[]
(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/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
[]
(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
[]
(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
function = '1'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'left'
variable = v
function = 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'
function = '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/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/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/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
[]
(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'
[]
[]
(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
[]