mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-08-29 04:12:00 +02:00
Merge branch 'dev' of github.com:QuantumPackage/qp2 into dev
This commit is contained in:
commit
8fdd44c6f0
@ -335,7 +335,7 @@ def write_ezfio(res, filename):
|
|||||||
def get_full_path(file_path):
|
def get_full_path(file_path):
|
||||||
file_path = os.path.expanduser(file_path)
|
file_path = os.path.expanduser(file_path)
|
||||||
file_path = os.path.expandvars(file_path)
|
file_path = os.path.expandvars(file_path)
|
||||||
file_path = os.path.abspath(file_path)
|
# file_path = os.path.abspath(file_path)
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ qp_edit --check ${ezfio}
|
|||||||
|
|
||||||
if [[ $mos -eq 1 ]] ; then
|
if [[ $mos -eq 1 ]] ; then
|
||||||
qp set mo_two_e_ints io_mo_two_e_integrals None
|
qp set mo_two_e_ints io_mo_two_e_integrals None
|
||||||
qp set mo_one_e_ints io_mo_integrals_e_n None
|
qp set mo_one_e_ints io_mo_integrals_n_e None
|
||||||
qp set mo_one_e_ints io_mo_integrals_kinetic None
|
qp set mo_one_e_ints io_mo_integrals_kinetic None
|
||||||
qp set mo_one_e_ints io_mo_integrals_pseudo None
|
qp set mo_one_e_ints io_mo_integrals_pseudo None
|
||||||
qp set mo_one_e_ints io_mo_one_e_integrals None
|
qp set mo_one_e_ints io_mo_one_e_integrals None
|
||||||
|
@ -51,7 +51,7 @@ FCFLAGS : -Ofast
|
|||||||
# -g : Extra debugging information
|
# -g : Extra debugging information
|
||||||
#
|
#
|
||||||
[DEBUG]
|
[DEBUG]
|
||||||
FCFLAGS : -g -msse4.2 -fcheck=all -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant -Wuninitialized
|
FCFLAGS : -g -msse4.2 -fcheck=all -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant -Wuninitialized -fbacktrace -ffpe-trap=zero,overflow,underflow -finit-real=nan
|
||||||
|
|
||||||
# OpenMP flags
|
# OpenMP flags
|
||||||
#################
|
#################
|
||||||
|
@ -53,7 +53,7 @@ FCFLAGS : -Ofast -fimplicit-none
|
|||||||
# -g : Extra debugging information
|
# -g : Extra debugging information
|
||||||
#
|
#
|
||||||
[DEBUG]
|
[DEBUG]
|
||||||
FCFLAGS : -Ofast -fcheck=all -g -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant
|
FCFLAGS : -Ofast -fcheck=all -g -Waliasing -Wampersand -Wconversion -Wsurprising -Wintrinsics-std -Wno-tabs -Wintrinsic-shadow -Wline-truncation -Wreal-q-constant
|
||||||
|
|
||||||
|
|
||||||
# OpenMP flags
|
# OpenMP flags
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,519 +1,195 @@
|
|||||||
HYDROGEN
|
! Obtained from
|
||||||
S 8
|
! https://pseudopotentiallibrary.org
|
||||||
1 23.843185 0.00411490
|
|
||||||
2 10.212443 0.01046440
|
$DATA
|
||||||
3 4.374164 0.02801110
|
|
||||||
4 1.873529 0.07588620
|
POTASSIUM
|
||||||
5 0.802465 0.18210620
|
S 13
|
||||||
6 0.343709 0.34852140
|
1 33.190598 0.00093460
|
||||||
7 0.147217 0.37823130
|
2 17.266513 -0.01746080
|
||||||
8 0.063055 0.11642410
|
3 8.982438 0.15299840
|
||||||
|
4 4.672871 -0.34050680
|
||||||
|
5 2.430935 -0.22863440
|
||||||
|
6 1.264628 0.22672980
|
||||||
|
7 0.657889 0.54910420
|
||||||
|
8 0.342249 0.42310450
|
||||||
|
9 0.178046 0.09104080
|
||||||
|
10 0.092623 0.00345520
|
||||||
|
11 0.048185 -0.00028370
|
||||||
|
12 0.025067 0.00055460
|
||||||
|
13 0.013040 0.00000310
|
||||||
|
S 13
|
||||||
|
1 33.190598 -0.00013550
|
||||||
|
2 17.266513 0.00327580
|
||||||
|
3 8.982438 -0.03127550
|
||||||
|
4 4.672871 0.07304500
|
||||||
|
5 2.430935 0.04905170
|
||||||
|
6 1.264628 -0.05320270
|
||||||
|
7 0.657889 -0.13678160
|
||||||
|
8 0.342249 -0.16629980
|
||||||
|
9 0.178046 -0.15469740
|
||||||
|
10 0.092623 0.00178980
|
||||||
|
11 0.048185 0.40887000
|
||||||
|
12 0.025067 0.56715150
|
||||||
|
13 0.013040 0.18420760
|
||||||
|
P 12
|
||||||
|
1 25.955983 0.00005310
|
||||||
|
2 12.863527 0.00359740
|
||||||
|
3 6.375036 -0.04058580
|
||||||
|
4 3.159405 -0.04220760
|
||||||
|
5 1.565770 0.20965770
|
||||||
|
6 0.775980 0.39509450
|
||||||
|
7 0.384568 0.37504360
|
||||||
|
8 0.190588 0.15682480
|
||||||
|
9 0.094453 0.01966940
|
||||||
|
10 0.046810 0.00125380
|
||||||
|
11 0.023199 0.00029050
|
||||||
|
12 0.011497 -0.00000980
|
||||||
|
P 12
|
||||||
|
1 25.955983 -0.00001130
|
||||||
|
2 12.863527 -0.00050130
|
||||||
|
3 6.375036 0.00601080
|
||||||
|
4 3.159405 0.00570550
|
||||||
|
5 1.565770 -0.03288980
|
||||||
|
6 0.775980 -0.05912520
|
||||||
|
7 0.384568 -0.06798030
|
||||||
|
8 0.190588 -0.04852530
|
||||||
|
9 0.094453 0.02182800
|
||||||
|
10 0.046810 0.27827650
|
||||||
|
11 0.023199 0.48640440
|
||||||
|
12 0.011497 0.31832720
|
||||||
|
D 11
|
||||||
|
1 25.002828 0.00002860
|
||||||
|
2 10.959775 -0.00030190
|
||||||
|
3 4.804124 0.00482980
|
||||||
|
4 2.105846 0.01402200
|
||||||
|
5 0.923080 0.02589140
|
||||||
|
6 0.404624 0.03605440
|
||||||
|
7 0.177364 0.04862730
|
||||||
|
8 0.077746 0.10242950
|
||||||
|
9 0.034079 0.28114010
|
||||||
|
10 0.014938 0.51238900
|
||||||
|
11 0.006548 0.25265610
|
||||||
S 1
|
S 1
|
||||||
1 0.040680 1.00000000
|
1 0.910504 1.00000000
|
||||||
S 1
|
S 1
|
||||||
1 0.139013 1.00000000
|
1 0.538624 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.051786 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.019252 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.009626 1.00000000
|
||||||
P 1
|
P 1
|
||||||
1 0.166430 1.00000000
|
1 0.479550 1.00000000
|
||||||
P 1
|
P 1
|
||||||
1 0.740212 1.00000000
|
1 0.234482 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.027763 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.012100 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.006050 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.034207 1.00000000
|
||||||
|
D 1
|
||||||
|
1 0.013386 1.00000000
|
||||||
|
D 1
|
||||||
|
1 0.006693 1.00000000
|
||||||
|
|
||||||
SODIUM
|
CALCIUM
|
||||||
S 12
|
S 13
|
||||||
1 50.364926 -0.00144900
|
1 38.909972 0.00094450
|
||||||
2 24.480199 -0.00059000
|
2 20.573489 -0.01770900
|
||||||
3 11.898760 -0.11881800
|
3 10.878148 0.14349340
|
||||||
4 5.783470 -0.01085600
|
4 5.751777 -0.28035140
|
||||||
5 2.811093 0.25078300
|
5 3.041228 -0.28847700
|
||||||
6 1.366350 0.44727600
|
6 1.608037 0.17248640
|
||||||
7 0.664123 0.34725400
|
7 0.850243 0.55290080
|
||||||
8 0.322801 0.08065200
|
8 0.449563 0.46769880
|
||||||
9 0.156900 0.00120800
|
9 0.237704 0.09929150
|
||||||
10 0.076262 0.00040900
|
10 0.125685 0.00665130
|
||||||
11 0.037068 0.00011200
|
11 0.066456 -0.00192570
|
||||||
12 0.018017 0.00007200
|
12 0.035138 0.00096120
|
||||||
S 12
|
13 0.018579 -0.00024390
|
||||||
1 50.364926 0.00021200
|
S 13
|
||||||
2 24.480199 0.00037900
|
1 38.909972 -0.00018310
|
||||||
3 11.898760 0.01958200
|
2 20.573489 0.00425520
|
||||||
4 5.783470 0.00062300
|
3 10.878148 -0.03727720
|
||||||
5 2.811093 -0.04578100
|
4 5.751777 0.07704740
|
||||||
6 1.366350 -0.08872800
|
5 3.041228 0.07822310
|
||||||
7 0.664123 -0.11295200
|
6 1.608037 -0.05175260
|
||||||
8 0.322801 -0.10839600
|
7 0.850243 -0.17462310
|
||||||
9 0.156900 0.00990100
|
8 0.449563 -0.25326320
|
||||||
10 0.076262 0.35541800
|
9 0.237704 -0.16061050
|
||||||
11 0.037068 0.56145100
|
10 0.125685 0.12654760
|
||||||
12 0.018017 0.19899800
|
11 0.066456 0.46487670
|
||||||
S 1
|
12 0.035138 0.47840060
|
||||||
1 0.073591 1.00000000
|
13 0.018579 0.15642960
|
||||||
S 1
|
P 12
|
||||||
1 0.036796 1.00000000
|
1 31.519451 -0.00013110
|
||||||
P 12
|
2 15.831494 0.00581110
|
||||||
1 77.769943 0.00005400
|
3 7.951795 -0.04461000
|
||||||
2 42.060816 -0.00001600
|
4 3.994003 -0.04239180
|
||||||
3 22.748020 0.01257100
|
5 2.006096 0.18028850
|
||||||
4 12.302957 0.07960100
|
6 1.007616 0.40747440
|
||||||
5 6.653887 0.14044200
|
7 0.506102 0.38646720
|
||||||
6 3.598664 0.21214100
|
8 0.254203 0.15452190
|
||||||
7 1.946289 0.26179900
|
9 0.127681 0.01706770
|
||||||
8 1.052624 0.25582000
|
10 0.064131 0.00315970
|
||||||
9 0.569297 0.18035900
|
11 0.032211 -0.00022470
|
||||||
10 0.307897 0.07216500
|
12 0.016179 0.00016830
|
||||||
11 0.166522 0.01066300
|
P 12
|
||||||
12 0.090061 0.00153800
|
1 31.519451 0.00002060
|
||||||
P 12
|
2 15.831494 -0.00124550
|
||||||
1 77.769943 -0.00065600
|
3 7.951795 0.01011140
|
||||||
2 42.060816 0.00313700
|
4 3.994003 0.00894270
|
||||||
3 22.748020 -0.01100400
|
5 2.006096 -0.04458680
|
||||||
4 12.302957 0.00937600
|
6 1.007616 -0.09627520
|
||||||
5 6.653887 -0.06647900
|
7 0.506102 -0.11300730
|
||||||
6 3.598664 0.05895900
|
8 0.254203 -0.06533320
|
||||||
7 1.946289 -0.22105000
|
9 0.127681 0.14680910
|
||||||
8 1.052624 0.30349100
|
10 0.064131 0.44119800
|
||||||
9 0.569297 -0.67170500
|
11 0.032211 0.42763180
|
||||||
10 0.307897 1.06436000
|
12 0.016179 0.12519670
|
||||||
11 0.166522 -1.53048900
|
D 11
|
||||||
12 0.090061 1.84316700
|
1 28.997930 0.00227830
|
||||||
P 1
|
2 13.712713 0.01197270
|
||||||
1 0.063647 1.00000000
|
3 6.484549 0.02273230
|
||||||
P 1
|
4 3.066452 0.06997740
|
||||||
1 0.031823 1.00000000
|
5 1.450082 0.12588700
|
||||||
D 1
|
6 0.685723 0.17597110
|
||||||
1 0.093145 1.00000000
|
7 0.324269 0.20962750
|
||||||
D 1
|
8 0.153342 0.25661550
|
||||||
1 0.046573 1.00000000
|
9 0.072513 0.28874140
|
||||||
|
10 0.034291 0.22477940
|
||||||
MAGNESIUM
|
11 0.016216 0.08294810
|
||||||
S 12
|
S 1
|
||||||
1 63.931893 -0.00079400
|
1 1.383790 1.00000000
|
||||||
2 31.602596 0.00747900
|
S 1
|
||||||
3 15.621687 -0.13624600
|
1 0.701508 1.00000000
|
||||||
4 7.722059 -0.03203300
|
S 1
|
||||||
5 3.817142 0.21682300
|
1 0.066369 1.00000000
|
||||||
6 1.886877 0.45136400
|
S 1
|
||||||
7 0.932714 0.37759900
|
1 0.026432 1.00000000
|
||||||
8 0.461056 0.09431900
|
S 1
|
||||||
9 0.227908 0.00170300
|
1 0.006700 1.00000000
|
||||||
10 0.112659 0.00048500
|
P 1
|
||||||
11 0.055689 -0.00015100
|
1 0.563426 1.00000000
|
||||||
12 0.027528 0.00003100
|
P 1
|
||||||
S 12
|
1 0.261483 1.00000000
|
||||||
1 63.931893 0.00010600
|
P 1
|
||||||
2 31.602596 -0.00108600
|
1 0.076223 1.00000000
|
||||||
3 15.621687 0.02867600
|
P 1
|
||||||
4 7.722059 0.00578100
|
1 0.027633 1.00000000
|
||||||
5 3.817142 -0.05065300
|
P 1
|
||||||
6 1.886877 -0.11687700
|
1 0.005400 1.00000000
|
||||||
7 0.932714 -0.16512100
|
D 1
|
||||||
8 0.461056 -0.11801600
|
1 1.493098 1.00000000
|
||||||
9 0.227908 0.10836500
|
D 1
|
||||||
10 0.112659 0.41475500
|
1 0.050522 1.00000000
|
||||||
11 0.055689 0.47763300
|
D 1
|
||||||
12 0.027528 0.17347600
|
1 0.008800 1.00000000
|
||||||
S 1
|
|
||||||
1 0.041150 1.00000000
|
|
||||||
S 1
|
|
||||||
1 0.020575 1.00000000
|
|
||||||
P 12
|
|
||||||
1 28.231094 0.01131700
|
|
||||||
2 14.891993 0.08703900
|
|
||||||
3 7.855575 0.16268300
|
|
||||||
4 4.143841 0.24138600
|
|
||||||
5 2.185889 0.29006400
|
|
||||||
6 1.153064 0.25299100
|
|
||||||
7 0.608245 0.13309700
|
|
||||||
8 0.320851 0.02894100
|
|
||||||
9 0.169250 0.00320900
|
|
||||||
10 0.089280 0.00026800
|
|
||||||
11 0.047095 0.00025700
|
|
||||||
12 0.024843 -0.00003700
|
|
||||||
P 12
|
|
||||||
1 28.231094 -0.00182200
|
|
||||||
2 14.891993 -0.01360300
|
|
||||||
3 7.855575 -0.02570000
|
|
||||||
4 4.143841 -0.03907600
|
|
||||||
5 2.185889 -0.04877900
|
|
||||||
6 1.153064 -0.04599000
|
|
||||||
7 0.608245 -0.03165800
|
|
||||||
8 0.320851 0.04917800
|
|
||||||
9 0.169250 0.18690900
|
|
||||||
10 0.089280 0.37939600
|
|
||||||
11 0.047095 0.33543100
|
|
||||||
12 0.024843 0.18405800
|
|
||||||
P 1
|
|
||||||
1 0.038365 1.00000000
|
|
||||||
P 1
|
|
||||||
1 0.019183 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.196017 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.098008 1.00000000
|
|
||||||
|
|
||||||
ALUMINUM
|
|
||||||
S 12
|
|
||||||
1 78.990577 -0.00048100
|
|
||||||
2 39.484884 0.01309500
|
|
||||||
3 19.737241 -0.14615300
|
|
||||||
4 9.866021 -0.04520600
|
|
||||||
5 4.931711 0.19070800
|
|
||||||
6 2.465206 0.45320700
|
|
||||||
7 1.232278 0.39882400
|
|
||||||
8 0.615977 0.10364800
|
|
||||||
9 0.307907 0.00224700
|
|
||||||
10 0.153913 0.00079000
|
|
||||||
11 0.076936 -0.00014000
|
|
||||||
12 0.038458 0.00006400
|
|
||||||
S 12
|
|
||||||
1 78.990577 0.00002400
|
|
||||||
2 39.484884 -0.00262700
|
|
||||||
3 19.737241 0.03694800
|
|
||||||
4 9.866021 0.01070500
|
|
||||||
5 4.931711 -0.05334200
|
|
||||||
6 2.465206 -0.14418800
|
|
||||||
7 1.232278 -0.21396900
|
|
||||||
8 0.615977 -0.12558500
|
|
||||||
9 0.307907 0.19397000
|
|
||||||
10 0.153913 0.48467400
|
|
||||||
11 0.076936 0.41941400
|
|
||||||
12 0.038458 0.11043000
|
|
||||||
S 1
|
|
||||||
1 0.062950 1.00000000
|
|
||||||
S 1
|
|
||||||
1 0.030399 1.00000000
|
|
||||||
P 12
|
|
||||||
1 33.993368 0.01190800
|
|
||||||
2 17.617051 0.09748500
|
|
||||||
3 9.130030 0.18047400
|
|
||||||
4 4.731635 0.26552200
|
|
||||||
5 2.452168 0.30797700
|
|
||||||
6 1.270835 0.23506100
|
|
||||||
7 0.658610 0.08963100
|
|
||||||
8 0.341324 0.01108300
|
|
||||||
9 0.176891 0.00157700
|
|
||||||
10 0.091674 0.00000700
|
|
||||||
11 0.047510 0.00021500
|
|
||||||
12 0.024622 -0.00002200
|
|
||||||
P 12
|
|
||||||
1 33.993368 -0.00218300
|
|
||||||
2 17.617051 -0.01736200
|
|
||||||
3 9.130030 -0.03229200
|
|
||||||
4 4.731635 -0.04981000
|
|
||||||
5 2.452168 -0.05992600
|
|
||||||
6 1.270835 -0.05255300
|
|
||||||
7 0.658610 0.00198900
|
|
||||||
8 0.341324 0.13005200
|
|
||||||
9 0.176891 0.28008900
|
|
||||||
10 0.091674 0.37433900
|
|
||||||
11 0.047510 0.27285700
|
|
||||||
12 0.024622 0.08514500
|
|
||||||
P 1
|
|
||||||
1 0.053015 1.00000000
|
|
||||||
P 1
|
|
||||||
1 0.014456 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.189387 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.053602 1.00000000
|
|
||||||
|
|
||||||
SILICON
|
|
||||||
S 12
|
|
||||||
1 96.651837 -0.00044000
|
|
||||||
2 48.652547 0.01867100
|
|
||||||
3 24.490692 -0.15435300
|
|
||||||
4 12.328111 -0.05773800
|
|
||||||
5 6.205717 0.16808700
|
|
||||||
6 3.123831 0.45342800
|
|
||||||
7 1.572472 0.41767500
|
|
||||||
8 0.791550 0.11190100
|
|
||||||
9 0.398450 0.00333700
|
|
||||||
10 0.200572 0.00099500
|
|
||||||
11 0.100964 -0.00003800
|
|
||||||
12 0.050823 0.00006900
|
|
||||||
S 12
|
|
||||||
1 96.651837 -0.00000400
|
|
||||||
2 48.652547 -0.00442100
|
|
||||||
3 24.490692 0.04336200
|
|
||||||
4 12.328111 0.01585300
|
|
||||||
5 6.205717 -0.05170600
|
|
||||||
6 3.123831 -0.16289500
|
|
||||||
7 1.572472 -0.25021800
|
|
||||||
8 0.791550 -0.12421600
|
|
||||||
9 0.398450 0.24632500
|
|
||||||
10 0.200572 0.50589900
|
|
||||||
11 0.100964 0.38631400
|
|
||||||
12 0.050823 0.08770100
|
|
||||||
S 1
|
|
||||||
1 0.086279 1.00000000
|
|
||||||
S 1
|
|
||||||
1 0.052598 1.00000000
|
|
||||||
P 12
|
|
||||||
1 40.315996 0.01293800
|
|
||||||
2 21.171265 0.09812900
|
|
||||||
3 11.117733 0.17932400
|
|
||||||
4 5.838290 0.26388600
|
|
||||||
5 3.065879 0.30927200
|
|
||||||
6 1.609995 0.23274800
|
|
||||||
7 0.845462 0.08590000
|
|
||||||
8 0.443980 0.01026000
|
|
||||||
9 0.233149 0.00156000
|
|
||||||
10 0.122434 -0.00000300
|
|
||||||
11 0.064294 0.00023200
|
|
||||||
12 0.033763 -0.00002300
|
|
||||||
P 12
|
|
||||||
1 40.315996 0.00283300
|
|
||||||
2 21.171265 0.02086900
|
|
||||||
3 11.117733 0.03823600
|
|
||||||
4 5.838290 0.05967900
|
|
||||||
5 3.065879 0.07277600
|
|
||||||
6 1.609995 0.06112900
|
|
||||||
7 0.845462 -0.01677600
|
|
||||||
8 0.443980 -0.17225900
|
|
||||||
9 0.233149 -0.32119600
|
|
||||||
10 0.122434 -0.36282800
|
|
||||||
11 0.064294 -0.22078900
|
|
||||||
12 0.033763 -0.05515200
|
|
||||||
P 1
|
|
||||||
1 0.079370 1.00000000
|
|
||||||
P 1
|
|
||||||
1 0.025699 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.274454 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.082112 1.00000000
|
|
||||||
|
|
||||||
PHOSPHORUS
|
|
||||||
S 12
|
|
||||||
1 269.443884 0.00005500
|
|
||||||
2 127.601401 -0.00062400
|
|
||||||
3 60.428603 0.01940000
|
|
||||||
4 28.617367 -0.16550900
|
|
||||||
5 13.552418 -0.05426500
|
|
||||||
6 6.418062 0.25444000
|
|
||||||
7 3.039422 0.54966100
|
|
||||||
8 1.439389 0.32228500
|
|
||||||
9 0.681656 0.02663200
|
|
||||||
10 0.322814 0.00420300
|
|
||||||
11 0.152876 -0.00123300
|
|
||||||
12 0.072398 0.00049700
|
|
||||||
S 12
|
|
||||||
1 269.443884 0.00001800
|
|
||||||
2 127.601401 -0.00002600
|
|
||||||
3 60.428603 -0.00493300
|
|
||||||
4 28.617367 0.05012000
|
|
||||||
5 13.552418 0.01580100
|
|
||||||
6 6.418062 -0.08446300
|
|
||||||
7 3.039422 -0.24674200
|
|
||||||
8 1.439389 -0.27632600
|
|
||||||
9 0.681656 0.10027400
|
|
||||||
10 0.322814 0.51720100
|
|
||||||
11 0.152876 0.47975800
|
|
||||||
12 0.072398 0.12409900
|
|
||||||
S 1
|
|
||||||
1 0.111116 1.00000000
|
|
||||||
S 1
|
|
||||||
1 0.070425 1.00000000
|
|
||||||
P 12
|
|
||||||
1 48.154282 0.01288400
|
|
||||||
2 25.406431 0.09709500
|
|
||||||
3 13.404555 0.17821500
|
|
||||||
4 7.072308 0.26596400
|
|
||||||
5 3.731384 0.31293300
|
|
||||||
6 1.968696 0.23068600
|
|
||||||
7 1.038693 0.08048900
|
|
||||||
8 0.548020 0.00908500
|
|
||||||
9 0.289138 0.00124800
|
|
||||||
10 0.152550 -0.00006600
|
|
||||||
11 0.080486 0.00012900
|
|
||||||
12 0.042465 -0.00002900
|
|
||||||
P 12
|
|
||||||
1 48.154282 -0.00315200
|
|
||||||
2 25.406431 -0.02300600
|
|
||||||
3 13.404555 -0.04239800
|
|
||||||
4 7.072308 -0.06747700
|
|
||||||
5 3.731384 -0.08295200
|
|
||||||
6 1.968696 -0.06602600
|
|
||||||
7 1.038693 0.03446800
|
|
||||||
8 0.548020 0.20901800
|
|
||||||
9 0.289138 0.34717900
|
|
||||||
10 0.152550 0.34480600
|
|
||||||
11 0.080486 0.18173100
|
|
||||||
12 0.042465 0.03664900
|
|
||||||
P 1
|
|
||||||
1 0.110006 1.00000000
|
|
||||||
P 1
|
|
||||||
1 0.032651 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.373518 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.111363 1.00000000
|
|
||||||
|
|
||||||
SULFUR
|
|
||||||
S 12
|
|
||||||
1 306.317903 0.00006400
|
|
||||||
2 146.602801 -0.00078500
|
|
||||||
3 70.163647 0.02247100
|
|
||||||
4 33.580104 -0.16987100
|
|
||||||
5 16.071334 -0.06189700
|
|
||||||
6 7.691691 0.24003900
|
|
||||||
7 3.681219 0.55164900
|
|
||||||
8 1.761820 0.33438600
|
|
||||||
9 0.843202 0.03132300
|
|
||||||
10 0.403554 0.00443600
|
|
||||||
11 0.193140 -0.00101500
|
|
||||||
12 0.092436 0.00050700
|
|
||||||
S 12
|
|
||||||
1 306.317903 0.00002100
|
|
||||||
2 146.602801 -0.00000400
|
|
||||||
3 70.163647 -0.00611900
|
|
||||||
4 33.580104 0.05447100
|
|
||||||
5 16.071334 0.01934400
|
|
||||||
6 7.691691 -0.08383900
|
|
||||||
7 3.681219 -0.26532200
|
|
||||||
8 1.761820 -0.29306500
|
|
||||||
9 0.843202 0.11373000
|
|
||||||
10 0.403554 0.52928200
|
|
||||||
11 0.193140 0.46625400
|
|
||||||
12 0.092436 0.12580000
|
|
||||||
S 1
|
|
||||||
1 0.138193 1.00000000
|
|
||||||
S 1
|
|
||||||
1 0.091639 1.00000000
|
|
||||||
P 12
|
|
||||||
1 55.148271 0.01344700
|
|
||||||
2 29.056588 0.10167000
|
|
||||||
3 15.309371 0.18519200
|
|
||||||
4 8.066220 0.27583600
|
|
||||||
5 4.249940 0.31707300
|
|
||||||
6 2.239213 0.21706600
|
|
||||||
7 1.179799 0.06576500
|
|
||||||
8 0.621614 0.00651700
|
|
||||||
9 0.327517 0.00111100
|
|
||||||
10 0.172562 0.00022200
|
|
||||||
11 0.090920 0.00018100
|
|
||||||
12 0.047904 0.00000800
|
|
||||||
P 12
|
|
||||||
1 55.148271 0.00354200
|
|
||||||
2 29.056588 0.02579700
|
|
||||||
3 15.309371 0.04726000
|
|
||||||
4 8.066220 0.07559400
|
|
||||||
5 4.249940 0.09198000
|
|
||||||
6 2.239213 0.06206700
|
|
||||||
7 1.179799 -0.07125300
|
|
||||||
8 0.621614 -0.25020600
|
|
||||||
9 0.327517 -0.34929500
|
|
||||||
10 0.172562 -0.31270000
|
|
||||||
11 0.090920 -0.15589800
|
|
||||||
12 0.047904 -0.03041800
|
|
||||||
P 1
|
|
||||||
1 0.132347 1.00000000
|
|
||||||
P 1
|
|
||||||
1 0.043576 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.480399 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.145431 1.00000000
|
|
||||||
|
|
||||||
CHLORINE
|
|
||||||
S 10
|
|
||||||
1 15.583847 0.002501
|
|
||||||
2 8.858485 -0.010046
|
|
||||||
3 5.035519 0.085810
|
|
||||||
4 2.862391 -0.290136
|
|
||||||
5 1.627098 -0.140314
|
|
||||||
6 0.924908 0.146839
|
|
||||||
7 0.525755 0.392484
|
|
||||||
8 0.298860 0.425061
|
|
||||||
9 0.169884 0.227195
|
|
||||||
10 0.096569 0.059828
|
|
||||||
S 1
|
|
||||||
1 0.648040 1.000000
|
|
||||||
S 1
|
|
||||||
1 0.151979 1.000000
|
|
||||||
P 10
|
|
||||||
1 7.682894 -0.004609
|
|
||||||
2 4.507558 -0.001798
|
|
||||||
3 2.644587 -0.068614
|
|
||||||
4 1.551581 0.062352
|
|
||||||
5 0.910313 0.166337
|
|
||||||
6 0.534081 0.282292
|
|
||||||
7 0.313346 0.275967
|
|
||||||
8 0.183840 0.241328
|
|
||||||
9 0.107859 0.110223
|
|
||||||
10 0.063281 0.040289
|
|
||||||
P 1
|
|
||||||
1 0.633351 1.000000
|
|
||||||
P 1
|
|
||||||
1 0.405005 1.000000
|
|
||||||
D 1
|
|
||||||
1 0.633222 1.000000
|
|
||||||
D 1
|
|
||||||
1 0.211734 1.000000
|
|
||||||
|
|
||||||
ARGON
|
|
||||||
S 12
|
|
||||||
1 400.805381 0.00009200
|
|
||||||
2 194.251428 -0.00125400
|
|
||||||
3 94.144487 0.02887900
|
|
||||||
4 45.627384 -0.17710600
|
|
||||||
5 22.113437 -0.07716500
|
|
||||||
6 10.717338 0.21018700
|
|
||||||
7 5.194187 0.55436900
|
|
||||||
8 2.517377 0.35907000
|
|
||||||
9 1.220054 0.04076900
|
|
||||||
10 0.591302 0.00508700
|
|
||||||
11 0.286576 -0.00064400
|
|
||||||
12 0.138890 0.00053300
|
|
||||||
S 12
|
|
||||||
1 400.805381 0.00001900
|
|
||||||
2 194.251428 0.00011400
|
|
||||||
3 94.144487 -0.00869300
|
|
||||||
4 45.627384 0.06117500
|
|
||||||
5 22.113437 0.02679200
|
|
||||||
6 10.717338 -0.07778000
|
|
||||||
7 5.194187 -0.29074700
|
|
||||||
8 2.517377 -0.32003600
|
|
||||||
9 1.220054 0.12393300
|
|
||||||
10 0.591302 0.53916300
|
|
||||||
11 0.286576 0.45626000
|
|
||||||
12 0.138890 0.13189200
|
|
||||||
S 1
|
|
||||||
1 0.200844 1.00000000
|
|
||||||
S 1
|
|
||||||
1 0.100422 1.00000000
|
|
||||||
P 12
|
|
||||||
1 71.845693 0.01423900
|
|
||||||
2 38.318786 0.10317800
|
|
||||||
3 20.437263 0.18518400
|
|
||||||
4 10.900182 0.27635700
|
|
||||||
5 5.813595 0.31813000
|
|
||||||
6 3.100671 0.21149400
|
|
||||||
7 1.653738 0.06192600
|
|
||||||
8 0.882019 0.00582100
|
|
||||||
9 0.470423 0.00083800
|
|
||||||
10 0.250899 -0.00004700
|
|
||||||
11 0.133817 0.00007700
|
|
||||||
12 0.071371 -0.00001800
|
|
||||||
P 12
|
|
||||||
1 71.845693 0.00414500
|
|
||||||
2 38.318786 0.02880000
|
|
||||||
3 20.437263 0.05191600
|
|
||||||
4 10.900182 0.08435600
|
|
||||||
5 5.813595 0.10330300
|
|
||||||
6 3.100671 0.05976300
|
|
||||||
7 1.653738 -0.09852400
|
|
||||||
8 0.882019 -0.27287100
|
|
||||||
9 0.470423 -0.34211200
|
|
||||||
10 0.250899 -0.28931700
|
|
||||||
11 0.133817 -0.14332900
|
|
||||||
12 0.071371 -0.03249500
|
|
||||||
P 1
|
|
||||||
1 0.205249 1.00000000
|
|
||||||
P 1
|
|
||||||
1 0.102624 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.745011 1.00000000
|
|
||||||
D 1
|
|
||||||
1 0.372505 1.00000000
|
|
||||||
|
|
||||||
SCANDIUM
|
SCANDIUM
|
||||||
S 13
|
S 13
|
||||||
@ -640,6 +316,20 @@ F 1
|
|||||||
1 0.083742 1.00000000
|
1 0.083742 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 0.280673 1.00000000
|
1 0.280673 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.531583 1.00000000
|
||||||
|
S 1
|
||||||
|
1 2.006315 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.608728 1.00000000
|
||||||
|
P 1
|
||||||
|
1 2.759507 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.412796 1.00000000
|
||||||
|
D 1
|
||||||
|
1 4.010741 1.00000000
|
||||||
|
F 1
|
||||||
|
1 1.670187 1.00000000
|
||||||
|
|
||||||
TITANIUM
|
TITANIUM
|
||||||
S 13
|
S 13
|
||||||
@ -766,6 +456,20 @@ F 1
|
|||||||
1 0.146931 1.00000000
|
1 0.146931 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 0.499717 1.00000000
|
1 0.499717 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.591537 1.00000000
|
||||||
|
S 1
|
||||||
|
1 2.205011 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.675360 1.00000000
|
||||||
|
P 1
|
||||||
|
1 3.138882 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.759833 1.00000000
|
||||||
|
D 1
|
||||||
|
1 5.086016 1.00000000
|
||||||
|
F 1
|
||||||
|
1 2.117563 1.00000000
|
||||||
|
|
||||||
VANADIUM
|
VANADIUM
|
||||||
S 13
|
S 13
|
||||||
@ -892,6 +596,20 @@ F 1
|
|||||||
1 0.308388 1.00000000
|
1 0.308388 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 1.138450 1.00000000
|
1 1.138450 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.736615 1.00000000
|
||||||
|
S 1
|
||||||
|
1 2.619861 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.973954 1.00000000
|
||||||
|
P 1
|
||||||
|
1 4.004062 1.00000000
|
||||||
|
D 1
|
||||||
|
1 0.749306 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.799378 1.00000000
|
||||||
|
F 1
|
||||||
|
1 3.352552 1.00000000
|
||||||
|
|
||||||
CHROMIUM
|
CHROMIUM
|
||||||
S 13
|
S 13
|
||||||
@ -1018,6 +736,20 @@ F 1
|
|||||||
1 0.311720 1.00000000
|
1 0.311720 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 1.112997 1.00000000
|
1 1.112997 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.734112 1.00000000
|
||||||
|
S 1
|
||||||
|
1 2.811823 1.00000000
|
||||||
|
P 1
|
||||||
|
1 0.851456 1.00000000
|
||||||
|
P 1
|
||||||
|
1 3.937167 1.00000000
|
||||||
|
D 1
|
||||||
|
1 0.845872 1.00000000
|
||||||
|
D 1
|
||||||
|
1 2.147155 1.00000000
|
||||||
|
F 1
|
||||||
|
1 3.530639 1.00000000
|
||||||
|
|
||||||
MANGANESE
|
MANGANESE
|
||||||
S 13
|
S 13
|
||||||
@ -1144,6 +876,20 @@ F 1
|
|||||||
1 0.373591 1.00000000
|
1 0.373591 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 1.357898 1.00000000
|
1 1.357898 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.832852 1.00000000
|
||||||
|
S 1
|
||||||
|
1 3.133156 1.00000000
|
||||||
|
P 1
|
||||||
|
1 1.020743 1.00000000
|
||||||
|
P 1
|
||||||
|
1 4.582593 1.00000000
|
||||||
|
D 1
|
||||||
|
1 0.985022 1.00000000
|
||||||
|
D 1
|
||||||
|
1 2.435684 1.00000000
|
||||||
|
F 1
|
||||||
|
1 4.198704 1.00000000
|
||||||
|
|
||||||
IRON
|
IRON
|
||||||
S 13
|
S 13
|
||||||
@ -1270,6 +1016,20 @@ F 1
|
|||||||
1 0.463696 1.00000000
|
1 0.463696 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 1.696126 1.00000000
|
1 1.696126 1.00000000
|
||||||
|
S 1
|
||||||
|
1 0.909741 1.00000000
|
||||||
|
S 1
|
||||||
|
1 3.519995 1.00000000
|
||||||
|
P 1
|
||||||
|
1 1.151345 1.00000000
|
||||||
|
P 1
|
||||||
|
1 5.187368 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.172100 1.00000000
|
||||||
|
D 1
|
||||||
|
1 2.828034 1.00000000
|
||||||
|
F 1
|
||||||
|
1 5.078925 1.00000000
|
||||||
|
|
||||||
COBALT
|
COBALT
|
||||||
S 13
|
S 13
|
||||||
@ -1396,6 +1156,20 @@ F 1
|
|||||||
1 0.557444 1.00000000
|
1 0.557444 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 2.012568 1.00000000
|
1 2.012568 1.00000000
|
||||||
|
S 1
|
||||||
|
1 1.010269 1.00000000
|
||||||
|
S 1
|
||||||
|
1 3.893671 1.00000000
|
||||||
|
P 1
|
||||||
|
1 1.270490 1.00000000
|
||||||
|
P 1
|
||||||
|
1 5.677091 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.291245 1.00000000
|
||||||
|
D 1
|
||||||
|
1 3.118104 1.00000000
|
||||||
|
F 1
|
||||||
|
1 5.891548 1.00000000
|
||||||
|
|
||||||
NICKEL
|
NICKEL
|
||||||
S 13
|
S 13
|
||||||
@ -1522,7 +1296,21 @@ F 1
|
|||||||
1 0.650562 1.00000000
|
1 0.650562 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 2.317543 1.00000000
|
1 2.317543 1.00000000
|
||||||
|
S 1
|
||||||
|
1 1.099912 1.00000000
|
||||||
|
S 1
|
||||||
|
1 4.266474 1.00000000
|
||||||
|
P 1
|
||||||
|
1 1.398024 1.00000000
|
||||||
|
P 1
|
||||||
|
1 6.294441 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.406397 1.00000000
|
||||||
|
D 1
|
||||||
|
1 3.410393 1.00000000
|
||||||
|
F 1
|
||||||
|
1 6.722827 1.00000000
|
||||||
|
|
||||||
COPPER
|
COPPER
|
||||||
S 13
|
S 13
|
||||||
1 104.471138 0.00074100
|
1 104.471138 0.00074100
|
||||||
@ -1648,6 +1436,20 @@ F 1
|
|||||||
1 0.771675 1.00000000
|
1 0.771675 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 2.739578 1.00000000
|
1 2.739578 1.00000000
|
||||||
|
S 1
|
||||||
|
1 1.218913 1.00000000
|
||||||
|
S 1
|
||||||
|
1 4.750059 1.00000000
|
||||||
|
P 1
|
||||||
|
1 1.551117 1.00000000
|
||||||
|
P 1
|
||||||
|
1 6.973554 1.00000000
|
||||||
|
D 1
|
||||||
|
1 1.873424 1.00000000
|
||||||
|
D 1
|
||||||
|
1 4.248371 1.00000000
|
||||||
|
F 1
|
||||||
|
1 6.750816 1.00000000
|
||||||
|
|
||||||
ZINC
|
ZINC
|
||||||
S 13
|
S 13
|
||||||
@ -1774,4 +1576,19 @@ F 1
|
|||||||
1 0.893402 1.00000000
|
1 0.893402 1.00000000
|
||||||
F 1
|
F 1
|
||||||
1 3.171936 1.00000000
|
1 3.171936 1.00000000
|
||||||
|
S 1
|
||||||
|
1 1.375940 1.00000000
|
||||||
|
S 1
|
||||||
|
1 5.098898 1.00000000
|
||||||
|
P 1
|
||||||
|
1 1.706665 1.00000000
|
||||||
|
P 1
|
||||||
|
1 7.892989 1.00000000
|
||||||
|
D 1
|
||||||
|
1 2.029918 1.00000000
|
||||||
|
D 1
|
||||||
|
1 4.655140 1.00000000
|
||||||
|
F 1
|
||||||
|
1 8.867564 1.00000000
|
||||||
|
|
||||||
|
$END
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4459
data/basis/aug-cc-pv5z_ecp_ccecp
Normal file
4459
data/basis/aug-cc-pv5z_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
2170
data/basis/aug-cc-pvdz_ecp_ccecp
Normal file
2170
data/basis/aug-cc-pvdz_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
3630
data/basis/aug-cc-pvqz_ecp_ccecp
Normal file
3630
data/basis/aug-cc-pvqz_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
2866
data/basis/aug-cc-pvtz_ecp_ccecp
Normal file
2866
data/basis/aug-cc-pvtz_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
3060
data/basis/cc-pcv5z_ecp_ccecp
Normal file
3060
data/basis/cc-pcv5z_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
1502
data/basis/cc-pcvdz_ecp_ccecp
Normal file
1502
data/basis/cc-pcvdz_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1019
data/basis/cc-pv5z_ecp_bfd
Normal file
1019
data/basis/cc-pv5z_ecp_bfd
Normal file
File diff suppressed because it is too large
Load Diff
4156
data/basis/cc-pv5z_ecp_ccecp
Normal file
4156
data/basis/cc-pv5z_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
3370
data/basis/cc-pvqz_ecp_ccecp
Normal file
3370
data/basis/cc-pvqz_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
2654
data/basis/cc-pvtz_ecp_ccecp
Normal file
2654
data/basis/cc-pvtz_ecp_ccecp
Normal file
File diff suppressed because it is too large
Load Diff
433
data/pseudo/ccecp
Normal file
433
data/pseudo/ccecp
Normal file
@ -0,0 +1,433 @@
|
|||||||
|
H GEN 0 1
|
||||||
|
3
|
||||||
|
1.00000000000000 1 21.24359508259891
|
||||||
|
21.24359508259891 3 21.24359508259891
|
||||||
|
-10.85192405303825 2 21.77696655044365
|
||||||
|
1
|
||||||
|
0.00000000000000 2 1.000000000000000
|
||||||
|
|
||||||
|
He GEN 0 1
|
||||||
|
3
|
||||||
|
2.000000 1 32.000000
|
||||||
|
64.00000 3 32.000000
|
||||||
|
-27.70084 2 33.713355
|
||||||
|
1
|
||||||
|
0.000000 2 1.0000000
|
||||||
|
|
||||||
|
Li GEN 2 1
|
||||||
|
3
|
||||||
|
1.000 1 15.0000000000000
|
||||||
|
15.0000000000000 3 15.0479971422127
|
||||||
|
-1.24272969818004 2 1.80605426846072
|
||||||
|
1
|
||||||
|
6.75286789026804 2 1.33024777689591
|
||||||
|
|
||||||
|
Be GEN 2 1
|
||||||
|
4
|
||||||
|
2 1 17.94900205362972
|
||||||
|
35.89800410725944 3 24.13200289331664
|
||||||
|
-12.77499846818315 2 20.13800265282147
|
||||||
|
-2.96001382478467 2 4.333170937885760
|
||||||
|
1
|
||||||
|
12.66391859014478 2 2.487403700772570
|
||||||
|
|
||||||
|
B GEN 2 1
|
||||||
|
3
|
||||||
|
3.00000 1 31.49298
|
||||||
|
94.47895 3 22.56509
|
||||||
|
-9.74800 2 8.64669
|
||||||
|
1
|
||||||
|
20.74800 2 4.06246
|
||||||
|
|
||||||
|
C GEN 2 1
|
||||||
|
3
|
||||||
|
4.00000 1 14.43502
|
||||||
|
57.74008 3 8.39889
|
||||||
|
-25.81955 2 7.38188
|
||||||
|
1
|
||||||
|
52.13345 2 7.76079
|
||||||
|
|
||||||
|
N GEN 2 1
|
||||||
|
6
|
||||||
|
3.25000 1 12.91881
|
||||||
|
1.75000 1 9.22825
|
||||||
|
41.98612 3 12.96581
|
||||||
|
16.14945 3 8.05477
|
||||||
|
-26.09522 2 12.54876
|
||||||
|
-10.32626 2 7.53360
|
||||||
|
2
|
||||||
|
34.77692 2 9.41609
|
||||||
|
15.20330 2 8.16694
|
||||||
|
|
||||||
|
O GEN 2 1
|
||||||
|
3
|
||||||
|
6.000000 1 12.30997
|
||||||
|
73.85984 3 14.76962
|
||||||
|
-47.87600 2 13.71419
|
||||||
|
1
|
||||||
|
85.86406 2 13.65512
|
||||||
|
|
||||||
|
F GEN 2 1
|
||||||
|
3
|
||||||
|
7.0 1 12.08758490486192
|
||||||
|
84.61309433403344 3 12.83806306400466
|
||||||
|
-53.02751706539332 2 12.31234562699041
|
||||||
|
1
|
||||||
|
78.90177172847011 2 14.78076492090162
|
||||||
|
|
||||||
|
Ne GEN 2 1
|
||||||
|
3
|
||||||
|
8.000 1 14.79351199705315
|
||||||
|
118.34809597642520 3 16.58203947626090
|
||||||
|
-70.27885884380557 2 16.08073529218220
|
||||||
|
1
|
||||||
|
81.62205749824426 2 16.55441468334002
|
||||||
|
|
||||||
|
Na GEN 10 2
|
||||||
|
3
|
||||||
|
1.000000 1 4.311678
|
||||||
|
4.311678 3 1.925689
|
||||||
|
-2.083137 2 1.549498
|
||||||
|
2
|
||||||
|
6.234064 2 5.377666
|
||||||
|
9.075931 2 1.408414
|
||||||
|
2
|
||||||
|
3.232724 2 1.379949
|
||||||
|
2.494079 2 0.862453
|
||||||
|
|
||||||
|
Mg GEN 10 2
|
||||||
|
3
|
||||||
|
2.000000 1 6.048538
|
||||||
|
12.097075 3 2.796989
|
||||||
|
-17.108313 2 2.547408
|
||||||
|
2
|
||||||
|
6.428631 2 5.936017
|
||||||
|
14.195491 2 1.592891
|
||||||
|
2
|
||||||
|
3.315069 2 1.583969
|
||||||
|
4.403025 2 1.077297
|
||||||
|
|
||||||
|
Al GEN 10 2
|
||||||
|
3
|
||||||
|
3.000000 1 5.073893
|
||||||
|
15.221680 3 8.607001
|
||||||
|
-11.165685 2 3.027490
|
||||||
|
2
|
||||||
|
14.879513 2 7.863954
|
||||||
|
20.746863 2 2.061358
|
||||||
|
2
|
||||||
|
7.786227 2 3.125175
|
||||||
|
7.109015 2 1.414930
|
||||||
|
|
||||||
|
Si GEN 10 2
|
||||||
|
3
|
||||||
|
4.000000 1 5.168316
|
||||||
|
20.673264 3 8.861690
|
||||||
|
-14.818174 2 3.933474
|
||||||
|
2
|
||||||
|
14.832760 2 9.447023
|
||||||
|
26.349664 2 2.553812
|
||||||
|
2
|
||||||
|
7.621400 2 3.660001
|
||||||
|
10.331583 2 1.903653
|
||||||
|
|
||||||
|
P GEN 10 2
|
||||||
|
3
|
||||||
|
5.000000 1 5.872694
|
||||||
|
29.363469 3 9.891298
|
||||||
|
-17.011136 2 4.692469
|
||||||
|
2
|
||||||
|
15.259383 2 12.091334
|
||||||
|
31.707918 2 3.044535
|
||||||
|
2
|
||||||
|
7.747190 2 4.310884
|
||||||
|
13.932528 2 2.426903
|
||||||
|
|
||||||
|
S GEN 10 2
|
||||||
|
3
|
||||||
|
6.000000 1 6.151144
|
||||||
|
36.906864 3 11.561575
|
||||||
|
-19.819533 2 5.390961
|
||||||
|
2
|
||||||
|
15.925748 2 16.117687
|
||||||
|
38.515895 2 3.608629
|
||||||
|
2
|
||||||
|
8.062221 2 6.228956
|
||||||
|
18.737525 2 2.978074
|
||||||
|
|
||||||
|
Cl GEN 10 2
|
||||||
|
3
|
||||||
|
7.000000 1 7.944352
|
||||||
|
55.610463 3 12.801261
|
||||||
|
-22.860784 2 6.296744
|
||||||
|
2
|
||||||
|
15.839234 2 17.908432
|
||||||
|
44.469504 2 4.159880
|
||||||
|
2
|
||||||
|
8.321946 2 7.931763
|
||||||
|
24.044745 2 3.610412
|
||||||
|
|
||||||
|
Ar GEN 10 2
|
||||||
|
3
|
||||||
|
8.000000 1 8.317181
|
||||||
|
66.537451 3 13.124648
|
||||||
|
-24.100393 2 6.503132
|
||||||
|
2
|
||||||
|
18.910152 2 27.068139
|
||||||
|
53.040012 2 4.801263
|
||||||
|
2
|
||||||
|
8.015534 2 11.135735
|
||||||
|
28.220208 2 4.126631
|
||||||
|
|
||||||
|
K GEN 10 2
|
||||||
|
4
|
||||||
|
9.000 1 7.27386331637373
|
||||||
|
65.46476984736357 3 11.1729834540799
|
||||||
|
-10.84433558416271 2 7.70617523948938
|
||||||
|
-15.96316084113368 2 5.62491694962345
|
||||||
|
2
|
||||||
|
11.86687269408012 2 11.4425076498453
|
||||||
|
90.07677060151201 2 6.53712447768095
|
||||||
|
2
|
||||||
|
11.53420167311457 2 9.63121897030662
|
||||||
|
27.72023517356577 2 4.50881062128081
|
||||||
|
|
||||||
|
Ca GEN 10 2
|
||||||
|
4
|
||||||
|
10.000 1 7.041331745291820
|
||||||
|
70.41331745291820 3 14.01444871170631
|
||||||
|
-92.87298019372959 2 13.76936244330539
|
||||||
|
-5.753568238854550 2 4.717259669813990
|
||||||
|
2
|
||||||
|
149.3026232361631 2 11.24016734279034
|
||||||
|
23.75932943609596 2 5.353611600469730
|
||||||
|
2
|
||||||
|
99.20411436357747 2 13.06654848325639
|
||||||
|
13.45216129084917 2 4.027484971490170
|
||||||
|
|
||||||
|
Sc GEN 10 2
|
||||||
|
4
|
||||||
|
11.00000000 1 16.02394388
|
||||||
|
176.26338271 3 14.08647403
|
||||||
|
-83.68149599 2 11.93985121
|
||||||
|
0.43282764 2 3.69440111
|
||||||
|
2
|
||||||
|
153.96530175 2 11.49466541
|
||||||
|
14.93675657 2 5.01031394
|
||||||
|
2
|
||||||
|
97.21725690 2 11.45126730
|
||||||
|
10.81704018 2 4.76798446
|
||||||
|
|
||||||
|
Ti GEN 10 2
|
||||||
|
4
|
||||||
|
12.00000000 1 18.41366202
|
||||||
|
220.96394426 3 15.92292414
|
||||||
|
-94.29025824 2 13.65000623
|
||||||
|
0.09791142 2 5.09555210
|
||||||
|
2
|
||||||
|
173.94657235 2 12.70580613
|
||||||
|
18.83768333 2 6.11178551
|
||||||
|
2
|
||||||
|
111.45672882 2 12.64091929
|
||||||
|
11.17702682 2 5.35437415
|
||||||
|
|
||||||
|
V GEN 10 2
|
||||||
|
4
|
||||||
|
13.00000000 1 20.32168914
|
||||||
|
264.18195885 3 19.59698040
|
||||||
|
-115.29293208 2 17.33147348
|
||||||
|
-0.66288726 2 5.12320657
|
||||||
|
2
|
||||||
|
195.56713891 2 15.12502150
|
||||||
|
22.88642834 2 6.29898914
|
||||||
|
2
|
||||||
|
126.42119500 2 15.93855113
|
||||||
|
16.03597127 2 5.74006266
|
||||||
|
|
||||||
|
Cr GEN 10 2
|
||||||
|
4
|
||||||
|
14.00000000 1 18.28091074
|
||||||
|
255.93275041 3 17.09800655
|
||||||
|
-132.01826317 2 16.72267276
|
||||||
|
-0.77388761 2 5.02865105
|
||||||
|
2
|
||||||
|
219.48146209 2 16.90078760
|
||||||
|
28.07933176 2 7.33662150
|
||||||
|
2
|
||||||
|
139.98396871 2 17.31974516
|
||||||
|
19.54835786 2 6.92409757
|
||||||
|
|
||||||
|
Mn GEN 10 2
|
||||||
|
4
|
||||||
|
15.00000000 1 21.91937433
|
||||||
|
328.79061500 3 21.35527127
|
||||||
|
-162.05172805 2 21.27162653
|
||||||
|
-1.82694272 2 7.93913962
|
||||||
|
2
|
||||||
|
244.66870492 2 18.92044965
|
||||||
|
33.54162717 2 8.32764757
|
||||||
|
2
|
||||||
|
162.35033685 2 20.17347020
|
||||||
|
24.17956695 2 7.80047874
|
||||||
|
|
||||||
|
Fe GEN 10 2
|
||||||
|
4
|
||||||
|
16.00000000 1 23.22091713
|
||||||
|
371.53467417 3 23.54714679
|
||||||
|
-181.22603445 2 23.47256344
|
||||||
|
-2.37305236 2 9.85238815
|
||||||
|
2
|
||||||
|
277.50032547 2 22.21062697
|
||||||
|
46.20495585 2 9.51515800
|
||||||
|
2
|
||||||
|
194.99875056 2 24.57000871
|
||||||
|
31.67945132 2 8.86648776
|
||||||
|
|
||||||
|
Co GEN 10 2
|
||||||
|
4
|
||||||
|
17.00000000 1 25.00124115
|
||||||
|
425.02109971 3 22.83490096
|
||||||
|
-195.48211282 2 23.47468155
|
||||||
|
-2.81572866 2 10.33794825
|
||||||
|
2
|
||||||
|
271.77708486 2 23.41427030
|
||||||
|
54.26461121 2 10.76931694
|
||||||
|
2
|
||||||
|
201.53430745 2 25.47446316
|
||||||
|
38.99231927 2 10.68404901
|
||||||
|
|
||||||
|
Ni GEN 10 2
|
||||||
|
4
|
||||||
|
18.000 1 2.82630001015327e+01
|
||||||
|
508.7340018275886 3 2.69360254587070e+01
|
||||||
|
-2.20099999296390e+02 2 2.70860075292970e+01
|
||||||
|
-2.13493270999809e+00 2 1.22130001295874e+01
|
||||||
|
2
|
||||||
|
3.21240002430625e+02 2 2.64320193944270e+01
|
||||||
|
6.03470084610628e+01 2 1.17489696842121e+01
|
||||||
|
2
|
||||||
|
2.36539998999428e+02 2 2.94929998193907e+01
|
||||||
|
4.43969887908906e+01 2 1.15569831458722e+01
|
||||||
|
|
||||||
|
Cu GEN 10 2
|
||||||
|
4
|
||||||
|
19.00000000 1 31.53811263
|
||||||
|
599.22413997 3 31.06925531
|
||||||
|
-244.68915484 2 30.59035868
|
||||||
|
-1.29349525 2 14.05141063
|
||||||
|
2
|
||||||
|
370.71371824 2 29.35562242
|
||||||
|
66.27560813 2 12.77235919
|
||||||
|
2
|
||||||
|
271.66281028 2 33.51694543
|
||||||
|
49.76265057 2 12.52471484
|
||||||
|
|
||||||
|
Zn GEN 10 2
|
||||||
|
4
|
||||||
|
20.00000000 1 35.80797616
|
||||||
|
716.15952323 3 34.53646083
|
||||||
|
-204.68393323 2 28.62830178
|
||||||
|
0.76026614 2 7.96239682
|
||||||
|
2
|
||||||
|
431.70804302 2 35.02141356
|
||||||
|
95.87640437 2 14.63498691
|
||||||
|
2
|
||||||
|
313.57770563 2 42.22979234
|
||||||
|
74.01270048 2 14.57429304
|
||||||
|
|
||||||
|
Ga GEN 28 3
|
||||||
|
4
|
||||||
|
3.0 1 17.00473938158134
|
||||||
|
51.01421814474402 3 14.99961796477555
|
||||||
|
-39.00062591247301 2 11.99279249750992
|
||||||
|
35.44659356093000 2 14.99282276192415
|
||||||
|
2
|
||||||
|
21.78930966695012 2 1.85781132082231
|
||||||
|
-2.86685089713932 2 0.91950586478827
|
||||||
|
2
|
||||||
|
18.63985979160424 2 1.92030166263971
|
||||||
|
-1.63369679761927 2 1.00895888918239
|
||||||
|
2
|
||||||
|
2.03523714898590 2 0.62750876923831
|
||||||
|
-0.08532375682035 2 0.32619029984635
|
||||||
|
|
||||||
|
Ge GEN 28 3
|
||||||
|
4
|
||||||
|
4.0 1 1.478962662442
|
||||||
|
5.9158506497680 3 3.188905647765
|
||||||
|
-12.033712959815 2 1.927438978253
|
||||||
|
1.283543489065 2 1.545539235916
|
||||||
|
2
|
||||||
|
43.265429324814 2 2.894473589836
|
||||||
|
-1.909339873965 2 1.550339816290
|
||||||
|
2
|
||||||
|
35.263014141211 2 2.986528872039
|
||||||
|
0.963439928853 2 1.283381203893
|
||||||
|
2
|
||||||
|
2.339019442484 2 1.043001142249
|
||||||
|
0.541380654081 2 0.554562729807
|
||||||
|
|
||||||
|
As GEN 28 3
|
||||||
|
4
|
||||||
|
5.0 1 1.28593131534589
|
||||||
|
6.429656576729450 3 9.93487432688877
|
||||||
|
-15.01243900647766 2 1.89568153750512
|
||||||
|
2.89881363078702 2 1.72825641453405
|
||||||
|
2
|
||||||
|
75.65519437230579 2 3.47938697518409
|
||||||
|
-3.31145348709338 2 1.63747973017064
|
||||||
|
2
|
||||||
|
67.96186740640852 2 3.22936389274538
|
||||||
|
-3.09455795155570 2 1.66636575135787
|
||||||
|
2
|
||||||
|
24.30473448724631 2 2.06816256325470
|
||||||
|
0.93945624468575 2 1.54699940726544
|
||||||
|
|
||||||
|
Se GEN 28 3
|
||||||
|
4
|
||||||
|
6.0 1 2.97705189898323
|
||||||
|
17.862311393899380 3 7.01667360591764
|
||||||
|
-20.00913150638712 2 3.96066255032528
|
||||||
|
10.00573531473560 2 5.02826321004214
|
||||||
|
2
|
||||||
|
71.37928031464314 2 4.17536331935161
|
||||||
|
0.42619859321245 2 2.14491059745542
|
||||||
|
2
|
||||||
|
50.94828961394475 2 4.28772186507645
|
||||||
|
5.54288117697892 2 2.09538253707367
|
||||||
|
2
|
||||||
|
6.20469719059516 2 1.39403720595047
|
||||||
|
0.53395702862692 2 1.69659923150419
|
||||||
|
|
||||||
|
Br GEN 28 3
|
||||||
|
4
|
||||||
|
7.00000000000000 1 3.665770450000000
|
||||||
|
25.6603931500000 3 5.293022720000000
|
||||||
|
13.0402619252684 2 3.176376149835153
|
||||||
|
-21.908838668870 2 2.897543523376016
|
||||||
|
2
|
||||||
|
85.8843473075379 2 4.971806723636273
|
||||||
|
4.62125463404037 2 2.042687217782981
|
||||||
|
2
|
||||||
|
55.3617154916148 2 4.711839367430644
|
||||||
|
11.0314096124871 2 2.384292508891309
|
||||||
|
2
|
||||||
|
26.4104098578207 2 3.412863477885576
|
||||||
|
5.46873883641966 2 1.530284946887900
|
||||||
|
|
||||||
|
Kr GEN 28 3
|
||||||
|
4
|
||||||
|
8.0 1 10.79423805030976
|
||||||
|
86.353904402478080 3 13.32338941541937
|
||||||
|
-11.11453291523170 2 9.292050205053670
|
||||||
|
10.22951903851239 2 20.14895793077237
|
||||||
|
2
|
||||||
|
92.88955174083402 2 5.49072858263344
|
||||||
|
12.92947788650997 2 3.86301190150576
|
||||||
|
2
|
||||||
|
43.09952401633328 2 4.03857692489950
|
||||||
|
9.50975957670500 2 3.30678898758958
|
||||||
|
2
|
||||||
|
17.80494496367218 2 4.21348003421066
|
||||||
|
4.58911494794530 2 1.54989721316990
|
||||||
|
|
263
data/pseudo/ncsu
263
data/pseudo/ncsu
@ -1,263 +0,0 @@
|
|||||||
H GEN 0 1
|
|
||||||
3
|
|
||||||
1.00000000000000 1 21.24359508259891
|
|
||||||
21.24359508259891 3 21.24359508259891
|
|
||||||
-10.85192405303825 2 21.77696655044365
|
|
||||||
1
|
|
||||||
0.00000000000000 2 1.000000000000000
|
|
||||||
|
|
||||||
B GEN 2 1
|
|
||||||
3
|
|
||||||
3.00000 1 31.49298
|
|
||||||
94.47895 3 22.56509
|
|
||||||
-9.74800 2 8.64669
|
|
||||||
1
|
|
||||||
20.74800 2 4.06246
|
|
||||||
|
|
||||||
C GEN 2 1
|
|
||||||
3
|
|
||||||
4.00000 1 14.43502
|
|
||||||
57.74008 3 8.39889
|
|
||||||
-25.81955 2 7.38188
|
|
||||||
1
|
|
||||||
52.13345 2 7.76079
|
|
||||||
|
|
||||||
N GEN 2 1
|
|
||||||
6
|
|
||||||
3.25000 1 12.91881
|
|
||||||
1.75000 1 9.22825
|
|
||||||
41.98612 3 12.96581
|
|
||||||
16.14945 3 8.05477
|
|
||||||
-26.09522 2 12.54876
|
|
||||||
-10.32626 2 7.53360
|
|
||||||
2
|
|
||||||
34.77692 2 9.41609
|
|
||||||
15.20330 2 8.16694
|
|
||||||
|
|
||||||
O GEN 2 1
|
|
||||||
3
|
|
||||||
6.000000 1 12.30997
|
|
||||||
73.85984 3 14.76962
|
|
||||||
-47.87600 2 13.71419
|
|
||||||
1
|
|
||||||
85.86406 2 13.65512
|
|
||||||
|
|
||||||
F GEN 2 1
|
|
||||||
3
|
|
||||||
7.0 1 11.3954401213
|
|
||||||
79.7680808491 3 10.49201883
|
|
||||||
-49.4990068225 2 10.2868054098
|
|
||||||
1
|
|
||||||
51.3934743997 2 11.3903478843
|
|
||||||
|
|
||||||
Na GEN 10 2
|
|
||||||
3
|
|
||||||
1.000000 1 4.311678
|
|
||||||
4.311678 3 1.925689
|
|
||||||
-2.083137 2 1.549498
|
|
||||||
2
|
|
||||||
6.234064 2 5.377666
|
|
||||||
9.075931 2 1.408414
|
|
||||||
2
|
|
||||||
3.232724 2 1.379949
|
|
||||||
2.494079 2 0.862453
|
|
||||||
|
|
||||||
Mg GEN 10 2
|
|
||||||
3
|
|
||||||
2.000000 1 6.048538
|
|
||||||
12.097075 3 2.796989
|
|
||||||
-17.108313 2 2.547408
|
|
||||||
2
|
|
||||||
6.428631 2 5.936017
|
|
||||||
14.195491 2 1.592891
|
|
||||||
2
|
|
||||||
3.315069 2 1.583969
|
|
||||||
4.403025 2 1.077297
|
|
||||||
|
|
||||||
Al GEN 2 1
|
|
||||||
3
|
|
||||||
11.000000 1 11.062056
|
|
||||||
121.682619 3 12.369778
|
|
||||||
-82.624567 2 11.965444
|
|
||||||
2
|
|
||||||
25.157259 2 81.815564
|
|
||||||
113.067525 2 24.522883
|
|
||||||
|
|
||||||
Si GEN 10 2
|
|
||||||
3
|
|
||||||
4.000000 1 5.168316
|
|
||||||
20.673264 3 8.861690
|
|
||||||
-14.818174 2 3.933474
|
|
||||||
2
|
|
||||||
14.832760 2 9.447023
|
|
||||||
26.349664 2 2.553812
|
|
||||||
2
|
|
||||||
7.621400 2 3.660001
|
|
||||||
10.331583 2 1.903653
|
|
||||||
|
|
||||||
P GEN 2 1
|
|
||||||
3
|
|
||||||
13.000000 1 15.073300
|
|
||||||
195.952906 3 18.113176
|
|
||||||
-117.611086 2 17.371539
|
|
||||||
2
|
|
||||||
25.197230 2 101.982019
|
|
||||||
189.426261 2 37.485881
|
|
||||||
|
|
||||||
S GEN 2 1
|
|
||||||
3
|
|
||||||
14.000000 1 17.977612
|
|
||||||
251.686565 3 20.435964
|
|
||||||
-135.538891 2 19.796579
|
|
||||||
2
|
|
||||||
25.243283 2 111.936344
|
|
||||||
227.060768 2 43.941844
|
|
||||||
|
|
||||||
Cl GEN 2 1
|
|
||||||
3
|
|
||||||
15.000000 1 22.196266
|
|
||||||
332.943994 3 26.145117
|
|
||||||
-161.999982 2 25.015118
|
|
||||||
2
|
|
||||||
26.837357 2 124.640433
|
|
||||||
277.296696 2 52.205433
|
|
||||||
|
|
||||||
Ar GEN 2 1
|
|
||||||
3
|
|
||||||
16.000000 1 23.431337
|
|
||||||
374.901386 3 26.735872
|
|
||||||
-178.039517 2 26.003325
|
|
||||||
2
|
|
||||||
25.069215 2 135.620522
|
|
||||||
332.151842 2 60.471053
|
|
||||||
|
|
||||||
Sc GEN 10 2
|
|
||||||
4
|
|
||||||
11.00000000 1 16.02394388
|
|
||||||
176.26338271 3 14.08647403
|
|
||||||
-83.68149599 2 11.93985121
|
|
||||||
0.43282764 2 3.69440111
|
|
||||||
2
|
|
||||||
153.96530175 2 11.49466541
|
|
||||||
14.93675657 2 5.01031394
|
|
||||||
2
|
|
||||||
97.21725690 2 11.45126730
|
|
||||||
10.81704018 2 4.76798446
|
|
||||||
|
|
||||||
Ti GEN 10 2
|
|
||||||
4
|
|
||||||
12.00000000 1 18.41366202
|
|
||||||
220.96394426 3 15.92292414
|
|
||||||
-94.29025824 2 13.65000623
|
|
||||||
0.09791142 2 5.09555210
|
|
||||||
2
|
|
||||||
173.94657235 2 12.70580613
|
|
||||||
18.83768333 2 6.11178551
|
|
||||||
2
|
|
||||||
111.45672882 2 12.64091929
|
|
||||||
11.17702682 2 5.35437415
|
|
||||||
|
|
||||||
V GEN 10 2
|
|
||||||
4
|
|
||||||
13.00000000 1 20.32168914
|
|
||||||
264.18195885 3 19.59698040
|
|
||||||
-115.29293208 2 17.33147348
|
|
||||||
-0.66288726 2 5.12320657
|
|
||||||
2
|
|
||||||
195.56713891 2 15.12502150
|
|
||||||
22.88642834 2 6.29898914
|
|
||||||
2
|
|
||||||
126.42119500 2 15.93855113
|
|
||||||
16.03597127 2 5.74006266
|
|
||||||
|
|
||||||
Cr GEN 10 2
|
|
||||||
4
|
|
||||||
14.00000000 1 18.28091074
|
|
||||||
255.93275041 3 17.09800655
|
|
||||||
-132.01826317 2 16.72267276
|
|
||||||
-0.77388761 2 5.02865105
|
|
||||||
2
|
|
||||||
219.48146209 2 16.90078760
|
|
||||||
28.07933176 2 7.33662150
|
|
||||||
2
|
|
||||||
139.98396871 2 17.31974516
|
|
||||||
19.54835786 2 6.92409757
|
|
||||||
|
|
||||||
Mn GEN 10 2
|
|
||||||
4
|
|
||||||
15.00000000 1 21.91937433
|
|
||||||
328.79061500 3 21.35527127
|
|
||||||
-162.05172805 2 21.27162653
|
|
||||||
-1.82694272 2 7.93913962
|
|
||||||
2
|
|
||||||
244.66870492 2 18.92044965
|
|
||||||
33.54162717 2 8.32764757
|
|
||||||
2
|
|
||||||
162.35033685 2 20.17347020
|
|
||||||
24.17956695 2 7.80047874
|
|
||||||
|
|
||||||
Fe GEN 10 2
|
|
||||||
4
|
|
||||||
16.00000000 1 23.22091713
|
|
||||||
371.53467417 3 23.54714679
|
|
||||||
-181.22603445 2 23.47256344
|
|
||||||
-2.37305236 2 9.85238815
|
|
||||||
2
|
|
||||||
277.50032547 2 22.21062697
|
|
||||||
46.20495585 2 9.51515800
|
|
||||||
2
|
|
||||||
194.99875056 2 24.57000871
|
|
||||||
31.67945132 2 8.86648776
|
|
||||||
|
|
||||||
Co GEN 10 2
|
|
||||||
4
|
|
||||||
17.00000000 1 25.00124115
|
|
||||||
425.02109971 3 22.83490096
|
|
||||||
-195.48211282 2 23.47468155
|
|
||||||
-2.81572866 2 10.33794825
|
|
||||||
2
|
|
||||||
271.77708486 2 23.41427030
|
|
||||||
54.26461121 2 10.76931694
|
|
||||||
2
|
|
||||||
201.53430745 2 25.47446316
|
|
||||||
38.99231927 2 10.68404901
|
|
||||||
|
|
||||||
Ni GEN 10 2
|
|
||||||
4
|
|
||||||
18.000 1 2.82630001015327e+01
|
|
||||||
508.7340018275886 3 2.69360254587070e+01
|
|
||||||
-2.20099999296390e+02 2 2.70860075292970e+01
|
|
||||||
-2.13493270999809e+00 2 1.22130001295874e+01
|
|
||||||
2
|
|
||||||
3.21240002430625e+02 2 2.64320193944270e+01
|
|
||||||
6.03470084610628e+01 2 1.17489696842121e+01
|
|
||||||
2
|
|
||||||
2.36539998999428e+02 2 2.94929998193907e+01
|
|
||||||
4.43969887908906e+01 2 1.15569831458722e+01
|
|
||||||
|
|
||||||
Cu GEN 10 2
|
|
||||||
4
|
|
||||||
19.00000000 1 31.53811263
|
|
||||||
599.22413997 3 31.06925531
|
|
||||||
-244.68915484 2 30.59035868
|
|
||||||
-1.29349525 2 14.05141063
|
|
||||||
2
|
|
||||||
370.71371824 2 29.35562242
|
|
||||||
66.27560813 2 12.77235919
|
|
||||||
2
|
|
||||||
271.66281028 2 33.51694543
|
|
||||||
49.76265057 2 12.52471484
|
|
||||||
|
|
||||||
Zn GEN 10 2
|
|
||||||
4
|
|
||||||
20.00000000 1 35.80797616
|
|
||||||
716.15952323 3 34.53646083
|
|
||||||
-204.68393323 2 28.62830178
|
|
||||||
0.76026614 2 7.96239682
|
|
||||||
2
|
|
||||||
431.70804302 2 35.02141356
|
|
||||||
95.87640437 2 14.63498691
|
|
||||||
2
|
|
||||||
313.57770563 2 42.22979234
|
|
||||||
74.01270048 2 14.57429304
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
|||||||
open Sexplib
|
open Sexplib
|
||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
open Qptypes
|
open Qptypes
|
||||||
|
open Qputils
|
||||||
|
|
||||||
|
|
||||||
let fail_msg str (ex,range) =
|
let fail_msg str (ex,range) =
|
||||||
@ -25,7 +26,7 @@ let fail_msg str (ex,range) =
|
|||||||
in
|
in
|
||||||
let str = String_ext.tr str ~target:'(' ~replacement:' '
|
let str = String_ext.tr str ~target:'(' ~replacement:' '
|
||||||
|> String_ext.split ~on:')'
|
|> String_ext.split ~on:')'
|
||||||
|> List.map String_ext.strip
|
|> list_map String_ext.strip
|
||||||
|> List.filter (fun x ->
|
|> List.filter (fun x ->
|
||||||
match String_ext.substr_index ~pos:0 ~pattern:"##" x with
|
match String_ext.substr_index ~pos:0 ~pattern:"##" x with
|
||||||
| None -> false
|
| None -> false
|
||||||
@ -48,7 +49,7 @@ let of_rst t_of_sexp s =
|
|||||||
Rst_string.to_string s
|
Rst_string.to_string s
|
||||||
|> String_ext.split ~on:'\n'
|
|> String_ext.split ~on:'\n'
|
||||||
|> List.filter (fun line -> String.contains line '=')
|
|> List.filter (fun line -> String.contains line '=')
|
||||||
|> List.map (fun line ->
|
|> list_map (fun line ->
|
||||||
"("^(
|
"("^(
|
||||||
String_ext.tr ~target:'=' ~replacement:' ' line
|
String_ext.tr ~target:'=' ~replacement:' ' line
|
||||||
)^")" )
|
)^")" )
|
||||||
|
@ -13,6 +13,8 @@ module Ao_basis : sig
|
|||||||
ao_coef : AO_coef.t array;
|
ao_coef : AO_coef.t array;
|
||||||
ao_expo : AO_expo.t array;
|
ao_expo : AO_expo.t array;
|
||||||
ao_cartesian : bool;
|
ao_cartesian : bool;
|
||||||
|
ao_normalized : bool;
|
||||||
|
primitives_normalized : bool;
|
||||||
} [@@deriving sexp]
|
} [@@deriving sexp]
|
||||||
;;
|
;;
|
||||||
val read : unit -> t option
|
val read : unit -> t option
|
||||||
@ -34,6 +36,8 @@ end = struct
|
|||||||
ao_coef : AO_coef.t array;
|
ao_coef : AO_coef.t array;
|
||||||
ao_expo : AO_expo.t array;
|
ao_expo : AO_expo.t array;
|
||||||
ao_cartesian : bool;
|
ao_cartesian : bool;
|
||||||
|
ao_normalized : bool;
|
||||||
|
primitives_normalized : bool;
|
||||||
} [@@deriving sexp]
|
} [@@deriving sexp]
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -107,6 +111,24 @@ end = struct
|
|||||||
Ezfio.get_ao_basis_ao_cartesian ()
|
Ezfio.get_ao_basis_ao_cartesian ()
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
let read_ao_normalized () =
|
||||||
|
if not (Ezfio.has_ao_basis_ao_normalized()) then
|
||||||
|
get_default "ao_normalized"
|
||||||
|
|> bool_of_string
|
||||||
|
|> Ezfio.set_ao_basis_ao_normalized
|
||||||
|
;
|
||||||
|
Ezfio.get_ao_basis_ao_normalized ()
|
||||||
|
;;
|
||||||
|
|
||||||
|
let read_primitives_normalized () =
|
||||||
|
if not (Ezfio.has_ao_basis_primitives_normalized()) then
|
||||||
|
get_default "primitives_normalized"
|
||||||
|
|> bool_of_string
|
||||||
|
|> Ezfio.set_ao_basis_primitives_normalized
|
||||||
|
;
|
||||||
|
Ezfio.get_ao_basis_primitives_normalized ()
|
||||||
|
;;
|
||||||
|
|
||||||
let to_long_basis b =
|
let to_long_basis b =
|
||||||
let ao_num = AO_number.to_int b.ao_num in
|
let ao_num = AO_number.to_int b.ao_num in
|
||||||
let gto_array = Array.init (AO_number.to_int b.ao_num)
|
let gto_array = Array.init (AO_number.to_int b.ao_num)
|
||||||
@ -169,6 +191,8 @@ end = struct
|
|||||||
ao_coef ;
|
ao_coef ;
|
||||||
ao_expo ;
|
ao_expo ;
|
||||||
ao_cartesian ;
|
ao_cartesian ;
|
||||||
|
ao_normalized ;
|
||||||
|
primitives_normalized ;
|
||||||
} = b
|
} = b
|
||||||
in
|
in
|
||||||
write_md5 b ;
|
write_md5 b ;
|
||||||
@ -178,14 +202,14 @@ end = struct
|
|||||||
in
|
in
|
||||||
let ao_prim_num =
|
let ao_prim_num =
|
||||||
Array.to_list ao_prim_num
|
Array.to_list ao_prim_num
|
||||||
|> List.map AO_prim_number.to_int
|
|> list_map AO_prim_number.to_int
|
||||||
in
|
in
|
||||||
Ezfio.set_ao_basis_ao_prim_num (Ezfio.ezfio_array_of_list
|
Ezfio.set_ao_basis_ao_prim_num (Ezfio.ezfio_array_of_list
|
||||||
~rank:1 ~dim:[| ao_num |] ~data:ao_prim_num) ;
|
~rank:1 ~dim:[| ao_num |] ~data:ao_prim_num) ;
|
||||||
|
|
||||||
let ao_nucl =
|
let ao_nucl =
|
||||||
Array.to_list ao_nucl
|
Array.to_list ao_nucl
|
||||||
|> List.map Nucl_number.to_int
|
|> list_map Nucl_number.to_int
|
||||||
in
|
in
|
||||||
Ezfio.set_ao_basis_ao_nucl(Ezfio.ezfio_array_of_list
|
Ezfio.set_ao_basis_ao_nucl(Ezfio.ezfio_array_of_list
|
||||||
~rank:1 ~dim:[| ao_num |] ~data:ao_nucl) ;
|
~rank:1 ~dim:[| ao_num |] ~data:ao_nucl) ;
|
||||||
@ -193,25 +217,27 @@ end = struct
|
|||||||
let ao_power =
|
let ao_power =
|
||||||
let l = Array.to_list ao_power in
|
let l = Array.to_list ao_power in
|
||||||
List.concat [
|
List.concat [
|
||||||
(List.map (fun a -> Positive_int.to_int a.Symmetry.Xyz.x) l) ;
|
(list_map (fun a -> Positive_int.to_int a.Symmetry.Xyz.x) l) ;
|
||||||
(List.map (fun a -> Positive_int.to_int a.Symmetry.Xyz.y) l) ;
|
(list_map (fun a -> Positive_int.to_int a.Symmetry.Xyz.y) l) ;
|
||||||
(List.map (fun a -> Positive_int.to_int a.Symmetry.Xyz.z) l) ]
|
(list_map (fun a -> Positive_int.to_int a.Symmetry.Xyz.z) l) ]
|
||||||
in
|
in
|
||||||
Ezfio.set_ao_basis_ao_power(Ezfio.ezfio_array_of_list
|
Ezfio.set_ao_basis_ao_power(Ezfio.ezfio_array_of_list
|
||||||
~rank:2 ~dim:[| ao_num ; 3 |] ~data:ao_power) ;
|
~rank:2 ~dim:[| ao_num ; 3 |] ~data:ao_power) ;
|
||||||
|
|
||||||
Ezfio.set_ao_basis_ao_cartesian(ao_cartesian);
|
Ezfio.set_ao_basis_ao_cartesian(ao_cartesian);
|
||||||
|
Ezfio.set_ao_basis_ao_normalized(ao_normalized);
|
||||||
|
Ezfio.set_ao_basis_primitives_normalized(primitives_normalized);
|
||||||
|
|
||||||
let ao_coef =
|
let ao_coef =
|
||||||
Array.to_list ao_coef
|
Array.to_list ao_coef
|
||||||
|> List.map AO_coef.to_float
|
|> list_map AO_coef.to_float
|
||||||
in
|
in
|
||||||
Ezfio.set_ao_basis_ao_coef(Ezfio.ezfio_array_of_list
|
Ezfio.set_ao_basis_ao_coef(Ezfio.ezfio_array_of_list
|
||||||
~rank:2 ~dim:[| ao_num ; ao_prim_num_max |] ~data:ao_coef) ;
|
~rank:2 ~dim:[| ao_num ; ao_prim_num_max |] ~data:ao_coef) ;
|
||||||
|
|
||||||
let ao_expo =
|
let ao_expo =
|
||||||
Array.to_list ao_expo
|
Array.to_list ao_expo
|
||||||
|> List.map AO_expo.to_float
|
|> list_map AO_expo.to_float
|
||||||
in
|
in
|
||||||
Ezfio.set_ao_basis_ao_expo(Ezfio.ezfio_array_of_list
|
Ezfio.set_ao_basis_ao_expo(Ezfio.ezfio_array_of_list
|
||||||
~rank:2 ~dim:[| ao_num ; ao_prim_num_max |] ~data:ao_expo) ;
|
~rank:2 ~dim:[| ao_num ; ao_prim_num_max |] ~data:ao_expo) ;
|
||||||
@ -233,6 +259,8 @@ end = struct
|
|||||||
ao_coef = read_ao_coef () ;
|
ao_coef = read_ao_coef () ;
|
||||||
ao_expo = read_ao_expo () ;
|
ao_expo = read_ao_expo () ;
|
||||||
ao_cartesian = read_ao_cartesian () ;
|
ao_cartesian = read_ao_cartesian () ;
|
||||||
|
ao_normalized = read_ao_normalized () ;
|
||||||
|
primitives_normalized = read_primitives_normalized () ;
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
to_md5 result
|
to_md5 result
|
||||||
@ -271,8 +299,8 @@ end = struct
|
|||||||
| Some (s', g', n') ->
|
| Some (s', g', n') ->
|
||||||
if s <> s' || n <> n' then find2 (s,g,n) a (i+1)
|
if s <> s' || n <> n' then find2 (s,g,n) a (i+1)
|
||||||
else
|
else
|
||||||
let lc = List.map (fun (prim, _) -> prim) g.Gto.lc
|
let lc = list_map (fun (prim, _) -> prim) g.Gto.lc
|
||||||
and lc' = List.map (fun (prim, _) -> prim) g'.Gto.lc
|
and lc' = list_map (fun (prim, _) -> prim) g'.Gto.lc
|
||||||
in
|
in
|
||||||
if lc <> lc' then find2 (s,g,n) a (i+1) else (a.(i) <- None ; i)
|
if lc <> lc' then find2 (s,g,n) a (i+1) else (a.(i) <- None ; i)
|
||||||
in
|
in
|
||||||
@ -286,14 +314,14 @@ end = struct
|
|||||||
let of_long_basis long_basis name ao_cartesian =
|
let of_long_basis long_basis name ao_cartesian =
|
||||||
let ao_num = List.length long_basis |> AO_number.of_int in
|
let ao_num = List.length long_basis |> AO_number.of_int in
|
||||||
let ao_prim_num =
|
let ao_prim_num =
|
||||||
List.map (fun (_,g,_) -> List.length g.Gto.lc
|
list_map (fun (_,g,_) -> List.length g.Gto.lc
|
||||||
|> AO_prim_number.of_int ) long_basis
|
|> AO_prim_number.of_int ) long_basis
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
and ao_nucl =
|
and ao_nucl =
|
||||||
List.map (fun (_,_,n) -> n) long_basis
|
list_map (fun (_,_,n) -> n) long_basis
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
and ao_power =
|
and ao_power =
|
||||||
List.map (fun (x,_,_) -> x) long_basis
|
list_map (fun (x,_,_) -> x) long_basis
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
in
|
in
|
||||||
let ao_prim_num_max = Array.fold_left (fun s x ->
|
let ao_prim_num_max = Array.fold_left (fun s x ->
|
||||||
@ -303,15 +331,15 @@ end = struct
|
|||||||
in
|
in
|
||||||
|
|
||||||
let gtos =
|
let gtos =
|
||||||
List.map (fun (_,x,_) -> x) long_basis
|
list_map (fun (_,x,_) -> x) long_basis
|
||||||
in
|
in
|
||||||
let create_expo_coef ec =
|
let create_expo_coef ec =
|
||||||
let coefs =
|
let coefs =
|
||||||
begin match ec with
|
begin match ec with
|
||||||
| `Coefs -> List.map (fun x->
|
| `Coefs -> list_map (fun x->
|
||||||
List.map (fun (_,coef) -> AO_coef.to_float coef) x.Gto.lc ) gtos
|
list_map (fun (_,coef) -> AO_coef.to_float coef) x.Gto.lc ) gtos
|
||||||
| `Expos -> List.map (fun x->
|
| `Expos -> list_map (fun x->
|
||||||
List.map (fun (prim,_) -> AO_expo.to_float
|
list_map (fun (prim,_) -> AO_expo.to_float
|
||||||
prim.GaussianPrimitive.expo) x.Gto.lc ) gtos
|
prim.GaussianPrimitive.expo) x.Gto.lc ) gtos
|
||||||
end
|
end
|
||||||
in
|
in
|
||||||
@ -340,7 +368,10 @@ end = struct
|
|||||||
in
|
in
|
||||||
{ ao_basis = name ;
|
{ ao_basis = name ;
|
||||||
ao_num ; ao_prim_num ; ao_prim_num_max ; ao_nucl ;
|
ao_num ; ao_prim_num ; ao_prim_num_max ; ao_nucl ;
|
||||||
ao_power ; ao_coef ; ao_expo ; ao_cartesian }
|
ao_power ; ao_coef ; ao_expo ; ao_cartesian ;
|
||||||
|
ao_normalized = bool_of_string @@ get_default "ao_normalized";
|
||||||
|
primitives_normalized = bool_of_string @@ get_default "primitives_normalized";
|
||||||
|
}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let reorder b =
|
let reorder b =
|
||||||
@ -394,6 +425,14 @@ Cartesian coordinates (6d,10f,...) ::
|
|||||||
|
|
||||||
ao_cartesian = %s
|
ao_cartesian = %s
|
||||||
|
|
||||||
|
Use normalized primitive functions ::
|
||||||
|
|
||||||
|
primitives_normalized = %s
|
||||||
|
|
||||||
|
Use normalized basis functions ::
|
||||||
|
|
||||||
|
ao_normalized = %s
|
||||||
|
|
||||||
Basis set (read-only) ::
|
Basis set (read-only) ::
|
||||||
|
|
||||||
%s
|
%s
|
||||||
@ -407,9 +446,11 @@ Basis set (read-only) ::
|
|||||||
|
|
||||||
" (AO_basis_name.to_string b.ao_basis)
|
" (AO_basis_name.to_string b.ao_basis)
|
||||||
(string_of_bool b.ao_cartesian)
|
(string_of_bool b.ao_cartesian)
|
||||||
|
(string_of_bool b.primitives_normalized)
|
||||||
|
(string_of_bool b.ao_normalized)
|
||||||
(Basis.to_string short_basis
|
(Basis.to_string short_basis
|
||||||
|> String_ext.split ~on:'\n'
|
|> String_ext.split ~on:'\n'
|
||||||
|> List.map (fun x-> " "^x)
|
|> list_map (fun x-> " "^x)
|
||||||
|> String.concat "\n"
|
|> String.concat "\n"
|
||||||
) print_sym
|
) print_sym
|
||||||
|
|
||||||
@ -434,31 +475,35 @@ Basis set (read-only) ::
|
|||||||
|
|
||||||
let to_string b =
|
let to_string b =
|
||||||
Printf.sprintf "
|
Printf.sprintf "
|
||||||
ao_basis = %s
|
ao_basis = %s
|
||||||
ao_num = %s
|
ao_num = %s
|
||||||
ao_prim_num = %s
|
ao_prim_num = %s
|
||||||
ao_prim_num_max = %s
|
ao_prim_num_max = %s
|
||||||
ao_nucl = %s
|
ao_nucl = %s
|
||||||
ao_power = %s
|
ao_power = %s
|
||||||
ao_coef = %s
|
ao_coef = %s
|
||||||
ao_expo = %s
|
ao_expo = %s
|
||||||
ao_cartesian = %s
|
ao_cartesian = %s
|
||||||
md5 = %s
|
ao_normalized = %s
|
||||||
|
primitives_normalized = %s
|
||||||
|
md5 = %s
|
||||||
"
|
"
|
||||||
(AO_basis_name.to_string b.ao_basis)
|
(AO_basis_name.to_string b.ao_basis)
|
||||||
(AO_number.to_string b.ao_num)
|
(AO_number.to_string b.ao_num)
|
||||||
(b.ao_prim_num |> Array.to_list |> List.map
|
(b.ao_prim_num |> Array.to_list |> list_map
|
||||||
(AO_prim_number.to_string) |> String.concat ", " )
|
(AO_prim_number.to_string) |> String.concat ", " )
|
||||||
(AO_prim_number.to_string b.ao_prim_num_max)
|
(AO_prim_number.to_string b.ao_prim_num_max)
|
||||||
(b.ao_nucl |> Array.to_list |> List.map Nucl_number.to_string |>
|
(b.ao_nucl |> Array.to_list |> list_map Nucl_number.to_string |>
|
||||||
String.concat ", ")
|
String.concat ", ")
|
||||||
(b.ao_power |> Array.to_list |> List.map (fun x->
|
(b.ao_power |> Array.to_list |> list_map (fun x->
|
||||||
"("^(Symmetry.Xyz.to_string x)^")" )|> String.concat ", ")
|
"("^(Symmetry.Xyz.to_string x)^")" )|> String.concat ", ")
|
||||||
(b.ao_coef |> Array.to_list |> List.map AO_coef.to_string
|
(b.ao_coef |> Array.to_list |> list_map AO_coef.to_string
|
||||||
|> String.concat ", ")
|
|> String.concat ", ")
|
||||||
(b.ao_expo |> Array.to_list |> List.map AO_expo.to_string
|
(b.ao_expo |> Array.to_list |> list_map AO_expo.to_string
|
||||||
|> String.concat ", ")
|
|> String.concat ", ")
|
||||||
(b.ao_cartesian |> string_of_bool)
|
(b.ao_cartesian |> string_of_bool)
|
||||||
|
(b.ao_normalized |> string_of_bool)
|
||||||
|
(b.primitives_normalized |> string_of_bool)
|
||||||
(to_md5 b |> MD5.to_string )
|
(to_md5 b |> MD5.to_string )
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
@ -377,7 +377,7 @@ end = struct
|
|||||||
(coefs_string i)
|
(coefs_string i)
|
||||||
(Determinant.to_string ~mo_num:mo_num b.psi_det.(i)
|
(Determinant.to_string ~mo_num:mo_num b.psi_det.(i)
|
||||||
|> String_ext.split ~on:'\n'
|
|> String_ext.split ~on:'\n'
|
||||||
|> List.map (fun x -> " "^x)
|
|> list_map (fun x -> " "^x)
|
||||||
|> String.concat "\n"
|
|> String.concat "\n"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -427,7 +427,7 @@ psi_det = %s
|
|||||||
(b.n_det |> Det_number.to_string)
|
(b.n_det |> Det_number.to_string)
|
||||||
(b.n_states |> States_number.to_string)
|
(b.n_states |> States_number.to_string)
|
||||||
(b.expected_s2 |> Positive_float.to_string)
|
(b.expected_s2 |> Positive_float.to_string)
|
||||||
(b.state_average_weight |> Array.to_list |> List.map Positive_float.to_string |> String.concat ",")
|
(b.state_average_weight |> Array.to_list |> list_map Positive_float.to_string |> String.concat ",")
|
||||||
(b.psi_coef |> Array.map Det_coef.to_string |> Array.to_list
|
(b.psi_coef |> Array.map Det_coef.to_string |> Array.to_list
|
||||||
|> String.concat ", ")
|
|> String.concat ", ")
|
||||||
(b.psi_det |> Array.map (Determinant.to_string ~mo_num) |> Array.to_list
|
(b.psi_det |> Array.map (Determinant.to_string ~mo_num) |> Array.to_list
|
||||||
@ -457,7 +457,7 @@ psi_det = %s
|
|||||||
else
|
else
|
||||||
( (String.contains line '=') && (line.[0] = ' ') )
|
( (String.contains line '=') && (line.[0] = ' ') )
|
||||||
)
|
)
|
||||||
|> List.map (fun line ->
|
|> list_map (fun line ->
|
||||||
"("^(
|
"("^(
|
||||||
String_ext.tr line ~target:'=' ~replacement:' '
|
String_ext.tr line ~target:'=' ~replacement:' '
|
||||||
|> String.trim
|
|> String.trim
|
||||||
@ -468,7 +468,7 @@ psi_det = %s
|
|||||||
(* Handle determinant coefs *)
|
(* Handle determinant coefs *)
|
||||||
let dets = match ( dets
|
let dets = match ( dets
|
||||||
|> String_ext.split ~on:'\n'
|
|> String_ext.split ~on:'\n'
|
||||||
|> List.map String.trim
|
|> list_map String.trim
|
||||||
) with
|
) with
|
||||||
| _::lines -> lines
|
| _::lines -> lines
|
||||||
| _ -> failwith "Error in determinants"
|
| _ -> failwith "Error in determinants"
|
||||||
@ -481,7 +481,7 @@ psi_det = %s
|
|||||||
| ""::c::tail ->
|
| ""::c::tail ->
|
||||||
let c =
|
let c =
|
||||||
String_ext.split ~on:'\t' c
|
String_ext.split ~on:'\t' c
|
||||||
|> List.map (fun x -> Det_coef.of_float (Float.of_string x))
|
|> list_map (fun x -> Det_coef.of_float (Float.of_string x))
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
in
|
in
|
||||||
read_coefs (c::accu) tail
|
read_coefs (c::accu) tail
|
||||||
@ -499,7 +499,7 @@ psi_det = %s
|
|||||||
let i =
|
let i =
|
||||||
i-1
|
i-1
|
||||||
in
|
in
|
||||||
List.map (fun x -> Det_coef.to_string x.(i)) buffer
|
list_map (fun x -> Det_coef.to_string x.(i)) buffer
|
||||||
|> String.concat " "
|
|> String.concat " "
|
||||||
in
|
in
|
||||||
let rec build_result = function
|
let rec build_result = function
|
||||||
|
@ -257,9 +257,9 @@ mo_coef = %s
|
|||||||
"
|
"
|
||||||
(MO_label.to_string b.mo_label)
|
(MO_label.to_string b.mo_label)
|
||||||
(MO_number.to_string b.mo_num)
|
(MO_number.to_string b.mo_num)
|
||||||
(b.mo_class |> Array.to_list |> List.map
|
(b.mo_class |> Array.to_list |> list_map
|
||||||
(MO_class.to_string) |> String.concat ", " )
|
(MO_class.to_string) |> String.concat ", " )
|
||||||
(b.mo_occ |> Array.to_list |> List.map
|
(b.mo_occ |> Array.to_list |> list_map
|
||||||
(MO_occ.to_string) |> String.concat ", " )
|
(MO_occ.to_string) |> String.concat ", " )
|
||||||
(b.mo_coef |> Array.map
|
(b.mo_coef |> Array.map
|
||||||
(fun x-> Array.map MO_coef.to_string x |>
|
(fun x-> Array.map MO_coef.to_string x |>
|
||||||
|
@ -50,7 +50,7 @@ end = struct
|
|||||||
in
|
in
|
||||||
let labels =
|
let labels =
|
||||||
Array.to_list labels
|
Array.to_list labels
|
||||||
|> List.map Element.to_string
|
|> list_map Element.to_string
|
||||||
in
|
in
|
||||||
Ezfio.ezfio_array_of_list ~rank:1
|
Ezfio.ezfio_array_of_list ~rank:1
|
||||||
~dim:[| nucl_num |] ~data:labels
|
~dim:[| nucl_num |] ~data:labels
|
||||||
@ -70,7 +70,7 @@ end = struct
|
|||||||
in
|
in
|
||||||
let charges =
|
let charges =
|
||||||
Array.to_list charges
|
Array.to_list charges
|
||||||
|> List.map Charge.to_float
|
|> list_map Charge.to_float
|
||||||
in
|
in
|
||||||
Ezfio.ezfio_array_of_list ~rank:1
|
Ezfio.ezfio_array_of_list ~rank:1
|
||||||
~dim:[| nucl_num |] ~data:charges
|
~dim:[| nucl_num |] ~data:charges
|
||||||
@ -101,9 +101,9 @@ end = struct
|
|||||||
in
|
in
|
||||||
let coord = Array.to_list coord in
|
let coord = Array.to_list coord in
|
||||||
let coord =
|
let coord =
|
||||||
(List.map (fun x-> x.Point3d.x) coord) @
|
(list_map (fun x-> x.Point3d.x) coord) @
|
||||||
(List.map (fun x-> x.Point3d.y) coord) @
|
(list_map (fun x-> x.Point3d.y) coord) @
|
||||||
(List.map (fun x-> x.Point3d.z) coord)
|
(list_map (fun x-> x.Point3d.z) coord)
|
||||||
in
|
in
|
||||||
Ezfio.ezfio_array_of_list ~rank:2
|
Ezfio.ezfio_array_of_list ~rank:2
|
||||||
~dim:[| nucl_num ; 3 |] ~data:coord
|
~dim:[| nucl_num ; 3 |] ~data:coord
|
||||||
@ -159,11 +159,11 @@ nucl_charge = %s
|
|||||||
nucl_coord = %s
|
nucl_coord = %s
|
||||||
"
|
"
|
||||||
(Nucl_number.to_string b.nucl_num)
|
(Nucl_number.to_string b.nucl_num)
|
||||||
(b.nucl_label |> Array.to_list |> List.map
|
(b.nucl_label |> Array.to_list |> list_map
|
||||||
(Element.to_string) |> String.concat ", " )
|
(Element.to_string) |> String.concat ", " )
|
||||||
(b.nucl_charge |> Array.to_list |> List.map
|
(b.nucl_charge |> Array.to_list |> list_map
|
||||||
(Charge.to_string) |> String.concat ", " )
|
(Charge.to_string) |> String.concat ", " )
|
||||||
(b.nucl_coord |> Array.to_list |> List.map
|
(b.nucl_coord |> Array.to_list |> list_map
|
||||||
(Point3d.to_string ~units:Units.Bohr) |> String.concat "\n" )
|
(Point3d.to_string ~units:Units.Bohr) |> String.concat "\n" )
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@ -226,11 +226,11 @@ Nuclear coordinates in xyz format (Angstroms) ::
|
|||||||
let result =
|
let result =
|
||||||
{ nucl_num = List.length atom_list
|
{ nucl_num = List.length atom_list
|
||||||
|> Nucl_number.of_int ~max:nmax;
|
|> Nucl_number.of_int ~max:nmax;
|
||||||
nucl_label = List.map (fun x ->
|
nucl_label = list_map (fun x ->
|
||||||
x.Atom.element) atom_list |> Array.of_list ;
|
x.Atom.element) atom_list |> Array.of_list ;
|
||||||
nucl_charge = List.map (fun x ->
|
nucl_charge = list_map (fun x ->
|
||||||
x.Atom.charge ) atom_list |> Array.of_list ;
|
x.Atom.charge ) atom_list |> Array.of_list ;
|
||||||
nucl_coord = List.map (fun x ->
|
nucl_coord = list_map (fun x ->
|
||||||
x.Atom.coord ) atom_list |> Array.of_list ;
|
x.Atom.coord ) atom_list |> Array.of_list ;
|
||||||
}
|
}
|
||||||
in Some result
|
in Some result
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
open Qptypes
|
open Qptypes
|
||||||
|
open Qputils
|
||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
|
|
||||||
type t = (Symmetry.Xyz.t * Gto.t * Nucl_number.t ) list [@@deriving sexp]
|
type t = (Symmetry.Xyz.t * Gto.t * Nucl_number.t ) list [@@deriving sexp]
|
||||||
@ -39,7 +40,7 @@ let to_basis b =
|
|||||||
|
|
||||||
|
|
||||||
let to_string b =
|
let to_string b =
|
||||||
let middle = List.map (fun (x,y,z) ->
|
let middle = list_map (fun (x,y,z) ->
|
||||||
"( "^((string_of_int (Nucl_number.to_int z)))^", "^
|
"( "^((string_of_int (Nucl_number.to_int z)))^", "^
|
||||||
(Symmetry.Xyz.to_string x)^", "^(Gto.to_string y)
|
(Symmetry.Xyz.to_string x)^", "^(Gto.to_string y)
|
||||||
^" )"
|
^" )"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
open Qptypes
|
open Qptypes
|
||||||
|
open Qputils
|
||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
|
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ type t =
|
|||||||
|
|
||||||
let to_string x =
|
let to_string x =
|
||||||
let print_list l =
|
let print_list l =
|
||||||
let s = List.map (fun x-> MO_number.to_int x |> string_of_int ) l
|
let s = list_map (fun x-> MO_number.to_int x |> string_of_int ) l
|
||||||
|> (String.concat ", ")
|
|> (String.concat ", ")
|
||||||
in
|
in
|
||||||
"("^s^")"
|
"("^s^")"
|
||||||
@ -43,7 +44,7 @@ let of_string s =
|
|||||||
|
|
||||||
|
|
||||||
let _mo_number_list_of_range range =
|
let _mo_number_list_of_range range =
|
||||||
Range.of_string range |> List.map MO_number.of_int
|
Range.of_string range |> list_map MO_number.of_int
|
||||||
|
|
||||||
|
|
||||||
let create_core range = Core (_mo_number_list_of_range range)
|
let create_core range = Core (_mo_number_list_of_range range)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
open Qptypes
|
open Qptypes
|
||||||
|
open Qputils
|
||||||
|
|
||||||
(** New job : Request to create a new multi-tasked job *)
|
(** New job : Request to create a new multi-tasked job *)
|
||||||
|
|
||||||
@ -193,12 +194,12 @@ end = struct
|
|||||||
}
|
}
|
||||||
let create ~state ~task_ids =
|
let create ~state ~task_ids =
|
||||||
{ state = State.of_string state ;
|
{ state = State.of_string state ;
|
||||||
task_ids = List.map Id.Task.of_int task_ids
|
task_ids = list_map Id.Task.of_int task_ids
|
||||||
}
|
}
|
||||||
let to_string x =
|
let to_string x =
|
||||||
Printf.sprintf "del_task %s %s"
|
Printf.sprintf "del_task %s %s"
|
||||||
(State.to_string x.state)
|
(State.to_string x.state)
|
||||||
(String.concat "|" @@ List.map Id.Task.to_string x.task_ids)
|
(String.concat "|" @@ list_map Id.Task.to_string x.task_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -219,7 +220,7 @@ end = struct
|
|||||||
else "done"
|
else "done"
|
||||||
in
|
in
|
||||||
Printf.sprintf "del_task_reply %s %s"
|
Printf.sprintf "del_task_reply %s %s"
|
||||||
more (String.concat "|" @@ List.map Id.Task.to_string x.task_ids)
|
more (String.concat "|" @@ list_map Id.Task.to_string x.task_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -303,7 +304,7 @@ end = struct
|
|||||||
"get_tasks_reply ok"
|
"get_tasks_reply ok"
|
||||||
let to_string_list x =
|
let to_string_list x =
|
||||||
"get_tasks_reply ok" :: (
|
"get_tasks_reply ok" :: (
|
||||||
List.map (fun (task_id, task) ->
|
list_map (fun (task_id, task) ->
|
||||||
match task_id with
|
match task_id with
|
||||||
| Some task_id -> Printf.sprintf "%d %s" (Id.Task.to_int task_id) task
|
| Some task_id -> Printf.sprintf "%d %s" (Id.Task.to_int task_id) task
|
||||||
| None -> Printf.sprintf "0 terminate"
|
| None -> Printf.sprintf "0 terminate"
|
||||||
@ -408,14 +409,14 @@ end = struct
|
|||||||
let create ~state ~client_id ~task_ids =
|
let create ~state ~client_id ~task_ids =
|
||||||
{ client_id = Id.Client.of_int client_id ;
|
{ client_id = Id.Client.of_int client_id ;
|
||||||
state = State.of_string state ;
|
state = State.of_string state ;
|
||||||
task_ids = List.map Id.Task.of_int task_ids;
|
task_ids = list_map Id.Task.of_int task_ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
let to_string x =
|
let to_string x =
|
||||||
Printf.sprintf "task_done %s %d %s"
|
Printf.sprintf "task_done %s %d %s"
|
||||||
(State.to_string x.state)
|
(State.to_string x.state)
|
||||||
(Id.Client.to_int x.client_id)
|
(Id.Client.to_int x.client_id)
|
||||||
(String.concat "|" @@ List.map Id.Task.to_string x.task_ids)
|
(String.concat "|" @@ list_map Id.Task.to_string x.task_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
(** Terminate *)
|
(** Terminate *)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
open Qptypes
|
open Qptypes
|
||||||
|
open Qputils
|
||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
|
|
||||||
exception MultiplicityError of string
|
exception MultiplicityError of string
|
||||||
@ -96,7 +97,7 @@ let to_string_general ~f m =
|
|||||||
let title =
|
let title =
|
||||||
name m
|
name m
|
||||||
in
|
in
|
||||||
[ string_of_int n ; title ] @ (List.map f nuclei)
|
[ string_of_int n ; title ] @ (list_map f nuclei)
|
||||||
|> String.concat "\n"
|
|> String.concat "\n"
|
||||||
|
|
||||||
let to_string =
|
let to_string =
|
||||||
@ -112,7 +113,7 @@ let of_xyz_string
|
|||||||
s =
|
s =
|
||||||
let l = String_ext.split s ~on:'\n'
|
let l = String_ext.split s ~on:'\n'
|
||||||
|> List.filter (fun x -> x <> "")
|
|> List.filter (fun x -> x <> "")
|
||||||
|> List.map (fun x -> Atom.of_string units x)
|
|> list_map (fun x -> Atom.of_string units x)
|
||||||
in
|
in
|
||||||
let ne = ( get_charge {
|
let ne = ( get_charge {
|
||||||
nuclei=l ;
|
nuclei=l ;
|
||||||
@ -190,7 +191,7 @@ let of_file
|
|||||||
let distance_matrix molecule =
|
let distance_matrix molecule =
|
||||||
let coord =
|
let coord =
|
||||||
molecule.nuclei
|
molecule.nuclei
|
||||||
|> List.map (fun x -> x.Atom.coord)
|
|> list_map (fun x -> x.Atom.coord)
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
in
|
in
|
||||||
let n =
|
let n =
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
open Qptypes
|
open Qptypes
|
||||||
|
open Qputils
|
||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
|
|
||||||
type t = {
|
type t = {
|
||||||
@ -23,7 +24,7 @@ let of_string ~units s =
|
|||||||
let l = s
|
let l = s
|
||||||
|> String_ext.split ~on:' '
|
|> String_ext.split ~on:' '
|
||||||
|> List.filter (fun x -> x <> "")
|
|> List.filter (fun x -> x <> "")
|
||||||
|> List.map float_of_string
|
|> list_map float_of_string
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
in
|
in
|
||||||
{ x = l.(0) *. f ;
|
{ x = l.(0) *. f ;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
open Sexplib.Std
|
open Sexplib.Std
|
||||||
|
open Qputils
|
||||||
open Qptypes
|
open Qptypes
|
||||||
|
|
||||||
|
|
||||||
@ -81,7 +82,7 @@ let to_string_local = function
|
|||||||
| t ->
|
| t ->
|
||||||
"Local component:" ::
|
"Local component:" ::
|
||||||
( Printf.sprintf "%20s %8s %20s" "Coeff." "r^n" "Exp." ) ::
|
( Printf.sprintf "%20s %8s %20s" "Coeff." "r^n" "Exp." ) ::
|
||||||
( List.map (fun (l,c) -> Printf.sprintf "%20f %8d %20f"
|
( list_map (fun (l,c) -> Printf.sprintf "%20f %8d %20f"
|
||||||
(AO_coef.to_float c)
|
(AO_coef.to_float c)
|
||||||
(R_power.to_int l.GaussianPrimitive_local.r_power)
|
(R_power.to_int l.GaussianPrimitive_local.r_power)
|
||||||
(AO_expo.to_float l.GaussianPrimitive_local.expo)
|
(AO_expo.to_float l.GaussianPrimitive_local.expo)
|
||||||
@ -95,7 +96,7 @@ let to_string_non_local = function
|
|||||||
| t ->
|
| t ->
|
||||||
"Non-local component:" ::
|
"Non-local component:" ::
|
||||||
( Printf.sprintf "%20s %8s %20s %8s" "Coeff." "r^n" "Exp." "Proj") ::
|
( Printf.sprintf "%20s %8s %20s %8s" "Coeff." "r^n" "Exp." "Proj") ::
|
||||||
( List.map (fun (l,c) ->
|
( list_map (fun (l,c) ->
|
||||||
let p =
|
let p =
|
||||||
Positive_int.to_int l.GaussianPrimitive_non_local.proj
|
Positive_int.to_int l.GaussianPrimitive_non_local.proj
|
||||||
in
|
in
|
||||||
|
@ -30,7 +30,7 @@ let bit_kind_size = lazy (
|
|||||||
in
|
in
|
||||||
begin match (String_ext.rsplit2 ~on:':' line) with
|
begin match (String_ext.rsplit2 ~on:':' line) with
|
||||||
| Some (_ ,buffer) ->
|
| Some (_ ,buffer) ->
|
||||||
begin match (String_ext.split ~on:'=' buffer |> List.map String.trim) with
|
begin match (String_ext.split ~on:'=' buffer |> list_map String.trim) with
|
||||||
| ["bit_kind_size"; x] ->
|
| ["bit_kind_size"; x] ->
|
||||||
int_of_string x |> Bit_kind_size.of_int
|
int_of_string x |> Bit_kind_size.of_int
|
||||||
| _ -> get_data tail
|
| _ -> get_data tail
|
||||||
@ -58,7 +58,7 @@ let executables = lazy (
|
|||||||
result
|
result
|
||||||
in
|
in
|
||||||
lines
|
lines
|
||||||
|> List.map (fun x ->
|
|> list_map (fun x ->
|
||||||
let e = String_ext.split ~on:' ' x
|
let e = String_ext.split ~on:' ' x
|
||||||
|> List.filter (fun x -> x <> "")
|
|> List.filter (fun x -> x <> "")
|
||||||
in
|
in
|
||||||
|
@ -53,3 +53,6 @@ let input_lines ic =
|
|||||||
|
|
||||||
let string_of_string s = s
|
let string_of_string s = s
|
||||||
|
|
||||||
|
let list_map f l =
|
||||||
|
List.rev_map f l
|
||||||
|
|> List.rev
|
||||||
|
@ -38,7 +38,7 @@ let dummy_centers ~threshold ~molecule ~nuclei =
|
|||||||
| _ -> assert false
|
| _ -> assert false
|
||||||
in
|
in
|
||||||
aux [] (n-1,n-1)
|
aux [] (n-1,n-1)
|
||||||
|> List.map (fun (i,x,j,y,r) ->
|
|> list_map (fun (i,x,j,y,r) ->
|
||||||
let f =
|
let f =
|
||||||
x /. (x +. y)
|
x /. (x +. y)
|
||||||
in
|
in
|
||||||
@ -270,7 +270,7 @@ let run ?o b au c d m p cart xyz_file =
|
|||||||
|
|
||||||
(* Write Pseudo *)
|
(* Write Pseudo *)
|
||||||
let pseudo =
|
let pseudo =
|
||||||
List.map (fun x ->
|
list_map (fun x ->
|
||||||
match pseudo_channel x.Atom.element with
|
match pseudo_channel x.Atom.element with
|
||||||
| Some channel -> Pseudo.read_element channel x.Atom.element
|
| Some channel -> Pseudo.read_element channel x.Atom.element
|
||||||
| None -> Pseudo.empty x.Atom.element
|
| None -> Pseudo.empty x.Atom.element
|
||||||
@ -292,7 +292,7 @@ let run ?o b au c d m p cart xyz_file =
|
|||||||
|> Elec_beta_number.of_int;
|
|> Elec_beta_number.of_int;
|
||||||
Molecule.nuclei =
|
Molecule.nuclei =
|
||||||
let charges =
|
let charges =
|
||||||
List.map (fun x -> Positive_int.to_int x.Pseudo.n_elec
|
list_map (fun x -> Positive_int.to_int x.Pseudo.n_elec
|
||||||
|> Float.of_int) pseudo
|
|> Float.of_int) pseudo
|
||||||
|> Array.of_list
|
|> Array.of_list
|
||||||
in
|
in
|
||||||
@ -315,13 +315,13 @@ let run ?o b au c d m p cart xyz_file =
|
|||||||
|
|
||||||
(* Write Nuclei *)
|
(* Write Nuclei *)
|
||||||
let labels =
|
let labels =
|
||||||
List.map (fun x->Element.to_string x.Atom.element) nuclei
|
list_map (fun x->Element.to_string x.Atom.element) nuclei
|
||||||
and charges =
|
and charges =
|
||||||
List.map (fun x-> Atom.(Charge.to_float x.charge)) nuclei
|
list_map (fun x-> Atom.(Charge.to_float x.charge)) nuclei
|
||||||
and coords =
|
and coords =
|
||||||
(List.map (fun x-> x.Atom.coord.Point3d.x) nuclei) @
|
(list_map (fun x-> x.Atom.coord.Point3d.x) nuclei) @
|
||||||
(List.map (fun x-> x.Atom.coord.Point3d.y) nuclei) @
|
(list_map (fun x-> x.Atom.coord.Point3d.y) nuclei) @
|
||||||
(List.map (fun x-> x.Atom.coord.Point3d.z) nuclei) in
|
(list_map (fun x-> x.Atom.coord.Point3d.z) nuclei) in
|
||||||
let nucl_num = (List.length labels) in
|
let nucl_num = (List.length labels) in
|
||||||
Ezfio.set_nuclei_nucl_num nucl_num ;
|
Ezfio.set_nuclei_nucl_num nucl_num ;
|
||||||
Ezfio.set_nuclei_nucl_label (Ezfio.ezfio_array_of_list
|
Ezfio.set_nuclei_nucl_label (Ezfio.ezfio_array_of_list
|
||||||
@ -365,7 +365,7 @@ let run ?o b au c d m p cart xyz_file =
|
|||||||
|
|
||||||
let kmax =
|
let kmax =
|
||||||
Array.init (lmax+1) (fun i->
|
Array.init (lmax+1) (fun i->
|
||||||
List.map (fun x ->
|
list_map (fun x ->
|
||||||
List.filter (fun (y,_) ->
|
List.filter (fun (y,_) ->
|
||||||
(Positive_int.to_int y.Pseudo.GaussianPrimitive_non_local.proj) = i)
|
(Positive_int.to_int y.Pseudo.GaussianPrimitive_non_local.proj) = i)
|
||||||
x.Pseudo.non_local
|
x.Pseudo.non_local
|
||||||
@ -478,7 +478,7 @@ let run ?o b au c d m p cart xyz_file =
|
|||||||
in
|
in
|
||||||
let result = do_work [] 1 nuclei
|
let result = do_work [] 1 nuclei
|
||||||
|> List.rev
|
|> List.rev
|
||||||
|> List.map (fun (x,i) ->
|
|> list_map (fun (x,i) ->
|
||||||
try
|
try
|
||||||
let e =
|
let e =
|
||||||
match x.Atom.element with
|
match x.Atom.element with
|
||||||
@ -512,30 +512,30 @@ let run ?o b au c d m p cart xyz_file =
|
|||||||
let ao_num = List.length long_basis in
|
let ao_num = List.length long_basis in
|
||||||
Ezfio.set_ao_basis_ao_num ao_num;
|
Ezfio.set_ao_basis_ao_num ao_num;
|
||||||
Ezfio.set_ao_basis_ao_basis b;
|
Ezfio.set_ao_basis_ao_basis b;
|
||||||
let ao_prim_num = List.map (fun (_,g,_) -> List.length g.Gto.lc) long_basis
|
let ao_prim_num = list_map (fun (_,g,_) -> List.length g.Gto.lc) long_basis
|
||||||
and ao_nucl = List.map (fun (_,_,n) -> Nucl_number.to_int n) long_basis
|
and ao_nucl = list_map (fun (_,_,n) -> Nucl_number.to_int n) long_basis
|
||||||
and ao_power=
|
and ao_power=
|
||||||
let l = List.map (fun (x,_,_) -> x) long_basis in
|
let l = list_map (fun (x,_,_) -> x) long_basis in
|
||||||
(List.map (fun t -> Positive_int.to_int Symmetry.Xyz.(t.x)) l)@
|
(list_map (fun t -> Positive_int.to_int Symmetry.Xyz.(t.x)) l)@
|
||||||
(List.map (fun t -> Positive_int.to_int Symmetry.Xyz.(t.y)) l)@
|
(list_map (fun t -> Positive_int.to_int Symmetry.Xyz.(t.y)) l)@
|
||||||
(List.map (fun t -> Positive_int.to_int Symmetry.Xyz.(t.z)) l)
|
(list_map (fun t -> Positive_int.to_int Symmetry.Xyz.(t.z)) l)
|
||||||
in
|
in
|
||||||
let ao_prim_num_max = List.fold_left (fun s x ->
|
let ao_prim_num_max = List.fold_left (fun s x ->
|
||||||
if x > s then x
|
if x > s then x
|
||||||
else s) 0 ao_prim_num
|
else s) 0 ao_prim_num
|
||||||
in
|
in
|
||||||
let gtos =
|
let gtos =
|
||||||
List.map (fun (_,x,_) -> x) long_basis
|
list_map (fun (_,x,_) -> x) long_basis
|
||||||
in
|
in
|
||||||
|
|
||||||
let create_expo_coef ec =
|
let create_expo_coef ec =
|
||||||
let coefs =
|
let coefs =
|
||||||
begin match ec with
|
begin match ec with
|
||||||
| `Coefs -> List.map (fun x->
|
| `Coefs -> list_map (fun x->
|
||||||
List.map (fun (_,coef) ->
|
list_map (fun (_,coef) ->
|
||||||
AO_coef.to_float coef) x.Gto.lc) gtos
|
AO_coef.to_float coef) x.Gto.lc) gtos
|
||||||
| `Expos -> List.map (fun x->
|
| `Expos -> list_map (fun x->
|
||||||
List.map (fun (prim,_) -> AO_expo.to_float
|
list_map (fun (prim,_) -> AO_expo.to_float
|
||||||
prim.GaussianPrimitive.expo) x.Gto.lc) gtos
|
prim.GaussianPrimitive.expo) x.Gto.lc) gtos
|
||||||
end
|
end
|
||||||
in
|
in
|
||||||
|
@ -55,3 +55,15 @@ doc: If |true|, use |AOs| in Cartesian coordinates (6d,10f,...)
|
|||||||
interface: ezfio, provider
|
interface: ezfio, provider
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
|
[ao_normalized]
|
||||||
|
type: logical
|
||||||
|
doc: Use normalized basis functions
|
||||||
|
interface: ezfio, provider
|
||||||
|
default: true
|
||||||
|
|
||||||
|
[primitives_normalized]
|
||||||
|
type: logical
|
||||||
|
doc: Use normalized primitive functions
|
||||||
|
interface: ezfio, provider
|
||||||
|
default: true
|
||||||
|
|
||||||
|
@ -20,25 +20,38 @@ END_PROVIDER
|
|||||||
C_A(2) = 0.d0
|
C_A(2) = 0.d0
|
||||||
C_A(3) = 0.d0
|
C_A(3) = 0.d0
|
||||||
ao_coef_normalized = 0.d0
|
ao_coef_normalized = 0.d0
|
||||||
|
|
||||||
do i=1,ao_num
|
do i=1,ao_num
|
||||||
|
|
||||||
powA(1) = ao_power(i,1)
|
powA(1) = ao_power(i,1)
|
||||||
powA(2) = ao_power(i,2)
|
powA(2) = ao_power(i,2)
|
||||||
powA(3) = ao_power(i,3)
|
powA(3) = ao_power(i,3)
|
||||||
|
|
||||||
do j=1,ao_prim_num(i)
|
! Normalization of the primitives
|
||||||
call overlap_gaussian_xyz(C_A,C_A,ao_expo(i,j),ao_expo(i,j),powA,powA,overlap_x,overlap_y,overlap_z,norm,nz)
|
if (primitives_normalized) then
|
||||||
ao_coef_normalized(i,j) = ao_coef(i,j)/sqrt(norm)
|
do j=1,ao_prim_num(i)
|
||||||
enddo
|
call overlap_gaussian_xyz(C_A,C_A,ao_expo(i,j),ao_expo(i,j),powA,powA,overlap_x,overlap_y,overlap_z,norm,nz)
|
||||||
|
ao_coef_normalized(i,j) = ao_coef(i,j)/sqrt(norm)
|
||||||
|
enddo
|
||||||
|
else
|
||||||
|
do j=1,ao_prim_num(i)
|
||||||
|
ao_coef_normalized(i,j) = ao_coef(i,j)
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
|
|
||||||
! Normalization of the contracted basis functions
|
! Normalization of the contracted basis functions
|
||||||
norm = 0.d0
|
if (ao_normalized) then
|
||||||
do j=1,ao_prim_num(i)
|
norm = 0.d0
|
||||||
do k=1,ao_prim_num(i)
|
do j=1,ao_prim_num(i)
|
||||||
call overlap_gaussian_xyz(C_A,C_A,ao_expo(i,j),ao_expo(i,k),powA,powA,overlap_x,overlap_y,overlap_z,c,nz)
|
do k=1,ao_prim_num(i)
|
||||||
norm = norm+c*ao_coef_normalized(i,j)*ao_coef_normalized(i,k)
|
call overlap_gaussian_xyz(C_A,C_A,ao_expo(i,j),ao_expo(i,k),powA,powA,overlap_x,overlap_y,overlap_z,c,nz)
|
||||||
enddo
|
norm = norm+c*ao_coef_normalized(i,j)*ao_coef_normalized(i,k)
|
||||||
enddo
|
enddo
|
||||||
ao_coef_normalization_factor(i) = 1.d0/sqrt(norm)
|
enddo
|
||||||
|
ao_coef_normalization_factor(i) = 1.d0/sqrt(norm)
|
||||||
|
else
|
||||||
|
ao_coef_normalization_factor(i) = 1.d0
|
||||||
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
@ -79,7 +79,7 @@ BEGIN_PROVIDER [ double precision, ao_cart_to_sphe_inv, (ao_cart_to_sphe_num,ao_
|
|||||||
|
|
||||||
call get_pseudo_inverse(ao_cart_to_sphe_coef,size(ao_cart_to_sphe_coef,1),&
|
call get_pseudo_inverse(ao_cart_to_sphe_coef,size(ao_cart_to_sphe_coef,1),&
|
||||||
ao_num,ao_cart_to_sphe_num, &
|
ao_num,ao_cart_to_sphe_num, &
|
||||||
ao_cart_to_sphe_inv, size(ao_cart_to_sphe_inv,1))
|
ao_cart_to_sphe_inv, size(ao_cart_to_sphe_inv,1), lin_dep_cutoff)
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
@ -107,16 +107,13 @@ END_PROVIDER
|
|||||||
ao_ortho_canonical_coef(i,i) = 1.d0
|
ao_ortho_canonical_coef(i,i) = 1.d0
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!call ortho_lowdin(ao_overlap,size(ao_overlap,1),ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1),ao_num)
|
call write_double(6, lin_dep_cutoff, "Linear dependencies cut-off")
|
||||||
!ao_ortho_canonical_num=ao_num
|
|
||||||
!return
|
|
||||||
|
|
||||||
if (ao_cartesian) then
|
if (ao_cartesian) then
|
||||||
|
|
||||||
ao_ortho_canonical_num = ao_num
|
ao_ortho_canonical_num = ao_num
|
||||||
call ortho_canonical(ao_overlap,size(ao_overlap,1), &
|
call ortho_canonical(ao_overlap,size(ao_overlap,1), &
|
||||||
ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1), &
|
ao_num,ao_ortho_canonical_coef,size(ao_ortho_canonical_coef,1), &
|
||||||
ao_ortho_canonical_num)
|
ao_ortho_canonical_num, lin_dep_cutoff)
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -131,7 +128,7 @@ END_PROVIDER
|
|||||||
|
|
||||||
ao_ortho_canonical_num = ao_cart_to_sphe_num
|
ao_ortho_canonical_num = ao_cart_to_sphe_num
|
||||||
call ortho_canonical(ao_cart_to_sphe_overlap, size(ao_cart_to_sphe_overlap,1), &
|
call ortho_canonical(ao_cart_to_sphe_overlap, size(ao_cart_to_sphe_overlap,1), &
|
||||||
ao_cart_to_sphe_num, S, size(S,1), ao_ortho_canonical_num)
|
ao_cart_to_sphe_num, S, size(S,1), ao_ortho_canonical_num, lin_dep_cutoff)
|
||||||
|
|
||||||
call dgemm('N','N', ao_num, ao_ortho_canonical_num, ao_cart_to_sphe_num, 1.d0, &
|
call dgemm('N','N', ao_num, ao_ortho_canonical_num, ao_cart_to_sphe_num, 1.d0, &
|
||||||
ao_cart_to_sphe_coef, size(ao_cart_to_sphe_coef,1), &
|
ao_cart_to_sphe_coef, size(ao_cart_to_sphe_coef,1), &
|
||||||
|
@ -162,7 +162,8 @@ BEGIN_PROVIDER [ double precision, S_inv,(ao_num,ao_num) ]
|
|||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Inverse of the overlap matrix
|
! Inverse of the overlap matrix
|
||||||
END_DOC
|
END_DOC
|
||||||
call get_pseudo_inverse(ao_overlap,size(ao_overlap,1),ao_num,ao_num,S_inv,size(S_inv,1))
|
call get_pseudo_inverse(ao_overlap,size(ao_overlap,1),ao_num,ao_num,S_inv, &
|
||||||
|
size(S_inv,1),lin_dep_cutoff)
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ complex*16, S_inv_complex,(ao_num,ao_num) ]
|
BEGIN_PROVIDER [ complex*16, S_inv_complex,(ao_num,ao_num) ]
|
||||||
@ -170,8 +171,8 @@ BEGIN_PROVIDER [ complex*16, S_inv_complex,(ao_num,ao_num) ]
|
|||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Inverse of the overlap matrix
|
! Inverse of the overlap matrix
|
||||||
END_DOC
|
END_DOC
|
||||||
call get_pseudo_inverse_complex(ao_overlap_complex, &
|
call get_pseudo_inverse_complex(ao_overlap_complex, size(ao_overlap_complex,1),&
|
||||||
size(ao_overlap_complex,1),ao_num,ao_num,S_inv_complex,size(S_inv_complex,1))
|
ao_num,ao_num,S_inv_complex,size(S_inv_complex,1),lin_dep_cutoff)
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, S_half_inv, (AO_num,AO_num) ]
|
BEGIN_PROVIDER [ double precision, S_half_inv, (AO_num,AO_num) ]
|
||||||
|
@ -3,6 +3,8 @@ BEGIN_PROVIDER [ double precision, ao_integrals_n_e, (ao_num,ao_num)]
|
|||||||
! Nucleus-electron interaction, in the |AO| basis set.
|
! Nucleus-electron interaction, in the |AO| basis set.
|
||||||
!
|
!
|
||||||
! :math:`\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle`
|
! :math:`\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle`
|
||||||
|
!
|
||||||
|
! These integrals also contain the pseudopotential integrals.
|
||||||
END_DOC
|
END_DOC
|
||||||
implicit none
|
implicit none
|
||||||
double precision :: alpha, beta, gama, delta
|
double precision :: alpha, beta, gama, delta
|
||||||
@ -75,11 +77,11 @@ BEGIN_PROVIDER [ double precision, ao_integrals_n_e, (ao_num,ao_num)]
|
|||||||
|
|
||||||
!$OMP END DO
|
!$OMP END DO
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
endif
|
IF (DO_PSEUDO) THEN
|
||||||
|
ao_integrals_n_e += ao_pseudo_integrals
|
||||||
|
ENDIF
|
||||||
|
|
||||||
IF (DO_PSEUDO) THEN
|
endif
|
||||||
ao_integrals_n_e += ao_pseudo_integrals
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
if (write_ao_integrals_n_e) then
|
if (write_ao_integrals_n_e) then
|
||||||
|
@ -238,9 +238,6 @@ ntotB=n_b(1)+n_b(2)+n_b(3)
|
|||||||
ntot=ntotA+ntotB
|
ntot=ntotA+ntotB
|
||||||
|
|
||||||
nkl_max=4
|
nkl_max=4
|
||||||
!=!=!=!=!=!=!=!=!=!
|
|
||||||
! A l l o c a t e !
|
|
||||||
!=!=!=!=!=!=!=!=!=!
|
|
||||||
|
|
||||||
allocate (array_coefs_A(0:ntot,3))
|
allocate (array_coefs_A(0:ntot,3))
|
||||||
allocate (array_coefs_B(0:ntot,3))
|
allocate (array_coefs_B(0:ntot,3))
|
||||||
@ -254,16 +251,8 @@ allocate (array_I_B(-(lmax+ntot):lmax+ntot,0:lmax+ntot,0:ntot,0:ntot,0:ntot))
|
|||||||
if(ac.eq.0.d0.and.bc.eq.0.d0)then
|
if(ac.eq.0.d0.and.bc.eq.0.d0)then
|
||||||
|
|
||||||
|
|
||||||
!=!=!=!=!=!
|
|
||||||
! I n i t !
|
|
||||||
!=!=!=!=!=!
|
|
||||||
|
|
||||||
accu=0.d0
|
accu=0.d0
|
||||||
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
! c a l c u l !
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
|
|
||||||
do k=1,kmax
|
do k=1,kmax
|
||||||
do l=0,lmax
|
do l=0,lmax
|
||||||
ktot=ntot+n_kl(k,l)
|
ktot=ntot+n_kl(k,l)
|
||||||
@ -278,18 +267,10 @@ if(ac.eq.0.d0.and.bc.eq.0.d0)then
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!
|
|
||||||
! E n d !
|
|
||||||
!=!=!=!=!
|
|
||||||
|
|
||||||
Vpseudo=accu*fourpi
|
Vpseudo=accu*fourpi
|
||||||
|
|
||||||
else if(ac.ne.0.d0.and.bc.ne.0.d0)then
|
else if(ac.ne.0.d0.and.bc.ne.0.d0)then
|
||||||
|
|
||||||
!=!=!=!=!=!
|
|
||||||
! I n i t !
|
|
||||||
!=!=!=!=!=!
|
|
||||||
|
|
||||||
f=fourpi*fourpi
|
f=fourpi*fourpi
|
||||||
|
|
||||||
theta_AC0=dacos( (a(3)-c(3))/ac )
|
theta_AC0=dacos( (a(3)-c(3))/ac )
|
||||||
@ -330,10 +311,6 @@ else if(ac.ne.0.d0.and.bc.ne.0.d0)then
|
|||||||
array_coefs_B(k3p,3) = binom_func(n_b(3),k3p)*(c(3)-b(3))**(n_b(3)-k3p)
|
array_coefs_B(k3p,3) = binom_func(n_b(3),k3p)*(c(3)-b(3))**(n_b(3)-k3p)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
! c a l c u l !
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
|
|
||||||
accu=0.d0
|
accu=0.d0
|
||||||
do l=0,lmax
|
do l=0,lmax
|
||||||
do m=-l,l
|
do m=-l,l
|
||||||
@ -408,18 +385,10 @@ else if(ac.ne.0.d0.and.bc.ne.0.d0)then
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!
|
|
||||||
! E n d !
|
|
||||||
!=!=!=!=!
|
|
||||||
|
|
||||||
Vpseudo=f*accu
|
Vpseudo=f*accu
|
||||||
|
|
||||||
else if(ac.eq.0.d0.and.bc.ne.0.d0)then
|
else if(ac.eq.0.d0.and.bc.ne.0.d0)then
|
||||||
|
|
||||||
!=!=!=!=!=!
|
|
||||||
! I n i t !
|
|
||||||
!=!=!=!=!=!
|
|
||||||
|
|
||||||
f=fourpi**1.5d0
|
f=fourpi**1.5d0
|
||||||
theta_BC0=dacos( (b(3)-c(3))/bc )
|
theta_BC0=dacos( (b(3)-c(3))/bc )
|
||||||
phi_BC0=datan2((b(2)-c(2))/bc,(b(1)-c(1))/bc)
|
phi_BC0=datan2((b(2)-c(2))/bc,(b(1)-c(1))/bc)
|
||||||
@ -448,10 +417,6 @@ else if(ac.eq.0.d0.and.bc.ne.0.d0)then
|
|||||||
array_coefs_B(k3p,3) = binom_func(n_b(3),k3p)*(c(3)-b(3))**(n_b(3)-k3p)
|
array_coefs_B(k3p,3) = binom_func(n_b(3),k3p)*(c(3)-b(3))**(n_b(3)-k3p)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
! c a l c u l !
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
|
|
||||||
accu=0.d0
|
accu=0.d0
|
||||||
do l=0,lmax
|
do l=0,lmax
|
||||||
do m=-l,l
|
do m=-l,l
|
||||||
@ -498,18 +463,10 @@ else if(ac.eq.0.d0.and.bc.ne.0.d0)then
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!
|
|
||||||
! E n d !
|
|
||||||
!=!=!=!=!
|
|
||||||
|
|
||||||
Vpseudo=f*accu
|
Vpseudo=f*accu
|
||||||
|
|
||||||
else if(ac.ne.0.d0.and.bc.eq.0.d0)then
|
else if(ac.ne.0.d0.and.bc.eq.0.d0)then
|
||||||
|
|
||||||
!=!=!=!=!=!
|
|
||||||
! I n i t !
|
|
||||||
!=!=!=!=!=!
|
|
||||||
|
|
||||||
f=fourpi**1.5d0
|
f=fourpi**1.5d0
|
||||||
theta_AC0=dacos( (a(3)-c(3))/ac )
|
theta_AC0=dacos( (a(3)-c(3))/ac )
|
||||||
phi_AC0=datan2((a(2)-c(2))/ac,(a(1)-c(1))/ac)
|
phi_AC0=datan2((a(2)-c(2))/ac,(a(1)-c(1))/ac)
|
||||||
@ -538,10 +495,6 @@ else if(ac.ne.0.d0.and.bc.eq.0.d0)then
|
|||||||
array_coefs_A(k3,3) = binom_func(n_a(3),k3)*(c(3)-a(3))**(n_a(3)-k3)
|
array_coefs_A(k3,3) = binom_func(n_a(3),k3)*(c(3)-a(3))**(n_a(3)-k3)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
! c a l c u l !
|
|
||||||
!=!=!=!=!=!=!=!
|
|
||||||
|
|
||||||
accu=0.d0
|
accu=0.d0
|
||||||
do l=0,lmax
|
do l=0,lmax
|
||||||
do m=-l,l
|
do m=-l,l
|
||||||
@ -587,10 +540,6 @@ else if(ac.ne.0.d0.and.bc.eq.0.d0)then
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!=!=!=!=!
|
|
||||||
! E n d !
|
|
||||||
!=!=!=!=!
|
|
||||||
|
|
||||||
Vpseudo=f*accu
|
Vpseudo=f*accu
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -1885,7 +1834,7 @@ double precision function int_prod_bessel(l,gam,n,m,a,b,arg)
|
|||||||
pi=dacos(-1.d0)
|
pi=dacos(-1.d0)
|
||||||
a_over_b_square = (a/b)**2
|
a_over_b_square = (a/b)**2
|
||||||
|
|
||||||
! Calcul first term of the sequence
|
! First term of the sequence
|
||||||
|
|
||||||
term_a =dble_fact(nlm-1) / (dble_fact(n_1)*dble_fact(m_1))
|
term_a =dble_fact(nlm-1) / (dble_fact(n_1)*dble_fact(m_1))
|
||||||
expo=0.5d0*dfloat(nlm+1)
|
expo=0.5d0*dfloat(nlm+1)
|
||||||
@ -1894,7 +1843,7 @@ double precision function int_prod_bessel(l,gam,n,m,a,b,arg)
|
|||||||
s_0_0=term_rap*a**(n)*b**(m)
|
s_0_0=term_rap*a**(n)*b**(m)
|
||||||
if(mod(nlm,2).eq.0)s_0_0=s_0_0*dsqrt(pi*.5d0)
|
if(mod(nlm,2).eq.0)s_0_0=s_0_0*dsqrt(pi*.5d0)
|
||||||
|
|
||||||
! Initialise the first recurence terme for the q loop
|
! Initialize the first recurrence term for the q loop
|
||||||
s_q_0 = s_0_0
|
s_q_0 = s_0_0
|
||||||
|
|
||||||
|
|
||||||
@ -1914,6 +1863,10 @@ double precision function int_prod_bessel(l,gam,n,m,a,b,arg)
|
|||||||
two_qkmp1 = 2.d0*(qk+mk)+1.d0
|
two_qkmp1 = 2.d0*(qk+mk)+1.d0
|
||||||
do k=0,q-1
|
do k=0,q-1
|
||||||
s_q_k = two_qkmp1*qk*inverses(k)*s_q_k
|
s_q_k = two_qkmp1*qk*inverses(k)*s_q_k
|
||||||
|
! if (s_q_k < 1.d-32) then
|
||||||
|
! s_q_k = 0.d0
|
||||||
|
! exit
|
||||||
|
! endif
|
||||||
sum=sum+s_q_k
|
sum=sum+s_q_k
|
||||||
two_qkmp1 = two_qkmp1-2.d0
|
two_qkmp1 = two_qkmp1-2.d0
|
||||||
qk = qk-1.d0
|
qk = qk-1.d0
|
||||||
|
13
src/ao_one_e_ints/screening.irp.f
Normal file
13
src/ao_one_e_ints/screening.irp.f
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
logical function ao_one_e_integral_zero(i,k)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: i,k
|
||||||
|
|
||||||
|
ao_one_e_integral_zero = .False.
|
||||||
|
if (.not.((io_ao_integrals_overlap/='None').or.is_periodic)) then
|
||||||
|
if (ao_overlap_abs(i,k) < ao_integrals_threshold) then
|
||||||
|
ao_one_e_integral_zero = .True.
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
end
|
||||||
|
|
@ -85,9 +85,10 @@ double precision function get_ao_two_e_integral_erf(i,j,k,l,map) result(result)
|
|||||||
type(map_type), intent(inout) :: map
|
type(map_type), intent(inout) :: map
|
||||||
integer :: ii
|
integer :: ii
|
||||||
real(integral_kind) :: tmp
|
real(integral_kind) :: tmp
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_erf_in_map ao_integrals_erf_cache ao_integrals_erf_cache_min
|
PROVIDE ao_two_e_integrals_erf_in_map ao_integrals_erf_cache ao_integrals_erf_cache_min
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
tmp = 0.d0
|
tmp = 0.d0
|
||||||
else if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < ao_integrals_threshold) then
|
else if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < ao_integrals_threshold) then
|
||||||
tmp = 0.d0
|
tmp = 0.d0
|
||||||
@ -127,10 +128,11 @@ subroutine get_ao_two_e_integrals_erf(j,k,l,sze,out_val)
|
|||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: thresh
|
double precision :: thresh
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_erf_in_map ao_integrals_erf_map
|
PROVIDE ao_two_e_integrals_erf_in_map ao_integrals_erf_map
|
||||||
thresh = ao_integrals_threshold
|
thresh = ao_integrals_threshold
|
||||||
|
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -156,11 +158,12 @@ subroutine get_ao_two_e_integrals_erf_non_zero(j,k,l,sze,out_val,out_val_index,n
|
|||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: thresh,tmp
|
double precision :: thresh,tmp
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_erf_in_map
|
PROVIDE ao_two_e_integrals_erf_in_map
|
||||||
thresh = ao_integrals_threshold
|
thresh = ao_integrals_threshold
|
||||||
|
|
||||||
non_zero_int = 0
|
non_zero_int = 0
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
@ -291,8 +291,10 @@ subroutine compute_ao_two_e_integrals_erf(j,k,l,sze,buffer_value)
|
|||||||
double precision :: ao_two_e_integral_erf
|
double precision :: ao_two_e_integral_erf
|
||||||
|
|
||||||
integer :: i
|
integer :: i
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
|
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
buffer_value = 0._integral_kind
|
buffer_value = 0._integral_kind
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -302,7 +304,7 @@ subroutine compute_ao_two_e_integrals_erf(j,k,l,sze,buffer_value)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
do i = 1, ao_num
|
do i = 1, ao_num
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thresh) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
buffer_value(i) = 0._integral_kind
|
buffer_value(i) = 0._integral_kind
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
@ -618,6 +620,7 @@ subroutine compute_ao_integrals_erf_jl(j,l,n_integrals,buffer_i,buffer_value)
|
|||||||
double precision :: integral, wall_0
|
double precision :: integral, wall_0
|
||||||
double precision :: thr
|
double precision :: thr
|
||||||
integer :: kk, m, j1, i1
|
integer :: kk, m, j1, i1
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
|
|
||||||
thr = ao_integrals_threshold
|
thr = ao_integrals_threshold
|
||||||
|
|
||||||
@ -634,7 +637,7 @@ subroutine compute_ao_integrals_erf_jl(j,l,n_integrals,buffer_i,buffer_value)
|
|||||||
if (i1 > j1) then
|
if (i1 > j1) then
|
||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thr) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < thr ) then
|
if (ao_two_e_integral_erf_schwartz(i,k)*ao_two_e_integral_erf_schwartz(j,l) < thr ) then
|
||||||
|
@ -333,11 +333,10 @@ double precision function get_ao_two_e_integral(i,j,k,l,map) result(result)
|
|||||||
type(map_type), intent(inout) :: map
|
type(map_type), intent(inout) :: map
|
||||||
integer :: ii
|
integer :: ii
|
||||||
real(integral_kind) :: tmp
|
real(integral_kind) :: tmp
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_in_map ao_integrals_cache ao_integrals_cache_min
|
PROVIDE ao_two_e_integrals_in_map ao_integrals_cache ao_integrals_cache_min
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
tmp = 0.d0
|
|
||||||
else if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < ao_integrals_threshold) then
|
|
||||||
tmp = 0.d0
|
tmp = 0.d0
|
||||||
else
|
else
|
||||||
ii = l-ao_integrals_cache_min
|
ii = l-ao_integrals_cache_min
|
||||||
@ -427,9 +426,8 @@ complex*16 function get_ao_two_e_integral_periodic(i,j,k,l,map) result(result)
|
|||||||
complex(integral_kind) :: tmp
|
complex(integral_kind) :: tmp
|
||||||
PROVIDE ao_two_e_integrals_in_map ao_integrals_cache_periodic ao_integrals_cache_min
|
PROVIDE ao_two_e_integrals_in_map ao_integrals_cache_periodic ao_integrals_cache_min
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < ao_integrals_threshold ) then
|
logical, external :: ao_two_e_integral_zero
|
||||||
tmp = (0.d0,0.d0)
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
else if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < ao_integrals_threshold) then
|
|
||||||
tmp = (0.d0,0.d0)
|
tmp = (0.d0,0.d0)
|
||||||
else
|
else
|
||||||
ii = l-ao_integrals_cache_min
|
ii = l-ao_integrals_cache_min
|
||||||
@ -481,11 +479,10 @@ subroutine get_ao_two_e_integrals(j,k,l,sze,out_val)
|
|||||||
|
|
||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: thresh
|
logical, external :: ao_one_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_in_map ao_integrals_map
|
PROVIDE ao_two_e_integrals_in_map ao_integrals_map
|
||||||
thresh = ao_integrals_threshold
|
|
||||||
|
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -511,11 +508,10 @@ subroutine get_ao_two_e_integrals_periodic(j,k,l,sze,out_val)
|
|||||||
|
|
||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: thresh
|
logical, external :: ao_one_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_in_map ao_integrals_map
|
PROVIDE ao_two_e_integrals_in_map ao_integrals_map
|
||||||
thresh = ao_integrals_threshold
|
|
||||||
|
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -540,12 +536,13 @@ subroutine get_ao_two_e_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_z
|
|||||||
|
|
||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: thresh,tmp
|
double precision :: tmp
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
PROVIDE ao_two_e_integrals_in_map
|
PROVIDE ao_two_e_integrals_in_map
|
||||||
thresh = ao_integrals_threshold
|
|
||||||
|
|
||||||
non_zero_int = 0
|
non_zero_int = 0
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -555,12 +552,12 @@ subroutine get_ao_two_e_integrals_non_zero(j,k,l,sze,out_val,out_val_index,non_z
|
|||||||
integer, external :: ao_l4
|
integer, external :: ao_l4
|
||||||
double precision, external :: ao_two_e_integral
|
double precision, external :: ao_two_e_integral
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thresh) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
call two_e_integrals_index(i,j,k,l,hash)
|
call two_e_integrals_index(i,j,k,l,hash)
|
||||||
call map_get(ao_integrals_map, hash,tmp)
|
call map_get(ao_integrals_map, hash,tmp)
|
||||||
if (dabs(tmp) < thresh ) cycle
|
if (dabs(tmp) < ao_integrals_threshold) cycle
|
||||||
non_zero_int = non_zero_int+1
|
non_zero_int = non_zero_int+1
|
||||||
out_val_index(non_zero_int) = i
|
out_val_index(non_zero_int) = i
|
||||||
out_val(non_zero_int) = tmp
|
out_val(non_zero_int) = tmp
|
||||||
@ -584,10 +581,12 @@ subroutine get_ao_two_e_integrals_non_zero_jl(j,l,thresh,sze_max,sze,out_val,out
|
|||||||
integer :: i,k
|
integer :: i,k
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: tmp
|
double precision :: tmp
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
|
|
||||||
PROVIDE ao_two_e_integrals_in_map
|
PROVIDE ao_two_e_integrals_in_map
|
||||||
non_zero_int = 0
|
non_zero_int = 0
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -598,7 +597,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl(j,l,thresh,sze_max,sze,out_val,out
|
|||||||
integer, external :: ao_l4
|
integer, external :: ao_l4
|
||||||
double precision, external :: ao_two_e_integral
|
double precision, external :: ao_two_e_integral
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thresh) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
call two_e_integrals_index(i,j,k,l,hash)
|
call two_e_integrals_index(i,j,k,l,hash)
|
||||||
@ -630,10 +629,12 @@ subroutine get_ao_two_e_integrals_non_zero_jl_from_list(j,l,thresh,list,n_list,s
|
|||||||
integer :: i,k
|
integer :: i,k
|
||||||
integer(key_kind) :: hash
|
integer(key_kind) :: hash
|
||||||
double precision :: tmp
|
double precision :: tmp
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
|
|
||||||
PROVIDE ao_two_e_integrals_in_map
|
PROVIDE ao_two_e_integrals_in_map
|
||||||
non_zero_int = 0
|
non_zero_int = 0
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
out_val = 0.d0
|
out_val = 0.d0
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -646,7 +647,7 @@ subroutine get_ao_two_e_integrals_non_zero_jl_from_list(j,l,thresh,list,n_list,s
|
|||||||
integer, external :: ao_l4
|
integer, external :: ao_l4
|
||||||
double precision, external :: ao_two_e_integral
|
double precision, external :: ao_two_e_integral
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thresh) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
call two_e_integrals_index(i,j,k,l,hash)
|
call two_e_integrals_index(i,j,k,l,hash)
|
||||||
|
15
src/ao_two_e_ints/screening.irp.f
Normal file
15
src/ao_two_e_ints/screening.irp.f
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
logical function ao_two_e_integral_zero(i,j,k,l)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: i,j,k,l
|
||||||
|
|
||||||
|
ao_two_e_integral_zero = .False.
|
||||||
|
if (.not.(read_ao_two_e_integrals.or.is_periodic)) then
|
||||||
|
if (ao_overlap_abs(j,l)*ao_overlap_abs(i,k) < ao_integrals_threshold) then
|
||||||
|
ao_two_e_integral_zero = .True.
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if (ao_two_e_integral_schwartz(j,l)*ao_two_e_integral_schwartz(i,k) < ao_integrals_threshold) then
|
||||||
|
ao_two_e_integral_zero = .True.
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
end
|
@ -18,89 +18,89 @@ double precision function ao_two_e_integral(i,j,k,l)
|
|||||||
|
|
||||||
if (ao_prim_num(i) * ao_prim_num(j) * ao_prim_num(k) * ao_prim_num(l) > 1024 ) then
|
if (ao_prim_num(i) * ao_prim_num(j) * ao_prim_num(k) * ao_prim_num(l) > 1024 ) then
|
||||||
ao_two_e_integral = ao_two_e_integral_schwartz_accel(i,j,k,l)
|
ao_two_e_integral = ao_two_e_integral_schwartz_accel(i,j,k,l)
|
||||||
return
|
else
|
||||||
endif
|
|
||||||
|
|
||||||
dim1 = n_pt_max_integrals
|
dim1 = n_pt_max_integrals
|
||||||
|
|
||||||
num_i = ao_nucl(i)
|
num_i = ao_nucl(i)
|
||||||
num_j = ao_nucl(j)
|
num_j = ao_nucl(j)
|
||||||
num_k = ao_nucl(k)
|
num_k = ao_nucl(k)
|
||||||
num_l = ao_nucl(l)
|
num_l = ao_nucl(l)
|
||||||
ao_two_e_integral = 0.d0
|
ao_two_e_integral = 0.d0
|
||||||
|
|
||||||
if (num_i /= num_j .or. num_k /= num_l .or. num_j /= num_k)then
|
if (num_i /= num_j .or. num_k /= num_l .or. num_j /= num_k)then
|
||||||
do p = 1, 3
|
do p = 1, 3
|
||||||
I_power(p) = ao_power(i,p)
|
I_power(p) = ao_power(i,p)
|
||||||
J_power(p) = ao_power(j,p)
|
J_power(p) = ao_power(j,p)
|
||||||
K_power(p) = ao_power(k,p)
|
K_power(p) = ao_power(k,p)
|
||||||
L_power(p) = ao_power(l,p)
|
L_power(p) = ao_power(l,p)
|
||||||
I_center(p) = nucl_coord(num_i,p)
|
I_center(p) = nucl_coord(num_i,p)
|
||||||
J_center(p) = nucl_coord(num_j,p)
|
J_center(p) = nucl_coord(num_j,p)
|
||||||
K_center(p) = nucl_coord(num_k,p)
|
K_center(p) = nucl_coord(num_k,p)
|
||||||
L_center(p) = nucl_coord(num_l,p)
|
L_center(p) = nucl_coord(num_l,p)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
double precision :: coef1, coef2, coef3, coef4
|
double precision :: coef1, coef2, coef3, coef4
|
||||||
double precision :: p_inv,q_inv
|
double precision :: p_inv,q_inv
|
||||||
double precision :: general_primitive_integral
|
double precision :: general_primitive_integral
|
||||||
|
|
||||||
do p = 1, ao_prim_num(i)
|
do p = 1, ao_prim_num(i)
|
||||||
coef1 = ao_coef_normalized_ordered_transp(p,i)
|
coef1 = ao_coef_normalized_ordered_transp(p,i)
|
||||||
do q = 1, ao_prim_num(j)
|
do q = 1, ao_prim_num(j)
|
||||||
coef2 = coef1*ao_coef_normalized_ordered_transp(q,j)
|
coef2 = coef1*ao_coef_normalized_ordered_transp(q,j)
|
||||||
call give_explicit_poly_and_gaussian(P_new,P_center,pp,fact_p,iorder_p,&
|
call give_explicit_poly_and_gaussian(P_new,P_center,pp,fact_p,iorder_p,&
|
||||||
ao_expo_ordered_transp(p,i),ao_expo_ordered_transp(q,j), &
|
ao_expo_ordered_transp(p,i),ao_expo_ordered_transp(q,j), &
|
||||||
I_power,J_power,I_center,J_center,dim1)
|
I_power,J_power,I_center,J_center,dim1)
|
||||||
p_inv = 1.d0/pp
|
p_inv = 1.d0/pp
|
||||||
do r = 1, ao_prim_num(k)
|
do r = 1, ao_prim_num(k)
|
||||||
coef3 = coef2*ao_coef_normalized_ordered_transp(r,k)
|
coef3 = coef2*ao_coef_normalized_ordered_transp(r,k)
|
||||||
do s = 1, ao_prim_num(l)
|
do s = 1, ao_prim_num(l)
|
||||||
coef4 = coef3*ao_coef_normalized_ordered_transp(s,l)
|
coef4 = coef3*ao_coef_normalized_ordered_transp(s,l)
|
||||||
call give_explicit_poly_and_gaussian(Q_new,Q_center,qq,fact_q,iorder_q,&
|
call give_explicit_poly_and_gaussian(Q_new,Q_center,qq,fact_q,iorder_q,&
|
||||||
ao_expo_ordered_transp(r,k),ao_expo_ordered_transp(s,l), &
|
ao_expo_ordered_transp(r,k),ao_expo_ordered_transp(s,l), &
|
||||||
K_power,L_power,K_center,L_center,dim1)
|
K_power,L_power,K_center,L_center,dim1)
|
||||||
q_inv = 1.d0/qq
|
q_inv = 1.d0/qq
|
||||||
integral = general_primitive_integral(dim1, &
|
integral = general_primitive_integral(dim1, &
|
||||||
P_new,P_center,fact_p,pp,p_inv,iorder_p, &
|
P_new,P_center,fact_p,pp,p_inv,iorder_p, &
|
||||||
Q_new,Q_center,fact_q,qq,q_inv,iorder_q)
|
Q_new,Q_center,fact_q,qq,q_inv,iorder_q)
|
||||||
ao_two_e_integral = ao_two_e_integral + coef4 * integral
|
ao_two_e_integral = ao_two_e_integral + coef4 * integral
|
||||||
enddo ! s
|
enddo ! s
|
||||||
enddo ! r
|
enddo ! r
|
||||||
enddo ! q
|
enddo ! q
|
||||||
enddo ! p
|
enddo ! p
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
do p = 1, 3
|
do p = 1, 3
|
||||||
I_power(p) = ao_power(i,p)
|
I_power(p) = ao_power(i,p)
|
||||||
J_power(p) = ao_power(j,p)
|
J_power(p) = ao_power(j,p)
|
||||||
K_power(p) = ao_power(k,p)
|
K_power(p) = ao_power(k,p)
|
||||||
L_power(p) = ao_power(l,p)
|
L_power(p) = ao_power(l,p)
|
||||||
enddo
|
enddo
|
||||||
double precision :: ERI
|
double precision :: ERI
|
||||||
|
|
||||||
do p = 1, ao_prim_num(i)
|
do p = 1, ao_prim_num(i)
|
||||||
coef1 = ao_coef_normalized_ordered_transp(p,i)
|
coef1 = ao_coef_normalized_ordered_transp(p,i)
|
||||||
do q = 1, ao_prim_num(j)
|
do q = 1, ao_prim_num(j)
|
||||||
coef2 = coef1*ao_coef_normalized_ordered_transp(q,j)
|
coef2 = coef1*ao_coef_normalized_ordered_transp(q,j)
|
||||||
do r = 1, ao_prim_num(k)
|
do r = 1, ao_prim_num(k)
|
||||||
coef3 = coef2*ao_coef_normalized_ordered_transp(r,k)
|
coef3 = coef2*ao_coef_normalized_ordered_transp(r,k)
|
||||||
do s = 1, ao_prim_num(l)
|
do s = 1, ao_prim_num(l)
|
||||||
coef4 = coef3*ao_coef_normalized_ordered_transp(s,l)
|
coef4 = coef3*ao_coef_normalized_ordered_transp(s,l)
|
||||||
integral = ERI( &
|
integral = ERI( &
|
||||||
ao_expo_ordered_transp(p,i),ao_expo_ordered_transp(q,j),ao_expo_ordered_transp(r,k),ao_expo_ordered_transp(s,l),&
|
ao_expo_ordered_transp(p,i),ao_expo_ordered_transp(q,j),ao_expo_ordered_transp(r,k),ao_expo_ordered_transp(s,l),&
|
||||||
I_power(1),J_power(1),K_power(1),L_power(1), &
|
I_power(1),J_power(1),K_power(1),L_power(1), &
|
||||||
I_power(2),J_power(2),K_power(2),L_power(2), &
|
I_power(2),J_power(2),K_power(2),L_power(2), &
|
||||||
I_power(3),J_power(3),K_power(3),L_power(3))
|
I_power(3),J_power(3),K_power(3),L_power(3))
|
||||||
ao_two_e_integral = ao_two_e_integral + coef4 * integral
|
ao_two_e_integral = ao_two_e_integral + coef4 * integral
|
||||||
enddo ! s
|
enddo ! s
|
||||||
enddo ! r
|
enddo ! r
|
||||||
enddo ! q
|
enddo ! q
|
||||||
enddo ! p
|
enddo ! p
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
double precision function ao_two_e_integral_schwartz_accel(i,j,k,l)
|
double precision function ao_two_e_integral_schwartz_accel(i,j,k,l)
|
||||||
@ -300,22 +300,17 @@ subroutine compute_ao_two_e_integrals(j,k,l,sze,buffer_value)
|
|||||||
double precision :: ao_two_e_integral
|
double precision :: ao_two_e_integral
|
||||||
|
|
||||||
integer :: i
|
integer :: i
|
||||||
|
logical, external :: ao_one_e_integral_zero
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
|
|
||||||
if (ao_overlap_abs(j,l) < thresh) then
|
|
||||||
buffer_value = 0._integral_kind
|
if (ao_one_e_integral_zero(j,l)) then
|
||||||
return
|
|
||||||
endif
|
|
||||||
if (ao_two_e_integral_schwartz(j,l) < thresh ) then
|
|
||||||
buffer_value = 0._integral_kind
|
buffer_value = 0._integral_kind
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
do i = 1, ao_num
|
do i = 1, ao_num
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thresh) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
buffer_value(i) = 0._integral_kind
|
|
||||||
cycle
|
|
||||||
endif
|
|
||||||
if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thresh ) then
|
|
||||||
buffer_value(i) = 0._integral_kind
|
buffer_value(i) = 0._integral_kind
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
@ -348,8 +343,6 @@ BEGIN_PROVIDER [ logical, ao_two_e_integrals_in_map ]
|
|||||||
integer :: kk, m, j1, i1, lmax
|
integer :: kk, m, j1, i1, lmax
|
||||||
character*(64) :: fmt
|
character*(64) :: fmt
|
||||||
|
|
||||||
integral = ao_two_e_integral(1,1,1,1)
|
|
||||||
|
|
||||||
double precision :: map_mb
|
double precision :: map_mb
|
||||||
PROVIDE read_ao_two_e_integrals io_ao_two_e_integrals
|
PROVIDE read_ao_two_e_integrals io_ao_two_e_integrals
|
||||||
if (read_ao_two_e_integrals) then
|
if (read_ao_two_e_integrals) then
|
||||||
@ -357,66 +350,72 @@ BEGIN_PROVIDER [ logical, ao_two_e_integrals_in_map ]
|
|||||||
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
|
call map_load_from_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
|
||||||
print*, 'AO integrals provided'
|
print*, 'AO integrals provided'
|
||||||
ao_two_e_integrals_in_map = .True.
|
ao_two_e_integrals_in_map = .True.
|
||||||
return
|
else
|
||||||
endif
|
|
||||||
|
|
||||||
print*, 'Providing the AO integrals'
|
print*, 'Providing the AO integrals'
|
||||||
call wall_time(wall_0)
|
call wall_time(wall_0)
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call cpu_time(cpu_1)
|
call cpu_time(cpu_1)
|
||||||
|
|
||||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket, zmq_socket_pull
|
if (.True.) then
|
||||||
call new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,'ao_integrals')
|
! Avoid openMP
|
||||||
|
integral = ao_two_e_integral(1,1,1,1)
|
||||||
character(len=:), allocatable :: task
|
|
||||||
allocate(character(len=ao_num*12) :: task)
|
|
||||||
write(fmt,*) '(', ao_num, '(I5,X,I5,''|''))'
|
|
||||||
do l=1,ao_num
|
|
||||||
write(task,fmt) (i,l, i=1,l)
|
|
||||||
integer, external :: add_task_to_taskserver
|
|
||||||
if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task)) == -1) then
|
|
||||||
stop 'Unable to add task to server'
|
|
||||||
endif
|
endif
|
||||||
enddo
|
|
||||||
deallocate(task)
|
|
||||||
|
|
||||||
integer, external :: zmq_set_running
|
integer(ZMQ_PTR) :: zmq_to_qp_run_socket, zmq_socket_pull
|
||||||
if (zmq_set_running(zmq_to_qp_run_socket) == -1) then
|
call new_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,'ao_integrals')
|
||||||
print *, irp_here, ': Failed in zmq_set_running'
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROVIDE nproc
|
character(len=:), allocatable :: task
|
||||||
!$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1)
|
allocate(character(len=ao_num*12) :: task)
|
||||||
i = omp_get_thread_num()
|
write(fmt,*) '(', ao_num, '(I5,X,I5,''|''))'
|
||||||
if (i==0) then
|
do l=1,ao_num
|
||||||
call ao_two_e_integrals_in_map_collector(zmq_socket_pull)
|
write(task,fmt) (i,l, i=1,l)
|
||||||
else
|
integer, external :: add_task_to_taskserver
|
||||||
call ao_two_e_integrals_in_map_slave_inproc(i)
|
if (add_task_to_taskserver(zmq_to_qp_run_socket,trim(task)) == -1) then
|
||||||
|
stop 'Unable to add task to server'
|
||||||
endif
|
endif
|
||||||
!$OMP END PARALLEL
|
enddo
|
||||||
|
deallocate(task)
|
||||||
|
|
||||||
call end_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'ao_integrals')
|
integer, external :: zmq_set_running
|
||||||
|
if (zmq_set_running(zmq_to_qp_run_socket) == -1) then
|
||||||
|
print *, irp_here, ': Failed in zmq_set_running'
|
||||||
|
endif
|
||||||
|
|
||||||
|
PROVIDE nproc
|
||||||
|
!$OMP PARALLEL DEFAULT(shared) private(i) num_threads(nproc+1)
|
||||||
|
i = omp_get_thread_num()
|
||||||
|
if (i==0) then
|
||||||
|
call ao_two_e_integrals_in_map_collector(zmq_socket_pull)
|
||||||
|
else
|
||||||
|
call ao_two_e_integrals_in_map_slave_inproc(i)
|
||||||
|
endif
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
|
call end_parallel_job(zmq_to_qp_run_socket, zmq_socket_pull, 'ao_integrals')
|
||||||
|
|
||||||
|
|
||||||
print*, 'Sorting the map'
|
print*, 'Sorting the map'
|
||||||
call map_sort(ao_integrals_map)
|
call map_sort(ao_integrals_map)
|
||||||
call cpu_time(cpu_2)
|
call cpu_time(cpu_2)
|
||||||
call wall_time(wall_2)
|
call wall_time(wall_2)
|
||||||
integer(map_size_kind) :: get_ao_map_size, ao_map_size
|
integer(map_size_kind) :: get_ao_map_size, ao_map_size
|
||||||
ao_map_size = get_ao_map_size()
|
ao_map_size = get_ao_map_size()
|
||||||
|
|
||||||
print*, 'AO integrals provided:'
|
print*, 'AO integrals provided:'
|
||||||
print*, ' Size of AO map : ', map_mb(ao_integrals_map) ,'MB'
|
print*, ' Size of AO map : ', map_mb(ao_integrals_map) ,'MB'
|
||||||
print*, ' Number of AO integrals :', ao_map_size
|
print*, ' Number of AO integrals :', ao_map_size
|
||||||
print*, ' cpu time :',cpu_2 - cpu_1, 's'
|
print*, ' cpu time :',cpu_2 - cpu_1, 's'
|
||||||
print*, ' wall time :',wall_2 - wall_1, 's ( x ', (cpu_2-cpu_1)/(wall_2-wall_1+tiny(1.d0)), ' )'
|
print*, ' wall time :',wall_2 - wall_1, 's ( x ', (cpu_2-cpu_1)/(wall_2-wall_1+tiny(1.d0)), ' )'
|
||||||
|
|
||||||
ao_two_e_integrals_in_map = .True.
|
ao_two_e_integrals_in_map = .True.
|
||||||
|
|
||||||
|
if (write_ao_two_e_integrals.and.mpi_master) then
|
||||||
|
call ezfio_set_work_empty(.False.)
|
||||||
|
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
|
||||||
|
call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read')
|
||||||
|
endif
|
||||||
|
|
||||||
if (write_ao_two_e_integrals.and.mpi_master) then
|
|
||||||
call ezfio_set_work_empty(.False.)
|
|
||||||
call map_save_to_disk(trim(ezfio_filename)//'/work/ao_ints',ao_integrals_map)
|
|
||||||
call ezfio_set_ao_two_e_ints_io_ao_two_e_integrals('Read')
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
@ -1173,6 +1172,7 @@ subroutine compute_ao_integrals_jl(j,l,n_integrals,buffer_i,buffer_value)
|
|||||||
double precision :: integral, wall_0
|
double precision :: integral, wall_0
|
||||||
double precision :: thr
|
double precision :: thr
|
||||||
integer :: kk, m, j1, i1
|
integer :: kk, m, j1, i1
|
||||||
|
logical, external :: ao_two_e_integral_zero
|
||||||
|
|
||||||
thr = ao_integrals_threshold
|
thr = ao_integrals_threshold
|
||||||
|
|
||||||
@ -1189,10 +1189,7 @@ subroutine compute_ao_integrals_jl(j,l,n_integrals,buffer_i,buffer_value)
|
|||||||
if (i1 > j1) then
|
if (i1 > j1) then
|
||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
if (ao_overlap_abs(i,k)*ao_overlap_abs(j,l) < thr) then
|
if (ao_two_e_integral_zero(i,j,k,l)) then
|
||||||
cycle
|
|
||||||
endif
|
|
||||||
if (ao_two_e_integral_schwartz(i,k)*ao_two_e_integral_schwartz(j,l) < thr ) then
|
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
|
@ -14,3 +14,22 @@ type: double precision
|
|||||||
doc: threshold on the weight of a given grid point
|
doc: threshold on the weight of a given grid point
|
||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: 1.e-20
|
default: 1.e-20
|
||||||
|
|
||||||
|
[my_grid_becke]
|
||||||
|
type: logical
|
||||||
|
doc: if True, the number of angular and radial grid points are read from EZFIO
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: False
|
||||||
|
|
||||||
|
[my_n_pt_r_grid]
|
||||||
|
type: integer
|
||||||
|
doc: Number of radial grid points given from input
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 300
|
||||||
|
|
||||||
|
[my_n_pt_a_grid]
|
||||||
|
type: integer
|
||||||
|
doc: Number of angular grid points given from input. Warning, this number cannot be any integer. See file list_angular_grid
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 1202
|
||||||
|
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
!
|
!
|
||||||
! These numbers are automatically set by setting the grid_type_sgn parameter
|
! These numbers are automatically set by setting the grid_type_sgn parameter
|
||||||
END_DOC
|
END_DOC
|
||||||
select case (grid_type_sgn)
|
if(.not.my_grid_becke)then
|
||||||
|
select case (grid_type_sgn)
|
||||||
case(0)
|
case(0)
|
||||||
n_points_radial_grid = 23
|
n_points_radial_grid = 23
|
||||||
n_points_integration_angular = 170
|
n_points_integration_angular = 170
|
||||||
@ -25,6 +26,10 @@ select case (grid_type_sgn)
|
|||||||
write(*,*) '!!! Quadrature grid not available !!!'
|
write(*,*) '!!! Quadrature grid not available !!!'
|
||||||
stop
|
stop
|
||||||
end select
|
end select
|
||||||
|
else
|
||||||
|
n_points_radial_grid = my_n_pt_r_grid
|
||||||
|
n_points_integration_angular = my_n_pt_a_grid
|
||||||
|
endif
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [integer, n_points_grid_per_atom]
|
BEGIN_PROVIDER [integer, n_points_grid_per_atom]
|
||||||
|
32
src/becke_numerical_grid/list_angular_grid
Normal file
32
src/becke_numerical_grid/list_angular_grid
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
0006
|
||||||
|
0014
|
||||||
|
0026
|
||||||
|
0038
|
||||||
|
0050
|
||||||
|
0074
|
||||||
|
0086
|
||||||
|
0110
|
||||||
|
0146
|
||||||
|
0170
|
||||||
|
0194
|
||||||
|
0230
|
||||||
|
0266
|
||||||
|
0302
|
||||||
|
0350
|
||||||
|
0434
|
||||||
|
0590
|
||||||
|
0770
|
||||||
|
0974
|
||||||
|
1202
|
||||||
|
1454
|
||||||
|
1730
|
||||||
|
2030
|
||||||
|
2354
|
||||||
|
2702
|
||||||
|
3074
|
||||||
|
3470
|
||||||
|
3890
|
||||||
|
4334
|
||||||
|
4802
|
||||||
|
5294
|
||||||
|
5810
|
152
src/cas_based_on_top/two_body_dens_rout.irp.f
Normal file
152
src/cas_based_on_top/two_body_dens_rout.irp.f
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
|
||||||
|
subroutine give_n2_ii_val_ab(r1,r2,two_bod_dens)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! contribution from purely inactive orbitals to n2_{\Psi^B}(r_1,r_2) for a CAS wave function
|
||||||
|
END_DOC
|
||||||
|
double precision, intent(in) :: r1(3),r2(3)
|
||||||
|
double precision, intent(out):: two_bod_dens
|
||||||
|
integer :: i,j,m,n,i_m,i_n
|
||||||
|
integer :: i_i,i_j
|
||||||
|
double precision, allocatable :: mos_array_inact_r1(:),mos_array_inact_r2(:)
|
||||||
|
double precision, allocatable :: mos_array_r1(:) , mos_array_r2(:)
|
||||||
|
! You get all orbitals in r_1 and r_2
|
||||||
|
allocate(mos_array_r1(mo_num) , mos_array_r2(mo_num) )
|
||||||
|
call give_all_mos_at_r(r1,mos_array_r1)
|
||||||
|
call give_all_mos_at_r(r2,mos_array_r2)
|
||||||
|
! You extract the inactive orbitals
|
||||||
|
allocate(mos_array_inact_r1(n_inact_orb) , mos_array_inact_r2(n_inact_orb) )
|
||||||
|
do i_m = 1, n_inact_orb
|
||||||
|
mos_array_inact_r1(i_m) = mos_array_r1(list_inact(i_m))
|
||||||
|
enddo
|
||||||
|
do i_m = 1, n_inact_orb
|
||||||
|
mos_array_inact_r2(i_m) = mos_array_r2(list_inact(i_m))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
two_bod_dens = 0.d0
|
||||||
|
! You browse all OCCUPIED ALPHA electrons in the \mathcal{A} space
|
||||||
|
do m = 1, n_inact_orb ! electron 1
|
||||||
|
! You browse all OCCUPIED BETA electrons in the \mathcal{A} space
|
||||||
|
do n = 1, n_inact_orb ! electron 2
|
||||||
|
! two_bod_dens(r_1,r_2) = n_alpha(r_1) * n_beta(r_2)
|
||||||
|
two_bod_dens += mos_array_inact_r1(m) * mos_array_inact_r1(m) * mos_array_inact_r2(n) * mos_array_inact_r2(n)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
subroutine give_n2_ia_val_ab(r1,r2,two_bod_dens,istate)
|
||||||
|
BEGIN_DOC
|
||||||
|
! contribution from inactive and active orbitals to n2_{\Psi^B}(r_1,r_2) for the "istate" state of a CAS wave function
|
||||||
|
END_DOC
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: istate
|
||||||
|
double precision, intent(in) :: r1(3),r2(3)
|
||||||
|
double precision, intent(out):: two_bod_dens
|
||||||
|
integer :: i,orb_i,a,orb_a,n,m,b
|
||||||
|
double precision :: rho
|
||||||
|
double precision, allocatable :: mos_array_r1(:) , mos_array_r2(:)
|
||||||
|
double precision, allocatable :: mos_array_inact_r1(:),mos_array_inact_r2(:)
|
||||||
|
double precision, allocatable :: mos_array_act_r1(:),mos_array_act_r2(:)
|
||||||
|
|
||||||
|
two_bod_dens = 0.d0
|
||||||
|
! You get all orbitals in r_1 and r_2
|
||||||
|
allocate(mos_array_r1(mo_num) , mos_array_r2(mo_num) )
|
||||||
|
call give_all_mos_at_r(r1,mos_array_r1)
|
||||||
|
call give_all_mos_at_r(r2,mos_array_r2)
|
||||||
|
|
||||||
|
! You extract the inactive orbitals
|
||||||
|
allocate( mos_array_inact_r1(n_inact_orb) , mos_array_inact_r2(n_inact_orb) )
|
||||||
|
do i = 1, n_inact_orb
|
||||||
|
mos_array_inact_r1(i) = mos_array_r1(list_inact(i))
|
||||||
|
enddo
|
||||||
|
do i= 1, n_inact_orb
|
||||||
|
mos_array_inact_r2(i) = mos_array_r2(list_inact(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! You extract the active orbitals
|
||||||
|
allocate( mos_array_act_r1(n_act_orb) , mos_array_act_r2(n_act_orb) )
|
||||||
|
do i= 1, n_act_orb
|
||||||
|
mos_array_act_r1(i) = mos_array_r1(list_act(i))
|
||||||
|
enddo
|
||||||
|
do i= 1, n_act_orb
|
||||||
|
mos_array_act_r2(i) = mos_array_r2(list_act(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Contracted density : intermediate quantity
|
||||||
|
two_bod_dens = 0.d0
|
||||||
|
do a = 1, n_act_orb
|
||||||
|
do i = 1, n_inact_orb
|
||||||
|
do b = 1, n_act_orb
|
||||||
|
rho = one_e_act_dm_beta_mo_for_dft(b,a,istate) + one_e_act_dm_alpha_mo_for_dft(b,a,istate)
|
||||||
|
two_bod_dens += mos_array_inact_r1(i) * mos_array_inact_r1(i) * mos_array_act_r2(a) * mos_array_act_r2(b) * rho
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
subroutine give_n2_aa_val_ab(r1,r2,two_bod_dens,istate)
|
||||||
|
BEGIN_DOC
|
||||||
|
! contribution from purely active orbitals to n2_{\Psi^B}(r_1,r_2) for the "istate" state of a CAS wave function
|
||||||
|
END_DOC
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: istate
|
||||||
|
double precision, intent(in) :: r1(3),r2(3)
|
||||||
|
double precision, intent(out):: two_bod_dens
|
||||||
|
integer :: i,orb_i,a,orb_a,n,m,b,c,d
|
||||||
|
double precision :: rho
|
||||||
|
double precision, allocatable :: mos_array_r1(:) , mos_array_r2(:)
|
||||||
|
double precision, allocatable :: mos_array_act_r1(:),mos_array_act_r2(:)
|
||||||
|
|
||||||
|
two_bod_dens = 0.d0
|
||||||
|
! You get all orbitals in r_1 and r_2
|
||||||
|
allocate(mos_array_r1(mo_num) , mos_array_r2(mo_num) )
|
||||||
|
call give_all_mos_at_r(r1,mos_array_r1)
|
||||||
|
call give_all_mos_at_r(r2,mos_array_r2)
|
||||||
|
|
||||||
|
! You extract the active orbitals
|
||||||
|
allocate( mos_array_act_r1(n_act_orb) , mos_array_act_r2(n_act_orb) )
|
||||||
|
do i= 1, n_act_orb
|
||||||
|
mos_array_act_r1(i) = mos_array_r1(list_act(i))
|
||||||
|
enddo
|
||||||
|
do i= 1, n_act_orb
|
||||||
|
mos_array_act_r2(i) = mos_array_r2(list_act(i))
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Contracted density : intermediate quantity
|
||||||
|
two_bod_dens = 0.d0
|
||||||
|
do a = 1, n_act_orb ! 1
|
||||||
|
do b = 1, n_act_orb ! 2
|
||||||
|
do c = 1, n_act_orb ! 1
|
||||||
|
do d = 1, n_act_orb ! 2
|
||||||
|
rho = mos_array_act_r1(c) * mos_array_act_r2(d) * act_2_rdm_ab_mo(d,c,b,a,istate)
|
||||||
|
two_bod_dens += rho * mos_array_act_r1(a) * mos_array_act_r2(b)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine give_n2_cas(r1,r2,istate,n2_psi)
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! returns mu(r), f_psi, n2_psi for a general cas wave function
|
||||||
|
END_DOC
|
||||||
|
integer, intent(in) :: istate
|
||||||
|
double precision, intent(in) :: r1(3),r2(3)
|
||||||
|
double precision, intent(out) :: n2_psi
|
||||||
|
double precision :: two_bod_dens_ii
|
||||||
|
double precision :: two_bod_dens_ia
|
||||||
|
double precision :: two_bod_dens_aa
|
||||||
|
! inactive-inactive part of n2_psi(r1,r2)
|
||||||
|
call give_n2_ii_val_ab(r1,r2,two_bod_dens_ii)
|
||||||
|
! inactive-active part of n2_psi(r1,r2)
|
||||||
|
call give_n2_ia_val_ab(r1,r2,two_bod_dens_ia,istate)
|
||||||
|
! active-active part of n2_psi(r1,r2)
|
||||||
|
call give_n2_aa_val_ab(r1,r2,two_bod_dens_aa,istate)
|
||||||
|
|
||||||
|
n2_psi = two_bod_dens_ii + two_bod_dens_ia + two_bod_dens_aa
|
||||||
|
|
||||||
|
end
|
@ -5,6 +5,7 @@ program casscf
|
|||||||
END_DOC
|
END_DOC
|
||||||
call reorder_orbitals_for_casscf
|
call reorder_orbitals_for_casscf
|
||||||
no_vvvv_integrals = .True.
|
no_vvvv_integrals = .True.
|
||||||
|
touch no_vvvv_integrals
|
||||||
pt2_max = 0.02
|
pt2_max = 0.02
|
||||||
SOFT_TOUCH no_vvvv_integrals pt2_max
|
SOFT_TOUCH no_vvvv_integrals pt2_max
|
||||||
call run_stochastic_cipsi
|
call run_stochastic_cipsi
|
||||||
|
@ -22,7 +22,7 @@ END_PROVIDER
|
|||||||
subroutine update_pt2_and_variance_weights(pt2, variance, norm, N_st)
|
subroutine update_pt2_and_variance_weights(pt2, variance, norm, N_st)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Updates the rPT2- and Variance- matching weights.
|
! Updates the PT2- and Variance- matching weights.
|
||||||
END_DOC
|
END_DOC
|
||||||
integer, intent(in) :: N_st
|
integer, intent(in) :: N_st
|
||||||
double precision, intent(in) :: pt2(N_st)
|
double precision, intent(in) :: pt2(N_st)
|
||||||
@ -46,16 +46,17 @@ subroutine update_pt2_and_variance_weights(pt2, variance, norm, N_st)
|
|||||||
i_iter = 1
|
i_iter = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
dt = 0.5d0
|
dt = 2.0d0
|
||||||
|
|
||||||
do k=1,N_st
|
do k=1,N_st
|
||||||
|
! rPT2
|
||||||
rpt2(k) = pt2(k)/(1.d0 + norm(k))
|
rpt2(k) = pt2(k)/(1.d0 + norm(k))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
avg = sum(rpt2(1:N_st)) / dble(N_st) - 1.d-32 ! Avoid future division by zero
|
avg = sum(pt2(1:N_st)) / dble(N_st) - 1.d-32 ! Avoid future division by zero
|
||||||
do k=1,N_st
|
do k=1,N_st
|
||||||
element = exp(dt*(rpt2(k)/avg -1.d0))
|
element = exp(dt*(pt2(k)/avg -1.d0))
|
||||||
element = min(1.5d0 , element)
|
element = min(2.0d0 , element)
|
||||||
element = max(0.5d0 , element)
|
element = max(0.5d0 , element)
|
||||||
memo_pt2(k,i_iter) = element
|
memo_pt2(k,i_iter) = element
|
||||||
pt2_match_weight(k) *= product(memo_pt2(k,:))
|
pt2_match_weight(k) *= product(memo_pt2(k,:))
|
||||||
@ -64,14 +65,20 @@ subroutine update_pt2_and_variance_weights(pt2, variance, norm, N_st)
|
|||||||
avg = sum(variance(1:N_st)) / dble(N_st) + 1.d-32 ! Avoid future division by zero
|
avg = sum(variance(1:N_st)) / dble(N_st) + 1.d-32 ! Avoid future division by zero
|
||||||
do k=1,N_st
|
do k=1,N_st
|
||||||
element = exp(dt*(variance(k)/avg -1.d0))
|
element = exp(dt*(variance(k)/avg -1.d0))
|
||||||
element = min(1.5d0 , element)
|
element = min(2.0d0 , element)
|
||||||
element = max(0.5d0 , element)
|
element = max(0.5d0 , element)
|
||||||
memo_variance(k,i_iter) = element
|
memo_variance(k,i_iter) = element
|
||||||
variance_match_weight(k) *= product(memo_variance(k,:))
|
variance_match_weight(k) *= product(memo_variance(k,:))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
if (N_det < 100) then
|
||||||
|
! For tiny wave functions, weights are 1.d0
|
||||||
|
pt2_match_weight(:) = 1.d0
|
||||||
|
variance_match_weight(:) = 1.d0
|
||||||
|
endif
|
||||||
|
|
||||||
threshold_davidson_pt2 = min(1.d-6, &
|
threshold_davidson_pt2 = min(1.d-6, &
|
||||||
max(threshold_davidson, 1.e-1 * PT2_relative_error * minval(abs(rpt2(1:N_states)))) )
|
max(threshold_davidson, 1.e-1 * PT2_relative_error * minval(abs(pt2(1:N_states)))) )
|
||||||
|
|
||||||
SOFT_TOUCH pt2_match_weight variance_match_weight threshold_davidson_pt2
|
SOFT_TOUCH pt2_match_weight variance_match_weight threshold_davidson_pt2
|
||||||
end
|
end
|
||||||
@ -325,7 +332,7 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
i = psi_bilinear_matrix_rows(l_a)
|
i = psi_bilinear_matrix_rows(l_a)
|
||||||
if (nt + exc_degree(i) <= 4) then
|
if (nt + exc_degree(i) <= 4) then
|
||||||
idx = psi_det_sorted_order(psi_bilinear_matrix_order(l_a))
|
idx = psi_det_sorted_order(psi_bilinear_matrix_order(l_a))
|
||||||
if (psi_average_norm_contrib_sorted(idx) > 0.d0) then
|
if (psi_average_norm_contrib_sorted(idx) > 1.d-20) then
|
||||||
indices(k) = idx
|
indices(k) = idx
|
||||||
k=k+1
|
k=k+1
|
||||||
endif
|
endif
|
||||||
@ -349,7 +356,7 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
idx = psi_det_sorted_order( &
|
idx = psi_det_sorted_order( &
|
||||||
psi_bilinear_matrix_order( &
|
psi_bilinear_matrix_order( &
|
||||||
psi_bilinear_matrix_transp_order(l_a)))
|
psi_bilinear_matrix_transp_order(l_a)))
|
||||||
if (psi_average_norm_contrib_sorted(idx) > 0.d0) then
|
if (psi_average_norm_contrib_sorted(idx) > 1.d-20) then
|
||||||
indices(k) = idx
|
indices(k) = idx
|
||||||
k=k+1
|
k=k+1
|
||||||
endif
|
endif
|
||||||
|
@ -438,6 +438,11 @@ subroutine H_S2_u_0_nstates_zmq(v_0,s_0,u_0,N_st,sze)
|
|||||||
ipos=1
|
ipos=1
|
||||||
do imin=1,N_det,tasksize
|
do imin=1,N_det,tasksize
|
||||||
imax = min(N_det,imin-1+tasksize)
|
imax = min(N_det,imin-1+tasksize)
|
||||||
|
if (imin==1) then
|
||||||
|
istep = 2
|
||||||
|
else
|
||||||
|
istep = 1
|
||||||
|
endif
|
||||||
do ishift=0,istep-1
|
do ishift=0,istep-1
|
||||||
write(task(ipos:ipos+50),'(4(I11,1X),1X,1A)') imin, imax, ishift, istep, '|'
|
write(task(ipos:ipos+50),'(4(I11,1X),1X,1A)') imin, imax, ishift, istep, '|'
|
||||||
ipos = ipos+50
|
ipos = ipos+50
|
||||||
|
@ -31,20 +31,73 @@
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
BEGIN_PROVIDER [double precision, ao_effective_one_e_potential, (ao_num, ao_num,N_states)]
|
BEGIN_PROVIDER [double precision, effective_one_e_potential_sa, (mo_num, mo_num)]
|
||||||
&BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_without_kin, (ao_num, ao_num,N_states)]
|
&BEGIN_PROVIDER [double precision, effective_one_e_potential_without_kin_sa, (mo_num, mo_num)]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! ao_effective_one_e_potential(i,j) = $\rangle i_{AO}| v_{H}^{sr} |j_{AO}\rangle + \rangle i_{AO}| h_{core} |j_{AO}\rangle + \rangle i_{AO}|v_{xc} |j_{AO}\rangle$
|
! State-averaged potential in MO basis
|
||||||
!
|
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
integer :: istate
|
integer :: istate
|
||||||
|
|
||||||
|
effective_one_e_potential_sa(:,:) = 0.d0
|
||||||
|
effective_one_e_potential_without_kin_sa(:,:) = 0.d0
|
||||||
do istate = 1, N_states
|
do istate = 1, N_states
|
||||||
call mo_to_ao_no_overlap(effective_one_e_potential(1,1,istate),size(effective_one_e_potential,1),ao_effective_one_e_potential(1,1,istate),size(ao_effective_one_e_potential,1))
|
effective_one_e_potential_sa(:,:) += effective_one_e_potential(:,:,istate) * state_average_weight(istate)
|
||||||
|
effective_one_e_potential_without_kin_sa(:,:) += effective_one_e_potential_without_kin(:,:,istate) * state_average_weight(istate)
|
||||||
call mo_to_ao_no_overlap(effective_one_e_potential_without_kin(1,1,istate),size(effective_one_e_potential_without_kin,1),ao_effective_one_e_potential_without_kin(1,1,istate),size(ao_effective_one_e_potential_without_kin,1))
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [double precision, ao_effective_one_e_potential, (ao_num, ao_num,N_states)]
|
||||||
|
&BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_without_kin, (ao_num, ao_num,N_states)]
|
||||||
|
implicit none
|
||||||
|
integer :: i,j,istate
|
||||||
|
effective_one_e_potential = 0.d0
|
||||||
|
BEGIN_DOC
|
||||||
|
! Effective_one_e_potential(i,j) = $\rangle i_{MO}| v_{H}^{sr} |j_{MO}\rangle + \rangle i_{MO}| h_{core} |j_{MO}\rangle + \rangle i_{MO}|v_{xc} |j_{MO}\rangle$
|
||||||
|
!
|
||||||
|
! on the |MO| basis
|
||||||
|
!
|
||||||
|
! Taking the expectation value does not provide any energy, but
|
||||||
|
!
|
||||||
|
! effective_one_e_potential(i,j) is the potential coupling DFT and WFT parts
|
||||||
|
!
|
||||||
|
! and it is used in any RS-DFT based calculations
|
||||||
|
END_DOC
|
||||||
|
do istate = 1, N_states
|
||||||
|
do j = 1, mo_num
|
||||||
|
do i = 1, mo_num
|
||||||
|
|
||||||
|
effective_one_e_potential(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_integrals_n_e(i,j) + mo_kinetic_integrals(i,j) &
|
||||||
|
+ 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) &
|
||||||
|
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
|
||||||
|
|
||||||
|
effective_one_e_potential_without_kin(i,j,istate) = short_range_Hartree_operator(i,j,istate) + mo_integrals_n_e(i,j) &
|
||||||
|
+ 0.5d0 * (potential_x_alpha_mo(i,j,istate) + potential_c_alpha_mo(i,j,istate) &
|
||||||
|
+ potential_x_beta_mo(i,j,istate) + potential_c_beta_mo(i,j,istate) )
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_sa, (ao_num, ao_num)]
|
||||||
|
&BEGIN_PROVIDER [double precision, ao_effective_one_e_potential_without_kin_sa, (ao_num, ao_num)]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! State-averaged potential in AO basis
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
integer :: istate
|
||||||
|
|
||||||
|
ao_effective_one_e_potential_sa(:,:) = 0.d0
|
||||||
|
ao_effective_one_e_potential_without_kin_sa(:,:) = 0.d0
|
||||||
|
do istate = 1, N_states
|
||||||
|
ao_effective_one_e_potential_sa(:,:) += ao_effective_one_e_potential(:,:,istate) * state_average_weight(istate)
|
||||||
|
ao_effective_one_e_potential_without_kin_sa(:,:) += ao_effective_one_e_potential_without_kin(:,:,istate) * state_average_weight(istate)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
@ -138,6 +138,8 @@ subroutine ex_lda_sr(mu,rho_a,rho_b,ex,vx_a,vx_b)
|
|||||||
!Density and kF
|
!Density and kF
|
||||||
rho_a_2=rho_a*2.D0
|
rho_a_2=rho_a*2.D0
|
||||||
akf = ckf*(rho_a_2**f13)
|
akf = ckf*(rho_a_2**f13)
|
||||||
|
! Avoid division by zero
|
||||||
|
if (akf == 0.d0) akf = 1.d-20
|
||||||
a = mu/(z2*akf)
|
a = mu/(z2*akf)
|
||||||
a2 = a*a
|
a2 = a*a
|
||||||
a3 = a2*a
|
a3 = a2*a
|
||||||
@ -169,6 +171,7 @@ subroutine ex_lda_sr(mu,rho_a,rho_b,ex,vx_a,vx_b)
|
|||||||
!Density and kF
|
!Density and kF
|
||||||
rho_b_2= rho_b * 2.d0
|
rho_b_2= rho_b * 2.d0
|
||||||
akf = ckf*(rho_b_2**f13)
|
akf = ckf*(rho_b_2**f13)
|
||||||
|
if (akf == 0.d0) akf = 1.d-20
|
||||||
a = mu/(z2*akf)
|
a = mu/(z2*akf)
|
||||||
a2 = a*a
|
a2 = a*a
|
||||||
a3 = a2*a
|
a3 = a2*a
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
BEGIN_PROVIDER [ character*(128), ezfio_filename ]
|
BEGIN_PROVIDER [ character*(1024), ezfio_filename ]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Name of EZFIO file. It is obtained from the QPACKAGE_INPUT environment
|
! Name of EZFIO file. It is obtained from the QPACKAGE_INPUT environment
|
||||||
@ -34,7 +34,7 @@ BEGIN_PROVIDER [ character*(128), ezfio_filename ]
|
|||||||
! Adjust out-of-memory killer flag such that the current process will be
|
! Adjust out-of-memory killer flag such that the current process will be
|
||||||
! killed first by the OOM killer, allowing compute nodes to survive
|
! killed first by the OOM killer, allowing compute nodes to survive
|
||||||
integer :: getpid
|
integer :: getpid
|
||||||
character*(64) :: command, pidc
|
character*(1024) :: command, pidc
|
||||||
write(pidc,*) getpid()
|
write(pidc,*) getpid()
|
||||||
write(command,*) 'echo 15 > /proc//'//trim(adjustl(pidc))//'/oom_adj'
|
write(command,*) 'echo 15 > /proc//'//trim(adjustl(pidc))//'/oom_adj'
|
||||||
call system(command)
|
call system(command)
|
||||||
@ -43,7 +43,7 @@ BEGIN_PROVIDER [ character*(128), ezfio_filename ]
|
|||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ character*(128), ezfio_work_dir ]
|
BEGIN_PROVIDER [ character*(1024), ezfio_work_dir ]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! EZFIO/work/
|
! EZFIO/work/
|
||||||
|
@ -17,7 +17,7 @@ integer function getUnitAndOpen(f,mode)
|
|||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
character*(*) :: f
|
character*(*) :: f
|
||||||
character*(128) :: new_f
|
character*(256) :: new_f
|
||||||
integer :: iunit
|
integer :: iunit
|
||||||
logical :: is_open, exists
|
logical :: is_open, exists
|
||||||
character :: mode
|
character :: mode
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
BEGIN_PROVIDER [ character*(128), qp_stop_filename ]
|
BEGIN_PROVIDER [ character*(256), qp_stop_filename ]
|
||||||
&BEGIN_PROVIDER [ character*(128), qp_kill_filename ]
|
&BEGIN_PROVIDER [ character*(256), qp_kill_filename ]
|
||||||
&BEGIN_PROVIDER [ integer, qp_stop_variable ]
|
&BEGIN_PROVIDER [ integer, qp_stop_variable ]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
|
@ -5,12 +5,13 @@ source $QP_ROOT/quantum_package.rc
|
|||||||
|
|
||||||
|
|
||||||
function run() {
|
function run() {
|
||||||
thresh=1.e-7
|
thresh=1.e-5
|
||||||
test_exe scf || skip
|
test_exe scf || skip
|
||||||
qp set_file $1
|
qp set_file $1
|
||||||
qp edit --check
|
qp edit --check
|
||||||
qp reset --mos
|
qp reset --mos
|
||||||
qp run scf
|
qp set scf_utils n_it_scf_max 50
|
||||||
|
qp run scf
|
||||||
# qp set_frozen_core
|
# qp set_frozen_core
|
||||||
energy="$(ezfio get hartree_fock energy)"
|
energy="$(ezfio get hartree_fock energy)"
|
||||||
eq $energy $2 $thresh
|
eq $energy $2 $thresh
|
||||||
@ -39,7 +40,7 @@ function run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@test "SO" { # 0.539000 5.70403s
|
@test "SO" { # 0.539000 5.70403s
|
||||||
run so.ezfio -25.7175263371941
|
run so.ezfio -25.7175272905296
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "HCO" { # 0.636700 1.55279s
|
@test "HCO" { # 0.636700 1.55279s
|
||||||
@ -107,13 +108,13 @@ function run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@test "C2H2" { # 19.599000 37.7923s
|
@test "C2H2" { # 19.599000 37.7923s
|
||||||
run c2h2.ezfio -12.12144019495306
|
run c2h2.ezfio -12.12144044853196
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@test "SiH3" { # 20.316100 54.0861s
|
@test "SiH3" { # 20.316100 54.0861s
|
||||||
[[ -n $TRAVIS ]] && skip
|
[[ -n $TRAVIS ]] && skip
|
||||||
run sih3.ezfio -5.455398769158780
|
run sih3.ezfio -5.455400439077580
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "OH" { # 32.042200 1.36478m
|
@test "OH" { # 32.042200 1.36478m
|
||||||
@ -130,6 +131,6 @@ function run() {
|
|||||||
|
|
||||||
@test "SO2" { # 71.894900 3.22567m
|
@test "SO2" { # 71.894900 3.22567m
|
||||||
[[ -n $TRAVIS ]] && skip
|
[[ -n $TRAVIS ]] && skip
|
||||||
run so2.ezfio -41.55800190733211
|
run so2.ezfio -41.55800401346361
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
!$OMP local_threshold)&
|
!$OMP local_threshold)&
|
||||||
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
|
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
|
||||||
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
|
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
|
||||||
!$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
|
!$OMP ao_two_e_integral_alpha, ao_two_e_integral_beta)
|
||||||
|
|
||||||
allocate(keys(1), values(1))
|
allocate(keys(1), values(1))
|
||||||
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
|
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
|
||||||
@ -48,8 +48,8 @@
|
|||||||
l = ll(1)
|
l = ll(1)
|
||||||
j = jj(1)
|
j = jj(1)
|
||||||
|
|
||||||
if (ao_overlap_abs(k,l)*ao_overlap_abs(i,j) &
|
logical, external :: ao_two_e_integral_zero
|
||||||
< ao_integrals_threshold) then
|
if (ao_two_e_integral_zero(i,k,j,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
|
local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
!$OMP local_threshold)&
|
!$OMP local_threshold)&
|
||||||
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
|
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
|
||||||
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
|
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
|
||||||
!$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
|
!$OMP ao_two_e_integral_alpha, ao_two_e_integral_beta)
|
||||||
|
|
||||||
allocate(keys(1), values(1))
|
allocate(keys(1), values(1))
|
||||||
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
|
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
|
||||||
@ -51,8 +51,8 @@
|
|||||||
l = ll(1)
|
l = ll(1)
|
||||||
j = jj(1)
|
j = jj(1)
|
||||||
|
|
||||||
if (ao_overlap_abs(k,l)*ao_overlap_abs(i,j) &
|
logical, external :: ao_two_e_integral_zero
|
||||||
< ao_integrals_threshold) then
|
if (ao_two_e_integral_zero(i,k,j,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
|
local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
!$OMP local_threshold)&
|
!$OMP local_threshold)&
|
||||||
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
|
!$OMP SHARED(ao_num,SCF_density_matrix_ao_alpha,SCF_density_matrix_ao_beta,&
|
||||||
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
|
!$OMP ao_integrals_map,ao_integrals_threshold, ao_two_e_integral_schwartz, &
|
||||||
!$OMP ao_overlap_abs, ao_two_e_integral_alpha, ao_two_e_integral_beta)
|
!$OMP ao_two_e_integral_alpha, ao_two_e_integral_beta)
|
||||||
|
|
||||||
allocate(keys(1), values(1))
|
allocate(keys(1), values(1))
|
||||||
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
|
allocate(ao_two_e_integral_alpha_tmp(ao_num,ao_num), &
|
||||||
@ -49,8 +49,8 @@
|
|||||||
l = ll(1)
|
l = ll(1)
|
||||||
j = jj(1)
|
j = jj(1)
|
||||||
|
|
||||||
if (ao_overlap_abs(k,l)*ao_overlap_abs(i,j) &
|
logical, external :: ao_two_e_integral_zero
|
||||||
< ao_integrals_threshold) then
|
if (ao_two_e_integral_zero(i,k,j,l)) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
|
local_threshold = ao_two_e_integral_schwartz(k,l)*ao_two_e_integral_schwartz(i,j)
|
||||||
|
@ -13,7 +13,7 @@ BEGIN_PROVIDER [double precision, ao_ortho_lowdin_coef, (ao_num,ao_num)]
|
|||||||
do j=1, ao_num
|
do j=1, ao_num
|
||||||
tmp_matrix(j,j) = 1.d0
|
tmp_matrix(j,j) = 1.d0
|
||||||
enddo
|
enddo
|
||||||
call ortho_lowdin(ao_overlap,ao_num,ao_num,tmp_matrix,ao_num,ao_num)
|
call ortho_lowdin(ao_overlap,ao_num,ao_num,tmp_matrix,ao_num,ao_num,lin_dep_cutoff)
|
||||||
do i=1, ao_num
|
do i=1, ao_num
|
||||||
do j=1, ao_num
|
do j=1, ao_num
|
||||||
ao_ortho_lowdin_coef(j,i) = tmp_matrix(i,j)
|
ao_ortho_lowdin_coef(j,i) = tmp_matrix(i,j)
|
||||||
|
@ -48,3 +48,8 @@ doc: Read/Write |MO| one-electron integrals from/to disk [ Write | Read | None ]
|
|||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: None
|
default: None
|
||||||
|
|
||||||
|
[lin_dep_cutoff]
|
||||||
|
type: Threshold
|
||||||
|
doc: Remove linear dependencies when the eigenvalues of the overlap matrix are below this value
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: 1.e-6
|
||||||
|
@ -3,7 +3,7 @@ subroutine orthonormalize_mos
|
|||||||
integer :: m,p,s
|
integer :: m,p,s
|
||||||
m = size(mo_coef,1)
|
m = size(mo_coef,1)
|
||||||
p = size(mo_overlap,1)
|
p = size(mo_overlap,1)
|
||||||
call ortho_lowdin(mo_overlap,p,mo_num,mo_coef,m,ao_num)
|
call ortho_lowdin(mo_overlap,p,mo_num,mo_coef,m,ao_num,lin_dep_cutoff)
|
||||||
mo_label = 'Orthonormalized'
|
mo_label = 'Orthonormalized'
|
||||||
SOFT_TOUCH mo_coef mo_label
|
SOFT_TOUCH mo_coef mo_label
|
||||||
end
|
end
|
||||||
|
@ -11,3 +11,9 @@ interface: ezfio,provider,ocaml
|
|||||||
default: 1.e-15
|
default: 1.e-15
|
||||||
ezfio_name: threshold_mo
|
ezfio_name: threshold_mo
|
||||||
|
|
||||||
|
[no_vvvv_integrals]
|
||||||
|
type: logical
|
||||||
|
doc: If `True`, computes all integrals except for the integrals having 3 or 4 virtual indices
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: false
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
BEGIN_PROVIDER [ logical, no_vvvv_integrals ]
|
!BEGIN_PROVIDER [ logical, no_vvvv_integrals ]
|
||||||
implicit none
|
! implicit none
|
||||||
BEGIN_DOC
|
! BEGIN_DOC
|
||||||
! If `True`, computes all integrals except for the integrals having 3 or 4 virtual indices
|
! If `True`, computes all integrals except for the integrals having 3 or 4 virtual indices
|
||||||
END_DOC
|
! END_DOC
|
||||||
|
!
|
||||||
no_vvvv_integrals = .False.
|
! no_vvvv_integrals = .False.
|
||||||
END_PROVIDER
|
!END_PROVIDER
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, mo_coef_novirt, (ao_num,n_core_inact_act_orb) ]
|
BEGIN_PROVIDER [ double precision, mo_coef_novirt, (ao_num,n_core_inact_act_orb) ]
|
||||||
implicit none
|
implicit none
|
||||||
@ -56,6 +56,8 @@ subroutine four_idx_novvvv
|
|||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Retransform MO integrals for next CAS-SCF step
|
! Retransform MO integrals for next CAS-SCF step
|
||||||
END_DOC
|
END_DOC
|
||||||
|
print*,'Using partial transformation'
|
||||||
|
print*,'It will not transform all integrals with at least 3 indices within the virtuals'
|
||||||
integer :: i,j,k,l,n_integrals
|
integer :: i,j,k,l,n_integrals
|
||||||
double precision, allocatable :: f(:,:,:), f2(:,:,:), d(:,:), T(:,:,:,:), T2(:,:,:,:)
|
double precision, allocatable :: f(:,:,:), f2(:,:,:), d(:,:), T(:,:,:,:), T2(:,:,:,:)
|
||||||
double precision, external :: get_ao_two_e_integral
|
double precision, external :: get_ao_two_e_integral
|
||||||
|
@ -127,7 +127,6 @@ double precision function mo_two_e_integral(i,j,k,l)
|
|||||||
integer, intent(in) :: i,j,k,l
|
integer, intent(in) :: i,j,k,l
|
||||||
double precision :: get_two_e_integral
|
double precision :: get_two_e_integral
|
||||||
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
|
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
|
||||||
PROVIDE mo_two_e_integrals_in_map
|
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
mo_two_e_integral = get_two_e_integral(i,j,k,l,mo_integrals_map)
|
mo_two_e_integral = get_two_e_integral(i,j,k,l,mo_integrals_map)
|
||||||
return
|
return
|
||||||
@ -202,47 +201,12 @@ subroutine get_mo_two_e_integrals_ij(k,l,sze,out_array,map)
|
|||||||
integer, intent(in) :: k,l, sze
|
integer, intent(in) :: k,l, sze
|
||||||
double precision, intent(out) :: out_array(sze,sze)
|
double precision, intent(out) :: out_array(sze,sze)
|
||||||
type(map_type), intent(inout) :: map
|
type(map_type), intent(inout) :: map
|
||||||
integer :: i,j,kk,ll,m
|
integer :: j
|
||||||
integer(key_kind),allocatable :: hash(:)
|
|
||||||
integer ,allocatable :: pairs(:,:), iorder(:)
|
|
||||||
real(integral_kind), allocatable :: tmp_val(:)
|
real(integral_kind), allocatable :: tmp_val(:)
|
||||||
|
|
||||||
PROVIDE mo_two_e_integrals_in_map
|
|
||||||
allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), &
|
|
||||||
tmp_val(sze*sze))
|
|
||||||
|
|
||||||
kk=0
|
|
||||||
out_array = 0.d0
|
|
||||||
do j=1,sze
|
do j=1,sze
|
||||||
do i=1,sze
|
call get_mo_two_e_integrals(j,k,l,sze,out_array(1,j),map)
|
||||||
kk += 1
|
|
||||||
!DIR$ FORCEINLINE
|
|
||||||
call two_e_integrals_index(i,j,k,l,hash(kk))
|
|
||||||
pairs(1,kk) = i
|
|
||||||
pairs(2,kk) = j
|
|
||||||
iorder(kk) = kk
|
|
||||||
enddo
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
logical :: integral_is_in_map
|
|
||||||
if (key_kind == 8) then
|
|
||||||
call i8radix_sort(hash,iorder,kk,-1)
|
|
||||||
else if (key_kind == 4) then
|
|
||||||
call iradix_sort(hash,iorder,kk,-1)
|
|
||||||
else if (key_kind == 2) then
|
|
||||||
call i2radix_sort(hash,iorder,kk,-1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
call map_get_many(mo_integrals_map, hash, tmp_val, kk)
|
|
||||||
|
|
||||||
do ll=1,kk
|
|
||||||
m = iorder(ll)
|
|
||||||
i=pairs(1,m)
|
|
||||||
j=pairs(2,m)
|
|
||||||
out_array(i,j) = tmp_val(ll)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
deallocate(pairs,hash,iorder,tmp_val)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine get_mo_two_e_integrals_i1j1(k,l,sze,out_array,map)
|
subroutine get_mo_two_e_integrals_i1j1(k,l,sze,out_array,map)
|
||||||
@ -256,47 +220,13 @@ subroutine get_mo_two_e_integrals_i1j1(k,l,sze,out_array,map)
|
|||||||
integer, intent(in) :: k,l, sze
|
integer, intent(in) :: k,l, sze
|
||||||
double precision, intent(out) :: out_array(sze,sze)
|
double precision, intent(out) :: out_array(sze,sze)
|
||||||
type(map_type), intent(inout) :: map
|
type(map_type), intent(inout) :: map
|
||||||
integer :: i,j,kk,ll,m
|
integer :: j
|
||||||
integer(key_kind),allocatable :: hash(:)
|
|
||||||
integer ,allocatable :: pairs(:,:), iorder(:)
|
|
||||||
real(integral_kind), allocatable :: tmp_val(:)
|
|
||||||
|
|
||||||
PROVIDE mo_two_e_integrals_in_map
|
PROVIDE mo_two_e_integrals_in_map
|
||||||
allocate (hash(sze*sze), pairs(2,sze*sze),iorder(sze*sze), &
|
|
||||||
tmp_val(sze*sze))
|
|
||||||
|
|
||||||
kk=0
|
|
||||||
out_array = 0.d0
|
|
||||||
do j=1,sze
|
do j=1,sze
|
||||||
do i=1,sze
|
call get_mo_two_e_integrals(k,j,l,sze,out_array(1,j),map)
|
||||||
kk += 1
|
|
||||||
!DIR$ FORCEINLINE
|
|
||||||
call two_e_integrals_index(i,k,j,l,hash(kk))
|
|
||||||
pairs(1,kk) = i
|
|
||||||
pairs(2,kk) = j
|
|
||||||
iorder(kk) = kk
|
|
||||||
enddo
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
logical :: integral_is_in_map
|
|
||||||
if (key_kind == 8) then
|
|
||||||
call i8radix_sort(hash,iorder,kk,-1)
|
|
||||||
else if (key_kind == 4) then
|
|
||||||
call iradix_sort(hash,iorder,kk,-1)
|
|
||||||
else if (key_kind == 2) then
|
|
||||||
call i2radix_sort(hash,iorder,kk,-1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
call map_get_many(mo_integrals_map, hash, tmp_val, kk)
|
|
||||||
|
|
||||||
do ll=1,kk
|
|
||||||
m = iorder(ll)
|
|
||||||
i=pairs(1,m)
|
|
||||||
j=pairs(2,m)
|
|
||||||
out_array(i,j) = tmp_val(ll)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
deallocate(pairs,hash,iorder,tmp_val)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -312,25 +242,13 @@ subroutine get_mo_two_e_integrals_coulomb_ii(k,l,sze,out_val,map)
|
|||||||
double precision, intent(out) :: out_val(sze)
|
double precision, intent(out) :: out_val(sze)
|
||||||
type(map_type), intent(inout) :: map
|
type(map_type), intent(inout) :: map
|
||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash(sze)
|
double precision, external :: get_two_e_integral
|
||||||
real(integral_kind) :: tmp_val(sze)
|
|
||||||
PROVIDE mo_two_e_integrals_in_map
|
PROVIDE mo_two_e_integrals_in_map
|
||||||
|
|
||||||
integer :: kk
|
|
||||||
do i=1,sze
|
do i=1,sze
|
||||||
!DIR$ FORCEINLINE
|
out_val(i) = get_two_e_integral(k,i,l,i,map)
|
||||||
call two_e_integrals_index(k,i,l,i,hash(i))
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if (integral_kind == 8) then
|
|
||||||
call map_get_many(map, hash, out_val, sze)
|
|
||||||
else
|
|
||||||
call map_get_many(map, hash, tmp_val, sze)
|
|
||||||
! Conversion to double precision
|
|
||||||
do i=1,sze
|
|
||||||
out_val(i) = dble(tmp_val(i))
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
|
subroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
|
||||||
@ -345,25 +263,13 @@ subroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
|
|||||||
double precision, intent(out) :: out_val(sze)
|
double precision, intent(out) :: out_val(sze)
|
||||||
type(map_type), intent(inout) :: map
|
type(map_type), intent(inout) :: map
|
||||||
integer :: i
|
integer :: i
|
||||||
integer(key_kind) :: hash(sze)
|
double precision, external :: get_two_e_integral
|
||||||
real(integral_kind) :: tmp_val(sze)
|
|
||||||
PROVIDE mo_two_e_integrals_in_map
|
PROVIDE mo_two_e_integrals_in_map
|
||||||
|
|
||||||
integer :: kk
|
|
||||||
do i=1,sze
|
do i=1,sze
|
||||||
!DIR$ FORCEINLINE
|
out_val(i) = get_two_e_integral(k,i,i,l,map)
|
||||||
call two_e_integrals_index(k,i,i,l,hash(i))
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if (integral_kind == 8) then
|
|
||||||
call map_get_many(map, hash, out_val, sze)
|
|
||||||
else
|
|
||||||
call map_get_many(map, hash, tmp_val, sze)
|
|
||||||
! Conversion to double precision
|
|
||||||
do i=1,sze
|
|
||||||
out_val(i) = dble(tmp_val(i))
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,7 +189,6 @@ subroutine add_integrals_to_map(mask_ijkl)
|
|||||||
two_e_tmp_2 = 0.d0
|
two_e_tmp_2 = 0.d0
|
||||||
do j1 = 1,ao_num
|
do j1 = 1,ao_num
|
||||||
call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
|
call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
|
||||||
! call compute_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
|
|
||||||
enddo
|
enddo
|
||||||
do j1 = 1,ao_num
|
do j1 = 1,ao_num
|
||||||
kmax = 0
|
kmax = 0
|
||||||
@ -747,7 +746,6 @@ subroutine add_integrals_to_map_no_exit_34(mask_ijkl)
|
|||||||
two_e_tmp_2 = 0.d0
|
two_e_tmp_2 = 0.d0
|
||||||
do j1 = 1,ao_num
|
do j1 = 1,ao_num
|
||||||
call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
|
call get_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
|
||||||
! call compute_ao_two_e_integrals(j1,k1,l1,ao_num,two_e_tmp_0(1,j1))
|
|
||||||
enddo
|
enddo
|
||||||
do j1 = 1,ao_num
|
do j1 = 1,ao_num
|
||||||
kmax = 0
|
kmax = 0
|
||||||
|
@ -42,6 +42,7 @@ BEGIN_PROVIDER [ double precision, nucl_coord, (nucl_num,3) ]
|
|||||||
' Atom Charge X Y Z '
|
' Atom Charge X Y Z '
|
||||||
write(6,ft) &
|
write(6,ft) &
|
||||||
'================','============','============','============','============'
|
'================','============','============','============','============'
|
||||||
|
|
||||||
do i=1,nucl_num
|
do i=1,nucl_num
|
||||||
write(6,f) nucl_label(i), nucl_charge(i), &
|
write(6,f) nucl_label(i), nucl_charge(i), &
|
||||||
nucl_coord(i,1)*a0, &
|
nucl_coord(i,1)*a0, &
|
||||||
@ -52,6 +53,21 @@ BEGIN_PROVIDER [ double precision, nucl_coord, (nucl_num,3) ]
|
|||||||
'================','============','============','============','============'
|
'================','============','============','============','============'
|
||||||
write(6,'(A)') ''
|
write(6,'(A)') ''
|
||||||
|
|
||||||
|
if (nucl_num > 1) then
|
||||||
|
double precision :: dist_min, x, y, z
|
||||||
|
dist_min = huge(1.d0)
|
||||||
|
do i=1,nucl_num
|
||||||
|
do j=i+1,nucl_num
|
||||||
|
x = nucl_coord(i,1)-nucl_coord(j,1)
|
||||||
|
y = nucl_coord(i,2)-nucl_coord(j,2)
|
||||||
|
z = nucl_coord(i,3)-nucl_coord(j,3)
|
||||||
|
dist_min = min(x*x + y*y + z*z, dist_min)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
write(6,'(A,F12.4,A)') 'Minimal interatomic distance found: ', &
|
||||||
|
dsqrt(dist_min)*a0,' Angstrom'
|
||||||
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
IRP_IF MPI_DEBUG
|
IRP_IF MPI_DEBUG
|
||||||
@ -211,7 +227,7 @@ END_PROVIDER
|
|||||||
END_DOC
|
END_DOC
|
||||||
integer :: iunit, i
|
integer :: iunit, i
|
||||||
integer, external :: getUnitAndOpen
|
integer, external :: getUnitAndOpen
|
||||||
character*(128) :: filename
|
character*(1024) :: filename
|
||||||
if (mpi_master) then
|
if (mpi_master) then
|
||||||
call getenv('QP_ROOT',filename)
|
call getenv('QP_ROOT',filename)
|
||||||
filename = trim(filename)//'/data/list_element.txt'
|
filename = trim(filename)//'/data/list_element.txt'
|
||||||
|
@ -23,8 +23,6 @@ subroutine huckel_guess
|
|||||||
Fock_matrix_ao_alpha(1:ao_num,1:ao_num) = A(1:ao_num,1:ao_num)
|
Fock_matrix_ao_alpha(1:ao_num,1:ao_num) = A(1:ao_num,1:ao_num)
|
||||||
Fock_matrix_ao_beta (1:ao_num,1:ao_num) = A(1:ao_num,1:ao_num)
|
Fock_matrix_ao_beta (1:ao_num,1:ao_num) = A(1:ao_num,1:ao_num)
|
||||||
|
|
||||||
! TOUCH mo_coef
|
|
||||||
|
|
||||||
TOUCH Fock_matrix_ao_alpha Fock_matrix_ao_beta
|
TOUCH Fock_matrix_ao_alpha Fock_matrix_ao_beta
|
||||||
mo_coef = eigenvectors_fock_matrix_mo
|
mo_coef = eigenvectors_fock_matrix_mo
|
||||||
SOFT_TOUCH mo_coef
|
SOFT_TOUCH mo_coef
|
||||||
|
@ -196,6 +196,13 @@ END_DOC
|
|||||||
|
|
||||||
double precision,allocatable :: scratch(:,:)
|
double precision,allocatable :: scratch(:,:)
|
||||||
integer :: i,j,k,i_DIIS,j_DIIS
|
integer :: i,j,k,i_DIIS,j_DIIS
|
||||||
|
double precision :: rcond, ferr, berr
|
||||||
|
integer, allocatable :: iwork(:)
|
||||||
|
integer :: lwork
|
||||||
|
|
||||||
|
if (dim_DIIS < 1) then
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
allocate( &
|
allocate( &
|
||||||
B_matrix_DIIS(dim_DIIS+1,dim_DIIS+1), &
|
B_matrix_DIIS(dim_DIIS+1,dim_DIIS+1), &
|
||||||
@ -239,77 +246,70 @@ END_DOC
|
|||||||
B_matrix_DIIS(dim_DIIS+1,dim_DIIS+1) = 0.d0
|
B_matrix_DIIS(dim_DIIS+1,dim_DIIS+1) = 0.d0
|
||||||
C_vector_DIIS(dim_DIIS+1) = -1.d0
|
C_vector_DIIS(dim_DIIS+1) = -1.d0
|
||||||
|
|
||||||
! Solve the linear system C = B.X
|
deallocate(scratch)
|
||||||
|
|
||||||
|
! Estimate condition number of B
|
||||||
|
double precision :: anorm
|
||||||
integer :: info
|
integer :: info
|
||||||
integer,allocatable :: ipiv(:)
|
integer,allocatable :: ipiv(:)
|
||||||
|
|
||||||
allocate( &
|
|
||||||
ipiv(dim_DIIS+1) &
|
|
||||||
)
|
|
||||||
|
|
||||||
double precision, allocatable :: AF(:,:)
|
double precision, allocatable :: AF(:,:)
|
||||||
allocate (AF(dim_DIIS+1,dim_DIIS+1))
|
double precision, external :: dlange
|
||||||
double precision :: rcond, ferr, berr
|
|
||||||
integer :: iwork(dim_DIIS+1), lwork
|
|
||||||
|
|
||||||
call dsysvx('N','U',dim_DIIS+1,1, &
|
lwork = max((dim_DIIS+1)**2, (dim_DIIS+1)*5)
|
||||||
B_matrix_DIIS,size(B_matrix_DIIS,1), &
|
allocate(AF(dim_DIIS+1,dim_DIIS+1))
|
||||||
AF, size(AF,1), &
|
allocate(ipiv(2*(dim_DIIS+1)), iwork(2*(dim_DIIS+1)) )
|
||||||
ipiv, &
|
|
||||||
C_vector_DIIS,size(C_vector_DIIS,1), &
|
|
||||||
X_vector_DIIS,size(X_vector_DIIS,1), &
|
|
||||||
rcond, &
|
|
||||||
ferr, &
|
|
||||||
berr, &
|
|
||||||
scratch,-1, &
|
|
||||||
iwork, &
|
|
||||||
info &
|
|
||||||
)
|
|
||||||
lwork = int(scratch(1,1))
|
|
||||||
deallocate(scratch)
|
|
||||||
allocate(scratch(lwork,1))
|
allocate(scratch(lwork,1))
|
||||||
|
|
||||||
call dsysvx('N','U',dim_DIIS+1,1, &
|
anorm = dlange('1', dim_DIIS+1, dim_DIIS+1, B_matrix_DIIS, &
|
||||||
B_matrix_DIIS,size(B_matrix_DIIS,1), &
|
size(B_matrix_DIIS,1), scratch)
|
||||||
AF, size(AF,1), &
|
|
||||||
ipiv, &
|
|
||||||
C_vector_DIIS,size(C_vector_DIIS,1), &
|
|
||||||
X_vector_DIIS,size(X_vector_DIIS,1), &
|
|
||||||
rcond, &
|
|
||||||
ferr, &
|
|
||||||
berr, &
|
|
||||||
scratch,size(scratch), &
|
|
||||||
iwork, &
|
|
||||||
info &
|
|
||||||
)
|
|
||||||
|
|
||||||
if(info < 0) then
|
AF(:,:) = B_matrix_DIIS(:,:)
|
||||||
stop 'bug in DIIS'
|
call dgetrf(dim_DIIS+1,dim_DIIS+1,AF,size(AF,1),ipiv,info)
|
||||||
|
if (info /= 0) then
|
||||||
|
dim_DIIS = 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call dgecon( '1', dim_DIIS+1, AF, &
|
||||||
|
size(AF,1), anorm, rcond, scratch, iwork, info )
|
||||||
|
if (info /= 0) then
|
||||||
|
dim_DIIS = 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (rcond < 1.d-14) then
|
||||||
|
dim_DIIS = 0
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (rcond > 1.d-12) then
|
! Solve the linear system C = B.X
|
||||||
|
|
||||||
|
X_vector_DIIS = C_vector_DIIS
|
||||||
|
call dgesv ( dim_DIIS+1 , 1, B_matrix_DIIS, size(B_matrix_DIIS,1), &
|
||||||
|
ipiv , X_vector_DIIS , size(X_vector_DIIS,1), info)
|
||||||
|
|
||||||
|
deallocate(scratch,AF,iwork)
|
||||||
|
|
||||||
|
if(info < 0) then
|
||||||
|
stop 'bug in DIIS'
|
||||||
|
endif
|
||||||
|
|
||||||
! Compute extrapolated Fock matrix
|
! Compute extrapolated Fock matrix
|
||||||
|
|
||||||
|
|
||||||
!$OMP PARALLEL DO PRIVATE(i,j,k) DEFAULT(SHARED) if (ao_num > 200)
|
!$OMP PARALLEL DO PRIVATE(i,j,k) DEFAULT(SHARED) if (ao_num > 200)
|
||||||
do j=1,ao_num
|
do j=1,ao_num
|
||||||
do i=1,ao_num
|
do i=1,ao_num
|
||||||
Fock_matrix_AO_(i,j) = 0.d0
|
Fock_matrix_AO_(i,j) = 0.d0
|
||||||
enddo
|
enddo
|
||||||
do k=1,dim_DIIS
|
do k=1,dim_DIIS
|
||||||
if (dabs(X_vector_DIIS(k)) < 1.d-10) cycle
|
if (dabs(X_vector_DIIS(k)) < 1.d-10) cycle
|
||||||
do i=1,ao_num
|
do i=1,ao_num
|
||||||
Fock_matrix_AO_(i,j) = Fock_matrix_AO_(i,j) + &
|
Fock_matrix_AO_(i,j) = Fock_matrix_AO_(i,j) + &
|
||||||
X_vector_DIIS(k)*Fock_matrix_DIIS(i,j,dim_DIIS-k+1)
|
X_vector_DIIS(k)*Fock_matrix_DIIS(i,j,dim_DIIS-k+1)
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
enddo
|
enddo
|
||||||
!$OMP END PARALLEL DO
|
enddo
|
||||||
|
enddo
|
||||||
else
|
!$OMP END PARALLEL DO
|
||||||
dim_DIIS = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -17,7 +17,7 @@ program molden
|
|||||||
|
|
||||||
write(i_unit_output,'(A)') '[Molden Format]'
|
write(i_unit_output,'(A)') '[Molden Format]'
|
||||||
|
|
||||||
write(i_unit_output,'(A)') '[Atoms] AU'
|
write(i_unit_output,'(A)') '[Atoms] ANGSTROM'
|
||||||
do i = 1, nucl_num
|
do i = 1, nucl_num
|
||||||
write(i_unit_output,'(A2,2X,I4,2X,I4,3(2X,F15.10))') &
|
write(i_unit_output,'(A2,2X,I4,2X,I4,3(2X,F15.10))') &
|
||||||
trim(element_name(int(nucl_charge(i)))), &
|
trim(element_name(int(nucl_charge(i)))), &
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
BEGIN_PROVIDER [double precision, act_2_rdm_ab_mo, (n_act_orb,n_act_orb,n_act_orb,n_act_orb,N_states)]
|
BEGIN_PROVIDER [double precision, act_2_rdm_ab_mo, (n_act_orb,n_act_orb,n_act_orb,n_act_orb,N_states)]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
|
! 12 12
|
||||||
|
! 1 2 1 2 == <ij|kl>
|
||||||
! act_2_rdm_ab_mo(i,j,k,l,istate) = STATE SPECIFIC physicist notation for 2RDM of alpha/beta electrons
|
! act_2_rdm_ab_mo(i,j,k,l,istate) = STATE SPECIFIC physicist notation for 2RDM of alpha/beta electrons
|
||||||
!
|
!
|
||||||
! <Psi_{istate}| a^{\dagger}_{i \alpha} a^{\dagger}_{j \beta} a_{l \beta} a_{k \alpha} |Psi_{istate}>
|
! <Psi_{istate}| a^{\dagger}_{i \alpha} a^{\dagger}_{j \beta} a_{l \beta} a_{k \alpha} |Psi_{istate}>
|
||||||
|
@ -23,7 +23,7 @@ subroutine extrapolate_data(N_data, data, pt2, output)
|
|||||||
x(i,2) = pt2_rev(i)
|
x(i,2) = pt2_rev(i)
|
||||||
enddo
|
enddo
|
||||||
do ifit=2,N_data
|
do ifit=2,N_data
|
||||||
call get_pseudo_inverse(x,size(x,1),ifit,2,x_inv,size(x_inv,1))
|
call get_pseudo_inverse(x,size(x,1),ifit,2,x_inv,size(x_inv,1),1.d-10)
|
||||||
ab = matmul(x_inv(1:2,1:ifit),y(1:ifit))
|
ab = matmul(x_inv(1:2,1:ifit),y(1:ifit))
|
||||||
output(ifit) = ab(1)
|
output(ifit) = ab(1)
|
||||||
enddo
|
enddo
|
||||||
|
@ -75,7 +75,6 @@ subroutine give_explicit_poly_and_gaussian(P_new,P_center,p,fact_k,iorder,alpha,
|
|||||||
P_new(0,1) = 0.d0
|
P_new(0,1) = 0.d0
|
||||||
P_new(0,2) = 0.d0
|
P_new(0,2) = 0.d0
|
||||||
P_new(0,3) = 0.d0
|
P_new(0,3) = 0.d0
|
||||||
|
|
||||||
!DIR$ FORCEINLINE
|
!DIR$ FORCEINLINE
|
||||||
call gaussian_product(alpha,A_center,beta,B_center,fact_k,p,P_center)
|
call gaussian_product(alpha,A_center,beta,B_center,fact_k,p,P_center)
|
||||||
if (fact_k < thresh) then
|
if (fact_k < thresh) then
|
||||||
|
@ -47,14 +47,14 @@ subroutine svd_complex(A,LDA,U,LDU,D,Vt,LDVt,m,n)
|
|||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Compute A = U.D.Vt
|
! Compute A = U.D.Vt
|
||||||
!
|
!
|
||||||
! LDx : leftmost dimension of x
|
! LDx : leftmost dimension of x
|
||||||
!
|
!
|
||||||
! Dimension of A is m x n
|
! Dimension of A is m x n
|
||||||
! A,U,Vt are complex*16
|
! A,U,Vt are complex*16
|
||||||
! D is double precision
|
! D is double precision
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
integer, intent(in) :: LDA, LDU, LDVt, m, n
|
integer, intent(in) :: LDA, LDU, LDVt, m, n
|
||||||
complex*16, intent(in) :: A(LDA,n)
|
complex*16, intent(in) :: A(LDA,n)
|
||||||
complex*16, intent(out) :: U(LDU,m)
|
complex*16, intent(out) :: U(LDU,m)
|
||||||
@ -63,12 +63,12 @@ subroutine svd_complex(A,LDA,U,LDU,D,Vt,LDVt,m,n)
|
|||||||
complex*16,allocatable :: work(:)
|
complex*16,allocatable :: work(:)
|
||||||
double precision,allocatable :: rwork(:)
|
double precision,allocatable :: rwork(:)
|
||||||
integer :: info, lwork, i, j, k, lrwork
|
integer :: info, lwork, i, j, k, lrwork
|
||||||
|
|
||||||
complex*16,allocatable :: A_tmp(:,:)
|
complex*16,allocatable :: A_tmp(:,:)
|
||||||
allocate (A_tmp(LDA,n))
|
allocate (A_tmp(LDA,n))
|
||||||
A_tmp = A
|
A_tmp = A
|
||||||
lrwork = 5*min(m,n)
|
lrwork = 5*min(m,n)
|
||||||
|
|
||||||
! Find optimal size for temp arrays
|
! Find optimal size for temp arrays
|
||||||
allocate(work(1),rwork(lrwork))
|
allocate(work(1),rwork(lrwork))
|
||||||
lwork = -1
|
lwork = -1
|
||||||
@ -76,25 +76,25 @@ subroutine svd_complex(A,LDA,U,LDU,D,Vt,LDVt,m,n)
|
|||||||
D, U, LDU, Vt, LDVt, work, lwork, rwork, info)
|
D, U, LDU, Vt, LDVt, work, lwork, rwork, info)
|
||||||
lwork = int(work(1))
|
lwork = int(work(1))
|
||||||
deallocate(work)
|
deallocate(work)
|
||||||
|
|
||||||
allocate(work(lwork))
|
allocate(work(lwork))
|
||||||
call zgesvd('A','A', m, n, A_tmp, LDA, &
|
call zgesvd('A','A', m, n, A_tmp, LDA, &
|
||||||
D, U, LDU, Vt, LDVt, work, lwork, rwork, info)
|
D, U, LDU, Vt, LDVt, work, lwork, rwork, info)
|
||||||
deallocate(work,rwork,A_tmp)
|
deallocate(work,rwork,A_tmp)
|
||||||
|
|
||||||
if (info /= 0) then
|
if (info /= 0) then
|
||||||
print *, info, ': SVD failed'
|
print *, info, ': SVD failed'
|
||||||
stop
|
stop
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ortho_canonical_complex(overlap,LDA,N,C,LDC,m)
|
subroutine ortho_canonical_complex(overlap,LDA,N,C,LDC,m,cutoff)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Compute C_new=C_old.U.s^-1/2 canonical orthogonalization.
|
! Compute C_new=C_old.U.s^-1/2 canonical orthogonalization.
|
||||||
!
|
!
|
||||||
! overlap : overlap matrix
|
! overlap : overlap matrix
|
||||||
!
|
!
|
||||||
! LDA : leftmost dimension of overlap array
|
! LDA : leftmost dimension of overlap array
|
||||||
!
|
!
|
||||||
@ -108,10 +108,11 @@ subroutine ortho_canonical_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
! m : Coefficients matrix is MxN, ( array is (LDC,N) )
|
! m : Coefficients matrix is MxN, ( array is (LDC,N) )
|
||||||
!
|
!
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
integer, intent(in) :: lda, ldc, n
|
integer, intent(in) :: lda, ldc, n
|
||||||
integer, intent(out) :: m
|
integer, intent(out) :: m
|
||||||
complex*16, intent(in) :: overlap(lda,n)
|
complex*16, intent(in) :: overlap(lda,n)
|
||||||
|
double precision, intent(in) :: cutoff
|
||||||
complex*16, intent(inout) :: C(ldc,n)
|
complex*16, intent(inout) :: C(ldc,n)
|
||||||
complex*16, allocatable :: U(:,:)
|
complex*16, allocatable :: U(:,:)
|
||||||
complex*16, allocatable :: Vt(:,:)
|
complex*16, allocatable :: Vt(:,:)
|
||||||
@ -119,19 +120,19 @@ subroutine ortho_canonical_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
complex*16, allocatable :: S(:,:)
|
complex*16, allocatable :: S(:,:)
|
||||||
!DIR$ ATTRIBUTES ALIGN : 64 :: U, Vt, D
|
!DIR$ ATTRIBUTES ALIGN : 64 :: U, Vt, D
|
||||||
integer :: info, i, j
|
integer :: info, i, j
|
||||||
|
|
||||||
if (n < 2) then
|
if (n < 2) then
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
allocate (U(ldc,n), Vt(lda,n), D(n), S(lda,n))
|
allocate (U(ldc,n), Vt(lda,n), D(n), S(lda,n))
|
||||||
|
|
||||||
call svd_complex(overlap,lda,U,ldc,D,Vt,lda,n,n)
|
call svd_complex(overlap,lda,U,ldc,D,Vt,lda,n,n)
|
||||||
|
|
||||||
D(:) = dsqrt(D(:))
|
D(:) = dsqrt(D(:))
|
||||||
m=n
|
m=n
|
||||||
do i=1,n
|
do i=1,n
|
||||||
if ( D(i) >= 1.d-6 ) then
|
if ( D(i) >= cutoff ) then
|
||||||
D(i) = 1.d0/D(i)
|
D(i) = 1.d0/D(i)
|
||||||
else
|
else
|
||||||
m = i-1
|
m = i-1
|
||||||
@ -139,39 +140,39 @@ subroutine ortho_canonical_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
do i=m+1,n
|
do i=m+1,n
|
||||||
D(i) = 0.d0
|
D(i) = 0.d0
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do i=1,m
|
do i=1,m
|
||||||
if ( D(i) >= 1.d5 ) then
|
if ( D(i) >= 1.d5 ) then
|
||||||
print *, 'Warning: Basis set may have linear dependence problems'
|
print *, 'Warning: Basis set may have linear dependence problems'
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do j=1,n
|
do j=1,n
|
||||||
do i=1,n
|
do i=1,n
|
||||||
S(i,j) = U(i,j)*D(j)
|
S(i,j) = U(i,j)*D(j)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do j=1,n
|
do j=1,n
|
||||||
do i=1,n
|
do i=1,n
|
||||||
U(i,j) = C(i,j)
|
U(i,j) = C(i,j)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call zgemm('N','N',n,n,n,(1.d0,0.d0),U,size(U,1),S,size(S,1),(0.d0,0.d0),C,size(C,1))
|
call zgemm('N','N',n,n,n,(1.d0,0.d0),U,size(U,1),S,size(S,1),(0.d0,0.d0),C,size(C,1))
|
||||||
deallocate (U, Vt, D, S)
|
deallocate (U, Vt, D, S)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
subroutine ortho_qr_complex(A,LDA,m,n)
|
subroutine ortho_qr_complex(A,LDA,m,n)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Orthogonalization using Q.R factorization
|
! Orthogonalization using Q.R factorization
|
||||||
!
|
!
|
||||||
! A : matrix to orthogonalize
|
! A : matrix to orthogonalize
|
||||||
!
|
!
|
||||||
! LDA : leftmost dimension of A
|
! LDA : leftmost dimension of A
|
||||||
@ -183,7 +184,7 @@ subroutine ortho_qr_complex(A,LDA,m,n)
|
|||||||
END_DOC
|
END_DOC
|
||||||
integer, intent(in) :: m,n, LDA
|
integer, intent(in) :: m,n, LDA
|
||||||
complex*16, intent(inout) :: A(LDA,n)
|
complex*16, intent(inout) :: A(LDA,n)
|
||||||
|
|
||||||
integer :: lwork, info
|
integer :: lwork, info
|
||||||
integer, allocatable :: jpvt(:)
|
integer, allocatable :: jpvt(:)
|
||||||
complex*16, allocatable :: tau(:), work(:)
|
complex*16, allocatable :: tau(:), work(:)
|
||||||
@ -215,7 +216,7 @@ subroutine ortho_qr_unblocked_complex(A,LDA,m,n)
|
|||||||
END_DOC
|
END_DOC
|
||||||
integer, intent(in) :: m,n, LDA
|
integer, intent(in) :: m,n, LDA
|
||||||
double precision, intent(inout) :: A(LDA,n)
|
double precision, intent(inout) :: A(LDA,n)
|
||||||
|
|
||||||
integer :: info
|
integer :: info
|
||||||
integer, allocatable :: jpvt(:)
|
integer, allocatable :: jpvt(:)
|
||||||
double precision, allocatable :: tau(:), work(:)
|
double precision, allocatable :: tau(:), work(:)
|
||||||
@ -228,13 +229,13 @@ subroutine ortho_qr_unblocked_complex(A,LDA,m,n)
|
|||||||
! call dorg2r(m, n, n, A, LDA, tau, WORK, INFO)
|
! call dorg2r(m, n, n, A, LDA, tau, WORK, INFO)
|
||||||
! deallocate(WORK,jpvt,tau)
|
! deallocate(WORK,jpvt,tau)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m)
|
subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m,cutoff)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Compute C_new=C_old.S^-1/2 orthogonalization.
|
! Compute C_new=C_old.S^-1/2 orthogonalization.
|
||||||
!
|
!
|
||||||
! overlap : overlap matrix
|
! overlap : overlap matrix
|
||||||
!
|
!
|
||||||
! LDA : leftmost dimension of overlap array
|
! LDA : leftmost dimension of overlap array
|
||||||
!
|
!
|
||||||
@ -248,7 +249,7 @@ subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
! M : Coefficients matrix is MxN, ( array is (LDC,N) )
|
! M : Coefficients matrix is MxN, ( array is (LDC,N) )
|
||||||
!
|
!
|
||||||
END_DOC
|
END_DOC
|
||||||
|
|
||||||
integer, intent(in) :: LDA, ldc, n, m
|
integer, intent(in) :: LDA, ldc, n, m
|
||||||
complex*16, intent(in) :: overlap(lda,n)
|
complex*16, intent(in) :: overlap(lda,n)
|
||||||
complex*16, intent(inout) :: C(ldc,n)
|
complex*16, intent(inout) :: C(ldc,n)
|
||||||
@ -256,8 +257,9 @@ subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
complex*16, allocatable :: Vt(:,:)
|
complex*16, allocatable :: Vt(:,:)
|
||||||
double precision, allocatable :: D(:)
|
double precision, allocatable :: D(:)
|
||||||
complex*16, allocatable :: S(:,:)
|
complex*16, allocatable :: S(:,:)
|
||||||
|
double precision, intent(in) :: cutoff
|
||||||
integer :: info, i, j, k
|
integer :: info, i, j, k
|
||||||
|
|
||||||
if (n < 2) then
|
if (n < 2) then
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
@ -267,12 +269,13 @@ subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
call svd_complex(overlap,lda,U,ldc,D,Vt,lda,n,n)
|
call svd_complex(overlap,lda,U,ldc,D,Vt,lda,n,n)
|
||||||
|
|
||||||
!$OMP PARALLEL DEFAULT(NONE) &
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
!$OMP SHARED(S,U,D,Vt,n,C,m) &
|
!$OMP SHARED(S,U,D,Vt,n,C,m,cutoff) &
|
||||||
!$OMP PRIVATE(i,j,k)
|
!$OMP PRIVATE(i,j,k)
|
||||||
|
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do i=1,n
|
do i=1,n
|
||||||
if ( D(i) < 1.d-6 ) then
|
if ( D(i) < cutoff) then
|
||||||
|
print *, 'Removed Linear dependencies :', 1.d0/D(i)
|
||||||
D(i) = 0.d0
|
D(i) = 0.d0
|
||||||
else
|
else
|
||||||
D(i) = 1.d0/dsqrt(D(i))
|
D(i) = 1.d0/dsqrt(D(i))
|
||||||
@ -294,7 +297,7 @@ subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
!$OMP END DO NOWAIT
|
!$OMP END DO NOWAIT
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!$OMP BARRIER
|
!$OMP BARRIER
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do j=1,n
|
do j=1,n
|
||||||
@ -303,11 +306,11 @@ subroutine ortho_lowdin_complex(overlap,LDA,N,C,LDC,m)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!$OMP END DO
|
!$OMP END DO
|
||||||
|
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
call zgemm('N','N',m,n,n,(1.d0,0.d0),U,size(U,1),S,size(S,1),(0.d0,0.d0),C,size(C,1))
|
call zgemm('N','N',m,n,n,(1.d0,0.d0),U,size(U,1),S,size(S,1),(0.d0,0.d0),C,size(C,1))
|
||||||
|
|
||||||
deallocate(U,Vt,S,D)
|
deallocate(U,Vt,S,D)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -340,15 +343,16 @@ subroutine get_inverse_complex(A,LDA,m,C,LDC)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
subroutine get_pseudo_inverse_complex(A,LDA,m,n,C,LDC)
|
subroutine get_pseudo_inverse_complex(A,LDA,m,n,C,LDC,cutoff)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Find C = A^-1
|
! Find C = A^-1
|
||||||
END_DOC
|
END_DOC
|
||||||
integer, intent(in) :: m,n, LDA, LDC
|
integer, intent(in) :: m,n, LDA, LDC
|
||||||
complex*16, intent(in) :: A(LDA,n)
|
complex*16, intent(in) :: A(LDA,n)
|
||||||
|
double precision, intent(in) :: cutoff
|
||||||
complex*16, intent(out) :: C(LDC,m)
|
complex*16, intent(out) :: C(LDC,m)
|
||||||
|
|
||||||
double precision, allocatable :: D(:), rwork(:)
|
double precision, allocatable :: D(:), rwork(:)
|
||||||
complex*16, allocatable :: U(:,:), Vt(:,:), work(:), A_tmp(:,:)
|
complex*16, allocatable :: U(:,:), Vt(:,:), work(:), A_tmp(:,:)
|
||||||
integer :: info, lwork
|
integer :: info, lwork
|
||||||
@ -373,15 +377,15 @@ subroutine get_pseudo_inverse_complex(A,LDA,m,n,C,LDC)
|
|||||||
print *, info, ':: SVD failed'
|
print *, info, ':: SVD failed'
|
||||||
stop 1
|
stop 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
do i=1,n
|
do i=1,n
|
||||||
if (D(i)/D(1) > 1.d-10) then
|
if (D(i)/D(1) > cutoff) then
|
||||||
D(i) = 1.d0/D(i)
|
D(i) = 1.d0/D(i)
|
||||||
else
|
else
|
||||||
D(i) = 0.d0
|
D(i) = 0.d0
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
C = (0.d0,0.d0)
|
C = (0.d0,0.d0)
|
||||||
do i=1,m
|
do i=1,m
|
||||||
do j=1,n
|
do j=1,n
|
||||||
@ -390,9 +394,9 @@ subroutine get_pseudo_inverse_complex(A,LDA,m,n,C,LDC)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
deallocate(U,D,Vt,work,A_tmp,rwork)
|
deallocate(U,D,Vt,work,A_tmp,rwork)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine lapack_diagd_diag_in_place_complex(eigvalues,eigvectors,nmax,n)
|
subroutine lapack_diagd_diag_in_place_complex(eigvalues,eigvectors,nmax,n)
|
||||||
@ -475,7 +479,7 @@ subroutine lapack_diagd_diag_in_place_complex(eigvalues,eigvectors,nmax,n)
|
|||||||
end
|
end
|
||||||
|
|
||||||
subroutine lapack_diagd_diag_complex(eigvalues,eigvectors,H,nmax,n)
|
subroutine lapack_diagd_diag_complex(eigvalues,eigvectors,H,nmax,n)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Diagonalize matrix H(complex)
|
! Diagonalize matrix H(complex)
|
||||||
!
|
!
|
||||||
@ -617,7 +621,7 @@ subroutine lapack_diagd_complex(eigvalues,eigvectors,H,nmax,n)
|
|||||||
allocate (work(lwork),iwork(liwork),rwork(lrwork))
|
allocate (work(lwork),iwork(liwork),rwork(lrwork))
|
||||||
call ZHEEVD( 'V', 'U', n, A, nmax, eigenvalues, work, lwork, &
|
call ZHEEVD( 'V', 'U', n, A, nmax, eigenvalues, work, lwork, &
|
||||||
rwork, lrwork, iwork, liwork, info )
|
rwork, lrwork, iwork, liwork, info )
|
||||||
deallocate(work,iwork,rwork)
|
deallocate(work,iwork,rwork)
|
||||||
|
|
||||||
|
|
||||||
if (info < 0) then
|
if (info < 0) then
|
||||||
@ -640,7 +644,7 @@ subroutine lapack_diagd_complex(eigvalues,eigvectors,H,nmax,n)
|
|||||||
end
|
end
|
||||||
|
|
||||||
subroutine lapack_diag_complex(eigvalues,eigvectors,H,nmax,n)
|
subroutine lapack_diag_complex(eigvalues,eigvectors,H,nmax,n)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Diagonalize matrix H (complex)
|
! Diagonalize matrix H (complex)
|
||||||
!
|
!
|
||||||
@ -695,10 +699,10 @@ subroutine lapack_diag_complex(eigvalues,eigvectors,H,nmax,n)
|
|||||||
do j=1,n
|
do j=1,n
|
||||||
print *, H(i,j)
|
print *, H(i,j)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
stop 1
|
stop 1
|
||||||
end if
|
end if
|
||||||
|
|
||||||
eigvectors = (0.d0,0.d0)
|
eigvectors = (0.d0,0.d0)
|
||||||
eigvalues = 0.d0
|
eigvalues = 0.d0
|
||||||
do j = 1, n
|
do j = 1, n
|
||||||
@ -708,12 +712,12 @@ subroutine lapack_diag_complex(eigvalues,eigvectors,H,nmax,n)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
deallocate(A,eigenvalues)
|
deallocate(A,eigenvalues)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine matrix_vector_product_complex(u0,u1,matrix,sze,lda)
|
subroutine matrix_vector_product_complex(u0,u1,matrix,sze,lda)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! performs u1 += u0 * matrix
|
! performs u1 += u0 * matrix
|
||||||
END_DOC
|
END_DOC
|
||||||
integer, intent(in) :: sze,lda
|
integer, intent(in) :: sze,lda
|
||||||
complex*16, intent(in) :: u0(sze)
|
complex*16, intent(in) :: u0(sze)
|
||||||
@ -727,7 +731,7 @@ subroutine matrix_vector_product_complex(u0,u1,matrix,sze,lda)
|
|||||||
call zhemv('U', sze, (1.d0,0.d0), matrix, lda, u0, incx, (1.d0,0.d0), u1, incy)
|
call zhemv('U', sze, (1.d0,0.d0), matrix, lda, u0, incx, (1.d0,0.d0), u1, incy)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ortho_canonical(overlap,LDA,N,C,LDC,m)
|
subroutine ortho_canonical(overlap,LDA,N,C,LDC,m,cutoff)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Compute C_new=C_old.U.s^-1/2 canonical orthogonalization.
|
! Compute C_new=C_old.U.s^-1/2 canonical orthogonalization.
|
||||||
@ -750,6 +754,7 @@ subroutine ortho_canonical(overlap,LDA,N,C,LDC,m)
|
|||||||
integer, intent(in) :: lda, ldc, n
|
integer, intent(in) :: lda, ldc, n
|
||||||
integer, intent(out) :: m
|
integer, intent(out) :: m
|
||||||
double precision, intent(in) :: overlap(lda,n)
|
double precision, intent(in) :: overlap(lda,n)
|
||||||
|
double precision, intent(in) :: cutoff
|
||||||
double precision, intent(inout) :: C(ldc,n)
|
double precision, intent(inout) :: C(ldc,n)
|
||||||
double precision, allocatable :: U(:,:)
|
double precision, allocatable :: U(:,:)
|
||||||
double precision, allocatable :: Vt(:,:)
|
double precision, allocatable :: Vt(:,:)
|
||||||
@ -769,7 +774,7 @@ subroutine ortho_canonical(overlap,LDA,N,C,LDC,m)
|
|||||||
D(:) = dsqrt(D(:))
|
D(:) = dsqrt(D(:))
|
||||||
m=n
|
m=n
|
||||||
do i=1,n
|
do i=1,n
|
||||||
if ( D(i) >= 1.d-6 ) then
|
if ( D(i) >= cutoff ) then
|
||||||
D(i) = 1.d0/D(i)
|
D(i) = 1.d0/D(i)
|
||||||
else
|
else
|
||||||
m = i-1
|
m = i-1
|
||||||
@ -840,7 +845,7 @@ subroutine ortho_qr(A,LDA,m,n)
|
|||||||
call dorgqr(m, n, n, A, LDA, TAU, WORK, LWORK, INFO)
|
call dorgqr(m, n, n, A, LDA, TAU, WORK, LWORK, INFO)
|
||||||
! /!\ int(WORK(1)) becomes negative when WORK(1) > 2147483648
|
! /!\ int(WORK(1)) becomes negative when WORK(1) > 2147483648
|
||||||
LWORK=max(n,int(WORK(1)))
|
LWORK=max(n,int(WORK(1)))
|
||||||
|
|
||||||
deallocate(WORK)
|
deallocate(WORK)
|
||||||
allocate(WORK(LWORK))
|
allocate(WORK(LWORK))
|
||||||
call dorgqr(m, n, n, A, LDA, TAU, WORK, LWORK, INFO)
|
call dorgqr(m, n, n, A, LDA, TAU, WORK, LWORK, INFO)
|
||||||
@ -874,7 +879,7 @@ subroutine ortho_qr_unblocked(A,LDA,m,n)
|
|||||||
deallocate(WORK,TAU)
|
deallocate(WORK,TAU)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine ortho_lowdin(overlap,LDA,N,C,LDC,m)
|
subroutine ortho_lowdin(overlap,LDA,N,C,LDC,m,cutoff)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Compute C_new=C_old.S^-1/2 orthogonalization.
|
! Compute C_new=C_old.S^-1/2 orthogonalization.
|
||||||
@ -896,6 +901,7 @@ subroutine ortho_lowdin(overlap,LDA,N,C,LDC,m)
|
|||||||
|
|
||||||
integer, intent(in) :: LDA, ldc, n, m
|
integer, intent(in) :: LDA, ldc, n, m
|
||||||
double precision, intent(in) :: overlap(lda,n)
|
double precision, intent(in) :: overlap(lda,n)
|
||||||
|
double precision, intent(in) :: cutoff
|
||||||
double precision, intent(inout) :: C(ldc,n)
|
double precision, intent(inout) :: C(ldc,n)
|
||||||
double precision, allocatable :: U(:,:)
|
double precision, allocatable :: U(:,:)
|
||||||
double precision, allocatable :: Vt(:,:)
|
double precision, allocatable :: Vt(:,:)
|
||||||
@ -912,12 +918,13 @@ subroutine ortho_lowdin(overlap,LDA,N,C,LDC,m)
|
|||||||
call svd(overlap,lda,U,ldc,D,Vt,lda,n,n)
|
call svd(overlap,lda,U,ldc,D,Vt,lda,n,n)
|
||||||
|
|
||||||
!$OMP PARALLEL DEFAULT(NONE) &
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
!$OMP SHARED(S,U,D,Vt,n,C,m) &
|
!$OMP SHARED(S,U,D,Vt,n,C,m,cutoff) &
|
||||||
!$OMP PRIVATE(i,j,k)
|
!$OMP PRIVATE(i,j,k)
|
||||||
|
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
do i=1,n
|
do i=1,n
|
||||||
if ( D(i) < 1.d-6 ) then
|
if ( D(i) < cutoff ) then
|
||||||
|
print *, 'Removed Linear dependencies :', 1.d0/D(i)
|
||||||
D(i) = 0.d0
|
D(i) = 0.d0
|
||||||
else
|
else
|
||||||
D(i) = 1.d0/dsqrt(D(i))
|
D(i) = 1.d0/dsqrt(D(i))
|
||||||
@ -986,13 +993,14 @@ subroutine get_inverse(A,LDA,m,C,LDC)
|
|||||||
deallocate(ipiv,work)
|
deallocate(ipiv,work)
|
||||||
end
|
end
|
||||||
|
|
||||||
subroutine get_pseudo_inverse(A,LDA,m,n,C,LDC)
|
subroutine get_pseudo_inverse(A,LDA,m,n,C,LDC,cutoff)
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Find C = A^-1
|
! Find C = A^-1
|
||||||
END_DOC
|
END_DOC
|
||||||
integer, intent(in) :: m,n, LDA, LDC
|
integer, intent(in) :: m,n, LDA, LDC
|
||||||
double precision, intent(in) :: A(LDA,n)
|
double precision, intent(in) :: A(LDA,n)
|
||||||
|
double precision, intent(in) :: cutoff
|
||||||
double precision, intent(out) :: C(LDC,m)
|
double precision, intent(out) :: C(LDC,m)
|
||||||
|
|
||||||
double precision, allocatable :: U(:,:), D(:), Vt(:,:), work(:), A_tmp(:,:)
|
double precision, allocatable :: U(:,:), D(:), Vt(:,:), work(:), A_tmp(:,:)
|
||||||
@ -1020,7 +1028,7 @@ subroutine get_pseudo_inverse(A,LDA,m,n,C,LDC)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
do i=1,n
|
do i=1,n
|
||||||
if (D(i)/D(1) > 1.d-10) then
|
if (D(i)/D(1) > cutoff) then
|
||||||
D(i) = 1.d0/D(i)
|
D(i) = 1.d0/D(i)
|
||||||
else
|
else
|
||||||
D(i) = 0.d0
|
D(i) = 0.d0
|
||||||
@ -1053,7 +1061,7 @@ subroutine find_rotation(A,LDA,B,m,C,n)
|
|||||||
|
|
||||||
double precision, allocatable :: A_inv(:,:)
|
double precision, allocatable :: A_inv(:,:)
|
||||||
allocate(A_inv(LDA,n))
|
allocate(A_inv(LDA,n))
|
||||||
call get_pseudo_inverse(A,LDA,m,n,A_inv,LDA)
|
call get_pseudo_inverse(A,LDA,m,n,A_inv,LDA,1.d-10)
|
||||||
|
|
||||||
integer :: i,j,k
|
integer :: i,j,k
|
||||||
call dgemm('N','N',n,n,m,1.d0,A_inv,n,B,LDA,0.d0,C,n)
|
call dgemm('N','N',n,n,m,1.d0,A_inv,n,B,LDA,0.d0,C,n)
|
||||||
|
@ -1,205 +0,0 @@
|
|||||||
|
|
||||||
double precision function SABpartial(zA,zB,A,B,nA,nB,gamA,gamB,l)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
dimension nA(3),nB(3)
|
|
||||||
dimension A(3),B(3)
|
|
||||||
gamtot=gamA+gamB
|
|
||||||
SABpartial=1.d0
|
|
||||||
|
|
||||||
u=gamA/gamtot*A(l)+gamB/gamtot*B(l)
|
|
||||||
arg=gamtot*u**2-gamA*A(l)**2-gamB*B(l)**2
|
|
||||||
alpha=dexp(arg)
|
|
||||||
&/gamtot**((1.d0+dfloat(nA(l))+dfloat(nB(l)))/2.d0)
|
|
||||||
wA=dsqrt(gamtot)*(u-A(l))
|
|
||||||
wB=dsqrt(gamtot)*(u-B(l))
|
|
||||||
boundA=dsqrt(gamtot)*(zA-u)
|
|
||||||
boundB=dsqrt(gamtot)*(zB-u)
|
|
||||||
|
|
||||||
accu=0.d0
|
|
||||||
do n=0,nA(l)
|
|
||||||
do m=0,nB(l)
|
|
||||||
integ=nA(l)+nB(l)-n-m
|
|
||||||
accu=accu
|
|
||||||
& +wA**n*wB**m*binom(nA(l),n)*binom(nB(l),m)
|
|
||||||
& *(rinteg(integ,boundB)-rinteg(integ,boundA))
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
SABpartial=SABpartial*accu*alpha
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function rintgauss(n)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
rintgauss=dsqrt(dacos(-1.d0))
|
|
||||||
if(n.eq.0)return
|
|
||||||
if(n.eq.1)then
|
|
||||||
rintgauss=0.d0
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
if(iand(n,1).eq.1)then
|
|
||||||
rintgauss=0.d0
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
rintgauss=rintgauss/2.d0**(n/2)
|
|
||||||
rintgauss=rintgauss*ddfact2(n-1)
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function rinteg(n,u)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
include 'constants.include.F'
|
|
||||||
ichange=1
|
|
||||||
factor=1.d0
|
|
||||||
if(u.lt.0.d0)then
|
|
||||||
u=-u
|
|
||||||
factor=(-1.d0)**(n+1)
|
|
||||||
ichange=-1
|
|
||||||
endif
|
|
||||||
if(iand(n,1).eq.0)then
|
|
||||||
rinteg=0.d0
|
|
||||||
do l=0,n-2,2
|
|
||||||
prod=b_coef(l,u)
|
|
||||||
do k=l+2,n-2,2
|
|
||||||
prod=prod*a_coef(k)
|
|
||||||
enddo
|
|
||||||
rinteg=rinteg+prod
|
|
||||||
enddo
|
|
||||||
prod=dsqrt(pi)/2.d0*erf0(u)
|
|
||||||
do k=0,n-2,2
|
|
||||||
prod=prod*a_coef(k)
|
|
||||||
enddo
|
|
||||||
rinteg=rinteg+prod
|
|
||||||
endif
|
|
||||||
|
|
||||||
if(iand(n,1).eq.1)then
|
|
||||||
rinteg=0.d0
|
|
||||||
do l=1,n-2,2
|
|
||||||
prod=b_coef(l,u)
|
|
||||||
do k=l+2,n-2,2
|
|
||||||
prod=prod*a_coef(k)
|
|
||||||
enddo
|
|
||||||
rinteg=rinteg+prod
|
|
||||||
enddo
|
|
||||||
prod=0.5d0*(1.d0-dexp(-u**2))
|
|
||||||
do k=1,n-2,2
|
|
||||||
prod=prod*a_coef(k)
|
|
||||||
enddo
|
|
||||||
rinteg=rinteg+prod
|
|
||||||
endif
|
|
||||||
|
|
||||||
rinteg=rinteg*factor
|
|
||||||
|
|
||||||
if(ichange.eq.-1)u=-u
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function erf0(x)
|
|
||||||
implicit double precision (a-h,o-z)
|
|
||||||
if(x.lt.0.d0)then
|
|
||||||
erf0=-gammp(0.5d0,x**2)
|
|
||||||
else
|
|
||||||
erf0=gammp(0.5d0,x**2)
|
|
||||||
endif
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
double precision function gammp(a,x)
|
|
||||||
implicit double precision (a-h,o-z)
|
|
||||||
if(x.lt.0..or.a.le.0.)stop 'error in gammp'
|
|
||||||
if(x.lt.a+1.)then
|
|
||||||
call gser(gammp,a,x,gln)
|
|
||||||
else
|
|
||||||
call gcf(gammcf,a,x,gln)
|
|
||||||
gammp=1.-gammcf
|
|
||||||
endif
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
subroutine gser(gamser,a,x,gln)
|
|
||||||
implicit double precision (a-h,o-z)
|
|
||||||
parameter (itmax=100,eps=3.e-7)
|
|
||||||
gln=gammln(a)
|
|
||||||
if(x.le.0.)then
|
|
||||||
if(x.lt.0.) stop 'error in gser'
|
|
||||||
gamser=0.
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
ap=a
|
|
||||||
sum=1./a
|
|
||||||
del=sum
|
|
||||||
do 11 n=1,itmax
|
|
||||||
ap=ap+1.
|
|
||||||
del=del*x/ap
|
|
||||||
sum=sum+del
|
|
||||||
if(abs(del).lt.abs(sum)*eps)go to 1
|
|
||||||
11 continue
|
|
||||||
stop 'a too large, itmax too small'
|
|
||||||
1 gamser=sum*exp(-x+a*log(x)-gln)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
subroutine gcf(gammcf,a,x,gln)
|
|
||||||
implicit double precision (a-h,o-z)
|
|
||||||
parameter (itmax=100,eps=3.e-7)
|
|
||||||
gln=gammln(a)
|
|
||||||
gold=0.
|
|
||||||
a0=1.
|
|
||||||
a1=x
|
|
||||||
b0=0.
|
|
||||||
b1=1.
|
|
||||||
fac=1.
|
|
||||||
do 11 n=1,itmax
|
|
||||||
an=float(n)
|
|
||||||
ana=an-a
|
|
||||||
a0=(a1+a0*ana)*fac
|
|
||||||
b0=(b1+b0*ana)*fac
|
|
||||||
anf=an*fac
|
|
||||||
a1=x*a0+anf*a1
|
|
||||||
b1=x*b0+anf*b1
|
|
||||||
if(a1.ne.0.)then
|
|
||||||
fac=1./a1
|
|
||||||
g=b1*fac
|
|
||||||
if(abs((g-gold)/g).lt.eps)go to 1
|
|
||||||
gold=g
|
|
||||||
endif
|
|
||||||
11 continue
|
|
||||||
stop 'a too large, itmax too small'
|
|
||||||
1 gammcf=exp(-x+a*log(x)-gln)*g
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function ddfact2(n)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
if(iand(n,1).eq.0)stop 'error in ddfact2'
|
|
||||||
ddfact2=1.d0
|
|
||||||
do i=1,n,2
|
|
||||||
ddfact2=ddfact2*dfloat(i)
|
|
||||||
enddo
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function a_coef(n)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
a_coef=dfloat(n+1)/2.d0
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function b_coef(n,u)
|
|
||||||
implicit double precision(a-h,o-z)
|
|
||||||
b_coef=-0.5d0*u**(n+1)*dexp(-u**2)
|
|
||||||
end
|
|
||||||
|
|
||||||
double precision function gammln(xx)
|
|
||||||
implicit double precision (a-h,o-z)
|
|
||||||
real*8 cof(6),stp,half,one,fpf,x,tmp,ser
|
|
||||||
data cof,stp/76.18009173d0,-86.50532033d0,24.01409822d0,
|
|
||||||
* -1.231739516d0,.120858003d-2,-.536382d-5,2.50662827465d0/
|
|
||||||
data half,one,fpf/0.5d0,1.0d0,5.5d0/
|
|
||||||
x=xx-one
|
|
||||||
tmp=x+fpf
|
|
||||||
tmp=(x+half)*log(tmp)-tmp
|
|
||||||
ser=one
|
|
||||||
do 11 j=1,6
|
|
||||||
x=x+one
|
|
||||||
ser=ser+cof(j)/x
|
|
||||||
11 continue
|
|
||||||
gammln=tmp+log(stp*ser)
|
|
||||||
return
|
|
||||||
end
|
|
@ -24,8 +24,9 @@ double precision function primitive_value_explicit(power_prim,center_prim,alpha,
|
|||||||
end
|
end
|
||||||
|
|
||||||
double precision function give_pol_in_r(r,pol,center, alpha,iorder, max_dim)
|
double precision function give_pol_in_r(r,pol,center, alpha,iorder, max_dim)
|
||||||
double precision :: r(3), center(3), alpha,pol(0:max_dim,3)
|
implicit none
|
||||||
integer, intent(in) :: iorder(3), max_dim
|
integer, intent(in) :: iorder(3), max_dim
|
||||||
|
double precision :: r(3), center(3), alpha,pol(0:max_dim,3)
|
||||||
integer :: i,m
|
integer :: i,m
|
||||||
double precision :: gauss(3), x
|
double precision :: gauss(3), x
|
||||||
gauss = 0.d0
|
gauss = 0.d0
|
||||||
@ -33,7 +34,7 @@ double precision function give_pol_in_r(r,pol,center, alpha,iorder, max_dim)
|
|||||||
do m = 1, 3
|
do m = 1, 3
|
||||||
x = r(m) - center(m)
|
x = r(m) - center(m)
|
||||||
do i = 0, iorder(m)
|
do i = 0, iorder(m)
|
||||||
gauss(m) += pol(i,m) * dexp(-alpha *x**2 ) * x**i
|
gauss(m) += pol(i,m) * dexp(-alpha *x*x ) * x**i
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
give_pol_in_r = gauss(1) * gauss(2) * gauss(3)
|
give_pol_in_r = gauss(1) * gauss(2) * gauss(3)
|
||||||
|
54
src/utils/shank.irp.f
Normal file
54
src/utils/shank.irp.f
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
double precision function shank_general(array,n,nmax)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: n,nmax
|
||||||
|
double precision, intent(in) :: array(0:nmax) ! array of the partial sums
|
||||||
|
integer :: ntmp,i
|
||||||
|
double precision :: sum(0:nmax),shank1(0:nmax)
|
||||||
|
if(n.lt.3)then
|
||||||
|
print*,'You asked to Shank a sum but the order is smaller than 3 ...'
|
||||||
|
print*,'n = ',n
|
||||||
|
print*,'stopping ....'
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
ntmp = n
|
||||||
|
sum = array
|
||||||
|
i = 0
|
||||||
|
do while(ntmp.ge.2)
|
||||||
|
i += 1
|
||||||
|
! print*,'i = ',i
|
||||||
|
call shank(sum,ntmp,nmax,shank1)
|
||||||
|
ntmp = ntmp - 2
|
||||||
|
sum = shank1
|
||||||
|
shank_general = shank1(ntmp)
|
||||||
|
enddo
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
subroutine shank(array,n,nmax,shank1)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: n,nmax
|
||||||
|
double precision, intent(in) :: array(0:nmax)
|
||||||
|
double precision, intent(out) :: shank1(0:nmax)
|
||||||
|
integer :: i,j
|
||||||
|
double precision :: shank_function
|
||||||
|
do i = 1, n-1
|
||||||
|
shank1(i-1) = shank_function(array,i,nmax)
|
||||||
|
enddo
|
||||||
|
end
|
||||||
|
|
||||||
|
double precision function shank_function(array,i,n)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: i,n
|
||||||
|
double precision, intent(in) :: array(0:n)
|
||||||
|
double precision :: b_n, b_n1
|
||||||
|
b_n = array(i) - array(i-1)
|
||||||
|
b_n1 = array(i+1) - array(i)
|
||||||
|
if(dabs(b_n1-b_n).lt.1.d-12)then
|
||||||
|
shank_function = array(i+1)
|
||||||
|
else
|
||||||
|
shank_function = array(i+1) - b_n1*b_n1/(b_n1-b_n)
|
||||||
|
endif
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -585,7 +585,7 @@ subroutine end_parallel_job(zmq_to_qp_run_socket,zmq_socket_pull,name_in)
|
|||||||
stop 'Wrong end of job'
|
stop 'Wrong end of job'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
do i=1200,1,-1
|
do i=360,1,-1
|
||||||
rc = f77_zmq_send(zmq_to_qp_run_socket, 'end_job '//trim(zmq_state),8+len(trim(zmq_state)),0)
|
rc = f77_zmq_send(zmq_to_qp_run_socket, 'end_job '//trim(zmq_state),8+len(trim(zmq_state)),0)
|
||||||
rc = f77_zmq_recv(zmq_to_qp_run_socket, message, 512, 0)
|
rc = f77_zmq_recv(zmq_to_qp_run_socket, message, 512, 0)
|
||||||
if (trim(message(1:13)) == 'error waiting') then
|
if (trim(message(1:13)) == 'error waiting') then
|
||||||
|
Loading…
Reference in New Issue
Block a user