集体变量(CV)

SPONGE 2.0 集体变量(CV),译自主仓库文档。

本页由 GPT-6-Astra 整理并翻译。SPONGE 2.0 正处于敏捷开发中,功能、参数和文档可能随版本变动;最新版本信息请参照 GitHub 仓库中的 docs 和 skills 文档。

本页对应的源文档快照。

集体变量(CV)指南

SPONGE 从 mdin.spg.toml 中的 cv_in_file 加载集体变量(CV)定义。

cv_in_file = "cv.toml"

未设置 cv_in_file 时,不初始化 CV 控制器。

支持的文件格式

推荐使用 TOML 编写 CV 文件。cv_in_file 指向的文件可以是:

  • TOML 文件。
  • 旧版分块式文本文件。

两者都会展平到同一个内部命令命名空间,但新文档和新输入文件应采用 TOML。

推荐的 TOML 格式

[print]
CV = ["phi", "psi"]

[phi]
CV_type = "dihedral"
atom = [4, 6, 8, 14]

[psi]
CV_type = "dihedral"
atom = [6, 8, 14, 16]

旧版分块格式

为兼容已有算例,仍支持旧版分块格式:

print
{
    CV = phi psi
}
phi
{
    CV_type = dihedral
    atom = 4 6 8 14
}
psi
{
    CV_type = dihedral
    atom = 6 8 14 16
}

基本流程

  1. 在 mdin.spg.toml 中设置 cv_in_file。
  2. 在 CV 文件中定义一个或多个 CV 模块。
  3. 在 print、meta、steer、restrain 或其他使用 CV 名称的模块中引用它们。
  4. 运行 SPONGE,在 mdout 中查看对应输出列。

本页介绍的是 CV 侧的 restrain,不同于原子坐标限制模块。

定义 CV

每个 CV 在一个命名模块中定义,其他分组通过该模块名引用它。

[distance]
CV_type = "distance"
atom = [4, 6]

在此示例中:

  • distance 是 CV 模块名称。
  • CV_type = distance 选择具体实现。
  • atom = 4 6 提供所需原子索引。

内置 CV 类型

CV_type含义必需参数
position_x、position_y、position_z单个原子的笛卡尔坐标atom(1 个原子)
scaled_position_x、scaled_position_y、scaled_position_z单个原子的分数坐标atom(1 个原子)
box_length_x、box_length_y、box_length_z沿某个晶胞轴的盒长无
distance两原子间距离atom(2 个原子)
displacement_x、displacement_y、displacement_z两原子间周期性位移的分量atom(2 个原子)
angle三原子形成的角度atom(3 个原子)
dihedral四原子形成的二面角atom(4 个原子)
combination其他 CV 的代数组合CV、function
tabulated通过四阶 B 样条插值对另一 CV 作表格映射CV、min、max、parameter
rmsd相对于参考结构的 RMSDatom 或 atom_in_file;coordinate 或 coordinate_in_file

RMSD CV

rmsd 计算所选原子集合与参考坐标集合之间的 RMSD。

原子列表和参考坐标可以用 Xponge maskgen 生成。

[rmsd_ala]
CV_type = "rmsd"
atom_in_file = "rmsd_atoms.txt"
coordinate_in_file = "rmsd_ref.txt"
rotate = true

rotate = true 表示在计算 RMSD 前进行最优旋转对齐。

参数类型说明
atomint list原子列表
atom_in_filefile原子列表文件
coordinatefloat list参考坐标
coordinate_in_filefile参考坐标文件
rotatebool是否在计算 RMSD 前对齐参考结构

组合 CV

combination 通过 JIT 编译的表达式,将一个或多个 CV 组合为新的值。

示例:

[lx]
CV_type = "box_length_x"

[ly]
CV_type = "box_length_y"

[lz]
CV_type = "box_length_z"

[example_CV]
CV_type = "combination"
CV = ["lx", "ly", "lz"]
function = "lx * ly * lz"

function 中使用的名称必须与 CV 列表中的名称一致。

表达式中的浮点字面量推荐使用 1.0f 等单精度后缀。如果表达式按浮点表达式编译却直接使用整数字面量,JIT 编译器可能失败。

参数类型说明
CVCV list参与组合的 CV
functionstring组合表达式

支持的运算符和函数:

