Google
      
发新话题
打印

[Monte Carlo] 能两个粒子同时运动吗?

能两个粒子同时运动吗?

我是自己编程的,最近被一个问题困扰,就是如何如何在程序里同时让两个粒子或多个粒子同时运动?
我现在的程序都是一次只能有一个粒子运动,然后这个粒子运动完之后才跳出循环,进行第二个粒子的运动。我想问下你们用的软件都是怎么运作的呢?是不是可以让多个粒子同时运动呢?
我是个新手,希望得到老手们的指导啊~
用C++编KMC程序,寻同道者交流。

TOP

回复 楼主 eaglet 的帖子

自己不太懂编程,但忍不住想说几句

我个人觉得,各个粒子同时运动,是对于各个粒子的状态,分别对其建立动力学方程,,对于某个粒子在此时刻的受力,是要综合考虑该时刻下所有其它粒子对其作用力的叠加,然后统一求解该方程组,得到下一个时刻的各个粒子的位置和速度,然后再重复以上步骤,循环。

至于您说的只能一次一个粒子运动,然后它运动完之后跳出循环,第二个粒子再运动,这也不太符合MD的基本原理吧。

不知道说的正确与否,还希望各位达人指正。
本帖最近评分记录
  • minminchen8 讨论指数 +1 谢谢肥超!! 2008-6-5 22:51
苦心中常得悦心之趣;
得意时便生失意之悲。

TOP

MD由t时刻的坐标,得到t时刻的力,根据t时刻的速度,得到t+dt时刻的坐标,也就是说粒子是同时更新位置的。
一次动一个或一组粒子类似于MC的操作,倒也不是没有意义。
本帖最近评分记录
  • iamjoan0928 讨论指数 +1 tks a lot! 2008-6-6 09:48
手擎六脉神剑,指点斗转星移

TOP

先谢谢两位的指点~····
在MC里边考虑粒子的运动是根据跳跃几率算的,就是说粒子可能向各个方向运动,只是概率不同,然后给出随机数再判断其具体运动方向。这就导致了一个粒子一次只能移动一个单位,移动完再根据新位置的跳跃几率算下一个的运动方向。我现在就想让两个粒子同时跳跃,然后根据新位置同时计算下边的运动方向,直到它不再满足运动的条件,才停下来。
我看两个朋友的意思是MD考虑时,由一个状态下粒子所受到的力,计算出粒子的下一个位置,然后运动,这里需要不考虑哪个先动的问题。如果我照这个思路编的话,就应该是先让每个粒子走一步,第一步全部走完之后再让它们走第二步,是这个意思吧?
我的想法是能不能让它们在各自的for循环里运动,然后让这几个for循环同时运动,我刚接触程序,不知道这样能实现不?

谢谢两位了,如果我的想法不行就让它们一步一步运动了,麻烦了点,但也算是解决问题了~····
用C++编KMC程序,寻同道者交流。

TOP

回复 地板 eaglet 的帖子

原来楼主的意思是MC,我还以为MD呢

MC是通过通过一个阈值判断粒子是否运动吧,只能通过遍历各个粒子判断是否运动。

楼主的意思是 同时判断两个粒子是否达到阈值?

我不懂MC的理论,是不是可以求出所有的粒子的概率,然后一起判断? 不知道这样合适不?

至于几个for同时循环? 容易实现吗?

我的一个想法是,一起求出概率,然后可以一起判断? 不知道这样是否可以?
本帖最近评分记录
  • iamjoan0928 讨论指数 +1 tks for discussion! 2008-6-6 15:09
  • minminchen8 讨论指数 +1 thank you!! 2008-6-6 15:02
苦心中常得悦心之趣;
得意时便生失意之悲。

TOP

是的,MC是通过一个阈值判断粒子的运动的,这个阈值就是它的几率值,运动方向也是这么判断的,只是几率值不同了。
求出所有粒子的概率一起判断,应该就是我说的让粒子先走一步,等所有粒子全部走完之后再走第二步,这么做应该行。
以前我师兄他们编程都是以一个粒子的运动作为一个for循环的,一次只能运行一个for循环,所以只能一个粒子运动。我这次把它改一下,把粒子走一步作为一个for循环,就相当于多个粒子同时运动了,这样应该更符合实际一点吧。
几个for循环同时运动,实现的话应该是有几个CPU核同时做,各算各的,但各算各的在这种情况又不行,它们的结果是互有影响的,恐怕不好实现。(我不懂并行计算,只是自己想的,呵呵)
谢谢肥超了!!!收获不小~~····
本帖最近评分记录
  • iamjoan0928 讨论指数 +1 tks for discussion! 2008-6-6 19:45
用C++编KMC程序,寻同道者交流。

TOP

回复 6楼 eaglet 的帖子

呵呵,我其实也不是太懂,就根据自己的一知半解随便说一说啦,没想到还撞上了

莫要谢我啦,

希望咱们的会员都能积极的讨论,不要害怕自己说的是错误的,讨论嘛,呵呵
苦心中常得悦心之趣;
得意时便生失意之悲。

TOP

恩,讨论挺好的~
我也想,可惜我现在水平太差了,那些软件都没用过,看不懂~····
以后得多学学了~
用C++编KMC程序,寻同道者交流。

TOP

Since it is MC, I think whatever you choose, it does not matter.

TOP

看不太懂楼主的意思。。。说点个人看法:

1. MC归根到底只是概率:在所有粒子中随机取一个粒子,随机给这个粒子一个新位置,比较一下新的系统总能量与之前旧的总能量的差别,如果变小了,这个粒子的新位置就被接受;如果总能量大于旧的configuration的总能量,那么产生一个0-1随机数与exp(-(U2-U1)/KT)作比较,来随机决定这个新位置是不是应该被接受还是被拒绝。

2.基于这个原理,MC本身就没有任何time dependent的东西,完全就是根据能量来得到统计意义上平衡结构。也就没有什么第一步,第二步的概念。。。。你可以随机移动一个粒子,你也可以同事随机移动100个粒子,你甚至可以随机移动你系统中所有的粒子,任意给出所有粒子的新位置。。。只是你的选择绝大部分都会被拒绝,你要做远远大于n“步”循环尝试。。。。
本帖最近评分记录
  • fatcharm 讨论指数 +1 Thanks for suggestion 2008-8-26 04:17

TOP

I don't think your method works....or has any practical usage....

TOP

赞助商链接

论坛之星

发新话题