Dear Jianguo, XAvier, and Dallas:

Thank you for your great suggestions. I am making progress, but still have not 
found an efficient way
to do this. I don;t have any particular questions in this post, but wanted to 
provide an update and
also to see if anybody has any additional ideas based on what I have tried.

Jianguo: I have successfully interfaced plumed with gromacs and was able to do 
what I wanted. 
My initial (naive) approach is inefficient (speed reduced from 26 ns/day to 1.7 
ns.day) although I 
am getting some help from the plumed developers to find a more efficient 
approach.

XAvier: I was unable to find a repulsive potential that I could apply to water 
molecules, excepting 
simply increasing the LJ repulsion. I suspect that this approach is not going 
to work for me since the 
lipid-water interface is rugged and lipid tails sometimes approach the surface 
and, therefore, 
a LJ repulsion approach might end up creating large vaccuums at the interfacial 
region.

Dallas and Jianguo: This might work. I would need to find a way to anchor 
virtual atoms at the bilayer center.
Unfortunately, other parts of my approach make it undesirable to have an r^12 
(LJ) or exponential (Buckingham)
repulsion. Specifically, I'd like to be able to not only keep water molecules 
out of the bilayer core
but also force them out if they are already inside, and these rapidly rising 
potentials will likely lead
to expolding systems if water molecules are already deeply burried in the 
bilayer core. However, there might 
be a way forward with the free energy code using some type of soft core 
potential on the LJ via the 
free energy code. I'm going to try this and will report back.

Also, I did get gromacs to do this with the following 2 code changes in 
src/mdlib/pull.c:

(i) in static void do_pull_pot(), immediately after calling 
get_pullgrp_distance(), I
added the following code
        if(g>1&&dev[0]>0.0){
                dev[0]=0.0;
        }

When used with ePull == epullUMBRELLA and pull->eGeom == epullgDIST, this 
ensures that the pull force only
contributes when the displacement is smaller than the reference distance, but 
is not applied when
the displacement is larger than the reference distance.

(ii) I removed the following code from get_pullgrps_dr():

    if (max_dist2 >= 0 && dr2 > 0.98*0.98*max_dist2)
    {
        gmx_fatal(FARGS, "Distance of pull group %d (%f nm) is larger than 0.49 
times the box size (%f)", g, sqrt(dr2), sqrt(max_dist2));
    }

Normally, I suppose that this code is there so that atoms are not being pulled 
in oscillating directions when
they are 1/2 box dimension away from the reference position (although I am not 
exactly sure why that would
be an error). Nevertheless, this error is not necessary in my case because I 
have also removed any force when atoms are farther away than the reference 
distance (in modificaion i, above).

After making these modification, I then added about 10,000 separate pull 
groups, one for each water oxygen 
atom, each of which keeps that water molecule out of the bilayer core along Z.

The only problem with this approach is that it is really inefficient: with 16 
threads over 8 cores, I get 
26 ns/day without the 10,000 pull groups and only 4 ns/day with the pull 
groups, probably because so much 
information is being passed around between threads for the water molecules that 
are really far away from
the bilayer center.

Thank you,
Chris.

--
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