Eötvös Quantum Utilities  v5.0.144
Providing the Horsepowers in the Quantum Realm
Graphene_SOC_Lead_Hamiltonians.m
Go to the documentation of this file.
1 %% Eotvos Quantum Transport Utilities - Graphene_SOC_Lead_Hamiltonians
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 lattices Lattices
18 %> @{
20 %> @brief A class to create the Hamiltonian of one unit cell in a translational invariant graphene lead, including Rashba-type, intrinsic and valley-Zeeman spin-orbit coupling
21 %> @}
22 %> @brief A class to create the Hamiltonian of one unit cell in a translational invariant graphene lead, including Rashba-type, intrinsic and valley-Zeeman spin-orbit coupling
23 %%
25 
26 
27 methods ( Access = public )
28 
29 
30 
32 %> @brief Creates Hamiltonians H_0 and H_1 of graphene ribbon with zigzag/armchair edge including SOC as well as the structure conatining the coordinates of the atomic sites.
33 %> @image html graphene_SOC.jpg
34 %> @image latex graphene_SOC.jpg
35 %> @param lead_param An instance of structure #Lattice_Graphene_SOC (or its subclass) containing the physical parameters.
36 %> @param M Number of sites in the cross section of the lead.
37 %> @param End_Type The orientation of the lattice. Set 'A' for lattice with armchair orientation (meaning zigzag edges) or 'Z' for zizgaz orientation (meaning arm-chair edges)
38 %> @return [1] The Hamiltonian of one slab in the ribbon.
39 %> @return [2] The coupling between the slabs.
40 %> @return [3] The transverse coupling between the slabs for transverse calculations.
41 %> @return [4] A structure Coordinates containing the coordinates of the sites.
42 function [H0, H1, H1_transverse, H1_skew_left,H1_skew_right, coordinates] = Graphene_SOC_Hamiltonians(obj, lead_param, M, End_Type )
43 
44  % check the structure containing the physical parameters
45  supClasses = superclasses(lead_param);
46  if sum( strcmp( supClasses, 'Lattice_Graphene_SOC' ) ) == 0
47  error(['EQuUs:Lattices:', class(obj), ':Graphene_SOC_Lead_Hamiltonians'], 'Invalid type of the input parameter');
48  end
49 
50  if isempty(M)
51  error(['EQuUs:Lattices:', class(obj), ':Graphene_SOC_Lead_Hamiltonians'], 'The input parameter M is empty')
52  end
53 
54  [H0_spindown,H1_spindown,H1_transverse_spindown,coordinates_spindown] = obj.Graphene_Hamiltonians(lead_param, M, End_Type);
55 
56  coordinates_spindown.z = zeros(size(coordinates_spindown.x));
57 
58  H0_spinup = H0_spindown;
59  H1_spinup = H1_spindown;
60  H1_transverse_spinup = H1_transverse_spindown;
61 
62  lambda = lead_param.Rashba;
63 
64  if strcmp(End_Type, 'A')
65 
66  % ******* Rashba-type SOC *************
67 
68  % unity vectors pointing towards the neighbour sites
69  d1 = [0.5; -sqrt(3)/2];
70  d2 = [0.5; sqrt(3)/2];
71  d3 = [-1; 0];
72 
73  % the vectorial product of the Pauli matrices and the vectors d_i according to Phys. Rev. B 82, 113405
74  d1 = d1(2)+1i*d1(1);
75  d2 = d2(2)+1i*d2(1);
76  d3 = d3(2)+1i*d3(1);
77 
78  % The matrix size
79  Meff = 2*M;
80 
81  % The Rashba SOC coupling in H0 from spin down to spin up
82  HSO_d1 = sparse(1:2:M, M+1:2:2*M, 1i*lambda*d1,Meff,Meff) + sparse(M+1:2:2*M, 1:2:M,-1i*lambda*d1,Meff,Meff);
83  HSO_d2 = sparse(M+2:2:2*M, 2:2:M, 1i*lambda*d2,Meff,Meff) + sparse(2:2:M ,M+2:2:2*M,-1i*lambda*d2,Meff,Meff);
84  HSO_d3 = sparse(2:2:M, 1:2:M, -1i*lambda*d3,Meff,Meff) + sparse(M+3:2:2*M-1, M+2:2:2*M-2, -1i*lambda*d3,Meff,Meff) + sparse(1:2:M, 2:2:M, 1i*lambda*d3,Meff,Meff) + sparse(M+2:2:2*M-2, M+3:2:2*M-1, 1i*lambda*d3,Meff,Meff);
85  HSO = HSO_d1 + HSO_d2 + HSO_d3;
86 
87  % setting SOC in H0
88  H0 = [H0_spinup,HSO;HSO',H0_spindown];
89 
90  % The Rshba SOC coupling in H1 from spin down to spin up
91  H1_SO_d1 = sparse(M+2:2:2*M, 2:2:M, 1i*lambda*d1, Meff, Meff);
92  H1_SO_d2 = sparse(M+1:2:2*M, 1:2:M, -1i*lambda*d2, Meff, Meff);
93  H1_SO_spinup_spindown = H1_SO_d1 + H1_SO_d2;
94 
95  % The Rshba SOC coupling in H1 from spin up to spin down
96  H1_SO_d1 = sparse(M+2:2:2*M, 2:2:M, 1i*lambda*conj(d1), Meff, Meff);
97  H1_SO_d2 = sparse(M+1:2:2*M, 1:2:M, -1i*lambda*conj(d2), Meff, Meff);
98  H1_SO_spindown_spinup = H1_SO_d1 + H1_SO_d2;
99 
100  % setting SOC in H1
101  H1 = [H1_spinup, H1_SO_spinup_spindown; H1_SO_spindown_spinup, H1_spindown];
102 
103 
104 
105  % The Rshba SOC coupling in H_transverse from spin down to spin up
106  if ~isempty(H1_transverse_spindown)
107 
108  H1_transverse_SO_spinup_spindown = sparse(2*M, M+1, 1i*lambda*d3, Meff, Meff);
109  H1_transverse_SO_spindown_spinup = sparse(2*M, M+1, 1i*lambda*conj(d3), Meff, Meff);
110 
111  % setting SOC in H_transverse
112  H1_transverse = [ H1_transverse_spindown, H1_transverse_SO_spinup_spindown;
113  H1_transverse_SO_spindown_spinup, H1_transverse_spinup];
114 
115 
116  H1_skew_left = [];
117  H1_skew_right = [];
118 
119 
120  else
121  H1_transverse = [];
122  end
123 
124  % ******* Intrinsic and valley-Zeeman SOC *************
125 
126  SOintrinsic = lead_param.Intrinsic;
127  SOvalley_zeeman = lead_param.ValleyZeeman;
128 
129  % intrinsic SO coupling in the unit cell for the spin up subspace
130  Meff = 2*M;
131  H0_SOintrinsic = sparse( M+1:2:2*M-1, 2:2:M, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
132  sparse( 1:2:M-1, M+2:2:2*M, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, A sublattice
133  sparse( M+3:2:2*M-1, 2:2:M-2, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
134  sparse( 3:2:M-1, M+2:2:2*M-2, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... clockwise deirection, A sublattice
135 
136  H0_SOintrinsic = H0_SOintrinsic + H0_SOintrinsic'; % clockwise deirection and counterclockwise directions
137 
138  % expanding the Hamiltonian to the full spin space
139  H0_SOintrinsic = kron( [1,0;0,-1], H0_SOintrinsic);
140  H0 = H0 + H0_SOintrinsic;
141 
142 
143  H1_SOintrinsic = sparse( M+2:2:2*M, 1:2:M-1, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, A sublattice
144  sparse( 2:2:M, 2:2:M, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
145  sparse( M+1:2:2*M-1, M+1:2:2*M-1, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
146  sparse( M+2:2:2*M-2, 3:2:M-1, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, A sublattice
147  sparse( M+1:2:2*M-1, 2:2:M, -1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... counterclockwise deirection, B sublattice
148  sparse( 1:2:M-1, 1:2:M-1, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... counterclockwise deirection, A sublattice
149  sparse( M+2:2:2*M, M+2:2:2*M, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... counterclockwise deirection, A sublattice
150  sparse( M+3:2:2*M-1, 2:2:M-2, -1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff); ... counterclockwise deirection, B sublattice
151 
152 
153  % expanding the Hamiltonian to the full spin space
154  H1_SOintrinsic = kron( [1,0;0,-1], H1_SOintrinsic);
155  H1 = H1 + H1_SOintrinsic;
156 
157 
158 
159  % The Intrinsic SOC coupling in H_transverse from spin down to spin up
160  if ~isempty(H1_transverse_spindown)
161 
162  H1_transverse_SOintrinsic = sparse(M, M+1, -1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... counterclockwise deirection, B sublattice
163  sparse(2*M, 1, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... counterclockwise deirection, A sublattice
164 
165  % expanding the Hamiltonian to the full spin space
166  H1_transverse_SOintrinsic = kron( [1,0;0,-1], H1_transverse_SOintrinsic);
167  H1_transverse = H1_transverse + H1_transverse_SOintrinsic;
168 
169 
170  H1_skew_left_SOintrinsic = sparse(2*M, 1, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... clockwise deirection, A sublattice
171 
172  % expanding the Hamiltonian to the full spin space
173  H1_skew_left = kron( [1,0;0,-1], H1_skew_left_SOintrinsic);
174 
175 
176 
177  H1_skew_right_SOintrinsic = sparse(M, M+1, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff); ...clockwise deirection, B sublattice
178 
179  % expanding the Hamiltonian to the full spin space
180  H1_skew_right = kron( [1,0;0,-1], H1_skew_right_SOintrinsic);
181 
182  else
183  H1_transverse = [];
184  H1_skew_left = [];
185  H1_skew_right = [];
186  end
187 
188 
189 
190 
191 
192 
193 
194  % armchair edged bilayer ribbon: warping checked, but not for H1_transverse
195  elseif strcmp(End_Type, 'Z')
196 
197  % unity vectors pointing towards the neighbour sites
198  d1 = [sqrt(3)/2; 0.5];
199  d2 = [-sqrt(3)/2; 0.5];
200  d3 = [0; -1];
201 
202 
203  % the vectorial product of the Pauli matrices and the vectors d_i according to Phys. Rev. B 82, 113405
204  d1 = d1(2)+1i*d1(1);
205  d2 = d2(2)+1i*d2(1);
206  d3 = d3(2)+1i*d3(1);
207 
208  % The matrix size
209  Meff = 4*M;
210 
211  % The Rashba SOC coupling in H0 from spin down to spin up
212  HSO_d1 = sparse(M+2:2*M, 1:M-1, 1i*lambda*d1, Meff, Meff) + sparse(3*M+1:4*M, 2*M+1:3*M, 1i*lambda*d1, Meff, Meff) + ...
213  sparse(1:M-1, M+2:2*M, -1i*lambda*d1, Meff, Meff) + sparse(2*M+1:3*M, 3*M+1:4*M, -1i*lambda*d1, Meff, Meff);
214  HSO_d2 = sparse(M+1:2*M, 1:M, 1i*lambda*d2, Meff, Meff) + sparse(3*M+1:4*M-1, 2*M+2:3*M, 1i*lambda*d2, Meff, Meff) + ...
215  sparse(1:M, M+1:2*M, -1i*lambda*d2, Meff, Meff) + sparse(2*M+2:3*M, 3*M+1:4*M-1, -1i*lambda*d2, Meff, Meff);
216 
217  HSO_d3 = sparse(M+1:2*M, 2*M+1:3*M, 1i*lambda*d3, Meff, Meff) + sparse(2*M+1:3*M, M+1:2*M, -1i*lambda*d3, Meff, Meff);
218  HSO = HSO_d1 + HSO_d2 + HSO_d3;
219 
220  % setting SOC in H0
221  H0 = [H0_spinup,HSO;HSO',H0_spindown];
222 
223 
224 
225  % The Rashba SOC coupling in H1 from spin down to spin up
226  H1_SO_d3 = sparse(3*M+1:4*M, 1:M, 1i*lambda*d3, Meff, Meff);
227  H1_SO_spinup_spindown = H1_SO_d3;
228 
229  % The Rashba SOC coupling in H1 from spin up to spin down
230  H1_SO_d3 = sparse(3*M+1:4*M, 1:M, 1i*lambda*conj(d3), Meff, Meff);
231  H1_SO_spindown_spinup = H1_SO_d3;
232 
233  % setting SOC in H1
234  H1 = [H1_spinup, H1_SO_spinup_spindown; H1_SO_spindown_spinup, H1_spindown];
235 
236 
237 
238  % The Rshba SOC coupling in H_transverse from spin down to spin up
239  if ~isempty(H1_transverse_spindown)
240 
241  % The Rshba SOC coupling in H1 from spin down to spin up
242  H1_transverse_SO_d1 = sparse(M, M+1, -1i*lambda*d1, Meff, Meff);
243  H1_transverse_SO_d2 = sparse(4*M, 2*M+1, 1i*lambda*d2, Meff, Meff);
244  H1_transverse_SO_spinup_spindown = H1_transverse_SO_d1 + H1_transverse_SO_d2;
245 
246  % The Rshba SOC coupling in H1 from spin up to spin down
247  H1_transverse_SO_d1 = sparse(M, M+1, -1i*lambda*conj(d1), Meff, Meff);
248  H1_transverse_SO_d2 = sparse(4*M, 2*M+1, 1i*lambda*conj(d2), Meff, Meff);
249  H1_transverse_SO_spindown_spinup = H1_transverse_SO_d1 + H1_transverse_SO_d2;
250 
251 
252  % setting SOC in H_transverse
253  H1_transverse = [ H1_transverse_spindown, H1_transverse_SO_spinup_spindown;
254  H1_transverse_SO_spindown_spinup, H1_transverse_spinup];
255 
256  H1_skew_left = [];
257  H1_skew_right = [];
258 
259 
260  else
261  H1_transverse = [];
262  H1_skew_left = [];
263  H1_skew_right = [];
264  end
265 
266 
267 
268  % ******* Intrinsic and valley-Zeeman SOC *************
269 
270  SOintrinsic = lead_param.Intrinsic;
271  SOvalley_zeeman = lead_param.ValleyZeeman;
272 
273  % intrinsic SO coupling in the unit cell for the spin up subspace
274  Meff = 4*M;
275  H0_SOintrinsic = sparse( 2*M+1:3*M, 1:M, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
276  sparse( M+1:2*M-1, M+2:2*M, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, A sublattice
277  sparse( 1:M-1, 2*M+2:3*M, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
278  sparse( M+2:2*M, 3*M+1:4*M-1, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, A sublattice
279  sparse( 2*M+2:3*M, 2*M+1:3*M-1, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
280  sparse( 4*M:3*M+1, M+1:2*M-1, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... clockwise deirection, A sublattice
281 
282  H0_SOintrinsic = H0_SOintrinsic + H0_SOintrinsic'; % clockwise deirection and counterclockwise directions
283 
284  % expanding the Hamiltonian to the full spin space
285  H0_SOintrinsic = kron( [1,0;0,-1], H0_SOintrinsic);
286  H0 = H0 + H0_SOintrinsic;
287 
288 
289  H1_SOintrinsic = sparse( 2*M+1:3*M, 1:M, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
290  sparse( 3*M+1:4*M, M+1:2*M, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, A sublattice
291  sparse( 2*M+2:3*M, 1:M-1, -1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... counterclockwise deirection, B sublattice
292  sparse( 3*M+1:4*M-1, M+2:2*M, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... counterclockwise deirection, A sublattice
293 
294 
295  % expanding the Hamiltonian to the full spin space
296  H1_SOintrinsic = kron( [1,0;0,-1], H1_SOintrinsic);
297  H1 = H1 + H1_SOintrinsic;
298 
299 
300 
301  % The Intrinsic SOC coupling in H_transverse from spin down to spin up
302  if ~isempty(H1_transverse_spindown)
303 
304  H1_transverse_SOintrinsic = sparse(M, 2*M+1, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff) + ... clockwise deirection, B sublattice
305  sparse(4*M, M+1, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... counterclockwise deirection, A sublattice
306 
307  % expanding the Hamiltonian to the full spin space
308  H1_transverse_SOintrinsic = kron( [1,0;0,-1], H1_transverse_SOintrinsic);
309  H1_transverse = H1_transverse + H1_transverse_SOintrinsic;
310 
311 
312  H1_skew_left_SOintrinsic = sparse(4*M, M+1, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... counterclockwise deirection, A sublattice
313 
314  % expanding the Hamiltonian to the full spin space
315  H1_skew_left = kron( [1,0;0,-1], H1_skew_left_SOintrinsic);
316 
317 
318 
319  H1_skew_right_SOintrinsic = sparse(2*M+1, M, -1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff); ...counterclockwise deirection, B sublattice
320 
321  % expanding the Hamiltonian to the full spin space
322  H1_skew_right = kron( [1,0;0,-1], H1_skew_right_SOintrinsic);
323 
324  else
325  H1_transverse = [];
326  H1_skew_left = [];
327  H1_skew_right = [];
328  end
329 
330 
331 
332  else
333  save('Graphene_SOC_Lead_Hamiltonians_Graphene_SOC_Lead_Hamiltonians.mat');
334  error('Undefined lead end type')
335  end
336 
337  % creating structure storing sites with downspin
338  coordinates_spinup = coordinates_spindown;
339  coordinates_spinup.spinup = true( size(coordinates_spinup.x) );
340  coordinates_spindown.spinup = false( size(coordinates_spindown.x) );
341 
342  % combining sites with ip and down spins
343  coordinates = coordinates_spinup.Combine( coordinates_spindown );
344 
345 
346 end
347 
348 end % end public methods
349 
350 
351 end
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.
Structure param contains data structures describing the physical parameters of the scattering center ...
Definition: structures.m:45
Structure sites contains data to identify the individual sites in a matrix.
Definition: structures.m:187
A class to create the Hamiltonian of one unit cell in a translational invariant graphene lead,...
A class to create the Hamiltonian of one unit cell in a translational invariant lead made of hexagona...
Structure containing the coordinates and other quantum number identifiers of the sites in the Hamilto...
Definition: Coordinates.m:24
Class containing physical parameters of the graphene lattice including SOC.