Feellgood
solver.h
Go to the documentation of this file.
1 #ifndef solver_h
2 #define solver_h
3 
10 #include <eigen3/Eigen/Dense>
11 #include "mesh.h"
12 
18 template <int DIM_PROBLEM>
19 class solver
20  {
21  public:
23  explicit solver(Mesh::mesh & _msh ,
24  std::vector<Tetra::prm> & _pTetra ,
25  std::vector<Facette::prm> & _pFac ,
26  const std::string name ,
27  const double _tol ,
28  const bool v ,
29  const int max_iter ):
30  msh(&_msh), NOD(_msh.getNbNodes()), paramTet(_pTetra), paramFac(_pFac), iter(name,_tol,v,max_iter) {}
31 
32  protected:
34  static const int DIM_PB = DIM_PROBLEM;
35 
38 
40  const int NOD;
41 
43  const std::vector<Tetra::prm> &paramTet;
44 
46  const std::vector<Facette::prm> &paramFac;
47 
50 
54  template <int N>
55  void buildMat(std::vector<int> &ind, Eigen::Matrix<double,DIM_PROBLEM*N,DIM_PROBLEM*N> &Ke, algebra::w_sparseMat &K)
56  {
57  for (int ie=0; ie<N; ie++)
58  {
59  int i_ = ind[ie];
60  for (int je=0; je<N; je++)
61  {
62  int j_ = ind[je];
63  for (int di=0; di<DIM_PROBLEM; di++)
64  for (int dj=0; dj<DIM_PROBLEM; dj++)
65  K.insert(DIM_PROBLEM*i_ + di, DIM_PROBLEM*j_ + dj, Ke(di*N+ie,dj*N+je));
66  }
67  }
68  }
69 
73  template <int N>
74  void buildVect(std::vector<int> &ind, std::vector<double> &Le, std::vector<double> &L)
75  {
76  for (int ie=0; ie<N; ie++)
77  {
78  int i_ = ind[ie];
79  for (int di=0; di<DIM_PROBLEM; di++)
80  { L[DIM_PROBLEM*i_ + di] += Le[di*N+ie]; }
81  }
82  }
83  }; // end template class solver
84 
85 #endif
Definition: mesh.h:27
Write-mode sparse matrix.
Definition: sparseMat.h:52
void insert(const int i, const int j, const double val)
Definition: sparseMat.h:70
template class for the different solvers template parameter DIM_PROBLEM: dimensionnality of the probl...
Definition: solver.h:20
Mesh::mesh * msh
Definition: solver.h:37
void buildMat(std::vector< int > &ind, Eigen::Matrix< double, DIM_PROBLEM *N, DIM_PROBLEM *N > &Ke, algebra::w_sparseMat &K)
Definition: solver.h:55
const int NOD
Definition: solver.h:40
void buildVect(std::vector< int > &ind, std::vector< double > &Le, std::vector< double > &L)
Definition: solver.h:74
algebra::iteration< double > iter
Definition: solver.h:49
const std::vector< Tetra::prm > & paramTet
Definition: solver.h:43
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)
Definition: solver.h:23
static const int DIM_PB
Definition: solver.h:34
const std::vector< Facette::prm > & paramFac
Definition: solver.h:46
class mesh, readMesh is expecting a mesh file in gmsh format either text or binary,...
const int N
Definition: facette.h:17
constexpr double v[NPI]
Definition: facette.h:22