对称性约束$\mathbf{k}\cdot \mathbf{p}$哈密顿量(算法解析)
我在前面先预告了一版对称性约束$\mathbf{k}\cdot \mathbf{p}$哈密顿量(预告版),这里就详细的整理一下这个代码的思路和每一行代码的想法.{:.info} 理论背景其实对称性约束$\mathbf{k}\cdot\mathbf{p}$哈密顿量的核心公式就是 C_mH(\mathbf{k})C_m^{-1}=H(R_m\mathbf{k})\label{q1}而接下来我们需要知道的是两件事情,第一就是 R_m\mathbf{k}\rightarrow ?第二就是$C_m$操作的矩阵表示,这两个就是计算所需要的输入参数. 通过公式(\ref{q1})我们可以明白,当确定了操作的表示之后,那么表示的维度就与哈密顿量的维度是相同的了,因为公式(\ref{q1})其实看起来不单单是个抽象的表达式,你也可以将它看做是矩阵运算,这当然是没问题的. 当知道了上面两个输入参数之后,接下来就是如何表示哈密顿量了.其实也很简单,既然我是要求具体的形式,那么我就先将它展开成一个一般的形式,然后在通过对称性进行约束,也就是公式(\ref{q1})的作用了.那么接下来就将哈密顿量展开 H(k_x,k_y,k_z)=1\times\Gamma_1 + k_x\Gamma_2 + k_y\Gamma_3 + k_z\Gamma_4 + k_xk_y\Gamma_5 + k_xk_z\Gamma_6 + k_yk_z\Gamma_7 + \cdots其实也就将哈密顿量类似于Taylor级数一样展开,只不过这里有两点不同,第一点是多项式前面的展开系数都是1,因为我们最终总是要通过具体的参数来表示前面的系数,所以这里有没有个常数的系数其实并没有什么影响,我们总可以$3\times c_1\rightarrow c_1$.第二点不同就是这里不但有多项式的展开,同样还有矩阵展开$\Gamma_i$,这里的每一个矩阵的维度都与我们选择的表示的维度是相同的. 在程序中我们想要实现这个哈密顿量展开就需要一点小技巧,首先我们知道哈密度量一定是厄米的,所以我们可以将厄米矩阵分解成一个对称矩阵和反对称矩阵的和 H=A+i\times B\\ H^\dagger=A-i\times B\\ A^T=A\quad...
对称性约束Tight binding模型
这篇Blog想要整理一下自己在学习对称性约束Tight binding模型时候的一些笔记.{:.info} 紧束缚近似其实紧束缚方法的的核心思想就是使用原子的波函数来构造构造一个基函数,有了这个基函数就可以将哈密顿量表示为矩阵形式,那么剩下的问题就是如何求解这个矩阵的本征值和本征态。但是这些基函数不一定就是完备的,所以这个地方就是紧束缚近似的近似性所在。通常情况下这个基函数的数量当然是越多越好,毕竟这样可以尽量让基函数hi完备的,所以选择合适数量的基函数在固体系统中来描述低能附近的物理就是tight binding(TB)好坏程度的衡量。因此要想使用TB成功的描述我们要研究的问题,那么久必须让这个基函数尽量接近于完备,如果你恰好找到了一组完备的基函数,那么此时我们通过基函数构建处的哈密顿量的矩阵得到的解就是精确解,而不是近似解。但是在固体系统中我们通常只是关心费米面附近的物理,毕竟也只有低能附近的电子会对很多物理性质产生影响,所以通常都是使用价电子的轨道波函数来构建我们想要的基函数。 假设原胞内有$M$个原子,每个原子贡献处$l_N$个轨道来构建基函数。这里将第$m(m=1,2,\cdots,M)$个原子的第$l(l=1,2,\cdots,...
对称性约束$\mathbf{k}\cdot \mathbf{p}$哈密顿量(预告版)
之前的学习都是直接使用别人文章中的哈密顿量,因为自己的研究模式就是这样,但是仍然项自己可以学会在高对称点上通过对称性约束的方式来构建$\mathbf{k}\cdot\mathbf{p}$哈密顿量,这里就整理一下自己通过代码实现对称性约束$\mathbf{k}\cdot\mathbf{p}$的方法.暂时先预告一下,贴一下结果,等我忙完手中的工作在将思路和每一行代码实现思路详细的整理出来.{:.info} 代码实现由于Blog不能很好的支持Mathematica的代码,所以我这里就只好截屏图片显示了. 最终的结果为 \left( \begin{array}{cccc} c_1 & 0 & \frac{1}{3} \left(-2 \sqrt{3} c_3+\left(\sqrt{3}-3 i\right) c_2\right) \left(k_y+i k_x\right) & \left(c_4+i c_5\right) k_z \\ 0 & c_1 & \left(c_4+i c_5\right) k_z & \frac{1}{3} \left(-2 \sqrt{3} c_2+\left(\sqrt{3}+3 i\right) c_3\right) \left(k_y-i k_x\right) \\ \frac{1}{3} \left(-2 \sqrt{3} c_3+\left(\sqrt{3}+3 i\right) c_2\right) \left(k_y-i k_x\right) & \left(c_4-i c_5\right) k_z & c_1 & 0 \\ \left(c_4-i c_5\right) k_z & \frac{1}{3} \left(-2 \sqrt{3} c_2+\left(\sqrt{3}-3 i\right) c_3\right) \left(k_y+i k_x\right) & 0 & c_1 \\ \end{array} \right)结语虽然最近重新树立了一遍群论,但是发现还是要实际做一点东西才能让自己对学到的知识有更深刻的理解。后面看努力一下能不能实现约束Tight...
Chiral-Symmetric Higher-Order Topological Phases of Matter
这里整理了一下自己组会讲文献的PPT,包括自己对文章中一些内容的认识和理解.{:.info} 正文 参考 1.Chiral-Symmetric Higher-Order Topological Phases of Matter 公众号相关内容均会在公众号进行同步,若对该Blog感兴趣,欢迎关注微信公众号。{:.info} Email yxliphy@gmail.com
Julia 读取Wannier90hr数据
最近准备完全使用Julia进行科研了,所以就学习一下用该语言进行文件数据的读写如何进行,这里先是一个简单的尝试,就像用Julia读取紧束缚的hr数据来构建模型,顺便熟悉一下julia。{:.info} 代码展示123456789101112131415161718192021222324252627282930313233343536373839404142434445function Wannier90Read(filenam) f1 = open(filenam) data = readlines(f1) Hr = zeros(Float64,length(data[5:end]),7) hn = 0 hopnum = 0 degen = [] i0 = 1 for da in data[2:end] # 直接读取hr的主体数据 if i0 == 1 temp = strip(da) # 先去除左右两端空格 temp = replace(temp,r"\s +"=>",") # 将空格转换为逗号 temp = split(temp,[',']) # 按照逗号进行分割 hn = map(x->parse(Float64,x),temp) # 将分割后的数据变化为浮点数 elseif i0 == 2 temp = strip(da) # 先去除左右两端空格 temp = replace(temp,r"\s +"=>",") # 将空格转换为逗号 temp = split(temp,[',']) # 按照逗号进行分割 hopnum = map(x->parse(Float64,x),temp) # 将分割后的数据变化为浮点数 elseif i0==3 temp = strip(da) # 先去除左右两端空格 ...
BBH Nested Wilson loop计算(Python 并行)
这里就使用Python写了一下Nested Wilson loop的并行程序,因为前面考虑的体系其实就是一个$4\times 4$的哈密顿量,如果体系变大以及计算撒点数量变大的时候,Python还是会有点慢,这里就给一个并行的版本,并顺便看一下Python怎么实现进行并行。{:.info} Nested Wilson Loop关于Nested Wilson loop的计算可以参考Electric multipole moments, topological multipole moment pumping, and chiral hinge states in crystalline insulators 这篇文章,这里主要说一下自己在学习计算的时候踩过的坑。 与计算Wilson loop相同,这里最主要的仍然是找到一个Wannier band basis,也就是文章的中的公式 \rvert w_{x,\mathbf{k}}^j\rangle=\sum_{n=1}^\text{Nocc}\rvert u^n_\mathbf{k}\rangle[v_{x,\mathbf{k}}^j]^n其实在做计算的时候,最让人困扰的不过是公式中的一大堆符号对应的到底是什么,这里就来讲这个公式拆解开,一步一步的讲清楚里面的含义。这里假设你已经知道为什么要计算Nested Wilson loop,我在这里就简单的阐述一下。首先要是体系的Wilson loop计算对应的Wannier哈密顿量的能带是有能隙的,也就是说你的体系是4带模型,那么当占据态是2条能带的时候,每个占据态能带会对应着一个Wannier center,比如BHZ模型的两条占据态能带对应的Wannier band就是相互交叉的,而且因为Wilson loop与边界态之间的拓扑等价性,TI是有边界态的,所以其对应的Wilson loop在形状上就与边界态类似。而对于高阶拓扑相,首先就是要使得边界态打开能隙,那么相对应的就是其Wilson loop计算得到的Wannier center随着某个动量参数的演化是不会相互交叉的,这一点在上面BBH模型中已经计算过了,所以此时就可以对某一个单独的Wannier band计算它的Nested Wilson...