# CCDT: Diagrams in the $t_3$ amplitude

This document lists all diagrams entering the $t_3$ equation, as well as the index realignment to perform matrix multiplications.

Notationwise, the operation

$$t^{ab}_{ij} \rightarrow t^{ai}_{bj}$$

indicates a index transformation where we simply align the matrix representation of this tensor in a fashion corresponding to the element order above.

Technically, this means to recalculate the row and column indices of the matrix elements in the COO format (flexmat class). The corresponding code to generate the two different representations of the flexmat object $t_2$ above is

$t^{ab}_{ij}$ = t2.pq_rs()

$t^{ai}_{bj}$ = t2.pr_qs()

From a theoretical point of view, this operation may be interpreted as a generalized transpose for tensors of $rank > 2$.

## The $(t_2 t_3)$ terms

Diagram Label Factor Permutation Index Transform Code translation
$(t_2 t_3)_a$ $+1$ $\hat{P}(i/jk \vert a/bc)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{a d}_{i l}t^{e b c}_{m j k} \rightarrow \sum_{me} \sum_{ld} t^{bjck}_{me} \langle me\vert \vert ld\rangle t^{ld}_{ai}$$ update_as_qtru_ps(t3.qtru_sp() $*$ vhhpp.qs_pr() $*$ t2.sq_pr())
$(t_2 t_3)_b$ $-\frac{1}{2}$ $\hat{P}(i/jk)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{d e}_{l i}t^{a b c}_{m j k} \rightarrow \sum_{m} \sum_{lde} t^{abjck}_{m} \langle m\vert \vert lde\rangle t^{lde}_{i}$$ update_as_pqtru_s(t3.pqtru_s()$*$vhhpp.q_prs()$*$t2.rpq_s())
$(t_2 t_3)_c$ $-\frac{1}{2}$ $\hat{P}(a/bc)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{d a}_{l m}t^{e b c}_{i j k} \rightarrow \sum_{e} \sum_{lmd} t^{ibjck}_{e} \langle e\vert \vert lmd\rangle t^{lmd}_{a}$$ update_as_sqtru_p(t3.sqtru_p()$*$vhhpp.s_pqr()$*$t2.rsp_q())
$(t_2 t_3)_d$ $-\frac{1}{2}$ $\hat{P}(k/ij \vert a/bc)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{a d}_{i j}t^{b e c}_{l m k} \rightarrow \sum_{lme} \sum_{d} t^{bck}_{lme} \langle lme\vert \vert d\rangle t^{d}_{aij}$$ update_as_qru_pst(t3.pru_stq()$*$vhhpp.pqs_r()$*$t2.q_prs())
$(t_2 t_3)_e$ $-\frac{1}{2}$ $\hat{P}(i/jk \vert c/ab)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{a b}_{i l}t^{d e c}_{j m k} \rightarrow \sum_{mde} \sum_{l} t^{jck}_{mde} \langle mde\vert \vert l\rangle t^{l}_{abi}$$ update_as_tru_pqs(t3.sru_tpq()$*$vhhpp.qrs_p()$*$t2.s_pqr())
$(t_2 t_3)_f$ $+\frac{1}{4}$ $\hat{P}(k/ij)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{d e}_{i j}t^{a b c}_{l m k} \rightarrow \sum_{lm} \sum_{de} t^{abck}_{lm} \langle lm\vert \vert de\rangle t^{de}_{ij}$$ update_as_pqru_st(t3.pqru_st()$*$vhhpp.pq_rs()$*$t2.pq_rs())
$(t_2 t_3)_q$ $+\frac{1}{4}$ $\hat{P}(c/ab)$ $$\sum_{ldme} \langle l m \vert \vert d e \rangle t^{a b}_{l m}t^{d e c}_{i j k} \rightarrow \sum_{de} \sum_{lm} t^{ijck}_{de} \langle de\vert \vert lm\rangle t^{lm}_{ab}$$ update_as_stru_pq(t3.stru_pq()$*$vhhpp.rs_pq()$*$t2.rs_pq())

## The $(t_2 t_2)$ terms

These are incorrectly generated due to unconnected lines in the interaction, so they are not yet ready for implementation.

