Compare commits

...

4 Commits

Author SHA1 Message Date
0adb3c7d9c FOrgot ERC 2024-05-28 11:42:32 +02:00
3ea7fbba52 Updated data 2024-05-25 18:24:40 +02:00
2e18256b80 Minor changes 2024-05-25 17:36:00 +02:00
0ecca24d2e Added plot for bukets 2024-05-23 17:48:29 +02:00
12 changed files with 44850 additions and 2123 deletions

View File

@ -1,6 +1,8 @@
# TZ
# Benzene, cc-pVTZ
# ----------------
#
# ======================= ============== ==========
# E(CCSD(T)) Error %
# ---------------+------------+-------
# ======================= ============== ==========
-231.80600113 1.1096E-03 0.96
-231.80526641 7.5354E-04 1.96
@ -2115,3 +2117,4 @@
-231.87174571 1.7592E-07 99.94
-231.87174571 1.7496E-07 100.00
-231.87174565 0. 100.00
# ======================= ============== ==========

View File

@ -1,5 +1,9 @@
# R CCSD(T) Stochastic CCSD(T)
#---------------------------------------------------------
# CuCl dissociation curve
# -----------------------
#
# ====== ==================== ================ ============
# R CCSD(T) Stochastic(1%) Error
# ====== ==================== ================ ============
1.55 -2099.590506349950 -2099.58900041 1.2867E-03
1.65 -2099.671184187604 -2099.67111214 1.4130E-03
1.75 -2099.720045862965 -2099.72247666 1.8605E-03
@ -12,4 +16,5 @@
2.45 -2099.747028328725 -2099.74878665 1.8202E-03
2.55 -2099.738451107727 -2099.73743548 1.6473E-03
2.65 -2099.729597826175 -2099.73119406 1.7203E-03
# ====== ==================== ================ ============

102
Data/data_buckets.txt Normal file
View File

@ -0,0 +1,102 @@
# Indices of the first and last triplet in each bucket
1 3115
3116 7569
7570 12858
12859 18844
18845 25457
25458 32641
32642 40359
40360 48602
48603 57368
57369 66666
66667 76503
76504 86871
86872 97755
97756 109142
109143 121012
121013 133351
133352 146139
146140 159350
159351 172962
172963 186962
186963 201323
201324 216044
216045 231111
231112 246517
246518 262251
262252 278306
278307 294677
294678 311356
311357 328334
328335 345611
345612 363187
363188 381057
381058 399222
399223 417686
417687 436440
436441 455486
455487 474825
474826 494452
494453 514365
514366 534562
534563 555043
555044 575811
575812 596863
596864 618204
618205 639836
639837 661752
661753 683957
683958 706450
706451 729231
729232 752298
752299 775647
775648 799283
799284 823209
823210 847424
847425 871929
871930 896723
896724 921818
921819 947209
947210 972890
972891 998869
998870 1025144
1025145 1051719
1051720 1078598
1078599 1105778
1105779 1133271
1133272 1161078
1161079 1189201
1189202 1217647
1217648 1246417
1246418 1275517
1275518 1304950
1304951 1334724
1334725 1364840
1364841 1395318
1395319 1426160
1426161 1457375
1457376 1488973
1488974 1520966
1520967 1553357
1553358 1586169
1586170 1619407
1619408 1653094
1653095 1687252
1687253 1721895
1721896 1757050
1757051 1792738
1792739 1828990
1828991 1865850
1865851 1903360
1903361 1941580
1941581 1980567
1980568 2020412
2020413 2061234
2061235 2103178
2103179 2146484
2146485 2191517
2191518 2238934
2238935 2290534
2290535 2349496
2349497 2420847

42219
Data/max_data.dat Normal file

File diff suppressed because it is too large Load Diff

303
Data/plot_buckets.plt Normal file
View File

@ -0,0 +1,303 @@
#!/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 ''
# 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

