- PorousFlowDictatorThe PorousFlowDictator UserObject
C++ Type:UserObjectName
Controllable:No
Description:The PorousFlowDictator UserObject
- boundaryThe list of boundary IDs from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundary IDs from the mesh where this object applies
- gravityGravitational acceleration vector (m/s^2), e.g. '0 0 -9.81'. The elevation of the boundary cell is computed as the component of the cell-centroid position vector in the direction opposite to gravity.
C++ Type:libMesh::VectorValue<Real>
Unit:(no unit assumed)
Controllable:No
Description:Gravitational acceleration vector (m/s^2), e.g. '0 0 -9.81'. The elevation of the boundary cell is computed as the component of the cell-centroid position vector in the direction opposite to gravity.
- variableThe name of the variable that this boundary condition applies to
C++ Type:NonlinearVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this boundary condition applies to
FVPorousFlowAquiferBC
Applies a Robin (aquifer) boundary condition: flux = conductance * (P_model - P_aquifer(z)), where P_aquifer is the far-field aquifer pressure. Using aquifer_head automatically yields zero flux on any hydrostatic boundary whose model head equals the aquifer head, even when the boundary has vertical extent. FV analogue of PorousFlowAquiferBC.
FVPorousFlowAquiferBC is the finite-volume analogue of PorousFlowAquiferBC. It applies a Robin (Cauchy) boundary condition coupling the model boundary to a far-field aquifer: where is the conductance (kg.m.Pa.s), is the pore pressure of the boundary cell, is the mass fraction of the fluid component in the phase, and is the phase relative permeability. A positive means fluid leaves the domain.
The elevation is that of the boundary-cell centroid (not the face centroid), computed from the user-supplied gravity vector as . This is deliberate: the FV pore pressure is a cell-centred quantity, so evaluating the aquifer pressure at the cell-centroid elevation is what makes the flux exactly zero in hydrostatic equilibrium, on a boundary of any orientation.
Using the face centroid instead would offset from by and so drive a spurious flux through an equilibrated boundary. That offset vanishes only when the two centroids sit at the same elevation. For axis-aligned cells that is the case on a vertical boundary (face normal perpendicular to gravity), but not otherwise: on a horizontal boundary, such as the top or bottom of the domain, the face centroid sits half a cell height above or below the cell centroid, and on slanted or distorted cells the offset takes some intermediate value. All the other quantities entering the flux (, , , and the permeability) are likewise boundary-cell values, so the boundary condition is evaluated consistently at the cell centroid.
The two reference-pressure formulations and the conductance treatment are identical to PorousFlowAquiferBC: exactly one of aquifer_head (with an explicit aquifer_conductance) or aquifer_pressure_at_datum (with aquifer_distance, and optionally aquifer_permeability to override the boundary-cell permeability) must be supplied.
Two differences from the FE object:
Following the convention of the other FV PorousFlow objects, the flux is always multiplied by the mass fraction and relative permeability of the boundary cell (in the FE object these are optional flags inherited from
PorousFlowSink). For a single-phase, single-component model with the two objects apply the same flux.Derivatives are computed by automatic differentiation.
Comparison with FVPorousFlowAdvectiveFluxBC
FVPorousFlowAdvectiveFluxBC imposes a fixed scalar pressure at the boundary face via a flux-consistent Darcy expression; its effective conductance is the boundary-cell mobility divided by the cell-to-face distance, which is a mesh-dependent quantity that tends to a Dirichlet condition on refinement. FVPorousFlowAquiferBC instead has a physical, mesh-independent conductance (spanning the full Dirichlet-to-Neumann range via the aquifer distance ) and an elevation-corrected reference pressure, so it remains correct on boundaries with vertical extent.
See boundary conditions and PorousFlowAquiferBC for the formulation details and the effect of the aquifer distance.
Input Parameters
- aquifer_conductanceConductance per unit boundary area (kg/(m^2*Pa*s)). The mass flux leaving the domain is conductance * (P_model - P_aquifer). Required when using the aquifer_head formulation. Can be estimated as rho * k / (mu * L) where k is aquifer permeability (m^2), mu is fluid viscosity (Pa.s), and L is the distance to the far-field (m).
C++ Type:Real
Unit:(no unit assumed)
Controllable:No
Description:Conductance per unit boundary area (kg/(m^2*Pa*s)). The mass flux leaving the domain is conductance * (P_model - P_aquifer). Required when using the aquifer_head formulation. Can be estimated as rho * k / (mu * L) where k is aquifer permeability (m^2), mu is fluid viscosity (Pa.s), and L is the distance to the far-field (m).
- aquifer_distanceDistance from the boundary to the far-field aquifer (m). Required when using the aquifer_pressure_at_datum formulation. The conductance is computed internally as rho * k_nn / (mu * aquifer_distance), where k_nn is the permeability projected onto the boundary normal, rho is the fluid density, and mu is the fluid viscosity in the boundary cell.
C++ Type:Real
Unit:(no unit assumed)
Range:aquifer_distance > 0
Controllable:No
Description:Distance from the boundary to the far-field aquifer (m). Required when using the aquifer_pressure_at_datum formulation. The conductance is computed internally as rho * k_nn / (mu * aquifer_distance), where k_nn is the permeability projected onto the boundary normal, rho is the fluid density, and mu is the fluid viscosity in the boundary cell.
- aquifer_headFar-field hydraulic head of the aquifer (m above model datum). P_aq(z) = rho * |g| * (aquifer_head - z), where rho is the fluid density in the boundary cell. Mutually exclusive with aquifer_pressure_at_datum.
C++ Type:Real
Unit:(no unit assumed)
Controllable:No
Description:Far-field hydraulic head of the aquifer (m above model datum). P_aq(z) = rho * |g| * (aquifer_head - z), where rho is the fluid density in the boundary cell. Mutually exclusive with aquifer_pressure_at_datum.
- aquifer_permeabilityPermeability of the material between the boundary and the far-field aquifer (m^2), used as k_nn in the conductance formula of the aquifer_pressure_at_datum formulation. If not supplied, the boundary permeability projected onto the boundary normal is used, which is appropriate when the aquifer is a continuation of the boundary material.
C++ Type:Real
Unit:(no unit assumed)
Range:aquifer_permeability > 0
Controllable:No
Description:Permeability of the material between the boundary and the far-field aquifer (m^2), used as k_nn in the conductance formula of the aquifer_pressure_at_datum formulation. If not supplied, the boundary permeability projected onto the boundary normal is used, which is appropriate when the aquifer is a continuation of the boundary material.
- aquifer_pressure_at_datumFar-field aquifer pressure at datum_elevation (Pa). P_aq(z) = aquifer_pressure_at_datum + rho * |g| * (datum_elevation - z), where rho is the fluid density in the boundary cell. Mutually exclusive with aquifer_head.
C++ Type:Real
Unit:(no unit assumed)
Controllable:No
Description:Far-field aquifer pressure at datum_elevation (Pa). P_aq(z) = aquifer_pressure_at_datum + rho * |g| * (datum_elevation - z), where rho is the fluid density in the boundary cell. Mutually exclusive with aquifer_head.
- datum_elevation0Elevation of the reference point for aquifer_pressure_at_datum (m).
Default:0
C++ Type:Real
Unit:(no unit assumed)
Controllable:No
Description:Elevation of the reference point for aquifer_pressure_at_datum (m).
- displacementsThe displacements
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The displacements
- fluid_component0The fluid component for this BC
Default:0
C++ Type:unsigned int
Controllable:No
Description:The fluid component for this BC
- phase0The fluid phase for this BC
Default:0
C++ Type:unsigned int
Controllable:No
Description:The fluid phase for this BC
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_onlyFalseWhether this object is only doing assembly to matrices (no vectors)
Default:False
C++ Type:bool
Controllable:No
Description:Whether this object is only doing assembly to matrices (no vectors)
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Controllable:No
Description:The tag for the vectors this Kernel should fill
Contribution To Tagged Field Data Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- search_methodnearest_node_connected_sidesChoice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).
Default:nearest_node_connected_sides
C++ Type:MooseEnum
Controllable:No
Description:Choice of search algorithm. All options begin by finding the nearest node in the primary boundary to a query point in the secondary boundary. In the default nearest_node_connected_sides algorithm, primary boundary elements are searched iff that nearest node is one of their nodes. This is fast to determine via a pregenerated node-to-elem map and is robust on conforming meshes. In the optional all_proximate_sides algorithm, primary boundary elements are searched iff they touch that nearest node, even if they are not topologically connected to it. This is more CPU-intensive but is necessary for robustness on any boundary surfaces which has disconnections (such as Flex IGA meshes) or non-conformity (such as hanging nodes in adaptively h-refined meshes).
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.