3df348d86b4d13c7f90653d2d03afa8b654bf479
[alexxy/gromacs.git] / src / programs / mdrun / md.cpp
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5  * Copyright (c) 2001-2004, The GROMACS development team.
6  * Copyright (c) 2011,2012,2013,2014, by the GROMACS development team, led by
7  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8  * and including many others, as listed in the AUTHORS file in the
9  * top-level source directory and at http://www.gromacs.org.
10  *
11  * GROMACS is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public License
13  * as published by the Free Software Foundation; either version 2.1
14  * of the License, or (at your option) any later version.
15  *
16  * GROMACS is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with GROMACS; if not, see
23  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
25  *
26  * If you want to redistribute modifications to GROMACS, please
27  * consider that scientific software is very special. Version
28  * control is crucial - bugs must be traceable. We will be happy to
29  * consider code for inclusion in the official distribution, but
30  * derived work must not be called official GROMACS. Details are found
31  * in the README & COPYING files - if they are missing, get the
32  * official version at http://www.gromacs.org.
33  *
34  * To help us fund GROMACS development, we humbly ask that you cite
35  * the research papers on the package. Check out http://www.gromacs.org.
36  */
37 #ifdef HAVE_CONFIG_H
38 #include <config.h>
39 #endif
40
41 #include <stdlib.h>
42
43 #include "typedefs.h"
44 #include "gromacs/math/vec.h"
45 #include "vcm.h"
46 #include "mdebin.h"
47 #include "nrnb.h"
48 #include "calcmu.h"
49 #include "vsite.h"
50 #include "update.h"
51 #include "ns.h"
52 #include "mdrun.h"
53 #include "md_support.h"
54 #include "md_logging.h"
55 #include "network.h"
56 #include "names.h"
57 #include "force.h"
58 #include "disre.h"
59 #include "orires.h"
60 #include "pme.h"
61 #include "mdatoms.h"
62 #include "repl_ex.h"
63 #include "deform.h"
64 #include "qmmm.h"
65 #include "domdec.h"
66 #include "domdec_network.h"
67 #include "coulomb.h"
68 #include "constr.h"
69 #include "shellfc.h"
70 #include "gromacs/gmxpreprocess/compute_io.h"
71 #include "checkpoint.h"
72 #include "gromacs/topology/mtop_util.h"
73 #include "sighandler.h"
74 #include "txtdump.h"
75 #include "gromacs/utility/cstringutil.h"
76 #include "pme_loadbal.h"
77 #include "bondf.h"
78 #include "membed.h"
79 #include "types/nlistheuristics.h"
80 #include "types/iteratedconstraints.h"
81 #include "nbnxn_cuda_data_mgmt.h"
82
83 #include "gromacs/fileio/confio.h"
84 #include "gromacs/fileio/mdoutf.h"
85 #include "gromacs/fileio/trajectory_writing.h"
86 #include "gromacs/fileio/trnio.h"
87 #include "gromacs/fileio/trxio.h"
88 #include "gromacs/fileio/xtcio.h"
89 #include "gromacs/imd/imd.h"
90 #include "gromacs/pbcutil/mshift.h"
91 #include "gromacs/pbcutil/pbc.h"
92 #include "gromacs/pulling/pull.h"
93 #include "gromacs/swap/swapcoords.h"
94 #include "gromacs/timing/wallcycle.h"
95 #include "gromacs/timing/walltime_accounting.h"
96 #include "gromacs/utility/gmxmpi.h"
97 #include "gromacs/utility/smalloc.h"
98
99 #ifdef GMX_FAHCORE
100 #include "corewrap.h"
101 #endif
102
103 static void reset_all_counters(FILE *fplog, t_commrec *cr,
104                                gmx_int64_t step,
105                                gmx_int64_t *step_rel, t_inputrec *ir,
106                                gmx_wallcycle_t wcycle, t_nrnb *nrnb,
107                                gmx_walltime_accounting_t walltime_accounting,
108                                nbnxn_cuda_ptr_t cu_nbv)
109 {
110     char sbuf[STEPSTRSIZE];
111
112     /* Reset all the counters related to performance over the run */
113     md_print_warn(cr, fplog, "step %s: resetting all time and cycle counters\n",
114                   gmx_step_str(step, sbuf));
115
116     if (cu_nbv)
117     {
118         nbnxn_cuda_reset_timings(cu_nbv);
119     }
120
121     wallcycle_stop(wcycle, ewcRUN);
122     wallcycle_reset_all(wcycle);
123     if (DOMAINDECOMP(cr))
124     {
125         reset_dd_statistics_counters(cr->dd);
126     }
127     init_nrnb(nrnb);
128     ir->init_step += *step_rel;
129     ir->nsteps    -= *step_rel;
130     *step_rel      = 0;
131     wallcycle_start(wcycle, ewcRUN);
132     walltime_accounting_start(walltime_accounting);
133     print_date_and_time(fplog, cr->nodeid, "Restarted time", gmx_gettime());
134 }
135
136 double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[],
137              const output_env_t oenv, gmx_bool bVerbose, gmx_bool bCompact,
138              int nstglobalcomm,
139              gmx_vsite_t *vsite, gmx_constr_t constr,
140              int stepout, t_inputrec *ir,
141              gmx_mtop_t *top_global,
142              t_fcdata *fcd,
143              t_state *state_global,
144              t_mdatoms *mdatoms,
145              t_nrnb *nrnb, gmx_wallcycle_t wcycle,
146              gmx_edsam_t ed, t_forcerec *fr,
147              int repl_ex_nst, int repl_ex_nex, int repl_ex_seed, gmx_membed_t membed,
148              real cpt_period, real max_hours,
149              const char gmx_unused *deviceOptions,
150              int imdport,
151              unsigned long Flags,
152              gmx_walltime_accounting_t walltime_accounting)
153 {
154     gmx_mdoutf_t    outf = NULL;
155     gmx_int64_t     step, step_rel;
156     double          elapsed_time;
157     double          t, t0, lam0[efptNR];
158     gmx_bool        bGStatEveryStep, bGStat, bCalcVir, bCalcEner;
159     gmx_bool        bNS, bNStList, bSimAnn, bStopCM, bRerunMD, bNotLastFrame = FALSE,
160                     bFirstStep, bStateFromCP, bStateFromTPX, bInitStep, bLastStep,
161                     bBornRadii, bStartingFromCpt;
162     gmx_bool          bDoDHDL = FALSE, bDoFEP = FALSE, bDoExpanded = FALSE;
163     gmx_bool          do_ene, do_log, do_verbose, bRerunWarnNoV = TRUE,
164                       bForceUpdate = FALSE, bCPT;
165     gmx_bool          bMasterState;
166     int               force_flags, cglo_flags;
167     tensor            force_vir, shake_vir, total_vir, tmp_vir, pres;
168     int               i, m;
169     t_trxstatus      *status;
170     rvec              mu_tot;
171     t_vcm            *vcm;
172     t_state          *bufstate = NULL;
173     matrix            pcoupl_mu, M;
174     gmx_nlheur_t      nlh;
175     t_trxframe        rerun_fr;
176     gmx_repl_ex_t     repl_ex = NULL;
177     int               nchkpt  = 1;
178     gmx_localtop_t   *top;
179     t_mdebin         *mdebin   = NULL;
180     t_state          *state    = NULL;
181     rvec             *f_global = NULL;
182     gmx_enerdata_t   *enerd;
183     rvec             *f = NULL;
184     gmx_global_stat_t gstat;
185     gmx_update_t      upd   = NULL;
186     t_graph          *graph = NULL;
187     globsig_t         gs;
188     gmx_groups_t     *groups;
189     gmx_ekindata_t   *ekind, *ekind_save;
190     gmx_shellfc_t     shellfc;
191     int               count, nconverged = 0;
192     double            tcount                 = 0;
193     gmx_bool          bConverged             = TRUE, bOK, bSumEkinhOld, bDoReplEx, bExchanged, bNeedRepartition;
194     gmx_bool          bResetCountersHalfMaxH = FALSE;
195     gmx_bool          bVV, bIterativeCase, bFirstIterate, bTemp, bPres, bTrotter;
196     gmx_bool          bUpdateDoLR;
197     real              dvdl_constr;
198     rvec             *cbuf = NULL;
199     matrix            lastbox;
200     real              veta_save, scalevir, tracevir;
201     real              vetanew = 0;
202     int               lamnew  = 0;
203     /* for FEP */
204     int               nstfep;
205     double            cycles;
206     real              saved_conserved_quantity = 0;
207     real              last_ekin                = 0;
208     t_extmass         MassQ;
209     int             **trotter_seq;
210     char              sbuf[STEPSTRSIZE], sbuf2[STEPSTRSIZE];
211     int               handled_stop_condition = gmx_stop_cond_none; /* compare to get_stop_condition*/
212     gmx_iterate_t     iterate;
213     gmx_int64_t       multisim_nsteps = -1;                        /* number of steps to do  before first multisim
214                                                                           simulation stops. If equal to zero, don't
215                                                                           communicate any more between multisims.*/
216     /* PME load balancing data for GPU kernels */
217     pme_load_balancing_t pme_loadbal = NULL;
218     double               cycles_pmes;
219     gmx_bool             bPMETuneTry = FALSE, bPMETuneRunning = FALSE;
220
221     /* Interactive MD */
222     gmx_bool          bIMDstep = FALSE;
223
224 #ifdef GMX_FAHCORE
225     /* Temporary addition for FAHCORE checkpointing */
226     int chkpt_ret;
227 #endif
228
229     /* Check for special mdrun options */
230     bRerunMD = (Flags & MD_RERUN);
231     if (Flags & MD_RESETCOUNTERSHALFWAY)
232     {
233         if (ir->nsteps > 0)
234         {
235             /* Signal to reset the counters half the simulation steps. */
236             wcycle_set_reset_counters(wcycle, ir->nsteps/2);
237         }
238         /* Signal to reset the counters halfway the simulation time. */
239         bResetCountersHalfMaxH = (max_hours > 0);
240     }
241
242     /* md-vv uses averaged full step velocities for T-control
243        md-vv-avek uses averaged half step velocities for T-control (but full step ekin for P control)
244        md uses averaged half step kinetic energies to determine temperature unless defined otherwise by GMX_EKIN_AVE_VEL; */
245     bVV = EI_VV(ir->eI);
246     if (bVV) /* to store the initial velocities while computing virial */
247     {
248         snew(cbuf, top_global->natoms);
249     }
250     /* all the iteratative cases - only if there are constraints */
251     bIterativeCase = ((IR_NPH_TROTTER(ir) || IR_NPT_TROTTER(ir)) && (constr) && (!bRerunMD));
252     gmx_iterate_init(&iterate, FALSE); /* The default value of iterate->bIterationActive is set to
253                                           false in this step.  The correct value, true or false,
254                                           is set at each step, as it depends on the frequency of temperature
255                                           and pressure control.*/
256     bTrotter = (bVV && (IR_NPT_TROTTER(ir) || IR_NPH_TROTTER(ir) || IR_NVT_TROTTER(ir)));
257
258     if (bRerunMD)
259     {
260         /* Since we don't know if the frames read are related in any way,
261          * rebuild the neighborlist at every step.
262          */
263         ir->nstlist       = 1;
264         ir->nstcalcenergy = 1;
265         nstglobalcomm     = 1;
266     }
267
268     check_ir_old_tpx_versions(cr, fplog, ir, top_global);
269
270     nstglobalcomm   = check_nstglobalcomm(fplog, cr, nstglobalcomm, ir);
271     bGStatEveryStep = (nstglobalcomm == 1);
272
273     if (!bGStatEveryStep && ir->nstlist == -1 && fplog != NULL)
274     {
275         fprintf(fplog,
276                 "To reduce the energy communication with nstlist = -1\n"
277                 "the neighbor list validity should not be checked at every step,\n"
278                 "this means that exact integration is not guaranteed.\n"
279                 "The neighbor list validity is checked after:\n"
280                 "  <n.list life time> - 2*std.dev.(n.list life time)  steps.\n"
281                 "In most cases this will result in exact integration.\n"
282                 "This reduces the energy communication by a factor of 2 to 3.\n"
283                 "If you want less energy communication, set nstlist > 3.\n\n");
284     }
285
286     if (bRerunMD)
287     {
288         ir->nstxout_compressed = 0;
289     }
290     groups = &top_global->groups;
291
292     /* Initial values */
293     init_md(fplog, cr, ir, oenv, &t, &t0, state_global->lambda,
294             &(state_global->fep_state), lam0,
295             nrnb, top_global, &upd,
296             nfile, fnm, &outf, &mdebin,
297             force_vir, shake_vir, mu_tot, &bSimAnn, &vcm, Flags);
298
299     clear_mat(total_vir);
300     clear_mat(pres);
301     /* Energy terms and groups */
302     snew(enerd, 1);
303     init_enerdata(top_global->groups.grps[egcENER].nr, ir->fepvals->n_lambda,
304                   enerd);
305     if (DOMAINDECOMP(cr))
306     {
307         f = NULL;
308     }
309     else
310     {
311         snew(f, top_global->natoms);
312     }
313
314     /* Kinetic energy data */
315     snew(ekind, 1);
316     init_ekindata(fplog, top_global, &(ir->opts), ekind);
317     /* needed for iteration of constraints */
318     snew(ekind_save, 1);
319     init_ekindata(fplog, top_global, &(ir->opts), ekind_save);
320     /* Copy the cos acceleration to the groups struct */
321     ekind->cosacc.cos_accel = ir->cos_accel;
322
323     gstat = global_stat_init(ir);
324     debug_gmx();
325
326     /* Check for polarizable models and flexible constraints */
327     shellfc = init_shell_flexcon(fplog,
328                                  top_global, n_flexible_constraints(constr),
329                                  (ir->bContinuation ||
330                                   (DOMAINDECOMP(cr) && !MASTER(cr))) ?
331                                  NULL : state_global->x);
332     if (shellfc && ir->nstcalcenergy != 1)
333     {
334         gmx_fatal(FARGS, "You have nstcalcenergy set to a value (%d) that is different from 1.\nThis is not supported in combinations with shell particles.\nPlease make a new tpr file.", ir->nstcalcenergy);
335     }
336     if (shellfc && DOMAINDECOMP(cr))
337     {
338         gmx_fatal(FARGS, "Shell particles are not implemented with domain decomposition, use a single rank");
339     }
340     if (shellfc && ir->eI == eiNM)
341     {
342         /* Currently shells don't work with Normal Modes */
343         gmx_fatal(FARGS, "Normal Mode analysis is not supported with shells.\nIf you'd like to help with adding support, we have an open discussion at http://redmine.gromacs.org/issues/879\n");
344     }
345
346     if (vsite && ir->eI == eiNM)
347     {
348         /* Currently virtual sites don't work with Normal Modes */
349         gmx_fatal(FARGS, "Normal Mode analysis is not supported with virtual sites.\nIf you'd like to help with adding support, we have an open discussion at http://redmine.gromacs.org/issues/879\n");
350     }
351
352     if (DEFORM(*ir))
353     {
354         tMPI_Thread_mutex_lock(&deform_init_box_mutex);
355         set_deform_reference_box(upd,
356                                  deform_init_init_step_tpx,
357                                  deform_init_box_tpx);
358         tMPI_Thread_mutex_unlock(&deform_init_box_mutex);
359     }
360
361     {
362         double io = compute_io(ir, top_global->natoms, groups, mdebin->ebin->nener, 1);
363         if ((io > 2000) && MASTER(cr))
364         {
365             fprintf(stderr,
366                     "\nWARNING: This run will generate roughly %.0f Mb of data\n\n",
367                     io);
368         }
369     }
370
371     if (DOMAINDECOMP(cr))
372     {
373         top = dd_init_local_top(top_global);
374
375         snew(state, 1);
376         dd_init_local_state(cr->dd, state_global, state);
377
378         if (DDMASTER(cr->dd) && ir->nstfout)
379         {
380             snew(f_global, state_global->natoms);
381         }
382     }
383     else
384     {
385         top = gmx_mtop_generate_local_top(top_global, ir);
386
387         forcerec_set_excl_load(fr, top);
388
389         state    = serial_init_local_state(state_global);
390         f_global = f;
391
392         atoms2md(top_global, ir, 0, NULL, top_global->natoms, mdatoms);
393
394         if (vsite)
395         {
396             set_vsite_top(vsite, top, mdatoms, cr);
397         }
398
399         if (ir->ePBC != epbcNONE && !fr->bMolPBC)
400         {
401             graph = mk_graph(fplog, &(top->idef), 0, top_global->natoms, FALSE, FALSE);
402         }
403
404         if (shellfc)
405         {
406             make_local_shells(cr, mdatoms, shellfc);
407         }
408
409         setup_bonded_threading(fr, &top->idef);
410     }
411
412     /* Set up interactive MD (IMD) */
413     init_IMD(ir, cr, top_global, fplog, ir->nstcalcenergy, state_global->x,
414              nfile, fnm, oenv, imdport, Flags);
415
416     if (DOMAINDECOMP(cr))
417     {
418         /* Distribute the charge groups over the nodes from the master node */
419         dd_partition_system(fplog, ir->init_step, cr, TRUE, 1,
420                             state_global, top_global, ir,
421                             state, &f, mdatoms, top, fr,
422                             vsite, shellfc, constr,
423                             nrnb, wcycle, FALSE);
424
425     }
426
427     update_mdatoms(mdatoms, state->lambda[efptMASS]);
428
429     if (opt2bSet("-cpi", nfile, fnm))
430     {
431         bStateFromCP = gmx_fexist_master(opt2fn_master("-cpi", nfile, fnm, cr), cr);
432     }
433     else
434     {
435         bStateFromCP = FALSE;
436     }
437
438     if (ir->bExpanded)
439     {
440         init_expanded_ensemble(bStateFromCP, ir, &state->dfhist);
441     }
442
443     if (MASTER(cr))
444     {
445         if (bStateFromCP)
446         {
447             /* Update mdebin with energy history if appending to output files */
448             if (Flags & MD_APPENDFILES)
449             {
450                 restore_energyhistory_from_state(mdebin, &state_global->enerhist);
451             }
452             else
453             {
454                 /* We might have read an energy history from checkpoint,
455                  * free the allocated memory and reset the counts.
456                  */
457                 done_energyhistory(&state_global->enerhist);
458                 init_energyhistory(&state_global->enerhist);
459             }
460         }
461         /* Set the initial energy history in state by updating once */
462         update_energyhistory(&state_global->enerhist, mdebin);
463     }
464
465     /* Initialize constraints */
466     if (constr && !DOMAINDECOMP(cr))
467     {
468         set_constraints(constr, top, ir, mdatoms, cr);
469     }
470
471     if (repl_ex_nst > 0 && MASTER(cr))
472     {
473         repl_ex = init_replica_exchange(fplog, cr->ms, state_global, ir,
474                                         repl_ex_nst, repl_ex_nex, repl_ex_seed);
475     }
476
477     /* PME tuning is only supported with GPUs or PME nodes and not with rerun.
478      * PME tuning is not supported with PME only for LJ and not for Coulomb.
479      */
480     if ((Flags & MD_TUNEPME) &&
481         EEL_PME(fr->eeltype) &&
482         ( (fr->cutoff_scheme == ecutsVERLET && fr->nbv->bUseGPU) || !(cr->duty & DUTY_PME)) &&
483         !bRerunMD)
484     {
485         pme_loadbal_init(&pme_loadbal, ir, state->box, fr->ic, fr->pmedata);
486         cycles_pmes = 0;
487         if (cr->duty & DUTY_PME)
488         {
489             /* Start tuning right away, as we can't measure the load */
490             bPMETuneRunning = TRUE;
491         }
492         else
493         {
494             /* Separate PME nodes, we can measure the PP/PME load balance */
495             bPMETuneTry = TRUE;
496         }
497     }
498
499     if (!ir->bContinuation && !bRerunMD)
500     {
501         if (mdatoms->cFREEZE && (state->flags & (1<<estV)))
502         {
503             /* Set the velocities of frozen particles to zero */
504             for (i = 0; i < mdatoms->homenr; i++)
505             {
506                 for (m = 0; m < DIM; m++)
507                 {
508                     if (ir->opts.nFreeze[mdatoms->cFREEZE[i]][m])
509                     {
510                         state->v[i][m] = 0;
511                     }
512                 }
513             }
514         }
515
516         if (constr)
517         {
518             /* Constrain the initial coordinates and velocities */
519             do_constrain_first(fplog, constr, ir, mdatoms, state,
520                                cr, nrnb, fr, top);
521         }
522         if (vsite)
523         {
524             /* Construct the virtual sites for the initial configuration */
525             construct_vsites(vsite, state->x, ir->delta_t, NULL,
526                              top->idef.iparams, top->idef.il,
527                              fr->ePBC, fr->bMolPBC, cr, state->box);
528         }
529     }
530
531     debug_gmx();
532
533     /* set free energy calculation frequency as the minimum
534        greatest common denominator of nstdhdl, nstexpanded, and repl_ex_nst*/
535     nstfep = ir->fepvals->nstdhdl;
536     if (ir->bExpanded)
537     {
538         nstfep = gmx_greatest_common_divisor(ir->fepvals->nstdhdl, nstfep);
539     }
540     if (repl_ex_nst > 0)
541     {
542         nstfep = gmx_greatest_common_divisor(repl_ex_nst, nstfep);
543     }
544
545     /* I'm assuming we need global communication the first time! MRS */
546     cglo_flags = (CGLO_TEMPERATURE | CGLO_GSTAT
547                   | ((ir->comm_mode != ecmNO) ? CGLO_STOPCM : 0)
548                   | (bVV ? CGLO_PRESSURE : 0)
549                   | (bVV ? CGLO_CONSTRAINT : 0)
550                   | (bRerunMD ? CGLO_RERUNMD : 0)
551                   | ((Flags & MD_READ_EKIN) ? CGLO_READEKIN : 0));
552
553     bSumEkinhOld = FALSE;
554     compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
555                     NULL, enerd, force_vir, shake_vir, total_vir, pres, mu_tot,
556                     constr, NULL, FALSE, state->box,
557                     top_global, &bSumEkinhOld, cglo_flags);
558     if (ir->eI == eiVVAK)
559     {
560         /* a second call to get the half step temperature initialized as well */
561         /* we do the same call as above, but turn the pressure off -- internally to
562            compute_globals, this is recognized as a velocity verlet half-step
563            kinetic energy calculation.  This minimized excess variables, but
564            perhaps loses some logic?*/
565
566         compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
567                         NULL, enerd, force_vir, shake_vir, total_vir, pres, mu_tot,
568                         constr, NULL, FALSE, state->box,
569                         top_global, &bSumEkinhOld,
570                         cglo_flags &~(CGLO_STOPCM | CGLO_PRESSURE));
571     }
572
573     /* Calculate the initial half step temperature, and save the ekinh_old */
574     if (!(Flags & MD_STARTFROMCPT))
575     {
576         for (i = 0; (i < ir->opts.ngtc); i++)
577         {
578             copy_mat(ekind->tcstat[i].ekinh, ekind->tcstat[i].ekinh_old);
579         }
580     }
581     if (ir->eI != eiVV)
582     {
583         enerd->term[F_TEMP] *= 2; /* result of averages being done over previous and current step,
584                                      and there is no previous step */
585     }
586
587     /* if using an iterative algorithm, we need to create a working directory for the state. */
588     if (bIterativeCase)
589     {
590         bufstate = init_bufstate(state);
591     }
592
593     /* need to make an initiation call to get the Trotter variables set, as well as other constants for non-trotter
594        temperature control */
595     trotter_seq = init_npt_vars(ir, state, &MassQ, bTrotter);
596
597     if (MASTER(cr))
598     {
599         if (constr && !ir->bContinuation && ir->eConstrAlg == econtLINCS)
600         {
601             fprintf(fplog,
602                     "RMS relative constraint deviation after constraining: %.2e\n",
603                     constr_rmsd(constr, FALSE));
604         }
605         if (EI_STATE_VELOCITY(ir->eI))
606         {
607             fprintf(fplog, "Initial temperature: %g K\n", enerd->term[F_TEMP]);
608         }
609         if (bRerunMD)
610         {
611             fprintf(stderr, "starting md rerun '%s', reading coordinates from"
612                     " input trajectory '%s'\n\n",
613                     *(top_global->name), opt2fn("-rerun", nfile, fnm));
614             if (bVerbose)
615             {
616                 fprintf(stderr, "Calculated time to finish depends on nsteps from "
617                         "run input file,\nwhich may not correspond to the time "
618                         "needed to process input trajectory.\n\n");
619             }
620         }
621         else
622         {
623             char tbuf[20];
624             fprintf(stderr, "starting mdrun '%s'\n",
625                     *(top_global->name));
626             if (ir->nsteps >= 0)
627             {
628                 sprintf(tbuf, "%8.1f", (ir->init_step+ir->nsteps)*ir->delta_t);
629             }
630             else
631             {
632                 sprintf(tbuf, "%s", "infinite");
633             }
634             if (ir->init_step > 0)
635             {
636                 fprintf(stderr, "%s steps, %s ps (continuing from step %s, %8.1f ps).\n",
637                         gmx_step_str(ir->init_step+ir->nsteps, sbuf), tbuf,
638                         gmx_step_str(ir->init_step, sbuf2),
639                         ir->init_step*ir->delta_t);
640             }
641             else
642             {
643                 fprintf(stderr, "%s steps, %s ps.\n",
644                         gmx_step_str(ir->nsteps, sbuf), tbuf);
645             }
646         }
647         fprintf(fplog, "\n");
648     }
649
650     walltime_accounting_start(walltime_accounting);
651     wallcycle_start(wcycle, ewcRUN);
652     print_start(fplog, cr, walltime_accounting, "mdrun");
653
654     /* safest point to do file checkpointing is here.  More general point would be immediately before integrator call */
655 #ifdef GMX_FAHCORE
656     chkpt_ret = fcCheckPointParallel( cr->nodeid,
657                                       NULL, 0);
658     if (chkpt_ret == 0)
659     {
660         gmx_fatal( 3, __FILE__, __LINE__, "Checkpoint error on step %d\n", 0 );
661     }
662 #endif
663
664     debug_gmx();
665     /***********************************************************
666      *
667      *             Loop over MD steps
668      *
669      ************************************************************/
670
671     /* if rerunMD then read coordinates and velocities from input trajectory */
672     if (bRerunMD)
673     {
674         if (getenv("GMX_FORCE_UPDATE"))
675         {
676             bForceUpdate = TRUE;
677         }
678
679         rerun_fr.natoms = 0;
680         if (MASTER(cr))
681         {
682             bNotLastFrame = read_first_frame(oenv, &status,
683                                              opt2fn("-rerun", nfile, fnm),
684                                              &rerun_fr, TRX_NEED_X | TRX_READ_V);
685             if (rerun_fr.natoms != top_global->natoms)
686             {
687                 gmx_fatal(FARGS,
688                           "Number of atoms in trajectory (%d) does not match the "
689                           "run input file (%d)\n",
690                           rerun_fr.natoms, top_global->natoms);
691             }
692             if (ir->ePBC != epbcNONE)
693             {
694                 if (!rerun_fr.bBox)
695                 {
696                     gmx_fatal(FARGS, "Rerun trajectory frame step %d time %f does not contain a box, while pbc is used", rerun_fr.step, rerun_fr.time);
697                 }
698                 if (max_cutoff2(ir->ePBC, rerun_fr.box) < sqr(fr->rlistlong))
699                 {
700                     gmx_fatal(FARGS, "Rerun trajectory frame step %d time %f has too small box dimensions", rerun_fr.step, rerun_fr.time);
701                 }
702             }
703         }
704
705         if (PAR(cr))
706         {
707             rerun_parallel_comm(cr, &rerun_fr, &bNotLastFrame);
708         }
709
710         if (ir->ePBC != epbcNONE)
711         {
712             /* Set the shift vectors.
713              * Necessary here when have a static box different from the tpr box.
714              */
715             calc_shifts(rerun_fr.box, fr->shift_vec);
716         }
717     }
718
719     /* loop over MD steps or if rerunMD to end of input trajectory */
720     bFirstStep = TRUE;
721     /* Skip the first Nose-Hoover integration when we get the state from tpx */
722     bStateFromTPX    = !bStateFromCP;
723     bInitStep        = bFirstStep && (bStateFromTPX || bVV);
724     bStartingFromCpt = (Flags & MD_STARTFROMCPT) && bInitStep;
725     bSumEkinhOld     = FALSE;
726     bExchanged       = FALSE;
727     bNeedRepartition = FALSE;
728
729     init_global_signals(&gs, cr, ir, repl_ex_nst);
730
731     step     = ir->init_step;
732     step_rel = 0;
733
734     init_nlistheuristics(&nlh, bGStatEveryStep, step);
735
736     if (MULTISIM(cr) && (repl_ex_nst <= 0 ))
737     {
738         /* check how many steps are left in other sims */
739         multisim_nsteps = get_multisim_nsteps(cr, ir->nsteps);
740     }
741
742
743     /* and stop now if we should */
744     bLastStep = (bRerunMD || (ir->nsteps >= 0 && step_rel > ir->nsteps) ||
745                  ((multisim_nsteps >= 0) && (step_rel >= multisim_nsteps )));
746     while (!bLastStep || (bRerunMD && bNotLastFrame))
747     {
748
749         wallcycle_start(wcycle, ewcSTEP);
750
751         if (bRerunMD)
752         {
753             if (rerun_fr.bStep)
754             {
755                 step     = rerun_fr.step;
756                 step_rel = step - ir->init_step;
757             }
758             if (rerun_fr.bTime)
759             {
760                 t = rerun_fr.time;
761             }
762             else
763             {
764                 t = step;
765             }
766         }
767         else
768         {
769             bLastStep = (step_rel == ir->nsteps);
770             t         = t0 + step*ir->delta_t;
771         }
772
773         if (ir->efep != efepNO || ir->bSimTemp)
774         {
775             /* find and set the current lambdas.  If rerunning, we either read in a state, or a lambda value,
776                requiring different logic. */
777
778             set_current_lambdas(step, ir->fepvals, bRerunMD, &rerun_fr, state_global, state, lam0);
779             bDoDHDL      = do_per_step(step, ir->fepvals->nstdhdl);
780             bDoFEP       = (do_per_step(step, nstfep) && (ir->efep != efepNO));
781             bDoExpanded  = (do_per_step(step, ir->expandedvals->nstexpanded)
782                             && (ir->bExpanded) && (step > 0) && (!bStartingFromCpt));
783         }
784
785         bDoReplEx = ((repl_ex_nst > 0) && (step > 0) && !bLastStep &&
786                      do_per_step(step, repl_ex_nst));
787
788         if (bSimAnn)
789         {
790             update_annealing_target_temp(&(ir->opts), t);
791         }
792
793         if (bRerunMD)
794         {
795             if (!DOMAINDECOMP(cr) || MASTER(cr))
796             {
797                 for (i = 0; i < state_global->natoms; i++)
798                 {
799                     copy_rvec(rerun_fr.x[i], state_global->x[i]);
800                 }
801                 if (rerun_fr.bV)
802                 {
803                     for (i = 0; i < state_global->natoms; i++)
804                     {
805                         copy_rvec(rerun_fr.v[i], state_global->v[i]);
806                     }
807                 }
808                 else
809                 {
810                     for (i = 0; i < state_global->natoms; i++)
811                     {
812                         clear_rvec(state_global->v[i]);
813                     }
814                     if (bRerunWarnNoV)
815                     {
816                         fprintf(stderr, "\nWARNING: Some frames do not contain velocities.\n"
817                                 "         Ekin, temperature and pressure are incorrect,\n"
818                                 "         the virial will be incorrect when constraints are present.\n"
819                                 "\n");
820                         bRerunWarnNoV = FALSE;
821                     }
822                 }
823             }
824             copy_mat(rerun_fr.box, state_global->box);
825             copy_mat(state_global->box, state->box);
826
827             if (vsite && (Flags & MD_RERUN_VSITE))
828             {
829                 if (DOMAINDECOMP(cr))
830                 {
831                     gmx_fatal(FARGS, "Vsite recalculation with -rerun is not implemented with domain decomposition, use a single rank");
832                 }
833                 if (graph)
834                 {
835                     /* Following is necessary because the graph may get out of sync
836                      * with the coordinates if we only have every N'th coordinate set
837                      */
838                     mk_mshift(fplog, graph, fr->ePBC, state->box, state->x);
839                     shift_self(graph, state->box, state->x);
840                 }
841                 construct_vsites(vsite, state->x, ir->delta_t, state->v,
842                                  top->idef.iparams, top->idef.il,
843                                  fr->ePBC, fr->bMolPBC, cr, state->box);
844                 if (graph)
845                 {
846                     unshift_self(graph, state->box, state->x);
847                 }
848             }
849         }
850
851         /* Stop Center of Mass motion */
852         bStopCM = (ir->comm_mode != ecmNO && do_per_step(step, ir->nstcomm));
853
854         if (bRerunMD)
855         {
856             /* for rerun MD always do Neighbour Searching */
857             bNS      = (bFirstStep || ir->nstlist != 0);
858             bNStList = bNS;
859         }
860         else
861         {
862             /* Determine whether or not to do Neighbour Searching and LR */
863             bNStList = (ir->nstlist > 0  && step % ir->nstlist == 0);
864
865             bNS = (bFirstStep || bExchanged || bNeedRepartition || bNStList || bDoFEP ||
866                    (ir->nstlist == -1 && nlh.nabnsb > 0));
867
868             if (bNS && ir->nstlist == -1)
869             {
870                 set_nlistheuristics(&nlh, bFirstStep || bExchanged || bNeedRepartition || bDoFEP, step);
871             }
872         }
873
874         /* check whether we should stop because another simulation has
875            stopped. */
876         if (MULTISIM(cr))
877         {
878             if ( (multisim_nsteps >= 0) &&  (step_rel >= multisim_nsteps)  &&
879                  (multisim_nsteps != ir->nsteps) )
880             {
881                 if (bNS)
882                 {
883                     if (MASTER(cr))
884                     {
885                         fprintf(stderr,
886                                 "Stopping simulation %d because another one has finished\n",
887                                 cr->ms->sim);
888                     }
889                     bLastStep         = TRUE;
890                     gs.sig[eglsCHKPT] = 1;
891                 }
892             }
893         }
894
895         /* < 0 means stop at next step, > 0 means stop at next NS step */
896         if ( (gs.set[eglsSTOPCOND] < 0) ||
897              ( (gs.set[eglsSTOPCOND] > 0) && (bNStList || ir->nstlist == 0) ) )
898         {
899             bLastStep = TRUE;
900         }
901
902         /* Determine whether or not to update the Born radii if doing GB */
903         bBornRadii = bFirstStep;
904         if (ir->implicit_solvent && (step % ir->nstgbradii == 0))
905         {
906             bBornRadii = TRUE;
907         }
908
909         do_log     = do_per_step(step, ir->nstlog) || bFirstStep || bLastStep;
910         do_verbose = bVerbose &&
911             (step % stepout == 0 || bFirstStep || bLastStep);
912
913         if (bNS && !(bFirstStep && ir->bContinuation && !bRerunMD))
914         {
915             if (bRerunMD)
916             {
917                 bMasterState = TRUE;
918             }
919             else
920             {
921                 bMasterState = FALSE;
922                 /* Correct the new box if it is too skewed */
923                 if (DYNAMIC_BOX(*ir))
924                 {
925                     if (correct_box(fplog, step, state->box, graph))
926                     {
927                         bMasterState = TRUE;
928                     }
929                 }
930                 if (DOMAINDECOMP(cr) && bMasterState)
931                 {
932                     dd_collect_state(cr->dd, state, state_global);
933                 }
934             }
935
936             if (DOMAINDECOMP(cr))
937             {
938                 /* Repartition the domain decomposition */
939                 wallcycle_start(wcycle, ewcDOMDEC);
940                 dd_partition_system(fplog, step, cr,
941                                     bMasterState, nstglobalcomm,
942                                     state_global, top_global, ir,
943                                     state, &f, mdatoms, top, fr,
944                                     vsite, shellfc, constr,
945                                     nrnb, wcycle,
946                                     do_verbose && !bPMETuneRunning);
947                 wallcycle_stop(wcycle, ewcDOMDEC);
948                 /* If using an iterative integrator, reallocate space to match the decomposition */
949             }
950         }
951
952         if (MASTER(cr) && do_log)
953         {
954             print_ebin_header(fplog, step, t, state->lambda[efptFEP]); /* can we improve the information printed here? */
955         }
956
957         if (ir->efep != efepNO)
958         {
959             update_mdatoms(mdatoms, state->lambda[efptMASS]);
960         }
961
962         if ((bRerunMD && rerun_fr.bV) || bExchanged)
963         {
964
965             /* We need the kinetic energy at minus the half step for determining
966              * the full step kinetic energy and possibly for T-coupling.*/
967             /* This may not be quite working correctly yet . . . . */
968             compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
969                             wcycle, enerd, NULL, NULL, NULL, NULL, mu_tot,
970                             constr, NULL, FALSE, state->box,
971                             top_global, &bSumEkinhOld,
972                             CGLO_RERUNMD | CGLO_GSTAT | CGLO_TEMPERATURE);
973         }
974         clear_mat(force_vir);
975
976         /* We write a checkpoint at this MD step when:
977          * either at an NS step when we signalled through gs,
978          * or at the last step (but not when we do not want confout),
979          * but never at the first step or with rerun.
980          */
981         bCPT = (((gs.set[eglsCHKPT] && (bNS || ir->nstlist == 0)) ||
982                  (bLastStep && (Flags & MD_CONFOUT))) &&
983                 step > ir->init_step && !bRerunMD);
984         if (bCPT)
985         {
986             gs.set[eglsCHKPT] = 0;
987         }
988
989         /* Determine the energy and pressure:
990          * at nstcalcenergy steps and at energy output steps (set below).
991          */
992         if (EI_VV(ir->eI) && (!bInitStep))
993         {
994             /* for vv, the first half of the integration actually corresponds
995                to the previous step.  bCalcEner is only required to be evaluated on the 'next' step,
996                but the virial needs to be calculated on both the current step and the 'next' step. Future
997                reorganization may be able to get rid of one of the bCalcVir=TRUE steps. */
998
999             bCalcEner = do_per_step(step-1, ir->nstcalcenergy);
1000             bCalcVir  = bCalcEner ||
1001                 (ir->epc != epcNO && (do_per_step(step, ir->nstpcouple) || do_per_step(step-1, ir->nstpcouple)));
1002         }
1003         else
1004         {
1005             bCalcEner = do_per_step(step, ir->nstcalcenergy);
1006             bCalcVir  = bCalcEner ||
1007                 (ir->epc != epcNO && do_per_step(step, ir->nstpcouple));
1008         }
1009
1010         /* Do we need global communication ? */
1011         bGStat = (bCalcVir || bCalcEner || bStopCM ||
1012                   do_per_step(step, nstglobalcomm) || (bVV && IR_NVT_TROTTER(ir) && do_per_step(step-1, nstglobalcomm)) ||
1013                   (ir->nstlist == -1 && !bRerunMD && step >= nlh.step_nscheck));
1014
1015         do_ene = (do_per_step(step, ir->nstenergy) || bLastStep);
1016
1017         if (do_ene || do_log || bDoReplEx)
1018         {
1019             bCalcVir  = TRUE;
1020             bCalcEner = TRUE;
1021             bGStat    = TRUE;
1022         }
1023
1024         /* these CGLO_ options remain the same throughout the iteration */
1025         cglo_flags = ((bRerunMD ? CGLO_RERUNMD : 0) |
1026                       (bGStat ? CGLO_GSTAT : 0)
1027                       );
1028
1029         force_flags = (GMX_FORCE_STATECHANGED |
1030                        ((DYNAMIC_BOX(*ir) || bRerunMD) ? GMX_FORCE_DYNAMICBOX : 0) |
1031                        GMX_FORCE_ALLFORCES |
1032                        GMX_FORCE_SEPLRF |
1033                        (bCalcVir ? GMX_FORCE_VIRIAL : 0) |
1034                        (bCalcEner ? GMX_FORCE_ENERGY : 0) |
1035                        (bDoFEP ? GMX_FORCE_DHDL : 0)
1036                        );
1037
1038         if (fr->bTwinRange)
1039         {
1040             if (do_per_step(step, ir->nstcalclr))
1041             {
1042                 force_flags |= GMX_FORCE_DO_LR;
1043             }
1044         }
1045
1046         if (shellfc)
1047         {
1048             /* Now is the time to relax the shells */
1049             count = relax_shell_flexcon(fplog, cr, bVerbose, step,
1050                                         ir, bNS, force_flags,
1051                                         top,
1052                                         constr, enerd, fcd,
1053                                         state, f, force_vir, mdatoms,
1054                                         nrnb, wcycle, graph, groups,
1055                                         shellfc, fr, bBornRadii, t, mu_tot,
1056                                         &bConverged, vsite,
1057                                         mdoutf_get_fp_field(outf));
1058             tcount += count;
1059
1060             if (bConverged)
1061             {
1062                 nconverged++;
1063             }
1064         }
1065         else
1066         {
1067             /* The coordinates (x) are shifted (to get whole molecules)
1068              * in do_force.
1069              * This is parallellized as well, and does communication too.
1070              * Check comments in sim_util.c
1071              */
1072             do_force(fplog, cr, ir, step, nrnb, wcycle, top, groups,
1073                      state->box, state->x, &state->hist,
1074                      f, force_vir, mdatoms, enerd, fcd,
1075                      state->lambda, graph,
1076                      fr, vsite, mu_tot, t, mdoutf_get_fp_field(outf), ed, bBornRadii,
1077                      (bNS ? GMX_FORCE_NS : 0) | force_flags);
1078         }
1079
1080         if (bVV && !bStartingFromCpt && !bRerunMD)
1081         /*  ############### START FIRST UPDATE HALF-STEP FOR VV METHODS############### */
1082         {
1083             if (ir->eI == eiVV && bInitStep)
1084             {
1085                 /* if using velocity verlet with full time step Ekin,
1086                  * take the first half step only to compute the
1087                  * virial for the first step. From there,
1088                  * revert back to the initial coordinates
1089                  * so that the input is actually the initial step.
1090                  */
1091                 copy_rvecn(state->v, cbuf, 0, state->natoms); /* should make this better for parallelizing? */
1092             }
1093             else
1094             {
1095                 /* this is for NHC in the Ekin(t+dt/2) version of vv */
1096                 trotter_update(ir, step, ekind, enerd, state, total_vir, mdatoms, &MassQ, trotter_seq, ettTSEQ1);
1097             }
1098
1099             /* If we are using twin-range interactions where the long-range component
1100              * is only evaluated every nstcalclr>1 steps, we should do a special update
1101              * step to combine the long-range forces on these steps.
1102              * For nstcalclr=1 this is not done, since the forces would have been added
1103              * directly to the short-range forces already.
1104              *
1105              * TODO Remove various aspects of VV+twin-range in master
1106              * branch, because VV integrators did not ever support
1107              * twin-range multiple time stepping with constraints.
1108              */
1109             bUpdateDoLR = (fr->bTwinRange && do_per_step(step, ir->nstcalclr));
1110
1111             update_coords(fplog, step, ir, mdatoms, state, fr->bMolPBC,
1112                           f, bUpdateDoLR, fr->f_twin, bCalcVir ? &fr->vir_twin_constr : NULL, fcd,
1113                           ekind, M, upd, bInitStep, etrtVELOCITY1,
1114                           cr, nrnb, constr, &top->idef);
1115
1116             if (bIterativeCase && do_per_step(step-1, ir->nstpcouple) && !bInitStep)
1117             {
1118                 gmx_iterate_init(&iterate, TRUE);
1119             }
1120             /* for iterations, we save these vectors, as we will be self-consistently iterating
1121                the calculations */
1122
1123             /*#### UPDATE EXTENDED VARIABLES IN TROTTER FORMULATION */
1124
1125             /* save the state */
1126             if (iterate.bIterationActive)
1127             {
1128                 copy_coupling_state(state, bufstate, ekind, ekind_save, &(ir->opts));
1129             }
1130
1131             bFirstIterate = TRUE;
1132             while (bFirstIterate || iterate.bIterationActive)
1133             {
1134                 if (iterate.bIterationActive)
1135                 {
1136                     copy_coupling_state(bufstate, state, ekind_save, ekind, &(ir->opts));
1137                     if (bFirstIterate && bTrotter)
1138                     {
1139                         /* The first time through, we need a decent first estimate
1140                            of veta(t+dt) to compute the constraints.  Do
1141                            this by computing the box volume part of the
1142                            trotter integration at this time. Nothing else
1143                            should be changed by this routine here.  If
1144                            !(first time), we start with the previous value
1145                            of veta.  */
1146
1147                         veta_save = state->veta;
1148                         trotter_update(ir, step, ekind, enerd, state, total_vir, mdatoms, &MassQ, trotter_seq, ettTSEQ0);
1149                         vetanew     = state->veta;
1150                         state->veta = veta_save;
1151                     }
1152                 }
1153
1154                 bOK = TRUE;
1155                 if (!bRerunMD || rerun_fr.bV || bForceUpdate)     /* Why is rerun_fr.bV here?  Unclear. */
1156                 {
1157                     update_constraints(fplog, step, NULL, ir, ekind, mdatoms,
1158                                        state, fr->bMolPBC, graph, f,
1159                                        &top->idef, shake_vir,
1160                                        cr, nrnb, wcycle, upd, constr,
1161                                        TRUE, bCalcVir, vetanew);
1162
1163                     if (bCalcVir && bUpdateDoLR && ir->nstcalclr > 1)
1164                     {
1165                         /* Correct the virial for multiple time stepping */
1166                         m_sub(shake_vir, fr->vir_twin_constr, shake_vir);
1167                     }
1168
1169                     if (!bOK)
1170                     {
1171                         gmx_fatal(FARGS, "Constraint error: Shake, Lincs or Settle could not solve the constrains");
1172                     }
1173
1174                 }
1175                 else if (graph)
1176                 {
1177                     /* Need to unshift here if a do_force has been
1178                        called in the previous step */
1179                     unshift_self(graph, state->box, state->x);
1180                 }
1181
1182                 /* if VV, compute the pressure and constraints */
1183                 /* For VV2, we strictly only need this if using pressure
1184                  * control, but we really would like to have accurate pressures
1185                  * printed out.
1186                  * Think about ways around this in the future?
1187                  * For now, keep this choice in comments.
1188                  */
1189                 /*bPres = (ir->eI==eiVV || IR_NPT_TROTTER(ir)); */
1190                 /*bTemp = ((ir->eI==eiVV &&(!bInitStep)) || (ir->eI==eiVVAK && IR_NPT_TROTTER(ir)));*/
1191                 bPres = TRUE;
1192                 bTemp = ((ir->eI == eiVV && (!bInitStep)) || (ir->eI == eiVVAK));
1193                 if (bCalcEner && ir->eI == eiVVAK)  /*MRS:  7/9/2010 -- this still doesn't fix it?*/
1194                 {
1195                     bSumEkinhOld = TRUE;
1196                 }
1197                 /* for vv, the first half of the integration actually corresponds to the previous step.
1198                    So we need information from the last step in the first half of the integration */
1199                 if (bGStat || do_per_step(step-1, nstglobalcomm))
1200                 {
1201                     compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
1202                                     wcycle, enerd, force_vir, shake_vir, total_vir, pres, mu_tot,
1203                                     constr, NULL, FALSE, state->box,
1204                                     top_global, &bSumEkinhOld,
1205                                     cglo_flags
1206                                     | CGLO_ENERGY
1207                                     | (bTemp ? CGLO_TEMPERATURE : 0)
1208                                     | (bPres ? CGLO_PRESSURE : 0)
1209                                     | (bPres ? CGLO_CONSTRAINT : 0)
1210                                     | ((iterate.bIterationActive) ? CGLO_ITERATE : 0)
1211                                     | (bFirstIterate ? CGLO_FIRSTITERATE : 0)
1212                                     | CGLO_SCALEEKIN
1213                                     );
1214                     /* explanation of above:
1215                        a) We compute Ekin at the full time step
1216                        if 1) we are using the AveVel Ekin, and it's not the
1217                        initial step, or 2) if we are using AveEkin, but need the full
1218                        time step kinetic energy for the pressure (always true now, since we want accurate statistics).
1219                        b) If we are using EkinAveEkin for the kinetic energy for the temperature control, we still feed in
1220                        EkinAveVel because it's needed for the pressure */
1221                 }
1222                 /* temperature scaling and pressure scaling to produce the extended variables at t+dt */
1223                 if (!bInitStep)
1224                 {
1225                     if (bTrotter)
1226                     {
1227                         m_add(force_vir, shake_vir, total_vir); /* we need the un-dispersion corrected total vir here */
1228                         trotter_update(ir, step, ekind, enerd, state, total_vir, mdatoms, &MassQ, trotter_seq, ettTSEQ2);
1229                     }
1230                     else
1231                     {
1232                         if (bExchanged)
1233                         {
1234
1235                             /* We need the kinetic energy at minus the half step for determining
1236                              * the full step kinetic energy and possibly for T-coupling.*/
1237                             /* This may not be quite working correctly yet . . . . */
1238                             compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
1239                                             wcycle, enerd, NULL, NULL, NULL, NULL, mu_tot,
1240                                             constr, NULL, FALSE, state->box,
1241                                             top_global, &bSumEkinhOld,
1242                                             CGLO_RERUNMD | CGLO_GSTAT | CGLO_TEMPERATURE);
1243                         }
1244                     }
1245                 }
1246
1247                 if (iterate.bIterationActive &&
1248                     done_iterating(cr, fplog, step, &iterate, bFirstIterate,
1249                                    state->veta, &vetanew))
1250                 {
1251                     break;
1252                 }
1253                 bFirstIterate = FALSE;
1254             }
1255
1256             if (bTrotter && !bInitStep)
1257             {
1258                 copy_mat(shake_vir, state->svir_prev);
1259                 copy_mat(force_vir, state->fvir_prev);
1260                 if (IR_NVT_TROTTER(ir) && ir->eI == eiVV)
1261                 {
1262                     /* update temperature and kinetic energy now that step is over - this is the v(t+dt) point */
1263                     enerd->term[F_TEMP] = sum_ekin(&(ir->opts), ekind, NULL, (ir->eI == eiVV), FALSE);
1264                     enerd->term[F_EKIN] = trace(ekind->ekin);
1265                 }
1266             }
1267             /* if it's the initial step, we performed this first step just to get the constraint virial */
1268             if (bInitStep && ir->eI == eiVV)
1269             {
1270                 copy_rvecn(cbuf, state->v, 0, state->natoms);
1271             }
1272         }
1273
1274         /* MRS -- now done iterating -- compute the conserved quantity */
1275         if (bVV)
1276         {
1277             saved_conserved_quantity = compute_conserved_from_auxiliary(ir, state, &MassQ);
1278             if (ir->eI == eiVV)
1279             {
1280                 last_ekin = enerd->term[F_EKIN];
1281             }
1282             if ((ir->eDispCorr != edispcEnerPres) && (ir->eDispCorr != edispcAllEnerPres))
1283             {
1284                 saved_conserved_quantity -= enerd->term[F_DISPCORR];
1285             }
1286             /* sum up the foreign energy and dhdl terms for vv.  currently done every step so that dhdl is correct in the .edr */
1287             if (!bRerunMD)
1288             {
1289                 sum_dhdl(enerd, state->lambda, ir->fepvals);
1290             }
1291         }
1292
1293         /* ########  END FIRST UPDATE STEP  ############## */
1294         /* ########  If doing VV, we now have v(dt) ###### */
1295         if (bDoExpanded)
1296         {
1297             /* perform extended ensemble sampling in lambda - we don't
1298                actually move to the new state before outputting
1299                statistics, but if performing simulated tempering, we
1300                do update the velocities and the tau_t. */
1301
1302             lamnew = ExpandedEnsembleDynamics(fplog, ir, enerd, state, &MassQ, state->fep_state, &state->dfhist, step, state->v, mdatoms);
1303             /* history is maintained in state->dfhist, but state_global is what is sent to trajectory and log output */
1304             copy_df_history(&state_global->dfhist, &state->dfhist);
1305         }
1306
1307         /* Now we have the energies and forces corresponding to the
1308          * coordinates at time t. We must output all of this before
1309          * the update.
1310          */
1311         do_md_trajectory_writing(fplog, cr, nfile, fnm, step, step_rel, t,
1312                                  ir, state, state_global, top_global, fr,
1313                                  outf, mdebin, ekind, f, f_global,
1314                                  wcycle, &nchkpt,
1315                                  bCPT, bRerunMD, bLastStep, (Flags & MD_CONFOUT),
1316                                  bSumEkinhOld);
1317         /* Check if IMD step and do IMD communication, if bIMD is TRUE. */
1318         bIMDstep = do_IMD(ir->bIMD, step, cr, bNS, state->box, state->x, ir, t, wcycle);
1319
1320         /* kludge -- virial is lost with restart for NPT control. Must restart */
1321         if (bStartingFromCpt && bVV)
1322         {
1323             copy_mat(state->svir_prev, shake_vir);
1324             copy_mat(state->fvir_prev, force_vir);
1325         }
1326
1327         elapsed_time = walltime_accounting_get_current_elapsed_time(walltime_accounting);
1328
1329         /* Check whether everything is still allright */
1330         if (((int)gmx_get_stop_condition() > handled_stop_condition)
1331 #ifdef GMX_THREAD_MPI
1332             && MASTER(cr)
1333 #endif
1334             )
1335         {
1336             /* this is just make gs.sig compatible with the hack
1337                of sending signals around by MPI_Reduce with together with
1338                other floats */
1339             if (gmx_get_stop_condition() == gmx_stop_cond_next_ns)
1340             {
1341                 gs.sig[eglsSTOPCOND] = 1;
1342             }
1343             if (gmx_get_stop_condition() == gmx_stop_cond_next)
1344             {
1345                 gs.sig[eglsSTOPCOND] = -1;
1346             }
1347             /* < 0 means stop at next step, > 0 means stop at next NS step */
1348             if (fplog)
1349             {
1350                 fprintf(fplog,
1351                         "\n\nReceived the %s signal, stopping at the next %sstep\n\n",
1352                         gmx_get_signal_name(),
1353                         gs.sig[eglsSTOPCOND] == 1 ? "NS " : "");
1354                 fflush(fplog);
1355             }
1356             fprintf(stderr,
1357                     "\n\nReceived the %s signal, stopping at the next %sstep\n\n",
1358                     gmx_get_signal_name(),
1359                     gs.sig[eglsSTOPCOND] == 1 ? "NS " : "");
1360             fflush(stderr);
1361             handled_stop_condition = (int)gmx_get_stop_condition();
1362         }
1363         else if (MASTER(cr) && (bNS || ir->nstlist <= 0) &&
1364                  (max_hours > 0 && elapsed_time > max_hours*60.0*60.0*0.99) &&
1365                  gs.sig[eglsSTOPCOND] == 0 && gs.set[eglsSTOPCOND] == 0)
1366         {
1367             /* Signal to terminate the run */
1368             gs.sig[eglsSTOPCOND] = 1;
1369             if (fplog)
1370             {
1371                 fprintf(fplog, "\nStep %s: Run time exceeded %.3f hours, will terminate the run\n", gmx_step_str(step, sbuf), max_hours*0.99);
1372             }
1373             fprintf(stderr, "\nStep %s: Run time exceeded %.3f hours, will terminate the run\n", gmx_step_str(step, sbuf), max_hours*0.99);
1374         }
1375
1376         if (bResetCountersHalfMaxH && MASTER(cr) &&
1377             elapsed_time > max_hours*60.0*60.0*0.495)
1378         {
1379             gs.sig[eglsRESETCOUNTERS] = 1;
1380         }
1381
1382         if (ir->nstlist == -1 && !bRerunMD)
1383         {
1384             /* When bGStatEveryStep=FALSE, global_stat is only called
1385              * when we check the atom displacements, not at NS steps.
1386              * This means that also the bonded interaction count check is not
1387              * performed immediately after NS. Therefore a few MD steps could
1388              * be performed with missing interactions.
1389              * But wrong energies are never written to file,
1390              * since energies are only written after global_stat
1391              * has been called.
1392              */
1393             if (step >= nlh.step_nscheck)
1394             {
1395                 nlh.nabnsb = natoms_beyond_ns_buffer(ir, fr, &top->cgs,
1396                                                      nlh.scale_tot, state->x);
1397             }
1398             else
1399             {
1400                 /* This is not necessarily true,
1401                  * but step_nscheck is determined quite conservatively.
1402                  */
1403                 nlh.nabnsb = 0;
1404             }
1405         }
1406
1407         /* In parallel we only have to check for checkpointing in steps
1408          * where we do global communication,
1409          *  otherwise the other nodes don't know.
1410          */
1411         if (MASTER(cr) && ((bGStat || !PAR(cr)) &&
1412                            cpt_period >= 0 &&
1413                            (cpt_period == 0 ||
1414                             elapsed_time >= nchkpt*cpt_period*60.0)) &&
1415             gs.set[eglsCHKPT] == 0)
1416         {
1417             gs.sig[eglsCHKPT] = 1;
1418         }
1419
1420         /* at the start of step, randomize or scale the velocities (trotter done elsewhere) */
1421         if (EI_VV(ir->eI))
1422         {
1423             if (!bInitStep)
1424             {
1425                 update_tcouple(step, ir, state, ekind, &MassQ, mdatoms);
1426             }
1427             if (ETC_ANDERSEN(ir->etc)) /* keep this outside of update_tcouple because of the extra info required to pass */
1428             {
1429                 gmx_bool bIfRandomize;
1430                 bIfRandomize = update_randomize_velocities(ir, step, cr, mdatoms, state, upd, constr);
1431                 /* if we have constraints, we have to remove the kinetic energy parallel to the bonds */
1432                 if (constr && bIfRandomize)
1433                 {
1434                     update_constraints(fplog, step, NULL, ir, ekind, mdatoms,
1435                                        state, fr->bMolPBC, graph, f,
1436                                        &top->idef, tmp_vir,
1437                                        cr, nrnb, wcycle, upd, constr,
1438                                        TRUE, bCalcVir, vetanew);
1439                 }
1440             }
1441         }
1442
1443         if (bIterativeCase && do_per_step(step, ir->nstpcouple))
1444         {
1445             gmx_iterate_init(&iterate, TRUE);
1446             /* for iterations, we save these vectors, as we will be redoing the calculations */
1447             copy_coupling_state(state, bufstate, ekind, ekind_save, &(ir->opts));
1448         }
1449
1450         bFirstIterate = TRUE;
1451         while (bFirstIterate || iterate.bIterationActive)
1452         {
1453             /* We now restore these vectors to redo the calculation with improved extended variables */
1454             if (iterate.bIterationActive)
1455             {
1456                 copy_coupling_state(bufstate, state, ekind_save, ekind, &(ir->opts));
1457             }
1458
1459             /* We make the decision to break or not -after- the calculation of Ekin and Pressure,
1460                so scroll down for that logic */
1461
1462             /* #########   START SECOND UPDATE STEP ################# */
1463             /* Box is changed in update() when we do pressure coupling,
1464              * but we should still use the old box for energy corrections and when
1465              * writing it to the energy file, so it matches the trajectory files for
1466              * the same timestep above. Make a copy in a separate array.
1467              */
1468             copy_mat(state->box, lastbox);
1469
1470             bOK         = TRUE;
1471             dvdl_constr = 0;
1472
1473             if (!(bRerunMD && !rerun_fr.bV && !bForceUpdate))
1474             {
1475                 wallcycle_start(wcycle, ewcUPDATE);
1476                 /* UPDATE PRESSURE VARIABLES IN TROTTER FORMULATION WITH CONSTRAINTS */
1477                 if (bTrotter)
1478                 {
1479                     if (iterate.bIterationActive)
1480                     {
1481                         if (bFirstIterate)
1482                         {
1483                             scalevir = 1;
1484                         }
1485                         else
1486                         {
1487                             /* we use a new value of scalevir to converge the iterations faster */
1488                             scalevir = tracevir/trace(shake_vir);
1489                         }
1490                         msmul(shake_vir, scalevir, shake_vir);
1491                         m_add(force_vir, shake_vir, total_vir);
1492                         clear_mat(shake_vir);
1493                     }
1494                     trotter_update(ir, step, ekind, enerd, state, total_vir, mdatoms, &MassQ, trotter_seq, ettTSEQ3);
1495                     /* We can only do Berendsen coupling after we have summed
1496                      * the kinetic energy or virial. Since the happens
1497                      * in global_state after update, we should only do it at
1498                      * step % nstlist = 1 with bGStatEveryStep=FALSE.
1499                      */
1500                 }
1501                 else
1502                 {
1503                     update_tcouple(step, ir, state, ekind, &MassQ, mdatoms);
1504                     update_pcouple(fplog, step, ir, state, pcoupl_mu, M, bInitStep);
1505                 }
1506
1507                 if (bVV)
1508                 {
1509                     bUpdateDoLR = (fr->bTwinRange && do_per_step(step, ir->nstcalclr));
1510
1511                     /* velocity half-step update */
1512                     update_coords(fplog, step, ir, mdatoms, state, fr->bMolPBC, f,
1513                                   bUpdateDoLR, fr->f_twin, bCalcVir ? &fr->vir_twin_constr : NULL, fcd,
1514                                   ekind, M, upd, FALSE, etrtVELOCITY2,
1515                                   cr, nrnb, constr, &top->idef);
1516                 }
1517
1518                 /* Above, initialize just copies ekinh into ekin,
1519                  * it doesn't copy position (for VV),
1520                  * and entire integrator for MD.
1521                  */
1522
1523                 if (ir->eI == eiVVAK)
1524                 {
1525                     copy_rvecn(state->x, cbuf, 0, state->natoms);
1526                 }
1527                 bUpdateDoLR = (fr->bTwinRange && do_per_step(step, ir->nstcalclr));
1528
1529                 update_coords(fplog, step, ir, mdatoms, state, fr->bMolPBC, f,
1530                               bUpdateDoLR, fr->f_twin, bCalcVir ? &fr->vir_twin_constr : NULL, fcd,
1531                               ekind, M, upd, bInitStep, etrtPOSITION, cr, nrnb, constr, &top->idef);
1532                 wallcycle_stop(wcycle, ewcUPDATE);
1533
1534                 update_constraints(fplog, step, &dvdl_constr, ir, ekind, mdatoms, state,
1535                                    fr->bMolPBC, graph, f,
1536                                    &top->idef, shake_vir,
1537                                    cr, nrnb, wcycle, upd, constr,
1538                                    FALSE, bCalcVir, state->veta);
1539
1540                 if (bCalcVir && bUpdateDoLR && ir->nstcalclr > 1)
1541                 {
1542                     /* Correct the virial for multiple time stepping */
1543                     m_sub(shake_vir, fr->vir_twin_constr, shake_vir);
1544                 }
1545
1546                 if (ir->eI == eiVVAK)
1547                 {
1548                     /* erase F_EKIN and F_TEMP here? */
1549                     /* just compute the kinetic energy at the half step to perform a trotter step */
1550                     compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
1551                                     wcycle, enerd, force_vir, shake_vir, total_vir, pres, mu_tot,
1552                                     constr, NULL, FALSE, lastbox,
1553                                     top_global, &bSumEkinhOld,
1554                                     cglo_flags | CGLO_TEMPERATURE
1555                                     );
1556                     wallcycle_start(wcycle, ewcUPDATE);
1557                     trotter_update(ir, step, ekind, enerd, state, total_vir, mdatoms, &MassQ, trotter_seq, ettTSEQ4);
1558                     /* now we know the scaling, we can compute the positions again again */
1559                     copy_rvecn(cbuf, state->x, 0, state->natoms);
1560
1561                     bUpdateDoLR = (fr->bTwinRange && do_per_step(step, ir->nstcalclr));
1562
1563                     update_coords(fplog, step, ir, mdatoms, state, fr->bMolPBC, f,
1564                                   bUpdateDoLR, fr->f_twin, bCalcVir ? &fr->vir_twin_constr : NULL, fcd,
1565                                   ekind, M, upd, bInitStep, etrtPOSITION, cr, nrnb, constr, &top->idef);
1566                     wallcycle_stop(wcycle, ewcUPDATE);
1567
1568                     /* do we need an extra constraint here? just need to copy out of state->v to upd->xp? */
1569                     /* are the small terms in the shake_vir here due
1570                      * to numerical errors, or are they important
1571                      * physically? I'm thinking they are just errors, but not completely sure.
1572                      * For now, will call without actually constraining, constr=NULL*/
1573                     update_constraints(fplog, step, NULL, ir, ekind, mdatoms,
1574                                        state, fr->bMolPBC, graph, f,
1575                                        &top->idef, tmp_vir,
1576                                        cr, nrnb, wcycle, upd, NULL,
1577                                        FALSE, bCalcVir,
1578                                        state->veta);
1579                 }
1580                 if (!bOK)
1581                 {
1582                     gmx_fatal(FARGS, "Constraint error: Shake, Lincs or Settle could not solve the constrains");
1583                 }
1584
1585                 if (fr->bSepDVDL && fplog && do_log)
1586                 {
1587                     gmx_print_sepdvdl(fplog, "Constraint dV/dl", 0.0, dvdl_constr);
1588                 }
1589                 if (bVV)
1590                 {
1591                     /* this factor or 2 correction is necessary
1592                        because half of the constraint force is removed
1593                        in the vv step, so we have to double it.  See
1594                        the Redmine issue #1255.  It is not yet clear
1595                        if the factor of 2 is exact, or just a very
1596                        good approximation, and this will be
1597                        investigated.  The next step is to see if this
1598                        can be done adding a dhdl contribution from the
1599                        rattle step, but this is somewhat more
1600                        complicated with the current code. Will be
1601                        investigated, hopefully for 4.6.3. However,
1602                        this current solution is much better than
1603                        having it completely wrong.
1604                      */
1605                     enerd->term[F_DVDL_CONSTR] += 2*dvdl_constr;
1606                 }
1607                 else
1608                 {
1609                     enerd->term[F_DVDL_CONSTR] += dvdl_constr;
1610                 }
1611             }
1612             else if (graph)
1613             {
1614                 /* Need to unshift here */
1615                 unshift_self(graph, state->box, state->x);
1616             }
1617
1618             if (vsite != NULL)
1619             {
1620                 wallcycle_start(wcycle, ewcVSITECONSTR);
1621                 if (graph != NULL)
1622                 {
1623                     shift_self(graph, state->box, state->x);
1624                 }
1625                 construct_vsites(vsite, state->x, ir->delta_t, state->v,
1626                                  top->idef.iparams, top->idef.il,
1627                                  fr->ePBC, fr->bMolPBC, cr, state->box);
1628
1629                 if (graph != NULL)
1630                 {
1631                     unshift_self(graph, state->box, state->x);
1632                 }
1633                 wallcycle_stop(wcycle, ewcVSITECONSTR);
1634             }
1635
1636             /* ############## IF NOT VV, Calculate globals HERE, also iterate constraints  ############ */
1637             /* With Leap-Frog we can skip compute_globals at
1638              * non-communication steps, but we need to calculate
1639              * the kinetic energy one step before communication.
1640              */
1641             if (bGStat || (!EI_VV(ir->eI) && do_per_step(step+1, nstglobalcomm)))
1642             {
1643                 if (ir->nstlist == -1 && bFirstIterate)
1644                 {
1645                     gs.sig[eglsNABNSB] = nlh.nabnsb;
1646                 }
1647                 compute_globals(fplog, gstat, cr, ir, fr, ekind, state, state_global, mdatoms, nrnb, vcm,
1648                                 wcycle, enerd, force_vir, shake_vir, total_vir, pres, mu_tot,
1649                                 constr,
1650                                 bFirstIterate ? &gs : NULL,
1651                                 (step_rel % gs.nstms == 0) &&
1652                                 (multisim_nsteps < 0 || (step_rel < multisim_nsteps)),
1653                                 lastbox,
1654                                 top_global, &bSumEkinhOld,
1655                                 cglo_flags
1656                                 | (!EI_VV(ir->eI) || bRerunMD ? CGLO_ENERGY : 0)
1657                                 | (!EI_VV(ir->eI) && bStopCM ? CGLO_STOPCM : 0)
1658                                 | (!EI_VV(ir->eI) ? CGLO_TEMPERATURE : 0)
1659                                 | (!EI_VV(ir->eI) || bRerunMD ? CGLO_PRESSURE : 0)
1660                                 | (iterate.bIterationActive ? CGLO_ITERATE : 0)
1661                                 | (bFirstIterate ? CGLO_FIRSTITERATE : 0)
1662                                 | CGLO_CONSTRAINT
1663                                 );
1664                 if (ir->nstlist == -1 && bFirstIterate)
1665                 {
1666                     nlh.nabnsb         = gs.set[eglsNABNSB];
1667                     gs.set[eglsNABNSB] = 0;
1668                 }
1669             }
1670             /* bIterate is set to keep it from eliminating the old ekin kinetic energy terms */
1671             /* #############  END CALC EKIN AND PRESSURE ################# */
1672
1673             /* Note: this is OK, but there are some numerical precision issues with using the convergence of
1674                the virial that should probably be addressed eventually. state->veta has better properies,
1675                but what we actually need entering the new cycle is the new shake_vir value. Ideally, we could
1676                generate the new shake_vir, but test the veta value for convergence.  This will take some thought. */
1677
1678             if (iterate.bIterationActive &&
1679                 done_iterating(cr, fplog, step, &iterate, bFirstIterate,
1680                                trace(shake_vir), &tracevir))
1681             {
1682                 break;
1683             }
1684             bFirstIterate = FALSE;
1685         }
1686
1687         if (!bVV || bRerunMD)
1688         {
1689             /* sum up the foreign energy and dhdl terms for md and sd. currently done every step so that dhdl is correct in the .edr */
1690             sum_dhdl(enerd, state->lambda, ir->fepvals);
1691         }
1692         update_box(fplog, step, ir, mdatoms, state, f,
1693                    ir->nstlist == -1 ? &nlh.scale_tot : NULL, pcoupl_mu, nrnb, upd);
1694
1695         /* ################# END UPDATE STEP 2 ################# */
1696         /* #### We now have r(t+dt) and v(t+dt/2)  ############# */
1697
1698         /* The coordinates (x) were unshifted in update */
1699         if (!bGStat)
1700         {
1701             /* We will not sum ekinh_old,
1702              * so signal that we still have to do it.
1703              */
1704             bSumEkinhOld = TRUE;
1705         }
1706
1707         /* #########  BEGIN PREPARING EDR OUTPUT  ###########  */
1708
1709         /* use the directly determined last velocity, not actually the averaged half steps */
1710         if (bTrotter && ir->eI == eiVV)
1711         {
1712             enerd->term[F_EKIN] = last_ekin;
1713         }
1714         enerd->term[F_ETOT] = enerd->term[F_EPOT] + enerd->term[F_EKIN];
1715
1716         if (bVV)
1717         {
1718             enerd->term[F_ECONSERVED] = enerd->term[F_ETOT] + saved_conserved_quantity;
1719         }
1720         else
1721         {
1722             enerd->term[F_ECONSERVED] = enerd->term[F_ETOT] + compute_conserved_from_auxiliary(ir, state, &MassQ);
1723         }
1724         /* #########  END PREPARING EDR OUTPUT  ###########  */
1725
1726         /* Output stuff */
1727         if (MASTER(cr))
1728         {
1729             gmx_bool do_dr, do_or;
1730
1731             if (fplog && do_log && bDoExpanded)
1732             {
1733                 /* only needed if doing expanded ensemble */
1734                 PrintFreeEnergyInfoToFile(fplog, ir->fepvals, ir->expandedvals, ir->bSimTemp ? ir->simtempvals : NULL,
1735                                           &state_global->dfhist, state->fep_state, ir->nstlog, step);
1736             }
1737             if (!(bStartingFromCpt && (EI_VV(ir->eI))))
1738             {
1739                 if (bCalcEner)
1740                 {
1741                     upd_mdebin(mdebin, bDoDHDL, TRUE,
1742                                t, mdatoms->tmass, enerd, state,
1743                                ir->fepvals, ir->expandedvals, lastbox,
1744                                shake_vir, force_vir, total_vir, pres,
1745                                ekind, mu_tot, constr);
1746                 }
1747                 else
1748                 {
1749                     upd_mdebin_step(mdebin);
1750                 }
1751
1752                 do_dr  = do_per_step(step, ir->nstdisreout);
1753                 do_or  = do_per_step(step, ir->nstorireout);
1754
1755                 print_ebin(mdoutf_get_fp_ene(outf), do_ene, do_dr, do_or, do_log ? fplog : NULL,
1756                            step, t,
1757                            eprNORMAL, bCompact, mdebin, fcd, groups, &(ir->opts));
1758             }
1759             if (ir->ePull != epullNO)
1760             {
1761                 pull_print_output(ir->pull, step, t);
1762             }
1763
1764             if (do_per_step(step, ir->nstlog))
1765             {
1766                 if (fflush(fplog) != 0)
1767                 {
1768                     gmx_fatal(FARGS, "Cannot flush logfile - maybe you are out of disk space?");
1769                 }
1770             }
1771         }
1772         if (bDoExpanded)
1773         {
1774             /* Have to do this part _after_ outputting the logfile and the edr file */
1775             /* Gets written into the state at the beginning of next loop*/
1776             state->fep_state = lamnew;
1777         }
1778         /* Print the remaining wall clock time for the run */
1779         if (MULTIMASTER(cr) && (do_verbose || gmx_got_usr_signal()) && !bPMETuneRunning)
1780         {
1781             if (shellfc)
1782             {
1783                 fprintf(stderr, "\n");
1784             }
1785             print_time(stderr, walltime_accounting, step, ir, cr);
1786         }
1787
1788         /* Ion/water position swapping.
1789          * Not done in last step since trajectory writing happens before this call
1790          * in the MD loop and exchanges would be lost anyway. */
1791         bNeedRepartition = FALSE;
1792         if ((ir->eSwapCoords != eswapNO) && (step > 0) && !bLastStep &&
1793             do_per_step(step, ir->swap->nstswap))
1794         {
1795             bNeedRepartition = do_swapcoords(cr, step, t, ir, wcycle,
1796                                              bRerunMD ? rerun_fr.x   : state->x,
1797                                              bRerunMD ? rerun_fr.box : state->box,
1798                                              top_global, MASTER(cr) && bVerbose, bRerunMD);
1799
1800             if (bNeedRepartition && DOMAINDECOMP(cr))
1801             {
1802                 dd_collect_state(cr->dd, state, state_global);
1803             }
1804         }
1805
1806         /* Replica exchange */
1807         bExchanged = FALSE;
1808         if (bDoReplEx)
1809         {
1810             bExchanged = replica_exchange(fplog, cr, repl_ex,
1811                                           state_global, enerd,
1812                                           state, step, t);
1813         }
1814
1815         if ( (bExchanged || bNeedRepartition) && DOMAINDECOMP(cr) )
1816         {
1817             dd_partition_system(fplog, step, cr, TRUE, 1,
1818                                 state_global, top_global, ir,
1819                                 state, &f, mdatoms, top, fr,
1820                                 vsite, shellfc, constr,
1821                                 nrnb, wcycle, FALSE);
1822         }
1823
1824         bFirstStep       = FALSE;
1825         bInitStep        = FALSE;
1826         bStartingFromCpt = FALSE;
1827
1828         /* #######  SET VARIABLES FOR NEXT ITERATION IF THEY STILL NEED IT ###### */
1829         /* With all integrators, except VV, we need to retain the pressure
1830          * at the current step for coupling at the next step.
1831          */
1832         if ((state->flags & (1<<estPRES_PREV)) &&
1833             (bGStatEveryStep ||
1834              (ir->nstpcouple > 0 && step % ir->nstpcouple == 0)))
1835         {
1836             /* Store the pressure in t_state for pressure coupling
1837              * at the next MD step.
1838              */
1839             copy_mat(pres, state->pres_prev);
1840         }
1841
1842         /* #######  END SET VARIABLES FOR NEXT ITERATION ###### */
1843
1844         if ( (membed != NULL) && (!bLastStep) )
1845         {
1846             rescale_membed(step_rel, membed, state_global->x);
1847         }
1848
1849         if (bRerunMD)
1850         {
1851             if (MASTER(cr))
1852             {
1853                 /* read next frame from input trajectory */
1854                 bNotLastFrame = read_next_frame(oenv, status, &rerun_fr);
1855             }
1856
1857             if (PAR(cr))
1858             {
1859                 rerun_parallel_comm(cr, &rerun_fr, &bNotLastFrame);
1860             }
1861         }
1862
1863         if (!bRerunMD || !rerun_fr.bStep)
1864         {
1865             /* increase the MD step number */
1866             step++;
1867             step_rel++;
1868         }
1869
1870         cycles = wallcycle_stop(wcycle, ewcSTEP);
1871         if (DOMAINDECOMP(cr) && wcycle)
1872         {
1873             dd_cycles_add(cr->dd, cycles, ddCyclStep);
1874         }
1875
1876         if (bPMETuneRunning || bPMETuneTry)
1877         {
1878             /* PME grid + cut-off optimization with GPUs or PME nodes */
1879
1880             /* Count the total cycles over the last steps */
1881             cycles_pmes += cycles;
1882
1883             /* We can only switch cut-off at NS steps */
1884             if (step % ir->nstlist == 0)
1885             {
1886                 /* PME grid + cut-off optimization with GPUs or PME nodes */
1887                 if (bPMETuneTry)
1888                 {
1889                     if (DDMASTER(cr->dd))
1890                     {
1891                         /* PME node load is too high, start tuning */
1892                         bPMETuneRunning = (dd_pme_f_ratio(cr->dd) >= 1.05);
1893                     }
1894                     dd_bcast(cr->dd, sizeof(gmx_bool), &bPMETuneRunning);
1895
1896                     if (bPMETuneRunning || step_rel > ir->nstlist*50)
1897                     {
1898                         bPMETuneTry     = FALSE;
1899                     }
1900                 }
1901                 if (bPMETuneRunning)
1902                 {
1903                     /* init_step might not be a multiple of nstlist,
1904                      * but the first cycle is always skipped anyhow.
1905                      */
1906                     bPMETuneRunning =
1907                         pme_load_balance(pme_loadbal, cr,
1908                                          (bVerbose && MASTER(cr)) ? stderr : NULL,
1909                                          fplog,
1910                                          ir, state, cycles_pmes,
1911                                          fr->ic, fr->nbv, &fr->pmedata,
1912                                          step);
1913
1914                     /* Update constants in forcerec/inputrec to keep them in sync with fr->ic */
1915                     fr->ewaldcoeff_q  = fr->ic->ewaldcoeff_q;
1916                     fr->ewaldcoeff_lj = fr->ic->ewaldcoeff_lj;
1917                     fr->rlist         = fr->ic->rlist;
1918                     fr->rlistlong     = fr->ic->rlistlong;
1919                     fr->rcoulomb      = fr->ic->rcoulomb;
1920                     fr->rvdw          = fr->ic->rvdw;
1921
1922                     if (ir->eDispCorr != edispcNO)
1923                     {
1924                         calc_enervirdiff(NULL, ir->eDispCorr, fr);
1925                     }
1926                 }
1927                 cycles_pmes = 0;
1928             }
1929         }
1930
1931         if (step_rel == wcycle_get_reset_counters(wcycle) ||
1932             gs.set[eglsRESETCOUNTERS] != 0)
1933         {
1934             /* Reset all the counters related to performance over the run */
1935             reset_all_counters(fplog, cr, step, &step_rel, ir, wcycle, nrnb, walltime_accounting,
1936                                fr->nbv != NULL && fr->nbv->bUseGPU ? fr->nbv->cu_nbv : NULL);
1937             wcycle_set_reset_counters(wcycle, -1);
1938             if (!(cr->duty & DUTY_PME))
1939             {
1940                 /* Tell our PME node to reset its counters */
1941                 gmx_pme_send_resetcounters(cr, step);
1942             }
1943             /* Correct max_hours for the elapsed time */
1944             max_hours                -= elapsed_time/(60.0*60.0);
1945             bResetCountersHalfMaxH    = FALSE;
1946             gs.set[eglsRESETCOUNTERS] = 0;
1947         }
1948
1949         /* If bIMD is TRUE, the master updates the IMD energy record and sends positions to VMD client */
1950         IMD_prep_energies_send_positions(ir->bIMD && MASTER(cr), bIMDstep, ir->imd, enerd, step, bCalcEner, wcycle);
1951
1952     }
1953     /* End of main MD loop */
1954     debug_gmx();
1955
1956     /* Stop measuring walltime */
1957     walltime_accounting_end(walltime_accounting);
1958
1959     if (bRerunMD && MASTER(cr))
1960     {
1961         close_trj(status);
1962     }
1963
1964     if (!(cr->duty & DUTY_PME))
1965     {
1966         /* Tell the PME only node to finish */
1967         gmx_pme_send_finish(cr);
1968     }
1969
1970     if (MASTER(cr))
1971     {
1972         if (ir->nstcalcenergy > 0 && !bRerunMD)
1973         {
1974             print_ebin(mdoutf_get_fp_ene(outf), FALSE, FALSE, FALSE, fplog, step, t,
1975                        eprAVER, FALSE, mdebin, fcd, groups, &(ir->opts));
1976         }
1977     }
1978
1979     done_mdoutf(outf);
1980     debug_gmx();
1981
1982     if (ir->nstlist == -1 && nlh.nns > 0 && fplog)
1983     {
1984         fprintf(fplog, "Average neighborlist lifetime: %.1f steps, std.dev.: %.1f steps\n", nlh.s1/nlh.nns, sqrt(nlh.s2/nlh.nns - sqr(nlh.s1/nlh.nns)));
1985         fprintf(fplog, "Average number of atoms that crossed the half buffer length: %.1f\n\n", nlh.ab/nlh.nns);
1986     }
1987
1988     if (pme_loadbal != NULL)
1989     {
1990         pme_loadbal_done(pme_loadbal, cr, fplog,
1991                          fr->nbv != NULL && fr->nbv->bUseGPU);
1992     }
1993
1994     if (shellfc && fplog)
1995     {
1996         fprintf(fplog, "Fraction of iterations that converged:           %.2f %%\n",
1997                 (nconverged*100.0)/step_rel);
1998         fprintf(fplog, "Average number of force evaluations per MD step: %.2f\n\n",
1999                 tcount/step_rel);
2000     }
2001
2002     if (repl_ex_nst > 0 && MASTER(cr))
2003     {
2004         print_replica_exchange_statistics(fplog, repl_ex);
2005     }
2006
2007     /* IMD cleanup, if bIMD is TRUE. */
2008     IMD_finalize(ir->bIMD, ir->imd);
2009
2010     walltime_accounting_set_nsteps_done(walltime_accounting, step_rel);
2011
2012     return 0;
2013 }