diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index ef0f23eec..d082b95a0 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -42,12 +42,12 @@ list (APPEND MAIN_SOURCE_FILES opm/simulators/flow/SimulatorFullyImplicitBlackoilEbos.cpp opm/simulators/flow/ValidationFunctions.cpp opm/simulators/linalg/ExtractParallelGridInformationToISTL.cpp -# opm/simulators/linalg/FlexibleSolver1.cpp -# opm/simulators/linalg/FlexibleSolver2.cpp -# opm/simulators/linalg/FlexibleSolver3.cpp -# opm/simulators/linalg/FlexibleSolver4.cpp -# opm/simulators/linalg/FlexibleSolver5.cpp -# opm/simulators/linalg/FlexibleSolver6.cpp + opm/simulators/linalg/FlexibleSolver1.cpp + opm/simulators/linalg/FlexibleSolver2.cpp + opm/simulators/linalg/FlexibleSolver3.cpp + opm/simulators/linalg/FlexibleSolver4.cpp + opm/simulators/linalg/FlexibleSolver5.cpp + opm/simulators/linalg/FlexibleSolver6.cpp opm/simulators/linalg/PropertyTree.cpp opm/simulators/linalg/setupPropertyTree.cpp opm/simulators/utils/PartiallySupportedFlowKeywords.cpp diff --git a/opm/simulators/linalg/FlexibleSolver.hpp b/opm/simulators/linalg/FlexibleSolver.hpp index a0bcebd75..10b7a2f63 100644 --- a/opm/simulators/linalg/FlexibleSolver.hpp +++ b/opm/simulators/linalg/FlexibleSolver.hpp @@ -101,7 +101,7 @@ private: } // namespace Dune -#include +//#include #endif // OPM_FLEXIBLE_SOLVER_HEADER_INCLUDED diff --git a/opm/simulators/linalg/FlexibleSolver_impl.hpp b/opm/simulators/linalg/FlexibleSolver_impl.hpp index e2d927d05..03ef95588 100644 --- a/opm/simulators/linalg/FlexibleSolver_impl.hpp +++ b/opm/simulators/linalg/FlexibleSolver_impl.hpp @@ -198,45 +198,56 @@ namespace Dune // Macros to simplify explicit instantiation of FlexibleSolver for various block sizes. -/* + +// Vectors and matrices. template using BV = Dune::BlockVector>; template -using BM = Dune::BCRSMatrix>; -template using OBM = Dune::BCRSMatrix>; +// Sequential operators. +template +using SeqOpM = Dune::MatrixAdapter, BV, BV>; +template +using SeqOpW = Opm::WellModelMatrixAdapter, BV, BV, false>; + #if HAVE_MPI +// Parallel communicator and operators. using Comm = Dune::OwnerOverlapCopyCommunication; +template +using ParOpM = Dune::OverlappingSchwarzOperator, BV, BV, Comm>; +template +using ParOpW = Opm::WellModelGhostLastMatrixAdapter, BV, BV, true>; // Note: we must instantiate the constructor that is a template. // This is only needed in the parallel case, since otherwise the Comm type is // not a template argument but always SequentialInformation. -#define INSTANTIATE_FLEXIBLESOLVER(N) \ -template class Dune::FlexibleSolver, BV>; \ -template class Dune::FlexibleSolver, BV>; \ -template Dune::FlexibleSolver, BV>::FlexibleSolver(AbstractOperatorType& op, \ - const Comm& comm, \ - const Opm::PropertyTree& prm, \ - const std::function()>& weightsCalculator, \ -std::size_t); \ -template Dune::FlexibleSolver, BV>::FlexibleSolver(AbstractOperatorType& op, \ - const Comm& comm, \ - const Opm::PropertyTree& prm, \ - const std::function()>& weightsCalculator, \ -std::size_t); +#define INSTANTIATE_FLEXIBLESOLVER_OP(Operator) \ +template class Dune::FlexibleSolver; \ +template Dune::FlexibleSolver::FlexibleSolver(Operator& op, \ + const Comm& comm, \ + const Opm::PropertyTree& prm, \ + const std::function& weightsCalculator, \ + std::size_t pressureIndex); +#define INSTANTIATE_FLEXIBLESOLVER(N) \ +INSTANTIATE_FLEXIBLESOLVER_OP(SeqOpM); \ +INSTANTIATE_FLEXIBLESOLVER_OP(SeqOpW); \ +INSTANTIATE_FLEXIBLESOLVER_OP(ParOpM); \ +INSTANTIATE_FLEXIBLESOLVER_OP(ParOpW); #else // HAVE_MPI -#define INSTANTIATE_FLEXIBLESOLVER(N) \ -template class Dune::FlexibleSolver, BV>; \ -template class Dune::FlexibleSolver, BV>; +#define INSTANTIATE_FLEXIBLESOLVER_OP(Operator) \ +template class Dune::FlexibleSolver; + +#define INSTANTIATE_FLEXIBLESOLVER(N) \ +INSTANTIATE_FLEXIBLESOLVER_OP(SeqOpM); \ +INSTANTIATE_FLEXIBLESOLVER_OP(SeqOpW); #endif // HAVE_MPI -*/ -#define INSTANTIATE_FLEXIBLESOLVER(N) do(){} + #endif // OPM_FLEXIBLE_SOLVER_IMPL_HEADER_INCLUDED