# Tutorial 05: self consistence

The following tutorial is concerned with the self-consistent simulation of a (13,0) CNT, 30 nm long (Lr+Lc+Lr).

The device is a double gate, with channel length Lc=10 nm, doped reservoirs Lr=10 nm,
and with top and bottom oxide thicknesses equal to 1.5 nm (tox1 and tox2). The lateral
spacing S is equal to 1.5 nm. The analysis is performed within the mode space approach, using 2 modes.
This time, we define the grid in the region out of the CNT, while within the CNT, we use the
same coordinates as those of the CNT.
To this purpose, we use the numpy command concatenate

# I create the grid
x1=array([-2,-1.70172,-1.43483,-1.19604,-0.982388,-0.791223,-0.620181,0]);
x2=array([0.620181,0.791223,0.982388,1.19604,1.43483,1.70172,2]);
xg=concatenate((x1,x2),1);
y1=array([-2,-1.70172,-1.43483,-1.19604,-0.982388,-0.791223,-0.620181]);
y2=array([0.620181,0.791223,0.982388,1.19604,1.43483,1.70172,2]);
yg=concatenate((y1,y2),1);
zg=array([-0.072,30.024]);
As usual, we define the CNT and the grid
CNT=nanotube(13,30);
grid=grid3D(xg,yg,zg,CNT.x,CNT.y,CNT.z);

as well as the gates and the SiO2 region.
top_gate=gate(“hex”,grid.xmax,grid.xmax,grid.ymin,grid.ymax,grid.zmin,grid.zmax)
bottom_gate=gate(“hex”,grid.xmin,grid.xmin,grid.ymin,grid.ymax,grid.zmin,grid.zmax)
top_gate.Ef=-0.6;
bottom_gate.Ef=0;
CNT.Nmodes=2;
CNT.mu2=-0.5
SiO2=region(“hex”,-2,2,-2,2,grid.zmin,grid.zmax);
SiO2.eps=3.9;

As can be seen, the top gate is biased to 0.6 V, while the bottom gate to 0 V.
We also apply a drain-to-source voltage equal to 0.5 V and we impose 2 modes.
Now it is time for the interface
p=interface3D(grid,top_gate,bottom_gate,SiO2);

We first solve the Laplace equation in order to get an initial solution
p.normpoisson=1e-3;
solve_Poisson(grid,p)

Once done, we proceed with the self-consistent solution of the Poisson and the NEGF equations
within the mode space approach
p.modespace=”yes”
p.normpoisson=1e-1;
p.normd=5e-2;
solve_self_consistent(grid,p,CNT);
We can save the computed electrostatic potential in the file “Phi.out” as follows, by means of
the savetxt command
savetxt(“Phi.out”,p.Phi);

and finally plot the section of the computed free charge
temp=p.free_charge/grid.dVe/1e-27;
section(“x”,temp,0.1,grid);
and print the current
print CNT.current()

Here the complete listing of the python script

# I create the grid
x1=array([-2,-1.70172,-1.43483,-1.19604,-0.982388,-0.791223,-0.620181,0]);
x2=array([0.620181,0.791223,0.982388,1.19604,1.43483,1.70172,2]);
xg=concatenate((x1,x2),1);
y1=array([-2,-1.70172,-1.43483,-1.19604,-0.982388,-0.791223,-0.620181]);
y2=array([0.620181,0.791223,0.982388,1.19604,1.43483,1.70172,2]);
yg=concatenate((y1,y2),1);
zg=array([-0.072,30.024]);

CNT=nanotube(13,30);

grid=grid3D(xg,yg,zg,CNT.x,CNT.y,CNT.z);

# Now I define the gate regions
top_gate=gate(“hex”,grid.xmax,grid.xmax,grid.ymin,grid.ymax,grid.zmin,grid.zmax)
bottom_gate=gate(“hex”,grid.xmin,grid.xmin,grid.ymin,grid.ymax,grid.zmin,grid.zmax)
top_gate.Ef=-0.6;
bottom_gate.Ef=0;
CNT.Nmodes=2;
CNT.mu2=-0.5
# I take care of the solid
SiO2=region(“hex”,-2,2,-2,2,grid.zmin,grid.zmax);
SiO2.eps=3.9;

p=interface3D(grid,top_gate,bottom_gate,SiO2);

p.normpoisson=1e-3;
solve_Poisson(grid,p)
p.modespace=”yes”

p.normpoisson=1e-1;
p.normd=5e-2;
solve_self_consistent(grid,p,CNT);
savetxt(“Phi.out”,p.Phi);

temp=p.free_charge/grid.dVe/1e-27;
section(“x”,temp,0.1,grid);
print CNT.current()