Use array for term and foreign_term in gmx_enerdata_t
authorJoe Jordan <ejjordan12@gmail.com>
Tue, 13 Apr 2021 09:43:44 +0000 (09:43 +0000)
committerJoe Jordan <ejjordan12@gmail.com>
Tue, 13 Apr 2021 09:43:44 +0000 (09:43 +0000)
src/gromacs/listed_forces/listed_forces.cpp
src/gromacs/mdlib/enerdata_utils.cpp
src/gromacs/mdlib/stat.cpp
src/gromacs/mdtypes/enerdata.h
src/gromacs/nbnxm/kerneldispatch.cpp

index 3a226ed961a2001eb7873844e92b99a7cd19b754..b0d83be8434bc645160c111a79e65af32eacb95c 100644 (file)
@@ -554,10 +554,11 @@ static void calcBondedForces(const InteractionDefinitions& idef,
         {
             f_thread_t& threadBuffers = *bt->f_t[thread];
             int         ftype;
-            real *      epot, v;
+            real        v;
             /* thread stuff */
             rvec*               fshift;
             gmx::ArrayRef<real> dvdlt;
+            gmx::ArrayRef<real> epot;
             gmx_grppairener_t*  grpp;
 
             zero_thread_output(&threadBuffers);
@@ -677,7 +678,7 @@ void calc_listed(struct gmx_wallcycle*         wcycle,
         wallcycle_sub_stop(wcycle, ewcsLISTED);
 
         wallcycle_sub_start(wcycle, ewcsLISTED_BUF_OPS);
-        reduce_thread_output(&forceWithShiftForces, enerd->term, &enerd->grpp, dvdl, bt, stepWork);
+        reduce_thread_output(&forceWithShiftForces, enerd->term.data(), &enerd->grpp, dvdl, bt, stepWork);
 
         if (stepWork.computeDhdl)
         {
@@ -906,14 +907,14 @@ void ListedForces::calculate(struct gmx_wallcycle*                     wcycle,
                                    forceBufferLambda_,
                                    shiftForceBufferLambda_,
                                    &(enerd->foreign_grpp),
-                                   enerd->foreign_term,
+                                   enerd->foreign_term.data(),
                                    dvdl,
                                    nrnb,
                                    lam_i,
                                    md,
                                    fcdata,
                                    global_atom_index);
-                sum_epot(enerd->foreign_grpp, enerd->foreign_term);
+                sum_epot(enerd->foreign_grpp, enerd->foreign_term.data());
                 const double dvdlSum = std::accumulate(std::begin(dvdl), std::end(dvdl), 0.);
                 std::fill(std::begin(dvdl), std::end(dvdl), 0.0);
                 enerd->foreignLambdaTerms.accumulate(i, enerd->foreign_term[F_EPOT], dvdlSum);
index 1559acd0eb20541e2c03c33787b6627cfe45e5eb..07a26a1e8d83be8cb6899d6040c203842bd50fd0 100644 (file)
@@ -234,7 +234,7 @@ void ForeignLambdaTerms::finalizePotentialContributions(gmx::ArrayRef<const doub
 
 void accumulatePotentialEnergies(gmx_enerdata_t* enerd, gmx::ArrayRef<const real> lambda, const t_lambda* fepvals)
 {
-    sum_epot(enerd->grpp, enerd->term);
+    sum_epot(enerd->grpp, enerd->term.data());
 
     if (fepvals)
     {
index 5a1efe13add501a0b8a07ace669896f857311062..5283f17fce8d7ef70db4e53c3581a2936fa7c8d4 100644 (file)
@@ -180,7 +180,7 @@ void global_stat(const gmx_global_stat& gs,
        the sums and overcounting. */
 
     std::array<real, F_NRE> copyenerd;
-    int nener = filter_enerdterm(enerd->term, TRUE, copyenerd.data(), bTemp, bPres, bEner);
+    int nener = filter_enerdterm(enerd->term.data(), TRUE, copyenerd.data(), bTemp, bPres, bEner);
 
     /* First, the data that needs to be communicated with velocity verlet every time
        This is just the constraint virial.*/
@@ -347,7 +347,7 @@ void global_stat(const gmx_global_stat& gs,
             }
         }
 
-        filter_enerdterm(copyenerd.data(), FALSE, enerd->term, bTemp, bPres, bEner);
+        filter_enerdterm(copyenerd.data(), FALSE, enerd->term.data(), bTemp, bPres, bEner);
     }
 
     if (vcm)
index 528352a47f92514a38bbf6f10aa2942c0496f9e5..3398cd69aa98cde1bbd5c8740b61dbd1695eb87a 100644 (file)
@@ -196,7 +196,7 @@ struct gmx_enerdata_t
     gmx_enerdata_t(int numEnergyGroups, int numFepLambdas);
 
     //! The energies for all different interaction types
-    real term[F_NRE] = { 0 };
+    std::array<real, F_NRE> term = { 0 };
     //! Energy group pair non-bonded energies
     struct gmx_grppairener_t grpp;
     //! Contributions to dV/dlambda with linear dependence on lambda
@@ -212,7 +212,7 @@ struct gmx_enerdata_t
     ForeignLambdaTerms foreignLambdaTerms;
 
     //! Alternate, temporary array for storing foreign lambda energies
-    real foreign_term[F_NRE] = { 0 };
+    std::array<real, F_NRE> foreign_term = { 0 };
     //! Alternate, temporary  array for storing foreign lambda group pair energies
     struct gmx_grppairener_t foreign_grpp;
 };
index fa689d422761968173669b0f0493e92801c7fd40..846e2bbdb32454cc85d818122bcaa6feb449fa3d 100644 (file)
@@ -632,7 +632,7 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality
                 GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR
             }
 
-            sum_epot(enerd->foreign_grpp, enerd->foreign_term);
+            sum_epot(enerd->foreign_grpp, enerd->foreign_term.data());
             enerd->foreignLambdaTerms.accumulate(
                     i,
                     enerd->foreign_term[F_EPOT],