计算化学公社

标题: 求助:VMD如何计算周期性盒子边缘分子之间的质心距离? [打印本页]

作者
Author:
ChunLinX    时间: 2021-3-18 15:10
标题: 求助:VMD如何计算周期性盒子边缘分子之间的质心距离?
本帖最后由 ChunLinX 于 2021-3-18 15:23 编辑

大家好!
       我想统计动力学模拟的盒子中所有分子对(两分子间质心距离小于某一个阀值认为是分子对)之间的质心距离。对于位于周期性盒子边缘的分子,可以用pbwithin得到相邻分子的序号,但是计算得到的位于不同盒子的分子间的质心距离是一个边长减去实际值。请问VMD有什么命令可以在计算距离的时候考虑周期性边界,得到小于边长(x,y,z不等)的距离呢?
       谢谢!

作者
Author:
sobereva    时间: 2021-3-18 17:36
参考
http://bbs.keinsci.com/thread-21896-1-1.html
写脚本的时候明确周期性问题

作者
Author:
ChunLinX    时间: 2021-3-18 19:04
本帖最后由 ChunLinX 于 2021-3-18 19:05 编辑
sobereva 发表于 2021-3-18 17:36
参考
http://bbs.keinsci.com/thread-21896-1-1.html
写脚本的时候明确周期性问题

谢谢sob老师!再请教一下,set Dx = [expr pmodulo( $x1 - $x2 + ($boxX/2) $boxX) 和($boxX/2)]中间的符号应该是什么呢?好像乱码了
作者
Author:
sobereva    时间: 2021-3-19 18:27
ChunLinX 发表于 2021-3-18 19:04
谢谢sob老师!再请教一下,set Dx = [expr pmodulo( $x1 - $x2 + ($boxX/2) $boxX) 和($boxX/2)]中间的符 ...

set Dx = [expr pmodulo( $x1 - $x2 + ($boxX/2) $boxX) – ($boxX/2)]

网页编码你选unicode就能看到正常的符号了
作者
Author:
ChunLinX    时间: 2021-3-20 09:41
sobereva 发表于 2021-3-19 18:27
set Dx = [expr pmodulo( $x1 - $x2 + ($boxX/2) $boxX) – ($boxX/2)]

网页编码你选unicode就能看到 ...

谢谢sob老师,我试了试,报错说没有pmodulo这个函数。
我用下面的方法来计算,不知道可以不:
        set Vij [vecsub $COM($i) $COM($j)]
        set Xij [lindex $Vij 0]
        set Yij [lindex $Vij 1]
        set Zij [lindex $Vij 2]
        if {[expr abs($Xij)] > [expr $boxX/2]} { if {$Xij>0} {
            set Xij [expr $Xij-$boxX] } else {set Xij [expr $boxX+$Xij]  } }
        if {[expr abs($Yij)] > [expr $boxY/2]} { if {$Yij>0} {
            set Yij [expr $Yij-$boxY] } else {set Yij [expr $boxY+$Yij]  } }  
        if {[expr abs($Zij)] > [expr $boxZ/2]} { if {$Zij>0} {
            set Zij [expr $Zij-$boxZ] } else {set Zij [expr $boxZ+$Zij]  } }
        set dist [expr sqrt($Xij*$Xij+$Yij*$Yij+$Zij*$Zij)]
作者
Author:
sobereva    时间: 2021-3-20 21:21
ChunLinX 发表于 2021-3-20 09:41
谢谢sob老师,我试了试,报错说没有pmodulo这个函数。
我用下面的方法来计算,不知道可以不:
        set Vij ...

应该是这个函数
https://help.scilab.org/docs/6.0.0/en_US/modulo.html
写个类似的
作者
Author:
ChunLinX    时间: 2021-3-20 23:10
sobereva 发表于 2021-3-20 21:21
应该是这个函数
https://help.scilab.org/docs/6.0.0/en_US/modulo.html
写个类似的

谢谢sob老师,我学习了一下这个函数,其思想和5楼的代码是一样的
作者
Author:
xinyanli    时间: 2022-10-7 15:07
ChunLinX 发表于 2021-3-20 09:41
谢谢sob老师,我试了试,报错说没有pmodulo这个函数。
我用下面的方法来计算,不知道可以不:
        set Vij ...

请问下您这个脚本为什么是跟盒子的1/2边长比较而不是跟整个边长比较呢?
作者
Author:
ChunLinX    时间: 2022-11-2 12:18
xinyanli 发表于 2022-10-7 15:07
请问下您这个脚本为什么是跟盒子的1/2边长比较而不是跟整个边长比较呢?

在一个盒子里面是不会出现大于整个边长这种情况的。我们关注的是最短距离,一旦这个距离大于边长的一半,说明在另一边的距离必然会更小。画出来一看就明白了




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3