讓搬磚變得輕松——vasp提交系列任務(wù)用的腳本

在上adv. metal課的時(shí)候就曾經(jīng)遇到過(guò)這個(gè)問(wèn)題,當(dāng)然那個(gè)時(shí)候還是全靠手動(dòng)去做nuclei move的鍋来累,不過(guò)現(xiàn)在也會(huì)遇到這樣的情況速缆,就是我要提交一系列的任務(wù),而這一系列的任務(wù)是有一定的規(guī)律的爆侣,目前從我遇到過(guò)的case來(lái)看萍程,主要有兩種

Case 1.

這種情況每個(gè)任務(wù)里面不一樣的地方只有其中一個(gè)參數(shù),參數(shù)是單一的或者多個(gè)參數(shù)之間有某種數(shù)學(xué)關(guān)系
e.g. 要做一個(gè)convergence test兔仰,提交相同cut off energy不同k-point的一系列任務(wù)茫负,或者POSCAR里面成比例地修改鍵長(zhǎng)

用改POSCAR這個(gè)case來(lái)說(shuō),需要完成兩個(gè)script:

  1. 生成POSCAR的script
    首先理清思路乎赴,在我們的一系列的任務(wù)中忍法,POSCAR是一直在變的潮尝,所以在最開(kāi)始的輸入文件中,我們不事先提供POSCAR這個(gè)文件饿序,而是用每個(gè)文件夾中的script去生成跟任務(wù)文件夾對(duì)應(yīng)的POSCAR文件勉失,然后運(yùn)行vasp程序->得到結(jié)果->收集結(jié)果

  2. 寫一個(gè)生成POSCAR的script pos.py,這里用python寫了一個(gè)原探,用c也可以乱凿,完全看習(xí)慣

import sys
import math

a = float(sys.argv[1]) # lattice constant
fout = open('POSCAR', 'w') # make a file named as POSCAR

fout.write(
'''G_monolayer
1.0
        %.10f         0.0000000000         0.0000000000
        %.10f         %.10f         0.0000000000
        0.0000000000         0.0000000000         3.0000000000
    C
    2
Cartesian
     0.000000000         0.000000000         2.171259403
     1.233863017         0.712369702         2.171259403
'''%(a, -a/2, math.sqrt(3)*a/2))

# construct a primitive cell with constant c direction but variable a b directions

fout.close()

這里我們是為了改變一個(gè)graphene的primitive cell的lattice parameter,由于是一個(gè)固定的Triclinic的結(jié)構(gòu)咽弦,所以a和b的關(guān)系是固定的徒蟆,也就是說(shuō)只相當(dāng)于一個(gè)變量,每給出一個(gè)a值离唬,我們就可以用這個(gè)script得到一個(gè)對(duì)應(yīng)的POSCAR

  1. 提交job的script
    在完成了POSCAR的generator之后后专,寫另外一個(gè)script job用來(lái)調(diào)用前面的script去生成一系列的POSCAR并運(yùn)行vasp程序
#!/bin/bash

#PBS -N GRAPHENE
#PBS -q USERNAME 
#PBS -l nodes=2:ppn=24
#PBS -l walltime=48:00:00
#PBS -V
#PBS -S /bin/bash

cd $PBS_O_WORKDIR

#source /public/software/profile.d/openmpi-intel-env.sh
#source /public/software/profile.d/intel-env.sh

source /opt/intel/composer_xe_2015/bin/compilervars.sh intel64
source /opt/intel/mkl/bin/intel64/mklvars_intel64.sh
source /opt/intel/impi/5.0.2.044/bin64/mpivars.sh

EXEC=/opt/software/vasp/vasp-5.3.5-base
#EXEC=/opt/software/vasp/vasp-5.3.5-noZ

NP=`cat $PBS_NODEFILE | wc -l`
NN=`cat $PBS_NODEFILE | sort | uniq | wc -l`

#partition line, from here start to call previous script and run vasp program

rm WAVECAR SUMMARY
for i in $(seq 2.4590 0.0005 2.4690)
do
     python pos.py $i

     # relaxation
     mpirun -genv I_MPI_DEVICE rdma -machinefile $PBS_NODEFILE -n $NP $EXEC > vasp.log

     E=`awk '/F=/ {print $0}' OSZICAR` ; echo $i $E >>SUMMARY
     mkdir $i
     mv CHG CONTCAR EIGENVAL OSZICAR PCDAT vasprun.xml WAVECAR CHGCAR DOSCAR IBZKPT OUTCAR POSCAR XDATCAR vasp.log $i

done

這個(gè)script的工作流程就是,對(duì)于一個(gè)特定的i值->調(diào)用之前的pos.py生成POSCAR->用生成的POSCAR搭配之前提供的INCAR等文件進(jìn)行vasp計(jì)算输莺,并且將計(jì)算結(jié)果(一個(gè)單步的計(jì)算戚哎,所以只有一個(gè)離子步的結(jié)果)放入名為SUMMARY的文件中,然后把計(jì)算過(guò)程中輸出的文件和當(dāng)前的POSCAR一起放入命名為值的文件夾中

運(yùn)行之前要提交的文件:


輸入的文件

qsub job 運(yùn)行之后應(yīng)該會(huì)得到這樣的結(jié)果:


輸出的文件

然而實(shí)際上我們只需要最后下載SUMMARY這個(gè)文件就夠啦
2.4590 1 F= -.16200431E+02 E0= -.16200431E+02 d E =-.377889E-09
2.4595 1 F= -.16200510E+02 E0= -.16200510E+02 d E =-.160482E-08
2.4600 1 F= -.16200576E+02 E0= -.16200576E+02 d E =-.623061E-08
2.4605 1 F= -.16200619E+02 E0= -.16200619E+02 d E =-.221167E-07
2.4610 1 F= -.16200653E+02 E0= -.16200653E+02 d E =-.717880E-07
2.4615 1 F= -.16200667E+02 E0= -.16200667E+02 d E =-.213098E-06
2.4620 1 F= -.16200671E+02 E0= -.16200671E+02 d E =-.578529E-06
2.4625 1 F= -.16200661E+02 E0= -.16200661E+02 d E =-.143590E-05
2.4630 1 F= -.16200629E+02 E0= -.16200627E+02 d E =-.325742E-05
2.4635 1 F= -.16200580E+02 E0= -.16200576E+02 d E =-.674955E-05
2.4640 1 F= -.16200515E+02 E0= -.16200509E+02 d E =-.127662E-04
2.4645 1 F= -.16200445E+02 E0= -.16200434E+02 d E =-.220353E-04
2.4650 1 F= -.16200355E+02 E0= -.16200338E+02 d E =-.347476E-04
2.4655 1 F= -.16200252E+02 E0= -.16200227E+02 d E =-.501850E-04
2.4660 1 F= -.16200157E+02 E0= -.16200124E+02 d E =-.666691E-04
2.4665 1 F= -.16200046E+02 E0= -.16200005E+02 d E =-.818921E-04
2.4670 1 F= -.16199922E+02 E0= -.16199875E+02 d E =-.934967E-04
2.4675 1 F= -.16199788E+02 E0= -.16199739E+02 d E =-.996283E-04
2.4680 1 F= -.16199656E+02 E0= -.16199606E+02 d E =-.992796E-04
2.4685 1 F= -.16199505E+02 E0= -.16199459E+02 d E =-.925687E-04
2.4690 1 F= -.16199381E+02 E0= -.16199341E+02 d E =-.805424E-04

然后復(fù)制到excel里面進(jìn)行處理就好了嫂用,當(dāng)然這里之所以可以這樣的原因主要還是因?yàn)檫@個(gè)計(jì)算只有一個(gè)離子步型凳,所以每一次運(yùn)算只有一個(gè)E0=...的輸出,如果有多個(gè)離子步的計(jì)算就需要作相應(yīng)的調(diào)整從而只抓取最后一個(gè)E0的值了

這種情況感覺(jué)只適用于那些變量比較單一嘱函,而且有一定的數(shù)學(xué)規(guī)律的情況甘畅,遇到那種結(jié)構(gòu)優(yōu)化過(guò)之后的復(fù)雜結(jié)構(gòu),輸入的POSCAR都無(wú)規(guī)律的不一樣的情況就比較無(wú)力了

Case 2.

對(duì)于比較復(fù)雜的結(jié)構(gòu)往弓,可以先在本地計(jì)算機(jī)上建立好文件夾疏唾,然后用script單純地批量提交任務(wù)而不去改變文件里面內(nèi)容,當(dāng)然用這種方式得到的結(jié)果也只是一個(gè)個(gè)的獨(dú)立的文件夾函似,獲取結(jié)果的時(shí)候需要另外的script或者直接手動(dòng)-_-||
用優(yōu)化過(guò)的結(jié)構(gòu)的bader電荷分析為例:

  1. 復(fù)制之前的含有結(jié)果的文件夾槐脏,mv CONTCAR POSCAR,然后修改INCAR的參數(shù)到適合bader電荷分析的計(jì)算撇寞,上傳到服務(wù)器上顿天,這里的文件是12-20的一組數(shù)字命名的文件夾

  2. 登陸服務(wù)器,在包含一批任務(wù)的父文件夾中touch jobsub蔑担,然后vi jobsub編寫這個(gè)script