@ -1,31 +1,41 @@
# DZ: AMD EPYC
1 266. 0.1015625
# Wall-clock time for benzene, cc-pVDZ
# AMD EPYC
# ===== ================= ====================
# Cores Seconds Arithmetic intensity
# ===== ================= ====================
1 266.065728473472 0.1015625
2 133.202792882919 0.203125
4 68.3963158130646 0.40625
8 35.3168480396271 0.8125
16 17.4276471138000 1.625
24 11.5433599948883
28 10.3698871135712
32 9.43897294998169 3.25 12.1150507926941
40 8.34011387825012
48 7.40271902084351
56 6.72331714630127
64 6.40971302986145 6.5
16 17.4276471138000 1.625
24 11.5433599948883
28 10.3698871135712
32 9.43897294998169 3.25
40 8.34011387825012
48 7.40271902084351
56 6.72331714630127
64 6.40971302986145 6.5
# ===== ================= ====================
# DZ: ARM Q80
1 740.99828964984044 0.109375
2 368.10031103389338 0.21875
4 183.47006468195468 0.4375
8 92.296218489762396 0.875
16 47.492009534966201 1.75
24 32.694960118737072 2.625
32 25.408835886977613 3.5
40 21.404467605985701 4.375
48 19.549200831912458 5.25
56 18.556575596332550 6.125 # Max
64 18.981703117024153 7.0
68 21.941064534708858 7.4375
72 27.031634503975511 7.87
76 32.015603828709573 8.3125
80 39.939096361864358 8.75
# ARM Q80
# ===== ================= ====================
# Cores Seconds Arithmetic intensity
# ===== ================= ====================
1 740.9982896498404 0.109375
2 368.1003110338933 0.21875
4 183.4700646819546 0.4375
8 92.29621848976239 0.875
16 47.49200953496620 1.75
24 32.69496011873707 2.625
32 25.40883588697761 3.5
40 21.40446760598570 4.375
48 19.54920083191245 5.25
56 18.55657559633255 6.125 # Max
64 18.98170311702415 7.0
68 21.94106453470885 7.4375
72 27.03163450397551 7.87
76 32.01560382870957 8.3125
80 39.93909636186435 8.75
# ===== ================= ====================

2
Manuscript/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/build/
/svg-inkscape/

View File

@ -5,4 +5,4 @@ BUILD=build
inkscape --export-type=pdf $<
$(BUILD)/$(TEX).pdf: $(TEX).tex $(wildcard *.pdf) $(wildcard *.bib) buckets.pdf
latexmk -shell-escape -pdf -outdir=$(BUILD) $(TEX)
latexmk -shell-escape -pdf $(TEX)

BIN
Manuscript/buckets.pdf Normal file

Binary file not shown.

70
Manuscript/orcidlink.sty Normal file
View File

