Remove macro for group type in topology
authorPaul Bauer <paul.bauer.q@gmail.com>
Fri, 7 Sep 2018 10:01:44 +0000 (12:01 +0200)
committerMark Abraham <mark.j.abraham@gmail.com>
Sun, 9 Sep 2018 13:11:46 +0000 (15:11 +0200)
Change-Id: Iabb199c321af21061f0e94c0bac20c352957e3a6

13 files changed:
src/gromacs/fileio/tngio.cpp
src/gromacs/gmxpreprocess/grompp.cpp
src/gromacs/gmxpreprocess/readir.cpp
src/gromacs/listed-forces/orires.cpp
src/gromacs/mdlib/forcerec.cpp
src/gromacs/mdlib/mdatoms.cpp
src/gromacs/mdlib/mdoutf.cpp
src/gromacs/mdlib/qmmm.cpp
src/gromacs/mdlib/tgroup.cpp
src/gromacs/pulling/pull.cpp
src/gromacs/tools/dump.cpp
src/gromacs/topology/topology.cpp
src/gromacs/topology/topology.h

index f2f3e354737796d5738bd4c169e025b5cff0d89c..f6fd09c6ef59c0fb476f34ed85247bc1df2a72e9 100644 (file)
@@ -595,7 +595,7 @@ static gmx_bool all_atoms_selected(const gmx_mtop_t *mtop,
         {
             for (int atomIndex = 0; atomIndex < atoms.nr; atomIndex++, i++)
             {
-                if (ggrpnr(&mtop->groups, gtype, i) != 0)
+                if (getGroupType(&mtop->groups, gtype, i) != 0)
                 {
                     return FALSE;
                 }
@@ -672,7 +672,7 @@ static void add_selection_groups(gmx_tng_trajectory_t  gmx_tng,
                 char *res_name;
                 int   res_id;
 
-                if (ggrpnr(&mtop->groups, egcCompressedX, i) != 0)
+                if (getGroupType(&mtop->groups, egcCompressedX, i) != 0)
                 {
                     continue;
                 }
@@ -718,8 +718,8 @@ static void add_selection_groups(gmx_tng_trajectory_t  gmx_tng,
                                 int atom1, atom2;
                                 atom1 = ilist->iatoms[l] + atom_offset;
                                 atom2 = ilist->iatoms[l+1] + atom_offset;
-                                if (ggrpnr(&mtop->groups, egcCompressedX, atom1) == 0 &&
-                                    ggrpnr(&mtop->groups, egcCompressedX, atom2) == 0)
+                                if (getGroupType(&mtop->groups, egcCompressedX, atom1) == 0 &&
+                                    getGroupType(&mtop->groups, egcCompressedX, atom2) == 0)
                                 {
                                     tng_molecule_bond_add(tng, mol, ilist->iatoms[l],
                                                           ilist->iatoms[l+1], &tngBond);
@@ -740,14 +740,14 @@ static void add_selection_groups(gmx_tng_trajectory_t  gmx_tng,
                         atom1 = ilist->iatoms[l] + atom_offset;
                         atom2 = ilist->iatoms[l+1] + atom_offset;
                         atom3 = ilist->iatoms[l+2] + atom_offset;
-                        if (ggrpnr(&mtop->groups, egcCompressedX, atom1) == 0)
+                        if (getGroupType(&mtop->groups, egcCompressedX, atom1) == 0)
                         {
-                            if (ggrpnr(&mtop->groups, egcCompressedX, atom2) == 0)
+                            if (getGroupType(&mtop->groups, egcCompressedX, atom2) == 0)
                             {
                                 tng_molecule_bond_add(tng, mol, atom1,
                                                       atom2, &tngBond);
                             }
-                            if (ggrpnr(&mtop->groups, egcCompressedX, atom3) == 0)
+                            if (getGroupType(&mtop->groups, egcCompressedX, atom3) == 0)
                             {
                                 tng_molecule_bond_add(tng, mol, atom1,
                                                       atom3, &tngBond);
index 0c85f43722657be6da3ed4830ea82ec49ae4cb47..cbf86d9e301781b4602fbcdf6e2d3706aae793ac 100644 (file)
@@ -179,10 +179,10 @@ static void check_eg_vs_cg(gmx_mtop_t *mtop)
             {
                 /* Get the energy group of the first atom in this charge group */
                 firstj  = astart + molt->cgs.index[cg];
-                firsteg = ggrpnr(&mtop->groups, egcENER, firstj);
+                firsteg = getGroupType(&mtop->groups, egcENER, firstj);
                 for (j = molt->cgs.index[cg]+1; j < molt->cgs.index[cg+1]; j++)
                 {
-                    eg = ggrpnr(&mtop->groups, egcENER, astart+j);
+                    eg = getGroupType(&mtop->groups, egcENER, astart+j);
                     if (eg != firsteg)
                     {
                         gmx_fatal(FARGS, "atoms %d and %d in charge group %d of molecule type '%s' are in different energy groups",
index bf448a2e0d857b602a3770bbb79cc550485aa7a3..3425f9884e16d953f831250522603e56d71cca67 100644 (file)
@@ -2809,7 +2809,7 @@ static void calc_nrdf(const gmx_mtop_t *mtop, t_inputrec *ir, char **gnames)
         nrdf2[i] = 0;
         if (atom->ptype == eptAtom || atom->ptype == eptNucleus)
         {
-            g = ggrpnr(groups, egcFREEZE, i);
+            g = getGroupType(groups, egcFREEZE, i);
             for (d = 0; d < DIM; d++)
             {
                 if (opts->nFreeze[g][d] == 0)
@@ -2817,11 +2817,11 @@ static void calc_nrdf(const gmx_mtop_t *mtop, t_inputrec *ir, char **gnames)
                     /* Add one DOF for particle i (counted as 2*1) */
                     nrdf2[i]                              += 2;
                     /* VCM group i has dim d as a DOF */
-                    dof_vcm[ggrpnr(groups, egcVCM, i)][d]  = 1;
+                    dof_vcm[getGroupType(groups, egcVCM, i)][d]  = 1;
                 }
             }
-            nrdf_tc [ggrpnr(groups, egcTC, i)]  += 0.5*nrdf2[i];
-            nrdf_vcm[ggrpnr(groups, egcVCM, i)] += 0.5*nrdf2[i];
+            nrdf_tc [getGroupType(groups, egcTC, i)]  += 0.5*nrdf2[i];
+            nrdf_vcm[getGroupType(groups, egcVCM, i)] += 0.5*nrdf2[i];
         }
     }
 
@@ -2871,10 +2871,10 @@ static void calc_nrdf(const gmx_mtop_t *mtop, t_inputrec *ir, char **gnames)
                         jmin       = std::min(jmin, nrdf2[aj]);
                         nrdf2[ai] -= imin;
                         nrdf2[aj] -= jmin;
-                        nrdf_tc [ggrpnr(groups, egcTC, ai)]  -= 0.5*imin;
-                        nrdf_tc [ggrpnr(groups, egcTC, aj)]  -= 0.5*jmin;
-                        nrdf_vcm[ggrpnr(groups, egcVCM, ai)] -= 0.5*imin;
-                        nrdf_vcm[ggrpnr(groups, egcVCM, aj)] -= 0.5*jmin;
+                        nrdf_tc [getGroupType(groups, egcTC, ai)]  -= 0.5*imin;
+                        nrdf_tc [getGroupType(groups, egcTC, aj)]  -= 0.5*jmin;
+                        nrdf_vcm[getGroupType(groups, egcVCM, ai)] -= 0.5*imin;
+                        nrdf_vcm[getGroupType(groups, egcVCM, aj)] -= 0.5*jmin;
                     }
                     ia += interaction_function[ftype].nratoms+1;
                     i  += interaction_function[ftype].nratoms+1;
@@ -2889,8 +2889,8 @@ static void calc_nrdf(const gmx_mtop_t *mtop, t_inputrec *ir, char **gnames)
                     ai         = as + ia[1+j];
                     imin       = std::min(2, nrdf2[ai]);
                     nrdf2[ai] -= imin;
-                    nrdf_tc [ggrpnr(groups, egcTC, ai)]  -= 0.5*imin;
-                    nrdf_vcm[ggrpnr(groups, egcVCM, ai)] -= 0.5*imin;
+                    nrdf_tc [getGroupType(groups, egcTC, ai)]  -= 0.5*imin;
+                    nrdf_vcm[getGroupType(groups, egcVCM, ai)] -= 0.5*imin;
                 }
                 ia += 4;
                 i  += 4;
@@ -2928,11 +2928,11 @@ static void calc_nrdf(const gmx_mtop_t *mtop, t_inputrec *ir, char **gnames)
                 {
                     /* Subtract 1/2 dof from each group */
                     ai = pgrp->ind[0];
-                    nrdf_tc [ggrpnr(groups, egcTC, ai)]  -= 0.5*imin;
-                    nrdf_vcm[ggrpnr(groups, egcVCM, ai)] -= 0.5*imin;
-                    if (nrdf_tc[ggrpnr(groups, egcTC, ai)] < 0)
+                    nrdf_tc [getGroupType(groups, egcTC, ai)]  -= 0.5*imin;
+                    nrdf_vcm[getGroupType(groups, egcVCM, ai)] -= 0.5*imin;
+                    if (nrdf_tc[getGroupType(groups, egcTC, ai)] < 0)
                     {
-                        gmx_fatal(FARGS, "Center of mass pulling constraints caused the number of degrees of freedom for temperature coupling group %s to be negative", gnames[groups->grps[egcTC].nm_ind[ggrpnr(groups, egcTC, ai)]]);
+                        gmx_fatal(FARGS, "Center of mass pulling constraints caused the number of degrees of freedom for temperature coupling group %s to be negative", gnames[groups->grps[egcTC].nm_ind[getGroupType(groups, egcTC, ai)]]);
                     }
                 }
                 else
@@ -2988,9 +2988,9 @@ static void calc_nrdf(const gmx_mtop_t *mtop, t_inputrec *ir, char **gnames)
             na_tot = 0;
             for (ai = 0; ai < natoms; ai++)
             {
-                if (ggrpnr(groups, egcTC, ai) == i)
+                if (getGroupType(groups, egcTC, ai) == i)
                 {
-                    na_vcm[ggrpnr(groups, egcVCM, ai)]++;
+                    na_vcm[getGroupType(groups, egcVCM, ai)]++;
                     na_tot++;
                 }
             }
@@ -4117,7 +4117,7 @@ void triple_check(const char *mdparin, t_inputrec *ir, gmx_mtop_t *sys,
         const t_atom *atom;
         while (gmx_mtop_atomloop_all_next(aloop, &i, &atom))
         {
-            mgrp[ggrpnr(&sys->groups, egcACC, i)] += atom->m;
+            mgrp[getGroupType(&sys->groups, egcACC, i)] += atom->m;
         }
         mt = 0.0;
         for (i = 0; (i < sys->groups.grps[egcACC].nr); i++)
index b91d5d001a4e5321dc8a7d2ee47d9d6c1fe9eca5..1723464e653bbeece241bf5f1250888ae9eac668 100644 (file)
@@ -204,7 +204,7 @@ void init_orires(FILE                 *fplog,
     od->nref = 0;
     for (int i = 0; i < mtop->natoms; i++)
     {
-        if (ggrpnr(&mtop->groups, egcORFIT, i) == 0)
+        if (getGroupType(&mtop->groups, egcORFIT, i) == 0)
         {
             od->nref++;
         }
index c23876e2843be5507ef91fbff1e7b1ad29905455..7ff7ac628e6740592a68d8dabcc6eae8bfd2ae33 100644 (file)
@@ -673,8 +673,8 @@ static cginfo_mb_t *init_cginfo_mb(FILE *fplog, const gmx_mtop_t *mtop,
             {
                 a0 = cgs->index[cg];
                 a1 = cgs->index[cg+1];
-                if (ggrpnr(&mtop->groups, egcENER, a_offset+am+a0) !=
-                    ggrpnr(&mtop->groups, egcENER, a_offset   +a0))
+                if (getGroupType(&mtop->groups, egcENER, a_offset+am+a0) !=
+                    getGroupType(&mtop->groups, egcENER, a_offset   +a0))
                 {
                     bId = FALSE;
                 }
@@ -730,7 +730,7 @@ static cginfo_mb_t *init_cginfo_mb(FILE *fplog, const gmx_mtop_t *mtop,
                 a1 = cgs->index[cg+1];
 
                 /* Store the energy group in cginfo */
-                gid = ggrpnr(&mtop->groups, egcENER, a_offset+am+a0);
+                gid = getGroupType(&mtop->groups, egcENER, a_offset+am+a0);
                 SET_CGINFO_GID(cginfo[cgm+cg], gid);
 
                 /* Check the intra/inter charge group exclusions */
index 9da866eb566bd2d2ea44332db72c1a02ec7b2879..f5a5622764d6ee8a4c72377a20b67cf3b0035bdc 100644 (file)
@@ -129,7 +129,7 @@ makeMDAtoms(FILE *fp, const gmx_mtop_t &mtop, const t_inputrec &ir,
     md->bVCMgrps = FALSE;
     for (int i = 0; i < mtop.natoms; i++)
     {
-        if (ggrpnr(&mtop.groups, egcVCM, i) > 0)
+        if (getGroupType(&mtop.groups, egcVCM, i) > 0)
         {
             md->bVCMgrps = TRUE;
         }
@@ -341,7 +341,7 @@ void atoms2md(const gmx_mtop_t *mtop, const t_inputrec *ir,
 
             if (md->cFREEZE)
             {
-                md->cFREEZE[i] = ggrpnr(groups, egcFREEZE, ag);
+                md->cFREEZE[i] = getGroupType(groups, egcFREEZE, ag);
             }
             if (EI_ENERGY_MINIMIZATION(ir->eI))
             {
@@ -468,7 +468,7 @@ void atoms2md(const gmx_mtop_t *mtop, const t_inputrec *ir,
             {
                 md->cTC[i]    = groups->grpnr[egcTC][ag];
             }
-            md->cENER[i]    = ggrpnr(groups, egcENER, ag);
+            md->cENER[i]    = getGroupType(groups, egcENER, ag);
             if (md->cACC)
             {
                 md->cACC[i]   = groups->grpnr[egcACC][ag];
@@ -479,7 +479,7 @@ void atoms2md(const gmx_mtop_t *mtop, const t_inputrec *ir,
             }
             if (md->cORF)
             {
-                md->cORF[i]       = ggrpnr(groups, egcORFIT, ag);
+                md->cORF[i]       = getGroupType(groups, egcORFIT, ag);
             }
 
             if (md->cU1)
index 4f485e6f4289313ffa243f1d2eea7802ef92732d..0d64071dca5637aecb541c3664fcc1055fb0a6ed 100644 (file)
@@ -210,7 +210,7 @@ gmx_mdoutf_t init_mdoutf(FILE *fplog, int nfile, const t_filenm fnm[],
         of->natoms_x_compressed = 0;
         for (i = 0; (i < top_global->natoms); i++)
         {
-            if (ggrpnr(of->groups, egcCompressedX, i) == 0)
+            if (getGroupType(of->groups, egcCompressedX, i) == 0)
             {
                 of->natoms_x_compressed++;
             }
@@ -361,7 +361,7 @@ void mdoutf_write_to_trajectory_files(FILE *fplog, const t_commrec *cr,
                 snew(xxtc, of->natoms_x_compressed);
                 for (i = 0, j = 0; (i < of->natoms_global); i++)
                 {
-                    if (ggrpnr(of->groups, egcCompressedX, i) == 0)
+                    if (getGroupType(of->groups, egcCompressedX, i) == 0)
                     {
                         copy_rvec(state_global->x[i], xxtc[j++]);
                     }
index 5729274be1687ea9a4662a01559f6e24b20c77fd..918a6de3301cc100f41e98916358f3788ec00aaa 100644 (file)
@@ -440,7 +440,7 @@ void init_QMMMrec(const t_commrec  *cr,
                 qm_max += 1000;
                 srenew(qm_arr, qm_max);
             }
-            if (ggrpnr(groups, egcQMMM, i) == j)
+            if (getGroupType(groups, egcQMMM, i) == j)
             {
                 /* hack for tip4p */
                 qm_arr[qm_nr++] = i;
@@ -473,9 +473,9 @@ void init_QMMMrec(const t_commrec  *cr,
                     vsite = a_offset + iatoms[k+1]; /* the vsite         */
                     ai    = a_offset + iatoms[k+2]; /* constructing atom */
                     aj    = a_offset + iatoms[k+3]; /* constructing atom */
-                    if (ggrpnr(groups, egcQMMM, vsite) == ggrpnr(groups, egcQMMM, ai)
+                    if (getGroupType(groups, egcQMMM, vsite) == getGroupType(groups, egcQMMM, ai)
                         &&
-                        ggrpnr(groups, egcQMMM, vsite) == ggrpnr(groups, egcQMMM, aj))
+                        getGroupType(groups, egcQMMM, vsite) == getGroupType(groups, egcQMMM, aj))
                     {
                         /* this dummy link atom needs to be removed from the qm_arr
                          * before making the QMrec of this layer!
index 38c888e39216e26bf2b512ffc2c19f61139387d7..5eeac139a3ce68610e0028be86eedf0c675c9b06 100644 (file)
@@ -82,7 +82,7 @@ static void init_grpstat(gmx_mtop_t *mtop, int ngacc, t_grp_acc gstat[])
         aloop  = gmx_mtop_atomloop_all_init(mtop);
         while (gmx_mtop_atomloop_all_next(aloop, &i, &atom))
         {
-            grp = ggrpnr(groups, egcACC, i);
+            grp = getGroupType(groups, egcACC, i);
             if ((grp < 0) && (grp >= ngacc))
             {
                 gmx_incons("Input for acceleration groups wrong");
index 8b759cacaa9a3bcf95c2a8f19113172f00991518..792026f3edb1eaec768b98c5415aaeae2250a4aa 100644 (file)
@@ -1982,7 +1982,7 @@ static void init_pull_group_index(FILE *fplog, const t_commrec *cr,
             for (int d = 0; d < DIM; d++)
             {
                 if (pulldim_con[d] == 1 &&
-                    ir->opts.nFreeze[ggrpnr(groups, egcFREEZE, ii)][d])
+                    ir->opts.nFreeze[getGroupType(groups, egcFREEZE, ii)][d])
                 {
                     nfrozen++;
                 }
index 8f92475880fb57d9b3ca14cdf2975d277af7c2b3..8475a2192daade0c01642685776b97b016acab2b 100644 (file)
@@ -156,7 +156,7 @@ static void list_tpx(const char *fn,
         {
             for (j = 0; (j < egcNR); j++)
             {
-                gcount[j][ggrpnr(groups, j, i)]++;
+                gcount[j][getGroupType(groups, j, i)]++;
             }
         }
         printf("Group statistics\n");
index d82c2ac3b27fdad74cad3931de65d5fc0685f6f5..9570b76561c88493b26c2f4b320d672394770a96 100644 (file)
@@ -630,18 +630,17 @@ void cmp_top(FILE *fp, const t_topology *t1, const t_topology *t2, real ftol, re
 void cmp_groups(FILE *fp, const gmx_groups_t *g0, const gmx_groups_t *g1,
                 int natoms0, int natoms1)
 {
-    int  i, j;
     char buf[32];
 
     fprintf(fp, "comparing groups\n");
 
-    for (i = 0; i < egcNR; i++)
+    for (int i = 0; i < egcNR; i++)
     {
         sprintf(buf, "grps[%d].nr", i);
         cmp_int(fp, buf, -1, g0->grps[i].nr, g1->grps[i].nr);
         if (g0->grps[i].nr == g1->grps[i].nr)
         {
-            for (j = 0; j < g0->grps[i].nr; j++)
+            for (int j = 0; j < g0->grps[i].nr; j++)
             {
                 sprintf(buf, "grps[%d].name[%d]", i, j);
                 cmp_str(fp, buf, -1,
@@ -653,9 +652,9 @@ void cmp_groups(FILE *fp, const gmx_groups_t *g0, const gmx_groups_t *g1,
         if (g0->ngrpnr[i] == g1->ngrpnr[i] && natoms0 == natoms1 &&
             (g0->grpnr[i] != nullptr || g1->grpnr[i] != nullptr))
         {
-            for (j = 0; j < natoms0; j++)
+            for (int j = 0; j < natoms0; j++)
             {
-                cmp_int(fp, gtypes[i], j, ggrpnr(g0, i, j), ggrpnr(g1, i, j));
+                cmp_int(fp, gtypes[i], j, getGroupType(g0, i, j), getGroupType(g1, i, j));
             }
         }
     }
@@ -663,3 +662,8 @@ void cmp_groups(FILE *fp, const gmx_groups_t *g0, const gmx_groups_t *g1,
      * so we can skip the grpname list comparison.
      */
 }
+
+int getGroupType(const gmx_groups_t *group, int type, int atom)
+{
+    return (group->grpnr[type] ? group->grpnr[type][atom] : 0);
+}
index bb9b844f290fd15ff55bf3da424b4db8db838c3b..f10d37b7daf176d7b3c41c78ab12c40ef5bbbf3c 100644 (file)
@@ -47,7 +47,8 @@
 #include "gromacs/topology/idef.h"
 #include "gromacs/topology/symtab.h"
 
-enum {
+enum
+{
     egcTC,    egcENER,   egcACC, egcFREEZE,
     egcUser1, egcUser2,  egcVCM, egcCompressedX,
     egcORFIT, egcQMMM,
@@ -107,11 +108,17 @@ typedef struct gmx_groups_t
     unsigned char    *grpnr[egcNR]; /* Group numbers or NULL                */
 } gmx_groups_t;
 
-/* This macro gives the group number of group type egc for atom i.
- * This macro is useful, since the grpnr pointers are NULL
- * for group types that have all entries 0.
+/*! \brief
+ * Returns group number of an input group for a given atom.
+ *
+ * Returns the group \p type for \p atom in \p group, or 0 if the
+ * entries for all atoms in the group are 0 and the pointer is thus null.
+ *
+ * \param[in] group Group to check.
+ * \param[in] type  Type of group to check.
+ * \param[in] atom  Atom to check if it has an entry.
  */
-#define ggrpnr(groups, egc, i) ((groups)->grpnr[egc] ? (groups)->grpnr[egc][i] : 0)
+int getGroupType (const gmx_groups_t *group, int type, int atom);
 
 /* The global, complete system topology struct, based on molecule types.
  * This structure should contain no data that is O(natoms) in memory.