initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / InGaAs / InGaAs_Optical.cc
blobfeef2979cf221168388917686506df717a1e3112
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 GaAsmulator. */
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: InGaAs
24 // We do not have the real data for InGaAs, use parameters for GaAs instead
26 #include "PMI.h"
28 typedef struct
30 PetscScalar wavelength;
31 PetscScalar RefractionIndexRe;
32 PetscScalar RefractionIndexIm;
33 } table;
36 static table GaAs[] = {
37 {0.0620, 1.025, 0.144},
38 {0.0827, 0.836, 0.282},
39 {0.1240, 0.913, 0.974},
40 {0.1378, 0.901, 1.136},
41 {0.1550, 0.899, 1.435},
42 {0.1771, 1.063, 1.838},
43 {0.2066, 1.264, 2.472},
44 {0.2254, 1.383, 2.936},
45 {0.2480, 2.273, 4.084},
46 {0.2755, 3.913, 2.919},
47 {0.3100, 3.601, 1.920},
48 {0.3542, 3.531, 2.013},
49 {0.4133, 4.509, 1.948},
50 {0.4275, 5.052, 1.721},
51 {0.4428, 4.959, 0.991},
52 {0.4592, 4.694, 0.696},
53 {0.4769, 4.492, 0.539},
54 {0.4959, 4.333, 0.441},
55 {0.5166, 4.205, 0.371},
56 {0.5391, 4.100, 0.320},
57 {0.5636, 4.013, 0.276},
58 {0.5904, 3.904, 0.240},
59 {0.6199, 3.878, 0.211},
60 {0.6526, 3.826, 0.179},
61 {0.6888, 3.785, 0.151},
62 {0.7293, 3.742, 0.112},
63 {0.7749, 3.700, 0.091},
64 {0.8266, 3.666, 0.080},
65 {0.8856, 3.614, 0.002},
66 {1.0000, 3.509, 8.5e-5},
67 {2.0000, 3.509, 0.000},
70 class GSS_InGaAs_Optical : public PMIS_Optical
72 private:
73 int table_size;
74 public:
75 complex<PetscScalar> RefractionIndex(PetscScalar lamda, PetscScalar Eg=1.12, PetscScalar Tl=1.0) const
77 complex<PetscScalar> n(1.0,0.0);
78 if(lamda<GaAs[0].wavelength)
79 return complex<PetscScalar> (GaAs[0].RefractionIndexRe,GaAs[0].RefractionIndexIm);
80 if(lamda>GaAs[table_size-1].wavelength)
81 return complex<PetscScalar> (GaAs[table_size-1].RefractionIndexRe,GaAs[table_size-1].RefractionIndexIm);
82 for(int i=0;i<table_size-1;i++)
84 if(lamda>=GaAs[i].wavelength && lamda<=GaAs[i+1].wavelength)
86 complex<PetscScalar> n1(GaAs[i].RefractionIndexRe,GaAs[i].RefractionIndexIm);
87 complex<PetscScalar> n2(GaAs[i+1].RefractionIndexRe,GaAs[i+1].RefractionIndexIm);
88 PetscScalar d1 = lamda-GaAs[i].wavelength;
89 PetscScalar d2 = GaAs[i+1].wavelength-lamda;
90 n = (n1*d2 + n2*d1)/(d1+d2);
91 break;
94 return n;
97 // constructions
98 public:
99 GSS_InGaAs_Optical(const PMIS_Environment &env):PMIS_Optical(env)
101 table_size = sizeof(GaAs)/sizeof(table);
102 //the wave length should be scaled
103 for(int i=0;i<table_size;i++)
105 GaAs[i].wavelength*=um;
109 ~GSS_InGaAs_Optical()
114 extern "C"
116 PMIS_Optical* PMIS_InGaAs_Optical_Default (const PMIS_Environment& env)
118 return new GSS_InGaAs_Optical(env);