2 % Copyright (C) 2009-2015 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 basic Basic Functionalities
20 %> @brief A
class to create the Hamiltonian of one unit cell in a translational invariant lead made of hexagonal lattice structure, including graphene and silicene.
22 %> @brief A
class to create the Hamiltonian of one unit cell in a translational invariant lead made of hexagonal lattice structure, including graphene and silicene.
27 methods ( Access =
public )
31 %% Graphene_Bilayer_Lead_Hamiltonians
32 %> @brief Creates
Hamiltonians H_0 and H_1 of bilayer graphene ribbon with zigzag/armchair edge as well as the structure conatining the coordinates of the atomic
sites.
34 %> @
param M Number of
sites in the cross section of the lead.
35 %> @
param End_Type The type of the end of the ribbon (
'A' for armchair or
'Z' for zigzag type end)
36 %> @
param varargin Optional parameters (https:
37 %> @
param 'q' The transverse momentum. Set to empty (
default)
for computations without transverse momentums.
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, coordinates] = Graphene_Bilayer_Lead_Hamiltonians(obj,
lead_param, M, End_Type, varargin)
45 error([
'EQuUs:',
class(obj),
':Graphene_Bilayer_Lead_Hamiltonians'],
'The input parameter M is empty')
49 p.addParameter(
'q', []);
54 [H0_lower,H1_lower,H1_transverse_lower,coordinates_lower] = obj.Graphene_Lead_Hamiltonians(
lead_param, M, End_Type,
'q', q);
56 coordinates_lower.z = zeros(size(coordinates_lower.x));
60 H1_transverse_upper = H1_transverse_lower;
70 % zigzag edged bilayer ribbon: warping checked
71 if strcmp(End_Type,
'A')
72 Bernal_stack = [0, 1;-1,0]*coordinates_lower.a/norm(coordinates_lower.a);
74 H0_gamma1 = sparse(2:2:M, 1:2:M-1, -
lead_param.
vargamma1, size(H0_lower,1), size(H0_upper,2)) + sparse( M+3:2:size(H0_lower,1), M+2:2:size(H0_upper,2)-1, -
lead_param.
vargamma1, size(H0_lower,1), size(H0_upper,2));
75 H0_gamma3 = sparse(1:2:M-1, M+1:2:size(H0_upper,2)-1, -
lead_param.
vargamma3, size(H0_lower,1), size(H0_upper,2)) + ...
76 sparse(M+2:2:size(H0_lower,1), M+1:2:size(H0_upper,2)-1, -
lead_param.
vargamma3, size(H0_lower,1), size(H0_upper,2)) + ...
77 sparse(M+2:2:size(H0_lower,1), 2:2:M, -
lead_param.
vargamma3, size(H0_lower,1), size(H0_upper,2)) + ...
79 H0 = [H0_lower, H0_gamma1 + H0_gamma3;...
80 (H0_gamma1+H0_gamma3)
' , H0_upper]; 82 H1_gamma3_lower_upper = sparse(M+2:2:size(H1_lower,1), 2:2:M, -lead_param.vargamma3, size(H1_lower,1), size(H1_upper,2)); 83 H1_gamma3_upper_lower = sparse(M+1:2:size(H1_upper,1)-1, 1:2:M-1, -lead_param.vargamma3, size(H1_upper,1), size(H1_lower,2)); 84 H1 = [H1_lower, H1_gamma3_lower_upper; ... 85 H1_gamma3_upper_lower, H1_upper]; 88 if ~isempty(H1_transverse_lower) 89 %> tranverse coupling: warping checked 90 H1_transverse_lower_upper = sparse(M+1, 2*M, -lead_param.vargamma1, size(H1_transverse_lower,1), size(H1_transverse_upper,2)); 91 H1_transverse_upper_lower = sparse(2*M, M+1, -lead_param.vargamma1, size(H1_transverse_upper,1), size(H1_transverse_lower,2)); 92 H1_transverse_gamma3_lower_upper = sparse(1, M, -lead_param.vargamma3, size(H1_transverse_lower,1), size(H1_transverse_upper,2)); 93 H1_transverse_gamma3_upper_lower = sparse([], [], [], size(H1_transverse_upper,1), size(H1_transverse_lower,2)); 94 H1_transverse = [ H1_transverse_lower, H1_transverse_lower_upper + H1_transverse_gamma3_lower_upper; 95 H1_transverse_upper_lower + H1_transverse_gamma3_upper_lower, H1_transverse_upper]; 101 % armchair edged bilayer ribbon: warping checked, but not for H1_transverse 102 elseif strcmp(End_Type, 'Z
') 104 Bernal_stack = [-0.5; sqrt(3)/2]; 106 H0_gamma1 = sparse(1:M, M+1:2*M, -lead_param.vargamma1, size(H0_lower,1), size(H0_upper,2)) + sparse( 2*M+2:3*M, 3*M+1:4*M-1, -lead_param.vargamma1, size(H0_lower,1), size(H0_upper,2)); 107 H0_gamma3 = sparse(M+2:2*M, 1:M-1, -lead_param.vargamma3, size(H0_lower,1), size(H0_upper,2)) + ... 108 sparse(M+1:2*M, 2*M+1:3*M, -lead_param.vargamma3, size(H0_lower,1), size(H0_upper,2)) + sparse(M+2:2*M, 2*M+1:3*M-1, -lead_param.vargamma3, size(H0_lower,1), size(H0_upper,2)) + ... 109 sparse(3*M+1:4*M, 2*M+1:3*M, -lead_param.vargamma3, size(H0_lower,1), size(H0_upper,2)); 110 H0 = [H0_lower, H0_gamma1 + H0_gamma3;... 111 (H0_gamma1+H0_gamma3)' , H0_upper];
113 H1_gamma3_lower_upper = sparse(3*M+1:4*M, 1:M, -
lead_param.
vargamma3, size(H1_lower,1), size(H1_upper,2)) + sparse(3*M+2:4*M, 1:M-1, -
lead_param.
vargamma3, size(H1_lower,1), size(H1_upper,2));
114 H1_gamma3_upper_lower = sparse([], [], -
lead_param.
vargamma3, size(H1_upper,1), size(H1_lower,2));
115 H1 = [H1_lower, H1_gamma3_lower_upper; ...
116 H1_gamma3_upper_lower, H1_upper];
120 if ~isempty(H1_transverse_lower)
121 % warping needs to be included
122 H1_transverse_lower_upper = sparse(2*M+1, 4*M, -
lead_param.
vargamma1, size(H1_transverse_lower,1), size(H1_transverse_upper,2));
123 H1_transverse_upper_lower = sparse(4*M, 2*M+1, -
lead_param.
vargamma1, size(H1_transverse_upper,1), size(H1_transverse_lower,2));
124 H1_transverse = [ H1_transverse_lower, H1_transverse_lower_upper;
125 H1_transverse_upper_lower, H1_transverse_upper];
132 save(
'Hex_Lead_Hamiltonians_Graphene_Bilayer_Lead_Hamiltonians.mat');
133 error(
'Undefined lead end type')
137 coordinates_upper =
structures(
'coordinates' );
138 fields = fieldnames( coordinates_lower );
139 for idx = 1:length( fields )
140 fieldname = fields{idx};
141 if strcmp( fieldname,
'x' )
142 coordinates_upper.x = coordinates_lower.x + Bernal_stack(1);
143 elseif strcmp( fieldname,
'y' )
144 coordinates_upper.y = coordinates_lower.y + Bernal_stack(2);
145 elseif strcmp( fieldname,
'z' )
146 coordinates_upper.z = coordinates_lower.z + 3.3/1.42; %The distance between the layers in units of rCC is 3.3 \AA ?
148 coordinates_upper.(fieldname) = coordinates_lower.(fieldname);
154 for idx = 1:length( fields )
155 fieldname = fields{idx};
156 if strcmp( fieldname,
'a' )
157 coordinates.a = coordinates_lower.(fieldname);
158 elseif strcmp( fieldname,
'b' )
159 coordinates.b = coordinates_lower.(fieldname);
160 elseif strcmp( fieldname,
'LatticeConstant' )
161 coordinates.LatticeConstant = coordinates_lower.LatticeConstant;
163 coordinates.(fieldname) = [coordinates_lower.(fieldname); coordinates_upper.(fieldname)];
171 %% Graphene_Bilayer_Lead_Hamiltonians2
172 %> @brief Creates
Hamiltonians H_0 and H_1 of bilayer graphene ribbon type 2 with zigzag/armchair edge as well as the structure conatining the coordinates of the atomic
sites.
174 %> @
param M Number of
sites in the cross section of the lead.
175 %> @
param End_Type The type of the end of the ribbon (
'A' for armchair or
'Z' for zigzag type end)
176 %> @
param varargin Optional parameters (https:
177 %> @
param 'q' The transverse momentum. Set to empty (
default)
for computations without transverse momentums.
178 %> @
return [1] The Hamiltonian of one slab in the ribbon.
179 %> @
return [2] The coupling between the slabs.
180 %> @
return [3] The transverse coupling between the slabs
for transverse calculations.
181 %> @
return [4] A structure #coordinates containing the coordinates of the
sites.
182 function [H0, H1, H1_transverse, coordinates] = Graphene_Bilayer_Lead_Hamiltonians2(obj,
lead_param, M, End_Type, varargin)
185 error([
'EQuUs:',
class(obj),
':Graphene_Bilayer_Lead_Hamiltonians2'],
'The input parameter M is empty')
189 % zigzag edged bilayer ribbon
190 if strcmp(End_Type,
'A')
194 [H0, H1, H1_transverse, coordinates] = obj.Graphene_Bilayer_Lead_Hamiltonians(
lead_param, Mtmp, End_Type, varargin{:});
196 sites_to_be_removed = [1, 2, Mtmp+1, Mtmp+2, Mtmp-1, Mtmp, 2*Mtmp, ... lower sheet
197 [1, 2, Mtmp+1, Mtmp-1, Mtmp, 2*Mtmp-1, 2*Mtmp] + 2*Mtmp]; %upper sheet
199 logical_indexes =
true(size(H0, 1),1);
200 logical_indexes(sites_to_be_removed) =
false;
202 H0 = H0(logical_indexes, logical_indexes);
203 H1 = H1(logical_indexes, logical_indexes);
205 if ~isempty(H1_transverse)
206 H1_transverse = H1_transverse(logical_indexes, logical_indexes);
210 fields = fieldnames( coordinates );
211 for idx = 1:length( fields )
212 fieldname = fields{idx};
213 if strcmpi( fieldname,
'a') || strcmpi( fieldname,
'b') || isempty(coordinates.(fieldname)) || strcmpi( fieldname,
'LatticeConstant')
217 coordinates.(fieldname) = coordinates.(fieldname)(logical_indexes);
222 % armchair edged bilayer ribbon
223 elseif strcmp(End_Type,
'Z')
224 [H0, H1, H1_transverse, coordinates] = obj.Graphene_Bilayer_Lead_Hamiltonians(
lead_param, M, End_Type, varargin{:});
232 %% Graphene_Bilayer_Lead_Hamiltonians3
233 %> @brief Creates
Hamiltonians H_0 and H_1 of bilayer graphene ribbon with zigzag/armchair edge as well as the structure conatining the coordinates of the atomic
sites.
235 %> @
param M Number of
sites in the cross section of the lead.
236 %> @
param End_Type The type of the end of the ribbon (
'A' for armchair or
'Z' for zigzag type end)
237 %> @
param varargin Optional parameters (https:
238 %> @
param 'q' The transverse momentum. Set to empty (
default)
for computations without transverse momentums.
239 %> @
return [1] The Hamiltonian of one slab in the ribbon.
240 %> @
return [2] The coupling between the slabs.
241 %> @
return [3] The transverse coupling between the slabs
for transverse calculations.
242 %> @
return [4] A structure #coordinates containing the coordinates of the
sites.
243 function [H0, H1, H1_transverse, coordinates] = Graphene_Bilayer_Lead_Hamiltonians3(obj,
lead_param, M, End_Type, varargin)
246 error([
'EQuUs:',
class(obj),
':Graphene_Bilayer_Lead_Hamiltonians3'],
'The input parameter M is empty')
250 p.addParameter(
'q', []);
252 p.parse(varargin{:});
257 [H0, H1, H1_transverse, coordinates] = obj.Graphene_Bilayer_Lead_Hamiltonians(
lead_param, Mtmp, End_Type, varargin{:});
259 sites_to_be_removed = [1, Mtmp+1, ... lower sheet
260 [Mtmp, 2*Mtmp] + 2*Mtmp]; %upper sheet
262 logical_indexes =
true(size(H0, 1),1);
263 logical_indexes(sites_to_be_removed) =
false;
265 H0 = H0(logical_indexes, logical_indexes);
266 H1 = H1(logical_indexes, logical_indexes);
268 if ~isempty(H1_transverse)
269 H1_transverse = H1_transverse(logical_indexes, logical_indexes);
273 fields = fieldnames( coordinates );
274 for idx = 1:length( fields )
275 fieldname = fields{idx};
276 if strcmpi( fieldname,
'a') || strcmpi( fieldname,
'b') || isempty(coordinates.(fieldname))
280 coordinates.(fieldname) = coordinates.(fieldname)(logical_indexes);
288 %% Silicene_Lead_Hamiltonians
289 %> @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.
291 %> @
param M Number of
sites in the cross section of the lead.
292 %> @
param End_Type The type of the end of the ribbon (
'A' for armchair end)
293 %> @
param varargin Optional parameters (https:
294 %> @
param 'q' The transverse momentum. Set to empty (
default)
for computations without transverse momentums.
295 %> @
return [1] The Hamiltonian of one slab in the ribbon.
296 %> @
return [2] The coupling between the slabs.
297 %> @
return [3] The transverse coupling between the slabs
for transverse calculations.
298 %> @
return [4] A structure #coordinates containing the coordinates of the
sites.
299 function [H0, H1, H1_transverse, coordinates] = Silicene_Lead_Hamiltonians(obj,
lead_param, M, End_Type, varargin)
300 % Hamiltonian created according to arXiv:1305.3684v1
303 error([
'EQuUs:',
class(obj),
':Silicene_Lead_Hamiltonians'],
'The input parameter M is empty')
307 p.addParameter(
'q', []);
309 p.parse(varargin{:});
312 if strcmp( End_Type,
'Z' )
313 error(
'Silicene Hamiltonian developed only for Armchair ended leads')
320 SOintrinsic = -0.3*vargamma/(3*sqrt(3));
322 if isfield(
lead_param,
'SO_rashba_intrinsic' )
325 SO_rashba_intrinsic = 0.07*vargamma;
331 [H0,H1,H1_transverse,coordinates] = Graphene_Lead_Hamiltonians(obj,
lead_param, M, End_Type,
'q', q);
332 coordinates.spinup = [
true( size(coordinates.x) );
false( size(coordinates.x) ) ];
333 coordinates.x = [ coordinates.x; coordinates.x];
334 coordinates.y = [ coordinates.y; coordinates.y];
337 % intrinsic SO coupling
338 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)) + ...
339 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));
340 HSOintrinsic_H0 = HSOintrinsic_H0 + HSOintrinsic_H0
'; 342 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)) + ... 343 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)) + ... 344 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)) + ... 345 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)); 348 % intrinsic Rashba SO coupling 349 % next-nearest vectors 350 d1 = [coordinates.x(M+2) - coordinates.x(1); coordinates.y(M+2) - coordinates.y(1)]; d1 = d1/norm(d1); 351 d2 = [coordinates.x(M+1) - coordinates.x(2); coordinates.y(M+1) - coordinates.y(2)]; d2 = d2/norm(d2); 352 d3 = coordinates.a; d3 = d3/norm(d3); 355 muvec_firstrow = (-1).^(muvec) * sgn; 356 muvec_secondrow = -muvec_firstrow; 357 % matrix of spin updown 358 HSO_rashba_intrinsic_H0 = ... 359 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)) + ... 360 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)) + ... 361 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)) + ... 362 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)); 363 HSO_rashba_intrinsic_H1 = ... 364 sparse( 1:M, 1:M, -1i*SO_rashba_intrinsic*(d3(2)+1i*d3(1))*muvec_firstrow, size(H1,1), size(H1,2)) + ... 365 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)) + ... 366 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)) + ... 367 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)); 369 % matrix of spin downup 370 HSO_rashba_intrinsic_H0b = ... 371 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)) + ... 372 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)) + ... 373 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)) + ... 374 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)); 375 HSO_rashba_intrinsic_H1b = ... 376 sparse( 1:M, 1:M, -1i*SO_rashba_intrinsic*(d3(2)-1i*d3(1))*muvec_firstrow, size(H0,1), size(H1,2)) + ... 377 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)); 378 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)) + ... 379 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)); 382 % expand by spin up/down 383 H0 = [H0 + HSOintrinsic_H0, HSO_rashba_intrinsic_H0; ... 384 HSO_rashba_intrinsic_H0b, H0 - HSOintrinsic_H0]; 385 H1 = [H1 + HSOintrinsic_H1, HSO_rashba_intrinsic_H1; ... 386 HSO_rashba_intrinsic_H1b, H1 - HSOintrinsic_H1]; 390 %% Graphene_Lead_Hamiltonians 391 %> @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. 392 %> @param lead_param An instance of structure lead_param containing the physical parameters of the ribbon 393 %> @param M Number of sites in the cross section of the lead. 394 %> @param End_Type The type of the end of the ribbon ('A
' for armchair or 'Z
' for zigzag type end) 395 %> @param varargin Optional parameters (https://www.mathworks.com/help/matlab/ref/varargin.html): 396 %> @param 'q
' The transverse momentum. Set to empty (default) for computations without transverse momentums. 397 %> @return [1] The Hamiltonian of one slab in the ribbon. 398 %> @return [2] The coupling between the slabs. 399 %> @return [3] The transverse coupling between the slabs for transverse calculations. 400 %> @return [4] A structure #coordinates containing the coordinates of the sites. 401 function [H0, H1, H1_transverse, coordinates] = Graphene_Lead_Hamiltonians(obj, lead_param, M, End_Type, varargin) 404 error(['EQuUs:
', class(obj), ':Graphene_Lead_Hamiltonians
'], 'The input parameter M is empty
') 408 p.addParameter('q
', []); 410 p.parse(varargin{:}); 413 if isfield( lead_param, 'epsilon
' ) && ~isempty(lead_param.epsilon) 414 epsilon = lead_param.epsilon; 418 if isfield( lead_param, 'vargamma
' ) && ~isempty(lead_param.vargamma) 419 vargamma = lead_param.vargamma; 423 if isfield( lead_param, 'deltaAB
' ) && ~isempty(lead_param.deltaAB) 424 deltaAB = lead_param.deltaAB; 431 if strcmp(End_Type, 'A
') 432 [H0,H1, H1_transverse, coordinates] = obj.Armchair_End(epsilon,vargamma,M,q); 433 elseif strcmp(End_Type, 'Z
') 434 [H0, H1, H1_transverse, coordinates] = obj.Zigzag_End(epsilon,vargamma,M,q); 436 warning('Unrecognized
Lead type, creating lead with zigzag edge
'); 437 [H0,H1, H1_transverse, coordinates] = Armchair_End(epsilon,vargamma,M,q); 440 % staggered A-B potential tuned by perpendicular electric field 441 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)) + ... 442 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)); 447 % H0 = H0 + H1_transverse*exp(1i*q) + H1_transverse'*exp(-1i*q);
458 methods ( Access =
protected )
460 %> @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.
461 %> @
param epsilon The onsite potential.
462 %> @
param vargamma The hopping amplitude.
463 %> @
param M Number of
sites in the cross section of the lead.
464 %> @
param q The transverse momentum quantum number.
465 %> @
return [1] The Hamiltonian of one slab in the ribbon.
466 %> @
return [2] The coupling between the slabs.
467 %> @
return [3] The transverse coupling between the slabs
for transverse calculations.
468 %> @
return [4] A structure #coordinates containing the coordinates of the
sites.
469 function [H0,H1,H1_transverse,coordinates] = Armchair_End(obj, epsilon,vargamma,M,q)
472 error([
'EQuUs:',
class(obj),
':Armchair_End'],
'The input parameter M is empty')
476 H0 = sparse( 1:2:M-1, 2:2:M, -vargamma, 2*M, 2*M) + ...
477 sparse( M+2:2:2*M-1, M+3:2:2*M, -vargamma, 2*M, 2*M) + ...
478 sparse( 1:M, M+1:2*M, -vargamma, 2*M, 2*M);
479 H0 = H0 + H0
' + sparse( 1:2*M, 1:2*M, epsilon, 2*M, 2*M); 481 H1 = sparse( M+1:2*M, 1:M, -vargamma, 2*M, 2*M); 484 coordinates = structures('coordinates
'); 485 coordinates.a = zeros(2,1); 486 coordinates.x = zeros(2*M,1); 487 coordinates.y = zeros(2*M,1); 492 coordinates.x(1:2:M) = ((1:2:M)-1)*(deltax1+deltax2)/2; %in units rCC 493 coordinates.x(2:2:M) = ((2:2:M)-2)*(deltax1+deltax2)/2 + deltax2; %in units rCC 494 coordinates.x(M+(1:2:M)) = ((1:2:M)-1)*(deltax1+deltax2)/2 - deltax2/2; %in units rCC 495 coordinates.x(M+(2:2:M)) = ((2:2:M)-2)*(deltax1+deltax2)/2 + deltax1 - deltax2/2; %in units rCC 496 coordinates.y = [zeros(M,1); ones(M,1)*deltay]; %in units rCC 497 coordinates.a = [0; 2*deltay];% 1D lattice constant in uits of rCC 503 H1_transverse = sparse( 2*M, M+1, -vargamma, 2*M, 2*M); 504 %H1_transverse = sparse( M+1, 2*M, -vargamma, 2*M, 2*M); 505 coordinates.b = [M/2*3; 0]; 515 %> @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. 516 %> @param epsilon The onsite potential. 517 %> @param vargamma The hopping amplitude. 518 %> @param M Number of sites in the cross section of the lead. 519 %> @param q The transverse momentum quantum number. 520 %> @param varargin Optional parameters (https://www.mathworks.com/help/matlab/ref/varargin.html): 521 %> @return [1] The Hamiltonian of one slab in the ribbon. 522 %> @return [2] The coupling between the slabs. 523 %> @return [3] The transverse coupling between the slabs for transverse calculations. 524 %> @return [4] A structure #coordinates containing the coordinates of the sites. 525 function [H0, H1, H1_transverse, coordinates] = Zigzag_End(obj, epsilon,vargamma,M,q) 528 error(['EQuUs:
', class(obj), ':Zigzag_End
'], 'The input parameter M is empty
') 531 coordinates = structures('coordinates
'); 532 coordinates.a = [0;3]; %in units rCC 534 vargamma_nnn = 0*vargamma; 535 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) +... 536 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) +... 537 sparse(2*M+1:3*M-1, 2*M+2:3*M, -vargamma_nnn, 4*M, 4*M) + ... 538 sparse(3*M+1:4*M-1, 3*M+2:4*M, -vargamma_nnn, 4*M, 4*M); 540 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) + ... 541 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); 543 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) + ... 544 sparse(M+1:2*M, 2*M+1:3*M, -vargamma, 4*M, 4*M) + ... 545 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); 546 H0 = H0 + H0' + sparse( 1:4*M, 1:4*M, epsilon, 4*M, 4*M) + H0nnn + H0nnn
'; 548 H1 = sparse(3*M+1:4*M, 1:M, -vargamma, 4*M, 4*M) + H1nnn; 551 coordinates.x = zeros(4*M,1); %in units rCC 552 coordinates.y = zeros(4*M,1); %in units rCC 554 coordinates.x(1:M) = sqrt(3)*(1:M) - sqrt(3)/2; %in units rCC 555 coordinates.y(1:M) = 0; %in units rCC 557 coordinates.x(M+1:2*M) = sqrt(3)*(0:M-1); %in units rCC 558 coordinates.y(M+1:2*M) = 0.5; %in units rCC 560 coordinates.x(2*M+1:3*M) = sqrt(3)*(0:M-1); %in units rCC 561 coordinates.y(2*M+1:3*M) = 1.5; %in units rCC 563 coordinates.x(3*M+1:4*M) = sqrt(3)*(1:M) - sqrt(3)/2; %in units rCC 564 coordinates.y(3*M+1:4*M) = 2; %in units rCC 569 %H1_transverse = sparse(M, M+1, -vargamma, 4*M, 4*M) + sparse(4*M, 2*M+1, -vargamma, 4*M, 4*M); 570 H1_transverse = sparse(M+1, M, -vargamma, 4*M, 4*M) + sparse(2*M+1, 4*M, -vargamma, 4*M, 4*M); 571 coordinates.b = [sqrt(3)*M, 0]; 576 end % methods protected vargamma3
A physical parameter, see the individual lattice documentations for details.
function Transport(Energy, B)
creating the Ribbon class representing the twoterminal setup
function Hamiltonians(varargin)
Function to create the custom Hamiltonians for the 1D chain.
Structure containing the physical parameters describing a given lead.
A class to calculate the Green functions and self energies of a translational invariant lead The nota...
Structure param contains data structures describing the physical parameters of the scattering center ...
vargamma1
A physical parameter, see the individual lattice documentations for details.
Structure sites contains data to identify the individual sites in a matrix.
SOintrinsic
A physical parameter, see the individual lattice documentations for details.
SO_rashba_intrinsic
A physical parameter, see the individual lattice documentations for details.
A class to create the Hamiltonian of one unit cell in a translational invariant lead made of hexagona...
function structures(name)