【LAMMPS翻译系列】pair_style sw命令

pair_style sw命令设置使用三体Stillinger-Weber势函数。

使用语法

pair_style sw
pair_style sw/cuda 
pair_style sw/gpu 
pair_style sw/omp

使用举例

pair_style sw
pair_coeff * * si.sw Si
pair_coeff * * GaN.sw Ga N Ga

使用介绍

该命令设置使用三体Stillinger-Weber势函数。能量E的表达式为:

Stillinger-Weber potential formula

其中,phi2是二体项,phi3是三体项。公式中的 求和 是对原子i所有截断距离在a*sigma之内的近邻原子j和k进行的。

对于sw类型的势函数,只需要使用1一次pair_coeff命令,就可以指定sw势函数文件及所需要的全部参数。如果N是体系中的原子类型,那么在pair_coeff命令中定义势文件的参数后面指定N个相应的参数就可以为所有的原子分配势函数。

举例来说,假如文件SiC.sw是Si和C的sw势函数文件。如果在你的LAMMPS模拟中有4种原子类型的原子,并且你希望前三种是Si,第四种是C,那么你可以使用如下的pair_coeff命令:

pair_coeff * * SiC.sw Si Si Si C

最前面的两个参数必须是* *,这样才能将后面的设置应用在所有的原子类型上。最后面4个参数中的前3个Si参数将体系中原子类型为1,2,3的原子配置为Si元素,最后的C参数将体系中类型为4的原子配置为C元素。如果将参数设置为NULL,那么就不会进行配置。如果sw势是作为hybrid势类型一部分使用时,这种设置会比较有用。NULL实际上相当于原子类型占位符,从而可以为其所代表的原子类型设置其他类型的势函数。

sw势函数文件在LAMMPS的potentials目录下,以.sw为后缀。文件中非空白行、非注释行即定义了一组三种类型元素之间的势参数。每一行参数的意义如下(可以参考上面的公式):

  • element 1 (the center atom in a 3-body interaction)
  • element 2
  • element 3
  • epsilon (energy units)
  • sigma (distance units)
  • a
  • lambda
  • gamma
  • costheta0
  • A
  • B
  • p
  • q
  • tol

其中,参数A, B, p, q 仅仅用于二体相互作用;lambda和costheta0仅仅用于三体相互作用;epsilon, sigma, a 既用于二体,也用三体相互作用。gamma用于三体相互作用,却是以一对原子进行定义的。没有括号注释的参数都是没有单位的。

同时,LAMMPS增加了一个参数tol,它是与优化相关的,作用于二体和三体相互作用。使用sw势函数时,当原子间距离小于理论截断距离时,相互作用能量会变得非常小,甚至可以忽略。因此,LAMMPS会根据用户定义的tol参数定义一个虚拟截断距离。在构建原子领域列表的时候,会使用这个虚拟截断距离来有效的减小领域列表的尺寸,从而减小计算量。LAMMPS为每一个三体作用项提供一个tol值,可以分别进行控制。如果tol=0.0,那么LAMMPS会使用标准的sw截断。

  • 对于单元素的模拟,势文件中只需要一行势参数(如SiSiSi)。
  • 对于两种元素的模拟,势文件中需要8行势参数(如SiSiSi, SiSiC, SiCSi, SiCC, CSiSi, CSiC, CCSi, CCC),实际上就是两种元素在三体构型下的所有排列。
  • 对于三种元素的模拟,势文件中需要27行势参数。

