Use more arrayref in listed forces sigatures
[alexxy/gromacs.git] / src / gromacs / listed_forces / bonded.cpp
index 5460db9b6a64e330afb4753ec3ab23ffbf8b3637..fbddaf5621daaef04316b65283f532f36cd0d54d 100644 (file)
@@ -70,6 +70,7 @@
 #include "gromacs/simd/simd.h"
 #include "gromacs/simd/simd_math.h"
 #include "gromacs/simd/vector_operations.h"
+#include "gromacs/utility/arrayref.h"
 #include "gromacs/utility/basedefinitions.h"
 #include "gromacs/utility/enumerationhelpers.h"
 #include "gromacs/utility/fatalerror.h"
@@ -91,20 +92,20 @@ namespace
 {
 
 //! Type of CPU function to compute a bonded interaction.
-using BondedFunction = real (*)(int              nbonds,
-                                const t_iatom    iatoms[],
-                                const t_iparams  iparams[],
-                                const rvec       x[],
-                                rvec4            f[],
-                                rvec             fshift[],
-                                const t_pbc*     pbc,
-                                real             lambda,
-                                real*            dvdlambda,
-                                const t_mdatoms* md,
-                                t_fcdata*        fcd,
-                                t_disresdata*    disresdata,
-                                t_oriresdata*    oriresdata,
-                                int*             ddgatindex);
+using BondedFunction = real (*)(int                       nbonds,
+                                const t_iatom             iatoms[],
+                                const t_iparams           iparams[],
+                                const rvec                x[],
+                                rvec4                     f[],
+                                rvec                      fshift[],
+                                const t_pbc*              pbc,
+                                real                      lambda,
+                                real*                     dvdlambda,
+                                gmx::ArrayRef<const real> charge,
+                                t_fcdata*                 fcd,
+                                t_disresdata*             disresdata,
+                                t_oriresdata*             oriresdata,
+                                int*                      ddgatindex);
 
 /*! \brief Mysterious CMAP coefficient matrix */
 const int cmap_coeff_matrix[] = {
@@ -256,7 +257,7 @@ real morse_bonds(int             nbonds,
                  const t_pbc*    pbc,
                  real            lambda,
                  real*           dvdlambda,
-                 const t_mdatoms gmx_unused* md,
+                 gmx::ArrayRef<const real> /*charge*/,
                  t_fcdata gmx_unused* fcd,
                  t_disresdata gmx_unused* disresdata,
                  t_oriresdata gmx_unused* oriresdata,
@@ -326,7 +327,7 @@ real cubic_bonds(int             nbonds,
                  const t_pbc*    pbc,
                  real gmx_unused lambda,
                  real gmx_unused* dvdlambda,
-                 const t_mdatoms gmx_unused* md,
+                 gmx::ArrayRef<const real> /*charge*/,
                  t_fcdata gmx_unused* fcd,
                  t_disresdata gmx_unused* disresdata,
                  t_oriresdata gmx_unused* oriresdata,
@@ -383,7 +384,7 @@ real FENE_bonds(int             nbonds,
                 const t_pbc*    pbc,
                 real gmx_unused lambda,
                 real gmx_unused* dvdlambda,
-                const t_mdatoms gmx_unused* md,
+                gmx::ArrayRef<const real> /*charge*/,
                 t_fcdata gmx_unused* fcd,
                 t_disresdata gmx_unused* disresdata,
                 t_oriresdata gmx_unused* oriresdata,
@@ -474,7 +475,7 @@ bonds(int             nbonds,
       const t_pbc*    pbc,
       real            lambda,
       real*           dvdlambda,
-      const t_mdatoms gmx_unused* md,
+      gmx::ArrayRef<const real> /*charge*/,
       t_fcdata gmx_unused* fcd,
       t_disresdata gmx_unused* disresdata,
       t_oriresdata gmx_unused* oriresdata,
@@ -536,7 +537,7 @@ bonds(int             nbonds,
       const t_pbc*    pbc,
       real gmx_unused lambda,
       real gmx_unused* dvdlambda,
-      const t_mdatoms gmx_unused* md,
+      gmx::ArrayRef<const real> /*charge*/,
       t_fcdata gmx_unused* fcd,
       t_disresdata gmx_unused* disresdata,
       t_oriresdata gmx_unused* oriresdata,
@@ -628,7 +629,7 @@ real restraint_bonds(int             nbonds,
                      const t_pbc*    pbc,
                      real            lambda,
                      real*           dvdlambda,
-                     const t_mdatoms gmx_unused* md,
+                     gmx::ArrayRef<const real> /*charge*/,
                      t_fcdata gmx_unused* fcd,
                      t_disresdata gmx_unused* disresdata,
                      t_oriresdata gmx_unused* oriresdata,
@@ -709,16 +710,16 @@ real restraint_bonds(int             nbonds,
 }
 
 template<BondedKernelFlavor flavor>
-real polarize(int              nbonds,
-              const t_iatom    forceatoms[],
-              const t_iparams  forceparams[],
-              const rvec       x[],
-              rvec4            f[],
-              rvec             fshift[],
-              const t_pbc*     pbc,
-              real             lambda,
-              real*            dvdlambda,
-              const t_mdatoms* md,
+real polarize(int                       nbonds,
+              const t_iatom             forceatoms[],
+              const t_iparams           forceparams[],
+              const rvec                x[],
+              rvec4                     f[],
+              rvec                      fshift[],
+              const t_pbc*              pbc,
+              real                      lambda,
+              real*                     dvdlambda,
+              gmx::ArrayRef<const real> charge,
               t_fcdata gmx_unused* fcd,
               t_disresdata gmx_unused* disresdata,
               t_oriresdata gmx_unused* oriresdata,
@@ -734,7 +735,7 @@ real polarize(int              nbonds,
         type = forceatoms[i++];
         ai   = forceatoms[i++];
         aj   = forceatoms[i++];
-        ksh  = gmx::square(md->chargeA[aj]) * gmx::c_one4PiEps0 / forceparams[type].polarize.alpha;
+        ksh  = gmx::square(charge[aj]) * gmx::c_one4PiEps0 / forceparams[type].polarize.alpha;
 
         ki  = pbc_rvec_sub(pbc, x[ai], x[aj], dx); /*   3      */
         dr2 = iprod(dx, dx);                       /*   5              */
@@ -756,16 +757,16 @@ real polarize(int              nbonds,
 }
 
 template<BondedKernelFlavor flavor>
-real anharm_polarize(int              nbonds,
-                     const t_iatom    forceatoms[],
-                     const t_iparams  forceparams[],
-                     const rvec       x[],
-                     rvec4            f[],
-                     rvec             fshift[],
-                     const t_pbc*     pbc,
-                     real             lambda,
-                     real*            dvdlambda,
-                     const t_mdatoms* md,
+real anharm_polarize(int                       nbonds,
+                     const t_iatom             forceatoms[],
+                     const t_iparams           forceparams[],
+                     const rvec                x[],
+                     rvec4                     f[],
+                     rvec                      fshift[],
+                     const t_pbc*              pbc,
+                     real                      lambda,
+                     real*                     dvdlambda,
+                     gmx::ArrayRef<const real> charge,
                      t_fcdata gmx_unused* fcd,
                      t_disresdata gmx_unused* disresdata,
                      t_oriresdata gmx_unused* oriresdata,
@@ -781,7 +782,7 @@ real anharm_polarize(int              nbonds,
         type = forceatoms[i++];
         ai   = forceatoms[i++];
         aj   = forceatoms[i++];
-        ksh = gmx::square(md->chargeA[aj]) * gmx::c_one4PiEps0 / forceparams[type].anharm_polarize.alpha; /* 7*/
+        ksh = gmx::square(charge[aj]) * gmx::c_one4PiEps0 / forceparams[type].anharm_polarize.alpha; /* 7*/
         khyp  = forceparams[type].anharm_polarize.khyp;
         drcut = forceparams[type].anharm_polarize.drcut;
 
@@ -820,8 +821,8 @@ real water_pol(int             nbonds,
                rvec gmx_unused fshift[],
                const t_pbc gmx_unused* pbc,
                real gmx_unused lambda,
-               real gmx_unused* dvdlambda,
-               const t_mdatoms gmx_unused* md,
+               real gmx_unused*          dvdlambda,
+               gmx::ArrayRef<const real> charge,
                t_fcdata gmx_unused* fcd,
                t_disresdata gmx_unused* disresdata,
                t_oriresdata gmx_unused* oriresdata,
@@ -840,7 +841,7 @@ real water_pol(int             nbonds,
     {
         type0  = forceatoms[0];
         aS     = forceatoms[5];
-        qS     = md->chargeA[aS];
+        qS     = charge[aS];
         kk[XX] = gmx::square(qS) * gmx::c_one4PiEps0 / forceparams[type0].wpol.al_x;
         kk[YY] = gmx::square(qS) * gmx::c_one4PiEps0 / forceparams[type0].wpol.al_y;
         kk[ZZ] = gmx::square(qS) * gmx::c_one4PiEps0 / forceparams[type0].wpol.al_z;
@@ -965,8 +966,8 @@ real thole_pol(int             nbonds,
                rvec            fshift[],
                const t_pbc*    pbc,
                real gmx_unused lambda,
-               real gmx_unused* dvdlambda,
-               const t_mdatoms* md,
+               real gmx_unused*          dvdlambda,
+               gmx::ArrayRef<const real> charge,
                t_fcdata gmx_unused* fcd,
                t_disresdata gmx_unused* disresdata,
                t_oriresdata gmx_unused* oriresdata,
@@ -984,8 +985,8 @@ real thole_pol(int             nbonds,
         da1  = forceatoms[i++];
         a2   = forceatoms[i++];
         da2  = forceatoms[i++];
-        q1   = md->chargeA[da1];
-        q2   = md->chargeA[da2];
+        q1   = charge[da1];
+        q2   = charge[da2];
         a    = forceparams[type].thole.a;
         al1  = forceparams[type].thole.alpha1;
         al2  = forceparams[type].thole.alpha2;
@@ -1019,7 +1020,7 @@ angles(int             nbonds,
        const t_pbc*    pbc,
        real            lambda,
        real*           dvdlambda,
-       const t_mdatoms gmx_unused* md,
+       gmx::ArrayRef<const real> /*charge*/,
        t_fcdata gmx_unused* fcd,
        t_disresdata gmx_unused* disresdata,
        t_oriresdata gmx_unused* oriresdata,
@@ -1113,7 +1114,7 @@ angles(int             nbonds,
        const t_pbc*    pbc,
        real gmx_unused lambda,
        real gmx_unused* dvdlambda,
-       const t_mdatoms gmx_unused* md,
+       gmx::ArrayRef<const real> /*charge*/,
        t_fcdata gmx_unused* fcd,
        t_disresdata gmx_unused* disresdata,
        t_oriresdata gmx_unused* oriresdata,
@@ -1273,7 +1274,7 @@ real linear_angles(int             nbonds,
                    const t_pbc*    pbc,
                    real            lambda,
                    real*           dvdlambda,
-                   const t_mdatoms gmx_unused* md,
+                   gmx::ArrayRef<const real> /*charge*/,
                    t_fcdata gmx_unused* fcd,
                    t_disresdata gmx_unused* disresdata,
                    t_oriresdata gmx_unused* oriresdata,
@@ -1345,7 +1346,7 @@ urey_bradley(int             nbonds,
              const t_pbc*    pbc,
              real            lambda,
              real*           dvdlambda,
-             const t_mdatoms gmx_unused* md,
+             gmx::ArrayRef<const real> /*charge*/,
              t_fcdata gmx_unused* fcd,
              t_disresdata gmx_unused* disresdata,
              t_oriresdata gmx_unused* oriresdata,
@@ -1457,7 +1458,7 @@ urey_bradley(int             nbonds,
              const t_pbc*    pbc,
              real gmx_unused lambda,
              real gmx_unused* dvdlambda,
-             const t_mdatoms gmx_unused* md,
+             gmx::ArrayRef<const real> /*charge*/,
              t_fcdata gmx_unused* fcd,
              t_disresdata gmx_unused* disresdata,
              t_oriresdata gmx_unused* oriresdata,
@@ -1601,7 +1602,7 @@ real quartic_angles(int             nbonds,
                     const t_pbc*    pbc,
                     real gmx_unused lambda,
                     real gmx_unused* dvdlambda,
-                    const t_mdatoms gmx_unused* md,
+                    gmx::ArrayRef<const real> /*charge*/,
                     t_fcdata gmx_unused* fcd,
                     t_disresdata gmx_unused* disresdata,
                     t_oriresdata gmx_unused* oriresdata,
@@ -1968,7 +1969,7 @@ pdihs(int             nbonds,
       const t_pbc*    pbc,
       real            lambda,
       real*           dvdlambda,
-      const t_mdatoms gmx_unused* md,
+      gmx::ArrayRef<const real> /*charge*/,
       t_fcdata gmx_unused* fcd,
       t_disresdata gmx_unused* disresdata,
       t_oriresdata gmx_unused* oriresdata,
@@ -2031,7 +2032,7 @@ pdihs(int             nbonds,
       const t_pbc*    pbc,
       real gmx_unused lambda,
       real gmx_unused* dvdlambda,
-      const t_mdatoms gmx_unused* md,
+      gmx::ArrayRef<const real> /*charge*/,
       t_fcdata gmx_unused* fcd,
       t_disresdata gmx_unused* disresdata,
       t_oriresdata gmx_unused* oriresdata,
@@ -2147,7 +2148,7 @@ rbdihs(int             nbonds,
        const t_pbc*    pbc,
        real gmx_unused lambda,
        real gmx_unused* dvdlambda,
-       const t_mdatoms gmx_unused* md,
+       gmx::ArrayRef<const real> /*charge*/,
        t_fcdata gmx_unused* fcd,
        t_disresdata gmx_unused* disresdata,
        t_oriresdata gmx_unused* oriresdata,
@@ -2275,7 +2276,7 @@ real idihs(int             nbonds,
            const t_pbc*    pbc,
            real            lambda,
            real*           dvdlambda,
-           const t_mdatoms gmx_unused* md,
+           gmx::ArrayRef<const real> /*charge*/,
            t_fcdata gmx_unused* fcd,
            t_disresdata gmx_unused* disresdata,
            t_oriresdata gmx_unused* oriresdata,
@@ -2443,7 +2444,7 @@ real angres(int             nbonds,
             const t_pbc*    pbc,
             real            lambda,
             real*           dvdlambda,
-            const t_mdatoms gmx_unused* md,
+            gmx::ArrayRef<const real> /*charge*/,
             t_fcdata gmx_unused* fcd,
             t_disresdata gmx_unused* disresdata,
             t_oriresdata gmx_unused* oriresdata,
@@ -2462,7 +2463,7 @@ real angresz(int             nbonds,
              const t_pbc*    pbc,
              real            lambda,
              real*           dvdlambda,
-             const t_mdatoms gmx_unused* md,
+             gmx::ArrayRef<const real> /*charge*/,
              t_fcdata gmx_unused* fcd,
              t_disresdata gmx_unused* disresdata,
              t_oriresdata gmx_unused* oriresdata,
@@ -2481,7 +2482,7 @@ real dihres(int             nbonds,
             const t_pbc*    pbc,
             real            lambda,
             real*           dvdlambda,
-            const t_mdatoms gmx_unused* md,
+            gmx::ArrayRef<const real> /*charge*/,
             t_fcdata gmx_unused* fcd,
             t_disresdata gmx_unused* disresdata,
             t_oriresdata gmx_unused* oriresdata,
@@ -2576,7 +2577,7 @@ real unimplemented(int gmx_unused nbonds,
                    const t_pbc gmx_unused* pbc,
                    real gmx_unused lambda,
                    real gmx_unused* dvdlambda,
-                   const t_mdatoms gmx_unused* md,
+                   gmx::ArrayRef<const real> /*charge*/,
                    t_fcdata gmx_unused* fcd,
                    t_disresdata gmx_unused* disresdata,
                    t_oriresdata gmx_unused* oriresdata,
@@ -2595,7 +2596,7 @@ real restrangles(int             nbonds,
                  const t_pbc*    pbc,
                  real gmx_unused lambda,
                  real gmx_unused* dvdlambda,
-                 const t_mdatoms gmx_unused* md,
+                 gmx::ArrayRef<const real> /*charge*/,
                  t_fcdata gmx_unused* fcd,
                  t_disresdata gmx_unused* disresdata,
                  t_oriresdata gmx_unused* oriresdata,
@@ -2699,7 +2700,7 @@ real restrdihs(int             nbonds,
                const t_pbc*    pbc,
                real gmx_unused lambda,
                real gmx_unused* dvlambda,
-               const t_mdatoms gmx_unused* md,
+               gmx::ArrayRef<const real> /*charge*/,
                t_fcdata gmx_unused* fcd,
                t_disresdata gmx_unused* disresdata,
                t_oriresdata gmx_unused* oriresdata,
@@ -2823,7 +2824,7 @@ real cbtdihs(int             nbonds,
              const t_pbc*    pbc,
              real gmx_unused lambda,
              real gmx_unused* dvdlambda,
-             const t_mdatoms gmx_unused* md,
+             gmx::ArrayRef<const real> /*charge*/,
              t_fcdata gmx_unused* fcd,
              t_disresdata gmx_unused* disresdata,
              t_oriresdata gmx_unused* oriresdata,
@@ -2940,7 +2941,7 @@ rbdihs(int             nbonds,
        const t_pbc*    pbc,
        real            lambda,
        real*           dvdlambda,
-       const t_mdatoms gmx_unused* md,
+       gmx::ArrayRef<const real> /*charge*/,
        t_fcdata gmx_unused* fcd,
        t_disresdata gmx_unused* disresdata,
        t_oriresdata gmx_unused* oriresdata,
@@ -3092,7 +3093,7 @@ real cmap_dihs(int                 nbonds,
                const struct t_pbc* pbc,
                real gmx_unused lambda,
                real gmx_unused* dvdlambda,
-               const t_mdatoms gmx_unused* md,
+               gmx::ArrayRef<const real> /*charge*/,
                t_fcdata gmx_unused* fcd,
                t_disresdata gmx_unused* disresdata,
                t_oriresdata gmx_unused* oriresdata,
@@ -3498,7 +3499,7 @@ real g96bonds(int             nbonds,
               const t_pbc*    pbc,
               real            lambda,
               real*           dvdlambda,
-              const t_mdatoms gmx_unused* md,
+              gmx::ArrayRef<const real> /*charge*/,
               t_fcdata gmx_unused* fcd,
               t_disresdata gmx_unused* disresdata,
               t_oriresdata gmx_unused* oriresdata,
@@ -3557,7 +3558,7 @@ real g96angles(int             nbonds,
                const t_pbc*    pbc,
                real            lambda,
                real*           dvdlambda,
-               const t_mdatoms gmx_unused* md,
+               gmx::ArrayRef<const real> /*charge*/,
                t_fcdata gmx_unused* fcd,
                t_disresdata gmx_unused* disresdata,
                t_oriresdata gmx_unused* oriresdata,
@@ -3626,7 +3627,7 @@ real cross_bond_bond(int             nbonds,
                      const t_pbc*    pbc,
                      real gmx_unused lambda,
                      real gmx_unused* dvdlambda,
-                     const t_mdatoms gmx_unused* md,
+                     gmx::ArrayRef<const real> /*charge*/,
                      t_fcdata gmx_unused* fcd,
                      t_disresdata gmx_unused* disresdata,
                      t_oriresdata gmx_unused* oriresdata,
@@ -3700,7 +3701,7 @@ real cross_bond_angle(int             nbonds,
                       const t_pbc*    pbc,
                       real gmx_unused lambda,
                       real gmx_unused* dvdlambda,
-                      const t_mdatoms gmx_unused* md,
+                      gmx::ArrayRef<const real> /*charge*/,
                       t_fcdata gmx_unused* fcd,
                       t_disresdata gmx_unused* disresdata,
                       t_oriresdata gmx_unused* oriresdata,
@@ -3838,8 +3839,8 @@ real tab_bonds(int             nbonds,
                const t_pbc*    pbc,
                real            lambda,
                real*           dvdlambda,
-               const t_mdatoms gmx_unused* md,
-               t_fcdata*                   fcd,
+               gmx::ArrayRef<const real> /*charge*/,
+               t_fcdata*    fcd,
                t_disresdata gmx_unused* disresdata,
                t_oriresdata gmx_unused* oriresdata,
                int gmx_unused* global_atom_index)
@@ -3895,8 +3896,8 @@ real tab_angles(int             nbonds,
                 const t_pbc*    pbc,
                 real            lambda,
                 real*           dvdlambda,
-                const t_mdatoms gmx_unused* md,
-                t_fcdata*                   fcd,
+                gmx::ArrayRef<const real> /*charge*/,
+                t_fcdata*    fcd,
                 t_disresdata gmx_unused* disresdata,
                 t_oriresdata gmx_unused* oriresdata,
                 int gmx_unused* global_atom_index)
@@ -3977,8 +3978,8 @@ real tab_dihs(int             nbonds,
               const t_pbc*    pbc,
               real            lambda,
               real*           dvdlambda,
-              const t_mdatoms gmx_unused* md,
-              t_fcdata*                   fcd,
+              gmx::ArrayRef<const real> /*charge*/,
+              t_fcdata*    fcd,
               t_disresdata gmx_unused* disresdata,
               t_oriresdata gmx_unused* oriresdata,
               int gmx_unused* global_atom_index)
@@ -4145,27 +4146,27 @@ gmx::EnumerationArray<BondedKernelFlavor, std::array<BondedInteractions, F_NRE>>
 
 } // namespace
 
-real calculateSimpleBond(const int           ftype,
-                         const int           numForceatoms,
-                         const t_iatom       forceatoms[],
-                         const t_iparams     forceparams[],
-                         const rvec          x[],
-                         rvec4               f[],
-                         rvec                fshift[],
-                         const struct t_pbc* pbc,
-                         const real          lambda,
-                         real*               dvdlambda,
-                         const t_mdatoms*    md,
-                         t_fcdata*           fcd,
-                         t_disresdata*       disresdata,
-                         t_oriresdata*       oriresdata,
+real calculateSimpleBond(const int                 ftype,
+                         const int                 numForceatoms,
+                         const t_iatom             forceatoms[],
+                         const t_iparams           forceparams[],
+                         const rvec                x[],
+                         rvec4                     f[],
+                         rvec                      fshift[],
+                         const struct t_pbc*       pbc,
+                         const real                lambda,
+                         real*                     dvdlambda,
+                         gmx::ArrayRef<const real> charge,
+                         t_fcdata*                 fcd,
+                         t_disresdata*             disresdata,
+                         t_oriresdata*             oriresdata,
                          int gmx_unused*          global_atom_index,
                          const BondedKernelFlavor bondedKernelFlavor)
 {
     const BondedInteractions& bonded = c_bondedInteractionFunctionsPerFlavor[bondedKernelFlavor][ftype];
 
     real v = bonded.function(
-            numForceatoms, forceatoms, forceparams, x, f, fshift, pbc, lambda, dvdlambda, md, fcd, disresdata, oriresdata, global_atom_index);
+            numForceatoms, forceatoms, forceparams, x, f, fshift, pbc, lambda, dvdlambda, charge, fcd, disresdata, oriresdata, global_atom_index);
 
     return v;
 }