2021-04-24 21:23:53 +02:00
\documentclass [aspectratio=169,9pt] { beamer}
% ***********
% * PACKAGE *
% ***********
\usepackage { amsmath,amssymb,amsfonts,pgfpages,graphicx,subfigure,xcolor,bm,multirow,microtype,wasysym,multimedia,hyperref,tabularx,amscd,pgfgantt,mhchem}
\usetikzlibrary { shapes.gates.logic.US,trees,positioning,arrows}
\usetheme { Pittsburgh}
\usecolortheme { seahorse}
\usepackage { mathpazo,libertine}
\usepackage { algorithmicx,algorithm,algpseudocode}
\algnewcommand \algorithmicassert { \texttt { assert} }
\algnewcommand \Assert [1] { \State \algorithmicassert (#1)}
%\algrenewcommand{\algorithmiccomment}[1]{$\triangleright$ #1}
%\usepackage[version=4]{mhchem}
\usepackage { amsmath,amsfonts,amssymb,bm,microtype,graphicx,wrapfig,geometry,physics,eurosym,multirow,pgfgantt}
\usepackage { hyperref}
\hypersetup {
colorlinks=true,
linkcolor=cyan,
filecolor=magenta,
urlcolor=blue,
citecolor=purple
}
% operators
\newcommand { \hI } { \Hat { 1} }
\newcommand { \hH } { \Hat { H} }
\newcommand { \hT } [2]{ \Hat { T} _ { #1} ^ { #2} }
\newcommand { \bH } { \mathbold { H} }
\newcommand { \br } { \mathbold { r} }
\newcommand { \la } { \lambda }
\newcommand { \si } { \sigma }
\newcommand { \cJ } { \mathcal { J} }
\newcommand { \cK } { \mathcal { K} }
% wave functions
\newcommand { \PsiO } { \Psi _ 0}
\newcommand { \PsiHF } { \Psi _ \text { RHF} }
\newcommand { \PsiFCI } { \Psi _ \text { FCI} }
\newcommand { \PsiCC } { \Psi _ \text { CC} }
\newcommand { \PsiCCD } { \Psi _ \text { CCD} }
\newcommand { \amp } [2]{ t_ { #1} ^ { #2} }
\newcommand { \Det } [2]{ \Psi _ { #1} ^ { #2} }
% energies
\newcommand { \EHF } { E_ \text { HF} }
\newcommand { \EO } { E_ \text { 0} }
\newcommand { \ECC } { E_ \text { CC} }
\newcommand { \EVCC } { E_ \text { VCC} }
\newcommand { \ECCD } { E_ \text { CCD} }
\newcommand { \nEl } { n}
\newcommand { \nBas } { N}
\newcommand { \ba } { \bm { a} }
\newcommand { \bb } { \bm { b} }
\newcommand { \bA } { \bm { A} }
\newcommand { \bB } { \bm { B} }
\newcommand { \bo } { \bm { 0} }
\newcommand { \sbra } [1]{ [ #1 |}
\newcommand { \sket } [1]{ | #1 ]}
\newcommand { \sexpval } [1]{ [ #1 ]}
\newcommand { \sbraket } [2]{ [ #1 | #2 ]}
\newcommand { \smel } [3]{ [ #1 | #2 | #3 ]}
\definecolor { darkgreen} { RGB} { 0, 180, 0}
\definecolor { fooblue} { RGB} { 0,153,255}
\definecolor { fooyellow} { RGB} { 234,187,0}
\definecolor { lavender} { rgb} { 0.71, 0.49, 0.86}
\definecolor { inchworm} { rgb} { 0.7, 0.93, 0.36}
\newcommand { \violet } [1]{ \textcolor { lavender} { #1} }
\newcommand { \orange } [1]{ \textcolor { orange} { #1} }
\newcommand { \purple } [1]{ \textcolor { purple} { #1} }
\newcommand { \blue } [1]{ \textcolor { blue} { #1} }
\newcommand { \green } [1]{ \textcolor { darkgreen} { #1} }
\newcommand { \yellow } [1]{ \textcolor { fooyellow} { #1} }
\newcommand { \red } [1]{ \textcolor { red} { #1} }
\newcommand { \highlight } [1]{ \textcolor { fooblue} { #1} }
\newcommand { \pub } [1]{ \small \textcolor { purple} { #1} }
\newcommand { \mc } { \multicolumn }
\newcommand { \mycirc } [1][black]{ \Large \textcolor { #1} { \ensuremath \bullet } }
\usepackage { tikz}
\usetikzlibrary { arrows,positioning,shapes.geometric}
\usetikzlibrary { decorations.pathmorphing}
\tikzset { snake it/.style={
decoration={ snake,
amplitude = .4mm,
segment length = 2mm} ,decorate} }
% *************
% * HEAD DATA *
% *************
\title [HF and post-HF methods] {
\purple { Hartree-Fock and post-Hartree-Fock methods: \\
Computational aspects}
}
\author [PF Loos] { Pierre-Fran\c { c} ois LOOS}
\date { Online ISTPC 2021 school --- April 27th, 2021}
\institute [CNRS@LCPQ] {
Laboratoire de Chimie et Physique Quantiques (UMR 5626),\\
Universit\' e de Toulouse, CNRS, UPS, Toulouse, France.
}
\titlegraphic {
\includegraphics [width=0.3\textwidth] { fig/peppa}
\\
\vspace { 0.05\textheight }
\includegraphics [height=0.05\textwidth] { fig/UPS}
\hspace { 0.2\textwidth }
\includegraphics [height=0.05\textwidth] { fig/ERC}
\hspace { 0.2\textwidth }
\includegraphics [height=0.05\textwidth] { fig/LCPQ}
\hspace { 0.2\textwidth }
\includegraphics [height=0.05\textwidth] { fig/CNRS}
}
\begin { document}
%%% SLIDE 1 %%%
\begin { frame}
\titlepage
\end { frame}
%
%%% SLIDE 2 %%%
\begin { frame} { Today's program}
\begin { itemize}
\item How to perform a Hartree-Fock (HF) calculation in practice?
\begin { itemize}
\item Computation of integrals \pub { [Ahlrichs, PCCP 8 (2006) 3072]}
\item Orthogonalization matrix \pub { [Szabo \& Ostlund, Modern Quantum Chemistry]}
\item Construction of the Coulomb matrix \pub { [White \& Head-Gordon, JCP 104 (1996) 2620]}
\item Resolution of the identity \pub { [Weigend et al. JCP 130 (2009) 164106]}
\item DFT exchange via quadrature \pub { [Becke, JCP 88 (1988) 2547]}
\end { itemize}
\bigskip
\item Computing the 2th-order M{ \o } ller-Plesset (MP2) correlation energy
\begin { itemize}
\item Atomic orbital (AO) to molecular orbital (MO) transformation \pub { [Frisch et al. CPL 166 (1990) 281]}
\item Laplace transform \pub { [Alml{ \" o} f, CPL 181 (1991) 319]}
\end { itemize}
\bigskip
\item Coupled cluster with doubles (CCD)
\begin { itemize}
\item Introduction to CC methods \pub { [Shavitt \& Bartlett, \textit { ``Many-Body Methods in Chemistry and Physics: MBPT and Coupled-Cluster Theory''} ]}
\item Algorithm to compute the CCD energy \pub { [Pople et al. IJQC 14 (1978) 545]}
\end { itemize}
\end { itemize}
\end { frame}
%%% SLIDE X %%%
\begin { frame} { How to perform a HF calculation in practice?}
\begin { columns}
\begin { column} { 0.7\textwidth }
\begin { block} { The SCF algorithm (p.~146)}
\begin { enumerate}
\item \orange { Specify molecule} $ \{ \br _ A \} $ and $ \{ Z _ A \} $ and \violet { basis set} $ \{ \phi _ \mu \} $
\item Calculate integrals $ S _ { \mu \nu } $ , $ H _ { \mu \nu } $ and $ \langle \mu \nu | \lambda \sigma \rangle $
\item Diagonalize $ \bm { S } $ and compute $ \bm { X } = \bm { S } ^ { - 1 / 2 } $
\item Obtain \alert { guess density matrix} for $ \bm { P } $
\begin { enumerate}
\item [1.] Calculate $ \bm { J } $ and $ \bm { K } $ , then $ \bm { F } = \bm { H } + \bm { J } + \bm { K } $
\item [2.] Compute $ \bm { F } ' = \bm { X } ^ \dag \cdot \bm { F } \cdot \bm { X } $
\item [3.] Diagonalize $ \bm { F } ' $ to obtain $ \bm { C } ' $ and $ \bm { E } $
\item [4.] Calculate $ \bm { C } = \bm { X } \cdot \bm { C } ' $
\item [5.] Form a \blue { new density matrix} $ \bm { P } = \bm { C } \cdot \bm { C } ^ \dag $
\item [6.] \alert { Am I converged?} If not go back to 1.
\end { enumerate}
\item Calculate stuff that you want, like $ E _ \text { HF } $ for example
\end { enumerate}
\end { block}
\end { column}
\begin { column} { 0.3\textwidth }
\includegraphics [width=\textwidth] { fig/Szabo}
\end { column}
\end { columns}
\end { frame}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin { frame} { One- and two-electron integrals}
2021-04-27 21:37:10 +02:00
\begin { columns}
\begin { column} { 0.7\textwidth }
\begin { block} { One-electron integrals: overlap \& core Hamiltonian (Appendix A)}
\begin { equation}
S_ { \mu \nu }
= \braket { \mu } { \nu }
= \int \phi _ \mu (\orange { \br } ) \phi _ \nu (\orange { \br } ) d\orange { \br }
\end { equation}
\begin { equation}
H_ { \mu \nu }
= \mel { \mu } { \hH ^ \text { c} } { \nu }
= \int \phi _ \mu (\orange { \br } ) \hH ^ \text { c} (\orange { \br } ) \phi _ \nu (\orange { \br } ) d\orange { \br }
\end { equation}
\end { block}
\end { column}
\begin { column} { 0.3\textwidth }
\includegraphics [width=\textwidth] { fig/SBG}
\end { column}
\end { columns} \begin { block} { Chemist/Mulliken notation for two-electron integrals (p.~68)}
2021-04-24 21:23:53 +02:00
\begin { equation}
( \mu \nu | \lambda \sigma )
= \iint \phi _ \mu (\alert { \br _ 1} ) \phi _ \nu (\alert { \br _ 1} ) \frac { 1} { r_ { 12} } \phi _ \lambda (\blue { \br _ 2} ) \phi _ \sigma (\blue { \br _ 2} ) d\red { \br _ 1} d\blue { \br _ 2}
\end { equation}
\begin { equation}
( \mu \blue { \nu } \orange { ||} \lambda \red { \sigma } ) = ( \mu \blue { \nu } | \lambda \red { \sigma } ) - ( \mu \red { \sigma } | \lambda \blue { \nu } )
\end { equation}
\end { block}
\begin { block} { Physicist/Dirac notation for two-electron integrals (p.~68)}
\begin { equation}
\langle \mu \nu | \lambda \sigma \rangle
= \iint \phi _ \mu (\alert { \br _ 1} ) \phi _ \nu (\blue { \br _ 2} ) \frac { 1} { r_ { 12} } \phi _ \lambda (\alert { \br _ 1} ) \phi _ \sigma (\blue { \br _ 2} ) d\red { \br _ 1} d\blue { \br _ 2}
\end { equation}
\begin { equation}
\langle \mu \nu \orange { ||} \blue { \lambda } \red { \sigma } \rangle = \langle \mu \nu | \blue { \lambda } \red { \sigma } \rangle - \langle \mu \nu | \red { \sigma } \blue { \lambda } \rangle
\end { equation}
\end { block}
\end { frame}
\begin { frame} { Computing the electron repulsion integrals (ERIs)}
\begin { columns}
\begin { column} { 0.7\textwidth }
\begin { block} { Four-center two-electron integrals}
\small
\begin { equation}
\begin { split}
\braket { \ba _ 1\ba _ 2} { \bb _ 1\bb _ 2}
2021-04-26 07:14:04 +02:00
& \equiv \mel { \ba _ 1\ba _ 2} { \alert { r_ { 12} ^ { -1} } } { \bb _ 1\bb _ 2}
2021-04-24 21:23:53 +02:00
\\
& = \iint \phi _ { \ba _ 1} ^ { \bA _ 1} (\br _ 1) \phi _ { \ba _ 2} ^ { \bA _ 2} (\br _ 2) \, \alert { \frac { 1} { r_ { 12} } } \,
\phi _ { \bb _ 1} ^ { \bB _ 1} (\br _ 1) \phi _ { \bb _ 2} ^ { \bB _ 2} (\br _ 2) d\br _ 1 d\br _ 2
\end { split}
\end { equation}
2021-04-27 21:37:10 +02:00
\alert { Formally, one has to compute $ \order { N ^ 4 } $ ERIs!}
2021-04-24 21:23:53 +02:00
\end { block}
2021-04-26 07:14:04 +02:00
\end { column}
\begin { column} { 0.3\textwidth }
2021-04-27 21:37:10 +02:00
\includegraphics [width=\textwidth] { fig/STO}
2021-04-26 07:14:04 +02:00
\end { column}
\end { columns}
2021-04-24 21:23:53 +02:00
%
\begin { block} { Gaussian-type orbital (GTO)}
\small
\begin { align*}
\text { \violet { Contracted} GTO} & = \ket { \ba }
\equiv \phi _ { \ba } ^ { \bA } (\br )
= \sum _ k^ K D_ k \sket { \ba } _ k
\\
\text { \blue { Primitive} GTO} & = \sket { \ba }
= (x-A_ x)^ { a_ x} (y-A_ y)^ { a_ y} (z-A_ z)^ { a_ z} e^ { -\alpha \abs { \br -\bA } ^ 2}
\end { align*}
\end { block}
2021-04-26 07:14:04 +02:00
\begin { itemize}
\item \textbf { \purple { Exponent:} } $ \alpha $
\item \textbf { \purple { Center:} } $ \bA = ( A _ x, A _ y, A _ z ) $
\item \textbf { \purple { Angular momentum:} } $ \ba = ( a _ x, a _ y, a _ z ) $ and total angular momentum $ a = a _ x + a _ y + a _ z $
\end { itemize}
2021-04-24 21:23:53 +02:00
%
\end { frame}
\begin { frame} { The contraction problem}
\begin { columns}
\begin { column} { 0.7\textwidth }
\begin { block} { Primitive vs Contracted}
\begin { itemize}
\item Same center $ \bA $
\item Same angular momentum $ \ba $
\item Different exponent $ \violet { \alpha _ k } $
2021-04-26 07:14:04 +02:00
\item Contraction coefficient $ \blue { D _ k } $ and degree $ K $
2021-04-24 21:23:53 +02:00
\end { itemize}
\begin { equation}
\underbrace { \braket { \ba _ 1\ba _ 2} { \bb _ 1\bb _ 2} } _ { \text { \green { contracted ERI} } }
= \sum _ { k_ 1} ^ { K_ 1} \sum _ { k_ 2} ^ { K_ 2} \sum _ { k_ 3} ^ { K_ 3} \sum _ { k_ 4} ^ { K_ 4}
\blue { D_ { k_ 1} D_ { k_ 2} D_ { k_ 3} D_ { k_ 4} }
\underbrace { \sbraket { \ba _ { 1,k_ 1} \ba _ { 2,k_ 2} } { \bb _ { 1,k_ 3} \bb _ { 2,k_ 4} } } _ { \text { \red { primitive ERI} } }
\end { equation}
\centering
\green { One} contracted ERI required \red { $ K _ 1 \times K _ 2 \times K _ 3 \times K _ 4 $ } primitive ERIs!
\end { block}
\begin { block} { Dunning's cc-pVTZ basis for the carbon atom}
\begin { equation}
\green { \braket { 1s1s} { 1s1s} }
= \sum _ { k_ 1} ^ { 10} \sum _ { k_ 2} ^ { 10} \sum _ { k_ 3} ^ { 10} \sum _ { k_ 4} ^ { 10}
\blue { D_ { k_ 1} D_ { k_ 2} D_ { k_ 3} D_ { k_ 4} }
\red { \sbraket { s_ { k_ 1} ^ { \violet { \alpha _ { k_ 1} } } s_ { k_ 2} ^ { \violet { \alpha _ { k_ 2} } } } { s_ { k_ 3} ^ { \violet { \alpha _ { k_ 3} } } s_ { k_ 4} ^ { \violet { \alpha _ { k_ 4} } } } }
\end { equation}
\centering
The $ \green { \braket { 1 s 1 s } { 1 s 1 s } } $ integral requires $ 10 ^ 4 $ \red { $ s $ -type integrals} !
\end { block}
\end { column}
\begin { column} { 0.3\textwidth }
\begin { equation}
\boxed { \green { \ket { \ba } } = \sum _ k^ K \blue { D_ k} \red { \sket { \ba _ k} } }
\end { equation}
\\
\bigskip
\begin { block} { https://www.basissetexchange.org}
\bigskip
\centering
\includegraphics [width=\textwidth] { fig/C}
\end { block}
\end { column}
\end { columns}
\end { frame}
%%% SLIDE X %%%
\begin { frame} { Properties of Gaussian functions}
\begin { block} { Gaussian product rule: \textit { ``The product of two gaussians is a gaussian''} }
\begin { equation}
G_ { \red { \alpha } ,\red { \bm { A} } } (\br ) = \exp (-\red { \alpha } \abs { \br - \red { \bA } } ^ 2)
\qqtext { and}
G_ { \blue { \beta } ,\blue { \bm { B} } } (\br ) = \exp (-\blue { \beta } \abs { \br - \blue { \bB } } ^ 2)
\qqtext { then}
\end { equation}
\begin { equation}
2021-04-27 21:37:10 +02:00
\boxed { G_ { \red { \alpha } ,\red { \bm { A} } } (\br ) G_ { \blue { \beta } ,\blue { \bm { B} } } (\br ) = \violet { K} \, G_ { \violet { \zeta } ,\violet { \bm { P} } } (\br )}
2021-04-24 21:23:53 +02:00
\qqtext { with}
\violet { \zeta } = \red { \alpha } + \blue { \beta }
\qqtext { and}
\violet { \bm { P} } = \frac { \red { \alpha \bA } + \blue { \beta \bB } } { \red { \alpha } + \blue { \beta } }
\end { equation}
\begin { equation}
2021-04-27 21:37:10 +02:00
\violet { K} = \exp ( -\frac { \red { \alpha } \blue { \beta } } { \red { \alpha } + \blue { \beta } } \abs { \red { \bA } - \blue { \bB } } ^ 2)
2021-04-24 21:23:53 +02:00
\end { equation}
\end { block}
\begin { block} { Gaussian product rule for ERIs}
\begin { equation}
\begin { split}
(\bm { \red { a} } \bm { \blue { b} } |\bm { \orange { c} } \bm { \green { d} } )
& = \iint G_ { \red { \alpha } ,\red { \bm { A} } } (\br _ 1) G_ { \blue { \beta } ,\blue { \bm { B} } } (\br _ 1) \frac { 1} { r_ { 12} } G_ { \orange { \gamma } ,\orange { \bm { C} } } (\br _ 2) G_ { \green { \delta } ,\green { \bm { D} } } (\br _ 2) d\br _ 1 d\br _ 2
\\
2021-04-27 21:37:10 +02:00
& = \violet { K} \purple { K} \iint G_ { \violet { \zeta } ,\violet { \bm { P} } } (\br _ 1) \frac { 1} { r_ { 12} } G_ { \purple { \eta } ,\purple { \bm { Q} } } (\br _ 2) d\br _ 1 d\br _ 2
2021-04-24 21:23:53 +02:00
\end { split}
\end { equation}
2021-04-27 21:37:10 +02:00
\alert { The number of ``significant'' ERIs in a large system is $ \order { N ^ 2 } $ !}
2021-04-24 21:23:53 +02:00
\end { block}
\end { frame}
%
\begin { frame} { Upper bounds for ERIs}
2021-04-26 07:14:04 +02:00
\begin { columns}
\begin { column} { 0.35\textwidth }
\begin { block} { A ``good'' upper bound must be}
\begin { itemize}
\item tight (i.e., a good estimate)
\item simple (i.e, cheap to compute)
\end { itemize}
\end { block}
\end { column}
\begin { column} { 0.65\textwidth }
\begin { equation}
\boxed { \abs { (\bm { \red { a} } \bm { \blue { b} } |\bm { \orange { c} } \bm { \green { d} } )} \le B}
\end { equation}
\end { column}
\end { columns}
\bigskip
2021-04-24 21:23:53 +02:00
\begin { block} { Cauchy-Schwartz bound}
\begin { equation}
\abs { (\bm { \red { a} } \bm { \blue { b} } |\bm { \orange { c} } \bm { \green { d} } )}
\le
\sqrt { (\bm { \red { a} } \bm { \blue { b} } |\bm { \red { a} } \bm { \blue { b} } )}
\sqrt { (\bm { \orange { c} } \bm { \green { d} } |\bm { \orange { c} } \bm { \green { d} } )}
\qqtext { or}
\abs { (\bm { \violet { P} } |\bm { \purple { Q} } )}
\le
\sqrt { (\bm { \violet { P} } |\bm { \violet { P} } )}
\sqrt { (\bm { \purple { Q} } |\bm { \purple { Q} } )}
\end { equation}
\end { block}
\begin { block} { The family of generalized H\" older bounds}
\begin { equation}
\abs { (\bm { \red { a} } \bm { \blue { b} } |\bm { \orange { c} } \bm { \green { d} } )}
\le
\qty [ (\bm{\red{a}} \bm{\blue{b}}|\bm{\red{a}} \bm{\blue{b}}) ] ^ { 1/\purple { m} }
\qty [ (\bm{\orange{c}} \bm{\green{d}}|\bm{\orange{c}} \bm{\green{d}}) ] ^ { 1/\violet { n} }
\qqtext { with}
\frac { 1} { \purple { m} } + \frac { 1} { \violet { n} } = 1
\qqtext { and}
\purple { m} ,\violet { n} > 1
\end { equation}
\end { block}
\end { frame}
\begin { frame} { Asymptotic scaling of two-electron integrals}
2021-04-26 07:14:04 +02:00
\begin { block} { Number of significant two-electron integrals}
2021-04-24 21:23:53 +02:00
\begin { equation}
2021-04-26 07:14:04 +02:00
(\bm { \red { a} } \bm { \blue { b} } |\bm { \orange { c} } \bm { \green { d} } ) \equiv (\bm { \red { a} } \bm { \blue { b} } | \mathcal { O} _ 2 | \bm { \orange { c} } \bm { \green { d} } )
\end { equation}
\end { block}
\bigskip
\begin { block} { Long-range vs short-range operators}
\begin { equation}
N_ \text { sig} = c\, N^ { \alpha }
2021-04-24 21:23:53 +02:00
\end { equation}
\center
\begin { tabular} { lcrccrc}
\hline
\hline
Molecule & $ N $ & \mc { 2} { c} { \red { $ \mathcal { O } _ 2 = r _ { 12 } ^ { - 1 } $ } } & & \mc { 2} { c} { \orange { $ \mathcal { O } _ 2 = e ^ { - \la r _ { 12 } ^ 2 } $ ($ \la = 1 $ )} } \\
\cline { 3-4} \cline { 6-7}
& & \mc { 1} { c} { $ N _ \text { sig } $ } & $ \alpha $ & & \mc { 1} { c} { $ N _ \text { sig } $ } & $ \alpha $ \\
\hline
propene & 12 & 1\, 625 & --- & & 1\, 650 & --- \\
butadiene & 16 & 5\, 020 & 3.9 & & 5\, 020 & 3.9 \\
hexatriene & 24 & 24\, 034 & 3.9 & & 23\, 670 & 3.8 \\
octatetraene & 32 & 63\, 818 & 3.4 & & 52\, 808 & 2.8 \\
decapentaene & 40 & 119\, 948 & 2.8 & & 81\, 404 & 1.9 \\
dodecaexaene & 48 & 192\, 059 & 2.6 & & 109\, 965 & 1.6 \\
\hline
\hline
\end { tabular}
\bigskip
\end { block}
\end { frame}
\begin { frame} { Recipe for computing two-electron integrals}
\center
\begin { tikzpicture}
\begin { scope} [very thick,
node distance=4cm,on grid,>=stealth',
boxRR/.style={ rectangle,draw,fill=green!40} ,
boxUB/.style={ rectangle,draw,fill=orange!40} ,
boxFI/.style={ rectangle,draw,fill=red!40} ,
integral/.style={ rectangle,draw,fill=violet!40} ],
\node [integral, align=center] (1) { \textbf { The cake:} \\ Two-electron integrals \\ $ \braket { \ba _ 1 \ba _ 2 } { \bb _ 1 \bb _ 2 } $ } ;
\node [boxUB, align=center] (2A) [below=of 1] { \textbf { Ingredient number 2:} \\ Recurrence relations \\ $ \expval * { \ba _ 1 ^ + } = \expval * { \ba _ 1 } + \expval * { \ba _ 1 ^ - } $ } ;
\node [boxRR, align=center] (2B) [right=of 2A] { \textbf { Ingredient number 3:} \\ Upper bounds \\ $ \abs { \braket { \ba _ 1 \ba _ 2 } { \bb _ 1 \bb _ 2 } } \le B $ } ;
\node [boxFI, align=center] (2C) [left=of 2A] { \textbf { Ingredient number 1:} \\ Fundamental integrals \\ $ \braket { \bo \bo } { \bo \bo } ^ { \bm { m } } $ } ;
\path
(1) edge [<-] (2A)
(1) edge [<-,bend right] (2B)
(1) edge [<-,bend left] (2C)
;
\end { scope}
\end { tikzpicture}
\end { frame}
\begin { frame} { Late-contraction path algorithm (Head-Gordon-Pople \& PRISM inspired)}
2021-04-26 07:14:04 +02:00
\begin { tikzpicture}
\begin { scope} [
very thick,
node distance=1.5cm,on grid,>=stealth',
boxSP/.style={ rectangle,draw,fill=purple!40} ,
box0m/.style={ rectangle,draw,fill=red!40} ,
boxCm/.style={ rectangle,draw,fill=gray!40} ,
boxA/.style={ rectangle,draw,fill=red!40} ,
boxAA/.style={ rectangle,draw,fill=red!40} ,
boxAAA/.style={ rectangle,draw,fill=red!40} ,
boxC/.style={ rectangle,draw,fill=gray!40} ,
boxCC/.style={ rectangle,draw,fill=gray!40} ,
boxCCC/.style={ rectangle,draw,fill=orange!40} ,
boxCCCCCC/.style={ rectangle,draw,fill=green!40} ,
],
\node [boxSP, align=center] (SP) { Shell-pair \\ data} ;
\node [box0m, align=center] (0m) [right=of 1,xshift=1.25cm] { $ \sbraket { 00 } { 00 } ^ { \bm { m } } $ } ;
\node [boxCm, align=center] (Cm) [right=of 0m,xshift=1.75cm] { $ \braket { 00 } { 00 } ^ { \bm { m } } $ } ;
\node [boxA, align=center] (A) [below=of 0m] { $ \sbraket { 0 a _ 2 } { 00 } ^ { \bm { m } } $ } ;
\node [boxC, align=center] (C) [right=of A,xshift=1.75cm] { $ \braket { 0 a _ 2 } { 00 } ^ { \bm { m } } $ } ;
\node [boxAA, align=center] (AA) [below=of A] { $ \sbraket { a _ 1 a _ 2 } { 00 } $ } ;
\node [boxCC, align=center] (CC) [right=of AA,xshift=1.75cm] { $ \braket { a _ 1 a _ 2 } { 00 } $ } ;
\node [boxCCCCCC, align=center] (CCCC) [right=of CC,xshift=2cm] { $ \braket { a _ 1 a _ 2 } { b _ 1 b _ 2 } $ } ;
\path
(SP) edge[->] node[below,blue]{ T$ _ 0 $ } (0m)
(0m) edge[->] node[left,orange]{ T$ _ 1 $ } node [right,red]{ VRR$ _ 1 $ } (A)
(0m) edge[->,gray!70] (Cm)
(A) edge[->] node[left,orange]{ T$ _ 2 $ } node [right,red]{ VRR$ _ 2 $ } (AA)
(A) edge[->,gray!70] (C)
(AA) edge[->] node [below,blue]{ CC} (CC)
(Cm) edge[->,gray!70] (C)
(C) edge[->,gray!70] (CC)
(CC) edge[->] node [above,orange]{ T$ _ 3 $ } node [below,red]{ HRR} (CCCC)
;
\end { scope}
\end { tikzpicture}
\bigskip
\begin { itemize}
\item \red { HRR} = horizontal recurrence relation [Obara-Saika]
\item \red { VRR} = vertical recurrence relation
\item \blue { CC} = bra contraction
\end { itemize}
2021-04-24 21:23:53 +02:00
\end { frame}
%\begin{frame}{Screening algorithm for two-electron integrals}
%
%\resizebox{\textwidth}{!}{
%\begin{tikzpicture}
% \begin{scope}[very thick,
% node distance=2.5cm,on grid,>=stealth',
% bound2/.style={diamond,draw,fill=blue!40},
% bound4/.style={diamond,draw,fill=blue!40},
% bound6/.style={diamond,draw,fill=blue!40},
% shell/.style={circle,draw,fill=green!40},
% shellpair/.style={circle,draw,fill=green!40},
% shellquartet/.style={circle,draw,fill=green!40},
% shell1/.style={rectangle,draw,fill=yellow!40},
% shell2/.style={rectangle,draw,fill=orange!40},
% shell3/.style={rectangle,draw,fill=red!40},
% integral/.style={rectangle,draw,fill=violet!40}],
% \node [shell1, align=center] (1) {Primitive\\shells\\$\sket{a}$};
% \node [bound2, align=center] (B2) [right=of 1] {$\sexpval{B_2}$};
% \node [shell, align=center] (S1T) [above=of B2, yshift=-0.5cm] {$\sket{a}$};
% \node [shell, align=center] (S1B) [below=of B2, yshift=0.5cm] {$\sket{b}$};
% \node [shell2, align=center] (2) [right=of B2,xshift=0.75cm] {Contracted\\shell-pairs\\$\ket{ab}$};
% \node [bound4, align=center] (B4) [right=of 2] {$\expval{B_4}$} ;
% \node [shellpair, align=center] (S2T) [above=of B4, yshift=-0.5cm] {$\ket{a_1b_1}$};
% \node [shellpair, align=center] (S2B) [below=of B4, yshift=0.5cm] {$\ket{a_2b_2}$};
% \node [shell3, align=center] (3) [right=of B4] {Two-Electron\\integrals\\$\braket{a_1b_1}{a_2b_2}$};
% \path
% (1) edge [->,bend left] (S1T)
% (1) edge [->,bend right] (S1B)
% (S1T) edge [snake it] (B2)
% (S1B) edge [snake it] (B2)
% (B2) edge [->,color=red] node [below] {\small Contraction} (2)
% (2) edge [->,bend left] (S2T)
% (2) edge [->,bend right] (S2B)
% (S2T) edge [snake it] (B4)
% (S2B) edge [snake it] (B4)
% (B4) edge [->] (3)
% ;
% \end{scope}
%\end{tikzpicture}
%}
%\end{frame}
\begin { frame} { Orthogonalization matrix}
\red { \bf We are looking for a matrix in order to orthogonalize the AO basis, i.e.~$ \bm { X } ^ \dag \cdot \bm { S } \cdot \bm { X } = \bm { 1 } $ }
\\
\bigskip
\begin { block} { Symmetric (or L\" owdin) orthogonalization}
\begin { equation}
\text { $ \bm { X } = \bm { S } ^ { - 1 / 2 } = \bm { U } \cdot \bm { s } ^ { - 1 / 2 } \cdot \bm { U } ^ \dag $ is one solution...}
\end { equation}
\purple { \bf Is it working?}
\begin { equation}
\bm { X} ^ \dag \cdot \bm { S} \cdot \bm { X}
= \bm { S} ^ { -1/2} \cdot \bm { S} \cdot \bm { S} ^ { -1/2}
= \bm { S} ^ { -1/2} \cdot \bm { S} \cdot \bm { S} ^ { -1/2}
= \bm { I} \quad \green { \checkmark }
\end { equation}
\end { block}
\begin { block} { Canonical orthogonalization}
\begin { equation}
\text { $ \bm { X } = \bm { U } \cdot \bm { s } ^ { - 1 / 2 } $ is another solution (when you have linear dependencies)...}
\end { equation}
\purple { \bf Is it working?}
\begin { equation}
\bm { X} ^ \dag \cdot \bm { S} \cdot \bm { X}
= \bm { s} ^ { -1/2} \cdot \underbrace { \bm { U} ^ { \dag } \cdot \bm { S} \cdot \bm { U} } _ { \bm { s} } \cdot \bm { s} ^ { -1/2}
= \bm { I} \quad \green { \checkmark }
\end { equation}
\end { block}
\end { frame}
\begin { frame} { Computation of the Fock matrix and energy}
\begin { block} { Density matrix (closed-shell system)}
\begin { equation}
P_ { \red { \mu \nu } } = 2 \sum _ { i} ^ \text { occ} C_ { \red { \mu } i} C_ { \red { \nu } i}
2021-04-26 07:14:04 +02:00
\qqtext { or}
\boxed { \bm { P} = \bm { C} \cdot \bm { C} ^ { \dag } }
2021-04-24 21:23:53 +02:00
\end { equation}
\end { block}
\begin { block} { Fock matrix in the AO basis (closed-shell system)}
\begin { equation}
F_ { \red { \mu \nu } }
= H_ { \red { \mu \nu } }
+ \underbrace { \sum _ { \blue { \la \si } } P_ { \blue { \la \si } } (\red { \mu \nu } |\blue { \la \si } )} _ { J_ { \red { \mu \nu } } = \text { Coulomb} }
\underbrace { - \frac { 1} { 2} \sum _ { \blue { \la \si } } P_ { \blue { \la \si } } (\red { \mu } \blue { \si } |\blue { \la } \red { \nu } )} _ { K_ { \red { \mu \nu } } = \text { exchange} }
\end { equation}
\end { block}
\begin { block} { HF energy in the AO basis (closed-shell system)}
\begin { equation}
E_ \text { HF} = \sum _ { \red { \mu \nu } } P_ { \red { \mu \nu } } H_ { \red { \mu \nu } }
+ \frac { 1} { 2} \sum _ { \red { \mu \nu } \blue { \la \si } } P_ { \red { \mu \nu } } \qty [ (\red{\mu \nu} | \blue{\lambda \sigma}) - \frac{1}{2} (\red{\mu} \blue{\sigma} | \red{\lambda} \blue{\nu}) ] P_ { \blue { \lambda \sigma } }
\qqtext { or}
\boxed { E_ \text { HF} = \frac { 1} { 2} \text { Tr} { \qty [\bm{P} \cdot (\bm{H} + \bm{F})] } }
\end { equation}
\end { block}
\end { frame}
\begin { frame} { Computation of the Fock matrix and energy}
\begin { algorithmic}
\Procedure { Computing the Coulomb matrix} { }
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \blue { \nu } = 1 ,N $ }
\State $ J _ { \red { \mu } \blue { \nu } } = 0 $ \Comment { Initialization of the array}
\For { $ \orange { \la } = 1 ,N $ }
\For { $ \violet { \si } = 1 ,N $ }
\State $ J _ { \red { \mu } \blue { \nu } }
= J_ { \red { \mu } \blue { \nu } }
+ P_ { \orange { \la } \violet { \si } } (\red { \mu } \blue { \nu } |\orange { \la } \violet { \si } )$
\Comment { Accumulation step}
\EndFor
\EndFor
\EndFor
\EndFor
\EndProcedure
\Comment { \bf \red { This is a $ \order { N ^ 4 } $ algorithm as it involves four loops} }
\end { algorithmic}
\end { frame}
%%% SLIDE X %%%
\begin { frame} { Resolution of the identity}
\begin { block} { Resolution of the identity (RI) = a fancy way of writing 1}
\begin { equation}
\boxed { \sum _ { \green { A} =1} ^ { \red { \infty } } |\green { A} ) (\green { A} | = 1
\qqtext { and, in practice, }
\sum _ { \green { A} =1} ^ { \red { K} } |\green { A} ) (\green { A} | \approx 1}
\end { equation}
\end { block}
\begin { block} { Computing the Coulomb matrix with the RI}
\begin { equation}
\begin { split}
J_ { \red { \mu \nu } }
& = \sum _ { \blue { \la \si } } P_ { \blue { \la \si } } (\red { \mu \nu } |\blue { \la \si } )
\\
& \stackrel { \text { \green { RI} } } { =} \sum _ { \blue { \la \si } } P_ { \blue { \la \si } } \sum _ { \green { A} } (\red { \mu \nu } |\green { A} ) (\green { A} |\blue { \la \si } )
\\
& = \sum _ { \green { A} } (\red { \mu \nu } |\green { A} )
\underbrace { \sum _ { \blue { \la \si } } P_ { \blue { \la \si } } (\green { A} |\blue { \la \si } )} _ { \order { KN^ 2} \text { and $ K $ storage} }
= \underbrace { \sum _ { \green { A} } (\red { \mu \nu } |\green { A} ) I_ { \green { A} } } _ { \order { KN^ 2} }
\end { split}
\end { equation}
\\
Similar (more effective) approaches are named Cholesky decomposition, low-rank approximation, etc.
\end { block}
\end { frame}
%
\begin { frame} { Computation of exact exchange}
\begin { algorithmic}
\Procedure { Computing the exchange matrix} { }
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \blue { \nu } = 1 ,N $ }
\State $ K _ { \red { \mu } \blue { \nu } } = 0 $ \Comment { Initialization of the array}
\For { $ \orange { \la } = 1 ,N $ }
\For { $ \violet { \si } = 1 ,N $ }
\State $ K _ { \red { \mu } \blue { \nu } }
= K_ { \red { \mu } \blue { \nu } }
+ P_ { \orange { \la } \violet { \si } } (\red { \mu } \violet { \si } |\orange { \la } \blue { \nu } )$
\Comment { Accumulation step}
\EndFor
\EndFor
\EndFor
\EndFor
\EndProcedure
\Comment { \bf \red { This is a $ \order { N ^ 4 } $ algorithm and it's hard to play games...} }
\end { algorithmic}
\end { frame}
\begin { frame} { Computation of DFT exchange}
\begin { block} { LDA exchange (in theory) = cf Julien's lectures}
\begin { gather}
K_ { \mu \nu } ^ \text { LDA}
2021-04-26 07:14:04 +02:00
= \int \phi _ { \mu } (\br ) \violet { v_ \text { x} ^ \text { LDA} } (\br ) \phi _ { \nu } (\br ) d\br
2021-04-24 21:23:53 +02:00
= \frac { 4} { 3} C_ \text { x} \overbrace { \int \phi _ { \mu } (\br ) \blue { \rho ^ { 1/3} } (\br ) \phi _ { \nu } (\br ) d\br } ^ { \text { \alert { no closed-form expression in general} } }
\\
\blue { \rho } (\br ) = \sum _ { \mu \nu } \phi _ { \mu } (\br ) \blue { P_ { \mu \nu } } \phi _ { \nu } (\br )
\end { gather}
\end { block}
2021-04-26 07:14:04 +02:00
\begin { block} { LDA exchange (in practice) = \alert { numerical integration via quadrature} = $ \int f ( x ) dx \approx \sum _ k w _ k f ( x _ k ) $ }
2021-04-24 21:23:53 +02:00
\begin { gather}
\underbrace { K_ { \mu \nu } ^ \text { LDA} } _ { \green { \order { N_ \text { grid} N^ 2} } }
\approx \sum _ { k=1} ^ { \purple { N_ \text { grid} } }
2021-04-26 07:14:04 +02:00
\underbrace { \orange { w_ k} } _ { \orange { \text { weights} } } \phi _ { \mu } (\red { \br _ k} ) \violet { v_ \text { x} ^ \text { LDA} } (\underbrace { \red { \br _ k} } _ { \text { \red { roots} } } ) \phi _ { \nu } (\red { \br _ k} )
2021-04-24 21:23:53 +02:00
= \frac { 4} { 3} C_ \text { x} \sum _ { k=1} ^ { \purple { N_ \text { grid} } } \orange { w_ k} \phi _ { \mu } (\red { \br _ k} ) \blue { \rho ^ { 1/3} } (\red { \br _ k} ) \phi _ { \nu } (\red { \br _ k} )
\\
\underbrace { \blue { \rho } (\red { \br _ k} )} _ { \green { \order { N_ \text { grid} N^ 2} } } = \sum _ { \mu \nu } \phi _ { \mu } (\red { \br _ k} ) \blue { P_ { \mu \nu } } \phi _ { \nu } (\red { \br _ k} )
\end { gather}
\end { block}
\end { frame}
\begin { frame} { MP2 correlation energy}
\begin { block} { MP2 is the simplest way of catching a good chunk of correlation:}
\begin { equation}
\begin { split}
\green { E_ \text { c} ^ \text { (2)} }
& = \sum _ { \red { ij} } ^ { \text { occ} } \sum _ { \blue { ab} } ^ { \text { virt} }
\frac { \braket { \red { ij} } { \blue { ab} } (2 \braket { \red { ij} } { \blue { ab} } - \braket { \red { ij} } { \blue { ba} } )}
{ \epsilon _ { \red { i} } + \epsilon _ { \red { j} } - \epsilon _ { \blue { a} } - \epsilon _ { \blue { b} } }
\\
& = \underbrace {
2 \sum _ { \red { ij} } \sum _ { \blue { ab} }
\frac { \braket { \red { ij} } { \blue { ab} } ^ 2}
{ \epsilon _ { \red { i} } + \epsilon _ { \red { j} } - \epsilon _ { \blue { a} } - \epsilon _ { \blue { b} } }
} _ { \text { direct part} }
- \underbrace {
\sum _ { \red { ij} } \sum _ { \blue { ab} }
\frac { \braket { \red { ij} } { \blue { ab} } \braket { \red { ij} } { \blue { ba} } }
{ \epsilon _ { \red { i} } + \epsilon _ { \red { j} } - \epsilon _ { \blue { a} } - \epsilon _ { \blue { b} } }
} _ { \text { exchange part} }
\end { split}
\end { equation}
\centering
\includegraphics [width=0.5\textwidth] { fig/MP2}
\end { block}
\end { frame}
\begin { frame} { Computing the MP2 correlation energy}
\begin { block} { How much does it cost to compute the MP2 correlation energy?}
\begin { algorithmic}
\Procedure { MP2 correlation energy} { }
\State $ \green { E _ \text { c } ^ \text { ( 2 ) } } = 0 $
\For { $ \red { i } = 1 ,O $ }
\For { $ \red { j } = 1 ,O $ }
\For { $ \blue { a } = 1 ,V $ }
\For { $ \blue { b } = 1 ,V $ }
\State $ \purple { \Delta } = \epsilon _ { \red { i } } + \epsilon _ { \red { j } } - \epsilon _ { \blue { a } } - \epsilon _ { \blue { b } } $
\State $ \green { E _ \text { c } ^ \text { ( 2 ) } }
= \green { E_ \text { c} ^ \text { (2)} }
+ (2 \braket { \red { ij} } { \blue { ab} } ^ 2 - \braket { \red { ij} } { \blue { ab} } \braket { \red { ij} } { \blue { ba} } )/\purple { \Delta } $
\EndFor
\EndFor
\EndFor
\EndFor
\EndProcedure
\Comment { \bf \red { $ \order { N ^ 4 } $ because there are four loops!} }
\end { algorithmic}
\end { block}
\end { frame}
%
%%% SLIDE X %%%
\begin { frame} { AO to MO transformation (Take 1)}
\begin { block} { The naive way...}
\begin { equation}
\underbrace { \green { (pq|rs)} } _ { \text { \purple { \bf MO integrals} } }
= \sum _ { \red { \mu \nu \la \si } } c_ { \red { \mu } \green { p} } c_ { \red { \nu } \green { q} } c_ { \red { \la } \green { r} } c_ { \red { \si } \green { s} }
\underbrace { \red { (\mu \nu |\la \si )} } _ { \text { \purple { \bf AO integrals} } }
\end { equation}
\end { block}
\begin { algorithmic}
\scriptsize
\Procedure { AO-to-MO Transformation} { }
\For { $ \red { p } = 1 ,N $ }
\For { $ \blue { q } = 1 ,N $ }
\For { $ \orange { r } = 1 ,N $ }
\For { $ \violet { s } = 1 ,N $ }
\State $ ( \red { p } \blue { q } | \orange { r } \violet { s } ) = 0 $
\Comment { Initialization of the array}
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \blue { \nu } = 1 ,N $ }
\For { $ \orange { \la } = 1 ,N $ }
\For { $ \violet { \si } = 1 ,N $ }
\State
$ ( \red { p } \blue { q } | \orange { r } \violet { s } ) = ( \red { p } \blue { q } | \orange { r } \violet { s } )
+ c_ { \red { \mu p} } c_ { \blue { \nu q} } c_ { \orange { \la r} } c_ { \violet { \si s} }
(\red { \mu } \blue { \nu } |\orange { \la } \violet { \si } )$
\Comment { Accumulation step}
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\Comment { \bf \red { This is a $ \order { N ^ 8 } $ algorithm! You won't do much quantum chemistry with this...} }
\EndProcedure
\end { algorithmic}
\end { frame}
%
%%% SLIDE X %%%
\begin { frame} { AO to MO transformation (Take 2)}
\begin { block} { Semi-direct algorithm...}
\begin { equation}
(\red { p} \blue { q} |\orange { r} \violet { s} )
=
\underbrace {
\sum _ { \red { \mu p} } c_ { \red { \mu p} }
\underbrace {
\qty { \sum _ { \blue { \nu q} } c_ { \blue { \nu q} }
\underbrace {
\qty [ \sum _ { \orange { \la r} } c_ { \orange { \la r} }
\underbrace {
\qty ( \sum _ { \violet { \si s} } c_ { \violet { \si s} }
(\red { \mu } \blue { \nu } |\orange { \la } \violet { \si } )
)
} _ { \text { \violet { Step \# 1} } }
]
} _ { \text { \orange { Step \# 2} } }
}
} _ { \text { \blue { Step \# 3} } }
} _ { \text { \red { Step \# 4} } }
\end { equation}
\end { block}
\end { frame}
%%% SLIDE X %%%
\begin { frame} { Semi-direct algorithm}
\begin { block} { Semi-direct algorithm... \violet { Step \# 1} }
\begin { algorithmic}
\Procedure { Semi-Direct Algorithm (\violet { Step \# 1} )} { }
\State Allocate temporary array $ I $ of size $ N ^ 4 $
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \blue { \nu } = 1 ,N $ }
\For { $ \orange { \la } = 1 ,N $ }
\For { $ \violet { \si } = 1 ,N $ }
\For { $ \violet { s } = 1 ,N $ }
\State
$ I _ { \red { \mu } \blue { \nu } \orange { \la } \violet { s } } = I _ { \red { \mu } \blue { \nu } \orange { \la } \violet { s } }
+ c_ { \violet { \si s} } (\red { \mu } \blue { \nu } |\orange { \la } \violet { \si } )$
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\Comment { \violet { Step \# 1} costs $ \order { N ^ 5 } $ and $ \order { N ^ 4 } $ storage}
\EndProcedure
\end { algorithmic}
\end { block}
\end { frame}
%
\begin { frame} { Semi-direct algorithm}
\begin { block} { Semi-direct algorithm... \orange { Step \# 2} }
\begin { algorithmic}
\Procedure { Semi-Direct Algorithm (\orange { Step \# 2} )} { }
\State Allocate temporary array $ J $ of size $ N ^ 4 $
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \blue { \nu } = 1 ,N $ }
\For { $ \orange { \la } = 1 ,N $ }
\For { $ \orange { r } = 1 ,N $ }
\For { $ \violet { s } = 1 ,N $ }
\State
$ J _ { \red { \mu } \blue { \nu } \orange { r } \violet { s } } = J _ { \red { \mu } \blue { \nu } \orange { r } \violet { s } }
+ c_ { \orange { \la r} } I_ { \red { \mu } \blue { \nu } \orange { \la } \violet { s} } $
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\Comment { \orange { Step \# 2} costs $ \order { N ^ 5 } $ and $ \order { N ^ 4 } $ storage}
\EndProcedure
\end { algorithmic}
\end { block}
\end { frame}
%
\begin { frame} { Semi-direct algorithm}
\begin { block} { Semi-direct algorithm... \blue { Step \# 3} }
\begin { algorithmic}
\Procedure { Semi-Direct Algorithm (\blue { Step \# 3} )} { }
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \blue { \nu } = 1 ,N $ }
\For { $ \blue { q } = 1 ,N $ }
\For { $ \orange { r } = 1 ,N $ }
\For { $ \violet { s } = 1 ,N $ }
\State
$ I _ { \red { \mu } \blue { q } \orange { r } \violet { s } } = I _ { \red { \mu } \blue { q } \orange { r } \violet { s } }
+ c_ { \blue { \nu q} } J_ { \red { \mu } \blue { \nu } \orange { r} \violet { s} } $
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\Comment { \blue { Step \# 3} costs $ \order { N ^ 5 } $ and no new storage}
\EndProcedure
\end { algorithmic}
\end { block}
\end { frame}
%
\begin { frame} { Semi-direct algorithm}
\begin { block} { Semi-direct algorithm... \red { Step \# 4} }
\begin { algorithmic}
\Procedure { Semi-Direct Algorithm (\red { Step \# 4} )} { }
\For { $ \red { \mu } = 1 ,N $ }
\For { $ \red { p } = 1 ,N $ }
\For { $ \blue { q } = 1 ,N $ }
\For { $ \orange { r } = 1 ,N $ }
\For { $ \violet { s } = 1 ,N $ }
\State
$ ( \red { p } \blue { q } | \orange { r } \violet { s } ) = ( \red { p } \blue { q } | \orange { r } \violet { s } )
+ c_ { \red { \mu p} } I_ { \red { \mu } \blue { q} \orange { r} \violet { s} } $
\EndFor
\EndFor
\EndFor
\EndFor
\EndFor
\Comment { \red { Step \# 4} costs $ \order { N ^ 5 } $ and no new storage}
\EndProcedure
\end { algorithmic}
\end { block}
\end { frame}
\begin { frame} { Laplace transform}
\begin { block} { Alml{ \" o} f's trick}
\begin { equation}
\boxed { \frac { 1} { \purple { \Delta } } = \blue { \int _ 0^ \infty } \exp (-\purple { \Delta } \blue { t} ) d\blue { t} }
\end { equation}
\begin { equation}
\begin { split}
\green { E_ \text { c} ^ \text { (2)} }
& = \frac { 1} { 4} \sum _ { ij} \sum _ { ab}
\frac { \mel { ij} { } { ab} ^ 2}
{ \purple { \epsilon _ { i} + \epsilon _ { j} - \epsilon _ { a} - \epsilon _ { b} } }
\\
& = \frac { 1} { 4} \blue { \int _ 0^ { \infty } } \sum _ { ij} \sum _ { ab}
\mel { ij} { } { ab} ^ 2 \exp [-(\purple{\epsilon_{i} + \epsilon_{j} - \epsilon_{a} - \epsilon_{b}}) \blue{t}] d\blue { t}
\\
& = \frac { 1} { 4} \blue { \int _ 0^ { \infty } } \sum _ { ij} \sum _ { ab} \mel { i(\blue { t} )j(\blue { t} )} { } { a(\blue { t} )b(\blue { t} )} ^ 2
2021-04-26 07:14:04 +02:00
\stackrel { \text { \blue { quad.} } } { \approx } \frac { 1} { 4} \blue { \sum _ { k=1} ^ { N_ \text { grid} } } \blue { w_ k} \sum _ { ij} \sum _ { ab} \mel { i(\blue { t_ k} )j(\blue { t_ k} )} { } { a(\blue { t_ k} )b(\blue { t_ k} )} ^ 2
2021-04-24 21:23:53 +02:00
\end { split}
\end { equation}
\begin { equation}
\ket * { p} \equiv \ket * { \varphi _ p(0)}
\qqtext { and}
\ket * { p(\blue { t} )} \equiv \ket * { \varphi _ p(\blue { t} )} = \ket * { \varphi _ p(0) e^ { \pm \frac { 1} { 2} \purple { \epsilon _ p} \blue { t} } }
\end { equation}
\\
\bigskip
At this stage, one can play more games (e.g., localized orbitals, RI, stochastic sampling, quadrature, etc)
\end { block}
\end { frame}
%%% SLIDE 2 %%%
2021-04-26 07:14:04 +02:00
\begin { frame} { Coupled-Cluster Theory}
2021-04-24 21:23:53 +02:00
\begin { block} { A few random thoughts about coupled cluster (CC)}
\begin { itemize}
\bigskip
\item CC theory comes from \alert { nuclear physics} (Thank you Physics!)
\bigskip
\item The idea behind CC is to include \alert { all corrections} of a given type to \alert { infinite order}
\bigskip
\item The CC wave function is an \alert { exponential \textit { ansatz} }
\bigskip
\item The CC energy is \alert { size-extensive} , but \alert { non-variational}
\bigskip
\item CC is considered as the \alert { gold standard} for weakly correlated systems
\end { itemize}
\end { block}
\end { frame}
%%% SLIDE 3 %%%
\begin { frame} { Theory}
\begin { itemize}
\item CC wave function
\begin { equation}
\PsiCC = \alert { e^ { \hT { } { } } } \PsiO % \qquad \text{where $\PsiO$ is a reference wave function}
\end { equation}
\item Excitation operator
\begin { equation}
\hT { } { } = \hT { 1} { } + \hT { 2} { } + \ldots + \hT { \nEl } { } % \qquad \text{where $\nEl$ is the number of electrons}
\end { equation}
\item Exponential \textit { ansatz}
\begin { equation}
\begin { split}
e^ { \hT { } { } }
& = \hI + \hT { } { } + \frac { 1} { 2!} \hT { } { 2} + \frac { 1} { 3!} \hT { } { 3} + \ldots
\\
& = \hI + \hT { 1} { }
+ \qty ( \underbrace { \hT { 2} { } } _ { \text { \green { connected} } } + \frac { 1} { 2} \underbrace { \hT { 1} { 2} } _ { \text { \alert { disconnected} } } )
+ \qty ( \hT { 3} { } + \hT { 2} { } \hT { 1} { } + \frac { 1} { 6} \hT { 3} { } )
\\
& + \qty ( \hT { 4} { } + \hT { 3} { } \hT { 1} { } + \frac { 1} { 2} \underbrace { \hT { 2} { 2} } _ { \text { \blue { two pairs of electrons} } } + \frac { 1} { 2} \hT { 2} { } \hT { 1} { 2} + \frac { 1} { 24} \underbrace { \hT { 4} { } } _ { \text {
\purple { four electrons} } } )
+ \ldots
\end { split}
\end { equation}
\end { itemize}
\end { frame}
%%% SLIDE 4 %%%
\begin { frame} { Excitation operators}
\begin { itemize}
\item Singles
\begin { equation}
\hT { 1} { } \PsiO = \sum _ { i} \sum _ { a} \underbrace { \amp { i} { a} } _ { \text { \alert { amplitudes} } } \Det { i} { a}
\end { equation}
\item Doubles
\begin { equation}
\hT { 2} { } \PsiO = \sum _ { i<j} \sum _ { a<b} \amp { ij} { ab} \underbrace { \Det { ij} { ab} } _ { \text { \alert { excited determinants} } }
\end { equation}
\item FCI wave function
\begin { equation}
\PsiFCI = ( \hI + \hT { } { } ) \PsiO = ( \hI + \hT { 1} { } + \hT { 2} { } + \hT { 3} { } + \ldots ) \PsiO
\end { equation}
\end { itemize}
\end { frame}
%%% SLIDE 5 %%%
\begin { frame} { CC energies}
\begin { itemize}
\item Schr\" odinger equation
\begin { equation}
\hH \ket { \PsiCC } = E \ket * { \PsiCC }
\, \Rightarrow \,
\hH e^ { \hT { } { } } \ket * { \PsiO } = E e^ { \hT { } { } } \ket * { \PsiO }
\, \Rightarrow \,
\underbrace { e^ { -\hT { } { } } \hH e^ { \hT { } { } } } _ { \text { \green { $ \Bar { H } = \text { similarity transform } $ } } } \ket * { \PsiO } = E \ket * { \PsiO }
\end { equation}
\item Variational CC energy (\alert { factorial complexity} )
\begin { equation}
\alert { \EVCC }
= \frac { \mel * { \PsiCC } { \hH } { \PsiCC } } { \braket * { \PsiCC } { \PsiCC } }
= \frac { \mel * { e^ { \hT { } { } } \PsiO } { \hH } { e^ { \hT { } { } } \PsiO } } { \braket * { e^ { \hT { } { } } \PsiO } { e^ { \hT { } { } } \PsiO } }
\end { equation}
\item Projected CC energy
\begin { equation}
\mel * { \PsiO } { \hH } { \PsiCC } = \ECC \braket * { \PsiO } { \PsiCC }
\quad \Rightarrow \quad
\boxed { \ECC = \frac { \mel * { \PsiO } { \alert { \hH e^ { \hT { } { } } } } { \PsiO } } { \braket * { \PsiO } { \PsiO } } }
\end { equation}
\end { itemize}
\end { frame}
%%% SLIDE 6 %%%
\begin { frame} { Projected CC energy}
Assuming that $ \braket * { \PsiO } { \PsiO } = 1 $ , we have
\begin { equation}
\begin { split}
\ECC
& = \mel * { \PsiO } { \hH e^ { \hT { } { } } } { \PsiO }
\\
& = \mel * { \PsiO } { \hH \alert { (\hI + \hT { 1} { } + \hT { 2} { } + \frac { 1} { 2} \hT { 1} { 2} )} } { \PsiO }
\\
& = \mel * { \PsiO } { \hH } { \PsiO }
+ \mel * { \PsiO } { \hH \hT { 1} { } } { \PsiO }
+ \mel * { \PsiO } { \hH \hT { 2} { } } { \PsiO }
+ \frac { 1} { 2} \mel * { \PsiO } { \hH \hT { 1} { 2} } { \PsiO }
\\
& = \EO
+ \sum _ { i} \sum _ { a} \amp { i} { a} \green { \mel * { \PsiO } { \hH } { \Det { i} { a} } }
+ \frac { 1} { 4} \sum _ { ij} \sum _ { ab} (\amp { ij} { ab} + \amp { i} { a} \amp { j} { b} - \amp { i} { b} \amp { j} { a} ) \blue { \mel * { \PsiO } { \hH } { \Det { ij} { ab} } }
\end { split}
\end { equation}
\end { frame}
%%% SLIDE 7 %%%
\begin { frame} { CC energy with Hartree-Fock reference}
\begin { block} { HF reference wave function}
\begin { itemize}
\bigskip
\item $ \orange { \EO = \EHF } $
\bigskip
\item $ \green { \mel * { \PsiO } { \hH } { \Det { i } { a } } = \mel * { i } { f } { a } = 0 } \quad \Leftrightarrow \quad \text { \alert { Brillouin's theorem } } $
\bigskip
\item $ \blue { \mel * { \PsiO } { \hH } { \Det { ij } { ab } } = \mel * { ij } { } { ab } = \braket * { ij } { ab } - \braket * { ij } { ba } } \quad \Leftrightarrow \quad \text { \alert { Two - electron integrals } } $
\bigskip
\end { itemize}
\begin { equation}
\boxed {
\ECC = \orange { \EHF }
+ \frac { 1} { 4} \sum _ { ij} \sum _ { ab} (\amp { ij} { ab} + \amp { i} { a} \amp { j} { b} - \amp { i} { b} \amp { j} { a} ) \blue { \mel * { ij} { } { ab} }
}
\end { equation}
\end { block}
\end { frame}
%%% SLIDE 8 %%%
\begin { frame} { Truncated CC}
\begin { block} { CC with doubles (CCD)}
\begin { itemize}
\bigskip
\item Only doubles, doubles of doubles, etc $ \Rightarrow \alert { \hT { } { } = \hT { 2 } { } } $
\bigskip
\item Still an infinite series
\begin { equation}
\begin { split}
e^ { \hT { 2} { } }
= \hI + \hT { 2} { } + \frac { 1} { 2} \hT { 2} { 2} + \frac { 1} { 6} \hT { 2} { 3} + \frac { 1} { 24} \hT { 2} { 4} + \ldots
\end { split}
\end { equation}
\bigskip
\item CCD energy
\begin { equation}
\ECCD = \EHF + \frac { 1} { 4} \sum _ { ij} \sum _ { ab} \amp { ij} { ab} \mel * { ij} { } { ab}
\end { equation}
\end { itemize}
\end { block}
\end { frame}
%%% SLIDE 9 %%%
\begin { frame} { CCD equations}
\begin { itemize}
\item Projection of similarity-transformed Hamiltonian onto doubles
\begin { equation}
\mel * { \alert { \Det { ij} { ab} } } { \green { \bar { H} } } { \PsiO } = \ECC \braket * { \alert { \Det { ij} { ab} } } { \PsiO } = 0
\quad \Rightarrow \quad
\mel * { \alert { \Det { ij} { ab} } } { e^ { -\hT { } { } } \hH e^ { \hT { } { } } } { \PsiO } = 0
\end { equation}
\item \alert { Residual equation}
\begin { equation}
\boxed { r_ { ij} ^ { ab} = \mel * { ij} { } { ab} + \blue { \Delta _ { ij} ^ { ab} } \amp { ij} { ab} + \green { u_ { ij} ^ { ab} } + \alert { v_ { ij} ^ { ab} } = 0}
\quad \Rightarrow \quad
\boxed { \amp { ij} { ab} = - \frac { \mel * { ij} { } { ab} + \green { u_ { ij} ^ { ab} } + \alert { v_ { ij} ^ { ab} } } { \blue { \Delta _ { ij} ^ { ab} } } }
\end { equation}
\item Energy differences
\begin { equation}
\blue { \Delta _ { ij} ^ { ab} } = \epsilon _ a + \epsilon _ b - \epsilon _ i - \epsilon _ j
\end { equation}
\item \green { Linear} array
\begin { equation}
\green { u_ { ij} ^ { ab} } = f(\amp { ij} { ab} ) = \order * { \green { \nBas ^ 6} }
\end { equation}
\item \alert { Quadratic} array
\begin { equation}
\alert { v_ { ij} ^ { ab} } = f(\amp { ij} { ab} ) = \underbrace { \order * { \green { \nBas ^ 6} } } _ { \green { \text { smart} } } \text { or } \underbrace { \order * { \alert { \nBas ^ 8} } } _ { \alert { \text { dumb} } }
\end { equation}
\end { itemize}
\end { frame}
%%% SLIDE 10 %%%
\begin { frame} { \green { Linear} array}
Each term of the linear term can be computed in $ \order * { N ^ 6 } $ :
\begin { equation}
\begin { split}
u_ { ij} ^ { ab}
& = \frac { 1} { 2} \sum _ { cd} \alert { \underbrace { \mel * { ab} { } { cd} } _ { VVVV} } \amp { ij} { cd}
+ \frac { 1} { 2} \sum _ { kl} \green { \underbrace { \mel * { kl} { } { ij} } _ { OOOO} } \amp { kl} { ab}
\\
& + \sum _ { kc} \qty [ - \orange { \underbrace { \mel * { kb} { } { jc} } _ { OVOV} } \amp { ik} { ac} + \orange { \mel * { ka} { } { jc} } \amp { ik} { bc}
- \orange { \mel * { ka} { } { ic} } \amp { jk} { bc} + \orange { \mel * { kb} { } { ic} } \amp { jk} { ac} ]
\end { split}
\end { equation}
\alert { \bf NB:} CCD($ v _ { ij } ^ { ab } = 0 $ ) $ = $ linear CCD (LCCD)
\end { frame}
%%% SLIDE 11 %%%
\begin { frame} { \alert { Quadratic} array: the \alert { dumb} way}
The quadratic term is the computational bottleneck of CCD:
\begin { equation}
\begin { split}
v_ { ij} ^ { ab}
= \frac { 1} { 4} \sum _ { klcd} \purple { \underbrace { \mel * { kl} { } { cd} } _ { OOVV} }
\bigg [
& \amp { ij} { cd} \amp { kl} { ab}
- 2(\amp { ij} { ac} \amp { kl} { bd} + \amp { ij} { bd} \amp { kl} { ac} )
\\
& - 2 (\amp { ik} { ab} \amp { jl} { cd} + \amp { ik} { cd} \amp { jl} { ab} )
+ 4 (\amp { ik} { ac} \amp { jl} { bd} + \amp { ik} { bd} \amp { jl} { ac} )
\bigg ]
\end { split}
\end { equation}
The ``formal'' scaling of the quadratic term is $ \order * { N ^ 8 } $
\end { frame}
%%% SLIDE 12 %%%
\begin { frame} { \alert { Quadratic} array: the \green { smart} way}
One can ``sacrifice'' storage to gain in scaling:
\begin { align}
\underbrace { \alert { \mel * { kl} { X_ 1} { ij} } } _ { \order * { N^ 6} } & = \sum _ { cd} \mel * { kl} { } { cd} \amp { ij} { cd}
&
\underbrace { \orange { \mel * { b} { X_ 2} { c} } } _ { \order * { N^ 5} } & = \sum _ { kld} \mel * { kl} { } { cd} \amp { kl} { bd}
\\
\underbrace { \green { \mel * { k} { X_ 3} { j} } } _ { \order * { N^ 5} } & = \sum _ { lcd} \mel * { kl} { } { cd} \amp { jl} { cd}
&
\underbrace { \purple { \mel * { il} { X_ 4} { ad} } } _ { \order * { N^ 6} } & = \sum _ { kc} \mel * { kl} { } { cd} \amp { ik} { ac}
\end { align}
Now, the quadratic term can be computed in $ \order * { N ^ 6 } $
\begin { equation}
\begin { split}
v_ { ij} ^ { ab}
& = \frac { 1} { 4} \sum _ { kl} \alert { \mel * { kl} { X_ 1} { cd} } \amp { kl} { ab}
- \frac { 1} { 2} \sum _ { c} \qty [ \orange{\mel*{b}{X_2}{c}} \amp{ij}{ac} + \orange{\mel*{a}{X_2}{c}} \amp{ij}{cb} ]
\\
& - \frac { 1} { 2} \sum _ { k} \qty [ \green{\mel*{k}{X_3}{j}} \amp{ik}{ab} + \green{\mel*{k}{X_3}{i}} \amp{kj}{ab} ]
+ \sum _ { kc} \qty [ \purple{\mel*{ik}{X_4}{ac}} \amp{jk}{bc} + \purple{\mel*{ik}{X_4}{bc}} \amp{kj}{ac} ]
\end { split}
\end { equation}
\end { frame}
%%% SLIDE 12 %%%
\begin { frame} { CCD algorithm}
\begin { columns}
\begin { column} { 0.7\textwidth }
\begin { block} { CCD subroutine}
\begin { algorithmic}
\Procedure { Iterative CCD algorithm} { }
\State Perform HF calculation to get $ \epsilon _ p $ and $ \mel * { pq } { } { rs } $
\State Set $ \green { u _ { ij } ^ { ab } } = 0 $ , and $ \orange { v _ { ij } ^ { ab } } = 0 $
\State Compute amplitudes $ \red { t _ { ij } ^ { ab } } = - \mel * { ij } { } { ab } / \Delta _ { ij } ^ { ab } $ (MP2 guess)
\While { $ \max { \abs * { \blue { r _ { ij } ^ { ab } } } } > \tau $ }
\State Form linear array $ \green { u _ { ij } ^ { ab } } $
\State Compute intermediate arrays $ \mel * { kl } { X _ 1 } { ij } $ , $ \mel * { b } { X _ 2 } { c } $ , $ \mel * { k } { X _ 3 } { j } $ , and $ \mel * { il } { X _ 4 } { ad } $ .
\State Form quadratic array $ \orange { v _ { ij } ^ { ab } } $
\State Compute residues: $ \blue { r _ { ij } ^ { ab } } = \mel * { ij } { } { ab } + \Delta _ { ij } ^ { ab } \amp { ij } { ab } + \green { u _ { ij } ^ { ab } } + \orange { v _ { ij } ^ { ab } } $
\State Update amplitudes: $ \red { t _ { ij } ^ { ab } } \leftarrow \red { t _ { ij } ^ { ab } } - \blue { r _ { ij } ^ { ab } } / \Delta _ { ij } ^ { ab } $
\EndWhile
\State Compute CCD energy: $ \ECCD = \EHF + \frac { 1 } { 4 } \sum _ { ij } \sum _ { ab } \red { t _ { ij } ^ { ab } } \mel * { ij } { } { ab } $
\EndProcedure
\end { algorithmic}
\end { block}
\end { column}
\begin { column} { 0.3\textwidth }
\centering
\includegraphics [width=\textwidth] { fig/Diagrams-CCD}
\end { column}
\end { columns}
\end { frame}
%%%% FINAL SLIDE %%%
%\begin{frame}{Further reading for CC methods}
% \begin{itemize}
% \item Pople et al. IJQC 14 (1978) 545
% \bigskip
% \item Scuseria et al, JCP 86 (1987) 2881
% \bigskip
% \item Jensen, \textit{``Introduction to Computational Chemistry''} (Wiley)
% \bigskip
% \item Crawford \& Schaefer, \textit{``An Introduction to Coupled Cluster Theory for Computational Chemists''}, Reviews in Computational Chemistry, Vol.~14 (2000)
% \bigskip
% \item Shavitt \& Bartlett, \textit{``Many-Body Methods in Chemistry and Physics: MBPT and Coupled-Cluster Theory''} (Cambridge University Press)
% \end{itemize}
%\end{frame}
%%% FINAL SLIDE %%%
%-----------------------------------------------------
\section { Books}
%-----------------------------------------------------
\begin { frame} { Good books}
\begin { columns}
\begin { column} { 0.7\textwidth }
\begin { itemize}
\item Introduction to Computational Chemistry (Jensen)
\\
\vspace { 1cm}
\item Essentials of Computational Chemistry (Cramer)
\\
\vspace { 1cm}
\item Modern Quantum Chemistry (Szabo \& Ostlund)
\\
\vspace { 1cm}
\item Molecular Electronic Structure Theory (Helgaker, Jorgensen \& Olsen)
\\
\vspace { 1cm}
\end { itemize}
\end { column}
\begin { column} { 0.3\textwidth }
\centering
\includegraphics [height=0.3\textwidth] { fig/Jensen}
\\
\bigskip
\includegraphics [height=0.3\textwidth] { fig/Cramer}
\\
\bigskip
\includegraphics [height=0.3\textwidth] { fig/Szabo}
\\
\bigskip
\includegraphics [height=0.3\textwidth] { fig/Helgaker}
\end { column}
\end { columns}
\end { frame}
\end { document}