Manual Update: DFOCC requires SCF_TYPE = DISK_DF

Dear Psi4 Developers,

I looks like a new option SCF_TYPE = DISK_DF was introduced to (or updated in) Psi4 recently, and as a result some of the DF-OCC input files that ran fine under 1.1 give an error with the current release candidate. The program helpfully informs that “DFOCC requires SCF_TYPE = DISK_DF”. There are two issues to note about this:

  1. It is not obvious where this directive should go. I usually use SCF_TYPE within the scf {} block, but the part of code that parses the scf {} block is not aware of the DISK_DF option. The dfocc {} block does not know what to do with SCF_TYPE. Everything works well when the SCF_TYPE = DISK_DF directive goes to globals {}. This note is mainly FYI for people who run into a similar issue.

  2. The current manual is sparse about DISK_DF. It is listed, along with MEM_DF, at
    http://www.psicode.org/psi4manual/master/autodoc_glossary_options_c.html#term-scf-type-scf but not listed nor explained at http://www.psicode.org/psi4manual/master/scf.html, nor in the corresponding git page.

Could somebody please explain how DF, MEM_DF, and DISK_DF differ in the context of DF-OCC (by Ugur Bozkaya), DF-MP2 (by Robert M. Parrish), and DF-FNOCC (by A. Eugene DePrince) modules in the upcoming 1.2 release?

Thank you,

Kalju

Yes, we haven’t gotten around to finishing the docs there yet. A quick rundown is MEM_DF is a new JK algorithm which is optimal for beefy NUMA nodes, but the integrals cannot be reused as with DISK_DF

These algorithms produce identical results, just one is more efficient than the other. This only effects JK builds and no other parts of the code. The only restriction that many FNOCC and OCC programs assume that these integrals are on disk and so we need to use DISK_DF with these algorithms for SCF. SCF_TYPE is purely in the regime of SCF as noted.

The way it is currently setup is that a user should really only pick “DF” and have the backend algorithm choose the correct underlying algorithm for you. Can you post your inputs that were broken, we can take a look and make sure that these work as this change should be, in general, transparent to users.

Thank you for the explanation! One input that worked in my older (including Psi4 1.2a1.dev875) builds but is not accepted in recent (1.2rc2.dev6 and 1.2rc2.dev52) builds is:

set globals {
 basis       aug-cc-pVTZ
 freeze_core true
 dertype     none
 cc_type     df
 qc_module   occ
}

set scf {
 scf_type df
}

set dfocc {
 wfn_type DF-CCSD(T)
 orb_opt false
 triples_iabc_type disk
}

energy('ccsd(t)')

Once I move the “scf_type df” from scf {} to globals {}, it works.

Hmm, yea. So scf_type df must go in the global namespace. This is actually in bug territory I think, I posted this to the Psi4 issue tracker and it will be fixed before 1.2 is released.