From 8b2eb91e8106aafb9973901f37df6d5a7baf6ab3 Mon Sep 17 00:00:00 2001
From: Norihiro Watanabe <norihiro.watanabe@ufz.de>
Date: Wed, 29 Jun 2016 06:30:05 +0200
Subject: [PATCH] remove support of EigenXd as global matrix and vector types

---
 MathLib/LinAlg/LinAlg.cpp               | 48 ----------------
 MathLib/LinAlg/MatrixVectorTraits.cpp   | 53 -----------------
 MathLib/LinAlg/MatrixVectorTraits.h     | 13 -----
 MathLib/LinAlg/UnifiedMatrixSetters.cpp | 76 ++-----------------------
 MathLib/LinAlg/UnifiedMatrixSetters.h   | 33 +----------
 5 files changed, 8 insertions(+), 215 deletions(-)

diff --git a/MathLib/LinAlg/LinAlg.cpp b/MathLib/LinAlg/LinAlg.cpp
index 08527728ddc..b095e0f6aa0 100644
--- a/MathLib/LinAlg/LinAlg.cpp
+++ b/MathLib/LinAlg/LinAlg.cpp
@@ -11,54 +11,6 @@
 
 // TODO reorder LinAlg function signatures?
 
-// Dense Eigen matrices and vectors ////////////////////////////////////////
-#ifdef OGS_USE_EIGEN
-
-#include <Eigen/Core>
-
-namespace MathLib
-{
-namespace LinAlg
-{
-
-// Explicit specialization
-// Computes w = x/y componentwise.
-template<>
-void componentwiseDivide(Eigen::VectorXd& w,
-                         Eigen::VectorXd const& x, Eigen::VectorXd const& y)
-{
-    w.noalias() = x.cwiseQuotient(y);
-}
-
-// Explicit specialization
-// Computes the Manhattan norm of x
-template<>
-double norm1(Eigen::VectorXd const& x)
-{
-    return x.lpNorm<1>();
-}
-
-// Explicit specialization
-// Computes the Euclidean norm of x
-template<>
-double norm2(Eigen::VectorXd const& x)
-{
-    return x.norm();
-}
-
-// Explicit specialization
-// Computes the Maximum norm of x
-template<>
-double normMax(Eigen::VectorXd const& x)
-{
-    return x.lpNorm<Eigen::Infinity>();
-}
-
-} } // namespaces
-
-#endif
-
-
 // Global PETScMatrix/PETScVector //////////////////////////////////////////
 #ifdef USE_PETSC
 
diff --git a/MathLib/LinAlg/MatrixVectorTraits.cpp b/MathLib/LinAlg/MatrixVectorTraits.cpp
index 0177e5bb2d1..add63a4525a 100644
--- a/MathLib/LinAlg/MatrixVectorTraits.cpp
+++ b/MathLib/LinAlg/MatrixVectorTraits.cpp
@@ -10,59 +10,6 @@
 #include "MatrixVectorTraits.h"
 #include "MatrixSpecifications.h"
 
-#ifdef OGS_USE_EIGEN
-
-namespace MathLib
-{
-
-std::unique_ptr<Eigen::MatrixXd>
-MatrixVectorTraits<Eigen::MatrixXd>::
-newInstance()
-{
-    return std::unique_ptr<Eigen::MatrixXd>(new Eigen::MatrixXd);
-}
-
-std::unique_ptr<Eigen::MatrixXd>
-MatrixVectorTraits<Eigen::MatrixXd>::
-newInstance(Eigen::MatrixXd const& A)
-{
-    return std::unique_ptr<Eigen::MatrixXd>(new Eigen::MatrixXd(A));
-}
-
-std::unique_ptr<Eigen::MatrixXd>
-MatrixVectorTraits<Eigen::MatrixXd>::
-newInstance(MatrixSpecifications const& spec)
-{
-    return std::unique_ptr<Eigen::MatrixXd>(
-        new Eigen::MatrixXd(spec.nrows, spec.ncols));
-}
-
-std::unique_ptr<Eigen::VectorXd>
-MatrixVectorTraits<Eigen::VectorXd>::
-newInstance()
-{
-    return std::unique_ptr<Eigen::VectorXd>(new Eigen::VectorXd);
-}
-
-std::unique_ptr<Eigen::VectorXd>
-MatrixVectorTraits<Eigen::VectorXd>::
-newInstance(Eigen::VectorXd const& A)
-{
-    return std::unique_ptr<Eigen::VectorXd>(new Eigen::VectorXd(A));
-}
-
-std::unique_ptr<Eigen::VectorXd>
-MatrixVectorTraits<Eigen::VectorXd>::
-newInstance(MatrixSpecifications const& spec)
-{
-    return std::unique_ptr<Eigen::VectorXd>(new Eigen::VectorXd(spec.nrows));
-}
-
-} // namespace MathLib
-
-#endif // OGS_USE_EIGEN
-
-
 #ifdef USE_PETSC
 
 #include "MeshLib/NodePartitionedMesh.h"
diff --git a/MathLib/LinAlg/MatrixVectorTraits.h b/MathLib/LinAlg/MatrixVectorTraits.h
index c246bdc1248..abfeb9c7cb5 100644
--- a/MathLib/LinAlg/MatrixVectorTraits.h
+++ b/MathLib/LinAlg/MatrixVectorTraits.h
@@ -29,19 +29,6 @@ struct MatrixSpecifications;
     };
 
 
