How expensive/accurate is OMP2?

Hi there, I just found this issue, luckily for me.
Could anyone tell me for radical non-covalent interactions (~10 atoms max), how much the oo-mp2 might cost using aug-cc-pvtz. My system mostly have C, Cl and Br atoms.
I think RI approximation might help for cost-effectiveness but do I need SOS/SCS techniques?
Forgive me if my question is vague. I have only one i7-7700 with 32 GB RAM.

I’ve moved your post to a new topic, because it’s asking a different question from the original one. For orbital optimized methods, density fitting (DF) is extremely helpful, and the errors are negligible compared to those from OMP2, so I assume you will be using DF.

You can see accuracy benchmarks and timing data for DF-OMP2 interaction energies in this paper. You may also be interested in the gradient benchmark paper here. Unfortunately, geometry errors for noncovalent interactions aren’t discussed, and the papers only discuss the computational time and not the memory requirements. The only benchmark of spin-scaled OMP2 that I’m aware of is this paper. The spin-scalings considered in that paper do not seem to improve the accuracy of OMP2 for noncovalent interaction energies.

I don’t think the DF-OMP2 code has seen much use, so please let us know if you find anything unexpected.

Pinging @bozkaya in case he has anything to add.

Of course I will. I just need some time, my pre-phd is coming up…

1 Like

I have tried using this method but failed due to scf convergence error. Could you take a look at this input that if some keywords are missing or needs an upgrade. I am opting for a tight geometry optimization at OO-DF-MP2 with aug-cc-pvtz basis.
The input is as follows,

memory 24 gb
molecule {
0 2
   F       -0.20621       -1.89055        0.00000
  Cl        0.00000       -0.25407        0.00000
   O        0.30354        2.32383        0.00000
   H       -0.57244        2.74358        0.00000
}

basis {
assign aug-cc-pvtz
}

df_basis_mp2 {
assign aug-cc-pvtz-ri
}

set {
scf_type df
reference uhf
freeze_core true
guess sad
mp2_type df
}

set {
geom_maxiter 250
G_convergence GAU_TIGHT
opt_coordinates both
print_trajectory_xyz_file true
final_geom_write true
}

optimize('OMP2')

I am using Psi4 1.3.2 release Git: Rev {HEAD} ecbda83

last portions of the output


  Failed to converge.

Traceback (most recent call last):
  File "/home/prasanta/psi4conda/bin/psi4", line 287, in <module>
    exec(content)
  File "<string>", line 50, in <module>
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/driver.py", line 1052, in optimize
    G, wfn = gradient(lowername, return_wfn=True, molecule=moleculeclone, **kwargs)
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/driver.py", line 691, in gradient
    wfn = procedures['gradient'][lowername](lowername, molecule=molecule, **kwargs)
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/procrouting/proc.py", line 253, in select_omp2_gradient
    return func(name, **kwargs)
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/procrouting/proc.py", line 1662, in run_dfocc_gradient
    ref_wfn = scf_helper(name, use_c1=True, **kwargs)  # C1 certified
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/procrouting/proc.py", line 1363, in scf_helper
    e_scf = scf_wfn.compute_energy()
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/procrouting/scf_proc/scf_iterator.py", line 94, in scf_compute_energy
    raise e
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/procrouting/scf_proc/scf_iterator.py", line 87, in scf_compute_energy
    self.iterations()
  File "/home/prasanta/psi4conda/lib//python3.6/site-packages/psi4/driver/procrouting/scf_proc/scf_iterator.py", line 447, in scf_iterate
    raise SCFConvergenceError("""SCF iterations""", self.iteration_, self, Ediff, Dnorm)

psi4.driver.p4util.exceptions.SCFConvergenceError: Could not converge SCF iterations in 100 iterations.


Printing out the relevant lines from the Psithon --> Python processed input file:
    core.set_global_option("GEOM_MAXITER", 250)
    core.set_global_option("G_CONVERGENCE", "GAU_TIGHT")
    core.set_global_option("OPT_COORDINATES", "both")
    core.set_global_option("PRINT_TRAJECTORY_XYZ_FILE", "true")
    core.set_global_option("FINAL_GEOM_WRITE", "true")
--> optimize('OMP2')

    Psi4 stopped on: Saturday, 15 February 2020 10:43PM
    Psi4 wall time for execution: 0:00:06.65

*** Psi4 encountered an error. Buy a developer more coffee!
*** Resources and help at github.com/psi4/psi4.```
Thank you in advance @jmisiewicz

I can get around the SCF convergence problem with set soscf true, but the bigger problem is that the orbital optimization iterations don’t converge afterwards. This is most definitely a @bozkaya problem.

1 Like

Hi! I have the same issue with triplet systems. Try to calculate WF with DFT like this

optimize('OMP2', dft_functional='pbe')

This will multiplies you calculation time. I’ve also found on my systems that freezing the core orbitals always leads to convergence problems. Try the aug-cc-pvCDZ basis out.

Hope, this helps.

MadChem, please do send me some examples of your convergence woes. The frozen core approximation within orbital optimized methods is a problem I am very interested in.

For Prasanta’s benefit, the command from MadChem is changing the guess orbitals you use from the UHF orbitals to the orbitals from the PBE functional. My quick tests indicate that using dft_functional='pbe' alone helps quite a lot for this particular system.

I should also warn you there is a known bug with DF-OMP2.5 that causes it to give wrong energies in certain circumstances. I fixed this bug last month, but the bug will still be in the version of Psi4 you have. Gradients will be perfectly fine.

Thank you @jmisiewicz, but I am stuck with proper basis for a few days. I can not find aug-cc-pvtz-pp/RI and JKFIT for Iodine atom. This atom constitute some of my system. I look forward to you for this help to obtain basis set.
Thanks in advance…

Some time this error occurs for DF-OMP2 optimization.
Fatal Error: DF-OCC iterations did not converge
This is my input

molecule {
0 2
 F     -0.27054000   -1.88813000    0.00000000
 Br     0.00000000   -0.13490000    0.00000000
 O      0.36733000    2.36473000    0.00000000
 H     -0.50379000    2.79699000    0.00000000
}
basis {
assign aug-cc-pvtz
}

df_basis_mp2 {
assign aug-cc-pvtz-ri
}

set {
scf_type df
reference uhf
freeze_core true
maxiter 250
mp2_type df
df_scf_guess true
basis_guess true
MO_maxiter 150
soscf true
soscf_max_iter 35
soscf_print true
damping_percentage 25
parallel true
guess sad
sad_maxiter 350
}

set {
geom_maxiter 250
G_convergence GAU_TIGHT
opt_coordinates both
print_trajectory_xyz_file true
final_geom_write true
}

optimize('OMP2') 

I even tried with
optimize('OMP2', dft_functional='pbe')
but to no avail. Is there any special keyword that I need to know?
Thanks in advance.
I tried with damping percentage varying 20-40%, soscf turned off, changing guess=sad to gwh, huckel but do not know why this error is happening.

For the basis set question, I don’t know myself.

For the convergence problem… The keywords you’re changing aren’t even related to the error. This is a problem with dfocc. Go look at the dfocc keywords.

I’m going to leave you to try some experimentation on your own. Try some things, then report back to me. dfocc can be a difficult module to work with, but this is a case where you can (and should) exercise some self-sufficiency.

And again, pinging @bozkaya

1 Like

Hello @jmisiewicz,
I have read in multiple posts that cationic guess are better starting point for difficult scf convergences. However, I could not find a suitable example. would you be kind enough to provide one. Suppose I want to make caionic or anionic guess for the above molecule, which keyword should I add?
Thank You

There are two different things you could be talking about.
(1) You want cation SCF orbitals as a guess for neutral SCF orbitals, which are a guess for the neutral OMP2 orbitals.
(2) You want cation OMP2 orbitals as a guess for the neutral OMP2 orbitals.

Which are you talking about? 1 is going to be an easier problem than 2… I’d need to think about how you could do 2.

I am looking for number one, didn’t thought about number two yet.
By the way, if you find solutions of number two, do share… :grin::grin::grin:

For (1), you can see an example here. The trick is that you create two molecules with the same name. The first is the cation. Converge that. Then set guess to read and perform the next SCF. When guess is set to read, Psi realizes we have orbitals on hand for another molecule with the same name and reads them in. I haven’t done this before myself, so let me know if you encounter anything suspicious.

(2) should be simple, but I’m not sure how you’d do it just yet. The difficulty is that the only orbital passing mechanism is to send in a wavefunction, but I don’t know of a way to force a new set of orbitals onto a Wavefunction Python-side.