1. python脚本

KPOINTS分数坐标转笛卡尔坐标

我们在使用vasp计算能带时,都是使用的分数坐标,但有时在拟合模型时需要将分数坐标转换成笛卡尔坐标,下面讲一下如何进行转换。

首先正格矢与倒格矢有如下关系:

我们设正格矢基矢的矩阵为:

所以只要求出BT,然后乘以原来的分数坐标就行

from re import U
import matplotlib.pyplot as pl
from numpy import *

knum=151

lat=matrix([[1.0,0.0,0],[-0.5,sqrt(3.0)/2.0,0],[0,0,20]])


# print(lat,xx)
# exit()

unitI=matrix([[1,0,0],[0,1,0],[0,0,1]])

lat_k=2*pi*unitI*linalg.inv(lat)


print("this is",lat_k)
# exit()
lat_k=lat_k.A
ens = zeros((knum,3), dtype=float64)
a = open("KP", 'r+')
for m in range(knum):
    Kq = a.readline().strip().split()
    kx, ky,kz = [float(Kq[n]) for n in range(3)]
    ens[m][0]=kx*lat_k[0][0]+ky*lat_k[0][1]+kz*lat_k[0][2]
    ens[m][1]=kx*lat_k[1][0]+ky*lat_k[1][1]+kz*lat_k[1][2]
    ens[m][2]=kx*lat_k[2][0]+ky*lat_k[2][1]+kz*lat_k[2][2]
print(ens)

以石墨烯为例验证fraction坐标和Cartesian坐标的等价性,程序代码如下:

Comments to: KPOINTS分数坐标转笛卡尔坐标

您的邮箱地址不会被公开。 必填项已用 * 标注