Local rigid body in OPTIM
Here we describe our implementation of local rigid body in OPTIM.
POTENTIAL
Currently I have only done this for CHARMM and NAB only.
MAKEIMAGE
Currently we are going to use the standard interpolation for CHARMM and AMBER, then use coordinate transformations in genrigid.f90 to obtain the appropriate images in local rigid body.
with NOHESS
1. Copy genrigid.f90
2. Edit keywords.f to read and initialise local rigid bodies
3. Introduce new subroutines GENRIGID_IMAGE_CTORIGID and GENRIGID_IMAGE_RIGIDTOC in genrigid.f90
4. Edit newneb.f90 - after initial interpolation, we do coordinate transformation to local rigid body. NEB and BFGSTS are done in local rigid body coordinates. The array XYZ is in local rigid body coordinates. NEBDATA contains the XYZ coordinates in interpolation and NOPT.
4a. Fixing POTENTIAL - NABT and CHRMMT. No need to change NEBGRADIENT. For CHARMM force fields, there are checks at mylbfgs.f, potential.f and CONNECT/tryconnect.f90
4b. Hacking into BFGSTS - with NOHESS - ORTHOGOPT - no need to change anything.
4c. TSFOUND data is in the NEBTOCONNECT module. The TS coordinates are saved in local rigid body coordinates.
5. In tryconnect.f90, there is a call to SUBROUTINE PATH. Here the code does downhill runs in two directions, done in local rigid body coords.
5a. SUBROUTINE PATH outputs path.*.xyz. We need to do coordinate transformation to all atom coords before path.*.xyz is saved.
5b. QPLUS and QMINUS and hence the database of local minima MI are saved in all atom coordinates. This is done because there are calls to MINPERMDIST, and other topology checks which are done in all atom coords.
6. Fix initial minimization - reoptimise endpoints - this is in OPTIM.F. I also change it to do this potentially multiple times, rather than just once. The reason is because of the potential angle jump in angle axis - which means the gradient also jumps.
7. Shift centre of geometry to centre of mass
8. Fix function NCISNEWTS - otherwise minpermdist is not working properly when checking the transition states - in ncutils.f90. For future debugging this is called from tryconnect.f90. NEB/output.f90 is where TSLOCATOR is called.
9. Outputting pdb in CHARMM is located in CHARMMinterface/dump.src
10. There seems to be a problem in bfgsts.f with NOHESS - trying to fix at beig
DESMINT - some interpolation scheme in internal coordinates -ASK JO?
TRANSBACKDELTA - some internal coordinates, has not fixed this
IMAGEDISTRIBUTION - prob separation between images DJWCHECKOMEGA - cis/trans checks - ok need to correct this - attempted RWG - this is for output, fix later?
with HESS
1. Projection of the Hessian for the local rigid body coordinates is now done and correct - see potential.f and genrigid.f90.
2. Can now compute eigenvalues and eigenvectors correctly - see genrigid.f90. Some changes are needed in geopt.f90
3. ENDHESS is working, but at the moment it computes all eigenvalues rather than only optionally able to select the lowest n. The printed numbers on points.final.* are rigid body coordinates. Changes are mostly in geopt.f90 and genrigid.f90. genrigid.f90 also has the subroutine GENRIGID_VDUMP which dumps the eigenvectors to vectors.dump.
4. Shifting eigenvalue is working. The important changes are in bfgsts.f and genrigid.f90 under the subroutine SHIFTLOCALRIGID.
5. Fix MAKEALLPATHINFO in CONNECT/ncutils.f90. path.info now writes the triplets correctly. While the transition states are saved in the rigid body coordinates, when path.info is written, they are converted to all atom coordinates.
PATHSAMPLE
You can now use it in PATHSAMPLE. You need RIGIDINIT keyword with the number of degrees of freedom in your rigidified system specified as an argument. You can find this in your OPTIM and GMIN output near the top.
Some notes
orthogopt - overall translations and rotations
ITEIG - estimate smallest non-zero eigenvalue and eigenvector
checkind - count number of negative Hessian eigenvalues
checkind2 - check the Hessian index
HSMOVE - hard sphere moves
PVOPT - box size
BEIG - LBFGS minimization to estimate the smalles eigenvalue and vector