pyscf 2.6.2__py3-none-macosx_11_0_arm64.whl → 2.8.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/__init__.py +13 -2
- pyscf/ao2mo/_ao2mo.py +10 -1
- pyscf/ao2mo/incore.py +3 -0
- pyscf/ao2mo/nrr_outcore.py +2 -2
- pyscf/ao2mo/outcore.py +9 -7
- pyscf/ao2mo/r_outcore.py +2 -2
- pyscf/cc/__init__.py +21 -3
- pyscf/cc/bccd.py +0 -46
- pyscf/cc/ccsd.py +29 -13
- pyscf/cc/ccsd_rdm.py +6 -1
- pyscf/cc/gccsd.py +2 -2
- pyscf/cc/uccsd.py +7 -7
- pyscf/cc/uccsd_rdm.py +2 -2
- pyscf/data/elements.py +1 -1
- pyscf/df/__init__.py +2 -1
- pyscf/df/addons.py +79 -51
- pyscf/df/autoaux.py +195 -0
- pyscf/df/df.py +5 -1
- pyscf/df/df_jk.py +27 -25
- pyscf/df/grad/casscf.py +0 -41
- pyscf/df/grad/rhf.py +31 -1
- 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 +18 -6
- pyscf/df/outcore.py +6 -6
- pyscf/dft/dks.py +1 -1
- pyscf/dft/gks.py +25 -21
- pyscf/dft/libxc.py +91 -645
- pyscf/dft/numint.py +40 -19
- pyscf/dft/radi.py +48 -7
- pyscf/dft/rks.py +29 -25
- pyscf/dft/roks.py +7 -1
- pyscf/dft/uks.py +34 -25
- 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 -10
- 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/ccsd.py +3 -7
- pyscf/grad/ccsd_slow.py +2 -3
- pyscf/grad/lagrange.py +11 -3
- pyscf/grad/mp2.py +13 -4
- pyscf/grad/sacasscf.py +1 -1
- pyscf/grad/tdrks.py +1 -1
- pyscf/grad/uccsd.py +3 -7
- pyscf/grad/ump2.py +2 -4
- pyscf/gto/basis/__init__.py +17 -4
- pyscf/gto/basis/bse.py +68 -15
- pyscf/gto/basis/def2-mtzvp.dat +4719 -0
- pyscf/gto/basis/def2-mtzvpp.dat +4739 -0
- pyscf/gto/basis/dyall-basis/__init__.py +0 -0
- pyscf/gto/basis/dyall-basis/dyall_2zp.py +6492 -0
- pyscf/gto/basis/dyall-basis/dyall_3zp.py +8343 -0
- pyscf/gto/basis/dyall-basis/dyall_4zp.py +10055 -0
- pyscf/gto/basis/dyall-basis/dyall_aae2z.py +1818 -0
- pyscf/gto/basis/dyall-basis/dyall_aae3z.py +2521 -0
- pyscf/gto/basis/dyall-basis/dyall_aae4z.py +3351 -0
- pyscf/gto/basis/dyall-basis/dyall_acv2z.py +1790 -0
- pyscf/gto/basis/dyall-basis/dyall_acv3z.py +2417 -0
- pyscf/gto/basis/dyall-basis/dyall_acv4z.py +3085 -0
- pyscf/gto/basis/dyall-basis/dyall_ae2z.py +6619 -0
- pyscf/gto/basis/dyall-basis/dyall_ae3z.py +9027 -0
- pyscf/gto/basis/dyall-basis/dyall_ae4z.py +11839 -0
- pyscf/gto/basis/dyall-basis/dyall_av2z.py +1742 -0
- pyscf/gto/basis/dyall-basis/dyall_av3z.py +2318 -0
- pyscf/gto/basis/dyall-basis/dyall_av4z.py +2905 -0
- pyscf/gto/basis/dyall-basis/dyall_cv2z.py +6558 -0
- pyscf/gto/basis/dyall-basis/dyall_cv3z.py +8767 -0
- pyscf/gto/basis/dyall-basis/dyall_cv4z.py +11098 -0
- pyscf/gto/basis/dyall-basis/dyall_v2z.py +6472 -0
- pyscf/gto/basis/dyall-basis/dyall_v3z.py +8539 -0
- pyscf/gto/basis/dyall-basis/dyall_v4z.py +10658 -0
- pyscf/gto/basis/ma-def2-qzvp.dat +5959 -0
- pyscf/gto/basis/ma-def2-qzvpp.dat +6195 -0
- pyscf/gto/basis/ma-def2-svp.dat +3504 -0
- pyscf/gto/basis/ma-def2-svpp.dat +3504 -0
- pyscf/gto/basis/ma-def2-tzvp.dat +4347 -0
- pyscf/gto/basis/ma-def2-tzvpp.dat +4549 -0
- pyscf/gto/basis/parse_cp2k.py +8 -7
- pyscf/gto/basis/parse_cp2k_pp.py +1 -1
- pyscf/gto/basis/parse_nwchem.py +26 -11
- 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/eval_gto.py +1 -1
- pyscf/gto/ft_ao.py +6 -6
- pyscf/gto/mole.py +123 -71
- pyscf/gto/moleintor.py +1 -1
- pyscf/gw/gw_ac.py +2 -2
- pyscf/gw/gw_cd.py +2 -2
- pyscf/gw/rpa.py +135 -246
- pyscf/gw/ugw_ac.py +2 -2
- pyscf/gw/urpa.py +80 -131
- 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/CMakeLists.txt +6 -2
- 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/config.h +0 -1
- pyscf/lib/config.h.in +0 -1
- pyscf/lib/deps/include/XCFun/XCFunExport.h +1 -0
- pyscf/lib/deps/include/xc.h +28 -18
- pyscf/lib/deps/include/xc_funcs.h +50 -2
- pyscf/lib/deps/include/xc_version.h +3 -3
- pyscf/lib/deps/lib/libcint.6.dylib +0 -0
- pyscf/lib/deps/lib/{libxc.12.dylib → libxc.15.dylib} +0 -0
- pyscf/lib/deps/lib/libxcfun.2.dylib +0 -0
- pyscf/lib/dft/grid_common.c +1 -1
- pyscf/lib/dft/libxc_itrf.c +10 -7
- pyscf/lib/dft/nr_numint_sparse.c +3 -3
- pyscf/lib/dft/xcfun_itrf.c +1 -1
- pyscf/lib/diis.py +2 -2
- pyscf/lib/exceptions.py +6 -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/libmp.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 +117 -198
- pyscf/lib/logger.py +2 -1
- pyscf/lib/mcscf/fci_contract.c +10 -3
- pyscf/lib/misc.py +63 -22
- pyscf/lib/mp/CMakeLists.txt +22 -0
- pyscf/lib/mp/mp2.c +518 -0
- pyscf/lib/mp/mp2.h +44 -0
- pyscf/lib/np_helper/CMakeLists.txt +1 -1
- pyscf/lib/np_helper/imatcopy.c +360 -0
- pyscf/lib/np_helper/np_helper.c +94 -0
- pyscf/lib/np_helper/np_helper.h +26 -0
- pyscf/lib/numpy_helper.py +195 -11
- pyscf/lib/pbc/nr_direct.c +2 -7
- pyscf/lib/pbc/nr_ecp.c +10 -3
- pyscf/lib/pbc/pbc.h +1 -1
- pyscf/lib/vhf/fblas.h +3 -0
- pyscf/lib/vhf/nr_sgx_direct.c +8 -6
- pyscf/lib/vhf/nr_sr_vhf.c +8 -12
- pyscf/lib/vhf/optimizer.c +2 -2
- pyscf/lib/vhf/rkb_screen.c +139 -0
- 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 +13 -7
- pyscf/mcscf/chkfile.py +69 -41
- pyscf/mcscf/dmet_cas.py +2 -2
- pyscf/mcscf/mc1step.py +72 -44
- pyscf/mcscf/newton_casscf.py +5 -5
- pyscf/mcscf/ucasci.py +1 -1
- pyscf/mcscf/umc1step.py +49 -28
- pyscf/md/integrators.py +3 -3
- pyscf/mp/__init__.py +1 -0
- pyscf/mp/dfmp2.py +498 -59
- pyscf/mp/dfmp2_native.py +11 -1
- pyscf/mp/dfmp2_slow.py +133 -0
- pyscf/mp/dfump2.py +672 -0
- pyscf/mp/dfump2_native.py +9 -0
- pyscf/mp/dfump2_slow.py +161 -0
- pyscf/mp/gmp2.py +6 -47
- pyscf/mp/mp2.py +25 -10
- pyscf/mp/ump2.py +30 -24
- 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 +8 -9
- pyscf/pbc/df/aft_ao2mo.py +1 -1
- pyscf/pbc/df/df.py +85 -12
- pyscf/pbc/df/df_jk.py +6 -2
- pyscf/pbc/df/fft.py +9 -5
- pyscf/pbc/df/fft_ao2mo.py +4 -0
- pyscf/pbc/df/fft_jk.py +18 -10
- pyscf/pbc/df/ft_ao.py +4 -3
- pyscf/pbc/df/gdf_builder.py +5 -4
- pyscf/pbc/df/incore.py +2 -2
- pyscf/pbc/df/mdf.py +6 -3
- pyscf/pbc/df/mdf_jk.py +2 -1
- pyscf/pbc/df/outcore.py +10 -10
- pyscf/pbc/df/rsdf.py +2 -2
- pyscf/pbc/df/rsdf_builder.py +13 -8
- pyscf/pbc/df/rsdf_helper.py +6 -6
- pyscf/pbc/df/rsdf_jk.py +2 -1
- pyscf/pbc/dft/cdft.py +5 -5
- pyscf/pbc/dft/gen_grid.py +3 -2
- pyscf/pbc/dft/gks.py +14 -3
- pyscf/pbc/dft/kgks.py +15 -4
- pyscf/pbc/dft/krks.py +28 -10
- pyscf/pbc/dft/krks_ksymm.py +21 -9
- pyscf/pbc/dft/krkspu.py +1 -30
- pyscf/pbc/dft/krkspu_ksymm.py +0 -30
- pyscf/pbc/dft/kuks.py +30 -13
- pyscf/pbc/dft/kuks_ksymm.py +22 -10
- pyscf/pbc/dft/kukspu.py +0 -27
- pyscf/pbc/dft/kukspu_ksymm.py +0 -30
- pyscf/pbc/dft/multigrid/multigrid.py +36 -33
- pyscf/pbc/dft/multigrid/multigrid_pair.py +7 -2
- pyscf/pbc/dft/multigrid/pp.py +1 -1
- pyscf/pbc/dft/numint.py +56 -31
- pyscf/pbc/dft/rks.py +16 -24
- pyscf/pbc/dft/uks.py +21 -4
- pyscf/pbc/eph/eph_fd.py +1 -1
- pyscf/pbc/geomopt/geometric_solver.py +1 -1
- pyscf/pbc/gto/_pbcintor.py +1 -0
- pyscf/pbc/gto/cell.py +194 -23
- pyscf/pbc/gto/ecp.py +12 -12
- pyscf/pbc/gto/eval_gto.py +3 -3
- pyscf/pbc/gto/neighborlist.py +4 -1
- 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/_response_functions.py +141 -34
- 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 -32
- pyscf/pbc/scf/kghf.py +33 -29
- pyscf/pbc/scf/khf.py +103 -29
- pyscf/pbc/scf/khf_ksymm.py +15 -1
- pyscf/pbc/scf/krohf.py +5 -7
- pyscf/pbc/scf/kuhf.py +54 -23
- pyscf/pbc/scf/kuhf_ksymm.py +1 -1
- pyscf/pbc/scf/rsjk.py +14 -10
- pyscf/pbc/scf/scfint.py +1 -1
- pyscf/pbc/scf/stability.py +27 -15
- pyscf/pbc/scf/uhf.py +3 -1
- pyscf/pbc/symm/symmetry.py +2 -2
- pyscf/pbc/tdscf/krhf.py +238 -154
- pyscf/pbc/tdscf/krks.py +1 -45
- pyscf/pbc/tdscf/kuhf.py +319 -171
- pyscf/pbc/tdscf/kuks.py +0 -56
- pyscf/pbc/tdscf/rhf.py +116 -3
- pyscf/pbc/tdscf/rks.py +2 -1
- pyscf/pbc/tdscf/uhf.py +214 -1
- pyscf/pbc/tdscf/uks.py +2 -1
- pyscf/pbc/tools/k2gamma.py +20 -6
- pyscf/pbc/tools/lattice.py +3 -3
- pyscf/pbc/tools/pbc.py +111 -91
- 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 +87 -46
- pyscf/scf/_vhf.py +15 -10
- pyscf/scf/addons.py +29 -15
- pyscf/scf/cphf.py +14 -52
- pyscf/scf/dhf.py +121 -38
- pyscf/scf/dispersion.py +10 -9
- pyscf/scf/ghf.py +25 -13
- pyscf/scf/ghf_symm.py +2 -2
- pyscf/scf/hf.py +262 -30
- pyscf/scf/rohf.py +37 -5
- pyscf/scf/stability.py +142 -112
- pyscf/scf/ucphf.py +21 -16
- pyscf/scf/uhf.py +104 -61
- pyscf/sgx/sgx.py +1 -1
- pyscf/sgx/sgx_jk.py +4 -4
- pyscf/solvent/__init__.py +2 -2
- pyscf/solvent/_attach_solvent.py +2 -0
- pyscf/solvent/_ddcosmo_tdscf_grad.py +1 -1
- pyscf/solvent/cosmors.py +366 -0
- pyscf/solvent/ddcosmo.py +1 -1
- pyscf/solvent/pcm.py +4 -4
- pyscf/solvent/pol_embed.py +1 -1
- pyscf/solvent/smd.py +5 -3
- pyscf/soscf/ciah.py +3 -11
- pyscf/soscf/newton_ah.py +5 -2
- pyscf/symm/__init__.py +1 -1
- pyscf/symm/addons.py +5 -5
- pyscf/symm/geom.py +1 -5
- pyscf/tdscf/_lr_eig.py +1002 -0
- pyscf/tdscf/dhf.py +84 -87
- pyscf/tdscf/dks.py +0 -4
- pyscf/tdscf/ghf.py +139 -127
- pyscf/tdscf/gks.py +27 -25
- pyscf/tdscf/rhf.py +194 -147
- pyscf/tdscf/rks.py +26 -22
- pyscf/tdscf/uhf.py +166 -118
- pyscf/tdscf/uks.py +32 -31
- pyscf/tools/fcidump.py +3 -0
- pyscf/tools/qcschema.py +265 -0
- pyscf/x2c/sfx2c1e.py +1 -1
- pyscf/x2c/tdscf.py +41 -41
- pyscf/x2c/x2c.py +15 -11
- {pyscf-2.6.2.dist-info → pyscf-2.8.0.dist-info}/METADATA +39 -36
- {pyscf-2.6.2.dist-info → pyscf-2.8.0.dist-info}/NOTICE +14 -1
- {pyscf-2.6.2.dist-info → pyscf-2.8.0.dist-info}/RECORD +348 -316
- {pyscf-2.6.2.dist-info → pyscf-2.8.0.dist-info}/WHEEL +1 -1
- pyscf/dft/gen_libxc_param.py +0 -35
- pyscf/dft/gen_xcfun_param.py +0 -209
- pyscf/pbc/tdscf/kproxy.py +0 -189
- pyscf/pbc/tdscf/kproxy_supercell.py +0 -664
- pyscf/pbc/tdscf/krhf_slow.py +0 -300
- pyscf/pbc/tdscf/krhf_slow_gamma.py +0 -175
- pyscf/pbc/tdscf/krhf_slow_supercell.py +0 -250
- pyscf/pbc/tdscf/proxy.py +0 -39
- pyscf/pbc/tdscf/rhf_slow.py +0 -35
- pyscf/tdscf/common_slow.py +0 -799
- pyscf/tdscf/proxy.py +0 -258
- pyscf/tdscf/rhf_slow.py +0 -181
- {pyscf-2.6.2.dist-info → pyscf-2.8.0.dist-info}/LICENSE +0 -0
- {pyscf-2.6.2.dist-info → pyscf-2.8.0.dist-info}/top_level.txt +0 -0
pyscf/adc/uadc_ea.py
CHANGED
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
# Author:
|
|
15
|
+
# Author: Abdelrahman Ahmed <>
|
|
16
|
+
# Samragni Banerjee <samragnibanerjee4@gmail.com>
|
|
17
|
+
# James Serna <jamcar456@gmail.com>
|
|
18
|
+
# Terrence Stahl <>
|
|
16
19
|
# Alexander Sokolov <alexander.y.sokolov@gmail.com>
|
|
17
20
|
#
|
|
18
21
|
|
|
@@ -287,22 +290,13 @@ def get_imds(adc, eris=None):
|
|
|
287
290
|
M_ab_a += lib.einsum('mlfd,mled,aebf->ab',t2_1_ab, t2_1_ab, eris_vvvv, optimize=True)
|
|
288
291
|
del eris_vvvv
|
|
289
292
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
temp[:,:,ab_ind_a[1],ab_ind_a[0]] = -adc.imds.t2_1_vvvv[0]
|
|
293
|
-
|
|
294
|
-
M_ab_a -= 2 * 0.5 * 0.25*lib.einsum('mlaf,mlbf->ab',t2_1_a, temp, optimize=True)
|
|
295
|
-
del temp
|
|
296
|
-
|
|
293
|
+
M_ab_a -= 2 * 0.5 * 0.25*lib.einsum('mlaf,mlbf->ab',
|
|
294
|
+
t2_1_a, adc.imds.t2_1_vvvv[0], optimize=True)
|
|
297
295
|
else:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
M_ab_a -= 2*0.5*0.25*lib.einsum('mlad,mlbd->ab', temp_t2a_vvvv, t2_1_a, optimize=True)
|
|
304
|
-
M_ab_a -= 2*0.5*0.25*lib.einsum('mlaf,mlbf->ab', t2_1_a, temp_t2a_vvvv, optimize=True)
|
|
305
|
-
del temp_t2a_vvvv
|
|
296
|
+
M_ab_a -= 2*0.5*0.25*lib.einsum('mlad,mlbd->ab',
|
|
297
|
+
adc.imds.t2_1_vvvv[0], t2_1_a, optimize=True)
|
|
298
|
+
M_ab_a -= 2*0.5*0.25*lib.einsum('mlaf,mlbf->ab', t2_1_a,
|
|
299
|
+
adc.imds.t2_1_vvvv[0], optimize=True)
|
|
306
300
|
|
|
307
301
|
if isinstance(eris.vvvv_p, list):
|
|
308
302
|
|
|
@@ -387,18 +381,20 @@ def get_imds(adc, eris=None):
|
|
|
387
381
|
M_ab_b += lib.einsum('mlfd,mled,eafb->ab',t2_1_ab, t2_1_ab, eris_vVvV, optimize=True)
|
|
388
382
|
|
|
389
383
|
eris_vVvV = eris_vVvV.reshape(nvir_a*nvir_b,nvir_a*nvir_b)
|
|
390
|
-
|
|
391
|
-
M_ab_a -= 0.5*lib.einsum('mlaf,mlbf->ab',t2_1_ab,
|
|
392
|
-
M_ab_b -= 0.5*lib.einsum('mlfa,mlfb->ab',t2_1_ab,
|
|
393
|
-
|
|
384
|
+
|
|
385
|
+
M_ab_a -= 0.5*lib.einsum('mlaf,mlbf->ab',t2_1_ab, adc.imds.t2_1_vvvv[1], optimize=True)
|
|
386
|
+
M_ab_b -= 0.5*lib.einsum('mlfa,mlfb->ab',t2_1_ab, adc.imds.t2_1_vvvv[1], optimize=True)
|
|
387
|
+
|
|
394
388
|
else:
|
|
395
|
-
|
|
389
|
+
M_ab_a -= 0.5 * lib.einsum('mlad,mlbd->ab',
|
|
390
|
+
adc.imds.t2_1_vvvv[1], t2_1_ab, optimize=True)
|
|
391
|
+
M_ab_b -= 0.5 * lib.einsum('mlda,mldb->ab',
|
|
392
|
+
adc.imds.t2_1_vvvv[1], t2_1_ab, optimize=True)
|
|
393
|
+
M_ab_a -= 0.5 * lib.einsum('mlaf,mlbf->ab', t2_1_ab,
|
|
394
|
+
adc.imds.t2_1_vvvv[1], optimize=True)
|
|
395
|
+
M_ab_b -= 0.5 * lib.einsum('mlfa,mlfb->ab', t2_1_ab,
|
|
396
|
+
adc.imds.t2_1_vvvv[1], optimize=True)
|
|
396
397
|
|
|
397
|
-
M_ab_a -= 0.5 * lib.einsum('mlad,mlbd->ab', t2_vVvV, t2_1_ab, optimize=True)
|
|
398
|
-
M_ab_b -= 0.5 * lib.einsum('mlda,mldb->ab', t2_vVvV, t2_1_ab, optimize=True)
|
|
399
|
-
M_ab_a -= 0.5 * lib.einsum('mlaf,mlbf->ab',t2_1_ab, t2_vVvV, optimize=True)
|
|
400
|
-
M_ab_b -= 0.5 * lib.einsum('mlfa,mlfb->ab',t2_1_ab, t2_vVvV, optimize=True)
|
|
401
|
-
del t2_vVvV
|
|
402
398
|
del t2_1_a
|
|
403
399
|
|
|
404
400
|
if isinstance(eris.VVVV_p,np.ndarray):
|
|
@@ -409,22 +405,13 @@ def get_imds(adc, eris=None):
|
|
|
409
405
|
M_ab_b += lib.einsum('mldf,mlde,aebf->ab',t2_1_ab, t2_1_ab, eris_VVVV, optimize=True)
|
|
410
406
|
del eris_VVVV
|
|
411
407
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
temp[:,:,ab_ind_b[1],ab_ind_b[0]] = -adc.imds.t2_1_vvvv[2]
|
|
415
|
-
M_ab_b -= 2 * 0.5 * 0.25*lib.einsum('mlaf,mlbf->ab',t2_1_b, temp, optimize=True)
|
|
416
|
-
del temp
|
|
408
|
+
M_ab_b -= 2 * 0.5 * 0.25*lib.einsum('mlaf,mlbf->ab',
|
|
409
|
+
t2_1_b, adc.imds.t2_1_vvvv[2], optimize=True)
|
|
417
410
|
else:
|
|
418
|
-
|
|
419
|
-
temp_t2b_VVVV = np.zeros((nocc_b,nocc_b,nvir_b,nvir_b))
|
|
420
|
-
temp_t2b_VVVV[:,:,ab_ind_b[0],ab_ind_b[1]] = adc.imds.t2_1_vvvv[2][:]
|
|
421
|
-
temp_t2b_VVVV[:,:,ab_ind_b[1],ab_ind_b[0]] = -adc.imds.t2_1_vvvv[2][:]
|
|
422
|
-
|
|
423
411
|
M_ab_b -= 2 * 0.5 * 0.25*lib.einsum('mlad,mlbd->ab',
|
|
424
|
-
|
|
412
|
+
adc.imds.t2_1_vvvv[2], t2_1_b, optimize=True)
|
|
425
413
|
M_ab_b -= 2 * 0.5 * 0.25*lib.einsum('mlaf,mlbf->ab',
|
|
426
|
-
t2_1_b,
|
|
427
|
-
del temp_t2b_VVVV
|
|
414
|
+
t2_1_b, adc.imds.t2_1_vvvv[2], optimize=True)
|
|
428
415
|
|
|
429
416
|
if isinstance(eris.vvvv_p, list):
|
|
430
417
|
|
|
@@ -1971,6 +1958,7 @@ class UADCEA(uadc.UADC):
|
|
|
1971
1958
|
}
|
|
1972
1959
|
|
|
1973
1960
|
def __init__(self, adc):
|
|
1961
|
+
self.mol = adc.mol
|
|
1974
1962
|
self.verbose = adc.verbose
|
|
1975
1963
|
self.stdout = adc.stdout
|
|
1976
1964
|
self.max_memory = adc.max_memory
|
|
@@ -1987,6 +1975,7 @@ class UADCEA(uadc.UADC):
|
|
|
1987
1975
|
self._scf = adc._scf
|
|
1988
1976
|
self._nocc = adc._nocc
|
|
1989
1977
|
self._nvir = adc._nvir
|
|
1978
|
+
self._nmo = adc._nmo
|
|
1990
1979
|
self.nocc_a = adc._nocc[0]
|
|
1991
1980
|
self.nocc_b = adc._nocc[1]
|
|
1992
1981
|
self.nvir_a = adc._nvir[0]
|
|
@@ -1996,14 +1985,14 @@ class UADCEA(uadc.UADC):
|
|
|
1996
1985
|
self.mo_energy_b = adc.mo_energy_b
|
|
1997
1986
|
self.nmo_a = adc._nmo[0]
|
|
1998
1987
|
self.nmo_b = adc._nmo[1]
|
|
1999
|
-
self.mol = adc.mol
|
|
2000
1988
|
self.transform_integrals = adc.transform_integrals
|
|
2001
1989
|
self.with_df = adc.with_df
|
|
1990
|
+
self.compute_properties = adc.compute_properties
|
|
1991
|
+
self.approx_trans_moments = adc.approx_trans_moments
|
|
1992
|
+
|
|
2002
1993
|
self.spec_factor_print_tol = adc.spec_factor_print_tol
|
|
2003
1994
|
self.evec_print_tol = adc.evec_print_tol
|
|
2004
1995
|
|
|
2005
|
-
self.compute_properties = adc.compute_properties
|
|
2006
|
-
self.approx_trans_moments = adc.approx_trans_moments
|
|
2007
1996
|
self.E = adc.E
|
|
2008
1997
|
self.U = adc.U
|
|
2009
1998
|
self.P = adc.P
|
|
@@ -2014,11 +2003,12 @@ class UADCEA(uadc.UADC):
|
|
|
2014
2003
|
matvec = matvec
|
|
2015
2004
|
get_diag = get_diag
|
|
2016
2005
|
get_trans_moments = get_trans_moments
|
|
2017
|
-
analyze_spec_factor = analyze_spec_factor
|
|
2018
2006
|
get_properties = get_properties
|
|
2007
|
+
|
|
2019
2008
|
analyze = analyze
|
|
2020
|
-
|
|
2009
|
+
analyze_spec_factor = analyze_spec_factor
|
|
2021
2010
|
analyze_eigenvector = analyze_eigenvector
|
|
2011
|
+
compute_dyson_mo = compute_dyson_mo
|
|
2022
2012
|
|
|
2023
2013
|
def get_init_guess(self, nroots=1, diag=None, ascending=True):
|
|
2024
2014
|
if diag is None :
|
pyscf/adc/uadc_ip.py
CHANGED
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
# Author:
|
|
15
|
+
# Author: Abdelrahman Ahmed <>
|
|
16
|
+
# Samragni Banerjee <samragnibanerjee4@gmail.com>
|
|
17
|
+
# James Serna <jamcar456@gmail.com>
|
|
18
|
+
# Terrence Stahl <>
|
|
16
19
|
# Alexander Sokolov <alexander.y.sokolov@gmail.com>
|
|
17
20
|
#
|
|
18
21
|
|
|
@@ -1849,6 +1852,7 @@ class UADCIP(uadc.UADC):
|
|
|
1849
1852
|
}
|
|
1850
1853
|
|
|
1851
1854
|
def __init__(self, adc):
|
|
1855
|
+
self.mol = adc.mol
|
|
1852
1856
|
self.verbose = adc.verbose
|
|
1853
1857
|
self.stdout = adc.stdout
|
|
1854
1858
|
self.max_memory = adc.max_memory
|
|
@@ -1865,6 +1869,7 @@ class UADCIP(uadc.UADC):
|
|
|
1865
1869
|
self._scf = adc._scf
|
|
1866
1870
|
self._nocc = adc._nocc
|
|
1867
1871
|
self._nvir = adc._nvir
|
|
1872
|
+
self._nmo = adc._nmo
|
|
1868
1873
|
self.nocc_a = adc._nocc[0]
|
|
1869
1874
|
self.nocc_b = adc._nocc[1]
|
|
1870
1875
|
self.nvir_a = adc._nvir[0]
|
|
@@ -1874,14 +1879,14 @@ class UADCIP(uadc.UADC):
|
|
|
1874
1879
|
self.mo_energy_b = adc.mo_energy_b
|
|
1875
1880
|
self.nmo_a = adc._nmo[0]
|
|
1876
1881
|
self.nmo_b = adc._nmo[1]
|
|
1877
|
-
self.mol = adc.mol
|
|
1878
1882
|
self.transform_integrals = adc.transform_integrals
|
|
1879
1883
|
self.with_df = adc.with_df
|
|
1884
|
+
self.compute_properties = adc.compute_properties
|
|
1885
|
+
self.approx_trans_moments = adc.approx_trans_moments
|
|
1886
|
+
|
|
1880
1887
|
self.spec_factor_print_tol = adc.spec_factor_print_tol
|
|
1881
1888
|
self.evec_print_tol = adc.evec_print_tol
|
|
1882
1889
|
|
|
1883
|
-
self.compute_properties = adc.compute_properties
|
|
1884
|
-
self.approx_trans_moments = adc.approx_trans_moments
|
|
1885
1890
|
self.E = adc.E
|
|
1886
1891
|
self.U = adc.U
|
|
1887
1892
|
self.P = adc.P
|
pyscf/adc/uadc_ip_cvs.py
CHANGED
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
# Author: Abdelrahman Ahmed
|
|
15
|
+
# Author: Abdelrahman Ahmed <>
|
|
16
|
+
# Samragni Banerjee <samragnibanerjee4@gmail.com>
|
|
17
|
+
# James Serna <jamcar456@gmail.com>
|
|
18
|
+
# Terrence Stahl <>
|
|
16
19
|
# Alexander Sokolov <alexander.y.sokolov@gmail.com>
|
|
17
20
|
#
|
|
18
21
|
|
pyscf/agf2/__init__.py
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
'''
|
|
20
|
-
Auxiliary second-order Green's function perturbation
|
|
21
|
-
|
|
20
|
+
Auxiliary second-order Green's function perturbation theory
|
|
21
|
+
===========================================================
|
|
22
22
|
|
|
23
23
|
The AGF2 method permits the computation of quasiparticle excitations and
|
|
24
24
|
ground-state properties at the AGF2(None,0) level.
|
pyscf/agf2/aux_space.py
CHANGED
|
@@ -446,7 +446,7 @@ def combine(*auxspcs):
|
|
|
446
446
|
'''
|
|
447
447
|
|
|
448
448
|
nphys = [auxspc.nphys for auxspc in auxspcs]
|
|
449
|
-
if not all(
|
|
449
|
+
if not all(x == nphys[0] for x in nphys):
|
|
450
450
|
raise ValueError('Size of physical space must be the same to '
|
|
451
451
|
'combine AuxiliarySpace objects.')
|
|
452
452
|
nphys = nphys[0]
|
pyscf/agf2/chkfile.py
CHANGED
|
@@ -111,7 +111,7 @@ def load_agf2(chkfile):
|
|
|
111
111
|
def dump_agf2(agf2, chkfile=None, key='agf2',
|
|
112
112
|
gf=None, se=None, frozen=None, nmom=None,
|
|
113
113
|
mo_energy=None, mo_coeff=None, mo_occ=None):
|
|
114
|
-
''' Save the AGF2
|
|
114
|
+
''' Save the AGF2 calculation to a chkfile.
|
|
115
115
|
'''
|
|
116
116
|
|
|
117
117
|
if mpi_helper.rank != 0:
|
pyscf/ao2mo/__init__.py
CHANGED
|
@@ -31,6 +31,7 @@ Simple usage::
|
|
|
31
31
|
import tempfile
|
|
32
32
|
import numpy
|
|
33
33
|
import h5py
|
|
34
|
+
from pyscf import gto
|
|
34
35
|
from pyscf.ao2mo import incore
|
|
35
36
|
from pyscf.ao2mo import outcore
|
|
36
37
|
from pyscf.ao2mo import r_outcore
|
|
@@ -143,7 +144,7 @@ def full(eri_or_mol, mo_coeff, erifile=None, dataname='eri_mo', intor='int2e',
|
|
|
143
144
|
'''
|
|
144
145
|
if isinstance(eri_or_mol, numpy.ndarray):
|
|
145
146
|
return incore.full(eri_or_mol, mo_coeff, *args, **kwargs)
|
|
146
|
-
|
|
147
|
+
elif isinstance(eri_or_mol, gto.MoleBase):
|
|
147
148
|
if '_spinor' in intor:
|
|
148
149
|
mod = r_outcore
|
|
149
150
|
else:
|
|
@@ -157,6 +158,11 @@ def full(eri_or_mol, mo_coeff, erifile=None, dataname='eri_mo', intor='int2e',
|
|
|
157
158
|
*args, **kwargs)
|
|
158
159
|
else:
|
|
159
160
|
return mod.full_iofree(eri_or_mol, mo_coeff, intor, *args, **kwargs)
|
|
161
|
+
else:
|
|
162
|
+
raise RuntimeError('ERI is not available. If this is generated by mf._eri, '
|
|
163
|
+
'the integral tensor is too big to store in memory. '
|
|
164
|
+
'You should either increase mol.max_memory, or set '
|
|
165
|
+
'mol.incore_anyway. See issue #2473.')
|
|
160
166
|
|
|
161
167
|
def general(eri_or_mol, mo_coeffs, erifile=None, dataname='eri_mo', intor='int2e',
|
|
162
168
|
*args, **kwargs):
|
|
@@ -293,7 +299,7 @@ def general(eri_or_mol, mo_coeffs, erifile=None, dataname='eri_mo', intor='int2e
|
|
|
293
299
|
'''
|
|
294
300
|
if isinstance(eri_or_mol, numpy.ndarray):
|
|
295
301
|
return incore.general(eri_or_mol, mo_coeffs, *args, **kwargs)
|
|
296
|
-
|
|
302
|
+
elif isinstance(eri_or_mol, gto.MoleBase):
|
|
297
303
|
if '_spinor' in intor:
|
|
298
304
|
mod = r_outcore
|
|
299
305
|
else:
|
|
@@ -307,6 +313,11 @@ def general(eri_or_mol, mo_coeffs, erifile=None, dataname='eri_mo', intor='int2e
|
|
|
307
313
|
*args, **kwargs)
|
|
308
314
|
else:
|
|
309
315
|
return mod.general_iofree(eri_or_mol, mo_coeffs, intor, *args, **kwargs)
|
|
316
|
+
else:
|
|
317
|
+
raise RuntimeError('ERI is not available. If this is generated by mf._eri, '
|
|
318
|
+
'the integral tensor is too big to store in memory. '
|
|
319
|
+
'You should either increase mol.max_memory, or set '
|
|
320
|
+
'mol.incore_anyway. See issue #2473.')
|
|
310
321
|
|
|
311
322
|
def kernel(eri_or_mol, mo_coeffs, erifile=None, dataname='eri_mo', intor='int2e',
|
|
312
323
|
*args, **kwargs):
|
pyscf/ao2mo/_ao2mo.py
CHANGED
|
@@ -73,7 +73,7 @@ def nr_e1fill(intor, sh_range, atm, bas, env,
|
|
|
73
73
|
natm = ctypes.c_int(c_atm.shape[0])
|
|
74
74
|
nbas = ctypes.c_int(c_bas.shape[0])
|
|
75
75
|
ao_loc = make_loc(bas, intor)
|
|
76
|
-
nao = ao_loc[-1]
|
|
76
|
+
nao = int(ao_loc[-1])
|
|
77
77
|
|
|
78
78
|
klsh0, klsh1, nkl = sh_range
|
|
79
79
|
|
|
@@ -137,6 +137,9 @@ def nr_e1(eri, mo_coeff, orbs_slice, aosym='s1', mosym='s1', out=None):
|
|
|
137
137
|
if out.size == 0:
|
|
138
138
|
return out
|
|
139
139
|
|
|
140
|
+
if eri.dtype != numpy.double:
|
|
141
|
+
raise TypeError('_ao2mo.nr_e1 is for double precision only')
|
|
142
|
+
|
|
140
143
|
fdrv = getattr(libao2mo, 'AO2MOnr_e2_drv')
|
|
141
144
|
pao_loc = ctypes.POINTER(ctypes.c_void_p)()
|
|
142
145
|
c_nbas = ctypes.c_int(0)
|
|
@@ -184,6 +187,9 @@ def nr_e2(eri, mo_coeff, orbs_slice, aosym='s1', mosym='s1', out=None,
|
|
|
184
187
|
if out.size == 0:
|
|
185
188
|
return out
|
|
186
189
|
|
|
190
|
+
if eri.dtype != numpy.double:
|
|
191
|
+
raise TypeError('_ao2mo.nr_e2 is for double precision only')
|
|
192
|
+
|
|
187
193
|
if ao_loc is None:
|
|
188
194
|
pao_loc = ctypes.POINTER(ctypes.c_void_p)()
|
|
189
195
|
c_nbas = ctypes.c_int(0)
|
|
@@ -283,6 +289,9 @@ def r_e2(eri, mo_coeff, orbs_slice, tao, ao_loc, aosym='s1', out=None):
|
|
|
283
289
|
if out.size == 0:
|
|
284
290
|
return out
|
|
285
291
|
|
|
292
|
+
if eri.dtype != numpy.complex128:
|
|
293
|
+
raise TypeError('_ao2mo.r_e2 is for complex double precision only')
|
|
294
|
+
|
|
286
295
|
tao = numpy.asarray(tao, dtype=numpy.int32)
|
|
287
296
|
if ao_loc is None:
|
|
288
297
|
c_ao_loc = ctypes.POINTER(ctypes.c_void_p)()
|
pyscf/ao2mo/incore.py
CHANGED
|
@@ -202,6 +202,9 @@ def half_e1(eri_ao, mo_coeffs, compact=True):
|
|
|
202
202
|
if nij_pair == 0:
|
|
203
203
|
return eri1
|
|
204
204
|
|
|
205
|
+
if eri_ao.dtype != numpy.double:
|
|
206
|
+
raise TypeError('ao2mo.incore.half_e1 is for double precision only')
|
|
207
|
+
|
|
205
208
|
if eri_ao.size == nao_pair**2: # 4-fold symmetry
|
|
206
209
|
# half_e1 first transforms the indices which are contiguous in memory
|
|
207
210
|
# transpose the 4-fold integrals to make ij the contiguous indices
|
pyscf/ao2mo/nrr_outcore.py
CHANGED
|
@@ -380,9 +380,9 @@ def _count_naopair(mol, nao):
|
|
|
380
380
|
ao_loc = mol.ao_loc_2c()
|
|
381
381
|
nao_pair = 0
|
|
382
382
|
for i in range(mol.nbas):
|
|
383
|
-
di = ao_loc[i+1] - ao_loc[i]
|
|
383
|
+
di = int(ao_loc[i+1] - ao_loc[i])
|
|
384
384
|
for j in range(i+1):
|
|
385
|
-
dj = ao_loc[j+1] - ao_loc[j]
|
|
385
|
+
dj = int(ao_loc[j+1] - ao_loc[j])
|
|
386
386
|
nao_pair += di * dj
|
|
387
387
|
return nao_pair
|
|
388
388
|
|
pyscf/ao2mo/outcore.py
CHANGED
|
@@ -487,15 +487,17 @@ def _load_from_h5g(h5group, row0, row1, out=None):
|
|
|
487
487
|
col1 = 0
|
|
488
488
|
for key in range(nkeys):
|
|
489
489
|
col0, col1 = col1, col1 + h5group[str(key)].shape[1]
|
|
490
|
-
|
|
491
|
-
|
|
490
|
+
if col1 > col0:
|
|
491
|
+
h5group[str(key)].read_direct(out, dest_sel=numpy.s_[:,col0:col1],
|
|
492
|
+
source_sel=numpy.s_[row0:row1])
|
|
492
493
|
else: # multiple components
|
|
493
494
|
out = numpy.ndarray((dat.shape[0], row1-row0, ncol), dat.dtype, buffer=out)
|
|
494
495
|
col1 = 0
|
|
495
496
|
for key in range(nkeys):
|
|
496
497
|
col0, col1 = col1, col1 + h5group[str(key)].shape[2]
|
|
497
|
-
|
|
498
|
-
|
|
498
|
+
if col1 > col0:
|
|
499
|
+
h5group[str(key)].read_direct(out, dest_sel=numpy.s_[:,:,col0:col1],
|
|
500
|
+
source_sel=numpy.s_[:,row0:row1])
|
|
499
501
|
return out
|
|
500
502
|
|
|
501
503
|
def _transpose_to_h5g(h5group, key, dat, blksize, chunks=None):
|
|
@@ -708,8 +710,8 @@ def guess_shell_ranges(mol, aosym, max_iobuf, max_aobuf=None, ao_loc=None,
|
|
|
708
710
|
compress_diag=True):
|
|
709
711
|
if ao_loc is None: ao_loc = mol.ao_loc_nr()
|
|
710
712
|
max_iobuf = max(1, max_iobuf)
|
|
711
|
-
|
|
712
|
-
dims =
|
|
713
|
+
ao_loc_long = ao_loc.astype(numpy.int64)
|
|
714
|
+
dims = ao_loc_long[1:] - ao_loc_long[:-1]
|
|
713
715
|
dijs = (dims.reshape(-1,1) * dims)
|
|
714
716
|
nbas = dijs.shape[0]
|
|
715
717
|
|
|
@@ -771,7 +773,7 @@ def balance_partition(ao_loc, blksize, start_id=0, stop_id=None):
|
|
|
771
773
|
displs = [i+start_id for i in displs]
|
|
772
774
|
tasks = []
|
|
773
775
|
for i0, i1 in zip(displs[:-1],displs[1:]):
|
|
774
|
-
tasks.append((i0, i1, ao_loc[i1]-ao_loc[i0]))
|
|
776
|
+
tasks.append((i0, i1, int(ao_loc[i1]-ao_loc[i0])))
|
|
775
777
|
return tasks
|
|
776
778
|
|
|
777
779
|
del (MAX_MEMORY)
|
pyscf/ao2mo/r_outcore.py
CHANGED
|
@@ -302,9 +302,9 @@ def _count_naopair(mol, nao):
|
|
|
302
302
|
ao_loc = mol.ao_loc_2c()
|
|
303
303
|
nao_pair = 0
|
|
304
304
|
for i in range(mol.nbas):
|
|
305
|
-
di = ao_loc[i+1] - ao_loc[i]
|
|
305
|
+
di = int(ao_loc[i+1] - ao_loc[i])
|
|
306
306
|
for j in range(i+1):
|
|
307
|
-
dj = ao_loc[j+1] - ao_loc[j]
|
|
307
|
+
dj = int(ao_loc[j+1] - ao_loc[j])
|
|
308
308
|
nao_pair += di * dj
|
|
309
309
|
return nao_pair
|
|
310
310
|
|
pyscf/cc/__init__.py
CHANGED
|
@@ -23,7 +23,7 @@ Simple usage::
|
|
|
23
23
|
>>> mf = scf.RHF(mol).run()
|
|
24
24
|
>>> cc.CCSD(mf).run()
|
|
25
25
|
|
|
26
|
-
:func:`cc.CCSD` returns an instance of CCSD class.
|
|
26
|
+
:func:`cc.CCSD` returns an instance of CCSD class. Following are parameters
|
|
27
27
|
to control CCSD calculation.
|
|
28
28
|
|
|
29
29
|
verbose : int
|
|
@@ -54,8 +54,8 @@ to control CCSD calculation.
|
|
|
54
54
|
|
|
55
55
|
Saved results
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
iterinfo : common.IterationInfo
|
|
58
|
+
Information about iteration (see pyscf.common.Iteration in detail)
|
|
59
59
|
e_tot : float
|
|
60
60
|
Total CCSD energy (HF + correlation)
|
|
61
61
|
t1, t2 :
|
|
@@ -216,3 +216,21 @@ def FNOCCSD(mf, thresh=1e-6, pct_occ=None, nvir_act=None, frozen=None):
|
|
|
216
216
|
return self
|
|
217
217
|
mycc._finalize = _finalize.__get__(mycc, mycc.__class__)
|
|
218
218
|
return mycc
|
|
219
|
+
|
|
220
|
+
def BCCD(mf, frozen=None, u=None, conv_tol_normu=1e-5, max_cycle=20, diis=True,
|
|
221
|
+
canonicalization=True):
|
|
222
|
+
from pyscf.cc.bccd import bccd_kernel_
|
|
223
|
+
from pyscf.lib import StreamObject
|
|
224
|
+
mycc = CCSD(mf, frozen=frozen)
|
|
225
|
+
|
|
226
|
+
class BCCD(mycc.__class__):
|
|
227
|
+
def kernel(self):
|
|
228
|
+
obj = self.view(mycc.__class__)
|
|
229
|
+
obj.conv_tol = 1e-3
|
|
230
|
+
obj.kernel()
|
|
231
|
+
bccd_kernel_(obj, u, conv_tol_normu, max_cycle, diis,
|
|
232
|
+
canonicalization, self.verbose)
|
|
233
|
+
self.__dict__.update(obj.__dict__)
|
|
234
|
+
return self.e_tot
|
|
235
|
+
|
|
236
|
+
return mycc.view(BCCD)
|
pyscf/cc/bccd.py
CHANGED
|
@@ -313,49 +313,3 @@ def bccd_kernel_(mycc, u=None, conv_tol_normu=1e-5, max_cycle=20, diis=True,
|
|
|
313
313
|
mycc.t2 = t2
|
|
314
314
|
|
|
315
315
|
return mycc
|
|
316
|
-
|
|
317
|
-
if __name__ == "__main__":
|
|
318
|
-
import pyscf
|
|
319
|
-
from pyscf import cc
|
|
320
|
-
|
|
321
|
-
np.set_printoptions(3, linewidth=1000, suppress=True)
|
|
322
|
-
mol = pyscf.M(
|
|
323
|
-
atom = 'H 0 0 0; F 0 0 1.1',
|
|
324
|
-
basis = 'ccpvdz',
|
|
325
|
-
verbose = 4,
|
|
326
|
-
spin = 0,
|
|
327
|
-
)
|
|
328
|
-
|
|
329
|
-
myhf = mol.HF()
|
|
330
|
-
myhf.kernel()
|
|
331
|
-
E_ref = myhf.e_tot
|
|
332
|
-
rdm1_mf = myhf.make_rdm1()
|
|
333
|
-
|
|
334
|
-
mycc = cc.CCSD(myhf, frozen=None)
|
|
335
|
-
#mycc.frozen = [0]
|
|
336
|
-
mycc.kernel()
|
|
337
|
-
mycc.conv_tol = 1e-3
|
|
338
|
-
|
|
339
|
-
mycc = bccd_kernel_(mycc, diis=True, verbose=4)
|
|
340
|
-
e_r = mycc.e_tot
|
|
341
|
-
e_ccsd_t = mycc.ccsd_t()
|
|
342
|
-
# PSI4 reference
|
|
343
|
-
assert abs(e_ccsd_t - -0.002625521337000) < 1e-5
|
|
344
|
-
|
|
345
|
-
print (la.norm(mycc.t1))
|
|
346
|
-
assert la.norm(mycc.t1) < 1e-5
|
|
347
|
-
|
|
348
|
-
myhf = mol.UHF()
|
|
349
|
-
myhf.kernel()
|
|
350
|
-
myucc = cc.CCSD(myhf, frozen=None)
|
|
351
|
-
myucc.frozen = [0]
|
|
352
|
-
myucc.kernel()
|
|
353
|
-
|
|
354
|
-
mybcc = bccd_kernel_(myucc)
|
|
355
|
-
e_u = mybcc.e_tot
|
|
356
|
-
|
|
357
|
-
mygcc = cc.addons.convert_to_gccsd(mycc)
|
|
358
|
-
mybcc = bccd_kernel_(mygcc)
|
|
359
|
-
e_g = mybcc.e_tot
|
|
360
|
-
print (abs(e_g - e_r))
|
|
361
|
-
assert abs(e_g - e_r) < 1e-6
|
pyscf/cc/ccsd.py
CHANGED
|
@@ -65,7 +65,8 @@ def kernel(mycc, eris=None, t1=None, t2=None, max_cycle=50, tol=1e-8,
|
|
|
65
65
|
else:
|
|
66
66
|
adiis = None
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
converged = False
|
|
69
|
+
mycc.cycles = 0
|
|
69
70
|
for istep in range(max_cycle):
|
|
70
71
|
t1new, t2new = mycc.update_amps(t1, t2, eris)
|
|
71
72
|
if callback is not None:
|
|
@@ -75,22 +76,29 @@ def kernel(mycc, eris=None, t1=None, t2=None, max_cycle=50, tol=1e-8,
|
|
|
75
76
|
normt = numpy.linalg.norm(tmpvec)
|
|
76
77
|
tmpvec = None
|
|
77
78
|
if mycc.iterative_damping < 1.0:
|
|
78
|
-
alpha = mycc.iterative_damping
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
alpha = numpy.asarray(mycc.iterative_damping)
|
|
80
|
+
if isinstance(t1, tuple): # e.g. UCCSD
|
|
81
|
+
t1new = tuple((1-alpha) * numpy.asarray(t1_part) + alpha * numpy.asarray(t1new_part)
|
|
82
|
+
for t1_part, t1new_part in zip(t1, t1new))
|
|
83
|
+
t2new = tuple((1-alpha) * numpy.asarray(t2_part) + alpha * numpy.asarray(t2new_part)
|
|
84
|
+
for t2_part, t2new_part in zip(t2, t2new))
|
|
85
|
+
else:
|
|
86
|
+
t1new = (1-alpha) * numpy.asarray(t1) + alpha * numpy.asarray(t1new)
|
|
87
|
+
t2new *= alpha
|
|
88
|
+
t2new += (1-alpha) * numpy.asarray(t2)
|
|
82
89
|
t1, t2 = t1new, t2new
|
|
83
90
|
t1new = t2new = None
|
|
84
91
|
t1, t2 = mycc.run_diis(t1, t2, istep, normt, eccsd-eold, adiis)
|
|
85
92
|
eold, eccsd = eccsd, mycc.energy(t1, t2, eris)
|
|
93
|
+
mycc.cycles = istep + 1
|
|
86
94
|
log.info('cycle = %d E_corr(%s) = %.15g dE = %.9g norm(t1,t2) = %.6g',
|
|
87
95
|
istep+1, name, eccsd, eccsd - eold, normt)
|
|
88
96
|
cput1 = log.timer(f'{name} iter', *cput1)
|
|
89
97
|
if abs(eccsd-eold) < tol and normt < tolnormt:
|
|
90
|
-
|
|
98
|
+
converged = True
|
|
91
99
|
break
|
|
92
100
|
log.timer(name, *cput0)
|
|
93
|
-
return
|
|
101
|
+
return converged, eccsd, t1, t2
|
|
94
102
|
|
|
95
103
|
|
|
96
104
|
def update_amps(mycc, t1, t2, eris):
|
|
@@ -582,7 +590,7 @@ def _contract_s4vvvv_t2(mycc, mol, vvvv, t2, out=None, verbose=None):
|
|
|
582
590
|
tril2sq = lib.square_mat_in_trilu_indices(nvira)
|
|
583
591
|
loadbuf = numpy.empty((blksize,blksize,nvirb,nvirb))
|
|
584
592
|
|
|
585
|
-
slices =
|
|
593
|
+
slices = list(lib.prange(0, nvira, blksize))
|
|
586
594
|
for istep, wwbuf in enumerate(fmap(load, lib.prange(0, nvira, blksize))):
|
|
587
595
|
i0, i1 = slices[istep]
|
|
588
596
|
off0 = i0*(i0+1)//2
|
|
@@ -609,6 +617,8 @@ def _contract_s1vvvv_t2(mycc, mol, vvvv, t2, out=None, verbose=None):
|
|
|
609
617
|
# vvvv == None means AO-direct CCSD. It should redirect to
|
|
610
618
|
# _contract_s4vvvv_t2(mycc, mol, vvvv, t2, out, verbose)
|
|
611
619
|
assert (vvvv is not None)
|
|
620
|
+
if t2.size == 0:
|
|
621
|
+
return numpy.zeros_like(t2)
|
|
612
622
|
|
|
613
623
|
time0 = logger.process_clock(), logger.perf_counter()
|
|
614
624
|
log = logger.new_logger(mycc, verbose)
|
|
@@ -870,7 +880,7 @@ class CCSDBase(lib.StreamObject):
|
|
|
870
880
|
incore_complete : bool
|
|
871
881
|
Avoid all I/O (also for DIIS). Default is False.
|
|
872
882
|
level_shift : float
|
|
873
|
-
A shift on virtual orbital energies to
|
|
883
|
+
A shift on virtual orbital energies to stabilize the CCSD iteration
|
|
874
884
|
frozen : int or list
|
|
875
885
|
If integer is given, the inner-most orbitals are frozen from CC
|
|
876
886
|
amplitudes. Given the orbital indices (0-based) in a list, both
|
|
@@ -891,10 +901,10 @@ class CCSDBase(lib.StreamObject):
|
|
|
891
901
|
callback function can access all local variables in the current
|
|
892
902
|
environment.
|
|
893
903
|
|
|
894
|
-
Saved results
|
|
904
|
+
Saved results:
|
|
895
905
|
|
|
896
906
|
converged : bool
|
|
897
|
-
CCSD converged
|
|
907
|
+
Whether the CCSD iteration converged
|
|
898
908
|
e_corr : float
|
|
899
909
|
CCSD correlation correction
|
|
900
910
|
e_tot : float
|
|
@@ -903,6 +913,8 @@ class CCSDBase(lib.StreamObject):
|
|
|
903
913
|
T amplitudes t1[i,a], t2[i,j,a,b] (i,j in occ, a,b in virt)
|
|
904
914
|
l1, l2 :
|
|
905
915
|
Lambda amplitudes l1[i,a], l2[i,j,a,b] (i,j in occ, a,b in virt)
|
|
916
|
+
cycles : int
|
|
917
|
+
The number of iteration cycles performed
|
|
906
918
|
'''
|
|
907
919
|
|
|
908
920
|
max_cycle = getattr(__config__, 'cc_ccsd_CCSD_max_cycle', 50)
|
|
@@ -929,8 +941,8 @@ class CCSDBase(lib.StreamObject):
|
|
|
929
941
|
'diis_start_cycle', 'diis_start_energy_diff', 'direct',
|
|
930
942
|
'async_io', 'incore_complete', 'cc2', 'callback',
|
|
931
943
|
'mol', 'verbose', 'stdout', 'frozen', 'level_shift',
|
|
932
|
-
'mo_coeff', 'mo_occ', '
|
|
933
|
-
'e_corr', 't1', 't2', 'l1', 'l2', 'chkfile',
|
|
944
|
+
'mo_coeff', 'mo_occ', 'cycles', 'converged_lambda', 'emp2', 'e_hf',
|
|
945
|
+
'converged', 'e_corr', 't1', 't2', 'l1', 'l2', 'chkfile',
|
|
934
946
|
}
|
|
935
947
|
|
|
936
948
|
def __init__(self, mf, frozen=None, mo_coeff=None, mo_occ=None):
|
|
@@ -959,6 +971,7 @@ class CCSDBase(lib.StreamObject):
|
|
|
959
971
|
self.mo_coeff = mo_coeff
|
|
960
972
|
self.mo_occ = mo_occ
|
|
961
973
|
self.converged = False
|
|
974
|
+
self.cycles = None
|
|
962
975
|
self.converged_lambda = False
|
|
963
976
|
self.emp2 = None
|
|
964
977
|
self.e_hf = None
|
|
@@ -971,6 +984,9 @@ class CCSDBase(lib.StreamObject):
|
|
|
971
984
|
self._nmo = None
|
|
972
985
|
self.chkfile = mf.chkfile
|
|
973
986
|
|
|
987
|
+
__getstate__, __setstate__ = lib.generate_pickle_methods(
|
|
988
|
+
excludes=('chkfile', 'callback'))
|
|
989
|
+
|
|
974
990
|
@property
|
|
975
991
|
def ecc(self):
|
|
976
992
|
return self.e_corr
|
pyscf/cc/ccsd_rdm.py
CHANGED
|
@@ -377,8 +377,13 @@ def _make_rdm2(mycc, d1, d2, with_dm1=True, with_frozen=True, ao_repr=False):
|
|
|
377
377
|
|
|
378
378
|
|
|
379
379
|
def _rdm2_mo2ao(dm2, mo):
|
|
380
|
+
'''
|
|
381
|
+
Back transform the two-particle density matrices to AO representation, where
|
|
382
|
+
the dm2 is defined in accordance with the chemist's ERI notation:
|
|
383
|
+
E = einsum('pqrs,pqrs', eri, rdm2)
|
|
384
|
+
'''
|
|
380
385
|
mo_C = mo.conj()
|
|
381
|
-
return lib.einsum('ijkl,pi,qj,rk,sl->pqrs', dm2, mo, mo_C, mo
|
|
386
|
+
return lib.einsum('ijkl,pi,qj,rk,sl->pqrs', dm2, mo_C, mo, mo_C, mo)
|
|
382
387
|
|
|
383
388
|
|
|
384
389
|
if __name__ == '__main__':
|
pyscf/cc/gccsd.py
CHANGED
|
@@ -128,8 +128,8 @@ class GCCSD(ccsd.CCSDBase):
|
|
|
128
128
|
eijab = lib.direct_sum('ia,jb->ijab', eia, eia)
|
|
129
129
|
t1 = eris.fock[:nocc,nocc:] / eia
|
|
130
130
|
eris_oovv = np.array(eris.oovv)
|
|
131
|
-
t2 = eris_oovv / eijab
|
|
132
|
-
self.emp2 = 0.25*einsum('ijab,ijab', t2, eris_oovv
|
|
131
|
+
t2 = eris_oovv.conj() / eijab
|
|
132
|
+
self.emp2 = 0.25*einsum('ijab,ijab', t2, eris_oovv).real
|
|
133
133
|
logger.info(self, 'Init t2, MP2 energy = %.15g', self.emp2)
|
|
134
134
|
return self.emp2, t1, t2
|
|
135
135
|
|