Feellgood
spinAccumulationSolver.h
1 #ifndef spinAccumulationSolver_h
2 #define spinAccumulationSolver_h
3 
4 #include <vector>
5 #include "config.h"
6 #include "node.h"
7 #include "tetra.h"
8 #include "electrostatSolver.h"
9 #include "solver.h"
10 #include "meshUtils.h"
11 
13 const int DIM_PB_SPIN_ACC = 3;
14 
22 class spinAcc : public solver<DIM_PB_SPIN_ACC>
23  {
24  public:
28  spinAcc(const Settings &mySettings ,
29  Mesh::mesh &_msh ,
30  const double _tol ,
31  const int max_iter );
32 
37  void boundaryConditions(void); // should be private
38 
40  bool compute(void);
41 
43  std::vector<Eigen::Vector3d> s;
44 
48  void checkBoundaryConditions(void) const override;
49 
50  private:
53  std::vector<double> valDirichlet;
54 
57  std::vector<int> idxDirichlet;
58 
61  void fillDirichletData(const int k, Eigen::Vector3d &s_value);
62 
65  std::vector<double> V;
66 
68  const int precision = 8;
69 
71  double getMs(const Tetra::Tet &tet) const;
72 
74  double getSigma(const Tetra::Tet &tet) const;
75 
77  double getPolarizationRate(const Tetra::Tet &tet) const;
78 
80  double getDiffusionCst(const Tetra::Tet &tet) const;
81 
83  double getLsd(const Tetra::Tet &tet) const;
84 
86  double getLsf(const Tetra::Tet &tet) const;
87 
91  void prepareExtraField(void) const;
92 
95  bool solve(void);
96 
99  void integrales(const Tetra::Tet &tet, Eigen::Matrix<double,DIM_PB*Tetra::N,DIM_PB*Tetra::N> &AE) const;
100 
102  void integrales(Tetra::Tet &tet,std::vector<double> &BE);
103  };
104 
105 #endif
Definition: mesh.h:32
Container for all the settings provided by the user, with conversions to/from YAML.
Definition: settings.h:70
Definition: tetra.h:132
template class for the different solvers template parameter DIM_PROBLEM: dimensionnality of the probl...
Definition: solver.h:22
Definition: spinAccumulationSolver.h:23
void integrales(const Tetra::Tet &tet, Eigen::Matrix< double, DIM_PB *Tetra::N, DIM_PB *Tetra::N > &AE) const
Definition: spinAccumulationSolver.cpp:211
void boundaryConditions(void)
Definition: spinAccumulationSolver.cpp:86
double getDiffusionCst(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:118
double getLsd(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:127
spinAcc(const Settings &mySettings, Mesh::mesh &_msh, const double _tol, const int max_iter)
Definition: spinAccumulationSolver.cpp:8
bool compute(void)
Definition: spinAccumulationSolver.cpp:145
bool solve(void)
Definition: spinAccumulationSolver.cpp:160
std::vector< int > idxDirichlet
Definition: spinAccumulationSolver.h:57
double getSigma(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:115
const int precision
Definition: spinAccumulationSolver.h:68
std::vector< double > valDirichlet
Definition: spinAccumulationSolver.h:53
double getPolarizationRate(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:124
double getLsf(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:130
void prepareExtraField(void) const
Definition: spinAccumulationSolver.cpp:133
std::vector< Eigen::Vector3d > s
Definition: spinAccumulationSolver.h:43
void checkBoundaryConditions(void) const override
Definition: spinAccumulationSolver.cpp:39
double getMs(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:112
void fillDirichletData(const int k, Eigen::Vector3d &s_value)
Definition: spinAccumulationSolver.cpp:76
std::vector< double > V
Definition: spinAccumulationSolver.h:65
solver for electrostatic problem when spin accumulation is required header containing electrostatSolv...
header to define struct Node
two templates to fill matrix and vectors in various dimensionnality situations. DIM_PROBLEM = 1 is us...
namespace Tetra header containing Tet class, some constants, and integrales