Skip to content

Commit 9f92177

Browse files
committed
fix relative bug; let max and min also relative
1 parent 6337ffb commit 9f92177

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

source/lib/src/NNPInter.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,3 +1690,26 @@ compute_std_f (vector<VALUETYPE> & std,
16901690
}
16911691
}
16921692

1693+
void
1694+
NNPInterModelDevi::
1695+
compute_relative_std_f (vector<VALUETYPE> &std,
1696+
const vector<VALUETYPE> &avg,
1697+
const VALUETYPE eps)
1698+
{
1699+
unsigned ndof = std.size();
1700+
unsigned nloc = ndof;
1701+
assert (nloc == ndof);
1702+
rel_std.resize(nloc);
1703+
fill(rel_std.begin(), rel_std.end(), VALUETYPE(0.));
1704+
for (unsigned ii = 0; ii < nlocal; ++ii){
1705+
const VALUETYPE * tmp_avg = &(avg[ii*3]);
1706+
VALUETYPE vdiff[3];
1707+
vdiff[0] = tmp_avg[0];
1708+
vdiff[1] = tmp_avg[1];
1709+
vdiff[2] = tmp_avg[2];
1710+
VALUETYPE f_norm = MathUtilities::dot(vdiff, vdiff);
1711+
// relative std = std/(abs(f)+eps)
1712+
std[ii] /= f_norm + eps;
1713+
}
1714+
}
1715+

source/lmp/pair_nnp.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,9 @@ void PairNNP::compute(int eflag, int vflag)
450450
vector<double> tmp_avg_f;
451451
nnp_inter_model_devi.compute_avg (tmp_avg_f, all_force);
452452
nnp_inter_model_devi.compute_std_f (std_f, tmp_avg_f, all_force);
453+
if (out_rel == 1){
454+
nnp_inter_model_devi.compute_relative_std_f (std_f, tmp_avg_f, eps);
455+
}
453456
#else
454457
vector<float> tmp_avg_f_, std_f_;
455458
for (unsigned ii = 0; ii < all_force_.size(); ++ii){
@@ -461,6 +464,9 @@ void PairNNP::compute(int eflag, int vflag)
461464
nnp_inter_model_devi.compute_std_f (std_f_, tmp_avg_f_, all_force_);
462465
std_f.resize(std_f_.size());
463466
for (int dd = 0; dd < std_f_.size(); ++dd) std_f[dd] = std_f_[dd];
467+
if (out_rel == 1){
468+
nnp_inter_model_devi.compute_relative_std_f (std_f, tmp_avg_f_, eps);
469+
}
464470
#endif
465471
double min = numeric_limits<double>::max(), max = 0, avg = 0;
466472
ana_st(max, min, avg, std_f, nlocal);
@@ -514,16 +520,7 @@ void PairNNP::compute(int eflag, int vflag)
514520
// 1. If the atom_style is not atomic (e.g. charge), the order of std_f is different from that of atom ids.
515521
// 2. std_f is not gathered by MPI.
516522
for (int dd = 0; dd < all_nlocal; ++dd) {
517-
if (out_rel == 1){
518-
// relative std = std/(abs(f)+1)
519-
#ifdef HIGH_PREC
520-
fp << " " << setw(18) << std_f[dd] / (fabs(tmp_avg_f[dd]) + eps);
521-
#else
522-
fp << " " << setw(18) << std_f[dd] / (fabsf(tmp_avg_f_[dd]) + eps);
523-
#endif
524-
} else {
525523
fp << " " << setw(18) << std_f[dd];
526-
}
527524
}
528525
}
529526
fp << endl;

0 commit comments

Comments
 (0)