Rmove dependency on Constraints object from compute_globals(...)
authorArtem Zhmurov <zhmurov@gmail.com>
Fri, 29 Jan 2021 18:37:07 +0000 (18:37 +0000)
committerPascal Merz <pascal.merz@me.com>
Fri, 29 Jan 2021 18:37:07 +0000 (18:37 +0000)
Compute globals only uses RMSD data from constraints. This replaces
the Constraints object by the optional argument with RMSD data in
compute_globals(...) function signature.

Refs. #3754

src/gromacs/mdlib/md_support.cpp
src/gromacs/mdlib/md_support.h
src/gromacs/mdlib/stat.cpp
src/gromacs/mdlib/stat.h
src/gromacs/mdlib/update_vv.cpp
src/gromacs/mdrun/md.cpp
src/gromacs/mdrun/mimic.cpp
src/gromacs/mdrun/minimize.cpp
src/gromacs/mdrun/rerun.cpp
src/gromacs/modularsimulator/computeglobalselement.cpp

index 1f88c871db38f9bda00681e03ced3ffbf632082a..1455e0eeb570d36e6583decf6a4f16b4674d7967 100644 (file)
@@ -297,7 +297,7 @@ void compute_globals(gmx_global_stat*               gstat,
                      tensor                         shake_vir,
                      tensor                         total_vir,
                      tensor                         pres,
-                     gmx::Constraints*              constr,
+                     gmx::ArrayRef<real>            constraintsRmsdData,
                      gmx::SimulationSignaller*      signalCoordinator,
                      const matrix                   lastbox,
                      int*                           totalNumberOfBondedInteractions,
@@ -366,7 +366,7 @@ void compute_globals(gmx_global_stat*               gstat,
                             shake_vir,
                             ir,
                             ekind,
-                            constr,
+                            constraintsRmsdData,
                             bStopCM ? vcm : nullptr,
                             signalBuffer.size(),
                             signalBuffer.data(),
index b6c794b8e68ff5371315f3f43a8c9bdaf2f6368a..aad947007ea8c0744e5c211805ee66a695511875 100644 (file)
@@ -129,7 +129,7 @@ void compute_globals(gmx_global_stat*               gstat,
                      tensor                         shake_vir,
                      tensor                         total_vir,
                      tensor                         pres,
-                     gmx::Constraints*              constr,
+                     gmx::ArrayRef<real>            constraintsRmsdData,
                      gmx::SimulationSignaller*      signalCoordinator,
                      const matrix                   lastbox,
                      int*                           totalNumberOfBondedInteractions,
index 26d2fe5b020e9ac2163b41b27227c877e2144dcb..1ec865802af6150730932d9b064a09044acfe48e 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * Copyright (c) 2001-2004, The GROMACS development team.
  * Copyright (c) 2013,2014,2015,2016,2017 by the GROMACS development team.
- * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2018,2019,2020,2021, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
@@ -49,7 +49,6 @@
 #include "gromacs/gmxlib/network.h"
 #include "gromacs/math/utilities.h"
 #include "gromacs/math/vec.h"
-#include "gromacs/mdlib/constr.h"
 #include "gromacs/mdlib/md_support.h"
 #include "gromacs/mdlib/rbin.h"
 #include "gromacs/mdlib/tgroup.h"
@@ -136,20 +135,20 @@ static int filter_enerdterm(const real* afrom, gmx_bool bToBuffer, real* ato, gm
     return to;
 }
 
-void global_stat(const gmx_global_stat*  gs,
-                 const t_commrec*        cr,
-                 gmx_enerdata_t*         enerd,
-                 tensor                  fvir,
-                 tensor                  svir,
-                 const t_inputrec*       inputrec,
-                 gmx_ekindata_t*         ekind,
-                 const gmx::Constraints* constr,
-                 t_vcm*                  vcm,
-                 int                     nsig,
-                 real*                   sig,
-                 int*                    totalNumberOfBondedInteractions,
-                 bool                    bSumEkinhOld,
-                 int                     flags)
+void global_stat(const gmx_global_stat* gs,
+                 const t_commrec*       cr,
+                 gmx_enerdata_t*        enerd,
+                 tensor                 fvir,
+                 tensor                 svir,
+                 const t_inputrec*      inputrec,
+                 gmx_ekindata_t*        ekind,
+                 gmx::ArrayRef<real>    constraintsRmsdData,
+                 t_vcm*                 vcm,
+                 int                    nsig,
+                 real*                  sig,
+                 int*                   totalNumberOfBondedInteractions,
+                 bool                   bSumEkinhOld,
+                 int                    flags)
 /* instead of current system, gmx_booleans for summing virial, kinetic energy, and other terms */
 {
     t_bin* rb;
@@ -235,17 +234,12 @@ void global_stat(const gmx_global_stat*  gs,
         ifv = add_binr(rb, DIM * DIM, fvir[0]);
     }
 
-    gmx::ArrayRef<real> rmsdData;
     if (bEner)
     {
         ie = add_binr(rb, nener, copyenerd);
-        if (constr)
+        if (!constraintsRmsdData.empty())
         {
-            rmsdData = constr->rmsdData();
-            if (!rmsdData.empty())
-            {
-                irmsd = add_binr(rb, 2, rmsdData.data());
-            }
+            irmsd = add_binr(rb, 2, constraintsRmsdData.data());
         }
 
         for (j = 0; (j < egNR); j++)
@@ -340,9 +334,9 @@ void global_stat(const gmx_global_stat*  gs,
     if (bEner)
     {
         extract_binr(rb, ie, nener, copyenerd);
-        if (!rmsdData.empty())
+        if (!constraintsRmsdData.empty())
         {
-            extract_binr(rb, irmsd, rmsdData);
+            extract_binr(rb, irmsd, constraintsRmsdData);
         }
 
         for (j = 0; (j < egNR); j++)
index d69d5ceaef0240f92d64e1361e87d6d02e268ef2..d3cf97713abce87ee2e31c8095b5926a31d7ba78 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * Copyright (c) 2001-2004, The GROMACS development team.
  * Copyright (c) 2013,2014,2015,2016,2017 by the GROMACS development team.
- * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2018,2019,2020,2021, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
@@ -49,8 +49,10 @@ struct t_commrec;
 
 namespace gmx
 {
+template<typename T>
+class ArrayRef;
 class Constraints;
-}
+} // namespace gmx
 
 typedef struct gmx_global_stat* gmx_global_stat_t;
 
@@ -59,20 +61,20 @@ gmx_global_stat_t global_stat_init(const t_inputrec* ir);
 void global_stat_destroy(gmx_global_stat_t gs);
 
 /*! \brief All-reduce energy-like quantities over cr->mpi_comm_mysim  */
-void global_stat(const gmx_global_stat*  gs,
-                 const t_commrec*        cr,
-                 gmx_enerdata_t*         enerd,
-                 tensor                  fvir,
-                 tensor                  svir,
-                 const t_inputrec*       inputrec,
-                 gmx_ekindata_t*         ekind,
-                 const gmx::Constraints* constr,
-                 t_vcm*                  vcm,
-                 int                     nsig,
-                 real*                   sig,
-                 int*                    totalNumberOfBondedInteractions,
-                 bool                    bSumEkinhOld,
-                 int                     flags);
+void global_stat(const gmx_global_stat* gs,
+                 const t_commrec*       cr,
+                 gmx_enerdata_t*        enerd,
+                 tensor                 fvir,
+                 tensor                 svir,
+                 const t_inputrec*      inputrec,
+                 gmx_ekindata_t*        ekind,
+                 gmx::ArrayRef<real>    constraintsRmsdData,
+                 t_vcm*                 vcm,
+                 int                    nsig,
+                 real*                  sig,
+                 int*                   totalNumberOfBondedInteractions,
+                 bool                   bSumEkinhOld,
+                 int                    flags);
 
 /*! \brief Returns TRUE if io should be done */
 inline bool do_per_step(int64_t step, int64_t nstep)
index bd40e9b4266e8a185b3d1ad430969185046b1edf..febfcc29a603730b9707763a54c79ad8e12db671 100644 (file)
@@ -182,7 +182,7 @@ void integrateVVFirstStep(int64_t                   step,
                             shake_vir,
                             total_vir,
                             pres,
-                            constr,
+                            (bCalcEner && constr != nullptr) ? constr->rmsdData() : gmx::ArrayRef<real>{},
                             nullSignaller,
                             state->box,
                             &totalNumberOfBondedInteractions,
@@ -263,7 +263,7 @@ void integrateVVFirstStep(int64_t                   step,
                                 nullptr,
                                 nullptr,
                                 nullptr,
-                                constr,
+                                gmx::ArrayRef<real>{},
                                 nullSignaller,
                                 state->box,
                                 nullptr,
@@ -386,7 +386,7 @@ void integrateVVSecondStep(int64_t                                  step,
                         shake_vir,
                         total_vir,
                         pres,
-                        constr,
+                        gmx::ArrayRef<real>{},
                         nullSignaller,
                         lastbox,
                         nullptr,
index 94568b39dd0abdbae60537b1b8ca62f97b3c9be5..04cc254287673b41b8b8e5476aa03d8863336fce 100644 (file)
@@ -672,7 +672,7 @@ void gmx::LegacySimulator::do_md()
                         shake_vir,
                         total_vir,
                         pres,
-                        constr,
+                        gmx::ArrayRef<real>{},
                         &nullSignaller,
                         state->box,
                         &totalNumberOfBondedInteractions,
@@ -724,7 +724,7 @@ void gmx::LegacySimulator::do_md()
                         shake_vir,
                         total_vir,
                         pres,
-                        constr,
+                        gmx::ArrayRef<real>{},
                         &nullSignaller,
                         state->box,
                         nullptr,
@@ -1046,7 +1046,7 @@ void gmx::LegacySimulator::do_md()
                             nullptr,
                             nullptr,
                             nullptr,
-                            constr,
+                            gmx::ArrayRef<real>{},
                             &nullSignaller,
                             state->box,
                             &totalNumberOfBondedInteractions,
@@ -1597,34 +1597,36 @@ void gmx::LegacySimulator::do_md()
                 bool                doIntraSimSignal = true;
                 SimulationSignaller signaller(&signals, cr, ms, doInterSimSignal, doIntraSimSignal);
 
-                compute_globals(gstat,
-                                cr,
-                                ir,
-                                fr,
-                                ekind,
-                                makeConstArrayRef(state->x),
-                                makeConstArrayRef(state->v),
-                                state->box,
-                                mdatoms,
-                                nrnb,
-                                &vcm,
-                                wcycle,
-                                enerd,
-                                force_vir,
-                                shake_vir,
-                                total_vir,
-                                pres,
-                                constr,
-                                &signaller,
-                                lastbox,
-                                &totalNumberOfBondedInteractions,
-                                &bSumEkinhOld,
-                                (bGStat ? CGLO_GSTAT : 0) | (!EI_VV(ir->eI) && bCalcEner ? CGLO_ENERGY : 0)
-                                        | (!EI_VV(ir->eI) && bStopCM ? CGLO_STOPCM : 0)
-                                        | (!EI_VV(ir->eI) ? CGLO_TEMPERATURE : 0)
-                                        | (!EI_VV(ir->eI) ? CGLO_PRESSURE : 0) | CGLO_CONSTRAINT
-                                        | (shouldCheckNumberOfBondedInteractions ? CGLO_CHECK_NUMBER_OF_BONDED_INTERACTIONS
-                                                                                 : 0));
+                compute_globals(
+                        gstat,
+                        cr,
+                        ir,
+                        fr,
+                        ekind,
+                        makeConstArrayRef(state->x),
+                        makeConstArrayRef(state->v),
+                        state->box,
+                        mdatoms,
+                        nrnb,
+                        &vcm,
+                        wcycle,
+                        enerd,
+                        force_vir,
+                        shake_vir,
+                        total_vir,
+                        pres,
+                        (!EI_VV(ir->eI) && bCalcEner && constr != nullptr) ? constr->rmsdData()
+                                                                           : gmx::ArrayRef<real>{},
+                        &signaller,
+                        lastbox,
+                        &totalNumberOfBondedInteractions,
+                        &bSumEkinhOld,
+                        (bGStat ? CGLO_GSTAT : 0) | (!EI_VV(ir->eI) && bCalcEner ? CGLO_ENERGY : 0)
+                                | (!EI_VV(ir->eI) && bStopCM ? CGLO_STOPCM : 0)
+                                | (!EI_VV(ir->eI) ? CGLO_TEMPERATURE : 0)
+                                | (!EI_VV(ir->eI) ? CGLO_PRESSURE : 0) | CGLO_CONSTRAINT
+                                | (shouldCheckNumberOfBondedInteractions ? CGLO_CHECK_NUMBER_OF_BONDED_INTERACTIONS
+                                                                         : 0));
                 checkNumberOfBondedInteractions(mdlog,
                                                 cr,
                                                 totalNumberOfBondedInteractions,
index 38d0d6ef3373c918f67f4dbc2e437645a61a0348..970bb40afe3fd60c5ebc37d3ad06fb0559e8fc8c 100644 (file)
@@ -364,7 +364,7 @@ void gmx::LegacySimulator::do_mimic()
                         shake_vir,
                         total_vir,
                         pres,
-                        constr,
+                        gmx::ArrayRef<real>{},
                         &nullSignaller,
                         state->box,
                         &totalNumberOfBondedInteractions,
@@ -652,7 +652,7 @@ void gmx::LegacySimulator::do_mimic()
                             nullptr,
                             nullptr,
                             nullptr,
-                            constr,
+                            constr != nullptr ? constr->rmsdData() : gmx::ArrayRef<real>{},
                             &signaller,
                             state->box,
                             &totalNumberOfBondedInteractions,
index 988723c0c7c53230b84f6996f71e3f9157890262..b64d5236875ddde6b76b66a5e25696ea09f2b4cb 100644 (file)
@@ -971,7 +971,7 @@ void EnergyEvaluator::run(em_state_t* ems, rvec mu_tot, tensor vir, tensor pres,
                     shake_vir,
                     inputrec,
                     nullptr,
-                    nullptr,
+                    gmx::ArrayRef<real>{},
                     nullptr,
                     1,
                     &terminate,
index 7d97dbe99e740c0957b00c91bbba4531b20a2185..0857b5b7953dc34e94c83804e7a48c33d0cbbd15 100644 (file)
@@ -410,7 +410,7 @@ void gmx::LegacySimulator::do_rerun()
                         shake_vir,
                         total_vir,
                         pres,
-                        constr,
+                        gmx::ArrayRef<real>{},
                         &nullSignaller,
                         state->box,
                         &totalNumberOfBondedInteractions,
@@ -770,7 +770,7 @@ void gmx::LegacySimulator::do_rerun()
                             shake_vir,
                             total_vir,
                             pres,
-                            constr,
+                            constr != nullptr ? constr->rmsdData() : gmx::ArrayRef<real>{},
                             &signaller,
                             state->box,
                             &totalNumberOfBondedInteractions,
index 0507afad2ea09f490f38dcf8a639b9259b77584f..3bca8ed4a0bb6c226716e26ce5a94befef7da737 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2019,2020,2021, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
@@ -47,6 +47,7 @@
 #include "gromacs/gmxlib/network.h"
 #include "gromacs/gmxlib/nrnb.h"
 #include "gromacs/math/vec.h"
+#include "gromacs/mdlib/constr.h"
 #include "gromacs/mdlib/md_support.h"
 #include "gromacs/mdlib/mdatoms.h"
 #include "gromacs/mdlib/stat.h"
@@ -299,7 +300,8 @@ void ComputeGlobalsElement<algorithm>::compute(gmx::Step            step,
             energyData_->constraintVirial(step),
             energyData_->totalVirial(step),
             energyData_->pressure(step),
-            constr_,
+            (((flags & CGLO_ENERGY) != 0) && constr_ != nullptr) ? constr_->rmsdData()
+                                                                 : gmx::ArrayRef<real>{},
             signaller,
             lastbox,
             &totalNumberOfBondedInteractions_,