10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-12-25 13:53:49 +01:00

Merge pull request #22 from scemama/master

Merge alors!
This commit is contained in:
garniron 2018-05-07 12:12:42 +02:00 committed by GitHub
commit 0afa02fcf9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
148 changed files with 6475 additions and 2170 deletions

View File

@ -41,9 +41,9 @@ Demo
### 1) Configure ### 1) Configure
$ ./configure <config_file> $ ./configure.py <config_file>
For example you can type `./configure config/gfortran.cfg` For example you can type `./configure.py config/gfortran.cfg`
This command has two purposes : This command has two purposes :

View File

@ -32,7 +32,7 @@ OPENMP : 1 ; Append OpenMP flags
# #
[OPT] [OPT]
FC : -traceback FC : -traceback
FCFLAGS : -xSSE4.2 -O2 -ip -ftz -g FCFLAGS : -xAVX -O2 -ip -ftz -g
# Profiling flags # Profiling flags
################# #################

6
configure vendored
View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""configure """configure
@ -242,7 +242,7 @@ def checking(d_dependency):
version = check_output("irpf90 -v".split()).strip() version = check_output("irpf90 -v".split()).strip()
from distutils.version import LooseVersion from distutils.version import LooseVersion
if LooseVersion(version) < LooseVersion("1.6.7"): if LooseVersion(version) < LooseVersion("1.7.2"):
return 0 return 0
else: else:
return a return a
@ -497,7 +497,7 @@ def create_ninja_and_rc(l_installed):
'export LIBRARY_PATH=$(qp_prepend_export "LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)', 'export LIBRARY_PATH=$(qp_prepend_export "LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)',
'export C_INCLUDE_PATH=$(qp_prepend_export "C_INCLUDE_PATH" "${QP_ROOT}"/include)', 'export C_INCLUDE_PATH=$(qp_prepend_export "C_INCLUDE_PATH" "${QP_ROOT}"/include)',
'', '',
'if [[ $SHELL == "bash" ]] ; then', 'if [[ $SHELL == "/bin/bash" ]] ; then',
' source ${QP_ROOT}/install/EZFIO/Bash/ezfio.sh', ' source ${QP_ROOT}/install/EZFIO/Bash/ezfio.sh',
'fi', 'fi',
'', '',

956
data/basis/av5z-bfd Normal file
View File

@ -0,0 +1,956 @@
NEON
S 9
1 0.205835 0.057514
2 0.391384 0.215776
3 0.744196 0.374799
4 1.415048 0.326313
5 2.690638 0.166383
6 5.116103 -0.039149
7 9.727994 -0.085909
8 18.497256 0.006816
9 35.171534 0.000206
S 1
1 0.318678 1.000000
S 1
1 0.830178 1.000000
S 1
1 1.591904 1.000000
S 1
1 2.744999 1.000000
P 9
1 0.121772 0.029943
2 0.238248 0.114200
3 0.466136 0.219618
4 0.912002 0.268864
5 1.784344 0.256932
6 3.491095 0.191378
7 6.830378 0.112176
8 13.363732 0.063317
9 26.146332 0.008057
P 1
1 0.218226 1.000000
P 1
1 0.636921 1.000000
P 1
1 1.888191 1.000000
P 1
1 3.020108 1.000000
D 1
1 0.654924 1.000000
D 1
1 1.931502 1.000000
D 1
1 5.027566 1.000000
D 1
1 6.989700 1.000000
F 1
1 1.314297 1.000000
F 1
1 4.065928 1.000000
F 1
1 5.587487 1.000000
G 1
1 2.070925 1.000000
G 1
1 6.073107 1.000000
H 1
1 3.743118 1.000000
S 1
1 0.0957000 1.0000000
P 1
1 0.0654000 1.0000000
D 1
1 0.2130000 1.0000000
F 1
1 0.4250000 1.0000000
G 1
1 0.8090000 1.0000000
H 1
1 1.6280000 1.0000000
BORON
S 9
1 0.040569 0.032031
2 0.081044 0.243317
3 0.161898 0.434636
4 0.323418 0.329581
5 0.646080 0.111875
6 1.290648 -0.078699
7 2.578276 -0.098781
8 5.150520 0.016164
9 10.288990 -0.000016
S 1
1 0.070664 1.000000
S 1
1 0.170896 1.000000
S 1
1 0.375720 1.000000
S 1
1 0.614105 1.000000
P 9
1 0.029207 0.019909
2 0.058408 0.141775
3 0.116803 0.294463
4 0.233582 0.309028
5 0.467115 0.236378
6 0.934132 0.131317
7 1.868068 0.066454
8 3.735743 0.021248
9 7.470701 0.002837
P 1
1 0.057917 1.000000
P 1
1 0.143772 1.000000
P 1
1 0.436327 1.000000
P 1
1 0.566611 1.000000
D 1
1 0.134838 1.000000
D 1
1 0.380163 1.000000
D 1
1 0.808233 1.000000
D 1
1 1.022256 1.000000
F 1
1 0.272717 1.000000
F 1
1 0.799174 1.000000
F 1
1 1.002171 1.000000
G 1
1 0.486131 1.000000
G 1
1 0.824366 1.000000
H 1
1 0.632779 1.000000
S 1
1 0.0261000 1.0000000
P 1
1 0.0157000 1.0000000
D 1
1 0.0431000 1.0000000
F 1
1 0.0843000 1.0000000
G 1
1 0.2020000 1.0000000
H 1
1 0.3840000 1.0000000
ALUMINUM
S 9
1 0.045518 0.206193
2 0.100308 0.559887
3 0.221051 0.407852
4 0.487132 -0.041098
5 1.073500 -0.238652
6 2.365686 0.038132
7 5.213294 -0.003935
8 11.488606 0.000470
9 25.317597 -0.000014
S 1
1 0.056415 1.000000
S 1
1 0.155063 1.000000
S 1
1 0.332041 1.000000
S 1
1 0.725343 1.000000
P 9
1 0.014848 0.009932
2 0.030967 0.160212
3 0.064586 0.389171
4 0.134700 0.373235
5 0.280932 0.195800
6 0.585913 0.022947
7 1.221985 -0.053293
8 2.548578 0.004846
9 5.315330 -0.000726
P 1
1 0.033949 1.000000
P 1
1 0.083154 1.000000
P 1
1 0.251360 1.000000
P 1
1 0.314422 1.000000
D 1
1 0.088651 1.000000
D 1
1 0.241216 1.000000
D 1
1 0.575129 1.000000
D 1
1 0.989127 1.000000
F 1
1 0.148598 1.000000
F 1
1 0.374850 1.000000
F 1
1 0.781006 1.000000
G 1
1 0.259548 1.000000
G 1
1 0.561381 1.000000
H 1
1 0.328731 1.000000
S 1
1 0.0177000 1.0000000
P 1
1 0.0115000 1.0000000
D 1
1 0.0294000 1.0000000
F 1
1 0.0509000 1.0000000
G 1
1 0.1069000 1.0000000
H 1
1 0.2270000 1.0000000
NITROGEN
S 9
1 0.098869 0.067266
2 0.211443 0.334290
3 0.452197 0.454257
4 0.967080 0.267861
5 2.068221 0.000248
6 4.423150 -0.132606
7 9.459462 0.014437
8 20.230246 0.000359
9 43.264919 -0.000094
S 1
1 0.115320 1.000000
S 1
1 0.286632 1.000000
S 1
1 0.702011 1.000000
S 1
1 1.532221 1.000000
P 9
1 0.073234 0.035758
2 0.145867 0.153945
3 0.290535 0.277656
4 0.578683 0.297676
5 1.152612 0.234403
6 2.295756 0.140321
7 4.572652 0.067219
8 9.107739 0.031594
9 18.140657 0.003301
P 1
1 0.120601 1.000000
P 1
1 0.322697 1.000000
P 1
1 0.978538 1.000000
P 1
1 1.272759 1.000000
D 1
1 0.305579 1.000000
D 1
1 0.891436 1.000000
D 1
1 1.542532 1.000000
D 1
1 2.798122 1.000000
F 1
1 0.587676 1.000000
F 1
1 1.592967 1.000000
F 1
1 2.443045 1.000000
G 1
1 1.038637 1.000000
G 1
1 2.842018 1.000000
H 1
1 2.272542 1.000000
S 1
1 0.0518000 1.0000000
P 1
1 0.0369000 1.0000000
D 1
1 0.0971000 1.0000000
F 1
1 0.1920000 1.0000000
G 1
1 0.4360000 1.0000000
H 1
1 0.7880000 1.0000000
FLUORINE
S 9
1 0.172723 0.070240
2 0.364875 0.311088
3 0.770795 0.444675
4 1.628295 0.287011
5 3.439757 0.018759
6 7.266451 -0.128608
7 15.350300 0.009104
8 32.427348 0.000810
9 68.502433 -0.000133
S 1
1 0.191146 1.000000
S 1
1 0.459697 1.000000
S 1
1 1.250265 1.000000
S 1
1 2.542428 1.000000
P 9
1 0.101001 0.035321
2 0.204414 0.136924
3 0.413707 0.249353
4 0.837289 0.286620
5 1.694565 0.254541
6 3.429580 0.169572
7 6.941026 0.088542
8 14.047737 0.039843
9 28.430799 0.003378
P 1
1 0.170574 1.000000
P 1
1 0.489019 1.000000
P 1
1 1.505085 1.000000
P 1
1 2.018698 1.000000
D 1
1 0.517711 1.000000
D 1
1 1.523306 1.000000
D 1
1 3.901897 1.000000
D 1
1 5.603581 1.000000
F 1
1 0.981494 1.000000
F 1
1 2.950321 1.000000
F 1
1 4.297889 1.000000
G 1
1 1.638933 1.000000
G 1
1 4.619953 1.000000
H 1
1 2.963127 1.000000
S 1
1 0.0806000 1.0000000
P 1
1 0.0550000 1.0000000
D 1
1 0.1720000 1.0000000
F 1
1 0.3310000 1.0000000
G 1
1 0.6630000 1.0000000
H 1
1 1.3260000 1.0000000
CHLORINE
S 9
1 0.119944 0.148917
2 0.257348 0.503616
3 0.552157 0.523995
4 1.184691 0.013612
5 2.541836 -0.328846
6 5.453681 0.056309
7 11.701243 -0.001301
8 25.105812 -0.000294
9 53.866226 0.000076
S 1
1 0.152049 1.000000
S 1
1 0.639110 1.000000
S 1
1 0.801438 1.000000
S 1
1 1.671380 1.000000
P 9
1 0.074374 0.084925
2 0.155084 0.270658
3 0.323378 0.396022
4 0.674303 0.324325
5 1.406043 0.100661
6 2.931855 -0.069802
7 6.113450 -0.000951
8 12.747651 0.001501
9 26.581165 -0.000249
P 1
1 0.103926 1.000000
P 1
1 0.275582 1.000000
P 1
1 0.667436 1.000000
P 1
1 1.171614 1.000000
D 1
1 0.237419 1.000000
D 1
1 0.729517 1.000000
D 1
1 0.924049 1.000000
D 1
1 1.522182 1.000000
F 1
1 0.335123 1.000000
F 1
1 0.789116 1.000000
F 1
1 1.609975 1.000000
G 1
1 0.576133 1.000000
G 1
1 1.402971 1.000000
H 1
1 1.099609 1.000000
S 1
1 0.0479000 1.0000000
P 1
1 0.0348000 1.0000000
D 1
1 0.1003000 1.0000000
F 1
1 0.1640000 1.0000000
G 1
1 0.2770000 1.0000000
H 1
1 0.6070000 1.0000000
CARBON
S 9
1 0.051344 0.013991
2 0.102619 0.169852
3 0.205100 0.397529
4 0.409924 0.380369
5 0.819297 0.180113
6 1.637494 -0.033512
7 3.272791 -0.121499
8 6.541187 0.015176
9 13.073594 -0.000705
S 1
1 0.098302 1.000000
S 1
1 0.232034 1.000000
S 1
1 0.744448 1.000000
S 1
1 1.009914 1.000000
P 9
1 0.029281 0.001787
2 0.058547 0.050426
3 0.117063 0.191634
4 0.234064 0.302667
5 0.468003 0.289868
6 0.935757 0.210979
7 1.871016 0.112024
8 3.741035 0.054425
9 7.480076 0.021931
P 1
1 0.084047 1.000000
P 1
1 0.216618 1.000000
P 1
1 0.576869 1.000000
P 1
1 1.006252 1.000000
D 1
1 0.206619 1.000000
D 1
1 0.606933 1.000000
D 1
1 1.001526 1.000000
D 1
1 1.504882 1.000000
F 1
1 0.400573 1.000000
F 1
1 1.099564 1.000000
F 1
1 1.501091 1.000000
G 1
1 0.797648 1.000000
G 1
1 1.401343 1.000000
H 1
1 1.001703 1.000000
S 1
1 0.0394000 1.0000000
P 1
1 0.0272000 1.0000000
D 1
1 0.0701000 1.0000000
F 1
1 0.1380000 1.0000000
G 1
1 0.3190000 1.0000000
H 1
1 0.5860000 1.0000000
OXYGEN
S 9
1 0.125346 0.055741
2 0.268022 0.304848
3 0.573098 0.453752
4 1.225429 0.295926
5 2.620277 0.019567
6 5.602818 -0.128627
7 11.980245 0.012024
8 25.616801 0.000407
9 54.775216 -0.000076
S 1
1 0.160664 1.000000
S 1
1 0.384526 1.000000
S 1
1 0.935157 1.000000
S 1
1 1.937532 1.000000
P 9
1 0.083598 0.044958
2 0.167017 0.150175
3 0.333673 0.255999
4 0.666627 0.281879
5 1.331816 0.242835
6 2.660761 0.161134
7 5.315785 0.082308
8 10.620108 0.039899
9 21.217318 0.004679
P 1
1 0.130580 1.000000
P 1
1 0.372674 1.000000
P 1
1 1.178227 1.000000
P 1
1 1.589967 1.000000
D 1
1 0.401152 1.000000
D 1
1 1.174596 1.000000
D 1
1 2.823972 1.000000
D 1
1 4.292433 1.000000
F 1
1 0.708666 1.000000
F 1
1 2.006788 1.000000
F 1
1 3.223721 1.000000
G 1
1 1.207657 1.000000
G 1
1 3.584495 1.000000
H 1
1 2.615818 1.000000
S 1
1 0.0655000 1.0000000
P 1
1 0.0446000 1.0000000
D 1
1 0.1310000 1.0000000
F 1
1 0.2370000 1.0000000
G 1
1 0.5170000 1.0000000
H 1
1 1.0240000 1.0000000
HYDROGEN
S 9
1 0.013000 0.000706
2 0.029900 -0.002119
3 0.068770 0.057693
4 0.158170 0.230695
5 0.363792 0.277612
6 0.836721 0.169833
7 1.924458 0.097443
8 4.426254 0.029966
9 10.180385 -0.000452
S 1
1 0.122344 1.000000
S 1
1 0.402892 1.000000
S 1
1 0.715047 1.000000
S 1
1 1.379838 1.000000
P 9
1 0.003000 0.001242
2 0.007800 -0.000913
3 0.020281 -0.000054
4 0.052730 -0.000238
5 0.137097 -0.011530
6 0.356451 -0.018235
7 0.926774 -0.013929
8 2.409612 -0.009395
9 6.264991 -0.000347
P 1
1 0.784765 1.000000
P 1
1 0.173606 1.000000
P 1
1 0.513665 1.000000
D 1
1 2.917388 1.000000
D 1
1 0.466379 1.000000
D 1
1 1.132171 1.000000
F 1
1 1.649608 1.000000
F 1
1 0.793185 1.000000
G 1
1 1.606813 1.000000
S 1
1 0.0207000 1.0000000
P 1
1 0.0744000 1.0000000
D 1
1 0.1560000 1.0000000
F 1
1 0.2740000 1.0000000
G 1
1 0.5430000 1.0000000
PHOSPHORUS
S 9
1 0.074718 0.140225
2 0.160834 0.506746
3 0.346202 0.499893
4 0.745215 0.037301
5 1.604109 -0.284591
6 3.452917 0.024766
7 7.432561 0.001798
8 15.998924 -0.000314
9 34.438408 0.000088
S 1
1 0.082092 1.000000
S 1
1 0.195525 1.000000
S 1
1 0.434767 1.000000
S 1
1 1.027573 1.000000
P 9
1 0.050242 0.072095
2 0.102391 0.278735
3 0.208669 0.411034
4 0.425256 0.304724
5 0.866651 0.091727
6 1.766191 -0.057060
7 3.599410 -0.005103
8 7.335418 0.000328
9 14.949217 -0.000046
P 1
1 0.074159 1.000000
P 1
1 0.189382 1.000000
P 1
1 0.470798 1.000000
P 1
1 0.815677 1.000000
D 1
1 0.167800 1.000000
D 1
1 0.457307 1.000000
D 1
1 1.021650 1.000000
D 1
1 1.598720 1.000000
F 1
1 0.214751 1.000000
F 1
1 0.482380 1.000000
F 1
1 0.984966 1.000000
G 1
1 0.406484 1.000000
G 1
1 0.924507 1.000000
H 1
1 0.831913 1.000000
S 1
1 0.0335000 1.0000000
P 1
1 0.0253000 1.0000000
D 1
1 0.0624000 1.0000000
F 1
1 0.0950000 1.0000000
G 1
1 0.1840000 1.0000000
H 1
1 0.3720000 1.0000000
SILICON
S 9
1 0.059887 0.167492
2 0.130108 0.532550
3 0.282668 0.464290
4 0.614115 -0.002322
5 1.334205 -0.268234
6 2.898645 0.031921
7 6.297493 -0.000106
8 13.681707 -0.000145
9 29.724387 0.000067
S 1
1 0.075500 1.000000
S 1
1 0.196459 1.000000
S 1
1 0.424036 1.000000
S 1
1 0.920486 1.000000
P 9
1 0.036525 0.078761
2 0.076137 0.308331
3 0.158712 0.417773
4 0.330843 0.281676
5 0.689658 0.069876
6 1.437625 -0.056306
7 2.996797 0.000744
8 6.246966 -0.000259
9 13.022097 -0.000022
P 1
1 0.048136 1.000000
P 1
1 0.115813 1.000000
P 1
1 0.238594 1.000000
P 1
1 0.496918 1.000000
D 1
1 0.127945 1.000000
D 1
1 0.353096 1.000000
D 1
1 0.805426 1.000000
D 1
1 1.247695 1.000000
F 1
1 0.172876 1.000000
F 1
1 0.402208 1.000000
F 1
1 0.833081 1.000000
G 1
1 0.299885 1.000000
G 1
1 0.647054 1.000000
H 1
1 0.557542 1.000000
S 1
1 0.0260000 1.0000000
P 1
1 0.0192000 1.0000000
D 1
1 0.0468000 1.0000000
F 1
1 0.0735000 1.0000000
G 1
1 0.1510000 1.0000000
H 1
1 0.3230000 1.0000000
ARGON
S 9
1 0.147347 0.155473
2 0.312164 0.494617
3 0.661339 0.526705
4 1.401090 0.021986
5 2.968301 -0.338533
6 6.288539 0.056023
7 13.322677 -0.000115
8 28.224956 -0.000595
9 59.796402 0.000127
S 1
1 0.189594 1.000000
S 1
1 0.778040 1.000000
S 1
1 0.971266 1.000000
S 1
1 1.979612 1.000000
P 9
1 0.090580 0.079101
2 0.188085 0.260718
3 0.390548 0.395065
4 0.810953 0.334954
5 1.683902 0.107462
6 3.496535 -0.073657
7 7.260371 -0.001407
8 15.075781 0.001710
9 31.304069 -0.000275
P 1
1 0.133916 1.000000
P 1
1 0.356186 1.000000
P 1
1 0.833562 1.000000
P 1
1 1.430927 1.000000
D 1
1 0.268113 1.000000
D 1
1 0.697753 1.000000
D 1
1 1.185366 1.000000
D 1
1 2.118102 1.000000
F 1
1 0.422461 1.000000
F 1
1 0.973776 1.000000
F 1
1 2.020616 1.000000
G 1
1 0.695217 1.000000
G 1
1 1.690111 1.000000
H 1
1 1.258944 1.000000
S 1
1 0.0538000 1.0000000
P 1
1 0.0402000 1.0000000
D 1
1 0.1210000 1.0000000
F 1
1 0.2090000 1.0000000
G 1
1 0.3340000 1.0000000
H 1
1 0.7420000 1.0000000
SULFUR
S 9
1 0.095120 0.140074
2 0.202385 0.490942
3 0.430611 0.515297
4 0.916203 0.050320
5 1.949388 -0.298908
6 4.147674 0.019827
7 8.824926 0.007266
8 18.776623 -0.001602
9 39.950656 0.000271
S 1
1 0.113918 1.000000
S 1
1 0.282790 1.000000
S 1
1 0.626702 1.000000
S 1
1 1.338226 1.000000
P 9
1 0.057087 0.081938
2 0.115901 0.251826
3 0.235305 0.376344
4 0.477723 0.320902
5 0.969889 0.143779
6 1.969099 -0.045543
7 3.997726 -0.017191
8 8.116307 0.002580
9 16.477979 -0.000222
P 1
1 0.079101 1.000000
P 1
1 0.210632 1.000000
P 1
1 0.522537 1.000000
P 1
1 0.924454 1.000000
D 1
1 0.186546 1.000000
D 1
1 0.462328 1.000000
D 1
1 0.955579 1.000000
D 1
1 2.334308 1.000000
F 1
1 0.274343 1.000000
F 1
1 0.661568 1.000000
F 1
1 1.389533 1.000000
G 1
1 0.486698 1.000000
G 1
1 1.166495 1.000000
H 1
1 0.839494 1.000000
S 1
1 0.0420000 1.0000000
P 1
1 0.0294000 1.0000000
D 1
1 0.0794000 1.0000000
F 1
1 0.1188000 1.0000000
G 1
1 0.2200000 1.0000000
H 1
1 0.4720000 1.0000000
HELIUM
S 9
1 0.077786 0.012425
2 0.161528 0.128251
3 0.335425 0.282221
4 0.696535 0.292427
5 1.446408 0.215025
6 3.003576 0.125450
7 6.237154 0.064912
8 12.951926 0.038892
9 26.895662 0.002531
S 1
1 1.324312 1.000000
S 1
1 0.876976 1.000000
S 1
1 0.294075 1.000000
S 1
1 0.116506 1.000000
P 8
1 0.228528 -0.000116
2 0.422019 2.116950
3 0.779333 -2.182954
4 1.439180 1.545850
5 2.657706 -0.879477
6 4.907934 0.469710
7 9.063386 -0.224631
8 16.737180 0.098422
P 1
1 6.741009 1.000000
P 1
1 2.647340 1.000000
P 1
1 0.893850 1.000000
D 1
1 1.842278 1.000000
D 1
1 2.175208 1.000000
D 1
1 4.285515 1.000000
F 1
1 0.749734 1.000000
F 1
1 1.632074 1.000000
G 1
1 0.623669 1.000000
S 1
1 0.0466400 1.0000000
P 1
1 0.1400000 1.0000000
D 1
1 0.2892000 1.0000000
F 1
1 0.5345000 1.0000000
G 1
1 0.7899000 1.0000000

804
data/basis/avdz-bfd Normal file
View File

@ -0,0 +1,804 @@
ARSENIC
S 9
1 0.079412 0.192043
2 0.178687 0.611682
3 0.402068 0.439261
4 0.904702 -0.110280
5 2.035691 -0.394179
6 4.580555 0.145632
7 10.306811 -0.021379
8 23.191593 0.003205
9 52.183937 -0.000469
S 1
1 0.051480 1.000000
P 9
1 0.050626 0.105058
2 0.108692 0.361819
3 0.233354 0.452107
4 0.500995 0.231243
5 1.075603 -0.009549
6 2.309248 -0.121767
7 4.957802 0.028648
8 10.644071 -0.002941
9 22.852115 0.000293
P 1
1 0.095623 1.000000
D 1
1 0.297652 1.000000
S 1
1 0.0411520 1.0000000
P 1
1 0.0312680 1.0000000
D 1
1 0.1078000 1.0000000
LITHIUM
S 9
1 0.010125 0.007841
2 0.023437 0.258118
3 0.054251 0.423307
4 0.125581 0.167825
5 0.290697 -0.068332
6 0.672909 -0.119269
7 1.557659 0.007736
8 3.605689 0.003630
9 8.346494 -0.000646
S 1
1 0.103721 1.000000
P 9
1 0.018300 -0.005906
2 0.031699 -0.031422
3 0.054908 -0.043628
4 0.095111 -0.016781
5 0.164751 -0.078594
6 0.285379 0.015562
7 0.494330 -0.030830
8 0.856273 0.006185
9 1.483225 -0.008621
P 1
1 0.070391 1.000000
D 1
1 0.110720 1.000000
S 1
1 0.0086400 1.0000000
P 1
1 0.0057900 1.0000000
D 1
1 0.0725000 1.0000000
GERMANIUM
S 9
1 0.066287 0.213230
2 0.150128 0.605570
3 0.340013 0.413442
4 0.770064 -0.106356
5 1.744049 -0.364579
6 3.949940 0.127448
7 8.945864 -0.017166
8 20.260687 0.002454
9 45.886614 -0.000355
S 1
1 0.043781 1.000000
P 9
1 0.036511 0.098680
2 0.080524 0.372290
3 0.177593 0.443836
4 0.391677 0.232585
5 0.863832 0.000058
6 1.905157 -0.108282
7 4.201772 0.021894
8 9.266892 -0.001911
9 20.437873 0.000181
P 1
1 0.074726 1.000000
D 1
1 0.234278 1.000000
S 1
1 0.0339610 1.0000000
P 1
1 0.0239450 1.0000000
D 1
1 0.0771000 1.0000000
NEON
S 9
1 0.205835 0.057514
2 0.391384 0.215776
3 0.744196 0.374799
4 1.415048 0.326313
5 2.690638 0.166383
6 5.116103 -0.039149
7 9.727994 -0.085909
8 18.497256 0.006816
9 35.171534 0.000206
S 1
1 0.455383 1.000000
P 9
1 0.121772 0.029943
2 0.238248 0.114200
3 0.466136 0.219618
4 0.912002 0.268864
5 1.784344 0.256932
6 3.491095 0.191378
7 6.830378 0.112176
8 13.363732 0.063317
9 26.146332 0.008057
P 1
1 0.472224 1.000000
D 1
1 2.371533 1.000000
S 1
1 0.1230000 1.0000000
P 1
1 0.1064000 1.0000000
D 1
1 0.6310000 1.0000000
BORON
S 9
1 0.040569 0.032031
2 0.081044 0.243317
3 0.161898 0.434636
4 0.323418 0.329581
5 0.646080 0.111875
6 1.290648 -0.078699
7 2.578276 -0.098781
8 5.150520 0.016164
9 10.288990 -0.000016
S 1
1 0.082513 1.000000
P 9
1 0.029207 0.019909
2 0.058408 0.141775
3 0.116803 0.294463
4 0.233582 0.309028
5 0.467115 0.236378
6 0.934132 0.131317
7 1.868068 0.066454
8 3.735743 0.021248
9 7.470701 0.002837
P 1
1 0.086803 1.000000
D 1
1 0.349879 1.000000
S 1
1 0.0310500 1.0000000
P 1
1 0.0237800 1.0000000
D 1
1 0.0904000 1.0000000
GALLIUM
S 9
1 0.054628 0.253171
2 0.123743 0.598295
3 0.280299 0.356909
4 0.634926 -0.056544
5 1.438218 -0.411266
6 3.257814 0.156079
7 7.379514 -0.025142
8 16.715879 0.004089
9 37.864367 -0.000622
S 1
1 0.031898 1.000000
P 9
1 0.029207 0.759400
2 0.064420 -0.022059
3 0.142086 0.368252
4 0.313389 0.051142
5 0.691221 0.036655
6 1.524577 -0.078589
7 3.362652 0.017781
8 7.416764 -0.002498
9 16.358632 0.000386
P 1
1 0.027155 1.000000
D 1
1 0.182311 1.000000
S 1
1 0.0243480 1.0000000
P 1
1 0.0151640 1.0000000
D 1
1 0.0537000 1.0000000
ALUMINUM
S 9
1 0.045518 0.206193
2 0.100308 0.559887
3 0.221051 0.407852
4 0.487132 -0.041098
5 1.073500 -0.238652
6 2.365686 0.038132
7 5.213294 -0.003935
8 11.488606 0.000470
9 25.317597 -0.000014
S 1
1 0.044024 1.000000
P 9
1 0.014848 0.009932
2 0.030967 0.160212
3 0.064586 0.389171
4 0.134700 0.373235
5 0.280932 0.195800
6 0.585913 0.022947
7 1.221985 -0.053293
8 2.548578 0.004846
9 5.315330 -0.000726
P 1
1 0.206631 1.000000
D 1
1 0.193079 1.000000
S 1
1 0.0231000 1.0000000
P 1
1 0.0153000 1.0000000
D 1
1 0.0535000 1.0000000
MAGNESIUM
S 9
1 0.030975 0.165290
2 0.062959 0.506272
3 0.127970 0.333197
4 0.260111 0.057482
5 0.528700 -0.137614
6 1.074630 -0.135378
7 2.184285 0.048310
8 4.439759 -0.005312
9 9.024217 0.000465
S 1
1 0.162370 1.000000
P 9
1 0.047055 1.502038
2 0.083253 -1.433944
3 0.147298 1.318987
4 0.260611 -0.741124
5 0.461094 0.436300
6 0.815803 -0.243798
7 1.443383 0.086774
8 2.553745 -0.028677
9 4.518286 0.006085
P 1
1 0.121683 1.000000
D 1
1 0.135526 1.000000
S 1
1 0.0148800 1.0000000
P 1
1 0.0093500 1.0000000
D 1
1 0.0595000 1.0000000
NITROGEN
S 9
1 0.098869 0.067266
2 0.211443 0.334290
3 0.452197 0.454257
4 0.967080 0.267861
5 2.068221 0.000248
6 4.423150 -0.132606
7 9.459462 0.014437
8 20.230246 0.000359
9 43.264919 -0.000094
S 1
1 0.175123 1.000000
P 9
1 0.073234 0.035758
2 0.145867 0.153945
3 0.290535 0.277656
4 0.578683 0.297676
5 1.152612 0.234403
6 2.295756 0.140321
7 4.572652 0.067219
8 9.107739 0.031594
9 18.140657 0.003301
P 1
1 0.223042 1.000000
D 1
1 0.832058 1.000000
S 1
1 0.0612400 1.0000000
P 1
1 0.0561100 1.0000000
D 1
1 0.2300000 1.0000000
BROMINE
S 9
1 0.114626 0.199832
2 0.253024 0.605806
3 0.558520 0.486414
4 1.232866 -0.208964
5 2.721403 -0.328448
6 6.007171 0.118471
7 13.260109 -0.013112
8 29.270100 0.001206
9 64.610234 -0.000121
S 1
1 0.074712 1.000000
P 9
1 0.067990 0.107992
2 0.145507 0.331860
3 0.311403 0.442871
4 0.666441 0.283256
5 1.426267 -0.026045
6 3.052389 -0.111323
7 6.532494 0.021712
8 13.980353 -0.001188
9 29.919703 0.000022
P 1
1 0.129654 1.000000
D 1
1 0.417296 1.000000
S 1
1 0.0569460 1.0000000
P 1
1 0.0410490 1.0000000
D 1
1 0.1719000 1.0000000
FLUORINE
S 9
1 0.172723 0.070240
2 0.364875 0.311088
3 0.770795 0.444675
4 1.628295 0.287011
5 3.439757 0.018759
6 7.266451 -0.128608
7 15.350300 0.009104
8 32.427348 0.000810
9 68.502433 -0.000133
S 1
1 0.344569 1.000000
P 9
1 0.101001 0.035321
2 0.204414 0.136924
3 0.413707 0.249353
4 0.837289 0.286620
5 1.694565 0.254541
6 3.429580 0.169572
7 6.941026 0.088542
8 14.047737 0.039843
9 28.430799 0.003378
P 1
1 0.364831 1.000000
D 1
1 1.722479 1.000000
S 1
1 0.0986300 1.0000000
P 1
1 0.0850200 1.0000000
D 1
1 0.4640000 1.0000000
CHLORINE
S 9
1 0.119944 0.148917
2 0.257348 0.503616
3 0.552157 0.523995
4 1.184691 0.013612
5 2.541836 -0.328846
6 5.453681 0.056309
7 11.701243 -0.001301
8 25.105812 -0.000294
9 53.866226 0.000076
S 1
1 0.120667 1.000000
P 9
1 0.074374 0.084925
2 0.155084 0.270658
3 0.323378 0.396022
4 0.674303 0.324325
5 1.406043 0.100661
6 2.931855 -0.069802
7 6.113450 -0.000951
8 12.747651 0.001501
9 26.581165 -0.000249
P 1
1 0.168333 1.000000
D 1
1 0.651071 1.000000
S 1
1 0.0608000 1.0000000
P 1
1 0.0466000 1.0000000
D 1
1 0.1960000 1.0000000
CARBON
S 9
1 0.051344 0.013991
2 0.102619 0.169852
3 0.205100 0.397529
4 0.409924 0.380369
5 0.819297 0.180113
6 1.637494 -0.033512
7 3.272791 -0.121499
8 6.541187 0.015176
9 13.073594 -0.000705
S 1
1 0.127852 1.000000
P 9
1 0.029281 0.001787
2 0.058547 0.050426
3 0.117063 0.191634
4 0.234064 0.302667
5 0.468003 0.289868
6 0.935757 0.210979
7 1.871016 0.112024
8 3.741035 0.054425
9 7.480076 0.021931
P 1
1 0.149161 1.000000
D 1
1 0.561160 1.000000
S 1
1 0.0469000 1.0000000
P 1
1 0.0404100 1.0000000
D 1
1 0.1510000 1.0000000
OXYGEN
S 9
1 0.125346 0.055741
2 0.268022 0.304848
3 0.573098 0.453752
4 1.225429 0.295926
5 2.620277 0.019567
6 5.602818 -0.128627
7 11.980245 0.012024
8 25.616801 0.000407
9 54.775216 -0.000076
S 1
1 0.258551 1.000000
P 9
1 0.083598 0.044958
2 0.167017 0.150175
3 0.333673 0.255999
4 0.666627 0.281879
5 1.331816 0.242835
6 2.660761 0.161134
7 5.315785 0.082308
8 10.620108 0.039899
9 21.217318 0.004679
P 1
1 0.267865 1.000000
D 1
1 1.232753 1.000000
S 1
1 0.0789600 1.0000000
P 1
1 0.0685600 1.0000000
D 1
1 0.3320000 1.0000000
KRYPTON
S 9
1 0.129911 0.183453
2 0.282220 0.596016
3 0.613098 0.506410
4 1.331901 -0.150926
5 2.893437 -0.423611
6 6.285735 0.162644
7 13.655203 -0.023284
8 29.664719 0.003157
9 64.443973 -0.000422
S 1
1 0.634619 1.000000
P 9
1 0.079314 0.096705
2 0.167216 0.312567
3 0.352539 0.448237
4 0.743252 0.298640
5 1.566988 -0.003641
6 3.303659 -0.138798
7 6.965055 0.029989
8 14.684325 -0.002578
9 30.958748 0.000205
P 1
1 0.149902 1.000000
D 1
1 0.487932 1.000000
S 1
1 0.0651450 1.0000000
P 1
1 0.0466060 1.0000000
D 1
1 0.2155000 1.0000000
HYDROGEN
S 9
1 0.013000 0.000706
2 0.029900 -0.002119
3 0.068770 0.057693
4 0.158170 0.230695
5 0.363792 0.277612
6 0.836721 0.169833
7 1.924458 0.097443
8 4.426254 0.029966
9 10.180385 -0.000452
S 1
1 0.170483 1.000000
P 9
1 0.003000 0.001242
2 0.007800 -0.000913
3 0.020281 -0.000054
4 0.052730 -0.000238
5 0.137097 -0.011530
6 0.356451 -0.018235
7 0.926774 -0.013929
8 2.409612 -0.009395
9 6.264991 -0.000347
S 1
1 0.0297400 1.0000000
P 1
1 0.1410000 1.0000000
PHOSPHORUS
S 9
1 0.074718 0.140225
2 0.160834 0.506746
3 0.346202 0.499893
4 0.745215 0.037301
5 1.604109 -0.284591
6 3.452917 0.024766
7 7.432561 0.001798
8 15.998924 -0.000314
9 34.438408 0.000088
S 1
1 0.077260 1.000000
P 9
1 0.050242 0.072095
2 0.102391 0.278735
3 0.208669 0.411034
4 0.425256 0.304724
5 0.866651 0.091727
6 1.766191 -0.057060
7 3.599410 -0.005103
8 7.335418 0.000328
9 14.949217 -0.000046
P 1
1 0.113433 1.000000
D 1
1 0.390944 1.000000
S 1
1 0.0417000 1.0000000
P 1
1 0.0343000 1.0000000
D 1
1 0.1130000 1.0000000
SILICON
S 9
1 0.059887 0.167492
2 0.130108 0.532550
3 0.282668 0.464290
4 0.614115 -0.002322
5 1.334205 -0.268234
6 2.898645 0.031921
7 6.297493 -0.000106
8 13.681707 -0.000145
9 29.724387 0.000067
S 1
1 0.059803 1.000000
P 9
1 0.036525 0.078761
2 0.076137 0.308331
3 0.158712 0.417773
4 0.330843 0.281676
5 0.689658 0.069876
6 1.437625 -0.056306
7 2.996797 0.000744
8 6.246966 -0.000259
9 13.022097 -0.000022
P 1
1 0.081570 1.000000
D 1
1 0.283626 1.000000
S 1
1 0.0332000 1.0000000
P 1
1 0.0250000 1.0000000
D 1
1 0.0823000 1.0000000
ARGON
S 9
1 0.147347 0.155473
2 0.312164 0.494617
3 0.661339 0.526705
4 1.401090 0.021986
5 2.968301 -0.338533
6 6.288539 0.056023
7 13.322677 -0.000115
8 28.224956 -0.000595
9 59.796402 0.000127
S 1
1 0.147526 1.000000
P 9
1 0.090580 0.079101
2 0.188085 0.260718
3 0.390548 0.395065
4 0.810953 0.334954
5 1.683902 0.107462
6 3.496535 -0.073657
7 7.260371 -0.001407
8 15.075781 0.001710
9 31.304069 -0.000275
P 1
1 0.211798 1.000000
D 1
1 0.810888 1.000000
S 1
1 0.0709000 1.0000000
P 1
1 0.0533000 1.0000000
D 1
1 0.2400000 1.0000000
SODIUM
S 9
1 0.013061 0.200118
2 0.030041 0.467652
3 0.069092 0.227738
4 0.158908 -0.061581
5 0.365481 -0.137533
6 0.840589 0.003323
7 1.933315 0.003741
8 4.446533 -0.001117
9 10.226816 0.000244
S 1
1 0.865135 1.000000
P 9
1 0.002593 -0.002840
2 0.006741 0.005340
3 0.017525 -0.025936
4 0.045563 -0.053466
5 0.118461 -0.053691
6 0.307987 0.014439
7 0.800738 0.006199
8 2.081847 -0.001026
9 5.412617 0.000168
P 1
1 0.106025 1.000000
D 1
1 0.050790 1.000000
S 1
1 0.0072500 1.0000000
P 1
1 0.0063300 1.0000000
D 1
1 0.0468000 1.0000000
BERYLLIUM
S 9
1 0.030068 0.025105
2 0.054002 0.178890
3 0.096986 0.263939
4 0.174186 0.435946
5 0.312836 -0.008188
6 0.561850 0.049509
7 1.009077 -0.114576
8 1.812290 -0.067207
9 3.254852 0.017250
S 1
1 0.239392 1.000000
P 9
1 0.015064 0.735052
2 0.028584 -0.476214
3 0.054236 0.564806
4 0.102911 -0.108575
5 0.195269 0.233862
6 0.370513 -0.009003
7 0.703030 0.067510
8 1.333967 -0.002868
9 2.531139 0.017869
P 1
1 0.222969 1.000000
D 1
1 0.217340 1.000000
S 1
1 0.0187700 1.0000000
P 1
1 0.0085000 1.0000000
D 1
1 0.0740000 1.0000000
SELENIUM
S 9
1 0.096883 0.200965
2 0.217674 0.615093
3 0.489067 0.462636
4 1.098828 -0.204179
5 2.468828 -0.307584
6 5.546920 0.109895
7 12.462726 -0.012288
8 28.001040 0.001205
9 62.912258 -0.000132
S 1
1 0.062467 1.000000
P 9
1 0.056147 0.073504
2 0.122259 0.334692
3 0.266220 0.473323
4 0.579694 0.276571
5 1.262286 -0.032356
6 2.748631 -0.103709
7 5.985152 0.020181
8 13.032685 -0.001095
9 28.378708 0.000019
P 1
1 0.107381 1.000000
D 1
1 0.348649 1.000000
S 1
1 0.0487470 1.0000000
P 1
1 0.0354920 1.0000000
D 1
1 0.1283000 1.0000000
SULFUR
S 9
1 0.095120 0.140074
2 0.202385 0.490942
3 0.430611 0.515297
4 0.916203 0.050320
5 1.949388 -0.298908
6 4.147674 0.019827
7 8.824926 0.007266
8 18.776623 -0.001602
9 39.950656 0.000271
S 1
1 0.098454 1.000000
P 9
1 0.057087 0.081938
2 0.115901 0.251826
3 0.235305 0.376344
4 0.477723 0.320902
5 0.969889 0.143779
6 1.969099 -0.045543
7 3.997726 -0.017191
8 8.116307 0.002580
9 16.477979 -0.000222
P 1
1 0.128926 1.000000
D 1
1 0.514135 1.000000
S 1
1 0.0507000 1.0000000
P 1
1 0.0399000 1.0000000
D 1
1 0.1520000 1.0000000
HELIUM
S 9
1 0.077786 0.012425
2 0.161528 0.128251
3 0.335425 0.282221
4 0.696535 0.292427
5 1.446408 0.215025
6 3.003576 0.125450
7 6.237154 0.064912
8 12.951926 0.038892
9 26.895662 0.002531
S 1
1 0.321750 1.000000
P 8
1 0.228528 -0.000116
2 0.422019 2.116950
3 0.779333 -2.182954
4 1.439180 1.545850
5 2.657706 -0.879477
6 4.907934 0.469710
7 9.063386 -0.224631
8 16.737180 0.098422
S 1
1 0.0725500 1.0000000
P 1
1 0.2473000 1.0000000

988
data/basis/avqz-bfd Normal file
View File

@ -0,0 +1,988 @@
LITHIUM
S 9
1 0.010125 0.007841
2 0.023437 0.258118
3 0.054251 0.423307
4 0.125581 0.167825
5 0.290697 -0.068332
6 0.672909 -0.119269
7 1.557659 0.007736
8 3.605689 0.003630
9 8.346494 -0.000646
S 1
1 0.024834 1.000000
S 1
1 0.109770 1.000000
S 1
1 0.519693 1.000000
P 9
1 0.018300 -0.005906
2 0.031699 -0.031422
3 0.054908 -0.043628
4 0.095111 -0.016781
5 0.164751 -0.078594
6 0.285379 0.015562
7 0.494330 -0.030830
8 0.856273 0.006185
9 1.483225 -0.008621
P 1
1 0.070662 1.000000
P 1
1 0.115823 1.000000
P 1
1 0.207505 1.000000
D 1
1 0.029817 1.000000
D 1
1 0.089353 1.000000
D 1
1 0.214990 1.000000
F 1
1 0.099930 1.000000
F 1
1 0.240323 1.000000
G 1
1 0.199570 1.000000
S 1
1 0.0063600 1.0000000
P 1
1 0.0075600 1.0000000
D 1
1 0.0266000 1.0000000
F 1
1 0.0552000 1.0000000
G 1
1 0.1050000 1.0000000
NEON
S 9
1 0.205835 0.057514
2 0.391384 0.215776
3 0.744196 0.374799
4 1.415048 0.326313
5 2.690638 0.166383
6 5.116103 -0.039149
7 9.727994 -0.085909
8 18.497256 0.006816
9 35.171534 0.000206
S 1
1 0.399186 1.000000
S 1
1 1.658402 1.000000
S 1
1 2.261159 1.000000
P 9
1 0.121772 0.029943
2 0.238248 0.114200
3 0.466136 0.219618
4 0.912002 0.268864
5 1.784344 0.256932
6 3.491095 0.191378
7 6.830378 0.112176
8 13.363732 0.063317
9 26.146332 0.008057
P 1
1 0.245215 1.000000
P 1
1 0.757342 1.000000
P 1
1 1.938376 1.000000
D 1
1 0.738131 1.000000
D 1
1 2.188751 1.000000
D 1
1 6.170224 1.000000
F 1
1 1.589986 1.000000
F 1
1 4.849402 1.000000
G 1
1 3.228793 1.000000
S 1
1 0.1054000 1.0000000
P 1
1 0.0817800 1.0000000
D 1
1 0.2730000 1.0000000
F 1
1 0.6890000 1.0000000
G 1
1 1.2240000 1.0000000
BORON
S 9
1 0.040569 0.032031
2 0.081044 0.243317
3 0.161898 0.434636
4 0.323418 0.329581
5 0.646080 0.111875
6 1.290648 -0.078699
7 2.578276 -0.098781
8 5.150520 0.016164
9 10.288990 -0.000016
S 1
1 0.082968 1.000000
S 1
1 0.305133 1.000000
S 1
1 0.422217 1.000000
P 9
1 0.029207 0.019909
2 0.058408 0.141775
3 0.116803 0.294463
4 0.233582 0.309028
5 0.467115 0.236378
6 0.934132 0.131317
7 1.868068 0.066454
8 3.735743 0.021248
9 7.470701 0.002837
P 1
1 0.066445 1.000000
P 1
1 0.196614 1.000000
P 1
1 0.447031 1.000000
D 1
1 0.149100 1.000000
D 1
1 0.410733 1.000000
D 1
1 1.142614 1.000000
F 1
1 0.315902 1.000000
F 1
1 0.870011 1.000000
G 1
1 0.710746 1.000000
S 1
1 0.0272100 1.0000000
P 1
1 0.0187800 1.0000000
D 1
1 0.0466000 1.0000000
F 1
1 0.1130000 1.0000000
G 1
1 0.2730000 1.0000000
ALUMINUM
S 9
1 0.045518 0.206193
2 0.100308 0.559887
3 0.221051 0.407852
4 0.487132 -0.041098
5 1.073500 -0.238652
6 2.365686 0.038132
7 5.213294 -0.003935
8 11.488606 0.000470
9 25.317597 -0.000014
S 1
1 0.058688 1.000000
S 1
1 0.150215 1.000000
S 1
1 0.324193 1.000000
P 9
1 0.014848 0.009932
2 0.030967 0.160212
3 0.064586 0.389171
4 0.134700 0.373235
5 0.280932 0.195800
6 0.585913 0.022947
7 1.221985 -0.053293
8 2.548578 0.004846
9 5.315330 -0.000726
P 1
1 0.034866 1.000000
P 1
1 0.403929 1.000000
P 1
1 0.084117 1.000000
D 1
1 0.092392 1.000000
D 1
1 0.245212 1.000000
D 1
1 0.726318 1.000000
F 1
1 0.160909 1.000000
F 1
1 0.409285 1.000000
G 1
1 0.352027 1.000000
S 1
1 0.0183000 1.0000000
P 1
1 0.0121000 1.0000000
D 1
1 0.0282000 1.0000000
F 1
1 0.0582000 1.0000000
G 1
1 0.1530000 1.0000000
MAGNESIUM
S 9
1 0.030975 0.165290
2 0.062959 0.506272
3 0.127970 0.333197
4 0.260111 0.057482
5 0.528700 -0.137614
6 1.074630 -0.135378
7 2.184285 0.048310
8 4.439759 -0.005312
9 9.024217 0.000465
S 1
1 0.023378 1.000000
S 1
1 0.188141 1.000000
S 1
1 0.616205 1.000000
P 9
1 0.047055 1.502038
2 0.083253 -1.433944
3 0.147298 1.318987
4 0.260611 -0.741124
5 0.461094 0.436300
6 0.815803 -0.243798
7 1.443383 0.086774
8 2.553745 -0.028677
9 4.518286 0.006085
P 1
1 0.089167 1.000000
P 1
1 0.209210 1.000000
P 1
1 0.846859 1.000000
D 1
1 0.095526 1.000000
D 1
1 0.734089 1.000000
D 1
1 0.233222 1.000000
F 1
1 0.127025 1.000000
F 1
1 0.304907 1.000000
G 1
1 0.192272 1.000000
S 1
1 0.0123900 1.0000000
P 1
1 0.0070600 1.0000000
D 1
1 0.0382000 1.0000000
F 1
1 0.0700000 1.0000000
G 1
1 0.1480000 1.0000000
NITROGEN
S 9
1 0.098869 0.067266
2 0.211443 0.334290
3 0.452197 0.454257
4 0.967080 0.267861
5 2.068221 0.000248
6 4.423150 -0.132606
7 9.459462 0.014437
8 20.230246 0.000359
9 43.264919 -0.000094
S 1
1 0.135764 1.000000
S 1
1 0.310826 1.000000
S 1
1 1.625001 1.000000
P 9
1 0.073234 0.035758
2 0.145867 0.153945
3 0.290535 0.277656
4 0.578683 0.297676
5 1.152612 0.234403
6 2.295756 0.140321
7 4.572652 0.067219
8 9.107739 0.031594
9 18.140657 0.003301
P 1
1 0.140736 1.000000
P 1
1 0.413103 1.000000
P 1
1 1.020750 1.000000
D 1
1 0.346233 1.000000
D 1
1 1.009895 1.000000
D 1
1 3.028459 1.000000
F 1
1 0.691129 1.000000
F 1
1 2.024747 1.000000
G 1
1 1.357512 1.000000
S 1
1 0.0546400 1.0000000
P 1
1 0.0440200 1.0000000
D 1
1 0.1110000 1.0000000
F 1
1 0.2450000 1.0000000
G 1
1 0.5590000 1.0000000
FLUORINE
S 9
1 0.172723 0.070240
2 0.364875 0.311088
3 0.770795 0.444675
4 1.628295 0.287011
5 3.439757 0.018759
6 7.266451 -0.128608
7 15.350300 0.009104
8 32.427348 0.000810
9 68.502433 -0.000133
S 1
1 0.294345 1.000000
S 1
1 1.048013 1.000000
S 1
1 1.705653 1.000000
P 9
1 0.101001 0.035321
2 0.204414 0.136924
3 0.413707 0.249353
4 0.837289 0.286620
5 1.694565 0.254541
6 3.429580 0.169572
7 6.941026 0.088542
8 14.047737 0.039843
9 28.430799 0.003378
P 1
1 0.205806 1.000000
P 1
1 0.647240 1.000000
P 1
1 1.650688 1.000000
D 1
1 0.587354 1.000000
D 1
1 1.724392 1.000000
D 1
1 4.998085 1.000000
F 1
1 1.178147 1.000000
F 1
1 3.694285 1.000000
G 1
1 2.406583 1.000000
S 1
1 0.0859400 1.0000000
P 1
1 0.0656800 1.0000000
D 1
1 0.2070000 1.0000000
F 1
1 0.4600000 1.0000000
G 1
1 0.9240000 1.0000000
CHLORINE
S 9
1 0.119944 0.148917
2 0.257348 0.503616
3 0.552157 0.523995
4 1.184691 0.013612
5 2.541836 -0.328846
6 5.453681 0.056309
7 11.701243 -0.001301
8 25.105812 -0.000294
9 53.866226 0.000076
S 1
1 0.161594 1.000000
S 1
1 0.440111 1.000000
S 1
1 0.848928 1.000000
P 9
1 0.074374 0.084925
2 0.155084 0.270658
3 0.323378 0.396022
4 0.674303 0.324325
5 1.406043 0.100661
6 2.931855 -0.069802
7 6.113450 -0.000951
8 12.747651 0.001501
9 26.581165 -0.000249
P 1
1 0.111309 1.000000
P 1
1 1.286881 1.000000
P 1
1 0.289403 1.000000
D 1
1 0.253063 1.000000
D 1
1 0.642589 1.000000
D 1
1 1.654717 1.000000
F 1
1 0.448175 1.000000
F 1
1 1.189807 1.000000
G 1
1 0.848307 1.000000
S 1
1 0.0519000 1.0000000
P 1
1 0.0376000 1.0000000
D 1
1 0.0952000 1.0000000
F 1
1 0.2170000 1.0000000
G 1
1 0.3780000 1.0000000
CARBON
S 9
1 0.051344 0.013991
2 0.102619 0.169852
3 0.205100 0.397529
4 0.409924 0.380369
5 0.819297 0.180113
6 1.637494 -0.033512
7 3.272791 -0.121499
8 6.541187 0.015176
9 13.073594 -0.000705
S 1
1 0.109576 1.000000
S 1
1 0.846879 1.000000
S 1
1 0.269659 1.000000
P 9
1 0.029281 0.001787
2 0.058547 0.050426
3 0.117063 0.191634
4 0.234064 0.302667
5 0.468003 0.289868
6 0.935757 0.210979
7 1.871016 0.112024
8 3.741035 0.054425
9 7.480076 0.021931
P 1
1 0.105389 1.000000
P 1
1 0.313254 1.000000
P 1
1 0.804681 1.000000
D 1
1 0.240171 1.000000
D 1
1 0.684884 1.000000
D 1
1 2.013760 1.000000
F 1
1 0.457302 1.000000
F 1
1 1.324930 1.000000
G 1
1 1.034180 1.000000
S 1
1 0.0414500 1.0000000
P 1
1 0.0321800 1.0000000
D 1
1 0.0766000 1.0000000
F 1
1 0.1870000 1.0000000
G 1
1 0.4240000 1.0000000
OXYGEN
S 9
1 0.125346 0.055741
2 0.268022 0.304848
3 0.573098 0.453752
4 1.225429 0.295926
5 2.620277 0.019567
6 5.602818 -0.128627
7 11.980245 0.012024
8 25.616801 0.000407
9 54.775216 -0.000076
S 1
1 0.224380 1.000000
S 1
1 0.843157 1.000000
S 1
1 1.351771 1.000000
P 9
1 0.083598 0.044958
2 0.167017 0.150175
3 0.333673 0.255999
4 0.666627 0.281879
5 1.331816 0.242835
6 2.660761 0.161134
7 5.315785 0.082308
8 10.620108 0.039899
9 21.217318 0.004679
P 1
1 0.148562 1.000000
P 1
1 0.452364 1.000000
P 1
1 1.106737 1.000000
D 1
1 0.455711 1.000000
D 1
1 1.344331 1.000000
D 1
1 4.008867 1.000000
F 1
1 0.876289 1.000000
F 1
1 2.763115 1.000000
G 1
1 1.759081 1.000000
S 1
1 0.0695900 1.0000000
P 1
1 0.0534800 1.0000000
D 1
1 0.1540000 1.0000000
F 1
1 0.3240000 1.0000000
G 1
1 0.7140000 1.0000000
HYDROGEN
S 9
1 0.013000 0.000706
2 0.029900 -0.002119
3 0.068770 0.057693
4 0.158170 0.230695
5 0.363792 0.277612
6 0.836721 0.169833
7 1.924458 0.097443
8 4.426254 0.029966
9 10.180385 -0.000452
S 1
1 0.120599 1.000000
S 1
1 0.404783 1.000000
S 1
1 0.715129 1.000000
P 9
1 0.003000 0.001242
2 0.007800 -0.000913
3 0.020281 -0.000054
4 0.052730 -0.000238
5 0.137097 -0.011530
6 0.356451 -0.018235
7 0.926774 -0.013929
8 2.409612 -0.009395
9 6.264991 -0.000347
P 1
1 0.774536 1.000000
P 1
1 0.263038 1.000000
D 1
1 2.315883 1.000000
D 1
1 0.636656 1.000000
F 1
1 1.130819 1.000000
S 1
1 0.0236300 1.0000000
P 1
1 0.0848000 1.0000000
D 1
1 0.1900000 1.0000000
F 1
1 0.3600000 1.0000000
PHOSPHORUS
S 9
1 0.074718 0.140225
2 0.160834 0.506746
3 0.346202 0.499893
4 0.745215 0.037301
5 1.604109 -0.284591
6 3.452917 0.024766
7 7.432561 0.001798
8 15.998924 -0.000314
9 34.438408 0.000088
S 1
1 0.098851 1.000000
S 1
1 0.255593 1.000000
S 1
1 0.546057 1.000000
P 9
1 0.050242 0.072095
2 0.102391 0.278735
3 0.208669 0.411034
4 0.425256 0.304724
5 0.866651 0.091727
6 1.766191 -0.057060
7 3.599410 -0.005103
8 7.335418 0.000328
9 14.949217 -0.000046
P 1
1 0.074522 1.000000
P 1
1 0.764539 1.000000
P 1
1 0.182211 1.000000
D 1
1 0.186505 1.000000
D 1
1 0.502400 1.000000
D 1
1 1.576445 1.000000
F 1
1 0.280702 1.000000
F 1
1 0.719161 1.000000
G 1
1 0.599144 1.000000
S 1
1 0.0354000 1.0000000
P 1
1 0.0272000 1.0000000
D 1
1 0.0594000 1.0000000
F 1
1 0.1090000 1.0000000
G 1
1 0.2500000 1.0000000
SILICON
S 9
1 0.059887 0.167492
2 0.130108 0.532550
3 0.282668 0.464290
4 0.614115 -0.002322
5 1.334205 -0.268234
6 2.898645 0.031921
7 6.297493 -0.000106
8 13.681707 -0.000145
9 29.724387 0.000067
S 1
1 0.079900 1.000000
S 1
1 0.206024 1.000000
S 1
1 0.435017 1.000000
P 9
1 0.036525 0.078761
2 0.076137 0.308331
3 0.158712 0.417773
4 0.330843 0.281676
5 0.689658 0.069876
6 1.437625 -0.056306
7 2.996797 0.000744
8 6.246966 -0.000259
9 13.022097 -0.000022
P 1
1 0.054575 1.000000
P 1
1 0.599112 1.000000
P 1
1 0.134681 1.000000
D 1
1 0.133118 1.000000
D 1
1 0.350967 1.000000
D 1
1 1.063961 1.000000
F 1
1 0.211319 1.000000
F 1
1 0.535932 1.000000
G 1
1 0.465365 1.000000
S 1
1 0.0275000 1.0000000
P 1
1 0.0200000 1.0000000
D 1
1 0.0435000 1.0000000
F 1
1 0.0846000 1.0000000
G 1
1 0.2120000 1.0000000
ARGON
S 9
1 0.147347 0.155473
2 0.312164 0.494617
3 0.661339 0.526705
4 1.401090 0.021986
5 2.968301 -0.338533
6 6.288539 0.056023
7 13.322677 -0.000115
8 28.224956 -0.000595
9 59.796402 0.000127
S 1
1 0.196024 1.000000
S 1
1 0.540061 1.000000
S 1
1 1.020348 1.000000
P 9
1 0.090580 0.079101
2 0.188085 0.260718
3 0.390548 0.395065
4 0.810953 0.334954
5 1.683902 0.107462
6 3.496535 -0.073657
7 7.260371 -0.001407
8 15.075781 0.001710
9 31.304069 -0.000275
P 1
1 0.140701 1.000000
P 1
1 1.604300 1.000000
P 1
1 0.367738 1.000000
D 1
1 0.304103 1.000000
D 1
1 0.760464 1.000000
D 1
1 1.900944 1.000000
F 1
1 0.583628 1.000000
F 1
1 1.480507 1.000000
G 1
1 1.030824 1.000000
S 1
1 0.0610000 1.0000000
P 1
1 0.0435000 1.0000000
D 1
1 0.1160000 1.0000000
F 1
1 0.2940000 1.0000000
G 1
1 0.4590000 1.0000000
SODIUM
S 9
1 0.013061 0.200118
2 0.030041 0.467652
3 0.069092 0.227738
4 0.158908 -0.061581
5 0.365481 -0.137533
6 0.840589 0.003323
7 1.933315 0.003741
8 4.446533 -0.001117
9 10.226816 0.000244
S 1
1 0.064915 1.000000
S 1
1 1.134458 1.000000
S 1
1 0.771046 1.000000
P 9
1 0.002593 -0.002840
2 0.006741 0.005340
3 0.017525 -0.025936
4 0.045563 -0.053466
5 0.118461 -0.053691
6 0.307987 0.014439
7 0.800738 0.006199
8 2.081847 -0.001026
9 5.412617 0.000168
P 1
1 0.059662 1.000000
P 1
1 0.096714 1.000000
P 1
1 0.552976 1.000000
D 1
1 0.046917 1.000000
D 1
1 0.813868 1.000000
D 1
1 0.127780 1.000000
F 1
1 0.129992 1.000000
F 1
1 0.626429 1.000000
G 1
1 0.588778 1.000000
S 1
1 0.0050300 1.0000000
P 1
1 0.0077200 1.0000000
D 1
1 0.0210000 1.0000000
F 1
1 0.0453000 1.0000000
G 1
1 0.0866000 1.0000000
BERYLLIUM
S 9
1 0.030068 0.025105
2 0.054002 0.178890
3 0.096986 0.263939
4 0.174186 0.435946
5 0.312836 -0.008188
6 0.561850 0.049509
7 1.009077 -0.114576
8 1.812290 -0.067207
9 3.254852 0.017250
S 1
1 0.012287 1.000000
S 1
1 0.175341 1.000000
S 1
1 1.244398 1.000000
P 9
1 0.015064 0.735052
2 0.028584 -0.476214
3 0.054236 0.564806
4 0.102911 -0.108575
5 0.195269 0.233862
6 0.370513 -0.009003
7 0.703030 0.067510
8 1.333967 -0.002868
9 2.531139 0.017869
P 1
1 0.317061 1.000000
P 1
1 1.585739 1.000000
P 1
1 0.108346 1.000000
D 1
1 0.125228 1.000000
D 1
1 0.801065 1.000000
D 1
1 0.301656 1.000000
F 1
1 0.153439 1.000000
F 1
1 0.377536 1.000000
G 1
1 0.338801 1.000000
S 1
1 0.0143900 1.0000000
P 1
1 0.0065000 1.0000000
D 1
1 0.0554000 1.0000000
F 1
1 0.0930000 1.0000000
G 1
1 0.1834000 1.0000000
SULFUR
S 9
1 0.095120 0.140074
2 0.202385 0.490942
3 0.430611 0.515297
4 0.916203 0.050320
5 1.949388 -0.298908
6 4.147674 0.019827
7 8.824926 0.007266
8 18.776623 -0.001602
9 39.950656 0.000271
S 1
1 0.123759 1.000000
S 1
1 0.315587 1.000000
S 1
1 0.651905 1.000000
P 9
1 0.057087 0.081938
2 0.115901 0.251826
3 0.235305 0.376344
4 0.477723 0.320902
5 0.969889 0.143779
6 1.969099 -0.045543
7 3.997726 -0.017191
8 8.116307 0.002580
9 16.477979 -0.000222
P 1
1 0.078717 1.000000
P 1
1 0.202707 1.000000
P 1
1 0.301333 1.000000
D 1
1 0.215701 1.000000
D 1
1 0.560638 1.000000
D 1
1 1.588204 1.000000
F 1
1 0.356554 1.000000
F 1
1 0.961826 1.000000
G 1
1 0.694803 1.000000
S 1
1 0.0428000 1.0000000
P 1
1 0.0317000 1.0000000
D 1
1 0.0748000 1.0000000
F 1
1 0.1400000 1.0000000
G 1
1 0.2970000 1.0000000
HELIUM
S 9
1 0.077786 0.012425
2 0.161528 0.128251
3 0.335425 0.282221
4 0.696535 0.292427
5 1.446408 0.215025
6 3.003576 0.125450
7 6.237154 0.064912
8 12.951926 0.038892
9 26.895662 0.002531
S 1
1 0.937228 1.000000
S 1
1 1.223567 1.000000
S 1
1 0.229163 1.000000
P 8
1 0.228528 -0.000116
2 0.422019 2.116950
3 0.779333 -2.182954
4 1.439180 1.545850
5 2.657706 -0.879477
6 4.907934 0.469710
7 9.063386 -0.224631
8 16.737180 0.098422
P 1
1 3.888767 1.000000
P 1
1 1.015492 1.000000
D 1
1 0.939402 1.000000
D 1
1 3.054371 1.000000
F 1
1 1.021427 1.000000
S 1
1 0.0481900 1.0000000
P 1
1 0.1626000 1.0000000
D 1
1 0.3510000 1.0000000
F 1
1 0.6906000 1.0000000

1038
data/basis/avtz-bfd Normal file

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@ QP_ROOT=$PWD
cd - cd -
# Normal installation # Normal installation
PACKAGES="core.v0.10.0 cryptokit ocamlfind sexplib.v0.10.0 ZMQ ppx_sexp_conv ppx_deriving" PACKAGES="core.v0.10.0 cryptokit ocamlfind sexplib.v0.10.0 ZMQ ppx_sexp_conv ppx_deriving jbuilder.1.0+beta17"
# Needed for ZeroMQ # Needed for ZeroMQ
export C_INCLUDE_PATH="${QP_ROOT}"/include:"${C_INCLUDE_PATH}" export C_INCLUDE_PATH="${QP_ROOT}"/include:"${C_INCLUDE_PATH}"

1
lib64 Symbolic link
View File

@ -0,0 +1 @@
lib

View File

@ -119,21 +119,31 @@ end = struct
;; ;;
let read_state_average_weight () = let read_state_average_weight () =
let n_states =
read_n_states ()
|> States_number.to_int
in
if not (Ezfio.has_determinants_state_average_weight ()) then if not (Ezfio.has_determinants_state_average_weight ()) then
begin begin
let n_states =
read_n_states ()
|> States_number.to_int
in
let data = let data =
Array.init n_states (fun _ -> 1./.(float_of_int n_states)) Array.init n_states (fun _ -> 1./.(float_of_int n_states))
|> Array.map ~f:Positive_float.of_float |> Array.map ~f:Positive_float.of_float
in in
write_state_average_weight data; write_state_average_weight data
end; end;
Ezfio.get_determinants_state_average_weight () let result =
|> Ezfio.flattened_ezfio Ezfio.get_determinants_state_average_weight ()
|> Array.map ~f:Positive_float.of_float |> Ezfio.flattened_ezfio
|> Array.map ~f:Positive_float.of_float
in
if Array.length result = n_states then
result
else
let data =
Array.init n_states (fun _ -> 1./.(float_of_int n_states))
|> Array.map ~f:Positive_float.of_float
in
(write_state_average_weight data; data)
;; ;;
let read_expected_s2 () = let read_expected_s2 () =

View File

@ -830,10 +830,11 @@ let run ~port =
let () = let () =
if debug_env then if debug_env then
begin begin
Printf.sprintf "q:%d r:%d n:%d : %s\n%!" Printf.sprintf "q:%d r:%d n:%d c:%d : %s\n%!"
(Queuing_system.number_of_queued program_state.queue) (Queuing_system.number_of_queued program_state.queue)
(Queuing_system.number_of_running program_state.queue) (Queuing_system.number_of_running program_state.queue)
(Queuing_system.number_of_tasks program_state.queue) (Queuing_system.number_of_tasks program_state.queue)
(Queuing_system.number_of_clients program_state.queue)
(Message.to_string message) (Message.to_string message)
|> debug |> debug
end end

13
ocaml/myocamlbuild.ml Normal file
View File

@ -0,0 +1,13 @@
open Ocamlbuild_plugin;;
open Command;;
dispatch begin function
| Before_rules ->
begin
end
| After_rules ->
begin
flag ["ocaml";"compile";"native";"gprof"] (S [ A "-p"]);
end
| _ -> ()
end

View File

@ -214,6 +214,26 @@ end = struct
| _ -> raise (Invalid_argument (\"Wrong IO type : \"^s)) | _ -> raise (Invalid_argument (\"Wrong IO type : \"^s))
end end
module Perturbation : sig
type t [@@deriving sexp]
val to_string : t -> string
val of_string : string -> t
end = struct
type t =
| EN
| Barycentric
[@@deriving sexp]
let to_string = function
| EN -> \"EN\"
| Barycentric -> \"Barycentric\"
let of_string s =
match (String.lowercase_ascii s) with
| \"en\" -> EN
| \"barycentric\" -> Barycentric
| _ -> raise (Invalid_argument (\"Wrong Perturbation type : \"^s))
end
" "

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
s = H_apply("just_1h_1p") s = H_apply("just_1h_1p")

View File

@ -1 +1 @@
Generators_restart Perturbation Properties Selectors_no_sorted Utils Davidson Generators_restart Perturbation Properties Selectors_no_sorted Utils DavidsonUndressed

17
plugins/Bk/EZFIO.cfg Normal file
View File

@ -0,0 +1,17 @@
[energy]
type: double precision
doc: Calculated energy
interface: ezfio
[thresh_dressed_ci]
type: Threshold
doc: Threshold on the convergence of the dressed CI energy
interface: ezfio,provider,ocaml
default: 1.e-5
[n_it_max_dressed_ci]
type: Strictly_positive_int
doc: Maximum number of dressed CI iterations
interface: ezfio,provider,ocaml
default: 10

View File

@ -0,0 +1,2 @@
Bitmask dress_zmq DavidsonDressed

View File

@ -1,8 +1,6 @@
=============== ==
UndressedMethod Bk
=============== ==
Defines a null dressing vector
Needed Modules Needed Modules
============== ==============

26
plugins/Bk/bk.irp.f Normal file
View File

@ -0,0 +1,26 @@
program bk
implicit none
BEGIN_DOC
! Shifted-Bk method
END_DOC
read_wf = .True.
state_following = .True.
TOUCH read_wf state_following
call run()
end
subroutine run
implicit none
call diagonalize_ci_dressed
integer :: istate
print *, 'Bk Energy'
print *, '---------'
print *, ''
do istate = 1,N_states
print *, istate, CI_energy_dressed(istate)
enddo
! call save_wavefunction
call ezfio_set_bk_energy(ci_energy_dressed(1))
end

65
plugins/Bk/dressing.irp.f Normal file
View File

@ -0,0 +1,65 @@
BEGIN_PROVIDER [ double precision, fock_diag_tmp_, (2,mo_tot_num+1,Nproc) ]
&BEGIN_PROVIDER [ integer, current_generator_, (Nproc) ]
implicit none
BEGIN_DOC
! Temporary arrays for speedup
END_DOC
current_generator_(:) = 0
END_PROVIDER
subroutine dress_with_alpha_buffer(Nstates,Ndet,Nint,delta_ij_loc, i_gen, minilist, det_minilist, n_minilist, alpha, iproc)
use bitmasks
implicit none
BEGIN_DOC
!delta_ij_loc(:,:,1) : dressing column for H
!delta_ij_loc(:,:,2) : dressing column for S2
!minilist : indices of determinants connected to alpha ( in psi_det_sorted )
!n_minilist : size of minilist
!alpha : alpha determinant
END_DOC
integer, intent(in) :: Nint, Ndet, Nstates, n_minilist, iproc, i_gen
integer(bit_kind), intent(in) :: alpha(Nint,2), det_minilist(Nint, 2, n_minilist)
integer,intent(in) :: minilist(n_minilist)
double precision, intent(inout) :: delta_ij_loc(Nstates,Ndet,2)
integer :: j, j_mini, i_state
double precision :: c_alpha(N_states), h_alpha_alpha, hdress, sdress
double precision :: i_h_alpha, i_s_alpha, alpha_h_psi(N_states)
double precision, external :: diag_H_mat_elem_fock
if(current_generator_(iproc) /= i_gen) then
current_generator_(iproc) = i_gen
call build_fock_tmp(fock_diag_tmp_(1,1,iproc),psi_det_generators(1,1,i_gen),N_int)
end if
h_alpha_alpha = diag_H_mat_elem_fock(psi_det_generators(1,1,i_gen),alpha,fock_diag_tmp_(1,1,iproc),N_int)
call i_H_psi_minilist(alpha,det_minilist,minilist,n_minilist,psi_coef,N_int,n_minilist,size(psi_coef,1),N_states,alpha_h_psi)
do i_state=1,N_states
if (h_alpha_alpha - dress_e0_denominator(i_state) > 0.1d0 ) then
c_alpha(i_state) = alpha_h_psi(i_state) / &
(dress_e0_denominator(i_state) - h_alpha_alpha)
else
c_alpha(i_state) = 0.d0
endif
enddo
do j_mini=1,n_minilist
j = minilist(j_mini)
call i_H_j (det_minilist(1,1,j_mini),alpha,N_int,i_h_alpha)
call get_s2(det_minilist(1,1,j_mini),alpha,N_int,i_s_alpha)
do i_state=1,N_states
hdress = c_alpha(i_state) * i_h_alpha
sdress = c_alpha(i_state) * i_s_alpha
delta_ij_loc(i_state,j,1) = delta_ij_loc(i_state,j,1) + hdress
delta_ij_loc(i_state,j,2) = delta_ij_loc(i_state,j,2) + sdress
enddo
enddo
end subroutine

View File

@ -1,2 +1,2 @@
Generators_CAS Perturbation Selectors_CASSD ZMQ Davidson Generators_CAS Perturbation Selectors_CASSD ZMQ DavidsonUndressed

View File

@ -1,7 +1,7 @@
! Generates subroutine H_apply_cid ! Generates subroutine H_apply_cid
! ---------------------------------- ! ----------------------------------
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import H_apply from generate_h_apply import H_apply
H = H_apply("cid",do_double_exc=True,do_mono_exc=False) H = H_apply("cid",do_double_exc=True,do_mono_exc=False)
print H print H

View File

@ -1 +1 @@
Selectors_full SingleRefMethod Davidson Selectors_full SingleRefMethod DavidsonUndressed

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
from perturbation import perturbations from perturbation import perturbations
@ -16,7 +16,7 @@ subroutine H_apply_cisd_selection(perturbation,pt2, norm_pert, H_pert_diag, N_st
integer, intent(in) :: N_st integer, intent(in) :: N_st
double precision, intent(inout):: pt2(N_st), norm_pert(N_st), H_pert_diag(N_st) double precision, intent(inout):: pt2(N_st), norm_pert(N_st), H_pert_diag(N_st)
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from perturbation import perturbations from perturbation import perturbations
for perturbation in perturbations: for perturbation in perturbations:

View File

@ -1 +1 @@
Perturbation CID Davidson Perturbation CID DavidsonUndressed

View File

@ -1,7 +1,7 @@
! Generates subroutine H_apply_cisd ! Generates subroutine H_apply_cisd
! ---------------------------------- ! ----------------------------------
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import H_apply from generate_h_apply import H_apply
H = H_apply("cis",do_double_exc=False) H = H_apply("cis",do_double_exc=False)
print H print H

View File

@ -1 +1 @@
Selectors_full SingleRefMethod Davidson Selectors_full SingleRefMethod DavidsonUndressed

View File

@ -1,7 +1,7 @@
! Generates subroutine H_apply_cisd ! Generates subroutine H_apply_cisd
! ---------------------------------- ! ----------------------------------
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import H_apply from generate_h_apply import H_apply
H = H_apply("cisd") H = H_apply("cisd")
print H print H

View File

@ -1 +1 @@
Selectors_full SingleRefMethod Davidson Selectors_full SingleRefMethod DavidsonUndressed

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
from perturbation import perturbations from perturbation import perturbations

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
from perturbation import perturbations from perturbation import perturbations
@ -16,7 +16,7 @@ subroutine H_apply_cisd_selection(perturbation,pt2, norm_pert, H_pert_diag, N_st
integer, intent(in) :: N_st integer, intent(in) :: N_st
double precision, intent(inout):: pt2(N_st), norm_pert(N_st), H_pert_diag(N_st) double precision, intent(inout):: pt2(N_st), norm_pert(N_st), H_pert_diag(N_st)
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from perturbation import perturbations from perturbation import perturbations
for perturbation in perturbations: for perturbation in perturbations:

View File

@ -1 +1 @@
Determinants Davidson Determinants DavidsonUndressed

View File

@ -1 +1 @@
Davidson_Utils Davidson

View File

@ -55,116 +55,98 @@ END_PROVIDER
if (diag_algorithm == "Davidson") then if (diag_algorithm == "Davidson") then
allocate (eigenvectors(size(CI_eigenvectors_dressed,1),size(CI_eigenvectors_dressed,2)),&
eigenvectors_s2(size(CI_eigenvectors_dressed,1),size(CI_eigenvectors_dressed,2)),&
eigenvalues(size(CI_electronic_energy_dressed,1)))
do j=1,min(N_states,N_det) do j=1,min(N_states,N_det)
do i=1,N_det do i=1,N_det
eigenvectors(i,j) = psi_coef(i,j) CI_eigenvectors_dressed(i,j) = psi_coef(i,j)
enddo enddo
enddo enddo
do mrcc_state=1,N_states call davidson_diag_HS2(psi_det,CI_eigenvectors_dressed, CI_eigenvectors_s2_dressed,&
do j=mrcc_state,min(N_states,N_det) size(CI_eigenvectors_dressed,1), CI_electronic_energy_dressed,&
do i=1,N_det N_det,min(N_det,N_states),min(N_det,N_states_diag),N_int,1)
eigenvectors(i,j) = psi_coef(i,j)
enddo
enddo
call davidson_diag_HS2(psi_det,eigenvectors, eigenvectors_s2, &
size(eigenvectors,1), &
eigenvalues,N_det,min(N_det,N_states),min(N_det,N_states_diag),N_int,&
mrcc_state)
CI_eigenvectors_dressed(1:N_det,mrcc_state) = eigenvectors(1:N_det,mrcc_state)
CI_electronic_energy_dressed(mrcc_state) = eigenvalues(mrcc_state)
enddo
do k=N_states+1,N_states_diag
CI_eigenvectors_dressed(1:N_det,k) = eigenvectors(1:N_det,k)
CI_electronic_energy_dressed(k) = eigenvalues(k)
enddo
call u_0_S2_u_0(CI_eigenvectors_s2_dressed,CI_eigenvectors_dressed,N_det,psi_det,N_int,& call u_0_S2_u_0(CI_eigenvectors_s2_dressed,CI_eigenvectors_dressed,N_det,psi_det,N_int,&
N_states_diag,size(CI_eigenvectors_dressed,1)) N_states_diag,size(CI_eigenvectors_dressed,1))
deallocate (eigenvectors,eigenvalues)
else if (diag_algorithm == "Lapack") then else if (diag_algorithm == "Lapack") then
allocate (eigenvectors(size(H_matrix_dressed,1),N_det)) allocate (eigenvectors(size(H_matrix_dressed,1),N_det))
allocate (eigenvalues(N_det)) allocate (eigenvalues(N_det))
call lapack_diag(eigenvalues,eigenvectors, & call lapack_diag(eigenvalues,eigenvectors, &
H_matrix_dressed,size(H_matrix_dressed,1),N_det) H_matrix_dressed,size(H_matrix_dressed,1),N_det)
CI_electronic_energy_dressed(:) = 0.d0 CI_electronic_energy_dressed(:) = 0.d0
if (s2_eig) then if (s2_eig) then
i_state = 0 i_state = 0
allocate (s2_eigvalues(N_det)) allocate (s2_eigvalues(N_det))
allocate(index_good_state_array(N_det),good_state_array(N_det)) allocate(index_good_state_array(N_det),good_state_array(N_det))
good_state_array = .False. good_state_array = .False.
call u_0_S2_u_0(s2_eigvalues,eigenvectors,N_det,psi_det,N_int, &
N_det,size(eigenvectors,1))
do j=1,N_det
! Select at least n_states states with S^2 values closed to "expected_s2"
if(dabs(s2_eigvalues(j)-expected_s2).le.0.5d0)then
i_state +=1
index_good_state_array(i_state) = j
good_state_array(j) = .True.
endif
if(i_state.eq.N_states) then
exit
endif
enddo
if(i_state .ne.0)then
! Fill the first "i_state" states that have a correct S^2 value
do j = 1, i_state
do i=1,N_det
CI_eigenvectors_dressed(i,j) = eigenvectors(i,index_good_state_array(j))
enddo
CI_electronic_energy_dressed(j) = eigenvalues(index_good_state_array(j))
CI_eigenvectors_s2_dressed(j) = s2_eigvalues(index_good_state_array(j))
enddo
i_other_state = 0
do j = 1, N_det
if(good_state_array(j))cycle
i_other_state +=1
if(i_state+i_other_state.gt.n_states_diag)then
exit
endif
do i=1,N_det
CI_eigenvectors_dressed(i,i_state+i_other_state) = eigenvectors(i,j)
enddo
CI_electronic_energy_dressed(i_state+i_other_state) = eigenvalues(j)
CI_eigenvectors_s2_dressed(i_state+i_other_state) = s2_eigvalues(i_state+i_other_state)
enddo
else call u_0_S2_u_0(s2_eigvalues,eigenvectors,N_det,psi_det,N_int,&
print*,'' N_det,size(eigenvectors,1))
print*,'!!!!!!!! WARNING !!!!!!!!!' do j=1,N_det
print*,' Within the ',N_det,'determinants selected' ! Select at least n_states states with S^2 values closed to "expected_s2"
print*,' and the ',N_states_diag,'states requested' if(dabs(s2_eigvalues(j)-expected_s2).le.0.5d0)then
print*,' We did not find any state with S^2 values close to ',expected_s2 i_state +=1
print*,' We will then set the first N_states eigenvectors of the H matrix' index_good_state_array(i_state) = j
print*,' as the CI_eigenvectors_dressed' good_state_array(j) = .True.
print*,' You should consider more states and maybe ask for s2_eig to be .True. or just enlarge the CI space' endif
print*,'' if(i_state.eq.N_states) then
do j=1,min(N_states_diag,N_det) exit
do i=1,N_det endif
CI_eigenvectors_dressed(i,j) = eigenvectors(i,j) enddo
enddo if(i_state .ne.0)then
CI_electronic_energy_dressed(j) = eigenvalues(j) ! Fill the first "i_state" states that have a correct S^2 value
CI_eigenvectors_s2_dressed(j) = s2_eigvalues(j) do j = 1, i_state
enddo do i=1,N_det
endif CI_eigenvectors_dressed(i,j) = eigenvectors(i,index_good_state_array(j))
deallocate(index_good_state_array,good_state_array) enddo
deallocate(s2_eigvalues) CI_electronic_energy_dressed(j) = eigenvalues(index_good_state_array(j))
else CI_eigenvectors_s2_dressed(j) = s2_eigvalues(index_good_state_array(j))
call u_0_S2_u_0(CI_eigenvectors_s2_dressed,eigenvectors,N_det,psi_det,N_int,& enddo
i_other_state = 0
do j = 1, N_det
if(good_state_array(j))cycle
i_other_state +=1
if(i_state+i_other_state.gt.n_states_diag)then
exit
endif
do i=1,N_det
CI_eigenvectors_dressed(i,i_state+i_other_state) = eigenvectors(i,j)
enddo
CI_electronic_energy_dressed(i_state+i_other_state) = eigenvalues(j)
CI_eigenvectors_s2_dressed(i_state+i_other_state) = s2_eigvalues(i_state+i_other_state)
enddo
else
print*,''
print*,'!!!!!!!! WARNING !!!!!!!!!'
print*,' Within the ',N_det,'determinants selected'
print*,' and the ',N_states_diag,'states requested'
print*,' We did not find any state with S^2 values close to ',expected_s2
print*,' We will then set the first N_states eigenvectors of the H matrix'
print*,' as the CI_eigenvectors_dressed'
print*,' You should consider more states and maybe ask for s2_eig to be .True. or just enlarge the CI space'
print*,''
do j=1,min(N_states_diag,N_det)
do i=1,N_det
CI_eigenvectors_dressed(i,j) = eigenvectors(i,j)
enddo
CI_electronic_energy_dressed(j) = eigenvalues(j)
CI_eigenvectors_s2_dressed(j) = s2_eigvalues(j)
enddo
endif
deallocate(index_good_state_array,good_state_array)
deallocate(s2_eigvalues)
else
call u_0_S2_u_0(CI_eigenvectors_s2_dressed,eigenvectors,N_det,psi_det,N_int,&
min(N_det,N_states_diag),size(eigenvectors,1)) min(N_det,N_states_diag),size(eigenvectors,1))
! Select the "N_states_diag" states of lowest energy ! Select the "N_states_diag" states of lowest energy
do j=1,min(N_det,N_states_diag) do j=1,min(N_det,N_states_diag)
do i=1,N_det do i=1,N_det
CI_eigenvectors_dressed(i,j) = eigenvectors(i,j) CI_eigenvectors_dressed(i,j) = eigenvectors(i,j)
enddo enddo
CI_electronic_energy_dressed(j) = eigenvalues(j) CI_electronic_energy_dressed(j) = eigenvalues(j)
enddo enddo
endif endif
deallocate(eigenvectors,eigenvalues) deallocate(eigenvectors,eigenvalues)
endif endif
@ -187,24 +169,23 @@ end
BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det,N_states) ] BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Dressed H with Delta_ij ! Dressed H with Delta_ij
END_DOC END_DOC
integer :: i, j,istate,ii,jj integer :: i, j, k
do istate = 1,N_states
do j=1,N_det h_matrix_dressed(1:N_det,1:N_det) = h_matrix_all_dets(1:N_det,1:N_det)
do i=1,N_det do k=1,N_states
h_matrix_dressed(i,j,istate) = h_matrix_all_dets(i,j) do j=1,N_det
enddo do i=1,N_det
enddo h_matrix_dressed(i,j) = h_matrix_dressed(i,j) + &
i = dressed_column_idx(istate) 0.5d0 * (dressing_column_h(i,k) * psi_coef(j,k) + &
do j = 1, N_det dressing_column_h(j,k) * psi_coef(i,k))
h_matrix_dressed(i,j,istate) += dressing_column_h(j,istate) enddo
h_matrix_dressed(j,i,istate) += dressing_column_h(j,istate) enddo
enddo enddo
h_matrix_dressed(i,i,istate) -= dressing_column_h(i,istate)
enddo
END_PROVIDER END_PROVIDER

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
s = H_apply("just_1h_1p") s = H_apply("just_1h_1p")

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
s = H_apply("FCI") s = H_apply("FCI")

View File

@ -1 +1 @@
Perturbation Selectors_full Generators_full Davidson Perturbation Selectors_full Generators_full DavidsonUndressed

View File

@ -1 +1 @@
Perturbation Selectors_full Generators_full ZMQ FourIdx MPI Davidson Perturbation Selectors_full Generators_full ZMQ FourIdx MPI DavidsonUndressed

View File

@ -12,14 +12,21 @@ BEGIN_PROVIDER [ double precision, pt2_E0_denominator, (N_states) ]
! E0 in the denominator of the PT2 ! E0 in the denominator of the PT2
END_DOC END_DOC
if (initialize_pt2_E0_denominator) then if (initialize_pt2_E0_denominator) then
pt2_E0_denominator(1:N_states) = psi_energy(1:N_states) if (h0_type == "EN") then
pt2_E0_denominator(1:N_states) = psi_energy(1:N_states)
else if (h0_type == "Barycentric") then
pt2_E0_denominator(1:N_states) = barycentric_electronic_energy(1:N_states)
else
print *, h0_type, ' not implemented'
stop
endif
! call ezfio_get_full_ci_zmq_energy(pt2_E0_denominator(1)) ! call ezfio_get_full_ci_zmq_energy(pt2_E0_denominator(1))
! pt2_E0_denominator(1) -= nuclear_repulsion ! pt2_E0_denominator(1) -= nuclear_repulsion
! pt2_E0_denominator(1:N_states) = HF_energy - nuclear_repulsion ! pt2_E0_denominator(1:N_states) = HF_energy - nuclear_repulsion
! pt2_E0_denominator(1:N_states) = barycentric_electronic_energy(1:N_states)
call write_double(6,pt2_E0_denominator(1)+nuclear_repulsion, 'PT2 Energy denominator') call write_double(6,pt2_E0_denominator(1)+nuclear_repulsion, 'PT2 Energy denominator')
else else
pt2_E0_denominator = -huge(1.d0) pt2_E0_denominator = -huge(1.d0)
endif endif
END_PROVIDER END_PROVIDER

View File

@ -19,6 +19,7 @@ subroutine run
double precision :: E_CI_before, relative_error, absolute_error, eqt double precision :: E_CI_before, relative_error, absolute_error, eqt
allocate (pt2(N_states)) allocate (pt2(N_states))
call diagonalize_CI()
pt2 = 0.d0 pt2 = 0.d0
E_CI_before = pt2_E0_denominator(1) + nuclear_repulsion E_CI_before = pt2_E0_denominator(1) + nuclear_repulsion

View File

@ -513,7 +513,7 @@ END_PROVIDER
double precision :: norm_left, stato double precision :: norm_left, stato
integer, external :: pt2_find integer, external :: pt2_find
pt2_weight(1) = psi_coef_generators(1,pt2_stoch_istate)**2 pt2_weight(1) = psi_coef_generators(1,pt2_stoch_istate)**2
pt2_cweight(1) = psi_coef_generators(1,pt2_stoch_istate)**2 pt2_cweight(1) = psi_coef_generators(1,pt2_stoch_istate)**2
do i=1,N_det_generators do i=1,N_det_generators

View File

@ -41,7 +41,7 @@ subroutine run_pt2_slave(thread,iproc,energy)
buf%N = 0 buf%N = 0
n_tasks = 0 n_tasks = 0
call create_selection_buffer(1, 2, buf) call create_selection_buffer(0, 0, buf)
done = .False. done = .False.
do while (.not.done) do while (.not.done)

View File

@ -5,7 +5,6 @@ BEGIN_PROVIDER [ integer, fragment_count ]
BEGIN_DOC BEGIN_DOC
! Number of fragments for the deterministic part ! Number of fragments for the deterministic part
END_DOC END_DOC
! fragment_count = (elec_alpha_num-n_core_orb)*mo_tot_num
fragment_count = (elec_alpha_num-n_core_orb)**2 fragment_count = (elec_alpha_num-n_core_orb)**2
END_PROVIDER END_PROVIDER
@ -71,7 +70,6 @@ subroutine select_connected(i_generator,E0,pt2,b,subset)
hole_mask(k,2) = iand(generators_bitmask(k,2,s_hole,l), psi_det_generators(k,2,i_generator)) hole_mask(k,2) = iand(generators_bitmask(k,2,s_hole,l), psi_det_generators(k,2,i_generator))
particle_mask(k,1) = iand(generators_bitmask(k,1,s_part,l), not(psi_det_generators(k,1,i_generator)) ) particle_mask(k,1) = iand(generators_bitmask(k,1,s_part,l), not(psi_det_generators(k,1,i_generator)) )
particle_mask(k,2) = iand(generators_bitmask(k,2,s_part,l), not(psi_det_generators(k,2,i_generator)) ) particle_mask(k,2) = iand(generators_bitmask(k,2,s_part,l), not(psi_det_generators(k,2,i_generator)) )
enddo enddo
call select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,b,subset) call select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,b,subset)
enddo enddo
@ -255,6 +253,7 @@ subroutine get_m0(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
deallocate(lbanned) deallocate(lbanned)
end end
subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,buf,subset) subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,buf,subset)
use bitmasks use bitmasks
use selection_types use selection_types
@ -300,6 +299,7 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
particle(k,2) = iand(not(psi_det_generators(k,2,i_generator)), particle_mask(k,2)) particle(k,2) = iand(not(psi_det_generators(k,2,i_generator)), particle_mask(k,2))
enddo enddo
integer :: N_holes(2), N_particles(2) integer :: N_holes(2), N_particles(2)
integer :: hole_list(N_int*bit_kind_size,2) integer :: hole_list(N_int*bit_kind_size,2)
integer :: particle_list(N_int*bit_kind_size,2) integer :: particle_list(N_int*bit_kind_size,2)
@ -599,7 +599,6 @@ subroutine fill_buffer_double(i_generator, sp, h1, h2, bannedOrb, banned, fock_d
logical, external :: detEq logical, external :: detEq
if(sp == 3) then if(sp == 3) then
s1 = 1 s1 = 1
s2 = 2 s2 = 2
@ -617,15 +616,13 @@ subroutine fill_buffer_double(i_generator, sp, h1, h2, bannedOrb, banned, fock_d
do p2=ib,mo_tot_num do p2=ib,mo_tot_num
if(bannedOrb(p2, s2)) cycle if(bannedOrb(p2, s2)) cycle
if(banned(p1,p2)) cycle if(banned(p1,p2)) cycle
if( sum(abs(mat(1:N_states, p1, p2))) == 0d0) cycle if( sum(abs(mat(1:N_states, p1, p2))) == 0d0) cycle
call apply_particles(mask, s1, p1, s2, p2, det, ok, N_int) call apply_particles(mask, s1, p1, s2, p2, det, ok, N_int)
Hii = diag_H_mat_elem_fock(psi_det_generators(1,1,i_generator),det,fock_diag_tmp,N_int) Hii = diag_H_mat_elem_fock(psi_det_generators(1,1,i_generator),det,fock_diag_tmp,N_int)
min_e_pert = 0d0 min_e_pert = 0d0
! double precision :: hij
! call i_h_j(psi_det_generators(1,1,i_generator), det, N_int, hij)
do istate=1,N_states do istate=1,N_states
delta_E = E0(istate) - Hii delta_E = E0(istate) - Hii
val = mat(istate, p1, p2) + mat(istate, p1, p2) val = mat(istate, p1, p2) + mat(istate, p1, p2)
@ -636,7 +633,6 @@ subroutine fill_buffer_double(i_generator, sp, h1, h2, bannedOrb, banned, fock_d
e_pert = 0.5d0 * (tmp - delta_E) e_pert = 0.5d0 * (tmp - delta_E)
pt2(istate) = pt2(istate) + e_pert pt2(istate) = pt2(istate) + e_pert
min_e_pert = min(e_pert,min_e_pert) min_e_pert = min(e_pert,min_e_pert)
! ci(istate) = e_pert / hij
end do end do
if(min_e_pert <= buf%mini) then if(min_e_pert <= buf%mini) then
@ -774,6 +770,7 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
if(tip == 3) then if(tip == 3) then
puti = p(1, mi) puti = p(1, mi)
if(bannedOrb(puti, mi)) return
do i = 1, 3 do i = 1, 3
putj = p(i, ma) putj = p(i, ma)
if(banned(putj,puti,bant)) cycle if(banned(putj,puti,bant)) cycle
@ -796,11 +793,12 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
h2 = h(1,2) h2 = h(1,2)
do j = 1,2 do j = 1,2
putj = p(j, 2) putj = p(j, 2)
if(bannedOrb(putj, 2)) cycle
p2 = p(turn2(j), 2) p2 = p(turn2(j), 2)
do i = 1,2 do i = 1,2
puti = p(i, 1) puti = p(i, 1)
if(banned(puti,putj,bant)) cycle if(banned(puti,putj,bant) .or. bannedOrb(puti,1)) cycle
p1 = p(turn2(i), 1) p1 = p(turn2(i), 1)
hij = mo_bielec_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, 1, 2, h1, p1, h2, p2) hij = mo_bielec_integral(p1, p2, h1, h2) * get_phase_bi(phasemask, 1, 2, h1, p1, h2, p2)
@ -815,8 +813,10 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
h2 = h(2, ma) h2 = h(2, ma)
do i=1,3 do i=1,3
puti = p(i, ma) puti = p(i, ma)
if(bannedOrb(puti,ma)) cycle
do j=i+1,4 do j=i+1,4
putj = p(j, ma) putj = p(j, ma)
if(bannedOrb(putj,ma)) cycle
if(banned(puti,putj,1)) cycle if(banned(puti,putj,1)) cycle
i1 = turn2d(1, i, j) i1 = turn2d(1, i, j)
@ -833,7 +833,9 @@ subroutine get_d2(gen, phasemask, bannedOrb, banned, mat, mask, h, p, sp, coefs)
p1 = p(1, mi) p1 = p(1, mi)
do i=1,3 do i=1,3
puti = p(turn3(1,i), ma) puti = p(turn3(1,i), ma)
if(bannedOrb(puti,ma)) cycle
putj = p(turn3(2,i), ma) putj = p(turn3(2,i), ma)
if(bannedOrb(putj,ma)) cycle
if(banned(puti,putj,1)) cycle if(banned(puti,putj,1)) cycle
p2 = p(i, ma) p2 = p(i, ma)

View File

@ -39,7 +39,7 @@ subroutine add_to_selection_buffer(b, det, val)
double precision, intent(in) :: val double precision, intent(in) :: val
integer :: i integer :: i
if(val <= b%mini) then if(b%N > 0 .and. val <= b%mini) then
b%cur += 1 b%cur += 1
b%det(1:N_int,1:2,b%cur) = det(1:N_int,1:2) b%det(1:N_int,1:2,b%cur) = det(1:N_int,1:2)
b%val(b%cur) = val b%val(b%cur) = val
@ -119,7 +119,7 @@ subroutine sort_selection_buffer(b)
integer(bit_kind), pointer :: detmp(:,:,:) integer(bit_kind), pointer :: detmp(:,:,:)
integer :: i, nmwen integer :: i, nmwen
logical, external :: detEq logical, external :: detEq
if (b%cur == 0) return if (b%N == 0 .or. b%cur == 0) return
nmwen = min(b%N, b%cur) nmwen = min(b%N, b%cur)
allocate(iorder(b%cur), detmp(N_int, 2, size(b%det,3))) allocate(iorder(b%cur), detmp(N_int, 2, size(b%det,3)))

View File

@ -7,22 +7,11 @@ BEGIN_PROVIDER [ integer, N_det_generators ]
END_DOC END_DOC
integer :: i,k,l integer :: i,k,l
logical :: good logical :: good
integer, external :: number_of_holes,number_of_particles
call write_time(6) call write_time(6)
N_det_generators = 0 N_det_generators = 0
do i=1,N_det do i=1,N_det
do l=1,n_cas_bitmask good = ( number_of_holes(psi_det_sorted(1,1,i)) ==0).and.(number_of_particles(psi_det_sorted(1,1,i))==0 )
good = .True.
do k=1,N_int
good = good .and. ( &
iand(not(cas_bitmask(k,1,l)), psi_det_sorted(k,1,i)) == &
iand(not(cas_bitmask(k,1,l)), HF_bitmask(k,1)) ) .and. ( &
iand(not(cas_bitmask(k,2,l)), psi_det_sorted(k,2,i)) == &
iand(not(cas_bitmask(k,2,l)), HF_bitmask(k,2)) )
enddo
if (good) then
exit
endif
enddo
if (good) then if (good) then
N_det_generators += 1 N_det_generators += 1
endif endif
@ -40,28 +29,17 @@ END_PROVIDER
END_DOC END_DOC
integer :: i, k, l, m integer :: i, k, l, m
logical :: good logical :: good
integer, external :: number_of_holes,number_of_particles
m=0 m=0
do i=1,N_det do i=1,N_det
do l=1,n_cas_bitmask good = ( number_of_holes(psi_det_sorted(1,1,i)) ==0).and.(number_of_particles(psi_det_sorted(1,1,i))==0 )
good = .True.
do k=1,N_int
good = good .and. ( &
iand(not(cas_bitmask(k,1,l)), psi_det_sorted(k,1,i)) == &
iand(not(cas_bitmask(k,1,l)), HF_bitmask(k,1)) .and. ( &
iand(not(cas_bitmask(k,2,l)), psi_det_sorted(k,2,i)) == &
iand(not(cas_bitmask(k,2,l)), HF_bitmask(k,2) )) )
enddo
if (good) then
exit
endif
enddo
if (good) then if (good) then
m = m+1 m = m+1
do k=1,N_int do k=1,N_int
psi_det_generators(k,1,m) = psi_det_sorted(k,1,i) psi_det_generators(k,1,m) = psi_det_sorted(k,1,i)
psi_det_generators(k,2,m) = psi_det_sorted(k,2,i) psi_det_generators(k,2,m) = psi_det_sorted(k,2,i)
enddo enddo
psi_coef_generators(m,:) = psi_coef(m,:) psi_coef_generators(m,:) = psi_coef_sorted(m,:)
endif endif
enddo enddo

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
from perturbation import perturbations from perturbation import perturbations

View File

@ -1 +1 @@
Perturbation Selectors_full SingleRefMethod ZMQ Perturbation Selectors_full SingleRefMethod ZMQ DavidsonUndressed

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
s = H_apply("mrcc") s = H_apply("mrcc")

View File

@ -1 +1 @@
MRPT_Utils Selectors_full Generators_full MRPT_Utils Selectors_full Generators_full DavidsonUndressed

View File

@ -1,5 +1,5 @@
use bitmasks use bitmasks
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from generate_h_apply import * from generate_h_apply import *
s = H_apply("mrpt") s = H_apply("mrpt")

View File

@ -62,4 +62,9 @@ doc: Thresholds on selectors (fraction of the norm) for final PT2 calculation
interface: ezfio,provider,ocaml interface: ezfio,provider,ocaml
default: 1. default: 1.
[h0_type]
type: Perturbation
doc: Type of zeroth-order Hamiltonian [ EN | Barycentric ]
interface: ezfio,provider,ocaml
default: EN

View File

@ -1 +1 @@
Determinants Properties Hartree_Fock Davidson MRPT_Utils Determinants Hartree_Fock Davidson MRPT_Utils

View File

@ -1,75 +0,0 @@
subroutine pt2_dipole_moment_z(det_pert,c_pert,e_2_pert,H_pert_diag,Nint,ndet,n_st,minilist,idx_minilist,N_minilist)
use bitmasks
implicit none
integer, intent(in) :: Nint,ndet,n_st
integer(bit_kind), intent(in) :: det_pert(Nint,2)
double precision , intent(out) :: c_pert(n_st),e_2_pert(n_st),H_pert_diag(N_st)
double precision :: i_O1_psi_array(N_st)
double precision :: i_H_psi_array(N_st)
integer, intent(in) :: N_minilist
integer, intent(in) :: idx_minilist(0:N_det_selectors)
integer(bit_kind), intent(in) :: minilist(Nint,2,N_det_selectors)
BEGIN_DOC
! compute the perturbative contribution to the dipole moment of one determinant
!
! for the various n_st states, at various level of theory.
!
! c_pert(i) = <psi(i)|H|det_pert>/(<psi(i)|H|psi(i)> - <det_pert|H|det_pert>)
!
! e_2_pert(i) = c_pert(i) * <det_pert|Z|psi(i)>
!
! H_pert_diag(i) = c_pert(i)^2 * <det_pert|Z|det_pert>
!
! To get the contribution of the first order :
!
! <Z_1> = sum(over i) e_2_pert(i)
!
! To get the contribution of the diagonal elements of the second order :
!
! [ <Z_0> + <Z_1> + sum(over i) H_pert_diag(i) ] / [1. + sum(over i) c_pert(i) **2]
!
END_DOC
integer :: i,j
double precision :: diag_H_mat_elem
integer :: exc(0:2,2,2)
integer :: degree
double precision :: phase,delta_e,h,oii,diag_o1_mat_elem
integer :: h1,h2,p1,p2,s1,s2
ASSERT (Nint == N_int)
ASSERT (Nint > 0)
! call get_excitation_degree(HF_bitmask,det_pert,degree,N_int)
! if(degree.gt.degree_max_generators+1)then
! H_pert_diag = 0.d0
! e_2_pert = 0.d0
! c_pert = 0.d0
! return
! endif
call i_O1_psi(mo_dipole_z,det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_O1_psi_array)
!call i_H_psi(det_pert,psi_selectors,psi_selectors_coef,Nint,N_det_selectors,psi_selectors_size,N_st,i_H_psi_array)
call i_H_psi_minilist(det_pert,minilist,idx_minilist,N_minilist,psi_selectors_coef,Nint,N_minilist,psi_selectors_size,N_st,i_H_psi_array)
h = diag_H_mat_elem(det_pert,Nint)
oii = diag_O1_mat_elem(mo_dipole_z,det_pert,N_int)
do i =1,N_st
if(CI_electronic_energy(i)>h.and.CI_electronic_energy(i).ne.0.d0)then
c_pert(i) = -1.d0
e_2_pert(i) = selection_criterion*selection_criterion_factor*2.d0
else if (dabs(CI_electronic_energy(i) - h) > 1.d-6) then
c_pert(i) = i_H_psi_array(i) / (CI_electronic_energy(i) - h)
e_2_pert(i) = c_pert(i) * (i_O1_psi_array(i)+i_O1_psi_array(i) )
H_pert_diag(i) = e_2_pert(i) + c_pert(i) * c_pert(i) * oii
else
c_pert(i) = -1.d0
e_2_pert(i) = -dabs(i_H_psi_array(i))
H_pert_diag(i) = c_pert(i) * i_O1_psi_array(i)
endif
enddo
end

View File

@ -1,4 +1,4 @@
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
from perturbation import perturbations from perturbation import perturbations
import os import os

View File

@ -1,4 +1,4 @@
BEGIN_SHELL [ /usr/bin/env python ] BEGIN_SHELL [ /usr/bin/env python2 ]
import perturbation import perturbation
END_SHELL END_SHELL

View File

@ -1 +1 @@
Determinants Davidson Determinants DavidsonUndressed

View File

@ -1,5 +0,0 @@
program overwrite_w_cas
read_wf = .True.
TOUCH read_wf
call extract_ref
end

View File

@ -325,3 +325,17 @@ BEGIN_PROVIDER [double precision, ref_hamiltonian_matrix, (n_det_ref,n_det_ref)]
enddo enddo
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ integer, idx_non_ref_from_sorted, (N_det) ]
implicit none
integer :: i,inpsisor
idx_non_ref_from_sorted = 0
do i=1,N_det
inpsisor = psi_det_sorted_order(i)
if(inpsisor <= 0) stop "idx_non_ref_from_sorted"
idx_non_ref_from_sorted(inpsisor) = idx_non_ref_rev(i)
end do
END_PROVIDER

View File

@ -1 +1 @@
Determinants Davidson Full_CI_ZMQ Determinants DavidsonUndressed Full_CI_ZMQ

View File

@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python2
print "#QP -> QMCPACK" print "#QP -> QMCPACK"
@ -333,11 +333,14 @@ if do_pseudo:
# |_/ (/_ |_ # |_/ (/_ |_
# #
psi_coef = ezfio.get_determinants_psi_coef() psi_coef = ezfio.get_determinants_psi_coef()
psi_det = ezfio.get_determinants_psi_det() psi_det = ezfio.get_determinants_psi_det()
bit_kind = ezfio.get_determinants_bit_kind() bit_kind = ezfio.get_determinants_bit_kind()
nexcitedstate = ezfio.get_determinants_n_states()
print "" print ""
print "BEGIN_DET" print "BEGIN_DET"
print "" print ""
@ -349,7 +352,11 @@ if "QP_STATE" in os.environ:
state = int(os.environ["QP_STATE"])-1 state = int(os.environ["QP_STATE"])-1
else: else:
state = 0 state = 0
psi_coef = psi_coef[state]
psi_coef_small = psi_coef[state]
encode = 8*bit_kind encode = 8*bit_kind
@ -359,11 +366,35 @@ def bindigits(n, bits):
decode = lambda det: ''.join(bindigits(i,encode)[::-1] for i in det)[:mo_num] decode = lambda det: ''.join(bindigits(i,encode)[::-1] for i in det)[:mo_num]
for coef, (det_a, det_b) in zip(psi_coef, psi_det): MultiDetAlpha = []
MultiDetBeta = []
for coef, (det_a, det_b) in zip(psi_coef_small, psi_det):
print coef print coef
print decode(det_a) MyDetA=decode(det_a)
print decode(det_b) MyDetB=decode(det_b)
print MyDetA
print MyDetB
print '' print ''
MultiDetAlpha.append( det_a )
MultiDetBeta.append( det_b )
print "END_DET" print "END_DET"
import h5py
H5_qmcpack=h5py.File('MultiDet.h5','w')
groupMultiDet=H5_qmcpack.create_group("MultiDet")
groupMultiDet.create_dataset("NbDet",(1,),dtype="f8",data=len(psi_coef_small))
groupMultiDet.create_dataset("Coeff",(len(psi_coef_small),),dtype="f8",data=psi_coef)
groupMultiDet.create_dataset("nstate",(1,),dtype="i4",data=len(MyDetA))
groupMultiDet.create_dataset("nexcitedstate",(1,),dtype="i4",data=nexcitedstate)
groupMultiDet.create_dataset("Nbits",(1,),dtype="i4",data=len(det_a))
print "temp=",MultiDetAlpha[0]
mylen="S"+str(len(MyDetA))
groupMultiDet.create_dataset("CI_Alpha",(len(psi_coef_small),len(det_a)),dtype='i8',data=MultiDetAlpha)
mylen="S"+str(len(MyDetB))
groupMultiDet.create_dataset("CI_Beta",(len(psi_coef_small),len(det_b)),dtype='i8',data=MultiDetBeta)
H5_qmcpack.close()

View File

@ -14,9 +14,13 @@ END_PROVIDER
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Determinants on which we apply <i|H|psi> for perturbation. ! Determinants on which we apply <i|H|psi> for perturbation.
! The selectors are equivalent to Selectors_full, but in a different
! order. The Generators_CAS determinants appear first, then all the
! others.
END_DOC END_DOC
integer :: i, k, l, m integer :: i, k, l, m
logical :: good logical :: good
integer, external :: number_of_holes,number_of_particles
do i=1,N_det_generators do i=1,N_det_generators
do k=1,N_int do k=1,N_int
@ -33,19 +37,7 @@ END_PROVIDER
m=N_det_generators m=N_det_generators
do i=1,N_det do i=1,N_det
do l=1,n_cas_bitmask good = ( number_of_holes(psi_det_sorted(1,1,i)) ==0).and.(number_of_particles(psi_det_sorted(1,1,i))==0 )
good = .True.
do k=1,N_int
good = good .and. ( &
iand(not(cas_bitmask(k,1,l)), psi_det_sorted(k,1,i)) == &
iand(not(cas_bitmask(k,1,l)), HF_bitmask(k,1)) .and. ( &
iand(not(cas_bitmask(k,2,l)), psi_det_sorted(k,2,i)) == &
iand(not(cas_bitmask(k,2,l)), HF_bitmask(k,2) )) )
enddo
if (good) then
exit
endif
enddo
if (.not.good) then if (.not.good) then
m = m+1 m = m+1
do k=1,N_int do k=1,N_int
@ -57,7 +49,7 @@ END_PROVIDER
enddo enddo
if (N_det /= m) then if (N_det /= m) then
print *, N_det, m print *, N_det, m
stop 'N_det /= m' stop 'Selectors_CASSD : N_det /= m'
endif endif
END_PROVIDER END_PROVIDER

View File

@ -8,13 +8,17 @@ subroutine get_occupation_from_dets(istate,occupation)
integer :: i,j, ispin integer :: i,j, ispin
integer :: list(N_int*bit_kind_size,2) integer :: list(N_int*bit_kind_size,2)
integer :: n_elements(2) integer :: n_elements(2)
double precision :: c double precision :: c, norm_2
ASSERT (istate > 0) ASSERT (istate > 0)
ASSERT (istate <= N_states) ASSERT (istate <= N_states)
occupation = 0.d0 occupation = 0.d0
double precision, external :: u_dot_u
norm_2 = 1.d0/u_dot_u(psi_coef(1,istate),N_det)
do i=1,N_det do i=1,N_det
c = psi_coef(i,istate)*psi_coef(i,istate) c = psi_coef(i,istate)*psi_coef(i,istate)*norm_2
call bitstring_to_list_ab(psi_det(1,1,i), list, n_elements, N_int) call bitstring_to_list_ab(psi_det(1,1,i), list, n_elements, N_int)
do ispin=1,2 do ispin=1,2
do j=1,n_elements(ispin) do j=1,n_elements(ispin)

View File

@ -0,0 +1,17 @@
[energy]
type: double precision
doc: Calculated energy
interface: ezfio
[thresh_dressed_ci]
type: Threshold
doc: Threshold on the convergence of the dressed CI energy
interface: ezfio,provider,ocaml
default: 1.e-5
[n_it_max_dressed_ci]
type: Strictly_positive_int
doc: Maximum number of dressed CI iterations
interface: ezfio,provider,ocaml
default: 10

View File

@ -0,0 +1,12 @@
[thresh_dressed_ci]
type: Threshold
doc: Threshold on the convergence of the dressed CI energy
interface: ezfio,provider,ocaml
default: 1.e-5
[n_it_max_dressed_ci]
type: Strictly_positive_int
doc: Maximum number of dressed CI iterations
interface: ezfio,provider,ocaml
default: 10

View File

@ -0,0 +1 @@
Selectors_full Generators_full ZMQ

View File

@ -0,0 +1,12 @@
=========
dress_zmq
=========
Needed Modules
==============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.
Documentation
=============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,4 @@
subroutine run_dressing(N_st,energy)
subroutine run(N_st,energy)
implicit none implicit none
integer, intent(in) :: N_st integer, intent(in) :: N_st
@ -13,8 +11,6 @@ subroutine run(N_st,energy)
integer :: n_it_dress_max integer :: n_it_dress_max
double precision :: thresh_dress double precision :: thresh_dress
double precision, allocatable :: lambda(:)
allocate (lambda(N_states))
thresh_dress = thresh_dressed_ci thresh_dress = thresh_dressed_ci
n_it_dress_max = n_it_max_dressed_ci n_it_dress_max = n_it_max_dressed_ci
@ -27,13 +23,12 @@ subroutine run(N_st,energy)
enddo enddo
SOFT_TOUCH psi_coef ci_energy_dressed SOFT_TOUCH psi_coef ci_energy_dressed
call write_double(6,ci_energy_dressed(1),"Final dress energy") call write_double(6,ci_energy_dressed(1),"Final dress energy")
call ezfio_set_mrcepa0_energy(ci_energy_dressed(1)) ! call ezfio_set_dress_zmq_energy(ci_energy_dressed(1))
call save_wavefunction call save_wavefunction
else else
E_new = 0.d0 E_new = 0.d0
delta_E = 1.d0 delta_E = 1.d0
iteration = 0 iteration = 0
lambda = 1.d0
do while (delta_E > thresh_dress) do while (delta_E > thresh_dress)
iteration += 1 iteration += 1
print *, '===============================================' print *, '==============================================='
@ -44,7 +39,7 @@ subroutine run(N_st,energy)
do i=1,N_st do i=1,N_st
call write_double(6,ci_energy_dressed(i),"Energy") call write_double(6,ci_energy_dressed(i),"Energy")
enddo enddo
call diagonalize_ci_dressed(lambda) call diagonalize_ci_dressed
E_new = dress_e0_denominator(1) !sum(ci_energy_dressed(1:N_states)) E_new = dress_e0_denominator(1) !sum(ci_energy_dressed(1:N_states))
delta_E = (E_new - E_old)/dble(N_states) delta_E = (E_new - E_old)/dble(N_states)
@ -53,7 +48,7 @@ subroutine run(N_st,energy)
call write_double(6,delta_E,"delta_E") call write_double(6,delta_E,"delta_E")
delta_E = dabs(delta_E) delta_E = dabs(delta_E)
call save_wavefunction call save_wavefunction
call ezfio_set_mrcepa0_energy(ci_energy_dressed(1)) ! call ezfio_set_dress_zmq_energy(ci_energy_dressed(1))
if (iteration >= n_it_dress_max) then if (iteration >= n_it_dress_max) then
exit exit
endif endif
@ -63,72 +58,3 @@ subroutine run(N_st,energy)
energy(1:N_st) = ci_energy_dressed(1:N_st) energy(1:N_st) = ci_energy_dressed(1:N_st)
end end
subroutine print_cas_coefs
implicit none
integer :: i,j
print *, 'CAS'
print *, '==='
do i=1,N_det_cas
print *, (psi_cas_coef(i,j), j=1,N_states)
call debug_det(psi_cas(1,1,i),N_int)
enddo
call write_double(6,ci_energy(1),"Initial CI energy")
end
subroutine run_pt2(N_st,energy)
implicit none
integer :: i,j,k
integer, intent(in) :: N_st
double precision, intent(in) :: energy(N_st)
double precision :: pt2(N_st)
double precision :: norm_pert(N_st),H_pert_diag(N_st)
pt2 = 0d0
print*,'Last iteration only to compute the PT2'
N_det_generators = N_det_cas
N_det_selectors = N_det_non_ref
do i=1,N_det_generators
do k=1,N_int
psi_det_generators(k,1,i) = psi_ref(k,1,i)
psi_det_generators(k,2,i) = psi_ref(k,2,i)
enddo
do k=1,N_st
psi_coef_generators(i,k) = psi_ref_coef(i,k)
enddo
enddo
do i=1,N_det
do k=1,N_int
psi_selectors(k,1,i) = psi_det_sorted(k,1,i)
psi_selectors(k,2,i) = psi_det_sorted(k,2,i)
enddo
do k=1,N_st
psi_selectors_coef(i,k) = psi_coef_sorted(i,k)
enddo
enddo
SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed
SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized
call H_apply_mrcepa_PT2(pt2, norm_pert, H_pert_diag, N_st)
! call ezfio_set_full_ci_energy_pt2(energy+pt2)
print *, 'Final step'
print *, 'N_det = ', N_det
print *, 'N_states = ', N_states
print *, 'PT2 = ', pt2
print *, 'E = ', energy
print *, 'E+PT2 = ', energy+pt2
print *, '-----'
call ezfio_set_mrcepa0_energy_pt2(energy(1)+pt2(1))
end

View File

@ -1,7 +1,7 @@
subroutine dress_slave subroutine dress_slave
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Helper program to compute the dress in distributed mode. ! Helper subroutine to compute the dress in distributed mode.
END_DOC END_DOC
read_wf = .False. read_wf = .False.
distributed_davidson = .False. distributed_davidson = .False.

View File

@ -4,7 +4,7 @@ BEGIN_PROVIDER [ integer, fragment_first ]
END_PROVIDER END_PROVIDER
subroutine ZMQ_dress(E, dress, delta, delta_s2, relative_error) subroutine ZMQ_dress(E, dress, delta_out, delta_s2_out, relative_error)
use f77_zmq use f77_zmq
implicit none implicit none
@ -13,103 +13,115 @@ subroutine ZMQ_dress(E, dress, delta, delta_s2, relative_error)
integer(ZMQ_PTR) :: zmq_to_qp_run_socket, zmq_socket_pull integer(ZMQ_PTR) :: zmq_to_qp_run_socket, zmq_socket_pull
integer, external :: omp_get_thread_num integer, external :: omp_get_thread_num
double precision, intent(in) :: relative_error, E double precision, intent(in) :: E(N_states), relative_error
double precision, intent(out) :: dress(N_states) double precision, intent(out) :: dress(N_states)
double precision, intent(out) :: delta(N_states, N_det) double precision, intent(out) :: delta_out(N_states, N_det)
double precision, intent(out) :: delta_s2(N_states, N_det) double precision, intent(out) :: delta_s2_out(N_states, N_det)
double precision, allocatable :: delta(:,:)
double precision, allocatable :: delta_s2(:,:)
integer :: i, j, k, Ncp integer :: i, j, k, Ncp
double precision, external :: omp_get_wtime double precision, external :: omp_get_wtime
double precision :: time double precision :: time
double precision :: w(N_states) integer, external :: add_task_to_taskserver
integer, external :: add_task_to_taskserver double precision :: state_average_weight_save(N_states)
provide nproc fragment_first fragment_count mo_bielec_integrals_in_map mo_mono_elec_integral dress_weight psi_selectors allocate(delta(N_states,N_det), delta_s2(N_det,N_states))
state_average_weight_save(:) = state_average_weight(:)
do dress_stoch_istate=1,N_states
SOFT_TOUCH dress_stoch_istate
state_average_weight(:) = 0.d0
state_average_weight(dress_stoch_istate) = 1.d0
TOUCH state_average_weight
!!!!!!!!!!!!!!! demander a TOTO !!!!!!! provide nproc fragment_first fragment_count mo_bielec_integrals_in_map mo_mono_elec_integral dress_weight psi_selectors
w(:) = 0.d0
w(dress_stoch_istate) = 1.d0
!call update_psi_average_norm_contrib(w)
print *, '========== ================= ================= ================='
print *, ' Samples Energy Stat. Error Seconds '
print *, '========== ================= ================= ================='
print *, '========== ================= ================= =================' call new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull, 'dress')
print *, ' Samples Energy Stat. Error Seconds '
print *, '========== ================= ================= ================='
integer, external :: zmq_put_psi
integer, external :: zmq_put_N_det_generators
integer, external :: zmq_put_N_det_selectors
integer, external :: zmq_put_dvector
integer, external :: zmq_set_running
if (zmq_put_psi(zmq_to_qp_run_socket,1) == -1) then
stop 'Unable to put psi on ZMQ server'
endif
if (zmq_put_N_det_generators(zmq_to_qp_run_socket, 1) == -1) then
stop 'Unable to put N_det_generators on ZMQ server'
endif
if (zmq_put_N_det_selectors(zmq_to_qp_run_socket, 1) == -1) then
stop 'Unable to put N_det_selectors on ZMQ server'
endif
if (zmq_put_dvector(zmq_to_qp_run_socket,1,'energy',dress_e0_denominator,size(dress_e0_denominator)) == -1) then
stop 'Unable to put energy on ZMQ server'
endif
call new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull, 'dress') integer(ZMQ_PTR), external :: new_zmq_to_qp_run_socket
integer :: ipos
integer, external :: zmq_put_psi ipos=1
integer, external :: zmq_put_N_det_generators do i=1,N_dress_jobs
integer, external :: zmq_put_N_det_selectors if(dress_jobs(i) > fragment_first) then
integer, external :: zmq_put_dvector write(task(ipos:ipos+20),'(I9,1X,I9,''|'')') 0, dress_jobs(i)
integer, external :: zmq_set_running
if (zmq_put_psi(zmq_to_qp_run_socket,1) == -1) then
stop 'Unable to put psi on ZMQ server'
endif
if (zmq_put_N_det_generators(zmq_to_qp_run_socket, 1) == -1) then
stop 'Unable to put N_det_generators on ZMQ server'
endif
if (zmq_put_N_det_selectors(zmq_to_qp_run_socket, 1) == -1) then
stop 'Unable to put N_det_selectors on ZMQ server'
endif
if (zmq_put_dvector(zmq_to_qp_run_socket,1,'energy',dress_e0_denominator,size(dress_e0_denominator)) == -1) then
stop 'Unable to put energy on ZMQ server'
endif
integer(ZMQ_PTR), external :: new_zmq_to_qp_run_socket
integer :: ipos
ipos=1
do i=1,N_dress_jobs
if(dress_jobs(i) > fragment_first) then
write(task(ipos:ipos+20),'(I9,1X,I9,''|'')') 0, dress_jobs(i)
ipos += 20
if (ipos > 63980) then
if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task(1:ipos))) == -1) then
stop 'Unable to add task to task server'
endif
ipos=1
endif
else
do j=1,fragment_count
write(task(ipos:ipos+20),'(I9,1X,I9,''|'')') j, dress_jobs(i)
ipos += 20 ipos += 20
if (ipos > 63980) then if (ipos > 63980) then
if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task(1:ipos))) == -1) then if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task(1:ipos))) == -1) then
stop 'Unable to add task to task server' stop 'Unable to add task to task server'
endif endif
ipos=1 ipos=1
endif endif
end do else
end if do j=1,fragment_count
end do write(task(ipos:ipos+20),'(I9,1X,I9,''|'')') j, dress_jobs(i)
if (ipos > 1) then ipos += 20
if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task(1:ipos))) == -1) then if (ipos > 63980) then
stop 'Unable to add task to task server' if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task(1:ipos))) == -1) then
endif stop 'Unable to add task to task server'
endif endif
if (zmq_set_running(zmq_to_qp_run_socket) == -1) then ipos=1
print *, irp_here, ': Failed in zmq_set_running' endif
end do
end if
end do
if (ipos > 1) then
if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task(1:ipos))) == -1) then
stop 'Unable to add task to task server'
endif endif
endif
if (zmq_set_running(zmq_to_qp_run_socket) == -1) then
print *, irp_here, ': Failed in zmq_set_running'
endif
!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(nproc+1) & !$OMP PARALLEL DEFAULT(shared) NUM_THREADS(nproc+1) &
!$OMP PRIVATE(i) !$OMP PRIVATE(i)
i = omp_get_thread_num() i = omp_get_thread_num()
if (i==0) then if (i==0) then
call dress_collector(zmq_socket_pull,E, relative_error, delta, delta_s2, dress) call dress_collector(zmq_socket_pull,E, relative_error, delta, delta_s2, dress,&
else dress_stoch_istate)
call dress_slave_inproc(i) else
endif call dress_slave_inproc(i)
!$OMP END PARALLEL endif
call end_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'dress') !$OMP END PARALLEL
delta_out(dress_stoch_istate,1:N_det) = delta(dress_stoch_istate,1:N_det)
delta_s2_out(dress_stoch_istate,1:N_det) = delta_s2_out(dress_stoch_istate,1:N_det)
call end_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'dress')
print *, '========== ================= ================= ================='
enddo
FREE dress_stoch_istate
state_average_weight(:) = state_average_weight_save(:)
TOUCH state_average_weight
deallocate(delta,delta_s2)
print *, '========== ================= ================= ================='
end subroutine end subroutine
@ -122,7 +134,7 @@ end
subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, dress) subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, dress, istate)
use f77_zmq use f77_zmq
use bitmasks use bitmasks
implicit none implicit none
@ -130,8 +142,9 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2,
integer(ZMQ_PTR), intent(in) :: zmq_socket_pull integer(ZMQ_PTR), intent(in) :: zmq_socket_pull
integer, intent(in) :: istate
double precision, intent(in) :: relative_error, E double precision, intent(in) :: relative_error, E(N_states)
double precision, intent(out) :: dress(N_states) double precision, intent(out) :: dress(N_states)
double precision, allocatable :: cp(:,:,:,:) double precision, allocatable :: cp(:,:,:,:)
@ -193,7 +206,15 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2,
pullLoop : do while (loop) pullLoop : do while (loop)
call pull_dress_results(zmq_socket_pull, ind, delta_loc, task_id) call pull_dress_results(zmq_socket_pull, ind, delta_loc, task_id)
dress_mwen(:) = 0d0 !!!!!!!! A CALCULER ICI dress_mwen(:) = 0d0
!!!!! A VERIFIER !!!!!
do i_state=1,N_states
do i=1, N_det
dress_mwen(i_state) += delta_loc(i_state, i, 1) * psi_coef(i, i_state)
end do
end do
dress_detail(:, ind) += dress_mwen(:) dress_detail(:, ind) += dress_mwen(:)
do j=1,N_cp !! optimizable do j=1,N_cp !! optimizable
if(cps(ind, j) > 0d0) then if(cps(ind, j) > 0d0) then
@ -202,12 +223,8 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2,
integer :: toothMwen integer :: toothMwen
logical :: fracted logical :: fracted
fac = cps(ind, j) / cps_N(j) * dress_weight_inv(ind) * comb_step fac = cps(ind, j) / cps_N(j) * dress_weight_inv(ind) * comb_step
do k=1,N_det cp(1:N_states,1:N_det,j,1) += delta_loc(1:N_states,1:N_det,1) * fac
do i_state=1,N_states cp(1:N_states,1:N_det,j,2) += delta_loc(1:N_states,1:N_det,2) * fac
cp(i_state,k,j,1) += delta_loc(i_state,k,1) * fac
cp(i_state,k,j,2) += delta_loc(i_state,k,2) * fac
end do
end do
end if end if
end do end do
toothMwen = tooth_of_det(ind) toothMwen = tooth_of_det(ind)
@ -215,13 +232,13 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2,
if(fracted) fracted = (ind == first_det_of_teeth(toothMwen)) if(fracted) fracted = (ind == first_det_of_teeth(toothMwen))
if(fracted) then if(fracted) then
delta_det(:,:,toothMwen-1, 1) += delta_loc(:,:,1) * (1d0-fractage(toothMwen)) delta_det(1:N_states,1:N_det,toothMwen-1, 1) = delta_det(1:N_states,1:N_det,toothMwen-1, 1) + delta_loc(1:N_states,1:N_det,1) * (1d0-fractage(toothMwen))
delta_det(:,:,toothMwen-1, 2) += delta_loc(:,:,2) * (1d0-fractage(toothMwen)) delta_det(1:N_states,1:N_det,toothMwen-1, 2) = delta_det(1:N_states,1:N_det,toothMwen-1, 2) + delta_loc(1:N_states,1:N_det,2) * (1d0-fractage(toothMwen))
delta_det(:,:,toothMwen, 1) += delta_loc(:,:,1) * (fractage(toothMwen)) delta_det(1:N_states,1:N_det,toothMwen , 1) = delta_det(1:N_states,1:N_det,toothMwen , 1) + delta_loc(1:N_states,1:N_det,1) * (fractage(toothMwen))
delta_det(:,:,toothMwen, 2) += delta_loc(:,:,2) * (fractage(toothMwen)) delta_det(1:N_states,1:N_det,toothMwen , 2) = delta_det(1:N_states,1:N_det,toothMwen , 2) + delta_loc(1:N_states,1:N_det,2) * (fractage(toothMwen))
else else
delta_det(:,:,toothMwen, 1) += delta_loc(:,:,1) delta_det(1:N_states,1:N_det,toothMwen , 1) = delta_det(1:N_states,1:N_det,toothMwen , 1) + delta_loc(1:N_states,1:N_det,1)
delta_det(:,:,toothMwen, 2) += delta_loc(:,:,2) delta_det(1:N_states,1:N_det,toothMwen , 2) = delta_det(1:N_states,1:N_det,toothMwen , 2) + delta_loc(1:N_states,1:N_det,2)
end if end if
parts_to_get(ind) -= 1 parts_to_get(ind) -= 1
@ -239,44 +256,45 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2,
time = omp_get_wtime() time = omp_get_wtime()
if((time - timeLast > 2d0) .or. (.not. loop)) then
if(time - timeLast > 1d0 .or. (.not. loop)) then
timeLast = time timeLast = time
cur_cp = N_cp cur_cp = N_cp
if(.not. actually_computed(dress_jobs(1))) cycle pullLoop
do i=2,N_det_generators do i=1,N_det_generators
if(.not. actually_computed(dress_jobs(i))) then if(.not. actually_computed(dress_jobs(i))) then
cur_cp = done_cp_at(i-1) if(i /= 1) then
cur_cp = done_cp_at(i-1)
else
cur_cp = 0
end if
exit exit
end if end if
end do end do
if(cur_cp == 0) cycle pullLoop if(cur_cp == 0) cycle pullLoop
double precision :: su, su2, eqt, avg, E0, val double precision :: su, su2, eqt, avg, E0, val
integer, external :: zmq_abort integer, external :: zmq_abort
su = 0d0 su = 0d0
su2 = 0d0 su2 = 0d0
if(N_states > 1) stop "dress_stoch : N_states == 1"
do i=1, int(cps_N(cur_cp)) do i=1, int(cps_N(cur_cp))
call get_comb_val(comb(i), dress_detail, cur_cp, val) call get_comb_val(comb(i), dress_detail, cur_cp, val, istate)
su += val su += val
su2 += val**2 su2 += val*val
end do end do
avg = su / cps_N(cur_cp) avg = su / cps_N(cur_cp)
eqt = dsqrt( ((su2 / cps_N(cur_cp)) - avg**2) / cps_N(cur_cp) ) eqt = dsqrt( ((su2 / cps_N(cur_cp)) - avg*avg) / cps_N(cur_cp) )
E0 = sum(dress_detail(1, :first_det_of_teeth(cp_first_tooth(cur_cp))-1)) E0 = sum(dress_detail(istate, :first_det_of_teeth(cp_first_tooth(cur_cp))-1))
if(cp_first_tooth(cur_cp) <= comb_teeth) then if(cp_first_tooth(cur_cp) <= comb_teeth) then
E0 = E0 + dress_detail(1, first_det_of_teeth(cp_first_tooth(cur_cp))) * (1d0-fractage(cp_first_tooth(cur_cp))) E0 = E0 + dress_detail(istate, first_det_of_teeth(cp_first_tooth(cur_cp))) * (1d0-fractage(cp_first_tooth(cur_cp)))
end if end if
call wall_time(time) call wall_time(time)
if ((dabs(eqt) < relative_error .and. cps_N(cur_cp) >= 30) .or. total_computed == N_det_generators) then if ((dabs(eqt) < relative_error .and. cps_N(cur_cp) >= 30) .or. total_computed == N_det_generators) then
! Termination ! Termination
!print '(G10.3, 2X, F16.7, 2X, G16.3, 2X, F16.4, A20)', Nabove(tooth), avg+E, eqt, time-time0, '' print '(2X, F16.7, 2X, G16.3, 2X, F16.4, A20)', avg+E(istate)+E0, eqt, time-time0, ''
! print *, "GREPME", cur_cp, E+E0+avg, eqt, time-time0, total_computed
if (zmq_abort(zmq_to_qp_run_socket) == -1) then if (zmq_abort(zmq_to_qp_run_socket) == -1) then
call sleep(1) call sleep(1)
if (zmq_abort(zmq_to_qp_run_socket) == -1) then if (zmq_abort(zmq_to_qp_run_socket) == -1) then
@ -286,31 +304,30 @@ subroutine dress_collector(zmq_socket_pull, E, relative_error, delta, delta_s2,
else else
if (cur_cp > old_cur_cp) then if (cur_cp > old_cur_cp) then
old_cur_cp = cur_cp old_cur_cp = cur_cp
! print *, "GREPME", cur_cp, E+E0+avg, eqt, time-time0, total_computed print '(2X, F16.7, 2X, G16.3, 2X, F16.4, A20)', avg+E(istate)+E0, eqt, time-time0, ''
!print '(G10.3, 2X, F16.7, 2X, G16.3, 2X, F16.4, A20)', Nabove(tooth), avg+E, eqt, time-time0, ''
endif endif
endif endif
end if end if
end do pullLoop end do pullLoop
if(total_computed == N_det_generators) then if(total_computed == N_det_generators) then
delta = 0d0 delta (1:N_states,1:N_det) = 0d0
delta_s2 = 0d0 delta_s2(1:N_states,1:N_det) = 0d0
do i=comb_teeth+1,0,-1 do i=comb_teeth+1,0,-1
delta += delta_det(:,:,i,1) delta (1:N_states,1:N_det) = delta (1:N_states,1:N_det) + delta_det(1:N_states,1:N_det,i,1)
delta_s2 += delta_det(:,:,i,2) delta_s2(1:N_states,1:N_det) = delta_s2(1:N_states,1:N_det) + delta_det(1:N_states,1:N_det,i,2)
end do end do
else else
delta = cp(:,:,cur_cp,1) delta (1:N_states,1:N_det) = cp(1:N_states,1:N_det,cur_cp,1)
delta_s2 = cp(:,:,cur_cp,2) delta_s2(1:N_states,1:N_det) = cp(1:N_states,1:N_det,cur_cp,2)
do i=cp_first_tooth(cur_cp)-1,0,-1 do i=cp_first_tooth(cur_cp)-1,0,-1
delta += delta_det(:,:,i,1) delta (1:N_states,1:N_det) = delta (1:N_states,1:N_det) + delta_det(1:N_states,1:N_det,i,1)
delta_s2 += delta_det(:,:,i,2) delta_s2(1:N_states,1:N_det) = delta_s2(1:N_states,1:N_det) + delta_det(1:N_states,1:N_det,i,2)
end do end do
end if end if
dress(1) = E dress(istate) = E(istate)+E0
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket) call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
end subroutine end subroutine
@ -346,10 +363,14 @@ end function
&BEGIN_PROVIDER [ integer, comb_teeth ] &BEGIN_PROVIDER [ integer, comb_teeth ]
&BEGIN_PROVIDER [ integer, N_cps_max ] &BEGIN_PROVIDER [ integer, N_cps_max ]
implicit none implicit none
comb_teeth = 16 BEGIN_DOC
N_cps_max = 32 ! N_cps_max : max number of checkpoints
!
! gen_per_cp : number of generators per checkpoint
END_DOC
comb_teeth = 64
N_cps_max = 256
gen_per_cp = (N_det_generators / N_cps_max) + 1 gen_per_cp = (N_det_generators / N_cps_max) + 1
N_cps_max += 1
END_PROVIDER END_PROVIDER
@ -450,9 +471,9 @@ END_PROVIDER
END_PROVIDER END_PROVIDER
subroutine get_comb_val(stato, detail, cur_cp, val) subroutine get_comb_val(stato, detail, cur_cp, val, istate)
implicit none implicit none
integer, intent(in) :: cur_cp integer, intent(in) :: cur_cp, istate
integer :: first integer :: first
double precision, intent(in) :: stato, detail(N_states, N_det_generators) double precision, intent(in) :: stato, detail(N_states, N_det_generators)
double precision, intent(out) :: val double precision, intent(out) :: val
@ -468,9 +489,9 @@ subroutine get_comb_val(stato, detail, cur_cp, val)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
k = dress_find(curs, dress_cweight,size(dress_cweight), first_det_of_teeth(j), first_det_of_teeth(j+1)) k = dress_find(curs, dress_cweight,size(dress_cweight), first_det_of_teeth(j), first_det_of_teeth(j+1))
if(k == first_det_of_teeth(first)) then if(k == first_det_of_teeth(first)) then
val += detail(1, k) * dress_weight_inv(k) * comb_step * fractage(first) val += detail(istate, k) * dress_weight_inv(k) * comb_step * fractage(first)
else else
val += detail(1, k) * dress_weight_inv(k) * comb_step val += detail(istate, k) * dress_weight_inv(k) * comb_step
end if end if
curs -= comb_step curs -= comb_step
@ -521,10 +542,10 @@ subroutine add_comb(com, computed, cp, N, tbc)
end subroutine end subroutine
BEGIN_PROVIDER [ integer, dress_stoch_istate ] BEGIN_PROVIDER [ integer, dress_stoch_istate ]
implicit none implicit none
dress_stoch_istate = 1 dress_stoch_istate = 1
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, dress_weight, (N_det_generators) ] BEGIN_PROVIDER [ double precision, dress_weight, (N_det_generators) ]
@ -541,7 +562,7 @@ end subroutine
double precision :: norm_left, stato double precision :: norm_left, stato
integer, external :: dress_find integer, external :: dress_find
dress_weight(1) = psi_coef_generators(1,dress_stoch_istate)**2 dress_weight(1) = psi_coef_generators(1,dress_stoch_istate)**2
dress_cweight(1) = psi_coef_generators(1,dress_stoch_istate)**2 dress_cweight(1) = psi_coef_generators(1,dress_stoch_istate)**2
do i=1,N_det_generators do i=1,N_det_generators
@ -568,8 +589,8 @@ end subroutine
comb_step = 1d0/dfloat(comb_teeth) comb_step = 1d0/dfloat(comb_teeth)
first_det_of_comb = 1 first_det_of_comb = 1
do i=1,N_det_generators do i=1,min(100,N_det_generators)
if(dress_weight(i)/norm_left < .25d0*comb_step) then if(dress_weight(i)/norm_left < comb_step) then
first_det_of_comb = i first_det_of_comb = i
exit exit
end if end if

View File

@ -5,7 +5,7 @@ subroutine dress_zmq()
read_wf = .True. read_wf = .True.
SOFT_TOUCH read_wf SOFT_TOUCH read_wf
call set_generators_bitmasks_as_holes_and_particles
if (.True.) then if (.True.) then
integer :: i,j integer :: i,j
do j=1,N_states do j=1,N_states
@ -15,10 +15,7 @@ subroutine dress_zmq()
enddo enddo
SOFT_TOUCH psi_coef SOFT_TOUCH psi_coef
endif endif
call run(N_states,energy) call run_dressing(N_states,energy)
if(do_pt2)then
call run_pt2(N_states,energy)
endif
deallocate(energy) deallocate(energy)
end end

View File

@ -5,9 +5,9 @@ BEGIN_PROVIDER [ integer, N_dress_teeth ]
N_dress_teeth = 10 N_dress_teeth = 10
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, dress_norm_acc, (0:N_det_non_ref, N_states) ] BEGIN_PROVIDER [ double precision, dress_norm_acc, (0:N_det, N_states) ]
&BEGIN_PROVIDER [ double precision, dress_norm, (0:N_det_non_ref, N_states) ] &BEGIN_PROVIDER [ double precision, dress_norm, (0:N_det, N_states) ]
&BEGIN_PROVIDER [ double precision, dress_teeth_size, (0:N_det_non_ref, N_states) ] &BEGIN_PROVIDER [ double precision, dress_teeth_size, (0:N_det, N_states) ]
&BEGIN_PROVIDER [ integer, dress_teeth, (0:N_dress_teeth+1, N_states) ] &BEGIN_PROVIDER [ integer, dress_teeth, (0:N_dress_teeth+1, N_states) ]
implicit none implicit none
integer :: i, j, st, nt integer :: i, j, st, nt
@ -43,11 +43,11 @@ BEGIN_PROVIDER [ double precision, dress_norm_acc, (0:N_det_non_ref, N_states) ]
end if end if
end do end do
if(nt > N_dress_teeth+1) then if(nt > N_dress_teeth+1) then
print *, "foireouse dress_teeth", nt, dress_teeth(nt,st), N_det_non_ref print *, "foireouse dress_teeth", nt, dress_teeth(nt,st), N_det
stop stop
end if end if
dress_teeth(N_dress_teeth+1,st) = N_det_non_ref+1 dress_teeth(N_dress_teeth+1,st) = N_det+1
norm_loc = 0d0 norm_loc = 0d0
do i=N_dress_teeth, 0, -1 do i=N_dress_teeth, 0, -1
dress_teeth_size(i,st) = dress_norm_acc(dress_teeth(i+1,st)-1,st) - dress_norm_acc(dress_teeth(i,st)-1, st) dress_teeth_size(i,st) = dress_norm_acc(dress_teeth(i+1,st)-1,st) - dress_norm_acc(dress_teeth(i,st)-1, st)
@ -64,39 +64,37 @@ END_PROVIDER
BEGIN_PROVIDER [ double precision, delta_ij, (N_states,N_det,2) ] BEGIN_PROVIDER [ double precision, delta_ij, (N_states,N_det,2) ]
use bitmasks use bitmasks
implicit none implicit none
integer :: i,j,k integer :: i,j,k
double precision, allocatable :: dress(:), del(:,:), del_s2(:,:) double precision, allocatable :: dress(:), del(:,:), del_s2(:,:)
double precision :: E_CI_before, relative_error double precision :: E_CI_before(N_states), relative_error
double precision, save :: errr = 0d0 ! double precision, save :: errr = 0d0
allocate(dress(N_states), del(N_states, N_det), del_s2(N_states, N_det)) allocate(dress(N_states), del(N_states, N_det), del_s2(N_states, N_det))
delta_ij = 0d0 delta_ij = 0d0
E_CI_before = dress_E0_denominator(1) + nuclear_repulsion E_CI_before(:) = dress_E0_denominator(:) + nuclear_repulsion
threshold_selectors = 1.d0 threshold_selectors = 1.d0
threshold_generators = 1d0 threshold_generators = 1d0
if(errr /= 0d0) then ! if(errr /= 0d0) then
errr = errr / 2d0 ! errr = errr / 2d0
else ! else
errr = 1d-4 ! errr = 1d-4
end if ! end if
relative_error = errr relative_error = 1.d-4
print *, "RELATIVE ERROR", relative_error call write_double(6,relative_error,"Convergence of the stochastic algorithm")
call ZMQ_dress(E_CI_before, dress, del, del_s2, abs(relative_error))
call ZMQ_dress(E_CI_before, dress, del, del_s2, abs(relative_error))
delta_ij(:,:,1) = del(:,:) delta_ij(:,:,1) = del(:,:)
!delta_ij_s2(:,:,1) = del_s2(:,:)
delta_ij(:,:,2) = del_s2(:,:) delta_ij(:,:,2) = del_s2(:,:)
!do i=N_det,1,-1
! delta_ii(dress_stoch_istate,1) -= delta_ij(dress_stoch_istate, i, 1) / psi_ref_coef(1,dress_stoch_istate) * psi_coef(i, dress_stoch_istate) deallocate(dress, del, del_s2)
! delta_ii_s2(dress_stoch_istate,1) -= delta_ij_s2(dress_stoch_istate, i, 1) / psi_ref_coef(1,dress_stoch_istate) * psi_coef(i, dress_stoch_istate)
!end do
END_PROVIDER END_PROVIDER

View File

@ -1,28 +1,29 @@
BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ] BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ]
&BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ] &BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Null dressing vectors ! \Delta_{state-specific}. \Psi
END_DOC END_DOC
dressing_column_h(:,:) = 0.d0
dressing_column_s(:,:) = 0.d0
integer :: i,ii,k,j,jj, l integer :: i,ii,k,j, l
double precision :: f, tmp double precision :: f, tmp
double precision, external :: u_dot_v double precision, external :: u_dot_v
dressing_column_h(:,:) = 0.d0
dressing_column_s(:,:) = 0.d0
do k=1,N_states do k=1,N_states
l = dressed_column_idx(k) do j = 1, n_det
f = 1.d0/psi_coef(l,k) dressing_column_h(j,k) = delta_ij(k,j,1)
do jj = 1, n_det dressing_column_s(j,k) = delta_ij(k,j,2)
j = jj !idx_non_ref(jj)
dressing_column_h(j,k) = delta_ij (k,jj,1)
dressing_column_s(j,k) = delta_ij (k,jj,2)!delta_ij_s2(k,jj)
enddo enddo
tmp = u_dot_v(dressing_column_h(1,k), psi_coef(1,k), N_det) ! tmp = u_dot_v(dressing_column_h(1,k), psi_coef(1,k), N_det) &
dressing_column_h(l,k) -= tmp * f ! - dressing_column_h(l,k) * psi_coef(l,k)
tmp = u_dot_v(dressing_column_s(1,k), psi_coef(1,k), N_det) ! dressing_column_h(l,k) -= tmp * f
dressing_column_s(l,k) -= tmp * f ! tmp = u_dot_v(dressing_column_s(1,k), psi_coef(1,k), N_det) &
! - dressing_column_s(l,k) * psi_coef(l,k)
! dressing_column_s(l,k) -= tmp * f
enddo enddo
END_PROVIDER END_PROVIDER

View File

@ -11,10 +11,12 @@ BEGIN_PROVIDER [ double precision, dress_E0_denominator, (N_states) ]
BEGIN_DOC BEGIN_DOC
! E0 in the denominator of the dress ! E0 in the denominator of the dress
END_DOC END_DOC
integer :: i
if (initialize_dress_E0_denominator) then if (initialize_dress_E0_denominator) then
dress_E0_denominator(1:N_states) = psi_energy(1:N_states) call u_0_H_u_0(dress_E0_denominator,psi_coef,N_det,psi_det,N_int,N_states,size(psi_coef,1))
! dress_E0_denominator(1:N_states) = HF_energy - nuclear_repulsion do i=N_det+1,N_states
! dress_E0_denominator(1:N_states) = barycentric_electronic_energy(1:N_states) dress_E0_denominator(i) = 0.d0
enddo
call write_double(6,dress_E0_denominator(1)+nuclear_repulsion, 'dress Energy denominator') call write_double(6,dress_E0_denominator(1)+nuclear_repulsion, 'dress Energy denominator')
else else
dress_E0_denominator = -huge(1.d0) dress_E0_denominator = -huge(1.d0)

View File

@ -30,7 +30,8 @@ subroutine run_dress_slave(thread,iproc,energy)
integer :: ind integer :: ind
double precision,allocatable :: delta_ij_loc(:,:,:) double precision,allocatable :: delta_ij_loc(:,:,:)
integer :: h,p,n double precision :: div(N_states)
integer :: h,p,n,i_state
logical :: ok logical :: ok
allocate(delta_ij_loc(N_states,N_det,2)) allocate(delta_ij_loc(N_states,N_det,2))
@ -44,22 +45,26 @@ subroutine run_dress_slave(thread,iproc,energy)
call end_zmq_push_socket(zmq_socket_push,thread) call end_zmq_push_socket(zmq_socket_push,thread)
return return
end if end if
do i=1,N_states
div(i) = psi_coef(dressed_column_idx(i), i)
end do
do do
call get_task_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task) call get_task_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task)
if(task_id /= 0) then if(task_id /= 0) then
read (task,*) subset, i_generator read (task,*) subset, i_generator
delta_ij_loc = 0d0 delta_ij_loc = 0d0
call alpha_callback(delta_ij_loc, i_generator, subset) call alpha_callback(delta_ij_loc, i_generator, subset, iproc)
call task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id) call task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id)
call push_dress_results(zmq_socket_push, i_generator, delta_ij_loc, task_id) call push_dress_results(zmq_socket_push, i_generator, delta_ij_loc, task_id)
else else
exit exit
end if end if
end do end do
call disconnect_from_taskserver(zmq_to_qp_run_socket,zmq_socket_push,worker_id) call disconnect_from_taskserver(zmq_to_qp_run_socket,worker_id)
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
call end_zmq_push_socket(zmq_socket_push,thread) call end_zmq_push_socket(zmq_socket_push,thread)
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
end subroutine end subroutine

View File

@ -0,0 +1 @@
dress_zmq DavidsonDressed Psiref_CAS MRPT_Utils Perturbation MRCC_Utils

View File

@ -0,0 +1,12 @@
========
mrcc_sto
========
Needed Modules
==============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.
Documentation
=============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.

View File

@ -1,37 +0,0 @@
! BEGIN_PROVIDER [ logical, do_dress_with_alpha ]
!&BEGIN_PROVIDER [ logical, do_dress_with_alpha_buffer ]
!&BEGIN_PROVIDER [ logical, do_dress_with_generator ]
! implicit none
! do_dress_with_alpha = .false.
! do_dress_with_alpha_buffer = .true.
! do_dress_with_generator = .false.
!END_PROVIDER
subroutine dress_with_alpha_buffer(delta_ij_loc, minilist, n_minilist, abuf, n_abuf)
use bitmasks
implicit none
double precision,intent(inout) :: delta_ij_loc(N_states,N_det,2)
integer, intent(in) :: n_minilist, n_abuf
integer(bit_kind),intent(in) :: abuf(N_int, 2, n_abuf), minilist(N_int, 2, n_minilist)
integer :: a, i, nref, nobt, deg
do a=1,n_abuf
nref=0
do i=1,N_det
call get_excitation_degree(psi_det(1,1,i), abuf(1,1,a), deg, N_int)
if(deg <= 2) nref = nref + 1
end do
nobt=0
do i=1,n_minilist
call get_excitation_degree(minilist(1,1,i), abuf(1,1,a), deg, N_int)
if(deg <= 2) nobt = nobt + 1
end do
if(nref /= nobt) stop "foireous minilist"
end do
delta_ij_loc = 1d0
end subroutine

View File

@ -1,14 +1,240 @@
program mrcc_sto program mrcc_sto
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! TODO ! TODO
END_DOC END_DOC
print *, "!!!!!!========================!!!!!!"
print *, "!!!!!!========================!!!!!!"
print *, "!!!!!!========================!!!!!!"
print *, "MRCC_STO not implemented - acts as a unittest for dress_zmq"
print *, "!!!!!!========================!!!!!!"
print *, "!!!!!!========================!!!!!!"
print *, "!!!!!!========================!!!!!!"
call dress_zmq() call dress_zmq()
call ezfio_set_mrcc_sto_energy(ci_energy_dressed(1))
end end
BEGIN_PROVIDER [ double precision, hij_cache_, (N_det,Nproc) ]
&BEGIN_PROVIDER [ double precision, sij_cache_, (N_det,Nproc) ]
&BEGIN_PROVIDER [ double precision, dIa_hla_, (N_states,N_det,Nproc) ]
&BEGIN_PROVIDER [ double precision, dIa_sla_, (N_states,N_det,Nproc) ]
&BEGIN_PROVIDER [ integer, excs_ , (0:2,2,2,N_det,Nproc) ]
&BEGIN_PROVIDER [ double precision, phases_, (N_det, Nproc) ]
BEGIN_DOC
! temporay arrays for dress_with_alpha_buffer. Avoids reallocation.
END_DOC
END_PROVIDER
subroutine dress_with_alpha_buffer(delta_ij_loc, i_gen, minilist, det_minilist, n_minilist, alpha, iproc)
use bitmasks
implicit none
BEGIN_DOC
!delta_ij_loc(:,:,1) : dressing column for H
!delta_ij_loc(:,:,2) : dressing column for S2
!minilist : indices of determinants connected to alpha ( in psi_det_sorted )
!n_minilist : size of minilist
!alpha : alpha determinant
END_DOC
integer(bit_kind), intent(in) :: alpha(N_int,2), det_minilist(N_int, 2, n_minilist)
integer,intent(in) :: minilist(n_minilist), n_minilist, iproc, i_gen
double precision, intent(inout) :: delta_ij_loc(N_states,N_det,2)
integer :: i,j,k,l,m
integer :: degree1, degree2, degree
double precision :: hIk, hla, hIl, sla, dIk(N_states), dka(N_states), dIa(N_states), hka
double precision :: phase, phase2
integer :: exc(0:2,2,2)
integer :: h1,h2,p1,p2,s1,s2
integer(bit_kind) :: tmp_det(N_int,2), ctrl
integer :: i_state, k_sd, l_sd, m_sd, ll_sd, i_I
double precision :: Delta_E_inv(N_states)
double precision :: sdress, hdress
logical :: ok, ok2
integer :: canbediamond
PROVIDE mo_class
if(n_minilist == 1) return
do i=1,n_minilist
if(idx_non_ref_rev(minilist(i)) == 0) return
end do
if (perturbative_triples) then
PROVIDE one_anhil fock_virt_total fock_core_inactive_total one_creat
endif
canbediamond = 0
do l_sd=1,n_minilist
call get_excitation(det_minilist(1,1,l_sd),alpha,exc,degree1,phase,N_int)
call decode_exc(exc,degree1,h1,p1,h2,p2,s1,s2)
ok = (mo_class(h1)(1:1) == 'A' .or. mo_class(h1)(1:1) == 'I') .and. &
(mo_class(p1)(1:1) == 'A' .or. mo_class(p1)(1:1) == 'V')
if(ok .and. degree1 == 2) then
ok = (mo_class(h2)(1:1) == 'A' .or. mo_class(h2)(1:1) == 'I') .and. &
(mo_class(p2)(1:1) == 'A' .or. mo_class(p2)(1:1) == 'V')
end if
if(ok) then
canbediamond += 1
excs_(:,:,:,l_sd,iproc) = exc(:,:,:)
phases_(l_sd, iproc) = phase
else
phases_(l_sd, iproc) = 0d0
end if
!call i_h_j(alpha,det_minilist(1,1,l_sd),N_int,hij_cache_(l_sd,iproc))
!call get_s2(alpha,det_minilist(1,1,l_sd),N_int,sij_cache_(l_sd,iproc))
call i_h_j_s2(alpha,det_minilist(1,1,l_sd),N_int,hij_cache_(l_sd,iproc), sij_cache_(l_sd,iproc))
enddo
if(canbediamond <= 1) return
do i_I=1,N_det_ref
call get_excitation_degree(alpha,psi_ref(1,1,i_I),degree1,N_int)
if (degree1 > 4) then
cycle
endif
do i_state=1,N_states
dIa(i_state) = 0.d0
enddo
do k_sd=1,n_minilist
if(phases_(k_sd,iproc) == 0d0) cycle
call get_excitation_degree(psi_ref(1,1,i_I),det_minilist(1,1,k_sd),degree,N_int)
if (degree > 2) then
cycle
endif
!call get_excitation(det_minilist(1,1,k_sd),alpha,exc,degree2,phase,N_int)
phase = phases_(k_sd, iproc)
exc(:,:,:) = excs_(:,:,:,k_sd,iproc)
degree2 = exc(0,1,1) + exc(0,1,2)
call apply_excitation(psi_ref(1,1,i_I), exc, tmp_det, ok, N_int)
if((.not. ok) .and. (.not. perturbative_triples)) cycle
do i_state=1,N_states
dka(i_state) = 0.d0
enddo
ok2 = .false.
!do i_state=1,N_states
! !if(dka(i_state) == 0) cycle
! dIk(i_state) = dij(i_I, idx_non_ref_rev(minilist(k_sd)), i_state)
! if(dIk(i_state) /= 0d0) then
! ok2 = .true.
! endif
!enddo
!if(.not. ok2) cycle
if (ok) then
phase2 = 0d0
do l_sd=k_sd+1,n_minilist
if(phases_(l_sd, iproc) == 0d0) cycle
call get_excitation_degree(tmp_det,det_minilist(1,1,l_sd),degree,N_int)
if (degree == 0) then
do i_state=1,N_states
dIk(i_state) = dij(i_I, idx_non_ref_rev(minilist(k_sd)), i_state)
if(dIk(i_state) /= 0d0) then
if(phase2 == 0d0) call get_excitation(psi_ref(1,1,i_I),det_minilist(1,1,l_sd),exc,degree,phase2,N_int)
dka(i_state) = dij(i_I, idx_non_ref_rev(minilist(l_sd)), i_state) * phase * phase2
end if
end do
!call get_excitation(psi_ref(1,1,i_I),det_minilist(1,1,l_sd),exc,degree,phase2,N_int)
!do i_state=1,N_states
! if(dIk(i_state) /= 0d0) dka(i_state) = dij(i_I, idx_non_ref_rev(minilist(l_sd)), i_state) * phase * phase2
!enddo
exit
endif
enddo
else if (perturbative_triples) then
hka = hij_cache_(k_sd,iproc)
if (dabs(hka) > 1.d-12) then
call get_delta_e_dyall_general_mp(psi_ref(1,1,i_I),alpha,Delta_E_inv)
do i_state=1,N_states
ASSERT (Delta_E_inv(i_state) < 0.d0)
dka(i_state) = hka / Delta_E_inv(i_state)
enddo
endif
endif
if (perturbative_triples.and. (degree2 == 1) ) then
call i_h_j(psi_ref(1,1,i_I),tmp_det,N_int,hka)
hka = hij_cache_(k_sd,iproc) - hka
if (dabs(hka) > 1.d-12) then
call get_delta_e_dyall_general_mp(psi_ref(1,1,i_I),alpha,Delta_E_inv)
do i_state=1,N_states
ASSERT (Delta_E_inv(i_state) < 0.d0)
dka(i_state) = hka / Delta_E_inv(i_state)
enddo
endif
endif
do i_state=1,N_states
dIa(i_state) = dIa(i_state) + dIk(i_state) * dka(i_state)
enddo
enddo
ok2 = .false.
do i_state=1,N_states
if(dIa(i_state) /= 0d0) ok2 = .true.
enddo
if(.not. ok2) cycle
do l_sd=1,n_minilist
k_sd = minilist(l_sd)
hla = hij_cache_(l_sd,iproc)
sla = sij_cache_(l_sd,iproc)
do i_state=1,N_states
hdress = dIa(i_state) * hla * psi_ref_coef(i_I,i_state)
sdress = dIa(i_state) * sla * psi_ref_coef(i_I,i_state)
!!!$OMP ATOMIC
delta_ij_loc(i_state,k_sd,1) += hdress
!!!$OMP ATOMIC
delta_ij_loc(i_state,k_sd,2) += sdress
enddo
enddo
enddo
end subroutine
!! TESTS MINILIST
subroutine test_minilist(minilist, n_minilist, alpha)
use bitmasks
implicit none
integer, intent(in) :: n_minilist
integer(bit_kind),intent(in) :: alpha(N_int, 2)
integer, intent(in) :: minilist(n_minilist)
integer :: a, i, deg
integer :: refc(N_det), testc(N_det)
refc = 0
testc = 0
do i=1,N_det
call get_excitation_degree(psi_det(1,1,i), alpha, deg, N_int)
if(deg <= 2) refc(i) = refc(i) + 1
end do
do i=1,n_minilist
call get_excitation_degree(psi_det(1,1,minilist(i)), alpha, deg, N_int)
if(deg <= 2) then
testc(minilist(i)) += 1
else
stop "NON LINKED IN MINILIST"
end if
end do
do i=1,N_det
if(refc(i) /= testc(i)) then
print *, "MINILIST FAIL ", sum(refc), sum(testc), n_minilist
exit
end if
end do
end subroutine

View File

@ -74,117 +74,117 @@ BEGIN_PROVIDER [ double precision, mrcc_norm_acc, (0:N_det_non_ref, N_states) ]
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, delta_ij_mrcc_sto,(N_states,N_det_non_ref) ] ! BEGIN_PROVIDER [ double precision, delta_ij_mrcc_sto,(N_states,N_det_non_ref) ]
&BEGIN_PROVIDER [ double precision, delta_ij_s2_mrcc_sto, (N_states,N_det_non_ref) ] !&BEGIN_PROVIDER [ double precision, delta_ij_s2_mrcc_sto, (N_states,N_det_non_ref) ]
use bitmasks ! use bitmasks
implicit none ! implicit none
integer :: gen, h, p, n, t, i, j, h1, h2, p1, p2, s1, s2, iproc ! integer :: gen, h, p, n, t, i, j, h1, h2, p1, p2, s1, s2, iproc
integer(bit_kind) :: mask(N_int, 2), omask(N_int, 2) ! integer(bit_kind) :: mask(N_int, 2), omask(N_int, 2)
integer(bit_kind),allocatable :: buf(:,:,:) ! integer(bit_kind),allocatable :: buf(:,:,:)
logical :: ok ! logical :: ok
logical, external :: detEq ! logical, external :: detEq
integer, external :: omp_get_thread_num ! integer, external :: omp_get_thread_num
double precision :: coefs(N_det_non_ref), myCoef ! double precision :: coefs(N_det_non_ref), myCoef
integer :: n_in_teeth ! integer :: n_in_teeth
double precision :: contrib(N_states), curn, in_teeth_step, curlim, curnorm ! double precision :: contrib(N_states), curn, in_teeth_step, curlim, curnorm
!
contrib = 0d0 ! contrib = 0d0
read(*,*) n_in_teeth ! read(*,*) n_in_teeth
!n_in_teeth = 2 ! !n_in_teeth = 2
in_teeth_step = 1d0 / dfloat(n_in_teeth) ! in_teeth_step = 1d0 / dfloat(n_in_teeth)
!double precision :: delta_ij_mrcc_tmp,(N_states,N_det_non_ref) ! !double precision :: delta_ij_mrcc_tmp,(N_states,N_det_non_ref)
!double precision :: delta_ij_s2_mrcc_tmp(N_states,N_det_non_ref) ! !double precision :: delta_ij_s2_mrcc_tmp(N_states,N_det_non_ref)
!
coefs = 0d0 ! coefs = 0d0
coefs(:mrcc_teeth(1,1)-1) = 1d0 ! coefs(:mrcc_teeth(1,1)-1) = 1d0
!
do i=1,N_mrcc_teeth ! do i=1,N_mrcc_teeth
print *, "TEETH SIZE", i, mrcc_teeth(i+1,1)-mrcc_teeth(i,1) ! print *, "TEETH SIZE", i, mrcc_teeth(i+1,1)-mrcc_teeth(i,1)
if(mrcc_teeth(i+1,1) - mrcc_teeth(i,1) <= n_in_teeth) then ! if(mrcc_teeth(i+1,1) - mrcc_teeth(i,1) <= n_in_teeth) then
coefs(mrcc_teeth(i,1):mrcc_teeth(i+1,1)-1) = 1d0 ! coefs(mrcc_teeth(i,1):mrcc_teeth(i+1,1)-1) = 1d0
else if(.false.) then ! else if(.false.) then
curnorm = 0d0 ! curnorm = 0d0
curn = 0.5d0 ! curn = 0.5d0
curlim = curn / dfloat(n_in_teeth) ! curlim = curn / dfloat(n_in_teeth)
do j=mrcc_teeth(i,1), mrcc_teeth(i+1,1)-1 ! do j=mrcc_teeth(i,1), mrcc_teeth(i+1,1)-1
if(mrcc_norm_acc(j,1) >= curlim) then ! if(mrcc_norm_acc(j,1) >= curlim) then
coefs(j) = 1d0 ! coefs(j) = 1d0
curnorm += mrcc_norm(j,1) ! curnorm += mrcc_norm(j,1)
do while(mrcc_norm_acc(j,1) > curlim) ! do while(mrcc_norm_acc(j,1) > curlim)
curn += 1d0 ! curn += 1d0
curlim = curn / dfloat(n_in_teeth) ! curlim = curn / dfloat(n_in_teeth)
end do ! end do
end if ! end if
end do ! end do
do j=mrcc_teeth(i,1), mrcc_teeth(i+1,1)-1 ! do j=mrcc_teeth(i,1), mrcc_teeth(i+1,1)-1
coefs(j) = coefs(j) / curnorm ! 1d0 / norm computed in teeth ! coefs(j) = coefs(j) / curnorm ! 1d0 / norm computed in teeth
end do ! end do
else if(.true.) then ! else if(.true.) then
coefs(mrcc_teeth(i,1):mrcc_teeth(i,1)+n_in_teeth-1) = 1d0 / mrcc_norm_acc(mrcc_teeth(i,1)+n_in_teeth-1, 1) ! coefs(mrcc_teeth(i,1):mrcc_teeth(i,1)+n_in_teeth-1) = 1d0 / mrcc_norm_acc(mrcc_teeth(i,1)+n_in_teeth-1, 1)
else ! else
curnorm = 0d0 ! curnorm = 0d0
n = mrcc_teeth(i+1,1) - mrcc_teeth(i,1) ! n = mrcc_teeth(i+1,1) - mrcc_teeth(i,1)
do j=1,n_in_teeth ! do j=1,n_in_teeth
t = int((dfloat(j)-0.5d0) * dfloat(n) / dfloat(n_in_teeth)) + 1 + mrcc_teeth(i,1) - 1 ! t = int((dfloat(j)-0.5d0) * dfloat(n) / dfloat(n_in_teeth)) + 1 + mrcc_teeth(i,1) - 1
curnorm += mrcc_norm(t,1) ! curnorm += mrcc_norm(t,1)
coefs(t) = 1d0 ! coefs(t) = 1d0
end do ! end do
do j=mrcc_teeth(i,1), mrcc_teeth(i+1,1)-1 ! do j=mrcc_teeth(i,1), mrcc_teeth(i+1,1)-1
coefs(j) = coefs(j) / curnorm ! 1d0 / norm computed in teeth ! coefs(j) = coefs(j) / curnorm ! 1d0 / norm computed in teeth
end do ! end do
end if ! end if
!coefs(mrcc_teeth(i,1)) = ! !coefs(mrcc_teeth(i,1)) =
end do ! end do
!
!coefs = coefs * dfloat(N_det_generators) ! !coefs = coefs * dfloat(N_det_generators)
!
!
delta_ij_mrcc_sto = 0d0 ! delta_ij_mrcc_sto = 0d0
delta_ij_s2_mrcc_sto = 0d0 ! delta_ij_s2_mrcc_sto = 0d0
PROVIDE dij ! PROVIDE dij
provide hh_shortcut psi_det_size! lambda_mrcc ! provide hh_shortcut psi_det_size! lambda_mrcc
!$OMP PARALLEL DO default(none) schedule(dynamic) & ! !$OMP PARALLEL DO default(none) schedule(dynamic) &
!$OMP shared(psi_ref, psi_non_ref, hh_exists, pp_exists, N_int, hh_shortcut) & ! !$OMP shared(psi_ref, psi_non_ref, hh_exists, pp_exists, N_int, hh_shortcut) &
!$OMP shared(N_det_generators, coefs,N_det_non_ref, delta_ij_mrcc_sto) & ! !$OMP shared(N_det_generators, coefs,N_det_non_ref, delta_ij_mrcc_sto) &
!$OMP shared(contrib,psi_det_generators, delta_ij_s2_mrcc_sto) & ! !$OMP shared(contrib,psi_det_generators, delta_ij_s2_mrcc_sto) &
!$OMP private(i,j,curnorm,myCoef, h, n, mask, omask, buf, ok, iproc) ! !$OMP private(i,j,curnorm,myCoef, h, n, mask, omask, buf, ok, iproc)
do gen= 1,N_det_generators ! do gen= 1,N_det_generators
if(coefs(gen) == 0d0) cycle ! if(coefs(gen) == 0d0) cycle
myCoef = coefs(gen) ! myCoef = coefs(gen)
allocate(buf(N_int, 2, N_det_non_ref)) ! allocate(buf(N_int, 2, N_det_non_ref))
iproc = omp_get_thread_num() + 1 ! iproc = omp_get_thread_num() + 1
if(mod(gen, 1000) == 0) print *, "mrcc_sto ", gen, "/", N_det_generators ! if(mod(gen, 1000) == 0) print *, "mrcc_sto ", gen, "/", N_det_generators
!
do h=1, hh_shortcut(0) ! do h=1, hh_shortcut(0)
call apply_hole_local(psi_det_generators(1,1,gen), hh_exists(1, h), mask, ok, N_int) ! call apply_hole_local(psi_det_generators(1,1,gen), hh_exists(1, h), mask, ok, N_int)
if(.not. ok) cycle ! if(.not. ok) cycle
omask = 0_bit_kind ! omask = 0_bit_kind
if(hh_exists(1, h) /= 0) omask = mask ! if(hh_exists(1, h) /= 0) omask = mask
n = 1 ! n = 1
do p=hh_shortcut(h), hh_shortcut(h+1)-1 ! do p=hh_shortcut(h), hh_shortcut(h+1)-1
call apply_particle_local(mask, pp_exists(1, p), buf(1,1,n), ok, N_int) ! call apply_particle_local(mask, pp_exists(1, p), buf(1,1,n), ok, N_int)
if(ok) n = n + 1 ! if(ok) n = n + 1
if(n > N_det_non_ref) stop "Buffer too small in MRCC..." ! if(n > N_det_non_ref) stop "Buffer too small in MRCC..."
end do ! end do
n = n - 1 ! n = n - 1
if(n /= 0) then ! if(n /= 0) then
call mrcc_part_dress(delta_ij_mrcc_sto, delta_ij_s2_mrcc_sto, & ! call mrcc_part_dress(delta_ij_mrcc_sto, delta_ij_s2_mrcc_sto, &
gen,n,buf,N_int,omask,myCoef,contrib) ! gen,n,buf,N_int,omask,myCoef,contrib)
endif ! endif
end do ! end do
deallocate(buf) ! deallocate(buf)
end do ! end do
!$OMP END PARALLEL DO ! !$OMP END PARALLEL DO
!
!
!
curnorm = 0d0 ! curnorm = 0d0
do j=1,N_det_non_ref ! do j=1,N_det_non_ref
curnorm += delta_ij_mrcc_sto(1,j)*delta_ij_mrcc_sto(1,j) ! curnorm += delta_ij_mrcc_sto(1,j)*delta_ij_mrcc_sto(1,j)
end do ! end do
print *, "NORM DELTA ", dsqrt(curnorm) ! print *, "NORM DELTA ", dsqrt(curnorm)
!
END_PROVIDER !END_PROVIDER
@ -206,19 +206,15 @@ END_PROVIDER
integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2),inac, virt integer(bit_kind) :: det_tmp(N_int, 2), det_tmp2(N_int, 2),inac, virt
integer, external :: get_index_in_psi_det_sorted_bit, searchDet,detCmp integer, external :: get_index_in_psi_det_sorted_bit, searchDet,detCmp
logical, external :: is_in_wavefunction logical, external :: is_in_wavefunction
double precision :: c0(N_states)
provide dij provide dij
delta_ij_cancel = 0d0 delta_ij_cancel = 0d0
do i_state = 1, N_states
c0(i_state) = 1.d0/psi_coef(dressed_column_idx(i_state),i_state)
enddo
do i=1,N_det_ref do i=1,N_det_ref
!$OMP PARALLEL DO default(shared) private(kk, k, blok, exc_Ik,det_tmp2,ok,deg,phase_Ik, l,ll) & !$OMP PARALLEL DO default(shared) private(kk, k, blok, exc_Ik,det_tmp2,ok,deg,phase_Ik, l,ll) &
!$OMP private(contrib, contrib_s2, i_state, c0) !$OMP private(contrib, contrib_s2, i_state)
do kk = 1, nlink(i) do kk = 1, nlink(i)
k = det_cepa0_idx(linked(kk, i)) k = det_cepa0_idx(linked(kk, i))
blok = blokMwen(kk, i) blok = blokMwen(kk, i)
@ -239,9 +235,9 @@ END_PROVIDER
contrib = (dij(j, l, i_state) - dij(i, k, i_state)) * delta_cas(i,j,i_state)! * Hla *phase_ia * phase_ik contrib = (dij(j, l, i_state) - dij(i, k, i_state)) * delta_cas(i,j,i_state)! * Hla *phase_ia * phase_ik
contrib_s2 = dij(j, l, i_state) - dij(i, k, i_state)! * Sla*phase_ia * phase_ik contrib_s2 = dij(j, l, i_state) - dij(i, k, i_state)! * Sla*phase_ia * phase_ik
!$OMP ATOMIC !$OMP ATOMIC
delta_ij_cancel(i_state,l) += contrib * psi_ref_coef(i,i_state) * c0(i_state) delta_ij_cancel(i_state,l) += contrib * psi_ref_coef(i,i_state)
!$OMP ATOMIC !$OMP ATOMIC
delta_ij_s2_cancel(i_state,l) += contrib_s2* psi_ref_coef(i,i_state) * c0(i_state) delta_ij_s2_cancel(i_state,l) += contrib_s2* psi_ref_coef(i,i_state)
end do end do
end do end do
end do end do
@ -292,7 +288,7 @@ END_PROVIDER
n = n - 1 n = n - 1
if(n /= 0) then if(n /= 0) then
call mrcc_part_dress(delta_ij_mrcc, delta_ij_s2_mrcc, gen,n,buf,N_int,omask,1d0,contrib) call mrcc_part_dress(delta_ij_mrcc, delta_ij_s2_mrcc, gen,n,buf,N_int,omask,contrib)
endif endif
end do end do
@ -308,7 +304,7 @@ END_PROVIDER
! end subroutine ! end subroutine
subroutine mrcc_part_dress(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_buffer,Nint,key_mask,coef,contrib) subroutine mrcc_part_dress(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_buffer,Nint,key_mask,contrib)
use bitmasks use bitmasks
implicit none implicit none
@ -346,10 +342,10 @@ subroutine mrcc_part_dress(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_b
logical, external :: detEq, is_generable logical, external :: detEq, is_generable
!double precision, external :: get_dij, get_dij_index !double precision, external :: get_dij, get_dij_index
double precision :: Delta_E_inv(N_states) double precision :: Delta_E_inv(N_states)
double precision, intent(in) :: coef
double precision, intent(inout) :: contrib(N_states) double precision, intent(inout) :: contrib(N_states)
double precision :: sdress, hdress double precision :: sdress, hdress
if (perturbative_triples) then if (perturbative_triples) then
PROVIDE one_anhil fock_virt_total fock_core_inactive_total one_creat PROVIDE one_anhil fock_virt_total fock_core_inactive_total one_creat
endif endif
@ -376,11 +372,6 @@ subroutine mrcc_part_dress(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_b
deallocate(microlist, idx_microlist) deallocate(microlist, idx_microlist)
double precision :: c0(N_states)
do i_state=1,N_states
c0(i_state) = 1.d0/psi_coef(dressed_column_idx(i_state),i_state)
enddo
allocate (dIa_hla(N_states,N_det_non_ref), dIa_sla(N_states,N_det_non_ref)) allocate (dIa_hla(N_states,N_det_non_ref), dIa_sla(N_states,N_det_non_ref))
! |I> ! |I>
@ -546,15 +537,16 @@ subroutine mrcc_part_dress(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_b
hla = hij_cache(k_sd) hla = hij_cache(k_sd)
sla = sij_cache(k_sd) sla = sij_cache(k_sd)
do i_state=1,N_states do i_state=1,N_states
dIa_hla(i_state,k_sd) = dIa(i_state) * hla * coef dIa_hla(i_state,k_sd) = dIa(i_state) * hla
dIa_sla(i_state,k_sd) = dIa(i_state) * sla * coef dIa_sla(i_state,k_sd) = dIa(i_state) * sla
enddo enddo
enddo enddo
do i_state=1,N_states do i_state=1,N_states
do l_sd=1,idx_alpha(0) do l_sd=1,idx_alpha(0)
k_sd = idx_alpha(l_sd) k_sd = idx_alpha(l_sd)
hdress = dIa_hla(i_state,k_sd) * psi_ref_coef(i_I,i_state) * c0(i_state) hdress = dIa_hla(i_state,k_sd) * psi_ref_coef(i_I,i_state)
sdress = dIa_sla(i_state,k_sd) * psi_ref_coef(i_I,i_state) * c0(i_state) sdress = dIa_sla(i_state,k_sd) * psi_ref_coef(i_I,i_state)
!!$OMP ATOMIC
!$OMP ATOMIC !$OMP ATOMIC
contrib(i_state) += hdress * psi_coef(dressed_column_idx(i_state), i_state) * psi_non_ref_coef(k_sd, i_state) contrib(i_state) += hdress * psi_coef(dressed_column_idx(i_state), i_state) * psi_non_ref_coef(k_sd, i_state)
!$OMP ATOMIC !$OMP ATOMIC
@ -565,280 +557,19 @@ subroutine mrcc_part_dress(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_b
enddo enddo
enddo enddo
enddo enddo
deallocate (dIa_hla,dIa_sla,hij_cache,sij_cache) deallocate (dIa_hla,dIa_sla,hij_cache,sij_cache)
deallocate(miniList, idx_miniList) deallocate(miniList, idx_miniList)
end end
BEGIN_PROVIDER [ double precision, mrcc_previous_E, (N_states) ]
subroutine mrcc_part_dress_1c(delta_ij_, delta_ij_s2_, i_generator,n_selected,det_buffer,Nint,key_mask,contrib)
use bitmasks
implicit none
integer, intent(in) :: i_generator,n_selected, Nint
double precision, intent(inout) :: delta_ij_(N_states,N_det_non_ref)
double precision, intent(inout) :: delta_ij_s2_(N_states,N_det_non_ref)
integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected)
integer :: i,j,k,l,m
integer,allocatable :: idx_alpha(:), degree_alpha(:)
logical :: good, fullMatch
integer(bit_kind),allocatable :: tq(:,:,:)
integer :: N_tq, c_ref ,degree1, degree2, degree
double precision :: hIk, hla, hIl, sla, dIk(N_states), dka(N_states), dIa(N_states), hka
double precision, allocatable :: dIa_hla(:,:), dIa_sla(:,:)
double precision :: haj, phase, phase2
double precision :: f(N_states), ci_inv(N_states)
integer :: exc(0:2,2,2)
integer :: h1,h2,p1,p2,s1,s2
integer(bit_kind) :: tmp_det(Nint,2)
integer :: iint, ipos
integer :: i_state, k_sd, l_sd, i_I, i_alpha
integer(bit_kind),allocatable :: miniList(:,:,:)
integer(bit_kind),intent(in) :: key_mask(Nint, 2)
integer,allocatable :: idx_miniList(:)
integer :: N_miniList, ni, leng
double precision, allocatable :: hij_cache(:), sij_cache(:)
integer(bit_kind), allocatable :: microlist(:,:,:), microlist_zero(:,:,:)
integer, allocatable :: idx_microlist(:), N_microlist(:), ptr_microlist(:), idx_microlist_zero(:)
integer :: mobiles(2), smallerlist
logical, external :: detEq, is_generable
!double precision, external :: get_dij, get_dij_index
double precision :: Delta_E_inv(N_states)
double precision, intent(inout) :: contrib(N_states)
double precision :: sdress, hdress
if (perturbative_triples) then
PROVIDE one_anhil fock_virt_total fock_core_inactive_total one_creat
endif
leng = max(N_det_generators, N_det_non_ref)
allocate(miniList(Nint, 2, leng), tq(Nint,2,n_selected), idx_minilist(leng), hij_cache(N_det_non_ref), sij_cache(N_det_non_ref))
allocate(idx_alpha(0:psi_det_size), degree_alpha(psi_det_size))
call create_minilist_find_previous(key_mask, psi_det_generators, miniList, i_generator-1, N_miniList, fullMatch, Nint)
allocate(ptr_microlist(0:mo_tot_num*2+1), &
N_microlist(0:mo_tot_num*2) )
allocate( microlist(Nint,2,N_minilist*4), &
idx_microlist(N_minilist*4))
if(key_mask(1,1) /= 0) then
call create_microlist(miniList, N_minilist, key_mask, microlist, idx_microlist, N_microlist, ptr_microlist, Nint)
call filter_tq_micro(i_generator,n_selected,det_buffer,Nint,tq,N_tq,microlist,ptr_microlist,N_microlist,key_mask)
else
call filter_tq(i_generator,n_selected,det_buffer,Nint,tq,N_tq,miniList,N_minilist)
end if
deallocate(microlist, idx_microlist)
allocate (dIa_hla(N_states,N_det_non_ref), dIa_sla(N_states,N_det_non_ref))
! |I>
! |alpha>
if(N_tq > 0) then
call create_minilist(key_mask, psi_non_ref, miniList, idx_minilist, N_det_non_ref, N_minilist, Nint)
if(N_minilist == 0) return
if(sum(abs(key_mask(1:N_int,1))) /= 0) then
allocate(microlist_zero(Nint,2,N_minilist), idx_microlist_zero(N_minilist))
allocate( microlist(Nint,2,N_minilist*4), &
idx_microlist(N_minilist*4))
call create_microlist(miniList, N_minilist, key_mask, microlist, idx_microlist, N_microlist, ptr_microlist, Nint)
do i=0,mo_tot_num*2
do k=ptr_microlist(i),ptr_microlist(i+1)-1
idx_microlist(k) = idx_minilist(idx_microlist(k))
end do
end do
do l=1,N_microlist(0)
do k=1,Nint
microlist_zero(k,1,l) = microlist(k,1,l)
microlist_zero(k,2,l) = microlist(k,2,l)
enddo
idx_microlist_zero(l) = idx_microlist(l)
enddo
end if
end if
double precision :: c0(N_states)
do i_state=1,N_states
c0(i_state) = 1.d0/psi_coef(dressed_column_idx(i_state),i_state)
enddo
do i_alpha=1,N_tq
if(key_mask(1,1) /= 0) then
call getMobiles(tq(1,1,i_alpha), key_mask, mobiles, Nint)
if(N_microlist(mobiles(1)) < N_microlist(mobiles(2))) then
smallerlist = mobiles(1)
else
smallerlist = mobiles(2)
end if
do l=0,N_microlist(smallerlist)-1
microlist_zero(:,:,ptr_microlist(1) + l) = microlist(:,:,ptr_microlist(smallerlist) + l)
idx_microlist_zero(ptr_microlist(1) + l) = idx_microlist(ptr_microlist(smallerlist) + l)
end do
call get_excitation_degree_vector(microlist_zero,tq(1,1,i_alpha),degree_alpha,Nint,N_microlist(smallerlist)+N_microlist(0),idx_alpha)
do j=1,idx_alpha(0)
idx_alpha(j) = idx_microlist_zero(idx_alpha(j))
end do
else
call get_excitation_degree_vector(miniList,tq(1,1,i_alpha),degree_alpha,Nint,N_minilist,idx_alpha)
do j=1,idx_alpha(0)
idx_alpha(j) = idx_miniList(idx_alpha(j))
end do
end if
do l_sd=1,idx_alpha(0)
k_sd = idx_alpha(l_sd)
call i_h_j(tq(1,1,i_alpha),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,hij_cache(k_sd))
call get_s2(tq(1,1,i_alpha),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,sij_cache(k_sd))
!if(sij_cache(k_sd) /= 0D0) PRINT *, "SIJ ", sij_cache(k_sd)
enddo
! |I>
do i_I=1,N_det_ref
! Find triples and quadruple grand parents
call get_excitation_degree(tq(1,1,i_alpha),psi_ref(1,1,i_I),degree1,Nint)
if (degree1 > 4) then
cycle
endif
do i_state=1,N_states
dIa(i_state) = 0.d0
enddo
! <I| <> |alpha>
do k_sd=1,idx_alpha(0)
call get_excitation_degree(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(k_sd)),degree,Nint)
if (degree > 2) then
cycle
endif
! <I| /k\ |alpha>
! |l> = Exc(k -> alpha) |I>
call get_excitation(psi_non_ref(1,1,idx_alpha(k_sd)),tq(1,1,i_alpha),exc,degree2,phase,Nint)
call decode_exc(exc,degree2,h1,p1,h2,p2,s1,s2)
do k=1,N_int
tmp_det(k,1) = psi_ref(k,1,i_I)
tmp_det(k,2) = psi_ref(k,2,i_I)
enddo
logical :: ok
call apply_excitation(psi_ref(1,1,i_I), exc, tmp_det, ok, Nint)
do i_state=1,N_states
dIK(i_state) = dij(i_I, idx_alpha(k_sd), i_state)
enddo
! <I| \l/ |alpha>
do i_state=1,N_states
dka(i_state) = 0.d0
enddo
if (ok) then
do l_sd=k_sd+1,idx_alpha(0)
call get_excitation_degree(tmp_det,psi_non_ref(1,1,idx_alpha(l_sd)),degree,Nint)
if (degree == 0) then
call get_excitation(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(l_sd)),exc,degree,phase2,Nint)
do i_state=1,N_states
dka(i_state) = dij(i_I, idx_alpha(l_sd), i_state) * phase * phase2
enddo
exit
endif
enddo
else if (perturbative_triples) then
! Linked
hka = hij_cache(idx_alpha(k_sd))
if (dabs(hka) > 1.d-12) then
call get_delta_e_dyall_general_mp(psi_ref(1,1,i_I),tq(1,1,i_alpha),Delta_E_inv)
do i_state=1,N_states
ASSERT (Delta_E_inv(i_state) < 0.d0)
dka(i_state) = hka / Delta_E_inv(i_state)
enddo
endif
endif
if (perturbative_triples.and. (degree2 == 1) ) then
call i_h_j(psi_ref(1,1,i_I),tmp_det,Nint,hka)
hka = hij_cache(idx_alpha(k_sd)) - hka
if (dabs(hka) > 1.d-12) then
call get_delta_e_dyall_general_mp(psi_ref(1,1,i_I),tq(1,1,i_alpha),Delta_E_inv)
do i_state=1,N_states
ASSERT (Delta_E_inv(i_state) < 0.d0)
dka(i_state) = hka / Delta_E_inv(i_state)
enddo
endif
endif
do i_state=1,N_states
dIa(i_state) = dIa(i_state) + dIk(i_state) * dka(i_state)
enddo
enddo
do i_state=1,N_states
ci_inv(i_state) = psi_ref_coef_inv(i_I,i_state)
enddo
do l_sd=1,idx_alpha(0)
k_sd = idx_alpha(l_sd)
hla = hij_cache(k_sd)
sla = sij_cache(k_sd)
do i_state=1,N_states
dIa_hla(i_state,k_sd) = dIa(i_state) * hla
dIa_sla(i_state,k_sd) = dIa(i_state) * sla
enddo
enddo
do i_state=1,N_states
do l_sd=1,idx_alpha(0)
k_sd = idx_alpha(l_sd)
hdress = dIa_hla(i_state,k_sd) * psi_ref_coef(i_I,i_state) * c0(i_state)
sdress = dIa_sla(i_state,k_sd) * psi_ref_coef(i_I,i_state) * c0(i_state)
!$OMP ATOMIC
contrib(i_state) += hdress * psi_ref_coef(dressed_column_idx(i_state), i_state) * psi_non_ref_coef(k_sd, i_state)
!$OMP ATOMIC
delta_ij_(i_state,k_sd) += hdress
!$OMP ATOMIC
delta_ij_s2_(i_state,k_sd) += sdress
enddo
enddo
enddo
enddo
deallocate (dIa_hla,dIa_sla,hij_cache,sij_cache)
deallocate(miniList, idx_miniList)
end
BEGIN_PROVIDER [ double precision, mrcc_previous_E, (N_states) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
!energy difference between last two mrcc iterations !energy difference between last two mrcc iterations
END_DOC END_DOC
mrcc_previous_E(:) = ref_bitmask_energy mrcc_previous_E(:) = ref_bitmask_energy
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ double precision, delta_ij_mrcc_zmq, (N_states,N_det_non_ref) ] BEGIN_PROVIDER [ double precision, delta_ij_mrcc_zmq, (N_states,N_det_non_ref) ]
@ -867,6 +598,7 @@ end
else else
target_error = 1d-4 target_error = 1d-4
end if end if
target_error = 0d0
call ZMQ_mrcc(E_CI_before, mrcc, delta_ij_mrcc_zmq, delta_ij_s2_mrcc_zmq, abs(target_error)) call ZMQ_mrcc(E_CI_before, mrcc, delta_ij_mrcc_zmq, delta_ij_s2_mrcc_zmq, abs(target_error))
mrcc_previous_E(:) = mrcc_E0_denominator(:) mrcc_previous_E(:) = mrcc_E0_denominator(:)
@ -879,13 +611,13 @@ END_PROVIDER
implicit none implicit none
integer :: i, j, i_state integer :: i, j, i_state
!mrmode : 1=mrcepa0, 2=mrsc2 add, 3=mrcc, 4=stoch !mrmode : 1=mrcepa0, 2=mrsc2 add, 3=mrcc, 4=stoch
if(mrmode == 4) then ! if(mrmode == 4) then
do j = 1, N_det_non_ref ! do j = 1, N_det_non_ref
do i_state = 1, N_states ! do i_state = 1, N_states
delta_ij(i_state,j) = delta_ij_mrcc_sto(i_state,j) ! delta_ij(i_state,j) = delta_ij_mrcc_sto(i_state,j)
delta_ij_s2(i_state,j) = delta_ij_s2_mrcc_sto(i_state,j) ! delta_ij_s2(i_state,j) = delta_ij_s2_mrcc_sto(i_state,j)
enddo ! enddo
end do ! end do
! else if(mrmode == 10) then ! else if(mrmode == 10) then
! do j = 1, N_det_non_ref ! do j = 1, N_det_non_ref
! do i_state = 1, N_states ! do i_state = 1, N_states
@ -893,7 +625,7 @@ END_PROVIDER
! delta_ij_s2(i_state,j) = delta_ij_s2_mrsc2(i_state,j) ! delta_ij_s2(i_state,j) = delta_ij_s2_mrsc2(i_state,j)
! enddo ! enddo
! end do ! end do
else if(mrmode == 5) then if(mrmode == 5) then
do j = 1, N_det_non_ref do j = 1, N_det_non_ref
do i_state = 1, N_states do i_state = 1, N_states
delta_ij(i_state,j) = delta_ij_mrcc_zmq(i_state,j) delta_ij(i_state,j) = delta_ij_mrcc_zmq(i_state,j)
@ -1052,60 +784,6 @@ END_PROVIDER
END_PROVIDER END_PROVIDER
! BEGIN_PROVIDER [ double precision, delta_cas, (N_det_ref, N_det_ref, N_states) ]
! use bitmasks
! implicit none
! integer :: i,j,k
! double precision :: Hjk, Hki, Hij, pre(N_det_ref), wall
! integer :: i_state, degree, npre, ipre(N_det_ref), npres(N_det_ref)
!
! ! provide lambda_mrcc
! npres = 0
! delta_cas = 0d0
! call wall_time(wall)
! print *, "dcas ", wall
! do i_state = 1, N_states
! !!$OMP PARALLEL DO default(none) schedule(dynamic) private(pre,npre,ipre,j,k,Hjk,Hki,degree) shared(npres,lambda_mrcc,i_state, N_det_non_ref,psi_ref, psi_non_ref,N_int,delta_cas,N_det_ref)
! do k=1,N_det_non_ref
! if(lambda_mrcc(i_state, k) == 0d0) cycle
! npre = 0
! do i=1,N_det_ref
! call i_h_j(psi_non_ref(1,1,k),psi_ref(1,1,i), N_int,Hki)
! if(Hki /= 0d0) then
! !!$OMP ATOMIC
! npres(i) += 1
! npre += 1
! ipre(npre) = i
! pre(npre) = Hki
! end if
! end do
!
!
! do i=1,npre
! do j=1,i
! !!$OMP ATOMIC
! delta_cas(ipre(i),ipre(j),i_state) += pre(i) * pre(j) * lambda_mrcc(i_state, k)
! end do
! end do
! end do
! !!$OMP END PARALLEL DO
! npre=0
! do i=1,N_det_ref
! npre += npres(i)
! end do
! !stop
! do i=1,N_det_ref
! do j=1,i
! delta_cas(j,i,i_state) = delta_cas(i,j,i_state)
! end do
! end do
! end do
!
! call wall_time(wall)
! print *, "dcas", wall
! ! stop
! END_PROVIDER
BEGIN_PROVIDER [ double precision, delta_cas, (N_det_ref, N_det_ref, N_states) ] BEGIN_PROVIDER [ double precision, delta_cas, (N_det_ref, N_det_ref, N_states) ]
&BEGIN_PROVIDER [ double precision, delta_cas_s2, (N_det_ref, N_det_ref, N_states) ] &BEGIN_PROVIDER [ double precision, delta_cas_s2, (N_det_ref, N_det_ref, N_states) ]
@ -1243,11 +921,6 @@ end subroutine
idx_sorted_bit(get_index_in_psi_det_sorted_bit(psi_non_ref(1,1,i), N_int)) = i idx_sorted_bit(get_index_in_psi_det_sorted_bit(psi_non_ref(1,1,i), N_int)) = i
enddo enddo
double precision :: c0(N_states)
do i_state=1,N_states
c0(i_state) = 1.d0/psi_coef(dressed_column_idx(i_state),i_state)
enddo
! To provide everything ! To provide everything
contrib = dij(1, 1, 1) contrib = dij(1, 1, 1)
@ -1259,7 +932,7 @@ end subroutine
!$OMP private(m,i,II,J,k,degree,myActive,made_hole,made_particle,hjk,contrib,contrib_s2) & !$OMP private(m,i,II,J,k,degree,myActive,made_hole,made_particle,hjk,contrib,contrib_s2) &
!$OMP shared(active_sorb, psi_non_ref, psi_non_ref_coef, psi_ref, psi_ref_coef, cepa0_shortcut, det_cepa0_active) & !$OMP shared(active_sorb, psi_non_ref, psi_non_ref_coef, psi_ref, psi_ref_coef, cepa0_shortcut, det_cepa0_active) &
!$OMP shared(N_det_ref, N_det_non_ref,N_int,det_cepa0_idx,lambda_mrcc,det_ref_active, delta_cas, delta_cas_s2) & !$OMP shared(N_det_ref, N_det_non_ref,N_int,det_cepa0_idx,lambda_mrcc,det_ref_active, delta_cas, delta_cas_s2) &
!$OMP shared(notf,i_state, sortRef, sortRefIdx, dij,c0) !$OMP shared(notf,i_state, sortRef, sortRefIdx, dij)
do blok=1,cepa0_shortcut(0) do blok=1,cepa0_shortcut(0)
do i=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1 do i=cepa0_shortcut(blok), cepa0_shortcut(blok+1)-1
do II=1,N_det_ref do II=1,N_det_ref
@ -1303,8 +976,8 @@ end subroutine
contrib_s2 = delta_cas_s2(II, J, i_state) * dij(J, det_cepa0_idx(k), i_state) contrib_s2 = delta_cas_s2(II, J, i_state) * dij(J, det_cepa0_idx(k), i_state)
!$OMP ATOMIC !$OMP ATOMIC
delta_mrcepa0_ij(det_cepa0_idx(i), i_state) += contrib * c0(i_state) * psi_ref_coef(J,i_state) delta_mrcepa0_ij(det_cepa0_idx(i), i_state) += contrib * psi_ref_coef(J,i_state)
delta_mrcepa0_ij_s2(det_cepa0_idx(i), i_state) += contrib_s2 * c0(i_state) * psi_ref_coef(J,i_state) delta_mrcepa0_ij_s2(det_cepa0_idx(i), i_state) += contrib_s2 * psi_ref_coef(J,i_state)
end do kloop end do kloop
end do end do
@ -1342,12 +1015,6 @@ BEGIN_PROVIDER [ double precision, delta_sub_ij, (N_det_non_ref,N_states) ]
idx_sorted_bit(get_index_in_psi_det_sorted_bit(psi_non_ref(1,1,i), N_int)) = i idx_sorted_bit(get_index_in_psi_det_sorted_bit(psi_non_ref(1,1,i), N_int)) = i
enddo enddo
double precision :: c0(N_states)
do i_state=1,N_states
c0(i_state) = 1.d0/psi_coef(dressed_column_idx(i_state),i_state)
enddo
do i_state = 1, N_states do i_state = 1, N_states
delta_sub_ij(:,:) = 0d0 delta_sub_ij(:,:) = 0d0
@ -1361,7 +1028,7 @@ BEGIN_PROVIDER [ double precision, delta_sub_ij, (N_det_non_ref,N_states) ]
!$OMP private(ok, phase_Ji, phase_Ik, phase_Ii, contrib, delta_IJk, HJk, HIk, HIl, exc_Ik, exc_Ji, exc_Ii) & !$OMP private(ok, phase_Ji, phase_Ik, phase_Ii, contrib, delta_IJk, HJk, HIk, HIl, exc_Ik, exc_Ji, exc_Ii) &
!$OMP private(det_tmp, det_tmp2, II, blok) & !$OMP private(det_tmp, det_tmp2, II, blok) &
!$OMP shared(idx_sorted_bit, N_det_non_ref, N_det_ref, N_int, psi_non_ref, psi_non_ref_coef, psi_ref, psi_ref_coef) & !$OMP shared(idx_sorted_bit, N_det_non_ref, N_det_ref, N_int, psi_non_ref, psi_non_ref_coef, psi_ref, psi_ref_coef) &
!$OMP shared(i_state,lambda_mrcc, hf_bitmask, active_sorb,c0) !$OMP shared(i_state,lambda_mrcc, hf_bitmask, active_sorb)
do i=1,N_det_non_ref do i=1,N_det_non_ref
if(mod(i,1000) == 0) print *, i, "/", N_det_non_ref if(mod(i,1000) == 0) print *, i, "/", N_det_non_ref
do J=1,N_det_ref do J=1,N_det_ref
@ -1409,7 +1076,7 @@ BEGIN_PROVIDER [ double precision, delta_sub_ij, (N_det_non_ref,N_states) ]
if(ok) cycle if(ok) cycle
contrib = delta_IJk * HIl * lambda_mrcc(i_state,l) contrib = delta_IJk * HIl * lambda_mrcc(i_state,l)
!$OMP ATOMIC !$OMP ATOMIC
delta_sub_ij(i, i_state) += contrib* c0(i_state) * psi_ref_coef(II,i_state) delta_sub_ij(i, i_state) += contrib* psi_ref_coef(II,i_state)
end do end do
end do end do
end do end do

View File

@ -1,3 +1,5 @@
BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ] BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ]
&BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ] &BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ]
implicit none implicit none
@ -16,14 +18,14 @@
f = 1.d0/psi_coef(l,k) f = 1.d0/psi_coef(l,k)
do jj = 1, n_det_non_ref do jj = 1, n_det_non_ref
j = idx_non_ref(jj) j = idx_non_ref(jj)
dressing_column_h(j,k) = delta_ij (k,jj) dressing_column_h(j,k) = delta_ij (k,jj) * f
dressing_column_s(j,k) = delta_ij_s2(k,jj) dressing_column_s(j,k) = delta_ij_s2(k,jj) * f
enddo enddo
tmp = u_dot_v(dressing_column_h(1,k), psi_coef(1,k), N_det) tmp = u_dot_v(dressing_column_h(1,k), psi_coef(1,k), N_det)
dressing_column_h(l,k) -= tmp * f dressing_column_h(l,k) -= tmp * f
tmp = u_dot_v(dressing_column_s(1,k), psi_coef(1,k), N_det) tmp = u_dot_v(dressing_column_s(1,k), psi_coef(1,k), N_det)
dressing_column_s(l,k) -= tmp * f dressing_column_s(l,k) -= tmp * f
enddo enddo
! stop
END_PROVIDER END_PROVIDER

View File

@ -32,7 +32,6 @@ subroutine ZMQ_mrcc(E, mrcc, delta, delta_s2, relative_error)
double precision, external :: omp_get_wtime double precision, external :: omp_get_wtime
double precision :: time double precision :: time
double precision :: w!(N_states)
integer, external :: add_task_to_taskserver integer, external :: add_task_to_taskserver
state_average_weight(:) = 0.d0 state_average_weight(:) = 0.d0
@ -42,11 +41,6 @@ subroutine ZMQ_mrcc(E, mrcc, delta, delta_s2, relative_error)
provide nproc fragment_first fragment_count mo_bielec_integrals_in_map mo_mono_elec_integral mrcc_weight psi_selectors provide nproc fragment_first fragment_count mo_bielec_integrals_in_map mo_mono_elec_integral mrcc_weight psi_selectors
w = 0.d0
w = 1.d0
!call update_psi_average_norm_contrib(w)
print *, '========== ================= ================= =================' print *, '========== ================= ================= ================='
@ -114,17 +108,15 @@ subroutine ZMQ_mrcc(E, mrcc, delta, delta_s2, relative_error)
print *, irp_here, ': Failed in zmq_set_running' print *, irp_here, ': Failed in zmq_set_running'
endif endif
!!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(nproc+1) & !$OMP PARALLEL DEFAULT(shared) NUM_THREADS(nproc+1) &
! !$OMP PRIVATE(i) !$OMP PRIVATE(i)
!i = omp_get_thread_num() i = omp_get_thread_num()
!if (i==0) then if (i==0) then
! call mrcc_collector(zmq_socket_pull,E, relative_error, delta, delta_s2, mrcc) call mrcc_collector(zmq_socket_pull,E, relative_error, delta, delta_s2, mrcc)
! else
! else call mrcc_slave_inproc(i)
! call mrcc_slave_inproc(i) endif
! endif !$OMP END PARALLEL
! !$OMP END PARALLEL
call mrcc_collector(zmq_socket_pull,E, relative_error, delta, delta_s2, mrcc)
call end_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'mrcc') call end_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'mrcc')
print *, '========== ================= ================= =================' print *, '========== ================= ================= ================='
@ -169,7 +161,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
integer, allocatable :: task_id(:) integer, allocatable :: task_id(:)
integer :: Nindex integer :: Nindex
integer :: ind integer :: ind
!double precision, save :: time0 = -1.d0
double precision :: time, time0, timeInit, old_tooth double precision :: time, time0, timeInit, old_tooth
double precision, external :: omp_get_wtime double precision, external :: omp_get_wtime
integer :: cur_cp, old_cur_cp integer :: cur_cp, old_cur_cp
@ -194,7 +185,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
allocate(delta_loc(N_states, N_det_non_ref, 2, delta_loc_N)) allocate(delta_loc(N_states, N_det_non_ref, 2, delta_loc_N))
mrcc_detail = 0d0 mrcc_detail = 0d0
delta_det = 0d0 delta_det = 0d0
!mrcc_detail = mrcc_detail / 0d0
cp = 0d0 cp = 0d0
total_computed = 0 total_computed = 0
character*(512) :: task character*(512) :: task
@ -224,8 +214,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
delta_loc_i = 0 delta_loc_i = 0
pullLoop : do while (more == 1) pullLoop : do while (more == 1)
call pull_mrcc_results(zmq_socket_pull, Nindex, ind, mrcc_mwen(1, delta_loc_slot), delta_loc(1,1,1,delta_loc_slot), task_id, ntask) call pull_mrcc_results(zmq_socket_pull, Nindex, ind, mrcc_mwen(1, delta_loc_slot), delta_loc(1,1,1,delta_loc_slot), task_id, ntask)
!rezo += N_det_non_ref*8*2
!print *, rezo / 1000000_8, "M"
if(Nindex /= 1) stop "tried pull multiple Nindex" if(Nindex /= 1) stop "tried pull multiple Nindex"
delta_loc_i(delta_loc_slot) = ind delta_loc_i(delta_loc_slot) = ind
@ -235,7 +223,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
endif endif
time = omp_get_wtime() time = omp_get_wtime()
!time - time0 > 10d0
if(more /= 1 .or. delta_loc_slot == delta_loc_N) then if(more /= 1 .or. delta_loc_slot == delta_loc_N) then
time0 = time time0 = time
do i=1,delta_loc_N do i=1,delta_loc_N
@ -244,7 +231,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
end if end if
end do end do
!$OMP PARALLEL DO SCHEDULE(DYNAMIC) DEFAULT(shared) private(j, ok, i, lcoef, k, i_state)
do j=1,N_cp !! optimizable do j=1,N_cp !! optimizable
ok = .false. ok = .false.
do i=1,delta_loc_N do i=1,delta_loc_N
@ -253,22 +239,14 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
else else
lcoef(i) = cps(delta_loc_i(i), j) / cps_N(j) * mrcc_weight_inv(delta_loc_i(i)) * comb_step lcoef(i) = cps(delta_loc_i(i), j) / cps_N(j) * mrcc_weight_inv(delta_loc_i(i)) * comb_step
if(lcoef(i) /= 0d0) then if(lcoef(i) /= 0d0) then
!usf = usf + 1d0
ok = .true. ok = .true.
end if end if
end if end if
end do end do
if(.not. ok) cycle if(.not. ok) cycle
!num += 1d0
!print *, "USEFUL", usf, num, usf/num
!do j=1,N_cp !! optimizable
! if(cps(ind, j) > 0d0) then
!if(tooth_of_det(ind) < cp_first_tooth(j)) stop "coef on supposedely deterministic det"
double precision :: fac double precision :: fac
integer :: toothMwen integer :: toothMwen
logical :: fracted, toothMwendid(0:10000) logical :: fracted, toothMwendid(0:10000)
!fac = cps(ind, j) / cps_N(j) * mrcc_weight_inv(ind) * comb_step
!!$OMP PARALLEL DO COLLAPSE(2) DEFAULT(shared)
do k=1,N_det_non_ref do k=1,N_det_non_ref
do i_state=1,N_states do i_state=1,N_states
cp(i_state,k,j,1) += delta_loc(i_state,k,1,1) * lcoef(1) + & cp(i_state,k,j,1) += delta_loc(i_state,k,1,1) * lcoef(1) + &
@ -278,7 +256,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
end do end do
end do end do
!!$OMP PARALLEL DO COLLAPSE(2) DEFAULT(shared)
do k=1,N_det_non_ref do k=1,N_det_non_ref
do i_state=1,N_states do i_state=1,N_states
cp(i_state,k,j,2) += delta_loc(i_state,k,2,1) * lcoef(1) + & cp(i_state,k,j,2) += delta_loc(i_state,k,2,1) * lcoef(1) + &
@ -288,19 +265,12 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
end do end do
end do end do
! end if
end do end do
!$OMP END PARALLEL DO
!toothmwendid = .false.
do i=1,delta_loc_N do i=1,delta_loc_N
ind = delta_loc_i(i) ind = delta_loc_i(i)
if(ind == 0) cycle if(ind == 0) cycle
toothMwen = tooth_of_det(ind) toothMwen = tooth_of_det(ind)
!if(.not. toothmwendid(toothMwen)) then
! usf += 1d0
! toothmwendid(toothMwen) = .true.
!end if
fracted = (toothMwen /= 0) fracted = (toothMwen /= 0)
if(fracted) fracted = (ind == first_det_of_teeth(toothMwen)) if(fracted) fracted = (ind == first_det_of_teeth(toothMwen))
@ -317,12 +287,9 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
parts_to_get(ind) -= 1 parts_to_get(ind) -= 1
if(parts_to_get(ind) == 0) then if(parts_to_get(ind) == 0) then
actually_computed(ind) = .true. actually_computed(ind) = .true.
!print *, "CONTRIB", ind, psi_non_ref_coef(ind,1), mrcc_detail(1, ind)
total_computed += 1 total_computed += 1
end if end if
end do end do
!num += 1d0
!print *, "USEFUL", usf, num, usf/num
delta_loc_slot = 1 delta_loc_slot = 1
delta_loc_i = 0 delta_loc_i = 0
@ -353,7 +320,6 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
su = 0d0 su = 0d0
su2 = 0d0 su2 = 0d0
if(N_states > 1) stop "mrcc_stoch : N_states == 1"
do i=1, int(cps_N(cur_cp)) do i=1, int(cps_N(cur_cp))
call get_comb_val(comb(i), mrcc_detail, cur_cp, val) call get_comb_val(comb(i), mrcc_detail, cur_cp, val)
su += val su += val
@ -366,7 +332,10 @@ subroutine mrcc_collector(zmq_socket_pull, E, relative_error, delta, delta_s2, m
E0 = E0 + mrcc_detail(1, first_det_of_teeth(cp_first_tooth(cur_cp))) * (1d0-fractage(cp_first_tooth(cur_cp))) E0 = E0 + mrcc_detail(1, first_det_of_teeth(cp_first_tooth(cur_cp))) * (1d0-fractage(cp_first_tooth(cur_cp)))
end if end if
print "(I5,F15.7,E12.4,F10.2)", cur_cp, E+E0+avg, eqt, time-timeInit if(cur_cp /= old_cur_cp) then
old_cur_cp = cur_cp
print '(I5,F15.7,E12.4,F10.2)', cur_cp, E(mrcc_stoch_istate)+E0+avg, eqt, time-timeInit
end if
if ((dabs(eqt) < relative_error .and. cps_N(cur_cp) >= 30) .or. total_computed == N_det_generators) then if ((dabs(eqt) < relative_error .and. cps_N(cur_cp) >= 30) .or. total_computed == N_det_generators) then
if (zmq_abort(zmq_to_qp_run_socket) == -1) then if (zmq_abort(zmq_to_qp_run_socket) == -1) then

View File

@ -69,7 +69,6 @@ subroutine run_mrcc_slave(thread,iproc,energy)
else else
integer :: i_generator, i_i_generator, subset integer :: i_generator, i_i_generator, subset
read (task,*) subset, ind read (task,*) subset, ind
print *, "SLAVE RECEIVED", ind
! if(buf%N == 0) then ! if(buf%N == 0) then
! ! Only first time ! ! Only first time
! call create_selection_buffer(1, 2, buf) ! call create_selection_buffer(1, 2, buf)
@ -97,7 +96,7 @@ subroutine run_mrcc_slave(thread,iproc,energy)
n = n - 1 n = n - 1
if(n /= 0) then if(n /= 0) then
call mrcc_part_dress_1c(delta_ij_loc(1,1,1), delta_ij_loc(1,1,2), & call mrcc_part_dress(delta_ij_loc(1,1,1), delta_ij_loc(1,1,2), &
i_generator,n,abuf,N_int,omask,contrib) i_generator,n,abuf,N_int,omask,contrib)
endif endif
end do end do

137
plugins/pyscf/PyscfToQp.py Normal file
View File

@ -0,0 +1,137 @@
import numpy,re,sys
def pyscf2QP(cell,mf, kpts=[], int_threshold = 1E-15):
# The integral will be not printed in they are bellow that
PBC=False
ComputeMode= re.split('[. ]', str(mf))
print 'ComputeMode=',ComputeMode
for n in ComputeMode:
if n in ("UHF","KUHF","UKS"):
sys.exit('Unrestricted calculation unsupported in Quantum Package')
if n == "pbc":
PBC=True
if PBC and len(kpts) == 0:
sys.exit("ERROR (read!): You need to specify explicit the list of K-point (including gamma)")
print 'Performing PBC?:',PBC
if PBC:
from pyscf.pbc import ao2mo
from pyscf.pbc import tools
else:
from pyscf import ao2mo
natom = len(cell.atom_coords())
print 'n_atom', natom
print 'num_elec', cell.nelectron
print 'nucl_num', len(cell.atom_coords())
print ''
mo_coeff = mf.mo_coeff # List of mo_coeff for each k-point
if not PBC:
nmo = mo_coeff.shape[1]
else:
nmo = mo_coeff[0].shape[1]
# Wrote all the parameter need to creat a dummy EZFIO folder who will containt the integral after.
# More an implentation detail than a real thing
with open('param','w') as f:
f.write(' '.join(map(str,(cell.nelectron, nmo, natom))))
# _
# |\ | _ | _ _. ._ |_) _ ._ | _ o _ ._
# | \| |_| (_ | (/_ (_| | | \ (/_ |_) |_| | _> | (_) | |
# |
print 'mf, cell', mf.energy_nuc(), cell.energy_nuc()
shift = tools.pbc.madelung(cell, numpy.zeros(3))*cell.nelectron * -.5 if PBC else 0
e_nuc = cell.energy_nuc() + shift
print 'nucl_repul', e_nuc
with open('e_nuc','w') as f:
f.write(str(e_nuc))
from itertools import product
# ___
# | ._ _|_ _ _ ._ _. | _ |\/| _ ._ _
# _|_ | | |_ (/_ (_| | (_| | _> | | (_) | | (_)
# _|
if PBC:
h_ao = ('kinetic', mf.get_hcore(kpts=kpts) ) # Give only one k point ?
dummy_ao = ('nuclear', numpy.zeros( (len(kpts),nmo,nmo), dtype=numpy.float ))
else:
h_ao = ('kinetic', mf.get_hcore() )
dummy_ao = ('nuclear', numpy.zeros( (nmo,nmo), dtype=numpy.float ))
def gen_mono_MO(mo_coeff,l_int,shift=0):
# 2Id transfortion Transformation. For now we handle only one or zero K point.
print 'l_int.shape=',l_int.shape
l_int_mo = reduce(numpy.dot, (mo_coeff.T, l_int, mo_coeff)) #This formula is only right for one kpt.
print 'l_int_mo=',l_int_mo
for i,j in product(range(nmo), repeat=2):
int_ = l_int_mo[i,j]
yield (i+1+shift,j+1+shift, int_)
# Print
for name, ao in (h_ao,dummy_ao):
with open('%s_mo' % name,'w') as f:
print '%s_mo' % name
if not PBC:
for mono in gen_mono_MO(mo_coeff,ao):
f.write('%s %s %s\n'% mono)
else:
for i,(m,a) in enumerate(zip(mo_coeff,ao)):
for mono in gen_mono_MO(m,a,i):
f.write('%s %s %s\n'% mono)
# ___ _
# | ._ _|_ _ _ ._ _. | _ |_) o
# _|_ | | |_ (/_ (_| | (_| | _> |_) |
# _|
#
def ao2mo_amazing(mo_coeff):
if PBC:
eri_4d= mf.with_df.ao2mo(mo_coeff,compact=False)
else:
eri_4d= ao2mo.kernel(cell,mo_coeff,compact=False)
return eri_4d.reshape((nmo,)*4)
def write_amazing(eri_4d, shift=0):
# HANDLE 8 FOLD by Scemama way. Maybe we can use compact=True
for l in range(nmo):
for k in range(nmo):
for j in range(l,nmo):
for i in range(max(j,k),nmo):
v = eri_4d[i,k,j,l]
if abs(v) > int_threshold:
f.write('%s %s %s %s %s\n' % (i+1+shift,j+1+shift,k+1+shift,l+1+shift,v))
if PBC:
eri_4d= mf.with_df.ao2mo(mo_coeff[0],compact=False)
else: #Molecular
eri_4d= ao2mo.kernel(cell,mo_coeff,compact=False)
eri_4d = eri_4d.reshape((nmo,)*4)
f = open('bielec_mo','w')
for i,mc in enumerate(mo_coeff):
eri = ao2mo_amazing(mc)
write_amazing(eri, nmo*i)

21
plugins/pyscf/README.rst Normal file
View File

@ -0,0 +1,21 @@
=====
pyscf
=====
Converter from Pyscf to Quatum Package for Molecules AND Solids
Import this script in your Pyscf input.
Use as follow:
```
from MolPyscfToQP import pyscf2QP
pyscf2QP(cell,mf,kpts=kpts,int_threshold = 1E-15)
```
Needed Modules
==============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.
Documentation
=============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.

View File

@ -0,0 +1,38 @@
program pyscf
implicit none
BEGIN_DOC
! TODO
END_DOC
print *, ' _/ '
print *, ' -:\_?, _Jm####La '
print *, 'J"(:" > _]#AZ#Z#UUZ##, '
print *, '_,::./ %(|i%12XmX1*1XL _?, '
print *, ' \..\ _\(vmWQwodY+ia%lnL _",/ ( '
print *, ' .:< ]J=mQD?WXn<uQWmmvd, -.-:=!'
print *, ' "{Z jC]QW|=3Zv)Bi3BmXv3 = _7'
print *, ' ]h[Z6)WQ;)jZs]C;|$BZv+, : ./ '
print *, ' -#sJX%$Wmm#ev]hinW#Xi:` c ; '
print *, ' #X#X23###1}vI$WWmX1>|,)nr" '
print *, ' 4XZ#Xov1v}=)vnXAX1nnv;1n" '
print *, ' ]XX#ZXoovvvivnnnlvvo2*i7 '
print *, ' "23Z#1S2oo2XXSnnnoSo2>v" '
print *, ' miX#L -~`""!!1}oSoe|i7 '
print *, ' 4cn#m, v221=|v[ '
print *, ' ]hI3Zma,;..__wXSe=+vo '
print *, ' ]Zov*XSUXXZXZXSe||vo2 '
print *, ' ]Z#><iiii|i||||==vn2( '
print *, ' ]Z#i<ii||+|=||=:{no2[ '
print *, ' ]ZUsiiiiivi|=||=vo22[ '
print *, ' ]XZvlliiIi|i=|+|vooo '
print *, ' =v1llli||||=|||||lii( '
print *, ' ]iillii||||||||=>=|< '
print *, ' -ziiiii||||||+||==+> '
print *, ' -%|+++||=|=+|=|==/ '
print *, ' -a>====+|====-:- '
print *, ' "~,- -- /- '
print *, ' -. )> '
print *, ' .~ +- '
print *, ' . .... : . '
print *, ' -------~ '
print *, ''
end

View File

@ -0,0 +1,17 @@
#!/bin/bash
ezfio=$1
# Create the integral
echo 'Create Integral'
echo 'Create EZFIO'
read nel nmo natom <<< $(cat param)
read e_nucl <<< $(cat e_nuc)
./create_ezfio.py $ezfio $nel $natom $nmo $e_nucl
#Handle the orbital consitensy check
qp_edit -c $ezfio &> /dev/null
cp $ezfio/{ao,mo}_basis/ao_md5
#Read the integral
echo 'Read Integral'
qp_run read_integrals_mo $ezfio

View File

@ -3,6 +3,7 @@ read_integral
============= =============
Warning: CAN NOT CHANGE THE NUMBER OF MO ! Warning: CAN NOT CHANGE THE NUMBER OF MO !
Scripts to read integrals and metadata and generates fake ezfio
Needed Modules Needed Modules
============== ==============

View File

@ -0,0 +1,48 @@
#!/usr/bin/env python
from ezfio import ezfio
import sys
filename = sys.argv[1]
num_elec, nucl_num, mo_tot_num = map(int,sys.argv[2:5])
nuclear_repulsion = float(sys.argv[5])
ezfio.set_file(filename)
#Important !
import math
ezfio.electrons_elec_alpha_num = int(math.ceil(num_elec / 2.))
ezfio.electrons_elec_beta_num = int(math.floor(num_elec / 2.))
#Important
ezfio.set_nuclei_nucl_num(nucl_num)
ezfio.set_nuclei_nucl_charge([0.]*nucl_num)
ezfio.set_nuclei_nucl_coord( [ [0.], [0.], [0.] ]*nucl_num )
ezfio.set_nuclei_nucl_label( ['He'] * nucl_num )
ezfio.set_nuclei_disk_access_nuclear_repulsion('Read')
ezfio.set_nuclei_nuclear_repulsion(nuclear_repulsion)
# Ao num
ao_num = mo_tot_num
ezfio.set_ao_basis_ao_basis("Dummy one. We read MO")
ezfio.set_ao_basis_ao_num(ao_num)
ezfio.set_ao_basis_ao_nucl([1]*ao_num) #Maybe put a realy incorrect stuff
#Just need one
ao_prim_num_max = 5
d = [ [0] *ao_prim_num_max]*ao_num
ezfio.set_ao_basis_ao_prim_num([ao_prim_num_max]*ao_num)
ezfio.set_ao_basis_ao_power(d)
ezfio.set_ao_basis_ao_coef(d)
ezfio.set_ao_basis_ao_expo(d)
#Dummy one
ao_md5 = '3b8b464dfc95f282129bde3efef3c502'
ezfio.set_ao_basis_ao_md5(ao_md5)
ezfio.set_mo_basis_ao_md5(ao_md5)
ezfio.set_mo_basis_mo_tot_num(mo_tot_num)
ezfio.set_mo_basis_mo_coef([ [0]*mo_tot_num] * ao_num)

View File

@ -0,0 +1,47 @@
program read_integrals
PROVIDE ezfio_filename
call ezfio_set_integrals_monoelec_disk_access_ao_one_integrals("None")
call run
end
subroutine run
use map_module
implicit none
integer :: iunit
integer :: getunitandopen
integer ::i,j,k,l
double precision :: integral
double precision, allocatable :: A(:,:)
integer :: n_integrals
integer(key_kind), allocatable :: buffer_i(:)
real(integral_kind), allocatable :: buffer_values(:)
integer(key_kind) :: key
call ezfio_set_integrals_monoelec_disk_access_ao_one_integrals("Read")
allocate(buffer_i(ao_num**4/8), buffer_values(ao_num**4/8))
iunit = getunitandopen('bielec_ao','r')
n_integrals=0
do
read (iunit,*,end=13) i,j,k,l, integral
n_integrals += 1
call bielec_integrals_index(i, j, k, l, buffer_i(n_integrals) )
buffer_values(n_integrals) = integral
enddo
13 continue
close(iunit)
call insert_into_ao_integrals_map(n_integrals,buffer_i,buffer_values)
call map_sort(ao_integrals_map)
call map_unique(ao_integrals_map)
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
call ezfio_set_integrals_bielec_disk_access_ao_integrals('Read')
end

View File

@ -0,0 +1,86 @@
program read_integrals
BEGIN_DOC
! Reads the integrals from the following files:
! - kinetic_mo
! - nuclear_mo
! - bielec_mo
END_DOC
integer :: iunit
integer :: getunitandopen
integer :: i,j,n
PROVIDE ezfio_filename
call ezfio_set_integrals_monoelec_disk_access_mo_one_integrals("None")
logical :: has
call ezfio_has_mo_basis_mo_tot_num(has)
if (.not.has) then
iunit = getunitandopen('nuclear_mo','r')
n=0
do
read (iunit,*,end=12) i
n = max(n,i)
enddo
12 continue
close(iunit)
call ezfio_set_mo_basis_mo_tot_num(n)
call ezfio_has_ao_basis_ao_num(has)
mo_label = "None"
if (has) then
call huckel_guess
else
call ezfio_set_ao_basis_ao_num(n)
endif
endif
call run
end
subroutine run
use map_module
implicit none
integer :: iunit
integer :: getunitandopen
integer ::i,j,k,l
double precision :: integral
double precision, allocatable :: A(:,:)
integer :: n_integrals
integer(key_kind), allocatable :: buffer_i(:)
real(integral_kind), allocatable :: buffer_values(:)
integer(key_kind) :: key
call ezfio_get_mo_basis_mo_tot_num(mo_tot_num)
allocate (A(mo_tot_num,mo_tot_num))
A = 0.d0
iunit = getunitandopen('kinetic_mo','r')
do
read (iunit,*,end=10) i,j, integral
A(i,j) = integral
enddo
10 continue
close(iunit)
call write_one_e_integrals('mo_kinetic_integral', A, size(A,1), size(A,2))
iunit = getunitandopen('nuclear_mo','r')
do
read (iunit,*,end=12) i,j, integral
A(i,j) = integral
enddo
12 continue
close(iunit)
call write_one_e_integrals('mo_ne_integral', A, size(A,1), size(A,2))
call write_one_e_integrals('mo_pseudo_integral', mo_pseudo_integral,&
size(mo_pseudo_integral,1), size(mo_pseudo_integral,2))
call ezfio_set_integrals_monoelec_disk_access_mo_one_integrals("Read")
end

View File

@ -0,0 +1,22 @@
[energy]
type: double precision
doc: Calculated energy
interface: ezfio
[thresh_dressed_ci]
type: Threshold
doc: Threshold on the convergence of the dressed CI energy
interface: ezfio,provider,ocaml
default: 1.e-5
[n_it_max_dressed_ci]
type: Strictly_positive_int
doc: Maximum number of dressed CI iterations
interface: ezfio,provider,ocaml
default: 10
[h0_type]
type: Perturbation
doc: Type of zeroth-order Hamiltonian [ EN | Barycentric ]
interface: ezfio,provider,ocaml
default: EN

View File

@ -0,0 +1 @@
dress_zmq DavidsonDressed

View File

@ -0,0 +1,12 @@
=========
shiftedbk
=========
Needed Modules
==============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.
Documentation
=============
.. Do not edit this section It was auto-generated
.. by the `update_README.py` script.

View File

@ -0,0 +1,9 @@
program shifted_bk
implicit none
BEGIN_DOC
! TODO
END_DOC
call diagonalize_CI()
call dress_zmq()
end

View File

@ -0,0 +1,98 @@
BEGIN_PROVIDER [ double precision, fock_diag_tmp_, (2,mo_tot_num+1,Nproc) ]
&BEGIN_PROVIDER [ integer, current_generator_, (Nproc) ]
&BEGIN_PROVIDER [ double precision, a_h_i, (N_det, Nproc) ]
&BEGIN_PROVIDER [ double precision, a_s2_i, (N_det, Nproc) ]
implicit none
current_generator_(:) = 0
a_h_i = 0d0
a_s2_i = 0d0
END_PROVIDER
subroutine dress_with_alpha_buffer(Nstates,Ndet,Nint,delta_ij_loc, i_gen, minilist, det_minilist, n_minilist, alpha, iproc)
use bitmasks
implicit none
BEGIN_DOC
!delta_ij_loc(:,:,1) : dressing column for H
!delta_ij_loc(:,:,2) : dressing column for S2
!i_gen : generator index in psi_det_generators
!minilist : indices of determinants connected to alpha ( in psi_det_sorted )
!n_minilist : size of minilist
!alpha : alpha determinant
END_DOC
integer, intent(in) :: Nint, Ndet, Nstates, n_minilist, iproc, i_gen
integer(bit_kind), intent(in) :: alpha(Nint,2), det_minilist(Nint, 2, n_minilist)
integer,intent(in) :: minilist(n_minilist)
double precision, intent(inout) :: delta_ij_loc(Nstates,N_det,2)
double precision :: haa, hij, sij
double precision, external :: diag_H_mat_elem_fock
integer :: i,j,k,l,m, l_sd
double precision :: hdress, sdress
double precision :: de, a_h_psi(Nstates), c_alpha
a_h_psi = 0d0
if(current_generator_(iproc) /= i_gen) then
current_generator_(iproc) = i_gen
call build_fock_tmp(fock_diag_tmp_(1,1,iproc),psi_det_generators(1,1,i_gen),N_int)
end if
haa = diag_H_mat_elem_fock(psi_det_generators(1,1,i_gen),alpha,fock_diag_tmp_(1,1,iproc),N_int)
do l_sd=1,n_minilist
call i_h_j_s2(alpha,det_minilist(1,1,l_sd),N_int,hij, sij)
a_h_i(l_sd, iproc) = hij
a_s2_i(l_sd, iproc) = sij
do i=1,Nstates
a_h_psi(i) += hij * psi_coef(minilist(l_sd), i)
end do
end do
do i=1,Nstates
de = E0_denominator(i) - haa
if(DABS(de) < 1D-5) cycle
c_alpha = a_h_psi(i) / de
do l_sd=1,n_minilist
hdress = c_alpha * a_h_i(l_sd, iproc)
sdress = c_alpha * a_s2_i(l_sd, iproc)
delta_ij_loc(i, minilist(l_sd), 1) += hdress
delta_ij_loc(i, minilist(l_sd), 2) += sdress
end do
end do
end subroutine
BEGIN_PROVIDER [ logical, initialize_E0_denominator ]
implicit none
BEGIN_DOC
! If true, initialize pt2_E0_denominator
END_DOC
initialize_E0_denominator = .True.
END_PROVIDER
BEGIN_PROVIDER [ double precision, E0_denominator, (N_states) ]
implicit none
BEGIN_DOC
! E0 in the denominator of the PT2
END_DOC
if (initialize_E0_denominator) then
if (h0_type == "EN") then
E0_denominator(1:N_states) = psi_energy(1:N_states)
else if (h0_type == "Barycentric") then
E0_denominator(1:N_states) = barycentric_electronic_energy(1:N_states)
else
print *, h0_type, ' not implemented'
stop
endif
else
E0_denominator = -huge(1.d0)
endif
END_PROVIDER

View File

@ -0,0 +1,8 @@
program bk_slave
implicit none
BEGIN_DOC
! Helper subroutine to compute the dress in distributed mode.
END_DOC
call dress_slave
end

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python2
""" """
Save the .o from a .f90 Save the .o from a .f90
and is the .o is asked a second time, retur it and is the .o is asked a second time, retur it

Some files were not shown because too many files have changed in this diff Show More