Merge branch release-2016
[alexxy/gromacs.git] / src / gromacs / domdec / domdec_topology.cpp
index d9950c7eb5b948ade529e13e5ec4aeda047e4c6e..f72368454ac20f3a8e184276cd9e3bfcfb6c5f9e 100644 (file)
@@ -1266,40 +1266,33 @@ static void combine_idef(t_idef *dest, const thread_work_t *src, int nsrc,
             /* Position restraints need an additional treatment */
             if (ftype == F_POSRES || ftype == F_FBPOSRES)
             {
-                int nposres = dest->il[ftype].nr/2;
-                if (nposres > dest->iparams_posres_nalloc)
+                int          nposres       = dest->il[ftype].nr/2;
+                // TODO: Simplify this code using std::vector
+                t_iparams * &iparams_dest  = (ftype == F_POSRES ? dest->iparams_posres : dest->iparams_fbposres);
+                int         &posres_nalloc = (ftype == F_POSRES ? dest->iparams_posres_nalloc : dest->iparams_fbposres_nalloc);
+                if (nposres > posres_nalloc)
                 {
-                    dest->iparams_posres_nalloc = over_alloc_large(nposres);
-                    srenew(dest->iparams_posres, dest->iparams_posres_nalloc);
+                    posres_nalloc = over_alloc_large(nposres);
+                    srenew(iparams_dest, posres_nalloc);
                 }
+
                 /* Set nposres to the number of original position restraints in dest */
                 for (int s = 1; s < nsrc; s++)
                 {
                     nposres -= src[s].idef.il[ftype].nr/2;
                 }
+
                 for (int s = 1; s < nsrc; s++)
                 {
-                    if (ftype == F_POSRES)
-                    {
-                        for (int i = 0; i < src[s].idef.il[ftype].nr/2; i++)
-                        {
-                            /* Correct the index into iparams_posres */
-                            dest->il[ftype].iatoms[nposres*2] = nposres;
-                            /* Copy the position restraint force parameters */
-                            dest->iparams_posres[nposres] = src[s].idef.iparams_posres[i];
-                            nposres++;
-                        }
-                    }
-                    else
+                    const t_iparams *iparams_src = (ftype == F_POSRES ? src[s].idef.iparams_posres : src[s].idef.iparams_fbposres);
+
+                    for (int i = 0; i < src[s].idef.il[ftype].nr/2; i++)
                     {
-                        for (int i = 0; i < src[s].idef.il[ftype].nr/2; i++)
-                        {
-                            /* Correct the index into iparams_fbposres */
-                            dest->il[ftype].iatoms[nposres*2] = nposres;
-                            /* Copy the position restraint force parameters */
-                            dest->iparams_fbposres[nposres] = src[s].idef.iparams_fbposres[i];
-                            nposres++;
-                        }
+                        /* Correct the index into iparams_posres */
+                        dest->il[ftype].iatoms[nposres*2] = nposres;
+                        /* Copy the position restraint force parameters */
+                        iparams_dest[nposres]             = iparams_src[i];
+                        nposres++;
                     }
                 }
             }