diff --git a/MathLib/LinAlg/MatrixVectorTraits.cpp b/MathLib/LinAlg/MatrixVectorTraits.cpp index cac6b4f51f18ee50b03b0831c7a9b5f91eff64e7..e2f1ce8a17e462fc5b1409ee68a925222d57b1e1 100644 --- a/MathLib/LinAlg/MatrixVectorTraits.cpp +++ b/MathLib/LinAlg/MatrixVectorTraits.cpp @@ -139,6 +139,11 @@ newInstance(MatrixSpecifications const& spec) return std::make_unique<EigenVector>(spec.nrows); } +std::unique_ptr<EigenVector> MatrixVectorTraits<EigenVector>::newInstance( + Eigen::SparseMatrix<double>::Index const length) +{ + return std::make_unique<EigenVector>(length); +} } // namespace MathLib #endif // defined(OGS_USE_EIGEN) diff --git a/MathLib/LinAlg/MatrixVectorTraits.h b/MathLib/LinAlg/MatrixVectorTraits.h index 608dce16719c087e939468866faafeb978e1c224..4e6f2737b5a01f8e68ad2371f8d16c6b8e6433ec 100644 --- a/MathLib/LinAlg/MatrixVectorTraits.h +++ b/MathLib/LinAlg/MatrixVectorTraits.h @@ -19,15 +19,18 @@ template<typename Matrix> struct MatrixVectorTraits; } -#define SPECIALIZE_MATRIX_VECTOR_TRAITS(MATVEC, IDX) \ - template<> struct MatrixVectorTraits<MATVEC> { \ - using Index = IDX; \ - static std::unique_ptr<MATVEC> newInstance(); \ - static std::unique_ptr<MATVEC> newInstance(MATVEC const& A); \ - static std::unique_ptr<MATVEC> newInstance(MatrixSpecifications const& spec); \ +#define SPECIALIZE_MATRIX_VECTOR_TRAITS(MATVEC, IDX) \ + template <> \ + struct MatrixVectorTraits<MATVEC> \ + { \ + using Index = IDX; \ + static std::unique_ptr<MATVEC> newInstance(); \ + static std::unique_ptr<MATVEC> newInstance(MATVEC const& A); \ + static std::unique_ptr<MATVEC> newInstance( \ + MatrixSpecifications const& spec); \ + static std::unique_ptr<MATVEC> newInstance(Index const length); \ }; - #ifdef USE_PETSC #include "MathLib/LinAlg/PETSc/PETScMatrix.h"