Added plot for bukets

This commit is contained in:
Anthony Scemama 2024-05-23 17:48:29 +02:00
parent dec1bae92e
commit 0ecca24d2e
4 changed files with 42557 additions and 46 deletions

BIN
Data/buckets.pdf Normal file

Binary file not shown.

42210
Data/max_data.dat Normal file

File diff suppressed because it is too large Load Diff

305
Data/plot_buckets.plt Normal file
View File

@ -0,0 +1,305 @@
#!/usr/bin/gnuplot -persist
#
#
# G N U P L O T
# Version 5.4 patchlevel 2 last modified 2021-06-01
#
# Copyright (C) 1986-1993, 1998, 2004, 2007-2021
# Thomas Williams, Colin Kelley and many others
#
# gnuplot home: http://www.gnuplot.info
# faq, bugs, etc: type "help FAQ"
# immediate help: type "help" (plot window: hit 'h')
# set terminal qt 0 font "Sans,9"
# set output
set term pdfcairo enhanced font "Times,14" linewidth 2 rounded size 5.0in, 3.0in
set out 'buckets.pdf'
set multiplot
unset clip points
set clip one
unset clip two
unset clip radial
set errorbars front 1.000000
set border 31 front lt black linewidth 1.000 dashtype solid
set zdata
set ydata
set xdata
set y2data
set x2data
set boxwidth
set boxdepth 0
set style fill empty border
set style rectangle back fc bgnd fillstyle solid 1.00 border lt -1
set style circle radius graph 0.02
set style ellipse size graph 0.05, 0.03 angle 0 units xy
set dummy x, y
set format x "% h"
set format y "% h"
set format x2 "% h"
set format y2 "% h"
set format z "% h"
set format cb "% h"
set format r "% h"
set ttics format "% h"
set timefmt "%d/%m/%y,%H:%M"
set angles radians
set tics back
set grid nopolar
set grid xtics nomxtics ytics nomytics noztics nomztics nortics nomrtics \
nox2tics nomx2tics noy2tics nomy2tics nocbtics nomcbtics
set grid layerdefault lt 0 linecolor 0 linewidth 0.500 dashtype solid, lt 0 linecolor 0 linewidth 0.500 dashtype solid
unset raxis
set theta counterclockwise right
set style parallel front lt black linewidth 2.000 dashtype solid
set key notitle
set key fixed right top vertical Right noreverse enhanced autotitle nobox
set key noinvert samplen 4 spacing 1 width 0 height 0
set key maxcolumns 0 maxrows 0
set key opaque
unset label
unset arrow
set arrow 1 from 1.00000, graph 0, 0 to 1.00000, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 2 from 3116.00, graph 0, 0 to 3116.00, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 3 from 7570.00, graph 0, 0 to 7570.00, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 4 from 12859.0, graph 0, 0 to 12859.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 5 from 18845.0, graph 0, 0 to 18845.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 6 from 25458.0, graph 0, 0 to 25458.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 7 from 32642.0, graph 0, 0 to 32642.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 8 from 40360.0, graph 0, 0 to 40360.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 9 from 48603.0, graph 0, 0 to 48603.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 10 from 57369.0, graph 0, 0 to 57369.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 11 from 66667.0, graph 0, 0 to 66667.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 12 from 76504.0, graph 0, 0 to 76504.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 13 from 86872.0, graph 0, 0 to 86872.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 14 from 97756.0, graph 0, 0 to 97756.0, graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 15 from 109143., graph 0, 0 to 109143., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 16 from 121013., graph 0, 0 to 121013., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 17 from 133352., graph 0, 0 to 133352., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 18 from 146140., graph 0, 0 to 146140., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 19 from 159351., graph 0, 0 to 159351., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 20 from 172963., graph 0, 0 to 172963., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 21 from 186963., graph 0, 0 to 186963., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 22 from 201324., graph 0, 0 to 201324., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 23 from 216045., graph 0, 0 to 216045., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 24 from 231112., graph 0, 0 to 231112., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 25 from 246518., graph 0, 0 to 246518., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 26 from 262252., graph 0, 0 to 262252., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 27 from 278307., graph 0, 0 to 278307., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 28 from 294678., graph 0, 0 to 294678., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 29 from 311357., graph 0, 0 to 311357., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 30 from 328335., graph 0, 0 to 328335., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 31 from 345612., graph 0, 0 to 345612., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 32 from 363188., graph 0, 0 to 363188., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 33 from 381058., graph 0, 0 to 381058., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 34 from 399223., graph 0, 0 to 399223., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 35 from 417687., graph 0, 0 to 417687., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 36 from 436441., graph 0, 0 to 436441., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 37 from 455487., graph 0, 0 to 455487., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 38 from 474826., graph 0, 0 to 474826., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 39 from 494453., graph 0, 0 to 494453., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 40 from 514366, graph 0, 0 to 514366., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 41 from 534563, graph 0, 0 to 534563., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 42 from 555044, graph 0, 0 to 555044., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 43 from 575812, graph 0, 0 to 575812., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 44 from 596864, graph 0, 0 to 596864., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 45 from 618205, graph 0, 0 to 618205., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 46 from 639837, graph 0, 0 to 639837., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 47 from 661753, graph 0, 0 to 661753., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 48 from 683958, graph 0, 0 to 683958., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 49 from 706451, graph 0, 0 to 706451., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 50 from 729232, graph 0, 0 to 729232., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 51 from 752299, graph 0, 0 to 752299., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 52 from 775648, graph 0, 0 to 775648., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 53 from 799284, graph 0, 0 to 799284., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 54 from 823210, graph 0, 0 to 823210., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 55 from 847425, graph 0, 0 to 847425., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 56 from 871930, graph 0, 0 to 871930., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 57 from 896724, graph 0, 0 to 896724., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 58 from 921819, graph 0, 0 to 921819., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 59 from 947210, graph 0, 0 to 947210., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 60 from 972891, graph 0, 0 to 972891., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 61 from 998870, graph 0, 0 to 998870., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 62 from 1025145, graph 0, 0 to 1025145., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 63 from 1051720, graph 0, 0 to 1051720., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 64 from 1078599, graph 0, 0 to 1078599., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 65 from 1105779, graph 0, 0 to 1105779., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 66 from 1133272, graph 0, 0 to 1133272., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 67 from 1161079, graph 0, 0 to 1161079., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 68 from 1189202, graph 0, 0 to 1189202., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 69 from 1217648, graph 0, 0 to 1217648., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 70 from 1246418, graph 0, 0 to 1246418., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 71 from 1275518, graph 0, 0 to 1275518., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 72 from 1304951, graph 0, 0 to 1304951., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 73 from 1334725, graph 0, 0 to 1334725., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 74 from 1364841, graph 0, 0 to 1364841., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 75 from 1395319, graph 0, 0 to 1395319., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 76 from 1426161, graph 0, 0 to 1426161., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 77 from 1457376, graph 0, 0 to 1457376., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 78 from 1488974, graph 0, 0 to 1488974., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 79 from 1520967, graph 0, 0 to 1520967., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 80 from 1553358, graph 0, 0 to 1553358., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 81 from 1586170, graph 0, 0 to 1586170., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 82 from 1619408, graph 0, 0 to 1619408., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 83 from 1653095, graph 0, 0 to 1653095., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 84 from 1687253, graph 0, 0 to 1687253., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 85 from 1721896, graph 0, 0 to 1721896., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 86 from 1757051, graph 0, 0 to 1757051., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 87 from 1792739, graph 0, 0 to 1792739., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 88 from 1828991, graph 0, 0 to 1828991., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 89 from 1865851, graph 0, 0 to 1865851., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 90 from 1903361, graph 0, 0 to 1903361., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 91 from 1941581, graph 0, 0 to 1941581., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 92 from 1980568, graph 0, 0 to 1980568., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 93 from 2020413, graph 0, 0 to 2020413., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 94 from 2061235, graph 0, 0 to 2061235., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
set arrow 95 from 2103179, graph 0, 0 to 2103179., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
#set arrow 96 from 2146485, graph 0, 0 to 2146485., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
#set arrow 97 from 2191518, graph 0, 0 to 2191518., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
#set arrow 98 from 2238935, graph 0, 0 to 2238935., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
#set arrow 99 from 2290535, graph 0, 0 to 2290535., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
#set arrow 100 from 2349497, graph 0, 0 to 2349497., graph 1, 0 nohead back nofilled linecolor rgb "#999999" linewidth 1.000 dashtype solid
unset style line
unset style arrow
set style histogram clustered gap 2 title textcolor lt -1
unset object
unset walls
set style textbox transparent margins 1.0, 1.0 border lt -1 linewidth 1.0
set offsets 0, 0, 0, 0
set pointsize 1
set pointintervalbox 1
set encoding default
unset polar
unset parametric
unset spiderplot
unset decimalsign
unset micro
unset minussign
set view 60, 30, 1, 1
set view azimuth 0
set rgbmax 255
set samples 100, 100
set isosamples 10, 10
set surface
unset contour
set cntrlabel format '%8.3g' font '' start 5 interval 20
set mapping cartesian
set datafile separator whitespace
set datafile nocolumnheaders
unset hidden3d
set cntrparam order 4
set cntrparam linear
set cntrparam levels 5
set cntrparam levels auto
set cntrparam firstlinetype 0 unsorted
set cntrparam points 5
set size ratio 0 1,1
set origin 0,0
set style data points
set style function lines
unset xzeroaxis
unset yzeroaxis
unset zzeroaxis
unset x2zeroaxis
unset y2zeroaxis
set xyplane relative 0.5
set tics scale 1, 0.5, 1, 1, 1
set mxtics default
set mytics default
set mztics default
set mx2tics default
set my2tics default
set mcbtics default
set mrtics default
set nomttics
set xtics border in scale 1,0.5 mirror norotate autojustify
set xtics norangelimit autofreq
set ytics border in scale 1,0.5 mirror norotate autojustify
set ytics norangelimit autofreq
set ztics border in scale 1,0.5 nomirror norotate autojustify
set ztics norangelimit autofreq
unset x2tics
unset y2tics
set cbtics border in scale 1,0.5 mirror norotate autojustify
set cbtics norangelimit autofreq
set rtics axis in scale 1,0.5 nomirror norotate autojustify
set rtics norangelimit autofreq
unset ttics
set title ""
set title font "" textcolor lt -1 norotate
set timestamp bottom
set timestamp ""
set timestamp font "" textcolor lt -1 norotate
set trange [ * : * ] noreverse nowriteback
set urange [ * : * ] noreverse nowriteback
set vrange [ * : * ] noreverse nowriteback
set xlabel "Index(a,b,c)"
set xlabel font "" textcolor lt -1 norotate
set x2label ""
set x2label font "" textcolor lt -1 norotate
set xrange [ 0:2100000 ] noreverse writeback
set x2range [ * : * ] noreverse writeback
set ylabel "E^{abc} / P^{abc}"
set ylabel font "" textcolor lt -1 rotate
set y2label ""
set y2label font "" textcolor lt -1 rotate
set yrange [ 0.00000 : 10.0000 ] noreverse writeback
set y2range [ * : * ] noreverse writeback
set zlabel ""
set zlabel font "" textcolor lt -1 norotate
set zrange [ * : * ] noreverse writeback
set cblabel ""
set cblabel font "" textcolor lt -1 rotate
set cbrange [ * : * ] noreverse writeback
set rlabel ""
set rlabel font "" textcolor lt -1 norotate
set rrange [ * : * ] noreverse writeback
unset logscale
unset jitter
set zero 1e-08
set lmargin -1
set bmargin -1
set rmargin -1
set tmargin -1
set locale "en_AU.UTF-8"
set pm3d explicit at s
set pm3d scansautomatic
set pm3d interpolate 1,1 flush begin noftriangles noborder corners2color mean
set pm3d clip z
set pm3d nolighting
set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB
set palette rgbformulae 7, 5, 15
set colorbox default
set colorbox vertical origin screen 0.9, 0.2 size screen 0.05, 0.6 front noinvert bdefault
set style boxplot candles range 1.50 outliers pt 7 separation 1 labels auto unsorted
set loadpath
set fontpath
set psdir
set fit brief errorvariables nocovariancevariables errorscaling prescale nowrap v5
GNUTERM = "qt"
I = {0.0, 1.0}
VoxelDistance = 0.0
#set xtics 100000
unset grid
## Last datafile plotted: "max_data.dat"
plot 'max_data.dat' every 1 index 0 u 1:(-$3 * 2420853) w impulses lw 3 title 'Uniform sampling', \
'max_data.dat' every 1 index 0 u 1:(-$3 * $2) w impulses lw 3 title 'Importance sampling' , 0.051806920848 w l title ''
#plot 'data.dat' every 1 index 0 u (-$3 * 2420853) w impulses lw 3 title 'Uniform sampling', \
# 'data.dat' every 1 index 0 u (-$3 * $2) w impulses lw 3 title 'Importance sampling'
# Zoomed plot
set grid
set object 1 rect from screen 0.45, screen 0.3 to screen 0.94, screen 0.8 behind
set object 1 rect fc rgb "white" fillstyle solid 1.0 # fully opaque white background
set size 0.5, 0.5 # smaller plot size
set origin 0.45, 0.3 # position the zoomed plot
set xrange [0:3115] # set the x-range for the zoom
set yrange [*:*] # auto-scale y-axis based on the zoomed data
unset xlabel
unset ylabel
unset key
replot
# Finish multiplot
unset multiplot
# EOF

