initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / Cu / Cu_Optical.cc
blobb3beca59728edcb4d40f93ed9faea411fa718d83
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: Cu
25 #include "PMI.h"
27 typedef struct
29 PetscScalar wavelength;
30 PetscScalar RefractionIndexRe;
31 PetscScalar RefractionIndexIm;
32 } table;
34 //Source: FreeSnell
35 static table Cu[] = {
36 {0.0200, 0.97, 0.11},
37 {0.0400, 0.8799, 0.2401},
38 {0.0600, 0.8935, 0.423},
39 {0.0800, 0.9801, 0.6901},
40 {0.0900, 1.064, 0.72},
41 {0.1000, 1.086, 0.726},
42 {0.1500, 1.03, 1.00},
43 {0.2000, 0.988, 1.504},
44 {0.3000, 1.393, 1.670},
45 {0.4000, 1.175, 2.130},
46 {0.5000, 1.134, 2.570 },
47 {0.6000, 0.747, 3.362 },
48 {0.7000, 0.412, 4.203 },
49 {0.8000, 0.454, 4.978 },
50 {0.9000, 0.496, 5.754 },
51 {1.0000, 0.538, 6.530 },
52 {1.5000, 0.733, 10.017},
53 {2.0000, 0.879, 13.400},
54 {3.0000, 1.562, 20.055},
55 {4.0000, 2.250, 26.500},
56 {5.0000, 3.260, 33.000},
57 {6.0000, 3.944, 39.078},
58 {7.0000, 4.942, 45.336},
59 {8.0000, 6.074, 51.292},
60 {9.0000, 7.118, 57.167},
61 {10.000, 8.310, 63.000},
62 };
64 class GSS_Cu_Optical : public PMIC_Optical
66 private:
67 int table_size;
68 public:
69 complex<PetscScalar> RefractionIndex(PetscScalar lamda, PetscScalar Eg=0.0, PetscScalar Tl=1.0) const
71 complex<PetscScalar> n(1.0,0.0);
72 if(lamda<Cu[0].wavelength)
73 return complex<PetscScalar> (Cu[0].RefractionIndexRe,Cu[0].RefractionIndexIm);
74 if(lamda>Cu[table_size-1].wavelength)
75 return complex<PetscScalar> (Cu[table_size-1].RefractionIndexRe,Cu[table_size-1].RefractionIndexIm);
76 for(int i=0;i<table_size-1;i++)
78 if(lamda>=Cu[i].wavelength && lamda<=Cu[i+1].wavelength)
80 complex<PetscScalar> n1(Cu[i].RefractionIndexRe,Cu[i].RefractionIndexIm);
81 complex<PetscScalar> n2(Cu[i+1].RefractionIndexRe,Cu[i+1].RefractionIndexIm);
82 PetscScalar d1 = lamda-Cu[i].wavelength;
83 PetscScalar d2 = Cu[i+1].wavelength-lamda;
84 n = (n1*d2 + n2*d1)/(d1+d2);
85 break;
88 return n;
91 // constructions
92 public:
93 GSS_Cu_Optical(const PMIC_Environment &env):PMIC_Optical(env)
95 table_size = sizeof(Cu)/sizeof(table);
96 //the wave length should be scaled
97 for(int i=0;i<table_size;i++)
99 Cu[i].wavelength*=um;
103 ~GSS_Cu_Optical(){}
107 extern "C"
109 PMIC_Optical* PMIC_Cu_Optical_Default (const PMIC_Environment& env)
111 return new GSS_Cu_Optical(env);