avoid divisions

This commit is contained in:
Axel Kohlmeyer
2025-01-18 11:45:27 -05:00
parent 0501f76fcf
commit c2bcf79196

View File

@ -982,10 +982,14 @@ double EAPOD::peratom_environment_descriptors(double *cb, double *bd, double *tm
D[j] = 1.0 / sum;
}
double sum = 0;
double sum = 0.0;
for (int j = 0; j < nClusters; j++) sum += D[j];
double sumD = sum;
for (int j = 0; j < nClusters; j++) P[j] = D[j]/sum;
if (sum != 0.0) {
for (int j = 0; j < nClusters; j++) P[j] = D[j]/sum;
} else {
for (int j = 0; j < nClusters; j++) P[j] = 0.0;
}
int nc = nCoeffPerElement*(ti[0]-1);
double ei = coeff[0 + nc];
@ -1008,13 +1012,13 @@ double EAPOD::peratom_environment_descriptors(double *cb, double *bd, double *tm
}
for (int m = 0; m<Mdesc; m++) {
double S1 = 1/sumD;
double S2 = sumD*sumD;
double S1 = 1.0/sumD;
double S2 = S1*S1;
double sum = 0.0;
for (int j=0; j<nClusters; j++) {
double dP_dB = 0.0;
for (int k = 0; k < nClusters; k++) {
double dP_dD = -D[j] / S2;
double dP_dD = -D[j] * S2;
if (k==j) dP_dD += S1;
double dD_dB = 0.0;
double D2 = 2 * D[k] * D[k];
@ -2844,11 +2848,11 @@ void EAPOD::peratomenvironment_descriptors(double *P, double *dP_dR, double *B,
DGEMM(&chn, &chn, &nClusters, &Mdesc, &nComponents, &alpha, dD_dpca, &nClusters, ProjMat, &nComponents, &beta, dD_dB, &nClusters);
// calculate dP_dD
double S1 = 1 / sumD;
double S2 = sumD * sumD;
double S1 = 1.0 / sumD;
double S2 = S1 * S1;
for (int k = 0; k < nClusters; k++) {
for (int j = 0; j < nClusters; j++) {
dP_dD[j + k * nClusters] = -D[j] / S2;
dP_dD[j + k * nClusters] = -D[j] * S2;
}
}
for (int j = 0; j < nClusters; j++) {