File: ElectronPhononExchange.h

package info (click to toggle)
lammps 20220106.git7586adbb6a%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 348,064 kB
  • sloc: cpp: 831,421; python: 24,896; xml: 14,949; f90: 10,845; ansic: 7,967; sh: 4,226; perl: 4,064; fortran: 2,424; makefile: 1,501; objc: 238; lisp: 163; csh: 16; awk: 14; tcl: 6
file content (116 lines) | stat: -rw-r--r-- 3,785 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#ifndef ELECTRON_PHONON_EXCHANGE_H
#define ELECTRON_PHONON_EXCHANGE_H

#include <map>
#include <string>
#include <fstream>
#include "ATC_TypeDefs.h"

namespace ATC {

  class Material;

  /**
   *  @class  ElectronPhononExchange
   *  @brief  Base class for energy exchange between the electron and phonon temperatures
   */

  class ElectronPhononExchange
  {
    public:
      ElectronPhononExchange()  {};
      virtual ~ElectronPhononExchange() {};
      /** computes heat capacity */
      virtual bool electron_phonon_exchange(const FIELD_MATS & /* fields */,
                                            DENS_MAT & /* flux */) { return false; }
  };
  //-------------------------------------------------------------------

  /**
   *  @class  ElectronPhononExchangeLinear
   *  @brief  Class for electron-phonon energy exchange proportional to the difference between the two temperatures
   */

  class ElectronPhononExchangeLinear : public ElectronPhononExchange
  {
    public:
      ElectronPhononExchangeLinear(std::fstream &matfile,
                                   std::map<std::string,double> & parameters);
      virtual ~ElectronPhononExchangeLinear() {};
      virtual bool electron_phonon_exchange(const FIELD_MATS &fields,
                                                  DENS_MAT &flux)
      {
        FIELD_MATS::const_iterator tField = fields.find(TEMPERATURE);
        FIELD_MATS::const_iterator etField = fields.find(ELECTRON_TEMPERATURE);
        const DENS_MAT & T  = tField->second;
        const DENS_MAT & Te = etField->second;

        // flux = g * ( T- Te)
        flux = Te - T;
        flux *= exchangeCoef_;
        return true;
      };
    protected:
      double exchangeCoef_;
  };
  //-------------------------------------------------------------------

  /**
   *  @class  ElectronPhononExchangePowerLaw
   *  @brief  Class for electron-phonon exchange proportional to the temperature difference raised to a constant power
   */

  class ElectronPhononExchangePowerLaw : public ElectronPhononExchange
  {
    public:
      ElectronPhononExchangePowerLaw(std::fstream &matfile,
                                     std::map<std::string,double> & parameters);
      virtual ~ElectronPhononExchangePowerLaw() {};
      virtual bool electron_phonon_exchange(const FIELD_MATS &fields,
                                                  DENS_MAT &flux)
      {
        FIELD_MATS::const_iterator tField = fields.find(TEMPERATURE);
        FIELD_MATS::const_iterator etField = fields.find(ELECTRON_TEMPERATURE);
        const DENS_MAT & T  = tField->second;
        const DENS_MAT & Te = etField->second;

        // flux = g c_e T_e (T_e - T_p)^5 / T_e
        flux = (Te - T).pow(exponent_);
        flux *= exchangeCoef_;
        return true;
      };
    protected:
      double exchangeCoef_;
      int exponent_;
  };
  //-------------------------------------------------------------------

  /**
   *  @class  ElectronPhononExchangeHertel
   *  @brief  Class for electron-phonon exchange based on the formulation of Hertel for Cu
   */

  class ElectronPhononExchangeHertel : public ElectronPhononExchange
  {
    public:
      ElectronPhononExchangeHertel(std::fstream &matfile,
                                   std::map<std::string,double> & parameters,
                                   Material * material);
      virtual ~ElectronPhononExchangeHertel() {};
      virtual bool electron_phonon_exchange(const FIELD_MATS &fields,
                                                  DENS_MAT &flux);
    protected:
      double exchangeCoef_;
      double debeyeTemperature_;
      double massEnhancement_;
      Material * material_;

  private:
      ElectronPhononExchangeHertel() {};
      DENS_MAT capacityWorkspace_;
  };
}

#endif