有时候在文章中经常看到一些结果,会计算wave function profile,其实对应的也可以计算局域电子态密度。
{:.success}

局域电子态密度

关于局域电子态密度在可以自行去查看其含义和计算方法,这里的计算公式来自这里,文章中有具体的计算公式,但是其中牵扯到了BdG方程,这个不是我项讨论的东西,暂时先略过,想看BdG可以参考 Bogoliubovde Gennes Method and Its Applications,只要清楚它是怎么计算的。直接上代码进行演示。

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
! Author:YuXuanLi
! E-Mail:yxli406@gmail.com
!==========================================
module param
implicit none
integer xn,yn,ne,len2
parameter(xn = 30,yn = 30, len2=xn*yn)
integer,parameter::N = xn*yn*8
integer,parameter::up = xn
complex,parameter::im=(0.,1.)
real,parameter::pi = 3.14159265359
complex Ham(N,N)
integer bry(4,len2)
!------------------------------------------------------------------------------
real mu,tx,ty,delx,dely,ax,ay,m0,bcy,bcx
!-----------------LAPACK PACKAGE PARAM
integer::lda = N
integer,parameter::lwmax=2*N+N**2
real,allocatable::w(:)
complex,allocatable::work(:)
real,allocatable::rwork(:)
integer,allocatable::iwork(:)
integer lwork ! at least 2*N+N**2
integer lrwork ! at least 1 + 5*N +2*N**2
integer liwork ! at least 3 +5*N
integer info
end module param
!========== PROGRAM START ==========================
program sol
use param
integer m,l,i
!================ Physics memory allocate =================
external::fermi
allocate(w(N))
allocate(work(lwmax))
allocate(rwork(1+5*N+2*N**2))
allocate(iwork(3+5*N))
Ham = (0,0) ! Hamiltonian initinal
! Boundary condition control
bcx = 0 ! zero is open boundary,one is periodic boundary conditions
bcy = 0 ! bcx is x direction boundary set,bcy is y direction set.
!------------------------------------------
m0 = 1.5
tx = 1.0
ty = 1.0
mu = 0.0
ax = 1.0
ay = 1.0
!=========== D(k) = D0 + D_x cos(k_x) + D_y cos(k_y) ============
del0 = 0
delx = 0.5
dely = -0.5
!------------------------
call matset()
call waveprofile()
call ldos()
stop
end
!===========================================================
subroutine waveprofile()
use param
integer ix,iy,i,m1,m2
real re
open(22,file="waveprof.dat")
do iy = 1,yn
do ix = 1,xn
i = (iy - 1)*xn + ix
re = 0
do m1 = 0,7
do m2 = -3,4
re = re + abs(Ham(i + m1*len2,xn*yn*4 + m2))**2.0
end do
end do
write(22,*)ix,iy,re
end do
end do
close(22)
end subroutine waveprofile
!===========================================================
subroutine matset()
use param
integer m,l,k1,k2
Ham = (0,0)
call diag()
call kinetic()
do m = 0,3
do l = 0,3
do k1 = 1,len2
do k2 = 1,len2
Ham(len2*4+len2*m+k1,len2*4+len2*l+k2) = -conjg(Ham(len2*m+k1,len2*l+k2)) !HOLE PART
end do
end do
end do
end do
call pair()
do k1 = 1,len2
do k2 = 1,len2
Ham(len2*4+k1,len2*2+k2) = -conjg(Ham(k1,len2*6+k2)) !(5,3) ---> (1,7)
Ham(len2*5+k1,len2*3+k2) = -conjg(Ham(len2+k1,len2*7+k2)) !(6,4) ---> (2,8)
Ham(len2*6+k1,k2) = -conjg(Ham(len2*2+k1,len2*4+k2)) !(7,1) ---> (3,5)
Ham(len2*7+k1,len2+k2) = -conjg(Ham(len2*3+k1,len2*5+k2)) !(8,2) ---> (4,6)
end do
end do
call ishermitian()
call eigsol()
return
end subroutine matset
!======================================================================
real function delta(x)
implicit none
real x
real::gamma = 0.005
delta = 1.0/3.1415926535*gamma/(x**2+gamma**2)
end function delta
!=========================== Local Density of State =============================
subroutine ldos()
use param
integer m,l,i
real s,E
real,external::delta
open(12,file="ldos.dat")
E = 0 ! zero energy Local Density of State
do m = 1,yn
do l = 1,xn
k = l + (m-1)*xn
s = 0
do i = 1,N
s = s + delta(w(i)-E)*(abs(Ham(k,i))**2+abs(Ham(k+len2,i))**2)&
+ delta(w(i)+E)*(abs(Ham(k+len2*6,i))**2+abs(Ham(k+len2*7,i))**2)
end do
write(12,*)m,l,s
end do
end do
close(12)
return
end subroutine ldos
!===========================================================
subroutine boundary()
! Transform lattice into a matrix index
use param
integer i,ix,iy
bry = 0
do iy = 1,yn ! y direction change
do ix = 1,xn ! x direction change
i = (iy-1)*xn + ix
bry(1,i) = i + 1 ! right hopping
if(ix.eq.xn)bry(1,i) = bry(1,i) - xn ! right boundary
bry(2,i) = i - 1 ! left hopping
if(ix.eq.1)bry(2,i) = bry(2,i) + xn ! left boundary
bry(3,i) = i + xn ! up hopping
if(iy.eq.yn)bry(3,i) = bry(3,i) - len2 ! upper boundary
bry(4,i)= i - xn ! down hopping
if(iy.eq.1)bry(4,i) = bry(4,i) + len2 ! lower boundary
enddo
enddo
end subroutine boundary
!================= diagonal block matrices ==============
subroutine diag()
use param
integer m,l,i
do m = 1,yn
do l = 1,xn
i = (m-1)*xn + l
Ham(i,i) = m0 + mu
Ham(len2+i,len2+i) = -m0 + mu
Ham(len2*2+i,len2*2+i) = m0 + mu
Ham(len2*3+i,len2*3+i) = -m0 + mu
end do
end do
!========= X =============================================
do l = 1,yn
do m = 2+(l-1)*xn,xn*l-1 ! Cannot consider left and right boundary
! (1,1) (a,up;a,up)
Ham(m,m+1) = -tx/2
Ham(m,m-1) = -tx/2
! (2,2) (b,up;b,up)
Ham(len2+m,len2+m+1) = tx/2
Ham(len2+m,len2+m-1) = tx/2
! (3,3) (a,down;a,down)
Ham(len2*2+m,len2*2+m+1) = -tx/2
Ham(len2*2+m,len2*2+m-1) = -tx/2
! (4,4) (b,down;b,down)
Ham(len2*3+m,len2*3+m+1) = tx/2
Ham(len2*3+m,len2*3+m-1) = tx/2
end do
end do
!========== X boundry ==========================
do m = 1,yn
! (1,1) (a,up;a,up)
Ham(m*xn,m*xn-(xn-1)) = -tx/2*bcx
Ham(m*xn,m*xn-1) = -tx/2
Ham(1+(m-1)*xn,1+(m-1)*xn+1) = -tx/2
Ham(1+(m-1)*xn,m*xn) = -tx/2*bcx
! (2,2) (b,up;b,up)
Ham(len2+m*xn,m*xn-(xn-1)+len2) = tx/2*bcx
Ham(len2+m*xn,m*xn-1+len2) = tx/2
Ham(len2+1+(m-1)*xn,1+(m-1)*xn+1+len2) = tx/2
Ham(len2+1+(m-1)*xn,m*xn+len2) = tx/2*bcx
! (3,3) (a,down;a,down)
Ham(len2*2+m*xn,m*xn-(xn-1)+len2*2) = -tx/2*bcx
Ham(len2*2+m*xn,m*xn-1+len2*2) = -tx/2
Ham(len2*2+1+(m-1)*xn,1+(m-1)*xn+1+len2*2) = -tx/2
Ham(len2*2+1+(m-1)*xn,m*xn+len2*2) = -tx/2*bcx
! (4,4) (b,down;b,down)
Ham(len2*3+m*xn,m*xn-(xn-1)+len2*3) = tx/2*bcx
Ham(len2*3+m*xn,m*xn-1+len2*3) = tx/2
Ham(len2*3+1+(m-1)*xn,1+(m-1)*xn+1+len2*3) = tx/2
Ham(len2*3+1+(m-1)*xn,m*xn+len2*3) = tx/2*bcx
end do
! ============= Y ======================
do m = xn+1,xn*(yn-1)
!(1,1) (a,up;a,up)
Ham(m,m+up) = -ty/2
Ham(m,m-up) = -ty/2
!(2,2) (b,up;b,up)
Ham(len2+m,len2+m+up) = ty/2
Ham(len2+m,len2+m-up) = ty/2
!(3,3) (a,down;a,down)
Ham(len2*2+m,len2*2+m+up) = -ty/2
Ham(len2*2+m,len2*2+m-up) = -ty/2
!(4,4) (b,down;b,down)
Ham(len2*3+m,len2*3+m+up) = ty/2
Ham(len2*3+m,len2*3+m-up) = ty/2
end do
!================= Y boundry ==============
do m = 1,xn
! (1,1)
Ham(m,m+up) = -ty/2
Ham(m,xn*(yn-1)+m) = -ty/2*bcy ! lower boundary
Ham(xn*(yn-1)+m,m) = -ty/2*bcy ! upper boundary
Ham(xn*(yn-1)+m,xn*(yn-1)+m-up) = -ty/2
! (2,2)
Ham(len2+m,m+up+len2) = ty/2
Ham(len2+m,xn*(yn-1)+m+len2) = ty/2*bcy
Ham(len2+xn*(yn-1)+m,m+len2) = ty/2*bcy
Ham(len2+xn*(yn-1)+m,xn*(yn-1)+m-up+len2) = ty/2
! (3,3)
Ham(len2*2+m,m+up+len2*2) = -ty/2
Ham(len2*2+m,xn*(yn-1)+m+len2*2) = -ty/2*bcy
Ham(len2*2+xn*(yn-1)+m,m+len2*2) = -ty/2*bcy
Ham(len2*2+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*2) = -ty/2
! (4,4)
Ham(len2*3+m,m+up+len2*3) = ty/2
Ham(len2*3+m,xn*(yn-1)+m+len2*3) = ty/2*bcy
Ham(len2*3+xn*(yn-1)+m,m+len2*3) = ty/2*bcy
Ham(len2*3+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*3) = ty/2
end do
return
end subroutine diag
!============= non-diagonal matrices =====================
subroutine kinetic()
use param
integer l,m
!========= A_xsink_x =================
do l = 1,yn
do m = 2+(l-1)*xn,xn*l-1
! (1,2)----->(5,6) (a,up;b,up)
Ham(m,len2+m+1) = -im*ax/2 ! This term under conjugate will be left hopping
Ham(m,len2+m-1) = im*ax/2
! (2,1)----->(6,5) (b,up;a,up)
Ham(len2+m,m+1) = -im*ax/2
Ham(len2+m,m-1) = im*ax/2
! (3,4)----->(7,8) (a,down;b,down)
Ham(len2*2+m,len2*3+m+1) = im*ax/2
Ham(len2*2+m,len2*3+m-1) = -im*ax/2
! (4,3)----->(8,7) (b,down;a,down)
Ham(len2*3+m,len2*2+m+1) = im*ax/2
Ham(len2*3+m,len2*2+m-1) = -im*ax/2
end do
end do
!========== Right and Left boundry ==========================
do m = 1,yn
! (1,2)
Ham(m*xn,len2+m*xn-(xn-1)) = -im*ax/2*bcx ! right boundary hopping towards right boundary
Ham(m*xn,len2+m*xn-1) = im*ax/2 ! right boundary hopping towards left
Ham(1+(m-1)*xn,len2+1+(m-1)*xn+1) = -im*ax/2 ! left boundary hopping towards right
Ham(1+(m-1)*xn,len2+m*xn) = im*ax/2*bcx ! left boundary hopping towards right boundary
! (2,1)
Ham(len2+m*xn,m*xn-(xn-1)) = -im*ax/2*bcx
Ham(len2+m*xn,m*xn-1) = im*ax/2
Ham(len2+1+(m-1)*xn,1+(m-1)*xn+1) = -im*ax/2
Ham(len2+1+(m-1)*xn,m*xn) = im*ax/2*bcx
! (3,4)
Ham(len2*2+m*xn,m*xn-(xn-1)+len2*3) = im*ax/2*bcx
Ham(len2*2+m*xn,m*xn-1+len2*3) = -im*ax/2
Ham(len2*2+1+(m-1)*xn,1+(m-1)*xn+1+len2*3) = im*ax/2
Ham(len2*2+1+(m-1)*xn,m*xn+len2*3) = -im*ax/2*bcx
! (4,3)
Ham(len2*3+m*xn,m*xn-(xn-1)+len2*2) = im*ax/2*bcx
Ham(len2*3+m*xn,m*xn-1+len2*2) = -im*ax/2
Ham(len2*3+1+(m-1)*xn,1+(m-1)*xn+1+len2*2) = im*ax/2
Ham(len2*3+1+(m-1)*xn,m*xn+len2*2) = -im*ax/2*bcx
end do
! ============= A_ysink_y(Tested is correct) ======================
do m = xn+1,xn*(yn-1)
!(1,2)
Ham(m,len2+m+up) = ay/2
Ham(m,len2+m-up) = -ay/2
!(2,1)
Ham(len2+m,m+up) = -ay/2
Ham(len2+m,m-up) = ay/2
!(3,4)
Ham(len2*2+m,len2*3+m+up) = ay/2
Ham(len2*2+m,len2*3+m-up) = -ay/2
!(4,3)
Ham(len2*3+m,len2*2+m+up) = -ay/2
Ham(len2*3+m,len2*2+m-up) = ay/2
end do
!================= Upper and Blower boundry ==============
do m = 1,xn
! (1,2)
Ham(m,len2+m+up) = ay/2
Ham(m,len2+xn*(yn-1)+m) = -ay/2*bcy
Ham(xn*(yn-1)+m,len2+m) = ay/2*bcy
Ham(xn*(yn-1)+m,len2+xn*(yn-1)+m-up) = -ay/2
! (2,1)
Ham(len2+m,m+up) = -ay/2
Ham(len2+m,xn*(yn-1)+m) = ay/2*bcy
Ham(len2+xn*(yn-1)+m,m) = -ay/2*bcy
Ham(len2+xn*(yn-1)+m,xn*(yn-1)+m-up) = ay/2
! (3,4)
Ham(len2*2+m,m+up+len2*3) = ay/2
Ham(len2*2+m,xn*(yn-1)+m+len2*3) = -ay/2*bcy
Ham(len2*2+xn*(yn-1)+m,m+len2*3) = ay/2*bcy
Ham(len2*2+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*3) = -ay/2
! (4,3)
Ham(len2*3+m,m+up+len2*2) = -ay/2
Ham(len2*3+m,xn*(yn-1)+m+len2*2) = ay/2*bcy
Ham(len2*3+xn*(yn-1)+m,m+len2*2) = -ay/2*bcy
Ham(len2*3+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*2) = ay/2
end do
return
end subroutine kinetic
! ================ Spuerconduct pair term =====================
subroutine pair()
use param
integer m,l
!==== ====== delta_X Term ===============
do l = 1,yn
do m = 2+(l-1)*xn,xn*l-1
!(1,7)
Ham(m,len2*6+m+1) = -delx/2
Ham(m,len2*6+m-1) = -delx/2
! (2,8)
Ham(len2+m,len2*7+m+1) = -delx/2
Ham(len2+m,len2*7+m-1) = -delx/2
! (3,5)
Ham(len2*2+m,len2*4+m+1) = delx/2
Ham(len2*2+m,len2*4+m-1) = delx/2
! (4,6)
Ham(len2*3+m,len2*5+m+1) = delx/2
Ham(len2*3+m,len2*5+m-1) = delx/2
end do
end do
!========== X boundry ==========================
do m = 1,yn
! (1,7)
Ham(m*xn,len2*6+m*xn-(xn-1)) = -delx/2*bcx ! right boundary hopping towards right boundary
Ham(m*xn,len2*6+m*xn-1) = -delx/2 ! right boundary hopping towards left
Ham(1+(m-1)*xn,len2*6+1+(m-1)*xn+1) = -delx/2 ! left boundary hopping towards right (1,5402)
Ham(1+(m-1)*xn,len2*6+m*xn) = -delx/2*bcx ! left boundary hopping towards right bpundary
! (2,8)
Ham(len2+m*xn,m*xn-(xn-1)+len2*7) = -delx/2*bcx
Ham(len2+m*xn,m*xn-1+len2*7) = -delx/2
Ham(len2+1+(m-1)*xn,1+(m-1)*xn+1+len2*7) = -delx/2
Ham(len2+1+(m-1)*xn,m*xn+len2*7) = -delx/2*bcx
! (3,5)
Ham(len2*2+m*xn,m*xn-(xn-1)+len2*4) = delx/2*bcx
Ham(len2*2+m*xn,m*xn-1+len2*4) = delx/2
Ham(len2*2+1+(m-1)*xn,1+(m-1)*xn+1+len2*4) = delx/2
Ham(len2*2+1+(m-1)*xn,m*xn+len2*4) = delx/2*bcx
! (4,6)
Ham(len2*3+m*xn,m*xn-(xn-1)+len2*5) = delx/2*bcx
Ham(len2*3+m*xn,m*xn-1+len2*5) = delx/2
Ham(len2*3+1+(m-1)*xn,1+(m-1)*xn+1+len2*5) = delx/2
Ham(len2*3+1+(m-1)*xn,m*xn+len2*5) = delx/2*bcx
end do
!=========== delta_Y Term =========================
do m = xn+1,xn*(yn-1)
!(1,7)
Ham(m,len2*6+m+up) = -dely/2
Ham(m,len2*6+m-up) = -dely/2
!(2,8)
Ham(len2+m,len2*7+m+up) = -dely/2
Ham(len2+m,len2*7+m-up) = -dely/2
!(3,5)
Ham(len2*2+m,len2*4+m+up) = dely/2
Ham(len2*2+m,len2*4+m-up) = dely/2
!(4,6)
Ham(len2*3+m,len2*5+m+up) = dely/2
Ham(len2*3+m,len2*5+m-up) = dely/2
end do
!================= Y boundry ==============
do m = 1,xn
! (1,7)
Ham(m,len2*6+m+up) = -dely/2 ! up
Ham(m,len2*6+xn*(yn-1)+m) = -dely/2*bcy ! down
Ham(xn*(yn-1)+m,len2*6+m) = -dely/2*bcy ! up
Ham(xn*(yn-1)+m,len2*6+xn*(yn-1)+m-up) = -dely/2 !down
! (2,8)
Ham(len2+m,m+up+len2*7) = -dely/2
Ham(len2+m,xn*(yn-1)+m+len2*7) = -dely/2*bcy
Ham(len2+xn*(yn-1)+m,m+len2*7) = -dely/2*bcy
Ham(len2+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*7) = -dely/2
! (3,5)
Ham(len2*2+m,m+up+len2*4) = dely/2
Ham(len2*2+m,xn*(yn-1)+m+len2*4) = dely/2*bcy
Ham(len2*2+xn*(yn-1)+m,m+len2*4) = dely/2*bcy
Ham(len2*2+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*4) = dely/2
! (4,6)
Ham(len2*3+m,m+up+len2*5) = dely/2
Ham(len2*3+m,xn*(yn-1)+m+len2*5) = dely/2*bcy
Ham(len2*3+xn*(yn-1)+m,m+len2*5) = dely/2*bcy
Ham(len2*3+xn*(yn-1)+m,xn*(yn-1)+m-up+len2*5) = dely/2
end do
return
end subroutine pair
!============================================================
subroutine ishermitian()
use param
integer i,j
do i = 1,N
do j = 1,N
if (Ham(i,j) .ne. conjg(Ham(j,i)))then
open(16,file = 'hermitian.dat')
write(16,*)i,j
write(16,*)Ham(i,j)
write(16,*)Ham(j,i)
write(16,*)"===================="
close(16)
stop
end if
end do
end do
return
end subroutine ishermitian
!================================================================
subroutine eigsol()
use param
integer m
lwork = -1
liwork = -1
lrwork = -1
call cheevd('V','U',N,Ham,lda,w,work,lwork,rwork,lrwork,iwork,liwork,info)
lwork = min(2*N+N**2, int( work( 1 ) ) )
lrwork = min(1+5*N+2*N**2, int( rwork( 1 ) ) )
liwork = min(3+5*N, iwork( 1 ) )
call cheevd('V','U',N,Ham,lda,w,work,lwork,rwork,lrwork,iwork,liwork,info)
if( info .GT. 0 ) then
open(11,file="mes.txt",status="unknown")
write(11,*)'The algorithm failed to compute eigenvalues.'
close(11)
end if
open(12,file="eigval.dat",status="unknown")
do m = 1,N
write(12,*)m,w(m)
end do
close(12)
return
end subroutine eigsol

