1 #ifndef WEAK_EQUATION_ELECTRON_TEMPERATURE_H
2 #define WEAK_EQUATION_ELECTRON_TEMPERATURE_H
3 
4 #include <set>
5 #include <string>
6 
7 #include "WeakEquation.h"
8 
9 namespace ATC{
10 
11  /**
12    *  @class  WeakEquationElectronTemperature
13    *  @brief  Electron temperature
14    *   c T_e,t = div q_e + g(T_e-T_p) -->
15    *   int M c T_e,t = int B q_e + int N g
16    */
17 
18 class WeakEquationElectronTemperature : public WeakEquation {
19 
20   public:
21 
22   // constructor
23   WeakEquationElectronTemperature();
24 
25   // destructor
26   virtual ~WeakEquationElectronTemperature();
27 
28   /** integrand  that used to form the energy */
has_E_integrand(void)29   virtual bool has_E_integrand(void) const {return true;}
30   virtual void E_integrand(const FIELD_MATS &fields,
31                            const GRAD_FIELD_MATS &grad_fields,
32                            const Material * material,
33                            DENS_MAT &energy ) const ;
34 
35   /** density that used to form the mass matrix */
has_M_integrand(void)36   virtual bool has_M_integrand(void) const {return true;}
37   virtual void M_integrand(const FIELD_MATS &fields,
38                            const Material * material,
39                            DENS_MAT &density ) const ;
40 
41   /** flux that is integrated with B = Grad N as its weight */
has_B_integrand(void)42   virtual bool has_B_integrand(void) const {return true;}
43   virtual void B_integrand(const FIELD_MATS &fields,
44                            const GRAD_FIELD_MATS &grad_fields,
45                            const Material * material,
46                            DENS_MAT_VEC &flux) const ;
47 
48   /** flux that is integrated with N as its weight */
has_N_integrand(void)49   virtual bool has_N_integrand(void) const {return true;}
50   virtual bool N_integrand(const FIELD_MATS &fields,
51                            const GRAD_FIELD_MATS &grad_fields,
52                            const Material * material,
53                            DENS_MAT &flux) const ;
54 
55   /** necessary interfaces */
needs_material_functions(void)56   virtual std::set<std::string> needs_material_functions(void) const
57   {
58     std::string list[4] = {"electron_thermal_energy",
59                       "electron_heat_capacity",
60                       "electron_phonon_exchange",
61                       "electron_heat_flux"};
62     std::set<std::string> needs(list,list+4);
63     return needs;
64   }
65 
66 };
67 
68  /**
69    *  @class  WeakEquationElectronTemperatureJouleHeating
70    *  @brief  Electron temperature with Joule heating
71    *   c T_e,t = div q_e + g(T_e-T_p) + J.E -->
72    *   int M c T_e,t = int B q_e + int N ( g + J.E)
73    */
74 
75 class WeakEquationElectronTemperatureJouleHeating :
76   public WeakEquationElectronTemperature
77 {
78   public:
79 
80   // constructor
81   WeakEquationElectronTemperatureJouleHeating();
82 
83   // destructor
84   virtual ~WeakEquationElectronTemperatureJouleHeating();
85 
86   /** integrand  that used to form the energy */
has_E_integrand(void)87   virtual bool has_E_integrand(void) const {return true;}
88   virtual void E_integrand(const FIELD_MATS &fields,
89                            const GRAD_FIELD_MATS &grad_fields,
90                            const Material * material,
91                            DENS_MAT &energy ) const;
92 
93   /** density that used to form the mass matrix */
has_M_integrand(void)94   virtual bool has_M_integrand(void) const {return true;}
95   virtual void M_integrand(const FIELD_MATS &fields,
96                            const Material * material,
97                            DENS_MAT &density ) const;
98 
99   /** flux that is integrated with B = Grad N as its weight */
has_B_integrand(void)100   virtual bool has_B_integrand(void) const {return true;}
101   virtual void B_integrand(const FIELD_MATS &fields,
102                            const GRAD_FIELD_MATS &grad_fields,
103                            const Material * material,
104                            DENS_MAT_VEC &flux) const;
105 
106   /** flux that is integrated with N as its weight */
has_N_integrand(void)107   virtual bool has_N_integrand(void) const {return true;}
108   virtual bool N_integrand(const FIELD_MATS &fields,
109                            const GRAD_FIELD_MATS &grad_fields,
110                            const Material * material,
111                            DENS_MAT &flux) const;
112 
113   /** necessary interfaces */
needs_material_functions(void)114   virtual std::set<std::string> needs_material_functions(void) const
115   {
116     std::set<std::string> needs
117       = WeakEquationElectronTemperature::needs_material_functions();
118     needs.insert("electric_field");
119     return needs;
120   }
121 
122 
123   protected:
124 
125   /** conversion factor for charge * voltage --> mass length^2 / time^2 */
126   double eV2E_;
127 
128   mutable DENS_MAT_VEC _J_, _E_;
129 };
130 
131  /**
132    *  @class  WeakEquationElectronTemperatureConvection
133    *  @brief  Electron temperature with convection
134    *   c ( T_e,t + grad m_e J.E T_e / e ) = div q_e + g(T_e-T_p) + c n T_e grad J.E/(n e) -->
135    *   int M c T_e,t = int B ( q_e - c m_e J.E T_e / e ) + int N ( g + c n T_e grad J.E/(n e) )
136    */
137 
138 class WeakEquationElectronTemperatureConvection :
139   public WeakEquationElectronTemperature
140 {
141   public:
142 
143   // constructor
144   WeakEquationElectronTemperatureConvection();
145 
146   // destructor
147   virtual ~WeakEquationElectronTemperatureConvection();
148 
149   /** flux that is integrated with B = Grad N as its weight */
has_B_integrand(void)150   virtual bool has_B_integrand(void) const {return true;}
151   virtual void B_integrand(const FIELD_MATS &fields,
152                            const GRAD_FIELD_MATS &grad_fields,
153                            const Material * material,
154                            DENS_MAT_VEC &flux) const;
155 
156   /** flux that is integrated with N as its weight */
has_N_integrand(void)157   virtual bool has_N_integrand(void) const {return true;}
158   virtual bool N_integrand(const FIELD_MATS &fields,
159                            const GRAD_FIELD_MATS &grad_fields,
160                            const Material * material,
161                            DENS_MAT &flux) const;
162 
163   /** necessary interfaces */
needs_material_functions(void)164   virtual std::set<std::string> needs_material_functions(void) const
165   {
166     std::set<std::string> needs
167       = WeakEquationElectronTemperature::needs_material_functions();
168     needs.insert("electron_drag_power");
169     return needs;
170   }
171 
172   protected:
173 
174   /** workspace variable for the convective flux */
175   mutable DENS_MAT_VEC _convectiveFlux_;
176 
177 };
178 
179 }; // end namespace
180 #endif
181