pyscf 2.6.2__py3-none-macosx_11_0_arm64.whl → 2.7.0__py3-none-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyscf/__init__.py +2 -2
- pyscf/adc/__init__.py +3 -8
- pyscf/adc/dfadc.py +22 -6
- pyscf/adc/radc.py +106 -15
- pyscf/adc/radc_amplitudes.py +7 -1
- pyscf/adc/radc_ao2mo.py +4 -2
- pyscf/adc/radc_ea.py +524 -8
- pyscf/adc/radc_ip.py +492 -60
- pyscf/adc/radc_ip_cvs.py +4 -2
- pyscf/adc/uadc.py +116 -27
- pyscf/adc/uadc_amplitudes.py +215 -20
- pyscf/adc/uadc_ao2mo.py +30 -9
- pyscf/adc/uadc_ea.py +34 -44
- pyscf/adc/uadc_ip.py +9 -4
- pyscf/adc/uadc_ip_cvs.py +4 -1
- pyscf/agf2/__init__.py +2 -2
- pyscf/agf2/aux_space.py +1 -1
- pyscf/agf2/chkfile.py +1 -1
- pyscf/ao2mo/outcore.py +6 -4
- pyscf/cc/__init__.py +21 -3
- pyscf/cc/bccd.py +0 -46
- pyscf/cc/ccsd.py +16 -8
- pyscf/cc/uccsd.py +1 -1
- pyscf/data/elements.py +1 -1
- pyscf/df/__init__.py +2 -1
- pyscf/df/addons.py +79 -51
- pyscf/df/autoaux.py +191 -0
- pyscf/df/df.py +5 -1
- pyscf/df/grad/casscf.py +0 -41
- pyscf/df/hessian/rhf.py +2 -10
- pyscf/df/hessian/rks.py +1 -7
- pyscf/df/hessian/uhf.py +3 -13
- pyscf/df/hessian/uks.py +1 -8
- pyscf/df/incore.py +17 -5
- pyscf/dft/dks.py +1 -1
- pyscf/dft/libxc.py +65 -639
- pyscf/dft/numint.py +7 -3
- pyscf/dft/radi.py +39 -5
- pyscf/dft/rks.py +1 -1
- pyscf/dft/xc_deriv.py +1 -1
- pyscf/dft/xcfun.py +53 -2
- pyscf/eph/eph_fd.py +1 -1
- pyscf/eph/rhf.py +6 -36
- pyscf/eph/rks.py +0 -4
- pyscf/eph/uhf.py +1 -7
- pyscf/eph/uks.py +1 -7
- pyscf/fci/addons.py +117 -2
- pyscf/fci/cistring.py +1 -1
- pyscf/fci/direct_nosym.py +3 -3
- pyscf/fci/direct_spin0_symm.py +22 -43
- pyscf/fci/direct_spin1.py +65 -9
- pyscf/fci/direct_spin1_symm.py +49 -14
- pyscf/fci/direct_uhf.py +4 -4
- pyscf/fci/selected_ci_symm.py +1 -1
- pyscf/grad/lagrange.py +11 -3
- pyscf/grad/mp2.py +1 -1
- pyscf/grad/sacasscf.py +1 -1
- pyscf/grad/tdrks.py +1 -1
- pyscf/gto/basis/__init__.py +7 -0
- pyscf/gto/basis/bse.py +68 -15
- pyscf/gto/basis/parse_cp2k_pp.py +1 -1
- pyscf/gto/basis/parse_nwchem.py +1 -1
- pyscf/gto/basis/parse_nwchem_ecp.py +2 -1
- pyscf/gto/basis/sap_grasp_large.dat +2438 -0
- pyscf/gto/basis/sap_grasp_small.dat +1434 -0
- pyscf/gto/mole.py +99 -44
- pyscf/gw/gw_ac.py +2 -2
- pyscf/gw/gw_cd.py +2 -2
- pyscf/gw/rpa.py +2 -2
- pyscf/gw/ugw_ac.py +2 -2
- pyscf/gw/urpa.py +1 -1
- pyscf/hessian/rhf.py +30 -128
- pyscf/hessian/rks.py +1 -6
- pyscf/hessian/uhf.py +28 -138
- pyscf/hessian/uks.py +1 -8
- pyscf/lib/ao2mo/nr_ao2mo.c +1 -1
- pyscf/lib/ao2mo/nrr_ao2mo.c +1 -1
- pyscf/lib/ao2mo/r_ao2mo.c +1 -1
- pyscf/lib/cc/ccsd_pack.c +1 -1
- pyscf/lib/cc/ccsd_t.c +6 -6
- pyscf/lib/cc/uccsd_t.c +4 -4
- pyscf/lib/deps/include/XCFun/XCFunExport.h +1 -0
- pyscf/lib/dft/grid_common.c +1 -1
- pyscf/lib/dft/libxc_itrf.c +4 -1
- pyscf/lib/dft/xcfun_itrf.c +1 -1
- pyscf/lib/diis.py +1 -1
- pyscf/lib/exceptions.py +3 -0
- pyscf/lib/gto/fill_grids_int2c.c +11 -9
- pyscf/lib/gto/fill_int2e.c +7 -5
- pyscf/lib/gto/fill_r_4c.c +1 -1
- pyscf/lib/gto/ft_ao.c +1 -1
- pyscf/lib/gto/ft_ao.h +1 -1
- pyscf/lib/gto/gto.h +2 -2
- pyscf/lib/gto/nr_ecp.c +3 -2
- pyscf/lib/libagf2.dylib +0 -0
- pyscf/lib/libao2mo.dylib +0 -0
- pyscf/lib/libcc.dylib +0 -0
- pyscf/lib/libcgto.dylib +0 -0
- pyscf/lib/libcvhf.dylib +0 -0
- pyscf/lib/libdft.dylib +0 -0
- pyscf/lib/libfci.dylib +0 -0
- pyscf/lib/libmcscf.dylib +0 -0
- pyscf/lib/libnp_helper.dylib +0 -0
- pyscf/lib/libpbc.dylib +0 -0
- pyscf/lib/libri.dylib +0 -0
- pyscf/lib/libxc_itrf.dylib +0 -0
- pyscf/lib/libxcfun_itrf.dylib +0 -0
- pyscf/lib/linalg_helper.py +112 -192
- pyscf/lib/mcscf/fci_contract.c +2 -2
- pyscf/lib/misc.py +47 -14
- pyscf/lib/numpy_helper.py +1 -1
- pyscf/lib/pbc/nr_ecp.c +10 -3
- pyscf/lib/pbc/pbc.h +1 -1
- pyscf/lib/vhf/nr_sgx_direct.c +8 -6
- pyscf/lib/vhf/optimizer.c +2 -2
- pyscf/lo/iao.py +1 -1
- pyscf/lo/ibo.py +3 -3
- pyscf/lo/pipek_jacobi.py +1 -1
- pyscf/mcscf/__init__.py +2 -2
- pyscf/mcscf/addons.py +3 -3
- pyscf/mcscf/apc.py +2 -2
- pyscf/mcscf/casci.py +8 -6
- pyscf/mcscf/chkfile.py +70 -41
- pyscf/mcscf/dmet_cas.py +2 -2
- pyscf/mcscf/mc1step.py +62 -38
- pyscf/mcscf/newton_casscf.py +5 -5
- pyscf/mcscf/ucasci.py +1 -1
- pyscf/mcscf/umc1step.py +44 -25
- pyscf/md/integrators.py +3 -3
- pyscf/mp/mp2.py +6 -5
- pyscf/mp/ump2.py +7 -6
- pyscf/pbc/adc/kadc_rhf.py +1 -1
- pyscf/pbc/adc/kadc_rhf_amplitudes.py +2 -2
- pyscf/pbc/ao2mo/eris.py +1 -1
- pyscf/pbc/cc/kccsd_rhf.py +3 -3
- pyscf/pbc/cc/kccsd_t_rhf.py +2 -2
- pyscf/pbc/ci/kcis_rhf.py +2 -2
- pyscf/pbc/df/aft.py +2 -2
- pyscf/pbc/df/aft_ao2mo.py +1 -1
- pyscf/pbc/df/df.py +84 -11
- pyscf/pbc/df/df_jk.py +2 -1
- pyscf/pbc/df/fft.py +6 -2
- pyscf/pbc/df/fft_ao2mo.py +4 -0
- pyscf/pbc/df/fft_jk.py +11 -3
- pyscf/pbc/df/ft_ao.py +4 -3
- pyscf/pbc/df/gdf_builder.py +5 -4
- pyscf/pbc/df/incore.py +1 -1
- pyscf/pbc/df/mdf.py +6 -3
- pyscf/pbc/df/rsdf.py +2 -2
- pyscf/pbc/df/rsdf_builder.py +11 -6
- pyscf/pbc/df/rsdf_helper.py +1 -1
- pyscf/pbc/dft/cdft.py +5 -5
- pyscf/pbc/dft/multigrid/multigrid.py +19 -26
- pyscf/pbc/dft/multigrid/multigrid_pair.py +1 -1
- pyscf/pbc/dft/multigrid/pp.py +1 -1
- pyscf/pbc/dft/numint.py +30 -21
- pyscf/pbc/eph/eph_fd.py +1 -1
- pyscf/pbc/geomopt/geometric_solver.py +1 -1
- pyscf/pbc/gto/cell.py +37 -19
- pyscf/pbc/gto/ecp.py +12 -12
- pyscf/pbc/gto/eval_gto.py +2 -2
- pyscf/pbc/gto/pseudo/pp.py +1 -1
- pyscf/pbc/gw/krgw_ac.py +4 -4
- pyscf/pbc/gw/krgw_cd.py +4 -4
- pyscf/pbc/gw/kugw_ac.py +3 -3
- pyscf/pbc/lib/kpts_helper.py +4 -3
- pyscf/pbc/lib/linalg_helper.py +1 -1
- pyscf/pbc/mp/kmp2.py +1 -1
- pyscf/pbc/mpitools/mpi.py +1 -1
- pyscf/pbc/scf/addons.py +15 -11
- pyscf/pbc/scf/cphf.py +1 -1
- pyscf/pbc/scf/ghf.py +1 -1
- pyscf/pbc/scf/hf.py +21 -24
- pyscf/pbc/scf/kghf.py +33 -29
- pyscf/pbc/scf/khf.py +71 -26
- pyscf/pbc/scf/krohf.py +5 -7
- pyscf/pbc/scf/kuhf.py +53 -22
- pyscf/pbc/scf/rsjk.py +13 -9
- pyscf/pbc/scf/scfint.py +1 -1
- pyscf/pbc/scf/stability.py +1 -1
- pyscf/pbc/scf/uhf.py +3 -1
- pyscf/pbc/symm/symmetry.py +2 -2
- pyscf/pbc/tdscf/kproxy.py +1 -1
- pyscf/pbc/tdscf/kproxy_supercell.py +2 -2
- pyscf/pbc/tdscf/krhf.py +215 -133
- pyscf/pbc/tdscf/krhf_slow_supercell.py +1 -1
- pyscf/pbc/tdscf/krks.py +1 -45
- pyscf/pbc/tdscf/kuhf.py +58 -105
- pyscf/pbc/tdscf/kuks.py +0 -56
- pyscf/pbc/tdscf/proxy.py +1 -1
- pyscf/pbc/tdscf/rhf.py +111 -3
- pyscf/pbc/tdscf/rks.py +2 -1
- pyscf/pbc/tdscf/uhf.py +203 -1
- pyscf/pbc/tdscf/uks.py +2 -1
- pyscf/pbc/tools/k2gamma.py +7 -4
- pyscf/pbc/tools/pbc.py +63 -56
- pyscf/pbc/tools/pyscf_ase.py +0 -1
- pyscf/pbc/tools/pywannier90.py +1 -1
- pyscf/qmmm/mm_mole.py +1 -1
- pyscf/scf/_response_functions.py +2 -2
- pyscf/scf/_vhf.py +14 -10
- pyscf/scf/addons.py +29 -15
- pyscf/scf/cphf.py +14 -52
- pyscf/scf/dhf.py +39 -10
- pyscf/scf/dispersion.py +9 -8
- pyscf/scf/ghf.py +25 -13
- pyscf/scf/ghf_symm.py +2 -2
- pyscf/scf/hf.py +245 -29
- pyscf/scf/rohf.py +37 -5
- pyscf/scf/stability.py +142 -112
- pyscf/scf/ucphf.py +21 -16
- pyscf/scf/uhf.py +95 -58
- pyscf/sgx/sgx.py +1 -1
- pyscf/sgx/sgx_jk.py +4 -4
- pyscf/solvent/_ddcosmo_tdscf_grad.py +1 -1
- pyscf/solvent/ddcosmo.py +1 -1
- pyscf/solvent/pol_embed.py +1 -1
- pyscf/soscf/ciah.py +1 -1
- pyscf/soscf/newton_ah.py +1 -1
- pyscf/symm/__init__.py +1 -1
- pyscf/symm/addons.py +5 -5
- pyscf/tdscf/_lr_eig.py +505 -0
- pyscf/tdscf/common_slow.py +1 -1
- pyscf/tdscf/dhf.py +41 -37
- pyscf/tdscf/dks.py +0 -4
- pyscf/tdscf/ghf.py +91 -71
- pyscf/tdscf/gks.py +16 -16
- pyscf/tdscf/proxy.py +2 -2
- pyscf/tdscf/rhf.py +143 -96
- pyscf/tdscf/rks.py +15 -14
- pyscf/tdscf/uhf.py +117 -70
- pyscf/tdscf/uks.py +17 -18
- pyscf/tools/fcidump.py +3 -0
- pyscf/x2c/sfx2c1e.py +1 -1
- pyscf/x2c/tdscf.py +4 -4
- pyscf/x2c/x2c.py +15 -11
- {pyscf-2.6.2.dist-info → pyscf-2.7.0.dist-info}/METADATA +24 -24
- {pyscf-2.6.2.dist-info → pyscf-2.7.0.dist-info}/NOTICE +3 -1
- {pyscf-2.6.2.dist-info → pyscf-2.7.0.dist-info}/RECORD +242 -240
- {pyscf-2.6.2.dist-info → pyscf-2.7.0.dist-info}/WHEEL +1 -1
- pyscf/dft/gen_libxc_param.py +0 -35
- pyscf/dft/gen_xcfun_param.py +0 -209
- {pyscf-2.6.2.dist-info → pyscf-2.7.0.dist-info}/LICENSE +0 -0
- {pyscf-2.6.2.dist-info → pyscf-2.7.0.dist-info}/top_level.txt +0 -0
pyscf/hessian/uhf.py
CHANGED
|
@@ -53,29 +53,15 @@ def hess_elec(hessobj, mo_energy=None, mo_coeff=None, mo_occ=None,
|
|
|
53
53
|
max_memory, log)
|
|
54
54
|
|
|
55
55
|
if h1ao is None:
|
|
56
|
-
h1ao = hessobj.make_h1(mo_coeff, mo_occ,
|
|
56
|
+
h1ao = hessobj.make_h1(mo_coeff, mo_occ, None, atmlst, log)
|
|
57
57
|
t1 = log.timer_debug1('making H1', *time0)
|
|
58
58
|
if mo1 is None or mo_e1 is None:
|
|
59
59
|
mo1, mo_e1 = hessobj.solve_mo1(mo_energy, mo_coeff, mo_occ, h1ao,
|
|
60
60
|
None, atmlst, max_memory, log)
|
|
61
61
|
t1 = log.timer_debug1('solving MO1', *t1)
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
h1aoa = h1ao['0']
|
|
66
|
-
h1aob = h1ao['1']
|
|
67
|
-
h1aoa = {int(k): h1aoa[k] for k in h1aoa}
|
|
68
|
-
h1aob = {int(k): h1aob[k] for k in h1aob}
|
|
69
|
-
else:
|
|
70
|
-
h1aoa, h1aob = h1ao
|
|
71
|
-
if isinstance(mo1, str):
|
|
72
|
-
mo1 = lib.chkfile.load(mo1, 'scf_mo1')
|
|
73
|
-
mo1a = mo1['0']
|
|
74
|
-
mo1b = mo1['1']
|
|
75
|
-
mo1a = {int(k): mo1a[k] for k in mo1a}
|
|
76
|
-
mo1b = {int(k): mo1b[k] for k in mo1b}
|
|
77
|
-
else:
|
|
78
|
-
mo1a, mo1b = mo1
|
|
63
|
+
h1aoa, h1aob = h1ao
|
|
64
|
+
mo1a, mo1b = mo1
|
|
79
65
|
mo_e1a, mo_e1b = mo_e1
|
|
80
66
|
|
|
81
67
|
nao, nmo = mo_coeff[0].shape
|
|
@@ -159,9 +145,12 @@ def _partial_hess_ejk(hessobj, mo_energy=None, mo_coeff=None, mo_occ=None,
|
|
|
159
145
|
ip1ip2_opt = _make_vhfopt(mol, dm0, 'ip1ip2', 'int2e_ip1ip2')
|
|
160
146
|
ipvip1_opt = _make_vhfopt(mol, dm0, 'ipvip1', 'int2e_ipvip1ipvip2')
|
|
161
147
|
aoslices = mol.aoslice_by_atom()
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
148
|
+
|
|
149
|
+
natm = len(atmlst)
|
|
150
|
+
e1 = numpy.zeros((natm, natm, 3, 3)) # (A,B,dR_A,dR_B)
|
|
151
|
+
ej = numpy.zeros((natm, natm, 3, 3))
|
|
152
|
+
ek = numpy.zeros((natm, natm, 3, 3))
|
|
153
|
+
|
|
165
154
|
for i0, ia in enumerate(atmlst):
|
|
166
155
|
shl0, shl1, p0, p1 = aoslices[ia]
|
|
167
156
|
shls_slice = (shl0, shl1) + (0, mol.nbas)*3
|
|
@@ -242,21 +231,11 @@ def make_h1(hessobj, mo_coeff, mo_occ, chkfile=None, atmlst=None, verbose=None):
|
|
|
242
231
|
vhfa[:,p0:p1] += vj2 - vk2a
|
|
243
232
|
vhfb[:,p0:p1] += vj2 - vk2b
|
|
244
233
|
h1 = hcore_deriv(ia)
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
h1aob[ia] = h1b
|
|
251
|
-
else:
|
|
252
|
-
lib.chkfile.save(chkfile, 'scf_f1ao/0/%d' % ia, h1a)
|
|
253
|
-
lib.chkfile.save(chkfile, 'scf_f1ao/1/%d' % ia, h1b)
|
|
254
|
-
if chkfile is None:
|
|
255
|
-
return (h1aoa,h1aob)
|
|
256
|
-
else:
|
|
257
|
-
return chkfile
|
|
258
|
-
|
|
259
|
-
def solve_mo1(mf, mo_energy, mo_coeff, mo_occ, h1ao_or_chkfile,
|
|
234
|
+
h1aoa[ia] = h1 + vhfa + vhfa.transpose(0,2,1)
|
|
235
|
+
h1aob[ia] = h1 + vhfb + vhfb.transpose(0,2,1)
|
|
236
|
+
return (h1aoa,h1aob)
|
|
237
|
+
|
|
238
|
+
def solve_mo1(mf, mo_energy, mo_coeff, mo_occ, h1ao,
|
|
260
239
|
fx=None, atmlst=None, max_memory=4000, verbose=None,
|
|
261
240
|
max_cycle=50, level_shift=0):
|
|
262
241
|
mol = mf.mol
|
|
@@ -271,6 +250,7 @@ def solve_mo1(mf, mo_energy, mo_coeff, mo_occ, h1ao_or_chkfile,
|
|
|
271
250
|
if fx is None:
|
|
272
251
|
fx = gen_vind(mf, mo_coeff, mo_occ)
|
|
273
252
|
s1a = -mol.intor('int1e_ipovlp', comp=3)
|
|
253
|
+
h1aoa, h1aob = h1ao
|
|
274
254
|
|
|
275
255
|
def _ao2mo(mat, mo_coeff, mocc):
|
|
276
256
|
return numpy.asarray([reduce(numpy.dot, (mo_coeff.T, x, mocc)) for x in mat])
|
|
@@ -296,14 +276,8 @@ def solve_mo1(mf, mo_energy, mo_coeff, mo_occ, h1ao_or_chkfile,
|
|
|
296
276
|
s1ao[:,:,p0:p1] += s1a[:,p0:p1].transpose(0,2,1)
|
|
297
277
|
s1voa.append(_ao2mo(s1ao, mo_coeff[0], mocca))
|
|
298
278
|
s1vob.append(_ao2mo(s1ao, mo_coeff[1], moccb))
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
h1aob = lib.chkfile.load(h1ao_or_chkfile, 'scf_f1ao/1/%d'%ia)
|
|
302
|
-
else:
|
|
303
|
-
h1aoa = h1ao_or_chkfile[0][ia]
|
|
304
|
-
h1aob = h1ao_or_chkfile[1][ia]
|
|
305
|
-
h1voa.append(_ao2mo(h1aoa, mo_coeff[0], mocca))
|
|
306
|
-
h1vob.append(_ao2mo(h1aob, mo_coeff[1], moccb))
|
|
279
|
+
h1voa.append(_ao2mo(h1aoa[ia], mo_coeff[0], mocca))
|
|
280
|
+
h1vob.append(_ao2mo(h1aob[ia], mo_coeff[1], moccb))
|
|
307
281
|
|
|
308
282
|
h1vo = (numpy.vstack(h1voa), numpy.vstack(h1vob))
|
|
309
283
|
s1vo = (numpy.vstack(s1voa), numpy.vstack(s1vob))
|
|
@@ -317,20 +291,13 @@ def solve_mo1(mf, mo_energy, mo_coeff, mo_occ, h1ao_or_chkfile,
|
|
|
317
291
|
|
|
318
292
|
for k in range(ia1-ia0):
|
|
319
293
|
ia = atmlst[k+ia0]
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
lib.chkfile.save(h1ao_or_chkfile, 'scf_mo1/1/%d'%ia, mo1b[k])
|
|
323
|
-
else:
|
|
324
|
-
mo1sa[ia] = mo1a[k]
|
|
325
|
-
mo1sb[ia] = mo1b[k]
|
|
294
|
+
mo1sa[ia] = mo1a[k]
|
|
295
|
+
mo1sb[ia] = mo1b[k]
|
|
326
296
|
e1sa[ia] = e1a[k].reshape(3,nocca,nocca)
|
|
327
297
|
e1sb[ia] = e1b[k].reshape(3,noccb,noccb)
|
|
328
298
|
mo1 = e1 = mo1a = mo1b = e1a = e1b = None
|
|
329
299
|
|
|
330
|
-
|
|
331
|
-
return h1ao_or_chkfile, (e1sa,e1sb)
|
|
332
|
-
else:
|
|
333
|
-
return (mo1sa,mo1sb), (e1sa,e1sb)
|
|
300
|
+
return (mo1sa,mo1sb), (e1sa,e1sb)
|
|
334
301
|
|
|
335
302
|
def gen_vind(mf, mo_coeff, mo_occ):
|
|
336
303
|
nao, nmoa = mo_coeff[0].shape
|
|
@@ -385,8 +352,8 @@ def gen_hop(hobj, mo_energy=None, mo_coeff=None, mo_occ=None, verbose=None):
|
|
|
385
352
|
max_memory, log)
|
|
386
353
|
de2 += hobj.hess_nuc()
|
|
387
354
|
|
|
388
|
-
|
|
389
|
-
|
|
355
|
+
h1ao_cache = hobj.make_h1(mo_coeff, mo_occ, None, atmlst, log)
|
|
356
|
+
h1aoa_cache, h1aob_cache = h1ao_cache
|
|
390
357
|
|
|
391
358
|
aoslices = mol.aoslice_by_atom()
|
|
392
359
|
s1a = -mol.intor('int1e_ipovlp', comp=3)
|
|
@@ -400,10 +367,8 @@ def gen_hop(hobj, mo_energy=None, mo_coeff=None, mo_occ=None, verbose=None):
|
|
|
400
367
|
s1ao = 0
|
|
401
368
|
for ia in range(natm):
|
|
402
369
|
shl0, shl1, p0, p1 = aoslices[ia]
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
h1ao_i = lib.chkfile.load(hobj.chkfile, 'scf_f1ao/1/%d' % ia)
|
|
406
|
-
h1aob += numpy.einsum('x,xij->ij', x[ia], h1ao_i)
|
|
370
|
+
h1aoa += numpy.einsum('x,xij->ij', x[ia], h1aoa_cache[ia])
|
|
371
|
+
h1aob += numpy.einsum('x,xij->ij', x[ia], h1aob_cache[ia])
|
|
407
372
|
s1ao_i = numpy.zeros((3,nao,nao))
|
|
408
373
|
s1ao_i[:,p0:p1] += s1a[:,p0:p1]
|
|
409
374
|
s1ao_i[:,:,p0:p1] += s1a[:,p0:p1].transpose(0,2,1)
|
|
@@ -429,10 +394,8 @@ def gen_hop(hobj, mo_energy=None, mo_coeff=None, mo_occ=None, verbose=None):
|
|
|
429
394
|
|
|
430
395
|
for ja in range(natm):
|
|
431
396
|
q0, q1 = aoslices[ja][2:]
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
hx[ja] += numpy.einsum('xpq,pq->x', h1aoa, dm1a) * 2
|
|
435
|
-
hx[ja] += numpy.einsum('xpq,pq->x', h1aob, dm1b) * 2
|
|
397
|
+
hx[ja] += numpy.einsum('xpq,pq->x', h1aoa_cache[ja], dm1a) * 2
|
|
398
|
+
hx[ja] += numpy.einsum('xpq,pq->x', h1aob_cache[ja], dm1b) * 2
|
|
436
399
|
hx[ja] -= numpy.einsum('xpq,pq->x', s1a[:,q0:q1], dme1[q0:q1])
|
|
437
400
|
hx[ja] -= numpy.einsum('xpq,qp->x', s1a[:,q0:q1], dme1[:,q0:q1])
|
|
438
401
|
return hx.ravel()
|
|
@@ -449,84 +412,11 @@ class Hessian(rhf_hess.HessianBase):
|
|
|
449
412
|
make_h1 = make_h1
|
|
450
413
|
gen_hop = gen_hop
|
|
451
414
|
|
|
452
|
-
def solve_mo1(self, mo_energy, mo_coeff, mo_occ,
|
|
415
|
+
def solve_mo1(self, mo_energy, mo_coeff, mo_occ, h1ao,
|
|
453
416
|
fx=None, atmlst=None, max_memory=4000, verbose=None):
|
|
454
|
-
return solve_mo1(self.base, mo_energy, mo_coeff, mo_occ,
|
|
417
|
+
return solve_mo1(self.base, mo_energy, mo_coeff, mo_occ, h1ao,
|
|
455
418
|
fx, atmlst, max_memory, verbose,
|
|
456
419
|
max_cycle=self.max_cycle, level_shift=self.level_shift)
|
|
457
420
|
|
|
458
421
|
from pyscf import scf
|
|
459
422
|
scf.uhf.UHF.Hessian = lib.class_as_method(Hessian)
|
|
460
|
-
|
|
461
|
-
if __name__ == '__main__':
|
|
462
|
-
from pyscf import gto
|
|
463
|
-
from pyscf import scf
|
|
464
|
-
|
|
465
|
-
mol = gto.Mole()
|
|
466
|
-
mol.verbose = 0
|
|
467
|
-
mol.output = None
|
|
468
|
-
mol.atom = [
|
|
469
|
-
[1 , (1. , 0. , 0.000)],
|
|
470
|
-
[1 , (0. , 1. , 0.000)],
|
|
471
|
-
[1 , (0. , -1.517 , 1.177)],
|
|
472
|
-
[1 , (0. , 1.517 , 1.177)] ]
|
|
473
|
-
mol.basis = '631g'
|
|
474
|
-
mol.unit = 'B'
|
|
475
|
-
mol.build()
|
|
476
|
-
mf = scf.UHF(mol)
|
|
477
|
-
mf.conv_tol = 1e-14
|
|
478
|
-
mf.scf()
|
|
479
|
-
n3 = mol.natm * 3
|
|
480
|
-
hobj = mf.Hessian()
|
|
481
|
-
e2 = hobj.kernel().transpose(0,2,1,3).reshape(n3,n3)
|
|
482
|
-
print(lib.fp(e2) - -0.50693144355876429)
|
|
483
|
-
|
|
484
|
-
mol.spin = 2
|
|
485
|
-
mf = scf.UHF(mol)
|
|
486
|
-
mf.conv_tol = 1e-14
|
|
487
|
-
mf.scf()
|
|
488
|
-
n3 = mol.natm * 3
|
|
489
|
-
hobj = Hessian(mf)
|
|
490
|
-
e2 = hobj.kernel().transpose(0,2,1,3).reshape(n3,n3)
|
|
491
|
-
|
|
492
|
-
def grad_full(ia, inc):
|
|
493
|
-
coord = mol.atom_coord(ia).copy()
|
|
494
|
-
ptr = mol._atm[ia,gto.PTR_COORD]
|
|
495
|
-
de = []
|
|
496
|
-
for i in range(3):
|
|
497
|
-
mol._env[ptr+i] = coord[i] + inc
|
|
498
|
-
mf = scf.UHF(mol).run(conv_tol=1e-14)
|
|
499
|
-
e1a = mf.nuc_grad_method().kernel()
|
|
500
|
-
mol._env[ptr+i] = coord[i] - inc
|
|
501
|
-
mf = scf.UHF(mol).run(conv_tol=1e-14)
|
|
502
|
-
e1b = mf.nuc_grad_method().kernel()
|
|
503
|
-
mol._env[ptr+i] = coord[i]
|
|
504
|
-
de.append((e1a-e1b)/(2*inc))
|
|
505
|
-
return de
|
|
506
|
-
e2ref = [grad_full(ia, .5e-3) for ia in range(mol.natm)]
|
|
507
|
-
e2ref = numpy.asarray(e2ref).reshape(n3,n3)
|
|
508
|
-
print(numpy.linalg.norm(e2-e2ref))
|
|
509
|
-
print(abs(e2-e2ref).max())
|
|
510
|
-
print(numpy.allclose(e2,e2ref,atol=1e-4))
|
|
511
|
-
|
|
512
|
-
# \partial^2 E / \partial R \partial R'
|
|
513
|
-
e2 = hobj.partial_hess_elec(mf.mo_energy, mf.mo_coeff, mf.mo_occ)
|
|
514
|
-
e2 += hobj.hess_nuc(mol)
|
|
515
|
-
e2 = e2.transpose(0,2,1,3).reshape(n3,n3)
|
|
516
|
-
def grad_partial_R(ia, inc):
|
|
517
|
-
coord = mol.atom_coord(ia).copy()
|
|
518
|
-
ptr = mol._atm[ia,gto.PTR_COORD]
|
|
519
|
-
de = []
|
|
520
|
-
for i in range(3):
|
|
521
|
-
mol._env[ptr+i] = coord[i] + inc
|
|
522
|
-
e1a = mf.nuc_grad_method().kernel()
|
|
523
|
-
mol._env[ptr+i] = coord[i] - inc
|
|
524
|
-
e1b = mf.nuc_grad_method().kernel()
|
|
525
|
-
mol._env[ptr+i] = coord[i]
|
|
526
|
-
de.append((e1a-e1b)/(2*inc))
|
|
527
|
-
return de
|
|
528
|
-
e2ref = [grad_partial_R(ia, .5e-4) for ia in range(mol.natm)]
|
|
529
|
-
e2ref = numpy.asarray(e2ref).reshape(n3,n3)
|
|
530
|
-
print(numpy.linalg.norm(e2-e2ref))
|
|
531
|
-
print(abs(e2-e2ref).max())
|
|
532
|
-
print(numpy.allclose(e2,e2ref,atol=1e-8))
|
pyscf/hessian/uks.py
CHANGED
|
@@ -192,14 +192,7 @@ def make_h1(hessobj, mo_coeff, mo_occ, chkfile=None, atmlst=None, verbose=None):
|
|
|
192
192
|
h1aoa[ia] += h1 + veffa + veffa.transpose(0,2,1)
|
|
193
193
|
h1aob[ia] += h1 + veffb + veffb.transpose(0,2,1)
|
|
194
194
|
|
|
195
|
-
|
|
196
|
-
return h1aoa, h1aob
|
|
197
|
-
else:
|
|
198
|
-
for ia in atmlst:
|
|
199
|
-
lib.chkfile.save(chkfile, 'scf_f1ao/0/%d'%ia, h1aoa[ia])
|
|
200
|
-
lib.chkfile.save(chkfile, 'scf_f1ao/1/%d'%ia, h1aob[ia])
|
|
201
|
-
return chkfile
|
|
202
|
-
|
|
195
|
+
return h1aoa, h1aob
|
|
203
196
|
|
|
204
197
|
XX, XY, XZ = 4, 5, 6
|
|
205
198
|
YX, YY, YZ = 5, 7, 8
|
pyscf/lib/ao2mo/nr_ao2mo.c
CHANGED
|
@@ -1225,7 +1225,7 @@ void AO2MOnr_e1_drv(int (*intor)(), void (*fill)(), void (*ftrans)(), int (*fmmm
|
|
|
1225
1225
|
int nao = ao_loc[nbas];
|
|
1226
1226
|
double *eri_ao = malloc(sizeof(double) * nao*nao*nkl*ncomp);
|
|
1227
1227
|
if (eri_ao == NULL) {
|
|
1228
|
-
fprintf(stderr, "malloc(%zu)
|
|
1228
|
+
fprintf(stderr, "malloc(%zu) failed in AO2MOnr_e1_drv\n",
|
|
1229
1229
|
sizeof(double) * nao*nao*nkl*ncomp);
|
|
1230
1230
|
exit(1);
|
|
1231
1231
|
}
|
pyscf/lib/ao2mo/nrr_ao2mo.c
CHANGED
|
@@ -239,7 +239,7 @@ void AO2MOnrr_e1_drv(int (*intor)(), void (*fill)(),
|
|
|
239
239
|
|
|
240
240
|
double *eri_ao = malloc(sizeof(double)* nao*nao*nkl*ncomp);
|
|
241
241
|
if (eri_ao == NULL) {
|
|
242
|
-
fprintf(stderr, "malloc(%zu)
|
|
242
|
+
fprintf(stderr, "malloc(%zu) failed in AO2MOnrr_e1_drv\n",
|
|
243
243
|
sizeof(double) * nao*nao*nkl*ncomp);
|
|
244
244
|
exit(1);
|
|
245
245
|
}
|
pyscf/lib/ao2mo/r_ao2mo.c
CHANGED
|
@@ -835,7 +835,7 @@ void AO2MOr_e1_drv(int (*intor)(), void (*fill)(),
|
|
|
835
835
|
double complex *eri_ao = malloc(sizeof(double complex)
|
|
836
836
|
* nao*nao*nkl*ncomp);
|
|
837
837
|
if (eri_ao == NULL) {
|
|
838
|
-
fprintf(stderr, "malloc(%zu)
|
|
838
|
+
fprintf(stderr, "malloc(%zu) failed in AO2MOr_e1_drv\n",
|
|
839
839
|
sizeof(double complex) * nao*nao*nkl*ncomp);
|
|
840
840
|
exit(1);
|
|
841
841
|
}
|
pyscf/lib/cc/ccsd_pack.c
CHANGED
|
@@ -106,7 +106,7 @@ void CCmake_021(double *out, double *v1, double *v2, int count, int m,
|
|
|
106
106
|
/*
|
|
107
107
|
* if matrix B is symmetric for the contraction A_ij B_ij,
|
|
108
108
|
* Tr(AB) ~ A_ii B_ii + (A_ij + A_ji) B_ij where i > j
|
|
109
|
-
* This function extract the A_ii and the lower
|
|
109
|
+
* This function extract the A_ii and the lower triangular part of A_ij + A_ji
|
|
110
110
|
*/
|
|
111
111
|
void CCprecontract(double *out, double *in, int count, int m, double diagfac)
|
|
112
112
|
{
|
pyscf/lib/cc/ccsd_t.c
CHANGED
|
@@ -400,7 +400,7 @@ void CCsd_t_contract(double *e_tot,
|
|
|
400
400
|
size_t k;
|
|
401
401
|
double *cache1 = malloc(sizeof(double) * (nocc*nocc*nocc*3+2));
|
|
402
402
|
if (cache1 == NULL) {
|
|
403
|
-
fprintf(stderr, "malloc(%zu)
|
|
403
|
+
fprintf(stderr, "malloc(%zu) failed in CCsd_t_contract\n",
|
|
404
404
|
sizeof(double) * nocc*nocc*nocc*3);
|
|
405
405
|
exit(1);
|
|
406
406
|
}
|
|
@@ -455,7 +455,7 @@ void QCIsd_t_contract(double *e_tot,
|
|
|
455
455
|
size_t k;
|
|
456
456
|
double *cache1 = malloc(sizeof(double) * (nocc*nocc*nocc*3+2));
|
|
457
457
|
if (cache1 == NULL) {
|
|
458
|
-
fprintf(stderr, "malloc(%zu)
|
|
458
|
+
fprintf(stderr, "malloc(%zu) failed in QCIsd_t_contract\n",
|
|
459
459
|
sizeof(double) * nocc*nocc*nocc*3);
|
|
460
460
|
exit(1);
|
|
461
461
|
}
|
|
@@ -636,7 +636,7 @@ void CCsd_t_zcontract(double complex *e_tot,
|
|
|
636
636
|
size_t k;
|
|
637
637
|
double complex *cache1 = malloc(sizeof(double complex) * (nocc*nocc*nocc*3+2));
|
|
638
638
|
if (cache1 == NULL) {
|
|
639
|
-
fprintf(stderr, "malloc(%zu)
|
|
639
|
+
fprintf(stderr, "malloc(%zu) failed in CCsd_t_zcontract\n",
|
|
640
640
|
sizeof(double complex) * nocc*nocc*nocc*3);
|
|
641
641
|
exit(1);
|
|
642
642
|
}
|
|
@@ -694,7 +694,7 @@ void QCIsd_t_zcontract(double complex *e_tot,
|
|
|
694
694
|
size_t k;
|
|
695
695
|
double complex *cache1 = malloc(sizeof(double complex) * (nocc*nocc*nocc*3+2));
|
|
696
696
|
if (cache1 == NULL) {
|
|
697
|
-
fprintf(stderr, "malloc(%zu)
|
|
697
|
+
fprintf(stderr, "malloc(%zu) failed in QCIsd_t_zcontract\n",
|
|
698
698
|
sizeof(double complex) * nocc*nocc*nocc*3);
|
|
699
699
|
exit(1);
|
|
700
700
|
}
|
|
@@ -880,7 +880,7 @@ void MPICCsd_t_contract(double *e_tot, double *mo_energy, double *t1T,
|
|
|
880
880
|
size_t k;
|
|
881
881
|
double *cache1 = malloc(sizeof(double) * (nocc*nocc*nocc*3+2));
|
|
882
882
|
if (cache1 == NULL) {
|
|
883
|
-
fprintf(stderr, "malloc(%zu)
|
|
883
|
+
fprintf(stderr, "malloc(%zu) failed in MPICCsd_t_contract\n",
|
|
884
884
|
sizeof(double) * nocc*nocc*nocc*3);
|
|
885
885
|
exit(1);
|
|
886
886
|
}
|
|
@@ -1113,7 +1113,7 @@ void CCsd_zcontract_t3T(double complex *t3Tw, double complex *t3Tv, double *mo_e
|
|
|
1113
1113
|
size_t k;
|
|
1114
1114
|
complex double *cache1 = malloc(sizeof(double complex) * (nocc*nocc*nocc*3+2));
|
|
1115
1115
|
if (cache1 == NULL) {
|
|
1116
|
-
fprintf(stderr, "malloc(%zu)
|
|
1116
|
+
fprintf(stderr, "malloc(%zu) failed in CCsd_zcontract_t3T\n",
|
|
1117
1117
|
sizeof(double complex) * nocc*nocc*nocc*3);
|
|
1118
1118
|
exit(1);
|
|
1119
1119
|
}
|
pyscf/lib/cc/uccsd_t.c
CHANGED
|
@@ -308,7 +308,7 @@ void CCuccsd_t_aaa(double complex *e_tot,
|
|
|
308
308
|
size_t k;
|
|
309
309
|
double *cache1 = malloc(sizeof(double) * (nocc*nocc*nocc*3+2));
|
|
310
310
|
if (cache1 == NULL) {
|
|
311
|
-
fprintf(stderr, "malloc(%zu)
|
|
311
|
+
fprintf(stderr, "malloc(%zu) failed in CCuccsd_t_aaa\n",
|
|
312
312
|
sizeof(double) * nocc*nocc*nocc*3);
|
|
313
313
|
exit(1);
|
|
314
314
|
}
|
|
@@ -557,7 +557,7 @@ void CCuccsd_t_baa(double complex *e_tot,
|
|
|
557
557
|
double *cache1 = malloc(sizeof(double) * (noccb*nocca*nocca*5+1 +
|
|
558
558
|
nocca*2+noccb*2));
|
|
559
559
|
if (cache1 == NULL) {
|
|
560
|
-
fprintf(stderr, "malloc(%zu)
|
|
560
|
+
fprintf(stderr, "malloc(%zu) failed in CCuccsd_t_baa\n",
|
|
561
561
|
sizeof(double) * noccb*nocca*nocca*5);
|
|
562
562
|
exit(1);
|
|
563
563
|
}
|
|
@@ -715,7 +715,7 @@ void CCuccsd_t_zaaa(double complex *e_tot,
|
|
|
715
715
|
double complex *cache1 = malloc(sizeof(double complex) *
|
|
716
716
|
(nocc*nocc*nocc*3+2));
|
|
717
717
|
if (cache1 == NULL) {
|
|
718
|
-
fprintf(stderr, "malloc(%zu)
|
|
718
|
+
fprintf(stderr, "malloc(%zu) failed in CCuccsd_t_zaaa\n",
|
|
719
719
|
sizeof(double complex) * nocc*nocc*nocc*3);
|
|
720
720
|
exit(1);
|
|
721
721
|
}
|
|
@@ -924,7 +924,7 @@ void CCuccsd_t_zbaa(double complex *e_tot,
|
|
|
924
924
|
(noccb*nocca*nocca*5+1 +
|
|
925
925
|
nocca*2+noccb*2));
|
|
926
926
|
if (cache1 == NULL) {
|
|
927
|
-
fprintf(stderr, "malloc(%zu)
|
|
927
|
+
fprintf(stderr, "malloc(%zu) failed in CCuccsd_t_zbaa\n",
|
|
928
928
|
sizeof(double complex) * noccb*nocca*nocca*5);
|
|
929
929
|
exit(1);
|
|
930
930
|
}
|
pyscf/lib/dft/grid_common.c
CHANGED
|
@@ -242,7 +242,7 @@ int orth_components(double *xs_exp, int* bounds, double dx, double radius,
|
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
// add up contributions from all images to the
|
|
245
|
+
// add up contributions from all images to the reference image
|
|
246
246
|
if (ngridx >= nx_per_cell) {
|
|
247
247
|
memset(xs_exp, 0, (topl+1)*nx_per_cell*sizeof(double));
|
|
248
248
|
int ix, l, lb, ub, size_x;
|
pyscf/lib/dft/libxc_itrf.c
CHANGED
|
@@ -1153,6 +1153,7 @@ void LIBXC_xc_reference(int xc_id, const char **refs)
|
|
|
1153
1153
|
}
|
|
1154
1154
|
refs[i] = func.info->refs[i]->ref;
|
|
1155
1155
|
}
|
|
1156
|
+
xc_func_end(&func);
|
|
1156
1157
|
}
|
|
1157
1158
|
|
|
1158
1159
|
int LIBXC_is_nlc(int xc_id)
|
|
@@ -1162,5 +1163,7 @@ int LIBXC_is_nlc(int xc_id)
|
|
|
1162
1163
|
fprintf(stderr, "XC functional %d not found\n", xc_id);
|
|
1163
1164
|
raise_error -1;
|
|
1164
1165
|
}
|
|
1165
|
-
|
|
1166
|
+
int is_nlc = func.info->flags & XC_FLAGS_VV10;
|
|
1167
|
+
xc_func_end(&func);
|
|
1168
|
+
return is_nlc;
|
|
1166
1169
|
}
|
pyscf/lib/dft/xcfun_itrf.c
CHANGED
|
@@ -102,7 +102,7 @@ int XCFUN_eval_xc(int nfn, int *fn_id, double *fac, double *omega,
|
|
|
102
102
|
rho = rho_u;
|
|
103
103
|
err = eval_xc(fun, deriv, XC_N, np, 1, outlen, rho, output);
|
|
104
104
|
}
|
|
105
|
-
// xcfun computed rho*Exc[rho] for zeroth order
|
|
105
|
+
// xcfun computed rho*Exc[rho] for zeroth order derivative instead of Exc[rho]
|
|
106
106
|
for (i = 0; i < np; i++) {
|
|
107
107
|
output[i*outlen] /= rho_u[i] + 1e-150;
|
|
108
108
|
}
|
pyscf/lib/diis.py
CHANGED
|
@@ -135,7 +135,7 @@ class DIIS:
|
|
|
135
135
|
else:
|
|
136
136
|
self._diisfile[key] = value
|
|
137
137
|
# to avoid "Unable to find a valid file signature" error when reload the hdf5
|
|
138
|
-
# file from a crashed
|
|
138
|
+
# file from a crashed calculation
|
|
139
139
|
self._diisfile.flush()
|
|
140
140
|
|
|
141
141
|
def push_err_vec(self, xerr):
|
pyscf/lib/exceptions.py
CHANGED
pyscf/lib/gto/fill_grids_int2c.c
CHANGED
|
@@ -34,24 +34,26 @@
|
|
|
34
34
|
#define BLKSIZE 312
|
|
35
35
|
|
|
36
36
|
// for grids integrals only
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
size_t _max_cache_size(int (*intor)(), int *shls_slice, int ncenter,
|
|
38
|
+
int *atm, int natm, int *bas, int nbas, double *env)
|
|
39
39
|
{
|
|
40
|
-
int i
|
|
40
|
+
int i;
|
|
41
41
|
int i0 = shls_slice[0];
|
|
42
42
|
int i1 = shls_slice[1];
|
|
43
43
|
for (i = 1; i < ncenter; i++) {
|
|
44
44
|
i0 = MIN(i0, shls_slice[i*2 ]);
|
|
45
45
|
i1 = MAX(i1, shls_slice[i*2+1]);
|
|
46
46
|
}
|
|
47
|
+
size_t (*f)() = (size_t (*)())intor;
|
|
48
|
+
size_t cache_size = 0;
|
|
49
|
+
size_t n;
|
|
47
50
|
int shls[4];
|
|
48
|
-
int cache_size = 0;
|
|
49
51
|
for (i = i0; i < i1; i++) {
|
|
50
52
|
shls[0] = i;
|
|
51
53
|
shls[1] = i;
|
|
52
54
|
shls[2] = 0;
|
|
53
55
|
shls[3] = BLKSIZE;
|
|
54
|
-
n = (*
|
|
56
|
+
n = (*f)(NULL, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL);
|
|
55
57
|
cache_size = MAX(cache_size, n);
|
|
56
58
|
}
|
|
57
59
|
return cache_size;
|
|
@@ -73,8 +75,8 @@ void GTOgrids_int2c(int (*intor)(), double *mat, int comp, int hermi,
|
|
|
73
75
|
const int njsh = jsh1 - jsh0;
|
|
74
76
|
const size_t naoi = ao_loc[ish1] - ao_loc[ish0];
|
|
75
77
|
const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0];
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
+
const size_t cache_size = _max_cache_size(intor, shls_slice, 2,
|
|
79
|
+
atm, natm, bas, nbas, env);
|
|
78
80
|
const int dims[] = {naoi, naoj, ngrids};
|
|
79
81
|
#pragma omp parallel
|
|
80
82
|
{
|
|
@@ -151,8 +153,8 @@ void GTOgrids_int2c_spinor(int (*intor)(), double complex *mat, int comp, int he
|
|
|
151
153
|
const int njsh = jsh1 - jsh0;
|
|
152
154
|
const size_t naoi = ao_loc[ish1] - ao_loc[ish0];
|
|
153
155
|
const size_t naoj = ao_loc[jsh1] - ao_loc[jsh0];
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
+
const size_t cache_size = _max_cache_size(intor, shls_slice, 2,
|
|
157
|
+
atm, natm, bas, nbas, env);
|
|
156
158
|
int dims[] = {naoi, naoj, ngrids};
|
|
157
159
|
#pragma omp parallel
|
|
158
160
|
{
|
pyscf/lib/gto/fill_int2e.c
CHANGED
|
@@ -39,24 +39,26 @@ int GTOmax_shell_dim(const int *ao_loc, const int *shls_slice, int ncenter)
|
|
|
39
39
|
}
|
|
40
40
|
return di;
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
size_t GTOmax_cache_size(int (*intor)(), int *shls_slice, int ncenter,
|
|
43
|
+
int *atm, int natm, int *bas, int nbas, double *env)
|
|
44
44
|
{
|
|
45
|
-
int i
|
|
45
|
+
int i;
|
|
46
46
|
int i0 = shls_slice[0];
|
|
47
47
|
int i1 = shls_slice[1];
|
|
48
48
|
for (i = 1; i < ncenter; i++) {
|
|
49
49
|
i0 = MIN(i0, shls_slice[i*2 ]);
|
|
50
50
|
i1 = MAX(i1, shls_slice[i*2+1]);
|
|
51
51
|
}
|
|
52
|
+
size_t (*f)() = (size_t (*)())intor;
|
|
53
|
+
size_t cache_size = 0;
|
|
54
|
+
size_t n;
|
|
52
55
|
int shls[4];
|
|
53
|
-
int cache_size = 0;
|
|
54
56
|
for (i = i0; i < i1; i++) {
|
|
55
57
|
shls[0] = i;
|
|
56
58
|
shls[1] = i;
|
|
57
59
|
shls[2] = i;
|
|
58
60
|
shls[3] = i;
|
|
59
|
-
n = (*
|
|
61
|
+
n = (*f)(NULL, NULL, shls, atm, natm, bas, nbas, env, NULL, NULL);
|
|
60
62
|
cache_size = MAX(cache_size, n);
|
|
61
63
|
}
|
|
62
64
|
return cache_size;
|
pyscf/lib/gto/fill_r_4c.c
CHANGED
|
@@ -88,7 +88,7 @@ void GTOr4c_drv(int (*intor)(), void (*fill)(), int (*prescreen)(),
|
|
|
88
88
|
int ish, jsh, ij;
|
|
89
89
|
double *buf = malloc(sizeof(double) * cache_size);
|
|
90
90
|
if (buf == NULL) {
|
|
91
|
-
fprintf(stderr, "malloc(%zu)
|
|
91
|
+
fprintf(stderr, "malloc(%zu) failed in GTOr4c_drv\n",
|
|
92
92
|
sizeof(double) * cache_size);
|
|
93
93
|
exit(1);
|
|
94
94
|
}
|
pyscf/lib/gto/ft_ao.c
CHANGED
|
@@ -803,7 +803,7 @@ int GTO_ft_aopair_drv(double *outR, double *outI, int *dims,
|
|
|
803
803
|
size_t cache_size = ft_aopair_cache_size(envs) * (size_t)block_size;
|
|
804
804
|
stack = malloc(sizeof(double)*cache_size);
|
|
805
805
|
if (stack == NULL) {
|
|
806
|
-
fprintf(stderr, "gctr = malloc(%zu)
|
|
806
|
+
fprintf(stderr, "gctr = malloc(%zu) failed in GTO_ft_aopair_drv\n",
|
|
807
807
|
sizeof(double) * cache_size);
|
|
808
808
|
return 0;
|
|
809
809
|
}
|
pyscf/lib/gto/ft_ao.h
CHANGED
pyscf/lib/gto/gto.h
CHANGED
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
int GTOmax_shell_dim(const int *ao_loc, const int *shls, int ncenter);
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
size_t GTOmax_cache_size(int (*intor)(), int *shls_slice, int ncenter,
|
|
18
|
+
int *atm, int natm, int *bas, int nbas, double *env);
|
pyscf/lib/gto/nr_ecp.c
CHANGED
|
@@ -5553,7 +5553,7 @@ int ECPtype_so_cart(double *gctr, int *shls, int *ecpbas, int necpbas,
|
|
|
5553
5553
|
// be careful with the factor 1/2 for the spin operator s = 1/2 Pauli matrix
|
|
5554
5554
|
// The ECPso_cart and ECPso_sph integral code evaluates the integrals
|
|
5555
5555
|
// <i|H^{SO}|j> as shown in NWChem ECP doc
|
|
5556
|
-
//
|
|
5556
|
+
// https://nwchemgit.github.io/ECP.html
|
|
5557
5557
|
// Note when calling ECPso_spinor function to evaluate the integrals in
|
|
5558
5558
|
// spinor basis pyscf evaluates the expression like
|
|
5559
5559
|
// einsum('sxy,spq,xpi,yqj->ij', pauli_matrix, so_sph, ui.conj(), uj)
|
|
@@ -5872,7 +5872,8 @@ int ECPtype1_cart(double *gctr, int *shls, int *ecpbas, int necpbas,
|
|
|
5872
5872
|
for (i = 0; i < d3; i++) { rad_all[i] = 0; }
|
|
5873
5873
|
|
|
5874
5874
|
for (iloc = 0; iloc < nslots; iloc++) {
|
|
5875
|
-
if (ecpbas[ANG_OF+ecploc[iloc]*BAS_SLOTS] != -1
|
|
5875
|
+
if (ecpbas[ANG_OF+ecploc[iloc]*BAS_SLOTS] != -1 ||
|
|
5876
|
+
ecpbas[SO_TYPE_OF+ecploc[iloc]*BAS_SLOTS] == 1) {
|
|
5876
5877
|
continue;
|
|
5877
5878
|
}
|
|
5878
5879
|
atm_id = ecpbas[ATOM_OF+ecploc[iloc]*BAS_SLOTS];
|
pyscf/lib/libagf2.dylib
CHANGED
|
Binary file
|
pyscf/lib/libao2mo.dylib
CHANGED
|
Binary file
|
pyscf/lib/libcc.dylib
CHANGED
|
Binary file
|
pyscf/lib/libcgto.dylib
CHANGED
|
Binary file
|
pyscf/lib/libcvhf.dylib
CHANGED
|
Binary file
|
pyscf/lib/libdft.dylib
CHANGED
|
Binary file
|
pyscf/lib/libfci.dylib
CHANGED
|
Binary file
|
pyscf/lib/libmcscf.dylib
CHANGED
|
Binary file
|
pyscf/lib/libnp_helper.dylib
CHANGED
|
Binary file
|
pyscf/lib/libpbc.dylib
CHANGED
|
Binary file
|
pyscf/lib/libri.dylib
CHANGED
|
Binary file
|
pyscf/lib/libxc_itrf.dylib
CHANGED
|
Binary file
|
pyscf/lib/libxcfun_itrf.dylib
CHANGED
|
Binary file
|