Main Page | Directories | File List | File Members

aeneas.c File Reference

#include <getopt.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <time.h>
#include "headers/included_files.h"

Go to the source code of this file.

Defines

#define MAXNUMELEMENTS   100000
#define MAXNUMNODES   10000
#define NPMAX   5000000
#define READ   0
#define WRITE   1
#define NO   0
#define YES   1
#define POINT3D   0
#define VTK   1
#define MESH   2
#define ALL   100
#define NOAMTIA   13
#define SIO2   -1
#define SILICON   0
#define GAAS   1
#define GERMANIUM   2
#define INSB   3
#define ALSB   4
#define ALXINXSB   5
#define ALXIN1XSB   6
#define ALAS   7
#define ALP   8
#define GAP   9
#define GASB   10
#define INAS   11
#define INP   12
#define NOCONTACT   -1
#define INSULATOR   0
#define OHMIC   1
#define SCHOTTKY   2
#define CONTACT   3
#define DIME   2003

Functions

int main (int argc, char *argv[])

Variables

double EPSR [NOAMTIA+1]
double EPF [NOAMTIA+1]
double alphaK [NOAMTIA+1][4]
double EMIN [NOAMTIA+1][4]
double HWO [NOAMTIA+1][6]
double DTK [NOAMTIA+1][6]
double ZF [NOAMTIA+1][6]
double RHO [NOAMTIA+1]
double DA [NOAMTIA+1]
double UL [NOAMTIA+1]
double EG [NOAMTIA+1]
double PII [NOAMTIA+1]
double ETH [NOAMTIA+1]
const double epslon0 = 8.854187817e-3
const double EPSR_SiO2 = 3.9
double VIC [MAXNUMNODES+1]
const double thresh = 1.e-16
const double EPS = 1.e-16
const double TINY = 1.e-16
double base_geo [4][4]
double base_ref [4][4]
double d_base_geo [3][4]
double d_base_ref [3][4]
int Ng
int Ne
int nf = 4
int dim = 3
int i_front [MAXNUMNODES+1]
int i_dom [MAXNUMELEMENTS+1]
int noeud_geo [4][MAXNUMELEMENTS+1]
double coord [3][MAXNUMNODES+1]
double poids_K [4][MAXNUMELEMENTS+1]
double inv_jac_K [3][3][MAXNUMELEMENTS+1]
double d_base_K [3][4][MAXNUMELEMENTS+1]
int vois [4][MAXNUMELEMENTS+1]
double b [MAXNUMNODES+1]
double V [MAXNUMNODES+1]
double Vi [MAXNUMNODES+1]
double Ex [MAXNUMNODES+1]
double Ey [MAXNUMNODES+1]
double Ez [MAXNUMNODES+1]
int ija [100 *MAXNUMELEMENTS+1]
double sa [100 *MAXNUMELEMENTS+1]
int lg = 4
double xi [3][4]
double omega [4]
int itol
int itmax
int Quantum_Flag
double tol
double p [MAXNUMNODES+2]
double pp [MAXNUMNODES+2]
double r [MAXNUMNODES+2]
double rr [MAXNUMNODES+2]
double z [MAXNUMNODES+2]
double zz [MAXNUMNODES+2]
time_t binarytime
tm * nowtm
time_t fbinarytime
tm * fnowtm
int EL
int number_of_steps
int it
int NOVALLEY [NOAMTIA+1]
int ISEED
int NP1
int INUM
int IV
int NOELEC [MAXNUMELEMENTS+1]
int MEAN
double * NA
double * ND
double DT
double TS
double KX
double KY
double KZ
double TF
double DDMAX
double * EPP
double L [4]
double BKTQ
double QH
double TL
double CIMP
double QD2
double MSTAR [NOAMTIA+1][6]
double * VOLUME
double TEMPO
double SWK [NOAMTIA+1][3][15][DIME+1]
double AF [NOAMTIA+1][3]
double EC [NOAMTIA+1][3]
double HM [NOAMTIA+1][3]
double GM [NOAMTIA+1]
double SMH [NOAMTIA+1][3]
double HHM [NOAMTIA+1][3]
double * XVEL
double * YVEL
double * ZVEL
double * ENEL
int err
int every_num_steps
int NHTFLAG
int POISSONUPDATEFLAG
int SAVEPARTICLESFLAG
int SAVEPARTICLESFORMAT
int SAVEFIELDSFLAG
int SAVEFIELDSFORMAT
int NPMAX0
int WINX
int WINY
double up
double down
int IIFLAG
char MESHNAME [256]
double XVAL [NOAMTIA+1]
FILE * fp
option longopts []
static char * progname


