/* 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++;
}
}
}