Resistor example 1D - Bulk Equations explanation

From Flooxs
Revision as of 21:35, 26 October 2010 by Nrowsey (talk | contribs) (New page: This page explains the following code snippet from the 1D Resistor Example: Bulk Equations (Poisson, Electron/Hole Continuity Equations) set eqnP "$eps * grad(DevPsi) + $Doping - Elec + ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This page explains the following code snippet from the 1D Resistor Example:

Bulk Equations (Poisson, Electron/Hole Continuity Equations)

set eqnP "$eps * grad(DevPsi) + $Doping - Elec + Hole"
set eqnE "ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)"
set eqnH "ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)"
pdbSetDouble Silicon DevPsi DampValue $Vt
pdbSetString Silicon DevPsi Equation $eqnP
pdbSetString Silicon Elec   Equation $eqnE
pdbSetString Silicon Hole   Equation $eqnH

string setting for easy readability

The first 3 lines define 3 tcl strings that express Poisson's equation (eqnP), and the electron (eqnE) and hole (eqnH) continuity equations with drift-diffusion transport implemented through the Scharfetter-Gummel discretization scheme (sgrad - stands for Scharfetter grad). These are defined this way instead of directly in the "pdbSetString" lines for easy readability.

grad - the FLOOXS Laplace operator

Poisson's equation relates the spatial variation of electrostatic potential to the charge distribution in the device. In Alagator, "grad()" is the Laplace operator, a spatial derivative.

sgrad - the Scharfetter-Gummel grad

Device simulation almost always uses the drift-diffusion model for charged particle transport. One of the most successful discretization schemes (i.e. how to break up the continuous drift-diffusion equation into a discrete representation such that floods can solve it on your discrete grid points) is the Scharfetter-Gummel method. The original paper was published in 1969. Here's the citation:

Scharfetter, D.L.; Gummel, H.K.; , "Large-signal analysis of a silicon Read diode oscillator," Electron 
Devices, IEEE Transactions on , vol.16, no.1, pp. 64- 77, Jan 1969
doi: 10.1109/T-ED.1969.16566
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1475609&isnumber=31655

ddt - the time derivative

In Alagator, "ddt()" is the time-derivative operator.

"Equation" - how to read "Equation" lines

The last 3 lines of this code snippet define the 3 equations necessary to solve for the 3 unknowns (pde solution variables) in the bulk Silicon (as opposed to on a boundary):

pdbSetString Silicon DevPsi Equation $eqnP
pdbSetString Silicon Elec   Equation $eqnE
pdbSetString Silicon Hole   Equation $eqnH

The "$" means the the whole "$eqnP" expression is substitued right there on that line. The following 3 lines say exactly the same thing:

pdbSetString Silicon DevPsi Equation "$eps * grad(DevPsi) + $Doping - Elec + Hole"
pdbSetString Silicon Elec   Equation "ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)"
pdbSetString Silicon Hole   Equation "ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)"

You can read these 3 line as:

"use ["$eps * grad(DevPsi) + $Doping - Elec + Hole" = 0] as the Equation to solve for DevPsi in Silicon"
"use ["ddt(Elec) - ($Emob) * $Vt * sgrad(Elec, DevPsi/$Vt)" = 0] as the Equation to solve for Elec in Silicon"
"use ["ddt(Hole) - ($Hmob) * $Vt * sgrad(Hole, -DevPsi/$Vt)" = 0] as the Equation to solve for Hole in Silicon"

The "DampValue" line is how you set the damping value for the previously discussed damping of the DevPsi solution.

pdb - store "Equation" strings the parameter database

How is floods storing these equations and when does it use them? Floods stores these equation strings in the parameter database, a tree-like structure that has an "Equation" node reserved under each solution variable in each material. For example, here is what a cartoon of the pdb might look like:

When you use the "device" command (later), floods traverses the pdb, finds all the equation strings it needs, discretizes them, builds matrices out of them, and then uses the math packages to solve in the most efficient way.