Eötvös Quantum Utilities  v5.0.144
Providing the Horsepowers in the Quantum Realm
Hex_Lead_Hamiltonians.m
Go to the documentation of this file.
1 %% Eotvos Quantum Transport Utilities - Hex_Lead_Hamiltonians
2 % Copyright (C) 2009-2015 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 %> @{
19 %> @file Hex_Lead_Hamiltonians.m
20 %> @brief A class to create the Hamiltonian of one unit cell in a translational invariant lead made of hexagonal lattice structure (graphene).
21 %> @}
22 %> @brief A class to create the Hamiltonian of one unit cell in a translational invariant lead made of hexagonal lattice structure (graphene).
23 %%
25 
26 
27 methods ( Access = public )
28 
29 
30 %% Graphene_Lead_Hamiltonians
31 %> @brief Creates Hamiltonians H_0 and H_1 of silicene ribbon with zigzag/armchair edge as well as the structure conatining the coordinates of the atomic sites.
32 %> @image html graphene.jpg
33 %> @image latex graphene.jpg
34 %> @param lead_param An instance of structure #Lattice_Graphene (or its subclass) containing the physical parameters.
35 %> @param M Number of sites in the cross section of the lead.
36 %> @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)
37 %> @return [1] The Hamiltonian of one slab in the ribbon.
38 %> @return [2] The coupling between the slabs.
39 %> @return [3] The transverse coupling between the slabs for transverse calculations.
40 %> @return [4] A structure Coordinates containing the coordinates of the sites.
41 function [H0, H1, H1_transverse, coordinates] = Graphene_Hamiltonians(obj, lead_param, M, End_Type )
42 
43  % check the structure containing the physical parameters
44  supClasses = superclasses(lead_param);
45  if sum( strcmp( supClasses, 'Lattice_Graphene' ) ) == 0
46  error(['EQuUs:Lattices:', class(obj), ':Graphene_Hamiltonians'], 'Invalid type of the input parameter');
47  end
48 
49  if isempty(M)
50  error(['EQuUs:', class(obj), ':Graphene_Hamiltonians'], 'The input parameter M is empty')
51  end
52 
53  epsilon = lead_param.epsilon;
54  vargamma = lead_param.vargamma;
55  deltaAB = lead_param.deltaAB;
56 
57 
58 
59  if strcmp(End_Type, 'A')
60  [H0,H1, H1_transverse, coordinates] = obj.Armchair_End(epsilon,vargamma,M);
61  elseif strcmp(End_Type, 'Z')
62  [H0, H1, H1_transverse, coordinates] = obj.Zigzag_End(epsilon,vargamma,M);
63  else
64  error(['EQuUs:', class(obj), ':Graphene_Hamiltonians'], 'Unrecognized Lead type');
65  end
66 
67  % staggered A-B potential tuned by perpendicular electric field
68  H_DeltaAB = sparse( 1:2:M, 1:2:M, deltaAB, size(H0,1), size(H0,2)) + sparse( M+2:2:2*M, M+2:2:2*M, deltaAB, size(H0,1), size(H0,2)) + ...
69  sparse( 2:2:M, 2:2:M, -deltaAB, size(H0,1), size(H0,2)) + sparse( M+1:2:2*M, M+1:2:2*M, -deltaAB, size(H0,1), size(H0,2));
70 
71  H0 = H0 + H_DeltaAB;
72 
73 % if ~isempty(q)
74 % H0 = H0 + H1_transverse*exp(1i*q) + H1_transverse'*exp(-1i*q);
75 % end
76 
77 
78 
79 
80 end
81 
82 
83 end % methods public
84 
85 methods ( Access = protected )
86 
87 %> @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.
88 %> @param epsilon The onsite potential.
89 %> @param vargamma The hopping amplitude.
90 %> @param M Number of sites in the cross section of the lead.
91 %> @param q The transverse momentum quantum number.
92 %> @return [1] The Hamiltonian of one slab in the ribbon.
93 %> @return [2] The coupling between the slabs.
94 %> @return [3] The transverse coupling between the slabs for transverse calculations.
95 %> @return [4] A structure Coordinates containing the coordinates of the sites.
96 function [H0,H1,H1_transverse,coordinates] = Armchair_End(obj, epsilon,vargamma,M)
97 
98  if isempty(M)
99  error(['EQuUs:', class(obj), ':Armchair_End'], 'The input parameter M is empty')
100  end
101 
102 
103  H0 = sparse( 1:2:M-1, 2:2:M, -vargamma, 2*M, 2*M) + ...
104  sparse( M+2:2:2*M-1, M+3:2:2*M, -vargamma, 2*M, 2*M) + ...
105  sparse( 1:M, M+1:2*M, -vargamma, 2*M, 2*M);
106  H0 = H0 + H0' + sparse( 1:2*M, 1:2*M, epsilon, 2*M, 2*M);
107 
108  H1 = sparse( M+1:2*M, 1:M, -vargamma, 2*M, 2*M);
109 
110 
111  coordinates = structures('coordinates');
112  coordinates.a = zeros(2,1);
113  coordinates.x = zeros(2*M,1);
114  coordinates.y = zeros(2*M,1);
115  deltax1 = 2;
116  deltax2 = 1;
117  deltay = sqrt(3)/2;
118 
119  coordinates.x(1:2:M) = ((1:2:M)-1)*(deltax1+deltax2)/2; %in units rCC
120  coordinates.x(2:2:M) = ((2:2:M)-2)*(deltax1+deltax2)/2 + deltax2; %in units rCC
121  coordinates.x(M+(1:2:M)) = ((1:2:M)-1)*(deltax1+deltax2)/2 - deltax2/2; %in units rCC
122  coordinates.x(M+(2:2:M)) = ((2:2:M)-2)*(deltax1+deltax2)/2 + deltax1 - deltax2/2; %in units rCC
123  coordinates.y = [zeros(M,1); ones(M,1)*deltay]; %in units rCC
124  coordinates.a = [0; 2*deltay];% 1D lattice constant in uits of rCC
125 
126  if mod(M,2) == 0
127  H1_transverse = sparse( 2*M, M+1, -vargamma, 2*M, 2*M);
128  %H1_transverse = sparse( M+1, 2*M, -vargamma, 2*M, 2*M);
129  coordinates.b = [M/2*3; 0];
130  else
131 
132  H1_transverse = [];
133  end
134 
135 end
136 
137 %% Zigzag_End
138 %> @brief Creates Hamiltonians H_0 and H_1 of silicene ribbon with armchair edge as well as the structure conatining the coordinates of the atomic sites.
139 %> @param epsilon The onsite potential.
140 %> @param vargamma The hopping amplitude.
141 %> @param M Number of sites in the cross section of the lead.
142 %> @param q The transverse momentum quantum number.
143 %> @param varargin Optional parameters (https://www.mathworks.com/help/matlab/ref/varargin.html):
144 %> @return [1] The Hamiltonian of one slab in the ribbon.
145 %> @return [2] The coupling between the slabs.
146 %> @return [3] The transverse coupling between the slabs for transverse calculations.
147 %> @return [4] A structure Coordinates containing the coordinates of the sites.
148 function [H0, H1, H1_transverse, coordinates] = Zigzag_End(obj, epsilon,vargamma,M)
149 
150  if isempty(M)
151  error(['EQuUs:', class(obj), ':Zigzag_End'], 'The input parameter M is empty')
152  end
153 
154  coordinates = structures('coordinates');
155  coordinates.a = [0;3]; %in units rCC
156 
157  vargamma_nnn = 0*vargamma;
158  H0nnn = sparse(1:M, 2*M+1:3*M, -vargamma_nnn, 4*M, 4*M) + sparse(1:M-1, 2*M+2:3*M, -vargamma_nnn, 4*M, 4*M) + sparse(1:M-1, 2:M, -vargamma_nnn, 4*M, 4*M) +...
159  sparse(M+1:2*M, 3*M+1:4*M, -vargamma_nnn, 4*M, 4*M) + sparse(M+2:2*M, 3*M+1:4*M-1, -vargamma_nnn, 4*M, 4*M) + sparse(M+1:2*M-1, M+2:2*M, -vargamma_nnn, 4*M, 4*M) +...
160  sparse(2*M+1:3*M-1, 2*M+2:3*M, -vargamma_nnn, 4*M, 4*M) + ...
161  sparse(3*M+1:4*M-1, 3*M+2:4*M, -vargamma_nnn, 4*M, 4*M);
162 
163  H1nnn = sparse(3*M+1:4*M, M+1:2*M, -vargamma_nnn, 4*M, 4*M) + sparse(3*M+1:4*M-1, M+2:2*M, -vargamma_nnn, 4*M, 4*M) + ...
164  sparse(2*M+1:3*M, 1:M, -vargamma_nnn, 4*M, 4*M) + sparse(2*M+2:3*M, 1:M-1, -vargamma_nnn, 4*M, 4*M);
165 
166  H0 = sparse(1:M, M+1:2*M, -vargamma, 4*M, 4*M) + sparse(1:M-1, M+2:2*M, -vargamma, 4*M, 4*M) + ...
167  sparse(M+1:2*M, 2*M+1:3*M, -vargamma, 4*M, 4*M) + ...
168  sparse(2*M+1:3*M, 3*M+1:4*M, -vargamma, 4*M, 4*M) + sparse(2*M+2:3*M, 3*M+1:4*M-1, -vargamma, 4*M, 4*M);
169  H0 = H0 + H0' + sparse( 1:4*M, 1:4*M, epsilon, 4*M, 4*M) + H0nnn + H0nnn';
170 
171  H1 = sparse(3*M+1:4*M, 1:M, -vargamma, 4*M, 4*M) + H1nnn;
172 
173 
174  coordinates.x = zeros(4*M,1); %in units rCC
175  coordinates.y = zeros(4*M,1); %in units rCC
176 
177  coordinates.x(1:M) = sqrt(3)*(1:M) - sqrt(3)/2; %in units rCC
178  coordinates.y(1:M) = 0; %in units rCC
179 
180  coordinates.x(M+1:2*M) = sqrt(3)*(0:M-1); %in units rCC
181  coordinates.y(M+1:2*M) = 0.5; %in units rCC
182 
183  coordinates.x(2*M+1:3*M) = sqrt(3)*(0:M-1); %in units rCC
184  coordinates.y(2*M+1:3*M) = 1.5; %in units rCC
185 
186  coordinates.x(3*M+1:4*M) = sqrt(3)*(1:M) - sqrt(3)/2; %in units rCC
187  coordinates.y(3*M+1:4*M) = 2; %in units rCC
188 
189  H1_transverse = sparse(M, M+1, -vargamma, 4*M, 4*M) + sparse(4*M, 2*M+1, -vargamma, 4*M, 4*M);
190  %H1_transverse = sparse(M+1, M, -vargamma, 4*M, 4*M) + sparse(2*M+1, 4*M, -vargamma, 4*M, 4*M);
191  coordinates.b = [sqrt(3)*M; 0];
192 
193 end
194 
195 end % methods protected
196 
197 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.
A class to calculate the Green functions and self energies of a translational invariant lead The nota...
Definition: Lead.m:29
Structure param contains data structures describing the physical parameters of the scattering center ...
Definition: structures.m:45
Class containing physical parameters of the hexagonal (graphene) lattice.
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 lead made of hexagona...
Structure containing the coordinates and other quantum number identifiers of the sites in the Hamilto...
Definition: Coordinates.m:24
function structures(name)