Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists_files.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,7 @@ list (APPEND TEST_SOURCE_FILES
tests/test_glift1.cpp
tests/test_graphcoloring.cpp
tests/test_GroupState.cpp
tests/test_impesweights.cpp
tests/test_injection_topup_phase_validation.cpp
tests/test_interregflows.cpp
tests/test_invert.cpp
Expand Down
2 changes: 1 addition & 1 deletion doc/man1/flow.1
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ Injection multiplier oscillation threshold (used for multiplier dampening). Defa
Set compatibility mode for the SKIP100/SKIP300 keywords. Options are 100 (skip SKIP100..ENDSKIP, keep SKIP300..ENDSKIP) [default], 300 (skip SKIP300..ENDSKIP, keep SKIP100..ENDSKIP) and all (skip both SKIP100..ENDSKIP and SKIP300..ENDSKIP) . Default: "100"
.TP
\fB\-\-linear\-solver\fR=\fI\,STRING\/\fR
Configuration of solver. Valid options are: cprw (default), ilu0, dilu, cpr (an alias for cprw), cpr_quasiimpes, cpr_trueimpes, cpr_trueimpesanalytic, amg or hybrid (experimental). Alternatively, you can request a configuration to be read from a JSON file by giving the filename here, ending with '.json.'. Default: "cprw"
Configuration of solver. Valid options are: cprw (default), ilu0, dilu, cpr (an alias for cprw), cpr_quasiimpes, cpr_trueimpes, cpr_trueimpesanalytic, cpr_coatsblackoil, cpr_coatscompositional, amg or hybrid (experimental). Alternatively, you can request a configuration to be read from a JSON file by giving the filename here, ending with '.json.'. Default: "cprw"
.TP
\fB\-\-linear\-solver\-ignore\-convergence\-failure\fR=\fI\,BOOLEAN\/\fR
Continue with the simulation like nothing happened after the linear solver did not converge. Default: false
Expand Down
2 changes: 1 addition & 1 deletion opm/simulators/linalg/FlowLinearSolverParameters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ void FlowLinearSolverParameters::registerParameters()
Parameters::Register<Parameters::LinearSolver>
("Configuration of solver. Valid options are: cprw (default), "
"ilu0, dilu, cpr (an alias for cprw), cpr_quasiimpes, "
"cpr_trueimpes, cpr_trueimpesanalytic, amg or hybrid (experimental). "
"cpr_trueimpes, cpr_trueimpesanalytic, cpr_coatsblackoil, cpr_coatscompositional, amg or hybrid (experimental). "
"Alternatively, you can request a configuration to be read from a "
"JSON file by giving the filename here, ending with '.json'");
Parameters::Register<Parameters::NlddLocalLinearSolver>
Expand Down
40 changes: 39 additions & 1 deletion opm/simulators/linalg/ISTLSolver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -632,11 +632,49 @@ std::unique_ptr<Matrix> blockJacobiAdjacency(const Grid& grid,
);
return weights;
};
} else if (weightsType == "coatsblackoil") {
// Coats (1980) pressure-equation weights for the blackoil model.
// Extends the analytic formula to include vaporized water (Rvw)
// and dissolved gas in water (Rsw) cross-terms.
weightsCalculator =
[this, pressIndex, enableThreadParallel]
{
Vector weights(rhs_->size());
ElementContext elemCtx(simulator_);
Amg::getCoatsWeightsBlackoil(pressIndex,
weights,
elemCtx,
simulator_.model(),
*element_chunks_,
enableThreadParallel
);
return weights;
};
} else if (weightsType == "coatscompositional") {
// Coats (1980) pressure-equation weights for the compositional
// (ptflash) model. Uses saturation-weighted specific volumes as
// weights so that the weighted sum of component mass balances
// yields the total pore-volume (volumetric) balance.
weightsCalculator =
[this, pressIndex, enableThreadParallel]
{
Vector weights(rhs_->size());
ElementContext elemCtx(simulator_);
Amg::getCoatsWeightsCompositional(pressIndex,
weights,
elemCtx,
simulator_.model(),
*element_chunks_,
enableThreadParallel
);
return weights;
};
Comment on lines +635 to +671
} else {
OPM_THROW(std::invalid_argument,
"Weights type " + weightsType +
"not implemented for cpr."
" Please use quasiimpes, trueimpes or trueimpesanalytic.");
" Please use quasiimpes, trueimpes, trueimpesanalytic,"
" coatsblackoil or coatscompositional.");
}
}
return weightsCalculator;
Expand Down
Loading