VASP使用

类别:    标签: vasp   阅读次数:   版权: (CC) BY-NC-SA

2014-05-21 08:54:04

VASP的使用方法设计的缺陷很大, 如果只是简单算个东西, 倒也可以, 若是想大规模使用, 成千上百的文件, 都有着一样的名字, 看了不疯才怪. 所以, 我们需要一个脚本, 将VASP计算的流程进行改造. 改造的原则是支持不同文件名, 且不同文件之间可任意组合.

创建赝势文件POTCAR的脚本

  1. 整理好四种赝势文件, uspp.LDA, uspp.GGA, paw.LDA, paw.GGA, paw.PBE, 将其分别放于与名称相应的文件夹下, 再将这四个文件夹 放在名称为POT的文件夹下
  2. 下面的脚本用来提取创建POTCAR
# Language: bash
POTROOT=$1; shift

usage="CatPot \<Type\> \<Elements...\>
	Type: uspp.LDA | uspp.GGA | paw.LDA | paw.GGA | paw.PBE"

[[ $# -lt 2 ]] && { echo "$usage"; exit; }

Type=$1; shift

echo -n >POTCAR
for i in $*; do
	zcat ${POTROOT}/${Type}/$i/POTCAR  >> POTCAR
done

grep -A 21 VRHFIN POTCAR

运行作业脚本

vasp运行需要四种输入文件, INCAR, KPOINTS, POSCAR, POTCAR, 且不能是其他名字, 程序也没提供选项指定其他名字. 彻底的解决方法是修改源代码, 困难不大, 但不建议. 除此之外可以使用一个脚本, 先将文件改名, 复制至作业运行目录下, 运行vasp, 完成后复制输出文件至原目录, 再将输出文件更名.

我的解决办法是参照GROMACS的运行方式, 先利用这四个文件产生一个总的输入文件, 然后运行这个.ikp文件即可. ikp文件的内容很简单, 里面写好使用的四个文件的绝对路径, 脚本运行时根据路径复制文件, 运行vasp.

# 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  [-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>
随意赞赏

微信

支付宝
◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: VASP.5.2.12编译:Intel Fortran+MPI+MKL
后一篇: 90年代五年制小学语文课本

访问人次(2015年7月 9日起): | 最后更新: 2017-06-23 03:12:17 UTC | 版权所有 © 2008 - 2017 Jerkwin