This commit is contained in:
Aidan Thompson
2022-03-11 15:07:18 -07:00
parent 877b764a36
commit 4d13282120
7 changed files with 21 additions and 56 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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;
} }

View File

@ -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