Automatic selection of active orbitals

I am very new to Psi4 and even to quantum chemistry, so perhaps this is a dumb question: Is there a way to automatically select the active space? I know that with Natural Orbitals this is implemented (FNOCC: Frozen natural orbitals for CCSD(T), QCISD(T), CEPA, and MP4) but I am interested in making this work with OpenFermion, where Natural Orbitals are not used.

  1. Automated section of the active space is an active field of research, so there isn’t one way to do this. There are several.
  2. At present, none of them are implemented in Psi4, and I don’t foresee this changing. Our CASSCF code is built off our FCI code. The Psi developers who know the latest and greatest multireference methods aren’t familiar with Psi4’s FCI code, and vice versa. There’s a very high barrier to working with the FCI code as well.
  3. The Evangelista group has a Psi4 plugin called Forte which does CASSCF and has the AVAS scheme for automated CASSCF orbital selection implemented. If you’re interested, I can advise you on getting it setup and running. Depending on what exactly “making this work with OpenFermion” means, it may be possible to do the same with Forte.

Usually, concepts of active space and active orbitals are extensively used in multi-reference methods. Active orbitals means limited number of active occupied and unoccupied orbitals for computations of static correlation energy, e.g. CAS(6e,6o).

But FNO- methods you listed are single reference post-HF methods, where active orbitals often means limited number of active virtual orbitals for computations of dynamic correlation energy. This number is often much large than that in multi-reference methods. So this concept has slightly different meanings in different sub-fields.

Here I assume you are dealing with multi-reference methods. The answer is YES, there is some methods you can use/access easily, now. But this is an active field, there is no standard answer among these approaches. You must be careful with what you are calculating and what you want. Below I’ll show some programs I know

(1) MOKIT program - set up and run common multi-reference calculations in a block-box way (here black-box means automatic selection)

MOKIT is an open source (Jingxiang Zou / MOKIT · GitLab) program. It contains interfaces of common quantum chemistry software and utilities for transferring MOs among these packages. For example, the following simple example(examples/automr/00-h2o_cc-pVDZ_1.5.gjf · master · Jingxiang Zou / MOKIT · GitLab) show a full automatic approach to perform CASSCF

%mem=4GB
%nprocshared=4
#p CASSCF/cc-pVDZ

mokit{}

0 1
O      -0.23497692    0.90193619   -0.068688
H       1.26502308    0.90193619   -0.068688
H      -0.73568721    2.31589843   -0.068688

MOKIT will call Gaussian to perform RHF/UHF, GAMESS to perform GVB, and PySCF to perform CASSCF calculations. CAS active orbitals are automatically determined from NOONs of GVB natural orbitals. Currently supported interfacing with Gaussian, GAMESS, ORCA, PySCF, Molpro, OpenMolcas and BDF. Supported methods: CASCI, CASSCF, NEVPT2, CASPT2, MRCISD, MC-PDFT, etc.

Note that do not use (RHF-)MP2 natural orbitals - they are very poor. CCSD level is too computationally expensive.

I’m the developer of MOKIT. Recently I’m writing MOKIT interfaces concerning PSI4. When this is accomplished (in 1-2 weeks), one can probably use PSI4 as the CASCI/CASSCF solver/program, without manual interrupting and visualizing orbitals.

(2) AVAS (atomic valence active space). This is a method, not a program.
It has been supported in many quantum chemistry packages (PySCF, Molpro, also PSI4 plugin mentioned by @jmisiewicz). This is a somewhat semi-automatic method (but very easy to use), you just need to specify main components of active orbitals (like ‘C 2pz’ for benzene), then you’ll probably get what you want. See an example in PySCF (pyscf/43-avas.py at master · pyscf/pyscf · GitHub)

(3) autoCAS(autoCAS), developed by M. Reiher group, interfaces with OpenMolcas and QCMaquis programs.
It starts from a partially converged DMRG calculation (or with small max_bond_dimension) and choose active orbitals according to orbital entanglement.