Meaning of the coupled cluster amplitudes

Hi everyone,

I am working on a project for which I need the coupled cluster amplitudes. From PSI4 I get the cc amplitudes in a file as

TIA Amplitudes:
Tia Amplitudes:
TIJAB Amplitudes:
Tijab Amplitudes:
TIjAb Amplitudes:
0 0 0 0 -0.1153404926

this is an example for H2. I am not familiar with this notation. Can someone explain to me what they mean?

I am trying to build the wavefunction using these cc amplitudes. Therefore I need to understand what these amplitudes mean in order to build the wavefunction as:

e^T | Hartree Fock State>

Question: What is T in this example?

In the above example I assume the following notation is used (correct me if I am wrong):
i,j,I,J are occupied molecular orbitals
a,b,A,B are virtual molecular orbitals

Is it true that lower case means spin down and upper case letter spin up?
Also it seems from the output files as if
i,j are numbered 0,1,…
I,J are numbered 0,1,…
a,b are numbered 0,1,…
A,B are numbered 0,1,…

For closed shell system, I only get TIA and TIjAb amplitudes whereas for open shell molecules I also get the others such as Tijab, TIJAB, Tia. Why is this? In the closed shell pictures is TIjAb equal to TIJAB because of spin symmetry?

What convention is used for the T2 amplitudes: Do I need to divide these by 2 or by 4…

Thanks in advance for some answers

Hi some answers to (hopefully) get you started,

What is T in this example?

  • The example doesn’t really have enough information to answer that question. In general T is a sum over operators that perform “substitutions” on a reference determinant. In CCSD for example T = T1 + T2 where T1 deals with single substitutions and T2 double substitutions.
  • You might want to read up on CC theory a bit, I would suggest this book chapter by Crawford and Schaefer.

I assume the following notation is used …

  • Your assumptions on the notation are correct we use (i,j,k…) to refer to occupied MO’s and (a,b,c…) to refer to virtual MO’s. The upper/lower case letters indicate spin, and we use the convention that upper case letters refer to “alpha” while lower case refer to “beta”.

Also it seems from the output files …

  • The index numbering of the amplitudes refers to the index within a particular orbital space. There are 4 such spaces (occ/vir alpha/beta) and each will be indexed starting from zero.

For closed shell system …

  • Yes, the reason you only see TIA and TIjAb in closed shell calculations is due to symmetries of the amplitudes.

What convention is used for the T2 amplitudes: Do I need to divide these by 2 or by 4…

  • I am not sure what you mean here.

Hope these bits help!

Thanks a lot for your fast and extensive answers. I am still working on my problem but here is an update:

The numbering is clear to me now. I just assume with spin “alpha” and “beta” you refer to spin up or down, so that part is fine now.

I am still going through the book chapter, which is a great reference. I have seen factors of 1, 1/2 or 1/4 in front of the sum in the T2 definitions: T2 = 1/4 Sum_{ijab}t_{abij} a_a^daggger a_b^dagger a_i a_j
In this case the sum is unrestricted so that is where the 1/4 comes from (double counting) and other people write the sum without double counting and hence no prefactor…

My goal is numerically calculate the wavefunction that has the same energy as the cc calculation outputs. Therefore I am trying to understand how to achieve this given the cc amplitudes. (My ultimate goal is to represent this wavefunction on a quantum computer, but that step I will tackle once I can prepare the cc wavefunction classically)

For H2 using 4 basis functions:
The only cc amplitude is
TIjAb Amplitudes:
0 0 0 0 -0.1153404926

I need to work in the spin orbital picture so the hartree fock state is |HF> = | 0 0 1 1> where the lowest two spin orbitals are occupied. In this wavefunction the spin orbitals are ordered from right to left:
|1. spatial orbital spin down, 1. spatial orbital spin up, 0. spatial orbital spin down, 0. spatial orbital spin up>

In my spin orbital numbering below:
0 is 0. spatial orbital spin up (occupied)
1 is 0. spatial orbital spin down (occupied)
2 is 1. spatial orbital spin up (unoccupied)
3 is 1. spatial orbital spin down (unoccupied)

In this case TIjAb = 0 0 0 0 refers to an operator
a_0 a_1 a_2^dagger a_3^dagger
Is this correct?

After a lot trying I constructed the wavefunction
|CC> = exp(0.1153404926 * a_0 a_1 a_2^dagger a_3^dagger) | 0 0 1 1>
Not that I changed the sign of the cc amplitude (why do I need to do that?) and obviously this wavefunction is not normalized anymore. But if I compute the energy and normalize this wavefunction:

average energy = < CC | Hamiltonian | CC > / <CC | CC>

Then I get exactly the same energy as the coupled cluster calculation gave me.

Great. Except for the minus sign everything seems to work but this is not the case when looking at H4 using 8 basis function I get the following cc amplitudes:

TIA Amplitudes:
0 0 -0.0062919007
1 1 0.0030948932

Tia Amplitudes:

TIJAB Amplitudes:

Tijab Amplitudes:

TIjAb Amplitudes:
1 1 0 0 -0.1299315906
0 0 0 0 -0.049109294
0 1 0 1 -0.0468249907
1 0 1 0 -0.0468249907
0 0 1 1 -0.029138475
1 1 1 1 -0.0272126304
0 1 1 0 -0.0240235256
1 0 0 1 -0.0240235256

In this case I didn’t manage so far to construct a wavefunction as in the case above for H2 which has the same energy as the cc calculation. Maybe I am making a mistake or there are signs which I do wrong.