程序中通过对矩阵的对角化同时计算了wave function profile 和 LDOS,通过文件名即可区分对应的结果。博主服务器上安装了intel Fortran,所以编译命令为ifort -mkl file-name.f90,-mkl是为了调用矩阵对角化的程序cheevd。局域电子态密度的结果如下:
png
代码计算LDOS的过程如下:

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
!======================================================================
real function delta(x)
implicit none
real x
real::gamma = 0.005
delta = 1.0/3.1415926535*gamma/(x**2+gamma**2)
end function delta
!=========================== Local Density of State =============================
subroutine ldos()
use param
integer m,l,i
real s,E
real,external::delta
open(12,file="ldos.dat")
E = 0 ! zero energy Local Density of State
do m = 1,yn
do l = 1,xn
k = l + (m-1)*xn
s = 0
do i = 1,N
s = s + delta(w(i)-E)*(abs(Ham(k,i))**2+abs(Ham(k+len2,i))**2)&
+ delta(w(i)+E)*(abs(Ham(k+len2*6,i))**2+abs(Ham(k+len2*7,i))**2)
end do
write(12,*)m,l,s
end do
end do
close(12)
return
end subroutine ldos

具体是如何计算LDOS的可以看这里,虽然这个文件不是关于现在这个模型的,但是实现过程都是完全类似的,可做参考。

