Eötvös Quantum Utilities  v5.0.144
Providing the Horsepowers in the Quantum Realm
Silicene_Lead_Hamiltonians.m
Go to the documentation of this file.
1 %% Eotvos Quantum Transport Utilities - Silicene_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 silicene lead.
21 %> @}
22 %> @brief A class to create the Hamiltonian of one unit cell in a translational invariant silicene lead.
23 %%
25 
26 
27 methods ( Access = public )
28 
29 
31 %> @brief Creates Hamiltonians H_0 and H_1 of silicene ribbon with zigzag edge as well as the structure conatining the coordinates of the atomic sites.
32 %> @param lead_param An instance of structure #Lattice_Silicene (or its subclass) containing the physical parameters.
33 %> @param M Number of sites in the cross section of the lead.
34 %> @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)
35 %> @return [1] The Hamiltonian of one slab in the ribbon.
36 %> @return [2] The coupling between the slabs.
37 %> @return [3] The transverse coupling between the slabs for transverse calculations.
38 %> @return [4] A structure Coordinates containing the coordinates of the sites.
39 function [H0, H1, H1_transverse, coordinates] = Silicene_Hamiltonians(obj, lead_param, M, End_Type )
40  % Hamiltonian created according to arXiv:1305.3684v1
41 
42  % check the structure containing the physical parameters
43  supClasses = superclasses(lead_param);
44  if sum( strcmp( supClasses, 'Lattice_Silicene' ) ) == 0
45  error(['EQuUs:Lattices:', class(obj), ':Silicene_Lead_Hamiltonians'], 'Invalid type of the input parameter');
46  end
47 
48  if isempty(M)
49  error(['EQuUs:', class(obj), ':Silicene_Lead_Hamiltonians'], 'The input parameter M is empty')
50  end
51 
52  if strcmp( End_Type, 'Z' )
53  error(['EQuUs:', class(obj), ':Silicene_Lead_Hamiltonians'], 'Silicene Hamiltonian developed only for Armchair ended leads')
54  end
55 
56 
57  if isfield( lead_param, 'SOintrinsic' )
58  SOintrinsic = -lead_param.SOintrinsic/(3*sqrt(3));
59  else
60  SOintrinsic = -0.3*vargamma/(3*sqrt(3));
61  end
62  if isfield( lead_param, 'SO_rashba_intrinsic' )
63  SO_rashba_intrinsic = lead_param.SO_rashba_intrinsic*2/3;
64  else
65  SO_rashba_intrinsic = 0.07*vargamma;
66  end
67 
68 
69  sgn = 1;
70 
71  [H0,H1,H1_transverse,coordinates] = Graphene_Lead_Hamiltonians(obj, lead_param, M, End_Type);
72  coordinates.spinup = [ true( size(coordinates.x) ); false( size(coordinates.x) ) ];
73  coordinates.x = [ coordinates.x; coordinates.x];
74  coordinates.y = [ coordinates.y; coordinates.y];
75 
76 
77  % intrinsic SO coupling
78  HSOintrinsic_H0 = sparse( 1:2:M-1, M+2:2:2*M, -1i*SOintrinsic, size(H0,1), size(H0,2)) + sparse( 2:2:M, M+1:2:2*M-1, 1i*SOintrinsic, size(H0,1), size(H0,2)) + ...
79  sparse( 3:2:M, M+2:2:2*M-1, -1i*SOintrinsic, size(H0,1), size(H0,2)) + sparse( 2:2:M-1, M+3:2:2*M, 1i*SOintrinsic, size(H0,1), size(H0,2));
80  HSOintrinsic_H0 = HSOintrinsic_H0 + HSOintrinsic_H0';
81 
82  HSOintrinsic_H1 = sparse( 1:2:M, 1:2:M, 1i*SOintrinsic, size(H1,1), size(H1,2)) + sparse( 2:2:M, 2:2:M, -1i*SOintrinsic, size(H1,1), size(H1,2)) + ...
83  sparse( M+1:2:2*M, M+1:2:2*M, -1i*SOintrinsic, size(H1,1), size(H1,2)) + sparse( M+2:2:2*M, M+2:2:2*M, 1i*SOintrinsic, size(H1,1), size(H1,2)) + ...
84  sparse( M+1:2:2*M, 2:2:M, 1i*SOintrinsic, size(H1,1), size(H1,2)) + sparse( M+2:2:2*M-1, 3:2:M, -1i*SOintrinsic, size(H1,1), size(H1,2)) + ...
85  sparse( M+3:2:2*M, 2:2:M-1, 1i*SOintrinsic, size(H1,1), size(H1,2)) + sparse( M+2:2:2*M, 1:2:M, -1i*SOintrinsic, size(H1,1), size(H1,2));
86 
87 
88  % intrinsic Rashba SO coupling
89  % next-nearest vectors
90  d1 = [coordinates.x(M+2) - coordinates.x(1); coordinates.y(M+2) - coordinates.y(1)]; d1 = d1/norm(d1);
91  d2 = [coordinates.x(M+1) - coordinates.x(2); coordinates.y(M+1) - coordinates.y(2)]; d2 = d2/norm(d2);
92  d3 = coordinates.a; d3 = d3/norm(d3);
93 
94  muvec = 0:M-1;
95  muvec_firstrow = (-1).^(muvec) * sgn;
96  muvec_secondrow = -muvec_firstrow;
97  % matrix of spin updown
98  HSO_rashba_intrinsic_H0 = ...
99  sparse( M+2:2*M, 1:M-1, -1i*SO_rashba_intrinsic*(d1(2)+1i*d1(1))*muvec_secondrow(2:M), size(H0,1), size(H0,2)) + ...
100  sparse( 1:M-1, M+2:2*M, -1i*SO_rashba_intrinsic*(-d1(2)+1i*(-d1(1)))*(muvec_firstrow(1:M-1)), size(H0,1), size(H0,2)) + ...
101  sparse( M+1:2*M-1, 2:M, -1i*SO_rashba_intrinsic*(d2(2)+1i*d2(1))*muvec_secondrow(1:M-1), size(H0,1), size(H0,2)) + ...
102  sparse( 2:M, M+1:2*M-1, -1i*SO_rashba_intrinsic*(-d2(2)+1i*(-d2(1)))*(muvec_firstrow(2:M)), size(H0,1), size(H0,2));
103  HSO_rashba_intrinsic_H1 = ...
104  sparse( 1:M, 1:M, -1i*SO_rashba_intrinsic*(d3(2)+1i*d3(1))*muvec_firstrow, size(H1,1), size(H1,2)) + ...
105  sparse( M+1:2*M, M+1:2*M, -1i*SO_rashba_intrinsic*(d3(2)+1i*d3(1))*muvec_secondrow, size(H1,1), size(H1,2)) + ...
106  sparse( 2:M, M+1:2*M-1, -1i*SO_rashba_intrinsic*(d1(2)+1i*d1(1))*muvec_firstrow(2:M), size(H1,1), size(H1,2)) + ...
107  sparse( 1:M-1, M+2:2*M, -1i*SO_rashba_intrinsic*(d2(2)+1i*d2(1))*muvec_firstrow(1:M-1), size(H1,1), size(H1,2));
108 
109  % matrix of spin downup
110  HSO_rashba_intrinsic_H0b = ...
111  sparse( M+2:2*M, 1:M-1, -1i*SO_rashba_intrinsic*(d1(2)-1i*d1(1))*muvec_secondrow(2:M), size(H0,1), size(H0,2)) + ...
112  sparse( 1:M-1, M+2:2*M, -1i*SO_rashba_intrinsic*(-d1(2)-1i*(-d1(1)))*muvec_firstrow(1:M-1), size(H0,1), size(H0,2)) + ...
113  sparse( M+1:2*M-1, 2:M, -1i*SO_rashba_intrinsic*(d2(2)-1i*d2(1))*muvec_secondrow(1:M-1), size(H1,1), size(H0,2)) + ...
114  sparse( 2:M, M+1:2*M-1, -1i*SO_rashba_intrinsic*(-d2(2)-1i*(-d2(1)))*muvec_firstrow(2:M), size(H1,1), size(H0,2));
115  HSO_rashba_intrinsic_H1b = ...
116  sparse( 1:M, 1:M, -1i*SO_rashba_intrinsic*(d3(2)-1i*d3(1))*muvec_firstrow, size(H0,1), size(H1,2)) + ...
117  sparse( M+1:2*M, M+1:2*M, -1i*SO_rashba_intrinsic*(d3(2)-1i*d3(1))*muvec_secondrow, size(H0,1), size(H1,2));
118  sparse( 2:M, M+1:2*M-1, -1i*SO_rashba_intrinsic*(d1(2)-1i*d1(1))*muvec_firstrow(2:M), size(H1,1), size(H1,2)) + ...
119  sparse( 1:M-1, M+2:2*M, -1i*SO_rashba_intrinsic*(d2(2)-1i*d2(1))*muvec_firstrow(1:M-1), size(H1,1), size(H1,2));
120 
121 
122  % expand by spin up/down
123  H0 = [H0 + HSOintrinsic_H0, HSO_rashba_intrinsic_H0; ...
124  HSO_rashba_intrinsic_H0b, H0 - HSOintrinsic_H0];
125  H1 = [H1 + HSOintrinsic_H1, HSO_rashba_intrinsic_H1; ...
126  HSO_rashba_intrinsic_H1b, H1 - HSOintrinsic_H1];
127 
128 end
129 
130 
131 end % methods public
132 
133 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.
Class containing physical parameters of the Silicene lattice.
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 silicene 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