每一行的第一个元素是三体相互作用的中心原子,比如SiCC的意思就是Si原子是中心原子,2个C是其近邻原子。第2个参数和第3个参数相同的行表示二体相互作用的参数,比如以SiCC开始的行就表示Si和C的两体相互作用参数。原则上说,三体相互作用参数可以描述三种元素的构型,但实际上三体相互作用的参数通常用由包括两组对势参数的简单公式定义。这两组对势参数分别对应ij对和ik对,其中i是中心原子。在计算合金体系的三体势参数时,用户必须确保正确的组合规则。还需要注意的是,函数phi3中包含了两个来自ij对和ik对的指数屏蔽因子。对于与Si原子和另外一个C原子作用的C原子来说,phi3既依赖于CSiC的三体势参数,也依赖于CCC和CSiSi的二体势参数。由于两个近邻原子的次序是任意的,所以三体势参数CSiC和CCSi的应该是相同的。类似的,二体势参数SiCC和CSiSi也应该是相同的。对于第2个参数和第3个参数(如SiCSi)不同的行,其中仅用于二体相互作用的参数(A, B, p, and q)不会被使用,因此可以设置为0.0。phi3中从ij对和ik对所取的参数(sigma, a, gamma)也是类似的。




带有cudagpuomp, or opt 后缀的sw势函数类型,在功能上与不带后缀的sw势函数是一样的。区别在它们是为了是程序跑的更快而被优化过的,这是依赖于你的硬件的。可以参考手册中关于

程序加速

的讨论。不同的加速类型都是用相同的参数,计算的结果也应该是相同的,但可能会一些精度上的差异。

这些加速类型分别是USER-CUDA, GPU, USER-OMP and OPT安装包的一部分。只有在你安装LAMMPS的时候把它们包括进去了,这些类型的命令才可以使用。

你可以在输入脚本中直接通过加上相应的后缀直接指定加速类型,也可以通过命令行参数-suffix进行设置,或者你可以在输入脚本中使用suffix命令指定。




与Mixing, shift, table, tail correction, restart, rRESPA 相关的信息:

对于原子类型I, J (I!=J),I,J对应两种不同的元素类型,LAMMPS会自动对势文件中的参数进行mixing。

sw势函数类型不支持命令pair_modify的shift, table, tail选项。

sw势函数类型不会将其信息写入到二进制重启动文件中,因为相关的信息存储在势文件了。所以但你在输入脚本中读入重启动文件时,需要重新指定命令pair_style和pair_coeff。

对于sw势函数类型而言,在使用run_style respa命令时,只能使用pair关键字,而不支持innermiddleouter关键字。

使用限制

该sw势函数类型是MANYBODY安装包的一部分,所以只有在你安装LAMMPS的时候把它包括进去了,才可以使用该命令。该安装包是默认安装的。

该sw势函数类型需要使用将newton命令设置为on。

随着LAMMPS安装包提供的sw势函数文件,其units都是metal类型的。如果你要使用其他类型的units,你需要自己创建sw势文件,并将其中的参数进行相应的修改。

sw/gpu目前仅限于单元素模拟。

相关命令

pair_coeff

默认设置

标签: lammps, 势函数, lammps翻译

相关文章推荐

添加新评论 (无需注册,可直接评论)

已有 5 条评论

  1. 秒杀你的傲慢

    博主我想问一下这个SW势参数是在pair_coeff命令后直接写?还是需要将势参数写到一个文件里,直接调用?

  2. 一棵树

    博主你好!如下的程序总是报错incorrect args for pair coefficients 改了很多次还是不对,求教!
    pair_style hybrid lj/cut/coul/long 10.0 tersoff
    bond_style harmonic
    angle_style harmonic
    read_data ws.data
    pair_coeff 3 3 tersoff Si.tersoff Si NULL NULL
    pair_coeff 1 1 lj/cut/coul/long 0.0000 0.0000
    pair_coeff 3 1 lj/cut/coul/long 0.0 1.013

  3. zxhywcc

    博主你好,上一条问题没问清楚,我想请教的是,对于LJ/cut,在进行pair_coeff设置时的epsilon (energy units),sigma (distance units)的具体数值是怎么设定的呢

  4. zxhywcc

    请问epsilon (energy units),sigma (distance units)的具体数值是怎么设定的呢