Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F86780329
Material.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Tue, Oct 8, 14:08
Size
6 KB
Mime Type
text/x-c
Expires
Thu, Oct 10, 14:08 (2 d)
Engine
blob
Format
Raw Data
Handle
21294597
Attached To
rLAMMPS lammps
Material.h
View Options
#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
Event Timeline
Log In to Comment