经典蒙特卡洛

经典蒙特卡洛模拟

作为经典蒙特卡洛的简单示例,我们考虑在二维伊辛模型中通过数值模拟来揭示其在低温下的相变。

首先,我们需要导入所需的包。

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

然后我们准备输入参数。这里我们考虑不同温度下的 $4\times 4$、$8\times 8$、$16\times 16$ 尺寸的晶格。

parms = []
for l in [4,8,16]:
    for t in [5.0,4.5,4.0,3.5,3.0,2.9,2.8,2.7]:
        parms.append(
            {
              'LATTICE'        : "square lattice",
              'T'              : t,
              'J'              : 1 ,
              'THERMALIZATION' : 1000,
              'SWEEPS'         : 400000,
              'UPDATE'         : "cluster",
              'MODEL'          : "Ising",
              'L'              : l
            }
    )
    for t in [2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2.0, 1.9, 1.8, 1.7, 1.6, 1.5, 1.2]:
        parms.append(
            {
              'LATTICE'        : "square lattice",
              'T'              : t,
              'J'              : 1,
              'THERMALIZATION' : 1000,
              'SWEEPS'         : 40000,
              'UPDATE'         : "cluster",
              'MODEL'          : "Ising",
              'L'              : l
            }
    )

之后,我们使用 Python 来输入 ALPS 预期的运行参数格式,并告诉它使用输入文件运行自旋蒙特卡洛模拟(spinmc):

#写入输入文件并运行模拟
input_file = pyalps.writeInputFiles('parm7a',parms)
pyalps.runApplication('spinmc',input_file,Tmin=5)

模拟完成后,我们可以评估和绘制结果。

pyalps.evaluateSpinMC(pyalps.getResultFiles(prefix='parm7a'))

#加载磁化强度并将其作为温度 T 的函数收集
data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm7a'),['|Magnetization|'])
magnetization_abs = pyalps.collectXY(data,x='T',y='|Magnetization|',foreach=['L'])

#制作图表
plt.figure()
pyalps.plot.plot(magnetization_abs)
plt.xlabel('温度 $T$')
plt.ylabel('磁化强度 $|m|$')
plt.title('二维伊辛模型')
plt.show()

我们应该得到以下二维伊辛模型磁化强度的图形:

alt text

演示视频