more fix on Ec/Ev.
[gss-tcad.git] / src / material / Ge / Ge_Optical.cc
blobb75e8de51970e16cde92e229d7880285ad6a9247
1 /*****************************************************************************/
2 /* */
3 /* 8888888 88888888 88888888 */
4 /* 8 8 8 */
5 /* 8 8 8 */
6 /* 8 88888888 88888888 */
7 /* 8 8888 8 8 */
8 /* 8 8 8 8 */
9 /* 888888 888888888 888888888 */
10 /* */
11 /* A Two-Dimensional General Purpose Semiconductor Gemulator. */
12 /* */
13 /* GSS material database Version 0.4 */
14 /* Last update: Feb 17, 2006 */
15 /* */
16 /* Gong Ding */
17 /* gdiso@ustc.edu */
18 /* NINT, No.69 P.O.Box, Xi'an City, China */
19 /* */
20 /*****************************************************************************/
22 // Material Type: Ge
25 #include "PMI.h"
27 typedef struct
29 PetscScalar wavelength;
30 PetscScalar RefractionIndexRe;
31 PetscScalar RefractionIndexIm;
32 } table;
34 static table Ge[] = {
35 {0.1240, 0.930, 0.860},
36 {0.1350, 0.925, 1.000},
37 {0.1378, 0.920, 1.140},
38 {0.1459, 0.920, 1.200},
39 {0.1550, 0.920, 1.400},
40 {0.1653, 0.960, 1.600},
41 {0.1771, 1.000, 1.800},
42 {0.1907, 1.100, 2.050},
43 {0.2066, 1.300, 2.340},
44 {0.2254, 1.380, 2.842},
45 {0.2480, 1.394, 3.197},
46 {0.2755, 1.953, 4.297},
47 {0.3100, 3.905, 3.336},
48 {0.3306, 3.947, 2.922},
49 {0.3542, 4.020, 2.667},
50 {0.3815, 4.144, 2.405},
51 {0.4133, 4.082, 2.145},
52 {0.4275, 4.037, 2.140},
53 {0.4428, 4.035, 2.181},
54 {0.4592, 4.082, 2.240},
55 {0.4769, 4.180, 2.309},
56 {0.4959, 4.340, 2.384},
57 {0.5166, 4.610, 2.455},
58 {0.5391, 5.062, 2.318},
59 {0.5636, 5.283, 2.049},
60 {0.5904, 5.748, 1.634},
61 {0.6199, 5.588, 0.933},
62 {0.6526, 5.380, 0.638},
63 {0.6888, 5.067, 0.500},
64 {0.7293, 4.897, 0.401},
65 {0.7749, 4.763, 0.345},
66 {0.8266, 4.653, 0.298},
67 {1.2400, 4.325, 0.081},
68 {1.3780, 4.285, 0.075},
69 {1.5500, 4.275, 0.057},
70 {1.7710, 4.180, 0.028},
73 class GSS_Ge_Optical : public PMIS_Optical
75 private:
76 int table_size;
77 public:
78 complex<PetscScalar> RefractionIndex(PetscScalar lamda, PetscScalar Eg=9.0, PetscScalar Tl=1.0) const
80 complex<PetscScalar> n(1.0,0.0);
81 if(lamda<Ge[0].wavelength)
82 return complex<PetscScalar> (Ge[0].RefractionIndexRe,Ge[0].RefractionIndexIm);
83 if(lamda>Ge[table_size-1].wavelength)
84 return complex<PetscScalar> (Ge[table_size-1].RefractionIndexRe,Ge[table_size-1].RefractionIndexIm);
85 for(int i=0;i<table_size-1;i++)
87 if(lamda>=Ge[i].wavelength && lamda<=Ge[i+1].wavelength)
89 complex<PetscScalar> n1(Ge[i].RefractionIndexRe,Ge[i].RefractionIndexIm);
90 complex<PetscScalar> n2(Ge[i+1].RefractionIndexRe,Ge[i+1].RefractionIndexIm);
91 PetscScalar d1 = lamda-Ge[i].wavelength;
92 PetscScalar d2 = Ge[i+1].wavelength-lamda;
93 n = (n1*d2 + n2*d1)/(d1+d2);
94 break;
97 return n;
100 // constructions
101 public:
102 GSS_Ge_Optical(const PMIS_Environment &env):PMIS_Optical(env)
104 table_size = sizeof(Ge)/sizeof(table);
105 //the wave length should be scaled
106 for(int i=0;i<table_size;i++)
108 Ge[i].wavelength*=um;
112 ~GSS_Ge_Optical()
117 extern "C"
119 PMIS_Optical* PMIS_Ge_Optical_Default (const PMIS_Environment& env)
121 return new GSS_Ge_Optical(env);