Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F82645950
WeakEquationElectronTemperature.cpp
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
Thu, Sep 12, 15:22
Size
7 KB
Mime Type
text/x-c
Expires
Sat, Sep 14, 15:22 (2 d)
Engine
blob
Format
Raw Data
Handle
20725706
Attached To
rLAMMPS lammps
WeakEquationElectronTemperature.cpp
View Options
#include "WeakEquationElectronTemperature.h"
#include "Material.h"
#include <iostream>
#include <fstream>
namespace
ATC
{
//==============================================================
// Class WeakEquationElectronTemperature
//==============================================================
//--------------------------------------------------------------
// Constructor
//--------------------------------------------------------------
WeakEquationElectronTemperature
::
WeakEquationElectronTemperature
()
:
WeakEquation
(
DYNAMIC_PDE
,
ELECTRON_TEMPERATURE
,
1
)
{
}
//--------------------------------------------------------------
// Destructor
//---------------------------------------------------------------------
WeakEquationElectronTemperature
::~
WeakEquationElectronTemperature
(
void
)
{}
//---------------------------------------------------------------------
// compute energy
//---------------------------------------------------------------------
void
WeakEquationElectronTemperature
::
E_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
energy
)
const
{
material
->
electron_thermal_energy
(
fields
,
energy
);
}
//---------------------------------------------------------------------
// compute heat capacities
//---------------------------------------------------------------------
void
WeakEquationElectronTemperature
::
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
capacity
)
const
{
material
->
electron_heat_capacity
(
fields
,
capacity
);
}
//---------------------------------------------------------------------
// compute heat fluxes
//---------------------------------------------------------------------
void
WeakEquationElectronTemperature
::
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
{
material
->
electron_heat_flux
(
fields
,
grad_fields
,
flux
);
}
//---------------------------------------------------------------------
// compute exchange fluxes
//---------------------------------------------------------------------
bool
WeakEquationElectronTemperature
::
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
{
DENS_MAT
exchange_flux
;
bool
has
=
material
->
electron_phonon_exchange
(
fields
,
exchange_flux
);
if
(
has
)
flux
=
-
1.
*
exchange_flux
;
return
has
;
}
//==============================================================
// Class WeakEquationElectronJouleHeating
//==============================================================
//--------------------------------------------------------------
// Constructor
//--------------------------------------------------------------
WeakEquationElectronTemperatureJouleHeating
::
WeakEquationElectronTemperatureJouleHeating
()
:
WeakEquationElectronTemperature
()
{
// convert charge * voltage --> mass length^2 / time^2
//eV2E_ = (ATC::LammpsInterface::instance()->qe2f())
// * (ATC::LammpsInterface::instance()->ftm2v());
eV2E_
=
ATC
::
LammpsInterface
::
instance
()
->
qv2e
();
int
nSD
=
3
;
_J_
.
assign
(
nSD
,
DENS_MAT
());
_E_
.
assign
(
nSD
,
DENS_MAT
());
}
//--------------------------------------------------------------
// Destructor
//---------------------------------------------------------------------
WeakEquationElectronTemperatureJouleHeating
::~
WeakEquationElectronTemperatureJouleHeating
(
void
)
{}
//---------------------------------------------------------------------
void
WeakEquationElectronTemperatureJouleHeating
::
E_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
energy
)
const
{
WeakEquationElectronTemperature
::
E_integrand
(
fields
,
grad_fields
,
material
,
energy
);
}
//---------------------------------------------------------------------
void
WeakEquationElectronTemperatureJouleHeating
::
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
capacity
)
const
{
WeakEquationElectronTemperature
::
M_integrand
(
fields
,
material
,
capacity
);
}
//---------------------------------------------------------------------
void
WeakEquationElectronTemperatureJouleHeating
::
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
{
WeakEquationElectronTemperature
::
B_integrand
(
fields
,
grad_fields
,
material
,
flux
);
}
//---------------------------------------------------------------------
bool
WeakEquationElectronTemperatureJouleHeating
::
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
{
// call base class to get electron_temperature terms
WeakEquationElectronTemperature
::
N_integrand
(
fields
,
grad_fields
,
material
,
flux
);
// Joule heating = -I.grad Psi = J.grad Psi \approx J.E
DENS_MAT
jouleHeating
;
material
->
electron_flux
(
fields
,
grad_fields
,
_J_
);
material
->
electric_field
(
fields
,
grad_fields
,
_E_
);
jouleHeating
=
_J_
[
0
].
mult_by_element
(
_E_
[
0
]);
for
(
DENS_MAT_VEC
::
size_type
i
=
1
;
i
<
_J_
.
size
();
i
++
)
jouleHeating
+=
_J_
[
i
].
mult_by_element
(
_E_
[
i
]);
jouleHeating
*=
eV2E_
;
flux
-=
jouleHeating
;
return
true
;
}
//==============================================================
// Class WeakEquationElectronConvection
//==============================================================
//--------------------------------------------------------------
// Constructor
//--------------------------------------------------------------
WeakEquationElectronTemperatureConvection
::
WeakEquationElectronTemperatureConvection
()
:
WeakEquationElectronTemperatureJouleHeating
()
{
int
nSD
=
3
;
_convectiveFlux_
.
assign
(
nSD
,
DENS_MAT
());
}
//--------------------------------------------------------------
// Destructor
//---------------------------------------------------------------------
WeakEquationElectronTemperatureConvection
::~
WeakEquationElectronTemperatureConvection
(
void
)
{
// do nothing
}
//---------------------------------------------------------------------
void
WeakEquationElectronTemperatureConvection
::
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
{
// add diffusion term
WeakEquationElectronTemperatureJouleHeating
::
B_integrand
(
fields
,
grad_fields
,
material
,
flux
);
//flux[0] = 0.;
//flux[1] = 0.;
//flux[2] = 0.;
// add convection term
DENS_MAT_VEC
convectiveFlux
;
material
->
electron_heat_convection
(
fields
,
_convectiveFlux_
);
flux
[
0
]
+=
_convectiveFlux_
[
0
];
flux
[
1
]
+=
_convectiveFlux_
[
1
];
flux
[
2
]
+=
_convectiveFlux_
[
2
];
}
//---------------------------------------------------------------------
bool
WeakEquationElectronTemperatureConvection
::
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
{
// call base class to get electron_temperature terms
WeakEquationElectronTemperatureJouleHeating
::
N_integrand
(
fields
,
grad_fields
,
material
,
flux
);
#ifdef TEST
// add exchange with kinetic energy
DENS_MAT
keExchange
;
DENS_MAT
capacity
;
material
->
electron_heat_capacity
(
fields
,
capacity
);
capacity
*=
2.
/
3.
;
// correction in DDM equations
//FIELD_MATS::const_iterator dField = fields.find(ELECTRON_DENSITY);
FIELD_MATS
::
const_iterator
tField
=
fields
.
find
(
ELECTRON_TEMPERATURE
);
//const DENS_MAT & density = dField->second;
const
DENS_MAT
&
temperature
=
tField
->
second
;
GRAD_FIELD_MATS
::
const_iterator
velocityGradients
=
grad_fields
.
find
(
ELECTRON_VELOCITY
);
const
DENS_MAT_VEC
&
dv
=
velocityGradients
->
second
;
CLON_VEC
vxx
(
dv
[
0
],
CLONE_COL
,
0
);
CLON_VEC
vyy
(
dv
[
1
],
CLONE_COL
,
1
);
CLON_VEC
vzz
(
dv
[
2
],
CLONE_COL
,
2
);
keExchange
=
vxx
+
vyy
+
vzz
;
//keExchange *= density;
keExchange
*=
temperature
;
keExchange
*=
capacity
;
flux
-=
keExchange
;
#endif
return
true
;
}
};
// end namespace
Event Timeline
Log In to Comment