当前位置: 首页 > 分子模拟 >【求助】如何固定某几个原子不动?

【求助】如何固定某几个原子不动?

作者 neweroica
来源: 小木虫 1000 20 举报帖子
+关注

刚接触LAMMPS,有一个问题想请教大家:

我想在整个MD模拟过程中,固定某几个原子始终不动,请问该如何实现? 具体用什么命令和关键词?  谢谢!!! 返回小木虫查看更多

今日热帖
  • 精华评论
  • 老虎大王

    这个有多种方法可以实现。
    首先你把这几个原子放在一个group里面(比如group1),把其它原子放在另外的group(比如group2)里面。然后,你至少可以选择如下几种方法:
    1. 运动方程不对这几个原子积分, 只对group2积分(但我不能确定这个时候group1里面的原子对其它原子的力的作用是否还存在(你可以作一个测试,对于一个构型手工计算一下这几个原子旁边的某一原子的势能,和程序输出的该原子的势能比较一下——用computer pe/atom命令)
    2. 运动方程对所有原子积分,但是对group1里面的原子,每一步都标定它的速度,让它们的速度(或温度)为零。
    3. 运动方程对所有原子积分,令group1里面的原子的初速度为零,然后用 fix setforce命令,把它们的受力搞成零。

    [ Last edited by 老虎大王 on 2009-12-15 at 09:03 ]

  • 老虎大王

    当然,如果这些都不大好使或者太麻烦的话,我推荐你用XMD。XMD里专门有一个命令叫Fix,确保这些原子的位置不被更新,但它们与其它原子的相互作用是存在的。

  • neweroica

    引用回帖:
    Originally posted by 老虎大王 at 2009-12-15 09:01:
    这个有多种方法可以实现。
    首先你把这几个原子放在一个group里面(比如group1),把其它原子放在另外的group(比如group2)里面。然后,你至少可以选择如下几种方法:
    1. 运动方程不对这几个原子积分, 只对group ...

    非常感谢老虎大王!!!

    1. setforce好像不管用。在run之后,原子位置还是随着timestep发生变化。

    2. run            100000 every 1 set group s vx 0 vy 0 vz 0管用。 但我还有个问题:

    因为我将每个分子都是为一个刚体,但同时又想对系统施加NVT,所以我用了两个fix来实现:
    fix 1 all nvt 300.0 300.0 100.0
    fix 2 all rigid group 2 mol1 mol2

    但是运行后却出现警告:
    WARNING: One or more atoms are time integrated more than once

    请问这个问题该怎么解决?

  • neweroica

    引用回帖:
    Originally posted by 老虎大王 at 2009-12-15 09:12:
    当然,如果这些都不大好使或者太麻烦的话,我推荐你用XMD。XMD里专门有一个命令叫Fix,确保这些原子的位置不被更新,但它们与其它原子的相互作用是存在的。

    但我想用Buckingham + Coulomb势,貌似XMD没有吧?

  • 老虎大王

    我没有研究过分子系统,只研究熔盐一类的离子体系和金属一类的原子系统,呵呵。现在我看你的问题是两个:
    A,所有的分子都是rigid body。我其实不大明白你为什么要把分子都搞成刚体,其实分子内可以有相互作用的啊。这在Lammps中也可以实现。
    B,有一些分子始终不动。

    呵呵。这两个结合起来,有一点点麻烦。但在Lammps中应该也可以实现。

    1. 用setforce, 一定要把初始速度先搞成零。这个命令我也没有用过,我现在不能确定它是只管当前步,还是管整个Run, 你测试一下看。刚才我又看了一下手册,手册上说这个命令可以用来固定原子。

    2, Fix rigid 这个命令隐含了对所涉及的刚体中原子进行运动方程的恒能积分,不能再对它用其它的积分命令了,你仔细看说明书就知道了。这个命令的下面有两个“Important note", 你一读就知道。

    3, 你如果所有的原子都是rigid  body,如上所说,你设置fix rigid命令的时候已经同时积分了方程,但你又想用Nvt,那么这个时候你就只能舍弃HOOVER热浴,而改用Berendsen方法(加个 fix temp/berendsen命令,这个命令只标定速度,不积分方程),或者加 fix temp/rescale命令。 这两个命令不但可以控温,而且可以像我前面所说的一样,把你不想让它动的那些原子的温度(速度)设成零。


    4,题外话: 你要用XMD,也有很多办法,比如你把你的双体势做成EAM势函数表,但只有双体势部分有数值,而把Dens和Embed部分都搞成零不就行了,主要是Embed搞成零。这样做,只是没有用Ewald求和,但你是列表形式,算起来也很快的,而且只要你把表中数据点搞得密一些,计算的精度也可以保证。你可以这样搞一下,作个常规计算,与Lammps比较一下。比如用同样的构型,只计算一步,看看能量和力是否相同(主要是能量要相同,力的计算可能由于MD算法不同而略有不同)。

    [ Last edited by 老虎大王 on 2009-12-16 at 13:53 ],

  • 老虎大王

    至于DLPOLY,那是无法选定一些原子让它不动。
    但是DOPOLY对于分子和Rigid body可以有很好的定义。你用DLPOLY也是不错的选择,至于让一些原子不动,这个很容易通过修改源程序来搞定。DLPOLY是Fortran程序,改动起来也容易。

  • neweroica

    引用回帖:
    Originally posted by 老虎大王 at 2009-12-16 17:55:
    至于DLPOLY,那是无法选定一些原子让它不动。
    但是DOPOLY对于分子和Rigid body可以有很好的定义。你用DLPOLY也是不错的选择,至于让一些原子不动,这个很容易通过修改源程序来搞定。DLPOLY是Fortran程序,改动起 ...

    但我在手册上见到:
    DL POLY 3 also allows atoms to be completely immobilized (i.e. “frozen” at a fixed point in the MD cell).

    貌似DL_POLY能够选定一些原子让它不动

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