More
This commit is contained in:
@ -161,14 +161,7 @@ void MLIAPDescriptorSNAP::compute_forces(class MLIAPData* data)
|
|||||||
|
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
int j = snaptr->inside[jj];
|
int j = snaptr->inside[jj];
|
||||||
if (chemflag)
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
else
|
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, 0,
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
|
|
||||||
snaptr->compute_deidrj(fij);
|
snaptr->compute_deidrj(fij);
|
||||||
|
|
||||||
@ -237,15 +230,7 @@ void MLIAPDescriptorSNAP::compute_force_gradients(class MLIAPData* data)
|
|||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
const int j = snaptr->inside[jj];
|
const int j = snaptr->inside[jj];
|
||||||
|
|
||||||
if (chemflag)
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
else
|
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, 0,
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
|
|
||||||
snaptr->compute_dbidrj();
|
snaptr->compute_dbidrj();
|
||||||
|
|
||||||
// Accumulate gamma_lk*dB_k/dRi, -gamma_lk**dB_k/dRj
|
// Accumulate gamma_lk*dB_k/dRi, -gamma_lk**dB_k/dRj
|
||||||
@ -312,15 +297,7 @@ void MLIAPDescriptorSNAP::compute_descriptor_gradients(class MLIAPData* data)
|
|||||||
|
|
||||||
ij = ij0;
|
ij = ij0;
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
if (chemflag)
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
else
|
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, 0,
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
|
|
||||||
snaptr->compute_dbidrj();
|
snaptr->compute_dbidrj();
|
||||||
|
|
||||||
// Accumulate dB_k^i/dRi, dB_k^i/dRj
|
// Accumulate dB_k^i/dRi, dB_k^i/dRj
|
||||||
|
|||||||
@ -301,9 +301,7 @@ void ComputeSNADAtom::compute_peratom()
|
|||||||
|
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
const int j = snaptr->inside[jj];
|
const int j = snaptr->inside[jj];
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
snaptr->compute_dbidrj();
|
snaptr->compute_dbidrj();
|
||||||
|
|
||||||
// Accumulate -dBi/dRi, -dBi/dRj
|
// Accumulate -dBi/dRi, -dBi/dRj
|
||||||
|
|||||||
@ -355,9 +355,7 @@ void ComputeSnap::compute_array()
|
|||||||
|
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
const int j = snaptr->inside[jj];
|
const int j = snaptr->inside[jj];
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
snaptr->compute_dbidrj();
|
snaptr->compute_dbidrj();
|
||||||
|
|
||||||
// Accumulate dBi/dRi, -dBi/dRj
|
// Accumulate dBi/dRi, -dBi/dRj
|
||||||
|
|||||||
@ -295,9 +295,7 @@ void ComputeSNAVAtom::compute_peratom()
|
|||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
const int j = snaptr->inside[jj];
|
const int j = snaptr->inside[jj];
|
||||||
|
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
snaptr->compute_dbidrj();
|
snaptr->compute_dbidrj();
|
||||||
|
|
||||||
// Accumulate -dBi/dRi*Ri, -dBi/dRj*Rj
|
// Accumulate -dBi/dRi*Ri, -dBi/dRj*Rj
|
||||||
|
|||||||
@ -182,14 +182,7 @@ void PairSNAP::compute(int eflag, int vflag)
|
|||||||
|
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
int j = snaptr->inside[jj];
|
int j = snaptr->inside[jj];
|
||||||
if (chemflag)
|
snaptr->compute_duidrj(jj);
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, snaptr->element[jj],
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
else
|
|
||||||
snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],
|
|
||||||
snaptr->rcutij[jj], jj, 0,
|
|
||||||
snaptr->rinnerij[jj], snaptr->drinnerij[jj]);
|
|
||||||
|
|
||||||
snaptr->compute_deidrj(fij);
|
snaptr->compute_deidrj(fij);
|
||||||
|
|
||||||
|
|||||||
@ -963,15 +963,15 @@ void SNA::compute_dbidrj()
|
|||||||
calculate derivative of Ui w.r.t. atom j
|
calculate derivative of Ui w.r.t. atom j
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void SNA::compute_duidrj(double* rij, double wj, double rcut, int jj,
|
void SNA::compute_duidrj(int jj)
|
||||||
int jelem, double rinner, double drinner)
|
|
||||||
{
|
{
|
||||||
double rsq, r, x, y, z, z0, theta0, cs, sn;
|
double rsq, r, x, y, z, z0, theta0, cs, sn;
|
||||||
double dz0dr;
|
double dz0dr;
|
||||||
|
double rcut = rcutij[jj];
|
||||||
|
|
||||||
x = rij[0];
|
x = rij[jj][0];
|
||||||
y = rij[1];
|
y = rij[jj][1];
|
||||||
z = rij[2];
|
z = rij[jj][2];
|
||||||
rsq = x * x + y * y + z * z;
|
rsq = x * x + y * y + z * z;
|
||||||
r = sqrt(rsq);
|
r = sqrt(rsq);
|
||||||
double rscale0 = rfac0 * MY_PI / (rcut - rmin0);
|
double rscale0 = rfac0 * MY_PI / (rcut - rmin0);
|
||||||
@ -981,8 +981,10 @@ void SNA::compute_duidrj(double* rij, double wj, double rcut, int jj,
|
|||||||
z0 = r * cs / sn;
|
z0 = r * cs / sn;
|
||||||
dz0dr = z0 / r - (r*rscale0) * (rsq + z0 * z0) / rsq;
|
dz0dr = z0 / r - (r*rscale0) * (rsq + z0 * z0) / rsq;
|
||||||
|
|
||||||
elem_duarray = jelem;
|
if (chem_flag) elem_duarray = element[jj];
|
||||||
compute_duarray(x, y, z, z0, r, dz0dr, wj, rcut, jj, rinner, drinner);
|
else elem_duarray = 0;
|
||||||
|
|
||||||
|
compute_duarray(x, y, z, z0, r, dz0dr, wj[jj], rcut, jj);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -1137,8 +1139,7 @@ void SNA::compute_uarray(double x, double y, double z,
|
|||||||
|
|
||||||
void SNA::compute_duarray(double x, double y, double z,
|
void SNA::compute_duarray(double x, double y, double z,
|
||||||
double z0, double r, double dz0dr,
|
double z0, double r, double dz0dr,
|
||||||
double wj, double rcut, int jj,
|
double wj, double rcut, int jj)
|
||||||
double rinner, double drinner)
|
|
||||||
{
|
{
|
||||||
double r0inv;
|
double r0inv;
|
||||||
double a_r, a_i, b_r, b_i;
|
double a_r, a_i, b_r, b_i;
|
||||||
@ -1269,8 +1270,8 @@ void SNA::compute_duarray(double x, double y, double z,
|
|||||||
double dsfac = compute_dsfac(r, rcut);
|
double dsfac = compute_dsfac(r, rcut);
|
||||||
|
|
||||||
if (switch_inner_flag) {
|
if (switch_inner_flag) {
|
||||||
double sfac_inner = compute_sfac_inner(r, rinner, drinner);
|
double sfac_inner = compute_sfac_inner(r, rinnerij[jj], drinnerij[jj]);
|
||||||
dsfac = dsfac*sfac_inner + sfac*compute_dsfac_inner(r, rinner, drinner);
|
dsfac = dsfac*sfac_inner + sfac*compute_dsfac_inner(r, rinnerij[jj], drinnerij[jj]);
|
||||||
sfac *= sfac_inner;
|
sfac *= sfac_inner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,7 @@ class SNA : protected Pointers {
|
|||||||
|
|
||||||
// functions for derivatives
|
// functions for derivatives
|
||||||
|
|
||||||
void compute_duidrj(double *, double, double, int, int, double, double);
|
void compute_duidrj(int);
|
||||||
void compute_dbidrj();
|
void compute_dbidrj();
|
||||||
void compute_deidrj(double *);
|
void compute_deidrj(double *);
|
||||||
double compute_sfac(double, double);
|
double compute_sfac(double, double);
|
||||||
@ -125,7 +125,7 @@ class SNA : protected Pointers {
|
|||||||
double deltacg(int, int, int);
|
double deltacg(int, int, int);
|
||||||
void compute_ncoeff();
|
void compute_ncoeff();
|
||||||
void compute_duarray(double, double, double, double, double, double,
|
void compute_duarray(double, double, double, double, double, double,
|
||||||
double, double, int, double, double);
|
double, double, int);
|
||||||
|
|
||||||
// Sets the style for the switching function
|
// Sets the style for the switching function
|
||||||
// 0 = none
|
// 0 = none
|
||||||
|
|||||||
Reference in New Issue
Block a user