Eötvös Quantum Utilities  v5.0.144
Providing the Horsepowers in the Quantum Realm
test_Graphene_SOC.m
Go to the documentation of this file.
1 %% Eotvos Quantum Transport Utilities
2 % Copyright (C) 2018 Peter Rakyta, Ph.D
3 %
4 % This program is free software: you can redistribute it and/or modify
5 % it under the terms of the GNU General Public License as published by
6 % the Free Software Foundation, either version 3 of the License, or
7 % (at your option) any later version.
8 %
9 % This program is distributed in the hope that it will be useful,
10 % but WITHOUT ANY WARRANTY; without even the implied warranty of
11 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 % GNU General Public License for more details.
13 %
14 % You should have received a copy of the GNU General Public License
15 % along with this program. If not, see http://www.gnu.org/licenses/.
16 %
17 %> @addtogroup unit_tests Unit Tests
18 %> @{
19 %> @file test_TMDC_Monolayer.m
20 %> @brief Testfile to check the lattice construction of monolayer TMDC by classes TMDC_Monolayer_Lead_Hamiltonians and TMDC_Monolayer_SOC_Lead_Hamiltonians.
21 %> @Available
22 %> EQuUs v4.9.136 or later
23 %> @}
24 %> @brief Testfile to check the lattice construction of monolayer TMDC by classes TMDC_Monolayer_Lead_Hamiltonians and TMDC_Monolayer_SOC_Lead_Hamiltonians.
25 function test_Graphene_SOC()
26 
27 
28 filename = mfilename('fullpath');
29 [directory, fncname] = fileparts( filename );
30 
31 %% test of the class Graphene_SOC_Lead_Hamiltonians to create Hamiltonians of ribbon with zigzag edges
32  disp( '***** test of Rashba-type SOC for zigzag edged ribbon *****' );
33 
34  % create input structures
35  [Opt, param] = parseInput( 'Basic_Input_Graphene_SOC_Lattice.xml');
36 
37  % setting the width of the lead 1
38  param.Leads{1}.M = 2;
39 
40  % setting the Rashba-type SOC
41  param.Leads{1}.Rashba = 0.01;
42 
43  % The theoretical distance of the pockets from the central Dirac point
44  kSO = 2*param.Leads{1}.Rashba^2/param.Leads{1}.vargamma^2;
45 
46  % A vector pointing into the K point
47  Kpoint = [0; 2*pi/3/sqrt(3)];
48 
49  k_pocket_1 = [0; kSO] + Kpoint;
50  k_pocket_2 = [sin(pi/3); -cos(pi/3)]*kSO + Kpoint;
51  k_pocket_3 = [-sin(pi/3); -cos(pi/3)]*kSO + Kpoint;
52 
53  % create an instance of class CreateLeadHamiltonians to create Hamiltonians
54  q = kSO*sin(pi/3)*3;
55  HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', q);
56  HLead_1.CreateHamiltonians();
57 
58  % getting lattice vectors of the triangle lattice
59  cCoordinates = HLead_1.Read('coordinates');
60  a1 = cCoordinates.a*cCoordinates.LatticeConstant;
61  a2 = cCoordinates.b*cCoordinates.LatticeConstant;
62 
63  % The spectrum should be zero at the pocket points
64  H_EQuUs = HLead_1.MomentumDependentHamiltonian( k_pocket_1'*a1, k_pocket_1'*a2);
65  eigvals = eig(full(H_EQuUs));
66 
67  checkpoint = min(abs(eigvals));
68  if checkpoint > 1e-10
69  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
70  end
71 
72 
73  H_EQuUs = HLead_1.MomentumDependentHamiltonian( k_pocket_2'*a1, k_pocket_2'*a2);
74  eigvals = eig(full(H_EQuUs));
75 
76  checkpoint = min(abs(eigvals));
77  if checkpoint > 1e-10
78  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
79  end
80 
81 
82  H_EQuUs = HLead_1.MomentumDependentHamiltonian( k_pocket_3'*a1, k_pocket_3'*a2);
83  eigvals = eig(full(H_EQuUs));
84 
85  checkpoint = min(abs(eigvals));
86  if checkpoint > 1e-10
87  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
88  end
89 
90  % Calculate the spectrum for q through the first pocket
91 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', k_pocket_1'*a2);
92 % HLead_1.CreateHamiltonians();
93 % HLead_1.CalcSpektrum('ka_min', k_pocket_1'*a1 - 1.5*kSO*sqrt(3), 'ka_max', k_pocket_1'*a1 + 0.5*kSO*sqrt(3), 'db', 2, 'ToPlot', 1);
94 
95 
96  % Calculate the spectrum for q through the second pocket
97 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', k_pocket_2'*a2);
98 % HLead_1.CreateHamiltonians();
99 % HLead_1.CalcSpektrum('ka_min', k_pocket_2'*a1 - 0.5*kSO*sqrt(3), 'ka_max', k_pocket_2'*a1 + 1.5*kSO*sqrt(3), 'db', 2, 'ToPlot', 1);
100 
101  % Calculate the spectrum for q through the third pocket
102 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', k_pocket_3'*a2);
103 % HLead_1.CreateHamiltonians();
104 % HLead_1.CalcSpektrum('ka_min', k_pocket_3'*a1 - 0.5*kSO*sqrt(3), 'ka_max', k_pocket_3'*a1 + 1.5*kSO*sqrt(3), 'db', 2, 'ToPlot', 1);
105 
106 
107 %% test of the class Graphene_SOC_Lead_Hamiltonians to create Hamiltonians of ribbon with armchair edges
108  disp( '***** test of Rashba-type SOC for armchair edged ribbon *****' );
109 
110  % create input structures
111  [Opt, param] = parseInput( 'Basic_Input_Graphene_SOC_Lattice.xml');
112 
113  % changing the edge of the first lead to armchair type.
114  param.Leads{1}.End_Type = 'Z';
115 
116  % setting the width of the lead 1
117  param.Leads{1}.M = 1;
118 
119  % setting the Rashba-type SOC
120  param.Leads{1}.Rashba = 0.01;
121 
122  % The theoretical distance of the pockets from the central Dirac point
123  kSO = 2*param.Leads{1}.Rashba^2/param.Leads{1}.vargamma^2;
124 
125  % A vector pointing into the K point
126  Kpoint = [2*pi/3/sqrt(3); 0];
127 
128  k_pocket_1 = [kSO; 0] + Kpoint;
129  k_pocket_2 = [-cos(pi/3); -sin(pi/3)]*kSO + Kpoint;
130  k_pocket_3 = [-cos(pi/3); sin(pi/3)]*kSO + Kpoint;
131 
132  % create an instance of class CreateLeadHamiltonians to create Hamiltonians
133  q = kSO*sin(pi/3)*3;
134  HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', q);
135  HLead_1.CreateHamiltonians();
136 
137  % getting lattice vectors of the triangle lattice
138  cCoordinates = HLead_1.Read('coordinates');
139  a1 = cCoordinates.a*cCoordinates.LatticeConstant;
140  a2 = cCoordinates.b*cCoordinates.LatticeConstant;
141 
142 
143  % The spectrum should be zero at the pocket points
144  H_EQuUs = HLead_1.MomentumDependentHamiltonian( k_pocket_1'*a1, k_pocket_1'*a2);
145  eigvals = eig(full(H_EQuUs));
146 
147  checkpoint = min(abs(eigvals));
148  if checkpoint > 1e-10
149  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
150  end
151 
152 
153  H_EQuUs = HLead_1.MomentumDependentHamiltonian( k_pocket_2'*a1, k_pocket_2'*a2);
154  eigvals = eig(full(H_EQuUs));
155 
156  checkpoint = min(abs(eigvals));
157  if checkpoint > 1e-10
158  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
159  end
160 
161 
162  H_EQuUs = HLead_1.MomentumDependentHamiltonian( k_pocket_3'*a1, k_pocket_3'*a2);
163  eigvals = eig(full(H_EQuUs));
164 
165  checkpoint = min(abs(eigvals));
166  if checkpoint > 1e-10
167  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
168  end
169 
170 
171 
172 
173  % Calculate the spectrum for q through the K point
174 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', Kpoint'*a2);
175 % HLead_1.CreateHamiltonians();
176 % HLead_1.CalcSpektrum('ka_min', k_pocket_1'*a1 - 1e-6, 'ka_max', k_pocket_1'*a1 + 1e-6, 'db', 2, 'ToPlot', 1);
177 
178  % Calculate the spectrum for q through the first pocket
179 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', k_pocket_1'*a2);
180 % HLead_1.CreateHamiltonians();
181 % HLead_1.CalcSpektrum('ka_min', k_pocket_1'*a1 - 1.5*kSO*sqrt(3), 'ka_max', k_pocket_1'*a1 + 1.5*kSO*sqrt(3), 'db', 2, 'ToPlot', 1);
182 
183 
184  % Calculate the spectrum for q through the second and the third pocket
185 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', k_pocket_2'*a2);
186 % HLead_1.CreateHamiltonians();
187 % HLead_1.CalcSpektrum('ka_min', k_pocket_2'*a1 - 4.5*kSO*sqrt(3), 'ka_max', k_pocket_2'*a1 + 4.5*kSO*sqrt(3), 'db', 2, 'ToPlot', 1);
188 
189 
190 
191 %% test of the class Graphene_SOC_Lead_Hamiltonians to create Hamiltonians of ribbon with zigzag edges
192  disp( '***** test of intrinsic SOC in the class Graphene_SOC_Lead_Hamiltonians for zigzag edged ribbon *****' );
193 
194  % create input structures
195  [Opt, param] = parseInput( 'Basic_Input_Graphene_SOC_Lattice.xml');
196 
197  % changing the edge of the first lead to armchair type.
198  param.Leads{1}.End_Type = 'A';
199 
200  % setting the width of the lead 1
201  param.Leads{1}.M = 2;
202 
203  % setting the Rashba-type SOC
204  param.Leads{1}.Intrinsic = 0.01;
205  % setting the Rashba-type SOC
206  param.Leads{1}.Rashba = 0.0;
207 
208  % A vector pointing into the K point
209  Kpoint = [0; 2*pi/3/sqrt(3)];
210 
211  % create an instance of class CreateLeadHamiltonians to create Hamiltonians
212  q = 0;
213  HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', q);
214  HLead_1.CreateHamiltonians();
215 
216  % getting lattice vectors of the triangle lattice
217  cCoordinates = HLead_1.Read('coordinates');
218  a1 = cCoordinates.a*cCoordinates.LatticeConstant;
219  a2 = cCoordinates.b*cCoordinates.LatticeConstant;
220 
221  % The spectrum should be zero at the pocket points
222  H_EQuUs = HLead_1.MomentumDependentHamiltonian( Kpoint'*a1, Kpoint'*a2);
223  eigvals = eig(full(H_EQuUs));
224 
225  checkpoint = min(abs(eigvals) - 3*sqrt(3)*param.Leads{1}.Intrinsic);
226  if checkpoint > 1e-10
227  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
228  end
229 
230 
231 
232  % Calculate the spectrum for q through the K point
233 % param.Leads{1}.M = 2;
234 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', 0);
235 % HLead_1.CreateHamiltonians();
236 % HLead_1.CalcSpektrum('ka_min', 1.8, 'ka_max', 2.6, 'db', 20, 'ToPlot', 1);
237 
238 
239 
240 
241 %% test of the class Graphene_SOC_Lead_Hamiltonians to create Hamiltonians of ribbon with zigzag edges
242  disp( '***** test of valley Zeeman SOC in the class Graphene_SOC_Lead_Hamiltonians for zigzag edged ribbon *****' );
243 
244  % create input structures
245  [Opt, param] = parseInput( 'Basic_Input_Graphene_SOC_Lattice.xml');
246 
247  % changing the edge of the first lead to armchair type.
248  param.Leads{1}.End_Type = 'A';
249 
250  % setting the width of the lead 1
251  param.Leads{1}.M = 2;
252 
253  % setting the Rashba-type SOC
254  param.Leads{1}.ValleyZeeman = 0.01;
255  % setting the Rashba-type SOC
256  param.Leads{1}.Rashba = 0.0;
257 
258  % A vector pointing into the K point
259  Kpoint = [0; 2*pi/3/sqrt(3)];
260 
261  % create an instance of class CreateLeadHamiltonians to create Hamiltonians
262  q = 0;
263  HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', q);
264  HLead_1.CreateHamiltonians();
265 
266  % getting lattice vectors of the triangle lattice
267  cCoordinates = HLead_1.Read('coordinates');
268  a1 = cCoordinates.a*cCoordinates.LatticeConstant;
269  a2 = cCoordinates.b*cCoordinates.LatticeConstant;
270 
271  % The spectrum should be zero at the pocket points
272  H_EQuUs = HLead_1.MomentumDependentHamiltonian( Kpoint'*a1, Kpoint'*a2);
273  eigvals = eig(full(H_EQuUs));
274 
275  checkpoint = min(abs(eigvals) - 3*sqrt(3)*param.Leads{1}.ValleyZeeman);
276  if checkpoint > 1e-10
277  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
278  end
279 
280 
281 
282  % Calculate the spectrum for q through the K point
283 % param.Leads{1}.M = 2;
284 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', 0);
285 % HLead_1.CreateHamiltonians();
286 % HLead_1.CalcSpektrum('ka_min', 1.8, 'ka_max', 2.6, 'db', 20, 'ToPlot', 1);
287 
288 %HLead_1.CalcSpektrum('db', 20, 'ToPlot', 1);
289 
290 
291 
292 %% test of the class Graphene_SOC_Lead_Hamiltonians to create Hamiltonians of ribbon with armchair edges
293  disp( '***** test of intrinsic SOC in the class Graphene_SOC_Lead_Hamiltonians for armchair edged ribbon *****' );
294 
295  % create input structures
296  [Opt, param] = parseInput( 'Basic_Input_Graphene_SOC_Lattice.xml');
297 
298  % changing the edge of the first lead to armchair type.
299  param.Leads{1}.End_Type = 'Z';
300 
301  % setting the width of the lead 1
302  param.Leads{1}.M = 1;
303 
304  % setting the Rashba-type SOC
305  param.Leads{1}.Intrinsic = 0.01;
306  % setting the Rashba-type SOC
307  param.Leads{1}.Rashba = 0.0;
308 
309  % A vector pointing into the K point
310  Kpoint = [2*pi/3/sqrt(3); 0];
311 
312  % create an instance of class CreateLeadHamiltonians to create Hamiltonians
313  q = 0;
314  HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', q);
315  HLead_1.CreateHamiltonians();
316 
317  % getting lattice vectors of the triangle lattice
318  cCoordinates = HLead_1.Read('coordinates');
319  a1 = cCoordinates.a*cCoordinates.LatticeConstant;
320  a2 = cCoordinates.b*cCoordinates.LatticeConstant;
321 
322  % The spectrum should be zero at the pocket points
323  H_EQuUs = HLead_1.MomentumDependentHamiltonian( Kpoint'*a1, Kpoint'*a2);
324  eigvals = eig(full(H_EQuUs));
325 
326  checkpoint = min(abs(eigvals) - 3*sqrt(3)*param.Leads{1}.Intrinsic);
327  if checkpoint > 1e-10
328  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
329  end
330 
331 
332 
333  % Calculate the spectrum for q through the K point
334 % param.Leads{1}.M = 1;
335 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', Kpoint'*a2);
336 % HLead_1.CreateHamiltonians();
337 % HLead_1.CalcSpektrum('ka_min', -0.3, 'ka_max', 0.3, 'db', 4, 'ToPlot', 1);
338 
339 
340 
341 %% test of the class Graphene_SOC_Lead_Hamiltonians to create Hamiltonians of ribbon with armchair edges
342  disp( '***** test of valley Zeeman SOC in the class Graphene_SOC_Lead_Hamiltonians for armchair edged ribbon *****' );
343 
344  % create input structures
345  [Opt, param] = parseInput( 'Basic_Input_Graphene_SOC_Lattice.xml');
346 
347  % changing the edge of the first lead to armchair type.
348  param.Leads{1}.End_Type = 'Z';
349 
350  % setting the width of the lead 1
351  param.Leads{1}.M = 1;
352 
353  % setting the Rashba-type SOC
354  param.Leads{1}.ValleyZeeman = 0.01;
355  % setting the Rashba-type SOC
356  param.Leads{1}.Rashba = 0.0;
357 
358 
359  % A vector pointing into the K point
360  Kpoint = [2*pi/3/sqrt(3); 0];
361 
362  % create an instance of class CreateLeadHamiltonians to create Hamiltonians
363  q = 0;
364  HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', q);
365  HLead_1.CreateHamiltonians();
366 
367  % getting lattice vectors of the triangle lattice
368  cCoordinates = HLead_1.Read('coordinates');
369  a1 = cCoordinates.a*cCoordinates.LatticeConstant;
370  a2 = cCoordinates.b*cCoordinates.LatticeConstant;
371 
372  % The spectrum should be zero at the pocket points
373  H_EQuUs = HLead_1.MomentumDependentHamiltonian( Kpoint'*a1, Kpoint'*a2);
374  eigvals = eig(full(H_EQuUs));
375 
376  checkpoint = min(abs(eigvals) - 3*sqrt(3)*param.Leads{1}.ValleyZeeman);
377  if checkpoint > 1e-10
378  warning(['EQuUs:Tests:', fncname, ':checkpoint failed with error ', num2str( checkpoint)]);
379  end
380 
381 
382 
383  % Calculate the spectrum for q through the K point
384 % param.Leads{1}.M = 1;
385 % HLead_1 = CreateLeadHamiltonians(Opt, param, 'Hanyadik_Lead',1, 'q', Kpoint'*a2);
386 % HLead_1.CreateHamiltonians();
387 % HLead_1.CalcSpektrum('ka_min', -0.3, 'ka_max', 0.3, 'db', 4, 'ToPlot', 1);
388 
389 
390 
391 
392 
393  end
function test(arg1, arg2)
Brief description of the function.
lead_param Leads
A list of structures lead_param containing the physical parameters for the scattering region.
Definition: structures.m:49
Property q
The tranverse momentum for transverse computations.
Property width
The number of sites in the cross section.
Property Hanyadik_Lead
The id number of the current lead.
Structure Opt contains the basic computational parameters used in EQuUs.
Definition: structures.m:60
Class to create and store Hamiltonian of the translational invariant leads.
function test_TMDC_Monolayer()
Testfile to check the lattice construction of monolayer TMDC by classes TMDC_Monolayer_Lead_Hamiltoni...
function Transport(Energy, B)
Calculates the conductance at a given energy value.
function Hamiltonians(varargin)
Function to create the custom Hamiltonians for the 1D chain.
function test_Graphene_SOC()
Testfile to check the lattice construction of monolayer TMDC by classes TMDC_Monolayer_Lead_Hamiltoni...
Class to create the Hamiltonian of one unit cell in a translational invariant lead made of TMDC_Monol...
function CreateLeadHamiltonians(Opt, param, varargin)
Constructor of the class.
Structure param contains data structures describing the physical parameters of the scattering center ...
Definition: structures.m:45
Class to create the Hamiltonian of one unit cell in a translational invariant lead made of TMDC_Monol...
function parseInput(filename)
This function parses the input file containing the input parameters.
A class to create the Hamiltonian of one unit cell in a translational invariant graphene lead,...
function structures(name)
Property coordinates
An instance of the structure coordinates.