Define Documentation

#define ALAS   7
 

Definition at line 95 of file aeneas.c.

Referenced by main(), and read_input_file().

#define ALL   100
 

Definition at line 82 of file aeneas.c.

Referenced by main(), and read_input_file().

#define ALP   8
 

Definition at line 96 of file aeneas.c.

Referenced by main(), and read_input_file().

#define ALSB   4
 

Definition at line 92 of file aeneas.c.

Referenced by main(), and read_input_file().

#define ALXIN1XSB   6
 

Definition at line 94 of file aeneas.c.

Referenced by main(), and read_input_file().

#define ALXINXSB   5
 

Definition at line 93 of file aeneas.c.

Referenced by main(), and read_input_file().

#define CONTACT   3
 

Definition at line 108 of file aeneas.c.

Referenced by assemble_rhs_B().

#define DIME   2003
 

Definition at line 112 of file aeneas.c.

Referenced by montecarlo_setup(), and scat().

#define GAAS   1
 

Definition at line 89 of file aeneas.c.

Referenced by main(), and read_input_file().

#define GAP   9
 

Definition at line 97 of file aeneas.c.

Referenced by main(), and read_input_file().

#define GASB   10
 

Definition at line 98 of file aeneas.c.

Referenced by main(), and read_input_file().

#define GERMANIUM   2
 

Definition at line 90 of file aeneas.c.

Referenced by main(), and read_input_file().

#define INAS   11
 

Definition at line 99 of file aeneas.c.

Referenced by main(), and read_input_file().

#define INP   12
 

Definition at line 100 of file aeneas.c.

Referenced by main(), and read_input_file().

#define INSB   3
 

Definition at line 91 of file aeneas.c.

Referenced by main(), and read_input_file().

#define INSULATOR   0
 

Definition at line 105 of file aeneas.c.

Referenced by assemble_rhs_B(), main(), and read_input_file().

#define MAXNUMELEMENTS   100000
 

Definition at line 65 of file aeneas.c.

#define MAXNUMNODES   10000
 

Definition at line 66 of file aeneas.c.

#define MESH   2
 

Definition at line 81 of file aeneas.c.

Referenced by main(), and read_input_file().

#define NO   0
 

Definition at line 75 of file aeneas.c.

Referenced by assemble_rhs_B(), main(), montecarlo_setup(), and read_input_file().

#define NOAMTIA   13
 

Definition at line 85 of file aeneas.c.

Referenced by main(), and read_input_file().

#define NOCONTACT   -1
 

Definition at line 104 of file aeneas.c.

Referenced by read_input_file().

#define NPMAX   5000000
 

Definition at line 67 of file aeneas.c.

Referenced by device_setup(), and ensemble_montecarlo().

#define OHMIC   1
 

Definition at line 106 of file aeneas.c.

Referenced by assemble_matrix_A(), assemble_rhs_B(), drift(), ensemble_montecarlo(), main(), read_input_file(), and update_potential().

#define POINT3D   0
 

Definition at line 79 of file aeneas.c.

Referenced by main(), and read_input_file().

#define READ   0
 

Definition at line 71 of file aeneas.c.

Referenced by main(), and read_input_file().

#define SCHOTTKY   2
 

Definition at line 107 of file aeneas.c.

Referenced by assemble_matrix_A(), assemble_rhs_B(), drift(), main(), read_input_file(), and update_potential().

#define SILICON   0
 

Definition at line 88 of file aeneas.c.

Referenced by impact(), main(), and read_input_file().

#define SIO2   -1
 

Definition at line 87 of file aeneas.c.

Referenced by assemble_matrix_A(), creation(), device_setup(), drift(), electron_density(), ensemble_montecarlo(), read_input_file(), save_particles_Point3D_format(), and scat().

#define VTK   1
 

Definition at line 80 of file aeneas.c.

Referenced by main(), and read_input_file().

#define WRITE   1
 

Definition at line 72 of file aeneas.c.

Referenced by main(), and read_input_file().

#define YES   1
 

Definition at line 76 of file aeneas.c.

