紧束缚模型中的二维SSH模型,包含原胞能带,边界态,角态以及边界态本征态分布

在凝聚态物理领域,紧束缚模型为我们理解材料的电子结构提供了有力的框架。今天咱们就聚焦其中的二维SSH模型,深入探究原胞能带、边界态、角态以及边界态本征态分布这些有趣的概念。

二维SSH模型基础

二维SSH模型是在紧束缚近似下构建的,它描述了电子在二维晶格上的运动。想象一个由两种不同原子组成的二维晶格,电子在原子间跳跃,这种跳跃用紧束缚近似来描述,相邻原子间的跳跃积分决定了电子的行为。

紧束缚模型中的二维SSH模型,包含原胞能带,边界态,角态以及边界态本征态分布

为了在代码层面实现这个模型,我们可以使用Python结合numpy库来处理矩阵运算。以下是构建二维SSH模型哈密顿量的简单代码片段:

import numpy as np


def construct_hamiltonian(Lx, Ly, t1, t2):
    N = Lx * Ly
    H = np.zeros((N, N), dtype=complex)
    for i in range(Lx):
        for j in range(Ly):
            index = i * Ly + j
            # 最近邻跳跃
            if i < Lx - 1:
                H[index, index + Ly] = t1
                H[index + Ly, index] = np.conj(t1)
            if j < Ly - 1:
                H[index, index + 1] = t2
                H[index + 1, index] = np.conj(t2)
    return H

这里,LxLy分别是晶格在x和y方向的尺寸,t1t2是不同方向的跳跃积分。这段代码通过遍历晶格中的每个格点,根据跳跃规则填充哈密顿量矩阵。

原胞能带

原胞能带反映了电子在周期性晶格中的能量分布。我们可以通过计算哈密顿量的本征值来得到能带结构。在代码中,这可以借助numpylinalg.eigh函数实现:

Lx = 10
Ly = 10
t1 = 1.0
t2 = 0.8
H = construct_hamiltonian(Lx, Ly, t1, t2)
eigenvalues, eigenvectors = np.linalg.eigh(H)

通过计算得到的eigenvalues就是系统的能量本征值,对应着原胞能带。我们可以将这些能量值绘制成能带图,直观地看到电子的能量分布情况。不同的跳跃积分t1t2会导致能带结构发生变化,例如能隙的开合。如果t1t2差异较大,可能会出现较宽的能隙,这对材料的电学性质有着重要影响。

边界态

边界态是指在系统边界处局域化的电子态。在二维SSH模型中,边界态的出现与系统的拓扑性质相关。为了研究边界态,我们可以在晶格边界设置特殊的条件。假设我们有一个有限大小的二维晶格,在边界处电子的跳跃方式可能与内部不同。

def construct_hamiltonian_with_boundary(Lx, Ly, t1, t2, boundary_t1, boundary_t2):
    N = Lx * Ly
    H = np.zeros((N, N), dtype=complex)
    for i in range(Lx):
        for j in range(Ly):
            index = i * Ly + j
            if i < Lx - 1:
                if i == 0 or i == Lx - 2:
                    H[index, index + Ly] = boundary_t1
                    H[index + Ly, index] = np.conj(boundary_t1)
                else:
                    H[index, index + Ly] = t1
                    H[index + Ly, index] = np.conj(t1)
            if j < Ly - 1:
                if j == 0 or j == Ly - 2:
                    H[index, index + 1] = boundary_t2
                    H[index + 1, index] = np.conj(boundary_t2)
                else:
                    H[index, index + 1] = t2
                    H[index + 1, index] = np.conj(t2)
    return H

上述代码中,我们通过引入boundaryt1boundaryt2来描述边界处的跳跃积分。计算这样的哈密顿量的本征值和本征向量后,我们会发现一些能量本征值处于能隙之中,这些就是边界态对应的能量。边界态电子的波函数在边界处有较大的概率分布,而在内部迅速衰减,这体现了边界态的局域化特性。

角态

角态是边界态在晶格角点处的特殊情况。在二维SSH模型中,特定条件下会出现角态。与边界态类似,角态的出现也与系统的拓扑和边界条件紧密相关。想象晶格的四个角点,电子在这些角点处的跳跃和束缚情况与其他位置不同。

