VASP脚本程序怎么运行
2010-06-28 15:20
刚学VASP,对其还不是很熟悉;现在正在试着运行脚本文件(按侯老师的例子),准备好INCAR、KPOINTS、POTCAR文件后,应该准备POSCAR文件,那脚本程序run_a0怎样运行?脚本run_a0为: #!/bin/sh rm WAVECAR for i in 3.80 3.85 3.90 3.95 4.00 4.05 4.10 4.15 4.20 4.25 4.30 do cat >POSCAR < Al-fcc $i 0.0 0.5 0.5 0.5 0.0 0.5 0.5 0.5 0.0 Direct 0.0 0.0 0.0 ! echo "a =$i angstrom";time vasp E=‘grep "TOTEN" OUTCAR |tail -1|awk ‘{printf "%12.6f \n",$5}'‘ V=‘grep "volume" OUTCAR |tail -1|awk ‘{printf "%12.4f \n",$5}'‘ echo $V $E >>EtVo.dat done 可以自己写一个POSCAR,把$i换成一个具体的数。 Al-fcc $i 0.0 0.5 0.5 0.5 0.0 0.5 0.5 0.5 0.0 Direct 0.0 0.0 0.0 简单写个注释吧 ==== #!/bin/sh #每种shell脚本开头需要指定起类型,比如unix下原始的就是sh,linux都标配bash了, Solaris也是用bash了。功能上现在似乎zsh比较好,目前我是把zsh做默认shell. rm WAVECAR 删除WAVECAR,其实这里有点不好,因为很多系统默认把rm 替换为rm -i 也就是说你要删除这个文件时会跳出一个提示问是否要删除。建议改为 rm WAVECAR -rf for i in 3.80 3.85 3.90 3.95 4.00 4.05 4.10 4.15 4.20 4.25 4.30 do 这个sh/bash下典型的for循环,就是让i逐次取后面的值 cat >POSCAR < Al-fcc $i 0.0 0.5 0.5 0.5 0.0 0.5 0.5 0.5 0.0 Directlinuxshell脚本怎么运行 0.0 0.0 0.0 ! 这个就是利用管道创建文件POSCAR,两个“!”分别标识开头和结尾。 echo "a =$i angstrom";time vasp 屏幕输出 a的值,并运行vasp, time命令加在前面就是计算其运行时间。 E=‘grep "TOTEN" OUTCAR |tail -1|awk ‘{printf "%12.6f \n",$5}'‘ 搜索包含"TOTEN"的所有行,利用tail -1取最后一行,然后格式化输出第5个字符段。 V=‘grep "volume" OUTCAR |tail -1|awk ‘{printf "%12.4f \n",$5}'‘ 这个同上 echo $V $E >>EtVo.dat 把V,E的值添加到EtVo.dat done 表示结束for循环。 其实这些工具脚本都很简单的,关键还是要明白输出文件,然后就可以自己写一些适合自己用的。 可能问题: 1、./opt.sh: line 14: echoa=3.70 angstrom: command not found 是echo "a=$a angstrom",你少了空格。 2、/opt.sh: command substitution: line 16: unexpected EOF while looking for matching `"' ./opt.sh: command substitution: line 17: syntax error: unexpected end of file 用cat创建文件时,重定向符“<<”后 前后截断字符要相同。 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论