mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
BlackoilModelEbos: put jacobi NLDD solve in separate method
increases readability of nonlinearIterationNldd
This commit is contained in:
parent
cc0b994eca
commit
faa4bb25d7
@ -542,20 +542,8 @@ namespace Opm {
|
|||||||
const auto& domain = domains_[domain_index];
|
const auto& domain = domains_[domain_index];
|
||||||
SimulatorReportSingle local_report;
|
SimulatorReportSingle local_report;
|
||||||
if (param_.local_solve_approach_ == "jacobi") {
|
if (param_.local_solve_approach_ == "jacobi") {
|
||||||
auto initial_local_well_primary_vars = wellModel().getPrimaryVarsDomain(domain);
|
solveDomainJacobi(solution, locally_solved, local_report,
|
||||||
auto initial_local_solution = Details::extractVector(solution, domain.cells);
|
iteration, timer, domain);
|
||||||
auto res = solveDomain(domain, timer, iteration);
|
|
||||||
local_report = res.first;
|
|
||||||
if (local_report.converged) {
|
|
||||||
auto local_solution = Details::extractVector(solution, domain.cells);
|
|
||||||
Details::setGlobal(local_solution, domain.cells, locally_solved);
|
|
||||||
Details::setGlobal(initial_local_solution, domain.cells, solution);
|
|
||||||
ebosSimulator_.model().invalidateAndUpdateIntensiveQuantities(/*timeIdx=*/0, domain.view);
|
|
||||||
} else {
|
|
||||||
wellModel().setPrimaryVarsDomain(domain, initial_local_well_primary_vars);
|
|
||||||
Details::setGlobal(initial_local_solution, domain.cells, solution);
|
|
||||||
ebosSimulator_.model().invalidateAndUpdateIntensiveQuantities(/*timeIdx=*/0, domain.view);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
assert(param_.local_solve_approach_ == "gauss-seidel");
|
assert(param_.local_solve_approach_ == "gauss-seidel");
|
||||||
auto initial_local_well_primary_vars = wellModel().getPrimaryVarsDomain(domain);
|
auto initial_local_well_primary_vars = wellModel().getPrimaryVarsDomain(domain);
|
||||||
@ -1846,6 +1834,30 @@ namespace Opm {
|
|||||||
return domain_order;
|
return domain_order;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class GlobalEqVector>
|
||||||
|
void solveDomainJacobi(GlobalEqVector& solution,
|
||||||
|
GlobalEqVector& locally_solved,
|
||||||
|
SimulatorReportSingle& local_report,
|
||||||
|
const int iteration,
|
||||||
|
const SimulatorTimerInterface& timer,
|
||||||
|
const Domain& domain)
|
||||||
|
{
|
||||||
|
auto initial_local_well_primary_vars = wellModel().getPrimaryVarsDomain(domain);
|
||||||
|
auto initial_local_solution = Details::extractVector(solution, domain.cells);
|
||||||
|
auto res = solveDomain(domain, timer, iteration);
|
||||||
|
local_report = res.first;
|
||||||
|
if (local_report.converged) {
|
||||||
|
auto local_solution = Details::extractVector(solution, domain.cells);
|
||||||
|
Details::setGlobal(local_solution, domain.cells, locally_solved);
|
||||||
|
Details::setGlobal(initial_local_solution, domain.cells, solution);
|
||||||
|
ebosSimulator_.model().invalidateAndUpdateIntensiveQuantities(/*timeIdx=*/0, domain.view);
|
||||||
|
} else {
|
||||||
|
wellModel().setPrimaryVarsDomain(domain, initial_local_well_primary_vars);
|
||||||
|
Details::setGlobal(initial_local_solution, domain.cells, solution);
|
||||||
|
ebosSimulator_.model().invalidateAndUpdateIntensiveQuantities(/*timeIdx=*/0, domain.view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::vector<bool> wasSwitched_;
|
std::vector<bool> wasSwitched_;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user