@ -0,0 +1,70 @@
%%
%% This is file `orcidlink.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% orcidlink.dtx (with options: `package')
%%
%% This is a generated file.
%%
%% Copyright (C) 2019-2023 by Leo C. Stein <leo.stein@gmail.com>
%% --------------------------------------------------------------------------
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{orcidlink}
[2023/12/30 v1.0.5 Linked ORCiD logo macro package]
%% All I did was package up Milo's code on TeX.SE,
%% see https://tex.stackexchange.com/a/445583/34063
\RequirePackage{hyperref}
\RequirePackage{tikz}
\ProcessOptions\relax
\usetikzlibrary{svg.path}
\definecolor{orcidlogocol}{HTML}{A6CE39}
\tikzset{
orcidlogo/.pic={
\fill[orcidlogocol] svg{M256,128c0,70.7-57.3,128-128,128C57.3,256,0,198.7,0,128C0,57.3,57.3,0,128,0C198.7,0,256,57.3,256,128z};
\fill[white] svg{M86.3,186.2H70.9V79.1h15.4v48.4V186.2z}
svg{M108.9,79.1h41.6c39.6,0,57,28.3,57,53.6c0,27.5-21.5,53.6-56.8,53.6h-41.8V79.1z M124.3,172.4h24.5c34.9,0,42.9-26.5,42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z}
svg{M88.7,56.8c0,5.5-4.5,10.1-10.1,10.1c-5.6,0-10.1-4.6-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1C84.2,46.7,88.7,51.3,88.7,56.8z};
}
}
%% Reciprocal of the height of the svg whose source is above. The
%% original generates a 256pt high graphic; this macro holds 1/256.
\newcommand{\@OrigHeightRecip}{0.00390625}
%% We will compute the current X height to make the logo the right height
\newlength{\@curXheight}
%% Prevent externalization of the ORCiD logo.
\newcommand{\@preventExternalization}{%
\ifcsname tikz@library@external@loaded\endcsname%
\tikzset{external/export next=false}\else\fi%
}
\DeclareRobustCommand\orcidlink[1]{%
\texorpdfstring{%
\setlength{\@curXheight}{\fontcharht\font`X}%
\href{https://orcid.org/#1}{\XeTeXLinkBox{\mbox{%
\@preventExternalization%
\begin{tikzpicture}[yscale=-\@OrigHeightRecip*\@curXheight,
xscale=\@OrigHeightRecip*\@curXheight,transform shape]
\pic{orcidlogo};
\end{tikzpicture}%
}}}}{}}
\endinput
%%
%% End of file `orcidlink.sty'.

View File

@ -549,7 +549,7 @@ swh:1:dir:6d82ae7ac757c78d7720dd89dfa52d7a453d2f68;origin=https://github.com/Qua
year = {2021}
}
@article{Gaussian.based.James.2017,
@article{GaussianBasedJames2017,
author = {James McClain and Qiming Sun and Garnet Kin-Lic Chan and Timothy C. Berkelbach},
doi = {10.1021/acs.jctc.7b00049},
eprint = {1701.04832v1},
@ -564,3 +564,17 @@ swh:1:dir:6d82ae7ac757c78d7720dd89dfa52d7a453d2f68;origin=https://github.com/Qua
volume = {13},
year = {2017}
}
@article{pople_1999,
author = {Pople, John A.},
title = {{Nobel Lecture: Quantum chemical models}},
journal = {Rev. Mod. Phys.},
volume = {71},
number = {5},
pages = {1267--1274},
year = {1999},
month = oct,
issn = {1539-0756},
publisher = {American Physical Society},
doi = {10.1103/RevModPhys.71.1267}
}

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
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:
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,GaussianBasedJames2017}
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}
@ -168,11 +165,11 @@ For a closed-shell reference with canonical orbitals, each individual term is ex
\end{equation}
and depends on the canonical orbital energies $\epsilon$, and on the tensors $W$ and $V$:
\begin{align}
W_{ijk}^{abc} & = P_{ijk}^{abc} \qty( \sum_d^{\text{virt}} \qty(bd|ai) t_{kj}^{cd} -
W_{ijk}^{abc} & = \Pi_{ijk}^{abc} \qty( \sum_d^{\text{virt}} \qty(bd|ai) t_{kj}^{cd} -
\sum_l^{\text{occ}} \qty(ck|jl) t_{ab}^{il}) \\
V_{ijk}^{abc} & = W_{ijk}^{abc} + \qty(bj|ck) t_i^a + \qty(ai|ck) t_j^b + \qty(ai|bj) t_k^c
\end{align}
where $P_{ijk}^{abc}$ is a sign-less permutation operator, $(t^a_i, t^{ab}_{ij})$ are the CCSD amplitudes,
where $\Pi_{ijk}^{abc}$ is a sign-less permutation operator, $(t^a_i, t^{ab}_{ij})$ are the CCSD amplitudes,
\((pq|rs)\) are the two-electron coulomb integrals,
and the indices $i,j,k,l$ and $a,b,c,d$ refer to occupied and virtual orbitals, respectively.
@ -192,7 +189,7 @@ In the algorithm proposed by Rendell\cite{rendell_1991}, for each given triplet
\subsection{Stochastic formulation}
We propose an algorithm influenced by the semi-stochastic approach originally developed for computing the Epstein-Nesbet second-order perturbation correction to the energy. \cite{garniron_2017}
We propose an algorithm influenced by the semi-stochastic approach introduced in Ref.~\citenum{garniron_2017}, originally developed for computing the Epstein-Nesbet second-order perturbation correction to the energy.
The perturbative triples correction is expressed as a sum of corrections, each indexed solely by virtual orbitals:
\begin{equation}
@ -203,11 +200,11 @@ Monte Carlo sampling is employed by selecting samples $E^{abc}$.
The principal advantage of this formulation is that the number of triplet combinations $(a,b,c)$, given by $N_v^3$, is sufficiently small to allow for all contributions $E^{abc}$ to be stored in memory.
The first time a triplet $(a,b,c)$ is drawn, its corresponding value $E^{abc}$ is computed and then stored.
Subsequent drawings of the same triplet retrieve the value from memory. We refer to this technique as \emph{memoization}.
Thus, the computational expense of calculating the sample, which scales as $N_\text{o}^3 \times N_\text{v}$, is incurred only once, with all subsequent accesses being computationally trivial.
Thus, the computational expense of calculating the sample, which scales as $N_\text{o}^3 \times N_\text{v}$, is incurred only once, with all subsequent accesses being made at no cost.
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 fluctuations of the statistical estimator, 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,39 +216,41 @@ 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.
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}.
Each bucket is designed such that the sum $\sum_{(a,b,c) \in B} P^{abc}$ within it is as uniform
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]
\begin{figure}[t]
\centering
\includegraphics{buckets.pdf}
\includegraphics[width=\columnwidth]{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.
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 fluctuations originating from the discrepancy of the values in the first buckets are considerably 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 as can be seen diagrammatically in Figure~\ref{fig:buckets}.
The partitioning into buckets is designed such that the sum $\sum_{(a,b,c) \in B} P^{abc}$ within each bucket $B$ is as uniform
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.
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}.
\end{equation}
Once every triplet within a bucket $B$ has been drawn at least once, the contribution $E_B$ can be determined.
At this juncture, there is no longer a necessity to evaluate \(E_B\) stochastically, and the buckets can be categorized into stochastic ($\mathcal{S}$) and deterministic ($\mathcal{D}$) groups:
At this juncture, there is no longer a necessity to evaluate \(E_B\) stochastically, and the buckets can be categorized into
deterministic ($\mathcal{D}$) and stochastic ($\mathcal{S}$) groups:
\begin{equation}
\label{eq:separation}
E_{(T)} = \sum_{B \in \mathcal{D}} E_B + \frac{1}{|\mathcal{S}|} \sum_{B \in \mathcal{S}}
\left \langle \frac{E^B_{abc}}{P^{abc}} \right \rangle_{P^{abc}}.
\end{equation}
Not all buckets are of equal size; the number of triplets per bucket increases with the bucket's index. Consequently, the initial buckets transition into the deterministic set first, gradually reducing the stochastic contribution. When every triplet has been drawn, the exact value of $E_{(T)}$ is obtained, devoid of statistical error.
To accelerate the completion of the buckets, each Monte Carlo iteration triggers the computation of the first non-computed triplet. This ensures that after $N$ drawings, the
Not all buckets are of equal size (see Figure~\ref{fig:buckets}); the number of triplets per bucket increases with the bucket's index. Consequently, the initial buckets transition into the deterministic set first, gradually reducing the stochastic contribution. When every triplet has been drawn, the exact value of $E_{(T)}$ is obtained, devoid of statistical error.
To accelerate the completion of the buckets, each Monte Carlo iteration triggers concurrently the computation of the first non-computed triplet. This ensures that after $N$ drawings, the
exact contribution from each bucket can be obtained.
The computational time required to generate a random number is negligible compared to the time needed to compute a contribution, $E^{abc}$.
@ -262,25 +261,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 +325,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 iterations, equal by construction 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 +352,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}
@ -367,10 +366,10 @@ The calculations were performed on an AMD \textsc{Epyc} 7513 dual socket server
Figure~\ref{fig:benzene} shows the convergence of the CCSD(T) energy as a function of the program execution time using the two basis sets.
Notably, the exact CCSD(T) energy always falls within $2\sigma$, affirming the reliability of the statistical error.
Figure~\ref{fig:benzene_err} displays the statistical error as a function of the percentage of computed contributions.
Noteworthy in the figure are the curve discontinuities, attributable to readjustments in the separation between the deterministic and stochastic components of the calculation.
Noteworthy in the figure are the curve discontinuities, attributable to readjustments in the separation between the deterministic and stochastic components of the calculation (Eq.~\eqref{eq:separation}).
These updates lead to revised estimates and a diminution in statistical error.
Achieving chemical accuracy, defined as \SI{1.6}{\milli\hartree}, necessitates less than 1\% of the total contributions in both basis sets.
Achieving chemical accuracy, defined as \SI{1.6}{\milli\hartree},\cite{pople_1999} necessitates less than 1\% of the total contributions in both basis sets.
Attaining a \SI{0.1}{\milli\hartree} precision level requires computation of 32\% and 15\% of the contributions for cc-pVTZ and cc-pVQZ, respectively.
The more rapid convergence observed with the larger basis set aligns with expectations, as expanding the basis set tends to increase the proportion of minor contributions while maintaining a relatively steady count of significant contributions.
This trend underscores the algorithm's enhanced suitability for systems with fewer electrons and extensive basis sets, as opposed to larger electron counts in smaller basis sets.
@ -382,8 +381,8 @@ This trend underscores the algorithm's enhanced suitability for systems with few
Our methodology proves especially advantageous for scenarios requiring the
aggregation of numerous CCSD(T) energies, such as neural network training or
the exploration of potential energy surfaces.
In a recent article, the authors highlight the pivotal role of Quantum Monte
Carlo (QMC) in generating data for constructing potential energy surfaces.
In a recent article, Ceperley \textit{et al} highlight the pivotal role of Quantum Monte
Carlo (QMC) in generating data for constructing potential energy surfaces.\cite{ceperley_2024}
The study suggests that stochastic noise inherent in QMC can facilitate machine
learning model training, demonstrating that models can benefit from numerous,
less precise data points. These findings are supported by an analysis of
@ -405,7 +404,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}
@ -415,7 +414,7 @@ We froze the six lowest molecular orbitals, specifically the $1s$ orbital of \ce
The fitted Morse potential revealed a vibrational frequency of $\nu = \SI{414.7}{\per\centi\meter}$ and an equilibrium bond length of $r_e = \SI{3.92}{\bohr}$, aligning remarkably well with experimental values from the NIST database\cite{nist_2022} $\nu = \SI{417.6}{\per\centi\meter}$ and $r_e = \SI{3.88}{\bohr}$.
Subsequently, we applied our semi-stochastic algorithm to estimate the perturbative triples correction, utilizing merely 1\% of the total contributions.
This approach yielded a hundredfold acceleration in computational efficiency, achieving statistical uncertainty within the range of \SI{1.2} to \SI{2.0}{\milli\hartree}.
This approach yielded a hundredfold acceleration in computational efficiency, achieving statistical uncertainty within the range of \SI{1.2} to \SI{2.0}{\milli\hartree} for each data point.
The vibrational frequency and equilibrium distance estimated using this data, $\nu = \SI{415.1}{\per\centi\meter}$ and $r_e = \SI{3.91}{\bohr}$, demonstrated comparable precision to the full computational results.
Figure \ref{fig:cucl} illustrates the potential energy surface of \ce{CuCl}, displaying both the exact CCSD(T) energies and those estimated via the semi-stochastic method.
@ -428,9 +427,9 @@ However, we have outlined a strategy to reframe this operation into BLAS matrix
We evaluated the efficiency of our implementation using the Likwid\cite{treibig_2010} performance analysis tool on two distinct x86 platforms: an AMD \textsc{Epyc} 7513 dual-socket server equipped with 64 cores at \SI{2.6}{\giga\hertz}, and an Intel Xeon Gold 6130 dual-socket server with 32 cores at \SI{2.1}{\giga\hertz}.
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.
On the ARM architecture, 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 \\
@ -449,7 +448,7 @@ Peak performance is determined by calculating the maximum achievable Flops/s on
\begin{equation}
P = N_{\text{cores}} \times N_{\text{FMA}} \times 2 \times V \times F
\end{equation}
where $F$ represents the frequency, $V$ the number of double precision elements in a vector register, $N_{\text{FMA}}$ denotes the number of vector FMA units per core (all considered CPUs possess two), and $N_{\text{cores}}$ reflects the number of cores. Notably, the Xeon and ARM CPUs both operate at approximately 30\% of peak performance, while the AMD \textsc{Epyc} CPU demonstrates twice the efficiency, achieving 60\% of the peak.
where $F$ represents the processor frequency, $V$ the number of double precision elements in a vector register, $N_{\text{FMA}}$ denotes the number of vector fused multiply-accumulate (FMA) units per core (all considered CPUs possess two), and $N_{\text{cores}}$ reflects the number of cores. Notably, the Xeon and ARM CPUs both operate at approximately 30\% of peak performance, while the AMD \textsc{Epyc} CPU demonstrates twice the efficiency, achieving 60\% of the peak.
The relatively modest performance, at around 30\% efficiency, is attributed to the small dimensions of the matrices involved.
@ -464,7 +463,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}
@ -495,7 +494,7 @@ This novel approach combines deterministic and stochastic methods to optimize bo
The core of our algorithm is based on selectively calculating contributions labeled by triplets of virtual orbitals leveraging Monte Carlo sampling, and employing memoization to suppress redundant calculations.
Our results demonstrate that the semi-stochastic algorithm substantially reduces the computational effort compared to traditional deterministic methods, achieving near-exact accuracy with significantly reduced computational resources. Specifically, we have shown that the algorithm can achieve chemical accuracy with a small fraction of the computational effort required by fully deterministic approaches. This efficiency opens up new possibilities for studying larger systems or employing more extensive basis sets that were previously beyond reach due to computational constraints.
Additionally, the implementation of this algorithm has proven to be highly parallelizable, demonstrating excellent scalability across different high-performance computing platforms.
Additionally, the implementation of this algorithm has proven to be highly parallelizable, demonstrating excellent scalability across different platforms.
An important aspect of our investigation focused on the application of our algorithm to potential energy surface scanning.
Our method aligns well with recent findings suggesting the utility of numerous, less precise data points in constructing machine learning models.\cite{ceperley_2024}
@ -519,7 +518,8 @@ Exascale.
This project has received funding from the European Union's Horizon
2020 — Research and Innovation program --- under grant agreement
No.~952165.
A. Gallo acknowledges support and funding from the European Research Council (ERC) (Grant Agreement No. 101087184).
Y. Damour acknowledges support and funding from the European Research Council (ERC) (Grant Agreement No.~863481).
A. Gallo acknowledges support and funding from the European Research Council (ERC) (Grant Agreement No.~101087184).
This work was performed using HPC resourced from CALMIP (Toulouse)
under allocations p18005 and p22001.%
}
@ -528,8 +528,7 @@ under allocations p18005 and p22001.%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{Data availability statement}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The data that supports the findings of this study are available within
the article and its supplementary material.
The data used to produce all the plots is available at \url{https://zenodo.org/doi/10.5281/zenodo.11302501}.
%%%%%%%%%%%%%%%%%%%%%%%
\bibliography{stochastic_triples}