diff --git a/dumux/linear/parallelhelpers.hh b/dumux/linear/parallelhelpers.hh index a950abd4272113b84637b14e8bd6f28e5b2c46f4..f67157b52e96fef96bb78630e29c5b239b8cc64c 100644 --- a/dumux/linear/parallelhelpers.hh +++ b/dumux/linear/parallelhelpers.hh @@ -871,11 +871,11 @@ private: }; /*! - * \brief Prepare linear algebra variables for parallel solvers + * \brief Prepare a matrix for parallel solvers */ template<class LinearSolverTraits, class ParallelTraits, - class Matrix, class Vector, class ParallelHelper> -void prepareLinearAlgebraParallel(Matrix& A, Vector& b, ParallelHelper& pHelper) + class Matrix, class ParallelHelper> +void prepareMatrixParallel(Matrix& A, ParallelHelper& pHelper) { if constexpr (ParallelTraits::isNonOverlapping) { @@ -887,12 +887,39 @@ void prepareLinearAlgebraParallel(Matrix& A, Vector& b, ParallelHelper& pHelper) ParallelMatrixHelper<Matrix, GridView, DofMapper, dofCodim> matrixHelper(pHelper.gridView(), pHelper.dofMapper()); matrixHelper.extendMatrix(A, [&pHelper](auto idx){ return pHelper.isGhost(idx); }); matrixHelper.sumEntries(A); + } +} +/*! + * \brief Prepare a vector for parallel solvers + */ +template<class LinearSolverTraits, class ParallelTraits, + class Vector, class ParallelHelper> +void prepareVectorParallel(Vector& b, ParallelHelper& pHelper) +{ + if constexpr (ParallelTraits::isNonOverlapping) + { + // extend the matrix pattern such that it is usable for a parallel solver + // and make right-hand side consistent + using GridView = typename LinearSolverTraits::GridView; + using DofMapper = typename LinearSolverTraits::DofMapper; + static constexpr int dofCodim = LinearSolverTraits::dofCodim; ParallelVectorHelper<GridView, DofMapper, dofCodim> vectorHelper(pHelper.gridView(), pHelper.dofMapper()); vectorHelper.makeNonOverlappingConsistent(b); } } +/*! + * \brief Prepare linear algebra variables for parallel solvers + */ +template<class LinearSolverTraits, class ParallelTraits, + class Matrix, class Vector, class ParallelHelper> +void prepareLinearAlgebraParallel(Matrix& A, Vector& b, ParallelHelper& pHelper) +{ + prepareMatrixParallel<LinearSolverTraits, ParallelTraits>(A, pHelper); + prepareVectorParallel<LinearSolverTraits, ParallelTraits>(b, pHelper); +} + /*! * \brief Prepare linear algebra variables for parallel solvers */