Defining Your Band Terms: Difference between revisions
Jump to navigation
Jump to search
(created page) |
m (Ec,Ev,Efp,Efn moved to Defining Your Band Terms) |
(No difference)
|
Revision as of 19:52, 28 January 2010
Quick and Easy Method: Boltzmann Statistics Only, Though
Set material constants
set Vt 0.025;# this is kT/q
set Chi_Si <val>;# fill in these values similar to Vt above set Nc_Si <val> set Nv_Si <val>
set Chi_ox <val> set Chi_ox <val> set Chi_ox <val>
Set the band terms for each material (replace $Mat and <mat> for each)
#set Boltzmann and band diagram relations (ref. Taur) solution add name=Ec solve $Mat const val = "(-(DevPsi)-($Chi_<mat>))";#match to variable above, eg. Chi_Si solution add name=Ev solve $Mat const val = "(-(DevPsi)-($Chi_<mat>)-(Eg))" solution add name=nQFL solve $Mat const val = "(Ec+($Vt)*log((Elec+1.0)/($Nc_<mat>)))";#log is approx solution add name=pQFL solve $Mat const val = "(Ev-($Vt)*log((Hole+1.0)/($Nv_<mat>)))";#log is approx
#set equilibrium Hole and Elec, i.e. at zero bias, i.e. QFL=Efm==0, use this for initial guess solution add name=Elec0 solve $Mat const val = "(($Nc_<mat>)*exp(-(Ec-0.0)/($Vt)))" solution add name=Hole0 solve $Mat const val = "(($Nv_<mat>)*exp(-(0.0-(Ev))/($Vt)))"
A More General Method: Can Choose Fermi-Dirac Statistics Here
Add and call this procedure below to avoid typing the above out for each material, and choose FD statistics if you want. It will set the solution variables Ec, Ev, nQFL, pQFL, Elec0, Hole0. Mat can be any material you have added, and Type can be Semiconductor, Insulator, or Metal.
proc BandTerms {Mat Type} { global small Puts "\nCongratulations! You are adding band terms for $Mat" if {[string compare $Type "Semiconductor"] == 0} { Puts "Congratulations! $Mat is a semiconductor" solution add name=Ec solve $Mat const val = "(-(DevPsi)-(Chi))" solution add name=Ev solve $Mat const val = "(-(DevPsi)-(Chi)-(Eg))" if {[pdbGetBoolean $Mat FD] == "0"} { #Boltzmann statistics: gamma=1, quasi fermi levels from Taur (2.11) and (2.12) solution add name=Gamma_n solve $Mat const val = "1.0" solution add name=Gamma_p solve $Mat const val = "1.0" solution add name=nQFL solve $Mat const val = "(Ec+(Vt)*log((Elec+1.0)/(Nc)))";#log is approx solution add name=pQFL solve $Mat const val = "(Ev-(Vt)*log((Hole+1.0)/(Nv)))";#log is approx #set equilibrium Hole and Elec, i.e. at zero bias, i.e. QFL=Efm==0 solution add name=Elec0 solve $Mat const val = "((Nc)*exp(-(Ec-0.0)/(Vt)))" solution add name=Hole0 solve $Mat const val = "((Nv)*exp(-(0.0-(Ev))/(Vt)))" } else { #Fermi-Dirac statistics with Joyce-Dixon power series approx solution add name=nQFL solve $Mat const val = "Ec+Vt*(Eta_n_rev)";#log + error solution add name=pQFL solve $Mat const val = "Ev-Vt*(Eta_p_rev)";#log + error #set equilibrium Hole and Elec, i.e. at zero bias, i.e. QFL=Efm==0 solution add name=Elec0 solve $Mat const val = "(Nc*Gamma_n0*exp(-(Ec-0.0)/Vt))" solution add name=Hole0 solve $Mat const val = "(Nv*Gamma_p0*exp(-(0.0-(Ev))/Vt))" } } if {[string compare $Type "Insulator"] == 0} { Puts "Congratulations! $Mat is an insulator" #quasi fermi levels, Taur (2.11) and (2.12) defn of Ef solution add name=Ec solve $Mat const val = "(-(DevPsi)-(Chi))" solution add name=Ev solve $Mat const val = "(-(DevPsi)-(Chi)-(Eg))" #solution add name=nQFL solve $Mat const val = $small;#meaningless - makes plot look better #solution add name=pQFL solve $Mat const val = $small #if you have a more interesting oxide solution add name=nQFL solve $Mat const val = "(Ec+(Vt)*log((Elec+1.0)/(Nc)))";#log is approx solution add name=pQFL solve $Mat const val = "(Ev-(Vt)*log((Hole+1.0)/(Nv)))";#log is approx solution add name=pQFL solve $Mat const val = $small solution add name=Elec0 solve $Mat const val = $small solution add name=Hole0 solve $Mat const val = $small } if {[string compare $Type "Metal"] == 0} { Puts "Congratulations! $Mat is a Metal!" set WFN [pdbGetDouble $Mat WFN] solution add name=Ec solve $Mat const val = $small;#meaningless - makes plot look better solution add name=Ev solve $Mat const val = $small;#meaningless solution add name=nQFL solve $Mat const val = "(-(DevPsi)-$WFN)" solution add name=pQFL solve $Mat const val = "(-(DevPsi)-$WFN)" solution add name=Elec0 solve $Mat const val = $small solution add name=Hole0 solve $Mat const val = $small } } #Example Calls: BandTerms Silicon Semiconductor BandTerms Oxide Insulator
warnings if you use this procedure
Prior to calling, you must set the solution variables Chi, Eg, Nc, Nv and Vt. For example, use the procedure SetT to do this, e.g.:
SetT 300.0;#this value is the temperature in Kelvin
If you want to use Fermi-Dirac statistics, you must add and call the FermiDirac procedure prior to using this one, e.g.:
FermiDirac
The procedure uses the variable $small as a small ~0, or "epsilon" type value, as 0.0 values do not simulate well. You must specify it, e.g.:
set small 1.0e-10