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