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