14#include "libmesh/enum_to_string.h"
24 "List of primary variables that are used in the PorousFlow "
25 "simulation. Jacobian entries involving derivatives wrt these "
26 "variables will be computed. In single-phase models you will just "
27 "have one (eg \'pressure\'), in two-phase models you will have two "
28 "(eg \'p_water p_gas\', or \'p_water s_water\'), etc.");
30 "The number of fluid phases in the simulation");
32 "The number of fluid components in the simulation");
33 params.
addParam<
unsigned int>(
"number_aqueous_equilibrium",
35 "The number of secondary species in the aqueous-equilibrium "
36 "reaction system. (Leave as zero if the simulation does not "
37 "involve chemistry)");
38 params.
addParam<
unsigned int>(
"number_aqueous_kinetic",
40 "The number of secondary species in the aqueous-kinetic reaction "
41 "system involved in precipitation and dissolution. (Leave as zero "
42 "if the simulation does not involve chemistry)");
43 params.
addParam<
unsigned int>(
"aqueous_phase_number",
45 "The fluid phase number of the aqueous phase in which the "
46 "equilibrium and kinetic chemical reactions occur");
48 params.
addParam<SolverSystemName>(
"solver_sys",
"Name of the solver system for the porepressure");
56 _num_variables(coupledComponents(
"porous_flow_vars")),
57 _num_phases(getParam<unsigned
int>(
"number_fluid_phases")),
58 _num_components(getParam<unsigned
int>(
"number_fluid_components")),
59 _num_aqueous_equilibrium(getParam<unsigned
int>(
"number_aqueous_equilibrium")),
60 _num_aqueous_kinetic(getParam<unsigned
int>(
"number_aqueous_kinetic")),
61 _aqueous_phase_number(getParam<unsigned
int>(
"aqueous_phase_number")),
62 _consistent_fe_type(false),
90 mooseError(
"PorousFlowDictator: AuxVariables variables must not be coupled into the Dictator "
91 "for this is against specification #1984. Variable '",
93 "' is either an AuxVariable or from a different nonlinear system.");
97 mooseError(
"PorousflowDictator: The aqueous phase number must be less than the number of fluid "
98 "phases. The Dictator does not appreciate jokes.");
145 mooseError(
"The Dictator proclaims that the moose variable with number ",
147 " is not a PorousFlow variable. Exiting with error code 1984.");
155 mooseError(
"The Dictator proclaims that there is no such PorousFlow variable with number ",
157 ". Exiting with error code 1984.");
205 mooseError(
"Nodal PorousFlow Materials read variables of more than one FE type at the nodes: '",
211 " was already registered by ",
213 ". Every variable read at the nodes must share an FE type, because nodal Materials "
214 "index their properties with a single node counter that must be a valid "
215 "degree-of-freedom index for all of them.");
223 return Utility::enum_to_string<Order>(fe_type.order) +
" " +
Moose::stringify(fe_type.family);
registerMooseObject("PorousFlowApp", PorousFlowDictator)
void ErrorVector unsigned int
const MooseVariableFieldBase * getFieldVar(const std::string &var_name, unsigned int comp) const
VariableName coupledName(const std::string &var_name, unsigned int comp=0) const
virtual unsigned int coupled(const std::string &var_name, unsigned int comp=0) const
virtual const MooseVariableFieldBase & getVariable(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const override
static InputParameters validParams()
void mooseError(Args &&... args) const
const libMesh::FEType & feType() const
virtual bool isFV() const
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
void registerNodalVariable(const VariableName &var_name) const
Register a variable that a nodal Material reads by degree of freedom.
unsigned int numPhases() const
The number of fluid phases.
bool _consistent_fe_type
Whether the porous_flow_vars all have the same fe_type.
std::set< VariableName > _nodal_fe_type_vars
Names of the variables that have registered _nodal_fe_type, used to report a disagreement.
unsigned int numVariables() const
The number of PorousFlow variables.
bool _is_fv
Whether the PorousFlow variables are finite-volume variables.
std::vector< unsigned int > _pf_var_num
_pf_var_num[i] = the porous flow variable corresponding to moose variable i
unsigned int numAqueousEquilibrium() const
The number of aqueous equilibrium secondary species.
unsigned int aqueousPhaseNumber() const
The aqueous phase number.
const unsigned int _num_aqueous_equilibrium
Number of aqueous-equilibrium secondary species.
unsigned int numComponents() const
The number of fluid components.
libMesh::FEType feType() const
The FEType of the first porous_flow_variable.
bool _perm_derivs
Indicates whether the simulation includes derivatives of permeability.
unsigned int porousFlowVariableNum(unsigned int moose_var_num) const
The PorousFlow variable number.
static std::string feTypeName(const libMesh::FEType &fe_type)
A human-readable name for an FE type, eg "FIRST LAGRANGE", for error messages.
libMesh::FEType _fe_type
FE type used by the PorousFlow variables.
const unsigned int _aqueous_phase_number
Aqueous phase number.
unsigned int numAqueousKinetic() const
The number of aqueous kinetic secondary species.
const unsigned int _num_components
Number of fluid components.
bool isPorousFlowVariable(unsigned int moose_var_num) const
Returns true if moose_var_num is a porous flow variable.
const unsigned int _num_phases
Number of fluid phases.
bool notPorousFlowVariable(unsigned int moose_var_num) const
Returns true if moose_var_num is not a porous flow variabe.
bool isFV() const
Whether the PorousFlow variables are finite-volume variables.
bool consistentFEType() const
Whether the porous_flow_vars all have the same FEType or if no porous_flow_vars were provided.
unsigned int mooseVariableNum(unsigned int porous_flow_var_num) const
The Moose variable number.
std::vector< unsigned int > _moose_var_num
_moose_var_num[i] = the moose variable number corresponding to porous flow variable i
const unsigned int _num_aqueous_kinetic
Number of aqeuous-kinetic secondary species that are involved in mineralisation.
std::optional< libMesh::FEType > _nodal_fe_type
FE type shared by the variables that nodal Materials read by DOF; see registerNodalVariable.
PorousFlowDictator(const InputParameters ¶meters)
static InputParameters validParams()
const unsigned int _num_variables
Number of PorousFlow variables.
virtual unsigned int nVariables() const
FEProblemBase & _fe_problem
std::string stringify(const T &t)