ASE专题

ASE 计算器加权、求和与平均

用Ar3实际输入和受力核对理解四种计算器组合,区分线性包装与分区耦合。

更新于 2026-11-05约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

本篇使用鸢算科技集群实际运行的ASE3.29.0小例子,全部为单线程CPU。Ar3用两套Lennard–Jones参数说明接口;Cu4用EMT经验势,不是DFT或GPU性能测试。

下载完整Python脚本、实际结构、数据与绘图包,在新目录:

unzip ase-calculator-wrappers-practical*.zip -d ase-example
cd ase-example
module load ase/3.29.0
bash run.sh

默认读取随附实算数值生成4图和analysis/RESULTS.json,不重算势能。要自己重算,在已分配的CPU资源中执行:

bash run.sh compute
cat work/RESULTS.json

输出包括自己的work/、27项数值核对和4图。脚本不会覆盖已有work;第二次重算请另解压一份。其他电脑已安装ASE3.29、NumPy与Matplotlib时,可用PYTHON=python3 bash run.sh。已有work需要重画时用bash run.sh analyze。

1. 同一体系上组合计算器#

ASE的计算器包装器能把多个计算器返回的同一性质按权重组合。这里所有计算器都看到同一份完整Ar3结构;这不会自动把体系划成QM区/MM区,也不会自动排除重复计算的相互作用。

3
非周期Ar3;坐标单位Å
Ar 0.0 0.0 0.0
Ar 4.1 0.0 0.0
Ar 2.0 3.3 0.2

两套参数故意不同,用来观察组合的数值。它们不是本教程新拟合的“更好氩势”。基本Python写法:

from ase import Atoms
from ase.calculators.lj import LennardJones
from ase.calculators.mixing import LinearCombinationCalculator

atoms = Atoms('Ar3', positions=[[0,0,0],[4.1,0,0],[2,3.3,.2]],
              cell=[14,14,14], pbc=False)
a = LennardJones(epsilon=.0103, sigma=3.4, rc=10, ro=8, smooth=True)
b = LennardJones(epsilon=.0120, sigma=3.55, rc=10, ro=8, smooth=True)
atoms.calc = LinearCombinationCalculator([a,b], [.3,.7])
print(atoms.get_potential_energy())
print(atoms.get_forces())

epsilon单位eV,sigma/rc/ro单位Å;这里平滑区间从8到10Å,三原子间距均在其内侧。参数与截断属于势模型,不能只换一组权重就赋予真实混合材料含义。

2. 四种包装器怎么选#

from ase.calculators.mixing import (
    MixedCalculator, SumCalculator, AverageCalculator)

def make_pair():
    return [
        LennardJones(epsilon=.0103, sigma=3.4, rc=10, ro=8, smooth=True),
        LennardJones(epsilon=.0120, sigma=3.55, rc=10, ro=8, smooth=True)]

a, b = make_pair()
mixed = MixedCalculator(a, b, .3, .7)
summed = SumCalculator(make_pair())
averaged = AverageCalculator(make_pair())
类 本例组合规则
LinearCombinationCalculator 任意给定权重;本例0.3A+0.7B
MixedCalculator 两个计算器和各自权重;本例同上
SumCalculator A+B,不自动除以2
AverageCalculator (A+B)/2

两端计算器须支持所请求的性质。例如一端不提供stress,不能据另一端有stress就期待包装器自动补出来。每个条件保持独立对象,避免混用状态与缓存。

3. 本例的实际结果#

项目 总能量 / eV
A -0.029374655886
B -0.035066832552
0.3A+0.7B -0.033359179552
A+B -0.064441488437
(A+B)/2 -0.032220744219

Ar3能量与最大受力的实际组合结果

能量、每个原子的力分量都按同一权重组合。脚本还独立对9个坐标作±0.0001Å位移,用混合能量的中心差分核对负梯度;这一步能帮助发现能量和受力采用不同权重的错误。

4. 查看自己的数值#

python - <<'PYDATA'
import json
x=json.load(open('work/RESULTS.json'))['mixing']
for name,row in x['wrappers'].items():
    print(name,row['energy_eV'])
PYDATA

用自己的模型时先说明组合的物理定义、是否重复计入相互作用和单位,再选择合适计算器。涉及真正QM/MM或差分学习时还需相应模型与训练/耦合流程,本页的线性包装器不是通用替代。

继续看ASE与NEP联用、VASP联用。来源:ASE Mixing Calculators。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