1 % Magnetic transport through a quantum
antidot 2 % Copyright (C) 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 Examples
20 %> @brief Calculates the conductance through a graphene
antidot in a homogeneous magnetic field.
21 %> @
param filenum The identification number of the filenema
for the exported data (
default is 1).
23 %> EQuUs v4.7 or later
29 %> @brief Calculates the conductance through a graphene
antidot in a homogeneous magnetic field.
30 %> @
param filenum The identification number of the filenema
for the exported data (
default is 1).
33 if ~exist(
'filenum',
'var')
37 filename = mfilename('fullpath');
38 [directory, fncname] = fileparts( filename );
40 % The width of the graphene strip
42 % The length of the graphene strip
44 % The center and radius of the
antidot 45 hole = struct( 'center', [width/2 height/2], 'radius', 90);
46 % Magnetic field in Tesla
48 % outfilename of the calculated data
49 outfilename = [fncname, '_',num2str( filenum )];
50 % the output directory
55 % setting the output directory
59 transport_calculations_finished = false;
62 % creating the scattering disorders in the lattice
63 points = round([27 195 27 195]);
64 scatterers.zpoints = round(points + rand(size(points))*5);
65 scatterers.z = round( ones(size(points))*height + [-30 -30 30 30] + rand(size(points))*5);
70 % the calculated spectrum of the lead
71 spectrum = []; % calculated spectrum of the
74 % The wave function of a localized
antidot state
76 % An instance of structure coordinates storing the coordinates of the
antidot 78 % edge siteindexes of the
antidot 79 antidot_edge_points = [];
81 antidot_eigenenergies = [];
83 % creating an array of energies (in eV) to be used in the transport calculations
87 Evec = Emin:(Emax-Emin)/Enum:Emax;
88 Enum = length(Evec)-1;
90 % An array storing the calculated conductances calculated conductance
91 Conductance = zeros(Enum+1,1);
92 % An array storing the error of the unitarity
93 DeltaC = zeros(Enum+1,1);
96 % setting the output directory
98 % calculate the conductances
101 % plot the calculated data
104 % exporting the calculated data
105 save( [outputdir, filesep, [outfilename, '.mat']] );
107 %% CalculateTransport
108 %> @brief Calculates the conductance
109 function CalculateTransport()
111 % creating an instance of
antidot class
112 cAntidot =
antidot('width', width, 'height', height, 'B', B, '
hole', hole, '
scatterers', scatterers );
113 % creates vector potential handles predefinied in class
antidot (This method is obsolete, functions describing the vector potential should be placed inside the present file)
119 disp(' ----------------------------------')
120 disp('Plotting geometry and spectrum of leads:')
121 coordinates = cAntidot.coordinates;
123 % calculate spectrum of the lead
124 cAntidot.setEnergy( Evec(1) )
125 cAntidot.CreateRibbon( 'justHamiltonians', true );
127 cAntidot.getHolePoints();
128 antidot_edge_points = cAntidot.antidot_edge_points;
134 disp(' ----------------------------------')
135 disp('Calculating Conductance for the given magnetic field')
138 % calculating the conductances as a function of the energy
139 for idx = 1:length(Evec)
141 [C, ~,DeltaC_tmp] = cAntidot.
Transport( Evec(idx) );
144 Conductance(idx) = C;
145 DeltaC(idx) = DeltaC_tmp;
147 % exporting the calculated data
148 save( [outputdir, filesep, [outfilename, '.mat']] );
150 % displaying the status of the caclutaions
151 disp([ num2str(idx/length(Evec)*100),' % calculated of the conductance.'])
154 % plot the results at every energy point
160 transport_calculations_finished = true;
168 %> @brief calculates the spectrum of the leads
171 % Calculate the cyclotron frequency
172 rCC = cAntidot.rCC*1e-10; %Angstrom
173 phi0 = cAntidot.h/cAntidot.qe; % magnetic flux quantum
174 eta_B = 2*pi/phi0*(rCC)^2*cAntidot.B;
175 homega = 2.97*sqrt(9/2*eta_B);
177 %Minimal and maximal value of the selected k points
180 % number of 1D k points
182 spectrum = cAntidot.Scatter_UC.CalcSpektrum( 'toPlot', 0, 'ka_min', kmin, 'ka_max', kmax, 'ka_num', knum );
188 %> @brief Hamiltonian for the secular equation
191 H = H0 + H1*exp(1i*k) + H1'*exp(-1i*k);
197 %> @brief sets output directory
199 resultsdir = 'results';
201 outputdir = [ resultsdir ];
207 %> @brief Creates the plot
208 function PlotFunction( )
210 % creating figure in units of pixels
211 if ~transport_calculations_finished
212 figure1 = figure( 'Units', 'Pixels' );
214 figure1 = figure( 'Units', 'Pixels','Renderer','painters',...
215 'Colormap',[1 1 0.994791686534882;0.954365074634552 0.954365074634552 0.932043671607971;0.908730149269104 0.908730149269104 0.869295656681061;0.863095223903656 0.863095223903656 0.80654764175415;0.817460358142853 0.817460358142853 0.74379962682724;0.771825432777405 0.771825432777405 0.68105161190033;0.726190507411957 0.726190507411957 0.618303596973419;0.680555582046509 0.680555582046509 0.555555582046509;0.643518567085266 0.629629671573639 0.518518567085266;0.606481492519379 0.578703701496124 0.481481492519379;0.569444477558136 0.527777791023254 0.444444477558136;0.532407402992249 0.476851880550385 0.407407432794571;0.495370388031006 0.425925940275192 0.370370388031006;0.458333343267441 0.375 0.333333343267441;0.421296298503876 0.32407408952713 0.296296298503876;0.384259253740311 0.273148149251938 0.259259253740311;0.347222208976746 0.222222223877907 0.222222223877907;0.33983451128006 0.217494085431099 0.217494085431099;0.332446783781052 0.212765961885452 0.212765961885452;0.325059086084366 0.208037823438644 0.208037823438644;0.31767138838768 0.203309699892998 0.203309699892998;0.310283690690994 0.19858156144619 0.19858156144619;0.302895963191986 0.193853422999382 0.193853422999382;0.2955082654953 0.189125299453735 0.189125299453735;0.288120567798615 0.184397161006927 0.184397161006927;0.280732840299606 0.179669037461281 0.179669037461281;0.273345142602921 0.174940899014473 0.174940899014473;0.265957444906235 0.170212760567665 0.170212760567665;0.258569717407227 0.165484637022018 0.165484637022018;0.251182019710541 0.160756498575211 0.160756498575211;0.243794322013855 0.156028375029564 0.156028375029564;0.236406609416008 0.151300236582756 0.151300236582756;0.229018896818161 0.146572098135948 0.146572098135948;0.221631199121475 0.141843974590302 0.141843974590302;0.214243486523628 0.137115836143494 0.137115836143494;0.206855788826942 0.132387712597847 0.132387712597847;0.199468076229095 0.127659574151039 0.127659574151039;0.192080363631248 0.122931443154812 0.122931443154812;0.184692665934563 0.118203312158585 0.118203312158585;0.177304953336716 0.113475181162357 0.113475181162357;0.16991725564003 0.108747042715549 0.108747042715549;0.162529543042183 0.104018911719322 0.104018911719322;0.155141845345497 0.0992907807230949 0.0992907807230949;0.14775413274765 0.0945626497268677 0.0945626497268677;0.140366420149803 0.0898345187306404 0.0898345187306404;0.132978722453117 0.0851063802838326 0.0851063802838326;0.12559100985527 0.0803782492876053 0.0803782492876053;0.118203304708004 0.075650118291378 0.075650118291378;0.110815599560738 0.0709219872951508 0.0709219872951508;0.103427894413471 0.0661938562989235 0.0661938562989235;0.0960401818156242 0.0614657215774059 0.0614657215774059;0.0886524766683578 0.0567375905811787 0.0567375905811787;0.0812647715210915 0.0520094558596611 0.0520094558596611;0.0738770663738251 0.0472813248634338 0.0472813248634338;0.0664893612265587 0.0425531901419163 0.0425531901419163;0.059101652354002 0.037825059145689 0.037825059145689;0.0517139472067356 0.0330969281494617 0.0330969281494617;0.0443262383341789 0.0283687952905893 0.0283687952905893;0.0369385331869125 0.0236406624317169 0.0236406624317169;0.029550826177001 0.0189125295728445 0.0189125295728445;0.0221631191670895 0.0141843976452947 0.0141843976452947;0.0147754130885005 0.00945626478642225 0.00945626478642225;0.00738770654425025 0.00472813239321113 0.00472813239321113;0 0 0]);
218 % font size on the figure will be 16 points
222 %************** geometry **********************
224 % creating axes of the plot
225 deltax_ps = 2; % 2n-1 es 2n kozotti tavolsag rCC egysegekben
226 deltax_pt = 1; % 2n es 2n+1 kozotti tavolsag rCC egysegekben
227 deltax = 3; % 2n-1 es 2n+1 kozotti tavolsag rCC egysegekben
230 rightside = width/2*deltax*cAntidot.rCC;
231 top = height*deltay*cAntidot.rCC;
234 axes_geo = axes('Parent',figure1,...
237 'FontSize', fontsize,...
240 'Units', 'Pixels', ...
241 'FontName','Times New Roman');
246 if ( ~transport_calculations_finished )
247 for idx = 1:size(antidot_edge_points,1)
248 ycoord = deltay*antidot_edge_points(idx,1)*ones(2,1)*cAntidot.rCC;
251 if mod(antidot_edge_points(idx,2),2) == 0
252 xcoord(1) = (antidot_edge_points(idx,2)-2)/2*deltax + deltax_ps;
254 xcoord(1) = (antidot_edge_points(idx,2)-1)/2*deltax;
257 if mod(antidot_edge_points(idx,2),3) == 0
258 xcoord(2) = (antidot_edge_points(idx,3)-2)/2*deltax + deltax_ps;
260 xcoord(2) = (antidot_edge_points(idx,3)-1)/2*deltax;
262 xcoord = xcoord*cAntidot.rCC;
263 plot(xcoord, ycoord,'+','MarkerSize', 4, 'Parent', axes_geo )
269 if isempty(hole_wavefnc)
271 hole_wavefnc = cAntidot.CalcWavefnc( Energy, 1, 'toPlot', 0, 'filterHole', 1, 'db', 1, 'infinitemass', 0, 'dotCalc', 0 );
275 Wavefnc = hole_wavefnc.Wavefnc{1};
276 contourf( hole_wavefnc.xcoords(1:delta:end,1:delta:end), hole_wavefnc.ycoords(1:delta:end,1:delta:end), abs(Wavefnc(1:delta:end,1:delta:end)), ...
277 levels,
'LineStyle',
'none',
'Parent', axes_geo );
278 text(30,80, [
'E = ', num2str(hole_wavefnc.eigenval*1000,3),
' meV'],
'color', [0,0,0],
'FontSize', fontsize,
'FontName',
'Times New Roman',
'Parent', axes_geo);
281 % plot the position of the leads
282 plot([0,0], [0,top],
'LineWidth', 4,
'color', [0 0 0],
'Parent', axes_geo )
283 plot([rightside,rightside], [0,top],
'LineWidth', 4,
'color', [0 0 0],
'Parent', axes_geo )
285 % plot scattering centers
299 marker, 'MarkerSize', markersize, 'Parent', axes_geo )
304 ylabel('y [A]','FontSize', fontsize,'FontName','Times New Roman', 'Parent', axes_geo);
306 Lead1_pos = [ mean(coordinates.x(:,1)), min(coordinates.y(1,:))+20];
307 text(Lead1_pos(1), Lead1_pos(2), ['
Lead'], 'FontSize', fontsize, 'FontName','Times New Roman', 'Parent', axes_geo);
309 Lead2_pos = [ mean(coordinates.x(:,1)), max(coordinates.y(1,:))-20];
310 text(Lead2_pos(1), Lead2_pos(2), ['Lead'], 'FontSize', fontsize, 'FontName','Times New Roman', 'Parent', axes_geo);
313 %************** sepctrum in the lead **********************
314 x_lim = [min(spectrum(:,1)) max(spectrum(:,1))]/sqrt(3);
315 y_lim = [min(spectrum(:,2));max(spectrum(:,2))]*0.8;
319 % creating axes of the plot
320 axes_spectrum = axes('Parent',figure1, ...
322 'FontSize', fontsize,...
326 'Units', 'Pixels', ...
327 'FontName','Times New Roman');
330 Kpoint = 2*pi/3/sqrt(3);
331 Kpoint_pos = [Kpoint+0.005, 0.8*y_lim(2)];
332 plot(spectrum(:,1)/sqrt(3), spectrum(:,2),'.', 'MarkerSize', 4, 'Parent', axes_spectrum )
333 plot(Kpoint*ones(2,1), [min(spectrum(:,2));max(spectrum(:,2))], 'LineWidth', 1, 'Color', [0 0 0], 'Parent', axes_spectrum )
334 text(Kpoint_pos(1), Kpoint_pos(2), 'K', 'FontSize', fontsize, 'FontName','Times New Roman', 'Parent', axes_spectrum);
337 xlabel('k_yr_{CC}
','FontSize
', fontsize,'FontName
','Times New Roman
', 'Parent
', axes_spectrum); 340 ylabel('E [eV]
','FontSize
', fontsize,'FontName
','Times New Roman
', 'Parent
', axes_spectrum); 343 Position_Textbox = [0.65 0.7345 0.244 0.1274]; 344 annotation(figure1,'textbox
',Position_Textbox,... 345 'String
',{['$$\hbar\omega =
',num2str(homega,'% 10.3f
' ),'$$eV
']},... 346 'FontSize
',fontsize,... 347 'FontName
','Times New Roman
',... 348 'interpreter
', 'latex
', ... 353 %************** Wavefunction in the lead ********************** 354 % wave functionis calculated at a specific k point 355 specific_k = 1.25*sqrt(3); 357 % create the effective Hamiltonian 358 cAntidot.setEnergy(0); 359 Surface_temp = cAntidot.Scatter_UC; 360 H0 = Surface_temp.Read( 'H0
' ); 361 H1 = Surface_temp.Read( 'H1
' ); 362 H0 = H0 - eye(size(H0))*mean(diag(H0)); 363 H = secular_H(H0,H1,specific_k); 364 [waveFnc,E] = eigs(H,10,0.001); 367 x_lim = get(axes_geo,'xlim
'); 370 axes_wavefnc = axes('Parent
',figure1,... 372 'FontSize
', fontsize,... 375 'Units
', 'Pixels
', ... 376 'FontName
','Times New Roman
'); 379 square_Wavefnc = abs(waveFnc(1:length(coordinates.x(:,1)),chosen_idx)).^2; 380 plot(coordinates.x(:,1), square_Wavefnc, 'MarkerSize
', 4, 'Parent
', axes_wavefnc) 383 cylabel = ylabel('|\Psi|^2
','FontSize
', fontsize,'FontName
','Times New Roman
', 'Parent
', axes_wavefnc); 384 set( cylabel, 'Units
', 'Pixels
'); 385 ylabel_pos = get(cylabel, 'Position
'); 386 ylabel_pos(1) = ylabel_pos(1)+10; 387 ylabel_pos(2) = figure1.Position(4)/4-26; 388 set( cylabel, 'Position
', ylabel_pos); 391 xlabel('x [A]
','FontSize
', fontsize,'FontName
','Times New Roman
', 'Parent
', axes_wavefnc); 393 chosen_k_pos = [ max(coordinates.x(:,1))*0.05, max(square_Wavefnc)*0.95]; 394 text(chosen_k_pos(1), chosen_k_pos(2), ['k_yr_{CC} =
',num2str(specific_k/sqrt(3),'% 10.2f
')], 'FontSize
', fontsize, 'FontName
','Times New Roman
', 'Parent
', axes_wavefnc); 395 E_pos = [ max(coordinates.x(:,1))*0.05, max(square_Wavefnc)*0.8]; 396 text(E_pos(1), E_pos(2), ['E =
',num2str(E(chosen_idx),'% 10.2f
'),' eV
'], 'FontSize
', fontsize, 'FontName
','Times New Roman
', 'Parent
', axes_wavefnc); 397 B_pos = [ max(coordinates.x(:,1))*0.05, max(square_Wavefnc)*0.65]; 398 text(B_pos(1), B_pos(2), ['B =
',num2str(B,'% 10.2f
'),' T
'], 'FontSize
', fontsize, 'FontName
','Times New Roman
', 'Parent
', axes_wavefnc); 403 %************** Conductance ********************** 404 x_lim = [ min(Evec) max(Evec) ]; 405 axes_cond = axes('Parent
',figure1,... 407 'FontSize
', fontsize,... 410 'Units
', 'Pixels
', ... 411 'FontName
','Times New Roman
'); 415 indexek = logical( abs(DeltaC) <= 0.5 ); 417 numerics = plot(Evec(indexek), Conductance(indexek), 'Linewidth
', 2, 'color
', [0 0 0], 'Parent
', axes_cond); 419 plot(Evec(indexek), DeltaC(indexek), 'Linewidth
', 1, 'color
', [0 1 0], 'Parent
', axes_cond); 421 disp('No DeltaC data present
') 424 if ~isempty( antidot_eigenenergies ) 425 y_lim = [0 0.9];%[0 max(Conductance(indexek)) ]; 426 for idx = 1:length(antidot_eigenenergies) 427 plot( ones(1,2)*antidot_eigenenergies(idx), y_lim, 'Linewidth
', 1, 'color
', [1 0 0], 'Parent
', axes_cond); 434 xlabel('E [eV]
','FontSize
', fontsize,'FontName
','Times New Roman
', 'Parent
', axes_cond); 437 ylabel('\sigma/\sigma_0
','FontSize
', fontsize,'FontName
','Times New Roman
', 'Parent
', axes_cond); 439 E_pos = [ max(Evec)*0.5, max(Conductance(indexek))*0.35]; 440 text(E_pos(1), E_pos(2), ['B =
',num2str(B,'% 10.2f
'),' T
'], 'FontSize
', fontsize, 'FontName
','Times New Roman
', 'Parent
', axes_cond); 441 E_pos = [ max(Evec)*0.5, max(Conductance(indexek))*0.15]; 442 text(E_pos(1), E_pos(2), ['\phi/\phi_0 =
',num2str(cAntidot.flux_of_hole,3)], 'FontSize
', fontsize, 'FontName
','Times New Roman
', 'Parent
', axes_cond); 444 fig_legend = legend(axes_cond, {'conductance
', 'unitarity error
'});%, 'FontSize
', fontsize, 'FontName
','Times New Roman
') 445 set(fig_legend, 'FontSize
', fontsize, 'FontName
', 'Times New Roman
', 'Box
', 'off
', 'Location
', 'NorthEast
') 448 %set the position of the geometry axis 449 OuterPosition_geo = get(axes_geo, 'OuterPosition
'); 450 OuterPosition_geo(1) = 0; 451 OuterPosition_geo(2) = figure1.Position(4)/2; 452 OuterPosition_geo(3) = figure1.Position(3)/2; 453 OuterPosition_geo(4) = figure1.Position(4)/2; 454 set(axes_geo, 'OuterPosition
', OuterPosition_geo); 455 Position_geo = get(axes_geo, 'OuterPosition
') - get(axes_geo, 'TightInset
') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]; 456 set(axes_geo, 'Position
', Position_geo); 458 %set the position of the spectrum axis 459 OuterPosition_spectrum = get(axes_spectrum, 'OuterPosition
'); 460 OuterPosition_spectrum(1) = figure1.Position(3)/2; 461 OuterPosition_spectrum(2) = figure1.Position(4)/2; 462 OuterPosition_spectrum(3) = figure1.Position(3)/2; 463 OuterPosition_spectrum(4) = figure1.Position(4)/2; 464 set(axes_spectrum, 'OuterPosition
', OuterPosition_spectrum); 465 Position_spectrum = get(axes_spectrum, 'OuterPosition
') - get(axes_spectrum, 'TightInset
') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]; 466 set(axes_spectrum, 'Position
', Position_spectrum); 468 %set the position of the wavefnc axis 469 OuterPosition_wavefnc = get(axes_wavefnc, 'OuterPosition
'); 470 OuterPosition_wavefnc(1) = 0; 471 OuterPosition_wavefnc(2) = 0; 472 OuterPosition_wavefnc(3) = figure1.Position(3)/2; 473 OuterPosition_wavefnc(4) = figure1.Position(4)/2; 474 set(axes_wavefnc, 'OuterPosition
', OuterPosition_wavefnc); 475 % Position_wavefnc = get(axes_wavefnc, 'OuterPosition
') - get(axes_wavefnc, 'TightInset
') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]; 476 % Position_wavefnc(1) = Position_geo(1); 477 % Position_wavefnc(3) = Position_geo(3); 478 % set(axes_wavefnc, 'Position
', Position_wavefnc); 480 %set the position of the conductance axis 481 OuterPosition_cond = get(axes_cond, 'OuterPosition
'); 482 OuterPosition_cond(1) = figure1.Position(3)/2; 483 OuterPosition_cond(2) = 0; 484 OuterPosition_cond(3) = figure1.Position(3)/2; 485 OuterPosition_cond(4) = figure1.Position(4)/2; 486 set(axes_cond, 'OuterPosition
', OuterPosition_cond); 487 Position_cond = get(axes_cond, 'OuterPosition
') - get(axes_cond, 'TightInset
') * [-1 0 1 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]; 488 set(axes_cond, 'Position
', Position_cond); 491 % setting the position and margins of the plot, removing white spaces 492 figure1.PaperPositionMode = 'auto'; 493 fig_pos = figure1.Position; 494 set(figure1, 'PaperSize
', [fig_pos(3) fig_pos(4)]); 498 print('-depsc2
', fullfile(outputdir, [outfilename,'.eps
'])) 499 print('-dpdf
', fullfile(outputdir,[outfilename, '.pdf
'])) 501 disp('Failed to export figure
'); 502 disp( errCause.identifier ); 503 disp( errCause.stack(1) ); function CalcSpectrum()
calculates the spectrum of the leads
function Graphene_antidot_transport(filenum)
Calculates the conductance through a graphene antidot in a homogeneous magnetic field.
Structure hole contains the data about the antidot used in class antidot.
function setOutputDir()
sets output directory
function Transport(Energy, B)
creating the Ribbon class representing the twoterminal setup
A class to perform transport calculations on a graphene antidot (i.e., a hollow in a ribbon)...
function PlotFunction()
Creates the plot.
Structure scatterers contains data on the scattering impurities used in class antidot.
function secular_H(H0, H1, k)
Hamiltonian for the secular equation.
function CreateHandlesForMagneticField(B)
Creates and set function handles of the magnetic vector potentials in the Ribbon class.
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 ...
function CalculateTransport()
Calculates the conductance.