Eötvös Quantum Utilities  v4.9.146
Providing the Horsepowers in the Quantum Realm
CombineRibbons.m
Go to the documentation of this file.
1 %% Eotvos Quantum Transport Utilities - CombineRibbons
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 %
18 %> An object for combining multiple ribbon parts of equal width and from the same material in a two terminal setup.
19 %%
21 
22 properties ( Access = private )
23  %> An instance of structure coordinates.
24  coordinates
25 end
26 
27 
28 properties
29  %> the list of the ribbon interface to be combained (Ribbon objects)
30  Ribbons = {};
31  %> the list of the interface regions between the ribbons (Surface_Green_function objects)
32  Interface_Regions_all = {};
33 end
34 
35 
36 
37 methods ( Access = public )
38 %% Contructor of the class
39 %> @brief Constructor of the class.
40 %> @param Opt An instance of the structure Opt.
41 %> @param varargin Cell array of optional parameters. For details see #InputParsing.
42 %> @return An instance of the class
43  function obj = CombineRibbons( varargin )
44  obj = obj@Ribbon();
45 
46  obj.coordinates = structures('coordinates');
47 
48  obj.InputParsing( varargin{:} );
49  end
50 
51 
52 %% Transport
53 %> @brief Calculates the transport through the two terminal setup on two dimensional lattices. Use for development pupose only.
54 %> @param Energy The energy value.
55 %> @param varargin Cell array of optional parameters:.
56 %> @return Conductance The conductance tensor
57 %> @return ny Array of the open channel in the leads.
58 %> @return DeltaC Error of the unitarity.
59 %> @return S The scattering matrix.
60  function [Conductance,ny,DeltaC] = Transport( obj, Energy )
61  obj.setEnergy( Energy )
62 
63  obj.CalcFiniteGreensFunction('onlyGinv', true);
64 
65  Surface_sc = cell(2,1);
66  ribbon_tmp = obj.Ribbons{1};
67  Surface_sc{1} = ribbon_tmp.Scatter_UC.CreateClone();
68  Surface_sc{1}.ShiftCoordinates( -1 )
69  ribbon_tmp = obj.Ribbons{end};
70  total_height = obj.getTotalHeight();
71  Surface_sc{2} = ribbon_tmp.Scatter_UC.CreateClone();
72  Surface_sc{2}.ShiftCoordinates( total_height )
73 
74 
75  Dysonfunc = @()(obj.CustomDysonFunc( 'constant_channels', false, 'gfininv', obj.Ginv ));
76  try
77  obj.FL_handles.DysonEq( 'CustomDyson', Dysonfunc );
78  catch errCause
79  err = MException('CombineRibbons:Transport', 'Error occured in calculating the Greens function');
80  err = addCause(err, errCause);
81  save('Error_CombineRibbons_Transport.mat');
82  Conductance = NaN;
83  ny = NaN(2,1);
84  DeltaC = NaN;
85  throw(err);
86  end
87  [S,ny] = obj.FL_handles.SmatrixCalc();
88 
89  norma = norm(S*S'-eye(sum(ny)));
90 
91  if norma >= 1e-3
92  disp( ['error of the unitarity of S-matrix: ',num2str(norma)] )
93  end
94 
95  if ny(1) ~= ny(2)
96  disp( ['openchannels do not match: ',num2str(ny)] )
97  end
98 
99 
100  conductance = obj.FL_handles.Conduktance();
101  conductance = abs([conductance(1,:), conductance(2,:)]);
102  DeltaC = std(conductance);
103 
104  C = mean(conductance);
105  Conductance = C;
106 
107  disp( ['conductance = ', num2str(C), ' open_channels= ', num2str(ny(1)), ' DeltaC = ', num2str(DeltaC)])
108  %2/pi
109 
110  end
111 
112 %% getCoordinates
113 %> @brief Gets the coordinates of the central region
114 %> @return coordinates Coordinates of the surface sites of the central region.
115 %> @return coordinates_interface Coordinates of the interface region.
116 function [coordinates, coordinates_interface] = getCoordinates( obj )
117  if isempty( obj.Ribbons )
118  coordinates = [];
119  coordinates_interface = [];
120  return
121  end
122 
123  [coordinates, coordinates_interface] = obj.Ribbons{1}.getCoordinates();
124 
125 end
126 
127 %% setEnergy
128 %> @brief Sets the energy for the calculations
129 %> @param Energy The value of the energy in the same units as the Hamiltonian.
130  function setEnergy( obj, Energy )
131 
132  setEnergy@Ribbon( obj, Energy );
133 
134  for idx = 1:length(obj.Ribbons)
135  ribbon_loc = obj.Ribbons{idx};
136  ribbon_loc.setEnergy( Energy )
137  end
138 
139 
140  end
141 
142 
143 
144 %% CalcFiniteGreensFunctionFromHamiltonian
145 %> @brief Calculates the Green operator of the scattering region from the whole Hamiltonian.
146 %> @param varargin Cell array of optional parameters:.
147  function CalcFiniteGreensFunctionFromHamiltonian( obj, varargin )
148  p = inputParser;
149  p.addParameter('gauge_trans', false); % logical: true if want to perform gauge transformation on the Green's function and Hamiltonians
150  p.addParameter('E', [], @isscalar); %The energy to be used in the ribbons
151  p.addParameter('onlyGinv', false ); %
152  p.addParameter('ContactPotInterface', []);
153  p.addParameter('PotInScatter', []);
154  p.parse(varargin{:});
155 
156  gauge_trans = p.Results.gauge_trans;
157  E = p.Results.E;
158  onlyGinv = p.Results.onlyGinv;
159  ContactPotInterface = p.Results.ContactPotInterface;
160  PotInScatter = p.Results.PotInScatter;
161 
162  obj.CalcFiniteGreensFunction( 'E', E, 'gauge_trans', gauge_trans, 'onlyGinv', onlyGinv, 'ContactPotInterface', ContactPotInterface, 'gfininvfromHamiltonian', true, 'PotInScatter', PotInScatter )
163  end
164 
165 
166 %% CalcFiniteGreensFunction
167 %> @brief Calculates the Green operator of the scattering region by the fast way (see PRB 90, 125428 (2014)).
168 %> @param varargin Cell array of optional parameters:.
169 function CalcFiniteGreensFunction( obj, varargin )
170  p = inputParser;
171  p.addParameter('gauge_trans', false); % logical: true if want to perform gauge transformation on the Green's function and Hamiltonians
172  p.addParameter('E', []); %The energy to be used in the ribbons
173  p.addParameter('onlyGinv', false );
174  p.addParameter('ContactPotInterface', []);
175  p.addParameter('gfininvfromHamiltonian', false); %Not added to the documentation
176  p.addParameter('PotInScatter', []);
177  p.parse(varargin{:});
178 
179  gauge_trans = p.Results.gauge_trans;
180  E = p.Results.E;
181  onlyGinv = p.Results.onlyGinv;
182  ContactPotInterface = p.Results.ContactPotInterface;
183  gfininvfromHamiltonian = p.Results.gfininvfromHamiltonian;
184  PotInScatter = p.Results.PotInScatter;
185 
186  obj.Ginv = [];
187 
188  if ~isempty( E )
189  obj.setEnergy( E );
190  for idx = 1:length( obj.Ribbons )
191  ribbon_tmp = obj.Ribbons{idx};
192  ribbon_tmp.setEnergy( E );
193  end
194  end
195 
196  % creating the interface regions if needed
197  if ~isempty( obj.Interface_Regions )
198  obj.createInterfaceRegions()
199  end
200 
201  for idx = 1:length(obj.Ribbons)
202  obj.attachRibbon( obj.Ribbons{idx}, 'onlyGinv', onlyGinv, 'gfininvfromHamiltonian', gfininvfromHamiltonian, 'PotInScatter', PotInScatter );
203  end
204 
205 
206 
207  % gauge transformation of the vector potential in the effective Hamiltonians
208  if gauge_trans
209  try
210  % gauge transformation on Green's function
211  if ~isempty(obj.Ginv) && ~isempty(obj.PeierlsTransform_Scatter) && isempty(obj.q)
212  % gauge transformation on the inverse Green's function
213  obj.Ginv = obj.PeierlsTransform_Scatter.gaugeTransformation( obj.Ginv, coordinates_scatter, obj.gauge_field );
214  end
215  catch errCause
216  err = MException('CombineRibbons:CalcFiniteGreensFunction', 'Unable to perform gauge transformation');
217  err = addCause(err, errCause);
218  save('Error_CombineRibbons_CalcFiniteGreensFunction.mat')
219  throw(err);
220  end
221  end
222 
223 end
224 
225 
226 %% setHandlesForMagneticField
227 %> @brief Sets the function handles of the vector potential and gauge transformation.
228 %> @param varargin Cell array of optional parameters:. %
229  function setHandlesForMagneticField( obj, varargin )
230 
231  setHandlesForMagneticField@Ribbon( obj, varargin{:} );
232 
233  % other Ribbon classes in the list
234  for idx = 1:length(obj.Ribbons)
235  obj.Ribbons{idx}.setHandlesForMagneticField('scatter', hscatter, 'lead', hscatter);%hlead, 'gauge_field', gauge_field );
236  end
237  end
238 
239 
240 %% CreateClone
241 %> @brief Creates a clone of the present object.
242 %> @return Returns with the cloned object.
243  function ret = CreateClone( obj )
244  Ribbons_cloned = cell(size(obj.Ribbons));
245  for idx = 1:length(Ribbons_cloned)
246  Ribbons_cloned{idx} = obj.Ribbons{idx}.CreateClone();
247  end
248 
249  ret = CombineRibbons('Ribbons', Ribbons_cloned);
250 
251  end
252 
253 
254 
255 %% getTotalHeight
256 %> @brief Gets the total height of the ribbon structure.
257 %> @return Returns with the total height (length) of the scattering region in units of the lattice vector.
258  function ret = getTotalHeight( obj )
259  heights = obj.getHeights();
260  ret = sum( heights );
261 
262  if length(heights) == 1
263  return
264  end
265 
266  % accounting for the coupling between the ribbons
267  if ~isempty( heights )
268  ret = ret + length(obj.Ribbons )-1;
269  end
270 
271  % accounting for the interface regions
272  for idx = 2:length( obj.Ribbons )
273  ribbon_tmp = obj.Ribbons{idx};
274  if ~isempty(ribbon_tmp.Interface_Regions)
275  ret = ret + 1;
276  end
277  end
278  end
279 
280 
281 
282 %% addRibbon
283 %> @brief Adds a Ribbon part to the system.
284 %> @param ribbon2add An instance of the ribbon class.
285 %> @param varargin Cell array of optional parameters:.
286 function addRibbon( obj, ribbon2add, varargin )
287 
288  p = inputParser;
289  p.addParameter('shiftcoordinates', true );
290  p.parse(varargin{:});
291  shiftcoordinates = p.Results.shiftcoordinates;
292 
293  if ~isempty( obj.E )
294  ribbon2add.setEnergy( obj.E );
295  end
296 
297  % checking if the width of the ribbons is equal
298  if obj.checkwidth( ribbon2add ) == -1
299  err = MException('CombineRibbons:ribbon2add', 'widths of the ribbons are not identical.');
300  save('Error_CombineRibbons_ribbon2add.mat');
301  throw(err);
302  end
303 
304 
305 
306  % shift the coordinates
307  if shiftcoordinates
308  total_height = obj.getTotalHeight();
309  if ~isempty(obj.Ribbons)
310  total_height = total_height + 1; % 1 for the coupling length
311  if ~isempty(ribbon2add.Interface_Regions)
312  total_height = total_height + 1;
313  end
314  end
315  ribbon2add.ShiftCoordinates( total_height );
316  end
317 
318 
319  obj.Ribbons{end+1} = ribbon2add;
320 
321  obj.height = obj.getTotalHeight();
322 
323 end
324 
325 
326 
327 
328 end % methods public
329 
330 methods ( Access = protected )
331 
332 
333 
334 
335 % getHeights
336 %> @brief Returns an array of the heights of the ribbon parts.
337 %> @return Returns Returns an array of the heights of the ribbon parts.
338  function ret = getHeights( obj )
339  ribbonnum = length( obj.Ribbons );
340  ret = zeros( ribbonnum, 1);
341  for idx = 1:ribbonnum
342  ribbon_tmp = obj.Ribbons{idx};
343  ret(idx) = ribbon_tmp.height;
344  end
345  end
346 
347 
348 
349 
350 
351 
352 
353 
354 
355 %% attachRibbon
356 %> @brief Attach the next ribbon to the ribbon sequence for the calculation of the surface Greens function.
357 %> @param ribbon_tmp An instance of the ribbon class.
358 %> @param varargin Cell array of optional parameters:.
359 function attachRibbon( obj, ribbon_tmp, varargin )
360 
361  p = inputParser;
362  p.addParameter('onlyGinv', false );
363  p.addParameter('decimate', true );
364  p.addParameter('gfininvfromHamiltonian', false);
365  p.addParameter('PotInScatter', []);
366 
367  p.parse(varargin{:});
368 
369  onlyGinv = p.Results.onlyGinv;
370  decimate = p.Results.decimate;
371  gfininvfromHamiltonian = p.Results.gfininvfromHamiltonian;
372  PotInScatter = p.Results.PotInScatter;
373 
374 
375  if isempty(obj.Ginv) && isempty(obj.G)
376  if gfininvfromHamiltonian
377  ribbon_tmp.CalcFiniteGreensFunctionFromHamiltonian( 'onlyGinv', true, 'gauge_trans', false, 'PotInScatter', PotInScatter );
378  else
379  ribbon_tmp.CalcFiniteGreensFunction( 'onlyGinv', true, 'gauge_trans', false );
380  end
381  [~,obj.Ginv] = ribbon_tmp.GetFiniteGreensFunction();
382  obj.coordinates = ribbon_tmp.getCoordinates();
383  else
384  if isempty(obj.Ginv)
385  if isnan(rcond(obj.G) ) || abs( rcond(obj.G) ) < 1e-15
386  obj.Ginv = obj.inv_SVD( G );
387  else
388  obj.Ginv = inv(obj.G);
389  end
390  obj.G = [];
391  end
392  size_gfin = size(obj.Ginv);
393  if gfininvfromHamiltonian
394  ribbon_tmp.CalcFiniteGreensFunctionFromHamiltonian( 'onlyGinv', true, 'gauge_trans', false );
395  else
396  ribbon_tmp.CalcFiniteGreensFunction( 'onlyGinv', true, 'gauge_trans', false );
397  end
398  [~,gfininv_tmp] = ribbon_tmp.GetFiniteGreensFunction();
399  size_gfin_tmp = size( gfininv_tmp);
400 
401  Surface_sc = ribbon_tmp.Scatter_UC.CreateClone();
402 
403  if isempty( ribbon_tmp.Interface_Regions )
404 
405  H1_sc_tmp = Surface_sc.Read( 'H1' );
406  H1adj_sc_tmp = Surface_sc.Read( 'H1adj' );
407  size_H1_sc_tmp = size(H1_sc_tmp);
408 
409  H1_sc = zeros(size_gfin(1), size_gfin_tmp(2) );
410  H1adj_sc = zeros(size_gfin_tmp(1), size_gfin(2) );
411 
412  H1_sc(end-size_H1_sc_tmp(1)+1:end, 1:size_H1_sc_tmp(2)) = H1_sc_tmp;
413  H1_sc_tmp = [];
414 
415  H1adj_sc( 1:size_H1_sc_tmp(2), end-size_H1_sc_tmp(1)+1:end) = H1adj_sc_tmp;
416  H1adj_sc_tmp = [];
417 
418  obj.Ginv = [obj.Ginv, -H1_sc; -H1adj_sc, gfininv_tmp];
419 
420  coordinates_tmp = ribbon_tmp.getCoordinates();
421  fnames = fieldnames(obj.coordinates);
422  for idx = 1:length( fnames )
423  fname = fnames{idx};
424  if strcmp( fname, 'a' )
425  continue
426  else
427  obj.coordinates.(fname) = [obj.coordinates.(fname); coordinates_tmp.(fname)];
428  end
429  end
430 
431 
432 
433  else
434 
435  H0_interface = ribbon_tmp.Interface_Regions{1}.Read('H0');
436  H1_interface_tmp = ribbon_tmp.Interface_Regions{1}.Read('H1');
437  H1adj_interface_tmp = ribbon_tmp.Interface_Regions{1}.Read('H1adj');
438  size_interface = size(H0_interface,1);
439  size_H1_interface_tmp = size( H1_interface_tmp );
440 
441  % ribbon_tmp -> interface
442  H1_sc_tmp = Surface_sc.Read( 'H1' );
443  H1adj_sc_tmp = Surface_sc.Read( 'H1adj' );
444  size_H1_sc_tmp = size(H1_sc_tmp);
445 
446  H1_sc = zeros(size_interface, size_gfin_tmp(2) );
447  H1adj_sc = zeros(size_gfin_tmp(1), size_interface );
448 
449  H1_sc(end-size_H1_sc_tmp(1)+1:end, 1:size_H1_sc_tmp(2)) = H1_sc_tmp;
450  H1_sc_tmp = [];
451 
452  H1adj_sc( 1:size_H1_sc_tmp(2), end-size_H1_sc_tmp(1)+1:end ) = H1adj_sc_tmp;
453  H1adj_sc_tmp = [];
454 
455  % interface -> other ribbons
456  H1_interface = zeros(size_gfin(1), size_interface );
457  H1adj_interface = zeros( size_interface, size_gfin(2) );
458 
459  H1_interface(end-size_H1_interface_tmp(1)+1:end, 1:size_H1_interface_tmp(2)) = H1_interface_tmp;
460  H1_interface_tmp = [];
461 
462  H1adj_interface(1:size_H1_interface_tmp(2), end-size_H1_interface_tmp(1)+1:end ) = H1adj_interface_tmp;
463  H1adj_interface_tmp = [];
464 
465 
466  obj.Ginv = [ obj.Ginv, -H1_interface, zeros(size_gfin(1),size_gfin_tmp(2)); ...
467  -H1adj_interface, obj.E*eye(size(H0_interface))-H0_interface, -H1_sc; ...
468  zeros(size_gfin_tmp(1),size_gfin(2)), -H1adj_sc, gfininv_tmp];
469 
470 
471  [coordinates_tmp, coordinates_iterface] = ribbon_tmp.getCoordinates();
472  fnames = fieldnames(obj.coordinates);
473  for idx = 1:length( fnames )
474  fname = fnames{idx};
475  if strcmp( fname, 'a' )
476  continue
477  else
478  obj.coordinates.(fname) = [obj.coordinates.(fname); coordinates_iterface{1}.(fname); coordinates_tmp.(fname)];
479  end
480  end
481 
482 
483  end
484 
485 
486 
487  if decimate
488  size_gfininv = size(obj.Ginv,1);
489  M = Surface_sc.Read('M');
490 
491  gfin_tmp = inv(obj.Ginv);
492  gfin_tmp = [gfin_tmp(1:M, 1:M), gfin_tmp(1:M, size_gfininv-M+1:size_gfininv); ...
493  gfin_tmp(size_gfininv-M+1:size_gfininv ,1:M), gfin_tmp(size_gfininv-M+1:size_gfininv, size_gfininv-M+1:size_gfininv)];
494  obj.Ginv = inv(gfin_tmp);
495 
496  names = fieldnames(obj.coordinates);
497  for idx = 1:length(names)
498  if strcmp(names{idx}, 'a') || strcmp(names{idx}, 'b')
499  continue;
500  end
501 
502  array_tmp = obj.coordinates.(names{idx});
503  if isempty(array_tmp)
504  continue;
505  end
506  array_tmp = array_tmp( [1:M, size_gfininv-M+1:size_gfininv]);
507  obj.coordinates.(names{idx}) = array_tmp;
508  end
509 
510 % kulso_szabfokok = [1:M, size_gfininv-M+1:size_gfininv];
511 % [gfininv, coordinates] = ribbon.DecimationFunction( kulso_szabfokok, gfininv, 'coordinates', coordinates);
512  end
513 
514 
515  end
516 
517 
518 
519  if ~onlyGinv
520  if isnan(rcond(obj.Ginv) ) || abs( rcond(obj.Ginv) ) < 1e-15
521  obj.G = obj.inv_SVD( obj.Ginv );
522  else
523  obj.G = inv(obj.Ginv);
524  end
525  obj.Ginv = [];
526  else
527  obj.G = [];
528  end
529 
530 end
531 
532 
533 
534 
535 %% createInterfaceRegions
536 %> @brief Creates instances of class Surface_Green_function describing an interface region between the leads and the ribbon parts. The created interface is stored within the attribute Interface_Regions_all.
537 function createInterfaceRegions( obj )
538 
539  Idx = length(obj.Ribbons) + 1;
540  obj.Interface_Regions_all = cell(Idx,1);
541 
542  % crating the interface region between the leads and the scattring region
543  obj.Interface_Regions_all{1} = obj.Interface_Regions{1};
544  obj.Interface_Regions_all{Idx} = obj.Interface_Regions{2};
545 
546  % creating the interface regions between the combined ribbons
547  for idx = 1:length(obj.Ribbons)
548  ribbon_tmp = obj.Ribbons{idx};
549  if isempty( obj.Interface_Regions_all{idx+1} )
550  obj.Interface_Regions_all{idx+1} = ribbon_tmp.Scatter_UC.CreateClone();
551  end
552  obj.Ribbons{idx}.setInterfaceRegions( {obj.Interface_Regions_all{idx}, obj.Interface_Regions_all{idx+1}} );
553  end
554 
555  ribbon_tmp = obj.Ribbons{1};
556  obj.Scatter_UC = ribbon_tmp.Scatter_UC;
557  obj.CreateInterface(1);
558  ribbon_tmp = obj.Ribbons{end};
559  obj.Scatter_UC = ribbon_tmp.Scatter_UC;
560  obj.CreateInterface(2);
561 
562  % Decimating the interface regions
563  for idx = 2:length(obj.Ribbons)
564  obj.Ribbons{idx}.CreateInterface(1)
565  end
566 
567 
568 end
569 
570 
571 %% checkwidth
572 %> @brief Checks the width of the added ribbon.
573 %> @param ribbon_tmp An instance of class Ribbon
574 %> @return Returns with true if the width of the added ribbon is consitent with the previous ones.
575 function ret = checkwidth( obj, ribbon_tmp )
576 
577  % checking if the width of the ribbons is equal
578  if isempty(obj.width)
579  obj.width = ribbon_tmp.width;
580  ret = 0;
581  elseif obj.width ~= ribbon_tmp.width
582  ret = -1;
583  else
584  ret = 0;
585  end
586 
587 
588 end
589 
590 
591  end % protected methods
592 
593 
594  methods (Access=private)
595 
596 
597 %% InputParsing
598 %> @brief Parses the optional parameters for the class constructor.
599 %> @param varargin Cell array of optional parameters:
600 %> @param 'Ribbons' Cell array of classes #Ribbon to be combined.
601  function InputParsing( obj, varargin )
602 
603  p = inputParser;
604  p.addParameter('Ribbons', []);
605 
606  p.parse(varargin{:});
607 
608  Ribbons = p.Results.Ribbons;
609 
610 
611  if ~isempty(Ribbons)
612  for idx = 1:length(Ribbons)
613  ribbon_tmp = Ribbons{idx};
614 
615  if idx == 1
616  names = properties('Ribbon');
617  for jdx = 1:length(names);
618  obj.(names{jdx}) = ribbon_tmp.(names{jdx});
619  end
620  obj.Opt = ribbon_tmp.getOpt();
621  obj.param = ribbon_tmp.param;
622  else
623  % checking if the width of the ribbons is equal
624  if obj.checkwidth( ribbon_tmp ) == -1
625  err = MException('CombineRibbons:InputParsing', 'widths of the ribbons are not identical.');
626  save('Error_CombineRibbons_InputParsing.mat');
627  throw(err);
628  end
629  end
630 
631 
632  obj.addRibbon( ribbon_tmp );
633  end
634  else
635  err = MException('CombineRibbons:InputParsing', 'obj.Ribbons must contain at least one Ribbon interface.');
636  save('Error_CombineRibbons_InputParsing.mat');
637  throw(err);
638  end
639 
640  end
641 
642 end % private methods
643 end
A class to calculate the Green functions and self energies of a translational invariant lead.
Structure Opt contains the basic computational parameters used in EQuUs.
Definition: structures.m:60
Structure open_channels describes the open channel in the individual leads.
Definition: structures.m:159
A class for calculations on a ribbon of finite width for equilibrium calculations mostly in the zero ...
Definition: Ribbon.m:34
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.
Property Ribbons
the list of the ribbon interface to be combained (Ribbon objects)
function()
Structure param contains data structures describing the physical parameters of the scattering center ...
Definition: structures.m:45
function gauge_field(x, y, eta_B, Aconst, height, lattice_constant)
Scalar gauge field connecting Landaux and Landauy gauges.
An object for combining multiple ribbon parts of equal width and from the same material in a two term...
function structures(name)