My Project
Loading...
Searching...
No Matches
Opm::ISTLSolver< TypeTag > Class Template Reference

This class solves the fully implicit black-oil system by solving the reduced system (after eliminating well variables) as a block-structured matrix (one block for all cell variables) for a fixed number of cell variables np . More...

Inheritance diagram for Opm::ISTLSolver< TypeTag >:
Opm::ISTLSolverBda< TypeTag >

Public Types

using AssembledLinearOperatorType = Dune::AssembledLinearOperator< Matrix, Vector, Vector >
 

Public Member Functions

 ISTLSolver (const Simulator &simulator, const FlowLinearSolverParameters &parameters, bool forceSerial=false)
 Construct a system solver.
 
 ISTLSolver (const Simulator &simulator)
 Construct a system solver.
 
void initialize ()
 
void eraseMatrix ()
 
void setActiveSolver (const int num)
 
int numAvailableSolvers ()
 
void initPrepare (const Matrix &M, Vector &b)
 
void prepare (const SparseMatrixAdapter &M, Vector &b)
 
void prepare (const Matrix &M, Vector &b)
 
void setResidual (Vector &)
 
void getResidual (Vector &b) const
 
void setMatrix (const SparseMatrixAdapter &)
 
int getSolveCount () const
 
void resetSolveCount ()
 
bool solve (Vector &x)
 
int iterations () const
 Solve the system of linear equations Ax = b, with A being the combined derivative matrix of the residual and b being the residual itself.
 
const std::any & parallelInformation () const
 
const CommunicationType * comm () const
 
void setDomainIndex (const int index)
 
bool isNlddLocalSolver () const
 

Static Public Member Functions

static void registerParameters ()
 

Protected Types

enum  { enableMICP = getPropValue<TypeTag, Properties::EnableMICP>() }
 
enum  { enablePolymerMolarWeight = getPropValue<TypeTag, Properties::EnablePolymerMW>() }
 
using GridView = GetPropType< TypeTag, Properties::GridView >
 
using Scalar = GetPropType< TypeTag, Properties::Scalar >
 
using SparseMatrixAdapter = GetPropType< TypeTag, Properties::SparseMatrixAdapter >
 
using Vector = GetPropType< TypeTag, Properties::GlobalEqVector >
 
using Indices = GetPropType< TypeTag, Properties::Indices >
 
using WellModel = GetPropType< TypeTag, Properties::WellModel >
 
using Simulator = GetPropType< TypeTag, Properties::Simulator >
 
using Matrix = typename SparseMatrixAdapter::IstlMatrix
 
using ThreadManager = GetPropType< TypeTag, Properties::ThreadManager >
 
using ElementContext = GetPropType< TypeTag, Properties::ElementContext >
 
using AbstractSolverType = Dune::InverseOperator< Vector, Vector >
 
using AbstractOperatorType = Dune::AssembledLinearOperator< Matrix, Vector, Vector >
 
using AbstractPreconditionerType = Dune::PreconditionerWithUpdate< Vector, Vector >
 
using WellModelOperator = WellModelAsLinearOperator< WellModel, Vector, Vector >
 
using ElementMapper = GetPropType< TypeTag, Properties::ElementMapper >
 
using CommunicationType = Dune::Communication< int >
 

Protected Member Functions

void checkConvergence (const Dune::InverseOperatorResult &result) const
 
bool isParallel () const
 
void prepareFlexibleSolver ()
 
bool shouldCreateSolver () const
 Return true if we should (re)create the whole solver, instead of just calling update() on the preconditioner.
 
std::function< Vector()> getWeightsCalculator (const PropertyTree &prm, const Matrix &matrix, std::size_t pressIndex) const
 
Matrix & getMatrix ()
 
const Matrix & getMatrix () const
 

Protected Attributes

const Simulator & simulator_
 
int iterations_
 
int solveCount_
 
bool converged_
 
std::any parallelInformation_
 
Matrix * matrix_
 
Vector * rhs_
 
int activeSolverNum_ = 0
 
std::vector< detail::FlexibleSolverInfo< Matrix, Vector, CommunicationType > > flexibleSolver_
 
std::vector< intoverlapRows_
 
std::vector< intinteriorRows_
 
int domainIndex_ = -1
 
bool useWellConn_
 
std::vector< FlowLinearSolverParametersparameters_
 
bool forceSerial_ = false
 
std::vector< PropertyTreeprm_
 
std::shared_ptr< CommunicationType > comm_
 

Static Protected Attributes

static constexpr std::size_t pressureIndex = GetPropType<TypeTag, Properties::Indices>::pressureSwitchIdx
 
static constexpr bool isIncompatibleWithCprw = enableMICP || enablePolymerMolarWeight
 

Detailed Description

template<class TypeTag>
class Opm::ISTLSolver< TypeTag >

This class solves the fully implicit black-oil system by solving the reduced system (after eliminating well variables) as a block-structured matrix (one block for all cell variables) for a fixed number of cell variables np .

Constructor & Destructor Documentation

◆ ISTLSolver() [1/2]

template<class TypeTag >
Opm::ISTLSolver< TypeTag >::ISTLSolver ( const Simulator &  simulator,
const FlowLinearSolverParameters parameters,
bool  forceSerial = false 
)
inline

Construct a system solver.

Parameters
[in]simulatorThe opm-models simulator object
[in]parametersExplicit parameters for solver setup, do not read them from command line parameters.
[in]forceSerialIf true, will set up a serial linear solver only, local to the current rank, instead of creating a parallel (MPI distributed) linear solver.

◆ ISTLSolver() [2/2]

template<class TypeTag >
Opm::ISTLSolver< TypeTag >::ISTLSolver ( const Simulator &  simulator)
inlineexplicit

Construct a system solver.

Parameters
[in]simulatorThe opm-models simulator object

Member Function Documentation

◆ iterations()

template<class TypeTag >
int Opm::ISTLSolver< TypeTag >::iterations ( ) const
inline

Solve the system of linear equations Ax = b, with A being the combined derivative matrix of the residual and b being the residual itself.

Parameters
[in]residualresidual object containing A and b.
Returns
the solution x

◆ parallelInformation()

template<class TypeTag >
const std::any & Opm::ISTLSolver< TypeTag >::parallelInformation ( ) const
inline


The documentation for this class was generated from the following files: