On 29/10/2010 10:14 AM, Sai Pooja wrote:
Hi,
I want to modify the contribution to Interaction energy of different groups - say I have groups A and B and I want the energy to be scaled as E_AA + 0.1E_AB + 0.5*E_BB. Interaction parameters of each of these groups are set by a forcefield Now after multiple correspondence on the gromacs list I have concluded that there are 3 ways of doing this: 1. Using tables - for this I would have to list non-bonded parameters for all atoms such that the combination rule and the table-potential is used. For the table for BB interaction, scale the Coloumb and VdW interactions in the tables by a factor of 0.5 and so on...

Sure. I think that for the above example, you'd need only 2 (maybe 3) table files.

However, since tables would have to be supplied for pairs too (tablep), it may not be accurate to supply 6-12 tables with coulomb potential for these pairs. I am using CHARMM and the 1998 paper on CHARMM says that in some specific cases the 1-4 interactions many be scaled which makes me doubt this approach.

Yeah, something extra will be required here. Obviously, test and develop on a small toy system that you can compute by hand in a spreadsheet.
2. Forcefield parameters - By defining scaled [nonbonded_params] for all relevant atoms. This will change the VdW interactions, but not sure about the Coulomb interactions.

The Coulomb interactions are based on atomic charges, and there's no ready way to scale them differently for different interactions.

3. Modifying gromacs - by passing a parameter lambda to gromacs which scales the force/potential by a factor lambda when gromacs calculates force/potential. For implementing option 3, which programs in the gromacs package would be the bes tstarting points for editing the energy contributions of different groups/atoms?

I can think of two ways of approaching this. Efficiency requires that you use the energy group mechanism for your respective groups. Then you need to identify the generated non-bonded lists and do the necessary book-keeping to allocate scale factors to them. Then, either

a) pass the scale factor all the way into the non-bonded kernels and use them suitably there, or b) create a copy of the force and energy arrays for each required scale factor, pass matching arrays into the appropriate kernels, and do the scaling on the respective arrays after all kernel contributions have been made, and then add the corresponding array elements.

Either way, you'll need a sound understanding of the code in src/gmxlib/nonbonded.c (and the kernels it calls, and how its data structures get created in the neighbour-searching). Make a test system, like a dipeptide in a small box of water, with energy groups, and use a debugger to see how things work.

a) is the easiest to develop. The kernels already have a "user data" pointer you can use, and it would be a fairly simple matter to adapt the generic C kernels to do your scaling. You will give up a lot of performance, however, unless you are prepared to adapt the hardware-optimized kernels similarly (not advised).

b) will use somewhat more memory, have a smaller code-change footprint, keep essentially the same performance

As a more general question, how does one run a generalized Hamiltonian REM on gromacs?

You can't. GROMACS REMD requires a normal MD Hamiltonian supplied in a .tpr.

Mark
--
gmx-users mailing list    gmx-users@gromacs.org
http://lists.gromacs.org/mailman/listinfo/gmx-users
Please search the archive at 
http://www.gromacs.org/Support/Mailing_Lists/Search before posting!
Please don't post (un)subscribe requests to the list. Use the www interface or send it to gmx-users-requ...@gromacs.org.
Can't post? Read http://www.gromacs.org/Support/Mailing_Lists

Reply via email to