• 回答数

    2

  • 浏览数

    2019

  • 收藏数

    0

作者:随遇而安 发表于 2018-11-19 15:51:34
跳转到指定楼层
看了看手册,感觉这两个都可以设定速度,比如说我要设定group里的原子沿着Z轴以一定的速度移动:
fix 1 11 move linear 0.0 0.0 2.0 units box 和velocity 11 set 0.0 0.0 2.0 units box ,这两者有什么区别呢?
又看了看册子,二者的区别就是fix move linear(简称fix)group里的原子不考虑相互间的作用力,就是这些原子会一直已设定的速度运动,而velocity set (简称velocity)只是给group里面的原子设定了一个初始速度,在运动过程中,考虑到原子间的相互作用,速度会变化。还有就是fix command可以直接给原子积分,而velocity只是给原子定义了一个速度而已。不知道理解的对不对?欢迎各位积极参加讨论,相互学习。
分享:
回复

使用道具

该用户从未签到

新手上路

Rank: 1

积分
10
极客币
26
主题
4
帖子
10
注册时间
2018-11-5
在线时间
1 小时
性别
保密
发表于 2018-11-19 15:51:49 | 显示全部楼层
对的,fix move定义了一个时间积分,而 velocity只是给个初始速度。
void FixMove::initial_integrate(int vflag)
{
......
// for linear: X = X0  V*dt
if (mstyle == LINEAR) {
  for (int i = 0; i < nlocal; i) {
  if (mask[i] & groupbit) {
    xold[0] = x[i][0];
    xold[1] = x[i][1];
    xold[2] = x[i][2];
    if (vxflag) {
    v[i][0] = vx;
    x[i][0] = xoriginal[i][0]  vx*delta;
    } else if (rmass) {
    dtfm = dtf / rmass[i];
    v[i][0] = dtfm * f[i][0];
    x[i][0] = dtv * v[i][0];
    } else {
    dtfm = dtf / mass[type[i]];
    v[i][0] = dtfm * f[i][0];
    x[i][0] = dtv * v[i][0];
    }
    if (vyflag) {
    v[i][1] = vy;
    x[i][1] = xoriginal[i][1]  vy*delta;
    } else if (rmass) {
    dtfm = dtf / rmass[i];
    v[i][1] = dtfm * f[i][1];
    x[i][1] = dtv * v[i][1];
    } else {
    dtfm = dtf / mass[type[i]];
    v[i][1] = dtfm * f[i][1];
    x[i][1] = dtv * v[i][1];
    }
    if (vzflag) {
    v[i][2] = vz;
    x[i][2] = xoriginal[i][2]  vz*delta;
    } else if (rmass) {
    dtfm = dtf / rmass[i];
    v[i][2] = dtfm * f[i][2];
    x[i][2] = dtv * v[i][2];
    } else {
    dtfm = dtf / mass[type[i]];
    v[i][2] = dtfm * f[i][2];
    x[i][2] = dtv * v[i][2];
    }
......
}
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
12
极客币
32
主题
5
帖子
13
注册时间
2018-11-5
在线时间
1 小时
性别
保密
 楼主| 发表于 2018-11-19 15:51:57 | 显示全部楼层
回复

使用道具 举报

高级模式 评论
您需要登录后才可以回帖 登录 | 立即注册 微信登录