From b9acdf20b4c9ce7f63e35fa3d021521f0f860a74 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Szil=C3=A1rd=20P=C3=A1ll?= Date: Tue, 11 May 2021 10:19:42 +0000 Subject: [PATCH] Remove GMX_FORCE_DO_NOT_NEED_NORMAL_FORCE legacy flag in do_force() --- src/gromacs/mdlib/sim_util.cpp | 20 ++++++++++---------- src/gromacs/mdrun/md.cpp | 1 + src/gromacs/mdtypes/simulation_workload.h | 2 ++ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/gromacs/mdlib/sim_util.cpp b/src/gromacs/mdlib/sim_util.cpp index 2515cc148c..a93b67770d 100644 --- a/src/gromacs/mdlib/sim_util.cpp +++ b/src/gromacs/mdlib/sim_util.cpp @@ -959,14 +959,15 @@ static StepWorkload setupStepWorkload(const int legacyFlags, const bool computeSlowForces = (mtsLevels.empty() || step % mtsLevels[1].stepFactor == 0); StepWorkload flags; - flags.stateChanged = ((legacyFlags & GMX_FORCE_STATECHANGED) != 0); - flags.haveDynamicBox = ((legacyFlags & GMX_FORCE_DYNAMICBOX) != 0); - flags.doNeighborSearch = ((legacyFlags & GMX_FORCE_NS) != 0); - flags.computeSlowForces = computeSlowForces; - flags.computeVirial = ((legacyFlags & GMX_FORCE_VIRIAL) != 0); - flags.computeEnergy = ((legacyFlags & GMX_FORCE_ENERGY) != 0); - flags.computeForces = ((legacyFlags & GMX_FORCE_FORCES) != 0); - flags.computeListedForces = ((legacyFlags & GMX_FORCE_LISTED) != 0); + flags.stateChanged = ((legacyFlags & GMX_FORCE_STATECHANGED) != 0); + flags.haveDynamicBox = ((legacyFlags & GMX_FORCE_DYNAMICBOX) != 0); + flags.doNeighborSearch = ((legacyFlags & GMX_FORCE_NS) != 0); + flags.computeSlowForces = computeSlowForces; + flags.computeVirial = ((legacyFlags & GMX_FORCE_VIRIAL) != 0); + flags.computeEnergy = ((legacyFlags & GMX_FORCE_ENERGY) != 0); + flags.computeForces = ((legacyFlags & GMX_FORCE_FORCES) != 0); + flags.useOnlyMtsCombinedForceBuffer = ((legacyFlags & GMX_FORCE_DO_NOT_NEED_NORMAL_FORCE) != 0); + flags.computeListedForces = ((legacyFlags & GMX_FORCE_LISTED) != 0); flags.computeNonbondedForces = ((legacyFlags & GMX_FORCE_NONBONDED) != 0) && simulationWork.computeNonbonded && !(simulationWork.computeNonbondedAtMtsLevel1 && !computeSlowForces); @@ -2052,8 +2053,7 @@ void do_force(FILE* fplog, * avoids an extra halo exchange (when DD is used) and post-processing step. */ const bool combineMtsForcesBeforeHaloExchange = - (stepWork.computeForces && fr->useMts && stepWork.computeSlowForces - && (legacyFlags & GMX_FORCE_DO_NOT_NEED_NORMAL_FORCE) != 0 + (stepWork.computeForces && fr->useMts && stepWork.computeSlowForces && stepWork.useOnlyMtsCombinedForceBuffer && !(stepWork.computeVirial || simulationWork.useGpuNonbonded || stepWork.haveGpuPmeOnThisRank)); if (combineMtsForcesBeforeHaloExchange) { diff --git a/src/gromacs/mdrun/md.cpp b/src/gromacs/mdrun/md.cpp index b82675c014..68428e84ef 100644 --- a/src/gromacs/mdrun/md.cpp +++ b/src/gromacs/mdrun/md.cpp @@ -1127,6 +1127,7 @@ void gmx::LegacySimulator::do_md() | (bCalcEner ? GMX_FORCE_ENERGY : 0) | (bDoFEP ? GMX_FORCE_DHDL : 0)); if (fr->useMts && !do_per_step(step, ir->nstfout)) { + // TODO: merge this with stepWork.useOnlyMtsCombinedForceBuffer force_flags |= GMX_FORCE_DO_NOT_NEED_NORMAL_FORCE; } diff --git a/src/gromacs/mdtypes/simulation_workload.h b/src/gromacs/mdtypes/simulation_workload.h index 281c1fc6eb..4b7580f3ad 100644 --- a/src/gromacs/mdtypes/simulation_workload.h +++ b/src/gromacs/mdtypes/simulation_workload.h @@ -77,6 +77,8 @@ public: bool computeEnergy = false; //! Whether (any) forces need to be computed this step, not only energies bool computeForces = false; + //! Whether only the MTS combined force buffers are needed and not the separate normal force buffer. + bool useOnlyMtsCombinedForceBuffer = false; //! Whether nonbonded forces need to be computed this step bool computeNonbondedForces = false; //! Whether listed forces need to be computed this step -- 2.22.0