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 
46  bool compute(const Nodes::step k = Nodes::NEXT);
47 
54  double jn_multiplier = 1.0;
55 
60  std::vector<double> potential(const double factor) const;
61 
63  std::vector<Eigen::Vector3d> s;
64 
67  void checkBoundaryConditions(void) const override;
68 
69  private:
72  std::vector<double> valDirichlet;
73 
76  std::vector<int> idxDirichlet;
77 
80  void fillDirichletData(const int k, Eigen::Vector3d &s_value);
81 
86  std::vector<double> V;
87 
90  double V_D = 0.0;
91 
93  const int precision = 8;
94 
96  double getMs(const Tetra::Tet &tet) const;
97 
99  double getSigma(const Tetra::Tet &tet) const;
100 
102  double getPolarizationRate(const Tetra::Tet &tet) const;
103 
105  double getDiffusionCst(const Tetra::Tet &tet) const;
106 
108  double getLsd(const Tetra::Tet &tet) const;
109 
111  double getLsf(const Tetra::Tet &tet) const;
112 
115  Eigen::Matrix<double,Nodes::DIM,Tetra::N> calc_u_nod(const Tetra::Tet &tet) const;
116 
118  Nodes::step uStep = Nodes::NEXT;
119 
123  void prepareExtraField(void) const;
124 
127  bool solve(void);
128 
131  void integrales(const Tetra::Tet &tet, Eigen::Matrix<double,DIM_PB*Tetra::N,DIM_PB*Tetra::N> &AE) const;
132 
134  void integrales(const Tetra::Tet &tet ,
135  std::vector<double> &BE ) const;
136  };
137 
138 #endif
Definition: mesh.h:34
Container for all the settings provided by the user, with conversions to/from YAML.
Definition: settings.h:72
Definition: tetra.h:136
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:248
void boundaryConditions(void)
Definition: spinAccumulationSolver.cpp:104
double getDiffusionCst(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:128
double getLsd(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:137
spinAcc(const Settings &mySettings, Mesh::mesh &_msh, const double _tol, const int max_iter)
Definition: spinAccumulationSolver.cpp:11
bool solve(void)
Definition: spinAccumulationSolver.cpp:186
std::vector< int > idxDirichlet
Definition: spinAccumulationSolver.h:76
double getSigma(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:125
const int precision
Definition: spinAccumulationSolver.h:93
std::vector< double > valDirichlet
Definition: spinAccumulationSolver.h:72
Nodes::step uStep
Definition: spinAccumulationSolver.h:118
double getPolarizationRate(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:134
double V_D
Definition: spinAccumulationSolver.h:90
double getLsf(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:140
void prepareExtraField(void) const
Definition: spinAccumulationSolver.cpp:151
std::vector< double > potential(const double factor) const
Definition: spinAccumulationSolver.cpp:163
std::vector< Eigen::Vector3d > s
Definition: spinAccumulationSolver.h:63
void checkBoundaryConditions(void) const override
Definition: spinAccumulationSolver.cpp:52
double getMs(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:122
Eigen::Matrix< double, Nodes::DIM, Tetra::N > calc_u_nod(const Tetra::Tet &tet) const
Definition: spinAccumulationSolver.cpp:143
void fillDirichletData(const int k, Eigen::Vector3d &s_value)
Definition: spinAccumulationSolver.cpp:94
bool compute(const Nodes::step k=Nodes::NEXT)
Definition: spinAccumulationSolver.cpp:171
std::vector< double > V
Definition: spinAccumulationSolver.h:86
double jn_multiplier
Definition: spinAccumulationSolver.h:54
solver for electrostatic problem when spin accumulation is required header containing electrostatSolv...
step
Definition: node.h:26
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