Fixed the execution order in OpenMM so that the generated trajectory frames correspon...
[alexxy/gromacs.git] / src / kernel / md_openmm.c
index 2e7c0938c65d4743227ff7d0ab4c2d7358c56bbd..2aefbbb927eb9f75146322bcfdde6d89f9e23e46 100644 (file)
@@ -515,26 +515,15 @@ double do_md_openmm(FILE *fplog,t_commrec *cr,int nfile,const t_filenm fnm[],
         };
         do_ene = (do_per_step(step,ir->nstenergy) || bLastStep);
 
-        if (mdof_flags != 0)
+        if (mdof_flags != 0 || do_ene || do_log)
         {
+            wallcycle_start(wcycle,ewcTRAJ);
+            bF = (mdof_flags & MDOF_F);
             bX = (mdof_flags & (MDOF_X | MDOF_XTC | MDOF_CPT));
             bV = (mdof_flags & (MDOF_V | MDOF_CPT));
 
-            wallcycle_start(wcycle,ewcTRAJ);
-            openmm_copy_state(openmmData, state, &t, f, enerd, bX, bV, 0, 0);
-            wallcycle_stop(wcycle,ewcTRAJ);
-        }
-
-        openmm_take_one_step(openmmData);
+            openmm_copy_state(openmmData, state, &t, f, enerd, bX, bV, bF, do_ene);
 
-        if (mdof_flags != 0 || do_ene || do_log)
-        {
-            wallcycle_start(wcycle,ewcTRAJ);
-            bF = (mdof_flags & MDOF_F);
-            if (bF || do_ene || do_log)
-            {
-                openmm_copy_state(openmmData, state, &t, f, enerd, 0, 0, bF, do_ene);
-            }
             upd_mdebin(mdebin, NULL,TRUE,
                        t,mdatoms->tmass,enerd,state,lastbox,
                        shake_vir,force_vir,total_vir,pres,
@@ -656,6 +645,8 @@ double do_md_openmm(FILE *fplog,t_commrec *cr,int nfile,const t_filenm fnm[],
         bStartingFromCpt = FALSE;
         step++;
         step_rel++;
+
+        openmm_take_one_step(openmmData);
     }
     /* End of main MD loop */
     debug_gmx();