边界极化

 

在计算发生边界拓扑相变的高阶拓扑绝缘体的时候, 有时候会遇到需要计算体系的边界极化, 其实也就是要在一个cylinder结构上计算其对应的Wilson loop, 并计算每个格点上对极化的贡献, 这里就先详细的整理一下理论背景, 后面给一个详细的例子来给出计算记过.

在计算发生边界拓扑相变的高阶拓扑绝缘体的时候, 有时候会遇到需要计算体系的边界极化, 其实也就是要在一个cylinder结构上计算其对应的Wilson loop, 并计算每个格点上对极化的贡献, 这里就先详细的整理一下理论背景, 后面给一个详细的例子来给出计算记过.

边界极化

首先考虑一个2D系统$\mathbf{k}=(k_x,k_y)$, 将其一个方向变换到实空间

\[c_{k,\alpha}\rightarrow c_{k_x,R_y,\alpha}\]

此时二次量子化形式下的哈密顿量为

\[\begin{align} H = \sum_{k_x} c^\dagger_{k_x,R_y,\alpha} [h_{k_x}]^{R_y,\alpha,R'_y,\beta} c_{k_x,R'_y,\beta}, \label{eq1} \end{align}\]

这里的$\alpha,\beta\in 1,\cdots N_{\rm orb}$为轨道指标, $R_y.R_y’\in 1\cdots N$则是$y$方向开边界之后的格点指标, 因为此时$x$方向仍然是周期的, 所以$k_x$还是一个好量子数, 此时计算需要的哈密顿量矩阵为

\[\begin{align} [h_{k_x}]^{R_y,\alpha,R'_y,\beta} = \sum_n [u^n_{k_x}]^{R_y,\alpha} \epsilon_{n,k_x} [u^{*n}_{k_x}]^{R'_y\beta}, \label{eq2} \end{align}\]

这里的求和指标$n\in 1\cdots N_{\rm orb}\times N_y$. 如果二维系统的$x$方向和$y$方向都是周期的, 那么$h(k_x,k_y)$是有$N_{\rm orb}$个轨道的哈密顿量, 那么此时方程\eqref{eq2}中$h(k_x)$描述的就是一个具有$N_{\rm orb}\times R_y$个占据态能带的准1D体系, 与重学Wilson loop 中一样, 此时将哈密顿量进行对角化

\[\begin{align} H = \sum_{n,{k_x}} \gamma^\dagger_{n,{k_x}} \epsilon_{n,k_x} \gamma_{n,{k_x}}, \end{align}\]

此时准粒子算符与电子算符之间的变换关系为

\[\begin{align} \gamma_{n,k_x} = \sum_{R_y,\alpha} [u^{*n}_{k_x}]^{R_y,\alpha} c_{k_x,R_y,\alpha}. \label{eq4} \end{align}\]

这里就直接利用重学Wilson loop 中计算Wilson loop的方法了, 可以得到

\[\begin{align} [G_{k_x}]^{mn} \equiv \sum_{R_y,\alpha}[u^{*m}_{k_x+\Delta k_x}]^{R_y,\alpha} [u^n_{k_x}]^{R_y,\alpha}, \end{align}\]

此时虽然沿着$y$方向是开放边界, 但是$k_x$还是好量子数, 所以还是可以沿着$k_x$方向计算Wilson loop的, 只不过此时占据态的数量为为$N_y\times N_{\rm orb}$, 而且对应的可以得到此时的Hybird Wannier function

\[\begin{align} \rvert \Psi^j_{R_x}\rangle = \frac{1}{\sqrt{N_x}} \sum_{n=1}^{N_{occ} \times N_y}\sum_{k_x} \left[ \nu^j_{k_x} \right]^n e^{-i k_x R_x} \gamma^\dagger_{n,k_x}\rvert 0\rangle, \label{eq3} \end{align}\]

这里$j\in 1\cdots N_{\rm occ}\times N_y, R_x\in 1\cdots N_x$, $[v_{k_x}^j]^n$是第$j$个Wilson loop本征态$\rvert v_{k_x}^j\rangle$的第$n$个分量, $\gamma^\dagger_{n,k_x}$如公式\eqref{eq4}所示. 在得到了Hybrid Wannier函数之后, 就可以得到其对应的几率密度

\[\begin{align} \rho^{j,R_x}(R_y) &= \sum_{R'_x,\alpha} \langle \Psi^j_{R_x}\rvert \phi^{R_y, \alpha}_{R'_x}\rangle \langle\phi^{R_y, \alpha}_{R'_x}\rvert\Psi^j_{R_x}\rangle\nonumber\\ &=\frac{1}{N_x} \sum_{k_x, \alpha} \left| [u^n_{k_x}]^{R_y, \alpha}[\nu^j_{k_x}]^n\right|^2\label{eqq} \end{align}\]

通过$\rho^{j,R_x}(R_y)$就可以进一步在$y$方向的格点上解析出极化在$x$方向的分量. 公式\eqref{eqq}中的符号含义可能需要搞清楚,其中$[u_{k_x}^n]^{R_y,\alpha}$表示的是沿着$y$方向开边界之后,哈密顿量本征态,$n$表示的是第$n$个占据态,而在$[v_{k_x}^j]^n$这里的$n$表示的则是第$j$个Wilson loop本征态的第$n$个分量,所以这里的符号就有点让人迷茫。程序计算的话就是

@everywhere function rho(yn::Int64,h0::Float64,dir::Int64)
    # 计算所有格点上的极化分布
    # yn 开边界方向原胞数. h0 层间耦合强度
    hn::Int64 = 8
    N::Int64 = yn*hn
    Nocc::Int64 = Int(N/2)
    kn::Int64 = 50
    re1 = zeros(Float64,yn)
    # re1 = SharedArray(zeros(Float64,yn))
    ham_wan = Wannier(h0,yn,dir) # 得到Wannier哈密顿量
    val2,vec2 = eigen(ham_wan)
    val2 = map(real,val2)/(2*pi)
    for ik = -kn:kn
        kx = ik*pi/kn
        if dir == 0
            ham = openx(h0,yn,kx)
        else
            ham = openy(h0,yn,kx)
        end
        val1,vec1 = eigen(ham)
        for j1 = 1:Nocc # Wannier哈密顿量要对所有本征矢量求和
            for n1 = 1:Nocc # 哈密顿量要对所有占据态求和
                for ibeta = 1:hn # 对一个格点上的本征矢量所有分量求和
                    for iy = 1:yn # 计算每个格点上的边界极化
                        re1[iy] = re1[iy] + abs(vec1[(iy - 1)*hn + ibeta,n1]*vec2[n1,j1])^2*val2[j1]
                    end
                end
            end 
        end 
    end
    return re1/(2*kn + 1)
end

特别有用的一点就是可以得到在边界上$R_y=1,N_y$,是否存在具有的Hybrid Wannier函数. 通过几率密度$\rho^{j,R_x}(R_y)$可以计算极化在$x$方向的分量

\[\begin{align} p_x(R_y) = \sum_j \rho^j(R_y) \nu_x^j \label{eq5} \end{align}\]

从而就可以得到极化在$y$边界上是如何分布的, 通过变化格点$R_y$即可. 为了得到边界极化, 可以从边界中点到边界的上对极化分布进行求和

\[p_x^{\rm edge, y}=\sum_{i=1}^{N_y/2}p_x(i_y)\]

从而就可以得到边界极化. 上面的这些过程同样也可以是沿着$y$方向开边界进行计算的。

png

参考

公众号

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

png