From f89fc01b47be8e24ec2d70a63ee91a8022c40019 Mon Sep 17 00:00:00 2001
From: renchao_lu <renchao.lu@gmail.com>
Date: Thu, 4 Jun 2020 11:10:11 +0200
Subject: [PATCH] [MathLib] Add a new ctor for EigenVector.

---
 MathLib/LinAlg/MatrixVectorTraits.cpp |  5 +++++
 MathLib/LinAlg/MatrixVectorTraits.h   | 17 ++++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/MathLib/LinAlg/MatrixVectorTraits.cpp b/MathLib/LinAlg/MatrixVectorTraits.cpp
index cac6b4f51f1..e2f1ce8a17e 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 608dce16719..4e6f2737b5a 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"
-- 
GitLab