ATC version 2.0, date: Aug7
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@10557 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -1,185 +0,0 @@
|
||||
#ifndef MATERIAL_H
|
||||
#define MATERIAL_H
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include "MatrixLibrary.h"
|
||||
#include "ATC_TypeDefs.h"
|
||||
#include "ATC_Error.h"
|
||||
#include "LammpsInterface.h"
|
||||
|
||||
namespace ATC
|
||||
{
|
||||
class ATC_Transfer;
|
||||
class Stress;
|
||||
class ElectronHeatCapacity;
|
||||
class ElectronHeatFlux;
|
||||
class ElectronFlux;
|
||||
class ElectronPhononExchange;
|
||||
|
||||
class Material
|
||||
{
|
||||
public:
|
||||
Material();
|
||||
virtual ~Material() {};
|
||||
/** this constructor parses material file */
|
||||
Material(string & tag, fstream & fileId);
|
||||
|
||||
/** return label */
|
||||
string label(void) {return tag_;}
|
||||
|
||||
/** check material has required interfaces */
|
||||
bool check_registry(const set<string> functionList) const
|
||||
{
|
||||
set<string>::const_iterator itr;
|
||||
for (itr=functionList.begin(); itr!=functionList.end(); itr++) {
|
||||
if (registry_.find(*itr) == registry_.end()) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/** access to material parameters */
|
||||
bool get_parameter(const string name, double & value) const
|
||||
{
|
||||
map<string,double>::const_iterator iter = parameters_.find(name);
|
||||
if ( iter == parameters_.end()) {
|
||||
value = 0.0;
|
||||
return false;
|
||||
}
|
||||
value = iter->second;
|
||||
return true;
|
||||
}
|
||||
/** true if rhs flux is linear (per field) */
|
||||
bool linear_flux(FieldName name) {
|
||||
return linearFlux_(name);
|
||||
};
|
||||
|
||||
/** true if rhs source is linear (per field) */
|
||||
bool linear_source(FieldName name) {
|
||||
return linearSource_(name);
|
||||
};
|
||||
|
||||
/** true if lhs density is constant (per field) */
|
||||
bool constant_density(FieldName name) {
|
||||
return constantDensity_(name);
|
||||
};
|
||||
|
||||
/** each of these is a field function computed at a set of points */
|
||||
/** if there is only one function it is in the base class
|
||||
** otherwise, a subsidary class is setup */
|
||||
/* -----------------------------------------------------------------*/
|
||||
/** densitities */
|
||||
/* -----------------------------------------------------------------*/
|
||||
/** thermal energy */
|
||||
void thermal_energy(const FIELDS & fields,
|
||||
FIELD & energy);
|
||||
/** heat capacity */
|
||||
void heat_capacity(const FIELDS & fields,
|
||||
FIELD & capacity);
|
||||
/** thermal energy */
|
||||
void electron_thermal_energy(const FIELDS & fields,
|
||||
FIELD & energy);
|
||||
/** electron heat capacity */
|
||||
void electron_heat_capacity(const FIELDS &fields,
|
||||
FIELD &capacity);
|
||||
/** kinetic energy */
|
||||
void kinetic_energy(const FIELDS & fields,
|
||||
FIELD & energy);
|
||||
/** mass density */
|
||||
void mass_density(const FIELDS &fields,
|
||||
FIELD &density);
|
||||
/** elastic energy */
|
||||
void elastic_energy(const FIELDS & fields,
|
||||
const GRAD_FIELDS & gradFields,
|
||||
FIELD & energy);
|
||||
/* -----------------------------------------------------------------*/
|
||||
/** fluxes */
|
||||
/* -----------------------------------------------------------------*/
|
||||
/** heat_flux */
|
||||
void heat_flux(const FIELDS & fields,
|
||||
const GRAD_FIELDS & gradFields,
|
||||
GRAD_FIELD & heatFlux);
|
||||
/** electron conduction flux */
|
||||
void electron_heat_flux(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
GRAD_FIELD &flux);
|
||||
/** stress */
|
||||
void stress(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
GRAD_FIELD &stress);
|
||||
/** computes electron flux */
|
||||
void electron_flux(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
GRAD_FIELD &flux);
|
||||
/** computes electric displacement */
|
||||
void electric_displacement(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
GRAD_FIELD &flux);
|
||||
/** computes electric field */
|
||||
void electric_field(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
GRAD_FIELD &flux);
|
||||
/* -----------------------------------------------------------------*/
|
||||
/** sources */
|
||||
/* -----------------------------------------------------------------*/
|
||||
/** electron-phonon exchange flux */
|
||||
void electron_phonon_exchange(const FIELDS &fields,
|
||||
FIELD &flux);
|
||||
/** computes net generation */
|
||||
virtual void electron_recombination(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
FIELD &flux);
|
||||
/** computes drift diffusion charge density */
|
||||
virtual void charge_density(const FIELDS &fields,
|
||||
const GRAD_FIELDS &gradFields,
|
||||
FIELD &flux);
|
||||
|
||||
|
||||
protected:
|
||||
/** material's label */
|
||||
string tag_;
|
||||
/** dictionary of material parameters */
|
||||
map<string,double> parameters_;
|
||||
/** dictionary of instantiated functions */
|
||||
set<string> registry_;
|
||||
/** per eqn flag of constant density */
|
||||
Array<bool> constantDensity_;
|
||||
/** per eqn flag of linearity/nonlinearity */
|
||||
Array<bool> linearFlux_, linearSource_;
|
||||
/** default heat capacity */
|
||||
double rhoCp_;
|
||||
/** default mass density */
|
||||
double rho_;
|
||||
/** heat capacity */
|
||||
double heatCapacity_;
|
||||
/** electron heat capacity */
|
||||
ElectronHeatCapacity * electronHeatCapacity_;
|
||||
/** mass density */
|
||||
double massDensity_;
|
||||
/** charge density */
|
||||
double chargeDensity_;
|
||||
/** thermal conductivity */
|
||||
double heatConductivity_;
|
||||
/** electron heat flux */
|
||||
ElectronHeatFlux * electronHeatFlux_;
|
||||
/** stress */
|
||||
Stress * stress_;
|
||||
/** electron-phonon exchange */
|
||||
ElectronPhononExchange * electronPhononExchange_;
|
||||
/** electron heat flux */
|
||||
ElectronFlux * electronFlux_;
|
||||
/** electric permittivity */
|
||||
double permittivity_;
|
||||
/** equilibrium carrier density */
|
||||
double electronEquilibriumDensity_;
|
||||
/** relaxation time */
|
||||
double electronRecombinationInvTau_;
|
||||
/** uniform donor concentration */
|
||||
double donorConcentration_; // NOTE only for uniform
|
||||
};
|
||||
|
||||
}
|
||||
#endif // Material.h
|
||||
|
||||
|
||||
Reference in New Issue
Block a user