[gmx-developers] Interfacing with gromacs to get potential energies/ forces

Augustin Chevallier augustin.chevallier at inria.fr
Mon Nov 21 15:29:54 CET 2016


mdrun -rerun already does this. If you can cast the implementation of your algorithm so that you have many sets of positions to be evaluated, then you should start by implementing that with rerun, not with writing code that you then have to prove still works correctly. Calling the API directly sounds like an optimization you should do only if you need it. You anyway want to be able to do it via rerun to be a way of proving you've done it correctly. 

Using GROMACS because it's really fast, but then hacking away all the parallelism setup that makes it fast would be a bit inconsistent, and any performance advantage of GROMACS doesn't really matter unless you're already planning at least millions of potential evaluations. 

I'm trying to implement a stochastic algorithm, so I'm generating new configurations on the fly, so I cannot (sadly) use the rerun functionality. To be honest I don't have that many choices. I either re-implement gromacs force fields to get the potential energies, which would take a lot of time and testing AND will most likely be much slower (and I'm not talking about MPI here, just plain SIMD) or I try to use gromacs directly. 

Thanks for your answers! So it seems that I have something which works :) (it's in practice almost like replacing the update_coords with something custom). 

Cheers, 
Augustin 
----- Mail original -----

> De: "Mark Abraham" <mark.j.abraham at gmail.com>
> À: gmx-developers at gromacs.org
> Envoyé: Lundi 21 Novembre 2016 15:18:22
> Objet: Re: [gmx-developers] Interfacing with gromacs to get potential
> energies/ forces

> Hi,

> On Mon, Nov 21, 2016 at 1:52 PM Augustin Chevallier <
> augustin.chevallier at inria.fr > wrote:

> > Thank you for both of your answers!
> 

> > I've tried the code from David van der Spoel, however it crashes. Thus I
> > have
> > made my own (really messy) wrapper by taking the code from mdrun and
> > modifying it.
> 
> > It seems to work however I would like to confirm a few things.
> 
> > 1/ the energy computed during do_forces
> 

> If you pass GMX_FORCE_ENERGY in the flags

> > 2/ after calling do_forces, enerd->term[F_EPOT] gives the potential energy
> > (without kinetic energy)
> 

> Yes

> > 3/ the units in enerd->term[F_EPOT] is kJ/mol
> 
> > Are these 3 points true?
> 

> Yes

> > >mdrun reads all of that from the .tpr and looks at your hardware and
> > >command-line options and sets up all of that complexity. I don't think you
> > >should want to try to simplify that - you need to satisfy >the
> > >prerequisites of do_force() and those were never designed for this use.
> > >The
> > >important questions are "what will vary between evaluations?" and "why is
> > >GROMACS the right tool for the job?"
> 

> > well the positions of the atoms will vary. I need gromacs because it
> > implements the most common force fields and is really fast.
> 

> mdrun -rerun already does this. If you can cast the implementation of your
> algorithm so that you have many sets of positions to be evaluated, then you
> should start by implementing that with rerun, not with writing code that you
> then have to prove still works correctly. Calling the API directly sounds
> like an optimization you should do only if you need it. You anyway want to
> be able to do it via rerun to be a way of proving you've done it correctly.

> Using GROMACS because it's really fast, but then hacking away all the
> parallelism setup that makes it fast would be a bit inconsistent, and any
> performance advantage of GROMACS doesn't really matter unless you're already
> planning at least millions of potential evaluations.

> Mark

> > >Yes. We are in the process of designing an API that would be usable for
> > >what
> > >you want, but that's years away still.
> 
> > That's good to hear, just sad that it's still years away ;)
> 

> > Thanks!
> 
> > Augustin
> 

