Skip to content

Commit d31f823

Browse files
Merge pull request #12 from geomechanics/linear_solver/direct_eigen
[Linear Solver] Direct solvers of Eigen
2 parents 7f31550 + 7c7b386 commit d31f823

18 files changed

+241
-2
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ include_directories(BEFORE
153153
${mpm_SOURCE_DIR}/include/generators/
154154
${mpm_SOURCE_DIR}/include/io/
155155
${mpm_SOURCE_DIR}/include/linear_solvers/
156+
${mpm_SOURCE_DIR}/include/linear_solvers/assemblers
157+
${mpm_SOURCE_DIR}/include/linear_solvers/linear_solvers
156158
${mpm_SOURCE_DIR}/include/loads_bcs/
157159
${mpm_SOURCE_DIR}/include/materials/
158160
${mpm_SOURCE_DIR}/include/particles/
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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

Comments
 (0)