41 _multiply_by_density(this->template getParam<bool>(
"multiply_by_density")),
42 _permeability(this->template getGenericMaterialProperty<RealTensorValue, is_ad>(
43 "PorousFlow_permeability_qp")),
44 _dpermeability_dvar(is_ad ? nullptr
45 : &this->template getMaterialProperty<
std::vector<RealTensorValue>>(
46 "dPorousFlow_permeability_qp_dvar")),
47 _dpermeability_dgradvar(
49 : &this->template getMaterialProperty<
std::vector<
std::vector<RealTensorValue>>>(
50 "dPorousFlow_permeability_qp_dgradvar")),
51 _density(this->template getGenericMaterialProperty<
std::vector<Real>, is_ad>(
52 "PorousFlow_fluid_phase_density_qp")),
53 _ddensity_dvar(is_ad ? nullptr
54 : &this->template getMaterialProperty<
std::vector<
std::vector<Real>>>(
55 "dPorousFlow_fluid_phase_density_qp_dvar")),
56 _viscosity(this->template getGenericMaterialProperty<
std::vector<Real>, is_ad>(
57 "PorousFlow_viscosity_qp")),
58 _dviscosity_dvar(is_ad ? nullptr
59 : &this->template getMaterialProperty<
std::vector<
std::vector<Real>>>(
60 "dPorousFlow_viscosity_qp_dvar")),
61 _pp(this->template getGenericMaterialProperty<
std::vector<Real>, is_ad>(
62 "PorousFlow_porepressure_qp")),
63 _grad_p(this->template getGenericMaterialProperty<
std::vector<RealGradient>, is_ad>(
64 "PorousFlow_grad_porepressure_qp")),
65 _dgrad_p_dgrad_var(is_ad ? nullptr
66 : &this->template getMaterialProperty<
std::vector<
std::vector<Real>>>(
67 "dPorousFlow_grad_porepressure_qp_dgradvar")),
70 : &this->template getMaterialProperty<
std::vector<
std::vector<RealGradient>>>(
71 "dPorousFlow_grad_porepressure_qp_dvar")),
73 _gravity(this->template getParam<RealVectorValue>(
"gravity")),
74 _perm_derivs(_dictator.usePermDerivs())
78 "PorousFlowFullySaturatedDarcyBase should not be used for multi-phase scenarios as it "
79 "does no upwinding and does not include relative-permeability effects");
105 if constexpr (!is_ad)
107 if (_dictator.notPorousFlowVariable(jvar))
110 const unsigned ph = 0;
111 const unsigned pvar = _dictator.porousFlowVariableNum(jvar);
113 const Real mob = mobility();
114 const Real dmob = dmobility(pvar) * _phi[_j][_qp];
116 const RealVectorValue flow =
117 _permeability[_qp] * (_grad_p[_qp][ph] - _density[_qp][ph] * _gravity);
119 RealVectorValue dflow =
120 _permeability[_qp] * (_grad_phi[_j][_qp] * (*_dgrad_p_dgrad_var)[_qp][ph][pvar] -
121 _phi[_j][_qp] * (*_ddensity_dvar)[_qp][ph][pvar] * _gravity);
122 dflow += _permeability[_qp] * ((*_dgrad_p_dvar)[_qp][ph][pvar] * _phi[_j][_qp]);
126 dflow += (*_dpermeability_dvar)[_qp][pvar] * _phi[_j][_qp] *
127 (_grad_p[_qp][ph] - _density[_qp][ph] * _gravity);
129 dflow += (*_dpermeability_dgradvar)[_qp][i][pvar] * _grad_phi[_j][_qp](i) *
130 (_grad_p[_qp][ph] - _density[_qp][ph] * _gravity);
133 return _grad_test[_i][_qp] * (dmob * flow + mob * dflow);
136 libmesh_ignore(jvar);