> > ----- Mail original -----
> 
> > > De: "David van der Spoel" < spoel at xray.bmc.uu.se >
> 
> > > À: "gromacs org gmx-developers" <
> > > gromacs.org_gmx-developers at maillist.sys.kth.se >
> 
> > > Envoyé: Samedi 19 Novembre 2016 16:16:34
> 
> > > Objet: Re: [gmx-developers] Interfacing with gromacs to get potential
> > > energies/ forces
> 
> > >
> 
> > > On 19/11/16 14:48, Augustin Chevallier wrote:
> 
> > > > Thanks! This code is what I was looking for.
> 
> > > >
> 
> > > > As for the problem you mentioned, why will this code change? Is it
> > > > because
> 
> > > > the code itself isn't mature or because gromacs 'core' code will
> > > > change,
> 
> > > > making this code obsolete? Also about the license, is there any kind of
> 
> > > > restriction on the usage of this code?
> 
> > > >
> 
> > > The gromacs core is planned to change, meaning routines called by this
> 
> > > code will disappear (or be replaced by others in a non-trivial manner).
> 
> > > The specialized code here is also not mature and up-to-date with the
> 
> > > latest gromacs.
> 
> > >
> 
> > > The code is under the same LGPL license as the rest of gromacs.
> 
> > >
> 
> > > > Augustin
> 
> > > >
> 
> > > > ----- Mail original -----
> 
> > > >> De: "David van der Spoel" < spoel at xray.bmc.uu.se >
> 
> > > >> À: gmx-developers at gromacs.org
> 
> > > >> Envoyé: Vendredi 18 Novembre 2016 16:11:22
> 
> > > >> Objet: Re: [gmx-developers] Interfacing with gromacs to get potential
> 
> > > >> energies/ forces
> 
> > > >>
> 
> > > >> On 18/11/16 11:43, Augustin Chevallier wrote:
> 
> > > >>> Hello,
> 
> > > >>>
> 
> > > >>> first, I apologize if this is not the right mailing list, however it
> 
> > > >>> seemed more appropriate than user mailing list.
> 
> > > >>>
> 
> > > >>> I would like to get the potential energy computed by gromacs without
> 
> > > >>> having to use the command line and the overhead of writing/reading
> > > >>> the
> 
> > > >>> result in files. I had a look at the code and indeed it seems
> > > >>> possible
> 
> > > >>> using mdlib, however I'm a bit overwhelmed by the complexity of the
> > > >>> code.
> 
> > > >>>
> 
> > > >>> From what I understood, I should call the function do_forces(),
> > > >>> however
> 
> > > >>> it has many parameters, and after looking at do_md() ,mdrunner() and
> 
> > > >>> main() it seems there is quite a lot of things to set up before
> > > >>> calling
> 
> > > >>> that function.
> 
> > > >>>
> 
> > > >>> So here are some more precise questions:
> 
> > > >>> *which initialization are required? should I just copy past some
> > > >>> parts
> 
> > > >>> of mdrunner for that?
> 
> > > >>> *how do I load a gromacs topology file?
> 
> > > >>> *I guess I also need a forcerec, how do I create on too?
> 
> > > >>> *If I want to modify the atoms positions, can I do it in mdAtoms
> 
> > > >>> directly?
> 
> > > >>>
> 
> > > >>> I know these questions are rather vague, so if you could just point
> > > >>> to
> 
> > > >>> which part of md_runner() and do_md() I should look at, it would
> > > >>> greatly
> 
> > > >>> help!
> 
> > > >>>
> 
> > > >> If you check out the branch qmmm you will find there is an interface
> > > >> to
> 
> > > >> gromacs in src/gromacs/mmslave.h. You can call a few functions to
> > > >> change
> 
> > > >> coordinates and charges and then calculate energy and forces. If you
> 
> > > >> link your code to gromacs and call these routines it should work.
> 
> > > >>
> 
> > > >> The problem with this code is that it will most likely disappear or
> 
> > > >> change a lot before being taken up in regular gromacs.
> 
> > > >>
> 
> > > >>
> 
> > > >>
> 
> > > >>> Thanks!
> 
> > > >>> Augustin Chevallier
> 
> > > >>>
> 
> > > >>>
> 
> > > >>
> 
> > > >>
> 
> > > >> --
> 
> > > >> David van der Spoel, Ph.D., Professor of Biology
> 
> > > >> Dept. of Cell & Molec. Biol., Uppsala University.
> 
> > > >> Box 596, 75124 Uppsala, Sweden. Phone: +46184714205 .
> 
> > > >> spoel at xray.bmc.uu.se http://folding.bmc.uu.se
> 
> > > >> --
> 
> > > >> Gromacs Developers mailing list
> 
> > > >>
> 
> > > >> * Please search the archive at
> 
> > > >> http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List
> > > >> before
> 
> > > >> posting!
> 
> > > >>
> 
> > > >> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> 
> > > >>
> 
> > > >> * For (un)subscribe requests visit
> 
> > > >> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers
> > > >> or
> 
> > > >> send a mail to gmx-developers-request at gromacs.org .
> 
> > > >>
> 
> > >
> 
> > >
> 
> > > --
> 
> > > David van der Spoel, Ph.D., Professor of Biology
> 
> > > Dept. of Cell & Molec. Biol., Uppsala University.
> 
> > > Box 596, 75124 Uppsala, Sweden. Phone: +46184714205 .
> 
> > > spoel at xray.bmc.uu.se http://folding.bmc.uu.se
> 
> > > --
> 
> > > Gromacs Developers mailing list
> 
> > >
> 
> > > * Please search the archive at
> 
> > > http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List before
> 
> > > posting!
> 
> > >
> 
> > > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> 
> > >
> 
> > > * For (un)subscribe requests visit
> 
> > > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers
> > > or
> 
> > > send a mail to gmx-developers-request at gromacs.org .
> 
> > > Hi,
> 

