diff --git a/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp b/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp index dade566c5e3836dc572000709101488bf1cc4ffa..7af01c2a57fc05aea99fb6c7a5bfa41b91773283 100644 --- a/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp +++ b/patches/gromacs-5.1.2.diff/src/programs/mdrun/md.cpp @@ -1063,10 +1063,10 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], repl=replica_exchange_get_repl(repl_ex); nrepl=replica_exchange_get_nrepl(repl_ex); } - if (PAR(cr)) { - if (DOMAINDECOMP(cr)) - dd_collect_state(cr->dd,state,state_global); - } + if (DOMAINDECOMP(cr)) + dd_collect_state(cr->dd,state,state_global); + else + copy_state_nonatomdata(state, state_global); if(MASTER(cr)){ if(repl%2==step/repl_ex_nst%2){ if(repl-1>=0) exchange_state(cr->ms,repl-1,state_global); @@ -1074,6 +1074,8 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], if(repl+1<nrepl) exchange_state(cr->ms,repl+1,state_global); } } + if (!DOMAINDECOMP(cr)) + copy_state_nonatomdata(state_global, state); if(PAR(cr)){ if (DOMAINDECOMP(cr)) { dd_partition_system(fplog,step,cr,TRUE,1, @@ -1099,10 +1101,10 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], sfree(hrex_enerd); /* exchange back */ - if (PAR(cr)) { - if (DOMAINDECOMP(cr)) - dd_collect_state(cr->dd,state,state_global); - } + if (DOMAINDECOMP(cr)) + dd_collect_state(cr->dd,state,state_global); + else + copy_state_nonatomdata(state, state_global); if(MASTER(cr)){ if(repl%2==step/repl_ex_nst%2){ if(repl-1>=0) exchange_state(cr->ms,repl-1,state_global); @@ -1110,6 +1112,8 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], if(repl+1<nrepl) exchange_state(cr->ms,repl+1,state_global); } } + if (!DOMAINDECOMP(cr)) + copy_state_nonatomdata(state_global, state); if(PAR(cr)){ if (DOMAINDECOMP(cr)) { dd_partition_system(fplog,step,cr,TRUE,1, diff --git a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp index b42f551376e58d39e1fec537c7336abe4b62b192..63eac8236921fb0dbc752d02315f01aea7a09acf 100644 --- a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp +++ b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.cpp @@ -651,7 +651,7 @@ static void copy_ints(const int *s, int *d, int n) #define scopy_reals(v, n) copy_reals(state->v, state_local->v, n); #define scopy_ints(v, n) copy_ints(state->v, state_local->v, n); -static void copy_state_nonatomdata(t_state *state, t_state *state_local) +void copy_state_nonatomdata(t_state *state, t_state *state_local) { /* When t_state changes, this code should be updated. */ int ngtc, nnhpres; diff --git a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h index aa51f07b440ed436ebc85454d15d0d4b459f8d28..29d7bfa4954834b9b02dcaed60e0e4f496e3ff67 100644 --- a/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h +++ b/patches/gromacs-5.1.2.diff/src/programs/mdrun/repl_ex.h @@ -76,6 +76,7 @@ extern int replica_exchange_get_repl(const gmx_repl_ex_t re); extern int replica_exchange_get_nrepl(const gmx_repl_ex_t re); extern void pd_collect_state(const t_commrec *cr, t_state *state); extern void exchange_state(const gmx_multisim_t *ms, int b, t_state *state); +extern void copy_state_nonatomdata(t_state *state, t_state *state_local); #ifdef __cplusplus }