Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 分子动力学模拟:波动偶极子模型的实现_Algorithm_Simulation - Fatal编程技术网

Algorithm 分子动力学模拟:波动偶极子模型的实现

Algorithm 分子动力学模拟:波动偶极子模型的实现,algorithm,simulation,Algorithm,Simulation,我正在进行二氧化硅的分子动力学模拟。不久前,我转向了波动偶极子模型,经过很多努力,我仍然在实现它时遇到问题 简言之,系统中的所有氧原子都是可极化的,它们的偶极矩取决于它们相对于系统中所有其他原子的位置。更具体地说,我使用TS potential(),其中在每个时间步迭代地发现偶极子 这意味着当计算作用在原子上的力时,我必须考虑到势能对坐标的依赖性。 以前,我使用的是简单的成对势模型,所以我会设置我的程序,用微分势能表达式得到的解析公式计算力 现在我不知所措:如何实现这一新的潜力?在我发现的所有文

我正在进行二氧化硅的分子动力学模拟。不久前,我转向了波动偶极子模型,经过很多努力,我仍然在实现它时遇到问题

简言之,系统中的所有氧原子都是可极化的,它们的偶极矩取决于它们相对于系统中所有其他原子的位置。更具体地说,我使用TS potential(),其中在每个时间步迭代地发现偶极子

这意味着当计算作用在原子上的力时,我必须考虑到势能对坐标的依赖性。 以前,我使用的是简单的成对势模型,所以我会设置我的程序,用微分势能表达式得到的解析公式计算力

现在我不知所措:如何实现这一新的潜力?在我发现的所有文章中,它们只给出了公式,而没有给出算法。在我看来,当我计算作用于某个原子的力时,我必须考虑这个原子偶极子的变化,所有相邻原子偶极子的变化,然后更多原子偶极子的变化,等等,因为它们相互依赖。毕竟,正是由于这种相互依赖性,偶极子才会在每个时间步迭代地找到。显然,我不能迭代计算每个原子的力,因为算法的计算复杂度太高了。我应该用一些简单的函数来解释偶极子的变化吗?这看起来也不是一个好主意,因为偶极子是迭代计算的,精度很高,然后,在它真正重要的地方(计算力),我们会使用原始函数吗

那么我如何实现这个模型呢?还有,是否有可能像我以前做的那样,用解析法计算力,或者有必要用导数的有限差分公式计算力

我还没有在文献中找到我的问题的答案,但是如果你知道一些文章、网站或书籍,其中突出显示了这些材料,请告诉我该来源

谢谢你抽出时间

==================================================================================

更新:

谢谢你的回答。不幸的是,这不是我的问题。我并没有问如何计算偶极子,但考虑到偶极子随运动而变化,如何计算力

我试图以简单的方式计算力(不考虑偶极子通过其距离的相互依赖性,只计算每个步骤上的偶极子,然后计算力,就好像这些偶极子是静态的一样),但我得到的结果在物理上并不正确

为了分析这种情况,我建立了一个由两个原子组成的系统的模拟:Si和O。它们有相反的电荷,所以它们振荡。能量-时间关系图如下所示:

顶部的曲线代表动能,中间的一个代表势能,而不考虑偶极子相互作用,底部的一个代表了系统的势能,其中偶极子相互作用被考虑。 从这张图中可以清楚地看到,系统正在做它不应该做的事情:爬上潜在的斜坡。所以我决定这是因为我没有考虑偶极矩和坐标的关系。例如,在一个给定的时间点,我们计算力,力的方向是使两个原子相互移动。但是当我们把它们移向彼此时(甚至是轻微的),偶极矩会发生变化,我们发现我们最终得到的势能比以前更高!在下一个时间步骤中,情况是相同的


所以问题是,如何考虑这种影响,因为我能想到的几种方法要么计算量太大,要么太粗糙。

我不确定我是否完全理解你的问题,但听起来你可能需要实现马尔可夫链类型的解决方案

有关更多信息,请参阅此文章:

编辑。
我提出这个建议的原因是,这听起来像是一个系统,每个原子的状态取决于它的邻居,而邻居的状态又取决于它们的邻居,依此类推。从概念上讲,这可以建模为一个巨大的矩阵,您可以根据每个值的邻居(??)迭代更新每个值。这是一个棘手的问题,但链接到的文章展示了如何使用马尔可夫链来解决非常大的转移矩阵问题,而不是计算实际矩阵。

*让人大吃一惊。老实说,我不确定你是否能在这里得到答案(尽管我可能错了)。你在physics.stackexchange.com可能会有更好的运气,因为你可能会在那里找到一个在计算物理方面有专长的人。谢谢你的链接。我想,我也会尝试在那里提问,虽然我对主页上的问题印象不深)我同意,它们可能有点笼统。无论如何,如果你没有得到答案,我不介意对这个问题悬赏。这可能更适合你的问题:。你说“在我发现的所有文章中,他们只给你公式,但没有算法”,你能告诉我们这些公式吗?然后我们可能有更好的机会弄清楚如何对它们进行算法化。我可能对马尔可夫链知之甚少,但我不知道如何在这里拟合它们。这里没有什么随机的。很抱歉,如果这只是我的无知,我无法承担研究无关主题的费用,只是为了看看现在是否真的有关系。显然,MCs在这里听上去不太有用。(当然,我可能错了)我会再加一点解释,但这可能是朝着错误的方向发展。哦,我明白你的意思了。通常在物理模拟中,人们需要准确地了解力。此外,让力量取决于结果