10 #include <eigen3/Eigen/Dense>
19 template <
int DIM_PROBLEM>
25 std::vector<Tetra::prm> & _pTetra ,
26 std::vector<Facette::prm> & _pFac ,
27 const std::string name ,
42 static const int DIM_PB = DIM_PROBLEM;
74 auto add_block = [
this, &shape](
int i,
int j)
76 for (
int k = 0; k < DIM_PROBLEM; ++k)
78 for (
int l = 0; l < DIM_PROBLEM; ++l)
79 { shape[DIM_PROBLEM*i+k].insert(DIM_PROBLEM*j+l); }
84 for (
int i = 0; i <
NOD; ++i)
90 if (edge_filter(edge))
92 add_block(edge.first, edge.second);
93 add_block(edge.second, edge.first);
104 void buildMat(std::vector<int> &ind, Eigen::Matrix<double,DIM_PROBLEM*N,DIM_PROBLEM*N> &Ke)
106 for (
int ie=0; ie<
N; ie++)
109 for (
int je=0; je<
N; je++)
112 for (
int di=0; di<DIM_PROBLEM; di++)
113 for (
int dj=0; dj<DIM_PROBLEM; dj++)
114 K.
add(DIM_PROBLEM*i_ + di, DIM_PROBLEM*j_ + dj, Ke(di*
N+ie,dj*
N+je));
123 void buildVect(std::vector<int> &ind, std::vector<double> &Le)
125 for (
int ie=0; ie<
N; ie++)
128 for (
int di=0; di<DIM_PROBLEM; di++)
129 {
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:331
int getNbNodes(void) const
Definition: mesh.h:141
Square sparse matrix.
Definition: sparseMat.h:46
void add(int i, int j, double val)
Definition: sparseMat.h:114
template class for the different solvers template parameter DIM_PROBLEM: dimensionnality of the probl...
Definition: solver.h:21
Mesh::mesh * msh
Definition: solver.h:45
void buildMat(std::vector< int > &ind, Eigen::Matrix< double, DIM_PROBLEM *N, DIM_PROBLEM *N > &Ke)
Definition: solver.h:104
virtual void checkBoundaryConditions(void) const =0
algebra::SparseMatrix K
Definition: solver.h:63
const int NOD
Definition: solver.h:48
const bool verbose
Definition: solver.h:57
algebra::iteration< double > iter
Definition: solver.h:60
const std::vector< Tetra::prm > & paramTet
Definition: solver.h:51
void buildVect(std::vector< int > &ind, std::vector< double > &Le)
Definition: solver.h:123
algebra::MatrixShape build_shape(std::function< bool(Mesh::Edge)> edge_filter)
Definition: solver.h:69
static const int DIM_PB
Definition: solver.h:42
solver(Mesh::mesh &_msh, std::vector< Tetra::prm > &_pTetra, std::vector< Facette::prm > &_pFac, const std::string name, const double _tol, const bool v, const int max_iter, std::function< bool(Mesh::Edge)> edge_filter=[](Mesh::Edge){ return true;})
Definition: solver.h:24
const std::vector< Facette::prm > & paramFac
Definition: solver.h:54
std::vector< double > L_rhs
Definition: solver.h:66
class mesh, readMesh is expecting a mesh file in gmsh format either text or binary,...
std::pair< int, int > Edge
Definition: mesh.h:23
const int N
Definition: facette.h:18
constexpr double v[NPI]
Definition: facette.h:49
std::vector< std::set< int > > MatrixShape
Definition: sparseMat.h:38