大家好,我是小马老师。
使用lammps自带命令建模时,有时候会用delete_atoms命令删除部分原子,但是在删除原子后,lammps并不一定会重新分配原子的ID,造成data文件中的原子ID序号不连续。
使用velocity命令进行温度初始化时,会提示“Atom IDs must be consecutive for velocity create ...”错误。
错误的主要原因就是因为删除原子后,原子ID序号不连续。
针对这个问题,下面给出两种解决方案。
1. 对于纯原子体系,保持compress属性为yes
对于不含有键、角的纯原子体系,在使用delete_atoms命令时保compress属性为yes。
Compress yes对删除部分原子后的剩余原子进行编号压缩,保证ID连续不间断。
这个属性默认是yes状态,所以下面的两句命令效果是一样的:
delete_atoms region del compress yes
或
delete_atoms region del
Compress发挥作用的前提是atom_style不为full类型。
对于金属体系来说,一般原子类型为atomic,在使用delete_atoms会默认进行ID重新排列,因此,不会出现velocity错误提示。
以下代码,原子类型为atomic,删除Cu底部原子
units metal
atom_style atomic
lattice fcc 3.61
region box block 0 2 0 2 0 2
create_box 1 box
create_atoms 1 box
region del block INF INF INF INF INF 1
mass 1 64
write_data Cu.data
打开Cu.data文件可以看到:剩余8个原子编号仍然为1-8,不会影响后续的操作。
2. 对于含键角体系,使用reset_atom_ids命令
对于包含键、角的体系,如atom_style full类型,compress yes不起作用。
这时候就需要用到reset_atom_ids命令。
下面对full类型下,使用以及不使用reset_atom_ids命令的建模结果进行对比。
units metal
boundary p p f
atom_style full
lattice fcc 3.61
region box block 0 2 0 2 0 2
create_box 1 box
create_atoms 1 box
#删除下部Cu原子
region del block INF INF INF INF INF 1
delete_atoms region del
mass 1 64
write_data Cu.data
打开Cu.data文件后会发现,data文件包含8个原子,原子的ID是19-32,并且也不连续。
添加reset_atom_ids命令后,代码如下:
units metal
boundary p p f
atom_style full
lattice fcc 3.61
region box block 0 2 0 2 0 2
create_box 1 box
create_atoms 1 box
region del block INF INF INF INF INF 1
delete_atoms region del
mass 1 64
reset_atom_ids
write_data Cu.data
再次打开Cu.data文件,此时原子ID已经重新进行了编号,ID编号1-8,完美解决这个难题。
总之,如果体系不包含键、角信息,使用delete_atoms compress yes命令不会造成原子ID不连续。
如果体系为包含键角的full类型,在删除原子后,需要使用reset_atom_ids命令对原子ID进行重新编号。
END
扫描关注微信公众号:lammps加油站。