精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    29

    瀏覽量

    10012
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84468

原文標題:鴻之微BDF軟件計算賞析|采用BDF的QM/MM多尺度計算方法研究晶體的光物理性質(二)

文章出處:【微信號:hzwtech,微信公眾號:鴻之微】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    @視覺工程師丨15分鐘上手《AIDI3.2腳本開發教程》視頻,請查收!

    AIDI有什么系統性地進階開發教程?AIDI調用Python腳本的基本原理是什么?常見的Python異常如何處理?區域計算工具有哪些常用案例?……為幫助廣大視覺工程師及開發者更好地掌握
    的頭像 發表于 11-09 01:06 ?148次閱讀
    @視覺工程師丨15分鐘上手《AIDI3.2<b class='flag-5'>腳本</b>開發教程》視頻,請查收!

    優化 FPGA HLS 設計

    30 到 70 種用于綜合和布局布線的設置。可能的組合太多了。可以編寫腳本來創建不同的運行并嘗試推薦的標準指令/策略。 最后一個挑戰問題是計算能力不足。典型的嵌入式應用程序是在單臺計算
    發表于 08-16 19:56

    利用Python腳本登錄到交換機并創建VLAN

    本文將詳細介紹如何利用Python腳本登錄到交換機并創建VLAN。
    的頭像 發表于 08-12 17:59 ?535次閱讀

    使用Python腳本備份華為交換機的配置信息

    在現代網絡管理中,備份交換機的配置信息是一項至關重要的任務。備份可以確保在交換機發生故障或配置錯誤時,能夠迅速恢復到之前的工作狀態。本文將詳細介紹如何使用Python腳本備份華為交換機的配置信息。
    的頭像 發表于 08-12 17:50 ?504次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>腳本</b>備份華為交換機的配置信息

    怎么導出python邊緣計算中的APP?

    怎么導出python邊緣計算中的APP,想進行修改又找不到源碼
    發表于 07-25 06:13

    Python建模算法與應用

    Python作為一種功能強大、免費、開源且面向對象的編程語言,在科學計算、數學建模、數據分析等領域展現出了卓越的性能。其簡潔的語法、對動態輸入的支持以及解釋性語言的本質,使得Python在多個平臺
    的頭像 發表于 07-24 10:41 ?465次閱讀

    python寫驗證環境cocotb

    本文介紹了cocotb的安裝、python tb文件的寫法、用xrun仿真cocotb的腳本等,我們來看看體驗如何。
    的頭像 發表于 07-24 09:38 ?478次閱讀
    用<b class='flag-5'>python</b>寫驗證環境cocotb

    用離線安裝器安裝的idf,其創建的Python虛擬環境無激活腳本是怎么回事?

    如題,用離線安裝器安裝的idf,其創建的Python虛擬環境無激活腳本,具體如下圖所示: 反而用vscode插件安裝的idf有,如下圖:vscode插件安裝的idf的Python虛擬環境 提問:沒有
    發表于 06-11 06:49

    3PCS01G輸入電流波形在頂部和底部有變量的情況,請問COMP腳本如何進行優化

    3PCS01G 現在輸入電流波形在頂部和底部有變量的情況,請問COMP腳本如何進行優化。 現在情況是這樣,就是PFC母線的輸出是 390V 2000W。 由于我們輸出的是 35-68V,再加上效率
    發表于 05-20 07:19

    如何優化HLS仿真腳本運行時間

    需求:由于自己目前一個 HLS 仿真腳本需要運行 1個多小時,先打算通過打印時間戳的方式找出最耗時的部分,然后想辦法優化
    的頭像 發表于 02-23 09:29 ?637次閱讀

    通過Python腳本實現WIFI密碼的自動猜解

    本文將記錄學習下如何通過 Python 腳本實現 WIFI 密碼的自動猜解。
    的頭像 發表于 01-25 10:46 ?3330次閱讀
    通過<b class='flag-5'>Python</b><b class='flag-5'>腳本</b>實現WIFI密碼的自動猜解

    如何使用Python編寫腳本來自動發送郵件

    Python是一種非常流行的編程語言,可以用于多種用途,包括自動化任務。其中一個常見的自動化任務是自動發送郵件。在本文中,我們將介紹如何使用Python編寫腳本來自動發送郵件。 要使用Pyth
    的頭像 發表于 12-07 11:36 ?1309次閱讀

    python計算排列組合的函數有哪些

    Python中,有多種可以用于計算排列組合的函數和模塊。下面將詳細介紹一些常用的函數和模塊,并提供詳實和細致的說明。 math模塊: Python的math模塊提供了一些計算排列組合
    的頭像 發表于 11-29 16:33 ?3489次閱讀

    python運行環境的安裝和配置

    Python是一種非常流行的編程語言,廣泛應用于科學計算、Web開發、人工智能等領域。為了能夠正常運行Python程序,我們需要先安裝和配置Python運行環境。本文將為您詳盡介紹
    的頭像 發表于 11-29 16:17 ?1106次閱讀

    python運行完后為什么會閃退

    Python是一種高級編程語言,用于開發各種應用程序和腳本。當你運行一個Python程序時,計算機會首先加載并解釋代碼,然后按照代碼的邏輯執行相應的操作。然而,有時候程序可能會突然閃退
    的頭像 發表于 11-29 15:14 ?8670次閱讀