Update ChangeLog
[gss-tcad.git] / src / material / S-SiO2 / SiO2S_Optical.cc
blob277ae04027cd9a55ba78b948802d9dd420cccc62
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 Simulator. */
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: SiO2 as semicondcutor
25 #include "PMI.h"
27 typedef struct
29 PetscScalar wavelength;
30 PetscScalar RefractionIndexRe;
31 PetscScalar RefractionIndexIm;
32 } table;
35 static table SiO2[] = {
36 {0.0496, 0.733, 0.325},
37 {0.0550, 0.822, 0.408},
38 {0.0620, 0.859, 0.585},
39 {0.0689, 0.957, 0.717},
40 {0.0775, 1.172, 0.808},
41 {0.0886, 1.265, 0.861},
42 {0.1033, 1.475, 0.323},
43 {0.1240, 2.330, 0.056},
44 {0.1305, 2.092, 1.89e-2},
45 {0.1378, 1.904, 5.57e-3},
46 {0.1459, 1.702, 3.2e-5},
47 {0.1550, 1.600, 0.e0},
48 {0.1771, 1.567, 0.e0},
49 {0.1907, 1.543, 0.e0},
50 {0.2066, 1.520, 0.e0},
51 {0.2302, 1.500, 0.e0},
52 {0.2652, 1.490, 0.e0},
53 {0.2894, 1.480, 0.e0},
54 {0.3303, 1.475, 0.e0},
55 {0.3610, 1.469, 0.e0},
56 {0.4046, 1.460, 0.e0},
57 {0.5460, 1.455, 0.e0},
58 {1.0139, 1.450, 0.e0},
59 {1.5295, 1.444, 0.e0},
60 {1.8131, 1.440, 0.e0},
61 {2.4374, 1.430, 0.e0},
62 {3.3026, 1.411, 0.e0},
63 {3.5564, 1.404, 0.e0},
64 {5.0000, 1.342, 0.e0},
65 {6.0000, 1.266, 0.e0},
66 {7.0000, 1.093, 0.e0},
67 {7.5000, 0.9025, 0.e0},
68 {7.5000, 0.9025, 0.e0},
71 class GSS_SiO2_Optical : public PMIS_Optical
73 private:
74 int table_size;
75 public:
76 complex<PetscScalar> RefractionIndex(PetscScalar lamda, PetscScalar Eg=9.0, PetscScalar Tl=1.0) const
78 complex<PetscScalar> n(1.0,0.0);
79 if(lamda<SiO2[0].wavelength)
80 return complex<PetscScalar> (SiO2[0].RefractionIndexRe,SiO2[0].RefractionIndexIm);
81 if(lamda>SiO2[table_size-1].wavelength)
82 return complex<PetscScalar> (SiO2[table_size-1].RefractionIndexRe,SiO2[table_size-1].RefractionIndexIm);
83 for(int i=0;i<table_size-1;i++)
85 if(lamda>=SiO2[i].wavelength && lamda<=SiO2[i+1].wavelength)
87 complex<PetscScalar> n1(SiO2[i].RefractionIndexRe,SiO2[i].RefractionIndexIm);
88 complex<PetscScalar> n2(SiO2[i+1].RefractionIndexRe,SiO2[i+1].RefractionIndexIm);
89 PetscScalar d1 = lamda-SiO2[i].wavelength;
90 PetscScalar d2 = SiO2[i+1].wavelength-lamda;
91 n = (n1*d2 + n2*d1)/(d1+d2);
92 break;
95 return n;
98 // constructions
99 public:
100 GSS_SiO2_Optical(const PMIS_Environment &env):PMIS_Optical(env)
102 table_size = sizeof(SiO2)/sizeof(table);
103 //the wave length should be scaled
104 for(int i=0;i<table_size;i++)
106 SiO2[i].wavelength*=um;
110 ~GSS_SiO2_Optical(){}
114 extern "C"
116 PMIS_Optical* PMIS_SiO2S_Optical_Default (const PMIS_Environment& env)
118 return new GSS_SiO2_Optical(env);