#!/bin/bash
for i in $(seq 12 1 20)
do
cd $i/
qsub job-gamma
cd ../
done

然后進(jìn)入包含一系列任務(wù)的父文件夾中


包含一系列任務(wù)文件夾的父文件夾

運(yùn)行這個(gè)script牌废,這里簡(jiǎn)單說(shuō)一下bash的應(yīng)用,這樣寫出來(lái)的一個(gè)script應(yīng)該是".sh"的一個(gè)文件啤握,也就是說(shuō)第一行寫的東西為這個(gè)文件標(biāo)明了身份(用什么語(yǔ)言去compile并執(zhí)行)鸟缕,第一行寫的是bash,于是就是用bash來(lái)運(yùn)行恨统,如果單獨(dú)運(yùn)行這個(gè)文件的話叁扫,就像這樣

[xxx@xxx double]$ ls
12  13  14  15  16  17  18  19  20  jobsub
[xxx@xxx double]$ bash jobsub 
271306.mu01
271307.mu01
271308.mu01
271309.mu01
271310.mu01
271311.mu01
271312.mu01
271313.mu01
271314.mu01

就好了
這個(gè)script原理十分簡(jiǎn)單三妈,里面的代碼就是一個(gè)loop,其實(shí)就是用這個(gè)操作代替了我們手工的操作莫绣,節(jié)約了大量的時(shí)間畴蒲,尤其是這種用手工作容易出錯(cuò)且浪費(fèi)時(shí)間的工作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市对室,隨后出現(xiàn)的幾起案子模燥,更是在濱河造成了極大的恐慌,老刑警劉巖掩宜,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔫骂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡牺汤,警方通過(guò)查閱死者的電腦和手機(jī)辽旋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)檐迟,“玉大人补胚,你說(shuō)我怎么就攤上這事∽烦伲” “怎么了溶其?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)敦间。 經(jīng)常有香客問(wèn)我瓶逃,道長(zhǎng),這世上最難降的妖魔是什么廓块? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任厢绝,我火速辦了婚禮,結(jié)果婚禮上带猴,老公的妹妹穿的比我還像新娘代芜。我一直安慰自己,他們只是感情好浓利,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著钞速,像睡著了一般贷掖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渴语,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天苹威,我揣著相機(jī)與錄音,去河邊找鬼驾凶。 笑死牙甫,一個(gè)胖子當(dāng)著我的面吹牛掷酗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窟哺,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泻轰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了且轨?” 一聲冷哼從身側(cè)響起浮声,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旋奢,沒(méi)想到半個(gè)月后泳挥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡至朗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年屉符,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锹引。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矗钟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粤蝎,到底是詐尸還是另有隱情真仲,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布初澎,位于F島的核電站秸应,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碑宴。R本人自食惡果不足惜软啼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望延柠。 院中可真熱鬧祸挪,春花似錦、人聲如沸贞间。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)增热。三九已至整以,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峻仇,已是汗流浹背公黑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凡蚜。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓人断,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親朝蜘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恶迈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,350評(píng)論 0 2
  • 本文轉(zhuǎn)載自博主一個(gè)人就是一個(gè)疊加態(tài),有部分刪減修改芹务,文中對(duì)相關(guān)概念方法做了詳細(xì)的總結(jié)蝉绷,留坑待填... 1. 第一原...
    chempeng閱讀 43,828評(píng)論 1 33
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,223評(píng)論 0 3
  • 走過(guò)熟悉的街道 一如十年以前 陽(yáng)光普照大地 我忘了你的樣子 我錯(cuò)過(guò)了美好 錯(cuò)過(guò)了豪情萬(wàn)丈 錯(cuò)過(guò)了夏日蟬鳴 如果月光...
    春風(fēng)明月閱讀 77評(píng)論 0 1
  • 《天龍八部》是唯一一部我從頭到尾看完的金庸先生的武俠。 說(shuō)也奇怪枣抱,原來(lái)有個(gè)同事開(kāi)了個(gè)古文店熔吗,我常借武俠看。卻沒(méi)有認(rèn)...
    孤獨(dú)一刀閱讀 756評(píng)論 18 27