initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / include / material.h
blob67d9888386a38b836d5a652d436a4f95fd67b709
1 /*****************************************************************************/
2 /* 8888888 88888888 88888888 */
3 /* 8 8 8 */
4 /* 8 8 8 */
5 /* 8 88888888 88888888 */
6 /* 8 8888 8 8 */
7 /* 8 8 8 8 */
8 /* 888888 888888888 888888888 */
9 /* */
10 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
11 /* */
12 /* GSS 0.4x */
13 /* Last update: Oct 17 2005 */
14 /* */
15 /* Gong Ding */
16 /* gdiso@ustc.edu */
17 /* NINT, No.69 P.O.Box, Xi'an City, China */
18 /* */
19 /*****************************************************************************/
21 #ifndef _material_h_
22 #define _material_h_
24 #include "cmdbuf.h"
25 #include "phy_scale.h"
26 #include "element.h"
27 #include "petsc.h"
28 #include "solverdef.h"
29 #include "soldata.h"
30 #include "../material/matdefine.h"
31 #include "PMI.h"
33 int init_PMI_Semiconductor(CmdBuf *pcmdbuf, PMISDefine & PMIS_define);
35 class PhysicalConst
37 public:
38 PetscScalar kb; // Boltzmann constant
39 PetscScalar e; // elementary charge
40 PetscScalar me; // electron mass
41 PetscScalar eps0; // electric constant
42 PetscScalar mu0; // magnetic constant
43 PetscScalar h; // Planck constant
44 PetscScalar hbar; // Reduced Planck constant
45 public:
46 PhysicalConst(PhysicalUnitScale *unit_scale);
50 //----------------------------------------------------------------
51 class MatSemiconductor: public PhysicalConst
53 public:
54 PhysicalUnitScale *pscale;
55 // variables take to tcl script
56 public:
57 Node *pnode;
58 SemiAuxData *plocal_semi_data;
59 PetscScalar time;
60 void *dp;
61 void * (*set_ad_num)(const unsigned int);
62 PMIS_BasicParameter *basic;
63 PMIS_BandStructure *band;
64 PMIS_Mobility *mob;
65 PMIS_Avalanche *gen;
66 PMIS_Thermal *thermal;
67 PMIS_Optical *optical;
68 void mapping(Node*, SemiAuxData*, PetscScalar);
69 public:
70 MatSemiconductor(const char *, const char *,PMISDefine &PMIS_define,PhysicalUnitScale *unit_scale);
71 ~MatSemiconductor();
75 //----------------------------------------------------------------
76 class MatInsulator: public PhysicalConst
78 public:
79 PhysicalUnitScale *pscale;
80 Node *pnode;
81 ISAuxData *plocal_is_data;
82 PetscScalar time;
83 void *dp;
84 PMII_BasicParameter *basic;
85 PMII_Thermal *thermal;
86 PMII_Optical *optical;
87 void mapping(Node*, ISAuxData*, PetscScalar);
88 public:
89 MatInsulator(const char *, const char *,PhysicalUnitScale *unit_scale);
90 ~MatInsulator();
94 //----------------------------------------------------------------//```
95 class MatConductor: public PhysicalConst
97 public:
98 PhysicalUnitScale *pscale;
99 Node *pnode;
100 ELAuxData *plocal_el_data;
101 PetscScalar time;
102 void *dp;
103 PMIC_BasicParameter *basic;
104 PMIC_Thermal *thermal;
105 PMIC_Optical *optical;
106 void mapping(Node*,ELAuxData*,PetscScalar);
107 public:
108 MatConductor(const char *, const char *,PhysicalUnitScale *unit_scale);
109 ~MatConductor();
113 //----------------------------------------------------------------//```
114 class MatVacuum: public PhysicalConst
116 public:
117 PhysicalUnitScale *pscale;
118 Node *pnode;
119 VacuumAuxData *plocal_vac_data;
120 PetscScalar time;
121 void *dp;
122 PMIV_BasicParameter *basic;
123 PMIV_Thermal *thermal;
124 void mapping(Node*,VacuumAuxData*,PetscScalar);
125 public:
126 MatVacuum(const char *, const char *,PhysicalUnitScale *unit_scale);
127 ~MatVacuum();
131 //----------------------------------------------------------------
132 class MatPML: public PhysicalConst
134 public:
135 PhysicalUnitScale *pscale;
136 Node *pnode;
137 PMLAuxData *plocal_pml_data;
138 PetscScalar time;
139 void *dp;
140 PMIP_BasicParameter *basic;
141 PMIP_Thermal *thermal;
142 void mapping(Node*,PMLAuxData*,PetscScalar);
143 public:
144 MatPML(const char *, const char *,PhysicalUnitScale *unit_scale);
145 ~MatPML();
148 #endif