Special attention will need to be given to the antisymmetric elements in the multiplication.

Diagram Label Factor Permutation Index Transform Code translation
$(t_2 t_2)_a$ $-1$ $\hat{P}(k/ij \vert a/bc)$ $$\sum_{ld} \langle l \vert f \vert d \rangle t^{a d}_{i j}t^{b c}_{l k} \rightarrow \sum_{l} \sum_{d} t^{bck}_{l} \langle l\vert f \vert d\rangle t^{d}_{aij} = 0$$ (canonical HF basis) $\rightarrow$ no contribution
$(t_2 t_2)_b$ $+1$ $\hat{P}(i/jk \vert abc)$ $$\sum_{lde} \langle l b \vert \vert d e \rangle t^{a d}_{i l}t^{e c}_{j k} \rightarrow \sum_{ld} \sum_{e} (t^{ai}_{ld} \langle ld\vert \vert be\rangle)^{aib}_e t^{e}_{cjk}$$ update_as_psq_rtu(t2.pr_sq()$*$vhppp.pr_qs()$*$t2.p_qrs())
$(t_2 t_2)_c$ $-\frac{1}{2}$ $\hat{P}(i/jk \vert c/ab)$ $$\sum_{ldce} \langle l c \vert \vert d e \rangle t^{a b}_{i l}t^{d e}_{j k} \rightarrow \sum_{de} \sum_{l} (t^{jk}_{de} \langle de\vert \vert lc\rangle)^{jkc}_l t^{l}_{abi}$$ update_as_tur_pqs(t2.rs_pq()$*$vhppp.rs_pq()$*$t2.s_pqr())
$(t_2 t_2)_d$ $+\frac{1}{2}$ $\hat{P}(k/ij \vert a/bc)$ $$\sum_{ldmk} \langle l m \vert \vert d k \rangle t^{a d}_{i j}t^{b c}_{l m} \rightarrow \sum_{lm} \sum_{d} (t^{bc}_{lm} \langle lm\vert \vert dk\rangle)^{bck}_d t^{d}_{aij}$$ update_as_qru_pst(t2.pq_rs()$*$vhhph.pq_rs()$*$t2.q_prs())

The problem of unconnected lines leaving the interaction may be solved by performing the multiplication and alignment in three steps:

1. Align and multiply inside paranthesis.
2. Align the resulting product to the final amplitude and multiply.
3. Align the resulting product to the amplitudes.

## The "pure" $t_3$ terms

Diagram Label Factor Permutation Index Transform Code translation
$(t_3)_a$ $+\frac{1}{2}$ $\hat{P}(c/ab)$ $$\sum_{de} \langle ab \vert \vert de \rangle t^{dec}_{ijk} \rightarrow \sum_{de} \langle ab \vert \vert de \rangle t^{de}_{cijk}$$ update_as_pq_rstu(vpppp.pq_rs() $*$ t3.pq_rstu())
$(t_3)_b$ $+\frac{1}{2}$ $\hat{P}(k/ij)$ $$\sum_{lm} \langle lm \vert \vert ij \rangle t^{abc}_{lmk} \rightarrow \sum_{lm} t^{abck}_{lm} \langle lm \vert \vert ij \rangle$$ update_as_pqru_st(t3.pqrs_tu()$*$ vphhp.pq_rs())
$(t_3)_c$ $+1$ $\hat{P}(i/jk \vert a/bc)$ $$\sum_{ld} \langle al \vert \vert id \rangle t^{dbc}_{ljk} \rightarrow \sum_{ld} \langle ai \vert \vert ld \rangle t^{ld}_{bcjk}$$ update_as_ps_qrtu(vphhp.pr_qs() $*$ t3.sp_qrtu())

The diagram $(t_3)_a$ includes the ladder operator from $\hat{V}$, so it will have to be calulcated using some block scheme.

## The "pure" $t_2$ terms