wave function profile

先暂时说一些跟文章有关的内容:这是一个高阶拓扑超导的模型,在拐角处会产生Majorana corner state,它们对应的能量是0,关于零能这个证据,在矩阵对角化后从本征值就可以看到。而LDOS的结果也是表明了在四个拐角处的态密度比其它位置要大的多。
那么如何从波函数的直接得到跟上面类似的结果呢?关于矩阵对角化后的本征值和本征矢量问题,在p-wave 超导体Vortex中的Majorana zero mode的博客中的手册中找到详细的解释,里面同时又关于BdG方程的矩阵哈密顿量构建的方法。
既然corner state对应的能量是0,那么只需要关注零能本征值对应的本征矢量即可,这里一共会有8个零能本征值(具体的可以去搞明白这篇文献),所以wave function profile的计算只需将8个零能本征值对应的波函数模方求和即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
!===========================================================
subroutine waveprofile()
use param
integer ix,iy,i,m1,m2
real re
open(22,file="waveprof.dat")
do iy = 1,yn
do ix = 1,xn
i = (iy - 1)*xn + ix
re = 0
do m1 = 0,7
do m2 = -3,4
re = re + abs(Ham(i + m1*len2,xn*yn*4 + m2))**2.0
end do
end do
write(22,*)ix,iy,re
end do
end do
close(22)
end subroutine waveprofile

这就是通过Fortran实现的wave function profile 计算,结果如下:
png
这里计算的模型来自于这篇文章Majorana Corner Modes in a High-Temperature Platform

公众号

相关内容均会在公众号进行同步,若对该Blog感兴趣,欢迎关注微信公众号。
{:.info}

QR Code

Email

yxliphy@gmail.com