do not add langevin thermostat forces and torques if disabled, e.g. in 2d system.

Note that fix rigid/small does not support the force or torque options and thus
the zeroing has to be done directly when computing the langevin data.
This commit is contained in:
Axel Kohlmeyer
2020-10-28 10:41:20 -04:00
parent 94f57d8849
commit 94462bfb48
2 changed files with 11 additions and 6 deletions

View File

@ -1098,12 +1098,12 @@ void FixRigid::compute_forces_and_torques()
// include Langevin thermostat forces
for (ibody = 0; ibody < nbody; ibody++) {
fcm[ibody][0] = all[ibody][0] + langextra[ibody][0];
fcm[ibody][1] = all[ibody][1] + langextra[ibody][1];
fcm[ibody][2] = all[ibody][2] + langextra[ibody][2];
torque[ibody][0] = all[ibody][3] + langextra[ibody][3];
torque[ibody][1] = all[ibody][4] + langextra[ibody][4];
torque[ibody][2] = all[ibody][5] + langextra[ibody][5];
fcm[ibody][0] = all[ibody][0] + fflag[ibody][0]*langextra[ibody][0];
fcm[ibody][1] = all[ibody][1] + fflag[ibody][1]*langextra[ibody][1];
fcm[ibody][2] = all[ibody][2] + fflag[ibody][2]*langextra[ibody][2];
torque[ibody][0] = all[ibody][3] + tflag[ibody][0]*langextra[ibody][3];
torque[ibody][1] = all[ibody][4] + tflag[ibody][1]*langextra[ibody][4];
torque[ibody][2] = all[ibody][5] + tflag[ibody][2]*langextra[ibody][5];
}
// add gravity force to COM of each body

View File

@ -875,6 +875,11 @@ void FixRigidSmall::apply_langevin_thermostat()
// convert langevin torques from body frame back to space frame
MathExtra::matvec(ex_space,ey_space,ez_space,tbody,&langextra[ibody][3]);
// enforce 2d motion
if (domain->dimension == 2)
langextra[ibody][2] = langextra[ibody][3] = langextra[ibody][4] = 0.0;
}
}