两种方法计算Chern Number
计算Chern数是最初学习拓扑物理都会遇到的问题,正好在假期空闲的时候自己学习了一下Chern数的数值计算方法,在博客上记录一下希望可以帮助到别人。{:.info}具体的计算方法和细节就不在这里说明了,只要是想学习计算Chern数的肯定了解它在凝聚态物理中的角色,而计算的细节也会在后面的参考文献中给出,只是展示一下结果。 Julia语言计算Chern numberVersion1这个方法是直接用定义直接计算的结果,但是可能会遇到波函数规范选择的问题,会导致结果有误,而具体的规范问题,我并不懂,所以一般我会选择第二种方法来计算,也就是后面参考文献中介绍的方法。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374import PkgPkg.add("LinearAlgebra")Pkg.add("PyPlot")using LinearAlgebra,PyPlotfunction matSet(kx::Float64,ky::Float64)::Matrix{ComplexF64} m0::Float64 = -1.0 t1::Float64 = 1.0 t2::Float64 = 1.0 t3::Float64 = 0.5 # 这里选取的是量子反常Hall效应的模型 ham = zeros(ComplexF64,2,2) ham[1,1] = m0 + 2*t3*sin(kx) + 2*t3*sin(ky) + 2*t2*cos(kx + ky) ham[2,2] = -(m0 + 2*t3*sin(kx) + 2*t3*sin(ky) + 2*t2*cos(kx + ky)) ham[1,2] = 2*t1*cos(kx) - 1im*2*t1*cos(ky) ham[2,1] = conj(ham[1,2]) return...
Kane Mele model zigzag 边界态的计算
接触量子自旋霍尔效应很久了,但是一直也都是在square lattice上做计算,从来没有认真的在六角点阵上计算过拓扑的内容,正好最近在看文献的过程中需要在石墨烯机构上进行,就从最基本的Kane-Mele 模型出发学习怎么在六角点阵上写出最近邻以及次近邻的哈密顿量。{:.info}关于最近邻之间的hopping在前面石墨烯的边界态文章中已经仔细考虑过,包括cell的选取还有原子的编号,在这里。现在唯一的不同就是要考虑次近邻之间的hopping。在这里暂时并未考虑Rashbo自旋轨道耦合。 基本设定 蓝色虚线框中是选择的一个大cell,在y方向是有限长度,在x方向是无限的,所以$k_x$是个好量子数,这种边界态叫zigzag;当x方向开边界,y方向无限长时的边界态叫armchair,可以参考这里。格点之间的hopping可以在一个大cell之内,可会存在大cell之间的hopping,在下面会逐一展示。关于Kane-Mele模型中的$v_{ij}$的示意如上图_hopping_蓝色箭头所示,当格点连线在hopping的右侧时$v_{ij}=-1$,在左侧时$v_{ij}=1$;将一个大cell划分成更小的周期重复结构,如上图右下图所示,并分别编号。第一张图所示的是最近邻hopping的选择。 H = t_1\sum_{\alpha}c_{i\alpha}^\dagger c_{j\alpha})+it_2\sum_{\alpha\beta}v_{i,j}s^z_{\alpha\beta}c_{i\alpha}^\dagger c_{j\beta}与之前的Graphene模型相比较,这里是有两个自旋的,不过唯一的影响的只是第二项,对于上下自旋的不同相差一个符号,并不会对hopping的分析有影响。 次近邻hopping 在虚线框中的是一个大cell,在右侧的是一个小cell,在写Hamiltonian的时候是以小cell为基本单元进行的。 首先可以看到,无论是边界上的小cell还是非边界上的小cell,都会具有如图中紫色虚线箭头所示的次近邻hopping,而且这些hopping是在同一个大cell内的。这种情况中格点连线都在hopping线的右端$v_{ij} =...
石墨烯哈密顿量构造及边界态计算
想通过石墨烯重新学习一下拓扑,以此来记录学习成果。{:.success} 石墨烯的结构石墨烯的元胞是六角蜂窝状的,它的基元包含两个原子,将红黑表示的位置放在一起,则表示它的一个基元。以水平和垂直方向建立直角坐标系,并将它的晶格常数(红黑位置的距离)设置为a,基矢为绿色箭头表示$\vec{v_1}=(\sqrt{3}a,0),\vec{v_2}=(-\sqrt{3}/2a,3/2a)$。若只考虑最紧邻位置间的hopping,那么实空间中的Hamiltonian为 H=-t\sum_{}a_i^\dagger b_j - t\sum_{}b_i^\dagger a_j$$表示的是格点上最近邻的位置。先忘记上面说过的基元的概念,同时忽略图中黑红位置的区别,将所有的格点位置视为相同,那么可以发现每个格点都是有三个最近邻的,这就是石墨烯六角结构和平时经常使用正方点阵的一个区别,正方点阵每个格点都是有四个最近邻的(上下左右,而且它们是相互垂直的),石墨烯结构中则不然,三个最近邻位置的夹角是$120^o$,这三个最近邻的矢量表示为 \vec{e_1}=(0,a)\quad \vec{e_2}=(-\frac{\sqrt{3}}{2}a,-\frac{a}{2})\quad\vec{e_3}=(\frac{\sqrt{3}}{2}a,-\frac{a}{2})最近邻的三个基矢确定时候,可以将上面的Hamiltonian写成更加具体的一个形式 H=-t\sum_ia_\vec{r_i}^\dagger b_{\vec{r_i}+\vec{e_1}}-t\sum_ia_\vec{r_i}^\dagger b_{\vec{r_i}+\vec{e_2}}-t\sum_ia_\vec{r_i}^\dagger b_{\vec{r_i}+\vec{e_3}}+h.c(h.c是前半部分的厄密共轭) 同样的,实空间格点上的算符,可以通过Fourier变换,变换到k空间,反过来也是可以的,变换关系为 a_k=\frac{1}{\sqrt{N}}\sum_ja_je^{i\vec{k}\cdot\vec{r} }\quad...
Fortran使用中笔记
将看到的Fortran中常用的一些语法记录起来,方便查阅。 Fortran中常用的库函数总结1. Cheevd 厄密矩阵本征值与本征矢的求解 2. getrf,getri getrf 对一个矩阵进行LU分解 getri 计算由LU分解后矩阵的逆 Fortran中一些混乱概念的收集1.Fortran中格式化输出总结 write(,’(I3)’)num 表示以3个字符宽度来在屏幕上显示num,若num是一个长度小于等于3的内容,均可以正确显示,当它的长度大于3时,则无法正确显示其结果,屏幕上会输出*号,表示无法正确的显示 整数输出(I)整数的输出用字母I来控制。通用格式为 rIw,其中r代表重复的次数,I代表整数(Integer),w控制表示的长度。 例如 3I10:3个整数,每个整数的显示长度是10个宽度单位,他们会在同一行中显示(若是在写入文件的时候)。 浮点数输出(F) 浮点数的控制方法和整数相同,唯一多的控制内容是小数点后面的显示位数 rFw.d 在这里d表示小数点后面用多少位来显示,它的长度是包含在w中的 例如:write(*,’(1F6.3)’)3.5,每个浮点数控制长度为6,小数点后面显示3位,而对于小数点前面的整数部分,则由空格来补足其长度 科学计数(E)E是用来显示科学计数的方式 rEw.d,一般情况下科学计数法下宽度描述必须满足w>=d + 7 该控制并不是我们常用的科学计数法显示,他会将数据控制显示为aEb的形式,此时a被归一化为0.1—>1.0...
Majorana Corner State in High Temperature Superconductor
最近刚刚学习了julia, 手头上也正好在重复一篇文章,就正好拿新学习的内容一边温习一边做研究。{:.success} 导入函数库1234567# Import external package that used in program import Pkg# Pkg.add("PyPlot")# Pkg.add("LinearAlgebra")# Pkg.add("CPUTime")...
涠洲岛之行
...