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 
24 class spinAcc : public solver<DIM_PB_SPIN_ACC>
25  {
26  public:
30  spinAcc(const Settings &mySettings ,
31  Mesh::mesh &_msh ,
32  const double _tol ,
33  const int max_iter );
34 
40  void boundaryConditions(void); // should be private
41 
43  bool compute(void);
44 
46  std::vector<Eigen::Vector3d> s;
47 
50  void checkBoundaryConditions(void) const override;
51 
52  private:
55  std::vector<double> valDirichlet;
56 
59  std::vector<int> idxDirichlet;
60 
63  void fillDirichletData(const int k, Eigen::Vector3d &s_value);
64 
67  std::vector<double> V;
68 
70  const int precision = 8;
71 
73  double getMs(const Tetra::Tet &tet) const;
74 
76  double getSigma(const Tetra::Tet &tet) const;
77 
79  double getPolarizationRate(const Tetra::Tet &tet) const;
80 
82  double getDiffusionCst(const Tetra::Tet &tet) const;
83 
85  double getLsd(const Tetra::Tet &tet) const;
86 
88  double getLsf(const Tetra::Tet &tet) const;
89 
92  Eigen::Matrix<double,Nodes::DIM,Tetra::N> calc_u_nod(const Tetra::Tet &tet) const;
93 
97  void prepareExtraField(void) const;
98 
101  bool solve(void);
102 
105  void integrales(const Tetra::Tet &tet, Eigen::Matrix<double,DIM_PB*Tetra::N,DIM_PB*Tetra::N> &AE) const;
106 
108  void integrales(const Tetra::Tet &tet ,
109  std::vector<double> &BE ) const;
110  };
111 
112 #endif
Definition: mesh.h:34
Container for all the settings provided by the user, with conversions to/from YAML.
Definition: settings.h:70
Definition: tetra.h:130
template class for the different solvers template parameter DIM_PROBLEM: dimensionnality of the probl...
Definition: solver.h:22
Definition: spinAccumulationSolver.h:25
void integrales(const Tetra::Tet &tet, Eigen::Matrix< double, DIM_PB *Tetra::N, DIM_PB *Tetra::N > &AE) const
Definition: spinAccumulationSolver.cpp:229
void boundaryConditions(void)
Definition: spinAccumulationSolver.cpp:94
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:9
bool compute(void)
Definition: spinAccumulationSolver.cpp:153
bool solve(void)
Definition: spinAccumulationSolver.cpp:168
std::vector< int > idxDirichlet
Definition: spinAccumulationSolver.h:59
double getSigma(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:115
const int precision
Definition: spinAccumulationSolver.h:70
std::vector< double > valDirichlet
Definition: spinAccumulationSolver.h:55
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:141
std::vector< Eigen::Vector3d > s
Definition: spinAccumulationSolver.h:46
void checkBoundaryConditions(void) const override
Definition: spinAccumulationSolver.cpp:42
double getMs(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:112
Eigen::Matrix< double, Nodes::DIM, Tetra::N > calc_u_nod(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:133
void fillDirichletData(const int k, Eigen::Vector3d &s_value)
Definition: spinAccumulationSolver.cpp:84
std::vector< double > V
Definition: spinAccumulationSolver.h:67
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