2 % Copyright (C) 2018 Peter Rakyta, Ph.D.
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.
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.
14 % You should have received a copy of the GNU General Public License
15 % along with
this program. If not, see http:
17 %> @addtogroup lattices Lattices
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
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
27 methods ( Access =
public )
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
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 )
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');
51 error([
'EQuUs:Lattices:',
class(obj),
':Graphene_SOC_Lead_Hamiltonians'],
'The input parameter M is empty')
54 [H0_spindown,H1_spindown,H1_transverse_spindown,coordinates_spindown] = obj.Graphene_Hamiltonians(lead_param, M, End_Type);
56 coordinates_spindown.z = zeros(size(coordinates_spindown.x));
58 H0_spinup = H0_spindown;
59 H1_spinup = H1_spindown;
60 H1_transverse_spinup = H1_transverse_spindown;
62 lambda = lead_param.Rashba;
64 if strcmp(End_Type, 'A')
66 % ******* Rashba-type SOC *************
68 % unity vectors pointing towards the neighbour
sites 69 d1 = [0.5; -sqrt(3)/2];
70 d2 = [0.5; sqrt(3)/2];
73 % the vectorial product of the Pauli matrices and the vectors d_i according to Phys. Rev. B 82, 113405
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;
88 H0 = [H0_spinup,HSO;HSO',H0_spindown];
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;
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;
101 H1 = [H1_spinup, H1_SO_spinup_spindown; H1_SO_spindown_spinup, H1_spindown];
105 % The Rshba SOC coupling in H_transverse from spin down to spin up
106 if ~isempty(H1_transverse_spindown)
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);
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];
124 % ******* Intrinsic and valley-Zeeman SOC *************
126 SOintrinsic = lead_param.Intrinsic;
127 SOvalley_zeeman = lead_param.ValleyZeeman;
129 % intrinsic SO coupling in the unit cell for the spin up subspace
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
136 H0_SOintrinsic = H0_SOintrinsic + H0_SOintrinsic'; % clockwise deirection and counterclockwise directions
138 % expanding the Hamiltonian to the full spin space
139 H0_SOintrinsic = kron( [1,0;0,-1], H0_SOintrinsic);
140 H0 = H0 + H0_SOintrinsic;
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
153 % expanding the Hamiltonian to the full spin space
154 H1_SOintrinsic = kron( [1,0;0,-1], H1_SOintrinsic);
155 H1 = H1 + H1_SOintrinsic;
159 % The Intrinsic SOC coupling in H_transverse from spin down to spin up
160 if ~isempty(H1_transverse_spindown)
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
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;
170 H1_skew_left_SOintrinsic = sparse(2*M, 1, 1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... clockwise deirection, A sublattice
172 % expanding the Hamiltonian to the full spin space
173 H1_skew_left = kron( [1,0;0,-1], H1_skew_left_SOintrinsic);
177 H1_skew_right_SOintrinsic = sparse(M, M+1, 1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff); ...clockwise deirection, B sublattice
179 % expanding the Hamiltonian to the full spin space
180 H1_skew_right = kron( [1,0;0,-1], H1_skew_right_SOintrinsic);
194 % armchair edged bilayer ribbon: warping checked, but not for H1_transverse
195 elseif strcmp(End_Type, 'Z')
197 % unity vectors pointing towards the neighbour
sites 198 d1 = [sqrt(3)/2; 0.5];
199 d2 = [-sqrt(3)/2; 0.5];
203 % the vectorial product of the Pauli matrices and the vectors d_i according to Phys. Rev. B 82, 113405
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);
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;
221 H0 = [H0_spinup,HSO;HSO',H0_spindown];
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;
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;
234 H1 = [H1_spinup, H1_SO_spinup_spindown; H1_SO_spindown_spinup, H1_spindown];
238 % The Rshba SOC coupling in H_transverse from spin down to spin up
239 if ~isempty(H1_transverse_spindown)
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;
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;
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];
268 % ******* Intrinsic and valley-Zeeman SOC *************
270 SOintrinsic = lead_param.Intrinsic;
271 SOvalley_zeeman = lead_param.ValleyZeeman;
273 % intrinsic SO coupling in the unit cell for the spin up subspace
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
282 H0_SOintrinsic = H0_SOintrinsic + H0_SOintrinsic'; % clockwise deirection and counterclockwise directions
284 % expanding the Hamiltonian to the full spin space
285 H0_SOintrinsic = kron( [1,0;0,-1], H0_SOintrinsic);
286 H0 = H0 + H0_SOintrinsic;
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
295 % expanding the Hamiltonian to the full spin space
296 H1_SOintrinsic = kron( [1,0;0,-1], H1_SOintrinsic);
297 H1 = H1 + H1_SOintrinsic;
301 % The Intrinsic SOC coupling in H_transverse from spin down to spin up
302 if ~isempty(H1_transverse_spindown)
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
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;
312 H1_skew_left_SOintrinsic = sparse(4*M, M+1, -1i*(SOintrinsic+SOvalley_zeeman), Meff, Meff); ... counterclockwise deirection, A sublattice
314 % expanding the Hamiltonian to the full spin space
315 H1_skew_left = kron( [1,0;0,-1], H1_skew_left_SOintrinsic);
319 H1_skew_right_SOintrinsic = sparse(2*M+1, M, -1i*(SOintrinsic-SOvalley_zeeman), Meff, Meff); ...counterclockwise deirection, B sublattice
321 % expanding the Hamiltonian to the full spin space
322 H1_skew_right = kron( [1,0;0,-1], H1_skew_right_SOintrinsic);
333 save('Graphene_SOC_Lead_Hamiltonians_Graphene_SOC_Lead_Hamiltonians.mat');
334 error('Undefined lead end type')
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) );
342 % combining
sites with ip and down spins
343 coordinates = coordinates_spinup.Combine( coordinates_spindown );
348 end % end public methods
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 ...
Structure sites contains data to identify the individual sites in a matrix.
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...
Class containing physical parameters of the graphene lattice including SOC.