在上adv. metal课的时候就曾经遇到过这个问题,当然那个时候还是全靠手动去做nuclei move的锅,不过现在也会遇到这样的情况,就是我要提交一系列的任务,而这一系列的任务是有一定的规律的,目前从我遇到过的case来看,主要有两种
Case 1.
这种情况每个任务里面不一样的地方只有其中一个参数,参数是单一的或者多个参数之间有某种数学关系
e.g. 要做一个convergence test,提交相同cut off energy不同k-point的一系列任务,或者POSCAR里面成比例地修改键长
用改POSCAR这个case来说,需要完成两个script:
生成POSCAR的script
首先理清思路,在我们的一系列的任务中,POSCAR是一直在变的,所以在最开始的输入文件中,我们不事先提供POSCAR这个文件,而是用每个文件夹中的script去生成跟任务文件夹对应的POSCAR文件,然后运行vasp程序->得到结果->收集结果
写一个生成POSCAR的script pos.py,这里用python写了一个,用c也可以,完全看习惯
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()
这里我们是为了改变一个graphene的primitive cell的lattice