In this second example we will refer to the Example_4 (Si n-Mosfet) that you can find in the examples directory.

Step 1: Modeling the device

Again, as a first step, we have to model the device. We’ll see in some details how to design and mesh a mosfet device with GMSH.


In the GMSH script mosfet.geo, several variables are defined and given a value in this way:


these variables are used in the script to assign proper values to the mesh characteristic length of the defined Points.

Lg_2 = 0.0375;
d = 0.01;
Ls = 0.1;
h = 0.25;
b = 0.0025;
o = 0.005;
xd = Lg_2 + d;
xd2 = Lg_2 + d / 2;
xmax = xd + Ls - d;

These other convenient variables are used to parametrize the most relevant geometrical features, such as channel length, oxide thickness, and so on.

Geometrical Points and Lines are defined to design the device structure; the fourth parameter in Point assignement is the characteristic length associated to that point: this is an essential feature to control the mesh density and refine it where necessary (usually in the channel region)

N.B.: In a 2D simulation it is assumed that the geometrical model is restricted to the xy-plane (z=0). Any other geometrical orientation could give impredictable results.

Point(1) = {0, -h, 0, lsub};
Point(2) = {0, 0, 0, lc};
Point(3) = {xmax,-h,0.0,lsub};
Point(4) = {-xmax,-h,0.0,lsub};
Point(5) = {xmax,0,0.0,lh};
Point(6) = {-xmax,0,0.0,lh};
Line(1) = {4,1};
Line(2) = {3,13};
Line(6) = {4,14};
Line(7) = {10,9};
Line(8) = {12,2};
Line(9) = {8,7};
Line(10) = {11,8};
Line(11) = {9,12};
Line(13) = {7,6};

Definition of a surface: first a line loop is composed, listing all the lines constituting the boundary of the surface; (each line is given an orientation by the points order in its definition, so it canhave a negative sign if this orientation is opposite to that of the loop). Then this line loop is assigned to a PlaneSurface object (this procedure can alternatively be performed through the graphical interface).

For example, by defining:

Line Loop(40) = {28,2,-34,33,8,29,-31,-30,-6,1};
Plane Surface(41) = {40};

we obtain the following surface:


Definition of the Physical surfaces: each of them is composed by one or more geometrical Plane Surfaces. For example, Physical surface "contact" comprises the two separated contact regions, while Physical surface "oxide" corresponds to the oxide region.

The Physical surfaces are the 2D Physical regions of the mesh and will be assigned to the related tibercad regions through the keyword mesh_regions or directly through their names (see Step 3)

Physical Surface("substrate") = {41}; // n-Si
Physical Surface("contact") = {44,47}; // n+-Si
Physical Surface("oxide") = {46}; // SiO2


Definition of the Phisical Lines: In this 2D simulation, 1D physical regions are used to carry information about boundary condition regions.

In other word, each Phisical Line corresponds to a boundary condition (a contact in the case of a driftdiffusion calculation): thus Physical Line "source" refers to the source contact, P.L. "gate" to the gate contact, P.L. "drain" to the drain contact.
The names of these Phisical Lines will be assigned to tibercad contacts.

Physical Line("source") = {13}; // source
Physical Line("gate") = {39,38}; // gate
Physical Line("drain") = {19}; // drain


Here is the final geometrical model of our Mosfet structure.

Geometrical model of Mosfet


Step 2: Meshing the device

The .geo script file with the geometrical description can be run in GMSH, to display the modelled device and to mesh it through the GMSH graphical interface (see fig. 3.2).
Alternatively, a non-interactive mode is also available in GMSH, without graphical user interface. For example, to mesh this 2D tutorial in non-interactive mode, just type:

gmsh mosfet.geo -2 -o mosfet.msh.

Here is the result of the 2D meshing:

2d Mesh


Step 3: TiberCAD Input file


Now we have to write down the TiberCAD input file (see mosfet.tib in Example_4 directory).

1 - Definition of Device Regions

