-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathStagFluxLongExciton.cpp
More file actions
69 lines (66 loc) · 2.16 KB
/
StagFluxLongExciton.cpp
File metadata and controls
69 lines (66 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "StagFluxLongExciton.h"
#include "linalg.h"
using namespace std;
StagFluxLongExciton::StagFluxLongExciton(FileManager* fm,
size_t Lx,
size_t Ly,
double phi,
double neel,
double neel_exp,
vector<double> bc_phase,
vector<size_t> q)
:StagFluxWaveFunction(fm,
Lx,Ly,
Lx*Ly/2,Lx*Ly/2,
phi,neel,neel_exp,bc_phase),
m_q(q)
{
for(size_t fe=0;fe<Lx*Ly/2;++fe){
size_t kx=m_fock2qn[3*(2*fe+1)];
size_t ky=m_fock2qn[3*(2*fe+1)+1];
size_t Qk[2]={linalg::mod(int(kx)-int(m_q[0]),m_Lx),
linalg::mod(int(ky)-int(m_q[1]),m_Ly)};
mbzmod(Qk);
vector<uint_vec_t> st(2);
st[0]=uint_vec_t(Lx*Ly,Lx*Ly/2);
st[1]=uint_vec_t(Lx*Ly,Lx*Ly/2);
size_t count(0);
for(size_t f=0;f<(Lx*Ly)/2;++f){
st[1][2*f]=f;
if(m_qn2fock[(Qk[0]*Ly+Qk[1])*2]!=2*f){
st[0][2*f]=count;
++count;
}
}
st[0][2*fe+1]=Lx*Ly/2-1;
AddState(st);
count=0;
st[0]=uint_vec_t(Lx*Ly,Lx*Ly/2);
st[1]=uint_vec_t(Lx*Ly,Lx*Ly/2);
for(size_t f=0;f<(Lx*Ly)/2;++f){
st[0][2*f]=f;
if(m_qn2fock[(Qk[0]*Ly+Qk[1])*2]!=2*f){
st[1][2*f]=count;
++count;
}
}
st[1][2*fe+1]=Lx*Ly/2-1;
AddState(st);
}
// if at gamma point or AFM Bragg peak
// add the groundstate as it has same
// zero momentum
if((m_q[0]==0 && m_q[1]==0)||
(m_q[0]==m_Lx/2 && m_q[1]==m_Ly/2)){
vector<uint_vec_t> st(2);
st[0]=uint_vec_t(Lx*Ly,Lx*Ly/2);
st[1]=uint_vec_t(Lx*Ly,Lx*Ly/2);
for(size_t f=0;f<(Lx*Ly)/2;++f){
st[0][2*f]=f;
st[1][2*f]=f;
}
AddState(st);
}
}
StagFluxLongExciton::~StagFluxLongExciton()
{}