View File

@ -87,7 +87,7 @@
\begin{abstract}
We introduce a novel algorithm that leverages stochastic sampling
techniques to approximate the perturbative triples correction in the
techniques to compute the perturbative triples correction in the
coupled-cluster (CC) framework.
By combining elements of randomness and determinism, our algorithm
achieves a favorable balance between accuracy and computational cost.
@ -118,14 +118,11 @@ that were previously computationally prohibitive.
\label{sec:introduction}
Coupled cluster (CC) theory is an accurate quantum mechanical approach widely used in computational chemistry to describe the electronic structure of atoms and molecules.\cite{Cizek_1966,Cizek_1969,Paldus_1992}
In recent years, CC theories for both ground state and excited states have received considerable attention in the context of material
In recent years, CC theories for both ground state and excited states
have received considerable attention in the context of material
science due to its good balance between accuracy and computational cost.\cite{APeriodicEquaGallo2021,Gaussian.based.James.2017}
CC offers a systematic and rigorous framework for accurate predictions of
molecular properties and reactions by accounting for electron correlation
effects beyond the mean-field approximation. The CC framework starts with a
parameterized wave function, typically referred to as the CC wave function,
which is expressed as an exponential series of particle-hole excitation
operators acting on a reference state:
CC offers a systematic and rigorous framework for accurate predictions of molecular properties and reactions by accounting for electron correlation effects beyond the mean-field approximation.
The CC framework starts with a parameterized wave function, typically referred to as the CC wave function, which is expressed as an exponential series of particle-hole excitation operators acting on a reference state:
\begin{equation}
\ket{\Psi_{\text{CC}}} = e^{\hat{T}} \ket{\Phi}
\end{equation}
@ -207,7 +204,7 @@ Thus, the computational expense of calculating the sample, which scales as $N_\t
Consequently, employing a sufficient number of Monte Carlo samples to ensure that each contribution is selected at least once results in a total computational cost that is only negligibly higher than that of an exact computation.
To reduce the variance, the samples are drawn using the probability
To reduce the variance, we apply importance sampling: the samples are drawn using the probability
\begin{equation}
P^{abc} = \frac{1}{\mathcal{N}} \frac{1}{\max \left(\epsilon_{\min}, \epsilon_a + \epsilon_b + \epsilon_c \right)}
\end{equation}
@ -219,7 +216,18 @@ E_{(T)} = \left\langle \frac{E^{abc}}{P^{abc}} \right \rangle_{P^{abc}} =
\end{equation}
where $n^{abc}$ is the number of times the triplet $(a,b,c)$ was drawn with probability $P^{abc}$.
This approach effectively reduces the statistical error bars by approximately a factor of two for the same computational expense due to two primary reasons: i) the estimator exhibits reduced fluctuations, ii) triplet combinations with low-energy orbitals are significantly more likely to be selected than others, enhancing the efficiency of memoization.
\begin{figure}[t]
\centering
\includegraphics[width=\columnwidth]{buckets.pdf}
\caption{%
Ratios $\frac{E^{abc}}{P^{abc}}$ obtained with the data of benzene/cc-pVTZ, using uniform or importance sampling.
Every bucket, delimited by vertical bars, contains a number of triplets such that the sum
\(\sum_{(a,b,c)}P^{abc}\) remains as uniform as possible. The zoomed window corresponds to the first bucket. The high fluctuations occurring in the first buckets are reduced by importance sampling.
\label{fig:buckets}
}
\end{figure}
This approach effectively reduces the statistical error bars by approximately a factor of two for the same computational expense due to two primary reasons: i) the estimator exhibits reduced fluctuations, ii) triplet combinations with low-energy orbitals are significantly more likely to be selected than others, enhancing the efficiency of memoization (see Fig.~\ref{fig:buckets}).
We employ the inverse transform sampling technique to select samples, where an array of pairs $\qty(P^{abc}, (a,b,c))$ is stored.
To further reduce the variance of the samples, this array is sorted in descending order based on $P^{abc}$ and subsequently partitioned into buckets, $B$, as can be seen diagrammatically in Figure~\ref{fig:buckets}.
@ -228,18 +236,6 @@ as possible across all buckets.
As each bucket is equally probable, samples are defined as combinations of triplets, with one triplet drawn from each bucket.
Should the values of $E^{abc}$ be skewed, this advanced refinement significantly diminishes the variance.
\begin{figure}[h]
\centering
\includegraphics{buckets.pdf}
\caption{%
Diagrammatic representation of the bucket partition of the triplets \(a,b,c\).
Every bucket \(B_i\) contains a number of triplets such that the sum
\(\sum_{(a,b,c)}P^{abc}\) remains as uniform as possible.
\label{fig:buckets}
}
\end{figure}
The total perturbative contribution is computed as the aggregate of contributions from various buckets:
\begin{equation}
E_{(T)} = \sum_B E_B = \sum_B\sum_{(a,b,c) \in B} E^{abc}.
@ -262,25 +258,6 @@ Therefore, it is possible to obtain the exact contribution, characterized by zer
\subsection{Implementation Details}
\label{sec:implementation}
The algorithm presented in Algorithm~\ref{alg:stoch} was implemented in the \textsc{Quantum Package} software.
\cite{garniron_2019}
The stochastic algorithm is implemented using OpenMP tasks, where each task
consists in the computation of a single component $E^{abc}$.
The computation of the running average and statistical error is executed every second,
for printing or for exiting when the statistical error gets below a given threshold.
The number of samples $N^{abc}$ of each triplet $(a,b,c)$ is initialized to $-1$, to identify
the contributions that have not been already computed.
An outer \emph{for loop} runs over the maximum number of iteration, equal to
the number of different triplets $N_{\text{triplets}}$.
Within a loop iteration, the index of the first non-computed triplet $(a,b,c)$ is identified, and the task associated with its computation is sent to the task queue.
As this triplet has never been drawn, $N^{abc}$ is set to zero.
Then, a triplet $(a,b,c)$ is drawn randomly.
If the $E^{abc}$ has not been computed (identified by $N^{abc}=-1$), the number of samples is set to zero and the task for the computation of this contribution is enqueued.
In any case, $N^{abc}$ is then incremented.
\begin{algorithm}[H]
\caption{\label{alg:stoch} Pseudo-code for the computation of the perturbative triples correction implemented in Quantum Package. $i_\text{min}$ denotes the first non-computed triplet, $w_{\text{accu}}$ contains the cumulative probability density, $\text{Search}(A, x)$ searches for $x$ in array $A$, $\text{First}(i)$ and $\text{Last}(i)$ return the first last indices belonging to bucket $i$.}
$i_{\text{min}} \leftarrow 1$ ;
@ -345,6 +322,25 @@ $t_0 \leftarrow \text{WallClockTime}()$ \;
}
\end{algorithm}
The algorithm presented in Algorithm~\ref{alg:stoch} was implemented in the \textsc{Quantum Package} software.
\cite{garniron_2019}
The stochastic algorithm is implemented using OpenMP tasks, where each task
consists in the computation of a single component $E^{abc}$.
The computation of the running average and statistical error is executed every second,
for printing or for exiting when the statistical error gets below a given threshold.
The number of samples $N^{abc}$ of each triplet $(a,b,c)$ is initialized to $-1$, to identify
the contributions that have not been already computed.
An outer \emph{for loop} runs over the maximum number of iteration, equal to
the number of different triplets $N_{\text{triplets}}$.
Within a loop iteration, the index of the first non-computed triplet $(a,b,c)$ is identified, and the task associated with its computation is sent to the task queue.
As this triplet has never been drawn, $N^{abc}$ is set to zero.
Then, a triplet $(a,b,c)$ is drawn randomly.
If the $E^{abc}$ has not been computed (identified by $N^{abc}=-1$), the number of samples is set to zero and the task for the computation of this contribution is enqueued.
In any case, $N^{abc}$ is then incremented.
\subsection{Convergence of the statistical error in benzene}
@ -353,13 +349,13 @@ The benzene molecule serves as our reference system for conducting frozen-core C
Essentially, this involves the correlation of 30 (\(N_\text{o} = 15\)) electrons using either 258 (\(N_\text{v} = 243\)) or 503 (\(N_\text{v} = 488\)) molecular orbitals.
The calculations were performed on an AMD \textsc{Epyc} 7513 dual socket server (64 cores in total).
\begin{figure}
\begin{figure}[tb]
\includegraphics[width=\columnwidth]{benzene_tz.pdf}
\includegraphics[width=\columnwidth]{benzene_qz.pdf}
\caption{\label{fig:benzene} Energy convergence of benzene plotted against the program execution time, showing comparisons between the cc-pVTZ (upper curve) and cc-pVQZ (lower curve) basis sets. The blue lines indicate the exact CCSD(T) energies.}
\end{figure}
\begin{figure}
\begin{figure}[tb]
\includegraphics[width=\columnwidth]{benzene_err.pdf}
\caption{\label{fig:benzene_err} Convergence of the statistical error of the perturbative triples contribution in benzene as a function of the percentage of computed contributions, for both cc-pVTZ and cc-pVQZ basis sets.}
\end{figure}
@ -405,7 +401,7 @@ where $E(r)$ represents the energy at a bond length $r$, $D_e$ the depth of the
\end{equation}
with $\mu$ denoting the reduced mass of the \ce{CuCl} molecule, and $c$ the speed of light.
\begin{figure}
\begin{figure}[tb]
\includegraphics[width=\columnwidth]{cucl.pdf}
\caption{\label{fig:cucl} CCSD(T) energies of CuCl obtained with the exact CCSD(T) algorithm (stars), the stochastic algorithm using only 1\% of the contributions (error bars), and the Morse potential fitting the points obtained with the stochastic algorithm.}
\end{figure}
@ -430,7 +426,7 @@ We linked our code with the Intel MKL library for BLAS operations.
Additionally, we executed the code on an ARM Q80 server featuring 80 cores at \SI{2.8}{\giga\hertz}, and although performance counters were unavailable, we approximated the Flop/s rate by comparing the total execution time with that measured on the AMD CPU.
For this, we utilized the \textsc{ArmPL} library for BLAS operations.
\begin{table*}
\begin{table*}[htb]
\begin{ruledtabular}
\begin{tabular}{lcccccc}
CPU & $N_{\text{cores}}$ & $V$ & $F$ & Memory Bandwidth & Peak DP & Measured performance \\
@ -464,7 +460,7 @@ By leveraging memory bandwidth and double precision throughput peak, we determin
\subsection{Parallel efficiency}
\begin{figure}
\begin{figure}[tb]
\includegraphics[width=\columnwidth]{scaling.pdf}
\caption{\label{fig:speedup} Parallel speedup obtained with the ARM Q80 and AMD \textsc{Epyc} servers.}
\end{figure}