vasplib:HR:Type HR - a powerful TB tools
Type
HR 的数据类型共有三种
- mat (default) 之前已经简单介绍过了
- sparse 这个主要针对大型稀疏矩阵, 研究TBG时特别设置的
- list 这种数据结构本身就是稀疏格式,同时方便对称性操作,缺点是看起来不太直观,这是后续优先发展和使用的模式HR的数据结构类型之间可以任意切换
mat
以Graphene为例回顾一下 mat 模式
Graphene
只考虑最近邻Hopping 石墨烯HR中的R只有
0 0 0
1 0 0
0 1 0
-1 0 0
0 -1 0
这5种 对于A子格有 [0,0,0],[1,0,0],[0,-1,0]; 对于B子格有 [0,0,0],[-1,0,0],[0,1,0];
1syms t real;
2Grpahene_TB = HR(2);
3A_vectorL = [0,0,0;1,0,0;0,-1,0];
4B_vectorL = [0,0,0;-1,0,0;0,1,0];
5Grpahene_TB = Grpahene_TB.set_hop(t,1,2,A_vectorL,'sym');
6Grpahene_TB = Grpahene_TB.set_hop(t,2,1,B_vectorL,'sym')
对于相同的Hopping我们可以一次指定多个R
这个时候,我们去看整个TB的结构Grpahene_TB.printout;
事实上,对于模型来讲,大部分的Hopping矩阵都是稀疏的,我们来了解一下另一种结构 list
list
list 更像 是 hr.dat的稀疏格式
1Grpahene_TB_list = Grpahene_TB.rewrite()
Grpahene_TB_list =
HR - 属性:Result
vectorL: [6×5 int32]
HnumL: [6×1 double]
HcoeL: [6×1 sym]
NRPTS: 6
WAN_NUM: 2
Basis_num: []
Rm: [3×3 double]
Gk: [3×3 double]
symvar_list: [1×1 sym]
.list()
1Grpahene_TB_list.list()
通过 list
方法,可以看到每一个Hopping
.show()
我们可以自定义晶格信息导入,并看到Hopping示意图
1Rm = [1,0,0;-0.5,sqrt(3)/2,0;0,0,1];
2Grpahene_TB_list = Grpahene_TB_list.input_Rm(Rm);
3orbL = [2/3,1/3,0;1/3,2/3,0];
4Grpahene_TB_list.orbL = orbL;
5Grpahene_TB_list.show('HOPPING','scale', 2.4560000896,'atomscale',0.1,'TwoD',true);
读取 wannier
我们同样可以以list结构读取wannier
1HR_TB = HR.from_wannier90('wannier90_hr.dat','list');
通过设定Accuracy = 1e-6
可以删掉读取的wannier中一些可以忽略的Hopping
1HR_TB = HR.from_wannier90('wannier90_hr.dat','list',Accuracy);
转换回矩阵模式
1Grpahene_TB_mat = Grpahene_TB_list.rewrite('rewind',true);
sparse
1HRTB_sparse = HRTB_mat.sparse();
2HRTB_mat = HRTB_sparse.full();
目前提供sparse与mat之间的转换