QM/MM组合方法

中国的365体育投注 📅 2026-02-05 22:40:16 👤 admin 👁️ 4234 ❤️ 463
QM/MM组合方法

QM/MM组合方法

QM/MM组合方法一般把系统分为两个区域,QM区和MM区。将体系总能量写为:

\[E_{QM/MM}(\mathbb{S}) = E_{MM}(\mathbb{O})+E_{QM}(\mathbb{I+L})+E_{QM/MM}(\mathbb{I,O})\]

其中, S 表示系统, I 表示QM层, O表示MM层,L表示链接原子。

\(E_{MM}(\mathbb{O})\)

采用分子力学力场计算,

\(E_{QM/MM}(\mathbb{I,O})\)

包括两项:

\[E_{QM/MM}(\mathbb{I,O})=E_{nuc-MM}+V_{elec-MM}\]

\(E_{nuc-MM}+V_{elec-MM}\) 在BDF中通过在QM区加入外部点电荷来实现。

所以整个体系的总能量包括两个部分,\(E_{MM}\) 采用分子力学方法计算,\(E_{QM}\) 和 \(E_{QM/MM}\)

采用量子化学方法计算。同时,QM区和MM区的相互作用还包括VDW相互作用等,这里不再赘述。对于QM区和MM区的断键,一般采用链接原子模型来描述。

BDF程序主要完成量子化学计算部分,其余部分由课题组修改的pdynamo2.0程序包完成。具体见相关算例。

备注

pdynamo 程序的安装见程序包中相关说明。有关程序包的详细功能见程序包中的帮助文件。

本手册只提供使用BDF进行QM/MM计算的相关说明和算例。

QM/MM计算环境安装和配置参考:QM/MM计算环境配置

输入文件准备

一般来说,QM/MM计算之前,需要对目标体系进行分子动力学模拟,得到适合的初始构象。不同的分子动力学软件,输出文件不尽相同,

pDynamo-2目前支持 Amber、CHARMM、Gromacs 等力场,同时支持 PDB、MOL2、xyz 等格式读入分子坐标。

备注

当采用PDB、MOL2或xyz文件作为输入时,pDynamo 程序仅支持OPLS力场,对于小分子和非标准氨基酸力场参数不全,不推荐使用。建议优先采用Amber程序,

通过拓扑文件输入力场参数。如果只做QM计算,各种输入方法都可以。

以Amber为例,从动力学模拟轨迹提取感兴趣的结构存储于 crd 文件中,与对应的拓扑文件 .prmtop 一起可以作为QM/MM计算的

起始点。Python 脚本如下:

from pBabel import AmberCrdFile_ToCoordinates3, AmberTopologyFile_ToSystem

# 读取输入信息

molecule = AmberTopologyFile_ToSystem(Topfile)

molecule.coordinates3 = AmberCrdFile_ToCoordinates3(CRDfile)

此时,分子信息存储于 molecule 结构中。具体QM/MM计算中,需要对体系进行能量计算、几何构型优化等操作。同时,可以在MM区定义活性区域,加速计算。

总能量计算

以10埃的水盒子为例,分子动力学模拟后提取文件为 wat.prmtop, wat.crd ,可对体系进行全量子化学计算,代码如下:

import glob, math, os

from pBabel import AmberCrdFile_ToCoordinates3, AmberTopologyFile_ToSystem

from pCore import logFile

from pMolecule mport QCModelBDF, System

# 读取水盒子坐标和拓扑信息

molecule = AmberTopologyFile_ToSystem ("wat.prmtop")

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

# 定义能量计算模式,此处为全体系密度泛函计算,GB3LYP:6-31g

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

molecule.DefineQCModel(model)

molecule.Summary() #输出体系计算设置信息

# 计算总能量

energy = molecule.Energy()

在 QCModelBDF 类中可以定义方法和基组 GB3LYP:6-31g, 方法和基组间采用 : 分割。上例中也可以选择感兴趣的分子(比如,第五个水分子)

进行QM/MM计算,第五个水分子用QM方法来算,其余用MM(本例中为amber力场)来计算。由于在MD计算时采用周期性边界条件,而QM/MM方法不支持使用周期性边界

条件,所以在脚本中加入选项,关闭周期性边界条件。

molecule.DefineSymmetry( crystalClass = None )

在pDynamo 定义了类 Selection 可以用于选择特定的QM原子,具体见使用说明。选择QM原子的脚本如下:

qm_area = Selection.FromIterable(range(12, 15))

