1 %
Transport calculation through a graphene QD including the charging energy - based on EQuUs v4.8
2 % Compare results to Fig.3 in 2014 Nanotechnology 25 465201.
3 % Copyright (C) 2017 Peter Rakyta, Ph.D.
5 % This program is free software: you can redistribute it and/or modify
6 % it under the terms of the GNU General Public License as published by
7 % the Free Software Foundation, either version 3 of the License, or
8 % (at your option) any later version.
10 % This program is distributed in the hope that it will be useful,
11 % but WITHOUT ANY WARRANTY; without even the implied warranty of
12 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 % GNU General Public License
for more details.
15 % You should have received a copy of the GNU General Public License
16 % along with
this program. If not, see http:
18 %> @addtogroup Examples
21 %> @brief
Transport calculation through a graphene QD including the charging energy utilizing the diagarmmatic technique of ......
22 %> @
param filenum The identification number of the filenema
for the exported data (
default is 1).
24 %> Herbert Scholler and Gerd Schon Phys RevB <B>50</B> 18436 (1994)
26 %> EQuUs v4.9 or later
32 %> @brief
Transport calculation through a graphene QD including the charging energy utilizing the diagarmmatic technique of ......
33 %> @
param filenum The identification number of the filenema
for the exported data (
default is 1).
36 if ~exist(
'filenum',
'var')
40 filename = mfilename('fullpath');
41 [directory, fncname] = fileparts( filename );
43 % filename containing the input XML
44 inputXML = 'Input_Coulomb.xml';
45 % Parsing the input file and creating data
structures 48 % The hopping parameter obtained from the input file
49 vargamma =
param.scatter.vargamma;
53 % The maximal bias on the system
55 % The maximal bias on the system
56 gateVoltage_max = 5*Ec;
57 % number of energy points to be used for the calculations in the Quantum Dot class
59 % The Boltzman constant
63 % width of the junction
65 % length of the junction
67 % filename containing the output XML
68 outfilename = [fncname,'_',num2str( filenum )];
71 % false to supress output messages
73 % The differential conductance as a
function of the magnetic field
74 diff_conductance = [];
76 % array containing the bias voltage values
78 % array containing the gate voltage values
80 %
Ribbon class describing the junction
82 % Two dimensional array containg the calculated current values
85 % doping levels of the QD in the single-electron picture (without the charging energy)
86 %doping_levels = [ -0.981 -0.963 -0.276 -0.246 -0.009179 0 0.009179 0.036 0.2754 0.309 0.981 1.00]; %gamma_sc = 0.3
87 doping_levels = [ -0.993 -0.984 -0.981 -0.951 -0.279 -0.231 -0.009179 0 0.009179 0.057 0.279 0.342 0.981 0.984 0.993 1.026]; %gamma_sc = 0.5
91 % creating output directories
94 % Calculates the non-interacting transport through a graphene island
100 % exporting the calculated data
101 save( fullfile(outputdir, [outfilename, '.mat']));
104 %> @brief Calculates the transport through a quantum dot
107 display('****** Calculating non-interacting transport through a Quantum dot ******')
110 % creating the
Ribbon interface describing the junction
111 cRibbon =
Ribbon('width', width, 'height', height, 'EF', 1e-6, 'silent', silent, '
Opt',
Opt, '
param',
param, 'filenameOut', fullfile(outputdir, [outfilename, '.xml']), ...
116 % creating array containing the bias values
118 bias_min = -bias_max;
119 bias_vec = bias_min:(bias_max-bias_min)/(bias_num+1):bias_max;
120 bias_vec = sort( [bias_vec, 0], 'ascend');
122 % creating array containing the gate voltage values
123 gateVoltage_num = 200;
124 gateVoltage_min = -gateVoltage_max;
125 gateVoltage_vec = gateVoltage_min:(gateVoltage_max-gateVoltage_min)/(gateVoltage_num+1):gateVoltage_max + Ec;
128 % creating the
QuantumDot class to calculate the current
129 cQD =
QuantumDot(
Opt, 'Ec', Ec, 'T', T, 'bias_max', bias_max, 'junction', cRibbon, 'scatterPotential', @(CreateH,E)
ScatterPotQD(CreateH, E),...
130 'gfininvfromHamiltonian', true, 'Edb', Enum);
133 % preallocating arrays for the calculations
134 current_surf = zeros( length(gateVoltage_vec), length(bias_vec) );
135 diff_conductance = zeros( length(gateVoltage_vec), length(bias_vec)-1 );
138 % starting parallel pool
140 poolmanager.openPool();
142 % Determine the
DOS for the calculations
143 %cQD.DetermineDensityOfStates( -1.5, 1.5, 1000);
145 for jdx = 1:length(gateVoltage_vec)
147 gateVoltage = gateVoltage_vec(jdx);
148 disp(['Calculating for gate voltage = ', num2str(gateVoltage)]);
150 % Determine chamical potentials of the individual filling factors
151 cQD.SetChemicalPotentials( doping_levels, gateVoltage );
153 % calculating the tunneling rates for the given gate voltage
154 cQD.CalcTunnelingRates( gateVoltage );
157 for idx = 1:length(bias_vec)
160 bias = bias_vec(idx);
162 % determine the transition rates
163 cQD.DetermineSelfEnergy( bias, gateVoltage );
165 % determine the steady state occupation probabilities
166 OccupationProbabilities = cQD.DetermineOccupationProbabilities();
169 if abs(bias - min(abs(bias_vec))) < 1e-4
170 display('Occupation probabilities in equilibrium')
171 disp(transpose(OccupationProbabilities));
174 % Determine the new current operator for the new bias value at lead 1
175 cQD.DetermineCurrentOperator( bias, gateVoltage, 1 );
177 % calculate the steady state current
178 current_tmp = cQD.DetermineCurrent();
179 current_surf(jdx,idx) = current_tmp;
181 % Check the equivalence of the current in the two leads
182 if abs(bias - max(bias_vec)) < 1e-4
184 % Determine the new current operator for the new bias value at lead 2
185 cQD.DetermineCurrentOperator( bias, gateVoltage, 2 );
187 % calculate the steady state current
188 current_tmp2 = cQD.DetermineCurrent();
190 disp(['The difference between the current of the two leads: ', num2str( current_tmp+current_tmp2)])
196 % calculating differential conductance
197 diff_conductance(jdx, :) = diff(current_surf(jdx,:))./diff(bias_vec);
202 % export the calculetd data
203 save( [outputdir,'/',outfilename,'.mat']);
207 % closing the parallel pool
208 poolmanager.closePool();
217 %> @brief Removing unecessary
sites from the scattering region
220 coordinates = CreateH.Read('coordinates');
224 % determine
sites to be removed to reproduce the scattering region in 2014 Nanotechnology 25 465201
225 indexes2remove = ~(y<max_y);
227 CreateH.Write('kulso_szabfokok', []);
229 y( indexes2remove ) = max_y/2;
233 % creating new array for the edge-
sites 234 edge_sites_logical = ~(y<max_y & y>min_y);
235 edge_sites = 1:length(y);
236 edge_sites = edge_sites(edge_sites_logical);
237 CreateH.Write('kulso_szabfokok', edge_sites);
240 % removing
sites from the scattering region
241 CreateH.RemoveSites( indexes2remove )
244 % store the modified Hamiltonian
245 Hscatter = CreateH.Read('Hscatter');
247 ret = sparse([], [], [], size(Hscatter,1), size(Hscatter,2));
252 %> @brief Function producing custom lead
Hamiltonians defined on a square lattice. The
function has equivalent inputs and return values as
#Transport_Interface.SurfaceGreenFunctionCalculator and E is standing for the energy. 254 p_inner = inputParser;
256 p_inner.addParameter(
'createCore', 0);
257 p_inner.addParameter(
'Just_Create_Hamiltonians', 0);
258 p_inner.addParameter(
'shiftLead', 0);
259 p_inner.addParameter(
'coordinates_shift', 0);
260 p_inner.addParameter(
'transversepotential', []);
261 p_inner.addParameter(
'Lead',[]);
262 p_inner.addParameter(
'gauge_field', [] );% gauge field
for performing gauge transformation
263 p_inner.addParameter(
'SelfEnergy',
false); % set
true to calculate the
self energy of the semi-infinite lead
264 p_inner.addParameter(
'SurfaceGreensFunction',
true );% set
true to calculate the surface Greens
function of the semi-infinite lead
265 p_inner.addParameter(
'q', [] ) %transverse momentum
267 p_inner.parse(varargin{:});
269 createCore = p_inner.Results.createCore;
270 Just_Create_Hamiltonians = p_inner.Results.Just_Create_Hamiltonians;
271 shiftLead = p_inner.Results.shiftLead;
272 coordinates_shift = p_inner.Results.coordinates_shift;
273 transversepotential = p_inner.Results.transversepotential;
274 Lead = [];%p_inner.Results.Surface_tmp;
275 gauge_field = p_inner.Results.gauge_field; % gauge field
for performing gauge transformation
276 SelfEnergy = p_inner.Results.SelfEnergy;
277 SurfaceGreensFunction = p_inner.Results.SurfaceGreensFunction;
278 q = p_inner.Results.q;
286 param2.Leads{idx}.epsilon =
param.
Leads{idx}.epsilon;
287 param2.Leads{idx}.vargamma =
param.
Leads{idx}.vargamma;
288 param2.Leads{idx}.M = width;
293 Lead_ret = FL_handles.SurfaceGreenFunctionCalculator(idx,
'createCore', createCore, ...
294 'Just_Create_Hamiltonians', Just_Create_Hamiltonians, ...
295 'shiftLead', shiftLead, ...
296 'coordinates_shift', coordinates_shift, ...
297 'transversepotential', transversepotential, ...
299 'SelfEnergy', SelfEnergy, ...
300 'SurfaceGreensFunction', SurfaceGreensFunction, ...
307 %> @brief Method to adjust the
Hamiltonians of the
interface regions
310 Kcoupling = Interface_Region.Read(
'Kcoupling');
311 Kcouplingadj = Interface_Region.Read(
'Kcouplingadj');
314 [rows, cols] = find( Kcoupling );
317 Kcoupling = Kcoupling(rows, :);
318 Kcouplingadj = Kcouplingadj(:, rows);
320 Interface_Region.Write(
'Kcoupling', Kcoupling);
321 Interface_Region.Write(
'Kcouplingadj', Kcouplingadj);
327 %> @brief Creates the plot
330 % creating figure in units of pixels
331 figure1 = figure(
'Units',
'Pixels',
'Visible',
'off',
'Colormap', ...
332 [0 0 0;0.0300625283271074 0.0187878794968128 0.0119648873806;0.0601250566542149 0.0375757589936256 0.0239297747612;0.0901875868439674 0.0563636384904385 0.0358946621417999;0.12025011330843 0.0751515179872513 0.0478595495223999;0.150312647223473 0.0939393937587738 0.0598244369029999;0.180375173687935 0.112727276980877 0.0717893242835999;0.210437700152397 0.131515145301819 0.0837542116641998;0.240500226616859 0.150303035974503 0.0957190990447998;0.270562767982483 0.169090911746025 0.1076839864254;0.300625294446945 0.187878787517548 0.119648873806;0.330687820911407 0.20666666328907 0.1316137611866;0.36075034737587 0.225454553961754 0.1435786485672;0.390812873840332 0.244242429733276 0.1555435359478;0.420875400304794 0.263030290603638 0.1675084233284;0.450937926769257 0.281818181276321 0.179473310709;0.481000453233719 0.300606071949005 0.1914381980896;0.511062979698181 0.319393932819366 0.2034030854702;0.541125535964966 0.33818182349205 0.2153679728508;0.571188032627106 0.356969714164734 0.2273328602314;0.60125058889389 0.375757575035095 0.239297747612;0.63131308555603 0.394545465707779 0.251262634992599;0.661375641822815 0.41333332657814 0.263227522373199;0.6914381980896 0.432121217250824 0.275192409753799;0.72150069475174 0.450909107923508 0.287157297134399;0.751563251018524 0.469696968793869 0.299122184514999;0.781625747680664 0.488484859466553 0.311087071895599;0.811688303947449 0.507272720336914 0.323051959276199;0.841750800609589 0.526060581207275 0.335016846656799;0.871813356876373 0.544848501682281 0.346981734037399;0.901875853538513 0.563636362552643 0.358946621417999;0.931938409805298 0.582424223423004 0.370911508798599;0.962000906467438 0.60121214389801 0.382876396179199;0.992063462734222 0.620000004768372 0.394841283559799;0.992327988147736 0.625373363494873 0.398263245820999;0.992592573165894 0.63074666261673 0.401685208082199;0.992857098579407 0.636120021343231 0.405107140541077;0.993121683597565 0.641493320465088 0.408529102802277;0.993386209011078 0.646866679191589 0.411951065063477;0.993650794029236 0.652239978313446 0.415373027324677;0.993915319442749 0.657613337039948 0.418794989585876;0.994179844856262 0.662986695766449 0.422216951847076;0.99444442987442 0.668359994888306 0.425638914108276;0.994708955287933 0.673733353614807 0.429060846567154;0.994973540306091 0.679106652736664 0.432482808828354;0.995238065719604 0.684480011463165 0.435904771089554;0.995502650737762 0.689853310585022 0.439326733350754;0.995767176151276 0.695226669311523 0.442748695611954;0.996031761169434 0.700600028038025 0.446170628070831;0.996296286582947 0.705973327159882 0.449592590332031;0.99656081199646 0.711346685886383 0.453014552593231;0.996825397014618 0.71671998500824 0.456436514854431;0.997089922428131 0.722093343734741 0.459858477115631;0.997354507446289 0.727466642856598 0.463280439376831;0.997619032859802 0.732840001583099 0.466702401638031;0.99788361787796 0.738213300704956 0.470124334096909;0.998148143291473 0.743586659431458 0.473546296358109;0.998412668704987 0.748960018157959 0.476968258619308;0.998677253723145 0.754333317279816 0.480390220880508;0.998941779136658 0.759706676006317 0.483812183141708;0.999206364154816 0.765079975128174 0.487234115600586;0.999470889568329 0.770453333854675 0.490656077861786;0.999735474586487 0.775826632976532 0.494078040122986;1 0.781199991703033 0.497500002384186]);
334 % font size on the figure will be 16 points
337 % creating axes of the plot
338 axes1 = axes(
'Parent',figure1, ...
340 'FontSize', fontsize,...
342 'Units',
'Pixels', ...
343 'FontName',
'Times New Roman');
347 xlabel(
'Gate voltage [E_c]',
'FontSize', fontsize,
'FontName',
'Times New Roman',
'Parent', axes1);
350 ylabel(
'Bias [E_c]',
'FontSize', fontsize,
'FontName',
'Times New Roman',
'Parent', axes1);
353 if ~isempty( diff_conductance )
354 contourf( gateVoltage_vec/Ec, (bias_vec(1:end-1)+bias_vec(2:end))/2/Ec, transpose(diff_conductance),
'LineStyle',
'none',
'LineColor',[0 0 0],...
355 'LevelList',[-0.000275211478671962 0.00015807932351996 0.00059137012571188 0.0010246609279038 0.00145795173009572 0.00189124253228764 0.00232453333447956 0.00275782413667149 0.00319111493886341 0.00362440574105533 0.00405769654324725 0.00449098734543917 0.00492427814763109 0.00535756894982301 0.00579085975201493 0.00622415055420685 0.00665744135639878 0.0070907321585907 0.00752402296078262 0.00795731376297454 0.00839060456516646 0.00882389536735838 0.0092571861695503 0.00969047697174222 0.0101237677739341 0.0105570585761261 0.010990349378318 0.0114236401805099 0.0118569309827018 0.0122902217848937 0.0127235125870857 0.0131568033892776 0.0135900941914695 0.0140233849936614 0.0144566757958534 0.0148899665980453 0.0153232574002372 0.0157565482024291 0.016189839004621 0.016623129806813 0.0170564206090049 0.0174897114111968 0.0179230022133887 0.0183562930155806 0.0187895838177726 0.0192228746199645 0.0196561654221564 0.0200894562243483 0.0205227470265402 0.0209560378287322 0.0213893286309241 0.021822619433116 0.0222559102353079 0.0226892010374999 0.0231224918396918 0.0235557826418837 0.0239890734440756 0.0244223642462675 0.0248556550484595 0.0252889458506514 0.0257222366528433 0.0261555274550352 0.0265888182572271 0.0270221090594191 0.027455399861611 0.0278886906638029 0.0283219814659948 0.0287552722681867 0.0291885630703787 0.0296218538725706 0.0300551446747625 0.0304884354769544 0.0309217262791464 0.0313550170813383 0.0317883078835302 0.0322215986857221 0.032654889487914 0.033088180290106 0.0335214710922979 0.0339547618944898 0.0343880526966817 0.0348213434988736 0.0352546343010656 0.0356879251032575 0.0361212159054494 0.0365545067076413 0.0369877975098332 0.0374210883120252 0.0378543791142171 0.038287669916409 0.0387209607186009 0.0391542515207929 0.0395875423229848 0.0400208331251767 0.0404541239273686 0.0408874147295605 0.0413207055317525 0.0417539963339444 0.0421872871361363 0.0426205779383282 0.0430538687405201 0.0434871595427121 0.043920450344904 0.0443537411470959 0.0447870319492878 0.0452203227514798 0.0456536135536717 0.0460869043558636 0.0465201951580555 0.0469534859602474 0.0473867767624394 0.0478200675646313 0.0482533583668232 0.0486866491690151 0.049119939971207 0.049553230773399 0.0499865215755909 0.0504198123777828 0.0508531031799747 0.0512863939821666 0.0517196847843586 0.0521529755865505 0.0525862663887424 0.0530195571909343 0.0534528479931263 0.0538861387953182 0.0543194295975101 0.054752720399702 0.0551860112018939 0.0556193020040859 0.0560525928062778 0.0564858836084697 0.0569191744106616 0.0573524652128535 0.0577857560150455 0.0582190468172374 0.0586523376194293 0.0590856284216212 0.0595189192238131 0.0599522100260051 0.060385500828197 0.0608187916303889 0.0612520824325808 0.0616853732347728 0.0621186640369647 0.0625519548391566 0.0629852456413485 0.0634185364435404 0.0638518272457324 0.0642851180479243 0.0647184088501162 0.0651516996523081 0.0655849904545 0.066018281256692 0.0664515720588839 0.0668848628610758 0.0673181536632677 0.0677514444654596 0.0681847352676516 0.0686180260698435 0.0690513168720354 0.0694846076742273 0.0699178984764192 0.0703511892786112 0.0707844800808031 0.071217770882995 0.0716510616851869 0.0720843524873788 0.0725176432895708 0.0729509340917627 0.0733842248939546 0.0738175156961465 0.0742508064983385 0.0746840973005304 0.0751173881027223 0.0755506789049142 0.0759839697071061 0.0764172605092981 0.07685055131149 0.0772838421136819 0.0777171329158738 0.0781504237180657 0.0785837145202577 0.0790170053224496 0.0794502961246415 0.0798835869268334 0.0803168777290253 0.0807501685312173 0.0811834593334092 0.0816167501356011 0.082050040937793 0.082483331739985 0.0829166225421769 0.0833499133443688 0.0837832041465607 0.0842164949487526 0.0846497857509446 0.0850830765531365 0.0855163673553284 0.0859496581575203 0.0863829489597123],...
356 'Fill',
'on',
'Parent', axes1);
359 % set the paper position in releases greater than 2016
360 ver = version(
'-release');
361 if str2num(ver(1:4)) >= 2016
362 % setting the position and margins of the plot, removing white spaces
363 figure1.PaperPositionMode =
'auto';
364 fig_pos = figure1.PaperPosition;
365 figure1.PaperSize = [fig_pos(3) fig_pos(4)];
368 Position_figure = get(figure1, 'Position');
369 Position_figure(1) = 0;
370 Position_figure(2) = 0;
371 set(axes1, 'OuterPosition', Position_figure);
375 print('-depsc2', fullfile(outputdir, [outfilename,'.eps']))
376 print('-dpdf', fullfile(outputdir,[outfilename, '.pdf']))
378 disp('Failed to export figure');
379 disp( errCause.identifier );
380 disp( errCause.stack(1) );
392 %> @brief Sets the output directory
394 resultsdir = 'results';
395 mkdir(fullfile(directory, resultsdir) );
396 outputdir = resultsdir;
Lattice_Type
String describing the preprogrammed lattice type. See the documentation of lattice types for details.
lead_param Leads
A list of structures lead_param containing the physical parameters for the scattering region.
A class for controlling the parallel pool for paralell computations.
Structure Opt contains the basic computational parameters used in EQuUs.
function CalcTransport()
Calculates the transport through a quantum dot.
A class to process transport calculations on quantum dots.
A class for calculations on a ribbon of finite width for equilibrium calculations mostly in the zero ...
function Transport(Energy, B)
Calculates the conductance at a given energy value.
A class to evaluate the Dyson equation and to calculate the scattering matrix for equilibrium process...
function Hamiltonians(varargin)
Function to create the custom Hamiltonians for the 1D chain.
Structure containg the energy resolved density of states.
A class to calculate the Green functions and self energies of a translational invariant lead The nota...
function InterfaceModel(Interface_Region)
Method to adjust the Hamiltonians of the interface regions.
Class containing physical parameters of a particular lead defined on a square lattice.
Structure param contains data structures describing the physical parameters of the scattering center ...
function Square_leads(idx, E, varargin)
Function producing custom lead Hamiltonians defined on a square lattice. The function has equivalent ...
Structure sites contains data to identify the individual sites in a matrix.
function gauge_field(x, y, eta_B, Aconst, height, lattice_constant)
Scalar gauge field connecting Landaux and Landauy gauges.
function PlotFunction()
Creates the plot.
function setOutputDir()
Sets the output directory.
function structures(name)
function ScatterPotQD(CreateH, E)
Removing unecessary sites from the scattering region.
function Coulomb_Diamonds(filenum)
Transport calculation through a graphene QD including the charging energy utilizing the diagarmmatic ...