mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Added support for the parallel solvers of dune-istl.
To support this the solveSystem methods of the LinearSolverInterface gets an optional additional template parameter of type boost::any. It can hold any copy constructable object. In our case it is used to pass the information about the parallelization into the solvers of dune-istl without the compiler needing to know their type. Inside of LinearSolverIstl::solveSystem we check whether the type stored inside of boost::any is the new ParallelIstlInformation. If this is the case we extract the information and use the parallel solvers if available, otherwise we solve serial/sequential. The new ParallelIstlInformation is needed as the OwnerOverlapCopyCommunication is not copy constructable. This is indeed a design flaw that should and will fixed upstream, but for the time being we need ParallelIstlInformation to transfer the ParallelIndexSet and RemoteIndices objects.
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#ifndef OPM_LINEARSOLVERINTERFACE_HEADER_INCLUDED
|
||||
#define OPM_LINEARSOLVERINTERFACE_HEADER_INCLUDED
|
||||
|
||||
#include<boost/any.hpp>
|
||||
|
||||
struct CSRMatrix;
|
||||
|
||||
@@ -69,7 +70,8 @@ namespace Opm
|
||||
const int* ja,
|
||||
const double* sa,
|
||||
const double* rhs,
|
||||
double* solution) const = 0;
|
||||
double* solution,
|
||||
const boost::any& add=boost::any()) const = 0;
|
||||
|
||||
/// Set tolerance for the linear solver.
|
||||
/// \param[in] tol tolerance value
|
||||
|
||||
Reference in New Issue
Block a user