Eastsheng's Wiki

Lammps Command

2019-01-22 18:11:28

[toc]

neighbor 2.0 multi

  • neighbor skin style
  • 此命令用于设置cutoff distance;
  • 3种style代表不同的算法去构建list,bin nsq multi
  • 一般使用bin较多;
  • nsq没有用过,手册上讲,在计算非周期性的盒子里的未溶解的小分子可能会更快;
  • multi多用于一些cutoff distance 差别大的体系,例如,聚合物与离子共存的体系。

group

1
2
3
group	g_ID	region	reg_ID
# or
group g_ID type 1 2 # atom type
  • 所分的组的个数不能大于32个。

meam势函数

  • meam 势函数,data很多重复元素的原子的时候,library那个文件后面只需要写元素,另一个需要写全原子类型。

LJ 交互 mix

1
pair_modify mix geometric
  • 如果需要交互LJ势参数时,可以使用此命令

Berendsen控温

1
2
fix ID group-ID temp/berendsen Tstart Tstop Tdamp
fix 1 all temp/berendsen 300.0 300.0 100.0
  • Tdamp 温度阻尼参数,时间单位(例如ps,fs)
  • 使用Berendsen恒温器重新设置一组原子的温度,Berendsen每一步都会调整原子的速度。
    温度不能为0

LAMMPS中dihedral与improper具体有什么区别?

  • 这不是lammps问题,是力场问题。A dihedral angle potentials depends on four consecutive bonded atoms, whereas the improper torsion depends on three atoms centered around a fourth atom. … The main difference between both torsion potentials is the definition of the torsional angle and the functional form of the potential function.

lj/cut/coul/long

1
2
3
lj/cut/coul/long args = cutoff (cutoff2)
cutoff = global cutoff for LJ (and Coulombic if only 1 arg) (distance units)
cutoff2 = global cutoff for Coulombic (optional) (distance units)

SHAKE vs RATTLE

在LAMMPS模拟中,通过SHAKE或RATTLE算法对指定的键和角度应用键和角度约束。这通常会启用更长的时间步长。

  • SHAKE
1
2
3
fix ID group-ID style tol iter N constraint values ... keyword value ...
fix ID group-ID shake 0.0001 20 10 b 254 a 459

  • tol = accuracy tolerance of SHAKE solution
  • iter = max # of iterations in each SHAKE solution
  • N = print SHAKE statistics every this many timesteps (0 = never)
  • b values = one or more bond types
  • a values = one or more angle types
  • t values = one or more atom types
  • m value = one or more mass values
  • SHAKE算法是为标准Verlet timestepping等方案而发明的,在这些方案中,只有坐标被积分,速度被近似为轨迹的有限差分;
  • 如果速度被明确地积分,就像LAMMPS使用的velocity Verlet积分方法一样,为了消除沿着键的速度分量,就需要第二组约束力;
  • SHAKE and RATTLE都是针对单个分子来设置的;
  • i原子和j原子的位移矢量为:rijn+1 = rjn-rin
  • 约束条件为:① rijn+1.rijn+1=dij2 and ② vijn+1.rijn+1=0
  • 其中,SHAKE算法满足第一条件,如果强加第二条件,沿键方向的速度分量就会消失;
  • RATTLE算法满足这两个条件;
  • fix SHAKERATTLE有着相同的设置和选项;
  • 通过SHAKE算法每一步都指定键和角去重新设置它们的平衡长度和角度值J of Comp Phys, 23, 327-341 (1977);这是通过施加额外的约束力来实现的,这样新的位置就保持了所需的原子分离。小的delta值意味着SHAKE的很好
  • 另外,由于fix RATTLE修改力和速度,因此fix RATTLE应该定义在所有其他fix的后面。
  • 为了计算效率,在一个模拟中只能定义一个SHAKE或RATTLE

9. fix npt

1
2
fix ID group-ID style_name keyword value
fix 1 water npt temp 300.0 300.0 100.0 iso 0.0 0.0 1000.0
  • 基于Nose-Hoover style对非哈密顿运动方程执行时间积分,在每个时间步更新组中原子的位置和速度。
  • 压力里是怎么给的?
  • 温度调节和压力调节是通过添加一些动态变量来实现的,这些动态变量与粒子速度(温度调节)和模拟域尺寸(压力调节)耦合。
  • 除了基本的恒温和恒压调节外,这些修复还可以创建一个与粒子恒温器耦合的恒温器链,以及另一个与恒压调节变量耦合的恒温器链。该稳压器可以耦合到整体盒体积,或个别尺寸,包括xy, xz和yz倾斜尺寸。恒温器的外部压力可以指定为标量压力(等压系综)或对称应力张量的分量(恒应力系综)。当使用正确时,粒子的时间平均温度和应力张量将会和指定的Tstart/Tstop和Pstart/Pstop目标值匹配。

定义一种计算一组原子温度的方法

1
2
3
4
5
compute ID group-ID temp
compute temp_HeavyOil HeavyOil temp
compute press_HeavyOil all pressure temp_HeavyOil
thermo_style custom step temp press pxx pyy pzz pe ke etotal epair ebond eangle edihed
thermo_modify temp temp_HeavyOil format 3 %15.8g press press_HeavyOil
  • 计算压力必须是对all进行。

