Skip to content
Merged
75 changes: 45 additions & 30 deletions source/lmp/pair_deepmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,18 @@ PairDeepMD::PairDeepMD(LAMMPS *lmp)
if (lmp->citeme) {
lmp->citeme->add(cite_user_deepmd_package);
}
if (strcmp(update->unit_style, "metal") != 0) {
error->all(
FLERR,
"Pair deepmd requires metal unit, please set it by \"units metal\"");
int unit_convert;
if (strcmp(update->unit_style, "metal") == 0) {
unit_convert = utils::NOCONVERT;
} else if (strcmp(update->unit_style, "real") == 0) {
unit_convert = utils::METAL2REAL;
} else {
error->all(FLERR,
"Pair deepmd requires metal or real unit, please set it by "
"\"units metal\" or \"units real\"");
}
ener_unit_cvt_factor =
utils::get_conversion_factor(utils::ENERGY, unit_convert);
restartinfo = 1;
#if LAMMPS_VERSION_NUMBER >= 20201130
centroidstressflag =
Expand All @@ -361,6 +368,8 @@ PairDeepMD::PairDeepMD(LAMMPS *lmp)
pppmflag = 1;
respa_enable = 0;
writedata = 0;
unit_convert_flag = utils::get_supported_conversions(utils::ENERGY);

cutoff = 0.;
numb_types = 0;
numb_types_spin = 0;
Expand Down Expand Up @@ -576,7 +585,7 @@ void PairDeepMD::compute(int eflag, int vflag) {
}
if (eflag_atom) {
for (int ii = 0; ii < nlocal; ++ii) {
eatom[ii] += deatom[ii];
eatom[ii] += scale[1][1] * deatom[ii];
}
}
// Added by Davide Tisi 2020
Expand All @@ -590,15 +599,15 @@ void PairDeepMD::compute(int eflag, int vflag) {
// vatom[ii][3] += 1.0 * dvatom[9*ii+3];
// vatom[ii][4] += 1.0 * dvatom[9*ii+6];
// vatom[ii][5] += 1.0 * dvatom[9*ii+7];
cvatom[ii][0] += 1.0 * dvatom[9 * ii + 0]; // xx
cvatom[ii][1] += 1.0 * dvatom[9 * ii + 4]; // yy
cvatom[ii][2] += 1.0 * dvatom[9 * ii + 8]; // zz
cvatom[ii][3] += 1.0 * dvatom[9 * ii + 3]; // xy
cvatom[ii][4] += 1.0 * dvatom[9 * ii + 6]; // xz
cvatom[ii][5] += 1.0 * dvatom[9 * ii + 7]; // yz
cvatom[ii][6] += 1.0 * dvatom[9 * ii + 1]; // yx
cvatom[ii][7] += 1.0 * dvatom[9 * ii + 2]; // zx
cvatom[ii][8] += 1.0 * dvatom[9 * ii + 5]; // zy
cvatom[ii][0] += scale[1][1] * dvatom[9 * ii + 0]; // xx
cvatom[ii][1] += scale[1][1] * dvatom[9 * ii + 4]; // yy
cvatom[ii][2] += scale[1][1] * dvatom[9 * ii + 8]; // zz
cvatom[ii][3] += scale[1][1] * dvatom[9 * ii + 3]; // xy
cvatom[ii][4] += scale[1][1] * dvatom[9 * ii + 6]; // xz
cvatom[ii][5] += scale[1][1] * dvatom[9 * ii + 7]; // yz
cvatom[ii][6] += scale[1][1] * dvatom[9 * ii + 1]; // yx
cvatom[ii][7] += scale[1][1] * dvatom[9 * ii + 2]; // zx
cvatom[ii][8] += scale[1][1] * dvatom[9 * ii + 5]; // zy
}
}
}
Expand Down Expand Up @@ -628,7 +637,7 @@ void PairDeepMD::compute(int eflag, int vflag) {
dvatom = all_atom_virial[0];
if (eflag_atom) {
for (int ii = 0; ii < nlocal; ++ii) {
eatom[ii] += deatom[ii];
eatom[ii] += scale[1][1] * deatom[ii];
}
}
// Added by Davide Tisi 2020
Expand All @@ -642,15 +651,15 @@ void PairDeepMD::compute(int eflag, int vflag) {
// vatom[ii][3] += 1.0 * dvatom[9*ii+3];
// vatom[ii][4] += 1.0 * dvatom[9*ii+6];
// vatom[ii][5] += 1.0 * dvatom[9*ii+7];
cvatom[ii][0] += 1.0 * dvatom[9 * ii + 0]; // xx
cvatom[ii][1] += 1.0 * dvatom[9 * ii + 4]; // yy
cvatom[ii][2] += 1.0 * dvatom[9 * ii + 8]; // zz
cvatom[ii][3] += 1.0 * dvatom[9 * ii + 3]; // xy
cvatom[ii][4] += 1.0 * dvatom[9 * ii + 6]; // xz
cvatom[ii][5] += 1.0 * dvatom[9 * ii + 7]; // yz
cvatom[ii][6] += 1.0 * dvatom[9 * ii + 1]; // yx
cvatom[ii][7] += 1.0 * dvatom[9 * ii + 2]; // zx
cvatom[ii][8] += 1.0 * dvatom[9 * ii + 5]; // zy
cvatom[ii][0] += scale[1][1] * dvatom[9 * ii + 0]; // xx
cvatom[ii][1] += scale[1][1] * dvatom[9 * ii + 4]; // yy
cvatom[ii][2] += scale[1][1] * dvatom[9 * ii + 8]; // zz
cvatom[ii][3] += scale[1][1] * dvatom[9 * ii + 3]; // xy
cvatom[ii][4] += scale[1][1] * dvatom[9 * ii + 6]; // xz
cvatom[ii][5] += scale[1][1] * dvatom[9 * ii + 7]; // yz
cvatom[ii][6] += scale[1][1] * dvatom[9 * ii + 1]; // yx
cvatom[ii][7] += scale[1][1] * dvatom[9 * ii + 2]; // zx
cvatom[ii][8] += scale[1][1] * dvatom[9 * ii + 5]; // zy
}
}
if (out_freq > 0 && update->ntimestep % out_freq == 0) {
Expand Down Expand Up @@ -719,6 +728,12 @@ void PairDeepMD::compute(int eflag, int vflag) {
all_v_avg = sqrt(all_v_avg / 9);
}
if (rank == 0) {
all_v_max *= scale[1][1];
all_v_min *= scale[1][1];
all_v_avg *= scale[1][1];
all_f_max *= scale[1][1];
all_f_min *= scale[1][1];
all_f_avg *= scale[1][1];
fp << setw(12) << update->ntimestep << " " << setw(18) << all_v_max
<< " " << setw(18) << all_v_min << " " << setw(18) << all_v_avg
<< " " << setw(18) << all_f_max << " " << setw(18) << all_f_min
Expand All @@ -744,7 +759,7 @@ void PairDeepMD::compute(int eflag, int vflag) {
displacements, MPI_DOUBLE, 0, world);
if (rank == 0) {
for (int dd = 0; dd < all_nlocal; ++dd) {
std_f_all[tagrecv[dd] - 1] = stdfrecv[dd];
std_f_all[tagrecv[dd] - 1] = stdfrecv[dd] * scale[1][1];
}
for (int dd = 0; dd < all_nlocal; ++dd) {
fp << " " << setw(18) << std_f_all[dd];
Expand Down Expand Up @@ -838,7 +853,7 @@ void PairDeepMD::allocate() {
continue;
}
setflag[i][j] = 1;
scale[i][j] = 1;
scale[i][j] = 1.0 * ener_unit_cvt_factor;
}
}
}
Expand Down Expand Up @@ -998,11 +1013,11 @@ void PairDeepMD::settings(int narg, char **arg) {
iarg += 1;
} else if (string(arg[iarg]) == string("relative")) {
out_rel = 1;
eps = atof(arg[iarg + 1]);
eps = atof(arg[iarg + 1]) / ener_unit_cvt_factor;
iarg += 2;
} else if (string(arg[iarg]) == string("relative_v")) {
out_rel_v = 1;
eps_v = atof(arg[iarg + 1]);
eps_v = atof(arg[iarg + 1]) / ener_unit_cvt_factor;
iarg += 2;
} else if (string(arg[iarg]) == string("virtual_len")) {
virtual_len.resize(numb_types_spin);
Expand Down Expand Up @@ -1174,7 +1189,7 @@ void PairDeepMD::coeff(int narg, char **arg) {
for (int i = ilo; i <= ihi; i++) {
for (int j = MAX(jlo, i); j <= jhi; j++) {
setflag[i][j] = 1;
scale[i][j] = 1.0;
scale[i][j] = 1.0 * ener_unit_cvt_factor;
if (i > numb_types || j > numb_types) {
char warning_msg[1024];
sprintf(warning_msg,
Expand Down Expand Up @@ -1221,7 +1236,7 @@ double PairDeepMD::init_one(int i, int j) {
}

if (setflag[i][j] == 0) {
scale[i][j] = 1.0;
scale[i][j] = 1.0 * ener_unit_cvt_factor;
}
scale[j][i] = scale[i][j];

Expand Down
1 change: 1 addition & 0 deletions source/lmp/pair_deepmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ class PairDeepMD : public Pair {
tagint *tagsend, *tagrecv;
double *stdfsend, *stdfrecv;
std::vector<int> type_idx_map;
double ener_unit_cvt_factor;
};

} // namespace LAMMPS_NS
Expand Down
Loading