Diagram Label Factor Permutation Index Transform Code translation
$(t_2)_a$ $+1$ $\hat{P}(k/ij \vert a/bc)$ $$\sum_{d} \langle bc \vert \vert dk \rangle t^{ad}_{ij} \rightarrow \sum_d \langle bck \vert \vert d \rangle t^d_{aij}$$ update_as_qru_pst(vppph.pqs_r() $*$ t2.q_prs())
$(t_2)_b$ $-1$ $\hat{P}(i/jk \vert c/ab)$ $$\sum_{l} \langle lc \vert \vert jk \rangle t^{ab}_{il} \rightarrow \sum_l t^{abi}_{l} \langle l \vert \vert cjk \rangle$$ update_as_pqs_rtu(t2.pqr_s() $*$ vhphh.p_qrs() )

# Implementation

Finally we state the basic implementation of the t3 amplitude equation. Tables is separated by horizontal lines.

Note that permutations are not yet included.

t2t3a.update_as_qtru_ps(t3.qtru_sp()$*$vhhpp.qs_pr()$*$t2.sq_pr())

t2t3b.update_as_pqtru_s(t3.pqtru_s()$*$vhhpp.q_prs()$*$t2.rpq_s())

t2t3c.update_as_sqtru_p(t3.sqtru_p()$*$vhhpp.s_pqr()$*$t2.rsp_q())

t2t3d.update_as_qru_pst(t3.pru_stq()$*$vhhpp.pqs_r()$*$t2.q_prs())

t2t3e.update_as_tru_pqs(t3.sru_tpq()$*$vhhpp.qrs_p()$*$t2.s_pqr())

t2t3f.update_as_pqru_st(t3.pqru_st()$*$vhhpp.pq_rs()$*$t2.pq_rs())

t2t3g.update_as_stru_pq(t3.stru_pq()$*$vhhpp.rs_pq()$*$t2.rs_pq())

t2t2b.update_as_psq_rtu(t2.pr_sq()$*$vhppp.pr_qs()$*$t2.p_qrs())

t2t2c.update_as_tur_pqs(t2.rs_pq()$*$vhppp.rs_pq()$*$t2.s_pqr())

t2t2d.update_as_qru_pst(t2.pq_rs()$*$vhhph.pq_rs()$*$t2.q_prs())

t3a.update_as_pq_rstu(vpppp.pq_rs() $*$ t3.pq_rstu())

t3b.update_as_pqru_st(t3.pqrs_tu()$*$ vphhp.pq_rs())

t3c.update_as_ps_qrtu(vphhp.pr_qs() $*$ t3.sp_qrtu())

t2a.update_as_qru_pst(vppph.pqs_r() $*$ t2.q_prs())

t2b.update_as_pqs_rtu(t2.pqr_s() $*$ vhphh.p_qrs() )

# CCDT: Diagrams in the $t_2$ amplitude

Actually, the inclusion of tripes will only result in three extra terms in the doubles equation, and we may even remove the first due to the fact that we use a canonical HF basis where $f$ is diagonal.

$$D_{CCD} + \sum_{me} f^m_e t^{abe}_{ijm} + \frac{1}{2} \hat{P}(ab) \sum_{mef} \langle bm \vert \vert ef \rangle t^{aef}_{ijm} - \frac{1}{2}\hat{P}(ij) \sum_{mne} \langle mn \vert \vert je \rangle t^{abe}_{imn} = 0$$

The terms we need to include in the $t_2$ equation is then (labelling as in Shavitt and Bartlett):

Diagram Label Factor Permutation Index Transform Code translation
$D_{10b}$ $+\frac{1}{2}$ $\hat{P}(ab)$ $$\sum_{mef} \langle bm \vert \vert ef \rangle t^{aef}_{ijm} \rightarrow (\sum_{mef} \langle b \vert \vert mef \rangle t^{mef}_{ija})^{ab}_{ij}$$ update_as_q_rsp(vphpp.p_qrs() $*$ t3.uqr_stp() )
$D_{10c}$ $-\frac{1}{2}$ $\hat{P}(ij)$ $$\sum_{mne} \langle mn \vert \vert je \rangle t^{abe}_{imn} \rightarrow (\sum_{mne} t^{abi}_{mne} \langle mne \vert \vert j \rangle)^{ab}_{ij}$$ update_as_pqr_s(t3.pqs_tur() $*$ vhhhp.pqs_r())


In [ ]: