Modify density functional parameters through input file

Hey y’all,

I would like to modify the parameters of the B97 and wB97 functionals.
Specifically, I want fiddle with the linear exchange, same-spin and opposite spin correlation parameters, not just the part governing the range-separation.
Right now I’m doing this by defining a new functional in “functional.py”, which works without problems. However, it would be a lot more convenient if I could do this through the input file instead. Is there any way to do this?

Best regards,

Johannes

There the dft_alpha and dft_alpha_c [keywords] (http://psicode.org/psi4manual/master/autodir_options_c/module__scf.html#dft) that may be of use. The ss/os for dfmp2 (used in dhdft) keywords are here. Those are the clearest handles. Be very sure that altering them is giving what you want. scf print 2 or 3 may help in printing out functional info. The set_c_os_alpha/set_c_ss_alpha methods in functional.py itself aren’t so useful as they look because a modification to make some definitions saner a few years ago rendered them linearly dependent; that’s why the scs-dh list is empty.

If you really want to build up a functional in the input, akin to functional.py, I believe it is possible to get a handle on a SuperFunctional object and do so (if you’re determined on this point, write back). But we are planning to switch dft over to libxc, and unfortunately, this customization will not then be available.

Hi,

thanks for the quick reply. That’s not quite what I meant though. I am not talking about same-spin/opposite-spin scaling in MP2 or double-hybrids. Sorry for being unclear, but the terms are a little ambiguous…

Let me try to clarify: What I want to do is modify the B97-type hybrid functionals. Here the GGA-correlation functional is expanded as a power series with different coefficients for the same- and opposite-spin channels. These coefficients are defined in SuperFunctional objects.

What I’ve been doing is this: I simply copy the SuperFunctional definition for e.g. wB97X, rename it, change the parameters and add the new functional to the master list.
This works, but it’s a little cumbersome. Also it means that I cannot run different versions of the functional at the same time.

So what I would like to do is this: Either, I want to define a SuperFunctional inside the input file, or else have keywords that allow me to change the parameters of a SuperFunctional in functionals.py.

Is there a way to do this with the current version of Psi4?

Best regards,

Johannes