设置一组或多组原子刚体

  • 设置一组
1
fix 1       Water  rigid   single
  • 设置多组
1
2
3
4
fix 2       all  rigid   group 2 Water Quartz
# 排除刚体组内原子之间的相互作用力
neigh_modify exclude group Water Water
neigh_modify exclude group Quartz Quartz

read_data

  • 该命令通过使用add、offset、shift关键字可以多次读取data文件,可以组件比较复杂的系统,比如:先读取一个流体结构,再读取一个壁面的结构,然后还可以再次读取第二个壁面结构,并可以通过displace_atoms命令对该结构进行旋转,以实现对面的另一个壁面。

读取单个data时

1
read_data file.data

读取多个data时

1
2
read_data file.data keyword args
read_data data.water add append offset 3 1 1 1 1 shift 0.0 0.0 50.0

keyword:add、offset、shift、extra、group

add:如果没有模拟盒子,不能用add,如果已经通过create_box命令或先前的read_data命令构建了盒子(也即是data中的xlo、xhi等)。
  • 另外,add后面还跟着一个参数,有四个选择:append;IDoffset;MOLoffset merge分别表示:
    (append)后面加上来的data中的原子id直接顺延,比如之前读取的data一共5个原子类型,后来加的data有2个原子id,那么合起来的原子id就是5+2;
    (IDoffset)是指定一个具体数值代替前面的5,例如:IDoffset 10, 这里表示下一个data读取的原子id会从11开始;
    (MOLoffset)与IDoffset相似,表示分子ID
    (merge)表示不改变原子id直接合并
offset在data文件中读取atom bond angle … types
  • offset后面跟五个参数
1
2
3
4
5
toff = offset to add to atom types
boff = offset to add to bond types
aoff = offset to add to angle types
doff = offset to add to dihedral types
ioff = offset to add to improper types
  • 以第一个为例,如果toff=2,添加的原子的原来id为1 2 3,那么添加后将会变为3 4 5;
shift关键字可以改变加入系统data的位置
  • 有三个参数分别代表在三个方向的原子偏移量;
1
2
shift Sx, Sy, Sz
shift 0.0 0.0 20
extra关键字为稍后再次使用read_data命令添加新的atom、bond、angle等而准备
  • 该关键字只能在第一次读取data时使用;
  • 当系统第一次初始化时,LAMMPS设置了允许的原子、键、角度等类型的最大数目;
  • 如果不使用extra关键字,那么这些类型的数量将被限制在您读的第一个数据文件中出现的数量。
  • 例如,如果第一个数据文件是Si的固体基底,它可能会指定一个单个原子类型;如果读取第二个数据文件而且是不同的材料(例如水分子),位于基底上方,将需要使用不同的原子类型。只有在读取基底数据文件时将extra/atom/types关键字的值设置的足够大,才能做到
  • 注意,使用extra关键字还允许每个数据文件包含如下部分:Masses或Pair Coeffs或Bond Coeffs,其大小与数据文件中的类型数量相匹配
group关键字是可以把新添加data设为一组
nocoeff关键字,顾名思义

LAMMPS data盒子类型转换

1
2
change_box all triclinic #正交转单斜
change_box all ortho #单斜转正交

计算group和group原子之间相互能与力

  • 模板

    1
    compute ID group-ID group/group group2-ID keyword value ...
  • 例子

    1
    compute 1 lower group/group upper
  • keyword

    1
    2
    3
    4
    pair value = yes or no #默认yes, 相互作用能将包括一对分量,该分量被定义为所有原子对之间的成对能量,其中一对原子中的一个在第一组,另一个在第二组。
    kspace value = yes or no #默认为no,若为yes则计算的相互作用能将包括一个k空间分量,即长程库仑能
    boundary value = yes or no #默认yes,如果boundary关键字设置为yes(默认值),并且包含了kspace贡献,那么这个能量修正项将被添加到总组-组能量中。这一修正项不影响力的计算,并将为零,如果一个或两个组是电荷中性。这个能量修正项与常规Ewald和PPPM例程中包含的能量修正项相同。
    molecule value = off or inter or intra #默认no,如果将molecule关键字设置为inter或intra,则在包括它们的相互作用能和力之前,将根据每对中的两个原子的分子id进行额外的检查。对于两个原子之间inter的相互作用,这两个原子必须处于不同的分子中。对于内部设置intra,这两个原子必须在同一个分子中.
  • 拓展:

    • 是不是说,加了kspace yes后计算的是范德华力+库仑力;
    • 进一步不加kspace yes,计算的是范德华力,这两项相减就可得到两个组之间的库仑力了?

LAMMPS data删除原子

  • 删除没有键角信息的data中组
    1
    delete_atoms    group    Quartz
  • 删除带有键角信息的data中组
    1
    2
    delete_atoms    group    Quartz
    reset_atom_ids #需新版lammps
  • ref

change_box

LAMMPS data盒子类型转换

1
2
change_box all triclinic #正交转单斜
change_box all ortho #单斜转正交