Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
vvp-nsk opened this issue Mar 4, 2024 · 7 comments
Open

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

vvp-nsk opened this issue Mar 4, 2024 · 7 comments
Labels
enhancement New feature or request

Comments

@vvp-nsk
Copy link

vvp-nsk commented Mar 4, 2024

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
Copy link
Contributor

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 obackhouse added the enhancement New feature or request label Mar 4, 2024
@obackhouse
Copy link
Contributor

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
Copy link
Author

vvp-nsk commented Mar 4, 2024

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
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Author

vvp-nsk commented Mar 5, 2024

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
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants