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 silicene lead.
22 %> @brief A
class to create the Hamiltonian of one unit cell in a translational invariant silicene lead.
27 methods ( Access =
public )
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
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');
49 error([
'EQuUs:',
class(obj),
':Silicene_Lead_Hamiltonians'],
'The input parameter M is empty')
52 if strcmp( End_Type, 'Z' )
57 if isfield( lead_param, 'SOintrinsic' )
58 SOintrinsic = -lead_param.SOintrinsic/(3*sqrt(3));
60 SOintrinsic = -0.3*vargamma/(3*sqrt(3));
62 if isfield( lead_param, 'SO_rashba_intrinsic' )
63 SO_rashba_intrinsic = lead_param.SO_rashba_intrinsic*2/3;
65 SO_rashba_intrinsic = 0.07*vargamma;
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];
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';
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));
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);
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));
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));
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];
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 ...
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 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...