Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F87138224
CauchyBorn.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
Thu, Oct 10, 21:04
Size
4 KB
Mime Type
text/x-c
Expires
Sat, Oct 12, 21:04 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21490550
Attached To
rLAMMPS lammps
CauchyBorn.h
View Options
#ifndef CAUCHYBORN_H
#define CAUCHYBORN_H
#include "CbPotential.h"
#include "MatrixLibrary.h"
#include "ATC_TypeDefs.h"
// This file provides all routines necessary for computing the Cauchy-Born
// stresses.
namespace
ATC
{
// forward declaration of CbPotential
class
CbPotential
;
class
AtomCluster
;
/**
* @class StressAtIP
* @brief Class for passing the vector of stresses at quadrature points
* Done by storing the quadrature point and providing indexing
*/
class
StressAtIP
{
INDEX
q
;
//*> Quadrature point.
DENS_MAT_VEC
&
S
;
//*> Stress components at all quad points.
public:
//* Constructor - sets stress reference and current quadrature point.
StressAtIP
(
DENS_MAT_VEC
&
s
,
INDEX
_q
=
0
)
:
q
(
_q
),
S
(
s
)
{}
//* Indexing operator, gets stress components for the quadrature point.
double
&
operator
()(
INDEX
i
,
INDEX
j
)
const
{
return
S
[
i
](
q
,
j
);
}
//* Sets quadrature point to a new index.
void
set_quadrature_point
(
INDEX
qp
)
{
q
=
qp
;
}
//* Operator that outputs the stress
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
o
,
const
StressAtIP
&
s
)
{
o
<<
"stress
\n
"
;
o
<<
s
(
0
,
0
)
<<
" "
<<
s
(
0
,
1
)
<<
" "
<<
s
(
0
,
2
)
<<
"
\n
"
;
o
<<
s
(
1
,
0
)
<<
" "
<<
s
(
1
,
1
)
<<
" "
<<
s
(
1
,
2
)
<<
"
\n
"
;
o
<<
s
(
2
,
0
)
<<
" "
<<
s
(
2
,
1
)
<<
" "
<<
s
(
2
,
2
)
<<
"
\n
"
;
return
o
;
}
};
/**
* @class StressArgs
* @brief Class for storing parameters needed for computing the Cauchy-Born stress
*/
class
StressArgs
{
public:
StressArgs
(
AtomCluster
&
v
,
CbPotential
*
p
,
double
kB
,
double
hbar
,
double
T
)
:
vac
(
v
),
potential
(
p
),
boltzmann_constant
(
kB
),
planck_constant
(
hbar
),
temperature
(
T
)
{}
AtomCluster
&
vac
;
CbPotential
*
potential
;
double
boltzmann_constant
;
double
planck_constant
;
double
temperature
;
};
/**
* @class PairParam
* @brief Class for storing parameters used in pairwise stress computations
*/
struct
PairParam
{
PairParam
(
const
DENS_VEC
&
_R
,
double
_d
)
:
R
(
_R
),
d
(
_d
),
di
(
1.0
/
_d
)
{}
const
DENS_VEC
&
R
;
//*> Reference bond vector.
DENS_VEC
r
;
//*> Current bond vector.
double
d
,
di
;
//*> Current bond length and its inverse.
double
phi_r
;
//*> First derivative of pairwise term.
double
phi_rr
;
//*> Second derivative of pairwise term.
double
phi_rrr
;
//*> Third derivative of pairwise term.
double
rho_r
;
double
rho_rr
;
double
rho_rrr
;
double
F_p
;
double
F_pp
;
double
F_ppp
;
};
//* for EAM, calculate electron density
double
cb_electron_density
(
const
StressArgs
&
args
);
//* Compute stress, from virtual atom cluster, potential
//* temperature (can be 0K), and StressAtIP object to write to.
void
cb_stress
(
const
StressArgs
&
args
,
StressAtIP
&
s
,
double
*
F
=
0
);
//* Computes the elastic energy (free or potential if T=0).
double
cb_energy
(
const
StressArgs
&
args
);
//* Computes the entropic energy
double
cb_entropic_energy
(
const
StressArgs
&
args
);
//* Auxiliary functions for cb_stress
//@{
//* Computes the stress contribution given the pairwise parameters.
void
pairwise_stress
(
const
PairParam
&
p
,
StressAtIP
&
s
);
//* Computes the stress contribution given the embedding parameters.
void
embedding_stress
(
const
PairParam
&
p
,
StressAtIP
&
s
);
//* Computes the pairwise thermal components for the stress and free energy.
void
pairwise_thermal
(
const
PairParam
&
p
,
DENS_MAT
&
D
,
DENS_MAT_VEC
*
dDdF
=
0
);
//* Computes the embedding thermal components for the stress and free energy.
void
embedding_thermal
(
const
PairParam
&
p
,
DENS_MAT
&
D
,
DENS_MAT
&
L0
,
DENS_MAT_VEC
*
dDdF
=
0
);
//* Last stage of the pairwise finite-T Cauchy-Born stress computation.
void
thermal_end
(
const
DENS_MAT_VEC
&
DF
,
const
DENS_MAT
&
D
,
const
DENS_MAT
&
F
,
const
double
&
T
,
const
double
&
kb
,
StressAtIP
&
s
,
double
*
F_w
=
0
);
//* Returns the stretch tensor and its derivative with respect to C (R C-G).
void
stretch_tensor_derivative
(
const
DENS_VEC
&
C
,
DENS_VEC
&
U
,
DENS_MAT
&
dU
);
//@}
//* Testing functions (to be removed when all CB code is completed)
//@{
//* Computes the dynamical matrix (TESTING FUNCTION)
DENS_MAT
compute_dynamical_matrix
(
const
StressArgs
&
args
);
//* Computes the determinant of the dynamical matrix (TESTING FUNCTION)
double
compute_detD
(
const
StressArgs
&
args
);
//* Computes the derivative of the dynamical matrix (TESTING FUNCTION)
DENS_MAT_VEC
compute_dynamical_derivative
(
StressArgs
&
args
);
//@}
}
#endif
Event Timeline
Log In to Comment