0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

QM/MM几何构型优化计算的python脚本

鸿之微 来源:鸿之微 作者:鸿之微 2022-07-21 15:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

QM/MM结构优化

QM/MM几何构型优化计算的python脚本如下:

import glob, math, os.path

from pBabel import AmberCrdFile_ToCoordinates3,

AmberTopologyFile_ToSystem ,

SystemGeometryTrajectory ,

AmberCrdFile_FromSystem ,

PDBFile_FromSystem ,

XYZFile_FromSystem

from pCore import Clone, logFile, Selection

from pMolecule import NBModelORCA, QCModelBDF, System

from pMoleculeScripts import ConjugateGradientMinimize_SystemGeometry,

FIREMinimize_SystemGeometry ,

LBFGSMinimize_SystemGeometry ,

SteepestDescentMinimize_SystemGeometry

# 定义结构优化接口

def opt_ConjugateGradientMinimize(molecule, selection):

molecule.DefineFixedAtoms(selection) #固定原子

#定义优化方法

ConjugateGradientMinimize_SystemGeometry(

molecule,

maximumIterations = 40, # 最大优化步数

rmsGradientTolerance = 0.1, #优化收敛控制

trajectories = [(trajectory, 1)]

) # 定义轨迹保存频率

# 定义能量计算模式

nbModel = NBModelORCA()

qcModel = QCModelBDF("GB3LYP:6-31g")

# 读取体系坐标和拓扑信息

molecule = AmberTopologyFile_ToSystem ("GallicAcid.prmtop")

molecule.coordinates3 = AmberCrdFile_ToCoordinates3("GallicAcid.crd")

# 关闭体系对称性

molecule.DefineSymmetry(crystalClass = None) #QM/MM方法不支持使用周期性边界条件

#. Define Atoms List

natoms = len(molecule.atoms) # 系统中总原子数

qm_list = range(72, 90) # QM 区原子

activate_list = range(126, 144) + range (144, 162) # MM区活性原子(优化中可以移动)

#定义MM区原子

mm_list = range (natoms)

for i in qm_list:

mm_list.remove(i) # MM 删除QM原子

mm_inactivate_list = mm_list[:]

for i in activate_list :

mm_inactivate_list.remove(i)

# 输入QM原子

qmmmtest_qc = Selection.FromIterable(qm_list)

# 定义各选择区

selection_qm_mm_inactivate = Selection.FromIterable(qm_list + mm_inactivate_list)

selection_mm = Selection.FromIterable(mm_list)

selection_mm_inactivate = Selection.FromIterable(mm_inactivate_list)

# . Define the energy model.

molecule.DefineQCModel(qcModel, qcSelection = qmmmtest_qc)

molecule.DefineNBModel(nbModel)

molecule.Summary()

#计算优化开始时总能量

eStart = molecule.Energy()

#定义输出文件目录名

outlabel = 'opt_watbox_bdf'

if os.path.exists(outlabel):

pass

else:

os.mkdir (outlabel)

outlabel = outlabel + '/' + outlabel

# 定义输出轨迹

trajectory = SystemGeometryTrajectory (outlabel + ".trj" , molecule, mode = "w")

# 开始第一阶段优化

# 定义优化两步

iterations = 2

# 顺次固定QM区和MM区进行优化

for i in range(iterations):

opt_ConjugateGradientMinimize(molecule, selection_qm_mm_inactivate) #固定QM区优化

opt_ConjugateGradientMinimize(molecule, selection_mm) #固定MM区优化

# 开始第二阶段优化

# QM区和MM区同时优化

opt_ConjugateGradientMinimize(molecule, selection_mm_inactivate)

#输出优化后总能量

eStop = molecule.Energy()

#保存优化坐标,可以为xyz/crd/pdb等。

XYZFile_FromSystem(outlabel + ".xyz", molecule)

AmberCrdFile_FromSystem(outlabel + ".crd" , molecule)

PDBFile_FromSystem(outlabel + ".pdb" , molecule)

输出体系收敛信息如下(此处仅展示前20步优化收敛结果):

----------------------------------------------------------------------------------------------------------------

Iteration Function RMS Gradient Max. |Grad.| RMS Disp. Max. |Disp.|

----------------------------------------------------------------------------------------------------------------

0 I -1696839.69778731 2.46510318 9.94250232 0.00785674 0.03168860

2 L1s -1696839.82030342 1.38615730 5.83254788 0.00043873 0.00126431

4 L1s -1696839.90971371 1.41241184 5.29242524 0.00067556 0.00172485

6 L0s -1696840.01109863 1.41344485 4.70119338 0.00090773 0.00265969

