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小时内删除。