11 #include <eigen3/Eigen/Dense>
20 template <
int DIM_PROBLEM>
26 const std::vector<Tetra::prm> & _pTetra ,
28 const std::vector<Triangle::prm> & _pTri ,
30 const std::string& name ,
46 static const int DIM_PB = DIM_PROBLEM;
80 auto add_block = [
this, &shape](
const int i,
const int j)
82 for (
int k = 0; k < DIM_PROBLEM; ++k)
84 for (
int l = 0; l < DIM_PROBLEM; ++l)
85 { shape[DIM_PROBLEM * i + k].insert(DIM_PROBLEM * j + l); }
90 for (
int i = 0; i <
NOD; ++i)
96 if (edge_filter(edge))
98 add_block(edge.first, edge.second);
99 add_block(edge.second, edge.first);
111 Eigen::Matrix<double,DIM_PROBLEM*N,DIM_PROBLEM*N> &Ke)
113 for (
int ie = 0; ie <
N; ie++)
116 for (
int je = 0; je <
N; je++)
119 for (
int di = 0; di < DIM_PROBLEM; di++)
121 for (
int dj = 0; dj < DIM_PROBLEM; dj++)
123 K.
add(DIM_PROBLEM * i_ + di, DIM_PROBLEM * j_ + dj,
124 Ke(di *
N + ie,dj *
N + je));
135 void buildVect(std::array<int,N> &ind, std::vector<double> &Le)
137 for (
int ie = 0; ie <
N; ie++)
140 for (
int di = 0; di < DIM_PROBLEM; di++)
141 {
L_rhs[DIM_PROBLEM*i_+di] += Le[di*
N+ie]; }
set of class to handle sparse matrix operations for gradient conjugate algorithms a sparse vector cla...
std::vector< Edge > edges
Definition: mesh.h:353
int getNbNodes(void) const
Definition: mesh.h:144
Square sparse matrix.
Definition: sparseMat.h:46
void add(const int i, const int j, const double val)
Definition: sparseMat.h:114
template class for the different solvers template parameter DIM_PROBLEM: dimensionnality of the probl...
Definition: solver.h:22
Mesh::mesh * msh
Definition: solver.h:49
virtual void checkBoundaryConditions(void) const =0
void buildMat(std::array< int, N > &ind, Eigen::Matrix< double, DIM_PROBLEM *N, DIM_PROBLEM *N > &Ke)
Definition: solver.h:110
algebra::SparseMatrix K
Definition: solver.h:69
void buildVect(std::array< int, N > &ind, std::vector< double > &Le)
Definition: solver.h:135
const int NOD
Definition: solver.h:52
const bool verbose
Definition: solver.h:63
algebra::iteration< double > iter
Definition: solver.h:66
const std::vector< Tetra::prm > & paramTet
Definition: solver.h:56
const std::vector< Triangle::prm > & paramTri
Definition: solver.h:60
algebra::MatrixShape build_shape(const std::function< bool(Mesh::Edge)> &edge_filter) const
Definition: solver.h:75
static const int DIM_PB
Definition: solver.h:46
solver(Mesh::mesh &_msh, const std::vector< Tetra::prm > &_pTetra, const std::vector< Triangle::prm > &_pTri, const std::string &name, const double _tol, const bool v, const int max_iter, const std::function< bool(Mesh::Edge)> &edge_filter=[](Mesh::Edge) { return true;})
Definition: solver.h:25
std::vector< double > L_rhs
Definition: solver.h:72
class mesh, readMesh is expecting a mesh file in gmsh format either text or binary,...
std::pair< int, int > Edge
Definition: mesh.h:27
const int N
Definition: tetra.h:25
constexpr double v[NPI]
Definition: tetra.h:58
std::vector< std::set< int > > MatrixShape
Definition: sparseMat.h:38