AMBER Archive (2007)

Subject: Re: AMBER: about shake

From: Steven Winfield (saw44_at_cam.ac.uk)
Date: Wed Aug 08 2007 - 10:59:45 CDT


Dear Fu Lin,

I haven't looked at the AMBER code, but having coded up SHAKE for a
different program it will almost certainly be (2) and (a) (or some
variant of (a)).

Firstly,the SHAKE algorithm first expands the constraint functions as a
Taylor series about the unconstrained positions and uses the first
derivatives of the constraint functions to approximate where the
constraints are satisfied. This gives a matrix equation, which is what I
assume you mean by 'linear equation method', but since this comes from
truncating the Taylor series at the first derivative even this will need
iterating.
To speed things up, all off-diagonal elements of this matrix are assumed
to be zero and the resulting equations are iterated (there will probably
be more iterations than if the matrix elements weren't zeroed, but each
iteration will be a lot quicker because we don't need to invert a matrix
each time).

Secondly, as soon as you have any atom which is involved in two or more
constraints then (a) is required. Say atom 1 is bonded to atom 2, which
is bonded to atom 3 and you use method (b). If you used SHAKE on bond
1-2 until it was the correct length you would almost certainly undo all
that effort when you SHAKE bond 2-3.

For more information see
J. P. Ryckaert et al., JCompPhys 23 327-341 (1977)
H. C. Andersen, JCompPhys 52 24-34 (1983)
Frenkel, Smit 'Understanding Molecular Simulation' Chapter 10

Regards,

Steve.

linfu wrote:
> Dear Amber Community!
>
> I am not fully understand the SHAKE algorithm in Amber.
> I am wondering how the AMBER implement the SHAKE algorithm,(1) or (2).
> (1) Solve the linear equation method.
> (2) Using Iteration method to convergence.
>
> If AMBER uses (2),which Iteration strategy does AMBER do, (a) or (b).
> (a)
> while(not convergent)
>
> for i = 1 to number_of_shake_bonds
> shake_correction() //one interation.
> endfor
>
> endwhile
>
> (b)
> for i = 1 to number_of_shake_bonds
>
> while(not convergent)
> shake_correction() //serveral interation until convergence.
> endwhile
>
> endfor
> which iteration is better?
>
> Could anyone help me! Thank you very much:)
>
> BEST REGARDS
> Fu Lin
>
>
> -----------------------------------------------------------------------
> The AMBER Mail Reflector
> To post, send mail to amber_at_scripps.edu
> To unsubscribe, send "unsubscribe amber" to majordomo_at_scripps.edu
-----------------------------------------------------------------------
The AMBER Mail Reflector
To post, send mail to amber_at_scripps.edu
To unsubscribe, send "unsubscribe amber" to majordomo_at_scripps.edu