Add (disabled) parallel version.

Disabled because the constructPreconditionerAndSolve() method does
not have a way currently to construct a parallel preconditioner.
This commit is contained in:
Atgeirr Flø Rasmussen 2015-06-16 11:35:23 +02:00
parent 5476b7a6ac
commit a3d115ff22

View File

@ -1,5 +1,7 @@
/* /*
Copyright 2015 SINTEF ICT, Applied Mathematics. Copyright 2015 SINTEF ICT, Applied Mathematics.
Copyright 2015 Dr. Blatt - HPC-Simulation-Software & Services
Copyright 2015 NTNU
Copyright 2015 Statoil AS Copyright 2015 Statoil AS
This file is part of the Open Porous Media project (OPM). This file is part of the Open Porous Media project (OPM).
@ -25,6 +27,8 @@
#include <opm/autodiff/NewtonIterationBlackoilInterleaved.hpp> #include <opm/autodiff/NewtonIterationBlackoilInterleaved.hpp>
#include <opm/autodiff/NewtonIterationUtilities.hpp> #include <opm/autodiff/NewtonIterationUtilities.hpp>
#include <opm/autodiff/AutoDiffHelpers.hpp> #include <opm/autodiff/AutoDiffHelpers.hpp>
#include <opm/core/utility/Exceptions.hpp>
#include <opm/core/linalg/ParallelIstlInformation.hpp>
#if HAVE_UMFPACK #if HAVE_UMFPACK
#include <Eigen/UmfPackSupport> #include <Eigen/UmfPackSupport>
@ -159,11 +163,30 @@ namespace Opm
x = 0.0; x = 0.0;
Dune::InverseOperatorResult result; Dune::InverseOperatorResult result;
// Construct operator, scalar product and vectors needed. // Parallel version is deactivated until we figure out how to do it properly.
typedef Dune::MatrixAdapter<Mat,Vector,Vector> Operator; #if 0 // HAVE_MPI
Operator opA(istlA); if (parallelInformation_.type() == typeid(ParallelISTLInformation))
Dune::Amg::SequentialInformation info; {
constructPreconditionerAndSolve(opA, x, istlb, info, result); typedef Dune::OwnerOverlapCopyCommunication<int,int> Comm;
const ParallelISTLInformation& info =
boost::any_cast<const ParallelISTLInformation&>( parallelInformation_);
Comm istlComm(info.communicator());
info.copyValuesTo(istlComm.indexSet(), istlComm.remoteIndices(),
size, np);
// Construct operator, scalar product and vectors needed.
typedef Dune::OverlappingSchwarzOperator<Mat,Vector,Vector,Comm> Operator;
Operator opA(istlA, istlComm);
constructPreconditionerAndSolve<Dune::SolverCategory::overlapping>(opA, x, istlb, istlComm, result);
}
else
#endif
{
// Construct operator, scalar product and vectors needed.
typedef Dune::MatrixAdapter<Mat,Vector,Vector> Operator;
Operator opA(istlA);
Dune::Amg::SequentialInformation info;
constructPreconditionerAndSolve(opA, x, istlb, info, result);
}
// store number of iterations // store number of iterations
iterations_ = result.iterations; iterations_ = result.iterations;