24小时热门版块排行榜    

查看: 375  |  回复: 0

pelargonium

新虫 (初入文坛)

[求助] 求帮助,统计多元环筛选程序算法

已有的条件:
知道每个原子的分数坐标和整个晶胞的晶格参数,可根据此条件得到每个原子周围成键的最近邻的原子序号。
需要得到的数据:
统计三元环,四元环,等多元环的数量。
要求:
多元环不可再分为更小的环。

现在行进的具体情况:
我的整体思路是:
1、首先记录下所有的原子最近邻的原子序号。考虑到晶胞边界,选用27个镜像来判断,原子距离在键长(Cutoff)范围内的记录为最近邻,存在数组c中。
图1是我的晶胞,图2是加上一个镜像的示意图,程序中是加上前后上下左右等27个镜像。
  
2、此时数组c中的得到的是如图3结果:
第一列是原子序号,后面的是最近邻的原子序号,没有的记为0。
下来根据树状图4开始选头尾一致的“环”记录在数组string中,以七元环为例,string[0]为开关,为后面筛选做准备。满足起始原子—最近邻x—x的最近邻y。。。。。—n最近邻z,当z与起始原子序号相同时,将全部序号记录在string[1]-string[8]中,其中必须满足string[1]!=string[2]!= 。。。。。!=string[8]。

3、将大环中的小环删选出去:即排除图5情况

4、现在最大的问题在于镜像的影响出现在如图6:

也就是说由于镜像的干扰导致所统计的“环”有些是不封口的。
目前采取的措施是将所有string数组中的原子间距再统计一遍,限定原子间距小于键长。但就有很多新的问题:比如有的过边界(即原始晶胞中原子与原子距离是超过键长的)但满足“环”的定义(如图7)。而且过边界奇数次或偶数次不能当判定依据,如下图的四元环中,过边界奇数次,但他是个满足要求的“环”。
所以现在的问题就是找不到筛选方法来判断得到的“环”是封口的还是不封口的。


以上是我的全部思路和问题所在,如果这样不好解决的话,重新找一个满足条件的算法也可以。

1.png



2.png



3.png



4.png



5.png



6.png



7.png
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 pelargonium 的主题更新
信息提示
请填处理意见