---
# System prepended metadata

title: Gromacs
tags: [Gromacs]

---

# 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相互對應)
           
    