Convert molden to wfn (180, npy) file

Dear users and developers,

Psi4 has a very nice function to write the wfn to a molden file by “molden(wfn, filename)”. I am wondering whether the reverse can be done (i.e., reading a molden file as a wfn)? Practically speaking, I would assume so since the molden file contains all the necessary information to build a wfn.

I found that one can construct a wfn with a molecule and basis set by doing:

wfn = psi4.core.Wavefunction.build(molecule, basis_set)

But I am stuck at how I can set values for MO coefficients and occupations. Any help will be appreciated!

Best,
Chenru

The molden format isn’t well defined (or at least not implemented 100% the same way in various programs). If you know the Multiwfn code, the author had to do all sorts of tricks to account for how programs write molden files. Thus I see little hope of anyone wanting to program an interface for the backtransformation.

This might be interesting for you:

Hi @hokru, thanks for your speedy response! I am aware of the problem of molden format issues. But what I want to know is, if I have the MO coefficients, how can I set it to the wfn object? For example, something like

wfn_loaded.Ca().nph[:] = my_MO_coeff

I tried the above but it did not work. I also tried to search for the source code of the psi4.core. Wavefunction but it seems that part of the code is not open-sourced?

You want to study the numpy interface in the manual (see also psi4numpy on github)
The nph is just a view into the Matrix, it doesn’t give you access to the underlying C structure.

The syntax you want is
wfn.Ca().copy(newC)

However, here newC is a psi4.core.Matrix. For a given numpy array you can convert it with
newC=psi4.core.Matrix.from_array(np_array)
(see Matrix and Wavefunction class here http://psicode.org/psi4manual/master/psi4api.html#classes)

Be careful about symmetry and Matrices that contain irreps! Easy to get a segmentation fault doing it wrong.

Everything psi4 (and most of it’s plugins) are open-sourced. The C++ side of the wavefunction class is here https://github.com/psi4/psi4/blob/master/psi4/src/psi4/libmints/wavefunction.cc

This core scf function for any scf might also be interesting for you: https://github.com/psi4/psi4/blob/master/psi4/driver/procrouting/proc.py#L1231

1 Like

Thanks! This is exactly what I needed!