大家好,我是小马老师!

最近在咨询过程中,发现不少朋友对势函数混合势写法不是很清楚,以致运行出错。

比较常见的一个错误是:All pair coeffs are not set,如下图所示:

lammps混合势函数设置,常见的一个错误解决方案_错误提示

错误提示为“不是所有的原子都设置了势参数”,表示有的原子可能没有设置势参数。

出现这种错误主要有两种原因:

第一,因为原子数量多,确实少写了某种原子的势参数,这种情况仔细检查,找出未设置势的原子,补充设置即可。

第二,设置了全部原子的势函数,但是设置方法出错,这种情况再怎么检查,也不能解决问题因为表面上看,所有的势已经全部被设置。

下面以一个简单的Cu-Al界面模型为例,给出这种错误的解决方法。

lammps混合势函数设置,常见的一个错误解决方案_公众号_02

界面模型如下图所示,下层为Cu,原子类别1,上层为Al,原子类型2,Cu和Al均使用meam势,cu-Al之间的势使用lj势。

lammps混合势函数设置,常见的一个错误解决方案_错误提示_03

势函数设置如下:


pair_style hybrid meam/c lj/cut 10
pair_coeff * * meam/c library.Cu.meam Cu Cu.meam Cu NULL #Cu
pair_coeff * * meam/c library-Al.meam Al Al.meam NULL Al #Al
pair_coeff 1 2 lj/cut 0.4 2.47 #Cu-Al


如果按照以上代码设置,就会提示“All pair coeffs are not set”,可代码中已经设置了Cu、Al以及Cu-Al的所有势。

出现这种错误,主要是因为在同一in文件使用了两个meam势,第二个Al的meam势会覆盖掉Cu的meam势,导致Cu的meam势参数丢失,所以程序给出势参数设置不全的提示。

lammps混合势函数设置,常见的一个错误解决方案_公众号_02

解决的办法:

如果在同一个in文件中使用多个同种类型的势,为防止覆盖,需要对相同类型的势进行编号区分,所以正确的写法为:


#类型设置中把所有的meam/c全部列出,本文需写2个meam/c
pair_style hybrid meam/c meam/c lj/cut 10
#在meam/c后面增加编号1 2
pair_coeff * * meam/c 1 library.Cu.meam Cu Cu.meam Cu NULL
pair_coeff * * meam/c 2 library-Al.meam Al Al.meam NULL Al
pair_coeff 1 2 lj/cut 0.4 2.47 #Cu-Al


这时候再进行模拟,就没有错误提示了。

lammps混合势函数设置,常见的一个错误解决方案_错误提示_05

下面给出全部in文件代码以供参考:


units   metal
atom_style atomic


region box block 0 80 0 10 0 40 units box
create_box 2 box


region cu block INF INF INF INF INF 20 units box
lattice fcc 3.61
create_atoms 1 region cu


region al block INF INF INF INF 21 INF units box
lattice fcc 4.05
create_atoms 2 region al


mass 1 64
mass 2 27


pair_style hybrid meam/c meam/c lj/cut 10
pair_coeff * * meam/c 1 library.Cu.meam Cu Cu.meam Cu NULL
pair_coeff * * meam/c 2 library-Al.meam Al Al.meam NULL Al
pair_coeff 1 2 lj/cut 0.4 2.47 #Cu-Al


write_data CuAl.data


复合势函数的设置相对比较复杂,也是lammps学习过程中的一个难点,公众号后陆续推出势函数设置技巧,敬请关注!


END


公众号案例代码以及学习交流,请加QQ群:754749935

关注微信公众号:lammps加油站