Temperature-Dependent Bands

From Flooxs
Revision as of 19:22, 28 January 2010 by Nrowsey (talk | contribs) (created page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Set Temperature Dependencies - works down to 50K

Put this procedure in your deck and use it to define T-dep solution variables and also pdb values for temperature, thermal voltage, bandgap, electron affinity, conduction band density of states, and valence band density of states (T, Vt, Eg, Chi, Nc, Nv) for each variable in your $matstring. Retrieve pdb values via:

pdbGetDouble $mat $var

Reference: S. M. Sze, Physics of Semiconductor Devices, 2nd ed. (New York: John Wiley & Sons, 1981).

Call this procedure to set the temperature for your T-dep models

proc SetT {temp} {
   global matstring
   puts "\nsetting T to $temp K for $matstring"
   #Calculate Vt
   global k q
   foreach mat $matstring {
       solution add name=T   solve $mat const val = $temp;#use sol for later, Te maybe
       solution add name=Vt  solve $mat const val = "($k*T/$q)";;# Volts (just kT for eV)
       pdbSetDouble $mat T   $temp;#not spatially dependent, so really just a const
       pdbSetDouble $mat Vt  [expr {$k*$temp/$q}]
       #If T=300.0, use simple constants
       if {$temp == 300.0} {
           puts "T is 300.0, just using constants"
           solution add name=Chi solve $mat const val = [pdbGetDouble $mat Chi300]
           solution add name=Eg  solve $mat const val = [pdbGetDouble $mat Eg300]
           solution add name=Nc  solve $mat const val = [pdbGetDouble $mat Nc300]
           solution add name=Nv  solve $mat const val = [pdbGetDouble $mat Nv300]
           pdbSetDouble $mat Chi [pdbGetDouble $mat Chi300]
           pdbSetDouble $mat Eg [pdbGetDouble $mat Eg300]
           pdbSetDouble $mat Nc [pdbGetDouble $mat Nc300]
           pdbSetDouble $mat Nv [pdbGetDouble $mat Nv300]
       } else {
       #else use model
           puts "T is not 300.0, using advanced models for Eg, Nc, Nv"
           foreach var {Chi300 Eg300 Nc300 Nv300 ALPHA BETA} {set $var [pdbGetDouble $mat $var]}
           set Chi_eqn "($Chi300+$ALPHA*((300.0*300.0/(300.0+$BETA))-((T*T)/(2*(T+$BETA)))))"
           set Eg_eqn  "($Eg300+$ALPHA*((300.0*300.0/(300.0+$BETA))-((T*T)/(T+$BETA))))"
           solution add name=Chi solve $mat const val = $Chi_eqn 
           solution add name=Eg  solve $mat const val = $Eg_eqn
           solution add name=Nc  solve $mat const val = "($Nc300*((T/300.0)^(1.5)))"
           solution add name=Nv  solve $mat const val = "($Nv300*((T/300.0)^(1.5)))"
           pdbSetDouble $mat Chi [expr {($Chi300+$ALPHA*((300.0*300.0/(300.0+$BETA))\
                                       -(($temp*$temp)/(2.0*($temp+$BETA)))))}]
           pdbSetDouble $mat Eg  [expr {($Eg300+$ALPHA*((300.0*300.0/(300.0+$BETA))\
                                       -(($temp*$temp)/($temp+$BETA))))}]
           pdbSetDouble $mat Nc  [expr {($Nc300*(pow(($temp/300.0),(1.5))))}]
           pdbSetDouble $mat Nv  [expr {($Nv300*(pow(($temp/300.0),(1.5))))}]
       }
   }

}

warnings

You must define a string listing all the materials you have in your structure, e.g.:

set matstring "Silicon Oxide"

You must define Boltzmann's constant k, and elementary charge q:

set k   1.38066e-23;#J/K  - Boltzmann's constant - this is SI units
set q   1.60218e-19;#C    - elementary unit of charge - this is SI units

You must have the material specific values for Chi, Eg, Nc, and Nv at 300 Kelvin defined in the parameter database:

pdbSetDouble Silicon Chi300 4.17;#room temperature electron affinity	
pdbSetDouble Silicon Eg300  1.08;#room temperature band gap	
pdbSetDouble Silicon Nc300  3.2e19;#room temperature conduction-band density of states
pdbSetDouble Silicon Nv300  1.8e19;#room temperature valence-band density of states

pdbSetDouble Oxide   Chi300 0.97;#V
pdbSetDouble Oxide   Eg300  9.0;#eV
pdbSetDouble Oxide   Nc300  [pdbGetDouble Silicon Nc300];#irrelevant
pdbSetDouble Oxide   Nv300  [pdbGetDouble Silicon Nv300];#irrelevant

You must have the ALPHA and BETA model parameters defined in the pdb for the materials you are using:

pdbSetDouble Silicon ALPHA 4.73e-4;#eV/K
pdbSetDouble Silicon BETA  636.0;#K

pdbSetDouble Oxide ALPHA [pdbGetDouble Silicon ALPHA]
pdbSetDouble Oxide BETA  [pdbGetDouble Silicon BETA]