diff --git a/patches/gromacs-5.0.diff/src/gromacs/mdlib/minimize.c b/patches/gromacs-5.0.diff/src/gromacs/mdlib/minimize.c index 1c1d0b00b65950f501f59544af8de53dc91c85a8..736f9232605b2ab31e655a3406b373eb352a426f 100644 --- a/patches/gromacs-5.0.diff/src/gromacs/mdlib/minimize.c +++ b/patches/gromacs-5.0.diff/src/gromacs/mdlib/minimize.c @@ -795,6 +795,7 @@ static void evaluate_energy(FILE *fplog, t_commrec *cr, */ /* PLUMED */ int plumedNeedsEnergy=0; + real plumed_vir[3][3]; if(plumedswitch){ long int lstep=count; (*plumedcmd)(plumedmain,"setStepLong",&count); (*plumedcmd) (plumedmain,"setPositions",&ems->s.x[0][0]); @@ -803,8 +804,9 @@ static void evaluate_energy(FILE *fplog, t_commrec *cr, (*plumedcmd) (plumedmain,"setBox",&ems->s.box[0][0]); (*plumedcmd) (plumedmain,"prepareCalc",NULL); (*plumedcmd) (plumedmain,"setForces",&ems->f[0][0]); - (*plumedcmd) (plumedmain,"setVirial",&force_vir[0][0]); (*plumedcmd) (plumedmain,"isEnergyNeeded",&plumedNeedsEnergy); + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) plumed_vir[i][j]=0.0; + (*plumedcmd) (plumedmain,"setVirial",&plumed_vir[0][0]); } /* END PLUMED */ do_force(fplog, cr, inputrec, @@ -818,8 +820,12 @@ static void evaluate_energy(FILE *fplog, t_commrec *cr, /* PLUMED */ if(plumedswitch){ if(plumedNeedsEnergy) { + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) plumed_vir[i][j]=force_vir[i][j]*2.0; (*plumedcmd) (plumedmain,"setEnergy",&enerd->term[F_EPOT]); (*plumedcmd) (plumedmain,"performCalc",NULL); + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) force_vir[i][j]=plumed_vir[i][j]*0.5; + } else { + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) force_vir[i][j]+=plumed_vir[i][j]*0.5; } } /* END PLUMED */ diff --git a/patches/gromacs-5.0.diff/src/programs/mdrun/md.c b/patches/gromacs-5.0.diff/src/programs/mdrun/md.c index 481aec4c657a901d6a30b51a60c34a8ed4d143af..7504b5f3b66435ef27313cf5b52bbc136115bf27 100644 --- a/patches/gromacs-5.0.diff/src/programs/mdrun/md.c +++ b/patches/gromacs-5.0.diff/src/programs/mdrun/md.c @@ -233,6 +233,7 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], /* PLUMED */ int plumedNeedsEnergy=0; int plumedWantsToStop=0; + real plumed_vir[3][3]; /* END PLUMED */ #ifdef GMX_FAHCORE @@ -1150,8 +1151,9 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], plumed_cmd(plumedmain,"prepareCalc",NULL); plumed_cmd(plumedmain,"setStopFlag",&plumedWantsToStop); plumed_cmd(plumedmain,"setForces",&f[0][0]); - plumed_cmd(plumedmain,"setVirial",&force_vir[0][0]); plumed_cmd(plumedmain,"isEnergyNeeded",&plumedNeedsEnergy); + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) plumed_vir[i][j]=0.0; + plumed_cmd(plumedmain,"setVirial",&plumed_vir[0][0]); } /* END PLUMED */ do_force(fplog, cr, ir, step, nrnb, wcycle, top, groups, @@ -1163,8 +1165,12 @@ double do_md(FILE *fplog, t_commrec *cr, int nfile, const t_filenm fnm[], /* PLUMED */ if(plumedswitch){ if(plumedNeedsEnergy){ + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) plumed_vir[i][j]=force_vir[i][j]*2.0; plumed_cmd(plumedmain,"setEnergy",&enerd->term[F_EPOT]); plumed_cmd(plumedmain,"performCalc",NULL); + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) force_vir[i][j]=plumed_vir[i][j]*0.5; + } else { + for(unsigned i=0;i<3;i++) for(unsigned j=0;j<3;j++) force_vir[i][j]+=plumed_vir[i][j]*0.5; } if ((repl_ex_nst > 0) && (step > 0) && !bLastStep && do_per_step(step,repl_ex_nst)) plumed_cmd(plumedmain,"GREX savePositions",NULL);