Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F81021350
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, Sep 3, 20:07
Size
6 KB
Mime Type
text/x-c
Expires
Thu, Sep 5, 20:07 (2 d)
Engine
blob
Format
Raw Data
Handle
20431995
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