Calorine偶极、极化率与响应梯度
用真实小水分子模型学习偶极、极化率、有限差分梯度和中性电荷参数。
阅读本篇目录
下载模型、真实数据、完整脚本与参考图片。相关教程:偶极与极化率 · 红外与拉曼谱 · NEP89微调 · 模型编辑 · GPUMD数据读写 · 完整接口索引
1 准备与运行#
先解压并重画已经完成的参考结果:
unzip calorine-response-workflows-wave266-*.zip
cd calorine-response-workflows-wave266
bash run.sh
六张参考图在figures,CSV在analysis。若要自己重新计算,在新解压目录以普通账号执行:
bash prepare.sh
bash calculate.sh
bash status.sh
calculate通过Slurm分配一张P100,自动完成本包所有计算;新结果在work,参考图与新算结果分开。已提交时继续查看status,不要删除记录重复提交。结束后:
cat work/COMPLETE.json
ls work/analysis
本例环境为Calorine 4.0、Python 3.11、GPUMD 5.9.1;GPUMD采用GCC 13.3/CUDA 12.9系列环境。可以用module show calorine/4.0和module show gpumd/5.9.1-p100查看当前模块。下面的Python片段在计算完成后的work目录执行;MD和训练由calculate提交。
2 分清三个模型#
water-energy用于预测能量和力,驱动轨迹;water-dipole预测整个分子的偶极;water-polarizability预测整个分子的极化率。能量势不能直接代替响应模型。两个响应势来自我们此前以ORCA PBE/def2-SVP小水分子标签训练的模型,能量势是GPUMD提供的水分子示例模型;这里展示接口和有限范围模型行为,不代表实验或液态水精度。
本例真实初始结构如下,原始文件在initial/water-relaxed.extxyz,三个原子、24 Å盒、非周期边界:
3
Lattice="24 0 0 0 24 0 0 0 24" Properties=species:S:1:pos:R:3 pbc="F F F"
O 12.0000000000 12.0000000000 12.2864132200
H 12.0000000000 12.7676884000 11.7077161400
H 12.0000000000 11.2323116000 11.7077161400

3 查询偶极与极化率#
cd work
python - <<'CALORINE_RESPONSE'
from ase.io import read
from calorine.nep import get_dipole, get_polarizability
a = read('water-relaxed.extxyz')
mu = get_dipole(a, model_filename='models/water-dipole.txt')
alpha = get_polarizability(a, model_filename='models/water-polarizability.txt')
print('dipole / eA:', mu)
print('polarizability / A^3:', alpha)
CALORINE_RESPONSE
本例偶极约为[0,0,−0.39969] eÅ,极化率对角项约为[0.47639,1.09510,0.79991] ų。这些是对应模型对当前几何的预测;旋转分子时,偶极按向量旋转,极化率按二阶张量旋转,不能把不同朝向的分量直接作差。
4 中性分子必须显式给charge=0#
当前get_dipole_gradient默认charge为+1。该参数参与梯度的电荷/质心修正,不能把默认值当成当前体系的电荷;本例是中性分子:
python - <<'CALORINE_GRADIENT'
from ase.io import read
from calorine.nep import get_dipole_gradient, get_polarizability_gradient
a = read('water-relaxed.extxyz')
g = get_dipole_gradient(a, model_filename='models/water-dipole.txt',
charge=0, displacement=0.001, backend='c++')
pg = get_polarizability_gradient(a,
model_filename='models/water-polarizability.txt', displacement=0.001)
print('dipole gradient:', g.shape, g)
print('polarizability gradient:', pg.shape)
CALORINE_GRADIENT
偶极梯度的三个轴是原子、位移方向、偶极分量,单位e;极化率梯度是原子、位移方向、张量两轴,单位Ų。component=['x','z']只取指定的位移方向。位移是Å,适当比较0.001与0.0005 Å,避免步长过大或过小。

CPUNEP类还提供get_dipole_gradient、get_polarizability、get_polarizability_gradient和get_descriptors等接口。本包脚本展示了类接口、函数接口、Python/C++有限差分及旋转和平移关系。GPU的nep有限差分涉及文本输出的六位有效数字,微小步长会放大舍入;默认建议先用CPU接口。资料包对旧版mode参数作了局部兼容,不需要修改公共安装。