Calorine专题

Calorine偶极、极化率与响应梯度

用真实小水分子模型学习偶极、极化率、有限差分梯度和中性电荷参数。

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

下载模型、真实数据、完整脚本与参考图片。相关教程:偶极与极化率 · 红外与拉曼谱 · 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参数作了局部兼容,不需要修改公共安装。

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

查看配图

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

100%查看原图 ↗