1+ #ifndef MPM_DIRECT_EIGEN_H_
2+ #define MPM_DIRECT_EIGEN_H_
3+
4+ #include < cmath>
5+
6+ #include " factory.h"
7+ #include " solver_base.h"
8+ #include < Eigen/Sparse>
9+ #include < Eigen/SparseCholesky>
10+ #include < Eigen/SparseLU>
11+
12+ namespace mpm {
13+
14+ // ! MPM Direct Eigen solver class
15+ // ! \brief Direct linear sparse matrix solver class using Eigen library
16+ template <typename Traits>
17+ class DirectEigen : public SolverBase <Traits> {
18+ public:
19+ // ! Constructor
20+ DirectEigen (unsigned max_iter, double tolerance)
21+ : mpm::SolverBase<Traits>(max_iter, tolerance) {
22+ // ! Logger
23+ std::string logger = " EigenDirectSolver::" ;
24+ console_ = std::make_unique<spdlog::logger>(logger, mpm::stdout_sink);
25+ // ! Default sub solver type
26+ sub_solver_type_ = " lu" ;
27+ };
28+
29+ // ! Destructor
30+ ~DirectEigen (){};
31+
32+ // ! Matrix solver
33+ Eigen::VectorXd solve (const Eigen::SparseMatrix<double >& A,
34+ const Eigen::VectorXd& b) override ;
35+
36+ // ! Return the type of solver
37+ std::string solver_type () const { return " EigenDirectSolver" ; }
38+
39+ // ! Assign global active dof
40+ void assign_global_active_dof (unsigned global_active_dof) override {}
41+
42+ // ! Assign rank to global mapper
43+ void assign_rank_global_mapper (std::vector<int > rank_global_mapper) override {
44+ }
45+
46+ protected:
47+ // ! Solver type
48+ using SolverBase<Traits>::sub_solver_type_;
49+ // ! Verbosity
50+ using SolverBase<Traits>::verbosity_;
51+ // ! Logger
52+ using SolverBase<Traits>::console_;
53+ };
54+ } // namespace mpm
55+
56+ #include " direct_eigen.tcc"
57+
58+ #endif // MPM_DIRECT_EIGEN_H_
0 commit comments