# Gromacs ###### tags: `Gromacs` [toc] ## Gromacs 加到環境變數 ```=python #將gromacs 指令加到環境變數 source /pkg/GROMACS/setgromacs_2018 ``` ## packmol ### packmol使用說明 1. 要先建立一個pdb檔 2. ![](https://i.imgur.com/1LTX9P9.png) 要先有一個inp檔 3. 網址處打cmd目前資料夾 4. ![](https://i.imgur.com/8ay2rnq.png) 執行inp檔 ### packmol 各分子同向 ```python= # x,y,z固定角度180+-20 constrain_rotation x 180. 20. constrain_rotation y 180. 20. constrain_rotation z 180. 20. ``` ## Gromcas 檔案 ### .trr與.gro檔 .trr是有每一步的速度與位置,.gro檔是只有末位置末速度。 ![](https://i.imgur.com/eDHwUM3.png) .trr檔案大 ### .mdp 檔(mdp) * [介紹網址](https://manual.gromacs.org/current/user-guide/mdp-options.html#mdp-value-integrator-steep) * ![](https://i.imgur.com/YkVUaMz.png) ![](https://i.imgur.com/6QElCwV.png) * [leap frog](https://manual.gromacs.org/documentation/2019/reference-manual/algorithms/molecular-dynamics.html#the-leap-frog-integrator) * [neiborsearching,cutoff_scheme](https://computecanada.github.io/molmodsim-md-theory-lesson-novice/02-Fast_Methods_to_Evaluate_Forces/index.html)![](https://i.imgur.com/wQYXOCP.png) (選擇在距離多少以後不算位能) ## Gromacs 小技巧 ### 查看兩個檔案有甚麼不同 ```python= #查看檔案不同處 vimdiff constrait_em.gro(檔名) em_constraint_whole.gro(檔名) ``` ## Gromacs 執行指令 ### 基本指令(台灣山一號) ``` python= #將gromacs 指令加到環境變數 source /pkg/GROMACS/setgromacs_2018 #將.pdb檔換成.gro檔 且條box的大小(unit:nm) gmx_mpi editconf -f 1g.pdb -box 1.4 -o input.gro #將全部檔案打包成.tpr檔(且能接受5個warning) gmx_mpi grompp -f em.mdp -c input.gro -p H2O.top -o em.tpr -maxwarn 5 #開始計算且輸出檔名為 em(subg_gmx要做一些設定) qsub -N em sub_gmx.sh ``` ### 邊界連在一起 (-f(.trr軌跡檔)-o也可以做成.gro檔) ``` python= #將em.gro的分子在視覺化軟體裡連在一起(用在角度作圖)(input file也可以是.trr每一步) gmx_mpi trjconv -f em.gro -s em.tpr -pbc whole -o em_whole.gro ``` ### Energy (可查看各種資訊) ``` python= ##每步能量的output(output 檔名.xvg) gmx_mpi energy -f npt.edr -o ``` ### RDF * **RDF 解釋** :粒子徑向分佈函數 g(r)是指系統中所有粒子在空間的分佈情況,以一顆粒子為座標中心,觀察其它粒子在空間中隨著r的分佈情形。 * ![](https://i.imgur.com/o6CLTPZ.png)(藍色為找到原子,深紅為參考的原子) * ![](https://i.imgur.com/bjZ0Utb.png) * ![](https://i.imgur.com/posYKsP.png) * [相關網址](https://baike.baidu.hk/item/%E5%BE%91%E5%90%91%E5%88%86%E4%BD%88%E5%87%BD%E6%95%B8/12723225) [最後一張圖](https://www.eng.buffalo.edu/~kofke/ce530/Lectures/Lecture15/sld006.htm) [wiki](https://en.wikipedia.org/wiki/Radial_distribution_function) [wiki2](https://en.wikibooks.org/wiki/Molecular_Simulation/Radial_Distribution_Functions) ```python= ##創建 編號檔 進去可選分類 (a O, a H1 and H2) gmx_mpi make_ndx -f npt.gro -o ## 顯現出rdf分布(system(1個水分子的質心)對system(一個水分子的質心)) gmx_mpi rdf -f npt.trr -s npt.tpr -selrpos whole_mol_com -seltype whole_mol_com -o ##顯現出rdf分布,可調整要甚麼原子對甚麼原子的rdf gmx_mpi rdf -f npt.trr -s npt.tpr -selrpos atom -seltype atom -n index.ndx -o gmx_mpi rdf -f heating.trr -s heating.tpr -selrpos whole_mol_com -seltype whole_mol_com ``` ### 複製很多個box ```python= ## 把H2.gro 變大成5*5*5,所以有125個H2 gmx_mpi genconf -f H2.gro -nbox 5 5 5 -o super_H2.gro ``` * sub_gmx.sh檔 ![](https://i.imgur.com/dkMj1rf.png) work:是超級電腦計算用的資料夾 > /work1/(自己主機的名字) ## Gromacs 作圖 ### gnuplot ```python= #先gnuplot進入作圖模式 gnuplot #plot "檔名" using (X軸):(Y軸) 圖線的設定 plot "energy.xvg" using 1:2 w1 ``` ### python #### load anaconda ```python= #導入anaconda 模組 module load anaconda3/5.1.10 #確認python版本 python --version #檢查pip which pip 用pip安裝ase pip install ase --user ``` #### 對角度作圖 1. 第一步打ipython可以在linux裡直接打python code 2. 建一個 plot_angdist.py檔 ```python= from ase.io import read,write import matplotlib.pyplot as plt import numpy as np from matplotlib import font_manager # plot setting plt.rcParams['axes.linewidth'] = 2 plt.rcParams['font.size'] = 12 # read angles from ase atoms = read('em_constraint_whole.gro') #H0H的角度(x=0~99) ang_dist = [ atoms.get_angle(3*x+1,3*x,3*x+2) for x in range(100) ] # plot histogram using matplotlib fig,ax=plt.subplots() ax.hist(ang_dist,density=True) #ax.set_xlabel('x value',fontsize=20) #ax.set_ylabel('y value',fontsize=20) fig.tight_layout() plt.show() ``` 3.開始作圖 ```python= # &是讓圖不消失 python plotangdist.py & ``` #### 鍵長作圖 (一次好幾張圖) ``` python= # read angles from ase atoms = read('npt-whole.gro') bndOH_dist = [ atoms.get_distance(3*x+1,3*x) for x in range(100) ] bndHH_dist = [ atoms.get_distance(3*x+1,3*x+2) for x in range(100) ] ang_dist = [ atoms.get_angle(3*x+1,3*x,3*x+2) for x in range(100) ] # plot histogram using matplotlib fig,ax=plt.subplots(nrows=3)#三張圖 ax[0].hist(bndOH_dist,density=True) ax[1].hist(bndHH_dist,density=True) ax[2].hist(ang_dist,density=True)ls ``` ## Gromacs 上課筆記 ### 介紹 * 原子跟原子尺度,force field用數學函數表示力,關注原子間的作用力。分子堆在一起排列成固態結構。 * step 1. FF的數學函數的parameters,描述力在不同材料、環境...。 * step 2. 找到文獻中有材料的FF parameter,對於未知材料的FF parameters要開發。 ### 所需檔案 * .top file (topology): 定義鍵長、鍵角、二面角...等分子特徵。 * .itp file (FF parameters): force filed裡的參數 * Ex: OPLS forcefiled 描述有機分子的力場。分成bond,non-bonded * bond: 由分子的震動行為,可運動的自由度,鍵,鍵角,二面角。 * non-bonded: ex:靜電作用力,凡德瓦力。 * 凡德瓦力: 當2原子靠近時,兩原子的電子雲高度重合會產生排斥力。 * OPLS立場各項的計算方式 * bond angle: 從OPLS database * dihedral: 用QM dihedral scanning,轉分子的二面角記錄不同二面角時的能量 * atomic charge: reproduce QM electrostatic potential (E=-delta* V) * ==.top file== * 可以包含其他檔案(.itp) * [ molecular type ] * name (定義分子名稱) EX: other * nrexcl (跟幾個鍵的原子會產生作用力) ex: 3 * [ atoms ] * nr (定義分子中不同原子的編號) ex: 1,2 * type (分子中不同原子的種類(苯環中不同的C) ex: N,CN) * resnr (group) ex: 1,1 * residue (殘留物)ex: LCZ,LCZ * [ bond ] * funct (查gromacs manual) 不同的鍵有不同數學函數 ex: 1 * [ pair ] [ angle ] [ dihedral ] * [ molecular ] 要與 [ molecular type ]中的名子互相對應: 描述系統中有幾個分子要做模擬。 * ==.atp file== (要定義幾種atom type是一個難關) * 區分幾種不同atom type,定義分子中甚麼原子可以定義成一樣的(不同位置的C,有些可以定義成一樣的但有些不能定義成一樣的) * ==.rtp file== (residue topology) * 把所有分子堆疊在一起形成一個大分子(像積木一樣) * 從可以旋轉的鍵去定義不同的分子(積木) * [ bonded type ] * bonds (ex:1(harmonic)) angles (ex:1(harmonic)) dihedrals (ex:3) impropers (ex:2) * [ ME1 ] (residue name) * [ atoms ] (define atom) * [ bonds ] (define bond) (angles程式會幫你定義) * ==.pdb file== * X,Y,Z element symbol (與rtp檔的 atom相互對應)