BoothGroup / ebcc

Coupled cluster models for both purely electron and coupled electron-boson models, with a focus on generality and model extensibility.
https://boothgroup.github.io/ebcc/
MIT License
11 stars 2 forks source link

Question on CCSD(aT) (aka Lambda-CCSD(T)) #54

Open vvp-nsk opened 6 months ago

vvp-nsk commented 6 months ago

Hej!

Just a thought came to mind - it might be a killer feature if you combine the CC Brueckner orbitals with CCSD(aT):

image

In particular, it is worth thinking about BDCD(aT) as well.

With best regards, Victor

obackhouse commented 6 months ago

I think the CCSD(T) implementation in ebcc might already be implemented for generalisation to Lambda-CCSD(T). The energy_perturbative function depends on the Lambda amplitudes. I think the difference between

cc = REBCC(mf, ansatz="CCSD(T)")
cc.kernel()
print(cc.energy_perturbative())
cc.solve_lambda()
print(cc.energy_perturbative())

will be the difference between CCSD(T) and Lambda-CCSD(T), but not sure.

I haven't paid much attention to CCSD(T), my implementation is not very efficient. I'll try to verify this and make Lambda-CCSD(T) it's own ansatz keyword.

I've been spending some time improving my code generation scripts recently, so hopefully I can make CCSD(T) more efficient, and I will aim to also look at perturbative corrections to DCD and DCSD. Thanks for the suggestions!

obackhouse commented 6 months ago

actually, correction, I haven't actually implemented CCSD(T) lambda equations since they need an additional perturbative term, so that won't work -- I'll add it to my to-do.

vvp-nsk commented 6 months ago

Hej again!

@Lambda-CCSD(T) Thanks for your prompt reply. To test your implementation, you might use a reference data on H2O available within PSI4.

@CC3 To my personal experience, the CC3 is the most robust approach among CCSD perturbative triples correction. The CC3 does a fantastic job by absorbing an orbital relaxation (rotation) into T1. It just scales as O(N^7) at each iteration :) It is a bit surprising that CC3 implementation in EBCC requires a plenty of RAM (~500GB) even for moderate-sized problem such as 74 electrons and 211 molecular orbitals without symmetry. Indeed, PSI4 requires only ~20GB of RAM and 70GB of disk space for the same problem size.

I will be waiting for your implementation of Lambda-CCSD(T) because Lambda-BCCD(T) might be reliable as CC3 but at a lower cost. Moreover, I have not found any published results on neither Lambda-DCSD(T) nor Lambda-DCBD(T).

With best regards, Victor

obackhouse commented 6 months ago

I am not surprised to hear of the much worse memory requirements in ebcc. In fact, for a 211 orbital 74 electron system I'd expect CC3 to need way more memory than that, so I assume there's a generous number of frozen orbitals in your example.

It is an unfortunate reality of the very simple way that ebcc is built, which means that for example T3 amplitudes are stored in their complete non-symmetric form on RAM (i.e. as an (nocc, nocc, nocc, nvir, nvir, nvir) array). Other implementations may store these in compressed formats and also load them in blocks from disk, which relaxes this memory requirement, often substantially. But these implementations are typically hand written and optimised.

I have several ideas in the pipeline on how to make the larger ansatzes such as CC3 more tractable and hopefully more comparable to implementations such as Psi4's, including alternate tensor backends and generating compiled code. Sadly, ebcc is just a hobby for me and I develop it on my own at the moment, so I don't have significant time to work on these pretty complicated schemes. But hopefully in the future!

obackhouse commented 6 months ago

After doing some reading, I realise that you can actually do CC3 without ever storing T3 amplitudes. Finding a way to automatically generate code like this for both CCSD(T) and CC3 is not easy, but will keep it in mind. Maybe this is an area where I should do some handwritten code rather than trying to automatic generate everything.

vvp-nsk commented 6 months ago

Hej!

@CC3 From a practical consideration, the CC3 method is a rather limited approach. You recently introduced the FNO approach in EBCC, but it would be beneficial to combine FNO-CC2 with CC3. Indeed, the CC2 still scales as N^5 but does a way better job than MP2 whereas CC3 surpasses CCSD(T). BTW, the CC3 always requires weeks when CCSD(T) just takes several hours to compute energy.

@Lambda-CCSD(T) Generally speaking, Lambda-BCCD(T) might become as a method of choice for many problems, especially regarding 3d transition metal complexes where validity of CCSD(T) is under a question: https://doi.org/10.1021/acs.jctc.5b00081 https://doi.org/10.1021/acs.jctc.9b00674

With best regards, Victor

obackhouse commented 6 months ago

Thanks for the links and the notes on practicality -- I'll bear it in mind when deciding what to focus on.