Main Page | Directories | File List | File Members

montecarlo_setup.h

Go to the documentation of this file.
00001 /*
00002    This file belongs to Aeneas. Aeneas is a GNU package released under GPL 3 license.
00003    This code is a simulator for Submicron 3D Semiconductor Devices. 
00004    It implements the Monte Carlo transport in 3D tetrahedra meshes
00005    for the simulation of the semiclassical Boltzmann equation for both electrons.
00006    It also includes all the relevant quantum effects for nanodevices.
00007 
00008    Copyright (C) 2007 Jean Michel Sellier <sellier@dmi.unict.it>
00009  
00010    This program is free software; you can redistribute it and/or modify
00011    it under the terms of the GNU General Public License as published by
00012    the Free Software Foundation; either version 3, or (at your option)
00013    any later version.
00014 
00015    This program is distributed in the hope that it will be useful,
00016    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018    GNU General Public License for more details.
00019 
00020    You should have received a copy of the GNU General Public License
00021    along with this program. If not, see <http://www.gnu.org/licenses/>.
00022 */
00023 
00024 // Created on : 10 june 2007, Siracusa, Jean Michel Sellier
00025 // Last modified : 16 august 2007, Siracusa, Jean Michel Sellier
00026 
00027 // calculation of some paraters + various scattering rates for
00028 // all the elements implemented in this code
00029 
00030 void montecarlo_setup(int material)
00031 {
00032  double wo,no,dos,aco,oge[7],oga[7];
00033 // double ogeg,ogag;
00034  double dos1,dos2,am1,am2,cl,deq,dij;
00035  double hwe,hwij,wij,we,ne,nij;
00036  double poe,poa,ope,opa,eqe,eqa,qmin,qmax;
00037  double initialenergy,sei,finalenergy,sef;
00038  double eps,epf,ep,bimp,cimp,qd;
00039  double ak,qq,wk;
00040  int ie,i;
00041  int z2=4;
00042 
00043 // These definitions are valid for every material
00044  BKTQ=KB*TL/Q; // in eV
00045  QH=Q/HBAR;
00046 
00047 // Material with 2 valleys
00048 // #######################
00049  if(NOVALLEY[material]==2){
00050 // Effective mass for the GAMMA and L-Valley, respectively
00051   am1=MSTAR[material][1]*M;
00052   am2=MSTAR[material][2]*M;
00053 // Energy minima of bands
00054   EC[material][1]=EMIN[material][1];
00055   EC[material][2]=EMIN[material][2];
00056 // Energy gap
00057 //  eg=EG[material];
00058   eps=EPSR[material]*EPS0;
00059   epf=EPF[material]*EPS0;
00060   ep=1./(1./epf-1./eps);
00061 
00062 // Parameters for Phonon Scattering
00063   cl=RHO[material]*pow(UL[material],2.);
00064   deq=dij=DTK[material][0]*Q;
00065   hwe=hwij=HWO[material][0];
00066 // Non-parabolicity of GAMMA and L bands
00067   AF[material][1]=alphaK[material][1];
00068   AF[material][2]=alphaK[material][2];
00069 
00070   SMH[material][1]=sqrt(2.*am1*Q)/HBAR;
00071   SMH[material][2]=sqrt(2.*am2*Q)/HBAR;
00072   HHM[material][1]=HBAR*HBAR/(2.*am1*Q);
00073   HHM[material][2]=HBAR*HBAR/(2.*am2*Q);
00074   HM[material][1]=HBAR/am1;
00075   HM[material][2]=HBAR/am2;
00076 
00077   wo=HWO[material][0]*Q/HBAR;
00078   wij=hwij*Q/HBAR;
00079   we=hwe*Q/HBAR;
00080 
00081   no=1./(exp(HWO[material][0]/BKTQ)-1.);
00082   nij=1./(exp(hwij/BKTQ)-1.);
00083   ne=1./(exp(hwe/BKTQ)-1.);
00084 
00085   dos1=pow(sqrt(2.*am1*Q)/HBAR,3.)/pow(2.*PI,2.);
00086   dos2=pow(sqrt(2.*am2*Q)/HBAR,3.)/pow(2.*PI,2.);
00087 
00088   poe=Q/8./PI/ep*Q*wo*(no+1.);
00089   poa=poe*no/(1.+no);
00090   aco=2.*PI*DA[material]/Q*DA[material]*BKTQ/HBAR*Q/cl;
00091   ope=PI*dij/wij*dij/RHO[material]/Q*(nij+1.);
00092   opa=ope*nij/(1.+nij);
00093   eqe=PI*deq/we*deq/RHO[material]/Q*(ne+1.);
00094   eqa=eqe*ne/(1.+ne);
00095 
00096 // Parameters for impurity scatterings
00097   cimp=CIMP; // <--- impurity concentration
00098   qd=sqrt(Q*cimp/BKTQ/eps);
00099   QD2=qd*qd;
00100   bimp=2.*PI*cimp*Q*Q/HBAR*Q/eps/eps;
00101 
00102 // Calculation of scattering rates
00103   for(ie=1;ie<=DIME;ie++){
00104     initialenergy=DE*((double)(ie));
00105     sei=sqrt(initialenergy);
00106 // GAMMA-valley
00107 // ============
00108 // Polar optical phonon
00109 // Emission - Parabolic
00110     finalenergy=initialenergy-HWO[material][0];
00111     if(finalenergy>0.){
00112      sef=sqrt(finalenergy);
00113      qmax=sef+sei;
00114      qmin=sei-sef;
00115      SWK[material][1][1][ie]=poe*SMH[material][1]*sei/initialenergy/Q*log(qmax/qmin);
00116     }
00117     else SWK[material][1][1][ie]=0.;
00118 // Absorption - Parabolic
00119     finalenergy=initialenergy+HWO[material][0];
00120     sef=sqrt(finalenergy);
00121     qmax=sef+sei;
00122     qmin=sef-sei;
00123     SWK[material][1][2][ie]=SWK[material][1][1][ie]
00124                  +poa*SMH[material][1]*sei/initialenergy/Q*log(qmax/qmin);
00125 // Emission
00126     finalenergy=initialenergy-hwij+EC[material][1]-EC[material][2];
00127     if(finalenergy>0.){
00128      sef=sqrt(finalenergy*(1.+AF[material][2]*finalenergy));
00129      SWK[material][1][3][ie]=SWK[material][1][2][ie]+z2*ope*sef*dos2*
00130                          (1.+2.*AF[material][2]*finalenergy);
00131     }
00132     else SWK[material][1][3][ie]=SWK[material][1][2][ie];
00133 // Absorption
00134     finalenergy=initialenergy+hwij+EC[material][1]-EC[material][2];
00135     if(finalenergy>0.){
00136      sef=sqrt(finalenergy*(1.+AF[material][2]*finalenergy));
00137      SWK[material][1][4][ie]=SWK[material][1][3][ie]+z2*opa*sef*dos2*
00138                          (1.+2.*AF[material][2]*finalenergy);
00139     }
00140     else SWK[material][1][4][ie]=SWK[material][1][3][ie];
00141 // Acoustic Phonon
00142     finalenergy=initialenergy;
00143     sef=sqrt(finalenergy*(1.+AF[material][1]*finalenergy));
00144     SWK[material][1][5][ie]=SWK[material][1][4][ie]+aco*sef*dos1*
00145                         (1.+2.*AF[material][1]*finalenergy);
00146 // Impurity scattering
00147     finalenergy=initialenergy;
00148     sef=sqrt(finalenergy*(1.+AF[material][1]*finalenergy));
00149     ak=SMH[material][1]*sef;
00150     qq=QD2*(4.*ak*ak+QD2);
00151     wk=bimp/qq*sef*dos1*(1.+2.*AF[material][1]*finalenergy);
00152     if(wk>1.e14) wk=1.e14;
00153     SWK[material][1][6][ie]=SWK[material][1][5][ie]+wk;
00154 
00155 // Impact Ionization
00156     wk=PII[material]*pow((initialenergy-ETH[material])/ETH[material],2.);
00157     if(IIFLAG==YES) SWK[material][1][7][ie]=SWK[material][1][6][ie]+wk;
00158     if(IIFLAG==NO) SWK[material][1][7][ie]=SWK[material][1][6][ie];
00159     
00160 // L-valley
00161 // ========
00162 // Polar optical phonon
00163 // Emission
00164     finalenergy=initialenergy-HWO[material][0];
00165     if(finalenergy>0.){
00166       sef=sqrt(finalenergy);
00167       qmax=sef+sei;
00168       qmin=sei-sef;
00169       SWK[material][2][1][ie]=poe*SMH[material][2]*sei/initialenergy/Q*log(qmax/qmin);
00170     }
00171     else SWK[material][2][1][ie]=0.;
00172 // Absorption
00173     finalenergy=initialenergy+HWO[material][0];
00174     sef=sqrt(finalenergy);
00175     qmax=sef+sei;
00176     qmin=sef-sei;
00177     SWK[material][2][2][ie]=SWK[material][2][1][ie]
00178                  +poa*SMH[material][2]*sei/initialenergy/Q*log(qmax/qmin);
00179 // Non-polar optical phonon
00180 // Emission
00181     finalenergy=initialenergy-hwe;
00182     if(finalenergy>0.){
00183       sef=sqrt(finalenergy*(1.+AF[material][2]*finalenergy));
00184       SWK[material][2][3][ie]=SWK[material][2][2][ie]
00185                    +(z2-1.)*eqe*sef*dos2*(1.+2.*AF[material][2]*finalenergy);
00186     }
00187     else SWK[material][2][3][ie]=SWK[material][2][2][ie];
00188 // Absorption
00189     finalenergy=initialenergy+hwe;
00190     sef=sqrt(finalenergy*(1.+AF[material][2]*finalenergy));
00191     SWK[material][2][4][ie]=SWK[material][2][3][ie]
00192                  +(z2-1.)*eqa*sef*dos2*(1.+2.*AF[material][2]*finalenergy);
00193 
00194 // Emission
00195     finalenergy=initialenergy-hwij+EC[material][2]-EC[material][1];
00196     if(finalenergy>0.){
00197      sef=sqrt(finalenergy*(1.+AF[material][1]*finalenergy));
00198      SWK[material][2][5][ie]=SWK[material][2][4][ie]+ope*sef*dos1*
00199                          (1.+2.*AF[material][1]*finalenergy);
00200     }
00201     else SWK[material][2][5][ie]=SWK[material][2][4][ie];
00202 // Absorption
00203     finalenergy=initialenergy+hwij+EC[material][2]-EC[material][1];
00204     if(finalenergy>0.){
00205      sef=sqrt(finalenergy*(1.+AF[material][1]*finalenergy));
00206      SWK[material][2][6][ie]=SWK[material][2][5][ie]+opa*sef*dos1*
00207                          (1.+2.*AF[material][1]*finalenergy);
00208     }
00209     else SWK[material][2][6][ie]=SWK[material][2][5][ie];
00210 // Acoustic phonon
00211     finalenergy=initialenergy;
00212     sef=sqrt(finalenergy*(1.+AF[material][2]*finalenergy));
00213     SWK[material][2][7][ie]=SWK[material][2][6][ie]+aco*sef*dos2*
00214                         (1.+2.*AF[material][2]*finalenergy);
00215 // Impurity scattering
00216     finalenergy=initialenergy;
00217     sef=sqrt(finalenergy*(1.+AF[material][2]*finalenergy));
00218     ak=SMH[material][2]*sef;
00219     qq=QD2*(4.*ak*ak+QD2);
00220     wk=bimp/qq*sef*dos2*(1.+2.*AF[material][2]*finalenergy);
00221     if(wk>1.e14) wk=1.e14;
00222     SWK[material][2][8][ie]=SWK[material][2][7][ie]+wk;
00223   } // <--- this is the correct place for the symbol } (J.M.Sellier,24/12/2006)
00224 
00225 // Impact Ionization
00226     wk=PII[material]*pow((initialenergy-ETH[material])/ETH[material],2.);
00227     if(IIFLAG==YES) SWK[material][2][9][ie]=SWK[material][2][8][ie]+wk;
00228     if(IIFLAG==NO) SWK[material][2][9][ie]=SWK[material][2][8][ie];
00229 
00230 // Evalutation of gamma
00231   GM[material]=SWK[material][1][7][1];
00232   for(ie=1;ie<=DIME;ie++){
00233     if(SWK[material][1][7][ie]>GM[material]) GM[material]=SWK[material][1][7][ie];
00234     if(SWK[material][2][9][ie]>GM[material]) GM[material]=SWK[material][2][9][ie];
00235   }
00236   printf("GAMMA[%d]   = %g \n",material, GM[material]);
00237   for(i=1;i<=7;i++)
00238     for(ie=1;ie<=DIME;ie++)
00239       SWK[material][1][i][ie]/=GM[material];
00240   for(i=1;i<=9;i++)
00241     for(ie=1;ie<=DIME;ie++)
00242       SWK[material][2][i][ie]/=GM[material];
00243  }
00244 // End of 2-valley materials
00245 // #########################
00246 
00247 // Material with one valley
00248 // ########################
00249  if(NOVALLEY[material]==1){
00250   SMH[material][1]=sqrt(2.*MSTAR[material][1]*M*Q)/HBAR;
00251   HHM[material][1]=HBAR*HBAR/(2.*MSTAR[material][1]*M*Q);
00252   HM[material][1]=HBAR/(MSTAR[material][1]*M);
00253 // Density of states
00254   dos=pow((sqrt(2.*MSTAR[material][1]*M)*sqrt(Q)/HBAR),3.)/(4.*PI*PI);
00255 // constant for the acoustic phonon
00256   aco=2.*PI*(DA[material]/Q)
00257      *DA[material]*(BKTQ/HBAR)*(Q/(RHO[material]*UL[material]*UL[material]));
00258 // Constants for the 6 (or less) non-polar optical phonons
00259   for(i=1;i<=6;i++){
00260 // i-th Optical Phonon
00261     oge[i]=0.;
00262     oga[i]=0.;
00263     if(ZF[material][i-1]!=0.){
00264       wo=HWO[material][i-1]*Q/HBAR; // frequency of phonon
00265       no=1./(exp(HWO[material][i-1]/BKTQ) - 1.); // population of phonons
00266       oge[i]=ZF[material][i-1]*PI*(DTK[material][i-1]*Q/wo)
00267             *((DTK[material][i-1]*Q/RHO[material])/Q)*(no+1.);
00268       oga[i]=oge[i]*no/(1.+no);
00269    }
00270   }
00271 // Calculation of scattering rates
00272  for(ie=1; ie<=DIME; ++ie) SWK[material][0][0][ie]=0.;
00273  for(ie=1; ie<=DIME; ++ie){
00274    initialenergy=DE*((double) ie);
00275    sei=sqrt(initialenergy);
00276 // non polar optical phonons
00277    for(i=1;i<=6;i++){
00278      finalenergy=initialenergy-HWO[material][i-1];
00279      SWK[material][0][i*2-1][ie]=SWK[material][0][i*2-2][ie];
00280      if(finalenergy>0.){
00281       sef=sqrt(finalenergy*(1.+alphaK[material][1]*finalenergy));
00282       SWK[material][0][i*2-1][ie]=SWK[material][0][i*2-2][ie]
00283                     +oge[i]*sef*dos*(1.+2.*alphaK[material][1]*finalenergy);
00284      }
00285      finalenergy=initialenergy+HWO[material][i-1];
00286      SWK[material][0][i*2][ie]=SWK[material][0][i*2-1][ie];
00287      if(finalenergy>0.){
00288       sef=sqrt(finalenergy*(1.+alphaK[material][1]*finalenergy));
00289       SWK[material][0][i*2][ie]=SWK[material][0][i*2-1][ie]
00290                   +oga[i]*sef*dos*(1.+2.*alphaK[material][1]*finalenergy);
00291      }
00292    }
00293 // Acoustic phonon
00294    finalenergy=initialenergy;
00295    sef=sqrt(finalenergy*(1.+alphaK[material][1]*finalenergy));
00296    SWK[material][0][13][ie]=SWK[material][0][12][ie]
00297                  +aco*sef*dos*(1.+2.*alphaK[material][1]*finalenergy);
00298 
00299 // Impact Ionization
00300     wk=PII[material]*pow((initialenergy-ETH[material])/ETH[material],2.);
00301     if(IIFLAG==YES) SWK[material][0][14][ie]=SWK[material][0][13][ie]+wk;
00302     if(IIFLAG==NO) SWK[material][0][14][ie]=SWK[material][0][13][ie];
00303   }
00304 
00305 // Evaluation of gamma
00306   GM[material]=SWK[material][0][14][1];
00307   for(ie=1;ie<=DIME;++ie)
00308     if(SWK[material][0][14][ie]>GM[material]) GM[material]=SWK[material][0][14][ie];
00309   printf("GAMMA[%d]   = %g \n", material, GM[material]);
00310   for(ie=1;ie<=DIME;ie++)
00311     for(i=1;i<=14;i++)
00312       SWK[material][0][i][ie]/=GM[material];
00313  }
00314 // End of one-valley materials
00315 }

© sourcejam.com 2005-2008