Referenced by main(), montecarlo_setup(), and read_input_file().


Function Documentation

int main int  argc,
char *  argv[]
 

Definition at line 295 of file aeneas.c.

References ALAS, ALL, ALP, alphaK, ALSB, ALXIN1XSB, ALXINXSB, assemble_matrix_A(), assemble_rhs_B(), binarytime, Bohm_potential(), DA, def_base_all(), def_d_base_all(), def_global_weights_all(), define_d_base_K(), define_inverse_jacobian(), device_setup(), DT, DTK, EG, electric_field(), electron_density(), electron_velocity(), EMIN, ensemble_montecarlo(), EPF, EPSR, err, ETH, every_num_steps, fbinarytime, fnowtm, fp, GAAS, GAP, GASB, GERMANIUM, HWO, i_front, INAS, initial_usefull_calculations(), initialize_GAUSS(), INP, INSB, INSULATOR, ISEED, it, itmax, itol, longopts, MEAN, MESH, montecarlo_setup(), MSTAR, Ne, neighbourhood_table(), Ng, NHTFLAG, NO, NOAMTIA, noeud_geo, NOVALLEY, nowtm, number_of_steps, OHMIC, PII, POINT3D, poisson3D(), POISSONUPDATEFLAG, printf(), progname, Quantum_Flag, READ, read_input_file(), read_neighbourhood_table(), RHO, save_BB(), save_particles_mesh_format(), save_particles_Point3D_format(), save_VTK(), SAVEFIELDSFLAG, SAVEFIELDSFORMAT, SAVEPARTICLESFLAG, SAVEPARTICLESFORMAT, SCHOTTKY, SILICON, TEMPO, TF, TL, tol, UL, V, Vi, vois, VTK, WRITE, XVAL, YES, z, and ZF.

