36 _phase0_porepressure(_nodal_material
37 ? this->template coupledGenericDofValue<is_ad>(
"phase0_porepressure")
38 : this->template coupledGenericValue<is_ad>(
"phase0_porepressure")),
39 _phase0_gradp_qp(this->template coupledGenericGradient<is_ad>(
"phase0_porepressure")),
40 _phase0_porepressure_varnum(coupled(
"phase0_porepressure")),
41 _pvar(_dictator.isPorousFlowVariable(_phase0_porepressure_varnum)
42 ? _dictator.porousFlowVariableNum(_phase0_porepressure_varnum)
45 _phase1_saturation(_nodal_material
46 ? this->template coupledGenericDofValue<is_ad>(
"phase1_saturation")
47 : this->template coupledGenericValue<is_ad>(
"phase1_saturation")),
48 _phase1_grads_qp(this->template coupledGenericGradient<is_ad>(
"phase1_saturation")),
49 _phase1_saturation_varnum(coupled(
"phase1_saturation")),
50 _svar(_dictator.isPorousFlowVariable(_phase1_saturation_varnum)
51 ? _dictator.porousFlowVariableNum(_phase1_saturation_varnum)
58 if (this->_nodal_material)
59 this->checkNodalVariables({
"phase0_porepressure",
"phase1_saturation"});
60 if (_dictator.numPhases() != 2)
61 mooseError(
"The Dictator proclaims that the number of phases is ",
62 _dictator.numPhases(),
63 " whereas PorousFlow2PhasePS can only be used for 2-phase simulation. Be aware "
64 "that the Dictator has noted your mistake.");
83 const auto dpc = _pc_uo.dCapillaryPressure(1.0 - _phase1_saturation[_qp]);
87 (*_grads_qp)[_qp][0] = -_phase1_grads_qp[_qp];
88 (*_grads_qp)[_qp][1] = _phase1_grads_qp[_qp];
89 (*_gradp_qp)[_qp][0] = _phase0_gradp_qp[_qp];
90 (*_gradp_qp)[_qp][1] = _phase0_gradp_qp[_qp] - dpc * (*_grads_qp)[_qp][1];
96 if (_dictator.isPorousFlowVariable(_phase0_porepressure_varnum))
99 for (
unsigned phase = 0; phase < _num_phases; ++phase)
101 (*_dporepressure_dvar)[_qp][phase][_pvar] = 1.0;
102 if (!_nodal_material)
103 (*_dgradp_qp_dgradv)[_qp][phase][_pvar] = 1.0;
108 if (_dictator.isPorousFlowVariable(_phase1_saturation_varnum))
112 (*_dsaturation_dvar)[_qp][0][_svar] = -1.0;
113 (*_dsaturation_dvar)[_qp][1][_svar] = 1.0;
114 (*_dporepressure_dvar)[_qp][1][_svar] = -dpc;
116 if (!_nodal_material)
118 (*_dgrads_qp_dgradv)[_qp][0][_svar] = -1.0;
119 (*_dgrads_qp_dgradv)[_qp][1][_svar] = 1.0;
121 const auto d2pc_qp = _pc_uo.d2CapillaryPressure(1.0 - _phase1_saturation[_qp]);
123 (*_dgradp_qp_dv)[_qp][1][_svar] = d2pc_qp * (*_grads_qp)[_qp][1];
124 (*_dgradp_qp_dgradv)[_qp][1][_svar] = -dpc;