Properly processing >1 fix set force
This commit is contained in:
@ -344,31 +344,22 @@ void ComputeRHEOInterface::store_forces()
|
|||||||
// If forces are overwritten by a fix, there are no pressure forces
|
// If forces are overwritten by a fix, there are no pressure forces
|
||||||
// so just normalize
|
// so just normalize
|
||||||
auto fixlist = modify->get_fix_by_style("setforce");
|
auto fixlist = modify->get_fix_by_style("setforce");
|
||||||
if (fixlist.size() != 0) {
|
int skip_from_setforce;
|
||||||
for (const auto &fix : fixlist) {
|
for (int i = 0; i < atom->nlocal; i++) {
|
||||||
for (int i = 0; i < atom->nlocal; i++) {
|
if (rmass)
|
||||||
if (rmass)
|
minv = 1.0 / rmass[i];
|
||||||
minv = 1.0 / rmass[i];
|
else
|
||||||
else
|
minv = 1.0 / mass[type[i]];
|
||||||
minv = 1.0 / mass[type[i]];
|
|
||||||
if (mask[i] & fix->groupbit)
|
skip_from_setforce = 0;
|
||||||
for (int a = 0; a < 3; a++) fp_store[i][a] = f[i][a] * minv;
|
for (const auto &fix : fixlist)
|
||||||
else
|
if (mask[i] & fix->groupbit)
|
||||||
for (int a = 0; a < 3; a++) fp_store[i][a] = (f[i][a] - fp_store[i][a]) * minv;
|
skip_from_setforce = 1;
|
||||||
}
|
|
||||||
}
|
if (skip_from_setforce)
|
||||||
} else {
|
for (int a = 0; a < 3; a++) fp_store[i][a] = f[i][a] * minv;
|
||||||
if (rmass) {
|
else
|
||||||
for (int i = 0; i < atom->nlocal; i++) {
|
for (int a = 0; a < 3; a++) fp_store[i][a] = (f[i][a] - fp_store[i][a]) * minv;
|
||||||
minv = 1.0 / rmass[i];
|
|
||||||
for (int a = 0; a < 3; a++) fp_store[i][a] = (f[i][a] - fp_store[i][a]) * minv;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < atom->nlocal; i++) {
|
|
||||||
minv = 1.0 / mass[type[i]];
|
|
||||||
for (int a = 0; a < 3; a++) fp_store[i][a] = (f[i][a] - fp_store[i][a]) * minv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forward comm forces
|
// Forward comm forces
|
||||||
|
|||||||
Reference in New Issue
Block a user