跳至内容

MC-05 玻色子

玻色-哈伯德模型描述晶格上相互作用的玻色子:

H=−t∑⟨i,j⟩(ai†aj+h.c.)+U2∑ini(ni−1)−μ∑ini,H = -t \sum_{\langle i,j \rangle} (a_i^\dagger a_j + \text{h.c.}) + \frac{U}{2} \sum_i n_i(n_i-1) - \mu \sum_i n_i,

其中 tt 是跃迁振幅,UU 是在位排斥,μ\mu 是化学势。 在整数填充且 U/tU/t 很大时,系统是莫特绝缘体:玻色子被相互作用局域化,超流密度 ρs=0\rho_s = 0。 随着 t/Ut/U 增大,量子涨落最终会驱动系统转变为 ρs>0\rho_s > 0 的超流相。 本教程使用 ALPS 的蠕虫量子蒙特卡洛程序,在二维正方格子上、填充数 ⟨n⟩=1\langle n \rangle = 1(由 μ=U/2=0.5\mu = U/2 = 0.5 设定)的条件下确定这一量子相变。

跨越相变的超流密度

我们首先在 4×44 \times 4 格子上扫描一个较大的跃迁参数范围,观察超流密度 ρs\rho_s(在 ALPS 中称为 “Stiffness”)如何随相变演化。 希尔伯特空间在每个格点上截断到 Nmax=2 个玻色子,这在单位填充的莫特叶附近是一个很好的近似。

命令行

参数文件 parm5a:

LATTICE="square lattice"
L=4
MODEL="boson Hubbard"
NONLOCAL=0
U=1.0
mu=0.5
Nmax=2
T=0.1
SWEEPS=500000
THERMALIZATION=10000
{t=0.01;}
{t=0.02;}
{t=0.03;}
{t=0.04;}
{t=0.05;}
{t=0.06;}
{t=0.07;}
{t=0.08;}
{t=0.09;}
{t=0.1;}

NONLOCAL=0 关闭非局域测量,使输出保持简洁。

parameter2xml parm5a
worm --Tmin 10 --write-xml parm5a.in.xml

--Tmin 10 把检查点间隔设为 10 秒;--write-xml 会写出 XML 输出文件,pyalps 可以把它与 HDF5 结果一起读取。

Python

脚本 tutorial5a.py:

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot

parms = []
for t in [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1]:
    parms.append(
        {
            'LATTICE'        : "square lattice",
            'L'              : 4,
            'MODEL'          : "boson Hubbard",
            'NONLOCAL'       : 0,
            'U'              : 1.0,
            'mu'             : 0.5,
            'Nmax'           : 2,
            'T'              : 0.1,
            'SWEEPS'         : 500000,
            'THERMALIZATION' : 10000,
            't'              : t
        }
    )

input_file = pyalps.writeInputFiles('parm5a', parms)
pyalps.runApplication('worm', input_file, Tmin=10)

计算与作图

载入超流刚度,并把它作为跃迁参数的函数画出来:

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm5a'), 'Stiffness')
rhos = pyalps.collectXY(data, x='t', y='Stiffness')

plt.figure()
pyalps.plot.plot(rhos)
plt.xlabel('Hopping $t/U$')
plt.ylabel('Superfluid density $\\rho_s$')
plt.title('Bose-Hubbard model on a $4\\times 4$ lattice')
plt.show()

在小 t/Ut/U 下 ρs\rho_s 应当很小(与零一致),而在大 t/Ut/U 下增长到有限值,并在临界跃迁值 (t/U)c≈0.060(t/U)_c \approx 0.060 附近出现渡越。

定位临界点

