forked from lijiext/lammps
74 lines
2.1 KiB
C
74 lines
2.1 KiB
C
|
#ifndef ELECTRON_DRAG_POWER_H
|
||
|
#define ELECTRON_DRAG_POWER_H
|
||
|
|
||
|
#include <map>
|
||
|
#include <string>
|
||
|
|
||
|
using std::map;
|
||
|
using std::string;
|
||
|
|
||
|
#include "Material.h"
|
||
|
#include "ATC_TypeDefs.h"
|
||
|
|
||
|
namespace ATC {
|
||
|
|
||
|
/**
|
||
|
* @class ElectronDragPower
|
||
|
* @brief Base class for defining the lattice drag power from electrons
|
||
|
*/
|
||
|
|
||
|
class ElectronDragPower
|
||
|
{
|
||
|
public:
|
||
|
ElectronDragPower() {};
|
||
|
virtual ~ElectronDragPower() {};
|
||
|
/** computes drag power */
|
||
|
virtual bool electron_drag_power(const FIELD_MATS &fields,
|
||
|
const GRAD_FIELD_MATS &gradFields,
|
||
|
DENS_MAT & flux)
|
||
|
{
|
||
|
return false;
|
||
|
};
|
||
|
virtual void electron_drag_velocity_coefficient(const FIELD_MATS &fields,
|
||
|
DENS_MAT & dragCoef)
|
||
|
{
|
||
|
FIELD_MATS::const_iterator t_field = fields.find(TEMPERATURE);
|
||
|
dragCoef.reset((t_field->second).nRows(),1); // zero out matrix, resize if necessary
|
||
|
};
|
||
|
};
|
||
|
//-------------------------------------------------------------------
|
||
|
|
||
|
/**
|
||
|
* @class ElectronDragPowerLinear
|
||
|
* @brief Class for electron drag that linearly depends on the difference between the electron and lattice velocities
|
||
|
*/
|
||
|
|
||
|
class ElectronDragPowerLinear : public ElectronDragPower
|
||
|
{
|
||
|
public:
|
||
|
ElectronDragPowerLinear(fstream &matfile,
|
||
|
map<string,double> & parameters,
|
||
|
Material * material_);
|
||
|
virtual ~ElectronDragPowerLinear() {};
|
||
|
virtual bool electron_drag_power(const FIELD_MATS &fields,
|
||
|
const GRAD_FIELD_MATS &gradFields,
|
||
|
DENS_MAT & flux);
|
||
|
virtual void electron_drag_velocity_coefficient(const FIELD_MATS &fields,
|
||
|
DENS_MAT & dragCoef);
|
||
|
|
||
|
protected:
|
||
|
|
||
|
double electronDragInvTau_;
|
||
|
Material * material_;
|
||
|
|
||
|
// used to avoid unnecessary resizing
|
||
|
DENS_MAT dragCoefWorkspace_;
|
||
|
DENS_MAT invEffMassWorkspace_;
|
||
|
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|