计算化学公社

标题: 求助关于RDF的程序理解问题。 [打印本页]

作者
Author:
少年爱吃地三鲜    时间: 2020-11-15 11:16
标题: 求助关于RDF的程序理解问题。
各位老师好,最近想编写一个RDF的程序, 关于RDF我的理解就是,区域密度/全局密度(比值),如图,这个dr 是不是每次计算的增量。如果是 这个dr应该如何选择?另外,正方体盒子。有多少个球层是不是可以理解为 边长/dr。还是说 我可以先求出定义中心原子与每一个原子的距离然后进行分类再求rdf。针对该问题有些混淆。麻烦各位老师教导!PS: http://isaacs.sourceforge.net/phys/rdfs.html#gr-fig

作者
Author:
少年爱吃地三鲜    时间: 2020-11-15 22:05
就告诉我这个dr怎么定义就行。这个增量应该怎么选择呢
作者
Author:
liuyuje714    时间: 2020-11-15 23:13
dr自己设定,比如gmx默认用的0.002 nm。其实我觉得楼主如果考虑自己写程序,单单看公式不一定能明白其含义,我建议你多看看一些成熟的动力学相关源代码,比如gromacs,又或者是mdanalysis等。
作者
Author:
少年爱吃地三鲜    时间: 2020-11-16 08:05
liuyuje714 发表于 2020-11-15 23:13
dr自己设定,比如gmx默认用的0.002 nm。其实我觉得楼主如果考虑自己写程序,单单看公式不一定能明白其含义 ...

好的,感谢您的建议! 请问gromacs的源代码在哪里能看呢?MDAnalysis的我能找到 gromacs的手册里有吗?谢谢您
作者
Author:
liuyuje714    时间: 2020-11-16 09:18
少年爱吃地三鲜 发表于 2020-11-16 08:05
好的,感谢您的建议! 请问gromacs的源代码在哪里能看呢?MDAnalysis的我能找到 gromacs的手册里有吗?谢 ...

github上都有相关的源,直接就可以找到。看手册那是给用软件的人,而你写程序,当然必须看源代码,gromacs的c/c++文件,mdanalysis的python源文件
作者
Author:
少年爱吃地三鲜    时间: 2020-11-16 10:01
liuyuje714 发表于 2020-11-16 09:18
github上都有相关的源,直接就可以找到。看手册那是给用软件的人,而你写程序,当然必须看源代码,gromac ...

感谢您! 我去看看!
作者
Author:
Graphite    时间: 2020-11-16 11:45
本帖最后由 Graphite 于 2020-11-16 11:46 编辑

可以算每个原子对距离的同时进行计数。
我写的RDF代码(python)的其中一段,self.pcf是个字典,键是距离r(1 dr ~ 10.0,间隔为dr),值是距离落在r ~r+dr的原子对的计数。
        if periodic:
            p_vectors = list()
            for xmulti in (0, -1, 1):
                for ymulti in (0, -1, 1):
                    for zmulti in (0, -1, 1):
                        p_vector = np.array([xmulti * self.xlength, ymulti * self.ylength, zmulti * self.zlength])
                        p_vectors.append(p_vector)

            for ref in self.atomtypedict[str(refatomtype)]:
                for target in self.atomtypedict[str(targetatomtype)]:
                    r_ref = np.array(self.atomdict[ref][3:6])
                    r_target = np.array(self.atomdict[target][3:6])

                    for p_vector in p_vectors:
                        dist = np.linalg.norm(r_ref - r_target - p_vector)

                        for r in self.pcf.keys():
                            if dist > r and dist < r + dr:
                                self.pcf[r] += 1





作者
Author:
少年爱吃地三鲜    时间: 2020-11-16 14:30
Graphite 发表于 2020-11-16 11:45
可以算每个原子对距离的同时进行计数。
我写的RDF代码(python)的其中一段,self.pcf是个字典,键是距离r ...

感谢您的帮助!




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