为了更精确地确定 (t/U)c(t/U)_c,我们利用有限尺寸标度。 在量子临界点处,ρs∼L−(d+z−2)\rho_s \sim L^{-(d+z-2)},其中 d=2d=2 是维数,z=1z=1 是该普适类(三维 XY)的动力学指数。 对于 d=2d=2、z=1z=1,这给出 ρs∼L−1\rho_s \sim L^{-1},因此组合量 ρsL\rho_s L 在临界点处是无量纲的,不同 LL 的曲线会在 tct_c 处相交。

我们在预期临界点附近的细密跃迁参数网格上,模拟三种系统尺寸 L=4,6,8L = 4, 6, 8。

命令行

参数文件 parm5b:

LATTICE="square lattice"
MODEL="boson Hubbard"
NONLOCAL=0
U=1.0
mu=0.5
Nmax=2
T=0.05
SWEEPS=600000
THERMALIZATION=150000
{L=4; t=0.045;}
{L=4; t=0.05;}
{L=4; t=0.0525;}
{L=4; t=0.055;}
{L=4; t=0.0575;}
{L=4; t=0.06;}
{L=4; t=0.065;}
{L=6; t=0.045;}
{L=6; t=0.05;}
{L=6; t=0.0525;}
{L=6; t=0.055;}
{L=6; t=0.0575;}
{L=6; t=0.06;}
{L=6; t=0.065;}
{L=8; t=0.045;}
{L=8; t=0.05;}
{L=8; t=0.0525;}
{L=8; t=0.055;}
{L=8; t=0.0575;}
{L=8; t=0.06;}
{L=8; t=0.065;}

与 parm5a 相比,这里需要更低的温度(T=0.05T = 0.05)和更长的运行时间,才能清晰地分辨出交点。

parameter2xml parm5b
worm --Tmin 10 --write-xml parm5b.in.xml

Python

脚本 tutorial5b.py:

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot

parms = []
for L in [4, 6, 8]:
    for t in [0.045, 0.05, 0.0525, 0.055, 0.0575, 0.06, 0.065]:
        parms.append(
            {
                'LATTICE'        : "square lattice",
                'L'              : L,
                'MODEL'          : "boson Hubbard",
                'NONLOCAL'       : 0,
                'U'              : 1.0,
                'mu'             : 0.5,
                'Nmax'           : 2,
                'T'              : 0.05,
                'SWEEPS'         : 600000,
                'THERMALIZATION' : 150000,
                't'              : t
            }
        )

input_file = pyalps.writeInputFiles('parm5b', parms)
pyalps.runApplication('worm', input_file, Tmin=10)

计算与作图

载入每个系统尺寸的刚度,乘以 LL 之后作图:

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm5b'), 'Stiffness')
rhos = pyalps.collectXY(data, x='t', y='Stiffness', foreach=['L'])

for s in rhos:
    s.y = s.y * float(s.props['L'])

plt.figure()
pyalps.plot.plot(rhos)
plt.xlabel('Hopping $t/U$')
plt.ylabel('$\\rho_s L$')
plt.legend()
plt.title('Finite-size scaling: Bose-Hubbard model')
plt.show()

L=4,6,8L = 4, 6, 8 的曲线应当在 (t/U)c(t/U)_c 附近相交。 二维玻色-哈伯德模型在单位填充下的精确结果是 (t/U)c=0.05974…(t/U)_c = 0.05974\ldots

思考题

  • 在粗扫描中,ρs\rho_s 从哪个跃迁值开始明显不为零?这与 ρsL\rho_s L 图中的交点一致吗?
  • ρsL\rho_s L 曲线在哪里相交?你的估计值与精确值 (t/U)c=0.05974(t/U)_c = 0.05974 相比如何?
  • 有限温度的模拟会系统性地高估 (t/U)c(t/U)_c。这是为什么?如果把 TT 进一步降低,交点会如何变化?
  • 试着把 Nmax 增大到 3。结果变化有多大?在什么样的填充或相互作用强度下,Nmax=2 会变成一个很差的近似?
  • (附加)用更大的系统尺寸重复有限尺寸标度分析。交点的质量会如何改善?