VASP高级教程[1]建立超胞

2025-10-03 00:33:17

1、建立超胞可以使用MS或者VESTA

但是对于经常需要建立超胞的小伙伴来说,自己有个小程序反而一劳永逸

VASP高级教程[1]建立超胞

2、你可以选择使用shell脚本或者python脚本

VASP高级教程[1]建立超胞

3、废话不多说,开始上脚本:

首先是python3.0以上的版本:

脚本名字super.py

第一部分截图

VASP高级教程[1]建立超胞

4、第二部分截图

VASP高级教程[1]建立超胞

5、程序使用方法

在Linux界面下运行命令:

python super.py POSCAR  2 3  2 >POSCAR_super

6、这里注意命令之间的空格,还有POSCAR最后不能有空行

大于号(其实叫重定向)> 后面跟你的超胞名字,不要是POSCAR,不然会覆盖掉原来的POSCAR 

VASP高级教程[1]建立超胞

VASP高级教程[1]建立超胞

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)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