ATAT 完全使用教程
COMPUTATIONAL MATERIALS SCIENCE
ATAT 完全使用教程
基于 v3.36 官方文档与示例
本书是一本面向第一次接触 ATAT 的研究者的完整教程。不同于文件罗列或源码索引,本书按照学习 ATAT 的自然流程组织内容:从"ATAT是什么"出发,逐步深入到 Cluster Expansion 原理、SQS 建模、Monte Carlo 模拟、DFT 接口,最终到达科研实战。每个知识点都说明是什么、为什么、什么时候用、怎么用,形成完整的学习闭环。所有内容基于 ATAT v3.36 官方文档和示例的理解整理,80% 分析解释 + 20% 命令引用。
📑 目录
本书面向第一次接触 ATAT 的研究者,从零开始讲解 ATAT 的安装、原理、工作流程和科研实战。
所有内容基于 ATAT v3.36 官方文档和示例理解整理,不是文件罗列,而是学习路径。
第一章 · ATAT是什么?—— 合金理论自动化工具包概览
第二章 · ATAT安装 —— 从编译到环境配置
第三章 · ATAT目录结构 —— 快速了解软件体系
第四章 · Cluster Expansion 原理 —— 从DFT到合金热力学
第五章 · 完整案例:Cu-Au合金 —— 从晶格到相图
第六章 · SQS 特殊准随机结构 —— 随机固溶体建模
第七章 · Monte Carlo 模拟 —— 有限温度热力学
第八章 · ATAT与VASP接口 —— DFT计算自动化
第九章 · 命令大全 —— 按功能分类的程序速查
第十章 · 示例文件总结 —— 每个example学什么
第十一章 · 科研实战案例 —— 高熵合金/催化/相图
第十二章 · ATAT最佳实践 —— 经验与技巧
第十三章 · 常见错误与解决方案 —— 踩坑指南
第一章 · ATAT是什么?—— 合金理论自动化工具包
核心概念
ATAT(Alloy-Theoretic Automated Toolkit)是由 Axel van de Walle 开发的合金理论计算自动化工具包。
它将第一性原理(DFT)计算与统计力学方法相结合,实现从电子结构到合金相图的全自动多尺度模拟。
1.1 ATAT 能解决什么问题?
在材料科学中,我们经常需要回答这些问题:
• 合金的相图是什么样的?在哪個温度下会发生相变?
• 有序-无序转变的温度是多少?
• 掺杂元素在合金中如何分布?是均匀分散还是偏聚?
• 高熵合金的短程序(SRO)如何影响力学性能?
• 催化剂的表面偏析行为?
如果只用 DFT 计算,每计算一个构型就需要数小时到数天,而合金的可能构型数量随原子数指数增长。
ATAT 通过 Cluster Expansion 方法,用几十到几百个 DFT 计算拟合出一个可预测任意构型能量的模型,
然后用 Monte Carlo 模拟在秒级时间内探索数百万个构型,得到有限温度下的热力学性质。
1.2 ATAT 的四大核心方法
| 方法 | 解决的问题 | 核心程序 |
|---|---|---|
| Cluster Expansion<br>(团簇展开) | 将合金能量表示为晶格占位构型的函数,<br>用少量 DFT 计算拟合任意构型的能量 | corrdump → maps → csfit |
| SQS<br>(特殊准随机结构) | 用一个小超胞模拟完全随机固溶体的<br>统计性质,用于单点 DFT 计算 | mcsqs, gensqs |
| Monte Carlo<br>(蒙特卡洛) | 在 Cluster Expansion 能量模型上进行<br>大规模采样,模拟有限温度下的热力学 | emc2, memc2, phb |
| Phase Diagram<br>(相图计算) | 通过 Monte Carlo 计算自由能,<br>确定相界和相变温度 | phb, emc2 |
1.3 ATAT 完整工作流
ATAT 的核心工作流可以分为六个阶段
从晶体结构出发,经过团簇生成、训练结构枚举、DFT 计算、ECI 拟合,最终到 Monte Carlo 模拟和相图预测。
下面这张流程图展示了所有程序之间的数据流向和依赖关系。
1.4 为什么材料计算需要 ATAT?
DFT 的局限:一个 32 原子的二元合金超胞有 2³² ≈ 40 亿种可能构型,DFT 不可能全部计算。
Cluster Expansion 的优势:用几十个 DFT 计算拟合 ECI(Effective Cluster Interaction),
然后可以在毫秒级时间内预测任意构型的能量,精度可达 ~meV/atom。
Monte Carlo 的优势:在 ECI 模型上进行 Metropolis 采样,模拟百万级原子在有限温度下的统计行为,
得到自由能、比热、短程序参数等热力学量。
💡 提示
ATAT 不是替代 DFT,而是扩展 DFT。DFT 提供训练数据,ATAT 提供统计力学框架,两者结合才能研究合金的有限温度行为。
第二章 · ATAT 安装 —— 从编译到环境配置
安装概览
ATAT 是 C++ 编写的开源软件,通过编译源码安装。需要 C++ 编译器(g++ 或 icpc),可选 MPI 支持。
安装过程包括:配置编译选项 → 编译源码 → 安装可执行文件到指定目录。
2.1 系统依赖
| 依赖 | 用途 | 是否必需 |
|---|---|---|
| g++ (GCC C++ 编译器) | 编译 ATAT 源码 | 必需 |
| MPI (OpenMPI/MPICH) | mcsqs/memc2 并行计算 | 可选但推荐 |
| VASP/ABINIT/QE 等 | DFT 能量计算 | 必需(任选其一) |
| csh/tcsh | 运行 glue 脚本 | 必需(glue 脚本用 csh 编写) |
| perl | patchtail 等辅助脚本 | 推荐 |
2.2 安装步骤
Step 1: 准备安装目录
ATAT 需要将编译好的可执行文件放入一个 bin 目录。建议创建:
mkdir -p ~/software/atat3_36/atat/bin
Step 2: 编辑 makefile
修改 ATAT 根目录下的 makefile 文件,设置 BINDIR 指向你的 bin 目录:
BINDIR=/home/yourname/software/atat3_36/atat/bin
# 编译器设置
CXX=g++
# MPI 设置(可选)
MPICXX=mpiCC -DATAT_MPI
Step 3: 编译和安装
在 ATAT 根目录下执行 make 命令。foolproof 脚本会自动检查编译器是否可用:
cd ~/software/atat3_36/atat
make # 普通编译
make mpi # MPI 编译(可选)
make install # 安装到 BINDIR
⚠️ 注意
makefile 中的 BINDIR 必须是已存在的目录,否则 foolproof.sh 会提示创建。
如果编译器检查失败但你知道编译器可用,使用 make force 跳过检查。
2.3 环境变量设置
安装完成后,需要将 ATAT 的 bin 目录加入 PATH,并设置 ATAT 数据目录的环境变量:
# 加入 ~/.bashrc
export PATH=$PATH:/home/yourname/software/atat3_36/atat/bin
export ATATDIR=/home/yourname/software/atat3_36/atat
💡 提示
make install 会自动创建 ~/.atat.rc 文件,记录 ATAT 的安装路径。
ATAT 程序在运行时会读取这个文件来定位数据文件(如 elements.in、masses.in 等)。
如果移动了 ATAT 目录,需要重新运行 make install 或手动更新此文件。
2.4 验证安装
corrdump -h # 应该显示帮助信息
maps -h # 应该显示帮助信息
mcsqs -h # 应该显示帮助信息(如果编译了 MPI 版本)
which emc2 # 确认程序在 PATH 中
第三章 · ATAT 目录结构 —— 快速了解软件体系
ATAT 安装后的目录结构反映了它的功能模块划分。理解目录结构有助于快速找到需要的文件和工具。
| 目录/文件 | 用途 | 重要程度 |
|---|---|---|
| <code>bin/</code> | 所有编译好的可执行程序 | ⭐⭐⭐⭐⭐ |
| <code>data/</code> | 辅助数据:元素表、原子量、半径、晶格模板 | ⭐⭐⭐⭐ |
| <code>data/str/</code> | 46种晶体结构模板(.lat文件) | ⭐⭐⭐⭐ |
| <code>data/sqsdb/</code> | SQS数据库(预计算的SQS结构) | ⭐⭐⭐ |
| <code>data/wyckoff/</code> | 219个空间群的Wyckoff位置 | ⭐⭐⭐ |
| <code>doc/</code> | 手册(manual.pdf)和参考文献 | ⭐⭐⭐⭐⭐ |
| <code>examples/</code> | 示例文件:Cu-Au合金完整案例 | ⭐⭐⭐⭐⭐ |
| <code>glue/vasp/</code> | VASP接口脚本 | ⭐⭐⭐⭐⭐ |
| <code>glue/abinit/</code> | ABINIT接口脚本 | ⭐⭐⭐ |
| <code>glue/qe/</code> | Quantum ESPRESSO接口脚本 | ⭐⭐⭐ |
| <code>glue/jobctrl/</code> | 作业调度工具(pollmach等) | ⭐⭐⭐⭐ |
| <code>src/</code> | 全部源代码(C++) | ⭐(开发用) |
| <code>template/</code> | HTML模板 | ⭐ |
| <code>makefile</code> | 编译配置 | ⭐⭐⭐ |
| <code>readme</code> | 项目简介 | ⭐⭐ |
💡 提示
新手最重要的三个目录:doc/(读手册)、examples/(跑案例)、bin/(用程序)。
data/str/ 中的 .lat 文件是各种晶格结构的模板,可以直接复制到工作目录使用。
src/ 目录有几百个 C++ 源文件,不需要阅读,除非你想修改 ATAT 源码。
第四章 · Cluster Expansion 原理 —— 从 DFT 到合金热力学
核心问题
一个 N 原子的二元合金有 2^N 种可能的原子排布方式。DFT 每次只能计算一种。
Cluster Expansion(团簇展开)的核心思想是:用一种数学形式,用少量 DFT 计算拟合出能预测所有构型能量的模型。
4.1 为什么不能全部用 DFT?
假设一个 32 原子的二元合金(如 Cu₃Au),可能的构型数量为 2³² ≈ 4.3×10⁹ 种。
即使每个构型的 DFT 计算只需 1 小时,全部计算也需要 49 万年。
但实际上,这些构型的能量并不是独立的——它们遵循某种物理规律。
Cluster Expansion 就是发现和利用这种规律的方法。
4.2 Cluster Expansion 的数学本质
Cluster Expansion 将合金的能量 E 展开为晶格占位变量 σᵢ(σᵢ=+1 表示 A 原子,σᵢ=-1 表示 B 原子)的多体相互作用之和:
E(σ) = J₀ + Σᵢ Jᵢσᵢ + Σᵢⱼ Jᵢⱼσᵢσⱼ + Σᵢⱼₖ Jᵢⱼₖσᵢσⱼσₖ + ...
其中:
• J₀:常数项(空团簇),对应平均能量
• Jᵢ:点项(point term),单个原子对能量的贡献
• Jᵢⱼ:对相互作用(pair),两体团簇的贡献
• Jᵢⱼₖ:三体相互作用(triplet),以此类推
这些 J 系数就是 ECI(Effective Cluster Interaction,有效团簇相互作用)。
一旦确定了 ECI,就可以用上面的公式瞬间计算任意构型的能量。
4.3 ATAT 中 Cluster Expansion 的五个步骤

