Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F88805574
WeakEquationElectronMomentum.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
Sun, Oct 20, 18:52
Size
6 KB
Mime Type
text/x-c
Expires
Tue, Oct 22, 18:52 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21822970
Attached To
rLAMMPS lammps
WeakEquationElectronMomentum.cpp
View Options
#include "WeakEquationElectronMomentum.h"
#include "Material.h"
#include "LammpsInterface.h"
namespace
ATC
{
//==============================================================
// Class WeakEquationElectronMomentum
//==============================================================
//--------------------------------------------------------------
// Constructor
//--------------------------------------------------------------
WeakEquationElectronMomentum
::
WeakEquationElectronMomentum
()
:
WeakEquation
(
STATIC_PDE
,
ELECTRON_VELOCITY
,
3
)
{}
//--------------------------------------------------------------
// Destructor
//--------------------------------------------------------------
WeakEquationElectronMomentum
::~
WeakEquationElectronMomentum
()
{}
void
WeakEquationElectronMomentum
::
convection
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
{
// set up mass density
FIELD_MATS
::
const_iterator
nField
=
fields
.
find
(
ELECTRON_DENSITY
);
const
DENS_MAT
&
n
=
nField
->
second
;
DENS_MAT
nMe
(
n
.
nRows
(),
n
.
nCols
());
material
->
inv_effective_mass
(
fields
,
nMe
);
nMe
=
n
.
div_by_element
(
nMe
);
// set up velocity and flux
FIELD_MATS
::
const_iterator
vField
=
fields
.
find
(
ELECTRON_VELOCITY
);
const
DENS_MAT
&
velocity
=
vField
->
second
;
const
CLON_VEC
u
(
velocity
,
CLONE_COL
,
0
);
const
CLON_VEC
v
(
velocity
,
CLONE_COL
,
1
);
const
CLON_VEC
w
(
velocity
,
CLONE_COL
,
2
);
flux
[
0
]
=
velocity
;
flux
[
1
]
=
velocity
;
flux
[
2
]
=
velocity
;
CLON_VEC
nuu
(
flux
[
0
],
CLONE_COL
,
0
);
CLON_VEC
nuv
(
flux
[
1
],
CLONE_COL
,
0
);
CLON_VEC
nuw
(
flux
[
2
],
CLONE_COL
,
0
);
CLON_VEC
nvu
(
flux
[
0
],
CLONE_COL
,
1
);
CLON_VEC
nvv
(
flux
[
1
],
CLONE_COL
,
1
);
CLON_VEC
nvw
(
flux
[
2
],
CLONE_COL
,
1
);
CLON_VEC
nwu
(
flux
[
0
],
CLONE_COL
,
2
);
CLON_VEC
nwv
(
flux
[
1
],
CLONE_COL
,
2
);
CLON_VEC
nww
(
flux
[
2
],
CLONE_COL
,
2
);
for
(
int
i
=
0
;
i
<
n
.
nRows
();
i
++
)
{
// tensor product of velocities
nuu
(
i
)
*=
nMe
(
i
,
0
)
*
u
(
i
);
nuv
(
i
)
*=
nMe
(
i
,
0
)
*
v
(
i
);
nuw
(
i
)
*=
nMe
(
i
,
0
)
*
w
(
i
);
nvu
(
i
)
*=
nMe
(
i
,
0
)
*
u
(
i
);
nvv
(
i
)
*=
nMe
(
i
,
0
)
*
v
(
i
);
nvw
(
i
)
*=
nMe
(
i
,
0
)
*
w
(
i
);
nwu
(
i
)
*=
nMe
(
i
,
0
)
*
u
(
i
);
nwv
(
i
)
*=
nMe
(
i
,
0
)
*
v
(
i
);
nww
(
i
)
*=
nMe
(
i
,
0
)
*
w
(
i
);
}
};
//---------------------------------------------------------------------
// compute mass density
//---------------------------------------------------------------------
void
WeakEquationElectronMomentum
::
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
density
)
const
{
material
->
electron_mass_density
(
fields
,
density
);
}
//--------------------------------------------------------------
void
WeakEquationElectronMomentum
::
B_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT_VEC
&
flux
)
const
{
convection
(
fields
,
material
,
flux
);
}
//==============================================================
// Class WeakEquationElectronMomentumDDM
//==============================================================
//--------------------------------------------------------------
// Constructor
//--------------------------------------------------------------
WeakEquationElectronMomentumDDM
::
WeakEquationElectronMomentumDDM
()
:
WeakEquationElectronMomentum
()
{
DENS_MAT
dummy
;
_dnCp_
.
reserve
(
nsd_
);
for
(
int
i
=
0
;
i
<
nsd_
;
i
++
)
_dnCp_
.
push_back
(
dummy
);
_electricForce_
.
reserve
(
nsd_
);
for
(
int
i
=
0
;
i
<
nsd_
;
i
++
)
_electricForce_
.
push_back
(
dummy
);
}
//--------------------------------------------------------------
// Destructor
//--------------------------------------------------------------
WeakEquationElectronMomentumDDM
::~
WeakEquationElectronMomentumDDM
()
{}
void
WeakEquationElectronMomentumDDM
::
thermal_stress
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
gradFields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
{
GRAD_FIELD_MATS
::
const_iterator
dtField
=
gradFields
.
find
(
ELECTRON_TEMPERATURE
);
const
DENS_MAT_VEC
&
DTe
=
dtField
->
second
;
CLON_VEC
tsx
(
flux
,
CLONE_COL
,
0
);
CLON_VEC
tsy
(
flux
,
CLONE_COL
,
1
);
CLON_VEC
tsz
(
flux
,
CLONE_COL
,
2
);
// ith velocity component has thermal stress of
// d_i n * Cp * Te
DENS_MAT
nCp
(
DTe
[
0
].
nRows
(),
DTe
[
0
].
nCols
());
material
->
electron_heat_capacity
(
fields
,
nCp
);
nCp
*=
2.
/
3.
;
// correction to capacity account for convection
tsx
+=
nCp
.
mult_by_element
(
DTe
[
0
]);
tsy
+=
nCp
.
mult_by_element
(
DTe
[
1
]);
tsz
+=
nCp
.
mult_by_element
(
DTe
[
2
]);
FIELD_MATS
::
const_iterator
tField
=
fields
.
find
(
ELECTRON_TEMPERATURE
);
const
DENS_MAT
&
Te
=
tField
->
second
;
material
->
D_electron_heat_capacity
(
fields
,
gradFields
,
_dnCp_
);
for
(
int
i
=
0
;
i
<
nsd_
;
i
++
)
_dnCp_
[
i
]
*=
2.
/
3.
;
// correction to capacity account for convection
tsx
+=
Te
.
mult_by_element
(
_dnCp_
[
0
]);
tsy
+=
Te
.
mult_by_element
(
_dnCp_
[
1
]);
tsz
+=
Te
.
mult_by_element
(
_dnCp_
[
2
]);
}
//---------------------------------------------------------------------
// compute mass density
//---------------------------------------------------------------------
void
WeakEquationElectronMomentumDDM
::
M_integrand
(
const
FIELD_MATS
&
fields
,
const
Material
*
material
,
DENS_MAT
&
density
)
const
{
material
->
electron_drag_velocity_coefficient
(
fields
,
density
);
}
//--------------------------------------------------------------
bool
WeakEquationElectronMomentumDDM
::
N_integrand
(
const
FIELD_MATS
&
fields
,
const
GRAD_FIELD_MATS
&
grad_fields
,
const
Material
*
material
,
DENS_MAT
&
flux
)
const
{
FIELD_MATS
::
const_iterator
vField
=
fields
.
find
(
ELECTRON_VELOCITY
);
const
DENS_MAT
&
velocity
=
vField
->
second
;
flux
.
reset
(
velocity
.
nRows
(),
velocity
.
nCols
());
thermal_stress
(
fields
,
grad_fields
,
material
,
flux
);
material
->
electric_displacement
(
fields
,
grad_fields
,
_electricForce_
);
FIELD_MATS
::
const_iterator
nField
=
fields
.
find
(
ELECTRON_DENSITY
);
const
DENS_MAT
&
n
=
nField
->
second
;
CLON_VEC
tsx
(
flux
,
CLONE_COL
,
0
);
CLON_VEC
tsy
(
flux
,
CLONE_COL
,
1
);
CLON_VEC
tsz
(
flux
,
CLONE_COL
,
2
);
tsx
+=
n
.
mult_by_element
(
_electricForce_
[
0
]);
tsy
+=
n
.
mult_by_element
(
_electricForce_
[
1
]);
tsz
+=
n
.
mult_by_element
(
_electricForce_
[
2
]);
return
true
;
}
};
// END namespace
Event Timeline
Log In to Comment