def construct_hamiltonian_with_corner(Lx, Ly, t1, t2, boundary_t1, boundary_t2, corner_t1, corner_t2):
    N = Lx * Ly
    H = np.zeros((N, N), dtype=complex)
    for i in range(Lx):
        for j in range(Ly):
            index = i * Ly + j
            if i < Lx - 1:
                if i == 0:
                    if j == 0:
                        H[index, index + Ly] = corner_t1
                        H[index + Ly, index] = np.conj(corner_t1)
                    elif j == Ly - 1:
                        H[index, index + Ly] = corner_t1
                        H[index + Ly, index] = np.conj(corner_t1)
                    else:
                        H[index, index + Ly] = boundary_t1
                        H[index + Ly, index] = np.conj(boundary_t1)
                elif i == Lx - 2:
                    if j == 0:
                        H[index, index + Ly] = corner_t1
                        H[index + Ly, index] = np.conj(corner_t1)
                    elif j == Ly - 1:
                        H[index, index + Ly] = corner_t1
                        H[index + Ly, index] = np.conj(corner_t1)
                    else:
                        H[index, index + Ly] = boundary_t1
                        H[index + Ly, index] = np.conj(boundary_t1)
                else:
                    H[index, index + Ly] = t1
                    H[index + Ly, index] = np.conj(t1)
            if j < Ly - 1:
                if j == 0:
                    if i == 0:
                        H[index, index + 1] = corner_t2
                        H[index + 1, index] = np.conj(corner_t2)
                    elif i == Lx - 1:
                        H[index, index + 1] = corner_t2
                        H[index + 1, index] = np.conj(corner_t2)
                    else:
                        H[index, index + 1] = boundary_t2
                        H[index + 1, index] = np.conj(boundary_t2)
                elif j == Ly - 2:
                    if i == 0:
                        H[index, index + 1] = corner_t2
                        H[index + 1, index] = np.conj(corner_t2)
                    elif i == Lx - 1:
                        H[index, index + 1] = corner_t2
                        H[index + 1, index] = np.conj(corner_t2)
                    else:
                        H[index, index + 1] = boundary_t2
                        H[index + 1, index] = np.conj(boundary_t2)
                else:
                    H[index, index + 1] = t2
                    H[index + 1, index] = np.conj(t2)
    return H

这里我们进一步细化了哈密顿量的构建,针对角点设置了特定的跳跃积分cornert1cornert2。通过对角点处跳跃积分的调整,我们可以观察到角态的出现和消失。角态电子的波函数高度局域在角点附近,这使得角态在量子信息处理等领域有着潜在的应用价值。

边界态本征态分布

边界态本征态分布描述了边界态电子在晶格上的概率分布情况。我们可以通过计算边界态对应的本征向量来得到这种分布。

Lx = 10
Ly = 10
t1 = 1.0
t2 = 0.8
boundary_t1 = 0.5
boundary_t2 = 0.6
H = construct_hamiltonian_with_boundary(Lx, Ly, t1, t2, boundary_t1, boundary_t2)
eigenvalues, eigenvectors = np.linalg.eigh(H)
# 找到边界态对应的本征向量
boundary_state_indices = np.where((eigenvalues > -0.1) & (eigenvalues < 0.1))[0]
for index in boundary_state_indices:
    boundary_state_vector = eigenvectors[:, index]
    probability_distribution = np.abs(boundary_state_vector) ** 2
    # 这里可以将概率分布绘制成图像,直观展示边界态本征态分布

在上述代码中,我们首先确定了边界态对应的能量范围(这里简单设为[-0.1, 0.1],实际需根据具体能带结构调整),然后提取出这些边界态对应的本征向量。通过计算本征向量的模平方,得到边界态电子在各个格点上的概率分布。这种分布能让我们清晰地看到边界态电子主要集中在哪些区域,进一步理解边界态的物理特性。

通过对二维SSH模型中原胞能带、边界态、角态以及边界态本征态分布的探索,我们不仅深入了解了这个模型的物理内涵,还通过代码实现对其进行了数值模拟和分析。这为进一步研究相关拓扑材料的性质和潜在应用奠定了基础。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