我们在使用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坐标的等价性,程序代码如下:
No Comments
Leave a comment Cancel