Three tibercad regions are defined: to each of them, one mesh region is associated, namely the Phisical Surfaces substrate, contact and oxide defined in Step 1. However, in general more than one mesh region can be associate to a single tibercad region, if this is convenient.

Region substrate 
density = 1e18
type = acceptor
Region contact
density = 5e19
type = donor
Region oxide
material = SiO2


2 - Definition of Simulation

Now we define a simulation belonging to the Module driftdiffusion

Module driftdiffusion
recombination srh {}
type = field_dependent
low_field_model = doping_dependent

This time, for this simulation we declare two driftdiffusion physical models, respectively about mobility (field dependent) and recombination (srh); see the reference manual for the details.


3 - Definition of Boundary Conditions

The source, drain and gate contacts of the Mosfet device are defined as Boundary condition regions (Contact source , Contact drain,Contact gate ) in the following way:

Contact gate
type = schottky
barrier_height = 3.0
voltage = $Vg
Contact source
type = ohmic
voltage = 0.0
Contact backcontact
type = ohmic
voltage = 0.0
Contact drain
type = ohmic
voltage = $Vd

To each of the Contact, a name is assigned, that is one of the Physical Lines defined in Step 1, which represent the contact regions.
Note that, while source and drain are defined as type= ohmic, gate contact is defined as type = schottky; barrier height = 3.0 specifes the metal/oxide interface barrier and depends on the contact metal workfunction.
Drain voltage is defined as @Vd[0.5] and gate voltage as @Vg[0.0]. This specifies that the value of the voltage will be determined at each moment of the simulation, by the value of the two variables Vd and Vg, which will be assigned in the sweep definition.


4 - Definition of Simulation parameters

We are going to calculate Id/Vd drain current characteristic.
This simulation is performed by executing the input file outputchar.tib in Example_4. In this input file, after including the external file mosfet.tib with the device and Module specifications, we define the simulation to be performed.

Two sweeps are requested for this simulation, that is an external loop on Vg (the gate voltage) and an internal loop on Vd (the drain voltage) for each value of Vg; in this way, the IV drain characteristics for a series of gate biases are obtained in output.

Module sweep
name = sweep_drain
solve = driftdiffusion
variable = $Vd
start = 0.0
stop = 2.0 
steps = 40 
plot_data = true
Module sweep
name = sweep_gate
solve = sweep_drain
variable = $Vg
start = 0.0
stop = 1.5
steps = 6


5 - Definition of Execution parameters

In the Simulation section , we define which simulations to perform and in which order; we set solve = sweep_gate, to execute the external gate voltage sweep sweep_gate which in its turn call the sweep sweep_drain where drain current is calculated for all the chosen drain voltage steps by running dd simulation.

temperature = 300
solve = sweep_gate
resultpath = output_IV_char 
output_format = vtk

Output files with conduction and valence band profiles, quasi-fermi levels, electron and hole density, recombination, electric field and potential (plot = Ec,Ev,.....) will be generated, together (ContactCurrents) with a file with all the calculated values of the drain current at the contacts for each gate bias step (the IV characteristics).


Step 4: Run TiberCAD

Now we can run TiberCAD

tibercad outputchar.tib

After the execution, the output directory contain the simulation results, as defined by the keywords output_format and plot.

driftdiffusion_Vd_2.0_Vg_1_msh.vtu: output for the quantities which have been calculated, e.g. conduction and valence bands, (quasi)fermi levels, electron and hole density and mobility, calculated for the given bias step.
sweep_drain_driftdiffusion_Vg_1_Vd.dat and similar for all the Vg steps: drain current characteristics for each Vg bias.

TiberCAD supports the open source Paraview package for 2D and 3D data visualization and post-processing:

output_format = vtk

Let's see now a very quick guide to Paraview: For any details please see

To plot TiberCAD 2D results, first, open the .vtk file from your working directory.

The name of the loaded files will be shown in the Pipeline browser.


Then, to visualize the content of the file, you should click on the Apply button in the Properties tab in Object Inspector



To select the output variable, go to Display and choose an item from the menu "Color by", e.g. electron _density. Also, in Display section, Scale and legend bar can be setted.