layout: post title: VASP使用 categories:
VASP的使用方法设计的缺陷很大, 如果只是简单算个东西, 倒也可以, 若是想大规模使用, 成千上百的文件, 都有着一样的名字, 看了不疯才怪. 所以, 我们需要一个脚本, 将VASP计算的流程进行改造. 改造的原则是支持不同文件名, 且不同文件之间可任意组合.
POTCAR
的脚本uspp.LDA
, uspp.GGA
, paw.LDA
, paw.GGA
, paw.PBE
, 将其分别放于与名称相应的文件夹下, 再将这四个文件夹
放在名称为POT
的文件夹下POTCAR
vasp运行需要四种输入文件, INCAR
, KPOINTS
, POSCAR
, POTCAR
, 且不能是其他名字, 程序也没提供选项指定其他名字.
彻底的解决方法是修改源代码, 困难不大, 但不建议. 除此之外可以使用一个脚本,
先将文件改名, 复制至作业运行目录下, 运行vasp, 完成后复制输出文件至原目录, 再将输出文件更名.
我的解决办法是参照GROMACS的运行方式, 先利用这四个文件产生一个总的输入文件, 然后运行这个.ikp文件即可. ikp文件的内容很简单, 里面写好使用的四个文件的绝对路径, 脚本运行时根据路径复制文件, 运行vasp.
<pre class="line-numbers" data-start="0"><code class="language-bash"># Language: bash function vsp_ikp { usage="\ >>>>>>>>>>>>>>>> vsp_ikp <<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>> Jicun Li <<<<<<<<<<<<<<<< >>>>>>>>>> 2014-05-21 10:12:32 <<<<<<<<< >>Usage: vsp_ikp [File.in] [File.kpt] [File.pos] [File.pot] [Out.ikp]" echo "$usage" local Fin Fkpt Fpos Fpot Fout PWD=$(pwd) Fin=INCAR; Fkpt=KPOINTS; Fpos=POSCAR; Fpot=POTCAR; Fout=vsp.ikp opt=($@); N=${#opt[@]} for((i=0; i<N; i++)); do arg=${opt[$i]##*\.} [[ $arg =~ in ]] && { Fin=${opt[$i]}; } [[ $arg =~ kpt ]] && { Fkpt=${opt[$i]}; } [[ $arg =~ pos ]] && { Fpos=${opt[$i]}; } [[ $arg =~ pot ]] && { Fpot=${opt[$i]}; } [[ $arg =~ ikp ]] && { Fout=${opt[$i]}; } done echo echo Ouput ikp File: $Fout echo -n >$Fout echo INCAR: $PWD/$Fin >> $Fout echo KPOINTS: $PWD/$Fkpt >> $Fout echo POSCAR: $PWD/$Fpos >> $Fout echo POTCAR: $PWD/$Fpot >> $Fout } function vsp_run { usage="\ >>>>>>>>>>>>>>>> vsp_run <<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>> Jicun Li <<<<<<<<<<<<<<<< >>>>>>>>>> 2014-05-21 10:12:32 <<<<<<<<< >>Usage: vsp_run <File.ikp> [-cpu Ncpu]" [[ $# -lt 1 ]] && { echo "$usage"; exit; } File=${1%\.*}; Fout=$File Ncpu=4 #$(cat /proc/cpuinfo | grep "processor" | wc) [[ $# -ge 3 ]] && { Ncpu=$3; } Fin=$( grep INCAR $File.ikp | sed 's/INCAR://') Fkpt=$(grep KPOINTS $File.ikp | sed 's/KPOINTS://') Fpos=$(grep POSCAR $File.ikp | sed 's/POSCAR://') Fpot=$(grep POTCAR $File.ikp | sed 's/POTCAR://') cp $Fin ./INCAR cp $Fkpt ./KPOINTS cp $Fpos ./POSCAR cp $Fpot ./POTCAR Path="/home/jicun/VASP/vasp.x" MPIRUN="/share/apps/intel/impi/4.1.0.030/intel64/bin/mpirun" $MPIRUN -np $Ncpu -machinefile $PBS_NODEFILE $Path } job=$1; shift vsp_$job $* </code></pre>