Skip to content
Snippets Groups Projects
Commit 8b2eb91e authored by Norihiro Watanabe's avatar Norihiro Watanabe
Browse files

remove support of EigenXd as global matrix and vector types

parent ebda2c3a
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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"
......
......@@ -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"
......
......@@ -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,
......
......@@ -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,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment