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