Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F81628889
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
Sat, Sep 7, 03:05
Size
4 KB
Mime Type
text/x-c
Expires
Mon, Sep 9, 03:05 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
20602505
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