Subject: internal coordinates->cartesian

From: Folke Noertemann <[email-masked]>
Date: Mon, 21 Jul 1997 10:21:51 +0200

Dear CCL'ers,
 
(sorry if this occurs twice in  the list!)

 I am currently trying to write my own geometry-optimization
tool and my question refers to the summary 'internal->cartesian'
in the CCL archive.
I have implemented a method to convert from internal coordinates to
cartesian coordinates which has also been outlined by Heinz Schiffer,
that is 
1.) given a set of cartesian coordinates, I calculate a set of bond
    lengths, angles and dihedral angles and, as a byproduct a Wilson
    Matrix B containing the partial derivates d q_j/d x_i
    (q : internal coordinates, x: cartesian coordinates) is set up.
2.) A step is made: q_old -> q_new
3.) The inverse of B (B_inv) is used to calculate
    x_new-x_old = B_inv [x_old] *(q_new-q_old).
4.) Using x_new, step 1 is used to recalculate a set of internals q_test.
    If q_test=q_new, I am done. If not, the process is repeated ,
    updating B_inv [x] until it reproduces the correct q_new.

It works fine for bond lengths. Since B contains only unit vectors
the process is *converged* in one step. 
If I am using steps in bond angles I am unable to get the difference
between the actual angle update and the converged result below 5 percent.
For realistic angle updates (such as ~10 degrees) it is around 10 percent.

My understanding was, that the iterative process should take care of
the fact that the steps are NOT infinitesimal thus converging to
exactly the desired step. The code is so embarrasingly simple
that I either made a very dumb mistake or (and this is my question)
I do not understand this iterative process. 
Is it supposed to converge to exactly q_new or not?

Thank you very much in advance,

   Folke Noertemann
   Lehrstuhl f. Theoret. Chemie
   Lichtenbergstr.4
   85479 Garching
   [email-masked]