8 L1s -1696840.09635696 1.44964059 5.72496661 0.00108731 0.00328490

10 L1s -1696840.17289698 1.28607709 4.73666387 0.00108469 0.00354577

12 L1s -1696840.23841524 1.03217304 3.00441004 0.00081945 0.00267931

14 L1s -1696840.30741088 1.40349698 5.22220965 0.00162080 0.00519590

16 L1s -1696840.43546466 1.32604042 4.51175225 0.00158796 0.00455431

18 L0s -1696840.52547251 1.27123125 4.20616166 0.00158796 0.00428040

20 L0s -1696840.60265453 1.08553355 3.12355616 0.00158796 0.00470223

----------------------------------------------------------------------------------------------------------------

输出体系总能量信息如下:

9fc1cc7a-080b-11ed-ba43-dac502259ad0.png

注:QM/MM几何构型优化一般不容易收敛,在实际操作中需要的技巧较多。常见的有,固定MM区,优化QM区;然后固定QM区优化MM区。如此往复循环几次后,再同时优化QM区和MM区。优化是否收敛,和QM区的选择及QM/MM边界是否有带电较多的原子等关系很大。为了加速优化,可以在计算时固定MM区,仅选择离QM区较近的合适区域,作为活性区域,在优化中坐标可以变化。

QM/MM激发态计算

基于上一步的QM/MM几何构型优化,继而即可将MM区活性原子添加到QM区进行QM/MM-TDDFT计算,完整的代码如下:

import glob, math, os.path

from pBabel import AmberCrdFile_ToCoordinates3,

AmberTopologyFile_ToSystem ,

SystemGeometryTrajectory ,

AmberCrdFile_FromSystem ,

PDBFile_FromSystem ,

XYZFile_FromSystem

from pCore import Clone, logFile, Selection

from pMolecule import NBModelORCA, QCModelBDF, System

from pMoleculeScripts import ConjugateGradientMinimize_SystemGeometry,

FIREMinimize_SystemGeometry ,

LBFGSMinimize_SystemGeometry ,

SteepestDescentMinimize_SystemGeometry

# 定义结构优化接口

def opt_ConjugateGradientMinimize(molecule, selection):

molecule.DefineFixedAtoms(selection) #固定原子

#定义优化方法

ConjugateGradientMinimize_SystemGeometry(

molecule,

maximumIterations = 40, # 最大优化步数

rmsGradientTolerance = 0.1, #优化收敛控制

trajectories = [(trajectory, 1)]

) # 定义轨迹保存频率

# 定义能量计算模式

nbModel = NBModelORCA()

qcModel = QCModelBDF("GB3LYP:6-31g")

# 读取体系坐标和拓扑信息

molecule = AmberTopologyFile_ToSystem ("GallicAcid.prmtop")

molecule.coordinates3 = AmberCrdFile_ToCoordinates3("GallicAcid.crd")

# 关闭体系对称性

molecule.DefineSymmetry(crystalClass = None) #QM/MM方法不支持使用周期性边界条件

#. Define Atoms List

natoms = len(molecule.atoms) # 系统中总原子数

qm_list = range(72, 90) # QM 区原子

activate_list = range(126, 144) + range (144, 162) # MM区活性原子(优化中可以移动)

#定义MM区原子

mm_list = range (natoms)

for i in qm_list:

mm_list.remove(i) # MM 删除QM原子

mm_inactivate_list = mm_list[:]

for i in activate_list :

mm_inactivate_list.remove(i)

# 输入QM原子

qmmmtest_qc = Selection.FromIterable(qm_list)

# 定义各选择区

selection_qm_mm_inactivate = Selection.FromIterable(qm_list + mm_inactivate_list)

selection_mm = Selection.FromIterable(mm_list)

selection_mm_inactivate = Selection.FromIterable(mm_inactivate_list)

# . Define the energy model.

molecule.DefineQCModel(qcModel, qcSelection = qmmmtest_qc)

molecule.DefineNBModel(nbModel)

molecule.Summary()

#计算优化开始时总能量

eStart = molecule.Energy()

#定义输出文件目录名

outlabel = 'opt_watbox_bdf'

if os.path.exists(outlabel):

pass

else:

os.mkdir (outlabel)

outlabel = outlabel + '/' + outlabel

# 定义输出轨迹

trajectory = SystemGeometryTrajectory (outlabel + ".trj" , molecule, mode = "w")

# 开始第一阶段优化

# 定义优化两步

iterations = 2

# 顺次固定QM区和MM区进行优化

for i in range(iterations):

opt_ConjugateGradientMinimize(molecule, selection_qm_mm_inactivate) #固定QM区优化

