Support Scripts
Introduction
This serves as my repository and hopefully a future repository for lots of floods device models. Currently only support for Silicon exists but SiGe will be on its way soon.
The general idea behind this repo is to create a more portable way for handling floods equations. Creating a tree structure for equations, solutions, and other key device simulation sections helps to keep code consistent between different but similar projects. For example, we might have a study on strained silicon devices that all require the same governing equations. This equations file should be in the parent director to all devices in this strain study. Particular devices will have their own structure and contact layout. The general idea of sourcing equations for device classes will evolve as the devices need more and more models to solve problems. It is possible that sourcing multiple equations files will become common. Equation sets could even become established.
The procs.tcl file is automatically found sourced by flooxs, loading procedures. A list of the loaded procedures displayed upon sourcing of procs.tcl. For flooxs to find procs.tcl it must be in your current directory or in a parent directory. This allows for the creation of a tree structure for equation sets. All devices in this repository should use procedures sourced from procs.tcl. Subsequent equations.tcl files should be created that utilize specific equations from the procs.tcl. These equations.tcl files can be sourced using the following command: "source [findFile equations.tcl]". The findFile procedure looks for the file in your current directory, then the parent directory, then its parent directory, and so on. This occurs until we hit the system root or find the file. If multiple equations.tcl files exist in the parent directories, the closest one to your current directory is returned.
This repo is split into 3 major sections: Models, Devices, Test. The idea is to have a unified model repository that can be used by tests and device problems. Ideally any model should have a matching test. A test can be qualatative or a test can be pass fail. Pass fail tests should be automated, that way when changes are submitted they can be referenced against the pass fail tests easily. Devices can and should use more than one model depending on the problem they are trying to solve.
Contributing
The addition of any model to this repository is welcome! Be wary of procedure name conflicts, tcl will not warn you and will just override any existing procedure. If you are not sure about a change, a simple grep -r in the Models directory will suffice. Any time a model is added the tests should be run to make sure there are no conflicts with existing models. It would also be great that if you write a model then a corresponding test is written.
Model Procs
Silicon
Silicon::ActiveBoron
Usage
Silicon::ActiveBoron T= Boron=Boron potential=DevPsi
Temperature (T) is in Kelvin.
The Boron concentration (Boron) is assumed to be the alagator field Boron.
The activation potential energy (potential) is optional and defaults to DevPsi.
Returns
alagator string
Description
Computes freeze out of carriers at low temperatures.
Silicon::ActivePhosphorus
Usage
Silicon::ActivePhosphorus T= Phosphorus=Phosphorus potential=DevPsi
Temperature (T) is in Kelvin.
The Phosphorus concentration (Phosphorus) is assumed to be the alagator field Phosphorus.
The activation potential energy (potential) is optional and defaults to DevPsi.
Returns
alagator string
Description
Computes freeze out of carriers at low temperatures.
Silicon::Cummings
Usage
Silicon::Cummings T= Accept=Accept Donor=Donor Elec=Elec Hole=Hole expand
Temperature (T) is in Kelvin.
Donor concentration (Donor) is assumed to be the alagator field Donor and dopant type As.
Accept concentration (Accept) is assumed to be the alagator field Accept.
Hole concentration (Hole) is assumed to be the alagator field Hole.
Elec concentration (Elec) is assumed to be the alagator field Elec.
The expand flag is used to expand the terms into a full string for testing purposes.
Returns
nothing
Description
Dan Cumming’s mobility model, sets a bunch of terms and returns nothing. Behavior is subject to change.
Silicon::ElecHallFactorTemp
Usage
Silicon::ElecHallFactorTemp T=
Temperature (T) is in Kelvin.
Returns
alagator string
Description
Computes temperature dependence of Hall scattering factor.
Silicon::Fischetti
Usage
Silicon::Fischetti
Returns
nothing
Description
Sets deformation parameters according to the Fischetti reference.
Silicon::Fridel
Usage
Silicon::Fridel
Returns
nothing
Description
Sets deformation parameters according to the Fridel reference.
Silicon::KlaassenNAs
Usage
Silicon::KlaassenNAs T= Accept=Accept Donor=Donor Elec=Elec Hole=Hole expand
Temperature (T) is in Kelvin.
Donor concentration (Donor) is assumed to be the alagator field Donor and dopant type As.
Accept concentration (Accept) is assumed to be the alagator field Accept.
Hole concentration (Hole) is assumed to be the alagator field Hole.
Elec concentration (Elec) is assumed to be the alagator field Elec.
The expand flag is used to expand the terms into a full string for testing purposes.
Returns
alagator string
Description
Klaassen, aka Philips, Arsenic Donor Mobility Model.
Silicon::KlaassenNP
Usage
Silicon::KlaassenNP T= Accept=Accept Donor=Donor Elec=Elec Hole=Hole expand
Temperature (T) is in Kelvin.
Donor concentration (Donor) is assumed to be the alagator field Donor and dopant type phosphorus.
Accept concentration (Accept) is assumed to be the alagator field Accept.
Hole concentration (Hole) is assumed to be the alagator field Hole.
Elec concentration (Elec) is assumed to be the alagator field Elec.
The expand flag is used to expand the terms into a full string for testing purposes.
Returns
alagator string
Description
Klaassen, aka Philips, Phosphorus Donor Mobility Model.
Silicon::KlaassenPB
Usage
Silicon::KlaassenPB T= Accept=Accept Donor=Donor Elec=Elec Hole=Hole expand
Temperature (T) is in Kelvin.
Accept concentration (Accept) is assumed to be the alagator field Accept and dopant type boron.
Donor concentration (Donor) is assumed to be the alagator field Donor.
Hole concentration (Hole) is assumed to be the alagator field Hole.
Elec concentration (Elec) is assumed to be the alagator field Elec.
The expand flag is used to expand the terms into a full string for testing purposes.
Returns
alagator string
Description
Klaassen, aka Philips, Phosphorus Donor Mobility Model.
Silicon::Masetti
Usage
Silicon::Masetti T= Accept=Accept Donor=Donor
Temperature (T) is in Kelvin.
Donor concentration (Donor) is assumed to be the alagator field Donor and dopant type As.
Accept concentration (Accept) is assumed to be the alagator field Accept.
Returns
A list of two alagator expressions, the first item is the electron mobility and the second is the hole mobility
Description
Masetti majority carrier mobility model. Great to use for many applications where the majority carrier is the only concern.
Silicon::OldSlotboom
Usage
Silicon::OldSlotboom Donor=Donor Accept=Accept
Temperature (T) is in Kelvin.
The Donor concentration (Donor) is assumed to be the alagator field Donor.
The Acceptor concentration (Accept) is assumed to be the alagator field Accept.
Returns
alagator string
Description
Old Slotboom bandgap narrowing model.
Silicon::SetSiliconStrainParams
Usage
Silicon::SetSiliconStrainParams
Returns
nothing
Description
Sets deformation parameters according to my best fit of data.
Silicon::SetSiliconStrainParams100
Usage
Silicon::SetSiliconStrainParams100
Returns
nothing
Description
Sets deformation parameters according to my best fit of data for 100.
Silicon::SetSiliconStrainParams110
Usage
Silicon::SetSiliconStrainParams110
Returns
nothing
Description
Sets deformation parameters according to my best fit of data for 110.
Silicon::Slotboom
Usage
Silicon::Slotboom Donor=Donor Accept=Accept
Temperature (T) is in Kelvin.
The Donor concentration (Donor) is assumed to be the alagator field Donor.
The Acceptor concentration (Accept) is assumed to be the alagator field Accept.
Returns
alagator string
Description
Slotboom bandgap narrowing model.
Silicon::VanDeWalle
Usage
Silicon::VanDeWalle
Returns
nothing
Description
Sets deformation parameters according to the Van Der Walle reference.
Silicon::vanOberstraetenElec
Usage
Silicon::vanOberstraetenElec T= current= F=DevPsiMag
Temperature (T) is in Kelvin.
Driving force (F) is assumed to be the alagator field set to the gradient of the electrostatic potential called DevPsiMag.
Current magnitude (current) is an alagator field used to compute the magnitude of the current at a location.
Returns
alagator string
Description
Avalanche breakdown for electrons in silicon.
Silicon::vanOberstraetenHole
Usage
Silicon::vanOberstraetenHole T= current= F=DevPsiMag
Temperature (T) is in Kelvin.
Driving force (F) is assumed to be the alagator field set to the gradient of the electrostatic potential called DevPsiMag.
Current magnitude (current) is an alagator field used to compute the magnitude of the current at a location.
Returns
alagator string
Description
Avalanche breakdown for holes in silicon.
AlGaN
AlGaN::ElecMobility
Usage
AlGaN::ElecMobility T=Temp
The temperature (T) defaults to an alagator expression of Temp
Returns
AlGaN electron mobility alagator string
Description
Computes the temperature dependent electron mobility for AlGaN
AlGaN::HoleMobility
Usage
AlGaN::HoleMobility
Returns
AlGaN hole mobility alagator string
Description
Gives a rough AlGaN hole mobility
AlN
AlN::ElecMobility
Usage
AlN::ElecMobility T=Temp
The temperature (T) defaults to an alagator expression of Temp
Returns
AlN electron mobility alagator string
Description
Computes the temperature dependent electron mobility for AlN
AlN::HoleMobility
Usage
AlN::HoleMobility
Returns
AlN hole mobility alagator string
Description
Gives a rough AlN hole mobility
GaN
GaN::ElecMobility
Usage
GaN::ElecMobility T=Temp
The temperature (T) defaults to an alagator expression of Temp
Returns
GaN electron mobility alagator string
Description
Computes the temperature dependent electron mobility for GaN
GaN::HoleMobility
Usage
GaN::HoleMobility
Returns
GaN hole mobility alagator string
Description
Gives a rough GaN hole mobility
SiC
SiC::ElecMobility
Usage
SiC::ElecMobility T=Temp
The temperature (T) defaults to an alagator expression of Temp
Returns
SiC electron mobility alagator string
Description
Computes the temperature dependent electron mobility for SiC
SiC::HoleMobility
Usage
SiC::HoleMobility
Returns
SiC hole mobility alagator string
Description
Gives a rough SiC hole mobility
Generic
Auger
Usage
Auger ni= Elec=Elec Hole=Hole mat=Silicon
The intrensic carrier concentration (ni) is in cm<math display="inline">^{-3}</math>.
Hole concentration (Hole) is optional and defaults to Hole.
Electron concentration (Elec) is optional and defaults to Elec.
Returns
Auger recombination alagator string
Description
Auger recombination
B2BE1
Usage
B2BE1 F=DevPsiMag mat=Silicon
The driving force/field (F) is optional and defaults to DevPsiMag.
Material (mat) is optional and defaults to silicon.
Returns
Simple band to band tunneling alagator string
Description
Simple linear band to band tunneling model.
B2BE1_5
Usage
B2BE1_5 F=DevPsiMag mat=Silicon
The driving force/field (F) is optional and defaults to DevPsiMag.
Material (mat) is optional and defaults to silicon.
Returns
Simple band to band tunneling alagator string
Description
Simple <math display="inline">x^{1.5}</math> power band to band tunneling model.
B2BE2
Usage
B2BE2 F=DevPsiMag mat=Silicon
The driving force/field (F) is optional and defaults to DevPsiMag.
Material (mat) is optional and defaults to silicon.
Returns
Simple band to band tunneling alagator string
Description
Simple quadratic band to band tunneling model.
CondFermiDirac
Usage
CondFermiDirac Ec=E Nc=v T=a quasiFermi=Qfn mat=Silicon
The The band edge (Ec) parameter is in units of eV and is the energy of the band edge statistics are computed on.
The number of carriers at the band edge is N and is in units of cm<math display="inline">^-3</math>.
The temperature T is in units of Kelvin, this can be a value or an alagator expression
The quasi-Fermi level (quasiFermi) parameter is the expression needed to evaluate the quasi-Fermi of this band, default is Qfn.
Material (mat) is optional and defaults to silicon.
Returns
Carrier statistics alagator expression
Description
Computes the valance band energy relative to the vacuum level with the band gap. Affinity must be set for the material in the pdb for this to work
Econd
Usage
Econd Eea=4.05 potential=DevPsi mat=Silicon
The electron affinity (Eea) defaults to the value for silicon of 4.05
Material (mat) is optional and defaults to silicon.
Returns
Conduction band alagator string
Description
Computes the conduction band energy relative to the vacuum level. Affinity must be set for the material in the pdb for this to work
Eval
Usage
Eval Eg=Eg Eea=4.05 potential=DevPsi mat=Silicon
The band gap parameter is in units of eV and must be set to account for any band gap narrowing effects
The electron affinity (Eea) defaults to the value for silicon of 4.05
The electrostatic potential (potential) defaults to the name DevPsi
Material (mat) is optional and defaults to silicon.
Returns
Valance band alagator string
Description
Computes the valance band energy relative to the vacuum level with the band gap. Affinity must be set for the material in the pdb for this to work
FEQFOhmic
Usage
FEQFOhmic name=contact_name hole=Hole elec=Elec ?current?
Contact name (name) is set in the pdb with the equations
The hole concentration (hole) is calculated with the Hole field unles otherwise specified
The elec concentration (elec) is calculated with the Elec field unles otherwise specified
A current source can be turned on with the ‘current’ flag
Returns
nothing
Description
Convienence wrapper for Finite Element Quasi Fermi (FEQF) simulation.
Gate
Usage
Gate name=contact_name wfn=0
Contact name (name) is set in the pdb with the equations
The work function (wfn) is assumed to be zero unless otherwise specified
Returns
nothing
Description
Convienence wrapper for gate contacts.
IntrinsicConc
Usage
IntrinsicConc Eg=Eg Nc=Nc Nv=Nv T=a
The band gap (Eg) parameter is in units of eV and is the energy of the band edge statistics are computed on.
The number of carriers at the band edge is N and is in units of cm<math display="inline">^-3</math>.
The temperature T is in units of Kelvin, this can be a value or an alagator expression
The quasi-Fermi level (quasiFermi) parameter is the expression needed to evaluate the quasi-Fermi of this band, default is Qfn.
Material (mat) is optional and defaults to silicon.
Returns
Carrier statistics alagator expression
Description
Computes the intrinsic carrier concentration according to <math display="inline">\sqrt(N_cN_v)\exp(-\frac{Eg}{2V_t})</math>
Midgap
Usage
Midgap Eg=Eg mat=Silicon
Band gap (Eg) is an alagator expression band gap.
Material (mat) is optional and defaults to silicon.
Returns
Midgap alagator expression
Description
The midgap from conduction and valance band equations to use as an initial condition for the quasiFermi levels
Poisson
Usage
Poisson er= potential=DevPsi Doping=Doping Elec=Elec Hole=Hole
The relative permitivity (er) is unitless.
The doping concentration (Doping) is optional and defaults to Doping.
Hole concentration (Hole) is optional and defaults to Hole.
Electron concentration (Elec) is optional and defaults to Elec.
Returns
Poisson’s equation tunneling alagator string
Description
Simple Poisson’s equation <math display="inline">\epsilon_r\nabla\Phi + N - n + p = 0</math>
SRH
Usage
SRH ni= Elec=Elec Hole=Hole Accept=Accept Donor=Donor mat=Silicon
The intrensic carrier concentration (ni) is in cm<math display="inline">^{-3}</math>.
The donor concentration (Donor) is optional and defaults to Donor.
The acceptor concentration (Accept) is optional and defaults to Accept.
Hole concentration (Hole) is optional and defaults to Hole.
Electron concentration (Elec) is optional and defaults to Elec.
Material (mat) is optional and defaults to silicon.
Returns
Shockley–Read–Hall recombination alagator string
Description
Shockley–Read–Hall recombination.
Schenk
Usage
Schenk Eg= ni= Nc= Nv= T= F=DevPsiMag QfnMag=QfnMag QfpMag=QfpMag Elec=Elec Hole=Hole Accept=Accept Donor=Donor mat=Silicon
The intrensic carrier concentration (ni) is in cm<math display="inline">^{-3}</math>.
The conduction band edge carrier concentration (Nc) is in cm<math display="inline">^{-3}</math>.
The valance band edge carrier concentration (Nv) is in cm<math display="inline">^{-3}</math>.
Temperature (T) is in Kelvin.
The driving force/field (F) is optional and defaults to DevPsiMag.
The magnitude of the hole quasi-Fermi gradient (QfpMag) is optional and defaults to QfpMag.
The magnitude of the electron quasi-Fermi gradient (QfnMag) is optional and defaults to QfnMag.
The donor concentration (Donor) is optional and defaults to Donor.
The acceptor concentration (Accept) is optional and defaults to Accept.
Hole concentration (Hole) is optional and defaults to Hole.
Electron concentration (Elec) is optional and defaults to Elec.
Material (mat) is optional and defaults to silicon.
Returns
Schnek band to band tunneling alagator string
Description
Very complicated band to band tunneling model that incorporates the effects of recombination on band to band tunneling.
Test
Usage
Test -help
Returns
nothing
Description
Simple test proc to test documentation
ValFermiDirac
Usage
ValFermiDirac Ev=E Nv=v quasiFermi=Qfp T=a mat=Silicon
The band edge (Ev) parameter is in units of eV and is the energy of the band edge statistics are computed on.
The number of carriers at the band edge is N and is in units of cm<math display="inline">^-3</math>.
The temperature T is in units of Kelvin, this can be a value or an alagator expression
The quasi-Fermi level (quasiFermi) parameter is the expression needed to evaluate the quasi-Fermi of this band, default is Qfp.
Material (mat) is optional and defaults to silicon.
Returns
Carrier statistics alagator expression
Description
Computes the valance band energy relative to the vacuum level with the band gap. Affinity must be set for the material in the pdb for this to work -help
Utilities
2DTensorListToFlooxsTensor
Usage
2DTensorListToFlooxsTensor TensorList
Returns
Flooxs tensor alagator expression
Description
inputs a 2x2 matrix Tensor/ Matrix list (3 dimensional list where the first two dimensions are the 2D matrix and the 3rd dimension are other matricies). All matricies are multiplied together by component.
3DTensorAdd
Usage
3DTensorAdd TensorList
Returns
TensorList
3DTensorDyadicMult
Usage
3DTensorDyadicMult TensorList
Returns
TensorList
Description
Multiples a tensor list together termwise
3DTensorListToFlooxsTensor
Usage
3DTensorListToFlooxsTensor TensorList
Returns
Flooxs tensor alagator expression
Description
inputs a 3x3 matrix Tensor/ Matrix list (3 dimensional list where the first two dimensions are the 3D matrix and the 3rd dimension are other matricies). All matricies are multiplied together by component.
3DTensorListToFlooxsTensorAdd
Usage
3DTensorListToFlooxsTensorAdd TensorList
Returns
Flooxs tensor alagator expression
Description
inputs a 3x3 matrix Tensor/ Matrix list (3 dimensional list where the first two dimensions are the 3D matrix and the 3rd dimension are other matricies). All matricies are added together by component.
3DTensorTo2D
Usage
3DTensorTo2D TensorList
Returns
TensorList
Description
Convert a 3D tensor to 2D by chopping off the z component.
AddStressVector6
Usage
AddStressVector6 VoigtStressVector VoigtStressVector
Returns
VoigtStressVector
Description
Adds two voigt notation stress vectors together
ClearCache
Usage
ClearCache
Returns
nothing
Description
Clears the cache, just runs rm -f structures/cache/*
tcl::mathfunc::F12
Usage
tcl::mathfunc::F12 value
Returns
Fermi-Dirac integral of this value
Description
Uses Gaussian quadrature to integrate <math display="inline">1/(1+\exp(x))</math> where 0 is the band edge, negative values are below the gap, and positive values are in the band. This function has the same behavior as the alagator expression, just written in tcl.
GetAnisoCarrierTensor
Usage
GetAnisoCarrierTensor CarrierVector
Returns
tensor 3x3 list
GetCarrierTensor
Usage
GetCarrierTensor Carrier
Returns
tensor 3x3 list
GetConductivityTensor
Usage
GetConductivityTensor Mobilities Carriers
Returns
tensor 3x3 list
GetContactSupplies
Usage
GetContactSupplies
Returns
list of contact spplies
Description
gets contact supplies in list format
GetHallTensor
Usage
GetHallTensor Mobilities Carriers HallMobility MagneticField
Returns
tensor 3x3 list
GetMobilityTensor
Usage
GetMobilityTensor MobilityVector
Returns
tensor 3x3 list
KandaFirstElecConductivtyFactorTensor
Usage
KandaFirstElecConductivtyFactorTensor stress={1 2 3 4 5 6} miller=(001)mat=Silicon
Stress vector is required to be in Voigt notation string list format.
Miller indicies (miller) are in (hkl)uvwformat and defaults to 001 wafers with 100 channels.
Material (mat) is optional and defaults to silicon.
Returns
Tensor list containing the relative conductivity changes for holes
Description
Computes the normalized conductivity change for electrons according to the linear piezoresistance model
KandaFirstElecConductivtyFactorTensorHall
Usage
KandaFirstElecConductivtyFactorTensorHall stress={1 2 3 4 5 6} mag={Bx By Bz} miller=(001)mat=Silicon
Stress vector is required to be in Voigt notation string list format.
Magnetic field (mag) is a vector in with x y and z components.
Miller indicies (miller) are in (hkl)uvwformat and defaults to 001 wafers with 100 channels.
Material (mat) is optional and defaults to silicon.
Returns
Tensor list containing the relative conductivity changes for holes
Description
Computes the normalized conductivity and Hall factor changes for electrons according to the linear piezoresistance and piezo-Hall models
KandaFirstHoleConductivtyFactorTensor
Usage
KandaFirstHoleConductivtyFactorTensor stress={1 2 3 4 5 6} miller=(001)mat=Silicon
Stress vector is required to be in Voigt notation string list format.
Miller indicies (miller) are in (hkl)uvwformat and defaults to 001 wafers with 100 channels.
Material (mat) is optional and defaults to silicon.
Returns
Tensor list containing the relative conductivity changes for holes
Description
Computes the normalized conductivity change for holes according to the linear piezoresistance model
Odr
Usage
Odr value
Returns
number
Description
Computest the order of magnitude of a number.
PC
Usage
PC value initial
Returns
number
Description
Computest the percent change from a value and the initial value.
Rnd
Usage
Rnd value
Returns
number
Description
Computest the order of magnitude of a number.
SetContactSupplies
Usage
SetContactSupplies list_of_contact_supplies
Returns
nothing
Description
sets contact supplies by list
TensorAdd
Usage
TensorAdd TensorList
Returns
TensorList
Description
Takes a tensor list and adds them together returning a tensor list of length one
TensorMult
Usage
TensorMult TensorList
Returns
TensorList
Description
Takes a tensor list and multiplies them together returning a tensor list of length one
XBandEdgeShiftStress
Usage
XBandEdgeShiftStress stress={1 2 3 4 5 6} miller=(001)mat=Silicon
Stress vector is required to be in Voigt notation string list format.
Miller indicies (miller) are in (hkl)uvwformat and defaults to 001 wafers with 100 channels.
Material (mat) is optional and defaults to silicon.
Returns
list of 3 conduction band energy band level shifts in eV
Description
Uses deformation potentials to compute X valley shifts on the three principle axies
device_cache
Usage
device_cache init n=? norunonexists
Returns
nothing
Description
runs a cached device solve with init optional and n= specifies the number of device commands to run
initial_solve
Usage
initial_solve potential=DevPsi midgap=Midgap elec=Elec hole=Hole doping=Doping
Unless otherwise specified the solve is performed on the DevPsi solution variable
Midgap is used for the midgap energy unless otherwise specified
Elec is used for the electron concentration (elec) unless otherwise specified
Hole is used for the hole concentration (hole) unless otherwise specified
Doping is used for the doping concentration (doping) unless otherwise specified
Returns
nothing
Description
Performs an initial newton solve on all materials for DevPsi and then runs a device_cache command
linear_ramp
Usage
linear_ramp contact=s start=v end=v step=v fxn=optional_function
Returns
a list of xy values where the x values are the values that were pamped and the y values are what was returned from the optional fxn function.
Description
Does a linear ramp of a contact and calls an optional function on each iteration
search
Usage
search keyword keyword keyword ...
Returns
nothing
Description
Searches all help messages with keywords and prints matching messages. The -all flag is available to print all the messages that match, default is to just print the top 3.
smooth_ramp
Usage
smooth_ramp start end maxinc conName yCalc plotAndStore err
Returns
nothing
Description
start - first x value, end - final x value, maxinc - first step, conName - contact name=___, yCalc - procedure to calculate y, plotAndStore - procedure to plot with passed x value and return associated y values, err - max allowed error (percent)
Devices
Unipolar
Bipolar
Hall