王者之魄活动:neigh_modify command analysis

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 08:03:18

用来设定计算邻位列表的频率。

       Delay: never build a new list until at least N steps after the previous build 在建立一次邻位列表后,至少要经过N steps才能建立下一次的邻位列表。

       Every:在delay经过之后,每经过M步建立一次邻位列表。个人感觉lammps中这点写的有点混乱。个人理解:每建立一次列表后,经过N+M才能建立下一次列表。如果N不为零,必须为M的倍数,否则没有什么意义了。这里为什么非要这种设置呢,如果设置频率的话只需要一个参数就够了啊?http://simulation.5d6d.scom/viewthread.php?tid=8245&page=1#pid52602

       Check:如果值为no,则只需要满足以上两者的设定后就可以重新建立邻位列表了。如果值为yes,则只有当某个原子的位移大于皮肤半径的一半才重新建立列表。

       Exclude:用来取消某些原子之间的相互作用。对于以下几种情况很重要:裂纹模拟;冰冻处理;原子被设定为刚体时;这中处理方式可以节约计算时间。这个只影响原子间非键结的相互作用。

       Page and one:关于邻位列表的存储问题。

     *******************************************************

       恩,仔细看了下你写的分析过程,结合原始程序,基本上明白了这两个参数的作用。其实,建立邻位列表的频率是由delay every check三个参数共同确定的。
  if (ago >= delay && ago % every == 0)//这是最基本的条件
{
    if (dist_check == 0) return 1;//当dist_check==0的时候,邻位列表定期更新
    else return check_distance();//当dist_check!=0的时候,就是标签更新,只有当列表中某个原子的位移大于skin的一半的时候才建立
  }
else return 0;
    其实首先要明白,更新列表有两种方式,一种是定期更新,另外一种是标签更新。
    因此,如果delay为零,则不管dist_check如何取值,只要当时间步是every的倍数就可以更新列表
    如果delay不为零,every==1,并且dist_check==0,则更新列表的频率与every没有什么关系,只要距离上次更新列表的时间步达到delay就更新。
    而如果delay不为零,every不为1时,手册中有要求,“如果delay不为零,他的值必须是every的倍数”。因此,如果dist_check==0,则时间步达到delay+every,则列表就开始更新。而如果dist_check不为零,则只有当时间步为delay+N*every(N=0,1,2……)的时候,邻位列表才更新。