flow: call getConvergence() on the raw reservoir residual

i.e., the residual without the Schur complement for the wells being
applied. This hopefully fixes the issue pointed out by
[at]totto82.
This commit is contained in:
Andreas Lauser 2019-02-25 11:24:30 +01:00
parent f5e7ca9bb3
commit 46e41228b5

View File

@ -246,7 +246,7 @@ namespace Opm {
report.total_linearizations = 1; report.total_linearizations = 1;
try { try {
report += assemble(timer, iteration); report += assembleReservoir(timer, iteration);
report.assemble_time += perfTimer.stop(); report.assemble_time += perfTimer.stop();
} }
catch (...) { catch (...) {
@ -293,6 +293,11 @@ namespace Opm {
const int nc = UgGridHelpers::numCells(grid_); const int nc = UgGridHelpers::numCells(grid_);
BVector x(nc); BVector x(nc);
// apply the Schur compliment of the well model to the reservoir linearized
// equations
wellModel().linearize(ebosSimulator().model().linearizer().jacobian(),
ebosSimulator().model().linearizer().residual());
try { try {
solveJacobianSystem(x); solveJacobianSystem(x);
report.linear_solve_time += perfTimer.stop(); report.linear_solve_time += perfTimer.stop();
@ -360,13 +365,13 @@ namespace Opm {
/// \param[in] reservoir_state reservoir state variables /// \param[in] reservoir_state reservoir state variables
/// \param[in, out] well_state well state variables /// \param[in, out] well_state well state variables
/// \param[in] initial_assembly pass true if this is the first call to assemble() in this timestep /// \param[in] initial_assembly pass true if this is the first call to assemble() in this timestep
SimulatorReport assemble(const SimulatorTimerInterface& timer, SimulatorReport assembleReservoir(const SimulatorTimerInterface& timer,
const int iterationIdx) const int iterationIdx)
{ {
// -------- Mass balance equations -------- // -------- Mass balance equations --------
ebosSimulator_.model().newtonMethod().setIterationIndex(iterationIdx); ebosSimulator_.model().newtonMethod().setIterationIndex(iterationIdx);
ebosSimulator_.problem().beginIteration(); ebosSimulator_.problem().beginIteration();
ebosSimulator_.model().linearizer().linearize(); ebosSimulator_.model().linearizer().linearizeDomain();
ebosSimulator_.problem().endIteration(); ebosSimulator_.problem().endIteration();
return wellModel().lastReport(); return wellModel().lastReport();