# How do the various programs read or write integrals in FCIDUMP format?

The FCIDUMP format was created by Peter Knowles and Nick Handy circa 1989 and now allows many electronic structure software packages to interact with each other.

For example imagine we want to calculate the 1- and 2-electron integrals with OpenMOLCAS (likely the fastest and most general open-source software for calculating integrals) then run a rather special electronic structure method like FCIQMC with those integrals (FCIQMC is best done with the NECI software written mainly by the people that invented and developed FCIQMC). In this case the integrals will be calculated in OpenMOLCAS, printed to an FCIDUMP file, then the software NECI will read the integrals from that file.

The following programs are able to interact with FCIDUMP files in some way:

• MOLPRO (can read and write)
• PySCF (can read and write)
• (Open)MOLCAS (can write)
• ARROW (can read and modify)
• DALTON (can write)
• DIRAC (can write)
• GAMESS (can write, with a plug-in)
• DICE (can read and maybe modify)
• BLOCK (can read and maybe modify)
• CheMPS2 (can read and maybe modify)
• anymore you wish to add

The following can interact with the standard FCIDUMP format of 1989, but can also support generalizations of it:

• NECI (can read, and modify standard FCIDUMP files, and can write some 3-body integrals)
• BAGEL (can write complex-valued integrals for 4-component relativistic calculations)
• HANDE (can include more 1-electron integrals, including orbital energies, can list UHF/RHF)
• Psi4 (supports the generalized format of HANDE)

For some of these programs, like MOLPRO, FCIDUMP format is supported natively and it's quite straightforward to figure out how to read/write FCIDUMP files, by browsing the software's manual. However other programs need an extra plug-in, and/or have some caveats, and/or require slightly non-trivial work to grease the wheels to support FCIDUMP formatted integrals, and/or the support is not explained in the manual. In these cases, how does one read or write integrals in FCIDUMP format?

# Psi4

Psi4 provides functions for reading and writing FCIDUMP files from wavefunction objects. Using Psi4 as a Python module, these look something like:

import psi4

#Writing (default fname is "INTDUMP")
E, wfn = psi4.energy('scf', return_wfn=True)
psi4.fcidump(wfn)