78 PrimaryVariables& nextValue,
79 const PrimaryVariables& currentValue,
80 const EqVector& update,
84 nextValue = currentValue;
88 if (this->numIterations_ > 4)
91 const auto& problem = this->simulator_.problem();
94 const MaterialLawParams& matParams =
95 problem.materialLawParams(globalDofIdx, 0);
97 Opm::ImmiscibleFluidState<Scalar, FluidSystem> fs;
100 Scalar T = problem.temperature(globalDofIdx, 0);
101 fs.setTemperature(T);
109 fs.setSaturation(liquidPhaseIdx, 1.0);
110 fs.setSaturation(gasPhaseIdx, 0.0);
112 MaterialLaw::capillaryPressures(pC, matParams, fs);
117 Scalar pWOld = currentValue[pressureWIdx];
119 std::max(problem.referencePressure(globalDofIdx, 0),
120 pWOld + (pC[gasPhaseIdx] - pC[liquidPhaseIdx]));
125 fs.setPressure(liquidPhaseIdx, pWOld);
126 fs.setPressure(gasPhaseIdx, pNOld);
129 MaterialLaw::saturations(satOld, matParams, fs);
130 satOld[liquidPhaseIdx] = std::max<Scalar>(0.0, satOld[liquidPhaseIdx]);
137 fs.setSaturation(liquidPhaseIdx, satOld[liquidPhaseIdx] - 0.2);
138 fs.setSaturation(gasPhaseIdx, 1.0 - (satOld[liquidPhaseIdx] - 0.2));
139 MaterialLaw::capillaryPressures(pC, matParams, fs);
140 Scalar pwMin = pNOld - (pC[gasPhaseIdx] - pC[liquidPhaseIdx]);
142 fs.setSaturation(liquidPhaseIdx, satOld[liquidPhaseIdx] + 0.2);
143 fs.setSaturation(gasPhaseIdx, 1.0 - (satOld[liquidPhaseIdx] + 0.2));
144 MaterialLaw::capillaryPressures(pC, matParams, fs);
145 Scalar pwMax = pNOld - (pC[gasPhaseIdx] - pC[liquidPhaseIdx]);
151 Scalar pW = nextValue[pressureWIdx];
152 pW = std::max(pwMin, std::min(pW, pwMax));
153 nextValue[pressureWIdx] = pW;