Defining Your Band Terms: Difference between revisions
Jump to navigation
Jump to search
(created page) |
|||
(One intermediate revision by the same user not shown) | |||
Line 22: | Line 22: | ||
solution add name=Hole0 solve $Mat const val = "(($Nv_<mat>)*exp(-(0.0-(Ev))/($Vt)))" | solution add name=Hole0 solve $Mat const val = "(($Nv_<mat>)*exp(-(0.0-(Ev))/($Vt)))" | ||
= A More General Method | = A More General Method = | ||
Add and call this procedure below to avoid typing the above out for each material | Add and call this procedure below to avoid typing the above out for each material. This procedure also allows the user to choose between FD vs MB statistics. The proc defines the const 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} { | proc BandTerms {Mat Type} { | ||
global small | global small smaller | ||
set sm $smaller | |||
Puts "\nCongratulations! You are adding band terms for $Mat" | Puts "\nCongratulations! You are adding band terms for $Mat" | ||
if {[string compare $Type "Semiconductor"] == 0} { | if {[string compare $Type "Semiconductor"] == 0} { | ||
Puts "Congratulations! $Mat is a | 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+$sm)/(Nc)))"; | |||
solution add name=pQFL solve $Mat const val = "(Ev-(Vt)*log((Hole+$sm)/(Nv)))"; | |||
#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)))" | 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} { | if {[string compare $Type "Insulator"] == 0} { | ||
Puts "Congratulations! $Mat is an | Puts "Congratulations! $Mat is an Insulator" | ||
#quasi fermi levels, Taur (2.11) and (2.12) defn of Ef | #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 anyway | |||
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 | solution add name=Hole0 solve $Mat const val = $small | ||
} | } | ||
if {[string compare $Type "Metal"] == 0} { | 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 - plot looks 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 | |||
} | } | ||
} | } | ||
Line 79: | Line 76: | ||
BandTerms Oxide Insulator | BandTerms Oxide Insulator | ||
==== | ==== Notes ==== | ||
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.: | 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 | SetT 300.0;#this value is the temperature in Kelvin |
Latest revision as of 20:22, 17 August 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
Add and call this procedure below to avoid typing the above out for each material. This procedure also allows the user to choose between FD vs MB statistics. The proc defines the const 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 smaller set sm $smaller 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+$sm)/(Nc)))"; solution add name=pQFL solve $Mat const val = "(Ev-(Vt)*log((Hole+$sm)/(Nv)))"; #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 anyway 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 - plot looks 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
Notes
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