Again I would use the Hartree Fock state | 0 0 0 0 1 1 1 1> and try to apply exp(T) | HF> in order to get a wavefunction:

Again I am using my spin orbital numbering:
In my spin orbital numbering below:
0 is 0. spatial orbital spin up (occupied)
1 is 0. spatial orbital spin down (occupied)
2 is 1. spatial orbital spin up (occupied)
3 is 1. spatial orbital spin down (occupied)
4 is 2. spatial orbital spin up (unoccupied)
5 is 2. spatial orbital spin down (unoccupied)
6 is 3. spatial orbital spin up (unoccupied)
7 is 3. spatial orbital spin down (unoccupied)

A term
TIA Amplitudes:
0 0 -0.0062919007

in my spin orbital notation refers to -0.0062919007 a_0 a_4^dagger so I would add this term to T. Is this the correct sign or is there again a minus sign coming from somewhere?
Do I also have to add -0.0062919007 a_1 a_5^dagger due to symmetry reasons?

Same question arise for the TIjAb terms as I need to understand what exactly the T operator is with the correct signs for each term…

Also I am not sure if this way of generating a wavefunction and then normalizing it should give me a wavefunction which has the energy equal to what the cc calculation outputs…

There’s too much in your message for me to deal with in limited time, but I can offer a few relevant points:

  • The signs on the amplitudes do not matter except that they match with corresponding signs on the one- and two-electron integrals arising from the Hamiltonian. These signs are just phases on the orbitals, and ultimately have no impact on the resulting computation of the energy and other properties.

  • The CC wave function is intermediately normalized, not fully normalized. The leading coefficient in the exponential expansion is 1.

  • The simple CC energy expression is not an expectation value but a projection of the CC Schrödinger equation onto the Hartree-Fock reference.



For the H2 example the sign actually matters for my construction of a wavefunction:
t = 0.1153404926
|CC> = exp(t * a_0 a_1 a_2^dagger a_3^dagger) | 0 0 1 1>
= 1 * | 0 0 1 1 > + t * a_0 a_1 a_2^dagger a_3^dagger | 0 0 1 1>
= 1 * | 0 0 1 1 > + t * | 1 1 0 0 >
The sign of t does influence a relative phase in this superposition and it changes the energy.

Maybe I cannot construct a wavefunction from these cc_amplitudes at all… I will read about the details of coupled cluster and see if I am missing some important points.

How are you computing the energy? If you’re doing so by contracting the
amplitudes with two-electron integrals, then the sign change must also
apply to them. The energy should not change as a result of changing the
phase of an MO.


I have now used the equation in the book chapter to get the energy:

E = < Hartree Fock | exp(-T) H exp(T) | Hartree Fock>

It does work for H2 not for H4 and larger molecules probably due to wrong signs or missing information how to convert cc amplitudes from MO to the proper spin orbitals.

I need to get the T operator in spin orbital picture (still in second quantization) using my numbering. For H2 this works easy as TIjAb 0 0 0 0 in spin orbital picture can only mean that
T = 0.1153404926 a_0 a_1 a_2^dagger a_3^dagger
With some trying I figured out there needs to be a minus sign.

Once I have the T operator in proper spin orbital numbering, I use the Jordan Wigner transformation to map fermions to distinguishable spin 1/2 particles. Hence all creation and annihilation operators transform to sums of tensor products of Pauli Matrices. I can therefore numerically build a matrix representation for T and H and exponentiate the matrix T and apply the energy formula. Yes this is exponentially costly but for small stuff I don’t mind. It gives me a fast and clean way to test if the T operator in second quantization using spin orbital numbering is correct. It is for H2 except the sign. All my hamiltonians are already transformed by Jordan Wigner and fixed. So any wrong sign in T will change the energy…

For H4 I have more difficult TIjAb so I am not sure I am converting them correctly to spin orbital operators, e.g.
0 1 0 1 -0.0468249907

This would mean a term a_0 a_3 a_4^dagger a_7^dagger -0.0468249907

Do I need to add symmetric terms manually? I.e. I can also expect a transition TIJAB and Tijab? Does it mean I need to add the terms
a_0 a_2 a_4^dagger a_6^dagger -0.0468249907
a_1 a_3 a_5^dagger a_7^dagger -0.0468249907

What about the coefficients ? Now I have three terms each with the same strength, do I need to adjust the coefficient by a factor?

H2 worked because a term
TIjAb 0 0 0 0
Can only mean that there is one down and one up electron involved, so I didn’t need to think about adding extra terms.

If your systems are all closed shell, then you don’t need the all alpha and all beta terms. The only unique amplitudes at the CCSD level are the IjAb doubles and IA (or ia) singles.


Thanks. This seems to work but still not perfectly.

With this formula
E = < Hartree Fock | exp(-T) H exp(T) | Hartree Fock>
and only implementing the TIA and TIjAb terms, I can get close to the ccsd energy (error of 10^-2) but even with all my Jordan Wigner transformation everything should still be exact and I should get exactly the ccsd energy. I will try to figure out what goes wrong.

It turned out that I can recover the same cc energy if I add additional terms.

From the TIA terms I just make equal terms for Tia
From the TIjAb terms, I check if such a term can exist in TIJAB or Tijab and if possible, I add this term to TIJAB and Tijab with half the strength of the TIjAb term.

I am struggling to understand the last comment. How do you decide when TIjAb contributes to Tijab or TIJAB? Thanks un advance

Quoting myself from another topic:

This is a very old topic, so unless you have a follow-up, I’m going to lock this topic and invite further discussion to go into a new topic.