opt_ConjugateGradientMinimize(molecule, selection_mm) #固定MM区优化

# 开始第二阶段优化

# QM区和MM区同时优化

opt_ConjugateGradientMinimize(molecule, selection_mm_inactivate)

#输出优化后总能量

eStop = molecule.Energy()

#保存优化坐标,可以为xyz/crd/pdb等。

XYZFile_FromSystem(outlabel + ".xyz", molecule)

AmberCrdFile_FromSystem(outlabel + ".crd" , molecule)

PDBFile_FromSystem(outlabel + ".pdb" , molecule)

# TDDFT计算

qcModel = QCModelBDF_template ( )

qcModel.UseTemplate (template = 'head_bdf_nosymm.inp' )

tdtest = Selection.FromIterable ( qm_list + activate_list )

# . Define the energy model.

molecule.DefineQCModel ( qcModel, qcSelection = tdtest )

molecule.DefineNBModel ( nbModel )

molecule.Summary ( )

# . Calculate

energy = molecule.Energy ( )

输出体系总能量信息如下:

9fdb3d0e-080b-11ed-ba43-dac502259ad0.png

同时生成.log结果文件,和普通的激发态计算一样,可以看到振子强度,激发能,激发态的总能量等信息

No. 1 w= 4.7116 eV -1937.8276358207 a.u. f= 0.0217 D= 0.0000 Ova= 0.6704

CV(0): A( 129 )-> A( 135 ) c_i: 0.7254 Per: 52.6% IPA: 7.721 eV Oai: 0.6606

CV(0): A( 129 )-> A( 138 ) c_i: 0.2292 Per: 5.3% IPA: 9.104 eV Oai: 0.8139

CV(0): A( 132 )-> A( 135 ) c_i: 0.4722 Per: 22.3% IPA: 7.562 eV Oai: 0.6924

CV(0): A( 132 )-> A( 138 ) c_i: -0.4062 Per: 16.5% IPA: 8.946 eV Oai: 0.6542

随后还打印了跃迁偶极矩

*** Ground to excited state Transition electric dipole moments (Au) ***

State X Y Z Osc.

1 0.0959 0.1531 0.3937 0.0217 0.0217

2 0.0632 -0.1286 0.3984 0.0207 0.0207

3 -0.0797 -0.2409 0.4272 0.0287 0.0287

4 0.0384 -0.0172 -0.0189 0.0003 0.0003

5 1.1981 0.8618 -0.1305 0.2751 0.2751

吸收光谱分析

对于激发态我们往往需要得到理论预测的吸收谱峰形,也就是将每个激发态的吸收按一定的半峰宽进行高斯展宽。在TDDFT计算正常结束后,我们需要进入终端用命令调用BDF安装路径下的plotspec.py脚本执行计算。若用户使用鸿之微云算力资源,进入命令端方式请查阅鸿之微云指南,此文不做赘述。

进入终端后,在目录下运行$BDFHOME/sbin/plotspec.py bdf.out,会产生两个文件,分别为bdf.stick.csv和bdf.spec.csv,前者包含所有激发态的吸收波长和摩尔消光系数,可以用来作棒状图,后者包含高斯展宽后的吸收谱(默认的展宽FWHM为0.5 eV),分别对比真空环境以及溶剂化效应下高斯展宽后的吸收谱情况,并用Excel、Origin等作图软件作图如下:

9ffc7adc-080b-11ed-ba43-dac502259ad0.png

上图也可说明由于QM/MM计算考虑溶剂化效应,存在周围其他分子的相互作用,从而使得吸收光谱发生红移现象。
审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 光谱分析
    +关注

    关注

    0

    文章

    41

    浏览量

    10400
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

    90302

原文标题:鸿之微BDF软件计算赏析|采用BDF的QM/MM多尺度计算方法研究晶体的光物理性质(二)

