forked from lijiext/lammps
120 lines
3.7 KiB
C++
120 lines
3.7 KiB
C++
#ifndef ELECTRON_PHONON_EXCHANGE_H
|
|
#define ELECTRON_PHONON_EXCHANGE_H
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
using std::map;
|
|
using std::string;
|
|
|
|
#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(fstream &matfile,
|
|
map<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(fstream &matfile,
|
|
map<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(fstream &matfile,
|
|
map<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
|
|
|
|
|