initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / Elec / Elec_Optical.cc
blob7c1e1ddb9a50a84a131e202e384b87db6c55b9ab
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: Metal (Al)
25 #include "PMI.h"
27 typedef struct
29 PetscScalar wavelength;
30 PetscScalar RefractionIndexRe;
31 PetscScalar RefractionIndexIm;
32 } table;
35 static table Al[] = {
36 {0.0165, 1.010, 0.024},
37 {0.0172, 1.020, 0.0035},
38 {0.0376, 0.902, 0.0102},
39 {0.0620, 0.668, 0.0268},
40 {0.0800, 0.258, 0.0777},
41 {0.1033, 0.0328, 0.791},
42 {0.1600, 0.0765, 1.740},
43 {0.2066, 0.130, 2.39},
44 {0.3000, 0.276, 3.61},
45 {0.4000, 0.490, 4.86},
46 {0.5000, 0.769, 6.08},
47 {0.6000, 1.20, 7.26},
48 {0.7000, 1.83, 8.31},
49 {0.8000, 2.80, 8.45},
50 {0.9000, 2.06, 8.30},
51 {1.0000, 1.35, 9.58},
52 {1.2000, 1.21, 12.0},
53 {1.5000, 1.38, 15.4},
54 {2.0000, 2.15, 20.7},
55 {4.0000, 6.43, 39.8},
56 {10.000, 25.3, 89.8},
57 {15.000, 44.01, 1.2e2},
60 class GSS_Elec_Optical : public PMIC_Optical
62 private:
63 int table_size;
64 public:
65 complex<PetscScalar> RefractionIndex(PetscScalar lamda, PetscScalar Eg=0.0, PetscScalar Tl=1.0) const
67 complex<PetscScalar> n(1.0,0.0);
68 if(lamda<Al[0].wavelength)
69 return complex<PetscScalar> (Al[0].RefractionIndexRe,Al[0].RefractionIndexIm);
70 if(lamda>Al[table_size-1].wavelength)
71 return complex<PetscScalar> (Al[table_size-1].RefractionIndexRe,Al[table_size-1].RefractionIndexIm);
72 for(int i=0;i<table_size-1;i++)
74 if(lamda>=Al[i].wavelength && lamda<=Al[i+1].wavelength)
76 complex<PetscScalar> n1(Al[i].RefractionIndexRe,Al[i].RefractionIndexIm);
77 complex<PetscScalar> n2(Al[i+1].RefractionIndexRe,Al[i+1].RefractionIndexIm);
78 PetscScalar d1 = lamda-Al[i].wavelength;
79 PetscScalar d2 = Al[i+1].wavelength-lamda;
80 n = (n1*d2 + n2*d1)/(d1+d2);
81 break;
84 return n;
87 // constructions
88 public:
89 GSS_Elec_Optical(const PMIC_Environment &env):PMIC_Optical(env)
91 table_size = sizeof(Al)/sizeof(table);
92 //the wave length should be scaled
93 for(int i=0;i<table_size;i++)
95 Al[i].wavelength*=um;
99 ~GSS_Elec_Optical(){}
103 extern "C"
105 PMIC_Optical* PMIC_Elec_Optical_Default (const PMIC_Environment& env)
107 return new GSS_Elec_Optical(env);