文章出处:【微信号:hzwtech,微信公众号:鸿之微】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析MCF51QM128微控制器:特性、规格与应用指南

    深入解析MCF51QM128微控制器:特性、规格与应用指南 在电子设计领域,选择一款合适的微控制器对于项目的成功至关重要。MCF51QM128作为Freescale Semiconductor推出
    的头像 发表于 04-10 12:30 178次阅读

    探索MCF51QM128:一款卓越的微控制器

    探索MCF51QM128:一款卓越的微控制器 在电子工程领域,微控制器是众多项目的核心。今天,我们来深入了解NXP Freescale Semiconductor的MCF51QM128微控制器,看看
    的头像 发表于 04-09 16:10 206次阅读

    使用PYTHON进行的跨平台仿真

    内部的解决方案,而且还允许跨平台模拟,以从其他程序或编程语言获益,并结合熟悉物理光学特性的VirtualLab Fusion,从而扩展模拟、优化、设计和后处理的选项。 因此,我们正在深入研究
    发表于 04-02 08:21

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    Fusion的简单方法。在本示例中,我们将演示如何使用Python脚本运行光学仿真,以向用户简要概述这种跨平台的仿真能力。 用例概览 文件路径 用户可以在样本文件的文件夹中找到所有文件。包含这些文件
    发表于 03-31 09:39

    [VirtualLab] 使用Python进行跨平台参数扫描

    摘要 VirtualLab Fusion允许外部访问其建模技术、求解器和结果。这有助于应用其他数据处理或优化工具来进一步研究光学模拟。在本示例中,我们演示如何使用Python脚本运行参数扫描,以及
    发表于 03-31 09:36

    如何在 VisionFive 上使用 Python 包?

    确保执行以下步骤: 将 Fedora OS 刷新到 Micro-SD 卡中,如将 Fedora OS 刷新到 Micro-SD 卡部分中的VisionFive 单板计算机快速入门指南. 登录
    发表于 03-30 08:28

    Altair OptiStruct:重构结构研发逻辑,引领工业仿真与优化新纪元

    **AMSES自动化多级子结构特征值求解器**,可快速处理百万自由度超大规模模型,精准计算数千阶模态,大幅缩短大型工程模型的求解周期;非线性分析领域,全面覆盖材料非线性(弹塑性、超弹性、蠕变)、几何大变形、接触
    发表于 03-20 10:25

    官方新品 | 虹科PCAN-Explorer 7发布:带来Python脚本与灵活授权新体验

    虹科PCAN-Explorer7支持Python脚本+授权管理升级在CAN总线技术持续进化的当下,我们始终相信,工具的革新应与技术的前沿同频,更应让复杂的研发与分析工作,回归简洁、高效的本质。虹科
    的头像 发表于 12-05 11:03 1157次阅读
    官方新品 | 虹科PCAN-Explorer 7发布:带来<b class='flag-5'>Python</b><b class='flag-5'>脚本</b>与灵活授权新体验

    光子精密QM系列闪测仪优化VR眼镜关键制程质量控制

    随着VR产品全面转向Pancake光学方案,透镜及结构件的尺寸公差要求更为严格。现有检测方法的效率与稳定性已成为制约生产良率提升与成本控制的关键因素。为解决此瓶颈,光子精密推出QM系列闪测仪解决方案,旨在实现对关键尺寸的高频次、高重复性测量,为核心制程的质量控制与工艺优化
    的头像 发表于 11-28 13:36 642次阅读
    光子精密<b class='flag-5'>QM</b>系列闪测仪<b class='flag-5'>优化</b>VR眼镜关键制程质量控制

    Python 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

    一、技术选型:为什么选 Python 而不是 Java? 结论: “调研阶段用 Python,上线后如果 QPS 爆表再考虑 Java 重构。” 二、整体架构速览(3 分钟看懂) 三、开发前准备(5
    的头像 发表于 10-21 16:59 626次阅读
    用 <b class='flag-5'>Python</b> 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

    Pico Technology发布Python软件包pyPicoSDK

    现有 PicoSDK 的基础上构建,使工程师、开发人员和业余爱好者能够创建 Python 脚本,更加快速方便地控制其 PicoScope 设备。
    的头像 发表于 09-29 15:03 1103次阅读

    termux调试python猜数字游戏

    特性 - ✅ 智能范围提示(太大/太小) - ✅ 尝试次数计数器 - ✅ 错误输入防护 - ✅ 移动端友好界面 --- ? 四、进阶优化建议 ```python 可扩展功能(在现有代码中添加
    发表于 08-29 17:15

    termux如何搭建python游戏

    计算库(如Numpy,用于物理引擎) pip install numpy # 交互增强工具(如IPython,便于调试) pip install ipython ``` 三、终端优化与开发
    发表于 08-29 07:06

    Python脚本实现运维工作自动化案例

    还在为重复性运维工作而烦恼?每天被各种告警、监控、部署搞得焦头烂额?作为一名有10年经验的运维老司机,今天分享5个超实用的Python自动化脚本,让你的运维工作效率提升300%!这些都是我在生产环境中实际使用的案例,代码简洁高效,拿来即用!
    的头像 发表于 08-27 14:46 1363次阅读

    怎么导出python边缘计算中的APP,想进行修改又找不到源码?

    怎么导出python边缘计算中的APP,想进行修改又找不到源码
    发表于 08-06 07:33