含义语法含义语法
a + ba + ba - ba - b
a * ba * ba / ba / b
a 的 b 次幂powf(a)(b)a 的自然对数logf(a)
exp(a)expf(a)互补误差函数erfcf(a)
a 的平方根sqrtf(a)a 的余弦cosf(a)
a 的正弦sinf(a)a 的正切tanf(a)
a 的反余弦acosf(a)a 的反正弦asinf(a)
a 的反正切atanf(a)a 的绝对值fabsf(a)
a、b 中的较大值fmaxf(a)(b)a、b 中的较小值fminf(a)(b)

表格映射 CV

tabulated 将另一 CV 通过表格映射为新值,中间值使用四阶 B 样条插值。

示例:

[lx]
CV_type = "box_length_x"

[example_CV]
CV_type = "tabulated"
CV = "lx"
min = 0.0
max = 100.0
parameter = [1.0, 4.0, 0.2, 7.0, 9.1, -11.0]
min_padding = 1.1
max_padding = 7.7

示例对应下表:

CV 值-60-40-20020406080100120140160
映射值1.11.11.11.04.00.27.09.1-11.07.77.77.7
参数类型说明
CVCV待插值的 CV
minfloatCV 最小值
maxfloatCV 最大值
parameterfloat list表格中的映射值
parameter_in_filefile保存映射值的文件
min_paddingfloat低于 min 的填充值,仅用于插值
max_paddingfloat高于 max 的填充值,仅用于插值

CV 文件中的虚拟原子

CV 文件可以定义局部虚拟原子,再在后续 CV 中复用。例如,Metadynamics 中基于质心的 CV 可使用此方式。

[ML]
vatom_type = "center_of_mass"
atom_in_file = "ligand.list"

[cx]
CV_type = "position_x"
atom = "ML"

这里的 ML 不是 CV,而是一个命名虚拟原子,可以出现在通常填写原子索引的位置。

输出 CV 值

使用 print 模块,将 CV 值追加到 SPONGE 的逐步输出:

[print]
CV = ["phi", "psi"]

每个 CV 的输出列名就是其模块名,应避免与内置输出列重名。

参数类型说明
CVCV list需要输出的 CV

Restrain 限制势

restrain 施加谐和偏置势:

Ubias=∑CVweight∗(CV−reference)2U_{\rm bias} = \sum_{CV}{\rm weight} * (CV - {\rm reference})^2

限制权重可以随模拟步数变化。

若 start_step 和 max_step 非零,而 reduce_step 和 stop_step 为零,权重从 0 线性增加到 weight。

           Harmonic weight
                ↑
          weight|         +-------------
                |        /
                |       /
                |      /
                0-----+---+------------>simulation step
                   start max

若 start_step 和 max_step 为零,而 reduce_step 和 stop_step 非零,权重先保持为 weight,再线性减小到 0。

           Harmonic weight
                ↑
          weight|----------------+
                |                 \
                |                  \
                |                   \
                0---------------+----+-->simulation step
                             reduce stop

四个步数参数均非零时,权重先增加,再保持最大值,最后减小。

           Harmonic weight
                ↑
          weight|         +------+
                |        /        \
                |       /          \
                |      /            \
                0-----+---+-----+----+-->simulation step
                   start max reduce stop
参数类型说明
CVCV list需要限制的 CV
weightfloat list偏置权重
referencefloat list参考值
periodfloat listCV 周期
start_stepint listweight 开始线性增加的步数
max_stepint listweight 达到最大值的步数
reduce_stepint listweight 开始线性减小的步数
stop_stepint listweight 变为 0 的步数

Steer 线性偏置

steer 施加线性偏置势:

Ubias=∑CVweight∗CVU_{\rm bias} = \sum_{CV} {\rm weight} * CV
参数类型说明
CVCV list施加偏置的 CV
weightfloat list偏置权重

典型示例

用于 SITS 或分析的二面角 CV

[print]
CV = ["phi", "psi"]

[phi]
CV_type = "dihedral"
atom = [4, 6, 8, 14]

[psi]
CV_type = "dihedral"
atom = [6, 8, 14, 16]

与增强采样模块的关系

  • cv_in_file 仅告诉 SPONGE 从哪里读取 CV 定义。
  • meta 引用 CV 名称,并添加 CV_sigma、CV_grid、CV_period 等 Metadynamics 专用参数。
  • SITS 也使用 CV 名称,但其控制参数位于 mdin.spg.toml。

逐项参数说明见增强采样参数和 SinkMeta。