ATAT结构优化:固定晶胞与晶胞联动
用真实Cu EMT例子演示infdet能量、力、应力文件接口,区分原子位置优化与晶胞优化。
阅读本篇目录
infdet可以通过文件接口调用外部能量、力和应力计算器。本篇先做最直观的结构优化:固定晶胞时只移动原子,允许应变时同时调整晶胞和原子。下载实例包。示例使用ATAT3.52、GCC13.3工具环境与ASE3.29.0的EMT势;这是Cu小体系的真实势函数计算,不是VASP或DFT结果。
1 解压后先做固定晶胞优化#
mkdir ATAT-infdet
python3 -m zipfile -e atat-infdet-*.zip ATAT-infdet
cd ATAT-infdet
bash fixed.sh
fixed.sh加载环境并运行run_fixed.py。脚本生成两个Cu原子的周期结构,启动原生infdet,按请求返回真实EMT能量、力和应力。结果写入relax,已有同名目录时应换一个新目录运行。
原始str.in完整内容如下。第一行定义直角、单位长度的坐标基,后面三行是晶胞矢量,最后两行是以该坐标基表示的原子位置,长度单位Å。
1 1 1 90 90 90
0.000000000000 3.600000000000 3.600000000000
1.800000000000 0.000000000000 1.800000000000
1.800000000000 1.800000000000 0.000000000000
0.000000000000 0.000000000000 0.000000000000 Cu
0.060000000000 1.770000000000 1.840000000000 Cu
脚本启动的核心命令是:
infdet -r -ds=0 -igt=0.02 -ns -st=0 -iic=60
-r选择普通结构弛豫,-ds=0禁止晶胞应变;原子位置仍然可以改变。-igt是原生优化梯度容差,不能直接当作最大原子力;示例在结束后另算最大原子力,并确认小于0.02 eV/Å。-ns、-st=0便于这个轻量文件接口及时响应。
不要在没有力回调脚本的目录单独启动上面的命令,否则程序会等待外部计算器。
2 文件之间怎样衔接#
每轮按以下顺序进行:infdet写str.out和busy → 回调读取结构 → 计算器写结果文件 → 删除busy → infdet继续优化。
| 文件 | 要写什么 |
|---|---|
energy |
当前结构的总能量,eV/晶胞,一行一个数 |
force.out |
与结构原子顺序一致的N×3原子力,eV/Å |
stress.out |
3×3应力矩阵,压缩为正,kbar |
str_relax.out |
对应本次能量和力的结构 |
本例由infdet负责优化,回调只做当前几何的单点计算,所以回调的str_relax.out与当前str.out相同。EMT应力是拉伸为正的eV/ų,转换为接口要求时使用-stress × 1602.1766208。接其他软件时,应核对其应力正负号与单位。
3 查看结构和结果#
cat relax/cenergy.out
cat relax/cstr_relax.out
tail -n 8 relax/infdet.log
本站固定晶胞算例有7次真实力调用,最终总能量约−0.01337739 eV/两原子晶胞,最大原子力0.001507 eV/Å。EMT能量零点由势函数定义,绝对能量不能与DFT总能量直接比较。
4 同时优化晶胞和原子#
bash cell.sh
cat cell-relax/cstr_relax.out
cat cell-relax/cenergy.out
该脚本从晶格参数3.7 Å的初始Cu结构出发,核心选项改为infdet -r -ds=3,允许三维晶胞应变与原子位置共同优化。-ds描述允许应变的维度;不要把-ds=2直接当作所有二维材料的通用设置,二维真空层和受限方向需要按具体晶胞设计。
本站联动优化有15次真实力调用,最终能量−0.01406680 eV/晶胞、最大原子力0.001851 eV/Å,体积23.13023 ų。两种模式初始晶格不同,因此图中的初始能量不同。

bash plot.sh
绘图读取包中reference实算数据,在plots输出图片。自己的结构接VASP等后端时,仍应在获分配的计算资源内执行,保持原子顺序及能量、力、应力的一致性。