# [gmx-users] Setting up an infinitely hard wall

Berk Hess gmx3 at hotmail.com
Thu Nov 5 09:53:40 CET 2009

```Hi,

>From the code below it seems you have mirrored only the velocities.
But if the wall is at w and your particle is at z<w then you also need to do z -= 2*(z-w)

Berk

Date: Wed, 4 Nov 2009 17:32:08 -0800
Subject: Re: [gmx-users] Setting up an infinitely hard wall
From: kgp.amit at gmail.com
To: gmx-users at gromacs.org

Hi Everyone,
So i did set up the velocity mirror as described in the previous email.
I did few more standard calculations on water with the velocity mirror on and compared with the past results obtained when done with other force field & package. The results seem to be convincing. In all, the thing did work out.

Thank you everyone and specially Berk for this.
Amit

On Fri, Oct 30, 2009 at 4:54 PM, Amit Choubey <kgp.amit at gmail.com> wrote:

Hi Berk,
I am mailing about the issue of setting up infinite potential well.

I now want to simplify the task of inversing the velocity and mirroring the particle by the following procedure. If a particle is found in z<delta then i only change the z-component of the velocity v_z to mod(v_z) . This kind of mimic's a mirror at z=0 for the velocities. This way, i wont have to worry about the constraints because i never touch the co-ordinates of the particles. I also think that this would work fine with pbc = xyz .

Now i present the part (do_update_md) of update.c that has to be changed. The bold lines are the ones that i included

static void do_update_md(int start,int homenr,double dt,

t_grp_tcstat *tcstat,t_grp_acc *gstat,real nh_xi[],
rvec accel[],ivec nFreeze[],real invmass[],
unsigned short ptype[],unsigned short cFREEZE[],

unsigned short cACC[],unsigned short cTC[],

rvec x[],rvec xprime[],rvec v[],
rvec f[],matrix M,bool bExtended)
{
double imass,w_dt;
int    gf=0,ga=0,gt=0;

rvec   vrel;
real   vn,vv,va,vb,vnrel;
real   lg,xi,u;
int    n,d;

if(bExtended) {
/* Update with coupling to extended ensembles, used for
* Nose-Hoover and Parrinello-Rahman coupling
* Nose-Hoover uses the reversible leap-frog integrator from
* Holian et al. Phys Rev E 52(3) : 2338, 1995
*/
for(n=start; n<start+homenr; n++) {
imass = invmass[n];
if (cFREEZE)
gf   = cFREEZE[n];
if (cACC)
ga   = cACC[n];
if (cTC)
gt   = cTC[n];
lg   = tcstat[gt].lambda;
xi   = nh_xi[gt];

rvec_sub(v[n],gstat[ga].u,vrel);

for(d=0; d<DIM; d++) {
if((ptype[n] != eptVSite) && (ptype[n] != eptShell) && !nFreeze[gf][d]) {
vnrel = lg*(vrel[d] + dt*(imass*f[n][d] - 0.5*xi*vrel[d]
- iprod(M[d],vrel)))/(1 + 0.5*xi*dt);

/* do not scale the mean velocities u */
vn             = gstat[ga].u[d] + accel[ga][d]*dt + vnrel;
v[n][d]        = vn;
xprime[n][d]   = x[n][d]+vn*dt;
} else {
v[n][d]        = 0.0;
xprime[n][d]   = x[n][d];
}
}if(xprime[n][2] < delta) if(v[n][2] < 0) v[n][2] = -v[n][2];
}

} else {
/* Classic version of update, used with berendsen coupling */
for(n=start; n<start+homenr; n++) {
w_dt = invmass[n]*dt;
if (cFREEZE)
gf   = cFREEZE[n];
if (cACC)
ga   = cACC[n];
if (cTC)
gt   = cTC[n];
lg   = tcstat[gt].lambda;

for(d=0; d<DIM; d++) {
vn             = v[n][d];

if((ptype[n] != eptVSite) && (ptype[n] != eptShell) && !nFreeze[gf][d]) {
vv             = lg*(vn + f[n][d]*w_dt);

/* do not scale the mean velocities u */
u              = gstat[ga].u[d];
va             = vv + accel[ga][d]*dt;
vb             = va + (1.0-lg)*u;
v[n][d]        = vb;
xprime[n][d]   = x[n][d]+vb*dt;
} else {
v[n][d]        = 0.0;
xprime[n][d]   = x[n][d];
}
}if(xprime[n][2] < delta) if(v[n][2] < 0) v[n][2] = -v[n][2];
}
}
}

I assume that xprime[n][2] and v[n][2] refer to the z-components of position and velocity. xprime means the new co-ordinates. Do you think this change is enough to implement the stuff i was talking about? I must acknowledge that i have very little knowledge about the gromacs codes and my views might be very short sighted. So, please do let me know any of the shortcomings that you notice.

If everything is fine with the above, could you also suggest me how to recompile everything.
I cannot thank you all enough for helping me out.

Amit

On Fri, Oct 23, 2009 at 1:09 AM, Berk Hess <gmx3 at hotmail.com> wrote:

Hi,

If you have a wall potential, you can reweight the configurations
with weight 0 if one or more particles are beyond the wall
and exp(Vwall/kT) if no particles are beyond the wall.
This will only work efficiently if you choose the wall potential in a smart way.

I managed to get an efficiency of 70%.

If you have constraints, an atom that goes beyond the wall is directly
coupled to the atoms it is constrained to. You will have to work out
the equations for such a situation. It might be as simple that you can

just correct x and v for the atom that went beyond the wall and then
apply the constraints as normal.

Berk

Date: Fri, 23 Oct 2009 00:26:08 -0700
Subject: Re: [gmx-users] Setting up an infinitely hard wall

From: kgp.amit at gmail.com
To: gmx-users at gromacs.org

Hi Berk,

Thank you for the response.

I have obtained distributions with in infinite wall by simulating with an softer wall

and unbiasing with configurations with the wall potential.

Could you explain the above ? I am not sure if i get your point.

But if you need the dynamics, or you want less hassle during the simulation,
you will have to do a bit more effort in coding an infinitely hard wall.

You will not only have to inverse the velocity, but also mirror the position

of the particle in the wall.
That's true. I am sorry i didnt mention that.
This should on require a few lines of code in do_update_md
in src/mdlib/update.c.

Great, I will try this as soon as possible.

Note that this will only work easily when you do not have constraints present.
With constraints things get much more complicated.

I do have constraints present. Thank you for pointing this. I am working with SPC water and I should, in principle be able to figure out the co-ordinates of all atoms in the molecule if I am given one of the water's atom's co-ordinate. Does that sound ok?

Thanks for the input again,Amit
Berk

Date: Thu, 22 Oct 2009 14:34:06 -0700

From: kgp.amit at gmail.com
To: gmx-users at gromacs.org
Subject: [gmx-users] Setting up an infinitely hard wall

Hi everyone,
I am sending this email again hoping for any quick input for my question.

I have been trying to set up an "infinitely" hard potential wall.
I tried to use the available wall options and could not really get it to do what i needed. I wanted a steep repulsive potential but when i created that, the system was blowing up, reason being that it requires smaller time step and i cant afford to have smaller time step.

My idea to overcome this issue is to just reverse the velocity of the particle whenever it hits the wall. I am not sure if there is any thing in GROMACS which does this but any suggestions will be very helpful.

If there is nothing set up for something like above, i would like to play around with the code to figure it out. If this is the case, could somebody direct me to a starting point.

Thank you Amit

_______________________________________________

gmx-users mailing list    gmx-users at gromacs.org

http://lists.gromacs.org/mailman/listinfo/gmx-users

Please search the archive at http://www.gromacs.org/search before posting!

Please don't post (un)subscribe requests to the list. Use the

www interface or send it to gmx-users-request at gromacs.org.

Express yourself instantly with MSN Messenger! MSN Messenger

_______________________________________________

gmx-users mailing list    gmx-users at gromacs.org

http://lists.gromacs.org/mailman/listinfo/gmx-users

Please search the archive at http://www.gromacs.org/search before posting!

Please don't post (un)subscribe requests to the list. Use the

www interface or send it to gmx-users-request at gromacs.org.

_________________________________________________________________
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://maillist.sys.kth.se/pipermail/gromacs.org_gmx-users/attachments/20091105/50f3003d/attachment.html>
```