I have performed a CASPT2 frequency calculation using the MOLCAS8 program package. I need the full Cartesian Hessian matrix as input for a subsequent program package.

MOLCAS8 performs CASPT2 frequency calculations numerically. The program MCKINLEY is called for this purpose, however, it is now my opinion that all numerical second derivative calculations in MOLCAS are handled not by MCKINLEY but by the barely documented module supermac. Anyway, the Hessian is fully printed in internal coordinates once the calculation is finished. For a system of 10 atoms the internal Hessian is of size 24 x 24, which suggests non-redundant internal coordinates (MOLCAS calls them "primitive internal coordinates").

Does anyone know of a software capable of transforming a Hessian matrix from internal coordinates to Cartesian coordinates? I am aware that this will probably be complicated as internal coordinates are not as unambiguous and straight-forward as Cartesians. However, my initial search efforts did not yield a single software package capable of transforming a calculated Hessian in internal coordinates to Cartesians. Any help would be appreciated!

Alternatively, does someone know a quantum-chemical program package using which I might be able to obtain a full Cartesian hessian at CASPT2 level?

I don't know if this helps, but MOLCAS also seems to print out the force constants of each atom in Cartesian coordinates. Furthermore a .molden file is produced where the normal modes are included. The full Hessian does not seem to be written to this Molden file though.

  • $\begingroup$ Not sure if this is helpful, but check out the "Cartesian" keyword for the module Slapaf. jellby.altervista.org/manual/users.guide/programs/… $\endgroup$
    – Yoda
    Jun 2, 2017 at 19:08
  • $\begingroup$ 24 elements/dimension follows the $3N-6$ rule for the number of normal modes for a nonlinear molecule, and doesn't necessarily imply one coordinate system over another. $\endgroup$ Jun 3, 2017 at 0:53

3 Answers 3


BAGEL (http://nubakery.org/ and https://github.com/nubakery/bagel) has CASPT2 analytical gradients and can run frequency computations.

It's currently being prepared for 1.0 release, so it might still have bugs. On the other hand, it is freely available under the GPL.

As for converting the Hessian, it might be useful to look at the INTDER program, which is (among others?) part of the PSI3 suite of programs available here: https://sourceforge.net/projects/psicode/files/psi/3.4.0/psi-3.4.0.tar.gz/download - PSI3 is under the GPL as well.

The manual page for INTDER is here: https://manned.org/intder and it says:

"Force field transformations between Cartesian and general internal coordinate spaces up to fourth order, including nonstationary reference structures. Both forward and reverse transformations are possible; hence, by using intermediate Cartesian coordinates, force fields can be transferred among different representations in the internal space."

Whether or not it will be easy to coerce the MOLCAS Hessian into a format INTDER likes and then transform it as you want I cannot say as I don't have any direct experience with INTDER - it is typically run as a step in a chain of commands automatically generated by the PSI3 driver routines.


In the Geometric [1] package, there is code to convert an internal coordinate Hessian into Cartesian coordinates

    def calcHessCart(self, xyz, gradq, hessq):
        Compute the Cartesian Hessian given internal coordinate gradient and Hessian. 
        Returns the answer in a.u.
        Bmat = self.wilsonB(xyz)
        Hx = np.einsum('ai,ab,bj->ij', Bmat, hessq, Bmat, optimize=True)
        Hx += np.einsum('ji,j->i', Bmat, gradq, optimize=True)

        return Hx

The code is also reproduced in my repository[2] but I've never attempted to use it


  1. https://raw.githubusercontent.com/leeping/geomeTRIC/master/geometric/internal.py
  2. https://github.com/ZimmermanGroup/pyGSM/tree/master/pygsm/coordinate_systems

Maybe openbabel can do it. I found this website which can convert z-matrix's to Cartesian coordinates: http://www.shodor.org/chemviz/zmatrices/babel.html. I know that the MolMod python library can make the conversion if you want to delve into that. And another python library that can do it chemcoord I hope this helps.

  • $\begingroup$ Thanks, but all the libraries you named can not convert a hessian matrix from internal to cartesian coordinates. MolMod is able to calculate a hessian matrix in internal coordinates as I see it, but it is not able to convert a pre-existing hessian in internal coordinates to cartesian coordinates. Can you verify this? $\endgroup$ Jun 2, 2017 at 12:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.