- combinatorial_geometryFunction expression encoding a combinatorial geometry
C++ Type:std::string
Controllable:No
Description:Function expression encoding a combinatorial geometry
- inputThe mesh we want to modify
C++ Type:MeshGeneratorName
Controllable:No
Description:The mesh we want to modify
- new_sideset_nameThe name of the new sideset
C++ Type:BoundaryName
Controllable:No
Description:The name of the new sideset
ParsedGenerateSideset
A MeshGenerator that adds element sides to a sideset if the centroid of the side satisfies the combinatorial_geometry
expression.
Optionally, additional constraints can be imposed when examining a node based on :
the side's normal
the subdomain of the element owning the side considered for the sideset
the neighbor of this element, on the other side of the side
whether the side is already part of (or not part of) an existing boundary
whether the side is 'external', e.g. it lies on the mesh exterior boundary
Input Parameters
- constant_expressionsVector of values for the constants in constant_names (can be an FParser expression)
C++ Type:std::vector<std::string>
Controllable:No
Description:Vector of values for the constants in constant_names (can be an FParser expression)
- constant_namesVector of constants used in the parsed function
C++ Type:std::vector<std::string>
Controllable:No
Description:Vector of constants used in the parsed function
- epsilon0Fuzzy comparison tolerance
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Fuzzy comparison tolerance
- fixed_normalFalseThis Boolean determines whether we fix our normal or allow it to vary to "paint" around curves
Default:False
C++ Type:bool
Controllable:No
Description:This Boolean determines whether we fix our normal or allow it to vary to "paint" around curves
- 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
- disable_fpoptimizerFalseDisable the function parser algebraic optimizer
Default:False
C++ Type:bool
Controllable:No
Description:Disable the function parser algebraic optimizer
- enable_ad_cacheTrueEnable caching of function derivatives for faster startup time
Default:True
C++ Type:bool
Controllable:No
Description:Enable caching of function derivatives for faster startup time
- enable_auto_optimizeTrueEnable automatic immediate optimization of derivatives
Default:True
C++ Type:bool
Controllable:No
Description:Enable automatic immediate optimization of derivatives
- enable_jitTrueEnable just-in-time compilation of function expressions for faster evaluation
Default:True
C++ Type:bool
Controllable:No
Description:Enable just-in-time compilation of function expressions for faster evaluation
- evalerror_behaviornanWhat to do if evaluation error occurs. Options are to pass a nan, pass a nan with a warning, throw a error, or throw an exception
Default:nan
C++ Type:MooseEnum
Options:nan, nan_warning, error, exception
Controllable:No
Description:What to do if evaluation error occurs. Options are to pass a nan, pass a nan with a warning, throw a error, or throw an exception
Parsed Expression Advanced 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
- (modules/porous_flow/examples/tutorial/00.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_and_counterpump_loop.i)
- (modules/porous_flow/examples/tutorial/11.i)
- (modules/porous_flow/examples/tutorial/07.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/solidification/pipe_solidification.i)
- (modules/porous_flow/examples/tutorial/05.i)
- (modules/navier_stokes/test/tests/finite_volume/materials/flow_diode/transient_operation.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_pressure_corrected.i)
- (modules/heat_transfer/test/tests/radiative_bcs/ad_radiative_bc_cyl.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_loop.i)
- (modules/heat_transfer/test/tests/radiative_bcs/radiative_bc_cyl.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_loop_negative_rotation.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-jump.i)
- (modules/porous_flow/examples/multiapp_fracture_flow/fracture_diffusion/no_multiapp.i)
- (modules/heat_transfer/test/tests/radiation_transfer_action/radiative_transfer_action_external_boundary.i)
- (test/tests/meshgenerators/show_info/show_info.i)
- (modules/porous_flow/examples/tutorial/01.i)
- (test/tests/meshgenerators/nodesets_from_sidesets_generator/from_sides.i)
- (modules/porous_flow/examples/tutorial/06_KT.i)
- (test/tests/fvbcs/fv_neumannbc/fv_neumannbc.i)
- (modules/navier_stokes/examples/flow-over-circle/mesh.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-energy-nonorthogonal.i)
- (modules/porous_flow/examples/tutorial/05_tabulated.i)
- (modules/heat_transfer/test/tests/radiation_transfer_symmetry/cavity_with_pillars.i)
- (modules/heat_transfer/test/tests/radiation_transfer_symmetry/cavity_with_pillars_symmetry_bc.i)
- (test/tests/meshgenerators/advanced_extruder_generator/advanced_extruder_then_parsed_gen_sideset.i)
- (modules/heat_transfer/test/tests/view_factors_symmetry/cavity_with_pillars.i)
- (modules/porous_flow/examples/tutorial/08.i)
- (modules/porous_flow/examples/ates/ates.i)
- (test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_boundary_excluded.i)
- (test/tests/meshgenerators/circular_correction_generator/partial_circle_rad.i)
- (modules/porous_flow/examples/tutorial/08_KT.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-no-jump.i)
- (modules/porous_flow/examples/tutorial/06.i)
- (test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_exterior_limited.i)
- (modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_as_volume_force_loop_force_corrected.i)
- (test/tests/meshgenerators/flip_sideset_generator/flux_flip_2D.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-energy.i)
- (modules/porous_flow/examples/tutorial/00_2D.i)
- (modules/heat_transfer/test/tests/view_factors_symmetry/cavity_with_pillars_symmetry_bc.i)
- (modules/heat_transfer/test/tests/radiation_transfer_action/radiative_transfer_action_external_boundary_ray_tracing.i)
- (modules/porous_flow/examples/tutorial/11_2D.i)
- (test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_neighbor_sub_id.i)
- (test/tests/meshgenerators/cyclic/cyclic.i)
- (modules/porous_flow/examples/tutorial/03.i)
- (modules/navier_stokes/test/tests/finite_volume/materials/flow_diode/friction.i)
- (modules/porous_flow/examples/natural_convection/natural_convection.i)
- (test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_boundary_limited.i)
- (test/tests/vectorpostprocessors/side_value_sampler/side_value_sampler.i)
- (modules/porous_flow/examples/tutorial/10.i)
- (modules/porous_flow/examples/tutorial/04.i)
- (test/tests/meshgenerators/mesh_diagnostics_generator/consistent_domains.i)
- (modules/porous_flow/examples/groundwater/ex02_steady_state.i)
- (test/tests/meshgenerators/circular_correction_generator/partial_circle_span.i)
- (test/tests/meshgenerators/flip_sideset_generator/flux_flip_3D.i)
- (test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset.i)
- (modules/subchannel/examples/duct/wrapper.i)
- (modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-scalar.i)
(modules/porous_flow/examples/tutorial/00.i)
# Creates the mesh for the remainder of the tutorial
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[Variables]
[dummy_var]
[]
[]
[Kernels]
[dummy_diffusion]
type = Diffusion
variable = dummy_var
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
file_base = 3D_mesh
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_and_counterpump_loop.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_1_domain]
type = ParsedSubdomainMeshGenerator
input = lump_bdries_to_wall
combinatorial_geometry = 'x > 0.3 & x < 0.4 & y > 0.5'
block_id = '3'
[]
[pump_2_domain]
type = ParsedSubdomainMeshGenerator
input = pump_1_domain
combinatorial_geometry = 'x > 0.5 & y > 0.3 & y < 0.4'
block_id = '4'
[]
[rename_blocks]
type = RenameBlockGenerator
input = pump_2_domain
old_block = '1 3 4'
new_block = 'pipe pump_1 pump_2'
[]
[side_pump]
type = ParsedGenerateSideset
input = rename_blocks
included_subdomains = 'pump_1'
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_volume_force_1 pump_volume_force_2'
[]
[]
[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_1]
type = INSFVPump
variable = vel_x
momentum_component = 'x'
pump_volume_force = 'pump_volume_force_1'
block = 'pump_1'
[]
[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
[]
[u_pump_2]
type = INSFVPump
variable = vel_y
momentum_component = 'y'
pump_volume_force = 'pump_volume_force_2'
block = 'pump_2'
[]
[]
[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'
[]
[]
[Functions]
[pump_head]
type = PiecewiseLinear
x = '0.0 10.0'
y = '1000.0 0.0'
[]
[]
[FunctorMaterials]
[pump_mat_1]
type = NSFVPumpFunctorMaterial
rho = ${rho}
speed = 'U'
pressure_head_function = 'pump_head'
rotation_speed = 120
rotation_speed_rated = 100
area_rated = 0.1
volume_rated = 0.01
flow_rate_rated = 1.0
flow_rate = 'flow_rate'
block = 'pump_1'
pump_force_name = 'pump_volume_force_1'
[]
[pump_mat_2]
type = NSFVPumpFunctorMaterial
rho = ${rho}
speed = 'U'
pressure_head_function = 'pump_head'
rotation_speed = 50
rotation_speed_rated = 100
area_rated = 0.1
volume_rated = 0.01
flow_rate_rated = 1.0
flow_rate = 'flow_rate'
block = 'pump_2'
pump_force_name = 'pump_volume_force_2'
[]
[]
[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/porous_flow/examples/tutorial/11.i)
# Two-phase borehole injection problem
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[UserObjects]
[dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater pgas T disp_x disp_y'
number_fluid_phases = 2
number_fluid_components = 2
[]
[pc]
type = PorousFlowCapillaryPressureVG
alpha = 1E-6
m = 0.6
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
gravity = '0 0 0'
biot_coefficient = 1.0
PorousFlowDictator = dictator
[]
[Variables]
[pwater]
initial_condition = 20E6
[]
[pgas]
initial_condition = 20.1E6
[]
[T]
initial_condition = 330
scaling = 1E-5
[]
[disp_x]
scaling = 1E-5
[]
[disp_y]
scaling = 1E-5
[]
[]
[Kernels]
[mass_water_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[]
[flux_water]
type = PorousFlowAdvectiveFlux
fluid_component = 0
use_displaced_mesh = false
variable = pwater
[]
[vol_strain_rate_water]
type = PorousFlowMassVolumetricExpansion
fluid_component = 0
variable = pwater
[]
[mass_co2_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = pgas
[]
[flux_co2]
type = PorousFlowAdvectiveFlux
fluid_component = 1
use_displaced_mesh = false
variable = pgas
[]
[vol_strain_rate_co2]
type = PorousFlowMassVolumetricExpansion
fluid_component = 1
variable = pgas
[]
[energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = T
[]
[advection]
type = PorousFlowHeatAdvection
use_displaced_mesh = false
variable = T
[]
[conduction]
type = PorousFlowHeatConduction
use_displaced_mesh = false
variable = T
[]
[vol_strain_rate_heat]
type = PorousFlowHeatVolumetricExpansion
variable = T
[]
[grad_stress_x]
type = StressDivergenceTensors
temperature = T
variable = disp_x
eigenstrain_names = thermal_contribution
use_displaced_mesh = false
component = 0
[]
[poro_x]
type = PorousFlowEffectiveStressCoupling
variable = disp_x
use_displaced_mesh = false
component = 0
[]
[grad_stress_y]
type = StressDivergenceTensors
temperature = T
variable = disp_y
eigenstrain_names = thermal_contribution
use_displaced_mesh = false
component = 1
[]
[poro_y]
type = PorousFlowEffectiveStressCoupling
variable = disp_y
use_displaced_mesh = false
component = 1
[]
[]
[AuxVariables]
[disp_z]
[]
[effective_fluid_pressure]
family = MONOMIAL
order = CONSTANT
[]
[mass_frac_phase0_species0]
initial_condition = 1 # all water in phase=0
[]
[mass_frac_phase1_species0]
initial_condition = 0 # no water in phase=1
[]
[sgas]
family = MONOMIAL
order = CONSTANT
[]
[swater]
family = MONOMIAL
order = CONSTANT
[]
[stress_rr]
family = MONOMIAL
order = CONSTANT
[]
[stress_tt]
family = MONOMIAL
order = CONSTANT
[]
[stress_zz]
family = MONOMIAL
order = CONSTANT
[]
[porosity]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[effective_fluid_pressure]
type = ParsedAux
coupled_variables = 'pwater pgas swater sgas'
expression = 'pwater * swater + pgas * sgas'
variable = effective_fluid_pressure
[]
[swater]
type = PorousFlowPropertyAux
variable = swater
property = saturation
phase = 0
execute_on = timestep_end
[]
[sgas]
type = PorousFlowPropertyAux
variable = sgas
property = saturation
phase = 1
execute_on = timestep_end
[]
[stress_rr]
type = RankTwoScalarAux
variable = stress_rr
rank_two_tensor = stress
scalar_type = RadialStress
point1 = '0 0 0'
point2 = '0 0 1'
execute_on = timestep_end
[]
[stress_tt]
type = RankTwoScalarAux
variable = stress_tt
rank_two_tensor = stress
scalar_type = HoopStress
point1 = '0 0 0'
point2 = '0 0 1'
execute_on = timestep_end
[]
[stress_zz]
type = RankTwoAux
variable = stress_zz
rank_two_tensor = stress
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[porosity]
type = PorousFlowPropertyAux
variable = porosity
property = porosity
execute_on = timestep_end
[]
[]
[BCs]
[roller_tmax]
type = DirichletBC
variable = disp_x
value = 0
boundary = dmax
[]
[roller_tmin]
type = DirichletBC
variable = disp_y
value = 0
boundary = dmin
[]
[pinned_top_bottom_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'top bottom'
[]
[pinned_top_bottom_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'top bottom'
[]
[cavity_pressure_x]
type = Pressure
boundary = injection_area
variable = disp_x
component = 0
postprocessor = constrained_effective_fluid_pressure_at_wellbore
use_displaced_mesh = false
[]
[cavity_pressure_y]
type = Pressure
boundary = injection_area
variable = disp_y
component = 1
postprocessor = constrained_effective_fluid_pressure_at_wellbore
use_displaced_mesh = false
[]
[cold_co2]
type = DirichletBC
boundary = injection_area
variable = T
value = 290 # injection temperature
use_displaced_mesh = false
[]
[constant_co2_injection]
type = PorousFlowSink
boundary = injection_area
variable = pgas
fluid_phase = 1
flux_function = -1E-4
use_displaced_mesh = false
[]
[outer_water_removal]
type = PorousFlowPiecewiseLinearSink
boundary = rmax
variable = pwater
fluid_phase = 0
pt_vals = '0 1E9'
multipliers = '0 1E8'
PT_shift = 20E6
use_mobility = true
use_relperm = true
use_displaced_mesh = false
[]
[outer_co2_removal]
type = PorousFlowPiecewiseLinearSink
boundary = rmax
variable = pgas
fluid_phase = 1
pt_vals = '0 1E9'
multipliers = '0 1E8'
PT_shift = 20.1E6
use_mobility = true
use_relperm = true
use_displaced_mesh = false
[]
[]
[FluidProperties]
[true_water]
type = Water97FluidProperties
[]
[tabulated_water]
type = TabulatedFluidProperties
fp = true_water
temperature_min = 275
pressure_max = 1E8
interpolated_properties = 'density viscosity enthalpy internal_energy'
fluid_property_output_file = water97_tabulated_11.csv
# Comment out the fp parameter and uncomment below to use the newly generated tabulation
# fluid_property_file = water97_tabulated_11.csv
[]
[true_co2]
type = CO2FluidProperties
[]
[tabulated_co2]
type = TabulatedFluidProperties
fp = true_co2
temperature_min = 275
pressure_max = 1E8
interpolated_properties = 'density viscosity enthalpy internal_energy'
fluid_property_output_file = co2_tabulated_11.csv
# Comment out the fp parameter and uncomment below to use the newly generated tabulation
# fluid_property_file = co2_tabulated_11.csv
[]
[]
[Materials]
[temperature]
type = PorousFlowTemperature
temperature = T
[]
[saturation_calculator]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[]
[massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'mass_frac_phase0_species0 mass_frac_phase1_species0'
[]
[water]
type = PorousFlowSingleComponentFluid
fp = tabulated_water
phase = 0
[]
[co2]
type = PorousFlowSingleComponentFluid
fp = tabulated_co2
phase = 1
[]
[relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 4
s_res = 0.1
sum_s_res = 0.2
phase = 0
[]
[relperm_co2]
type = PorousFlowRelativePermeabilityBC
nw_phase = true
lambda = 2
s_res = 0.1
sum_s_res = 0.2
phase = 1
[]
[porosity_mat]
type = PorousFlowPorosity
fluid = true
mechanical = true
thermal = true
porosity_zero = 0.1
reference_temperature = 330
reference_porepressure = 20E6
thermal_expansion_coeff = 15E-6 # volumetric
solid_bulk = 8E9 # unimportant since biot = 1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityKozenyCarman
block = aquifer
poroperm_function = kozeny_carman_phi0
phi0 = 0.1
n = 2
m = 2
k0 = 1E-12
[]
[permeability_caps]
type = PorousFlowPermeabilityKozenyCarman
block = caps
poroperm_function = kozeny_carman_phi0
phi0 = 0.1
n = 2
m = 2
k0 = 1E-15
k_anisotropy = '1 0 0 0 1 0 0 0 0.1'
[]
[rock_thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '2 0 0 0 2 0 0 0 2'
[]
[rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1100
density = 2300
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 5E9
poissons_ratio = 0.0
[]
[strain]
type = ComputeSmallStrain
eigenstrain_names = 'thermal_contribution initial_stress'
[]
[thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = T
thermal_expansion_coeff = 5E-6 # this is the linear thermal expansion coefficient
eigenstrain_name = thermal_contribution
stress_free_temperature = 330
[]
[initial_strain]
type = ComputeEigenstrainFromInitialStress
initial_stress = '20E6 0 0 0 20E6 0 0 0 20E6'
eigenstrain_name = initial_stress
[]
[stress]
type = ComputeLinearElasticStress
[]
[effective_fluid_pressure_mat]
type = PorousFlowEffectiveFluidPressure
[]
[volumetric_strain]
type = PorousFlowVolumetricStrain
[]
[]
[Postprocessors]
[effective_fluid_pressure_at_wellbore]
type = PointValue
variable = effective_fluid_pressure
point = '1 0 0'
execute_on = timestep_begin
use_displaced_mesh = false
[]
[constrained_effective_fluid_pressure_at_wellbore]
type = FunctionValuePostprocessor
function = constrain_effective_fluid_pressure
execute_on = timestep_begin
[]
[]
[Functions]
[constrain_effective_fluid_pressure]
type = ParsedFunction
symbol_names = effective_fluid_pressure_at_wellbore
symbol_values = effective_fluid_pressure_at_wellbore
expression = 'max(effective_fluid_pressure_at_wellbore, 20E6)'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E3
[TimeStepper]
type = IterationAdaptiveDT
dt = 1E3
growth_factor = 1.2
optimal_iterations = 10
[]
nl_abs_tol = 1E-7
[]
[Outputs]
exodus = true
[]
(modules/porous_flow/examples/tutorial/07.i)
# Darcy flow with a tracer that precipitates causing mineralisation and porosity changes and permeability changes
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[tracer_concentration]
[]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer_concentration
number_aqueous_kinetic = 1
temperature = 283.0
stabilization = none # Note to reader: try this with other stabilization and compare the results
[]
[AuxVariables]
[eqm_k]
initial_condition = 0.1
[]
[mineral_conc]
family = MONOMIAL
order = CONSTANT
[]
[initial_and_reference_conc]
initial_condition = 0
[]
[porosity]
family = MONOMIAL
order = CONSTANT
[]
[permeability]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[mineral_conc]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral_conc
[]
[porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[]
[permeability]
type = PorousFlowPropertyAux
property = permeability
column = 0
row = 0
variable = permeability
[]
[]
[Kernels]
[precipitation_dissolution]
type = PorousFlowPreDis
mineral_density = 1000.0
stoichiometry = 1
variable = tracer_concentration
[]
[]
[BCs]
[constant_injection_of_tracer]
type = PorousFlowSink
variable = tracer_concentration
flux_function = -5E-3
boundary = injection_area
[]
[constant_outer_porepressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity_mat]
type = PorousFlowPorosity
porosity_zero = 0.1
chemical = true
initial_mineral_concentrations = initial_and_reference_conc
reference_chemistry = initial_and_reference_conc
[]
[permeability_aquifer]
type = PorousFlowPermeabilityKozenyCarman
block = aquifer
k0 = 1E-14
m = 2
n = 3
phi0 = 0.1
poroperm_function = kozeny_carman_phi0
[]
[permeability_caps]
type = PorousFlowPermeabilityKozenyCarman
block = caps
k0 = 1E-15
k_anisotropy = '1 0 0 0 1 0 0 0 0.1'
m = 2
n = 3
phi0 = 0.1
poroperm_function = kozeny_carman_phi0
[]
[precipitation_dissolution_mat]
type = PorousFlowAqueousPreDisChemistry
reference_temperature = 283.0
activation_energy = 1 # irrelevant because T=Tref
equilibrium_constants = eqm_k # equilibrium tracer concentration
kinetic_rate_constant = 1E-8
molar_volume = 1
num_reactions = 1
primary_activity_coefficients = 1
primary_concentrations = tracer_concentration
reactions = 1
specific_reactive_surface_area = 1
[]
[mineral_concentration]
type = PorousFlowAqueousPreDisMineral
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/ins/solidification/pipe_solidification.i)
mu = 8.8871e-4
rho_solid = 997.561
rho_liquid = 997.561
k_solid = 0.6203
k_liquid = 0.6203
cp_solid = 4181.72
cp_liquid = 4181.72
L = 3e5
T_liquidus = 285
T_solidus = 280
advected_interp_method = 'average'
velocity_interp_method = 'rc'
U_inlet = '${fparse 0.5 * mu / rho_liquid / 0.5}'
T_inlet = 300.0
T_cold = 200.0
Nx = 30
Ny = 5
[GlobalParams]
rhie_chow_user_object = 'rc'
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
u = vel_x
v = vel_y
pressure = pressure
[]
[]
[Mesh]
coord_type = 'RZ'
rz_coord_axis = 'X'
[gen]
type = GeneratedMeshGenerator
dim = 2
xmin = 0
xmax = 10
ymin = 0
ymax = '${fparse 0.5 * 1.0}'
nx = ${Nx}
ny = ${Ny}
bias_y = '${fparse 1 / 1.2}'
[]
[rename1]
type = RenameBoundaryGenerator
input = gen
old_boundary = 'left'
new_boundary = 'inlet'
[]
[rename2]
type = RenameBoundaryGenerator
input = rename1
old_boundary = 'right'
new_boundary = 'outlet'
[]
[rename3]
type = RenameBoundaryGenerator
input = rename2
old_boundary = 'bottom'
new_boundary = 'symmetry'
[]
[rename4]
type = RenameBoundaryGenerator
input = rename3
old_boundary = 'top'
new_boundary = 'wall'
[]
[rename5]
type = ParsedGenerateSideset
input = rename4
normal = '0 1 0'
combinatorial_geometry = 'x>2.0 & x<8.0 & y>0.49999'
new_sideset_name = 'cooled_wall'
[]
[]
[AuxVariables]
[U]
type = MooseVariableFVReal
[]
[fl]
type = MooseVariableFVReal
initial_condition = 1.0
[]
[density]
type = MooseVariableFVReal
[]
[th_cond]
type = MooseVariableFVReal
[]
[cp_var]
type = MooseVariableFVReal
[]
[darcy_coef]
type = MooseVariableFVReal
[]
[fch_coef]
type = MooseVariableFVReal
[]
[]
[AuxKernels]
[mag]
type = VectorMagnitudeAux
variable = U
x = vel_x
y = vel_y
[]
[compute_fl]
type = NSLiquidFractionAux
variable = fl
temperature = T
T_liquidus = '${T_liquidus}'
T_solidus = '${T_solidus}'
execute_on = 'TIMESTEP_END'
[]
[rho_out]
type = FunctorAux
functor = 'rho_mixture'
variable = 'density'
[]
[th_cond_out]
type = FunctorAux
functor = 'k_mixture'
variable = 'th_cond'
[]
[cp_out]
type = FunctorAux
functor = 'cp_mixture'
variable = 'cp_var'
[]
[darcy_out]
type = FunctorAux
functor = 'Darcy_coefficient'
variable = 'darcy_coef'
[]
[fch_out]
type = FunctorAux
functor = 'Forchheimer_coefficient'
variable = 'fch_coef'
[]
[]
[Variables]
[vel_x]
type = INSFVVelocityVariable
initial_condition = 0.0
[]
[vel_y]
type = INSFVVelocityVariable
initial_condition = 0.0
[]
[pressure]
type = INSFVPressureVariable
[]
[T]
type = INSFVEnergyVariable
initial_condition = '${T_inlet}'
scaling = 1.0
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
advected_interp_method = ${advected_interp_method}
velocity_interp_method = ${velocity_interp_method}
rho = rho_mixture
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = vel_x
rho = rho_mixture
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = vel_x
advected_interp_method = ${advected_interp_method}
velocity_interp_method = ${velocity_interp_method}
rho = rho_mixture
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_friction]
type = PINSFVMomentumFriction
variable = vel_x
momentum_component = 'x'
u = vel_x
v = vel_y
Darcy_name = 'Darcy_coeff'
Forchheimer_name = 'Forchheimer_coeff'
rho = ${rho_liquid}
mu = ${mu}
standard_friction_formulation = false
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = vel_y
rho = rho_mixture
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = vel_y
advected_interp_method = ${advected_interp_method}
velocity_interp_method = ${velocity_interp_method}
rho = rho_mixture
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
[]
[v_friction]
type = PINSFVMomentumFriction
variable = vel_y
momentum_component = 'y'
u = vel_x
v = vel_y
Darcy_name = 'Darcy_coeff'
Forchheimer_name = 'Forchheimer_coeff'
rho = ${rho_liquid}
mu = ${mu}
standard_friction_formulation = false
[]
[T_time]
type = INSFVEnergyTimeDerivative
variable = T
rho = rho_mixture
dh_dt = dh_dt
[]
[energy_advection]
type = INSFVEnergyAdvection
variable = T
velocity_interp_method = ${velocity_interp_method}
advected_interp_method = ${advected_interp_method}
[]
[energy_diffusion]
type = FVDiffusion
coeff = k_mixture
variable = T
[]
[energy_source]
type = NSFVPhaseChangeSource
variable = T
L = ${L}
liquid_fraction = fl
T_liquidus = ${T_liquidus}
T_solidus = ${T_solidus}
rho = 'rho_mixture'
[]
[]
[FVBCs]
[inlet-u]
type = INSFVInletVelocityBC
boundary = 'inlet'
variable = vel_x
function = '${U_inlet}'
[]
[sym_u]
type = INSFVSymmetryVelocityBC
boundary = 'symmetry'
variable = vel_x
u = vel_x
v = vel_y
mu = ${mu}
momentum_component = 'x'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'inlet'
variable = vel_y
function = 0
[]
[walls-u]
type = INSFVNoSlipWallBC
boundary = 'wall'
variable = vel_x
function = 0
[]
[walls-v]
type = INSFVNoSlipWallBC
boundary = 'wall'
variable = vel_y
function = 0
[]
[sym_v]
type = INSFVSymmetryVelocityBC
boundary = 'symmetry'
variable = vel_y
u = vel_x
v = vel_y
mu = ${mu}
momentum_component = y
[]
[outlet_p]
type = INSFVOutletPressureBC
boundary = 'outlet'
variable = pressure
function = 0
[]
[sym_p]
type = INSFVSymmetryPressureBC
boundary = 'symmetry'
variable = pressure
[]
[sym_T]
type = INSFVSymmetryScalarBC
variable = T
boundary = 'symmetry'
[]
[cooled_wall]
type = FVFunctorDirichletBC
variable = T
functor = '${T_cold}'
boundary = 'cooled_wall'
[]
[]
[FunctorMaterials]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
rho = rho_mixture
cp = cp_mixture
temperature = 'T'
[]
[eff_cp]
type = NSFVMixtureFunctorMaterial
phase_2_names = '${cp_solid} ${k_solid} ${rho_solid}'
phase_1_names = '${cp_liquid} ${k_liquid} ${rho_liquid}'
prop_names = 'cp_mixture k_mixture rho_mixture'
phase_1_fraction = fl
[]
[mushy_zone_resistance]
type = INSFVMushyPorousFrictionFunctorMaterial
liquid_fraction = 'fl'
mu = '${mu}'
rho_l = '${rho_liquid}'
[]
[friction]
type = ADGenericVectorFunctorMaterial
prop_names = 'Darcy_coeff Forchheimer_coeff'
prop_values = 'darcy_coef darcy_coef darcy_coef fch_coef fch_coef fch_coef'
[]
[]
[Executioner]
type = Transient
dt = 5e3
end_time = 1e4
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type'
petsc_options_value = 'lu NONZERO'
nl_abs_tol = 1e-8
nl_max_its = 12
[]
[Postprocessors]
[average_T]
type = ElementAverageValue
variable = T
outputs = csv
execute_on = FINAL
[]
[]
[VectorPostprocessors]
[sat]
type = LineValueSampler
warn_discontinuous_face_values = false
start_point = '0.0 0 0'
end_point = '10.0 0 0'
num_points = '${Nx}'
sort_by = x
variable = 'T'
execute_on = FINAL
[]
[]
[Outputs]
exodus = true
[csv]
type = CSV
execute_on = 'FINAL'
[]
[]
(modules/porous_flow/examples/tutorial/05.i)
# Darcy flow with heat advection and conduction, using Water97 properties
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
initial_condition = 1E6
[]
[temperature]
initial_condition = 313
scaling = 1E-8
[]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 2E6
boundary = injection_area
[]
[constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 333
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = Water97FluidProperties
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
biot_coefficient = 0.8
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[]
[rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[]
[thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caps aquifer'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/materials/flow_diode/transient_operation.i)
# Horizontal H junction with flow in different directions in the two branches
# One of the branches has a diode against the direction of the flow that can
# be triggered using the Controls
# There are 3 different strategies available for the diode blocking the flow
# - based on a time trigger
# - based on a pressure drop (here chosen across the diode)
# - based on a mass flow rate (here chosen through the diode)
mu = 0.1
rho = 10
nx = 10
ny = 5
[Mesh]
[cmg]
type = CartesianMeshGenerator
dim = 2
dx = '1 0.3 1'
dy = '0.5 0.2 0.5'
ix = '${nx} ${fparse nx/2} ${nx}'
iy = '${ny} ${ny} ${ny}'
subdomain_id = '1 1 1
2 1 2
3 4 1'
[]
[add_walls]
type = SideSetsBetweenSubdomainsGenerator
input = 'cmg'
primary_block = '1 3 4'
paired_block = '2'
new_boundary = 'walls'
[]
[remove_wall_blocks]
type = BlockDeletionGenerator
input = add_walls
block = 2
[]
# Add inlets and outlets
[top_left]
type = ParsedGenerateSideset
input = remove_wall_blocks
combinatorial_geometry = 'x<0.001 & y>0.6'
new_sideset_name = top_left
[]
[bottom_left]
type = ParsedGenerateSideset
input = top_left
combinatorial_geometry = 'x<0.001 & y<0.6'
new_sideset_name = bottom_left
[]
[top_right]
type = ParsedGenerateSideset
input = bottom_left
combinatorial_geometry = 'x>2.299 & y>0.6'
new_sideset_name = top_right
[]
[bottom_right]
type = ParsedGenerateSideset
input = top_right
combinatorial_geometry = 'x>2.299 & y<0.6'
new_sideset_name = bottom_right
[]
# Extra surfaces
[diode_inlet]
type = SideSetsBetweenSubdomainsGenerator
input = bottom_right
primary_block = 4
paired_block = 3
new_boundary = 'diode_inlet'
[]
[mid_section]
type = SideSetsBetweenSubdomainsGenerator
input = diode_inlet
primary_block = 4
paired_block = 1
new_boundary = 'mid_connection'
[]
[reduce_blocks]
type = RenameBlockGenerator
input = 'mid_section'
old_block = '4 3 1'
new_block = '1 diode fluid'
[]
[]
[GlobalParams]
rhie_chow_user_object = 'pins_rhie_chow_interpolator'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
[]
[Modules]
[NavierStokesFV]
compressibility = 'incompressible'
porous_medium_treatment = true
density = ${rho}
dynamic_viscosity = ${mu}
initial_velocity = '1e-6 1e-6 0'
initial_pressure = 0.0
inlet_boundaries = 'bottom_left top_right'
momentum_inlet_types = 'fixed-velocity fixed-velocity'
momentum_inlet_function = '1 0; -1 0'
wall_boundaries = 'top bottom walls'
momentum_wall_types = 'noslip noslip noslip'
outlet_boundaries = 'bottom_right top_left'
momentum_outlet_types = 'fixed-pressure fixed-pressure'
pressure_function = '1 1'
friction_blocks = 'fluid; diode'
friction_types = 'darcy forchheimer; darcy forchheimer'
standard_friction_formulation = true
# Base friction
# friction_coeffs = 'Darcy Forchheimer; Darcy Forchheimer'
# Combined with diode
friction_coeffs = 'combined_linear combined_quadratic; combined_linear combined_quadratic'
# Porosity jump treatment
# Option 1: diffusion correction
use_friction_correction = true
consistent_scaling = 10
# Option 2: bernouilli jump
# porosity_interface_pressure_treatment = bernoulli
mass_advection_interpolation = 'average'
momentum_advection_interpolation = 'average'
[]
[]
[FunctorMaterials]
[porosity]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '0.5'
[]
[base_friction]
type = ADGenericVectorFunctorMaterial
prop_names = 'Darcy Forchheimer'
prop_values = '220 240 260 0 0 0'
[]
# Material definitions needed for the diode
[diode]
type = NSFVFrictionFlowDiodeFunctorMaterial
# Friction only in X direction
direction = '-1 0 0'
additional_linear_resistance = '20000 0 0'
additional_quadratic_resistance = '0 0 0'
base_linear_friction_coefs = 'Darcy'
base_quadratic_friction_coefs = 'Forchheimer'
sum_linear_friction_name = 'diode_linear'
sum_quadratic_friction_name = 'diode_quad'
block = 'diode'
turn_on_diode = false
[]
[combine_linear_friction]
type = ADPiecewiseByBlockVectorFunctorMaterial
prop_name = 'combined_linear'
subdomain_to_prop_value = 'fluid Darcy
diode diode_linear'
[]
[combine_quadratic_friction]
type = ADPiecewiseByBlockVectorFunctorMaterial
prop_name = 'combined_quadratic'
subdomain_to_prop_value = 'fluid Forchheimer
diode diode_quad'
[]
# density is constant
[momentum]
type = ADGenericVectorFunctorMaterial
prop_names = 'momentum'
prop_values = 'superficial_vel_x superficial_vel_y 0'
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 200'
line_search = 'none'
end_time = 0.2
dt = 0.015
nl_abs_tol = 1e-12
[]
[Controls]
active = 'pdrop_based'
# Case 1: Diode turns on at a certain time and blocks (adds friction) flow at a given time
[time_based]
type = BoolFunctionControl
function = time_function
parameter = 'FunctorMaterials/diode/turn_on_diode'
execute_on = timestep_begin
[]
# Case 2: Diode looks at pressure drop, reduces flow if positive pressure drop
# This will not oscillate as the diode increases the pressure drop
[pdrop_based]
type = BoolFunctionControl
function = pdrop_positive
parameter = 'FunctorMaterials/diode/turn_on_diode'
execute_on = timestep_begin
[]
# Case 3: Diode looks at flow direction & quantity, reduces flow if too much flow
# in a given direction
# This will oscillate (turn on/off on each step) if the action of turning the diode
# makes the amount of flow smaller than the threshold for turning on the diode
[flow_based]
type = BoolFunctionControl
function = velocity_big_enough
parameter = 'FunctorMaterials/diode/turn_on_diode'
execute_on = timestep_begin
[]
[]
[Functions]
# Functions are used to parse postprocessors and provide them to a BoolFunctionControl
[time_function]
type = ParsedFunction
expression = 'if(t<0.1, 0, 1)'
[]
[pdrop_positive]
type = ParsedFunction
expression = 'if(pdrop_diode>100, 1, 0)'
symbol_names = pdrop_diode
symbol_values = pdrop_diode
[]
[velocity_big_enough]
type = ParsedFunction
expression = 'if(flow_diode<-0.4, 1, 0)'
symbol_names = flow_diode
symbol_values = flow_diode
[]
[]
[Postprocessors]
# Analysis of the simulation
[mdot_top]
type = VolumetricFlowRate
boundary = 'top_right'
vel_x = superficial_vel_x
vel_y = superficial_vel_y
advected_quantity = ${rho}
[]
[mdot_bottom]
type = VolumetricFlowRate
boundary = 'bottom_right'
vel_x = superficial_vel_x
vel_y = superficial_vel_y
advected_quantity = ${rho}
[]
[mdot_middle]
type = VolumetricFlowRate
boundary = 'mid_connection'
vel_x = superficial_vel_x
vel_y = superficial_vel_y
advected_quantity = ${rho}
[]
[pdrop_top_channel]
type = PressureDrop
upstream_boundary = 'top_left'
downstream_boundary = 'top_right'
weighting_functor = 'momentum'
boundary = 'top_left top_right'
pressure = pressure
[]
[pdrop_bottom_channel]
type = PressureDrop
upstream_boundary = 'bottom_left'
downstream_boundary = 'bottom_right'
weighting_functor = 'momentum'
boundary = 'bottom_left bottom_right'
pressure = pressure
[]
# Diode operation
[pdrop_diode]
type = PressureDrop
upstream_boundary = 'diode_inlet'
downstream_boundary = 'top_left'
weighting_functor = 'momentum'
boundary = 'diode_inlet top_left'
pressure = pressure
[]
[flow_diode]
type = VolumetricFlowRate
boundary = 'diode_inlet'
vel_x = superficial_vel_x
vel_y = superficial_vel_y
advected_quantity = ${rho}
[]
[]
[Outputs]
exodus = true
csv = 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/heat_transfer/test/tests/radiative_bcs/ad_radiative_bc_cyl.i)
#
# Thin cylindrical shell with very high thermal conductivity
# so that temperature is almost uniform at 500 K. Radiative
# boundary conditions is applied. Heat flux out of boundary
# 'right' should be 3723.36; this is approached as the mesh
# is refined
#
[Mesh]
type = MeshGeneratorMesh
[cartesian]
type = CartesianMeshGenerator
dim = 2
dx = '1 1'
ix = '1 10'
dy = '1 1'
subdomain_id = '1 2 1 2'
[]
[remove_1]
type = BlockDeletionGenerator
block = 1
input = cartesian
[]
[readd_left]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(x - 1) < 1e-4'
new_sideset_name = left
input = remove_1
[]
[]
[Problem]
coord_type = RZ
[]
[Variables]
[temp]
initial_condition = 800.0
[]
[]
[Kernels]
[heat]
type = ADHeatConduction
variable = temp
[]
[]
[BCs]
[lefttemp]
type = ADDirichletBC
boundary = left
variable = temp
value = 800
[]
[radiative_bc]
type = ADInfiniteCylinderRadiativeBC
boundary = right
variable = temp
boundary_radius = 2
boundary_emissivity = 0.2
cylinder_radius = 3
cylinder_emissivity = 0.7
Tinfinity = 500
[]
[]
[Materials]
[density]
type = ADGenericConstantMaterial
prop_names = 'density thermal_conductivity'
prop_values = '1 1.0e5'
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Steady
petsc_options = '-snes_converged_reason'
line_search = none
nl_rel_tol = 1e-6
nl_abs_tol = 1e-7
[]
[Postprocessors]
[right]
type = ADSideDiffusiveFluxAverage
variable = temp
boundary = right
diffusivity = thermal_conductivity
[]
[min_temp]
type = ElementExtremeValue
variable = temp
value_type = min
[]
[max_temp]
type = ElementExtremeValue
variable = temp
value_type = max
[]
[]
[Outputs]
csv = true
[]
(modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_loop.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.4 & 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_volume_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 = INSFVPump
variable = vel_x
momentum_component = 'x'
pump_volume_force = 'pump_volume_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'
[]
[]
[Functions]
[pump_head]
type = PiecewiseLinear
x = '0.0 10.0'
y = '1000.0 0.0'
[]
[]
[FunctorMaterials]
[pump_mat]
type = NSFVPumpFunctorMaterial
rho = ${rho}
speed = 'U'
pressure_head_function = 'pump_head'
rotation_speed = 120
rotation_speed_rated = 100
area_rated = 0.1
volume_rated = 0.01
flow_rate_rated = 1.0
flow_rate = 'flow_rate'
block = 'pump'
[]
[]
[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/heat_transfer/test/tests/radiative_bcs/radiative_bc_cyl.i)
#
# Thin cylindrical shell with very high thermal conductivity
# so that temperature is almost uniform at 500 K. Radiative
# boundary conditions is applied. Heat flux out of boundary
# 'right' should be 3723.36; this is approached as the mesh
# is refined
#
[Mesh]
type = MeshGeneratorMesh
[./cartesian]
type = CartesianMeshGenerator
dim = 2
dx = '1 1'
ix = '1 10'
dy = '1 1'
subdomain_id = '1 2 1 2'
[../]
[./remove_1]
type = BlockDeletionGenerator
block = 1
input = cartesian
[../]
[./readd_left]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(x - 1) < 1e-4'
new_sideset_name = left
input = remove_1
[../]
[]
[Problem]
coord_type = RZ
[]
[Variables]
[./temp]
initial_condition = 800.0
[../]
[]
[Kernels]
[./heat]
type = HeatConduction
variable = temp
[../]
[]
[BCs]
[./lefttemp]
type = DirichletBC
boundary = left
variable = temp
value = 800
[../]
[./radiative_bc]
type = InfiniteCylinderRadiativeBC
boundary = right
variable = temp
boundary_radius = 2
boundary_emissivity = 0.2
cylinder_radius = 3
cylinder_emissivity = 0.7
Tinfinity = 500
[../]
[]
[Materials]
[./density]
type = GenericConstantMaterial
prop_names = 'density thermal_conductivity'
prop_values = '1 1.0e5'
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
petsc_options = '-snes_converged_reason'
line_search = none
nl_rel_tol = 1e-6
nl_abs_tol = 1e-7
[]
[Postprocessors]
[./right]
type = SideDiffusiveFluxAverage
variable = temp
boundary = right
diffusivity = thermal_conductivity
[../]
[./min_temp]
type = ElementExtremeValue
variable = temp
value_type = min
[../]
[./max_temp]
type = ElementExtremeValue
variable = temp
value_type = max
[../]
[]
[Outputs]
csv = true
[]
(modules/navier_stokes/test/tests/finite_volume/ins/pump/pump_loop_negative_rotation.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.4 & 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_volume_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 = INSFVPump
variable = vel_x
momentum_component = 'x'
pump_volume_force = 'pump_volume_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'
[]
[]
[Functions]
[pump_head_negative]
type = PiecewiseLinear
x = '0.0 10.0'
y = '1000.0 0.0'
[]
[]
[FunctorMaterials]
[pump_mat]
type = NSFVPumpFunctorMaterial
rho = ${rho}
speed = 'U'
rotation_speed = 120
rotation_speed_rated = 100
area_rated = 0.1
volume_rated = 0.01
flow_rate_rated = 1.0
flow_rate = 'flow_rate'
block = 'pump'
enable_negative_rotation = true
symmetric_negative_pressure_head = false
pressure_head_function_negative_rotation = 'pump_head_negative'
[]
[]
[Postprocessors]
[flow_rate]
type = Receiver
default = 1.0
[]
[flow_rate_to_pipe]
type = VolumetricFlowRate
advected_quantity = ${rho}
boundary = 'pump_side'
vel_x = 'vel_x'
vel_y = 'vel_y'
[]
[maximum_speed]
type = ADElementExtremeFunctorValue
functor = vel_x
value_type = max
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type'
petsc_options_value = 'lu NONZERO'
nl_rel_tol = 1e-12
[]
[Outputs]
exodus = false
[out]
type = CSV
execute_on = FINAL
show = 'flow_rate_to_pipe maximum_speed'
[]
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-jump.i)
# This test describes a test where three parallel channels are
# separated using flow separators that act as slip boundary conditions.
# The different channels have different pressure discontinuities
# due to Bernoulli pressure jump combined with irreversible form losses.
# Channel 1 expected drop (analytic, Bernoulli plus contraction form loss): 2.079E-01 Pa
# Channel 2 expected drop (analytic, Bernoulli plus contraction form loss): 8.360E-02 Pa
# Channel 3 expected drop (analytic, Bernoulli plus contraction form loss): 1.870E-02 Pa
rho=1.1
advected_interp_method='upwind'
velocity_interp_method='rc'
[Mesh]
[mesh]
type = CartesianMeshGenerator
dim = 2
dx = '0.2 0.2 0.2 0.2'
dy = '0.25 0.25 0.25'
ix = '2 2 2 2'
iy = '2 2 2'
subdomain_id = '1 2 2 2 3 3 4 4 5 5 5 6'
[]
[separator-1]
type = SideSetsBetweenSubdomainsGenerator
input = mesh
primary_block = '1 2'
paired_block = '3 4'
new_boundary = 'separator-1'
[]
[separator-2]
type = SideSetsBetweenSubdomainsGenerator
input = separator-1
primary_block = '3 4'
paired_block = '5 6'
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 = '3'
paired_block = '4'
new_boundary = 'jump-2'
[]
[jump-3]
type = SideSetsBetweenSubdomainsGenerator
input = jump-2
primary_block = '5'
paired_block = '6'
new_boundary = 'jump-3'
[]
[inlet-1]
type = ParsedGenerateSideset
input = jump-3
combinatorial_geometry = 'y < 0.25 & x < 0.00001'
replace = true
new_sideset_name = inlet-1
[]
[inlet-2]
type = ParsedGenerateSideset
input = inlet-1
combinatorial_geometry = 'y > 0.25 & y < 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-2
[]
[inlet-3]
type = ParsedGenerateSideset
input = inlet-2
combinatorial_geometry = 'y > 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-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'
pressure_drop_form_factors = '0.1 0.2 0.3 '
[]
[]
[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_pressure]
type = PINSFVMomentumPressure
variable = superficial_vel_x
pressure = pressure
momentum_component = 'x'
[]
[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_pressure]
type = PINSFVMomentumPressure
variable = superficial_vel_y
pressure = pressure
momentum_component = 'y'
[]
[]
[FVBCs]
[inlet-u-1]
type = INSFVInletVelocityBC
boundary = 'inlet-1'
variable = superficial_vel_x
function = '0.1'
[]
[inlet-u-2]
type = INSFVInletVelocityBC
boundary = 'inlet-2'
variable = superficial_vel_x
function = '0.2'
[]
[inlet-u-3]
type = INSFVInletVelocityBC
boundary = 'inlet-3'
variable = superficial_vel_x
function = '0.3'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'inlet-1 inlet-2 inlet-3'
variable = superficial_vel_y
function = 0
[]
[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
[]
[outlet_p]
type = INSFVOutletPressureBC
boundary = 'right'
variable = pressure
function = 0.4
[]
[]
[FunctorMaterials]
[porosity-1]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '1.0'
block = '1 3 5'
[]
[porosity-2]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '0.5'
block = '2 4 6'
[]
[speed]
type = PINSFVSpeedFunctorMaterial
superficial_vel_x = superficial_vel_x
superficial_vel_y = superficial_vel_y
porosity = porosity
[]
[]
[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]
[inlet_p1]
type = SideAverageValue
variable = 'pressure'
boundary = 'inlet-1'
[]
[inlet_p2]
type = SideAverageValue
variable = 'pressure'
boundary = 'inlet-2'
[]
[inlet_p3]
type = SideAverageValue
variable = 'pressure'
boundary = 'inlet-3'
[]
[drop-1]
type = ParsedPostprocessor
expression = 'inlet_p1 - outlet'
pp_names = 'inlet_p1'
constant_names = 'outlet'
constant_expressions = '0.4'
[]
[drop-2]
type = ParsedPostprocessor
expression = 'inlet_p2 - outlet'
pp_names = 'inlet_p2'
constant_names = 'outlet'
constant_expressions = '0.4'
[]
[drop-3]
type = ParsedPostprocessor
expression = 'inlet_p3 - outlet'
pp_names = 'inlet_p3'
constant_names = 'outlet'
constant_expressions = '0.4'
[]
[]
[Outputs]
csv = true
execute_on = final
[]
(modules/porous_flow/examples/multiapp_fracture_flow/fracture_diffusion/no_multiapp.i)
# A fracture, which is a 1D line of elements, is embedded in a matrix, which is a 2D surface of elements.
# The meshes conform: all fracture nodes are also matrix nodes (the fracture elements are sides of matrix elements).
# The overall mesh has two blocks, named "matrix" and "fracture".
#
# Two variables are defined:
# - frac_T, which is the temperature inside the fracture;
# - matrix_T, which is the temperature in the matrix.
# frac_T is governed by a diffusion equation along the 1D fracture.
# matrix_T is governed by a diffusion equation in the 2D matrix, with small diffusion coefficient.
# Heat is exchanged between the two systems via a heat-transfer coefficient, defined on the fracture subdomain, using two PorousFlowHeatMassTransfer Kernels
#
# If the mesh is too coarse, overshoots and undershoots in matrix_T can be observed.
[Mesh]
[generate]
type = GeneratedMeshGenerator
dim = 2
nx = 20
xmin = 0
xmax = 10.0
ny = 20 # anything less than this produces over/under-shoots
ymin = -2
ymax = 2
[]
[matrix_subdomain]
type = RenameBlockGenerator
input = generate
old_block = 0
new_block = matrix
[]
[fracture_sideset]
type = ParsedGenerateSideset
input = matrix_subdomain
combinatorial_geometry = 'y>-1E-6 & y<1E-6'
normal = '0 1 0'
new_sideset_name = fracture_sideset
[]
[fracture_subdomain]
type = LowerDBlockFromSidesetGenerator
input = fracture_sideset
new_block_id = 1
new_block_name = fracture
sidesets = fracture_sideset
[]
[]
[Variables]
[frac_T]
block = fracture
[]
[matrix_T]
# Needs to be defined on both blocks, so PorousFlowHeatMassTransfer works appropriately
# Kernels for diffusion are on block=matrix only
[]
[]
[BCs]
[frac_T]
type = DirichletBC
variable = frac_T
boundary = left
value = 1
[]
[]
[Kernels]
[dot_frac_T]
type = CoefTimeDerivative
Coefficient = 1E-2
variable = frac_T
block = fracture
[]
[fracture_diffusion]
type = AnisotropicDiffusion
variable = frac_T
tensor_coeff = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
block = fracture
[]
[toMatrix]
type = PorousFlowHeatMassTransfer
block = fracture
variable = frac_T
v = matrix_T
transfer_coefficient = 0.02
[]
[dot_matrix_T]
type = TimeDerivative
variable = matrix_T
block = matrix
[]
[matrix_diffusion]
type = AnisotropicDiffusion
variable = matrix_T
tensor_coeff = '1E-3 0 0 0 1E-3 0 0 0 1E-3'
block = matrix
[]
[fromFracture]
type = PorousFlowHeatMassTransfer
block = fracture
variable = matrix_T
v = frac_T
transfer_coefficient = 0.02
[]
[]
[Preconditioning]
[entire_jacobian]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
dt = 100
end_time = 100
[]
[VectorPostprocessors]
[frac_T]
type = NodalValueSampler
block = fracture
outputs = frac_T
sort_by = x
variable = frac_T
[]
[]
[Outputs]
print_linear_residuals = false
exodus = false
[frac_T]
type = CSV
execute_on = FINAL
[]
[]
(modules/heat_transfer/test/tests/radiation_transfer_action/radiative_transfer_action_external_boundary.i)
[Problem]
kernel_coverage_check = false
[]
[Mesh]
[./cmg]
type = CartesianMeshGenerator
dim = 2
dx = '1 1.3 1.9'
ix = '3 3 3'
dy = '6'
iy = '9'
subdomain_id = '0 1 2'
[../]
[./inner_left]
type = SideSetsBetweenSubdomainsGenerator
input = cmg
primary_block = 0
paired_block = 1
new_boundary = 'inner_left'
[../]
[./inner_right]
type = SideSetsBetweenSubdomainsGenerator
input = inner_left
primary_block = 2
paired_block = 1
new_boundary = 'inner_right'
[../]
[./inner_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y - 6) < 1e-10'
normal = '0 1 0'
included_subdomains = 1
new_sideset_name = 'inner_top'
input = 'inner_right'
[../]
[./inner_bottom]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y) < 1e-10'
normal = '0 -1 0'
included_subdomains = 1
new_sideset_name = 'inner_bottom'
input = 'inner_top'
[../]
[./rename]
type = RenameBlockGenerator
old_block = '2'
new_block = '0'
input = inner_bottom
[../]
[]
[Variables]
[./temperature]
block = 0
[../]
[]
[Kernels]
[./heat_conduction]
type = HeatConduction
variable = temperature
block = 0
diffusion_coefficient = 5
[../]
[]
[GrayDiffuseRadiation]
[./cavity]
boundary = '4 5 6 7'
emissivity = '0.9 0.8 eps_fn 1'
n_patches = '2 2 2 3'
partitioners = 'centroid centroid centroid centroid'
centroid_partitioner_directions = 'x y y x'
temperature = temperature
adiabatic_boundary = '7'
fixed_temperature_boundary = '6'
fixed_boundary_temperatures = '800'
view_factor_calculator = analytical
[../]
[]
[Functions]
[eps_fn]
type = ConstantFunction
value = 0.4
[]
[]
[BCs]
[./left]
type = DirichletBC
variable = temperature
boundary = left
value = 1000
[../]
[./right]
type = DirichletBC
variable = temperature
boundary = right
value = 300
[../]
[]
[Postprocessors]
[./average_T_inner_right]
type = SideAverageValue
variable = temperature
boundary = inner_right
[../]
[]
[Executioner]
type = Steady
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/show_info/show_info.i)
[Mesh]
[gmg_quad]
type = GeneratedMeshGenerator
dim = 2
nx = 4
ny = 4
show_info = true
[]
[gmg_quad_block1]
type = ParsedSubdomainMeshGenerator
input = gmg_quad
combinatorial_geometry = 'x > 0.5'
block_name = 'dummy'
block_id = 1
show_info = true
[]
[gmg_tri]
type = GeneratedMeshGenerator
dim = 2
nx = 4
ny = 4
elem_type = TRI3
show_info = true
[]
[gmg_tri_block2]
type = ParsedSubdomainMeshGenerator
input = gmg_tri
combinatorial_geometry = 'y > 0.5'
block_id = 2
block_name = 'dummy2'
show_info = true
[]
[gmg_tri_block3]
type = ParsedSubdomainMeshGenerator
input = gmg_tri_block2
combinatorial_geometry = 'y < 0.5'
block_id = 3
block_name = 'dummy3'
show_info = true
[]
[pmg]
type = PatternedMeshGenerator
inputs = 'gmg_quad_block1 gmg_tri_block3'
pattern = '0 1 0;
1 1 0'
show_info = true
[]
[interior]
type = ParsedGenerateSideset
input = pmg
combinatorial_geometry = 'x > 0.99 & x < 1.01'
normal = '1 0 0'
new_sideset_name = interior
show_info = true
[]
[]
(modules/porous_flow/examples/tutorial/01.i)
# Darcy flow
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-13
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/nodesets_from_sidesets_generator/from_sides.i)
[Mesh]
construct_node_list_from_side_list = false
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 3
xmax = 3
ymax = 3
zmax = 3
[]
[subdomains]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
block_id = 1
[]
[sideset]
type = ParsedGenerateSideset
input = subdomains
combinatorial_geometry = 'z < 1'
included_subdomains = '1'
normal = '1 0 0'
new_sideset_name = interior
[]
[add_nodesets]
type = NodeSetsFromSideSetsGenerator
input = sideset
[]
[]
(modules/porous_flow/examples/tutorial/06_KT.i)
# Darcy flow with a tracer
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[tracer_concentration]
[]
[]
[ICs]
[tracer_concentration]
type = FunctionIC
function = '0.5*if(x*x+y*y<1.01,1,0)'
variable = tracer_concentration
[]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer_concentration
stabilization = KT
flux_limiter_type = superbee
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[]
[constant_outer_porepressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[]
[injected_tracer]
type = DirichletBC
variable = tracer_concentration
value = 0.5
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
(test/tests/fvbcs/fv_neumannbc/fv_neumannbc.i)
[Mesh]
[mesh]
type = CartesianMeshGenerator
dim = 2
dx = '1 1'
dy = '1'
ix = '5 5'
iy = '5'
subdomain_id = '1 1'
[]
[internal_sideset]
type = ParsedGenerateSideset
combinatorial_geometry = 'x<1.01 & x>0.99'
included_subdomains = 1
new_sideset_name = 'center'
input = 'mesh'
[]
[]
[Variables]
[u]
family = MONOMIAL
order = CONSTANT
fv = true
block = 1
[]
[]
[FVKernels]
[diff]
type = FVDiffusion
variable = u
coeff = 1
[]
[]
[FVBCs]
inactive = 'center'
[left]
type = FVDirichletBC
variable = u
boundary = left
value = 1
[]
[right]
type = FVNeumannBC
variable = u
boundary = right
value = 4
[]
# Internal center sideset, should cause erroring out
[center]
type = FVNeumannBC
variable = u
boundary = center
value = 0
[]
[]
[Executioner]
type = Steady
solve_type = 'Newton'
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/examples/flow-over-circle/mesh.i)
[Mesh]
# ------------------------------------------
# Middle layer
# ------------------------------------------
[ccmg]
type = ConcentricCircleMeshGenerator
num_sectors = '${fparse refinement*2}'
radii = '${circle_radius} ${fparse 1.2*circle_radius}'
rings = '4 ${refinement} ${refinement}'
has_outer_square = on
pitch = ${pitch}
preserve_volumes = off
smoothing_max_it = 2
[]
[in_between]
type = SideSetsBetweenSubdomainsGenerator
input = ccmg
primary_block = 2
paired_block = 1
new_boundary = 'circle'
[]
[delete_circle]
type = BlockDeletionGenerator
input = in_between
block = '1'
[]
[final_ccmg]
type = RenameBlockGenerator
input = delete_circle
old_block = '2 3'
new_block = '0 0'
[]
[left]
type = GeneratedMeshGenerator
dim = 2
xmin = '${x_min}'
xmax = '${fparse -pitch/2}'
ymin = '${fparse -pitch/2}'
ymax = '${fparse pitch/2}'
nx = '${fparse refinement*2}'
ny = '${fparse refinement*4+2}'
[]
[right]
type = GeneratedMeshGenerator
dim = 2
xmin = '${fparse pitch/2}'
xmax = '${x_max}'
ymin = '${fparse -pitch/2}'
ymax = '${fparse pitch/2}'
nx = '${fparse refinement*40}'
ny = '${fparse refinement*4+2}'
[]
[combined_middle]
type = StitchedMeshGenerator
inputs = 'final_ccmg left right'
stitch_boundaries_pairs = 'left right; right left'
clear_stitched_boundary_ids = false
prevent_boundary_ids_overlap = true
merge_boundaries_with_same_name = true
[]
[middle_top_sideset]
input = combined_middle
type = ParsedGenerateSideset
combinatorial_geometry = 'y > ${fparse pitch/2-rundoff}'
normal = '0 1 0'
new_sideset_name = 'middle_top'
[]
[middle_bottom_sideset]
input = middle_top_sideset
type = ParsedGenerateSideset
combinatorial_geometry = 'y < ${fparse -pitch/2+rundoff}'
normal = '0 -1 0'
new_sideset_name = 'middle_bottom'
[]
# ------------------------------------------
# Top layer
# ------------------------------------------
[top_left_block]
type = GeneratedMeshGenerator
dim = 2
xmin = '${x_min}'
xmax = '${fparse -pitch/2}'
ymin = '${fparse pitch/2}'
ymax = '${y_max}'
nx = '${fparse refinement*2}'
ny = '${fparse refinement*2+1}'
[]
[top_middle_block]
type = GeneratedMeshGenerator
dim = 2
xmin = '${fparse -pitch/2}'
xmax = '${fparse pitch/2}'
ymin = '${fparse pitch/2}'
ymax = '${y_max}'
nx = '${fparse refinement*4+2}'
ny = '${fparse refinement*2+1}'
[]
[top_right_block]
type = GeneratedMeshGenerator
dim = 2
xmin = '${fparse pitch/2}'
xmax = '${x_max}'
ymin = '${fparse pitch/2}'
ymax = '${y_max}'
nx = '${fparse refinement*40}'
ny = '${fparse refinement*2+1}'
[]
[combined_top]
type = StitchedMeshGenerator
inputs = 'top_middle_block top_left_block top_right_block'
stitch_boundaries_pairs = 'left right; right left'
prevent_boundary_ids_overlap = true
merge_boundaries_with_same_name = true
[]
[top_bottom_sideset]
input = combined_top
type = ParsedGenerateSideset
combinatorial_geometry = 'y < ${fparse pitch/2+rundoff}'
normal = '0 -1 0'
new_sideset_name = 'top_bottom'
[]
[combined_middle_top]
type = StitchedMeshGenerator
inputs = 'top_bottom_sideset middle_bottom_sideset'
stitch_boundaries_pairs = 'top_bottom middle_top'
clear_stitched_boundary_ids = false
prevent_boundary_ids_overlap = true
merge_boundaries_with_same_name = true
[]
[create_fused_top_sideset]
input = combined_middle_top
type = ParsedGenerateSideset
combinatorial_geometry = 'y > ${fparse y_max-rundoff}'
normal = '0 1 0'
new_sideset_name = 'top_boundary'
[]
# ------------------------------------------
# Bottom layer
# ------------------------------------------
[bottom_left_block]
type = GeneratedMeshGenerator
dim = 2
xmin = '${x_min}'
xmax = '${fparse -pitch/2}'
ymin = '${y_min}'
ymax = '${fparse -pitch/2}'
nx = '${fparse refinement*2}'
ny = '${fparse refinement*2}'
[]
[bottom_middle_block]
type = GeneratedMeshGenerator
dim = 2
xmin = '${fparse -pitch/2}'
xmax = '${fparse pitch/2}'
ymin = '${y_min}'
ymax = '${fparse -pitch/2}'
nx = '${fparse refinement*4+2}'
ny = '${fparse refinement*2}'
[]
[bottom_right_block]
type = GeneratedMeshGenerator
dim = 2
xmin = '${fparse pitch/2}'
xmax = '${x_max}'
ymin = '${y_min}'
ymax = '${fparse -pitch/2}'
nx = '${fparse refinement*40}'
ny = '${fparse refinement*2}'
[]
[combined_bottom]
type = StitchedMeshGenerator
inputs = 'bottom_middle_block bottom_left_block bottom_right_block'
stitch_boundaries_pairs = 'left right; right left'
prevent_boundary_ids_overlap = true
merge_boundaries_with_same_name = true
[]
[bottom_top_sideset]
input = combined_bottom
type = ParsedGenerateSideset
combinatorial_geometry = 'y > ${fparse -pitch/2-rundoff}'
normal = '0 1 0'
new_sideset_name = 'bottom_top'
[]
[combined_final]
type = StitchedMeshGenerator
inputs = 'create_fused_top_sideset bottom_top_sideset'
stitch_boundaries_pairs = 'middle_bottom bottom_top'
clear_stitched_boundary_ids = false
prevent_boundary_ids_overlap = true
merge_boundaries_with_same_name = true
[]
[create_fused_bottom_sideset]
input = combined_final
type = ParsedGenerateSideset
combinatorial_geometry = 'y < ${fparse y_min+rundoff}'
normal = '0 -1 0'
new_sideset_name = 'bottom_boundary'
[]
# ------------------------------------------
# Left and right boundaries
# ------------------------------------------
[create_fused_left_sideset]
input = create_fused_bottom_sideset
type = ParsedGenerateSideset
combinatorial_geometry = 'x < ${fparse x_min+rundoff}'
normal = '-1 0 0'
new_sideset_name = 'left_boundary'
[]
[create_fused_right_sideset]
input = create_fused_left_sideset
type = ParsedGenerateSideset
combinatorial_geometry = 'x > ${fparse x_max-rundoff}'
normal = '1 0 0'
new_sideset_name = 'right_boundary'
[]
[sideset_removal]
input = create_fused_right_sideset
type = BoundaryDeletionGenerator
boundary_names = 'bottom top left right middle_bottom middle_top bottom_top top_bottom'
[]
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-energy-nonorthogonal.i)
# This test is designed to check for energy conservation
# in separated channels which are described using a nonorthogonal mesh.
# The two inlet temperatures should be preserved at the outlets.
rho=1.1
mu=0.6
k=2.1
cp=5.5
advected_interp_method='upwind'
velocity_interp_method='rc'
[Mesh]
[file]
type = FileMeshGenerator
file = diverging.msh
[]
[mirror]
type = SymmetryTransformGenerator
input = file
mirror_point = "0 0 0"
mirror_normal_vector = "1 0 0"
[]
[stitch]
type = StitchedMeshGenerator
inputs = 'file mirror'
stitch_boundaries_pairs = 'left left'
[]
[subdomain1]
type = ParsedSubdomainMeshGenerator
input = stitch
combinatorial_geometry = 'x > 0'
block_id = 1
[]
[subdomain2]
type = ParsedSubdomainMeshGenerator
input = subdomain1
combinatorial_geometry = 'x < 0'
block_id = 2
[]
[separator]
type = ParsedGenerateSideset
input = subdomain2
combinatorial_geometry = 'x > -0.00001 & x < 0.00001'
replace = true
new_sideset_name = separator
[]
[inlet-1]
type = ParsedGenerateSideset
input = separator
combinatorial_geometry = 'y < 0.00001 & x < 0'
replace = true
new_sideset_name = inlet-1
[]
[inlet-2]
type = ParsedGenerateSideset
input = inlet-1
combinatorial_geometry = 'y < 0.00001 & x > 0'
replace = true
new_sideset_name = inlet-2
[]
[outlet-1]
type = ParsedGenerateSideset
input = inlet-2
combinatorial_geometry = 'y > 20.999999 & x < 0'
replace = true
new_sideset_name = outlet-1
[]
[outlet-2]
type = ParsedGenerateSideset
input = outlet-1
combinatorial_geometry = 'y > 20.999999 & x > 0'
replace = true
new_sideset_name = outlet-2
[]
uniform_refine = 1
[]
[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
[]
[superficial_vel_y]
type = PINSFVSuperficialVelocityVariable
initial_condition = 0.1
[]
[pressure]
type = BernoulliPressureVariable
u = superficial_vel_x
v = superficial_vel_y
rho = ${rho}
[]
[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'
[]
[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'
[]
[temp_conduction]
type = FVDiffusion
coeff = ${k}
variable = T_fluid
[]
[temp_advection]
type = INSFVEnergyAdvection
variable = T_fluid
[]
[]
[FVBCs]
[inlet-u]
type = INSFVInletVelocityBC
boundary = 'inlet-1 inlet-2'
variable = superficial_vel_x
function = '0.0'
[]
[inlet-v-1]
type = INSFVInletVelocityBC
boundary = 'inlet-1'
variable = superficial_vel_y
function = 0.1
[]
[inlet-v-2]
type = INSFVInletVelocityBC
boundary = 'inlet-2'
variable = superficial_vel_y
function = 0.2
[]
[inlet-T-1]
type = FVDirichletBC
variable = T_fluid
boundary = 'inlet-1'
value = 310
[]
[inlet-T-2]
type = FVDirichletBC
variable = T_fluid
boundary = 'inlet-2'
value = 350
[]
[walls-u]
type = INSFVNaturalFreeSlipBC
boundary = 'right'
variable = superficial_vel_x
momentum_component = 'x'
[]
[walls-v]
type = INSFVNaturalFreeSlipBC
boundary = 'right'
variable = superficial_vel_y
momentum_component = 'y'
[]
[separator-u]
type = INSFVVelocityHydraulicSeparatorBC
boundary = 'separator'
variable = superficial_vel_x
momentum_component = 'x'
[]
[separator-v]
type = INSFVVelocityHydraulicSeparatorBC
boundary = 'separator'
variable = superficial_vel_y
momentum_component = 'y'
[]
[separator-p]
type = INSFVScalarFieldSeparatorBC
boundary = 'separator'
variable = pressure
[]
[separator-T]
type = INSFVScalarFieldSeparatorBC
boundary = 'separator'
variable = T_fluid
[]
[outlet_p]
type = INSFVOutletPressureBC
boundary = 'outlet-2 outlet-1'
variable = pressure
function = 0.4
[]
[]
[FunctorMaterials]
[porosity-1]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '1.0'
block = '1'
[]
[porosity-2]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '0.5'
block = '2'
[]
[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 = 'outlet-1'
[]
[outlet_T2]
type = SideAverageValue
variable = 'T_fluid'
boundary = 'outlet-2'
[]
[]
[Outputs]
csv = true
execute_on = final
[]
(modules/porous_flow/examples/tutorial/05_tabulated.i)
# Darcy flow with heat advection and conduction, using Water97 properties
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
initial_condition = 1E6
[]
[temperature]
initial_condition = 313
scaling = 1E-8
[]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydro
gravity = '0 0 0'
fp = tabulated_water
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 2E6
boundary = injection_area
[]
[constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 333
boundary = injection_area
[]
[]
[FluidProperties]
[true_water]
type = Water97FluidProperties
[]
[tabulated_water]
type = TabulatedFluidProperties
fp = true_water
temperature_min = 275
interpolated_properties = 'density viscosity enthalpy internal_energy'
fluid_property_output_file = water97_tabulated.csv
# Comment out the fp parameter and uncomment below to use the newly generated tabulation
# fluid_property_file = water97_tabulated.csv
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
biot_coefficient = 0.8
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[]
[rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[]
[thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caps aquifer'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
exodus = true
[]
(modules/heat_transfer/test/tests/radiation_transfer_symmetry/cavity_with_pillars.i)
#
# inner_left: 8
# inner_right: 9
# inner_top: 12
# inner_bottom: 11
# inner_front: 10
# back_2: 7
# obstruction: 6
#
[Mesh]
[cartesian]
type = CartesianMeshGenerator
dim = 3
dx = '0.4 0.5 0.5 0.5 0.5 0.5 0.5 0.4'
dy = '0.5 0.75 0.5'
dz = '1.5 0.5'
subdomain_id = '
3 1 1 1 1 1 1 4
3 1 2 1 1 2 1 4
3 1 1 1 1 1 1 4
3 1 1 1 1 1 1 4
3 1 1 1 1 1 1 4
3 1 1 1 1 1 1 4
'
[]
[add_obstruction]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 2
paired_block = 1
new_boundary = obstruction
input = cartesian
[]
[add_new_back]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(z) < 1e-10'
included_subdomains = '1'
normal = '0 0 -1'
new_sideset_name = back_2
input = add_obstruction
[]
[add_inner_left]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 3
paired_block = 1
new_boundary = inner_left
input = add_new_back
[]
[add_inner_right]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 4
paired_block = 1
new_boundary = inner_right
input = add_inner_left
[]
[add_inner_front]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(z - 2) < 1e-10'
included_subdomains = '1'
normal = '0 0 1'
new_sideset_name = inner_front
input = add_inner_right
[]
[add_inner_bottom]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y) < 1e-10'
included_subdomains = '1'
normal = '0 -1 0'
new_sideset_name = inner_bottom
input = add_inner_front
[]
[add_inner_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y - 1.75) < 1e-10'
included_subdomains = '1'
normal = '0 1 0'
new_sideset_name = inner_top
input = add_inner_bottom
[]
[]
[Problem]
kernel_coverage_check = false
[]
[Variables]
[temperature]
block = '2 3 4'
initial_condition = 300
[]
[]
[Kernels]
[conduction]
type = HeatConduction
variable = temperature
block = '2 3 4'
diffusion_coefficient = 1
[]
[source]
type = BodyForce
variable = temperature
value = 1000
block = '2'
[]
[]
[BCs]
[convective]
type = CoupledConvectiveHeatFluxBC
variable = temperature
T_infinity = 300
htc = 50
boundary = 'left right'
[]
[]
[GrayDiffuseRadiation]
[cavity]
boundary = '6 7 8 9 10 11 12'
emissivity = '1 1 1 1 1 1 1'
n_patches = '1 1 1 1 1 1 1'
adiabatic_boundary = '7 10 11 12'
partitioners = 'metis metis metis metis metis metis metis'
temperature = temperature
ray_tracing_face_order = SECOND
normalize_view_factor = false
[]
[]
[Postprocessors]
[Tpv]
type = PointValue
variable = temperature
point = '0.3 0.5 0.5'
[]
[volume]
type = VolumePostprocessor
[]
[]
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(modules/heat_transfer/test/tests/radiation_transfer_symmetry/cavity_with_pillars_symmetry_bc.i)
#
# inner_left: 8
# inner_top: 11
# inner_bottom: 10
# inner_front: 9
# back_2: 7
# obstruction: 6
#
[Mesh]
[cartesian]
type = CartesianMeshGenerator
dim = 3
dx = '0.4 0.5 0.5 0.5'
dy = '0.5 0.75 0.5'
dz = '1.5 0.5'
subdomain_id = '
3 1 1 1
3 1 2 1
3 1 1 1
3 1 1 1
3 1 1 1
3 1 1 1
'
[]
[add_obstruction]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 2
paired_block = 1
new_boundary = obstruction
input = cartesian
[]
[add_new_back]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(z) < 1e-10'
included_subdomains = '1'
normal = '0 0 -1'
new_sideset_name = back_2
input = add_obstruction
[]
[add_inner_left]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 3
paired_block = 1
new_boundary = inner_left
input = add_new_back
[]
[add_inner_front]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(z - 2) < 1e-10'
included_subdomains = '1'
normal = '0 0 1'
new_sideset_name = inner_front
input = add_inner_left
[]
[add_inner_bottom]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y) < 1e-10'
included_subdomains = '1'
normal = '0 -1 0'
new_sideset_name = inner_bottom
input = add_inner_front
[]
[add_inner_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y - 1.75) < 1e-10'
included_subdomains = '1'
normal = '0 1 0'
new_sideset_name = inner_top
input = add_inner_bottom
[]
[]
[Problem]
kernel_coverage_check = false
[]
[Variables]
[temperature]
block = '2 3'
initial_condition = 300
[]
[]
[Kernels]
[conduction]
type = HeatConduction
variable = temperature
block = '2 3'
diffusion_coefficient = 1
[]
[source]
type = BodyForce
variable = temperature
value = 1000
block = '2'
[]
[]
[BCs]
[convective]
type = CoupledConvectiveHeatFluxBC
variable = temperature
T_infinity = 300
htc = 50
boundary = 'left'
[]
[]
[GrayDiffuseRadiation]
[./cavity]
boundary = '6 7 8 9 10 11'
emissivity = '1 1 1 1 1 1'
n_patches = '1 1 1 1 1 1'
adiabatic_boundary = '7 9 10 11'
symmetry_boundary = '2'
partitioners = 'metis metis metis metis metis metis'
temperature = temperature
ray_tracing_face_order = SECOND
normalize_view_factor = false
[../]
[]
[Postprocessors]
[Tpv]
type = PointValue
variable = temperature
point = '0.3 0.5 0.5'
[]
[volume]
type = VolumePostprocessor
[]
[]
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/advanced_extruder_generator/advanced_extruder_then_parsed_gen_sideset.i)
[Mesh]
[file]
type = CartesianMeshGenerator
dim = 2
dx = '1 1 1 1'
dy = '1 1'
subdomain_id = '1 2 3 4
1 2 3 4'
[]
[extrude]
type = AdvancedExtruderGenerator
direction = '0 0 1'
heights = '1 1 1'
num_layers = '1 1 1'
input = file
[]
[add_side]
type = ParsedGenerateSideset
combinatorial_geometry = '2 > 1'
new_sideset_name = new_s
included_subdomains = 1
included_neighbors = 2
input = extrude
[]
[]
(modules/heat_transfer/test/tests/view_factors_symmetry/cavity_with_pillars.i)
[Mesh]
[cartesian]
type = CartesianMeshGenerator
dim = 3
dx = '0.5 0.5 0.5 0.5 0.5 0.5'
dy = '0.5 0.75 0.5'
dz = '1.5 0.5'
subdomain_id = '
1 1 1 1 1 1
1 2 1 1 2 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
'
[]
[add_obstruction]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 2
paired_block = 1
new_boundary = obstruction
input = cartesian
[]
[add_new_back]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(z) < 1e-10'
included_subdomains = '1'
normal = '0 0 -1'
new_sideset_name = back_2
input = add_obstruction
[]
[]
[UserObjects]
[view_factor_study]
type = ViewFactorRayStudy
execute_on = initial
boundary = 'left right top bottom front back_2 obstruction'
face_order = FOURTH
[]
[view_factor]
type = RayTracingViewFactor
boundary = 'left right top bottom front back_2 obstruction'
execute_on = INITIAL
normalize_view_factor = false
ray_study_name = view_factor_study
[]
[]
[RayBCs/viewfactor]
type = ViewFactorRayBC
boundary = 'left right top bottom front back_2 obstruction'
[]
[Postprocessors]
[left_right]
type = ViewFactorPP
from_boundary = left
to_boundary = right
view_factor_object_name = view_factor
[]
[]
[Problem]
solve = false
[]
[Executioner]
type = Steady
[]
[Outputs]
csv = true
[]
(modules/porous_flow/examples/tutorial/08.i)
# Unsaturated Darcy-Richards flow
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[]
[PorousFlowUnsaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
relative_permeability_exponent = 3
relative_permeability_type = Corey
residual_saturation = 0.1
van_genuchten_alpha = 1E-6
van_genuchten_m = 0.6
[]
[BCs]
[production]
type = PorousFlowSink
variable = porepressure
fluid_phase = 0
flux_function = 1E-2
use_relperm = true
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-7
[]
[Outputs]
exodus = true
[]
(modules/porous_flow/examples/ates/ates.i)
# Simulation designed to assess the recovery efficiency of a single-well ATES system
# Using KT stabilisation
# Boundary conditions: fixed porepressure and temperature at top, bottom and far end of model.
#####################################
flux_limiter = minmod # minmod, vanleer, mc, superbee, none
# depth of top of aquifer (m)
depth = 400
inject_fluid_mass = 1E8 # kg
produce_fluid_mass = ${inject_fluid_mass} # kg
inject_temp = 90 # degC
inject_time = 91 # days
store_time = 91 # days
produce_time = 91 # days
rest_time = 91 # days
num_cycles = 5 # Currently needs to be <= 10
cycle_length = '${fparse inject_time + store_time + produce_time + rest_time}'
end_simulation = '${fparse cycle_length * num_cycles}'
# Note: I have setup 10 cycles but you can set num_cycles less than 10.
start_injection1 = 0
start_injection2 = ${cycle_length}
start_injection3 = '${fparse cycle_length * 2}'
start_injection4 = '${fparse cycle_length * 3}'
start_injection5 = '${fparse cycle_length * 4}'
start_injection6 = '${fparse cycle_length * 5}'
start_injection7 = '${fparse cycle_length * 6}'
start_injection8 = '${fparse cycle_length * 7}'
start_injection9 = '${fparse cycle_length * 8}'
start_injection10 = '${fparse cycle_length * 9}'
end_injection1 = '${fparse start_injection1 + inject_time}'
end_injection2 = '${fparse start_injection2 + inject_time}'
end_injection3 = '${fparse start_injection3 + inject_time}'
end_injection4 = '${fparse start_injection4 + inject_time}'
end_injection5 = '${fparse start_injection5 + inject_time}'
end_injection6 = '${fparse start_injection6 + inject_time}'
end_injection7 = '${fparse start_injection7 + inject_time}'
end_injection8 = '${fparse start_injection8 + inject_time}'
end_injection9 = '${fparse start_injection9 + inject_time}'
end_injection10 = '${fparse start_injection10 + inject_time}'
start_production1 = '${fparse end_injection1 + store_time}'
start_production2 = '${fparse end_injection2 + store_time}'
start_production3 = '${fparse end_injection3 + store_time}'
start_production4 = '${fparse end_injection4 + store_time}'
start_production5 = '${fparse end_injection5 + store_time}'
start_production6 = '${fparse end_injection6 + store_time}'
start_production7 = '${fparse end_injection7 + store_time}'
start_production8 = '${fparse end_injection8 + store_time}'
start_production9 = '${fparse end_injection9 + store_time}'
start_production10 = '${fparse end_injection10 + store_time}'
end_production1 = '${fparse start_production1 + produce_time}'
end_production2 = '${fparse start_production2 + produce_time}'
end_production3 = '${fparse start_production3 + produce_time}'
end_production4 = '${fparse start_production4 + produce_time}'
end_production5 = '${fparse start_production5 + produce_time}'
end_production6 = '${fparse start_production6 + produce_time}'
end_production7 = '${fparse start_production7 + produce_time}'
end_production8 = '${fparse start_production8 + produce_time}'
end_production9 = '${fparse start_production9 + produce_time}'
end_production10 = '${fparse start_production10 + produce_time}'
synctimes = '${start_injection1} ${end_injection1} ${start_production1} ${end_production1}
${start_injection2} ${end_injection2} ${start_production2} ${end_production2}
${start_injection3} ${end_injection3} ${start_production3} ${end_production3}
${start_injection4} ${end_injection4} ${start_production4} ${end_production4}
${start_injection5} ${end_injection5} ${start_production5} ${end_production5}
${start_injection6} ${end_injection6} ${start_production6} ${end_production6}
${start_injection7} ${end_injection7} ${start_production7} ${end_production7}
${start_injection8} ${end_injection8} ${start_production8} ${end_production8}
${start_injection9} ${end_injection9} ${start_production9} ${end_production9}
${start_injection10} ${end_injection10} ${start_production10} ${end_production10}'
#####################################
# Geometry in RZ coordinates
# borehole radius (m)
bh_r = 0.1
# model radius (m)
max_r = 1000
# aquifer thickness (m)
aq_thickness = 20
# cap thickness (m)
cap_thickness = 40
# injection region top and bottom (m). Note, the mesh is created with the aquifer in y = (-0.5 * aq_thickness, 0.5 * aq_thickness), irrespective of depth (depth only sets the insitu porepressure and temperature)
screen_top = '${fparse 0.5 * aq_thickness}'
screen_bottom = '${fparse -0.5 * aq_thickness}'
# number of elements in radial direction
num_r = 25
# number of elements across half height of aquifer
num_y_aq = 10
# number of elements across height of cap
num_y_cap = 8
# mesh bias in radial direction
bias_r = 1.22
# mesh bias in vertical direction in aquifer top
bias_y_aq_top = 0.9
# mesh bias in vertical direction in cap top
bias_y_cap_top = 1.3
# mesh bias in vertical direction in aquifer bottom
bias_y_aq_bottom = '${fparse 1.0 / bias_y_aq_top}'
# mesh bias in vertical direction in cap bottom
bias_y_cap_bottom = '${fparse 1.0 / bias_y_cap_top}'
depth_centre = '${fparse depth + aq_thickness/2}'
#####################################
# temperature at ground surface (degC)
temp0 = 20
# Vertical geothermal gradient (K/m). A positive number means temperature increases downwards.
geothermal_gradient = 20E-3
#####################################
# Gravity
gravity = -9.81
#####################################
half_aq_thickness = '${fparse aq_thickness * 0.5}'
half_height = '${fparse half_aq_thickness + cap_thickness}'
approx_screen_length = '${fparse screen_top - screen_bottom}'
# Thermal radius (note this is not strictly correct, it should use the bulk specific heat
# capacity as defined below, but it doesn't matter here because this is purely for
# defining the region of refined mesh)
th_r = '${fparse sqrt(inject_fluid_mass / 1000 * 4.12e6 / (approx_screen_length * 3.1416 * aq_specific_heat_cap * aq_density))}'
# radius of fine mesh
fine_r = '${fparse th_r * 2}'
bias_r_fine = 1
num_r_fine = '${fparse int(fine_r/1)}'
######################################
# aquifer properties
aq_porosity = 0.25
aq_hor_perm = 1E-11 # m^2
aq_ver_perm = 2E-12 # m^2
aq_density = 2650 # kg/m^3
aq_specific_heat_cap = 800 # J/Kg/K
aq_hor_thermal_cond = 3 # W/m/K
aq_ver_thermal_cond = 3 # W/m/K
aq_disp_parallel = 0 # m
aq_disp_perp = 0 # m
# Bulk volumetric heat capacity of aquifer:
aq_vol_cp = '${fparse aq_specific_heat_cap * aq_density * (1 - aq_porosity) + 4180 * 1000 * aq_porosity}'
# Thermal radius (correct version using bulk cp):
R_th = '${fparse sqrt(inject_fluid_mass * 4180 / (approx_screen_length * 3.1416 * aq_vol_cp))}'
aq_lambda_eff_hor = '${fparse aq_hor_thermal_cond + 0.3 * aq_disp_parallel * R_th * aq_vol_cp / (inject_time * 60 * 60 * 24)}'
aq_lambda_eff_ver = '${fparse aq_ver_thermal_cond + 0.3 * aq_disp_perp * R_th * aq_vol_cp / (inject_time * 60 * 60 * 24)}'
aq_hor_dry_thermal_cond = '${fparse aq_lambda_eff_hor * 60 * 60 * 24}' # J/day/m/K
aq_ver_dry_thermal_cond = '${fparse aq_lambda_eff_ver * 60 * 60 * 24}' # J/day/m/K
aq_hor_wet_thermal_cond = '${fparse aq_lambda_eff_hor * 60 * 60 * 24}' # J/day/m/K
aq_ver_wet_thermal_cond = '${fparse aq_lambda_eff_ver * 60 * 60 * 24}' # J/day/m/K
# cap-rock properties
cap_porosity = 0.25
cap_hor_perm = 1E-16 # m^2
cap_ver_perm = 1E-17 # m^2
cap_density = 2650 # kg/m^3
cap_specific_heat_cap = 800 # J/kg/K
cap_hor_thermal_cond = 3 # W/m/K
cap_ver_thermal_cond = 3 # W/m/K
cap_hor_dry_thermal_cond = '${fparse cap_hor_thermal_cond * 60 * 60 * 24}' # J/day/m/K
cap_ver_dry_thermal_cond = '${fparse cap_ver_thermal_cond * 60 * 60 * 24}' # J/day/m/K
cap_hor_wet_thermal_cond = '${fparse cap_hor_thermal_cond * 60 * 60 * 24}' # J/day/m/K
cap_ver_wet_thermal_cond = '${fparse cap_ver_thermal_cond * 60 * 60 * 24}' # J/day/m/K
######################################
[Mesh]
coord_type = RZ
[aq_top_fine]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r_fine}
xmin = ${bh_r}
xmax = ${fine_r}
bias_x = ${bias_r_fine}
bias_y = ${bias_y_aq_top}
ny = ${num_y_aq}
ymin = 0
ymax = ${half_aq_thickness}
[]
[cap_top_fine]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r_fine}
xmin = ${bh_r}
xmax = ${fine_r}
bias_x = ${bias_r_fine}
bias_y = ${bias_y_cap_top}
ny = ${num_y_cap}
ymax = ${half_height}
ymin = ${half_aq_thickness}
[]
[aq_and_cap_top_fine]
type = StitchedMeshGenerator
inputs = 'aq_top_fine cap_top_fine'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'top bottom'
[]
[aq_bottom_fine]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r_fine}
xmin = ${bh_r}
xmax = ${fine_r}
bias_x = ${bias_r_fine}
bias_y = ${bias_y_aq_bottom}
ny = ${num_y_aq}
ymax = 0
ymin = -${half_aq_thickness}
[]
[cap_bottom_fine]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r_fine}
xmin = ${bh_r}
xmax = ${fine_r}
bias_x = ${bias_r_fine}
bias_y = ${bias_y_cap_bottom}
ny = ${num_y_cap}
ymin = -${half_height}
ymax = -${half_aq_thickness}
[]
[aq_and_cap_bottom_fine]
type = StitchedMeshGenerator
inputs = 'aq_bottom_fine cap_bottom_fine'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'bottom top'
merge_boundaries_with_same_name = false
[]
[aq_and_cap_fine]
type = StitchedMeshGenerator
inputs = 'aq_and_cap_bottom_fine aq_and_cap_top_fine'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'top bottom'
[]
[aq_top]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r}
xmin = ${fine_r}
xmax = ${max_r}
bias_x = ${bias_r}
bias_y = ${bias_y_aq_top}
ny = ${num_y_aq}
ymin = 0
ymax = ${half_aq_thickness}
[]
[cap_top]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r}
xmin = ${fine_r}
xmax = ${max_r}
bias_x = ${bias_r}
bias_y = ${bias_y_cap_top}
ny = ${num_y_cap}
ymax = ${half_height}
ymin = ${half_aq_thickness}
[]
[aq_and_cap_top]
type = StitchedMeshGenerator
inputs = 'aq_top cap_top'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'top bottom'
[]
[aq_bottom]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r}
xmin = ${fine_r}
xmax = ${max_r}
bias_x = ${bias_r}
bias_y = ${bias_y_aq_bottom}
ny = ${num_y_aq}
ymax = 0
ymin = -${half_aq_thickness}
[]
[cap_bottom]
type = GeneratedMeshGenerator
dim = 2
nx = ${num_r}
xmin = ${fine_r}
xmax = ${max_r}
bias_x = ${bias_r}
bias_y = ${bias_y_cap_bottom}
ny = ${num_y_cap}
ymin = -${half_height}
ymax = -${half_aq_thickness}
[]
[aq_and_cap_bottom]
type = StitchedMeshGenerator
inputs = 'aq_bottom cap_bottom'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'bottom top'
[]
[aq_and_cap]
type = StitchedMeshGenerator
inputs = 'aq_and_cap_bottom aq_and_cap_top'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'top bottom'
[]
[aq_and_cap_all]
type = StitchedMeshGenerator
inputs = 'aq_and_cap_fine aq_and_cap'
clear_stitched_boundary_ids = true
stitch_boundaries_pairs = 'right left'
[]
[aquifer]
type = ParsedSubdomainMeshGenerator
input = aq_and_cap_all
combinatorial_geometry = 'y >= -${half_aq_thickness} & y <= ${half_aq_thickness}'
block_id = 1
[]
[top_cap]
type = ParsedSubdomainMeshGenerator
input = aquifer
combinatorial_geometry = 'y >= ${half_aq_thickness}'
block_id = 2
[]
[bottom_cap]
type = ParsedSubdomainMeshGenerator
input = top_cap
combinatorial_geometry = 'y <= -${half_aq_thickness}'
block_id = 3
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x<=${bh_r}*1.000001 & y >= ${screen_bottom} & y <= ${screen_top}'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'bottom_cap'
[]
[rename]
type = RenameBlockGenerator
old_block = '1 2 3'
new_block = 'aquifer caps caps'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 ${gravity} 0'
[]
[Variables]
[porepressure]
[]
[temperature]
scaling = 1E-5
[]
[]
[PorousFlowFullySaturated]
coupling_type = ThermoHydro
porepressure = porepressure
temperature = temperature
fp = tabulated_water
stabilization = KT
flux_limiter_type = ${flux_limiter}
use_displaced_mesh = false
temperature_unit = Celsius
pressure_unit = Pa
time_unit = days
[]
[ICs]
[porepressure]
type = FunctionIC
variable = porepressure
function = insitu_pressure
[]
[temperature]
type = FunctionIC
variable = temperature
function = insitu_temperature
[]
[]
[BCs]
[outer_boundary_porepressure]
type = FunctionDirichletBC
preset = true
variable = porepressure
function = insitu_pressure
boundary = 'bottom right top'
[]
[outer_boundary_temperature]
type = FunctionDirichletBC
preset = true
variable = temperature
function = insitu_temperature
boundary = 'bottom right top'
[]
[inject_heat]
type = FunctionDirichletBC
variable = temperature
function = ${inject_temp}
boundary = 'injection_area'
[]
[inject_fluid]
type = PorousFlowSink
variable = porepressure
boundary = injection_area
flux_function = injection_rate_value
[]
[produce_heat]
type = PorousFlowSink
variable = temperature
boundary = injection_area
flux_function = production_rate_value
fluid_phase = 0
use_enthalpy = true
save_in = heat_flux_out
[]
[produce_fluid]
type = PorousFlowSink
variable = porepressure
boundary = injection_area
flux_function = production_rate_value
[]
[]
[Controls]
[inject_on]
type = ConditionalFunctionEnableControl
enable_objects = 'BCs::inject_heat BCs::inject_fluid'
conditional_function = inject
implicit = false
execute_on = 'initial timestep_begin'
[]
[produce_on]
type = ConditionalFunctionEnableControl
enable_objects = 'BCs::produce_heat BCs::produce_fluid'
conditional_function = produce
implicit = false
execute_on = 'initial timestep_begin'
[]
[]
[Functions]
[insitu_pressure]
type = ParsedFunction
expression = '(y - ${depth_centre}) * 1000 * ${gravity} + 1E5' # approx insitu pressure in Pa
[]
[insitu_temperature]
type = ParsedFunction
expression = '${temp0} + (${depth_centre} - y) * ${geothermal_gradient}'
[]
[inject]
type = ParsedFunction
expression = 'if(t >= ${start_injection1} & t < ${end_injection1}, 1,
if(t >= ${start_injection2} & t < ${end_injection2}, 1,
if(t >= ${start_injection3} & t < ${end_injection3}, 1,
if(t >= ${start_injection4} & t < ${end_injection4}, 1,
if(t >= ${start_injection5} & t < ${end_injection5}, 1,
if(t >= ${start_injection6} & t < ${end_injection6}, 1,
if(t >= ${start_injection7} & t < ${end_injection7}, 1,
if(t >= ${start_injection8} & t < ${end_injection8}, 1,
if(t >= ${start_injection9} & t < ${end_injection9}, 1,
if(t >= ${start_injection10} & t < ${end_injection10}, 1, 0))))))))))'
[]
[produce]
type = ParsedFunction
expression = 'if(t >= ${start_production1} & t < ${end_production1}, 1,
if(t >= ${start_production2} & t < ${end_production2}, 1,
if(t >= ${start_production3} & t < ${end_production3}, 1,
if(t >= ${start_production4} & t < ${end_production4}, 1,
if(t >= ${start_production5} & t < ${end_production5}, 1,
if(t >= ${start_production6} & t < ${end_production6}, 1,
if(t >= ${start_production7} & t < ${end_production7}, 1,
if(t >= ${start_production8} & t < ${end_production8}, 1,
if(t >= ${start_production9} & t < ${end_production9}, 1,
if(t >= ${start_production10} & t < ${end_production10}, 1, 0))))))))))'
[]
[injection_rate_value]
type = ParsedFunction
symbol_names = true_screen_area
symbol_values = true_screen_area
expression = '-${inject_fluid_mass}/(true_screen_area * ${inject_time})'
[]
[production_rate_value]
type = ParsedFunction
symbol_names = true_screen_area
symbol_values = true_screen_area
expression = '${produce_fluid_mass}/(true_screen_area * ${produce_time})'
[]
[heat_out_in_timestep]
type = ParsedFunction
symbol_names = 'dt heat_out'
symbol_values = 'dt heat_out_fromBC'
expression = 'dt*heat_out'
[]
[produced_T_time_integrated]
type = ParsedFunction
symbol_names = 'dt produced_T'
symbol_values = 'dt produced_T'
expression = 'dt*produced_T / ${produce_time}'
[]
[]
[AuxVariables]
[density]
family = MONOMIAL
order = CONSTANT
[]
[porosity]
family = MONOMIAL
order = CONSTANT
[]
[heat_flux_out]
outputs = none
[]
[]
[AuxKernels]
[density]
type = PorousFlowPropertyAux
variable = density
property = density
[]
[porosity]
type = PorousFlowPropertyAux
variable = porosity
property = porosity
[]
[]
[FluidProperties]
[true_water]
type = Water97FluidProperties
[]
[tabulated_water]
type = TabulatedFluidProperties
fp = true_water
temperature_min = 275 # K
temperature_max = 600
interpolated_properties = 'density viscosity enthalpy internal_energy'
fluid_property_output_file = water97_tabulated_modified.csv
# Comment out the fp parameter and uncomment below to use the newly generated tabulation
# fluid_property_file = water97_tabulated_modified.csv
[]
[]
[Materials]
[porosity_aq]
type = PorousFlowPorosityConst
porosity = ${aq_porosity}
block = aquifer
[]
[porosity_caps]
type = PorousFlowPorosityConst
porosity = ${cap_porosity}
block = caps
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '${aq_hor_perm} 0 0 0 ${aq_ver_perm} 0 0 0 0'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '${cap_hor_perm} 0 0 0 ${cap_ver_perm} 0 0 0 0'
[]
[aq_internal_energy]
type = PorousFlowMatrixInternalEnergy
block = aquifer
density = ${aq_density}
specific_heat_capacity = ${aq_specific_heat_cap}
[]
[caps_internal_energy]
type = PorousFlowMatrixInternalEnergy
block = caps
density = ${cap_density}
specific_heat_capacity = ${cap_specific_heat_cap}
[]
[aq_thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
block = aquifer
dry_thermal_conductivity = '${aq_hor_dry_thermal_cond} 0 0 0 ${aq_ver_dry_thermal_cond} 0 0 0 0'
wet_thermal_conductivity = '${aq_hor_wet_thermal_cond} 0 0 0 ${aq_ver_wet_thermal_cond} 0 0 0 0'
[]
[caps_thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
block = caps
dry_thermal_conductivity = '${cap_hor_dry_thermal_cond} 0 0 0 ${cap_ver_dry_thermal_cond} 0 0 0 0'
wet_thermal_conductivity = '${cap_hor_wet_thermal_cond} 0 0 0 ${cap_ver_wet_thermal_cond} 0 0 0 0'
[]
[]
[Postprocessors]
[true_screen_area] # this accounts for meshes that do not match screen_top and screen_bottom exactly
type = AreaPostprocessor
boundary = injection_area
execute_on = 'initial'
outputs = 'none'
[]
[dt]
type = TimestepSize
[]
[heat_out_fromBC]
type = NodalSum
variable = heat_flux_out
boundary = injection_area
execute_on = 'initial timestep_end'
outputs = 'none'
[]
[heat_out_per_timestep]
type = FunctionValuePostprocessor
function = heat_out_in_timestep
execute_on = 'timestep_end'
outputs = 'none'
[]
[heat_out_cumulative]
type = CumulativeValuePostprocessor
postprocessor = heat_out_per_timestep
execute_on = 'timestep_end'
outputs = 'csv console'
[]
[produced_T]
type = SideAverageValue
boundary = injection_area
variable = temperature
execute_on = 'initial timestep_end'
outputs = 'csv console'
[]
[produced_T_time_integrated]
type = FunctionValuePostprocessor
function = produced_T_time_integrated
execute_on = 'timestep_end'
outputs = 'none'
[]
[produced_T_cumulative]
type = CumulativeValuePostprocessor
postprocessor = produced_T_time_integrated
execute_on = 'timestep_end'
outputs = 'csv console'
[]
[]
[Preconditioning]
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = ${end_simulation}
timestep_tolerance = 1e-5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1e-3
growth_factor = 2
[]
dtmax = 1
dtmin = 1e-5
# rough calc for fluid, |R| ~ V*k*1E6 ~ V*1E-5
# rough calc for heat, |R| ~ V*(lam*1E-3 + h*1E-5) ~ V*(1E3 + 1E-2)
# so scale heat by 1E-7 and go for nl_abs_tol = 1E-4, which should give a max error of
# ~1Pa and ~0.1K in the first metre around the borehole
nl_abs_tol = 1E-4
nl_rel_tol = 1E-5
[]
[Outputs]
sync_times = ${synctimes}
[ex]
type = Exodus
time_step_interval = 20
[]
[csv]
type = CSV
execute_postprocessors_on = 'initial timestep_end'
[]
[]
(test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_boundary_excluded.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 4
xmax = 3
ymax = 3
zmax = 3
[]
[subdomains]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
block_id = 1
[]
[sideset]
type = ParsedGenerateSideset
input = subdomains
combinatorial_geometry = 'z < 1.6'
included_subdomains = '1'
normal = '1 0 0'
new_sideset_name = interior
[]
[sideset_further_limited]
type = ParsedGenerateSideset
input = sideset
combinatorial_geometry = 'z > 0.6'
excluded_boundaries = 'interior'
# note we specify the normal here to prevent the "other side" of the face to be added
normal = '1 0 0'
new_sideset_name = 'none_from_interior'
[]
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/circular_correction_generator/partial_circle_rad.i)
[Mesh]
[pmg]
type = ParsedCurveGenerator
x_formula = 't1:=t;
t2:=t-1;
t3:=t-2;
t4:=t-3;
t5:=t-4;
x1:=t1-1;
x2:=0.0;
x3:=0.5*cos(-pi/2-pi*t3/2);
x4:=-0.5-0.5*t4;
x5:=-1;
if(t<1,x1,(if(t<2,x2,(if(t<3,x3,(if(t<4,x4,x5)))))))'
y_formula = 't1:=t;
t2:=t-1;
t3:=t-2;
t4:=t-3;
t5:=t-4;
y1:=-1;
y2:=-1+0.5*t2;
y3:=0.5*sin(-pi/2-pi*t3/2);
y4:=0;
y5:=-t5;
if(t<1,y1,(if(t<2,y2,(if(t<3,y3,(if(t<4,y4,y5)))))))'
section_bounding_t_values = '0 1 2 3 4 5'
constant_names = 'pi'
constant_expressions = '${fparse pi}'
nums_segments = '10 5 10 5 10'
is_closed_loop = true
[]
[xyd]
type = XYDelaunayGenerator
boundary = pmg
desired_area = 0.05
refine_boundary = false
[]
[add_bdry]
type = ParsedGenerateSideset
input = xyd
combinatorial_geometry = 'abs(x^2+y^2-0.25)<tol'
constant_names = 'tol'
constant_expressions = '0.01'
new_sideset_name = 'circ'
[]
[ccg]
type = CircularBoundaryCorrectionGenerator
input = add_bdry
input_mesh_circular_boundaries = 'circ'
[]
[]
(modules/porous_flow/examples/tutorial/08_KT.i)
# Unsaturated Darcy-Richards flow
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[]
[PorousFlowUnsaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
relative_permeability_exponent = 3
relative_permeability_type = Corey
residual_saturation = 0.1
van_genuchten_alpha = 1E-6
van_genuchten_m = 0.6
stabilization = KT
flux_limiter_type = None
[]
[BCs]
[production]
type = PorousFlowSink
variable = porepressure
fluid_phase = 0
flux_function = 1E-2
use_relperm = true
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E5
dt = 1E5
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-no-jump.i)
# This test describes a test where three parallel channels are
# separated using flow separators that act as slip boundary conditions.
# The different channels have different friction factors
# meaning that we expect different pressure drops.
# Channel 1 expected drop (analytic, Forchheimer only): 5.50E-03 Pa
# Channel 2 expected drop (analytic, Forchheimer only): 4.40E-02 Pa
# Channel 3 expected drop (analytic, Forchheimer only): 1.49E-01 Pa
rho=1.1
mu=1.1
advected_interp_method='average'
velocity_interp_method='rc'
[Mesh]
[mesh]
type = CartesianMeshGenerator
dim = 2
dx = '1'
dy = '0.25 0.25 0.25'
ix = '5'
iy = '2 2 2'
subdomain_id = '1 2 3'
[]
[separator-1]
type = SideSetsBetweenSubdomainsGenerator
new_boundary = 'separator-1'
primary_block = 1
paired_block = 2
input = mesh
[]
[separator-2]
type = SideSetsBetweenSubdomainsGenerator
new_boundary = 'separator-2'
primary_block = 2
paired_block = 3
input = separator-1
[]
[inlet-1]
type = ParsedGenerateSideset
input = separator-2
combinatorial_geometry = 'y < 0.25 & x < 0.00001'
replace = true
new_sideset_name = inlet-1
[]
[inlet-2]
type = ParsedGenerateSideset
input = inlet-1
combinatorial_geometry = 'y > 0.25 & y < 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-2
[]
[inlet-3]
type = ParsedGenerateSideset
input = inlet-2
combinatorial_geometry = 'y > 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-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 = u
v = v
rho = ${rho}
[]
[]
[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
[]
[]
[FVBCs]
[inlet-u-1]
type = INSFVInletVelocityBC
boundary = 'inlet-1'
variable = superficial_vel_x
function = '0.1'
[]
[inlet-u-2]
type = INSFVInletVelocityBC
boundary = 'inlet-2'
variable = superficial_vel_x
function = '0.2'
[]
[inlet-u-3]
type = INSFVInletVelocityBC
boundary = 'inlet-3'
variable = superficial_vel_x
function = '0.3'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'inlet-1 inlet-2 inlet-3'
variable = superficial_vel_y
function = 0
[]
[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
[]
[outlet_p]
type = INSFVOutletPressureBC
boundary = 'right'
variable = pressure
function = 0.4
[]
[]
[FunctorMaterials]
[const]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '1.0'
[]
[darcy-1]
type = ADGenericVectorFunctorMaterial
prop_names = 'Forchheimer_coefficient'
prop_values = '1.0 1.0 1.0'
block = 1
[]
[darcy-2]
type = ADGenericVectorFunctorMaterial
prop_names = 'Forchheimer_coefficient'
prop_values = '2.0 2.0 2.0'
block = 2
[]
[darcy-3]
type = ADGenericVectorFunctorMaterial
prop_names = 'Forchheimer_coefficient'
prop_values = '3.0 3.0 3.0'
block = 3
[]
[speed]
type = PINSFVSpeedFunctorMaterial
superficial_vel_x = superficial_vel_x
superficial_vel_y = superficial_vel_y
porosity = porosity
[]
[]
[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
nl_max_its = 10
[]
[Postprocessors]
[inlet_p1]
type = SideAverageValue
variable = 'pressure'
boundary = 'inlet-1'
[]
[inlet_p2]
type = SideAverageValue
variable = 'pressure'
boundary = 'inlet-2'
[]
[inlet_p3]
type = SideAverageValue
variable = 'pressure'
boundary = 'inlet-3'
[]
[drop-1]
type = ParsedPostprocessor
expression = 'inlet_p1 - outlet'
pp_names = 'inlet_p1'
constant_names = 'outlet'
constant_expressions = '0.4'
[]
[drop-2]
type = ParsedPostprocessor
expression = 'inlet_p2 - outlet'
pp_names = 'inlet_p2'
constant_names = 'outlet'
constant_expressions = '0.4'
[]
[drop-3]
type = ParsedPostprocessor
expression = 'inlet_p3 - outlet'
pp_names = 'inlet_p3'
constant_names = 'outlet'
constant_expressions = '0.4'
[]
[]
[Outputs]
csv = true
execute_on = final
[]
(modules/porous_flow/examples/tutorial/06.i)
# Darcy flow with a tracer
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[tracer_concentration]
[]
[]
[ICs]
[tracer_concentration]
type = FunctionIC
function = '0.5*if(x*x+y*y<1.01,1,0)'
variable = tracer_concentration
[]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer_concentration
stabilization = none # Note to reader: 06_KT.i uses KT stabilization - compare the results
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[]
[constant_outer_porepressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[]
[injected_tracer]
type = DirichletBC
variable = tracer_concentration
value = 0.5
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_exterior_limited.i)
# This input is meant to be combined with parsed_generate_sideset.i
[Mesh]
# Delete top
[delete]
type = BoundaryDeletionGenerator
input = 'sideset'
boundary_names = 'top'
[]
# Recreate it but using the exterior limited feature
[new_top]
type = ParsedGenerateSideset
input = delete
# all qualify
combinatorial_geometry = 'z < 1e6'
normal = '0 1 0'
new_sideset_name = top
[]
[]
(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/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
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-energy.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=0.6
k=2.1
cp=5.5
advected_interp_method='upwind'
velocity_interp_method='rc'
[Mesh]
[mesh]
type = CartesianMeshGenerator
dim = 2
dx = '1.0'
dy = '0.25 0.25 0.25'
ix = '5'
iy = '2 2 2'
subdomain_id = '1 2 3'
[]
[separator-1]
type = SideSetsBetweenSubdomainsGenerator
input = mesh
primary_block = '1'
paired_block = '2'
new_boundary = 'separator-1'
[]
[separator-2]
type = SideSetsBetweenSubdomainsGenerator
input = separator-1
primary_block = '2'
paired_block = '3'
new_boundary = 'separator-2'
[]
[inlet-1]
type = ParsedGenerateSideset
input = separator-2
combinatorial_geometry = 'y < 0.25 & x < 0.00001'
replace = true
new_sideset_name = inlet-1
[]
[inlet-2]
type = ParsedGenerateSideset
input = inlet-1
combinatorial_geometry = 'y > 0.25 & y < 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-2
[]
[inlet-3]
type = ParsedGenerateSideset
input = inlet-2
combinatorial_geometry = 'y > 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-3
[]
[outlet-1]
type = ParsedGenerateSideset
input = inlet-3
combinatorial_geometry = 'y < 0.25 & x > 0.999999'
replace = false
new_sideset_name = outlet-1
[]
[outlet-2]
type = ParsedGenerateSideset
input = outlet-1
combinatorial_geometry = 'y > 0.25 & y < 0.5 & x > 0.999999'
replace = false
new_sideset_name = outlet-2
[]
[outlet-3]
type = ParsedGenerateSideset
input = outlet-2
combinatorial_geometry = 'y > 0.5 & x > 0.999999'
replace = false
new_sideset_name = 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}
[]
[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'
[]
[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'
[]
[temp_conduction]
type = FVDiffusion
coeff = ${k}
variable = T_fluid
[]
[temp_advection]
type = INSFVEnergyAdvection
variable = T_fluid
[]
[]
[FVBCs]
[inlet-u-1]
type = INSFVInletVelocityBC
boundary = 'inlet-1'
variable = superficial_vel_x
function = '0.1'
[]
[inlet-u-2]
type = INSFVInletVelocityBC
boundary = 'inlet-2'
variable = superficial_vel_x
function = '0.2'
[]
[inlet-u-3]
type = INSFVInletVelocityBC
boundary = 'inlet-3'
variable = superficial_vel_x
function = '0.3'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'inlet-1 inlet-2 inlet-3'
variable = superficial_vel_y
function = 0
[]
[inlet-T-1]
type = FVDirichletBC
variable = T_fluid
boundary = 'inlet-1'
value = 310
[]
[inlet-T-2]
type = FVDirichletBC
variable = T_fluid
boundary = 'inlet-2'
value = 320
[]
[inlet-T-3]
type = FVDirichletBC
variable = T_fluid
boundary = 'inlet-3'
value = 330
[]
[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-1]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '1.0'
block = '1 3'
[]
[porosity-2]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '0.5'
block = '2'
[]
[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 = 'outlet-1'
[]
[outlet_T2]
type = SideAverageValue
variable = 'T_fluid'
boundary = 'outlet-2'
[]
[outlet_T3]
type = SideAverageValue
variable = 'T_fluid'
boundary = 'outlet-3'
[]
[]
[Outputs]
csv = true
execute_on = final
[]
(modules/porous_flow/examples/tutorial/00_2D.i)
# Creates the mesh for the remainder of the tutorial
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
xmin = 1.0
xmax = 10
bias_x = 1.4
ny = 3
ymin = -6
ymax = 6
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 -2 0'
top_right = '10 2 0'
input = gen
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x<1.0001'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[Variables]
[dummy_var]
[]
[]
[Kernels]
[dummy_diffusion]
type = Diffusion
variable = dummy_var
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
file_base = 2D_mesh
exodus = true
[]
(modules/heat_transfer/test/tests/view_factors_symmetry/cavity_with_pillars_symmetry_bc.i)
[Mesh]
[cartesian]
type = CartesianMeshGenerator
dim = 3
dx = '0.5 0.5 0.5'
dy = '0.5 0.75 0.5'
dz = '1.5 0.5'
subdomain_id = '1 1 1
1 2 1
1 1 1
1 1 1
1 1 1
1 1 1'
[]
[add_obstruction]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 2
paired_block = 1
new_boundary = obstruction
input = cartesian
[]
[add_new_back]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(z) < 1e-10'
included_subdomains = '1'
normal = '0 0 -1'
new_sideset_name = back_2
input = add_obstruction
[]
[]
[UserObjects]
[view_factor_study]
type = ViewFactorRayStudy
execute_on = initial
boundary = 'left top bottom front back_2 obstruction'
face_order = FOURTH
[]
[view_factor]
type = RayTracingViewFactor
boundary = 'left top bottom front back_2 obstruction'
execute_on = INITIAL
normalize_view_factor = false
ray_study_name = view_factor_study
[]
[]
[RayBCs]
[vf_bc]
type = ViewFactorRayBC
boundary = 'left top bottom front back_2 obstruction'
[]
[symmetry]
type = ReflectRayBC
boundary = 'right'
[]
[]
[Postprocessors]
[left_left]
type = ViewFactorPP
from_boundary = left
to_boundary = left
view_factor_object_name = view_factor
[]
[]
[Problem]
solve = false
[]
[Executioner]
type = Steady
[]
[Outputs]
csv = true
[]
(modules/heat_transfer/test/tests/radiation_transfer_action/radiative_transfer_action_external_boundary_ray_tracing.i)
[Problem]
kernel_coverage_check = false
[]
[Mesh]
[cmg]
type = CartesianMeshGenerator
dim = 2
dx = '1 1.3 1.9'
ix = '3 3 3'
dy = '6'
iy = '9'
subdomain_id = '0 1 2'
[]
[inner_left]
type = SideSetsBetweenSubdomainsGenerator
input = cmg
primary_block = 0
paired_block = 1
new_boundary = 'inner_left'
[]
[inner_right]
type = SideSetsBetweenSubdomainsGenerator
input = inner_left
primary_block = 2
paired_block = 1
new_boundary = 'inner_right'
[]
[inner_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y - 6) < 1e-10'
normal = '0 1 0'
included_subdomains = 1
new_sideset_name = 'inner_top'
input = 'inner_right'
[]
[inner_bottom]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y) < 1e-10'
normal = '0 -1 0'
included_subdomains = 1
new_sideset_name = 'inner_bottom'
input = 'inner_top'
[]
[rename]
type = RenameBlockGenerator
old_block = '2'
new_block = '0'
input = inner_bottom
[]
[]
[Variables]
[temperature]
block = 0
[]
[]
[Kernels]
[heat_conduction]
type = HeatConduction
variable = temperature
block = 0
diffusion_coefficient = 5
[]
[]
[GrayDiffuseRadiation]
[cavity]
boundary = '4 5 6 7'
emissivity = '0.9 0.8 0.4 1'
n_patches = '2 2 2 3'
partitioners = 'centroid centroid centroid centroid'
centroid_partitioner_directions = 'x y y x'
temperature = temperature
adiabatic_boundary = '7'
fixed_temperature_boundary = '6'
fixed_boundary_temperatures = '800'
view_factor_calculator = ray_tracing
[]
[]
[BCs]
[left]
type = DirichletBC
variable = temperature
boundary = left
value = 1000
[]
[right]
type = DirichletBC
variable = temperature
boundary = right
value = 300
[]
[]
[Postprocessors]
[average_T_inner_right]
type = SideAverageValue
variable = temperature
boundary = inner_right
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
exodus = true
[]
(modules/porous_flow/examples/tutorial/11_2D.i)
# Two-phase borehole injection problem in RZ coordinates
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
xmin = 1.0
xmax = 10
bias_x = 1.4
ny = 3
ymin = -6
ymax = 6
[]
[aquifer]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 -2 0'
top_right = '10 2 0'
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x<1.0001'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
coord_type = RZ
[]
[UserObjects]
[dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater pgas T disp_r'
number_fluid_phases = 2
number_fluid_components = 2
[]
[pc]
type = PorousFlowCapillaryPressureVG
alpha = 1E-6
m = 0.6
[]
[]
[GlobalParams]
displacements = 'disp_r disp_z'
gravity = '0 0 0'
biot_coefficient = 1.0
PorousFlowDictator = dictator
[]
[Variables]
[pwater]
initial_condition = 20E6
[]
[pgas]
initial_condition = 20.1E6
[]
[T]
initial_condition = 330
scaling = 1E-5
[]
[disp_r]
scaling = 1E-5
[]
[]
[Kernels]
[mass_water_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[]
[flux_water]
type = PorousFlowAdvectiveFlux
fluid_component = 0
use_displaced_mesh = false
variable = pwater
[]
[vol_strain_rate_water]
type = PorousFlowMassVolumetricExpansion
fluid_component = 0
variable = pwater
[]
[mass_co2_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = pgas
[]
[flux_co2]
type = PorousFlowAdvectiveFlux
fluid_component = 1
use_displaced_mesh = false
variable = pgas
[]
[vol_strain_rate_co2]
type = PorousFlowMassVolumetricExpansion
fluid_component = 1
variable = pgas
[]
[energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = T
[]
[advection]
type = PorousFlowHeatAdvection
use_displaced_mesh = false
variable = T
[]
[conduction]
type = PorousFlowHeatConduction
use_displaced_mesh = false
variable = T
[]
[vol_strain_rate_heat]
type = PorousFlowHeatVolumetricExpansion
variable = T
[]
[grad_stress_r]
type = StressDivergenceRZTensors
temperature = T
variable = disp_r
eigenstrain_names = thermal_contribution
use_displaced_mesh = false
component = 0
[]
[poro_r]
type = PorousFlowEffectiveStressCoupling
variable = disp_r
use_displaced_mesh = false
component = 0
[]
[]
[AuxVariables]
[disp_z]
[]
[effective_fluid_pressure]
family = MONOMIAL
order = CONSTANT
[]
[mass_frac_phase0_species0]
initial_condition = 1 # all water in phase=0
[]
[mass_frac_phase1_species0]
initial_condition = 0 # no water in phase=1
[]
[sgas]
family = MONOMIAL
order = CONSTANT
[]
[swater]
family = MONOMIAL
order = CONSTANT
[]
[stress_rr]
family = MONOMIAL
order = CONSTANT
[]
[stress_tt]
family = MONOMIAL
order = CONSTANT
[]
[stress_zz]
family = MONOMIAL
order = CONSTANT
[]
[porosity]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[effective_fluid_pressure]
type = ParsedAux
coupled_variables = 'pwater pgas swater sgas'
expression = 'pwater * swater + pgas * sgas'
variable = effective_fluid_pressure
[]
[swater]
type = PorousFlowPropertyAux
variable = swater
property = saturation
phase = 0
execute_on = timestep_end
[]
[sgas]
type = PorousFlowPropertyAux
variable = sgas
property = saturation
phase = 1
execute_on = timestep_end
[]
[stress_rr_aux]
type = RankTwoAux
variable = stress_rr
rank_two_tensor = stress
index_i = 0
index_j = 0
[]
[stress_tt]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_tt
index_i = 2
index_j = 2
[]
[stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 1
index_j = 1
[]
[porosity]
type = PorousFlowPropertyAux
variable = porosity
property = porosity
execute_on = timestep_end
[]
[]
[BCs]
[pinned_top_bottom_r]
type = DirichletBC
variable = disp_r
value = 0
boundary = 'top bottom'
[]
[cavity_pressure_r]
type = Pressure
boundary = injection_area
variable = disp_r
postprocessor = constrained_effective_fluid_pressure_at_wellbore
use_displaced_mesh = false
[]
[cold_co2]
type = DirichletBC
boundary = injection_area
variable = T
value = 290 # injection temperature
use_displaced_mesh = false
[]
[constant_co2_injection]
type = PorousFlowSink
boundary = injection_area
variable = pgas
fluid_phase = 1
flux_function = -1E-4
use_displaced_mesh = false
[]
[outer_water_removal]
type = PorousFlowPiecewiseLinearSink
boundary = right
variable = pwater
fluid_phase = 0
pt_vals = '0 1E9'
multipliers = '0 1E8'
PT_shift = 20E6
use_mobility = true
use_relperm = true
use_displaced_mesh = false
[]
[outer_co2_removal]
type = PorousFlowPiecewiseLinearSink
boundary = right
variable = pgas
fluid_phase = 1
pt_vals = '0 1E9'
multipliers = '0 1E8'
PT_shift = 20.1E6
use_mobility = true
use_relperm = true
use_displaced_mesh = false
[]
[]
[FluidProperties]
[true_water]
type = Water97FluidProperties
[]
[tabulated_water]
type = TabulatedBicubicFluidProperties
fp = true_water
temperature_min = 275
pressure_max = 1E8
fluid_property_output_file = water97_tabulated_11.csv
# Comment out the fp parameter and uncomment below to use the newly generated tabulation
# fluid_property_file = water97_tabulated_11.csv
[]
[true_co2]
type = CO2FluidProperties
[]
[tabulated_co2]
type = TabulatedBicubicFluidProperties
fp = true_co2
temperature_min = 275
pressure_max = 1E8
fluid_property_output_file = co2_tabulated_11.csv
# Comment out the fp parameter and uncomment below to use the newly generated tabulation
# fluid_property_file = co2_tabulated_11.csv
[]
[]
[Materials]
[temperature]
type = PorousFlowTemperature
temperature = T
[]
[saturation_calculator]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[]
[massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'mass_frac_phase0_species0 mass_frac_phase1_species0'
[]
[water]
type = PorousFlowSingleComponentFluid
fp = tabulated_water
phase = 0
[]
[co2]
type = PorousFlowSingleComponentFluid
fp = tabulated_co2
phase = 1
[]
[relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 4
s_res = 0.1
sum_s_res = 0.2
phase = 0
[]
[relperm_co2]
type = PorousFlowRelativePermeabilityBC
nw_phase = true
lambda = 2
s_res = 0.1
sum_s_res = 0.2
phase = 1
[]
[porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
thermal = true
porosity_zero = 0.1
reference_temperature = 330
reference_porepressure = 20E6
thermal_expansion_coeff = 15E-6 # volumetric
solid_bulk = 8E9 # unimportant since biot = 1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityKozenyCarman
block = aquifer
poroperm_function = kozeny_carman_phi0
phi0 = 0.1
n = 2
m = 2
k0 = 1E-12
[]
[permeability_caps]
type = PorousFlowPermeabilityKozenyCarman
block = caps
poroperm_function = kozeny_carman_phi0
phi0 = 0.1
n = 2
m = 2
k0 = 1E-15
k_anisotropy = '1 0 0 0 1 0 0 0 0.1'
[]
[rock_thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '2 0 0 0 2 0 0 0 2'
[]
[rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1100
density = 2300
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 5E9
poissons_ratio = 0.0
[]
[strain]
type = ComputeAxisymmetricRZSmallStrain
eigenstrain_names = 'thermal_contribution initial_stress'
[]
[thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = T
thermal_expansion_coeff = 5E-6 # this is the linear thermal expansion coefficient
eigenstrain_name = thermal_contribution
stress_free_temperature = 330
[]
[initial_strain]
type = ComputeEigenstrainFromInitialStress
initial_stress = '20E6 0 0 0 20E6 0 0 0 20E6'
eigenstrain_name = initial_stress
[]
[stress]
type = ComputeLinearElasticStress
[]
[effective_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[]
[volumetric_strain]
type = PorousFlowVolumetricStrain
[]
[]
[Postprocessors]
[effective_fluid_pressure_at_wellbore]
type = PointValue
variable = effective_fluid_pressure
point = '1 0 0'
execute_on = timestep_begin
use_displaced_mesh = false
[]
[constrained_effective_fluid_pressure_at_wellbore]
type = FunctionValuePostprocessor
function = constrain_effective_fluid_pressure
execute_on = timestep_begin
[]
[]
[Functions]
[constrain_effective_fluid_pressure]
type = ParsedFunction
symbol_names = effective_fluid_pressure_at_wellbore
symbol_values = effective_fluid_pressure_at_wellbore
expression = 'max(effective_fluid_pressure_at_wellbore, 20E6)'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E3
[TimeStepper]
type = IterationAdaptiveDT
dt = 1E3
growth_factor = 1.2
optimal_iterations = 10
[]
nl_abs_tol = 1E-7
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_neighbor_sub_id.i)
[Mesh]
[cmg]
type = CartesianMeshGenerator
dim = 2
dx = '1 1'
dy = '2 2'
subdomain_id = '0 1 0 0'
[]
[sideset]
type = ParsedGenerateSideset
input = cmg
combinatorial_geometry = 'abs(x - 1) < 1e-6'
included_neighbors = '1'
new_sideset_name = interior
[]
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/cyclic/cyclic.i)
[Mesh]
[ccmg]
type = ConcentricCircleMeshGenerator
num_sectors = 6
radii = '0.2546 0.3368'
rings = '4 3 4'
has_outer_square = on
pitch = 1
preserve_volumes = off
smoothing_max_it = 3
[]
[rename_left]
type = RenameBoundaryGenerator
input = ccmg
old_boundary = 'left'
new_boundary = '101'
[]
[left]
type = CartesianMeshGenerator
dim = 2
dx = '5'
dy = '1'
ix = '100'
iy = '16'
[]
[move_it]
type = TransformGenerator
input = left
transform = translate
vector_value = '-5.5 -0.5 0'
[]
[rename_middle]
type = RenameBoundaryGenerator
input = move_it
old_boundary = 'right'
new_boundary = '102'
[]
[stitch]
type = StitchedMeshGenerator
inputs = 'rename_left rename_middle'
stitch_boundaries_pairs = '101 102'
[]
[in_between]
type = SideSetsBetweenSubdomainsGenerator
input = stitch
primary_block = 2
paired_block = 1
new_boundary = 'no_circle'
[]
[delete]
type = BlockDeletionGenerator
input = in_between
block = '1'
[]
[create_fused_top_sideset_l]
input = delete
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0.49'
normal = '0 1 0'
new_sideset_name = 103
[]
[top_left_block]
type = GeneratedMeshGenerator
xmin = -5.5
xmax = -0.5
ymin = 0.5
ymax = ${fparse 0.5 + 2. / 16.}
nx = 100
ny = 2
dim = 2
[]
[rename_top_left_block]
input = top_left_block
type = RenameBlockGenerator
old_block = '0'
new_block = '100'
[]
[rename_middle_2]
input = rename_top_left_block
type = RenameBoundaryGenerator
old_boundary = 'right'
new_boundary = '104'
[]
[top_middle_block]
type = GeneratedMeshGenerator
xmin = -0.5
xmax = 0.5
ymin = 0.5
ymax = ${fparse 0.5 + 2. / 16.}
nx = 16
ny = 2
dim = 2
[]
[rename_top_middle_block]
input = top_middle_block
type = RenameBlockGenerator
old_block = '0'
new_block = '101'
[]
[rename_left_2]
input = rename_top_middle_block
type = RenameBoundaryGenerator
old_boundary = 'left'
new_boundary = '105'
[]
[stitch_2]
inputs = 'rename_middle_2 rename_left_2'
type = StitchedMeshGenerator
stitch_boundaries_pairs = '104 105'
[]
[create_fused_bottom_sideset]
input = stitch_2
type = ParsedGenerateSideset
combinatorial_geometry = 'y < 0.51'
normal = '0 -1 0'
new_sideset_name = 106
[]
[stitch_3]
inputs = 'create_fused_top_sideset_l create_fused_bottom_sideset'
type = StitchedMeshGenerator
stitch_boundaries_pairs = '103 106'
[]
[rename_extension]
type = RenameBoundaryGenerator
input = no_slip_bottom
old_boundary = 'extension'
new_boundary = '111'
[]
[extension]
type = CartesianMeshGenerator
dim = 2
dx = '5'
dy = '1'
ix = '100'
iy = '16'
[]
[move_it_2]
type = TransformGenerator
input = extension
transform = translate
vector_value = '5.5 -0.5 0'
[]
[stitch_4]
inputs = 'rename_middle rename_extension'
type = StitchedMeshGenerator
stitch_boundaries_pairs = '102 111'
[]
[create_fused_top_sideset_r]
input = stitch_4
type = ParsedGenerateSideset
combinatorial_geometry = 'y > .49'
normal = '0 1 0'
new_sideset_name = 113
[]
[top_right_block]
type = GeneratedMeshGenerator
xmin = 0.5
xmax = 5.5
ymin = 0.5
ymax = ${fparse 0.5 + 2. / 16.}
nx = 100
ny = 2
dim = 2
[]
[rename_top_right_block]
input = top_right_block
type = RenameBlockGenerator
old_block = 'top_right_block'
new_block = '110'
[]
[rename_extension_2]
input = rename_top_right_block
type = RenameBoundaryGenerator
old_boundary = 'rename_extension'
new_boundary = '115'
[]
[stitch_5]
inputs = 'rename_middle_2 rename_extension_2'
type = StitchedMeshGenerator
stitch_boundaries_pairs = '104 115'
[]
[stitch_6]
inputs = 'create_fused_bottom_sideset create_fused_top_sideset_r'
type = StitchedMeshGenerator
stitch_boundaries_pairs = '106 113'
[]
[no_slip_top]
input = stitch_6
type = ParsedGenerateSideset
combinatorial_geometry = 'y > .615'
normal = '0 1 0'
new_sideset_name = 'no_slip_top'
[]
[no_slip_bottom]
input = no_slip_top
type = ParsedGenerateSideset
combinatorial_geometry = 'y < -0.49'
normal = '0 -1 0'
new_sideset_name = 'no_slip_bottom'
[]
[inlet]
input = no_slip_bottom
type = ParsedGenerateSideset
combinatorial_geometry = 'x > 5.49'
normal = '1 0 0'
new_sideset_name = 'inlet'
[]
[outlet]
input = inlet
type = ParsedGenerateSideset
combinatorial_geometry = 'x < -5.49'
normal = '-1 0 0'
new_sideset_name = 'outlet'
[]
[]
(modules/porous_flow/examples/tutorial/03.i)
# Darcy flow with heat advection and conduction
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[porepressure]
[]
[temperature]
initial_condition = 293
scaling = 1E-8
[]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[]
[constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 313
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
thermal_expansion = 0.0002
cp = 4194
cv = 4186
porepressure_coefficient = 0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
biot_coefficient = 0.8
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[]
[rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[]
[thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caps aquifer'
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/materials/flow_diode/friction.i)
mu = 0.1
rho = 10
[Mesh]
[cmg]
type = CartesianMeshGenerator
dim = 2
dx = '1 0.5 1'
dy = '0.5 0.5'
ix = '3 2 3'
iy = '3 3'
subdomain_id = '1 1 2
2 1 1'
[]
[top_outlet]
type = ParsedGenerateSideset
input = cmg
combinatorial_geometry = 'x>2.499 & y>0.4999'
new_sideset_name = top_right
[]
[bottom_outlet]
type = ParsedGenerateSideset
input = top_outlet
combinatorial_geometry = 'x>2.499 & y<0.50001'
new_sideset_name = bottom_right
[]
[]
[GlobalParams]
rhie_chow_user_object = 'pins_rhie_chow_interpolator'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
[]
[Modules]
[NavierStokesFV]
compressibility = 'incompressible'
porous_medium_treatment = true
density = ${rho}
dynamic_viscosity = ${mu}
initial_velocity = '1e-6 1e-6 0'
initial_pressure = 0.0
inlet_boundaries = 'left'
momentum_inlet_types = 'fixed-velocity'
momentum_inlet_function = '1 0'
wall_boundaries = 'top bottom'
momentum_wall_types = 'noslip noslip'
outlet_boundaries = 'right'
momentum_outlet_types = 'fixed-pressure'
pressure_function = '1'
use_friction_correction = true
consistent_scaling = 10
friction_blocks = '1; 2'
friction_types = 'darcy forchheimer; darcy forchheimer'
# Base friction
# friction_coeffs = 'Darcy Forchheimer; Darcy Forchheimer'
# Combined with diode
friction_coeffs = 'combined_linear combined_quadratic; combined_linear combined_quadratic'
standard_friction_formulation = true
mass_advection_interpolation = 'average'
momentum_advection_interpolation = 'average'
[]
[]
[FunctorMaterials]
[porosity]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '0.5'
[]
[base_friction]
type = ADGenericVectorFunctorMaterial
prop_names = 'Darcy Forchheimer'
prop_values = '220 240 260 0 0 0'
[]
[diode]
type = NSFVFrictionFlowDiodeFunctorMaterial
direction = '1 0 0'
additional_linear_resistance = '4000 0 0'
additional_quadratic_resistance = '0 0 0'
base_linear_friction_coefs = 'Darcy'
base_quadratic_friction_coefs = 'Forchheimer'
sum_linear_friction_name = 'diode_linear'
sum_quadratic_friction_name = 'diode_quad'
block = '2'
turn_on_diode = true
[]
[combine_linear_friction]
type = ADPiecewiseByBlockVectorFunctorMaterial
prop_name = 'combined_linear'
subdomain_to_prop_value = '1 Darcy
2 diode_linear'
[]
[combine_quadratic_friction]
type = ADPiecewiseByBlockVectorFunctorMaterial
prop_name = 'combined_quadratic'
subdomain_to_prop_value = '1 Forchheimer
2 diode_quad'
[]
[]
[Executioner]
type = Steady
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 200'
line_search = 'none'
nl_abs_tol = 1e-14
[]
[Postprocessors]
[mdot_top]
type = VolumetricFlowRate
boundary = 'top_right'
vel_x = superficial_vel_x
vel_y = superficial_vel_y
advected_quantity = ${rho}
[]
[mdot_bottom]
type = VolumetricFlowRate
boundary = 'bottom_right'
vel_x = superficial_vel_x
vel_y = superficial_vel_y
advected_quantity = ${rho}
[]
[]
[Outputs]
exodus = true
[]
(modules/porous_flow/examples/natural_convection/natural_convection.i)
# Example problem: Elder, Transient convection in a porous mediu, 1967
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 64
ny = 32
xmin = 0
xmax = 300
ymax = 0
ymin = -150
[]
[heater]
type = ParsedGenerateSideset
input = gen
combinatorial_geometry = 'x <= 150 & y = -150'
new_sideset_name = heater
[]
uniform_refine = 1
[]
[Variables]
[porepressure]
[]
[T]
initial_condition = 285
[]
[]
[AuxVariables]
[density]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[density]
type = PorousFlowPropertyAux
variable = density
property = density
execute_on = TIMESTEP_END
[]
[]
[ICs]
[hydrostatic]
type = FunctionIC
variable = porepressure
function = '1e5 - 9.81 * 1000 * y'
[]
[]
[GlobalParams]
PorousFlowDictator = 'dictator'
gravity = '0 -9.81 0'
[]
[FluidProperties]
[water]
type = Water97FluidProperties
[]
[]
[PorousFlowFullySaturated]
coupling_type = ThermoHydro
porepressure = porepressure
temperature = T
fp = water
[]
[Materials]
[porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[]
[permeability]
type = PorousFlowPermeabilityConst
permeability = '1.21E-10 0 0 0 1.21E-10 0 0 0 1.21E-10'
[]
[Matrix_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500
specific_heat_capacity = 0
[]
[thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '1.5 0 0 0 1.5 0 0 0 0'
[]
[]
[BCs]
[t_bot]
type = DirichletBC
variable = T
value = 293
boundary = 'heater'
[]
[t_top]
type = DirichletBC
variable = T
value = 285
boundary = 'top'
[]
[p_top]
type = DirichletBC
variable = porepressure
value = 1e5
boundary = top
[]
[]
[Preconditioning]
[basic]
type = SMP
full = true
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[]
[Executioner]
type = Transient
end_time = 63072000
dtmax = 1e6
nl_rel_tol = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
dt = 1000
[]
[Adaptivity]
interval = 1
refine_fraction = 0.2
coarsen_fraction = 0.3
max_h_level = 4
[]
[]
[Outputs]
exodus = true
[]
# If you uncomment this it will print out all the kernels and materials that the PorousFlowFullySaturated action generates
#[Problem]
# type = DumpObjectsProblem
# dump_path = PorousFlowFullySaturated
#[]
(test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset_boundary_limited.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 4
xmax = 3
ymax = 3
zmax = 3
[]
[subdomains]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
block_id = 1
[]
[sideset]
type = ParsedGenerateSideset
input = subdomains
combinatorial_geometry = 'z < 1.6'
included_subdomains = '1'
normal = '1 0 0'
new_sideset_name = interior
[]
[sideset_further_limited]
type = ParsedGenerateSideset
input = sideset
combinatorial_geometry = 'z > 0.6'
included_boundaries = 'interior'
new_sideset_name = interior_smaller
[]
[]
[Outputs]
exodus = true
[]
(test/tests/vectorpostprocessors/side_value_sampler/side_value_sampler.i)
[Mesh]
[mesh]
type = CartesianMeshGenerator
dim = 2
dx = '0.5 0.5'
dy = '1'
ix = '5 5'
iy = '10'
subdomain_id = '1 1'
[]
# Limited to 1 side to avoid inconsistencies in parallel
[internal_sideset]
type = ParsedGenerateSideset
combinatorial_geometry = 'y<0.51 & y>0.49 & x<0.11'
new_sideset_name = 'center'
input = 'mesh'
[]
# this keeps numbering continuous so tests dont fail on different ids in CSV
allow_renumbering = false
[]
[Variables]
[u]
[]
[v]
[]
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[diff_v]
type = Diffusion
variable = v
[]
[]
[BCs]
[left]
type = DirichletBC
variable = u
boundary = left
value = 0
[]
[right]
type = DirichletBC
variable = u
boundary = right
value = 1
[]
[left_v]
type = DirichletBC
variable = v
boundary = left
value = 1
[]
[right_v]
type = DirichletBC
variable = v
boundary = right
value = 0
[]
[]
[VectorPostprocessors]
inactive = 'internal_sample'
[side_sample]
type = SideValueSampler
variable = 'u v'
boundary = top
sort_by = x
[]
[internal_sample]
type = SideValueSampler
variable = 'u v'
boundary = center
sort_by = 'id'
[]
[]
[Executioner]
type = Steady
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
execute_on = 'timestep_end'
[vpp_csv]
type = CSV
[]
[]
(modules/porous_flow/examples/tutorial/10.i)
# Unsaturated Darcy-Richards flow without using an Action
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[UserObjects]
[dictator]
type = PorousFlowDictator
porous_flow_vars = pp
number_fluid_phases = 1
number_fluid_components = 1
[]
[pc]
type = PorousFlowCapillaryPressureVG
alpha = 1E-6
m = 0.6
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[pp]
[]
[]
[Kernels]
[time_derivative]
type = PorousFlowMassTimeDerivative
variable = pp
[]
[flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
[]
[]
[AuxVariables]
[sat]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[saturation]
type = PorousFlowPropertyAux
variable = sat
property = saturation
[]
[]
[BCs]
[production]
type = PorousFlowSink
variable = pp
fluid_phase = 0
flux_function = 1E-2
use_relperm = true
boundary = injection_area
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[saturation_calculator]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[]
[temperature]
type = PorousFlowTemperature
temperature = 293
[]
[massfrac]
type = PorousFlowMassFraction
[]
[simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[]
[relperm]
type = PorousFlowRelativePermeabilityCorey
n = 3
s_res = 0.1
sum_s_res = 0.1
phase = 0
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-7
[]
[Outputs]
exodus = true
[]
(modules/porous_flow/examples/tutorial/04.i)
# Darcy flow with heat advection and conduction, and elasticity
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[]
[shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[]
[aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[]
[injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomains = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[]
[rename]
type = RenameBlockGenerator
old_block = '0 1'
new_block = 'caps aquifer'
input = 'injection_area'
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
biot_coefficient = 1.0
[]
[Variables]
[porepressure]
[]
[temperature]
initial_condition = 293
scaling = 1E-8
[]
[disp_x]
scaling = 1E-10
[]
[disp_y]
scaling = 1E-10
[]
[disp_z]
scaling = 1E-10
[]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydroMechanical
gravity = '0 0 0'
fp = the_simple_fluid
eigenstrain_names = thermal_contribution
use_displaced_mesh = false
[]
[BCs]
[constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[]
[constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 313
boundary = injection_area
[]
[roller_tmax]
type = DirichletBC
variable = disp_x
value = 0
boundary = dmax
[]
[roller_tmin]
type = DirichletBC
variable = disp_y
value = 0
boundary = dmin
[]
[roller_top_bottom]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'top bottom'
[]
[cavity_pressure_x]
type = Pressure
boundary = injection_area
variable = disp_x
component = 0
factor = 1E6
use_displaced_mesh = false
[]
[cavity_pressure_y]
type = Pressure
boundary = injection_area
variable = disp_y
component = 1
factor = 1E6
use_displaced_mesh = false
[]
[]
[AuxVariables]
[stress_rr]
family = MONOMIAL
order = CONSTANT
[]
[stress_pp]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[stress_rr]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_rr
scalar_type = RadialStress
point1 = '0 0 0'
point2 = '0 0 1'
[]
[stress_pp]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_pp
scalar_type = HoopStress
point1 = '0 0 0'
point2 = '0 0 1'
[]
[]
[FluidProperties]
[the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
thermal_expansion = 0.0002
cp = 4194
cv = 4186
porepressure_coefficient = 0
[]
[]
[Materials]
[porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[]
[biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[]
[permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[]
[permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[]
[thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[]
[rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[]
[thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caps aquifer'
[]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 5E9
poissons_ratio = 0.0
[]
[strain]
type = ComputeSmallStrain
eigenstrain_names = thermal_contribution
[]
[thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temperature
thermal_expansion_coeff = 0.001 # this is the linear thermal expansion coefficient
eigenstrain_name = thermal_contribution
stress_free_temperature = 293
[]
[stress]
type = ComputeLinearElasticStress
[]
[]
[Preconditioning]
active = basic
[basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[]
[preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-15
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
(test/tests/meshgenerators/mesh_diagnostics_generator/consistent_domains.i)
[Mesh]
[checker]
type = GeneratedMeshGenerator
dim = 2
nx = 2
ny = 2
subdomain_ids = '1 2
2 1'
[]
[inner]
type = ParsedGenerateSideset
input = checker
combinatorial_geometry = 'x>0.49 & x<0.51'
new_sideset_name = 'bad_one'
[]
[diag]
type = MeshDiagnosticsGenerator
input = inner
examine_sidesets_orientation = INFO
[]
[]
[Outputs]
exodus = true
[]
(modules/porous_flow/examples/groundwater/ex02_steady_state.i)
# Steady-state groundwater model. See groundwater_models.md for a detailed description
[Mesh]
[basic_mesh]
# mesh create by external program: lies within -500<=x<=500 and -200<=y<=200, with varying z
type = FileMeshGenerator
file = ex02_mesh.e
[]
[name_blocks]
type = RenameBlockGenerator
input = basic_mesh
old_block = '2 3 4'
new_block = 'bot_aquifer aquitard top_aquifer'
[]
[zmax]
type = SideSetsFromNormalsGenerator
input = name_blocks
normal_tol = 0.1
new_boundary = zmax
normals = '0 0 1'
[]
[xmin_bot_aquifer]
type = ParsedGenerateSideset
input = zmax
included_subdomains = 2
normal = '-1 0 0'
combinatorial_geometry = 'x <= -500.0'
new_sideset_name = xmin_bot_aquifer
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[pp]
[]
[]
[ICs]
[pp]
type = FunctionIC
variable = pp
function = initial_pp
[]
[]
[BCs]
[rainfall_recharge]
type = PorousFlowSink
boundary = zmax
variable = pp
flux_function = -1E-6 # recharge of 0.1mm/day = 1E-4m3/m2/day = 0.1kg/m2/day ~ 1E-6kg/m2/s
[]
[evapotranspiration]
type = PorousFlowHalfCubicSink
boundary = zmax
variable = pp
center = 0.0
cutoff = -5E4 # roots of depth 5m. 5m of water = 5E4 Pa
use_mobility = true
fluid_phase = 0
# Assume pan evaporation of 4mm/day = 4E-3m3/m2/day = 4kg/m2/day ~ 4E-5kg/m2/s
# Assume that if permeability was 1E-10m^2 and water table at topography then ET acts as pan strength
# Because use_mobility = true, then 4E-5 = maximum_flux = max * perm * density / visc = max * 1E-4, so max = 40
max = 40
[]
[]
[DiracKernels]
[river]
type = PorousFlowPolyLineSink
SumQuantityUO = baseflow
point_file = ex02_river.bh
# Assume a perennial river.
# Assume the river has an incision depth of 1m and a stage height of 1.5m, and these are constant in time and uniform over the whole model. Hence, if groundwater head is 0.5m (5000Pa) there will be no baseflow and leakage.
p_or_t_vals = '-999995000 5000 1000005000'
# Assume the riverbed conductance, k_zz*density*river_segment_length*river_width/riverbed_thickness/viscosity = 1E-6*river_segment_length kg/Pa/s
fluxes = '-1E3 0 1E3'
variable = pp
[]
[]
[Functions]
[initial_pp]
type = SolutionFunction
scale_factor = 1E4
from_variable = cosflow_depth
solution = initial_mesh
[]
[baseflow_rate]
type = ParsedFunction
symbol_names = 'baseflow_kg dt'
symbol_values = 'baseflow_kg dt'
expression = 'baseflow_kg / dt * 24.0 * 3600.0 / 400.0'
[]
[]
[PorousFlowUnsaturated]
fp = simple_fluid
porepressure = pp
[]
[FluidProperties]
[simple_fluid]
type = SimpleFluidProperties
[]
[]
[Materials]
[porosity_everywhere]
type = PorousFlowPorosityConst
porosity = 0.05
[]
[permeability_aquifers]
type = PorousFlowPermeabilityConst
block = 'top_aquifer bot_aquifer'
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-13'
[]
[permeability_aquitard]
type = PorousFlowPermeabilityConst
block = aquitard
permeability = '1E-16 0 0 0 1E-16 0 0 0 1E-17'
[]
[]
[UserObjects]
[initial_mesh]
type = SolutionUserObject
execute_on = INITIAL
mesh = ex02_mesh.e
timestep = LATEST
system_variables = cosflow_depth
[]
[baseflow]
type = PorousFlowSumQuantity
[]
[]
[Postprocessors]
[baseflow_kg]
type = PorousFlowPlotQuantity
uo = baseflow
outputs = 'none'
[]
[dt]
type = TimestepSize
outputs = 'none'
[]
[baseflow_l_per_m_per_day]
type = FunctionValuePostprocessor
function = baseflow_rate
indirect_dependencies = 'baseflow_kg dt'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
# following 2 lines are not mandatory, but illustrate a popular preconditioner choice in groundwater models
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap'
petsc_options_value = ' asm ilu 2 '
[]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E6
[TimeStepper]
type = FunctionDT
function = 'max(1E6, t)'
[]
end_time = 1E12
nl_abs_tol = 1E-13
[]
[Outputs]
print_linear_residuals = false
[ex]
type = Exodus
execute_on = final
[]
[csv]
type = CSV
[]
[]
(test/tests/meshgenerators/circular_correction_generator/partial_circle_span.i)
[Mesh]
[pmg]
type = ParsedCurveGenerator
x_formula = 't1:=t;
t2:=t-1;
t3:=t-2;
t4:=t-3;
t5:=t-4;
t6:=t-5;
x1:=t1-1;
x2:=0.0;
x3:=0.5+cos(-2/3*pi-2/3*pi*t3);
x4:=0.0;
x5:=-t5;
x6:=-1;
if(t<1,x1,(if(t<2,x2,(if(t<3,x3,(if(t<4,x4,(if(t<5,x5,x6)))))))))'
y_formula = 't1:=t;
t2:=t-1;
t3:=t-2;
t4:=t-3;
t5:=t-4;
t6:=t-5;
y1:=-1;
y2:=-1+(1-sqrt(3)/2)*t2;
y3:=sin(-2/3*pi-2/3*pi*t3);
y4:=sqrt(3)/2+(1-sqrt(3)/2)*t4;
y5:=1;
y6:=1-t6*2;
if(t<1,y1,(if(t<2,y2,(if(t<3,y3,(if(t<4,y4,(if(t<5,y5,y6)))))))))'
section_bounding_t_values = '0 1 2 3 4 5 6'
constant_names = 'pi'
constant_expressions = '${fparse pi}'
nums_segments = '5 2 10 2 5 10'
is_closed_loop = true
[]
[xyd]
type = XYDelaunayGenerator
boundary = pmg
desired_area = 0.05
refine_boundary = false
[]
[add_bdry]
type = ParsedGenerateSideset
input = xyd
combinatorial_geometry = 'abs((x-0.5)^2+y^2-1.0)<tol'
constant_names = 'tol'
constant_expressions = '0.05'
new_sideset_name = 'circ'
[]
[ccg]
type = CircularBoundaryCorrectionGenerator
input = add_bdry
input_mesh_circular_boundaries = 'circ'
custom_circular_tolerance = 1e-8
move_end_nodes_in_span_direction = true
[]
[]
(test/tests/meshgenerators/flip_sideset_generator/flux_flip_3D.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 3
xmax = 3
ymax = 3
zmax = 3
[]
[subdomains]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
block_id = 1
[]
[sideset]
type = ParsedGenerateSideset
input = subdomains
combinatorial_geometry = 'z < 1'
included_subdomains = '1'
normal = '1 0 0'
new_sideset_name = interior
[]
[flip]
type = FlipSidesetGenerator
input = sideset
boundary = interior
[]
[]
[AuxVariables]
[u]
[]
[]
[AuxKernels]
[diffusion]
type = FunctionAux
variable = u
function = func
[]
[]
[Functions]
[func]
type = ParsedFunction
expression = x+y+z
[]
[]
[Problem]
type = FEProblem
solve = false
[]
[Postprocessors]
[flux]
type = SideDiffusiveFluxIntegral
variable = u
boundary = interior
diffusivity = 1
[]
[area]
type = AreaPostprocessor
boundary = interior
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
csv = true
[]
(test/tests/meshgenerators/parsed_generate_sideset/parsed_generate_sideset.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 3
nx = 3
ny = 3
nz = 3
xmax = 3
ymax = 3
zmax = 3
[]
[subdomains]
type = ParsedSubdomainMeshGenerator
input = gmg
combinatorial_geometry = 'x < 1 & y > 1 & y < 2'
block_id = 1
[]
[sideset]
type = ParsedGenerateSideset
input = subdomains
combinatorial_geometry = 'z < 1'
included_subdomains = '1'
normal = '1 0 0'
new_sideset_name = interior
[]
[]
[Outputs]
exodus = true
[]
(modules/subchannel/examples/duct/wrapper.i)
# a wrapper mesh for coupling to subchannel
# sqrt(3) / 2 is by how much flat to flat is smaller than corer to corner
f = '${fparse sqrt(3) / 2}'
# units are meters
height = 1.0
duct_inside = 0.085
wrapper_thickness = 0.002
duct_outside = '${fparse duct_inside + 2 * wrapper_thickness}'
# number of radial elements in the wrapper
n_radial = 4
# number of azimuthal elements per side
n_az = 4
# number of axial elements
n_ax = 10
# System variables
T_in = 660
[DefaultElementQuality]
failure_type = warning
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
[bisonMesh]
type = PolygonConcentricCircleMeshGenerator
num_sides = 6
num_sectors_per_side = '${n_az} ${n_az} ${n_az} ${n_az} ${n_az} ${n_az}'
background_intervals = 1
background_block_ids = '1'
# note that polygon_size is "like radius"
polygon_size = '${fparse duct_outside / 2}'
duct_sizes = '${fparse duct_inside / 2 / f}'
duct_intervals = '${n_radial}'
duct_block_ids = '2'
# interface_boundary_names = 'inside'
external_boundary_name = 'outside'
[]
[extrude]
type = AdvancedExtruderGenerator
# type = FancyExtruderGenerator
direction = '0 0 1'
input = bisonMesh
heights = '${height}'
num_layers = '${n_ax}'
[]
[inlet_boundary]
type = ParsedGenerateSideset
input = extrude
combinatorial_geometry = 'z < 1e-6'
normal = '0 0 -1'
new_sideset_name = 'inlet'
[]
[outlet_boundary]
type = ParsedGenerateSideset
input = inlet_boundary
combinatorial_geometry = 'z > ${fparse height - 1e-6}'
normal = '0 0 1'
new_sideset_name = 'outlet'
[]
[inside_boundary]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 2
paired_block = 1
new_boundary = 'inside'
input = outlet_boundary
[]
[remove]
type = BlockDeletionGenerator
block = 1
input = inside_boundary
[]
[rename]
type = RenameBlockGenerator
input = remove
old_block = '2'
new_block = 'wrapper'
[]
[rotate]
type = TransformGenerator
input = rename
transform = ROTATE
vector_value = '30 0 0'
[]
coord_type = XYZ
[]
[Functions]
[volumetric_heat_rate]
type = ParsedFunction
expression = '1.0*H'
symbol_names = 'H'
symbol_values = '${height}'
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
[]
[]
[Modules]
[TensorMechanics]
[Master]
add_variables = true
strain = SMALL
incremental = true
generate_output = 'stress_xx stress_yy stress_xy'
temperature = temperature
[block0]
eigenstrain_names = eigenstrain
block = wrapper
[]
[]
[]
[]
[Kernels]
[heat_conduction]
type = HeatConduction
variable = temperature
[]
[heat_source]
type = HeatSource
variable = temperature
function = volumetric_heat_rate
[]
[]
[AuxVariables]
[q_prime]
order = CONSTANT
family = MONOMIAL
[]
[duct_surface_temperature]
[]
[disp_magnitude]
[]
[]
[AuxKernels]
[QPrime]
type = SCMTriDuctQPrimeAux
diffusivity = 'thermal_conductivity'
flat_to_flat = '${fparse duct_inside}'
variable = q_prime
diffusion_variable = temperature
component = normal
boundary = 'inside'
execute_on = 'timestep_end'
[]
[Deformation]
type = ParsedAux
variable = disp_magnitude
coupled_variables = 'disp_x disp_y disp_z'
expression = 'sqrt(disp_x^2 + disp_y^2 + disp_z^2)'
execute_on = 'timestep_end'
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = wrapper
bulk_modulus = 0.333333333333e6
poissons_ratio = 0.0
[]
[thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = wrapper
temperature = temperature
stress_free_temperature = ${T_in}
thermal_expansion_coeff = 1e-5
eigenstrain_name = eigenstrain
[]
[stress]
type = ComputeStrainIncrementBasedStress
block = wrapper
[]
[heat_conductor]
type = HeatConductionMaterial
thermal_conductivity = 1.0
block = wrapper
[]
[density]
type = Density
block = wrapper
density = 1.0
[]
[]
[BCs]
[isolated_bc]
type = NeumannBC
variable = temperature
boundary = 'inlet outlet'
[]
[inside_bc]
type = MatchedValueBC
variable = temperature
boundary = 'inside'
v = duct_surface_temperature
[]
[outside_bc]
type = DirichletBC
variable = temperature
boundary = 'outside'
value = '${fparse T_in+10}'
[]
[no_x]
type = DirichletBC
variable = disp_x
boundary = 'inlet outlet'
value = 0.0
[]
[no_y]
type = DirichletBC
variable = disp_y
boundary = 'inlet outlet'
value = 0.0
[]
[no_z]
type = DirichletBC
variable = disp_z
boundary = 'inlet'
value = 0.0
[]
[]
[ICs]
[temperature_ic]
type = ConstantIC
variable = temperature
value = ${T_in}
[]
[q_prime_ic]
type = ConstantIC
variable = q_prime
value = 0.0
[]
[]
[UserObjects]
[q_prime_uo]
type = LayeredSideAverage
boundary = 'inside'
variable = q_prime
num_layers = 1000
direction = z
execute_on = 'TIMESTEP_END'
[]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
[Quadrature]
order = THIRD
side_order = FOURTH
[]
[]
[Outputs]
exodus = true
[]
(modules/navier_stokes/test/tests/finite_volume/pins/channel-flow/hydraulic-separators/separator-scalar.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=0.6
alpha=0.1
advected_interp_method='upwind'
velocity_interp_method='rc'
[Mesh]
[mesh]
type = CartesianMeshGenerator
dim = 2
dx = '1.0'
dy = '0.25 0.25 0.25'
ix = '5'
iy = '2 2 2'
subdomain_id = '1 2 3'
[]
[separator-1]
type = SideSetsBetweenSubdomainsGenerator
input = mesh
primary_block = '1'
paired_block = '2'
new_boundary = 'separator-1'
[]
[separator-2]
type = SideSetsBetweenSubdomainsGenerator
input = separator-1
primary_block = '2'
paired_block = '3'
new_boundary = 'separator-2'
[]
[inlet-1]
type = ParsedGenerateSideset
input = separator-2
combinatorial_geometry = 'y < 0.25 & x < 0.00001'
replace = true
new_sideset_name = inlet-1
[]
[inlet-2]
type = ParsedGenerateSideset
input = inlet-1
combinatorial_geometry = 'y > 0.25 & y < 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-2
[]
[inlet-3]
type = ParsedGenerateSideset
input = inlet-2
combinatorial_geometry = 'y > 0.5 & x < 0.00001'
replace = true
new_sideset_name = inlet-3
[]
[outlet-1]
type = ParsedGenerateSideset
input = inlet-3
combinatorial_geometry = 'y < 0.25 & x > 0.999999'
replace = false
new_sideset_name = outlet-1
[]
[outlet-2]
type = ParsedGenerateSideset
input = outlet-1
combinatorial_geometry = 'y > 0.25 & y < 0.5 & x > 0.999999'
replace = false
new_sideset_name = outlet-2
[]
[outlet-3]
type = ParsedGenerateSideset
input = outlet-2
combinatorial_geometry = 'y > 0.5 & x > 0.999999'
replace = false
new_sideset_name = 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}
[]
[scalar]
type = INSFVEnergyVariable
initial_condition = 50
[]
[]
[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'
[]
[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'
[]
[scalar_conduction]
type = FVDiffusion
coeff = ${alpha}
variable = scalar
[]
[scalar_advection]
type = INSFVScalarFieldAdvection
variable = scalar
[]
[]
[FVBCs]
[inlet-u-1]
type = INSFVInletVelocityBC
boundary = 'inlet-1'
variable = superficial_vel_x
function = '0.1'
[]
[inlet-u-2]
type = INSFVInletVelocityBC
boundary = 'inlet-2'
variable = superficial_vel_x
function = '0.2'
[]
[inlet-u-3]
type = INSFVInletVelocityBC
boundary = 'inlet-3'
variable = superficial_vel_x
function = '0.3'
[]
[inlet-v]
type = INSFVInletVelocityBC
boundary = 'inlet-1 inlet-2 inlet-3'
variable = superficial_vel_y
function = 0
[]
[inlet-scalar-1]
type = FVDirichletBC
variable = scalar
boundary = 'inlet-1'
value = 10
[]
[inlet-scalar-2]
type = FVDirichletBC
variable = scalar
boundary = 'inlet-2'
value = 20
[]
[inlet-scalar-3]
type = FVDirichletBC
variable = scalar
boundary = 'inlet-3'
value = 30
[]
[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-scalar]
type = INSFVScalarFieldSeparatorBC
boundary = 'separator-1 separator-2'
variable = scalar
[]
[outlet_p]
type = INSFVOutletPressureBC
boundary = 'right'
variable = pressure
function = 0.4
[]
[]
[FunctorMaterials]
[porosity-1]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '1.0'
block = '1 3'
[]
[porosity-2]
type = ADGenericFunctorMaterial
prop_names = 'porosity'
prop_values = '0.5'
block = '2'
[]
[speed]
type = PINSFVSpeedFunctorMaterial
superficial_vel_x = superficial_vel_x
superficial_vel_y = superficial_vel_y
porosity = porosity
[]
[]
[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_scalar1]
type = SideAverageValue
variable = 'scalar'
boundary = 'outlet-1'
[]
[outlet_scalar2]
type = SideAverageValue
variable = 'scalar'
boundary = 'outlet-2'
[]
[outlet_scalar3]
type = SideAverageValue
variable = 'scalar'
boundary = 'outlet-3'
[]
[]
[Outputs]
csv = true
execute_on = final
[]