VASP高级教程[1]建立超胞
1、建立超胞可以使用MS或者VESTA
但是对于经常需要建立超胞的小伙伴来说,自己有个小程序反而一劳永逸
2、你可以选择使用shell脚本或者python脚本
3、废话不多说,开始上脚本:
首先是python3.0以上的版本:
脚本名字super.py
第一部分截图
4、第二部分截图
5、程序使用方法
在Linux界面下运行命令:
python super.py POSCAR 2 3 2 >POSCAR_super
6、这里注意命令之间的空格,还有POSCAR最后不能有空行
大于号(其实叫重定向)> 后面跟你的超胞名字,不要是POSCAR,不然会覆盖掉原来的POSCAR
7、运行后文件对比,因为屏幕原因,没有完全截图
8、附代码:
import sys
x=sys.argv[2]
y=sys.argv[3]
z=sys.argv[4]
x=int(x)
y=int(y)
z=int(z)
a=open(sys.argv[1],'r+')
Line=a.readlines()
Numline=len(Line)
print(Line[0].strip())
print(Line[1].strip())
#vector-extention
print(float(Line[2].strip().split()[0])*x, end=' ')
print(float(Line[2].strip().split()[1])*x, end=' ')
print(float(Line[2].strip().split()[2])*x)
print(float(Line[3].strip().split()[0])*y, end=' ')
print(float(Line[3].strip().split()[1])*y, end=' ')
print(float(Line[3].strip().split()[2])*y)
print(float(Line[4].strip().split()[0])*z, end=' ')
print(float(Line[4].strip().split()[1])*z, end=' ')
print(float(Line[4].strip().split()[2])*z)
print(Line[5].strip())
Numele=len(Line[6].strip().split())
for i in range(Numele):
print(int(Line[6].strip().split()[i])*x*y*z, end=' ')
print()
print(Line[7].strip())
for j in range(8,Numline):
L= Line[j].strip().split()
L[0]=float(L[0])
L[1]=float(L[1])
L[2]=float(L[2])
for m in range(x):
for n in range(y):
for k in range(z):
print((L[0] + m)/x,(L[1] + n)/y,(L[2] + k)/z)