晶体空间结构变换方法及系统
文献发布时间:2023-06-19 10:08:35
技术领域
本发明涉及晶体展示,特别涉及一种晶体空间结构变换方法及系统。
背景技术
当前描述一个晶体的3维微观空间结构的方式主要是描述晶胞参数,晶体中非对称单元内的分子的每一个原子在晶胞中的相对坐标,和空间群来实现的。具体方式说明如下:
晶胞参数
构成晶体的最基本的几何单元称为晶胞(Unit Cell),其形状、大小与空间格子的平行六面体单位相同,保留了整个晶格的所有特征。
晶胞能完整反映晶体内部原子或离子在三维空间分布之化学-结构特征的平行六面体单元。其中既能够保持晶体结构的对称性而体积又最小者特称“单位晶胞”,但亦常简称晶胞。如图1所示,其具体形状大小由它的三组棱长a、b、c及棱间交角α、β、γ(合称为”晶胞参数”)来表征,与空间格子中的单位平行六面体相对应。
分子内的原子坐标。
晶胞构成了一个参考坐标系。原点为三组棱的交点,x、y、z方向分别为从原点出发沿a、b、c三个方向。
在晶胞这个最小单元内,非对称的每个分子的每个原子都有在上述参考坐标系下的坐标。
比如,对于分子(C13 H16 N4 O),可以用下面的方式来描述每个原子的坐标
每一行中第一列为原子的名称,第二列为原子的元素类型,第三至五列为原子在坐标系中的分数坐标,其实际坐标为该分数坐标乘以x、y、z方向分别对应的棱长a、b、c。最后一列为权重值,通常为1。
晶体的空间群信息
晶体内部结构中全部对称要素的集合称为“空间群”。
一切晶体结构中总共只能有230种不同的对称要素组合方式,即230个空间群。它是由俄国结晶学家费多洛夫和德国结晶学家薛弗利斯(Artur Moritz Schoenflies,1853-1928)于1890至1891年间各自独立地先后推导得出来的,故亦称为“230个费多洛夫群”。
只要给定晶体的空间群的序号,就可以唯一确定该晶体是以怎样的对称要素从非对称的单个分子在空间中有序排列成整个晶体的。
比如如果确定晶体是2号空间群。则全部对称要素为下面两个对称操作
1x,y,z
2-x,-y,-z
所以,晶胞内的所有分子可以从这两个对称操作得到。比如对于上述分子中的每个原子应用这两个对称操作,应用对称操作1,分子中原子坐标不变;应用对称操作2,分子中原子坐标都变为原来的负数。这样就得到完整的晶体3维微观结构描述。
当前大部分的晶体学软件,比如CCDC等都支持这样的描述。
当前的描述方法虽然比较直观,计算也相对简单,但在描述有机晶体优化过程中却非常不方便。因为有机晶体中通常包括好多个柔性健,这些柔性键可以在空间内自由旋转。在晶体优化的过程中,通常都需要保持其他原子间相对位置不变,单独旋转指定的1个或几个柔性键。那么,上述的描述方式就很难直接计算出旋转后的晶体结构。如果在晶体搜索的全局优化算法中,更是无法对晶体结构进行指定的柔性键扫描。这会让整个晶体搜索和优化的过程变成一个不连续的过程,只能通过试错的方式进行。
发明内容
基于此,有必要提供一种可提高晶体优化效率的晶体空间结构变换方法。
同时,提供一种可提高晶体优化效率的晶体空间结构变换系统。
一种晶体空间结构变换方法,包括:
读取:读取晶体文件,将晶体文件中的晶胞参数、分子内的原子坐标和空间群信息转换为面向对象的数据结构存储,面向对象的数据结构包括:晶体结构、分子结构,晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性;分子结构包括:对应的分子实例的唯一标识、分子内全部原子的位置信息;
转换:将面向对象的数据结构转换为新对象数据结构,新对象数据结构包括:新晶体结构、新分子结构,新晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性,新分子结构包括:分子内每个原子对应的原子链,将面向对象的数据结构中晶体结构中的晶胞属性和空间群属性复制到新晶体结构中对应属性,读取分子结构中分子内全部原子的位置信息,根据原子的位置信息确定每个原子的原子链;
晶体演化:计算晶体的晶格能,根据设定步长调整晶体的晶胞属性参数和柔性键取值,按照晶胞预设的棱长和棱角调整步长调整晶胞属性参数,将调整后的参数值赋给晶胞属性参数值,对每条原子链匹配指定的柔性键,根据设定步长进行旋转调整柔性键,每次调整一个参数,计算调整后的晶体晶格能,直至最低的晶体晶格能在设定的停止次数下不再增加,分配ID给演化形成新的晶体;
二次转换:将新对象数据结构转换为面向对象的数据结构;
保存:将晶胞属性、空间群属性写入新的文件,遍历非对称单元内所有分子的属性,获取对应的分子结构参数,对每个分子结构中的原子数组依次逐行写入文件。
在优选实施例中,所述晶体结构的对应晶胞属性记录对应晶胞的6个参数,三组棱长a、b、c、及棱间夹角α、β、γ,所述分子结构的分子内全部原子的位置信息为二维数组,该二维数组中每一项为一个5维数组,该5维数字第一项为原子的名称,第二项为原子的元素类型,第三至五项为原子在晶胞内的分数坐标。
在优选实施例中,所述新晶体结构包的对应晶胞属性记录对应晶胞的6个参数,三组棱长a、b、c、及棱间夹角α、β、γ;所述新分子结构用三维数组记录分子内每个原子对应的原子链{[(cell_o,cell_o,0,θ
在优选实施例中,所述原子局部坐标轴为以该原子与前一个原子之间的连线为z轴的负方向,x轴方向为该原子与前一个和后一个原子所在平面垂直的方向,y轴为与z轴、x轴成右手螺旋规则的方向,第一个原子的前一个原子为晶胞原点,最后一个原子的后一个原子为分子内任意一个非骨架原子;所述原子链:计算分子内每个原子与晶胞原点之间的距离,选择距离最近的一个原子为起始原子,对分子内的每个原子,在分子的拓扑结构中找到一条连接该原子和起始原子的通路,分子内的原子作为通路的节点,分子内两原子之间的键作为通路的边。
在优选实施例中,所述转换还包括:读取与晶体结构对应的分子结构中每个原子的分数坐标,确定每个原子的原子链,并将原子链存储为三维数组中{[(cell_o,cell_o),(an
在优选实施例中,所述演化步骤包括:接受晶胞属性参数演化范围的输入或设置,接受柔性键演化范围的输入或设置,接受新对象数据结构,计算晶体的晶格能,复制新晶体结构对象,按照晶胞预设的棱长和棱角调整步长调整晶胞属性参数,将调整后的参数值赋给晶胞属性参数值,然后遍历新晶体结构中的分子内每个原子对应的原子链的对应数组,对每条原子链匹配指定的柔性键,若匹配到原子链中相邻的两个原子名称和顺序与指定的柔性键的原子键名称和顺序相同,则对后一个原子按指定步长调整,每次调整一个参数,默认做正向调整,然后计算调整后的晶体的晶格能,若调整后的晶体的晶格能增加,则下一步调整循环中做负向调整,如果调整后的晶体的晶格能减少则在下一个调整循环中继续做正向调整,若调整值超出预设调整边界,则将边界作为调整后的值,重复调整,直至最低的晶体晶格能在设定的停止次数下不再增加;所述演化步骤的演化顺序为先调整晶胞参数,再调整柔性键参数,晶胞参数按a、b、c、α、β、γ顺序进行调整,柔性键按新分子结构中的原子链数组中的顺序进行调整。
在优选实施例中,所述二次转换包括:将新晶体结构中的晶胞属性和空间群属性复制为晶体结构中的对应属性,读取第一条原子链中的晶胞原点数组(cell_o,cell_o,0,θ
cosθ
一种晶体空间结构变换系统,包括:
读取模块:读取晶体文件,将晶体文件中的晶胞参数、分子内的原子坐标和空间群信息转换为面向对象的数据结构存储,面向对象的数据结构包括:晶体结构、分子结构,晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性;分子结构包括:对应的分子实例的唯一标识、分子内全部原子的位置信息;
转换模块:将面向对象的数据结构转换为新对象数据结构,新对象数据结构包括:新晶体结构、新分子结构,新晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性,新分子结构包括:分子内每个原子对应的原子链,将面向对象的数据结构中晶体结构中的晶胞属性和空间群属性复制到新晶体结构中对应属性,读取分子结构中分子内全部原子的位置信息,根据原子的位置信息确定每个原子的原子链;
晶体演化模块:计算晶体的晶格能,根据设定步长调整晶体的晶胞属性参数和柔性键取值,按照晶胞预设的棱长和棱角调整步长调整晶胞属性参数,将调整后的参数值赋给晶胞属性参数值,对每条原子链匹配指定的柔性键,根据设定步长进行旋转调整柔性键,每次调整一个参数,计算调整后的晶体晶格能,直至最低的晶体晶格能在设定的停止次数下不再增加,分配ID给演化形成新的晶体;
二次转换模块:将新对象数据结构转换为面向对象的数据结构;
保存模块:将晶胞属性、空间群属性写入新的文件,遍历非对称单元内所有分子的属性,获取对应的分子结构参数,对每个分子结构中的原子数组依次逐行写入文件。
在优选实施例中,所述晶体结构的对应晶胞属性记录对应晶胞的6个参数,三组棱长a、b、c、及棱间夹角α、β、γ,所述分子结构的分子内全部原子的位置信息为二维数组,该二维数组中每一项为一个5维数组,该5维数字第一项为原子的名称,第二项为原子的元素类型,第三至五项为原子在晶胞内的分数坐标;
所述二次转换模块包括:将新晶体结构中的晶胞属性和空间群属性复制为晶体结构中的对应属性,读取第一条原子链中的晶胞原点数组(cell_o,cell_o,0,θ
cosθ
在优选实施例中,所述新晶体结构包的对应晶胞属性记录对应晶胞的6个参数,三组棱长a、b、c、及棱间夹角α、β、γ;所述新分子结构用三维数组记录分子内每个原子对应的原子链{[(cell_o,cell_o,0,θ
所述转换模块还包括:读取与晶体结构对应的分子结构中每个原子的分数坐标,确定每个原子的原子链,并将原子链存储为三维数组中{[(cell_o,cell_o),(an
上述晶体空间结构变换方法及系统通过转换将面向对象的数据结构转换为新对象数据结构,从而将晶体的参数空间从描述每个原子在晶胞内的分数坐标,转换为描述晶体内相邻两个原子之间的相对位置,包括相对距离,之间的夹角,和相邻两个分子键之间的轴距和轴间夹角,这样在晶体演化过程中整个参数空间是连续变化的,克服了之前由于参数空间不连续,导致演化过程不能平滑找到局部最优解的问题,这使得使用新的参数空间在找到局部和全局能量最低的晶体结构的过程中,效率有大幅提升,在研究和算法开发方面也更直观。
附图说明
图1为晶胞的示意图;
图2为本发明一实施例的晶体空间结构变换方法的部分流程图。
具体实施方式
如图1所示,本发明一实施例的晶体空间结构变换方法,包括:
步骤S101,读取:读取晶体文件,将晶体文件中的晶胞参数、分子内的原子坐标和空间群信息转换为面向对象的数据结构存储,面向对象的数据结构包括:晶体结构、分子结构,晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性;分子结构包括:对应的分子实例的唯一标识、分子内全部原子的位置信息;
步骤S103,转换:将面向对象的数据结构转换为新对象数据结构,新对象数据结构包括:新晶体结构、新分子结构,新晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性,新分子结构包括:分子内每个原子对应的原子链,将面向对象的数据结构中晶体结构中的晶胞属性和空间群属性复制到新晶体结构中对应属性,读取分子结构中分子内全部原子的位置信息,根据原子的位置信息确定每个原子的原子链;
步骤S105,晶体演化:计算晶体的晶格能,根据设定步长调整晶体的晶胞属性参数和柔性键取值,按照晶胞预设的棱长和棱角调整步长调整晶胞属性参数,将调整后的参数值赋给晶胞属性参数值,对每条原子链匹配指定的柔性键,根据设定步长进行旋转调整柔性键,每次调整一个参数,计算调整后的晶体晶格能,直至最低的晶体晶格能在设定的停止次数下不再增加,分配ID给演化形成新的晶体;
步骤S107,二次转换:将新对象数据结构转换为面向对象的数据结构;
步骤S109,保存:将晶胞属性、空间群属性写入新的文件,遍历非对称单元内所有分子的属性,获取对应的分子结构参数,对每个分子结构中的原子数组依次逐行写入文件。
本实施例,支持读取传统的CIF晶体文件,读取方式为标准的逐行扫描。模块将CIF文件中的晶胞参数、分子内的原子坐标和空间群信息按下述面向对象的数据结构存储。
数据结构包括2个实体类:晶体结构(Crystal)、分子结构(Molecule)。Crystal类实例化后对应一个具体的晶体结构。Molecule类实例化后对应一个具体的分子结构。Crystal和Molecule之间是1对多的关系,即每个Crystal实例有1个或多个外键指向对应的Molecule实例。
Crystal类包括属性id、unit_cell、molecule_ids、sym。其中id是对应晶体实例的唯一标识。Unit_cell为晶胞属性,是一个6位数组,记录对应晶胞的6个参数:三组棱长a、b、c及棱间交角α、β、γ。molecule_ids为一个不定长多维数组,记录非对称单元内所有分子的id。Sym是晶体实例对应的空间群。
Molecule类包括属性id、atoms。其中id是对应分子实例的唯一标识。atoms为分子内全部原子的位置信息,优选的为分子内全部原子的二维数组,即数组中的每一项是一个5维数组,这个5维数组第一项为原子的名称,第二项为原子的元素类型,第三~五项为原子在晶胞内的分数坐标。参见背景技术。
新数据结构包括2个实体类:新晶体结构(New_Crystal)、新分子结构(New_Molecule)。New_Crystal类实例化后对应一个具体的晶体结构。New_Molecule类实例化后对应一个具体的分子结构。New_Crystal和New_Molecule之间是1对多的关系,即每个New_Crystal实例有1个或多个外键指向对应的New_Molecule实例。
New_Crystal类包括属性id、unit_cell、molecule_ids、sym。其中id是对应晶体实例的唯一标识。Unit_cell为晶胞属性,一个6位数组,记录对应晶胞的6个参数:三组棱长a、b、c及棱间交角α、β、γ。molecule_ids为一个不定长多维数组,记录非对称单元内所有分子的id。Sym是晶体实例对应的空间群。
New_Molecule类包括属性id、atoms_chains。其中id是对应分子实例的唯一标识。
atoms_chains记录了分子内每个原子对应的原子链,用一个三维数组记录,结构是这样的:{[(cell_o,cell_o,0,θ
原子局部坐标轴确定方法:该原子与前一个原子之间的连线为z轴的负方向。x轴方向为该原子与前一个和后一个原子所在平面垂直的方向。y轴为与z轴、x轴成右手螺旋规则的方向。第一个原子的前一个原子为晶胞原点,最后一个原子的后一个原子为分子内任意一个非骨架原子。
原子链确定方法为:
1.计算分子内每个原子与晶胞原点之间的距离。选择距离最近的一个原子为起始原子。
2.对分子内的每个原子,在分子的拓扑结构中找到一条连接该原子和起始原子的通路,通路的节点是分子内的原子,通路的边是分子内两原子之间的键。
优选地,根据下列规则将CIF晶体文件读取的数据结构,转化为新数据结构。
1.将Crystal对象中的晶胞属性和空间群属性直接复制为New_Crystal对象中对应的属性。
2.对Crystal对象中的每一个对应的Molecule对象进行如下操作。
1)读取Molecule对象中的每个atom的分数坐标。按上述原子链确定方法,找出每个原子的原子链,并将原子链存储在三维数组中,存储结构如下。{[(cell_o,cell_o),(an
2)计算晶胞原点到第一个原子的向量和晶胞棱a、c的夹角,得到θ
3)遍历这个数组,对每个原子链计算其d
4)将这个数组存储为New_Molecule对象中的atoms_chains属性。并将New_Molecule对象关联到步骤1中的New_Crystal对象中。
得到了新数据结构下的晶体对象。
晶体演化是通过调整晶体内的晶胞,晶胞内分子位置、朝向,分子内柔性键来改变晶体结构,得到目标性质更好的晶体结构。本实施例支持以晶体晶格能为目标函数的演化。具体演化流程如下。
1.指定晶胞参数的演化范围。
系统提供接口,支持人工输入晶胞参数三组棱长a、b、c及棱间交角α、β、γ的演化范围。输入为一个二维数组[(a
系统可根据需要设置默认参数,系统默认的晶胞参数是[(10%,200%,0.01%),(10%,200%,0.01%),(10%,200%,0.01%),(-10°,10°,0.01°),(-10°,10°,0.01°),(-10°,10°,0.01°)]
2.指定柔性键的演化范围。
柔性键是分子内可旋转的单键。通常当两个原子之间形成σ键的时候,键两端的基团可以沿着键轴旋转,形成不同的分子构象。
本实施例中,系统提供接口,支持人工指定分子柔性键的演化范围。具体流程如下。
1)将分子内可旋转的单键两端的原子名称以数组的形式输入系统。如:[(an
2)对每个柔性键设置旋转范围,输入为一个二维数组[(θ
[-180°,0°]。其中θ
3.输入初始晶体
演化输入的初始晶体为经过经过晶体文件转换模块转换后的New_Crystal晶体对象。
4.计算初始晶体的晶格能。系统支持用力场方法、半经验方法、高精度量化方法计算晶体的能量。也可采用计算化学学科中的标准方法计算晶体能量的方法,常用的力场计算工具有Amber、charmm等,半经验等计算工具有DFTB、Dmacrys,高精度量化方法的计算工具有VASP,Crystal09等。
5.按预设步长调整晶体的晶胞参数和柔性键的取值。复制一个New_Crystal对象,按照晶胞预设的棱长和棱角调整步长值调整晶胞参数,将调整后的参数值直接赋给晶胞参数属性值。然后遍历New_Crystal对象的atoms_chains数组,对每条原子链匹配指定的柔性键,如上例中的[(an
6.上个步骤中,每次调整只调整一个参数,默认做正向调整,即在原值基础上增加步长。然后计算调整后的晶体的晶格能。如果调整后的晶体的能量增加,则在下一个调整循环中做负向调整,即在原值基础上减少步长。如果调整后的晶体的能量减少,则在下一个调整循环中继续做争相调整。
7.如果调整值超出预设调整边界,则将边界做为调整后的值。
8.重复5~7步,直到最低的晶体能量在给定的停止次数下不再增加。默认的停止次数为2000,即在连续2000次迭代内没有能量更低的晶体出现,则停止演化。用户可以手动修改停止次数。
本实施例的二次转换从New_Crystal对象转换为Crystal对象,具体转换方式如下。
1.将New_Crystal对象中的晶胞属性和空间群属性直接复制为Crystal对象中对应的属性。
2.对New_Crystal对象中的每一个对应的New_Molecule对象进行如下操作。
1)读取第一条原子链中的晶胞原点数组(cell_o,cell_o,0,θ
2)读取下一个原子数组(an
3)读取下一个原子数组,重复上一步,如此迭代可以得到整条原子链中每个原子的分数坐标。
4)遍历New_Molecule对象中的属性atoms_chains数组。对每条原子链重复上三步的操作,可以得到整个分子内全部原子的分数坐标。
3.将分子内的全部原子的原子名称、原子类型、分数坐标填入Molecule对象的atoms属性中,就得到了完整的Crystal对象。
保存,将演化得到的全部晶体存储成文件,供研究和其他用途。具体流程如下。
1.用户可以通过接口指定需要保存的晶体结构的id。用户可以指定初始的晶体,但通常会指定演化过程中的任何结构。也可以指定全部演化得到的晶体结构。
2.该模块会根据id检索到系统中对应的New_Crystal对象。然后调用晶体结构转换模块中New_Crystal转换成Crystal对象的功能,得到Crystal对象。
3.该模块接着会将Crystal对象的晶胞参数属性unit_cell、空间群属性sym顺序分行写入新的CIF文件。然后遍历molecule_ids属性,获取对应的Molecule对象,并将每个Molecule中的原子数组依次逐行按写入CIF文件。
4.系统支持直接将CIF文件保存在硬盘或其他存储介质中。
本发明一实施例的晶体空间结构变换系统,包括:
读取模块:读取晶体文件,将晶体文件中的晶胞参数、分子内的原子坐标和空间群信息转换为面向对象的数据结构存储,面向对象的数据结构包括:晶体结构、分子结构,晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性;分子结构包括:对应的分子实例的唯一标识、分子内全部原子的位置信息;
转换模块:将面向对象的数据结构转换为新对象数据结构,新对象数据结构包括:新晶体结构、新分子结构,新晶体结构包括:晶体实例的唯一标识、对应的晶胞属性、非对称单元内所有分子的ID、晶体实例对应的空间群属性,新分子结构包括:分子内每个原子对应的原子链,将面向对象的数据结构中晶体结构中的晶胞属性和空间群属性复制到新晶体结构中对应属性,读取分子结构中分子内全部原子的位置信息,根据原子的位置信息确定每个原子的原子链;
晶体演化模块:计算晶体的晶格能,根据设定步长调整晶体的晶胞属性参数和柔性键取值,按照晶胞预设的棱长和棱角调整步长调整晶胞属性参数,将调整后的参数值赋给晶胞属性参数值,对每条原子链匹配指定的柔性键,根据设定步长进行旋转调整柔性键,每次调整一个参数,计算调整后的晶体晶格能,直至最低的晶体晶格能在设定的停止次数下不再增加,分配ID给演化形成新的晶体;
二次转换模块:将新对象数据结构转换为面向对象的数据结构;
保存模块:将晶胞属性、空间群属性写入新的文件,遍历非对称单元内所有分子的属性,获取对应的分子结构参数,对每个分子结构中的原子数组依次逐行写入文件。
本实施例的晶体结构的对应晶胞属性记录对应晶胞的6个参数,三组棱长a、b、c、及棱间夹角α、β、γ,所述分子结构的分子内全部原子的位置信息为二维数组,该二维数组中每一项为一个5维数组,该5维数字第一项为原子的名称,第二项为原子的元素类型,第三至五项为原子在晶胞内的分数坐标。
本实施例的新晶体结构包的对应晶胞属性记录对应晶胞的6个参数,三组棱长a、b、c、及棱间夹角α、β、γ。新分子结构用三维数组记录分子内每个原子对应的原子链{[(cell_o,cell_o,0,θ
原子局部坐标轴为以该原子与前一个原子之间的连线为z轴的负方向,x轴方向为该原子与前一个和后一个原子所在平面垂直的方向,y轴为与z轴、x轴成右手螺旋规则的方向,第一个原子的前一个原子为晶胞原点,最后一个原子的后一个原子为分子内任意一个非骨架原子。
本实施例的原子链:计算分子内每个原子与晶胞原点之间的距离,选择距离最近的一个原子为起始原子,对分子内的每个原子,在分子的拓扑结构中找到一条连接该原子和起始原子的通路,分子内的原子作为通路的节点,分子内两原子之间的键作为通路的边。
进一步,本实施例的转换模块还包括:读取与晶体结构对应的分子结构中每个原子的分数坐标,确定每个原子的原子链,并将原子链存储为三维数组中{[(cell_o,cell_o),(an
进一步,本实施例的演化模块包括:接受晶胞属性参数演化范围的输入或设置,接受柔性键演化范围的输入或设置,接受新对象数据结构,计算晶体的晶格能,复制新晶体结构对象,按照晶胞预设的棱长和棱角调整步长调整晶胞属性参数,将调整后的参数值赋给晶胞属性参数值,然后遍历新晶体结构中的分子内每个原子对应的原子链的对应数组,对每条原子链匹配指定的柔性键,若匹配到原子链中相邻的两个原子名称和顺序与指定的柔性键的原子键名称和顺序相同,则对后一个原子按指定步长调整,每次调整一个参数,默认做正向调整,然后计算调整后的晶体的晶格能,若调整后的晶体的晶格能增加,则下一步调整循环中做负向调整,如果调整后的晶体的晶格能减少则在下一个调整循环中继续做正向调整,若调整值超出预设调整边界,则将边界作为调整后的值,重复调整,直至最低的晶体晶格能在设定的停止次数下不再增加。优选的,演化模块的演化顺序为先调整晶胞参数,再调整柔性键参数,晶胞参数按a、b、c、α、β、γ顺序进行调整,柔性键按新分子结构中的原子链数组中的顺序进行调整。
二次转换模块包括:将新晶体结构中的晶胞属性和空间群属性复制为晶体结构中的对应属性,读取第一条原子链中的晶胞原点数组(cell_o,cell_o,0,θ
本实施例的保存模块,将演化得到的全部晶体存储成文件,供研究和其他用途。具体流程如下:
用户可以通过接口指定需要保存的晶体结构的id。用户可以指定初始的晶体,但通常会指定演化过程中的任何结构。也可以指定全部演化得到的晶体结构。
该模块会根据id检索到系统中对应的New_Crystal对象。然后调用晶体结构转换模块中New_Crystal转换成Crystal对象的功能,得到Crystal对象。
该模块接着会将Crystal对象的晶胞参数属性unit_cell、空间群属性sym顺序分行写入新的CIF文件。然后遍历molecule_ids属性,获取对应的Molecule对象,并将每个Molecule中的原子数组依次逐行按写入CIF文件。
系统支持直接将CIF文件保存在硬盘或其他存储介质中。
本发明系统架构采用模型层和控制层分离的架构设计。
模型层的数据存储采用直接内存管理的架构,控制层用Python开发成便于调用和封装的代码脚本库。
本发明可以部署在公有云上、本地集群上,也可以部署在用户的个人电脑上。系统运行软件环境可采用:Linux 4以上内核版本,Python2.7运行环境。
本发明将晶体的参数空间从描述每个原子在晶胞内的分数坐标,转换为描述晶体内相邻两个原子之间的相对位置,包括相对距离,之间的夹角,和相邻两个分子键之间的轴距和轴间夹角。这样在晶体演化过程中整个参数空间是连续变化的。克服了之前由于参数空间不连续,导致演化过程不能平滑找到局部最优解的问题。这使得使用心得参数空间在找到局部和全局能量最低的晶体结构的过程中,效率有大幅提升,在研究和算法开发方面也更直观。
以上述依据本申请的理想实施例为启示,通过上述的说明内容,相关工作人员完全可以在不偏离本项申请技术思想的范围内,进行多样的变更以及修改。本项申请的技术性范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
- 晶体空间结构变换方法及系统
- 基于绝缘栅双极型晶体管的双向功率变换系统及变换方法