diff --git a/patches/gromacs-4.6.3.config b/patches/gromacs-4.6.3.config index 6346748e72bdbd219da14fcd9a05d883ad7c9b5a..57f60f95b1770604898bb498b69c9734ae0209ed 100644 --- a/patches/gromacs-4.6.3.config +++ b/patches/gromacs-4.6.3.config @@ -14,8 +14,7 @@ Implementation described in: To use it: * Prepare separate topologies (topol0.tpr, topol1.tpr, etc) -* Set environment variable PLUMED_HREX (export PLUMED_HREX=1) -* Run a normal replica exchange with gromacs +* Run a normal replica exchange with gromacs adding the flag "-hrex" on the command line Suggested checks: * Try with several identical force fields and different seed/starting point diff --git a/patches/gromacs-4.6.3.diff/src/kernel/md.c b/patches/gromacs-4.6.3.diff/src/kernel/md.c index ec5ffd2894102738520455ae2c85b65df937f04e..67b79a9d326ecb94172793ab4175b9e64af062be 100644 --- a/patches/gromacs-4.6.3.diff/src/kernel/md.c +++ b/patches/gromacs-4.6.3.diff/src/kernel/md.c @@ -99,6 +99,11 @@ extern int plumedswitch; extern plumed plumedmain; /* END PLUMED */ +/* PLUMED HREX */ +extern int plumed_hrex; +/* END PLUMED HREX */ + + #ifdef GMX_LIB_MPI #include <mpi.h> #endif @@ -1139,9 +1144,9 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], GMX_MPE_LOG(ev_timestep2); + gmx_bool bHREX; - bHREX= repl_ex_nst > 0 && (step>0) && !bLastStep && do_per_step(step,repl_ex_nst) - && getenv("PLUMED_HREX"); + bHREX= repl_ex_nst > 0 && (step>0) && !bLastStep && do_per_step(step,repl_ex_nst) && plumed_hrex; /* Hamiltonian Replica Exchange */ if(plumedswitch) if(bHREX){ diff --git a/patches/gromacs-4.6.3.diff/src/kernel/mdrun.c b/patches/gromacs-4.6.3.diff/src/kernel/mdrun.c index ba301007d08d9dcc0eeef4d656fb31b686e40b46..9edfb4861166ace3b0546a1bbd23116b58b873b2 100644 --- a/patches/gromacs-4.6.3.diff/src/kernel/mdrun.c +++ b/patches/gromacs-4.6.3.diff/src/kernel/mdrun.c @@ -64,6 +64,11 @@ int plumedswitch; plumed plumedmain; /* END PLUMED */ +/* PLUMED HREX */ +int plumed_hrex; +/* END PLUMED HREX */ + + int cmain(int argc, char *argv[]) { const char *desc[] = { @@ -540,6 +545,8 @@ int cmain(int argc, char *argv[]) "Number of random exchanges to carry out each exchange interval (N^3 is one suggestion). -nex zero or not specified gives neighbor replica exchange." }, { "-reseed", FALSE, etINT, {&repl_ex_seed}, "Seed for replica exchange, -1 is generate a seed" }, + { "-hrex", FALSE, etBOOL, {&plumed_hrex}, + "Enable hamiltonian replica exchange" }, { "-rerunvsite", FALSE, etBOOL, {&bRerunVSite}, "HIDDENRecalculate virtual site coordinates with [TT]-rerun[tt]" }, { "-ionize", FALSE, etBOOL, {&bIonize}, @@ -764,6 +771,15 @@ int cmain(int argc, char *argv[]) plumed_cmd(plumedmain,"setPlumedDat",ftp2fn(efDAT,NFILE,fnm)); plumedswitch=1; } + /* PLUMED HREX*/ + if(getenv("PLUMED_HREX")) plumed_hrex=1; + if(plumed_hrex){ + if(!plumedswitch) gmx_fatal(FARGS,"-hrex (or PLUMED_HREX) requires -plumed"); + if(repl_ex_nst==0) gmx_fatal(FARGS,"-hrex (or PLUMED_HREX) replica exchange"); + if(repl_ex_nex!=0) gmx_fatal(FARGS,"-hrex (or PLUMED_HREX) not compatible with -nex"); + } + /* END PLUMED HREX */ + /* END PLUMED */ rc = mdrunner(&hw_opt, fplog, cr, NFILE, fnm, oenv, bVerbose, bCompact, diff --git a/patches/gromacs-4.6.3.diff/src/kernel/repl_ex.c b/patches/gromacs-4.6.3.diff/src/kernel/repl_ex.c index 2f5f9915908aac5785045757800d1bd75e449201..e3a1078b68b15b215113779dcc8a469ae687133a 100644 --- a/patches/gromacs-4.6.3.diff/src/kernel/repl_ex.c +++ b/patches/gromacs-4.6.3.diff/src/kernel/repl_ex.c @@ -59,6 +59,10 @@ extern int plumedswitch; extern plumed plumedmain; /* END PLUMED */ +/* PLUMED HREX */ +extern int plumed_hrex; +/* END PLUMED HREX */ + #define PROBABILITYCUTOFF 100 /* we don't bother evaluating if events are more rare than exp(-100) = 3.7x10^-44 */ @@ -889,7 +893,7 @@ static real calc_delta(FILE *fplog, gmx_bool bPrint, struct gmx_repl_ex *re, int /* PLUMED */ /* this is necessary because with plumed HREX the energy contribution is already taken into account */ - if(getenv("PLUMED_HREX")) delta=0.0; + if(plumed_hrex) delta=0.0; /* END PLUMED */ if (re->bNPT) @@ -1003,6 +1007,8 @@ test_for_replica_exchange(FILE *fplog, int plumed_test_exchange_pattern=0; /* END PLUMED */ + if(plumed_test_exchange_pattern && plumed_hrex) gmx_fatal(FARGS,"hrex not compatible with ad hoc exchange patterns"); + if (bMultiEx) { /* multiple random switch exchange */