-#ifdef OGS_USE_EIGEN
-
-#include<Eigen/Core>
-
-namespace MathLib
-{
-SPECIALIZE_MATRIX_VECTOR_TRAITS(Eigen::MatrixXd, Eigen::MatrixXd::Index)
-SPECIALIZE_MATRIX_VECTOR_TRAITS(Eigen::VectorXd, Eigen::VectorXd::Index)
-}
-
-#endif
-
-
 #ifdef USE_PETSC
 
 #include "MathLib/LinAlg/PETSc/PETScMatrix.h"
diff --git a/MathLib/LinAlg/UnifiedMatrixSetters.cpp b/MathLib/LinAlg/UnifiedMatrixSetters.cpp
index 447d27b04d9..7e4235d1d32 100644
--- a/MathLib/LinAlg/UnifiedMatrixSetters.cpp
+++ b/MathLib/LinAlg/UnifiedMatrixSetters.cpp
@@ -10,74 +10,6 @@
 #include <cassert>
 #include "UnifiedMatrixSetters.h"
 
-#ifdef OGS_USE_EIGEN
-
-// Dense Eigen matrix/vector //////////////////////////////////////////
-
-namespace MathLib
-{
-
-void setMatrix(Eigen::MatrixXd& m,
-               std::initializer_list<double> values)
-{
-    using IndexType = Eigen::MatrixXd::Index;
-
-    auto const rows = m.rows();
-    auto const cols = m.cols();
-
-    assert((IndexType) values.size() == rows*cols);
-
-    auto it = values.begin();
-    for (IndexType r=0; r<rows; ++r) {
-        for (IndexType c=0; c<cols; ++c) {
-            m(r, c) = *(it++);
-        }
-    }
-}
-
-void setMatrix(Eigen::MatrixXd& m, Eigen::MatrixXd const& tmp)
-{
-    m = tmp;
-}
-
-void addToMatrix(Eigen::MatrixXd& m,
-                 std::initializer_list<double> values)
-{
-    using IndexType = Eigen::MatrixXd::Index;
-
-    auto const rows = m.rows();
-    auto const cols = m.cols();
-
-    assert((IndexType) values.size() == rows*cols);
-
-    auto it = values.begin();
-    for (IndexType r=0; r<rows; ++r) {
-        for (IndexType c=0; c<cols; ++c) {
-            m(r, c) += *(it++);
-        }
-    }
-}
-
-double norm(Eigen::VectorXd const& x) { return x.norm(); }
-
-void setVector(Eigen::VectorXd& v, std::initializer_list<double> values)
-{
-    assert((std::size_t) v.size() == values.size());
-    auto it = values.begin();
-    for (std::size_t i=0; i<values.size(); ++i) v[i] = *(it++);
-}
-
-void setVector(Eigen::VectorXd& v, MatrixVectorTraits<Eigen::VectorXd>::Index const index,
-               double const value)
-{
-    v[index] = value;
-}
-
-} // namespace MathLib
-
-#endif // OGS_USE_EIGEN
-
-
 #ifdef USE_PETSC
 
 // Global PETScMatrix/PETScVector //////////////////////////////////////////
@@ -198,10 +130,14 @@ void addToMatrix(PETScMatrix& m,
 namespace MathLib
 {
 
-void setVector(EigenVector& v,
+void setVector(EigenVector& v_,
                       std::initializer_list<double> values)
 {
-    setVector(v.getRawVector(), values);
+    auto& v(v_.getRawVector());
+    assert((std::size_t)v.size() == values.size());
+    auto it = values.begin();
+    for (std::size_t i = 0; i < values.size(); ++i)
+        v[i] = *(it++);
 }
 
 void setVector(EigenVector& v, MatrixVectorTraits<EigenVector>::Index const index,
diff --git a/MathLib/LinAlg/UnifiedMatrixSetters.h b/MathLib/LinAlg/UnifiedMatrixSetters.h
index d7402b25139..2d47a86893c 100644
--- a/MathLib/LinAlg/UnifiedMatrixSetters.h
+++ b/MathLib/LinAlg/UnifiedMatrixSetters.h
@@ -15,43 +15,14 @@
 #include <initializer_list>
 #include "MatrixVectorTraits.h"
 
-#ifdef OGS_USE_EIGEN
-
-// Dense Eigen matrix/vector //////////////////////////////////////////
-
-#include <Eigen/Core>
-
-namespace MathLib
-{
-
-void setMatrix(Eigen::MatrixXd& m,
-               std::initializer_list<double> values);
-
-void setMatrix(Eigen::MatrixXd& m, Eigen::MatrixXd const& tmp);
-
-void addToMatrix(Eigen::MatrixXd& m,
-                 std::initializer_list<double> values);
-
-double norm(Eigen::VectorXd const& x);
-
-void setVector(Eigen::VectorXd& v, std::initializer_list<double> values);
-
-void setVector(Eigen::VectorXd& v, MatrixVectorTraits<Eigen::VectorXd>::Index const index,
-               double const value);
-
-} // namespace MathLib
-
-#endif // OGS_USE_EIGEN
-
-
 #ifdef USE_PETSC
 
 // Global PETScMatrix/PETScVector //////////////////////////////////////////
+#include "PETSc/PETScVector.h"
 
 namespace MathLib
 {
 
-class PETScVector;
 class PETScMatrix;
 
 double norm(PETScVector const& x);
@@ -76,11 +47,11 @@ void setMatrix(PETScMatrix& m,
 #elif defined(OGS_USE_EIGEN)
 
 // Sparse global EigenMatrix/EigenVector //////////////////////////////////////////
+#include "Eigen/EigenVector.h"
 
 namespace MathLib
 {
 
-class EigenVector;
 class EigenMatrix;
 
 void setVector(EigenVector& v,
-- 
GitLab