ARES 外部程序接口 ======================================= CALYPSO --------------------------------------- **CALYPSO(Crystal structure AnaLYsis by Particle Swarm Optimization**)是一种基于粒子群优化算法(PSO)的晶体结构预测方法, 由吉林大学的 Ma 和 Wang 团队开发。 该方法仅需给定化合物的化学组成,即可在特定外部条件(例如压力)下预测稳定或亚稳结构, 无需依赖任何已知结构或实验输入。CALYPSO 利用粒子群智能优化算法, 已被广泛应用于金属、半导体、氧化物、硫化物以及高压超导材料的结构预测研究。 ARES 提供了与 CALYPSO 的无缝接口,可直接对 CALYPSO 生成的候选结构进行高效的结构优化。 此外,ARES 支持基于 ACNN 机器学习势的主动学习流程,从而在保持高精度的同时大幅降低计算成本, 使其能够高效处理大体系或多组分材料的结构预测任务。 接口结构 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 接口模块位于 ``interface/ARES-CALYPSO`` 目录下,主要包含以下子模块: - ``SPLIT_ARES.sh``:ARES 与 CALYPSO 交互的核心脚本,用于控制 CALYPSO 程序运行、多结构优化以及作业提交管理。 - ``acnn_deploy``:主动学习工作流部署模块,实现机器学习模型训练、候选结构筛选及 DFT 验证的全自动工作流调度。 - ``interface/ss/``:包含主动学习相关的模块化工具,以及实用的结构分析和 Slurm 任务检查脚本。 配置方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 软件已在 ``x86_64 Linux`` 平台上成功测试。 依赖项 """""""""" - ``Libtorch``:(预编译 C++11 ABI 版本,以支持更广泛的平台) - ``OpenBLAS``:(用于 CPU 加速分子动力学模拟)[编译时使用 make USE_OPENMP=1] - ``CUDA``:(可选,用于 GPU 加速。可考虑同时安装 cuDNN) 解压 ``acnn-x.x.x.tgz``,然后进入解压后的目录 ``acnn-x.x.x/``: .. code-block:: yaml $ tar -xvf acnn-v3.tar.gz x acnn-v3/ x acnn-v3/CMakeLists.txt x acnn-v3/README.md x acnn-v3/al/ x acnn-v3/al/al-py/ ... x acnn-v3/src/utilities.h x acnn-v3/src/utilsnnp.cpp x acnn-v3/src/utilsnnp.h $ cd acnn 修改 ``prefix.cmake`` 文件,以指定依赖包的路径。 .. code-block:: yaml # user modify set(CUDA_TOOLKIT_ROOT_DIR /path/to/cuda) # optional set(CMAKE_CXX_COMPILER /path/to/c++compiler) # required set(Torch_DIR /path/to/libtorch) # required set(OpenBLAS_DIR /path/to/openblas) # required set(Python_EXECUTABLE /python/to/python3) # optional for python interface set(pybind11_DIR /path/to/pybind11) # optional for python interface(see Python Interface) 执行以下复合命令以进行默认安装: .. code-block:: yaml $ cmake -B build $ cmake --build build --target acnn 可执行文件将位于 ``acnn/build`` 目录下。你可以考虑将该目录添加到系统的 ``$PATH`` 中。 .. code-block:: yaml $ export PATH=$(pwd)/build:$PATH $ export PATH=$(pwd)/interface/ss:$PATH 要确认安装是否成功,请执行以下命令: .. code-block:: yaml $ acnn 输出菜单将提供有关如何使用 ``acnn`` 进行模拟的说明。此外,程序将尝试创建一个输入控制文件模版。 .. note:: 强烈建议使用 g++ 版本 9 或更高版本来编译 acnn。 其他编译器系列(例如 ifort)不受支持。 ``acnn_relax`` 用于大规模批量结构优化,采用在 **ARES** 中实现的 **BFGS** 算法。 .. code-block:: yaml $ cd acnn/interface/bfgs $ cmake -B build $ cmake --build build --target acnn_relax $ export PATH=$(pwd)/interface/bfgs/build:$PATH 示例 1:ARES第一性原理结构预测 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 本小节介绍如何使用 ARES 结合 CALYPSO 进行基于 第一性原理 的晶体结构预测。 通常需要准备以下文件: - ``SPLIT_ARES.sh``:ARES 与 CALYPSO 交互的核心脚本,用于控制 CALYPSO 程序运行、多结构优化以及作业提交管理。 - ``input.dat``:CALYPSO 输入文件。 - ``*.upf``:赝势文件。 以 SiC 体系为例(该示例已随软件一同发布,可供参考): .. code-block:: bash $ ls C_ONCV_PBE-1.2.upf SPLIT_ARES.sh Si_ONCV_PBE-1.2.upf input.dat ``input.dat`` 文件内容如下 .. code-block:: bash SystemName = Si-C NumberOfSpecies = 2 NameOfAtoms = Si C NumberOfAtoms = 1 1 # Si 1 C 1 NumberOfFormula = 1 4 # 1-4 fu Volume = 48 # per formula Ialgo = 2 # lpso PsoRatio = 0.7 PopSize = 40 Command = pwd # do not matter Isym = True MaxStep = 0 Split = True # KEEP True @DistanceOfIon 1.4 1.3 1.3 1.2 @End ``SPLIT_ARES.sh`` 是程序运行控制文件,也是程序的输入文件,其用法如下: .. code-block:: yaml Usage: ./SPLIT_ARES.sh [options] Options: -r Run program -debug Enable debug mode -help Show this help Behaviors: ./SPLIT_ARES.sh Print parameters ./SPLIT_ARES.sh -r Run program (normal mode) ./SPLIT_ARES.sh -r -debug Run program in debug mode ./SPLIT_ARES.sh -help Print this help ``-debug`` 模式可在每次结构优化过程中保存所有由 ARES 生成的文件,包括多级优化阶段的输入、输出及任务脚本等内容。 此外,用户需根据研究体系自行修改脚本头部的相关参数,主要包括: .. code-block:: yaml SYSTEM="Si C" # system name CALYPSO="~/bin/calypso_ares.x" # CALYPSO bin STEP=20 # Max CALYPSO step ARES="~/bin/ARES/ares" # directory of ares bin PRESSURE="0" # in GPa PSEUDO="Si_ONCV_PBE-1.2.upf C_ONCV_PBE-1.2.upf" # pseudo-potential JOB_NAME="ARES-RELAX" # slurm job name PARTITION="amd9654" # slurm partition MAXJOB="4" # number of max `ares` jobs 然后修改 ``ARES_IN`` 文件中的计算精度和多级优化步骤次数: .. code-block:: yaml ARES_IN=( "\ # INPUT_PARAMETERS cal_type = cell-relax #relax force_thr = 0.1 relax_method = bfgs sym = 2 pseudo_rcut = 10 pseudo_mesh = 1 ecutwfc = 400 basis = pw smearing = mp sigma = 0.01 mixing_type = broyden mixing_beta = 0.7 scf_thr = 1e-8 stress_thr = 1.0 pseudo_dir = . pseudo_file = $PSEUDO #isolver = dav kpar = 4 kspacing = 0.2 # 1/bohr pressure = $(echo "$PRESSURE * 10"|bc -l) " "\ # INPUT_PARAMETERS cal_type = cell-relax #relax force_thr = 0.01 relax_method = bfgs sym = 2 pseudo_rcut = 10 pseudo_mesh = 1 ecutwfc = 600 basis = pw smearing = mp sigma = 0.01 mixing_type = broyden mixing_beta = 0.7 scf_thr = 1e-8 stress_thr = 1.0 pseudo_dir = . pseudo_file = $PSEUDO #isolver = dav kpar = 4 kspacing = 0.14 # 1/bohr pressure = $(echo "$PRESSURE * 10"|bc -l) " "\ # INPUT_PARAMETERS cal_type = cell-relax #relax force_thr = 0.01 relax_method = bfgs sym = 2 pseudo_rcut = 10 pseudo_mesh = 1 ecutwfc = 600 basis = pw smearing = mp sigma = 0.01 mixing_type = broyden mixing_beta = 0.7 scf_thr = 1e-8 stress_thr = 1.0 pseudo_dir = . pseudo_file = $PSEUDO #isolver = dav kpar = 4 kspacing = 0.14 # 1/bohr pressure = $(echo "$PRESSURE * 10"|bc -l) " "\ # INPUT_PARAMETERS cal_type = cell-relax force_thr = 0.01 relax_method = bfgs sym = 2 pseudo_rcut = 10 pseudo_mesh = 1 ecutwfc = 600 basis = pw smearing = mp sigma = 0.01 mixing_type = broyden mixing_beta = 0.7 scf_thr = 1e-8 stress_thr = 1.0 pseudo_dir = . pseudo_file = $PSEUDO #isolver = dav kpar = 4 kspacing = 0.10 # 1/bohr pressure = $(echo "$PRESSURE * 10"|bc -l) " ) 这里采用四级结构优化方案,计算精度由低到高逐步提升,从而有效降低 ARES 在初始非平衡结构阶段的计算开销。 准备完毕后,执行以下命令启动结构预测过程: .. code-block:: bash $ ./SPLIT_ARES.sh -r 程序将自动迭代进行结构预测与优化。 结构预测结果可通过 CALYPSO-analyse-tool 进行分析: .. code-block:: bash $ cak.py $ cat Analysis_Output.dat No. Enthalpy 0.1 1 ( 187) -130.74141 F-43m(216) 2 ( 396) -130.60643 F-43m(216) 3 ( 615) -130.60533 F-43m(216) 4 ( 260) -130.60426 F-43m(216) 5 ( 184) -130.60302 P6_3mc(186) 6 ( 612) -130.59820 P6_3mc(186) 7 ( 238) -130.58654 I-4m2(119) 8 ( 412) -130.54539 P6_3mc(186) 9 ( 593) -130.49717 P4_2/mnm(136) 10 ( 278) -130.48836 C2(5) 11 ( 92) -130.44045 Cmc2_1(36) 12 ( 468) -130.36515 R3m(160) 13 ( 229) -130.27912 P3m1(156) 14 ( 63) -130.25170 P3_121(152) 15 ( 485) -130.25145 P3_221(154) 16 ( 123) -130.24996 P3_221(154) 17 ( 540) -130.24974 P3_121(152) 18 ( 318) -130.24876 R3m(160) 19 ( 33) -130.24221 R-3m(166) 20 ( 62) -130.22821 C2(5) ... 成功预测出 ``F-43m`` SiC .. image:: ../images/SiC.png :width: 600 :align: center :alt: F-43m-SiC 示例 2:ARES 结合 ACNN 主动学习实现结构预测 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 本小节提供了一个基于主动学习的晶体结构搜索示例,用于展示完整的工作流程,同时为类似任务提供参考。 在此示例中,我们在常压下对 ``C`` 进行主动学习结构搜索。 首先使用 ``acnn_deploy`` 进行工作流的部署,有关 ``acnn_deploy`` 的用法可通过执行程序获得: .. code-block:: bash $ acnn_deploy .o. .oooooo. ooooo ooo ooooo ooo .888. d8P' `Y8b `888b. `8' `888b. `8' .8.888. 888 8 `88b. 8 8 `88b. 8 .8' `888. 888 8 `88b. 8 8 `88b. 8 .88ooo8888. 888 8 `88b.8 8 `88b.8 .8' `888. `88b ooo 8 `888 8 `888 o88o o8888o `Y8bood8P' o8o `8 o8o `8 Attention Coupled Neural Network ACNN developer group (xieyu@jlu.edu.cn) Copyright (c) 2022-2025 Please cite the following: [1] J. Li et al., arXiv:2505.08159 Contact Prof. Yu Xie for support Error: All options (--pressure, --seed, --minbonds, --partition, --backend) are required and must each appear only once. Usage: acnn_deploy [OPTIONS] Input target pressure[GPa] and seed acnn_deploy -p 40 -s SrB -b Sr-Sr=2.075,Sr-B=1.671,B-B=1.267 -n amd9654 -e ares options: -p, --pressure [pressure] Target pressure in GPa -s, --seed [seed] Seed name -b, --minbonds [bonds] Set minimum bond distances (e.g., Sr-Sr=2.075,Sr-B=1.671,B-B=1.267) -n, --partition [partition] Set partition -e, --backend [FP backend] Set FP calculation backend (ares / vasp) -h, --help, -? Print usage information and exit .. code-block:: bash $ acnn_deploy -p 0.0001 -s C -b C-C=1.2 -n amd9654 -e ares $ ls DFT PD POT RELAX RSS SEED XSF auto 某些文件(例如赝势文件和 DFT 计算输入文件)需要用户根据自身的具体计算需求进行相应修改,以满足个性化的计算设置。 ARES 输入文件 .. code-block:: yaml $ vi DFT/dyn_ares_in 25 TXT="\ 26 # Generate by ACNN $(date) 27 28 INPUT_PARAMETERS 29 cal_type = scf #relax # cell-relax 30 #force_thr = 0.01 31 #stress_thr = 1.0 32 #relax_method = bfgs 33 34 sym = 2 35 pseudo_rcut = 10 36 pseudo_mesh = 1 37 ecutwfc = 1200 38 basis = pw 39 smearing = mp 40 sigma = 0.01 41 mixing_type = broyden 42 mixing_beta = 0.7 43 scf_thr = 1e-8 44 pseudo_dir = . 45 pseudo_file = $PSEUDO 46 #isolver = dav 47 48 kpar = 2 49 kspacing = 0.106 # 1/bohr 50 pressure = 0.001 ... Slurm 任务脚本 .. code-block:: bash $ vi DFT/sub.sh 及赝势 .. code-block:: bash $ ls DFT/*upf DFT/C.upf 生成初始随机结构,准备好的结构应放置在 RSS/Base 目录中: .. code-block:: bash $ ls RSS/Base C-2457776-286-1.res C-2457776-286-2.res C-2457776-286-3.res C-2457797-283-1.res C-2457797-283-2.res C-2457797-283-3.res ACNN 并不限制结构生成的来源,而只是对结构载体文件的格式作出严格规范。 运行工作流,一种有效的方式是根据个人偏好,使用 nohup 或 tmux 在后台运行程序: .. code-block:: bash $ tmux new -s C $ ./auto > log 2>&1 & $ ctrl+b d $ tmux attach -t C 或者 .. code-block:: bash $ nohup ./auto > log 2>&1 & 能量序列(单质)及相图(变组分)在 `PD/` 目录中,以下是预测出的石墨、金刚石和六方金刚石结构图。 .. image:: ../images/C-structures.png :width: 600 :align: center :alt: C structures 参考文献 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. J. Li et al., arXiv:2505.08159 (2025).