> > >On Fri, Nov 18, 2016 at 11:43 AM Augustin Chevallier <
> > >augustin.chevallier at inria.fr > wrote:
> 
> > >
> 
> > > Hello
> 

> > first, I apologize if this is not the right mailing list, however it seemed
> > more appropriate than user mailing list.
> 

> > Sure, this is appropriate discussion here.
> 

> > I would like to get the potential energy computed by gromacs without having
> > to use the command line and the overhead of writing/reading the result in
> > files.
> 

> > If you don't need to change the model physics between computations of PE,
> > then you should still consider mdrun -rerun, per
> > http://www.gromacs.org/Documentation/How-tos/Single-Point_Energy .
> 

> > I had a look at the code and indeed it seems possible using mdlib, however
> > I'm a bit overwhelmed by the complexity of the code.
> 

> > Yes. We are in the process of designing an API that would be usable for
> > what
> > you want, but that's years away still.
> 

> > From what I understood, I should call the function do_forces(), however it
> > has many parameters, and after looking at do_md() ,mdrunner() and main() it
> > seems there is quite a lot of things to set up before calling that
> > function.
> 

> > So here are some more precise questions:
> 
> > *which initialization are required? should I just copy past some parts of
> > mdrunner for that?
> 
> > *how do I load a gromacs topology file?
> 
> > *I guess I also need a forcerec, how do I create on too?
> 

> > mdrun reads all of that from the .tpr and looks at your hardware and
> > command-line options and sets up all of that complexity. I don't think you
> > should want to try to simplify that - you need to satisfy the prerequisites
> > of do_force() and those were never designed for this use. The important
> > questions are "what will vary between evaluations?" and "why is GROMACS the
> > right tool for the job?"
> 

> > *If I want to modify the atoms positions, can I do it in mdAtoms directly?
> 

> > No, they live in a variable of type t_state.
> 

> > I know these questions are rather vague, so if you could just point to
> > which
> > part of md_runner() and do_md() I should look at, it would greatly help!
> 

> > First let's see whether you can avoid it :-)
> 

> > Mark
> 

> > Thanks!
> 
> > Augustin Chevallier
> 
> > --
> 
> > Gromacs Developers mailing list
> 

> > * Please search the archive at
> > http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List before
> > posting!
> 

> > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> 

> > * For (un)subscribe requests visit
> 
> > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers or
> > send a mail to gmx-developers-request at gromacs.org .
> 

> > --
> 
> > Gromacs Developers mailing list
> 

> > * Please search the archive at
> > http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List before
> > posting!
> 

> > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> 

> > * For (un)subscribe requests visit
> 
> > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers or
> > send a mail to gmx-developers-request at gromacs.org .
> 

> --
> Gromacs Developers mailing list

> * Please search the archive at
> http://www.gromacs.org/Support/Mailing_Lists/GMX-developers_List before
> posting!

> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists

> * For (un)subscribe requests visit
> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-developers or
> send a mail to gmx-developers-request at gromacs.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-developers/attachments/20161121/5270df1f/attachment-0001.html>


More information about the gromacs.org_gmx-developers mailing list