#12、13、14为原子列表索引值(该值 = 原子序号 - 1),等于选择 15号水分子

molecule.DefineQCModel(qcModel, qcSelection = qm_area)

总体,QM/MM组合能量计算的脚本如下:

import glob, math, os

from pBabel import AmberCrdFile_ToCoordinates3, AmberTopologyFile_ToSystem

from pCore import logFile, Selection

from pMolecule import NBModelORCA, QCModelBDF, System

# . Define the energy models.

nbModel = NBModelORCA()

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

# . Read the data.

molecule = AmberTopologyFile_ToSystem("wat.prmtop")

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

# .Close symmetry to a system

molecule.DefineSymmetry(crystalClass = None) # QM/MM need Close the symmetry.

# .Selection qm area

qm_area = Selection.FromIterable(range (12, 15)) # Select WAT 5 as the QM area.

# . Define the energy model.

molecule.DefineQCModel (qcModel, qcSelection = qm_area)

molecule.DefineNBModel (nbModel)

molecule.Summary()

# . Calculate

energy = molecule.Energy()

备注

QM/MM计算支持两种输入模式,对于简单的算例,可以在 QCModelBDF 类中作为参数输入。

相对复杂的算例可以采用 计算模版 方式输入。

几何构型优化

QM/MM几何构型优化一般不容易收敛,在实际操作中需要的技巧较多。常见的有,固定MM区,优化QM区;然后固定QM区优化MM区。如此往复循环几次后,再同时优化QM区和MM区。

优化是否收敛,和QM区的选择及QM/MM边界是否有带电较多的原子等关系很大。为了加速优化,可以在计算时固定MM区,仅选择离QM区较近的合适区域,作为活性区域,在优化中

坐标可以变化。以下为几何构型优化的算例:

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

# 定义 Opt interface

def opt_ConjugateGradientMinimize(molecule, selection):

molecule.DefineFixedAtoms(selection) # Define 固定原子

#定义优化方法

ConjugateGradientMinimize_SystemGeometry(

molecule,

maximumIterations = 4, # 最大优化步数

rmsGradientTolerance = 0.1, #优化收敛控制

trajectories = [(trajectory, 1)]

) # 定义轨迹保存频率

# . Define the energy models.

nbModel = NBModelORCA()

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

# . Read the data.

molecule = AmberTopologyFile_ToSystem ("wat.prmtop")

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

# . Close symmetry to a system

molecule.DefineSymmetry(crystalClass = None) # QM/MM need Close the symmetry.

#. Define Atoms List

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

qm_list = range(12, 15) # QM 区原子

activate_list = range(6, 12) + range (24, 27) # 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) # Select WAT 5 as the QM area.

# 定义各选择区

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)

QM/MM-TDDFT算例

在几何构型优化结束后,可基于QM/MM计算得到的基态进行TDDFT计算。BDF程序接口设计了 计算模版 功能,可基于用户给定的 .inp 文件,更新系统坐标

进行计算。同时,在几何构型优化和激发态计算过程中,可根据需要选择不同的QM区域。比如,为了考虑溶剂化效应,可以把感兴趣的分子的第一水合层添加到QM区进行

QM/MM-TDDFT计算。以前一节中完成的算例为例,可以继续添加如下代码进行计算。

#接前一节几何构型优化代码。

#开始TDDFT计算。使用模版文件作为输入。

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

# 调整QM区原子

tdtest = Selection.FromIterable(qm_list + activate_list) # Redefine the QM region.

molecule.DefineQCModel(qcModel, qcSelection = tdtest)

molecule.DefineNBModel(nbModel)

molecule.Summary()

#采用模版中的方法进行能量计算,(可以是TDDFT)

energy = molecule.Energy()

上面代码中,选用的模版为BDF的输入文件,文件内容如下:

$COMPASS

Title

cla_head_bdf

Basis

6-31g

Geometry

H 100.723 207.273 61.172

MG 92.917 204.348 68.063

C 95.652 206.390 67.185

END geometry

Extcharge

point

nosymm

$END

$XUANYUAN

RSOMEGA

0.33

$END

$SCF

RKS

DFT

cam-B3LYP

$END

$tddft #TDDFT计算控制

iprt

3

iroot

5

$end

相关推荐

苹果手机基带维修大概要多少钱 苹果手机基带维修价格及预算分析
原神boss有多少个
www365bet娱乐场

原神boss有多少个

📅 11-17 👁️ 8359
为什么大家不接受假唱?
office365打不开

为什么大家不接受假唱?

📅 01-22 👁️ 6895