00296 {
00297  int index;
00298  int optc;
00299  int h = 0, v = 0, lose = 0, z = 0;
00300 
00301   progname = argv[0];
00302 
00303   while ((optc = getopt_long (argc, argv, "hv", longopts, (int *) 0))
00304          != EOF)
00305     switch (optc)
00306       {
00307       case 'v':
00308         v = 1;
00309         break;
00310       case 'h':
00311         h = 1;
00312         break;
00313       default:
00314         lose = 1;
00315         break;
00316       }
00317   
00318   if (optind == argc - 1)
00319     z = 1;
00320   else if (lose || optind < argc)
00321     {
00322       /* Print error message and exit.  */
00323       if (optind < argc)
00324         printf("Too many arguments\n");
00325         printf("Try `%s --help' for more information.\n",progname);
00326       exit(1);
00327     }
00328 
00329   /* `help' should come first.  If `help' is requested, ignore the other
00330      options. */
00331   if (h)
00332     {
00333       /* Print help info and exit.  */
00334       /* TRANSLATORS: --help output 1
00335          no-wrap */
00336       printf("\
00337 Aeneas, the GNU 3D simulator for III-V semiconductor devices.\n");
00338       printf ("\n");
00339       /* TRANSLATORS: --help output 2
00340          no-wrap */
00341       printf ("\
00342 Usage: %s [OPTION] file...\n",progname);
00343 
00344       printf ("\n");
00345       /* TRANSLATORS: --help output 3 : options 1/2
00346          no-wrap */
00347       printf("\
00348   -h, --help          display this help and exit\n\
00349   -v, --version       display version information and exit\n");
00350 
00351       printf ("\n");
00352       /* TRANSLATORS: --help output 5 (end)
00353          TRANSLATORS, please don't forget to add the contact address for
00354          your translation!
00355          no-wrap */
00356       printf ("\
00357 Report bugs to sellier@dmi.unict.it or aeneas@southnovel.eu\n");
00358 
00359       exit (0);
00360     }
00361 
00362   if (v)
00363     {
00364       /* Print version number.  */
00365       printf("aeneas - GNU aeneas 1.1\n");
00366       /* xgettext: no-wrap */
00367       printf("\n");
00368       printf("\
00369 Copyright (C) %s Sellier Jean Michel.\n\
00370 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
00371 PARTICULAR PURPOSE.\n\
00372 You may redistribute copies of GNU %s under the terms\n\
00373 of the GNU General Public License.\n\
00374 For more information about these matters, see the file named COPYING.\n",
00375               "2007","Aeneas");
00376       exit (0);
00377     }
00378   else if (z){
00379 // In case of filename specified
00380 // =============================
00381      fp=fopen(argv[1],"r"); // here we open th input file...
00382 // File Control, just in case the file does not exist...
00383      if(fp==NULL){
00384       printf("%s: fatal error in opening the input file %s\n",
00385              progname,argv[1]);
00386       exit(EXIT_FAILURE);
00387      }
00388 
00389 // =========================
00390 
00391 // creation of the output directories
00392   printf("\ntrying to create the output directories.\n");
00393   err = system("mkdir e_density");
00394   err = system("mkdir e_density/BB_mesh_format");
00395   err = system("mkdir e_density/VTK_format");
00396   err = system("mkdir e_velocity");
00397   err = system("mkdir e_velocity/xvel_BB_mesh_format");
00398   err = system("mkdir e_velocity/yvel_BB_mesh_format");
00399   err = system("mkdir e_velocity/zvel_BB_mesh_format");
00400   err = system("mkdir e_velocity/VTK_format");
00401   err = system("mkdir e_energy");
00402   err = system("mkdir e_energy/BB_mesh_format");
00403   err = system("mkdir e_energy/VTK_format");
00404   err = system("mkdir E");
00405   err = system("mkdir E/Ex_BB_mesh_format");
00406   err = system("mkdir E/Ey_BB_mesh_format");
00407   err = system("mkdir E/Ez_BB_mesh_format");
00408   err = system("mkdir E/VTK_format");
00409   err = system("mkdir e_current");
00410   err = system("mkdir e_current/e_current_x_BB_mesh_format");
00411   err = system("mkdir e_current/e_current_y_BB_mesh_format");
00412   err = system("mkdir e_current/e_current_z_BB_mesh_format");
00413   err = system("mkdir e_current/VTK_format");
00414   err = system("mkdir potential");
00415   err = system("mkdir potential/BB_mesh_format");
00416   err = system("mkdir potential/VTK_format");
00417   err = system("mkdir particles");
00418   err = system("mkdir particles/position_mesh_format");
00419   err = system("mkdir particles/position_Point3D_format");
00420   err = system("mkdir particles/energy_Point3D_format");
00421   err = system("mkdir particles/potential_Point3D_format");
00422 
00423 // Printing of the initial runtime
00424 // ===============================
00425   binarytime=time(NULL);
00426   nowtm=localtime(&binarytime);
00427   printf("\n\nSimulation started : %s\n",asctime(nowtm));
00428 
00429 
00430 //  initial value for random number generator
00431   ISEED = 38467.;
00432 
00433 // Open the input file and check if it exists
00434 // If the input file does not exist then the code stops.
00435 //  printf("\n\nLoading the input mesh file...\n");
00436 //  if(1) load_mesh(); // this row has to be putted before everything calculation!!!
00437 //  if(0) load_mshV1(); // this subroutine is recommended only for GMSH experts
00438 // warning : the user has to be very experienced in GMSH
00439 
00440 // ***************************
00441 // HERE WE READ THE INPUT FILE
00442 // ***************************
00443   read_input_file();
00444 
00445 // closure of the user specified input file
00446   fclose(fp);
00447 
00448 // If no error has occured then print a nice message :)
00449   printf("Mesh input file correctly processed...\n\n");
00450 
00451 // ==============================
00452 // ==============================
00453 // ========================
00454 // Material constants here!
00455 // ========================
00456 // Silicon electrons in the X-valley
00457 // Germanium electrons in the X-valley
00458 // All the other semiconductor compounds have electrons in the Gamma- and L-valley
00459 // definition of the number of valley for every material
00460  NOVALLEY[SILICON]=1;
00461  NOVALLEY[GAAS]=2;
00462  NOVALLEY[GERMANIUM]=1;
00463  NOVALLEY[INSB]=2;
00464  NOVALLEY[ALSB]=2;
00465  NOVALLEY[ALAS]=2;
00466  NOVALLEY[ALP]=2;
00467  NOVALLEY[GAP]=2;
00468  NOVALLEY[GASB]=2;
00469  NOVALLEY[INAS]=2;
00470  NOVALLEY[INP]=2;
00471  NOVALLEY[ALXINXSB]=2;
00472  NOVALLEY[ALXIN1XSB]=2;
00473 // Relative dielectric constant for Silicon
00474  EPSR[SILICON]=11.7;
00475 // Relative dielectric constant for Germanium
00476  EPSR[GERMANIUM]=16.2;
00477 // Relative dielectric constant for InSb
00478  EPSR[INSB]=17.65;
00479 // Relative dieletric constant for GaAs
00480  EPSR[GAAS]=12.90;
00481 // Relative dieletric constant for AlSb
00482  EPSR[ALSB]=12.04;
00483 // Relative dieletric constant for AlAs
00484  EPSR[ALAS]=10.06;
00485 // Relative dieletric constant for AlP
00486  EPSR[ALP]=9.80;
00487 // Relative dieletric constant for GaP
00488  EPSR[GAP]=11.10;
00489 // Relative dieletric constant for GaSb
00490  EPSR[GASB]=15.69;
00491 // Relative dieletric constant for InAs
00492  EPSR[INAS]=15.15;
00493 // Relative dieletric constant for InP
00494  EPSR[INP]=12.61;
00495 // Relative dieletric constant for Al_x In_x Sb
00496  EPSR[ALXINXSB]=XVAL[ALXINXSB]*EPSR[ALSB]+XVAL[ALXINXSB]*EPSR[INSB];
00497 // Relative dieletric constant for Al_x In_(1-x) Sb
00498  EPSR[ALXIN1XSB]=XVAL[ALXIN1XSB]*EPSR[ALSB]+(1.-XVAL[ALXIN1XSB])*EPSR[INSB];
00499 // InSb high frequency dieletric constant
00500  EPF[INSB]=15.68;
00501 // GaAs high frequency dieletric constant
00502  EPF[GAAS]=10.92;
00503 // AlSb high frequency dieletric constant
00504  EPF[ALSB]=9.88;
00505 // AlAs high frequency dieletric constant
00506  EPF[ALAS]=8.16;
00507 // AlP high frequency dieletric constant
00508  EPF[ALP]=7.54;
00509 // GaP high frequency dieletric constant
00510  EPF[GAP]=9.08;
00511 // GaSb high frequency dieletric constant
00512  EPF[GASB]=14.44;
00513 // InAs high frequency dieletric constant
00514  EPF[INAS]=12.75;
00515 // InP high frequency dieletric constant
00516  EPF[INP]=9.61;
00517 // Al_x In_x Sb high frequency dieletric constant
00518  EPF[ALXINXSB]=XVAL[ALXINXSB]*(EPF[ALSB]+EPF[INSB]);
00519 // Al_x In_(1-x) Sb high frequency dieletric constant
00520  EPF[ALXIN1XSB]=XVAL[ALXIN1XSB]*EPF[ALSB]+(1.-XVAL[ALXIN1XSB])*EPF[INSB];
00521  for(index=0;index<NOAMTIA;index++){
00522    int i;
00523    for(i=0;i<6;i++){
00524      HWO[index][i]=0.;
00525      DTK[index][i]=0.;
00526      ZF[index][i]=0.;
00527    }
00528  }
00529 // Silicon optical phonon scattering energy (eV)
00530  HWO[SILICON][0]=0.0120;
00531  HWO[SILICON][1]=0.0185;
00532  HWO[SILICON][2]=0.0190;
00533  HWO[SILICON][3]=0.0474;
00534  HWO[SILICON][4]=0.0612;
00535  HWO[SILICON][5]=0.0590;
00536 // Germanium optical phonon scattering energy (eV)
00537  HWO[GERMANIUM][0]=0.09;
00538 // InSb optical phonon scattering energy (eV)
00539  HWO[INSB][0]=0.0282;
00540 // GaAs optical phonon scattering energy (eV)
00541  HWO[GAAS][0]=0.03536;
00542 // AlSb optical phonon scattering energy (eV)
00543  HWO[ALSB][0]=0.0360;
00544 // AlAs optical phonon scattering energy (eV)
00545  HWO[ALAS][0]=0.05009;
00546 // AlP optical phonon scattering energy (eV)
00547  HWO[ALP][0]=0.06212;
00548 // GaP optical phonon scattering energy (eV)
00549  HWO[GAP][0]=0.04523;
00550 // GaSb optical phonon scattering energy (eV)
00551  HWO[GASB][0]=0.02529;
00552 // InAs optical phonon scattering energy (eV)
00553  HWO[INAS][0]=0.03008;
00554 // InP optical phonon scattering energy (eV)
00555  HWO[INP][0]=0.04240;
00556 // Al_x In_x Sb optical phonon scattering energy (eV)
00557  HWO[ALXINXSB][0]=XVAL[ALXINXSB]*(HWO[ALSB][0]+HWO[INSB][0]);
00558 // Al_x In_(1-x) Sb optical phonon scattering energy (eV)
00559  HWO[ALXIN1XSB][0]=XVAL[ALXIN1XSB]*HWO[ALSB][0]+(1.-XVAL[ALXIN1XSB])*HWO[INSB][0];
00560 // Silicon optical coupling constants (eV/m)
00561  DTK[SILICON][0]=0.05e11;
00562  DTK[SILICON][1]=0.08e11;
00563  DTK[SILICON][2]=0.03e11;
00564  DTK[SILICON][3]=0.20e11;
00565  DTK[SILICON][4]=1.14e11;
00566  DTK[SILICON][5]=0.20e11;
00567 // Germanium optical coupling constants (eV/m)
00568  DTK[GERMANIUM][0]=1.889e11;
00569 // InSb optical coupling constants (eV/m)
00570  DTK[INSB][0]=0.47e11;
00571 // GaAs optical coupling constant (eV/m)
00572  DTK[GAAS][0]=1.11e11;
00573 // AlSb optical coupling constants (eV/m)
00574  DTK[ALSB][0]=0.55e11;
00575 // AlAs optical coupling constants (eV/m)
00576  DTK[ALAS][0]=3.0e11;
00577 // AlP optical coupling constants (eV/m)
00578  DTK[ALP][0]=0.95e11;
00579 // GaP optical coupling constants (eV/m)
00580  DTK[GAP][0]=5.33e11;
00581 // GaSb optical coupling constants (eV/m)
00582  DTK[GASB][0]=0.94e11;
00583 // InAs optical coupling constants (eV/m)
00584  DTK[INAS][0]=3.59e11;
00585 // InP optical coupling constants (eV/m)
00586  DTK[INP][0]=2.46e11;
00587 // Al_x In_x Sb optical coupling constants (eV/m)
00588  DTK[ALXINXSB][0]=XVAL[ALXINXSB]*(DTK[ALSB][0]+DTK[INSB][0]);
00589 // Al_x In_(1-x) Sb optical coupling constants (eV/m)
00590  DTK[ALXIN1XSB][0]=XVAL[ALXIN1XSB]*DTK[ALSB][0]+(1.-XVAL[ALXIN1XSB])*DTK[INSB][0];
00591 // Silicon optical phonon Z-factor
00592  ZF[SILICON][0]=1.;
00593  ZF[SILICON][1]=1.;
00594  ZF[SILICON][2]=4.;
00595  ZF[SILICON][3]=4.;
00596  ZF[SILICON][4]=1.;
00597  ZF[SILICON][5]=4.;
00598 // Germanium optical phonon Z-factor
00599  ZF[GERMANIUM][0]=1.;
00600 // InSb optical phonon Z-factor
00601  ZF[INSB][0]=1.;
00602 // AlSb optical phonon Z-factor
00603  ZF[ALSB][0]=1.;
00604 // optical phonon Z-factor
00605  ZF[ALAS][0]=1.;
00606 // optical phonon Z-factor
00607  ZF[ALP][0]=1.;
00608 // optical phonon Z-factor
00609  ZF[GAP][0]=1.;
00610 // optical phonon Z-factor
00611  ZF[GASB][0]=1.;
00612 // optical phonon Z-factor
00613  ZF[INAS][0]=1.;
00614 // optical phonon Z-factor
00615  ZF[INP][0]=1.;
00616 // Al_x In_x Sb optical phonon Z-factor
00617  ZF[ALXINXSB][0]=XVAL[ALXINXSB]*(ZF[ALSB][0]+ZF[INSB][0]);
00618 // Al_x In_(1-x) Sb optical phonon Z-factor
00619  ZF[ALXIN1XSB][0]=XVAL[ALXIN1XSB]*ZF[ALSB][0]+(1.-XVAL[ALXIN1XSB])*ZF[INSB][0];
00620 // Silicon Crystal Density (Kg/m^3)
00621  RHO[SILICON]=2330.;
00622 // Germanium Crystal Density (Kg/m^3)
00623  RHO[GERMANIUM]=5320.;
00624 // InSb Crystal Density (Kg/m^3)
00625  RHO[INSB]=5790.;
00626 // GaAs Crystal Density (Kg/m^3)
00627  RHO[GAAS]=5360.;
00628 // AlSb Crystal Density (Kg/m^3)
00629  RHO[ALSB]=4288.;
00630 // AlAs Crystal Density (Kg/m^3)
00631  RHO[ALAS]=5650.;
00632 // AlP Crystal Density (Kg/m^3)
00633  RHO[ALP]=7410.;
00634 // GaP Crystal Density (Kg/m^3)
00635  RHO[GAP]=5850.;
00636 // GaSb Crystal Density (Kg/m^3)
00637  RHO[GASB]=3970.;
00638 // InAs Crystal Density (Kg/m^3)
00639  RHO[INAS]=4280.;
00640 // InP Crystal Density (Kg/m^3)
00641  RHO[INP]=5130.;
00642 // Al_x In_x Sb Crystal Density (Kg/m^3)
00643  RHO[ALXINXSB]=XVAL[ALXINXSB]*(RHO[ALSB]+RHO[INSB]); 
00644 // Al_x In_(1-x) Sb Crystal Density (Kg/m^3)
00645  RHO[ALXIN1XSB]=XVAL[ALXIN1XSB]*RHO[ALSB]+(1.-XVAL[ALXIN1XSB])*RHO[INSB];
00646 // Silicon acoustic deformation potential (Joule)
00647  DA[SILICON]=9.*1.60217733e-19;
00648 // Germanium acoustic deformation potential (Joule)
00649  DA[GERMANIUM]=9.*1.60217733e-19;
00650 // InSb acoustic deformation potential (Joule)
00651  DA[INSB]=5.96*1.60217733e-19;
00652 // GaAs acoustic deformation potential (Joule)
00653  DA[GAAS]=7.*1.60217733e-19;
00654 // AlSb acoustic deformation potential (Joule)
00655  DA[ALSB]=4.6*1.60217733e-19;
00656 // acoustic deformation potential (Joule)
00657  DA[ALAS]=9.3*1.60217733e-19;
00658 // acoustic deformation potential (Joule)
00659  DA[ALP]=9.3*1.60217733e-19;
00660 // acoustic deformation potential (Joule)
00661  DA[GAP]=7.4*1.60217733e-19;
00662 // acoustic deformation potential (Joule)
00663  DA[GASB]=9.*1.60217733e-19;
00664 // acoustic deformation potential (Joule)
00665  DA[INAS]=8.2*1.60217733e-19;
00666 // acoustic deformation potential (Joule)
00667  DA[INP]=6.2*1.60217733e-19;
00668 // Al_x In_x Sb acoustic deformation potential (Joule)
00669  DA[ALXINXSB]=XVAL[ALXINXSB]*(DA[ALSB]+DA[INSB]);
00670 // Al_x In_(1-x) Sb acoustic deformation potential (Joule)
00671  DA[ALXIN1XSB]=XVAL[ALXIN1XSB]*DA[ALSB]+(1.-XVAL[ALXIN1XSB])*DA[INSB];
00672 // Silicon longitudinal sound velocity (m/sec)
00673  UL[SILICON]=9040.;
00674 // Germanium longitudinal sound velocity (m/sec)
00675  UL[GERMANIUM]=5400.;
00676 // InSb longitudinal sound velocity (m/sec)
00677  UL[INSB]=4060.;
00678 // GaAs longitudinal sound velocity (m/sec)
00679  UL[GAAS]=5240.;
00680 // AlSb longitudinal sound velocity (m/sec)
00681  UL[ALSB]=4600.;
00682 // longitudinal sound velocity (m/sec)
00683  UL[ALAS]=5650.;
00684 // longitudinal sound velocity (m/sec)
00685  UL[ALP]=7410.;
00686 // longitudinal sound velocity (m/sec)
00687  UL[GAP]=5850.;
00688 // longitudinal sound velocity (m/sec)
00689  UL[GASB]=3970.;
00690 // longitudinal sound velocity (m/sec)
00691  UL[INAS]=4280.;
00692 // longitudinal sound velocity (m/sec)
00693  UL[INP]=5130.;
00694 // Al_x In_x Sb longitudinal sound velocity (m/sec)
00695  UL[ALXINXSB]=XVAL[ALXINXSB]*(UL[ALSB]+UL[INSB]);
00696 // Al_x In_(1-x) Sb longitudinal sound velocity (m/sec)
00697  UL[ALXIN1XSB]=XVAL[ALXIN1XSB]*UL[ALSB]+(1.-XVAL[ALXIN1XSB])*UL[INSB];
00698 // Silicon energy gap
00699  EG[SILICON]=1.21-3.333e-4*TL;
00700  printf("EG[SILICON]      = %g\n",EG[SILICON]);
00701 // Germanium energy gap
00702  EG[GERMANIUM]=0.747-3.587e-4*TL;
00703  printf("EG[GERMANIUM]    = %g\n",EG[GERMANIUM]);
00704 // InSb energy gap
00705  EG[INSB]=0.2446-2.153e-4*TL;//0.174;???
00706  printf("EG[INSB]         = %g\n",EG[INSB]);
00707 // GaAs energy gap
00708  EG[GAAS]=1.54-4.036e-4*TL;//0.32;???
00709  printf("EG[GAAS]         = %g\n",EG[GAAS]);
00710 // AlSb energy gap
00711  EG[ALSB]=1.696-2.20e-4*TL;
00712  printf("EG[ALSB]         = %g\n",EG[ALSB]);
00713 // energy gap
00714  EG[ALAS]=2.314-3.0e-4*TL;
00715 // energy gap
00716  EG[ALP]=2.51-3.333e-4*TL;
00717 // energy gap
00718  EG[GAP]=2.35-2.667e-4*TL;
00719 // energy gap
00720  EG[GASB]=0.81-3.667e-4*TL;
00721 // energy gap
00722  EG[INAS]=0.434-2.601e-4*TL;
00723 // energy gap
00724  EG[INP]=1.445-3.296e-4*TL;
00725 // Al_x In_x Sb energy gap
00726  EG[ALXINXSB]=XVAL[ALXINXSB]*(EG[ALSB]+EG[INSB]);
00727  printf("EG[ALxINxSB]     = %g\n",EG[ALXINXSB]);
00728 // Al_x In_(1-x) Sb energy gap
00729  EG[ALXIN1XSB]=XVAL[ALXIN1XSB]*EG[ALSB]+(1.-XVAL[ALXIN1XSB])*EG[INSB];
00730  printf("EG[ALxIN(1-x)SB] = %g\n",EG[ALXIN1XSB]);
00731  printf("\n");
00732 // Silicon energy minimum
00733  EMIN[SILICON][1]=0.0;
00734 // Germanium energy minimum
00735  EMIN[GERMANIUM][1]=0.173;
00736 // InSb energy minimum of GAMMA-valley
00737  EMIN[INSB][1]=0.0;
00738 // InSb energy minimum 0f L-valley
00739  EMIN[INSB][2]=1.038;
00740 // GaAs energy minimum of GAMMA-valley
00741  EMIN[GAAS][1]=0.0;
00742 // GaAs energy minimum of L-valley (eV)
00743  EMIN[GAAS][2]=0.323;
00744 // AlSb energy minimum of GAMMA-valley
00745  EMIN[ALSB][1]=0.507;
00746 // AlSb energy minimum 0f L-valley
00747  EMIN[ALSB][2]=0.292;
00748 // energy minimum of GAMMA-valley
00749  EMIN[ALAS][1]=0.767;
00750 // energy minimum 0f L-valley
00751  EMIN[ALAS][2]=0.332;
00752 // energy minimum of GAMMA-valley
00753  EMIN[ALP][1]=1.237;
00754 // energy minimum 0f L-valley
00755  EMIN[ALP][2]=0.824;
00756 // energy minimum of GAMMA-valley
00757  EMIN[GAP][1]=0.496;
00758 // energy minimum 0f L-valley
00759  EMIN[GAP][2]=0.415;
00760 // energy minimum of GAMMA-valley
00761  EMIN[GASB][1]=0.0;
00762 // energy minimum 0f L-valley
00763  EMIN[GASB][2]=0.217;
00764 // energy minimum of GAMMA-valley
00765  EMIN[INAS][1]=0.0;
00766 // energy minimum 0f L-valley
00767  EMIN[INAS][2]=1.078;
00768 // energy minimum of GAMMA-valley
00769  EMIN[INP][1]=0.0;
00770 // energ