Initial Guess: Difference between revisions

From Flooxs
Jump to navigation Jump to search
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Procedures ==
= Common Procedures =
Initial guess assumes charge neutrality
Initial guess assumes charge neutrality


Line 5: Line 5:
  proc InitialGuess {Doping} {  
  proc InitialGuess {Doping} {  
  sel z= {(Doping>0.0)  
  sel z= {(Doping>0.0)  
  ?  ( 0.025*log( (Doping+1.0e10) / 1.0e10))
  ?  ( 0.025*log( (Doping+1.0e-10) / 1.0e10))
  :  (-0.025*log(-(Doping+1.0e10) / 1.0e10))} name = DevPsi
  :  (-0.025*log(-(Doping+1.0e-10) / 1.0e10))} name = DevPsi
  sel z=1.0e10*exp(DevPsi/0.025) name=Elec
  sel z=1.0e10*exp(DevPsi/0.025) name=Elec
  sel z=1.0e10*exp(-DevPsi/0.025) name=Hole
  sel z=1.0e10*exp(-DevPsi/0.025) name=Hole
Line 16: Line 16:
  proc InitialGuessQF {Doping} {
  proc InitialGuessQF {Doping} {
  sel z= {(Doping>0.0)  
  sel z= {(Doping>0.0)  
  ?  ( 0.025*log( (Doping+1.0e10) / 1.0e10))
  ?  ( 0.025*log( (Doping+1.0e-10) / 1.0e10))
  :  (-0.025*log(-(Doping+1.0e10) / 1.0e10))} name = DevPsi store
  :  (-0.025*log(-(Doping+1.0e-10) / 1.0e10))} name = DevPsi store
  sel z=1.0e10*exp((DevPsi)/0.025) name=Elec store
  sel z=1.0e10*exp((DevPsi)/0.025) name=Elec store
  sel z=1.0e10*exp((-DevPsi)/0.025) name=Hole store
  sel z=1.0e10*exp((-DevPsi)/0.025) name=Hole store
Line 27: Line 27:
  proc InitialGuessSB {Doping} {
  proc InitialGuessSB {Doping} {
  sel z= {(Doping>0.0)  
  sel z= {(Doping>0.0)  
  ?  ( 0.025*log( (Doping+1.0e10) / 1.0e10))
  ?  ( 0.025*log( (Doping+1.0e-10) / 1.0e10))
  :  (-0.025*log(-(Doping+1.0e10) / 1.0e10))} name = DevPsi store
  :  (-0.025*log(-(Doping+1.0e-10) / 1.0e10))} name = DevPsi store
  sel z=1.0e10*exp((DevPsi)/0.025) name=Elec  
  sel z=1.0e10*exp((DevPsi)/0.025) name=Elec  
  sel z=1.0e10*exp((-DevPsi)/0.025) name=Hole  
  sel z=1.0e10*exp((-DevPsi)/0.025) name=Hole  
Line 34: Line 34:
  sel z=1.0 name=SBp store
  sel z=1.0 name=SBp store
  }
  }
= Poisson-Only Solve as Initial Guess First =
 
= Poisson-Only Solve as Initial Guess =
Sometimes it is very hard to get convergence on your first try. For example, when Elec and Hole concentrations are very low. In this case, you can improve your initial guess by doing a Poisson-Only solve first (a DevPsi only solve). Then you can use your improved DevPsi solution as an initial guess to your full solve:
Sometimes it is very hard to get convergence on your first try. For example, when Elec and Hole concentrations are very low. In this case, you can improve your initial guess by doing a Poisson-Only solve first (a DevPsi only solve). Then you can use your improved DevPsi solution as an initial guess to your full solve:
  #===================================ponly===========================================#
  #===================================ponly===========================================#
#----------------------
  # Solution Variables
  # Solution Variables
#----------------------
  solution add name=DevPsi pde  solve negative damp;#electrostatic potential (Device Psi)
  solution add name=DevPsi pde  solve negative damp;#electrostatic potential (Device Psi)
  solution add name=Elec  const solve val = "(Elec0)";# electron concentration /cm^3
  solution add name=Elec  const solve val = "(Elec0)";# electron concentration /cm^3
  solution add name=Hole  const solve val = "(Hole0)";# hole concentration /cm^3
  solution add name=Hole  const solve val = "(Hole0)";# hole concentration /cm^3
  pdbSetBoolean PoissonOnly 0
  pdbSetBoolean PoissonOnly 1;#this flag controls if statements in supporting procedures
 
   
  #------------------
  # Bulk Equations
  # Bulk Equations
#------------------
  AddPoisson Oxide
  AddPoisson Oxide
  AddPoisson Silicon
  AddPoisson Silicon
#Band Terms
  BandTerms Oxide    Semiconductor;# sets Ec, Ev, nQFL, pQFL, Elec0, Hole0
  BandTerms Oxide    Semiconductor;# sets Ec, Ev, nQFL, pQFL, Elec0, Hole0
  BandTerms Silicon  Semiconductor
  BandTerms Silicon  Semiconductor
#Add in Ionized Impurities
  SetDoping  
  SetDoping  
   
   
#Continuity Equations
  #Poisson only - no cont. eqns - just add charge to Poisson in Mats that have charge
  #Poisson only - no cont. eqns - just add charge to Poisson in Mats that have charge
  AddCharge Oxide  "-Elec+Hole"
  AddCharge Oxide  "-Elec+Hole"
  AddCharge Silicon "-Elec+Hole"  
  AddCharge Silicon "-Elec+Hole"  
   
   
#----------------------------------------------
  # Boundary Conditions
  # Boundary Conditions
#----------------------------------------------
  solution name=DevPsi continuous  
  solution name=DevPsi continuous  
   
   
#-------------------------------------
  # Contact Equations
  # Contact Equations
#-------------------------------------
  MetalContact top Aluminum
  MetalContact top Aluminum
  OhmicContact bot Silicon Ntype  
  OhmicContact bot Silicon Ntype  
   
   
#-------------------------------------
  # Initial Conditions - bias the Contacts to 0  
  # Initial Conditions
contact name=top voltage supply=0.0  
#-------------------------------------
contact name=bot voltage supply=0.0
#Bias the Contacts to 0  
contact name=top voltage supply=0.0  
  #Initial guess
contact name=bot voltage supply=0.0
  #initial guess
  puts "You are Guessing"
  puts "You are Guessing"
  sel z=-(4.8) name=DevPsi  
  sel z=-(4.8) name=DevPsi;#this value may be different depending on where your "0" is
   
   
#-------------------------------------
  # Poisson-Only Solution (Finally we SS Solve)
  # Poisson-Only Solution (Finally we SS Solve)
#-------------------------------------
  device init  
  device init  
   
   
#------------------------------------
  # Plots
  # Plots
  #------------------------------------
  PlotBands x.v=0 y.v=0
#PlotBands x.v=0 y.v=0
  PlotConc ponly  
  # PlotConc ponly  
    
    
  #end of Poisson only
  #end of Poisson only
  pdbSetBoolean PoissonOnly 0
  pdbSetBoolean PoissonOnly 0;#turn off ponly flag
}
 
  #========================zerobias================================#
  #========================zerobias================================#
#----------------------------------------
  # Solution Variables - change all to pde
  # Solution Variables - change all to pde
#----------------------------------------
  solution name=DevPsi   pde  solve negative damp;#electrostatic potential (Device Psi)
  solution name=DevPsi pde  solve negative damp;#electrostatic potential (Device Psi)
  solution name=Elec pde  solve !negative;# electron concentration /cm^3
  solution name=Elec pde  solve !negative;# electron concentration /cm^3
  solution name=Hole pde  solve !negative;# hole concentration /cm^3  
  solution name=Hole pde  solve !negative;# hole concentration /cm^3  
   
   
#------------------
  # Bulk Equations
  # Bulk Equations
#------------------
#Poisson - DevPsi Equation
  AddPoisson Oxide
  AddPoisson Oxide
  AddPoisson Silicon
  AddPoisson Silicon
#Band Terms
  BandTerms Oxide    Semiconductor;# sets Ec, Ev, nQFL, pQFL
  BandTerms Oxide    Semiconductor;# sets Ec, Ev, nQFL, pQFL
  BandTerms Silicon  Semiconductor
  BandTerms Silicon  Semiconductor
#Add in Ionized Impurities
  SetDoping  
  SetDoping  
   
   
#Continuity Equations
  AddSpecies Hole Oxide MOB 1.0e-5 +
  AddSpecies Hole Oxide MOB 1.0e-5 +
  AddSpecies Elec Oxide MOB 20.0 -
  AddSpecies Elec Oxide MOB 20.0 -
Line 124: Line 98:
  AddSpecies Elec Silicon MOB 300.0 -  
  AddSpecies Elec Silicon MOB 300.0 -  
   
   
#----------------------------------------------
  # Boundary Conditions
  # Boundary Conditions
#----------------------------------------------
  solution name=DevPsi continuous  
  solution name=DevPsi continuous  
   
   
#-------------------------------------
  # Contact Equations
  # Contact Equations
  #-------------------------------------
  MetalContact top Aluminum  
MetalContact top Aluminum  
OhmicContact bot Silicon Ntype
OhmicContact bot Silicon Ntype
   
   
  #Initial Guess  
  #Initial Guess  
Line 146: Line 116:
   
   
  struct outf=init.str
  struct outf=init.str
=== supporting procedures ===
* see [[Poisson's_Equation#A_More_General_Approach]] for AddPoisson and AddCharge
* see [[Defining_Your_Band_Terms#A_More_General_Method]] for BandTerms
* see [[Adding_Ionized_Dopants#support_procedures]] for SetDoping
* see [[General_Equation_Builder]] for AddSpecies
* see [[Device_Models#Contact_Physics]] for MetalContact and OhmicContact
* see [[Plotting_Examples_-_new_short_version]] for PlotBands and PlotConc

Latest revision as of 00:08, 11 January 2011

Common Procedures

Initial guess assumes charge neutrality

For Scharfetter-Gummel (Elec Hole DevPsi) solution

proc InitialGuess {Doping} { 
	sel z= {(Doping>0.0) 
		?  ( 0.025*log( (Doping+1.0e-10) / 1.0e10))
		:  (-0.025*log(-(Doping+1.0e-10) / 1.0e10))} name = DevPsi
	sel z=1.0e10*exp(DevPsi/0.025) name=Elec
	sel z=1.0e10*exp(-DevPsi/0.025) name=Hole
	sel z=0.0 name=Qfn
	sel z=0.0 name=Qfp
} 

For Quasi-Fermi Solution (Qfn Qfp DevPsi) solution

proc InitialGuessQF {Doping} {
	sel z= {(Doping>0.0) 
		?  ( 0.025*log( (Doping+1.0e-10) / 1.0e10))
		:  (-0.025*log(-(Doping+1.0e-10) / 1.0e10))} name = DevPsi store
	sel z=1.0e10*exp((DevPsi)/0.025) name=Elec store
	sel z=1.0e10*exp((-DevPsi)/0.025) name=Hole store
	sel z=0.0 name=Qfn store
	sel z=0.0 name=Qfp store
}

For Slotboom (SBn SBp DevPsi) solution

proc InitialGuessSB {Doping} {
	sel z= {(Doping>0.0) 
		?  ( 0.025*log( (Doping+1.0e-10) / 1.0e10))
		:  (-0.025*log(-(Doping+1.0e-10) / 1.0e10))} name = DevPsi store
	sel z=1.0e10*exp((DevPsi)/0.025) name=Elec 
	sel z=1.0e10*exp((-DevPsi)/0.025) name=Hole 
	sel z=1.0 name=SBn store
	sel z=1.0 name=SBp store
}

Poisson-Only Solve as Initial Guess

Sometimes it is very hard to get convergence on your first try. For example, when Elec and Hole concentrations are very low. In this case, you can improve your initial guess by doing a Poisson-Only solve first (a DevPsi only solve). Then you can use your improved DevPsi solution as an initial guess to your full solve:

#===================================ponly===========================================#
# Solution Variables
solution add name=DevPsi pde   solve negative damp;#electrostatic potential (Device Psi)
solution add name=Elec   const solve val = "(Elec0)";# electron concentration /cm^3
solution add name=Hole   const solve val = "(Hole0)";# hole concentration /cm^3
pdbSetBoolean PoissonOnly 1;#this flag controls if statements in supporting procedures

# Bulk Equations
AddPoisson 	Oxide
AddPoisson	Silicon
BandTerms Oxide     Semiconductor;# sets Ec, Ev, nQFL, pQFL, Elec0, Hole0
BandTerms Silicon   Semiconductor
SetDoping 

#Poisson only - no cont. eqns - just add charge to Poisson in Mats that have charge
AddCharge Oxide   "-Elec+Hole"
AddCharge Silicon "-Elec+Hole" 

# Boundary Conditions
solution name=DevPsi continuous 

# Contact Equations
MetalContact top Aluminum
OhmicContact bot Silicon Ntype 

# Initial Conditions - bias the Contacts to 0 
contact name=top voltage supply=0.0 
contact name=bot voltage supply=0.0

#Initial guess
puts "You are Guessing"
sel z=-(4.8) name=DevPsi;#this value may be different depending on where your "0" is

# Poisson-Only Solution (Finally we SS Solve)
device init 

# Plots
PlotBands x.v=0 y.v=0
PlotConc ponly 
 
#end of Poisson only
pdbSetBoolean PoissonOnly 0;#turn off ponly flag
 	
#========================zerobias================================#
# Solution Variables - change all to pde
solution name=DevPsi    pde   solve negative damp;#electrostatic potential (Device Psi)
solution name=Elec	 pde   solve !negative;# electron concentration /cm^3
solution name=Hole	 pde   solve !negative;# hole concentration /cm^3 

# Bulk Equations
AddPoisson 	Oxide
AddPoisson	Silicon
BandTerms Oxide     Semiconductor;# sets Ec, Ev, nQFL, pQFL
BandTerms Silicon   Semiconductor
SetDoping 

AddSpecies	Hole		Oxide		MOB	1.0e-5	+
AddSpecies	Elec		Oxide		MOB	20.0	-
AddSpecies	Hole		Silicon		MOB	150.0	+
AddSpecies	Elec		Silicon		MOB	300.0	- 

# Boundary Conditions
solution name=DevPsi continuous 

# Contact Equations
MetalContact top Aluminum 
OhmicContact bot Silicon Ntype

#Initial Guess 
    #use DevPsi from ponly solve above
    sel z=Elec0 name=Elec;#is a fcn of DevPsi
    sel z=Hole0 name=Hole;#is a fcn of DevPsi
pdbSetDouble Math iterLimit 50;#give SS a chance
device

#PlotBands x.v=0 y.v=0
#PlotConc zerobias

struct outf=init.str

supporting procedures