21 "fluid_component", 0,
"The index corresponding to the fluid component for this kernel");
23 "PorousFlowDictator",
"The UserObject that holds the list of PorousFlow variable names");
25 "disp_long",
"Vector of longitudinal dispersion coefficients for each phase");
27 "disp_trans",
"Vector of transverse dispersion coefficients for each phase");
29 "Gravitational acceleration vector downwards (m/s^2)");
31 "Dispersive and diffusive flux of the component given by fluid_component in all phases");
38 _fluid_density_qp(getMaterialProperty<
std::vector<
Real>>(
"PorousFlow_fluid_phase_density_qp")),
39 _dfluid_density_qp_dvar(getMaterialProperty<
std::vector<
std::vector<
Real>>>(
40 "dPorousFlow_fluid_phase_density_qp_dvar")),
42 "PorousFlow_grad_mass_frac_qp")),
43 _dmass_frac_dvar(getMaterialProperty<
std::vector<
std::vector<
std::vector<
Real>>>>(
44 "dPorousFlow_mass_frac_qp_dvar")),
45 _porosity_qp(getMaterialProperty<
Real>(
"PorousFlow_porosity_qp")),
46 _dporosity_qp_dvar(getMaterialProperty<
std::vector<
Real>>(
"dPorousFlow_porosity_qp_dvar")),
47 _tortuosity(getMaterialProperty<
std::vector<
Real>>(
"PorousFlow_tortuosity_qp")),
49 getMaterialProperty<
std::vector<
std::vector<
Real>>>(
"dPorousFlow_tortuosity_qp_dvar")),
51 getMaterialProperty<
std::vector<
std::vector<
Real>>>(
"PorousFlow_diffusion_coeff_qp")),
52 _ddiffusion_coeff_dvar(getMaterialProperty<
std::vector<
std::vector<
std::vector<
Real>>>>(
53 "dPorousFlow_diffusion_coeff_qp_dvar")),
55 _fluid_component(getParam<unsigned
int>(
"fluid_component")),
56 _num_phases(_dictator.numPhases()),
58 _relative_permeability(
59 getMaterialProperty<
std::vector<
Real>>(
"PorousFlow_relative_permeability_qp")),
60 _drelative_permeability_dvar(getMaterialProperty<
std::vector<
std::vector<
Real>>>(
61 "dPorousFlow_relative_permeability_qp_dvar")),
62 _fluid_viscosity(getMaterialProperty<
std::vector<
Real>>(
"PorousFlow_viscosity_qp")),
63 _dfluid_viscosity_dvar(
64 getMaterialProperty<
std::vector<
std::vector<
Real>>>(
"dPorousFlow_viscosity_qp_dvar")),
65 _permeability(getMaterialProperty<
RealTensorValue>(
"PorousFlow_permeability_qp")),
67 getMaterialProperty<
std::vector<
RealTensorValue>>(
"dPorousFlow_permeability_qp_dvar")),
69 "dPorousFlow_permeability_qp_dgradvar")),
70 _grad_p(getMaterialProperty<
std::vector<
RealGradient>>(
"PorousFlow_grad_porepressure_qp")),
71 _dgrad_p_dgrad_var(getMaterialProperty<
std::vector<
std::vector<
Real>>>(
72 "dPorousFlow_grad_porepressure_qp_dgradvar")),
74 "dPorousFlow_grad_porepressure_qp_dvar")),
76 _disp_long(getParam<
std::vector<
Real>>(
"disp_long")),
77 _disp_trans(getParam<
std::vector<
Real>>(
"disp_trans")),
78 _perm_derivs(_dictator.usePermDerivs())
83 "The Dictator proclaims that the maximum fluid component index in this simulation is ",
85 " whereas you have used ",
87 ". Remember that indexing starts at 0. The Dictator does not take such mistakes lightly.");
93 "The number of longitudinal dispersion coefficients is not equal to the number of phases");
97 "The number of transverse dispersion coefficients disp_trans is not equal to the " 123 if (velocity_abs > 0.0)
178 if (velocity_abs > 0.0)
210 Real dvelocity_abs = 0.0;
211 if (velocity_abs > 0.0)
212 dvelocity_abs =
velocity * dvelocity / velocity_abs;
226 if (velocity_abs > 0.0)
RankFourTensorTempl< Real > outerProduct(const RankTwoTensorTempl< Real > &b) const
registerMooseObject("PorousFlowApp", PorousFlowDispersiveFlux)
const MaterialProperty< std::vector< std::vector< Real > > > & _dtortuosity_dvar
Derivative of tortuosity wrt PorousFlow variables.
const RankTwoTensor _identity_tensor
Identity tensor.
static InputParameters validParams()
bool notPorousFlowVariable(unsigned int moose_var_num) const
Returns true if moose_var_num is not a porous flow variabe.
const MaterialProperty< std::vector< RealGradient > > & _grad_p
Gradient of the pore pressure in each phase.
unsigned int number() const
virtual Real computeQpJacobian() override
const VariablePhiGradient & _grad_phi
const MaterialProperty< std::vector< Real > > & _tortuosity
Tortuosity tau_0 * tau_{alpha} for fluid phase alpha.
const MaterialProperty< std::vector< RealTensorValue > > & _dpermeability_dvar
Derivative of permeability wrt PorousFlow variables.
const MaterialProperty< std::vector< std::vector< RealGradient > > > & _dgrad_p_dvar
Derivative of Grad porepressure in each phase wrt PorousFlow variables.
unsigned int numComponents() const
The number of fluid components.
const RealVectorValue _gravity
Gravitational acceleration.
const MaterialProperty< std::vector< Real > > & _fluid_density_qp
Fluid density for each phase (at the qp)
const MaterialProperty< std::vector< std::vector< Real > > > & _diffusion_coeff
Diffusion coefficients of component k in fluid phase alpha.
static constexpr std::size_t dim
const MaterialProperty< std::vector< std::vector< RealGradient > > > & _grad_mass_frac
Gradient of mass fraction of each component in each phase.
const MaterialProperty< std::vector< Real > > & _fluid_viscosity
Viscosity of each component in each phase.
const MaterialProperty< std::vector< std::vector< RealTensorValue > > > & _dpermeability_dgradvar
d(permeabiity)/d(grad(PorousFlow variable))
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_viscosity_dvar
Derivative of viscosity wrt PorousFlow variables.
const unsigned int _num_phases
The number of fluid phases.
virtual Real computeQpResidual() override
static RankTwoTensorTempl< Real > selfOuterProduct(const libMesh::TypeVector< Real > &)
const MaterialProperty< std::vector< Real > > & _dporosity_qp_dvar
Derivative of porosity wrt PorousFlow variables (at the qps)
TensorValue< Real > RealTensorValue
Real computeQpJac(unsigned int jvar) const
Derivative of the residual with respect to the PorousFLow Variable with variable number jvar...
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.
PorousFlowDispersiveFlux(const InputParameters ¶meters)
void paramError(const std::string ¶m, Args... args) const
const MaterialProperty< RealTensorValue > & _permeability
Permeability of porous material.
const std::vector< Real > _disp_long
Longitudinal dispersivity for each phase.
const MaterialProperty< std::vector< std::vector< Real > > > & _dfluid_density_qp_dvar
Derivative of the fluid density for each phase wrt PorousFlow variables (at the qp) ...
const MaterialProperty< std::vector< Real > > & _relative_permeability
Relative permeability of each phase.
static InputParameters validParams()
Dispersive flux of component k in fluid phase alpha.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
This holds maps between the nonlinear variables used in a PorousFlow simulation and the variable numb...
const MaterialProperty< std::vector< std::vector< Real > > > & _drelative_permeability_dvar
Derivative of relative permeability wrt PorousFlow variables.
const VariableTestGradient & _grad_test
IntRange< T > make_range(T beg, T end)
const bool _perm_derivs
Flag to check whether permeabiity derivatives are non-zero.
const MaterialProperty< std::vector< std::vector< std::vector< Real > > > > & _ddiffusion_coeff_dvar
Derivative of the diffusion coefficients wrt PorousFlow variables.
static const std::string velocity
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
unsigned int porousFlowVariableNum(unsigned int moose_var_num) const
The PorousFlow variable number.
const unsigned int _fluid_component
Index of the fluid component that this kernel acts on.
const MaterialProperty< std::vector< std::vector< std::vector< Real > > > > & _dmass_frac_dvar
Derivative of mass fraction wrt PorousFlow variables.
const MaterialProperty< std::vector< std::vector< Real > > > & _dgrad_p_dgrad_var
Derivative of Grad porepressure in each phase wrt grad(PorousFlow variables)
const VariablePhiValue & _phi
MooseUnits pow(const MooseUnits &, int)
void ErrorVector unsigned int
const MaterialProperty< Real > & _porosity_qp
Porosity at the qps.
const std::vector< Real > _disp_trans
Transverse dispersivity for each phase.