@@ -25,10 +25,16 @@ def test_d4_unknown_xc():
25
25
26
26
def test_d4_energy ():
27
27
mol = pyscf .M (atom = 'H 0 0 0; H 0 0 1' )
28
- model = DFTD4Dispersion (mol , xc = 'WB97X' )
28
+ model = DFTD4Dispersion (mol , xc = 'WB97X-2008 ' )
29
29
out = model .get_dispersion ()
30
30
assert abs (out ['energy' ] - - 2.21334459527e-05 ) < 1e-10
31
31
32
+ def test_wb97x_d4_energy ():
33
+ mol = pyscf .M (atom = 'H 0 0 0; H 0 0 1' )
34
+ model = DFTD4Dispersion (mol , xc = 'WB97X' )
35
+ out = model .get_dispersion ()
36
+ assert abs (out ['energy' ] - - 0.00027002 ) < 1e-8
37
+
32
38
def test_d4_gradients ():
33
39
mol = pyscf .M (atom = 'H 0 0 0; H 0 0 1' )
34
40
model = DFTD4Dispersion (mol , xc = 'HF' )
@@ -39,6 +45,82 @@ def test_d4_gradients():
39
45
40
46
def test_d4_with_pbc ():
41
47
mol = pyscf .M (atom = 'H 0 0 0; H 0 0 1' , a = np .eye (3 )* 2 )
42
- model = DFTD4Dispersion (mol , xc = 'WB97X' )
48
+ model = DFTD4Dispersion (mol , xc = 'WB97X-2008 ' )
43
49
out = model .get_dispersion ()
44
50
assert abs (out ['energy' ] - - 0.002715970438476524 ) < 1e-10
51
+
52
+ def test_d4s_energy ():
53
+ ''' Test copied from DFTD4
54
+ '''
55
+ mol = pyscf .M (
56
+ atom = """
57
+ Na -1.855282634 3.586705153 -2.417637293
58
+ H 4.401780235 0.023388444 -4.954577493
59
+ O -2.987060334 4.762520654 1.270433015
60
+ H 0.799808860 1.411034556 -5.046553216
61
+ F -4.206474694 1.842757675 4.550380848
62
+ H -3.543561218 -3.188356651 1.462400217
63
+ H 2.700321601 1.068184525 -1.732346503
64
+ O 3.731140888 -2.070015433 2.231609376
65
+ N -1.753068192 0.359514171 1.053234061
66
+ H 5.417557885 -1.578818300 1.753940027
67
+ H -2.234628682 -2.138565050 4.109222857
68
+ Cl 1.015658662 -3.219521545 -3.360509630
69
+ B 2.421192557 0.266264350 -3.918624743
70
+ B -3.025260988 2.536678890 2.316649847
71
+ N -2.004389486 -2.292351369 2.197828073
72
+ Al 1.122265541 -1.369420070 0.484550554
73
+ """
74
+ )
75
+ model = DFTD4Dispersion (mol , xc = "TPSS" , version = "d4s" )
76
+ out = model .get_dispersion ()
77
+ assert abs (out ['energy' ] - - 0.016049411775539424 ) < 1.0e-7
78
+
79
+ def test_d4s_gradient ():
80
+ ''' Test copied from DFTD4
81
+ '''
82
+ mol = pyscf .M (
83
+ atom = """
84
+ H -1.795376258 -3.778664229 -1.078835583
85
+ S -2.682788333 0.388926662 1.662148652
86
+ B 0.114846497 1.488579332 3.656603965
87
+ O -1.079988795 -0.162591216 -4.557030658
88
+ Mg 0.603028329 4.088161496 -0.025893731
89
+ H -1.225340893 -1.799813824 -3.707731733
90
+ H -1.334609820 -4.248190824 2.727919027
91
+ H -0.162780825 2.412679941 5.690306951
92
+ Si 2.878024440 -0.331205250 1.883113735
93
+ H 0.684893279 0.327902040 -4.205476937
94
+ B -1.209197735 -2.872537625 0.940642042
95
+ Li -3.255726045 2.212410929 -2.867155493
96
+ F -1.831474682 5.205272937 -2.269762706
97
+ H 4.908858657 -1.925765619 2.990699194
98
+ H 1.268062422 -2.604093417 0.551628052
99
+ S 4.119569763 1.598928667 -1.391174777
100
+ """ ,
101
+ spin = 1
102
+ )
103
+ ref = np .array (
104
+ [
105
+ [- 1.04361222e-04 , - 1.65054791e-04 , - 1.36662175e-04 ],
106
+ [- 1.41500522e-03 , + 1.89282651e-04 , + 2.16639105e-04 ],
107
+ [- 1.18067839e-04 , + 4.50543787e-04 , + 1.50087553e-03 ],
108
+ [+ 3.37690080e-04 , - 4.10348598e-04 , - 3.02311767e-04 ],
109
+ [+ 4.39892308e-04 , + 1.54862493e-03 , + 1.33655085e-04 ],
110
+ [+ 1.31259180e-06 , - 7.51721105e-05 , - 1.39848135e-04 ],
111
+ [- 4.61111364e-05 , - 1.65382677e-04 , + 1.81820530e-04 ],
112
+ [- 1.94292825e-05 , + 7.21791149e-05 , + 1.79879351e-04 ],
113
+ [+ 1.14226323e-03 , - 6.08455689e-04 , + 6.24007890e-04 ],
114
+ [+ 6.95738570e-05 , - 1.86718359e-05 , - 1.25837081e-04 ],
115
+ [- 1.66091884e-04 , - 1.03519307e-03 , - 1.71797180e-04 ],
116
+ [- 1.29925668e-03 , + 6.18658801e-05 , - 6.30138324e-04 ],
117
+ [- 1.58991399e-04 , + 5.73306273e-04 , - 2.35799582e-04 ],
118
+ [+ 2.90056077e-04 , - 2.14985916e-04 , + 1.62430848e-04 ],
119
+ [+ 6.43808246e-05 , - 3.35585457e-04 , - 2.45131168e-04 ],
120
+ [+ 9.82145702e-04 , + 1.33047503e-04 , - 1.01178292e-03 ],
121
+ ]
122
+ )
123
+
124
+ model = DFTD4Dispersion (mol , xc = "BLYP" , version = "d4s" )
125
+ out = model .get_dispersion (grad = True )
126
+ assert np .linalg .norm (out ['gradient' ] - ref ) < 1.0e-7
0 commit comments