Vasplib HR (2) Type of HR Class

vasplib:HR:Type HR - a powerful TB tools

Type

HR 的数据类型共有三种

  • mat (default) 之前已经简单介绍过了
  • sparse 这个主要针对大型稀疏矩阵, 研究TBG时特别设置的
  • list 这种数据结构本身就是稀疏格式,同时方便对称性操作,缺点是看起来不太直观,这是后续优先发展和使用的模式

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()

Result

Grpahene_TB_list = HR - 属性:

    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]
我们注意到此时 vectorL的列数变成了5 是因为额外加入了 hi hj 的hopping, 而HcoeL 与HnumL也变成了一个向量 长度与vectorL的行数相同

.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之间的转换


200 Words|This article has been read times