added Verlet scheme and NxN non-bonded functionality
[alexxy/gromacs.git] / src / mdlib / pull_rotation.c
index 5e269382a278d0bfca31a85d12e81391ad2adc84..1ade3ac65aa4719c5f5ad5ddc12ee2ff5ac127b0 100644 (file)
@@ -3263,6 +3263,7 @@ static void init_rot_group(FILE *fplog,t_commrec *cr,int g,t_rotgrp *rotg,
     t_atom      *atom;
     gmx_enfrotgrp_t erg;      /* Pointer to enforced rotation group data */
     int         ref_firstindex, ref_lastindex;
+    gmx_mtop_atomlookup_t alook=NULL;
     real        mass,totalmass;
     real        start=0.0;
     
@@ -3338,6 +3339,10 @@ static void init_rot_group(FILE *fplog,t_commrec *cr,int g,t_rotgrp *rotg,
 
     /* Copy the masses so that the center can be determined. For all types of
      * enforced rotation, we store the masses in the erg->mc array. */
+    if (rotg->bMassW)
+    {
+       alook = gmx_mtop_atomlookup_init(mtop);
+    }
     snew(erg->mc, rotg->nat);
     if (bFlex)
         snew(erg->mc_sorted, rotg->nat);
@@ -3348,7 +3353,7 @@ static void init_rot_group(FILE *fplog,t_commrec *cr,int g,t_rotgrp *rotg,
     {
         if (rotg->bMassW)
         {
-            gmx_mtop_atomnr_to_atom(mtop,rotg->ind[i],&atom);
+            gmx_mtop_atomnr_to_atom(alook,rotg->ind[i],&atom);
             mass=atom->m;
         }
         else
@@ -3360,6 +3365,11 @@ static void init_rot_group(FILE *fplog,t_commrec *cr,int g,t_rotgrp *rotg,
     }
     erg->invmass = 1.0/totalmass;
     
+    if (rotg->bMassW)
+    {
+       gmx_mtop_atomlookup_destroy(alook);
+    }
+
     /* Set xc_ref_center for any rotation potential */
     if ((rotg->eType==erotgISO) || (rotg->eType==erotgPM) || (rotg->eType==erotgRM) || (rotg->eType==erotgRM2))
     {