Is there any keyword to print out the reduced mass for each internal coordinate (not normal mode)?

I am not sure if this question is based on a correct understanding of molecular vibrations. Let me first describe what’s in my head.

Start from a molecule with 3N coordinates,
(i) one converts them to internal coordinate, e.g., S = Dq, where q and S are Cartesian and internal coordiantes respectively, D is the transformation matrix.
(ii) then one diagonalizes the Hessian in internal coordinate to obtain the normal modes, the reduced masses are typically printed out in each normal mode.

My question is in step (i), is that possible to print out the reduced mass in each internal coordinate? I thought about two-body systems as the simplest example, e.g., a hydrogen atom or diatomics, the reduced mass comes from step (i). Since there is only one degree of freedom, the diagonalization step (ii) is unnecessary.

I’m not certain if there is a keyword to print the data you need to the output, but @loriab’s very flexible design makes it easy to access, thankfully:

import psi4
import numpy as np
import json

mol = psi4.geometry("""
O
H 1 0.96
H 1 0.96 2 104.5
""")

f, wfn = psi4.frequencies('hf/sto-3g', return_wfn=True)
data = wfn.frequency_analysis
print(data.keys())
print(data['mu'])
data_as_array = data['mu'].data
print(data_as_array)

which gives

----------------------------------------
           Datum reduced mass           
----------------------------------------
Data:     [1.12588942 1.04679286 1.00782503 6.00352156 6.00352156 6.00352156
 1.08144704 1.04631467 1.08093666]
Units:    [u]

Based on this line, I think you can also just set the HESSIAN_WRITE=True option to get a .vibrec file with all of the pertinent information, if you’d rather run through the Psithon interface.

Thank you so much! It seems there are 9 reduced masses. Are they for translation, rotation, and vibration at X/Y/Z? I thought the translation is from the center of mass with total mass, hence would it be ~16+2=18?

These are from the cartesian normal modes.

Analysis in terms of internal coordinates is not supported AFAIK. The optimizer (optking) handles the cartesian-> internal transformations internally and it’s not exposed to the rest of psi4.

One might be able to stitch things together with optking/optking at master · psi-rking/optking · GitHub (the new python version of the current C-based optimizer in psi4)

First, @hokru is right the reduced masses that Andy’s script is printing are based on the normal modes expressed in Cartesian coordinates. However, given that we do project out the rotations and translation in accord with the Eckart conditions, the vibrational modes do correspond to internal motions.

Second, yes, the reduced masses Andy is printing are for all 3N-6 vibrations, three rotations, and three translations, which is nine for Andy’s water-molecule example.