I am trying to reproduce some results obtained with the CAM-BLYP functional, but with varied parameters. As far as I know, this is not available currently (I only found CAMY-B1LYP). So I see two ways to work around this:
Go into source code and define it --> if there is interest, I can do it but since I am new to Psi4, it is not my first choise
Define it via core.SuperFunctional in the input, similar to the last example.
However, I am not sure if I understand the options correctly: In the example, they use a global mixing of pbe_x.set_alpha(0.75) DFT-exchange and sup.set_x_alpha(0.25) HF-exchange (at least, I understand it this way).
But if I introcuce the range separation, should I set pbe_x.set_alpha(0.) (because I don’t have a global DFT-exchange in my example) and just add the option sup.set_x_omega(0.3) ?
(or do I need the set_x_beta() option as well?) All combinations I tried so far lead to terrible energies.
More fundamental (but connected) is the question: Where should I seek for such answers as “What is the meaning of this or that option”? or “which options are available using e.g. the superfunctional”? (Currently I mainly work with the manual, which is great but only to some level of details).
thank you very much; these links helped me very much; especially the first one is exactly, what I was looking for.
However, not all functions seem to have a doc-string; set_alpha() for example does not. And I am not sure I use it correcly:
I want a global LYP-correlation,
for exchange a global HF-amount of 0.3 and asymptotically pure HF-exchange and as DFT-exchange 0.3 of B88.
So I set my superfunctional to
def mod_lcblyp(name, npoints, deriv, restricted):
# Build a empty superfunctional
sup = core.SuperFunctional.blank()
# Name the functional and provide a description
sup.set_description(' LC-BLYP Hyb-GGA Exchange-Correlation Functional\n')
# Set the correlation functional
b_x = core.LibXCFunctional('XC_GGA_X_B88', restricted)
#Set exchange functional ( static + long-range contribution)
# set the parameters for S7:
but the energies are still far off the reference. Is it wrong to set b_x.set_alpha() to 0.70 ?
It’s probably a bit confusing without docs, but alpha is the amount of “global” exchange throughout the whole system while beta is the amount of LR exchange. If you would like 100% LR exchange you should set the x_beta to 0.7 as currently you have 130% exact exchange at long-range.
If you are so inclined, a PR enhancing the documentation would be much appreciated. Where the docs can be found here:
ah, ok; I see. So alpha+beta=1 makes usually much sense :-).
But what does the parameter b_x.set_alpha() mean? In my point of view, I have set everything by sup.x_x_* ?
From the other superfunctionals ( defined in the source-code), I got the impression that usually the b_x.set_alpha() is used to set the amount of DFT-exchange (thus similar as sup.set_x_beta()) but when I set both to 0.7 in my example, the energies are still wrong. (and just not setting beta doesn’t make things better).
Can you point me, how this should be used?
I’ve started preparing a PR with documentation; I will submit it as soon as I understand the parameters myself.
I have decoupled all components in the interface so that b_x.set_alpha() will only modify the percentage of the functional added. If you want 100% exchange the sum of the exchange functional percentages and then exact exchange percentages should equal 1. So if you have 70% exact exchange (0.7) you would want 30% (0.3) DFT exchange.