This example demonstrates a model for diffusion in two regions (silicon and oxide) with a segregation interface condition between the regions. In the silicon region, there is a single diffusion equation,
If there is only a single impurity and if complete activation is assumed, the diffusivity is given by
where
Diffusion in the oxide region is given by
where is a constant.
There is also a transport flux across the silicon/oxide interface which is approximated by
where and
are the concentrations of
on
either side of the interface.
The first few lines alias field names. Although aliasing field names is not necessary, it is useful to create more portable and better documented model descriptions. Some structure file formats (SUPREM) can only represent a fixed set of fields, and it may be necessary to use a strange impurity (e.g. gold) to represent another quantity of interest if that structure file format is used.
# set up some TCL variables to alias SUPREM field names set BinSi BoronInSilicon set BinOx BoronInOxide
The next group of lines defined the parameters that will be used in the model.
# useful constants for certain TCL variable slots in operators and functions set zero 0.0 set one 1.0 # use TCL to calculate Arrhenius relationship for temperature dependence set tempC 1100 set tempK [expr $tempC + 273] set kT [expr 0.0259 * $tempK / 300] proc Arrh {pre Ea} { global tempK global kT return [expr $pre * exp(-$Ea / $kT)] } # These parameters are from Stanford's modelrc. # Diffusivies are in cm^2/s # Activation energies are in eV # Transport coefficients are in cm/s set dbsi0 [Arrh 0.037 3.46] set dbsip [Arrh 0.76 3.46] set dbox [Arrh 3.15e-4 3.53] set Trn [expr -1.66e-7] set Seg 2 # Intrinsic carrier concentration set ni0 3.9e16 set niE 0.605 set niP 1.5 set ni [expr [Arrh $ni0 $niE] * pow($tempK,$niP)]
The functions that will be used are defined next.
# There is only one dopant, and this assumes complete activation. # For multiple dopants, one could query the available dopants and # construct sum functions for the netActive. set netActive [function scaledField -parameters [list $BinSi one]] set carrierConc [function carrierConc -parameters [list $netActive ni]] # Use the two-parameter fermi for boron diffusivity in the silicon. set DBSi [function fermi -parameters [list $carrierConc dbsi0 dbsip zero]]
The steps of defining operators, equations, and systems are combined into a single command. For single equation systems, this is a reasonable approach, but it should probably be broken up for more complicated system.
# The system in the silicon region is a single equation with # diffusion and electric field terms set siliconSystem \ [systemInRegion -name "Fick's in Si" -region Silicon -equations [list \ [equation -parabolic -name "Fick's" -solvesFor $BinSi \ -operators [list \ [operator diffusion -sign 1 -parameters [list $DBSi $BinSi] ] \ [operator quasiFermiEField -sign 1 -parameters [list \ $BinSi $DBSi $carrierConc] ] ] \ ] ] \ ] # The system in the oxide region only has the diffusion term. set oxideSystem \ [systemInRegion -name "Fick's in Ox" -region Oxide -equations [list \ [equation -parabolic -name "Fick's" -solvesFor $BinOx \ -operators [list \ [operator diffusion -sign 1 -parameters [list dbox $BinOx] ] ] \ ] ] \ ] # The interface system has the segregation flux term on both sides # of the interface. set interfaceSystem \ [systemInRegion -name "Segregation" -region {Oxide/Silicon} \ -equations [list \ [equation -name "Flux for Si" -solvesFor $BinSi \ -operators [list \ [operator segregation -sign 1 \ -parameters [list $BinSi $BinOx Trn Seg] ] ] \ ] \ [equation -name "Flux for Ox" -solvesFor $BinOx \ -operators [list \ [operator segregation -sign -1 \ -parameters [list $BinSi $BinOx Trn Seg] ] ] \ ] ] \ ]
The three systems are combined into a model.
# Combine the systems into a model. set modelDiff [model -systems [list \ $siliconSystem $oxideSystem $interfaceSystem ] ]
At this point, there is a complete model description. The model may be applied to a device by loading a structure and using a solve command to run the model as shown below.
# Bring in structure file sstructure -infile implant.str # Set up the parameters for the generalized trapezoid timestepping routine $modelDiff -deltaT 0.1 $modelDiff -relNLTol 1e-10 # tune the SLES linear solver to use ILU preconditioning and a # bi-conjugate gradient squared accelerator $modelDiff -slesPreconditioning ilu -slesAccelerator bcgs # Stop after 1800 (seconds, in this case) $modelDiff -stopTime 1800 # Now, try to solve it. $modelDiff -transientSolve # Save the updated results sstructure -outfile alamode-final-E.str