In this tutorial we will see how to perform a thermal-driftdiffusion self-consistent simulation.
We include the Seebeck and Peltier effects.
In order to execute correctly the example you should have the following files in the working directory:
tut_09.tib: input file for TiberCAD
tut_09.msh : mesh file produced by GMSH from the script tut_09.geo.
The heat conduction through the environment is modelled by adding an air region all around the diode.
We assume that far from the junction the system is in thermal equilibrium with a thermal bath at 300 K.
The heat dissipation through the substrate is taken into acount by introducing a
thermal surface resistance.
Furthermore, we rely on the cylindrical symmetry with respect to the axis growth and consider only a 2D slice of the system. In this way we simulate a 3D device by performing a 2D simulation (with much less computational time).
The mesh corresponding to the whole system (diode plus air region) is shown below.
$Device
{
Region n_side
{
material = Si
doping = 1e18 doping_type = donor
}
Region p_side
{
material = Si
doping = 1e19 doping_type = acceptor
}
Region air
{
material = Air
}
} Region n-side corresponds to the n-doped region situated at the bottom of the device, while the region p-side refers to the top p-doped region. Air is modelled with Region Air (mesh region 3 in 2Ddiode.geo ).
The drift diffusion simulation is performed only over the device domain (excluding the Air region). Therefore, in option subsection
we have to indicate physical_regions = (n_side,p_side) .
options
{
simulation_name = dd
physical_regions = (n_side,p_side)
}The non-radiative recombination model used is the Shockley-Reed-Hall model. The related physical model section looks as
physical_model recombination
{
model = srh
}The mobility models used for both electrons and holes are doping dependent.
These models can be include with the notation
physical_model electron_mobility
{
model = doping_dependent
}
physical_model hole_mobility
{
model = doping_dependent
} The thermoelectric power model used is named diffusivity_model (see the reference manual for detail) and we can include it by the notation
physical_model thermoelectric_power
{
model = diffusivity_model
} The default is
.
Direct bias applied to the diode is obtained by using the following boundary conditions
BC_Regions
{
BC_Region anode
{
type = ohmic
voltage = @Vb[0.0]
}
BC_Region cathode
{
type = ohmic
}
} As for the thermal model, we start from option subsection.
Unlike the drift diffusion case, the thermal simulation has to be performed over the whole simulation domain (including the Air region). We can refer to all regions simply by writing all .
model thermal
{
options
{
simulation_name = tt
physical_regions = all
} The connection with the drift diffusion simulation is specified in physical_model heat_source (drift_diffusion_simulation = dd). Here we define the heat source model (model = drift_diffusion_dissipation).
physical_model heat_source
{
model = drift_diffusion_dissipation
drift_diffusion_simulation = dd
}
The dirichlet boundary condition is set with the type heat_reservoir and the temperature must be specified with temperature = 300.
The thermal surface resistance is associated to thermal_surface_resistance type. Its value is given by r_surf.
The default boundary conditions fix the normal thermal flux to zero.
BC_Region reservoir
{
type = heat_reservoir
temperature = 300
}
BC_Region dissipator
{
r_surf = 0.5
type = thermal_surface_resistance
temperature = 300
}
$Solver
{
driftdiffusion
{
nonlin_max_it = 25
nonlin_step_tol = 1e-5
ls_max_step = 2
} The selfconsistent simulation solves the thermal and the drift diffusion simulations (named tt and dd respectively) in a self consistent way.
Monitor = true allows to visualize convergence flow.
selfconsistent
{
flavour = relaxation
simulations = (dd,tt)
abs_tolerance = 1e-5
monitor = true
}
The sweep section runs the selfconsistent simulation for each anode bias step.
sweep
{
simulation = selfconsistent
variable = Vb
start = 0.0
stop = 1.0
steps = 10
plot_data = true
plotvariable = current
}
}
In order to make the drift-diffusion simulation use the results of the chosen thermal simulation model, we write thermal_simulation = tt .
$Physics
{
driftdiffusion
{
statistics = FD
thermal_simulation = tt
}
}
$Simulation
{
meshfile = tut_09.msh
dimension = 2
temperature = 300
solve = sweep
resultpath = output_tut9
symmetry = cylindrical
output_format = vtk
plot = (Ec, Ev, QFermi_e, QFermi_h, eDensity, hDensity, eCurrent, hCurrent, Current, eMob, hMob, current, NetRecombination, Pn, Pp, thermal)
} We select a 2D dimension for our simulation (dimension = 2), but then we specify the cylindrical symmetry with
symmetry = cylindrical
Since we have to solve a sweep simulation, we write solve = sweep .
In the plot statement, through the keyword thermal we send in output all the thermal quantities, i.e the temperature, the heat sources and the power fluxes.
All results displayed are calculated at 1.2 V bias value.
Temperature map (tt_nodal.dat) and thermal flux (tt_elemental.dat):
Heat sources (tt_elemental.dat) :
Thermoelectric power (dd_nodal.dat) :
| Attachment | Size |
|---|---|
| tut_09.geo | 2.11 KB |
| tut_09.msh | 411.14 KB |
| tut_09.tib | 2.43 KB |