This example demonstrates a strongly coupled highly reactive model for phosphorus diffusion [4].
The following script shows the model definition.
# This is the Mulvaney & Richardson 5-species kinetic model for Phosphorus
# diffusion.
# set up some TCL variables to alias field names
set V VacancyInSilicon
set I InterstitialInSilicon
set P PhosphorusInSilicon
set E PVpairInSilicon
set F PIpairInSilicon
# parameters used by Mulvaney & Richardson
set Dv 0.6e-8
set Di 6e-8
set De 6e-12
set Df 1.2e-11
set Kfe 6e-13
set Kre 6e2
set Kbi 6e-9
set Kff 6e-13
set Krf 7.2e2
set Vstar 1e14
set Istar 1e14
set SurfConc 3.2e20
# Create each equation
set vacancyEquation [equation -parabolic \
-name "Vacancy Equation" -solvesFor $V \
-operators [list \
[operator diffusion -sign 1 -parameters [list Dv $V] ] \
[operator k1fg_k2h -sign -1 -parameters [list $P $V $E Kfe Kre] ] \
[operator bimole -sign -1 -parameters [list $I $V Kbi Istar Vstar] ] ] ]
set interstitialEquation [equation -parabolic \
-name "Interstitial Equation" -solvesFor $I \
-operators [list \
[operator diffusion -sign 1 -parameters [list Di $I] ] \
[operator k1fg_k2h -sign -1 -parameters [list $P $I $F Kff Krf] ] \
[operator bimole -sign -1 -parameters [list $I $V Kbi Istar Vstar] ] ] ]
set pvEquation [equation -parabolic -name "PV-pairs Equation" -solvesFor $E \
-operators [list \
[operator diffusion -sign 1 -parameters [list De $E] ] \
[operator k1fg_k2h -sign 1 -parameters [list $P $V $E Kfe Kre] ] ] ]
set piEquation [equation -parabolic -name "PI-pairs Equation" -solvesFor $F \
-operators [list \
[operator diffusion -sign 1 -parameters [list Df $F] ] \
[operator k1fg_k2h -sign 1 -parameters [list $P $I $F Kff Krf] ] ] ]
set pEquation [equation -parabolic -name "Phos Equation" -solvesFor $P \
-operators [list \
[operator k1fg_k2h -sign -1 -parameters [list $P $V $E Kfe Kre] ] \
[operator k1fg_k2h -sign -1 -parameters [list $P $I $F Kff Krf] ] ]]
The model will be used to simulate a predeposition step. The boundary conditions needed are dirichlet boundary conditions which fix the values of P, I, and V at the exposed surface.
# Combine the equations into a model with Dirichlet BC
set modelDiff [model \
-systems [list \
[systemInRegion -name "Kinetic Phos" -region Silicon -equations [list \
$vacancyEquation \
$interstitialEquation \
$pvEquation \
$piEquation \
$pEquation ] ] ] \
-fixedBC [list \
[list $V ExposedSilicon] \
[list $P ExposedSilicon] \
[list $I ExposedSilicon] ] ]
Once the structure is read, the values in the structure file are discarded, and the fields are initialized with flat profiles.
# Bring in the structure file structure -infile init.str # Overwrite any initial values in the structure file field $V -setValue $Vstar field $I -setValue $Istar field $E -setValue 1.0 field $F -setValue 1.0 field $P -setValue 1.0 # Set the surface concentration. This must be *after* setting the # interior P concentration. field $P -inRegion ExposedSilicon -setValue $SurfConc # Tune the timestepping/nonlinear algorithms (all of this could be # configured in the call to model above. # Use a relative nonlinear tolerance of $modelDiff -relNLTol 1.0e-9 # and an initial time step of $modelDiff -deltaT 1.0e-4 # never giving up in the nonlinear solve $modelDiff -maxNLSteps 0 # taking an extra step for good measure $modelDiff -extraNLSteps 1 # tune the SLES linear solver to use ILU preconditioning and a # bi-conjugate gradient squared accelerator $modelDiff -slesPreconditioning ilu -slesAccelerator bcgs # Stop after 10 (minutes, in this case) $modelDiff -stopTime 10 # Now, try to solve it. $modelDiff -transientSolve # Spew out the updated results structure -outfile final.str