具有gui界面的MS雖然上手和操作更為簡單,但是靈活性不如代碼的方式。利用代碼可以對lammps的輸出文件進行更加靈活的數據分析。或是建立更為復雜的模型。
例如,我們可以先用MS建立起聚氨酯分子鏈的data文件,然後進一步的使用代碼對聚氨酯中的位點進行成鍵交聯。
因此,掌握一種編程語言對於分子動力學的建模和分析是十分必要的。
本次先從最基礎的入手,用python建立了一個在盒子中隨機生成H原子的程序。
#-------隨機H原子模型data生成-------#
import numpy as np #引入numpy模塊,用於大量維度數組和矩陣運算。
natoms = input ('輸入你需要生成的H原子數目') #自定義H原子數目
system_size= 100.0
positions = [] #空列表,用於存放原子信息。
natoms = int(natoms) #將字符串類型轉換為整形
for i in range(natoms):
positions.append(np.random.rand(3)*system_size)
#rand:生成(0,1)之間的隨機數。括號裡表示維度。
#循環1000次,每次循環添加一個坐標列表。
#例如[0.2,0.4,0.1]*100 = [20,40,10]
with open('random.data','w') as fdata:
#使用with打開random.data進行讀寫,如果不存在就自動創建。
#出錯的話自動調用fdata.close()。為出錯執行完後再fdata.close()。
fdata.write('Random atoms - written for XDEのfrog\n\n')
#data文件的第一行注明作者為薛定谔的青蛙,然後換兩行。
fdata.write('{} atoms\n'.format(natoms))
#打印 10000 atoms 換行
fdata.write('{} atom types\n\n'.format(1))
#打印 1 atom types 換兩行
fdata.write('{} {} xlo xhi\n'.format(0,system_size))
fdata.write('{} {} ylo yhi\n'.format(0,system_size))
fdata.write('{} {} zlo zhi\n'.format(0,system_size))
#打印box的xyz坐標
fdata.write('\n')
#換行
fdata.write('Masses\n\n')
#打印Masses,換行。
fdata.write('1 1 #H\n\n')
#打印1 1 #H 換兩行
fdata.write('Atoms\n\n')
#打印Atoms換兩行
for i,pos in enumerate(positions):
fdata.write('{} 1 {} {} {}\n'.format(i+1,*pos))
#*pos指序列中的每個元素
在idle中打開編寫好的python程序,run module,出現一下界面。輸入1000,回車。
沒有報錯表明運行成功。
輸出的data文件部分內容如下:
Random atoms - written for XDEのfrog
1000 atoms
1 atom types
0 100.0 xlo xhi
0 100.0 ylo yhi
0 100.0 zlo zhi
Masses
1 1 #H
Atoms
1 1 40.986851317250085 55.590056270036705 0.013593910169829027
2 1 82.39983454786729 77.38272918819796 71.87181770099643
3 1 96.3771743226388 30.390555469844916 90.08913510061629
4 1 39.49572778326274 44.57662357828993 60.5121797153126
5 1 57.95355251117245 39.61467527329043 97.4039997024542
6 1 35.896861870532035 49.529178676952434 84.07438346381817
7 1 58.013880161718504 13.404344832292736 35.432223116574725
8 1 70.94498972404959 55.42575754379626 41.53099919983412
9 1 73.5053715458304 34.970566986162424 70.60263056263587
10 1 76.27849295351044 6.962084375355893 13.528746391665347
11 1 29.375682163871954 67.62128187355145 34.24581226841668
12 1 31.760277802451665 61.96415629096923 37.63060555149897
13 1 32.334177423013614 96.98486059033165 20.03261612931987
14 1 86.84899785077471 79.9020435526898 82.44214725023006
15 1 87.48003760628963 7.340395072804462 44.48130875927284
16 1 39.72924736734451 84.4768462848233 30.46503012334778
17 1 85.64699134025705 11.693379720431452 64.94576264951154
18 1 37.185071459124586 54.59943406020703 20.850075973960656
19 1 59.71031270903181 10.4229999380549 90.47017569354233
20 1 86.28616297312473 84.58550695271573 46.544802810098915
使用ovito進行可視化: