ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
soc.h
Go to the documentation of this file.
1#ifndef SOC_H
2#define SOC_H
3
6
7class Fcoef
8{
9
10 public:
11 Fcoef(){};
12 ~Fcoef();
13
14 int ind1 = 1;
15 int ind4 = 1;
16 int ind5 = 1;
17
18 std::complex<double> *p = nullptr;
19
20 inline std::complex<double> &operator()(const int &i1, const int &i2, const int &i3, const int &i4, const int &i5)
21 {
22 return p[ind2 * ind3 * ind4 * ind5 * i1 + ind3 * ind4 * ind5 * i2 + ind4 * ind5 * i3 + ind5 * i4 + i5];
23 }
24
25 inline const std::complex<double> &operator()(const int &i1,
26 const int &i2,
27 const int &i3,
28 const int &i4,
29 const int &i5) const
30 {
31 return p[ind2 * ind3 * ind4 * ind5 * i1 + ind3 * ind4 * ind5 * i2 + ind4 * ind5 * i3 + ind5 * i4 + i5];
32 }
33
34 void create(const int i1, const int i2, const int i3);
35
36 // void free();
37
38 private:
39 int ind2 = 2;
40 int ind3 = 2;
41};
42
43//-----------------------
44// spin-orbital coupling
45//-----------------------
46class Soc
47{
48
49 public:
50 Soc(){};
51 ~Soc();
52
53 double spinor(const int l, const double j, const int m, const int spin);
54
55 int sph_ind(const int l, const double j, const int m, const int spin);
56
57 void rot_ylm(const int lmax);
58 // std::complex<double> **rotylm;
59
60 const std::complex<double> &rotylm(const int &i1, const int &i2) const
61 {
62 return p_rot[l2plus1_ * i1 + i2];
63 }
64
66 void set_fcoef(const int &l1,
67 const int &l2,
68 const int &is1,
69 const int &is2,
70 const int &m1,
71 const int &m2,
72 const double &j1,
73 const double &j2,
74 const int &it,
75 const int &ip1,
76 const int &ip2);
77
78 // int npol;
79 private:
80 int l_max_ = -1; // maximum orbital index, must initialized before set_fcoef
81 int l2plus1_ = -1;
82 std::complex<double> *p_rot = nullptr;
83};
84#endif
Definition soc.h:8
const std::complex< double > & operator()(const int &i1, const int &i2, const int &i3, const int &i4, const int &i5) const
Definition soc.h:25
std::complex< double > & operator()(const int &i1, const int &i2, const int &i3, const int &i4, const int &i5)
Definition soc.h:20
Fcoef()
Definition soc.h:11
std::complex< double > * p
Definition soc.h:18
int ind1
Definition soc.h:14
int ind5
Definition soc.h:16
int ind2
Definition soc.h:39
int ind4
Definition soc.h:15
~Fcoef()
Definition klist_test.cpp:83
void create(const int i1, const int i2, const int i3)
Definition soc.cpp:11
int ind3
Definition soc.h:40
Definition soc.h:47
double spinor(const int l, const double j, const int m, const int spin)
Definition soc.cpp:44
Soc()
Definition soc.h:50
int l2plus1_
Definition soc.h:81
int l_max_
Definition soc.h:80
int sph_ind(const int l, const double j, const int m, const int spin)
Definition soc.cpp:119
Fcoef fcoef
Definition soc.h:65
std::complex< double > * p_rot
Definition soc.h:82
void set_fcoef(const int &l1, const int &l2, const int &is1, const int &is2, const int &m1, const int &m2, const double &j1, const double &j2, const int &it, const int &ip1, const int &ip2)
Definition soc.cpp:171
const std::complex< double > & rotylm(const int &i1, const int &i2) const
Definition soc.h:60
~Soc()
Definition klist_test.cpp:80
void rot_ylm(const int lmax)
Definition soc.cpp:89