diff --git a/dune/istl/umfpack.hh b/dune/istl/umfpack.hh index 416d7af52eb393d3a871548d78a678d5a3153067..6e96dc1e857eb98658087b710f9acb530e16e2ba 100644 --- a/dune/istl/umfpack.hh +++ b/dune/istl/umfpack.hh @@ -17,6 +17,7 @@ #include<dune/common/fvector.hh> #include<dune/istl/bccsmatrixinitializer.hh> #include<dune/istl/bcrsmatrix.hh> +#include<dune/istl/matrix.hh> #include<dune/istl/foreach.hh> #include<dune/istl/multitypeblockmatrix.hh> #include<dune/istl/multitypeblockvector.hh> @@ -211,6 +212,12 @@ namespace Dune { using range_type = BlockVector<UMFPackRangeType<T>, typename std::allocator_traits<A>::template rebind_alloc<UMFPackRangeType<T>>>; }; + template<typename T, typename A> + struct UMFPackVectorChooser<Matrix<T,A>, + std::void_t<UMFPackDomainType<T>, UMFPackRangeType<T>>> + : public UMFPackVectorChooser<BCRSMatrix<T,A>, std::void_t<UMFPackDomainType<T>, UMFPackRangeType<T>>> + {}; + // to make the `UMFPackVectorChooser` work with `MultiTypeBlockMatrix`, we need to add an intermediate step for the rows, which are typically `MultiTypeBlockVector` template<typename FirstBlock, typename... Blocks> struct UMFPackVectorChooser<MultiTypeBlockVector<FirstBlock, Blocks...>,