Triple quantum dot - LINEAR CHAIN
Exact diagonalisation study: eigenvalue spectrum as a function of the gate voltage
Part of package SNEG, http://nrgljubljana.ijs.si/sneg
Rok Zitko, rok.zitko@ijs.si, June, July, August 2005

<< sneg`sneg`;

<< Graphics`Colors`
<< Graphics`MultipleListPlot`

Off[General::spell1];
Off[General::spell];
ClearAll[a, b, c, e, o, f]

snegfermionoperators[a, b, c, f, e, o]
snegrealconstants[t, tab, 
      U, δ, δa, δb, δc]

Hamiltonian definition

Ha = δa ( number[a[]] - 1)  + 
        U/2  pow[ number[a[]] - 1, 2]
Hb = δb ( number[b[]] - 1)  + 
        U/2  pow[ number[b[]] - 1, 2]
Hc = δc ( number[c[]] - 1)  + 
        U/2  pow[ number[c[]] - 1, 2]
H1 = -tx hop[a[], f[1]]
H2 = -tx hop[c[], f[2]]
Habc = t hop[a[], b[]] + t hop[b[], c[]]
H = H1 + H2 + Ha + Hb + Hc + Habc // Expand

Transformation to even and odd combination of conduction band orbitals

Heo = 
      H /. {f[i_, 1, 
                j_] -> (1/(Sqrt[2])) (e[i, j] + 
                    o[i, j]), 
f[i_, 2, 
                j_] -> (1/(Sqrt[2])) (e[i, j] - o[i, j])} // 
        Expand

(* Isolated,  
      symmetric tqd *) 
Huse = 
        Heo /. {δa -> δ, δb -> δ, δc -> δ, tab -> t};

    H0 = Huse /. {tx -> 0, 
          tx -> 0}

 (* 
      Coupling term *) 

    H1 = Huse - H0

    FullSimplify[H1]

(* 
      Definition of (Q, 
          S) basis states *) 
basisops = {a[], b[], c[]};

    makebasis[basisops]

    vak  =  vacuum[];

    bz = qsbasis[basisops]; bz // MatrixForm

    Scan[(baza[ #[[1]] ]  =  #[[2]]) &, 
      bz]

    bvc = Map[{#[[1]], ap[#[[2]], vak]} &, bz]; 
    bvc // MatrixForm

    Scan[(bazavc[ #[[1]] ] = #[[2]]) &, bvc]

    baza[q, s]  :=  baza[{q, s}];

    dim[{q_, s_}] := Length[baza[{q, s}]];

    subspaces = bz[[All, 1]]

    nrsub = Length[subspaces]

diagonalizerepl[i_, repl_, showvc_:  0] := 
        Module[{}, 
subsp = 
            subspaces[[i]]; 
bb = 
            bazavc[subsp]; 
h = 
            matrixrepresentationvc[H0, bb]; 
h = 
            Simplify[h  //.  repl]; 
Print[
            MatrixForm[h]]; 
hh = 
            h //. {t -> T, δ -> delta, 
                U -> UU}; 
es = 
            Eigensystem[hh]; 
Print[
            es[[1]]]; 
stanja = 
            Table[es[[2, j]] . bb, {j, dim[subsp]}] /. {TAB -> tab, 
                delta -> δ, UU -> U, 
                deltaa -> δa, 
                deltab -> δb}; 
xx = {es[[1]], stanja // Simplify}; 
If[showvc == 1, 
            Print[xx]]; 
xx
];
diagonalize[i_] := diagonalizerepl[i, {}];

myrule = {t -> -1/2, 
          U -> 1};
mindelta = -1.5;
maxdelta = 1.5;

legenda = {};
ClearAll[genpl]
genpl[i_, ps__] := 
        Module[{}, 
st = 
            diagonalizerepl[i, myrule, 0]; 
Print[
            st[[1]] /. delta -> 0 // N]; 
ps2 = 
            Table[{ps}, {Length[st[[1]]]}]; 
slika[i] = 
            Plot[Evaluate[st[[1]]], {delta, mindelta, maxdelta}, 
              PlotStyle -> ps2]; 
legenda = 
            Join[legenda, {Dashing[{}], Thickness[0.004], ps, 
                Line[{{0, i}, {1, i}}], 
                Text[subspaces[[i]], {1.2, 
                    i}]}];
];

genpl[1, {}]

genpl[2, Blue]

genpl[3, Red]

genpl[4, Thickness[0.008], Red]

genpl[5, DarkGreen]

genpl[6, DarkGreen, Thickness[0.006]]

genpl[7, Red, Dashing[{0.01, 0.01}]]

genpl[8, Thickness[0.008], Red, Dashing[{0.01, 0.01}]]

genpl[9, Blue, Dashing[{0.01, 0.01}]]

genpl[10, Black, Dashing[{0.01, 0.01}]]

pic2 = 
      Show[Graphics[legenda], 
        PlotRange -> {{0.5, 1.5}, {-0.5, 10.5}}]

pic1 = 
      Show[Table[slika[i], {i, 10}], 
        PlotRange -> {{mindelta, maxdelta}, {-2.5, 0.5}}]

picboth = Show[GraphicsArray[{{pic1, pic2}}]]