蠕虫算法
简介
worm 程序提供了基于蠕虫算法的量子蒙特卡洛(QMC)模拟的完整通用实现,蠕虫算法由 N. Prokof’ev 及其合作者发明。从技术上讲,它是一个基于配分函数路径积分表示的连续时间 QMC 程序。
当前实现允许在任意晶格上模拟以下模型:
- 具有任意自旋大小、磁场和各向异性的量子自旋(无阻挫)模型
- 不存在符号问题的(软核)玻色模型
如有需要,可以添加对存在符号问题的模拟的支持。
运行模拟
教程中讨论了一个模拟示例。
输入参数
worm 程序使用此处讨论的通用输入参数。
专家参数
此外,还可以指定特定的模拟参数(只有在你明白其含义时才使用!):
| 参数 | 默认值 | 含义 |
|---|---|---|
| SKIP | 1 | 两次测量之间的蒙特卡洛扫描次数 |
| RESTRICT_MEASUREMENTS[N] | 若定义此参数,则只在量子数 N(粒子数)取该参数所给值的构型上进行测量。注意,模拟仍然在巨正则系综中进行,需要将化学势调到合适的范围,才能真正采样到具有所需粒子数的构型。 | |
| RESTRICT_MEASUREMENTS[Sz] | 若定义此参数,则只在量子数 Sz(磁化强度)取该参数所给值的构型上进行测量。注意,模拟仍然在巨正则系综中进行,需要将磁场调到合适的范围,才能真正采样到具有所需磁化强度的构型。 | |
| WORMS_PER_KINK | 1 | 决定每次扫描中蠕虫平均访问一个扭结的频率。 |
| MEASURE_GREEN | false | 标志,指示是否测量格林函数。请勿使用——该功能未经测试! |
编译时参数
此外,在编译时可以在文件 WRun.h 中定义以下变量
| 参数 | 含义 |
|---|---|
| NONLOCAL | 取消定义可加速仅含局域相互作用时的程序。 |
| USE_VECTOR | 定义后使用 std::vector 而非 std::list 作为数据结构。 |
| USE_SET | 定义后使用 std::set 而非 std::list 作为数据结构。 |
测量
worm 应用程序会测量以下观测量:
| 名称 | 描述 |
|---|---|
| Energy | 系统的总能量 |
| Energy Density | 每格点能量 |
| Density | 粒子数(对玻色模型) |
| Density^2 | 粒子数的平方(对玻色模型) |
| Stiffness | 系统的刚度(对玻色模型) |
| Green’s function | 格林函数(仅适用于局域相互作用) |
贡献者
以下人员为 worm 应用程序做出了贡献:
- Simon Trebst
- Matthias Troyer