19 "Variable that represents log(mass-density) of the single phase");
23 "For this class, the capillary function is assumed to be saturation = " 24 "exp(-(al*porepressure)^2) for porepressure<0.");
26 "density_P0",
"density_P0>0",
"The density of the fluid phase at zero porepressure");
28 "bulk_modulus",
"bulk_modulus>0",
"The constant bulk modulus of the fluid phase");
30 "log(mass-density) is the primary variable. calculates the 1 " 31 "porepressure and the 1 saturation in a 1-phase situation, " 32 "and derivatives of these with respect to the PorousFlowVariables. A " 33 "gaussian capillary function is assumed");
40 _al(getParam<
Real>(
"al")),
42 _logdens0(
std::
log(getParam<
Real>(
"density_P0"))),
43 _bulk(getParam<
Real>(
"bulk_modulus")),
44 _recip_bulk(1.0 / _al / _bulk),
45 _recip_bulk2(
std::
pow(_recip_bulk, 2)),
47 _md_var(_nodal_material ? coupledDofValues(
"mass_density") : coupledValue(
"mass_density")),
48 _gradmd_qp_var(coupledGradient(
"mass_density")),
49 _md_varnum(coupled(
"mass_density")),
50 _pvar(_dictator.isPorousFlowVariable(_md_varnum) ? _dictator.porousFlowVariableNum(_md_varnum)
54 mooseError(
"The Dictator proclaims that the number of phases is ",
55 _dictator.numPhases(),
56 " whereas PorousFlow1PhaseMD_Gaussian can only be used for 1-phase simulations. Be " 57 "aware that the Dictator has noted your mistake.");
80 (*_grads_qp)[_qp][0] = 0.0;
84 (*_gradp_qp)[_qp][0] =
86 (*_grads_qp)[_qp][0] =
91 if (_dictator.notPorousFlowVariable(
_md_varnum))
98 (*_dsaturation_dvar)[_qp][0][
_pvar] = 0.0;
105 (*_dsaturation_dvar)[_qp][0][
_pvar] =
106 -2.0 *
_al2 * pp * sat * (*_dporepressure_dvar)[_qp][0][
_pvar];
109 if (!_nodal_material)
115 (*_dgradp_qp_dv)[_qp][0][
_pvar] = 0.0;
116 (*_dgrads_qp_dgradv)[_qp][0][
_pvar] = 0.0;
117 (*_dgrads_qp_dv)[_qp][0][
_pvar] = 0.0;
124 (*_dporepressure_dvar)[_qp][0][
_pvar] /
127 (*_dgrads_qp_dgradv)[_qp][0][
_pvar] =
128 -2.0 *
_al2 * pp * sat * (*_dgradp_qp_dgradv)[_qp][0][
_pvar];
129 (*_dgrads_qp_dv)[_qp][0][
_pvar] =
130 -2.0 *
_al2 * (*_dporepressure_dvar)[_qp][0][
_pvar] * sat * (*_gradp_qp)[_qp][0];
131 (*_dgrads_qp_dv)[_qp][0][
_pvar] +=
132 -2.0 *
_al2 * pp * (*_dsaturation_dvar)[_qp][0][
_pvar] * (*_gradp_qp)[_qp][0];
133 (*_dgrads_qp_dv)[_qp][0][
_pvar] += -2.0 *
_al2 * pp * sat * (*_dgradp_qp_dv)[_qp][0][
_pvar];
const unsigned int _md_varnum
Moose variable number of the mass-density.
static InputParameters validParams()
virtual void computeQpProperties() override
virtual void computeQpProperties() override
const Real _al
Gaussian parameter: saturation = exp(-(al*p)^2)
const Real _recip_bulk
1/_bulk/_al
const Real _logdens0
Fluid density = _dens0*exp(P/_bulk)
const unsigned int _pvar
PorousFlow variable number of the mass-density.
Material designed to calculate fluid-phase porepressure and saturation for the single-phase situation...
void mooseError(Args &&... args)
GenericMaterialProperty< std::vector< Real >, is_ad > & _porepressure
Computed nodal or quadpoint values of porepressure of the phases.
static InputParameters validParams()
const Real _recip_bulk2
(1/_bulk)^2
const Real _al2
_al2 = al*al
Base class for thermophysical variable materials, which assemble materials for primary variables such...
virtual void initQpStatefulProperties() override
PorousFlow1PhaseMD_Gaussian(const InputParameters ¶meters)
virtual void initQpStatefulProperties() override
const VariableValue & _md_var
Nodal or quadpoint value of mass-density of the fluid phase.
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const unsigned int _num_phases
Number of phases.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const Real _bulk
Fluid density = _dens0*exp(P/_bulk)
GenericMaterialProperty< std::vector< Real >, is_ad > & _saturation
Computed nodal or qp saturation of the phases.
const VariableGradient & _gradmd_qp_var
Gradient(_mass-density at quadpoints)
registerMooseObject("PorousFlowApp", PorousFlow1PhaseMD_Gaussian)
MooseUnits pow(const MooseUnits &, int)