4.4 关键概念:ECI 的物理意义
ECI 的符号和大小反映了原子间相互作用的性质:
• J₀(常数项):两种纯组分的平均能量,决定了合金的整体能量水平
• J_pairs(对相互作用):正值表示同种原子倾向分开(有序化),负值表示同种原子倾向聚集(相分离)
• J_triplets(三体)和更高阶项:通常远小于对相互作用,但忽略它们会降低预测精度
在 Cu-Au 合金的例子中,对相互作用通常在 meV 量级,远小于 DFT 总能量(~eV 量级),
这说明合金的形成能是各种原子排布之间微小能量差异的竞争结果。
4.5 训练集的选择:MAPS 算法
训练集的质量决定了 Cluster Expansion 的预测精度。ATAT 使用 MAPS(Mitchell Algorithm for Phase Stability)算法来选择训练结构:
• MAPS 从一个初始结构集合开始,逐步添加结构,每次选择预测不确定性最大的结构
• 这确保了训练集覆盖了能量分布最关键的构型空间
• MAPS 会持续运行直到预测量(如基态能量、有序化温度)收敛
maps 程序的核心参数:
• -d:最大团簇直径(Å),控制团簇的截断范围
• 迭代终止条件:当新预测的基态能量与已有基态偏差小于阈值时停止
💡 提示
训练集大小:通常需要 30~100 个 DFT 计算即可获得可靠的 ECI。
如果 ECI 拟合的交叉验证(CV)分数低于 0.01 eV/atom,说明模型质量很好。
如果 CV 分数过高,需要增加训练结构或调整团簇截断。
第五章 · 完整案例:Cu-Au 合金 —— 从晶格到相图
案例概述
Cu-Au 合金是 Cluster Expansion 的经典案例。FCC 晶格上 Cu 和 Au 的有序-无序转变是理解合金相变的标准模型。
ATAT 的 examples/ 目录提供了完整的 Cu-Au 案例,包括晶格定义、VASP 参数模板、Monte Carlo 输入和输出。
下面我们逐步讲解每一步的目的、输入、输出和文件关系。
5.1 Step 1:定义晶格 —— lat.in
所有计算始于晶格定义文件 lat.in。它定义了母晶格的几何信息和原子占位。
3.8 3.8 3.8 90 90 90 # a b c α β γ (晶格常数3.8Å, 立方)
0 0.5 0.5 # 晶格矢量1 (FCC primitive)
0.5 0 0.5 # 晶格矢量2
0.5 0.5 0 # 晶格矢量3
0 0 0 Cu,Au # 基矢位置: 坐标 + 可占据的原子种类
lat.in 格式说明:
• 第1行:晶格常数 a, b, c(Å)和角度 α, β, γ(度)
• 第2-4行:三个晶格矢量(以晶格常数为单位)
• 第5行起:每个基矢位置的分数坐标和可占据的原子种类(逗号分隔)
这个文件定义了 FCC 母晶格,在 (0,0,0) 位置可以被 Cu 或 Au 占据。
ATAT 会自动根据这个定义生成各种超胞构型。
5.2 Step 2:生成团簇 —— corrdump
corrdump 是 Cluster Expansion 的第一步,它枚举晶格中所有对称性不等价的团簇
(点、最近邻对、次近邻对、三体...),输出到 clusters.out 文件。
corrdump -l=lat.in -2=2.687 -3=3.8 -noe -nop
参数说明:
• -l=lat.in:指定晶格定义文件
• -2=2.687:对团簇(pair)的最大距离(Å)。应设为第一近邻和第二近邻之间的距离
—— FCC 中第一近邻 ~2.687Å(√2×a/2),第二近邻 ~3.800Å(a)
• -3=3.8:三体团簇(triplet)的最大距离(Å)
• -noe:不包含空团簇(empty cluster)
• -nop:不包含点团簇(point cluster)
输出文件 clusters.out:包含每个团簇的对称性多重度、直径、顶点数和顶点坐标。
例如 Cu-Au FCC 案例中,clusters.out 包含 8 个团簇(1个空团簇 + 1个点团簇 + 6个对团簇)。
⚠️ 注意
-2= 参数的设置非常关键!
如果设得太小(< 第一邻近距离),corrdump 找不到任何对团簇,会段错误。
如果设得太大,团簇数量过多,后续计算效率降低。
推荐值:设为第一近邻和第二近邻距离之间的值。
例如,FCC 结构 a=3.8Å 时,第一近邻 = 2.687Å,第二近邻 = 3.8Å,建议 -2=3.0~3.5。
5.3 Step 3:生成训练结构 —— maps
maps 使用 MAPS 算法自动选择最优的训练结构集合。
它会迭代地选择信息量最大的结构,并创建子目录执行 DFT 计算。
maps -d=6.5 # 运行 maps,最大团簇直径 6.5Å
# maps 会创建子目录 00/, 01/, 02/... 每个包含一个 str.out
maps 的工作方式:
1. 从 clusters.out 读取团簇定义
2. 选择一个初始结构集合
3. 在每个子目录中创建 str.out(结构文件)和 wait(等待计算标志)
4. 等待 DFT 计算完成后,读取能量,拟合 ECI
5. 根据 ECI 预测不确定性,选择下一个结构
6. 重复直到收敛
maps 创建的目录结构:
• 00/str.out, 00/wait — 第一个训练结构
• 01/str.out, 01/wait — 第二个训练结构
• ...
• energy — 所有结构的 DFT 能量(maps 完成后自动生成)
5.4 Step 4:运行 DFT 计算 —— runstruct_vasp + pollmach
maps 在每个子目录中创建了 wait 文件后,需要用 pollmach 来自动执行 DFT 计算。
pollmach 的工作原理:
1. 扫描所有子目录,找到包含 wait 文件的目录
2. 进入该目录,删除 wait 文件(防止重复执行)
3. 执行 runstruct_vasp(或其他 DFT 接口脚本)
4. runstruct_vasp 将 str.out 转换为 POSCAR,运行 VASP,提取能量写入 energy 文件
5. 继续扫描下一个 wait 文件
pollmach runstruct_vasp # 在单机模式下顺序执行
# 或
pollmach -m ~/.machines.rc runstruct_vasp # 多机并行模式
VASP 参数模板(vasp.wrap):控制 DFT 计算的精度和设置。
ATAT 提供了多个模板用于不同场景:
| 模板文件 | INCAR 设置 | 适用场景 |
|---|---|---|
| vasp.wrap | ISIF=3, IBRION=2, NSW=41, DOSTATIC | 全弛豫(体积+形状+离子)+ 静态计算 |
| cvvasp.wrap | ISIF=4, IBRION=2, DOSTATIC | 定形状体积弛豫 + 静态计算 |
| fvasp.wrap | IBRION=-1, LREAL=AUTO | 快速静态计算(不弛豫) |
| csvasp.wrap | ISMEAR=-5, IBRION=-1 | 高精度静态计算(四面体方法) |
| svasp.wrap | ISMEAR=-5, IBRION=-1, KPPRA=1000 | 简单静态计算 |
| abinit.wrap | ABINIT 参数 | 使用 ABINIT 替代 VASP |
💡 提示
对于体积变化较小的合金体系(如 FCC 金属),使用 cvvasp.wrap(ISIF=4)通常比 vasp.wrap(ISIF=3)更稳定。
DOSTATIC 指令非常重要:弛豫后自动执行一次高精度静态计算,确保能量精度。
KPPRA=1000 表示自动设置 k 点密度为每倒易原子 1000 个 k 点。
5.5 Step 5:拟合 ECI —— csfit 和 fit.out
所有 DFT 计算完成后,maps 会自动调用 csfit(或手动执行)来拟合 ECI。
拟合结果写入 eci.out 和 fit.out。
csfit -d=6.5 # 拟合 ECI,最大团簇直径 6.5Å
# 输出: eci.out (ECI 系数) fit.out (拟合报告)
eci.out 示例(Cu-Au 案例,8个ECI值,单位 eV):
0.006143 # ECI 0: 常数项 (J₀)
-0.018951 # ECI 1: 点项
0.011470 # ECI 2: 最近邻对 (2.687Å)
-0.009881 # ECI 3: 次近邻对 (3.800Å)
0.000023 # ECI 4: 第三近邻对
0.002117 # ECI 5: 第四近邻对
-0.003311 # ECI 6: 第五近邻对
-0.002577 # ECI 7: 第六近邻对
ECI 值的解读:
• 所有 ECI 值都在 meV 量级,说明合金形成能是微小的能量差异
• ECI[2] = +11.5 meV(最近邻对正值):同种原子排在一起能量升高 → 倾向有序化
• ECI[3] = -9.9 meV(次近邻对负值):次近邻倾向于同种原子聚集
• 高层 ECI 通常 < 2 meV,说明对相互作用主导了 Cu-Au 的合金行为
5.6 Step 6:预测基态与 Monte Carlo
有了 ECI,就可以预测任意构型的能量,找到基态结构,并进行 Monte Carlo 模拟。
# 预测基态结构
clusterpredict -d=6.5
# 输出: gs_str.out (基态结构列表)
# 基态检查
checkrelax -d=6.5
gs_str.out 示例解读(Cu-Au 案例,6个基态):
• 基态0:纯 Cu(全部 Cu 原子)
• 基态1:Cu₃Au(L1₂ 结构,有序 FCC 超胞)
• 基态2:CuAu(L1₀ 结构,层状交替排列)
• 基态3-5:其他中间成分的基态结构
每个基态以 end 结束。文件包含超胞晶格矢量和每个原子的坐标+种类。
5.7 完整 Cu-Au 工作流总结
第六章 · SQS 特殊准随机结构 —— 随机固溶体建模
核心问题
高熵合金、随机固溶体等材料中,不同元素随机分布在晶格上。
DFT 计算只能处理周期性的小超胞,如何用一个小超胞近似随机固溶体的统计性质?
答案就是 SQS(Special Quasirandom Structure,特殊准随机结构)。
6.1 什么是 SQS?
SQS 的核心思想:构造一个小超胞,使得其中原子排布的对关联函数(pair correlation function)
前若干壳层与完全随机固溶体完全匹配。
简单来说:
• 完全随机固溶体:每个原子位置独立随机地被 A 或 B 占据
• SQS:在有限大小的超胞中排列原子,使得短程的原子关联统计与随机固溶体尽可能一致
• 这样,用 SQS 做一次 DFT 计算,就能获得近似随机固溶体的性质
物理意义:合金的很多性质(如形成能、晶格常数、电子结构)主要由短程化学环境决定。
如果 SQS 准确复现了前几个近邻壳层的对关联和多体关联,DFT 计算的结果就能代表随机固溶体。
6.2 SQS vs Cluster Expansion:两种方法的区别
| 特性 | SQS | Cluster Expansion |
|---|---|---|
| 目的 | 用一个小超胞<strong>近似</strong>随机固溶体 | 构建能<strong>预测任意构型</strong>能量的模型 |
| DFT计算量 | 1次 | 30~100次 |
| 温度效应 | 仅0K | 通过Monte Carlo可模拟有限温度 |
| 适用场景 | 快速评估随机固溶体的形成能、<br>晶格常数、电子结构 | 研究有序-无序转变、相图、<br>短程序、温度依赖的热力学 |
| 程序 | mcsqs, gensqs | corrdump+maps+csfit+emc2 |
💡 提示
什么时候用 SQS,什么时候用 Cluster Expansion?
• 如果只关心随机固溶体的基态性质(形成能、晶格常数),用 SQS 就够了
• 如果关心有序-无序转变、相图、短程序,必须用 Cluster Expansion + Monte Carlo
• 两者可以结合:先用 SQS 快速评估,确认值得深入研究后再做完整的 Cluster Expansion
6.3 mcsqs 的使用方法
mcsqs 是 ATAT 中生成 SQS 的主要程序。它需要两个输入:
1. rndstr.in(随机结构模板):定义母晶格和原子占位
2. clusters.out(团簇定义):定义需要匹配的关联函数范围
# Step 1: 准备 rndstr.in
# 格式与 lat.in 类似,但原子种类用概率表示
# 例如: 0 0 0 Cu=0.5,Au=0.5 表示此位置 Cu 和 Au 各占 50%
# Step 2: 生成 clusters.out
corrdump -l=rndstr.in -2=3.0 -3=3.8 -noe -nop
# Step 3: 运行 mcsqs
mcsqs -n=32 # 生成 32 原子的 SQS
# 或
mcsqs -n=64 -rc # 生成 64 原子 SQS,包含所有团簇关联
# 输出:
# bestsqs.out — 最佳 SQS 结构(分数坐标)
# sqscell.out — 最佳 SQS 的晶胞(POSCAR 格式)
# clusters.out — 更新后的团簇信息(含匹配质量)
6.4 mcsqs 关键参数
| 参数 | 含义 | 建议值 |
|---|---|---|
| <code>-n=N</code> | SQS 超胞中的原子数 | 二元:32~64;多元:100~200 |
| <code>-rc</code> | 包含所有团簇类型的关联函数 | 推荐使用,匹配更全面 |
| <code>-2=x</code> | 对团簇最大距离(Å) | 同 corrdump 的 -2 参数 |
| <code>-3=x</code> | 三体团簇最大距离(Å) | 同 corrdump 的 -3 参数 |
| <code>-lv=N</code> | 团簇展开的壳层数 | 默认即可 |
6.5 判断 SQS 质量
mcsqs 运行结束后,检查 clusters.out 中的匹配质量:
• objective function(目标函数值):越小越好,通常 < 0.001 表示优秀
• 每个团簇的 perfect_match 标记:表示该团簇的关联函数是否与随机值完全匹配
• 如果重要的近邻对团簇没有 perfect_match,考虑增大超胞或调整团簇截断
6.6 预计算的 SQS 数据库
ATAT 的 data/sqsdb/ 目录包含了大量预计算的 SQS 结构,涵盖 30+ 种常见的晶格类型:
• FCC_A1, BCC_A2, HCP_A3 — 常见金属结构
• ROCKSALT_B1, ZINCBLENDE_B3, WURTZITE_B4 — 化合物结构
• PEROVSKITE_E21, HEUSLER_L21, MGCU2_C15 — 功能材料结构
• LIQUID — 液态结构
• 以及多种成分比例(如 AUCU_L10 的 50/50, GAMMA_L12 的 75/25)
每个子目录包含:
• rndstr.skel — 随机结构模板
• parentlat.in — 母晶格定义
• sqsdb_lev=... — 预计算的 SQS 结构文件
• equiv.in — 等价位置信息
如果体系与数据库中某个结构匹配,可以直接使用预计算的结果,大幅节省时间。
💡 提示
对于2D 材料(表面/界面),SQS 只需要在面内(a、b轴)方向构造超胞,
c 轴方向保持原胞大小。ATAT 的 SQS 工具支持这种部分无序的建模。
第七章 · Monte Carlo 模拟 —— 有限温度热力学
核心概念
Cluster Expansion 给出了 T=0K 时的能量模型。要研究有限温度下的热力学行为,
需要在 ECI 模型上进行 Monte Carlo(MC)模拟。
ATAT 提供了两个主要 MC 程序:emc2(正则系综)和 memc2(MPI 并行版)。
7.1 Monte Carlo 模拟的基本原理
在固定温度 T 和化学势 μ 下,MC 模拟通过 Metropolis 算法对原子构型进行采样:
1. 随机选择一个原子,尝试将其种类从 A 变为 B(或反之)
2. 用 ECI 模型计算能量变化 ΔE
3. 如果 ΔE < 0(能量降低),接受此变化
4. 如果 ΔE > 0,以概率 exp(-ΔE/kBT) 接受(热涨落)
5. 重复数百万步,收集统计信息
最终得到在给定 (T, μ) 下的平衡态统计性质:
• 平均成分(浓度)
• 平均能量(内能)
• 比热(能量涨落)
• 短程序参数(Warren-Cowley 参数)
7.2 emc2 的使用方法
emc2 需要在包含 lat.in、clusters.out 和 eci.out 的目录中运行。
它扫描温度和化学势范围,输出每个 (T, μ) 点的平衡态性质。
emc2 -T0=50 -T1=700 -dT=25 \
-mu0=0.5 -mu1=1.5 -dmu=0.05 \
-er=40 -gs=0 -o=mc.out \
-k=8.617e-5 -dx=0.005
参数说明:
• -T0/T1/dT:温度范围(50K~700K)和步长(25K)
• -mu0/mu1/dmu:化学势范围(0.5~1.5 eV)和步长(0.05 eV)
• -er=40:Ewald 求和半径(Å),用于静电相互作用
• -gs=0:从基态 0 开始模拟
• -o=mc.out:输出文件
• -k=8.617e-5:Boltzmann 常数(eV/K)
• -dx=0.005:原子位移步长(Å),用于原子弛豫
💡 提示
超胞大小:MC 模拟通常使用比训练结构更大的超胞(如 256~1024 原子),以减小有限尺寸效应。
如果超胞太小,相变会被"抹平",无法观察到尖锐的相变信号。
对于一级相变,成分-化学势曲线会出现明显的跳跃(不连续)。
对于二级相变(有序-无序),比热会出现 λ 形峰。
7.3 phb —— 相界计算
phb(Phase Boundary)程序专门用于计算两个相之间的相界(共存线)。
它通过计算两个相的自由能,找到自由能相等的条件。
phb -dT=10 -dmu=0.001 -ltep=1e-3 \
-er=40 -gs1=0 -gs2=1 \
-o=phb.out -k=8.617e-5 -dx=1e-4
参数说明:
• -gs1=0 -gs2=1:计算基态 0 和基态 1 之间的相界
• -ltep=1e-3:低温展开精度
• -dT=10:温度步长(K)
• -dmu=0.001:化学势步长(eV)
phb 使用 低温展开(Low Temperature Expansion)方法,
在低温下比直接 MC 模拟更高效。
7.4 输出文件的解读
| 输出文件 | 内容 | 用途 |
|---|---|---|
| mc.out | 每个 (T,μ) 点的成分、能量、比热等 | 绘制相图、分析相变 |
| phb.out | 两个相之间的相界坐标 | 绘制相界曲线 |
| gs_str.out | 基态结构列表 | 验证基态预测 |
| clusters.out | 团簇信息(含匹配质量) | 检查 SQS 质量 |
第八章 · ATAT 与 VASP 接口 —— DFT 计算自动化
接口概览
ATAT 通过 glue 脚本实现与 DFT 代码的自动化交互。VASP 是最常用的 DFT 引擎,
ATAT 提供了完整的 VASP 接口套件。理解这些接口是高效使用 ATAT 的关键。
8.1 接口工作流
8.2 vasp.wrap 文件详解
vasp.wrap 是 ATAT 控制 VASP 计算的核心文件。它使用 [SECTION] 标记来组织不同的 VASP 输入部分:
[INCAR] 段:定义 VASP 的 INCAR 参数
[KPOINTS] 段:定义 k 点网格
[POTCAR] 段:定义赝势信息
ATAT 特有的 sspp 预处理器会在运行前展开 vasp.wrap 中的宏和变量。
[INCAR]
PREC = high
ISMEAR = 1
SIGMA = 0.1
NSW=41
IBRION = 2
ISIF = 3
KPPRA = 1000 # ATAT 自动 k 点密度
USEPOT = PAWPBE # 使用 PAW-PBE 赝势
DOSTATIC # 弛豫后自动执行静态计算
[KPOINTS]
# KPPRA=1000 自动设置,无需手动指定
8.3 关键 VASP 接口脚本
| 脚本 | 功能 | 典型用法 |
|---|---|---|
| <code>runstruct_vasp</code> | 将 str.out 转为 VASP 输入并运行 | pollmach runstruct_vasp |
| <code>ezvasp</code> | 从 str.out 创建 VASP 输入文件 | ezvasp str.out |
| <code>extract_vasp</code> | 从 VASP 输出提取能量 | 自动被 runstruct_vasp 调用 |
| <code>cleanvasp</code> | 清理 VASP 输出文件,释放空间 | cleanvasp |
| <code>set_default_pp</code> | 设置默认赝势(POTCAR) | set_default_pp |
| <code>doberryvasp</code> | Berry phase 计算 | doberryvasp |
| <code>checkerr_vasp</code> | 检查 VASP 计算是否出错 | 自动被调用 |
| <code>robustrelax_vasp</code> | 鲁棒弛豫(多次弛豫) | robustrelax_vasp |
| <code>xdat2str</code> | 将 XDATCAR 转为 ATAT 结构 | xdat2str |
8.4 作业调度系统
ATAT 的作业调度工具(glue/jobctrl/)实现了 DFT 计算的自动化管理:
核心工具:
• pollmach:主调度器。扫描 wait 文件,分配计算任务到本地或远程机器
• minload:返回当前负载最低的机器(用于多机环境)
• chl:列出所有机器的负载状态
• node:在远程机器上执行命令,确保工作目录一致
• sspp:符号预处理器,用于展开 vasp.wrap 中的宏
~/.machines.rc 配置文件:
定义可用的计算节点、负载检测方式和命令前缀。
文件格式:每行两个字段(用 + 分隔),第一个是负载检测命令,第二个是远程执行前缀。
# ~/.machines.rc 示例
set waitbetweenpoll=60 # 轮询间隔(秒)
# 本地机器
echo 0.5 + none # 负载阈值 0.5,本地执行
# 远程机器(通过 SSH)
ssh user@node1 uptime | getvalue average + node -s user@node1
ssh user@node2 uptime | getvalue average + node -s user@node2
# 队列系统(如 SLURM)
squeue -u $USER | wc -l | awk '{print ($1-4)/2}' + qit
💡 提示
单机模式:如果不存在 ~/.machines.rc,pollmach 自动进入单机模式,
在每个包含 wait 文件的目录中顺序执行 runstruct_vasp。
对于集群环境,建议配置 ~/.machines.rc 以利用多机并行。
pollmach 的 -s 选项(自管理模式)在多机场景下更高效,无需轮询节点负载。
第九章 · 命令大全 —— 按功能分类的程序速查
9.1 结构建模工具
| 程序 | 用途 | 典型命令 | 关键输出 |
|---|---|---|---|
| corrdump | 枚举团簇 | corrdump -l=lat.in -2=3.0 -3=4.0 | clusters.out |
| cellcvrt | 晶胞转换 | cellcvrt -p < str.out > POSCAR | POSCAR/str.out |
| genstr | 生成结构 | genstr lat.in | str.out |
| supercell | 创建超胞 | supercell lat.in 2 2 2 | 超胞 str.out |
| checkcell | 检查晶胞 | checkcell lat.in | 晶胞信息 |
9.2 Cluster Expansion 工具
| 程序 | 用途 | 典型命令 | 关键输出 |
|---|---|---|---|
| maps | 自动选择训练结构 | maps -d=6.5 | str.out 系列, energy |
| getclus | 获取团簇信息 | getclus -d=6.5 | clusinfo.out |
| clusterexpand | 团簇展开 | clusterexpand -d=6.5 | 展开系数 |
| csfit | 拟合 ECI | csfit -d=6.5 | eci.out, fit.out |
| clusterpredict | 预测基态 | clusterpredict -d=6.5 | gs_str.out, predstr.out |
| checkrelax | 检查基态 | checkrelax -d=6.5 | 基态验证 |
| cv | 交叉验证 | cv -d=6.5 | CV 分数 |
9.3 Monte Carlo 工具
| 程序 | 用途 | 典型命令 | 关键输出 |
|---|---|---|---|
| emc2 | 正则系综 MC | emc2 -T0=0 -T1=1000 -dT=50 ... | mc.out |
| memc2 | MPI 并行 MC | mpirun -np 4 memc2 ... | mc.out(并行) |
| phb | 相界计算 | phb -gs1=0 -gs2=1 -dT=10 ... | phb.out |
| calcbulk | 体相能量 | calcbulk | 体相热力学 |
9.4 SQS 工具
| 程序 | 用途 | 典型命令 | 关键输出 |
|---|---|---|---|
| mcsqs | 生成 SQS | mcsqs -n=32 -rc | bestsqs.out, sqscell.out |
| gensqs | 生成 SQS 模板 | gensqs | rndstr.in |
| randstr | 随机结构 | randstr | 随机 str.out |
| sqscell.out | SQS 晶胞 | (自动生成) | POSCAR 格式晶胞 |
| bestsqs.out | 最佳 SQS | (自动生成) | SQS 分数坐标 |
9.5 DFT 接口工具
| 程序 | 用途 | 典型命令 |
|---|---|---|
| runstruct_vasp | 运行 VASP 计算 | pollmach runstruct_vasp |
| runstruct_abinit | 运行 ABINIT 计算 | pollmach runstruct_abinit |
| runstruct_qe | 运行 QE 计算 | pollmach runstruct_qe |
| ezvasp | 创建 VASP 输入 | ezvasp str.out |
| extract_vasp | 提取 VASP 能量 | (自动调用) |
| cleanvasp | 清理 VASP 文件 | cleanvasp |
| pollmach | 作业调度 | pollmach runstruct_vasp |
| minload | 最低负载机器 | minload |
| chl | 查看机器负载 | chl |
第十章 · 示例文件总结 —— 每个 example 学什么
ATAT 的 examples/ 目录提供了多组示例文件,每个展示了不同的功能和使用场景。
下面总结每个示例的学习目标和关键技巧。
| 示例 | 学习目标 | 关键技巧 |
|---|---|---|
| cuau.in + mc/ | 完整 Cu-Au Cluster Expansion<br>+ Monte Carlo 工作流 | 理解 lat.in → corrdump → maps →<br>csfit → emc2/phb 的完整流程 |
| fcc_lat.in / bcc_lat.in /<br>hcp_lat.in | 通用晶格模板 | 可以作为任何二元合金的起点,<br>只需修改晶格常数和元素种类 |
| rocksalt_lat.in | 多子晶格建模 | 阳离子子晶格无序 + 阴离子子晶格固定,<br>适用于氧化物、氮化物等 |
| vasp.wrap 系列 | VASP 参数模板 | 了解不同场景(弛豫/静态/快速)<br>的 INCAR 设置差异 |
| abinit.wrap | ABINIT 接口 | 使用 ABINIT 替代 VASP 的示例 |
| dir.in | 方向文件 | 用于 Monte Carlo 中的各向异性分析 |
| mc/emc2.in | emc2 参数 | 温度-化学势扫描的参数设置 |
| mc/phb.in | phb 参数 | 相界计算的参数设置 |
| mc/gs_str.out | 基态结构 | 理解基态结构的输出格式和物理意义 |
| mc/eci.out | ECI 系数 | 理解 ECI 的数值范围和物理意义 |
💡 提示
学习建议:
1. 先跑通 Cu-Au 案例(examples/ 目录),理解完整工作流
2. 将 fcc_lat.in 替换为自己的材料,跑通 Cluster Expansion
3. 遇到问题先看 mc/ 目录的输出文件格式,了解预期输出
4. vasp.wrap 系列是理解 VASP 接口的最佳参考
第十一章 · 科研实战案例 —— ATAT 在不同领域的应用
11.1 高熵合金(HEA)的短程序研究
背景:高熵合金由 4-5 种等摩尔比元素组成,传统上被认为形成理想随机固溶体。
但最新研究表明,HEA 中存在显著的化学短程序(CSRO),影响力学性能。
ATAT 方案:
1. 构建多元 SQS(如 CoCrFeMnNi 五元 SQS,~200 原子)
2. 用 SQS 做 DFT 计算,获得形成能和电荷转移
3. 构建 Cluster Expansion 模型(多元体系需要更多训练结构)
4. Monte Carlo 模拟不同温度下的短程序参数
5. 分析短程序对层错能、屈服强度的影响
关键点:多元体系的 ECI 数量随元素种类和团簇截断急剧增加,
需要谨慎选择团簇截断,并确保足够的训练结构数量。
11.2 催化剂的表面偏析
背景:合金催化剂(如 Pt-Ni、Pd-Ag)的表面成分与体相不同,
表面偏析行为直接影响催化活性和选择性。
ATAT 方案:
1. 构建 slab 模型(2D 切面结构)
2. 只在面内(a、b 轴)方向进行 Cluster Expansion
3. c 轴方向保持 slab 厚度 + 真空层
4. Monte Carlo 模拟不同温度和气氛下的表面成分
5. 结合 DFT 计算关键反应路径的能垒
关键点:2D 体系的 Cluster Expansion 比 3D 简单(团簇数量少),
但需要仔细处理表面弛豫和吸附物效应。
11.3 相图计算
背景:实验相图的测定耗时耗力,计算相图(CALPHAD)是材料设计的核心工具。
ATAT 可以从第一性原理出发,无需实验输入地预测合金相图。
ATAT 方案:
1. 对每个相(FCC、BCC、HCP 等)分别构建 Cluster Expansion
2. 对每个相进行 Monte Carlo 模拟,得到自由能 G(T, x)
3. 用 phb 计算各相之间的相界
4. 绘制完整相图(温度-成分图)
5. 与实验相图或 CALPHAD 数据库对比
关键点:ATAT 预测的相图精度取决于 DFT 计算的精度和 ECI 拟合的质量。
对于含磁性元素的体系,需要考虑自旋极化效应。
11.4 温度稳定性研究
ATAT 方案:
1. 用 Cluster Expansion 拟合 0K 能量面
2. 加入振动自由能(通过 phonon 计算或 Debye 模型)
3. 加入电子自由能(从 DOS 计算)
4. 在 MC 模拟中同时考虑构型熵 + 振动熵 + 电子熵
5. 预测温度依赖的相稳定性
ATAT 支持在 Monte Carlo 中自动包含振动和电子熵(通过 -v 和 -e 选项),
但这些需要额外的 DFT 计算(如 phonon 谱)。
第十二章 · ATAT 最佳实践 —— 经验与技巧
12.1 如何选择训练集
1. 让 maps 自动选择:MAPS 算法经过验证,通常能选出最优训练集
2. 监控交叉验证(CV)分数:CV < 0.01 eV/atom 为优秀,> 0.05 eV/atom 需要更多训练结构
3. 包含端元(纯组分):确保训练集中包含纯 A 和纯 B 的结构
4. 关注基态结构:如果 predicted ground states 不稳定,需要增加训练结构
5. 训练集大小参考:二元体系 30-50 个,三元体系 50-100 个,四元及以上 100+ 个
12.2 ECI 收敛判断
1. CV 分数:最重要的收敛指标。CV 分数不再随训练集增大而显著降低时,说明 ECI 已收敛
2. 基态稳定性:预测的基态结构应与已知实验结果一致
3. 团簇截断:通常 -d 参数设为 6-8 Å 足够。增大截断会引入更多团簇,
但 ECI 值通常随团簇直径增大而快速衰减
4. 拟合权重:对接近基态的结构给予更高权重(csfit 的 -w 选项)
5. ECI 衰减:ECI 值应随团簇直径增大而衰减。如果高层 ECI 反而很大,
说明存在过拟合,需要减小团簇截断或增加训练集
12.3 SQS 超胞选择
1. 原子数:二元体系 32-64 原子通常足够。多元体系(5+ 元素)需要 100-200 原子
2. 匹配质量:objective function < 0.001 为优秀。如果匹配质量差,增大超胞
3. 多个 SQS:对于关键性质,生成 3-5 个不同 SQS,取平均和标准差
4. 2D 体系:面内超胞 4×4 到 6×6 通常足够,c 轴保持 1
12.4 DFT 精度要求
1. 能量收敛:EDIFF < 1e-6 eV/atom(比普通 DFT 计算更严格)
2. k 点密度:KPPRA ≥ 1000(ATAT 的自动 k 点设置标准)
3. 弛豫策略:先用 ISIF=3 全弛豫端元,再用 ISIF=4 定形状弛豫合金结构
4. 赝势一致:所有计算使用相同的赝势类型(推荐 PAW-PBE)
5. 自旋极化:含磁性元素时,务必开启自旋极化(ISPIN=2)
12.5 Monte Carlo 参数
1. 超胞大小:至少 256 原子。对于一级相变,建议 512-1024 原子
2. 平衡步数:至少 10,000 MC 步/原子。更多步数可提高统计精度
3. 采样步数:平衡后至少 10,000 MC 步/原子用于统计
4. 温度步长:在相变温度附近(±50K)使用更细的步长(如 5-10K)
5. 化学势步长:0.01-0.05 eV 通常足够
收敛判断:
• 在相同条件下运行 2-3 次独立 MC 模拟,结果应一致
• 增大超胞 2 倍,结果变化应 < 5%
• 比热峰的位置和高度应稳定
第十三章 · 常见错误与解决方案 —— 踩坑指南
13.1 corrdump 段错误(Segmentation Fault)
现象:运行 corrdump 时直接崩溃,没有任何错误信息。
原因:-2= 参数设置过小,小于第一近邻距离,导致找不到任何对团簇。
解决方案:增大 -2= 的值。建议设为第一近邻和第二近邻距离之间的值。
例如,FCC a=3.8Å 时,第一近邻 = 2.687Å,第二近邻 = 3.8Å,建议 -2=3.0~3.5。
预防:在运行 corrdump 前手动计算第一近邻和第二近邻距离。
13.2 maps 一直不收敛
现象:maps 运行了很长时间(> 50 个结构),仍然没有停止。
原因:
• 团簇截断太小(-d 参数),CE 模型精度不足
• 存在未发现的基态
• 训练结构数量不足
解决方案:
• 增大 -d 参数(如从 6.5 增加到 8.0)
• 检查 fit.out 中的 CV 分数
• 手动添加一些已知的基态结构
• 如果 CV 分数已经很好,可以手动停止 maps 并继续
13.3 mcsqs 找不到 SQS
现象:mcsqs 运行后 bestsqs.out 为空或 objective function 很大。
原因:
• 超胞太小,无法满足所有团簇关联约束
• 目标成分在给定超胞大小下无法实现(如要求 33% 成分在 32 原子超胞中无法精确实现)
• 团簇截断太大,约束条件过多
解决方案:
• 增大超胞(-n 参数)
• 调整目标成分使其能被超胞原子数整除
• 减小团簇截断距离
• 使用 -rc 选项包含所有团簇类型
13.4 clusters.out 为空
现象:corrdump 运行后 clusters.out 为空或只有很少的团簇。
原因:
• -2= 或 -3= 参数设置过小
• lat.in 格式错误(如坐标、晶格矢量格式不正确)
• 晶格中有重复的原子位置
解决方案:
• 增大 -2= 和 -3= 的值
• 用 checkcell 检查 lat.in 格式是否正确
• 确保 lat.in 中原子坐标是分数坐标
13.5 ECI 震荡 / 过拟合
现象:ECI 值随团簇直径增大而不衰减,反而增大。
原因:训练集太小,导致过拟合。
解决方案:
• 增加训练结构数量
• 减小团簇截断(-d 参数)
• 使用交叉验证(cv 程序)评估模型质量
• 对高层团簇使用正则化(如 ridge regression)
13.6 pollmach 找不到命令
现象:pollmach 报错 "Cannot find command runstruct_vasp"。
原因:ATAT 的 bin 目录不在 PATH 中,或 glue 脚本未安装。
解决方案:
• 确保 ATAT bin 目录在 PATH 中:export PATH=$PATH:/path/to/atat/bin
• 运行 make install 安装 glue 脚本
• 检查 glue 脚本的执行权限:chmod +x /path/to/atat/bin/runstruct_vasp
13.7 VASP 计算能量异常
现象:某些结构的 VASP 能量与预期偏差很大。
原因:
• 弛豫不充分(NSW 太小或未收敛)
• k 点密度不足
• 赝势不一致
• 结构中有原子重叠
解决方案:
• 使用 DOSTATIC 指令确保弛豫后进行高精度静态计算
• 增大 KPPRA(如 2000-4000)
• 确保所有计算使用相同的赝势
• 用 checkcell 检查结构是否合理
13.8 快速排查清单
遇到问题时,按以下顺序检查:
✅ lat.in 格式:用 checkcell 验证
✅ corrdump -2= 参数:是否大于第一近邻距离
✅ PATH 环境变量:ATAT bin 目录是否在 PATH 中
✅ ATATDIR 环境变量:是否正确指向 ATAT 根目录
✅ VASP 计算:检查 OUTCAR 中的能量是否收敛
✅ fit.out:检查 CV 分数是否合理
✅ clusters.out:检查团簇数量是否合理
✅ eci.out:检查 ECI 值是否合理(meV 量级)
📖 参考: ATAT Manual v3.36 | Axel van de Walle | https://alum.mit.edu/www/avdw/atat/
