From e25bf1b09bba87803ff0a4f15d7246bd9295da67 Mon Sep 17 00:00:00 2001 From: leila-pujal Date: Wed, 1 Nov 2023 12:36:46 -0400 Subject: [PATCH 01/72] Add icenter property to contraction base class - Add icenter property to GeneralizedContractionShell class. - Parse IOData icenter attribute for each shell. --- gbasis/contractions.py | 39 +++++++++++++++++++++++++++++++++++++-- gbasis/wrappers.py | 3 ++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index 65fb9025..75809e5f 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -116,7 +116,7 @@ class GeneralizedContractionShell: """ - def __init__(self, angmom, coord, coeffs, exps, coord_type, tol=1e-15, ovr_screen=False): + def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e-15, ovr_screen=False): r"""Initialize a GeneralizedContractionShell instance. Parameters @@ -139,11 +139,12 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, tol=1e-15, ovr_scree coord_type : str Coordinate type of the contraction. Options include "cartesian" or "c" and "spherical" or "p". + icenter : np.int64 or None (optional) + Index for the atomic center for the contraction ovr_tol : float Tolerance used in overlap screening. ovr_screen : boolean Flag used for activating overlap screening. - """ self.angmom = angmom self.coord = coord @@ -153,7 +154,41 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, tol=1e-15, ovr_scree self.ovr_screen = ovr_screen self.assign_norm_cont() self.coord_type = coord_type + self.icenter = icenter + + @property + def icenter(self): + """Atom center index for the contractions. + + Returns + ------- + icenter : np.int64 or None + Index for the corresponding atom center of the contractions. + """ + return self._icenter + + @icenter.setter + def icenter(self, icenter): + """Atom center index for the contractions. + + Parameters + ---------- + icenter : np.int64 or None + Index for the corresponding atom center of the contractions. + + Raises + ------ + TypeError + If `center` is not a `numpy.int64`, `int`, `float` or `None` type. + + """ + if isinstance(icenter, int) or isinstance(icenter, float): + self._icenter = np.array(icenter, dtype=np.int64) + elif isinstance(icenter, np.int64) or isinstance(icenter, None): + self._icenter = icenter + else: + raise TypeError(f"Center should be of integer type. Got {type(self.icenter)}") @property def coord(self): """Coordinate of the center of the contractions. diff --git a/gbasis/wrappers.py b/gbasis/wrappers.py index f858abb6..57ce1184 100644 --- a/gbasis/wrappers.py +++ b/gbasis/wrappers.py @@ -127,7 +127,8 @@ def angmom_components_sph(self): # pylint: disable=E1136 basis.append( IODataShell( - angmom, mol.atcoords[shell.icenter], shell.coeffs, shell.exponents, shell.kinds[0] + angmom, mol.atcoords[shell.icenter], shell.coeffs, + shell.exponents, shell.kinds[0], icenter=shell.icenter ) ) From ad03ab1a73e1eb36fce7b6899233df1669a5fef3 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 1 Nov 2023 11:04:24 -0400 Subject: [PATCH 02/72] Add libcint bindings --- gbasis/integrals/libcint.py | 441 ++++++++++++++++++++++++++++++++++++ 1 file changed, 441 insertions(+) create mode 100644 gbasis/integrals/libcint.py diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py new file mode 100644 index 00000000..ba561ed3 --- /dev/null +++ b/gbasis/integrals/libcint.py @@ -0,0 +1,441 @@ +r""" +Python C-API bindings for ``libcint`` GTO integrals library. + +""" + +from ctypes import CDLL, cdll, c_int, c_double, c_void_p + +from ctypes.util import find_library + +from operator import attrgetter + +from numpy.ctypeslib import load_library, ndpointer + + +__all__ = [ + "LIBCINT", + "CBasis", +] + + +# +# Helper class for generating LibCInt function bindings + + +class _LibCInt: + r""" + ``libcint`` shared object library helper class. + + """ + + _libcint: CDLL = cdll.LoadLibrary(find_library('cint')) + r""" + ``libcint`` shared object library. + + """ + + def __new__(cls): + r""" + Singleton class pattern. + + """ + if not hasattr(cls, "_instance"): + cls._instance = super(_LibCInt, cls).__new__(cls) + return cls._instance + + def __getattr__(self, attr): + r""" + Helper for returning function pointers from ``libcint`` with proper signatures. + + """ + cfunc = getattr(self._libcint, attr) + + if attr == 'CINTlen_cart': + cfunc.argtypes = [c_int] + cfunc.restype = c_int + + elif attr == 'CINTlen_spinor': + cfunc.argtypes = [ + c_int, + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + ] + cfunc.restype = c_int + + elif attr == 'CINTgto_norm': + cfunc.argtypes = [c_int, c_double] + cfunc.restype = c_double + + elif attr.startswith('CINTcgto') or attr.startswith('CINTtot'): + cfunc.argtypes = [ + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + c_int, + ] + cfunc.restype = c_int + + elif attr.startswith('CINTshells'): + cfunc.argtypes = [ + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + c_int, + ] + + elif attr.startswith('cint1e') and not attr.endswith('optimizer'): + cfunc.argtypes = [ + # buf + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + # shls + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + # atm + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # natm + c_int, + # bas + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # nbas + c_int, + # env + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + # opt (not used; put ``None`` as this argument) + c_void_p, + ] + cfunc.restype = c_int + + elif attr.startswith('cint2e') and not attr.endswith('optimizer'): + cfunc.argtypes = [ + # buf + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + # shls + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + # atm + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # natm + c_int, + # bas + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # nbas + c_int, + # env + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + # opt (not used; put ``None`` as this argument) + c_void_p, + ] + cfunc.restype = c_int + + else: + raise NotImplementedError('there is no ``gbasis`` API for this function') + + return cfunc + + +# +# C basis class; translates GBasis repr to C repr and binds integral methods + + +class CBasis: + r""" + ``libcint`` basis class. + + """ + + def __init__(self, basis, coordtype="sph"): + r""" + Initialize a ``CBasis`` instance. + + Parameters + ---------- + basis : List of list of GeneralizedContractionShell + Shells of generalized contractions by atomic center. + coordtype : ('sph'|'cart') + Type of coordinates. + + """ + # Verify coordinate type + _coordtype = coordtype.lower() + if _coordtype == "sph": + num_angmom = attrgetter("num_sph") + elif _coordtype == "cart": + num_angmom = attrgetter("num_cart") + else: + raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " + f"the provided value, '{coordtype}', is invalid") + + # Set up counts of atomic centers/shells/gbfs/exps/coeffs + natm = len(basis) + nshl = 0 + nbas = 0 + nexp = 0 + ncof = 0 + for contractions in basis: + nshl += len(contractions) + for shell in contractions: + nbas += num_angmom(shell) + nexp += shell.exps.size + ncof += shell.coeffs.size + + # Allocate and fill C input arrays + iatm = 0 + ibas = 0 + ioff = 20 + atm = np.zeros((self.natm, 6), dtype=c_int) + bas = np.zeros((self.nbas, 8), dtype=c_int) + env = np.zeros(20 + natm * 3 + nexp + ncof, dtype=c_double) + # Go to next atomic center's contractions + for contractions in basis: + # Nuclear charge of `iatm` atom + self.atm[iatm, 0] = np.round(contractions.charge).astype(int) + # `env` offset to save xyz coordinates + self.atm[iatm, 1] = ioff + # Save xyz coordinates; increment ioff + self.env[ioff:ioff + 3] = contractions.coord + ioff += 3 + # Go to next contracted GTO + for shell in contractions: + # Index of corresponding atom + bas[ibas, 0] = iatm + # Angular momentum + bas[ibas, 1] = shell.angmom + # Number of [primitive|contracted] GTOs in `ibas` basis function + bas[ibas, 2:4] = shell.coeffs.shape + # Kappa for spinor GTO; unused here + bas[ibas, 4] = 0 + # `env` offset to save exponentss of primitive GTOs + bas[ibas, 5] = ioff + # Save exponents; increment ioff + env[ioff:ioff + shells.exps.size] = shells.exps + ioff += shells.exps.size + # `env` offset to save column-major contraction coefficients, + # i.e. a (no. primitive-)by-(no. contracted) matrix + bas[ibas, 6] = ioff + # Save coefficients; increment ioff + env[ioff:ioff + shells.coeffs.size] = shells.coeffs.T + ioff += shells.coeffs.size + # Increment contracted GTO + ibas += 1 + # Increment atomic center + iatm += 1 + + # Save inputs to `libcint` functions + self.natm = natm + self.nshl = nshl + self.nbas = nbas + self.atm = atm + self.bas = bas + self.env = env + + # Save basis function offsets + self.offsets = list(map(num_angmom, self.bas[:, 1])) + self.max_off = max(self.offsets) + + # Make individual integral evaluation methods via `make_intNe` macro: + + # Kinetic energy integral + self.kin = self.make_int1e(cint1e_kin_cart if _coordtype == "cart" else cint1e_kin_sph) + # Nuclear-electron attraction integral + self.nuc = self.make_int1e(cint1e_nuc_cart if _coordtype == "cart" else cint1e_nuc_sph) + # Overlap integral + self.ovlp = self.make_int1e(cint1e_ovlp_cart if _coordtype == "cart" else cint1e_ovlp_sph) + # Electrone repulsion integral + self.eri = self.make_int2e(cint2e_cart if _coordtype == "cart" else cint2e_sph) + + def make_int1e(self, func, coordtype="sph", doc=None): + r""" + Make an instance-bound 1-electron integral method from a ``libcint`` function. + + Parameters + ---------- + func : callable + ``libcint`` function. + coordtype : ('sph'|'cart') + Type of coordinates. + + """ + # Verify coordinate type + _coordtype = coordtype.lower() + if _coordtype == "sph": + num_angmom = attrgetter("num_sph") + elif _coordtype == "cart": + num_angmom = attrgetter("num_cart") + else: + raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " + f"the provided value, '{coordtype}', is invalid") + + # Make instance-bound integral method + def int1e(self): + # Make temporary arrays + shls = np.zeros(2, dtype=c_int) + buf = np.zeros(self.max_off ** 2, dtype=c_double) + # Make output array + out = np.zeros((self.nbas, self.nbas), dtype=c_double) + # Evaluate the integral function over all shells + ipos = 0 + for ishl in range(self.nshl): + shls[0] = ishl + p_off = self.offsets[ishl] + jpos = 0 + for jshl in range(i + 1): + shls[1] = jshl + q_off = self.offsets[jshl] + # Call the C function to fill `buf` + func(buf, shls, self.atm, self.natm, self.nbas, self.bas, self.env, None) + # Fill `out` array + for p in range(p_off): + i_off = p + ipos + for q in range(q_off): + j_off = q + jpos + val = self.buf[p * q_off + q] + out[i_off, j_off] = val + out[j_off, i_off] = val + # Reset `buf` + buf[:] = 0 + # Iterate `jpos` + jpos += q_off + # Iterate `ipos` + ipos += p_off + # Return integrals in `out` array + return out + + # Return instance-bound integral method + return int1e + + def make_int2e(self, func, coordtype="sph"): + r""" + Make an instance-bound 2-electron integral method from a ``libcint`` function. + + Parameters + ---------- + func : callable + ``libcint`` function. + + coordtype : ('sph'|'cart') + Type of coordinates. + + """ + # Verify coordinate type + _coordtype = coordtype.lower() + if _coordtype == "sph": + num_angmom = attrgetter("num_sph") + elif _coordtype == "cart": + num_angmom = attrgetter("num_cart") + else: + raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " + f"the provided value, '{coordtype}', is invalid") + + # Make instance-bound integral method + def int2e(self): + # Make temporary arrays + shls = np.zeros(4, dtype=c_int) + buf = np.zeros(self.max_offset ** 4, dtype=c_double) + # Make output array + out = np.zeros((self.nbas, self.nbas, self.nbas, self.nbas), dtype=c_double) + # Evaluate the integral function over all shells + ipos = 0 + for ishl in range(self.nshl): + shls[0] = ishl + p_off = self.offsets[ishl] + jpos = 0 + for jshl in range(i + 1): + ij = ((ishl + 1) * ishl) // 2 + jshl + shls[1] = jshl + q_off = self.offsets[jshl] + kpos = 0 + for kshl in range(self.nshl): + shls[2] = kshl + r_off = self.offsets[kshl] + lpos = 0 + for lshl in range(k + 1): + kl = ((kshl + 1) * kshl) // 2 + lshl + shls[3] = lshl + s_off = self.offsets[lshl] + if ij < kl: + lpos += s_off + continue + # Call the C function to fill `buf` + func(buf, shls, self.atm, self.natm, self.nbas, self.bas, self.env, None) + # Fill `out` array + for p in range(p_off): + i_off = p + ipos + for q in range(q_off): + j_off = q + jpos + for r in range(r_off): + k_off = r + kpos + for s in range(s_off): + l_off = s + lpos + val = self.buf[p * (q_off * r_off * s_off) + + q * (r_off * s_off) + + r * (s_off) + + s] + out[i_off, j_off, k_off, l_off] = val + out[i_off, j_off, l_off, k_off] = val + out[j_off, i_off, k_off, l_off] = val + out[j_off, i_off, l_off, k_off] = val + out[k_off, l_off, i_off, j_off] = val + out[k_off, l_off, j_off, i_off] = val + out[l_off, k_off, i_off, j_off] = val + out[l_off, k_off, j_off, i_off] = val + # Reset `buf` + buf[:] = 0 + # Iterate `lpos` + lpos += s_off + # Iterate `kpos` + kpos += r_off + # Iterate `jpos` + jpos += q_off + # Iterate `ipos` + ipos += p_off + # Return integrals in `out` array + return out + + # Return instance-bound integral method + return int2e + + +# +# LibCInt bindings + + +# Singleton helper class instance + +LIBCINT = _LibCInt() +r""" +LIBCINT C library handle and binding generator. + +""" + + +# Define utility functions + +CINTlen_cart = LIBCINT.CINTlen_cart +CINTlen_spinor = LIBCINT.CINTlen_spinor + +CINTcgtos_cart = LIBCINT.CINTcgtos_cart +CINTcgtos_spheric = LIBCINT.CINTcgtos_spheric +CINTcgtos_spinor = LIBCINT.CINTcgtos_spinor +CINTcgto_cart = LIBCINT.CINTcgto_cart +CINTcgto_spheric = LIBCINT.CINTcgto_spheric +CINTcgto_spinor = LIBCINT.CINTcgto_spinor + +CINTtot_pgto_spheric = LIBCINT.CINTtot_pgto_spheric +CINTtot_pgto_spinor = LIBCINT.CINTtot_pgto_spinor + +CINTtot_cgto_cart = LIBCINT.CINTtot_cgto_cart +CINTtot_cgto_spheric = LIBCINT.CINTtot_cgto_spheric +CINTtot_cgto_spinor = LIBCINT.CINTtot_cgto_spinor + +CINTshells_cart_offset = LIBCINT.CINTshells_cart_offset +CINTshells_spheric_offset = LIBCINT.CINTshells_spheric_offset +CINTshells_spinor_offset = LIBCINT.CINTshells_spinor_offset + + +# Define integral functions + +cint1e_kin_cart = LIBCINT.cint1e_kin_cart +cint1e_kin_sph = LIBCINT.cint1e_kin_sph + +cint1e_nuc_cart = LIBCINT.cint1e_nuc_cart +cint1e_nuc_sph = LIBCINT.cint1e_nuc_sph + +cint1e_ovlp_cart = LIBCINT.cint1e_ovlp_cart +cint1e_ovlp_sph = LIBCINT.cint1e_ovlp_sph + +cint2e_cart = LIBCINT.cint2e_cart +cint2e_sph = LIBCINT.cint2e_sph From 22ddbcc1e25e54bac307b54d4ca5d45031b8a7d7 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 2 Nov 2023 11:15:50 -0400 Subject: [PATCH 03/72] Make use of icenter attr for libcint binding --- gbasis/integrals/libcint.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index ba561ed3..552ad824 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -159,6 +159,12 @@ def __init__(self, basis, coordtype="sph"): raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " f"the provided value, '{coordtype}', is invalid") + # Organize basis by atomic center + atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} + for shell in basis: + atm_basis[shell.icenter].append(shell) + basis = list(atm_basis.values()) + # Set up counts of atomic centers/shells/gbfs/exps/coeffs natm = len(basis) nshl = 0 @@ -182,11 +188,11 @@ def __init__(self, basis, coordtype="sph"): # Go to next atomic center's contractions for contractions in basis: # Nuclear charge of `iatm` atom - self.atm[iatm, 0] = np.round(contractions.charge).astype(int) + self.atm[iatm, 0] = np.round(contractions[0].charge).astype(int) # `env` offset to save xyz coordinates self.atm[iatm, 1] = ioff # Save xyz coordinates; increment ioff - self.env[ioff:ioff + 3] = contractions.coord + self.env[ioff:ioff + 3] = contractions[0].coord ioff += 3 # Go to next contracted GTO for shell in contractions: From f390b4d59c29dad44d709c0b583bf5b4642b90ca Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Fri, 3 Nov 2023 09:17:35 -0400 Subject: [PATCH 04/72] Debugging WIP --- gbasis/contractions.py | 2 +- gbasis/integrals/libcint.py | 56 +++++----- tests/test_libcint.py | 209 ++++++++++++++++++++++++++++++++++++ 3 files changed, 239 insertions(+), 28 deletions(-) create mode 100644 tests/test_libcint.py diff --git a/gbasis/contractions.py b/gbasis/contractions.py index 75809e5f..626c7bc9 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -185,7 +185,7 @@ def icenter(self, icenter): """ if isinstance(icenter, int) or isinstance(icenter, float): self._icenter = np.array(icenter, dtype=np.int64) - elif isinstance(icenter, np.int64) or isinstance(icenter, None): + elif isinstance(icenter, np.int64) or icenter is None: self._icenter = icenter else: raise TypeError(f"Center should be of integer type. Got {type(self.icenter)}") diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 552ad824..033c1d20 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -11,6 +11,8 @@ from numpy.ctypeslib import load_library, ndpointer +import numpy as np + __all__ = [ "LIBCINT", @@ -137,7 +139,7 @@ class CBasis: """ - def __init__(self, basis, coordtype="sph"): + def __init__(self, basis, coord_type="spherical"): r""" Initialize a ``CBasis`` instance. @@ -145,19 +147,19 @@ def __init__(self, basis, coordtype="sph"): ---------- basis : List of list of GeneralizedContractionShell Shells of generalized contractions by atomic center. - coordtype : ('sph'|'cart') + coord_type : ('spherical'|'cartesian') Type of coordinates. """ # Verify coordinate type - _coordtype = coordtype.lower() - if _coordtype == "sph": + _coord_type = coord_type.lower() + if _coord_type == "spherical": num_angmom = attrgetter("num_sph") - elif _coordtype == "cart": + elif _coord_type == "cartesian": num_angmom = attrgetter("num_cart") else: - raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " - f"the provided value, '{coordtype}', is invalid") + raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " + f"the provided value, '{coord_type}', is invalid") # Organize basis by atomic center atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} @@ -182,8 +184,8 @@ def __init__(self, basis, coordtype="sph"): iatm = 0 ibas = 0 ioff = 20 - atm = np.zeros((self.natm, 6), dtype=c_int) - bas = np.zeros((self.nbas, 8), dtype=c_int) + atm = np.zeros((natm, 6), dtype=c_int) + bas = np.zeros((nbas, 8), dtype=c_int) env = np.zeros(20 + natm * 3 + nexp + ncof, dtype=c_double) # Go to next atomic center's contractions for contractions in basis: @@ -235,15 +237,15 @@ def __init__(self, basis, coordtype="sph"): # Make individual integral evaluation methods via `make_intNe` macro: # Kinetic energy integral - self.kin = self.make_int1e(cint1e_kin_cart if _coordtype == "cart" else cint1e_kin_sph) + self.kin = self.make_int1e(cint1e_kin_cart if _coord_type == "cart" else cint1e_kin_sph) # Nuclear-electron attraction integral - self.nuc = self.make_int1e(cint1e_nuc_cart if _coordtype == "cart" else cint1e_nuc_sph) + self.nuc = self.make_int1e(cint1e_nuc_cart if _coord_type == "cart" else cint1e_nuc_sph) # Overlap integral - self.ovlp = self.make_int1e(cint1e_ovlp_cart if _coordtype == "cart" else cint1e_ovlp_sph) + self.olp = self.make_int1e(cint1e_ovlp_cart if _coord_type == "cart" else cint1e_ovlp_sph) # Electrone repulsion integral - self.eri = self.make_int2e(cint2e_cart if _coordtype == "cart" else cint2e_sph) + self.eri = self.make_int2e(cint2e_cart if _coord_type == "cart" else cint2e_sph) - def make_int1e(self, func, coordtype="sph", doc=None): + def make_int1e(self, func, coord_type="spherical", doc=None): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -251,19 +253,19 @@ def make_int1e(self, func, coordtype="sph", doc=None): ---------- func : callable ``libcint`` function. - coordtype : ('sph'|'cart') + coord_type : ('spherical'|'cartesian') Type of coordinates. """ # Verify coordinate type - _coordtype = coordtype.lower() - if _coordtype == "sph": + _coord_type = coord_type.lower() + if _coord_type == "spherical": num_angmom = attrgetter("num_sph") - elif _coordtype == "cart": + elif _coord_type == "cartesian": num_angmom = attrgetter("num_cart") else: - raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " - f"the provided value, '{coordtype}', is invalid") + raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " + f"the provided value, '{coord_type}', is invalid") # Make instance-bound integral method def int1e(self): @@ -303,7 +305,7 @@ def int1e(self): # Return instance-bound integral method return int1e - def make_int2e(self, func, coordtype="sph"): + def make_int2e(self, func, coord_type="spherical"): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -312,19 +314,19 @@ def make_int2e(self, func, coordtype="sph"): func : callable ``libcint`` function. - coordtype : ('sph'|'cart') + coord_type : ('spherical'|'cartesian') Type of coordinates. """ # Verify coordinate type - _coordtype = coordtype.lower() - if _coordtype == "sph": + _coord_type = coord_type.lower() + if _coord_type == "spherical": num_angmom = attrgetter("num_sph") - elif _coordtype == "cart": + elif _coord_type == "cartesian": num_angmom = attrgetter("num_cart") else: - raise ValueError("`coordtype` parameter must be 'sph' or 'cart'; " - f"the provided value, '{coordtype}', is invalid") + raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " + f"the provided value, '{coord_type}', is invalid") # Make instance-bound integral method def int2e(self): diff --git a/tests/test_libcint.py b/tests/test_libcint.py new file mode 100644 index 00000000..8d350c2e --- /dev/null +++ b/tests/test_libcint.py @@ -0,0 +1,209 @@ +"""Test gbasis.integrals.libcint.""" +from gbasis.contractions import GeneralizedContractionShell +from gbasis.integrals._moment_int import _compute_multipole_moment_integrals +from gbasis.integrals.overlap import Overlap, overlap_integral +from gbasis.integrals.libcint import CBasis +from gbasis.parsers import make_contractions, parse_nwchem +import numpy as np +import pytest +from scipy.special import factorial2 +from utils import find_datafile, HortonContractions + + +# def test_overlap_construct_array_contraction(): +# """Test gbasis.integrals.overlap.Overlap.construct_array_contraction.""" +# test_one = GeneralizedContractionShell( +# 1, np.array([0.5, 1, 1.5]), np.array([1.0, 2.0]), np.array([0.1, 0.01]) +# ) +# test_two = GeneralizedContractionShell( +# 2, np.array([1.5, 2, 3]), np.array([3.0, 4.0]), np.array([0.2, 0.02]) +# ) +# answer = np.array( +# [ +# [ +# _compute_multipole_moment_integrals( +# np.array([0, 0, 0]), +# np.array([[0, 0, 0]]), +# np.array([0.5, 1, 1.5]), +# np.array([angmom_comp_one]), +# np.array([0.1, 0.01]), +# np.array([[1], [2]]), +# np.array( +# [ +# [ +# (2 * 0.1 / np.pi) ** (3 / 4) +# * (4 * 0.1) ** (1 / 2) +# / np.sqrt(np.prod(factorial2(2 * angmom_comp_one - 1))), +# (2 * 0.01 / np.pi) ** (3 / 4) +# * (4 * 0.01) ** (1 / 2) +# / np.sqrt(np.prod(factorial2(2 * angmom_comp_one - 1))), +# ] +# ] +# ), +# np.array([1.5, 2, 3]), +# np.array([angmom_comp_two]), +# np.array([0.2, 0.02]), +# np.array([[3], [4]]), +# np.array( +# [ +# [ +# (2 * 0.2 / np.pi) ** (3 / 4) +# * (4 * 0.2) ** (2 / 2) +# / np.sqrt(np.prod(factorial2(2 * angmom_comp_two - 1))), +# (2 * 0.02 / np.pi) ** (3 / 4) +# * (4 * 0.02) ** (2 / 2) +# / np.sqrt(np.prod(factorial2(2 * angmom_comp_two - 1))), +# ] +# ] +# ), +# ) +# for angmom_comp_two in test_two.angmom_components_cart +# ] +# for angmom_comp_one in test_one.angmom_components_cart +# ] +# ) +# assert np.allclose( +# np.squeeze(Overlap.construct_array_contraction(test_one, test_two)), np.squeeze(answer) +# ) +# +# with pytest.raises(TypeError): +# Overlap.construct_array_contraction(test_one, None) +# with pytest.raises(TypeError): +# Overlap.construct_array_contraction(None, test_two) +# +# +# def test_overlap_cartesian(): +# """Test gbasis.integrals.overlap.overlap_cartesian.""" +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose( +# overlap_obj.construct_array_cartesian(), overlap_integral(basis, coord_type="cartesian") +# ) +# +# +# def test_overlap_spherical(): +# """Test gbasis.integrals.overlap.overlap_spherical.""" +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) +# +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose( +# overlap_obj.construct_array_spherical(), overlap_integral(basis, coord_type="spherical") +# ) +# +# +# def test_overlap_mix(): +# """Test gbasis.integrals.overlap.overlap_mix.""" +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) +# +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose( +# overlap_obj.construct_array_mix(["spherical"] * 8), +# overlap_integral(basis, coord_type=["spherical"] * 8), +# ) +# +# +# def test_overlap_lincomb(): +# """Test gbasis.integrals.overlap.overlap_lincomb.""" +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# transform = np.random.rand(14, 18) +# assert np.allclose( +# overlap_obj.construct_array_lincomb(transform, "spherical"), +# overlap_integral(basis, transform=transform, coord_type="spherical"), +# ) +# +# +# def test_overlap_cartesian_norm_anorcc(): +# """Test the norm of gbasis.integrals.overlap_cartesian on the ANO-RCC basis set. +# +# The contraction coefficients in ANO-RCC is such that the cartesian contractions are normalized. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) +# +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) +# +# +# def test_overlap_spherical_norm_sto6g(): +# """Test the norm of gbasis.integrals.overlap_spherical on the STO-6G basis set. +# +# The contraction coefficients in STO-6G is such that the spherical contractions are not +# normalized to past 3rd decimal places. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) +# +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_spherical()), 1) +# +# +# def test_overlap_spherical_norm_anorcc(): +# """Test the norm of gbasis.integrals.overlap_spherical on the ANO-RCC basis set. +# +# The contraction coefficients in ANO-RCC is such that the Cartesian contractions are normalized. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) +# +# basis = make_contractions(basis_dict, ["C"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) +# +# basis = make_contractions(basis_dict, ["Xe"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) +# +# +# def test_overlap_cartesian_norm_sto6g(): +# """Test the norm of gbasis.integrals.overlap_cartesian on the STO-6G basis set. +# +# The contraction coefficients in STO-6G is such that the Cartesian contractions are not +# normalized to past 3rd decimal places. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) +# +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) + + +def test_overlap_horton_anorcc_hhe(): + """Test gbasis.integrals.overlap.overlap_basis_cartesian against HORTON's overlap matrix. + + The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. + + """ + basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr + basis = make_contractions( + basis_dict, ["H", "He"], np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) + ) + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + + horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) + assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) + + +def test_overlap_horton_anorcc_bec(): + """Test gbasis.integrals.overlap.overlap_cartesian against HORTON's overlap matrix. + + The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. + + """ + basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr + basis = make_contractions( + basis_dict, ["Be", "C"], np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) + ) + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + + horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) + assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) From c8e0c56f8b72d07e9a6967d9945899eea2983d5e Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 6 Nov 2023 13:35:36 -0500 Subject: [PATCH 05/72] Expose all attrs (center,charge) required for cint bindings --- gbasis/contractions.py | 62 ++++++++++++++++++++++++++++++++++++------ tests/test_libcint.py | 3 +- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index 626c7bc9..8b43a57b 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -1,5 +1,6 @@ """Data class for contractions of Gaussian-type primitives.""" from gbasis.utils import factorial2 +from numbers import Integral, Real import numpy as np @@ -113,7 +114,6 @@ class GeneralizedContractionShell: assign_norm_contr(self) Assign normalization constants for the contractions. - """ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e-15, ovr_screen=False): @@ -136,6 +136,7 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e dimension. exps : np.ndarray(K,) Exponents of the primitives, :math:`\{\alpha_i\}_{i=1}^K`. +<<<<<<< HEAD coord_type : str Coordinate type of the contraction. Options include "cartesian" or "c" and "spherical" or "p". @@ -145,6 +146,13 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e Tolerance used in overlap screening. ovr_screen : boolean Flag used for activating overlap screening. +======= + icenter : int or None (optional) + Index for the atomic center for the contraction. + charge : float or None (optional) + Charge at the atomic center for the contraction. + +>>>>>>> Expose all attrs (center,charge) required for cint bindings """ self.angmom = angmom self.coord = coord @@ -155,6 +163,7 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e self.assign_norm_cont() self.coord_type = coord_type self.icenter = icenter + self.charge = charge @property def icenter(self): @@ -162,7 +171,7 @@ def icenter(self): Returns ------- - icenter : np.int64 or None + icenter : int or None Index for the corresponding atom center of the contractions. """ @@ -174,21 +183,56 @@ def icenter(self, icenter): Parameters ---------- - icenter : np.int64 or None + icenter : int or None Index for the corresponding atom center of the contractions. Raises ------ TypeError - If `center` is not a `numpy.int64`, `int`, `float` or `None` type. + If `center` is not an `Integral` or `None` type. + + """ + if isinstance(icenter, Integral): + self._icenter = int(icenter) + elif icenter is None: + self._icenter = None + else: + raise TypeError(f"Center should be of `numbers.Integral` type. Got {type(icenter)}") + + @property + def charge(self): + """Charge at the atomic center for the contractions. + + Returns + ------- + charge : float or None + Charge at the atomic center for the contractions. + + """ + return self._icenter + + @charge.setter + def charge(self, charge): + """Charge at the atomic center for the contractions. + + Parameters + ---------- + charge : float or None + Charge at the atomic center for the contractions. + + Raises + ------ + TypeError + If `center` is not a `Real` or `None` type. """ - if isinstance(icenter, int) or isinstance(icenter, float): - self._icenter = np.array(icenter, dtype=np.int64) - elif isinstance(icenter, np.int64) or icenter is None: - self._icenter = icenter + if isinstance(charge, Real): + self._charge = float(charge) + elif charge is None: + self._charge = None else: - raise TypeError(f"Center should be of integer type. Got {type(self.icenter)}") + raise TypeError(f"Charge should be of `numbers.Real` type. Got {type(charge)}") + @property def coord(self): """Coordinate of the center of the contractions. diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 8d350c2e..aebaaa3f 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -203,7 +203,8 @@ def test_overlap_horton_anorcc_bec(): basis = make_contractions( basis_dict, ["Be", "C"], np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) ) - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter, + charge=i.charge) for i in basis] horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) From 5baf38140dd08ef8058f3b9fe75e236dcde1515a Mon Sep 17 00:00:00 2001 From: leila-pujal Date: Tue, 7 Nov 2023 09:32:46 -0500 Subject: [PATCH 06/72] Get iodata atnums for each shell atomic charge --- gbasis/contractions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index 8b43a57b..c7a71747 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -209,7 +209,7 @@ def charge(self): Charge at the atomic center for the contractions. """ - return self._icenter + return self._charge @charge.setter def charge(self, charge): From b70c61b30ad1df008ceceda017da3b330c050e6e Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 7 Nov 2023 11:20:49 -0500 Subject: [PATCH 07/72] Fix CBasis interface; take in at[nums|coords] tests still fail; WIP --- gbasis/integrals/libcint.py | 95 +++++++++++++++---------------------- tests/test_libcint.py | 31 +++++++----- 2 files changed, 59 insertions(+), 67 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 033c1d20..f2067ef2 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -139,19 +139,23 @@ class CBasis: """ - def __init__(self, basis, coord_type="spherical"): + def __init__(self, basis, atnums, atcoords, coord_type="spherical"): r""" Initialize a ``CBasis`` instance. Parameters ---------- - basis : List of list of GeneralizedContractionShell - Shells of generalized contractions by atomic center. + basis : List of GeneralizedContractionShell + Shells of generalized contractions. + atnums : List of Integral + Atomic numbers for each atomic center. + atcoords : List of length-3 array-like of floats + X, Y, and Z coordinates for each atomic center. coord_type : ('spherical'|'cartesian') Type of coordinates. """ - # Verify coordinate type + # Set coord type _coord_type = coord_type.lower() if _coord_type == "spherical": num_angmom = attrgetter("num_sph") @@ -165,7 +169,7 @@ def __init__(self, basis, coord_type="spherical"): atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} for shell in basis: atm_basis[shell.icenter].append(shell) - basis = list(atm_basis.values()) + basis = list(atm_basis.items()) # Set up counts of atomic centers/shells/gbfs/exps/coeffs natm = len(basis) @@ -173,7 +177,7 @@ def __init__(self, basis, coord_type="spherical"): nbas = 0 nexp = 0 ncof = 0 - for contractions in basis: + for _, contractions in basis: nshl += len(contractions) for shell in contractions: nbas += num_angmom(shell) @@ -187,14 +191,15 @@ def __init__(self, basis, coord_type="spherical"): atm = np.zeros((natm, 6), dtype=c_int) bas = np.zeros((nbas, 8), dtype=c_int) env = np.zeros(20 + natm * 3 + nexp + ncof, dtype=c_double) + offsets = [] # Go to next atomic center's contractions - for contractions in basis: + for atnum, atcoord, (icenter, contractions) in zip(atnums, atcoords, basis): # Nuclear charge of `iatm` atom - self.atm[iatm, 0] = np.round(contractions[0].charge).astype(int) + atm[iatm, 0] = np.round(atnum).astype(int) # `env` offset to save xyz coordinates - self.atm[iatm, 1] = ioff + atm[iatm, 1] = ioff # Save xyz coordinates; increment ioff - self.env[ioff:ioff + 3] = contractions[0].coord + env[ioff:ioff + 3] = atcoord ioff += 3 # Go to next contracted GTO for shell in contractions: @@ -209,16 +214,18 @@ def __init__(self, basis, coord_type="spherical"): # `env` offset to save exponentss of primitive GTOs bas[ibas, 5] = ioff # Save exponents; increment ioff - env[ioff:ioff + shells.exps.size] = shells.exps - ioff += shells.exps.size + env[ioff:ioff + shell.exps.size] = shell.exps + ioff += shell.exps.size # `env` offset to save column-major contraction coefficients, # i.e. a (no. primitive-)by-(no. contracted) matrix bas[ibas, 6] = ioff # Save coefficients; increment ioff - env[ioff:ioff + shells.coeffs.size] = shells.coeffs.T - ioff += shells.coeffs.size + env[ioff:ioff + shell.coeffs.size] = shell.coeffs.T.reshape(-1) + ioff += shell.coeffs.size # Increment contracted GTO ibas += 1 + # Save basis function offsets + offsets.append(num_angmom(shell)) # Increment atomic center iatm += 1 @@ -231,9 +238,10 @@ def __init__(self, basis, coord_type="spherical"): self.env = env # Save basis function offsets - self.offsets = list(map(num_angmom, self.bas[:, 1])) - self.max_off = max(self.offsets) + self.offsets = offsets + self.max_off = max(offsets) + # # Make individual integral evaluation methods via `make_intNe` macro: # Kinetic energy integral @@ -242,10 +250,10 @@ def __init__(self, basis, coord_type="spherical"): self.nuc = self.make_int1e(cint1e_nuc_cart if _coord_type == "cart" else cint1e_nuc_sph) # Overlap integral self.olp = self.make_int1e(cint1e_ovlp_cart if _coord_type == "cart" else cint1e_ovlp_sph) - # Electrone repulsion integral + # Electron repulsion integral self.eri = self.make_int2e(cint2e_cart if _coord_type == "cart" else cint2e_sph) - def make_int1e(self, func, coord_type="spherical", doc=None): + def make_int1e(self, func): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -253,22 +261,10 @@ def make_int1e(self, func, coord_type="spherical", doc=None): ---------- func : callable ``libcint`` function. - coord_type : ('spherical'|'cartesian') - Type of coordinates. """ - # Verify coordinate type - _coord_type = coord_type.lower() - if _coord_type == "spherical": - num_angmom = attrgetter("num_sph") - elif _coord_type == "cartesian": - num_angmom = attrgetter("num_cart") - else: - raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " - f"the provided value, '{coord_type}', is invalid") - # Make instance-bound integral method - def int1e(self): + def int1e(): # Make temporary arrays shls = np.zeros(2, dtype=c_int) buf = np.zeros(self.max_off ** 2, dtype=c_double) @@ -280,17 +276,17 @@ def int1e(self): shls[0] = ishl p_off = self.offsets[ishl] jpos = 0 - for jshl in range(i + 1): + for jshl in range(ishl + 1): shls[1] = jshl q_off = self.offsets[jshl] # Call the C function to fill `buf` - func(buf, shls, self.atm, self.natm, self.nbas, self.bas, self.env, None) + func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array for p in range(p_off): i_off = p + ipos for q in range(q_off): j_off = q + jpos - val = self.buf[p * q_off + q] + val = buf[p * q_off + q] out[i_off, j_off] = val out[j_off, i_off] = val # Reset `buf` @@ -305,7 +301,7 @@ def int1e(self): # Return instance-bound integral method return int1e - def make_int2e(self, func, coord_type="spherical"): + def make_int2e(self, func): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -314,22 +310,9 @@ def make_int2e(self, func, coord_type="spherical"): func : callable ``libcint`` function. - coord_type : ('spherical'|'cartesian') - Type of coordinates. - """ - # Verify coordinate type - _coord_type = coord_type.lower() - if _coord_type == "spherical": - num_angmom = attrgetter("num_sph") - elif _coord_type == "cartesian": - num_angmom = attrgetter("num_cart") - else: - raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " - f"the provided value, '{coord_type}', is invalid") - # Make instance-bound integral method - def int2e(self): + def int2e(): # Make temporary arrays shls = np.zeros(4, dtype=c_int) buf = np.zeros(self.max_offset ** 4, dtype=c_double) @@ -341,7 +324,7 @@ def int2e(self): shls[0] = ishl p_off = self.offsets[ishl] jpos = 0 - for jshl in range(i + 1): + for jshl in range(ishl + 1): ij = ((ishl + 1) * ishl) // 2 + jshl shls[1] = jshl q_off = self.offsets[jshl] @@ -350,7 +333,7 @@ def int2e(self): shls[2] = kshl r_off = self.offsets[kshl] lpos = 0 - for lshl in range(k + 1): + for lshl in range(kshl + 1): kl = ((kshl + 1) * kshl) // 2 + lshl shls[3] = lshl s_off = self.offsets[lshl] @@ -358,7 +341,7 @@ def int2e(self): lpos += s_off continue # Call the C function to fill `buf` - func(buf, shls, self.atm, self.natm, self.nbas, self.bas, self.env, None) + func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array for p in range(p_off): i_off = p + ipos @@ -368,10 +351,10 @@ def int2e(self): k_off = r + kpos for s in range(s_off): l_off = s + lpos - val = self.buf[p * (q_off * r_off * s_off) + - q * (r_off * s_off) + - r * (s_off) + - s] + val = buf[p * (q_off * r_off * s_off) + + q * (r_off * s_off) + + r * (s_off) + + s] out[i_off, j_off, k_off, l_off] = val out[i_off, j_off, l_off, k_off] = val out[j_off, i_off, k_off, l_off] = val diff --git a/tests/test_libcint.py b/tests/test_libcint.py index aebaaa3f..c3067a8f 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -182,14 +182,19 @@ def test_overlap_horton_anorcc_hhe(): """ basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr - basis = make_contractions( - basis_dict, ["H", "He"], np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) - ) - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + atcoords = np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) + + basis = make_contractions(basis_dict, ["H", "He"], atcoords) + + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) - assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) + + cbasis = CBasis(basis, [1, 2], atcoords, coord_type="cartesian") + + assert np.allclose(cbasis.olp(), horton_overlap) def test_overlap_horton_anorcc_bec(): @@ -199,12 +204,16 @@ def test_overlap_horton_anorcc_bec(): """ basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr - basis = make_contractions( - basis_dict, ["Be", "C"], np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) - ) - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter, - charge=i.charge) for i in basis] + atcoords = np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) + + basis = make_contractions(basis_dict, ["Be", "C"], atcoords) + + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) - assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) + + cbasis = CBasis(basis, [4, 6], atcoords, coord_type="cartesian") + + assert np.allclose(cbasis.olp(), horton_overlap) From 7271c24b71a7f2ae4cb5bd89bc31f4fb4af0a15a Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 11:29:34 -0500 Subject: [PATCH 08/72] Clean up interface (remove _charge), bindings --- gbasis/contractions.py | 47 +-------------------- gbasis/integrals/libcint.py | 84 ++++++++++++++----------------------- 2 files changed, 32 insertions(+), 99 deletions(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index c7a71747..e7c74f4d 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -1,6 +1,6 @@ """Data class for contractions of Gaussian-type primitives.""" from gbasis.utils import factorial2 -from numbers import Integral, Real +from numbers import Integral import numpy as np @@ -84,8 +84,6 @@ class GeneralizedContractionShell: Tuple of magnetic quantum numbers of the contractions that specifies the ordering after transforming the contractions from the Cartesian to spherical coordinate system. Property of `GeneralizedContractionShell`. - charge : float - Charge at the center of the Gaussian primitives. exps : np.ndarray(K,) Exponents of the primitives, :math:`\{\alpha_i\}_{i=1}^K`. coeffs : np.ndarray(K, M) @@ -136,7 +134,6 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e dimension. exps : np.ndarray(K,) Exponents of the primitives, :math:`\{\alpha_i\}_{i=1}^K`. -<<<<<<< HEAD coord_type : str Coordinate type of the contraction. Options include "cartesian" or "c" and "spherical" or "p". @@ -146,13 +143,6 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e Tolerance used in overlap screening. ovr_screen : boolean Flag used for activating overlap screening. -======= - icenter : int or None (optional) - Index for the atomic center for the contraction. - charge : float or None (optional) - Charge at the atomic center for the contraction. - ->>>>>>> Expose all attrs (center,charge) required for cint bindings """ self.angmom = angmom self.coord = coord @@ -163,7 +153,6 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e self.assign_norm_cont() self.coord_type = coord_type self.icenter = icenter - self.charge = charge @property def icenter(self): @@ -199,40 +188,6 @@ def icenter(self, icenter): else: raise TypeError(f"Center should be of `numbers.Integral` type. Got {type(icenter)}") - @property - def charge(self): - """Charge at the atomic center for the contractions. - - Returns - ------- - charge : float or None - Charge at the atomic center for the contractions. - - """ - return self._charge - - @charge.setter - def charge(self, charge): - """Charge at the atomic center for the contractions. - - Parameters - ---------- - charge : float or None - Charge at the atomic center for the contractions. - - Raises - ------ - TypeError - If `center` is not a `Real` or `None` type. - - """ - if isinstance(charge, Real): - self._charge = float(charge) - elif charge is None: - self._charge = None - else: - raise TypeError(f"Charge should be of `numbers.Real` type. Got {type(charge)}") - @property def coord(self): """Coordinate of the center of the contractions. diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index f2067ef2..d6d4c94e 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -20,13 +20,9 @@ ] -# -# Helper class for generating LibCInt function bindings - - class _LibCInt: r""" - ``libcint`` shared object library helper class. + ``libcint`` shared library helper class for generating C function bindings. """ @@ -38,7 +34,12 @@ class _LibCInt: def __new__(cls): r""" - Singleton class pattern. + Singleton class constructor. + + Returns + ------- + instance : _LibCInt + Singleton instance. """ if not hasattr(cls, "_instance"): @@ -49,6 +50,19 @@ def __getattr__(self, attr): r""" Helper for returning function pointers from ``libcint`` with proper signatures. + Matches the function to its signature based on the pattern of its name; + possible because ``libcint`` function names and signatures are systematic. + + Parameters + ---------- + item : str + Name of C function. + + Returns + ------- + f : callable + C function. + """ cfunc = getattr(self._libcint, attr) @@ -129,16 +143,11 @@ def __getattr__(self, attr): return cfunc -# -# C basis class; translates GBasis repr to C repr and binds integral methods - - class CBasis: r""" ``libcint`` basis class. """ - def __init__(self, basis, atnums, atcoords, coord_type="spherical"): r""" Initialize a ``CBasis`` instance. @@ -241,17 +250,16 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.offsets = offsets self.max_off = max(offsets) - # - # Make individual integral evaluation methods via `make_intNe` macro: + # Make individual integral evaluation methods via `make_intNe` macros: # Kinetic energy integral - self.kin = self.make_int1e(cint1e_kin_cart if _coord_type == "cart" else cint1e_kin_sph) + self.kin = self.make_int1e(cint1e_kin_cart if _coord_type == "cartesian" else cint1e_kin_sph) # Nuclear-electron attraction integral - self.nuc = self.make_int1e(cint1e_nuc_cart if _coord_type == "cart" else cint1e_nuc_sph) + self.nuc = self.make_int1e(cint1e_nuc_cart if _coord_type == "cartesian" else cint1e_nuc_sph) # Overlap integral - self.olp = self.make_int1e(cint1e_ovlp_cart if _coord_type == "cart" else cint1e_ovlp_sph) + self.olp = self.make_int1e(cint1e_ovlp_cart if _coord_type == "cartesian" else cint1e_ovlp_sph) # Electron repulsion integral - self.eri = self.make_int2e(cint2e_cart if _coord_type == "cart" else cint2e_sph) + self.eri = self.make_int2e(cint2e_cart if _coord_type == "cartesian" else cint2e_sph) def make_int1e(self, func): r""" @@ -380,11 +388,7 @@ def int2e(): return int2e -# -# LibCInt bindings - - -# Singleton helper class instance +# Singleton LibCInt class instance LIBCINT = _LibCInt() r""" @@ -393,40 +397,14 @@ def int2e(): """ -# Define utility functions - -CINTlen_cart = LIBCINT.CINTlen_cart -CINTlen_spinor = LIBCINT.CINTlen_spinor - -CINTcgtos_cart = LIBCINT.CINTcgtos_cart -CINTcgtos_spheric = LIBCINT.CINTcgtos_spheric -CINTcgtos_spinor = LIBCINT.CINTcgtos_spinor -CINTcgto_cart = LIBCINT.CINTcgto_cart -CINTcgto_spheric = LIBCINT.CINTcgto_spheric -CINTcgto_spinor = LIBCINT.CINTcgto_spinor - -CINTtot_pgto_spheric = LIBCINT.CINTtot_pgto_spheric -CINTtot_pgto_spinor = LIBCINT.CINTtot_pgto_spinor - -CINTtot_cgto_cart = LIBCINT.CINTtot_cgto_cart -CINTtot_cgto_spheric = LIBCINT.CINTtot_cgto_spheric -CINTtot_cgto_spinor = LIBCINT.CINTtot_cgto_spinor - -CINTshells_cart_offset = LIBCINT.CINTshells_cart_offset -CINTshells_spheric_offset = LIBCINT.CINTshells_spheric_offset -CINTshells_spinor_offset = LIBCINT.CINTshells_spinor_offset - - -# Define integral functions +# C fuctions used in CBasis class cint1e_kin_cart = LIBCINT.cint1e_kin_cart -cint1e_kin_sph = LIBCINT.cint1e_kin_sph - cint1e_nuc_cart = LIBCINT.cint1e_nuc_cart -cint1e_nuc_sph = LIBCINT.cint1e_nuc_sph - cint1e_ovlp_cart = LIBCINT.cint1e_ovlp_cart -cint1e_ovlp_sph = LIBCINT.cint1e_ovlp_sph - cint2e_cart = LIBCINT.cint2e_cart + +cint1e_kin_sph = LIBCINT.cint1e_kin_sph +cint1e_nuc_sph = LIBCINT.cint1e_nuc_sph +cint1e_ovlp_sph = LIBCINT.cint1e_ovlp_sph cint2e_sph = LIBCINT.cint2e_sph From d08794b3c6d6da553e681d88b655c39621ca6e2a Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 12:00:32 -0500 Subject: [PATCH 09/72] Follow convention(?) of using elem symbs vs nums --- gbasis/integrals/libcint.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index d6d4c94e..117da5b7 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -20,6 +20,27 @@ ] +ELEMENTS = [ + "\0", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", + "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", + "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", + "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", + "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", + "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", + "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", + "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", + "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", + "Hs", "Mt", "Ds", "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og", +] +r""" +List of the elements. + +This list has a placeholder element (the null character) at index zero +so that the index of each (real) element matches its atomic number. + +""" + + class _LibCInt: r""" ``libcint`` shared library helper class for generating C function bindings. @@ -156,8 +177,8 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): ---------- basis : List of GeneralizedContractionShell Shells of generalized contractions. - atnums : List of Integral - Atomic numbers for each atomic center. + atnums : List of str + Element corresponding to each atomic center. atcoords : List of length-3 array-like of floats X, Y, and Z coordinates for each atomic center. coord_type : ('spherical'|'cartesian') @@ -174,6 +195,9 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") + # Process `atnums` + atnums = [ELEMENTS.index(elem) for elem in atnums] + # Organize basis by atomic center atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} for shell in basis: @@ -204,7 +228,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Go to next atomic center's contractions for atnum, atcoord, (icenter, contractions) in zip(atnums, atcoords, basis): # Nuclear charge of `iatm` atom - atm[iatm, 0] = np.round(atnum).astype(int) + atm[iatm, 0] = atnum # `env` offset to save xyz coordinates atm[iatm, 1] = ioff # Save xyz coordinates; increment ioff From 246aaea0760502de91cb199a62719e0fafc7a366 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 12:25:36 -0500 Subject: [PATCH 10/72] Add proper cache for bound LibCINT functions --- gbasis/integrals/libcint.py | 211 ++++++++++++++++++++---------------- 1 file changed, 118 insertions(+), 93 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 117da5b7..9a85c52f 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -67,6 +67,13 @@ def __new__(cls): cls._instance = super(_LibCInt, cls).__new__(cls) return cls._instance + def __init__(self): + r""" + Singleton class inializer. + + """ + self._cache = dict() + def __getattr__(self, attr): r""" Helper for returning function pointers from ``libcint`` with proper signatures. @@ -76,7 +83,7 @@ def __getattr__(self, attr): Parameters ---------- - item : str + attr : str Name of C function. Returns @@ -85,83 +92,114 @@ def __getattr__(self, attr): C function. """ - cfunc = getattr(self._libcint, attr) - - if attr == 'CINTlen_cart': - cfunc.argtypes = [c_int] - cfunc.restype = c_int - - elif attr == 'CINTlen_spinor': - cfunc.argtypes = [ - c_int, - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - ] - cfunc.restype = c_int - - elif attr == 'CINTgto_norm': - cfunc.argtypes = [c_int, c_double] - cfunc.restype = c_double - - elif attr.startswith('CINTcgto') or attr.startswith('CINTtot'): - cfunc.argtypes = [ - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - c_int, - ] - cfunc.restype = c_int - - elif attr.startswith('CINTshells'): - cfunc.argtypes = [ - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - c_int, - ] - - elif attr.startswith('cint1e') and not attr.endswith('optimizer'): - cfunc.argtypes = [ - # buf - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), - # shls - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - # atm - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), - # natm - c_int, - # bas - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), - # nbas - c_int, - # env - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), - # opt (not used; put ``None`` as this argument) - c_void_p, - ] - cfunc.restype = c_int - - elif attr.startswith('cint2e') and not attr.endswith('optimizer'): - cfunc.argtypes = [ - # buf - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), - # shls - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - # atm - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), - # natm - c_int, - # bas - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), - # nbas - c_int, - # env - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), - # opt (not used; put ``None`` as this argument) - c_void_p, - ] - cfunc.restype = c_int + try: + + # Retrieve previously-cached function + cfunc = self._cache[attr] + + except KeyError: + + # Make the bound C function + cfunc = getattr(self._libcint, attr) + + if attr == 'CINTlen_cart': + cfunc.argtypes = [c_int] + cfunc.restype = c_int + + elif attr == 'CINTlen_spinor': + cfunc.argtypes = [ + c_int, + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + ] + cfunc.restype = c_int + + elif attr == 'CINTgto_norm': + cfunc.argtypes = [c_int, c_double] + cfunc.restype = c_double + + elif attr.startswith('CINTcgto') or attr.startswith('CINTtot'): + cfunc.argtypes = [ + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + c_int, + ] + cfunc.restype = c_int + + elif attr.startswith('CINTshells'): + cfunc.argtypes = [ + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + c_int, + ] + + elif attr.startswith('cint1e') and not attr.endswith('optimizer'): + cfunc.argtypes = [ + # buf + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + # shls + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + # atm + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # natm + c_int, + # bas + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # nbas + c_int, + # env + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + # opt (not used; put ``None`` as this argument) + c_void_p, + ] + cfunc.restype = c_int + + elif attr.startswith('cint2e') and not attr.endswith('optimizer'): + cfunc.argtypes = [ + # buf + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + # shls + ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + # atm + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # natm + c_int, + # bas + ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # nbas + c_int, + # env + ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + # opt (not used; put ``None`` as this argument) + c_void_p, + ] + cfunc.restype = c_int + + else: + raise NotImplementedError('there is no ``gbasis`` API for this function') + + # Cache the C function + self._cache[attr] = cfunc + + # Return the C function + return cfunc - else: - raise NotImplementedError('there is no ``gbasis`` API for this function') + def __getitem__(self, item): + r""" + Helper for returning function pointers from ``libcint`` with proper signatures. - return cfunc + This is the same as `__getattr__` and exists only for convenience. + + Parameters + ---------- + item : str + Name of C function. + + Returns + ------- + f : callable + C function. + + """ + return self.__getattr__(item) class CBasis: @@ -277,13 +315,13 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Make individual integral evaluation methods via `make_intNe` macros: # Kinetic energy integral - self.kin = self.make_int1e(cint1e_kin_cart if _coord_type == "cartesian" else cint1e_kin_sph) + self.kin = self.make_int1e(LIBCINT["cint1e_kin_cart" if _coord_type == "cartesian" else "cint1e_kin_sph"]) # Nuclear-electron attraction integral - self.nuc = self.make_int1e(cint1e_nuc_cart if _coord_type == "cartesian" else cint1e_nuc_sph) + self.nuc = self.make_int1e(LIBCINT["cint1e_nuc_cart" if _coord_type == "cartesian" else "cint1e_nuc_sph"]) # Overlap integral - self.olp = self.make_int1e(cint1e_ovlp_cart if _coord_type == "cartesian" else cint1e_ovlp_sph) + self.olp = self.make_int1e(LIBCINT["cint1e_ovlp_cart" if _coord_type == "cartesian" else "cint1e_ovlp_sph"]) # Electron repulsion integral - self.eri = self.make_int2e(cint2e_cart if _coord_type == "cartesian" else cint2e_sph) + self.eri = self.make_int2e(LIBCINT["cint2e_cart" if _coord_type == "cartesian" else "cint2e_sph"]) def make_int1e(self, func): r""" @@ -419,16 +457,3 @@ def int2e(): LIBCINT C library handle and binding generator. """ - - -# C fuctions used in CBasis class - -cint1e_kin_cart = LIBCINT.cint1e_kin_cart -cint1e_nuc_cart = LIBCINT.cint1e_nuc_cart -cint1e_ovlp_cart = LIBCINT.cint1e_ovlp_cart -cint2e_cart = LIBCINT.cint2e_cart - -cint1e_kin_sph = LIBCINT.cint1e_kin_sph -cint1e_nuc_sph = LIBCINT.cint1e_nuc_sph -cint1e_ovlp_sph = LIBCINT.cint1e_ovlp_sph -cint2e_sph = LIBCINT.cint2e_sph From 887bff2175b22c022f79d7e4885359cd3e2ec84f Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 14:58:19 -0500 Subject: [PATCH 11/72] Make gbasis-libcint tests match gbasis conventions --- tests/test_libcint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index c3067a8f..45845586 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -192,7 +192,7 @@ def test_overlap_horton_anorcc_hhe(): horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) - cbasis = CBasis(basis, [1, 2], atcoords, coord_type="cartesian") + cbasis = CBasis(basis, ["H", "He"], atcoords, coord_type="cartesian") assert np.allclose(cbasis.olp(), horton_overlap) @@ -214,6 +214,6 @@ def test_overlap_horton_anorcc_bec(): horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) - cbasis = CBasis(basis, [4, 6], atcoords, coord_type="cartesian") + cbasis = CBasis(basis, ["Be", "C"], atcoords, coord_type="cartesian") assert np.allclose(cbasis.olp(), horton_overlap) From c512db399a896a9b0c8da31375c735ba02cfab23 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 13 Nov 2023 15:21:03 -0500 Subject: [PATCH 12/72] Normalize coeffs for LibCInt CBasis binding --- gbasis/integrals/libcint.py | 8 +- tests/data_ugbs.nwchem | 13758 ++++++++++++++++++++++++++++++++++ tests/test_libcint.py | 242 +- 3 files changed, 13808 insertions(+), 200 deletions(-) create mode 100644 tests/data_ugbs.nwchem diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 9a85c52f..65202c30 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -228,7 +228,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): if _coord_type == "spherical": num_angmom = attrgetter("num_sph") elif _coord_type == "cartesian": - num_angmom = attrgetter("num_cart") + num_angmom = lambda x: x.norm_cont.shape[1]#attrgetter("num_cart") else: raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") @@ -290,8 +290,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # `env` offset to save column-major contraction coefficients, # i.e. a (no. primitive-)by-(no. contracted) matrix bas[ibas, 6] = ioff - # Save coefficients; increment ioff - env[ioff:ioff + shell.coeffs.size] = shell.coeffs.T.reshape(-1) + # Save (normalized) coefficients; increment ioff + env_tmp = env[ioff:ioff + shell.coeffs.size].reshape(*shell.coeffs.shape) + for iexp, icoeffs, ienv in zip(shell.exps, shell.coeffs, env_tmp): + ienv[:] = icoeffs * LIBCINT.CINTgto_norm(shell.angmom, iexp) ioff += shell.coeffs.size # Increment contracted GTO ibas += 1 diff --git a/tests/data_ugbs.nwchem b/tests/data_ugbs.nwchem new file mode 100644 index 00000000..c437d019 --- /dev/null +++ b/tests/data_ugbs.nwchem @@ -0,0 +1,13758 @@ +#---------------------------------------------------------------------- +# Basis Set Exchange +# Version v0.9.1 +# https://www.basissetexchange.org +#---------------------------------------------------------------------- +# Basis set: UGBS +# Description: Universal Gaussian Basis Set +# Role: orbital +# Version: 0 (Data from the Original Basis Set Exchange) +#---------------------------------------------------------------------- + + +BASIS "ao basis" SPHERICAL PRINT +#BASIS SET: (20s) -> [20s] +H S + 13739.0854166734 1.0000000 +H S + 7016.36109438299 1.0000000 +H S + 3583.15866840946 1.0000000 +H S + 1829.86962476550 1.0000000 +H S + 934.489134729210 1.0000000 +H S + 477.230689612032 1.0000000 +H S + 243.715119463182 1.0000000 +H S + 124.461944187287 1.0000000 +H S + 63.5609952513411 1.0000000 +H S + 32.4597220758638 1.0000000 +H S + 16.5767315800501 1.0000000 +H S + 8.46550778330153 1.0000000 +H S + 4.32321786011102 1.0000000 +H S + 2.20780762884063 1.0000000 +H S + 1.12749685157938 1.0000000 +H S + 0.575797063890464 1.0000000 +H S + 0.294051604951678 1.0000000 +H S + 0.150168091845475 1.0000000 +H S + 7.668876968794858E-002 1.0000000 +H S + 3.916389509898707E-002 1.0000000 +#BASIS SET: (21s) -> [21s] +He S + 52680.4659115022 1.0000000 +He S + 26903.1860742976 1.0000000 +He S + 13739.0854166734 1.0000000 +He S + 7016.36109438300 1.0000000 +He S + 3583.15866840946 1.0000000 +He S + 1829.86962476550 1.0000000 +He S + 934.489134729211 1.0000000 +He S + 477.230689612032 1.0000000 +He S + 243.715119463182 1.0000000 +He S + 124.461944187287 1.0000000 +He S + 63.5609952513412 1.0000000 +He S + 32.4597220758638 1.0000000 +He S + 16.5767315800501 1.0000000 +He S + 8.46550778330153 1.0000000 +He S + 4.32321786011102 1.0000000 +He S + 2.20780762884063 1.0000000 +He S + 1.12749685157938 1.0000000 +He S + 0.575797063890465 1.0000000 +He S + 0.294051604951678 1.0000000 +He S + 0.150168091845475 1.0000000 +He S + 7.668876968794860E-002 1.0000000 +#BASIS SET: (25s) -> [25s] +Li S + 201995.358823884 1.0000000 +Li S + 103156.238855453 1.0000000 +Li S + 52680.4659115021 1.0000000 +Li S + 26903.1860742975 1.0000000 +Li S + 13739.0854166734 1.0000000 +Li S + 7016.36109438299 1.0000000 +Li S + 3583.15866840945 1.0000000 +Li S + 1829.86962476550 1.0000000 +Li S + 934.489134729211 1.0000000 +Li S + 477.230689612032 1.0000000 +Li S + 243.715119463182 1.0000000 +Li S + 124.461944187287 1.0000000 +Li S + 63.5609952513411 1.0000000 +Li S + 32.4597220758638 1.0000000 +Li S + 16.5767315800501 1.0000000 +Li S + 8.46550778330153 1.0000000 +Li S + 4.32321786011102 1.0000000 +Li S + 2.20780762884063 1.0000000 +Li S + 1.12749685157938 1.0000000 +Li S + 0.575797063890465 1.0000000 +Li S + 0.294051604951678 1.0000000 +Li S + 0.150168091845475 1.0000000 +Li S + 7.668876968794858E-002 1.0000000 +Li S + 3.916389509898707E-002 1.0000000 +Li S + 2.000046011385546E-002 1.0000000 +#BASIS SET: (25s) -> [25s] +Be S + 201995.358823884 1.0000000 +Be S + 103156.238855453 1.0000000 +Be S + 52680.4659115021 1.0000000 +Be S + 26903.1860742975 1.0000000 +Be S + 13739.0854166734 1.0000000 +Be S + 7016.36109438299 1.0000000 +Be S + 3583.15866840945 1.0000000 +Be S + 1829.86962476550 1.0000000 +Be S + 934.489134729211 1.0000000 +Be S + 477.230689612032 1.0000000 +Be S + 243.715119463182 1.0000000 +Be S + 124.461944187287 1.0000000 +Be S + 63.5609952513411 1.0000000 +Be S + 32.4597220758638 1.0000000 +Be S + 16.5767315800501 1.0000000 +Be S + 8.46550778330153 1.0000000 +Be S + 4.32321786011102 1.0000000 +Be S + 2.20780762884063 1.0000000 +Be S + 1.12749685157938 1.0000000 +Be S + 0.575797063890465 1.0000000 +Be S + 0.294051604951678 1.0000000 +Be S + 0.150168091845475 1.0000000 +Be S + 7.668876968794858E-002 1.0000000 +Be S + 3.916389509898707E-002 1.0000000 +Be S + 2.000046011385546E-002 1.0000000 +#BASIS SET: (25s,15p) -> [25s,15p] +B S + 395537.152566831 1.0000000 +B S + 201995.358823884 1.0000000 +B S + 103156.238855453 1.0000000 +B S + 52680.4659115021 1.0000000 +B S + 26903.1860742976 1.0000000 +B S + 13739.0854166734 1.0000000 +B S + 7016.36109438299 1.0000000 +B S + 3583.15866840946 1.0000000 +B S + 1829.86962476550 1.0000000 +B S + 934.489134729210 1.0000000 +B S + 477.230689612032 1.0000000 +B S + 243.715119463182 1.0000000 +B S + 124.461944187287 1.0000000 +B S + 63.5609952513411 1.0000000 +B S + 32.4597220758638 1.0000000 +B S + 16.5767315800501 1.0000000 +B S + 8.46550778330153 1.0000000 +B S + 4.32321786011102 1.0000000 +B S + 2.20780762884063 1.0000000 +B S + 1.12749685157938 1.0000000 +B S + 0.575797063890464 1.0000000 +B S + 0.294051604951678 1.0000000 +B S + 0.150168091845475 1.0000000 +B S + 7.668876968794858E-002 1.0000000 +B S + 3.916389509898707E-002 1.0000000 +B P + 477.230689612032 1.0000000 +B P + 243.715119463182 1.0000000 +B P + 124.461944187287 1.0000000 +B P + 63.5609952513411 1.0000000 +B P + 32.4597220758638 1.0000000 +B P + 16.5767315800501 1.0000000 +B P + 8.46550778330153 1.0000000 +B P + 4.32321786011102 1.0000000 +B P + 2.20780762884063 1.0000000 +B P + 1.12749685157938 1.0000000 +B P + 0.575797063890464 1.0000000 +B P + 0.294051604951678 1.0000000 +B P + 0.150168091845475 1.0000000 +B P + 7.668876968794858E-002 1.0000000 +B P + 3.916389509898707E-002 1.0000000 +#BASIS SET: (23s,15p) -> [23s,15p] +C S + 201995.358823884 1.0000000 +C S + 103156.238855453 1.0000000 +C S + 52680.4659115022 1.0000000 +C S + 26903.1860742976 1.0000000 +C S + 13739.0854166734 1.0000000 +C S + 7016.36109438300 1.0000000 +C S + 3583.15866840946 1.0000000 +C S + 1829.86962476550 1.0000000 +C S + 934.489134729211 1.0000000 +C S + 477.230689612032 1.0000000 +C S + 243.715119463182 1.0000000 +C S + 124.461944187287 1.0000000 +C S + 63.5609952513412 1.0000000 +C S + 32.4597220758638 1.0000000 +C S + 16.5767315800501 1.0000000 +C S + 8.46550778330153 1.0000000 +C S + 4.32321786011102 1.0000000 +C S + 2.20780762884063 1.0000000 +C S + 1.12749685157938 1.0000000 +C S + 0.575797063890465 1.0000000 +C S + 0.294051604951678 1.0000000 +C S + 0.150168091845475 1.0000000 +C S + 7.668876968794860E-002 1.0000000 +C P + 477.230689612032 1.0000000 +C P + 243.715119463182 1.0000000 +C P + 124.461944187287 1.0000000 +C P + 63.5609952513411 1.0000000 +C P + 32.4597220758638 1.0000000 +C P + 16.5767315800501 1.0000000 +C P + 8.46550778330153 1.0000000 +C P + 4.32321786011102 1.0000000 +C P + 2.20780762884063 1.0000000 +C P + 1.12749685157938 1.0000000 +C P + 0.575797063890464 1.0000000 +C P + 0.294051604951678 1.0000000 +C P + 0.150168091845475 1.0000000 +C P + 7.668876968794858E-002 1.0000000 +C P + 3.916389509898707E-002 1.0000000 +#BASIS SET: (23s,16p) -> [23s,16p] +N S + 201995.358823884 1.0000000 +N S + 103156.238855453 1.0000000 +N S + 52680.4659115022 1.0000000 +N S + 26903.1860742976 1.0000000 +N S + 13739.0854166734 1.0000000 +N S + 7016.36109438300 1.0000000 +N S + 3583.15866840946 1.0000000 +N S + 1829.86962476550 1.0000000 +N S + 934.489134729211 1.0000000 +N S + 477.230689612032 1.0000000 +N S + 243.715119463182 1.0000000 +N S + 124.461944187287 1.0000000 +N S + 63.5609952513412 1.0000000 +N S + 32.4597220758638 1.0000000 +N S + 16.5767315800501 1.0000000 +N S + 8.46550778330153 1.0000000 +N S + 4.32321786011102 1.0000000 +N S + 2.20780762884063 1.0000000 +N S + 1.12749685157938 1.0000000 +N S + 0.575797063890465 1.0000000 +N S + 0.294051604951678 1.0000000 +N S + 0.150168091845475 1.0000000 +N S + 7.668876968794860E-002 1.0000000 +N P + 1829.86962476550 1.0000000 +N P + 934.489134729211 1.0000000 +N P + 477.230689612032 1.0000000 +N P + 243.715119463182 1.0000000 +N P + 124.461944187287 1.0000000 +N P + 63.5609952513412 1.0000000 +N P + 32.4597220758638 1.0000000 +N P + 16.5767315800501 1.0000000 +N P + 8.46550778330153 1.0000000 +N P + 4.32321786011102 1.0000000 +N P + 2.20780762884063 1.0000000 +N P + 1.12749685157938 1.0000000 +N P + 0.575797063890465 1.0000000 +N P + 0.294051604951678 1.0000000 +N P + 0.150168091845475 1.0000000 +N P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (23s,16p) -> [23s,16p] +O S + 395537.152566831 1.0000000 +O S + 201995.358823884 1.0000000 +O S + 103156.238855453 1.0000000 +O S + 52680.4659115021 1.0000000 +O S + 26903.1860742975 1.0000000 +O S + 13739.0854166734 1.0000000 +O S + 7016.36109438299 1.0000000 +O S + 3583.15866840945 1.0000000 +O S + 1829.86962476550 1.0000000 +O S + 934.489134729210 1.0000000 +O S + 477.230689612032 1.0000000 +O S + 243.715119463182 1.0000000 +O S + 124.461944187287 1.0000000 +O S + 63.5609952513411 1.0000000 +O S + 32.4597220758638 1.0000000 +O S + 16.5767315800501 1.0000000 +O S + 8.46550778330153 1.0000000 +O S + 4.32321786011102 1.0000000 +O S + 2.20780762884063 1.0000000 +O S + 1.12749685157938 1.0000000 +O S + 0.575797063890464 1.0000000 +O S + 0.294051604951678 1.0000000 +O S + 0.150168091845475 1.0000000 +O P + 1829.86962476550 1.0000000 +O P + 934.489134729211 1.0000000 +O P + 477.230689612032 1.0000000 +O P + 243.715119463182 1.0000000 +O P + 124.461944187287 1.0000000 +O P + 63.5609952513412 1.0000000 +O P + 32.4597220758638 1.0000000 +O P + 16.5767315800501 1.0000000 +O P + 8.46550778330153 1.0000000 +O P + 4.32321786011102 1.0000000 +O P + 2.20780762884063 1.0000000 +O P + 1.12749685157938 1.0000000 +O P + 0.575797063890465 1.0000000 +O P + 0.294051604951678 1.0000000 +O P + 0.150168091845475 1.0000000 +O P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (24s,16p) -> [24s,16p] +F S + 774520.959152738 1.0000000 +F S + 395537.152566831 1.0000000 +F S + 201995.358823884 1.0000000 +F S + 103156.238855453 1.0000000 +F S + 52680.4659115021 1.0000000 +F S + 26903.1860742975 1.0000000 +F S + 13739.0854166734 1.0000000 +F S + 7016.36109438299 1.0000000 +F S + 3583.15866840945 1.0000000 +F S + 1829.86962476550 1.0000000 +F S + 934.489134729210 1.0000000 +F S + 477.230689612032 1.0000000 +F S + 243.715119463182 1.0000000 +F S + 124.461944187287 1.0000000 +F S + 63.5609952513411 1.0000000 +F S + 32.4597220758638 1.0000000 +F S + 16.5767315800501 1.0000000 +F S + 8.46550778330153 1.0000000 +F S + 4.32321786011102 1.0000000 +F S + 2.20780762884063 1.0000000 +F S + 1.12749685157938 1.0000000 +F S + 0.575797063890464 1.0000000 +F S + 0.294051604951678 1.0000000 +F S + 0.150168091845475 1.0000000 +F P + 1829.86962476550 1.0000000 +F P + 934.489134729211 1.0000000 +F P + 477.230689612032 1.0000000 +F P + 243.715119463182 1.0000000 +F P + 124.461944187287 1.0000000 +F P + 63.5609952513412 1.0000000 +F P + 32.4597220758638 1.0000000 +F P + 16.5767315800501 1.0000000 +F P + 8.46550778330153 1.0000000 +F P + 4.32321786011102 1.0000000 +F P + 2.20780762884063 1.0000000 +F P + 1.12749685157938 1.0000000 +F P + 0.575797063890465 1.0000000 +F P + 0.294051604951678 1.0000000 +F P + 0.150168091845475 1.0000000 +F P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (23s,16p) -> [23s,16p] +Ne S + 395537.152566831 1.0000000 +Ne S + 201995.358823884 1.0000000 +Ne S + 103156.238855453 1.0000000 +Ne S + 52680.4659115021 1.0000000 +Ne S + 26903.1860742975 1.0000000 +Ne S + 13739.0854166734 1.0000000 +Ne S + 7016.36109438299 1.0000000 +Ne S + 3583.15866840945 1.0000000 +Ne S + 1829.86962476550 1.0000000 +Ne S + 934.489134729210 1.0000000 +Ne S + 477.230689612032 1.0000000 +Ne S + 243.715119463182 1.0000000 +Ne S + 124.461944187287 1.0000000 +Ne S + 63.5609952513411 1.0000000 +Ne S + 32.4597220758638 1.0000000 +Ne S + 16.5767315800501 1.0000000 +Ne S + 8.46550778330153 1.0000000 +Ne S + 4.32321786011102 1.0000000 +Ne S + 2.20780762884063 1.0000000 +Ne S + 1.12749685157938 1.0000000 +Ne S + 0.575797063890464 1.0000000 +Ne S + 0.294051604951678 1.0000000 +Ne S + 0.150168091845475 1.0000000 +Ne P + 1829.86962476550 1.0000000 +Ne P + 934.489134729211 1.0000000 +Ne P + 477.230689612032 1.0000000 +Ne P + 243.715119463182 1.0000000 +Ne P + 124.461944187287 1.0000000 +Ne P + 63.5609952513412 1.0000000 +Ne P + 32.4597220758638 1.0000000 +Ne P + 16.5767315800501 1.0000000 +Ne P + 8.46550778330153 1.0000000 +Ne P + 4.32321786011102 1.0000000 +Ne P + 2.20780762884063 1.0000000 +Ne P + 1.12749685157938 1.0000000 +Ne P + 0.575797063890465 1.0000000 +Ne P + 0.294051604951678 1.0000000 +Ne P + 0.150168091845475 1.0000000 +Ne P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (27s,16p) -> [27s,16p] +Na S + 774520.959152735 1.0000000 +Na S + 395537.152566831 1.0000000 +Na S + 201995.358823884 1.0000000 +Na S + 103156.238855453 1.0000000 +Na S + 52680.4659115021 1.0000000 +Na S + 26903.1860742975 1.0000000 +Na S + 13739.0854166734 1.0000000 +Na S + 7016.36109438299 1.0000000 +Na S + 3583.15866840945 1.0000000 +Na S + 1829.86962476550 1.0000000 +Na S + 934.489134729211 1.0000000 +Na S + 477.230689612032 1.0000000 +Na S + 243.715119463182 1.0000000 +Na S + 124.461944187287 1.0000000 +Na S + 63.5609952513411 1.0000000 +Na S + 32.4597220758638 1.0000000 +Na S + 16.5767315800501 1.0000000 +Na S + 8.46550778330153 1.0000000 +Na S + 4.32321786011102 1.0000000 +Na S + 2.20780762884063 1.0000000 +Na S + 1.12749685157938 1.0000000 +Na S + 0.575797063890465 1.0000000 +Na S + 0.294051604951678 1.0000000 +Na S + 0.150168091845475 1.0000000 +Na S + 7.668876968794858E-002 1.0000000 +Na S + 3.916389509898707E-002 1.0000000 +Na S + 2.000046011385546E-002 1.0000000 +Na P + 3583.15866840945 1.0000000 +Na P + 1829.86962476550 1.0000000 +Na P + 934.489134729210 1.0000000 +Na P + 477.230689612032 1.0000000 +Na P + 243.715119463182 1.0000000 +Na P + 124.461944187287 1.0000000 +Na P + 63.5609952513411 1.0000000 +Na P + 32.4597220758638 1.0000000 +Na P + 16.5767315800501 1.0000000 +Na P + 8.46550778330153 1.0000000 +Na P + 4.32321786011102 1.0000000 +Na P + 2.20780762884063 1.0000000 +Na P + 1.12749685157938 1.0000000 +Na P + 0.575797063890464 1.0000000 +Na P + 0.294051604951678 1.0000000 +Na P + 0.150168091845475 1.0000000 +#BASIS SET: (27s,16p) -> [27s,16p] +Mg S + 774520.959152735 1.0000000 +Mg S + 395537.152566831 1.0000000 +Mg S + 201995.358823884 1.0000000 +Mg S + 103156.238855453 1.0000000 +Mg S + 52680.4659115021 1.0000000 +Mg S + 26903.1860742975 1.0000000 +Mg S + 13739.0854166734 1.0000000 +Mg S + 7016.36109438299 1.0000000 +Mg S + 3583.15866840945 1.0000000 +Mg S + 1829.86962476550 1.0000000 +Mg S + 934.489134729211 1.0000000 +Mg S + 477.230689612032 1.0000000 +Mg S + 243.715119463182 1.0000000 +Mg S + 124.461944187287 1.0000000 +Mg S + 63.5609952513411 1.0000000 +Mg S + 32.4597220758638 1.0000000 +Mg S + 16.5767315800501 1.0000000 +Mg S + 8.46550778330153 1.0000000 +Mg S + 4.32321786011102 1.0000000 +Mg S + 2.20780762884063 1.0000000 +Mg S + 1.12749685157938 1.0000000 +Mg S + 0.575797063890465 1.0000000 +Mg S + 0.294051604951678 1.0000000 +Mg S + 0.150168091845475 1.0000000 +Mg S + 7.668876968794858E-002 1.0000000 +Mg S + 3.916389509898707E-002 1.0000000 +Mg S + 2.000046011385546E-002 1.0000000 +Mg P + 3583.15866840945 1.0000000 +Mg P + 1829.86962476550 1.0000000 +Mg P + 934.489134729210 1.0000000 +Mg P + 477.230689612032 1.0000000 +Mg P + 243.715119463182 1.0000000 +Mg P + 124.461944187287 1.0000000 +Mg P + 63.5609952513411 1.0000000 +Mg P + 32.4597220758638 1.0000000 +Mg P + 16.5767315800501 1.0000000 +Mg P + 8.46550778330153 1.0000000 +Mg P + 4.32321786011102 1.0000000 +Mg P + 2.20780762884063 1.0000000 +Mg P + 1.12749685157938 1.0000000 +Mg P + 0.575797063890464 1.0000000 +Mg P + 0.294051604951678 1.0000000 +Mg P + 0.150168091845475 1.0000000 +#BASIS SET: (27s,19p) -> [27s,19p] +Al S +1516627.98873367 1.0000000 +Al S + 774520.959152738 1.0000000 +Al S + 395537.152566831 1.0000000 +Al S + 201995.358823884 1.0000000 +Al S + 103156.238855453 1.0000000 +Al S + 52680.4659115021 1.0000000 +Al S + 26903.1860742976 1.0000000 +Al S + 13739.0854166734 1.0000000 +Al S + 7016.36109438299 1.0000000 +Al S + 3583.15866840946 1.0000000 +Al S + 1829.86962476550 1.0000000 +Al S + 934.489134729210 1.0000000 +Al S + 477.230689612032 1.0000000 +Al S + 243.715119463182 1.0000000 +Al S + 124.461944187287 1.0000000 +Al S + 63.5609952513411 1.0000000 +Al S + 32.4597220758638 1.0000000 +Al S + 16.5767315800501 1.0000000 +Al S + 8.46550778330153 1.0000000 +Al S + 4.32321786011102 1.0000000 +Al S + 2.20780762884063 1.0000000 +Al S + 1.12749685157938 1.0000000 +Al S + 0.575797063890464 1.0000000 +Al S + 0.294051604951678 1.0000000 +Al S + 0.150168091845475 1.0000000 +Al S + 7.668876968794858E-002 1.0000000 +Al S + 3.916389509898707E-002 1.0000000 +Al P + 7016.36109438299 1.0000000 +Al P + 3583.15866840946 1.0000000 +Al P + 1829.86962476550 1.0000000 +Al P + 934.489134729210 1.0000000 +Al P + 477.230689612032 1.0000000 +Al P + 243.715119463182 1.0000000 +Al P + 124.461944187287 1.0000000 +Al P + 63.5609952513411 1.0000000 +Al P + 32.4597220758638 1.0000000 +Al P + 16.5767315800501 1.0000000 +Al P + 8.46550778330153 1.0000000 +Al P + 4.32321786011102 1.0000000 +Al P + 2.20780762884063 1.0000000 +Al P + 1.12749685157938 1.0000000 +Al P + 0.575797063890464 1.0000000 +Al P + 0.294051604951678 1.0000000 +Al P + 0.150168091845475 1.0000000 +Al P + 7.668876968794858E-002 1.0000000 +Al P + 3.916389509898707E-002 1.0000000 +#BASIS SET: (27s,19p) -> [27s,19p] +Si S +1516627.98873367 1.0000000 +Si S + 774520.959152738 1.0000000 +Si S + 395537.152566831 1.0000000 +Si S + 201995.358823884 1.0000000 +Si S + 103156.238855453 1.0000000 +Si S + 52680.4659115021 1.0000000 +Si S + 26903.1860742976 1.0000000 +Si S + 13739.0854166734 1.0000000 +Si S + 7016.36109438299 1.0000000 +Si S + 3583.15866840946 1.0000000 +Si S + 1829.86962476550 1.0000000 +Si S + 934.489134729210 1.0000000 +Si S + 477.230689612032 1.0000000 +Si S + 243.715119463182 1.0000000 +Si S + 124.461944187287 1.0000000 +Si S + 63.5609952513411 1.0000000 +Si S + 32.4597220758638 1.0000000 +Si S + 16.5767315800501 1.0000000 +Si S + 8.46550778330153 1.0000000 +Si S + 4.32321786011102 1.0000000 +Si S + 2.20780762884063 1.0000000 +Si S + 1.12749685157938 1.0000000 +Si S + 0.575797063890464 1.0000000 +Si S + 0.294051604951678 1.0000000 +Si S + 0.150168091845475 1.0000000 +Si S + 7.668876968794858E-002 1.0000000 +Si S + 3.916389509898707E-002 1.0000000 +Si P + 7016.36109438299 1.0000000 +Si P + 3583.15866840946 1.0000000 +Si P + 1829.86962476550 1.0000000 +Si P + 934.489134729210 1.0000000 +Si P + 477.230689612032 1.0000000 +Si P + 243.715119463182 1.0000000 +Si P + 124.461944187287 1.0000000 +Si P + 63.5609952513411 1.0000000 +Si P + 32.4597220758638 1.0000000 +Si P + 16.5767315800501 1.0000000 +Si P + 8.46550778330153 1.0000000 +Si P + 4.32321786011102 1.0000000 +Si P + 2.20780762884063 1.0000000 +Si P + 1.12749685157938 1.0000000 +Si P + 0.575797063890464 1.0000000 +Si P + 0.294051604951678 1.0000000 +Si P + 0.150168091845475 1.0000000 +Si P + 7.668876968794858E-002 1.0000000 +Si P + 3.916389509898707E-002 1.0000000 +#BASIS SET: (27s,19p) -> [27s,19p] +P S +2969784.65079438 1.0000000 +P S +1516627.98873367 1.0000000 +P S + 774520.959152738 1.0000000 +P S + 395537.152566831 1.0000000 +P S + 201995.358823884 1.0000000 +P S + 103156.238855453 1.0000000 +P S + 52680.4659115022 1.0000000 +P S + 26903.1860742976 1.0000000 +P S + 13739.0854166734 1.0000000 +P S + 7016.36109438300 1.0000000 +P S + 3583.15866840946 1.0000000 +P S + 1829.86962476550 1.0000000 +P S + 934.489134729211 1.0000000 +P S + 477.230689612032 1.0000000 +P S + 243.715119463182 1.0000000 +P S + 124.461944187287 1.0000000 +P S + 63.5609952513412 1.0000000 +P S + 32.4597220758638 1.0000000 +P S + 16.5767315800501 1.0000000 +P S + 8.46550778330153 1.0000000 +P S + 4.32321786011102 1.0000000 +P S + 2.20780762884063 1.0000000 +P S + 1.12749685157938 1.0000000 +P S + 0.575797063890465 1.0000000 +P S + 0.294051604951678 1.0000000 +P S + 0.150168091845475 1.0000000 +P S + 7.668876968794860E-002 1.0000000 +P P + 7016.36109438299 1.0000000 +P P + 3583.15866840946 1.0000000 +P P + 1829.86962476550 1.0000000 +P P + 934.489134729210 1.0000000 +P P + 477.230689612032 1.0000000 +P P + 243.715119463182 1.0000000 +P P + 124.461944187287 1.0000000 +P P + 63.5609952513411 1.0000000 +P P + 32.4597220758638 1.0000000 +P P + 16.5767315800501 1.0000000 +P P + 8.46550778330153 1.0000000 +P P + 4.32321786011102 1.0000000 +P P + 2.20780762884063 1.0000000 +P P + 1.12749685157938 1.0000000 +P P + 0.575797063890464 1.0000000 +P P + 0.294051604951678 1.0000000 +P P + 0.150168091845475 1.0000000 +P P + 7.668876968794858E-002 1.0000000 +P P + 3.916389509898707E-002 1.0000000 +#BASIS SET: (27s,19p) -> [27s,19p] +S S +2969784.65079438 1.0000000 +S S +1516627.98873367 1.0000000 +S S + 774520.959152738 1.0000000 +S S + 395537.152566831 1.0000000 +S S + 201995.358823884 1.0000000 +S S + 103156.238855453 1.0000000 +S S + 52680.4659115022 1.0000000 +S S + 26903.1860742976 1.0000000 +S S + 13739.0854166734 1.0000000 +S S + 7016.36109438300 1.0000000 +S S + 3583.15866840946 1.0000000 +S S + 1829.86962476550 1.0000000 +S S + 934.489134729211 1.0000000 +S S + 477.230689612032 1.0000000 +S S + 243.715119463182 1.0000000 +S S + 124.461944187287 1.0000000 +S S + 63.5609952513412 1.0000000 +S S + 32.4597220758638 1.0000000 +S S + 16.5767315800501 1.0000000 +S S + 8.46550778330153 1.0000000 +S S + 4.32321786011102 1.0000000 +S S + 2.20780762884063 1.0000000 +S S + 1.12749685157938 1.0000000 +S S + 0.575797063890465 1.0000000 +S S + 0.294051604951678 1.0000000 +S S + 0.150168091845475 1.0000000 +S S + 7.668876968794860E-002 1.0000000 +S P + 7016.36109438299 1.0000000 +S P + 3583.15866840946 1.0000000 +S P + 1829.86962476550 1.0000000 +S P + 934.489134729210 1.0000000 +S P + 477.230689612032 1.0000000 +S P + 243.715119463182 1.0000000 +S P + 124.461944187287 1.0000000 +S P + 63.5609952513411 1.0000000 +S P + 32.4597220758638 1.0000000 +S P + 16.5767315800501 1.0000000 +S P + 8.46550778330153 1.0000000 +S P + 4.32321786011102 1.0000000 +S P + 2.20780762884063 1.0000000 +S P + 1.12749685157938 1.0000000 +S P + 0.575797063890464 1.0000000 +S P + 0.294051604951678 1.0000000 +S P + 0.150168091845475 1.0000000 +S P + 7.668876968794858E-002 1.0000000 +S P + 3.916389509898707E-002 1.0000000 +#BASIS SET: (27s,19p) -> [27s,19p] +Cl S +2969784.65079438 1.0000000 +Cl S +1516627.98873367 1.0000000 +Cl S + 774520.959152738 1.0000000 +Cl S + 395537.152566831 1.0000000 +Cl S + 201995.358823884 1.0000000 +Cl S + 103156.238855453 1.0000000 +Cl S + 52680.4659115022 1.0000000 +Cl S + 26903.1860742976 1.0000000 +Cl S + 13739.0854166734 1.0000000 +Cl S + 7016.36109438300 1.0000000 +Cl S + 3583.15866840946 1.0000000 +Cl S + 1829.86962476550 1.0000000 +Cl S + 934.489134729211 1.0000000 +Cl S + 477.230689612032 1.0000000 +Cl S + 243.715119463182 1.0000000 +Cl S + 124.461944187287 1.0000000 +Cl S + 63.5609952513412 1.0000000 +Cl S + 32.4597220758638 1.0000000 +Cl S + 16.5767315800501 1.0000000 +Cl S + 8.46550778330153 1.0000000 +Cl S + 4.32321786011102 1.0000000 +Cl S + 2.20780762884063 1.0000000 +Cl S + 1.12749685157938 1.0000000 +Cl S + 0.575797063890465 1.0000000 +Cl S + 0.294051604951678 1.0000000 +Cl S + 0.150168091845475 1.0000000 +Cl S + 7.668876968794860E-002 1.0000000 +Cl P + 13739.0854166734 1.0000000 +Cl P + 7016.36109438300 1.0000000 +Cl P + 3583.15866840946 1.0000000 +Cl P + 1829.86962476550 1.0000000 +Cl P + 934.489134729211 1.0000000 +Cl P + 477.230689612032 1.0000000 +Cl P + 243.715119463182 1.0000000 +Cl P + 124.461944187287 1.0000000 +Cl P + 63.5609952513412 1.0000000 +Cl P + 32.4597220758638 1.0000000 +Cl P + 16.5767315800501 1.0000000 +Cl P + 8.46550778330153 1.0000000 +Cl P + 4.32321786011102 1.0000000 +Cl P + 2.20780762884063 1.0000000 +Cl P + 1.12749685157938 1.0000000 +Cl P + 0.575797063890465 1.0000000 +Cl P + 0.294051604951678 1.0000000 +Cl P + 0.150168091845475 1.0000000 +Cl P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (26s,19p) -> [26s,19p] +Ar S +2969784.65079439 1.0000000 +Ar S +1516627.98873367 1.0000000 +Ar S + 774520.959152738 1.0000000 +Ar S + 395537.152566831 1.0000000 +Ar S + 201995.358823884 1.0000000 +Ar S + 103156.238855453 1.0000000 +Ar S + 52680.4659115021 1.0000000 +Ar S + 26903.1860742975 1.0000000 +Ar S + 13739.0854166734 1.0000000 +Ar S + 7016.36109438299 1.0000000 +Ar S + 3583.15866840945 1.0000000 +Ar S + 1829.86962476550 1.0000000 +Ar S + 934.489134729210 1.0000000 +Ar S + 477.230689612032 1.0000000 +Ar S + 243.715119463182 1.0000000 +Ar S + 124.461944187287 1.0000000 +Ar S + 63.5609952513411 1.0000000 +Ar S + 32.4597220758638 1.0000000 +Ar S + 16.5767315800501 1.0000000 +Ar S + 8.46550778330153 1.0000000 +Ar S + 4.32321786011102 1.0000000 +Ar S + 2.20780762884063 1.0000000 +Ar S + 1.12749685157938 1.0000000 +Ar S + 0.575797063890464 1.0000000 +Ar S + 0.294051604951678 1.0000000 +Ar S + 0.150168091845475 1.0000000 +Ar P + 13739.0854166734 1.0000000 +Ar P + 7016.36109438300 1.0000000 +Ar P + 3583.15866840946 1.0000000 +Ar P + 1829.86962476550 1.0000000 +Ar P + 934.489134729211 1.0000000 +Ar P + 477.230689612032 1.0000000 +Ar P + 243.715119463182 1.0000000 +Ar P + 124.461944187287 1.0000000 +Ar P + 63.5609952513412 1.0000000 +Ar P + 32.4597220758638 1.0000000 +Ar P + 16.5767315800501 1.0000000 +Ar P + 8.46550778330153 1.0000000 +Ar P + 4.32321786011102 1.0000000 +Ar P + 2.20780762884063 1.0000000 +Ar P + 1.12749685157938 1.0000000 +Ar P + 0.575797063890465 1.0000000 +Ar P + 0.294051604951678 1.0000000 +Ar P + 0.150168091845475 1.0000000 +Ar P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (29s,19p) -> [29s,19p] +K S +2969784.65079438 1.0000000 +K S +1516627.98873367 1.0000000 +K S + 774520.959152735 1.0000000 +K S + 395537.152566831 1.0000000 +K S + 201995.358823884 1.0000000 +K S + 103156.238855453 1.0000000 +K S + 52680.4659115021 1.0000000 +K S + 26903.1860742975 1.0000000 +K S + 13739.0854166734 1.0000000 +K S + 7016.36109438299 1.0000000 +K S + 3583.15866840945 1.0000000 +K S + 1829.86962476550 1.0000000 +K S + 934.489134729211 1.0000000 +K S + 477.230689612032 1.0000000 +K S + 243.715119463182 1.0000000 +K S + 124.461944187287 1.0000000 +K S + 63.5609952513411 1.0000000 +K S + 32.4597220758638 1.0000000 +K S + 16.5767315800501 1.0000000 +K S + 8.46550778330153 1.0000000 +K S + 4.32321786011102 1.0000000 +K S + 2.20780762884063 1.0000000 +K S + 1.12749685157938 1.0000000 +K S + 0.575797063890465 1.0000000 +K S + 0.294051604951678 1.0000000 +K S + 0.150168091845475 1.0000000 +K S + 7.668876968794858E-002 1.0000000 +K S + 3.916389509898707E-002 1.0000000 +K S + 2.000046011385546E-002 1.0000000 +K P + 13739.0854166734 1.0000000 +K P + 7016.36109438300 1.0000000 +K P + 3583.15866840946 1.0000000 +K P + 1829.86962476550 1.0000000 +K P + 934.489134729211 1.0000000 +K P + 477.230689612032 1.0000000 +K P + 243.715119463182 1.0000000 +K P + 124.461944187287 1.0000000 +K P + 63.5609952513412 1.0000000 +K P + 32.4597220758638 1.0000000 +K P + 16.5767315800501 1.0000000 +K P + 8.46550778330153 1.0000000 +K P + 4.32321786011102 1.0000000 +K P + 2.20780762884063 1.0000000 +K P + 1.12749685157938 1.0000000 +K P + 0.575797063890465 1.0000000 +K P + 0.294051604951678 1.0000000 +K P + 0.150168091845475 1.0000000 +K P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (29s,19p) -> [29s,19p] +Ca S +2969784.65079438 1.0000000 +Ca S +1516627.98873367 1.0000000 +Ca S + 774520.959152735 1.0000000 +Ca S + 395537.152566831 1.0000000 +Ca S + 201995.358823884 1.0000000 +Ca S + 103156.238855453 1.0000000 +Ca S + 52680.4659115021 1.0000000 +Ca S + 26903.1860742975 1.0000000 +Ca S + 13739.0854166734 1.0000000 +Ca S + 7016.36109438299 1.0000000 +Ca S + 3583.15866840945 1.0000000 +Ca S + 1829.86962476550 1.0000000 +Ca S + 934.489134729211 1.0000000 +Ca S + 477.230689612032 1.0000000 +Ca S + 243.715119463182 1.0000000 +Ca S + 124.461944187287 1.0000000 +Ca S + 63.5609952513411 1.0000000 +Ca S + 32.4597220758638 1.0000000 +Ca S + 16.5767315800501 1.0000000 +Ca S + 8.46550778330153 1.0000000 +Ca S + 4.32321786011102 1.0000000 +Ca S + 2.20780762884063 1.0000000 +Ca S + 1.12749685157938 1.0000000 +Ca S + 0.575797063890465 1.0000000 +Ca S + 0.294051604951678 1.0000000 +Ca S + 0.150168091845475 1.0000000 +Ca S + 7.668876968794858E-002 1.0000000 +Ca S + 3.916389509898707E-002 1.0000000 +Ca S + 2.000046011385546E-002 1.0000000 +Ca P + 13739.0854166734 1.0000000 +Ca P + 7016.36109438300 1.0000000 +Ca P + 3583.15866840946 1.0000000 +Ca P + 1829.86962476550 1.0000000 +Ca P + 934.489134729211 1.0000000 +Ca P + 477.230689612032 1.0000000 +Ca P + 243.715119463182 1.0000000 +Ca P + 124.461944187287 1.0000000 +Ca P + 63.5609952513412 1.0000000 +Ca P + 32.4597220758638 1.0000000 +Ca P + 16.5767315800501 1.0000000 +Ca P + 8.46550778330153 1.0000000 +Ca P + 4.32321786011102 1.0000000 +Ca P + 2.20780762884063 1.0000000 +Ca P + 1.12749685157938 1.0000000 +Ca P + 0.575797063890465 1.0000000 +Ca P + 0.294051604951678 1.0000000 +Ca P + 0.150168091845475 1.0000000 +Ca P + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,14d) -> [30s,20p,14d] +Sc S +5815282.94190191 1.0000000 +Sc S +2969784.65079438 1.0000000 +Sc S +1516627.98873367 1.0000000 +Sc S + 774520.959152735 1.0000000 +Sc S + 395537.152566831 1.0000000 +Sc S + 201995.358823884 1.0000000 +Sc S + 103156.238855453 1.0000000 +Sc S + 52680.4659115021 1.0000000 +Sc S + 26903.1860742975 1.0000000 +Sc S + 13739.0854166734 1.0000000 +Sc S + 7016.36109438299 1.0000000 +Sc S + 3583.15866840945 1.0000000 +Sc S + 1829.86962476550 1.0000000 +Sc S + 934.489134729211 1.0000000 +Sc S + 477.230689612032 1.0000000 +Sc S + 243.715119463182 1.0000000 +Sc S + 124.461944187287 1.0000000 +Sc S + 63.5609952513411 1.0000000 +Sc S + 32.4597220758638 1.0000000 +Sc S + 16.5767315800501 1.0000000 +Sc S + 8.46550778330153 1.0000000 +Sc S + 4.32321786011102 1.0000000 +Sc S + 2.20780762884063 1.0000000 +Sc S + 1.12749685157938 1.0000000 +Sc S + 0.575797063890465 1.0000000 +Sc S + 0.294051604951678 1.0000000 +Sc S + 0.150168091845475 1.0000000 +Sc S + 7.668876968794858E-002 1.0000000 +Sc S + 3.916389509898707E-002 1.0000000 +Sc S + 2.000046011385546E-002 1.0000000 +Sc P + 26903.1860742976 1.0000000 +Sc P + 13739.0854166734 1.0000000 +Sc P + 7016.36109438300 1.0000000 +Sc P + 3583.15866840946 1.0000000 +Sc P + 1829.86962476550 1.0000000 +Sc P + 934.489134729211 1.0000000 +Sc P + 477.230689612032 1.0000000 +Sc P + 243.715119463182 1.0000000 +Sc P + 124.461944187287 1.0000000 +Sc P + 63.5609952513412 1.0000000 +Sc P + 32.4597220758638 1.0000000 +Sc P + 16.5767315800501 1.0000000 +Sc P + 8.46550778330153 1.0000000 +Sc P + 4.32321786011102 1.0000000 +Sc P + 2.20780762884063 1.0000000 +Sc P + 1.12749685157938 1.0000000 +Sc P + 0.575797063890465 1.0000000 +Sc P + 0.294051604951678 1.0000000 +Sc P + 0.150168091845475 1.0000000 +Sc P + 7.668876968794860E-002 1.0000000 +Sc D + 477.230689612032 1.0000000 +Sc D + 243.715119463182 1.0000000 +Sc D + 124.461944187287 1.0000000 +Sc D + 63.5609952513412 1.0000000 +Sc D + 32.4597220758638 1.0000000 +Sc D + 16.5767315800501 1.0000000 +Sc D + 8.46550778330153 1.0000000 +Sc D + 4.32321786011102 1.0000000 +Sc D + 2.20780762884063 1.0000000 +Sc D + 1.12749685157938 1.0000000 +Sc D + 0.575797063890465 1.0000000 +Sc D + 0.294051604951678 1.0000000 +Sc D + 0.150168091845475 1.0000000 +Sc D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,14d) -> [30s,20p,14d] +Ti S +5815282.94190191 1.0000000 +Ti S +2969784.65079438 1.0000000 +Ti S +1516627.98873367 1.0000000 +Ti S + 774520.959152735 1.0000000 +Ti S + 395537.152566831 1.0000000 +Ti S + 201995.358823884 1.0000000 +Ti S + 103156.238855453 1.0000000 +Ti S + 52680.4659115021 1.0000000 +Ti S + 26903.1860742975 1.0000000 +Ti S + 13739.0854166734 1.0000000 +Ti S + 7016.36109438299 1.0000000 +Ti S + 3583.15866840945 1.0000000 +Ti S + 1829.86962476550 1.0000000 +Ti S + 934.489134729211 1.0000000 +Ti S + 477.230689612032 1.0000000 +Ti S + 243.715119463182 1.0000000 +Ti S + 124.461944187287 1.0000000 +Ti S + 63.5609952513411 1.0000000 +Ti S + 32.4597220758638 1.0000000 +Ti S + 16.5767315800501 1.0000000 +Ti S + 8.46550778330153 1.0000000 +Ti S + 4.32321786011102 1.0000000 +Ti S + 2.20780762884063 1.0000000 +Ti S + 1.12749685157938 1.0000000 +Ti S + 0.575797063890465 1.0000000 +Ti S + 0.294051604951678 1.0000000 +Ti S + 0.150168091845475 1.0000000 +Ti S + 7.668876968794858E-002 1.0000000 +Ti S + 3.916389509898707E-002 1.0000000 +Ti S + 2.000046011385546E-002 1.0000000 +Ti P + 26903.1860742976 1.0000000 +Ti P + 13739.0854166734 1.0000000 +Ti P + 7016.36109438300 1.0000000 +Ti P + 3583.15866840946 1.0000000 +Ti P + 1829.86962476550 1.0000000 +Ti P + 934.489134729211 1.0000000 +Ti P + 477.230689612032 1.0000000 +Ti P + 243.715119463182 1.0000000 +Ti P + 124.461944187287 1.0000000 +Ti P + 63.5609952513412 1.0000000 +Ti P + 32.4597220758638 1.0000000 +Ti P + 16.5767315800501 1.0000000 +Ti P + 8.46550778330153 1.0000000 +Ti P + 4.32321786011102 1.0000000 +Ti P + 2.20780762884063 1.0000000 +Ti P + 1.12749685157938 1.0000000 +Ti P + 0.575797063890465 1.0000000 +Ti P + 0.294051604951678 1.0000000 +Ti P + 0.150168091845475 1.0000000 +Ti P + 7.668876968794860E-002 1.0000000 +Ti D + 477.230689612032 1.0000000 +Ti D + 243.715119463182 1.0000000 +Ti D + 124.461944187287 1.0000000 +Ti D + 63.5609952513412 1.0000000 +Ti D + 32.4597220758638 1.0000000 +Ti D + 16.5767315800501 1.0000000 +Ti D + 8.46550778330153 1.0000000 +Ti D + 4.32321786011102 1.0000000 +Ti D + 2.20780762884063 1.0000000 +Ti D + 1.12749685157938 1.0000000 +Ti D + 0.575797063890465 1.0000000 +Ti D + 0.294051604951678 1.0000000 +Ti D + 0.150168091845475 1.0000000 +Ti D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,14d) -> [30s,20p,14d] +V S +5815282.94190191 1.0000000 +V S +2969784.65079438 1.0000000 +V S +1516627.98873367 1.0000000 +V S + 774520.959152735 1.0000000 +V S + 395537.152566831 1.0000000 +V S + 201995.358823884 1.0000000 +V S + 103156.238855453 1.0000000 +V S + 52680.4659115021 1.0000000 +V S + 26903.1860742975 1.0000000 +V S + 13739.0854166734 1.0000000 +V S + 7016.36109438299 1.0000000 +V S + 3583.15866840945 1.0000000 +V S + 1829.86962476550 1.0000000 +V S + 934.489134729211 1.0000000 +V S + 477.230689612032 1.0000000 +V S + 243.715119463182 1.0000000 +V S + 124.461944187287 1.0000000 +V S + 63.5609952513411 1.0000000 +V S + 32.4597220758638 1.0000000 +V S + 16.5767315800501 1.0000000 +V S + 8.46550778330153 1.0000000 +V S + 4.32321786011102 1.0000000 +V S + 2.20780762884063 1.0000000 +V S + 1.12749685157938 1.0000000 +V S + 0.575797063890465 1.0000000 +V S + 0.294051604951678 1.0000000 +V S + 0.150168091845475 1.0000000 +V S + 7.668876968794858E-002 1.0000000 +V S + 3.916389509898707E-002 1.0000000 +V S + 2.000046011385546E-002 1.0000000 +V P + 26903.1860742976 1.0000000 +V P + 13739.0854166734 1.0000000 +V P + 7016.36109438300 1.0000000 +V P + 3583.15866840946 1.0000000 +V P + 1829.86962476550 1.0000000 +V P + 934.489134729211 1.0000000 +V P + 477.230689612032 1.0000000 +V P + 243.715119463182 1.0000000 +V P + 124.461944187287 1.0000000 +V P + 63.5609952513412 1.0000000 +V P + 32.4597220758638 1.0000000 +V P + 16.5767315800501 1.0000000 +V P + 8.46550778330153 1.0000000 +V P + 4.32321786011102 1.0000000 +V P + 2.20780762884063 1.0000000 +V P + 1.12749685157938 1.0000000 +V P + 0.575797063890465 1.0000000 +V P + 0.294051604951678 1.0000000 +V P + 0.150168091845475 1.0000000 +V P + 7.668876968794860E-002 1.0000000 +V D + 477.230689612032 1.0000000 +V D + 243.715119463182 1.0000000 +V D + 124.461944187287 1.0000000 +V D + 63.5609952513412 1.0000000 +V D + 32.4597220758638 1.0000000 +V D + 16.5767315800501 1.0000000 +V D + 8.46550778330153 1.0000000 +V D + 4.32321786011102 1.0000000 +V D + 2.20780762884063 1.0000000 +V D + 1.12749685157938 1.0000000 +V D + 0.575797063890465 1.0000000 +V D + 0.294051604951678 1.0000000 +V D + 0.150168091845475 1.0000000 +V D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,14d) -> [30s,20p,14d] +Cr S +5815282.94190191 1.0000000 +Cr S +2969784.65079438 1.0000000 +Cr S +1516627.98873367 1.0000000 +Cr S + 774520.959152735 1.0000000 +Cr S + 395537.152566831 1.0000000 +Cr S + 201995.358823884 1.0000000 +Cr S + 103156.238855453 1.0000000 +Cr S + 52680.4659115021 1.0000000 +Cr S + 26903.1860742975 1.0000000 +Cr S + 13739.0854166734 1.0000000 +Cr S + 7016.36109438299 1.0000000 +Cr S + 3583.15866840945 1.0000000 +Cr S + 1829.86962476550 1.0000000 +Cr S + 934.489134729211 1.0000000 +Cr S + 477.230689612032 1.0000000 +Cr S + 243.715119463182 1.0000000 +Cr S + 124.461944187287 1.0000000 +Cr S + 63.5609952513411 1.0000000 +Cr S + 32.4597220758638 1.0000000 +Cr S + 16.5767315800501 1.0000000 +Cr S + 8.46550778330153 1.0000000 +Cr S + 4.32321786011102 1.0000000 +Cr S + 2.20780762884063 1.0000000 +Cr S + 1.12749685157938 1.0000000 +Cr S + 0.575797063890465 1.0000000 +Cr S + 0.294051604951678 1.0000000 +Cr S + 0.150168091845475 1.0000000 +Cr S + 7.668876968794858E-002 1.0000000 +Cr S + 3.916389509898707E-002 1.0000000 +Cr S + 2.000046011385546E-002 1.0000000 +Cr P + 52680.4659115021 1.0000000 +Cr P + 26903.1860742975 1.0000000 +Cr P + 13739.0854166734 1.0000000 +Cr P + 7016.36109438299 1.0000000 +Cr P + 3583.15866840945 1.0000000 +Cr P + 1829.86962476550 1.0000000 +Cr P + 934.489134729210 1.0000000 +Cr P + 477.230689612032 1.0000000 +Cr P + 243.715119463182 1.0000000 +Cr P + 124.461944187287 1.0000000 +Cr P + 63.5609952513411 1.0000000 +Cr P + 32.4597220758638 1.0000000 +Cr P + 16.5767315800501 1.0000000 +Cr P + 8.46550778330153 1.0000000 +Cr P + 4.32321786011102 1.0000000 +Cr P + 2.20780762884063 1.0000000 +Cr P + 1.12749685157938 1.0000000 +Cr P + 0.575797063890464 1.0000000 +Cr P + 0.294051604951678 1.0000000 +Cr P + 0.150168091845475 1.0000000 +Cr D + 477.230689612032 1.0000000 +Cr D + 243.715119463182 1.0000000 +Cr D + 124.461944187287 1.0000000 +Cr D + 63.5609952513412 1.0000000 +Cr D + 32.4597220758638 1.0000000 +Cr D + 16.5767315800501 1.0000000 +Cr D + 8.46550778330153 1.0000000 +Cr D + 4.32321786011102 1.0000000 +Cr D + 2.20780762884063 1.0000000 +Cr D + 1.12749685157938 1.0000000 +Cr D + 0.575797063890465 1.0000000 +Cr D + 0.294051604951678 1.0000000 +Cr D + 0.150168091845475 1.0000000 +Cr D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,15d) -> [30s,20p,15d] +Mn S +5815282.94190191 1.0000000 +Mn S +2969784.65079438 1.0000000 +Mn S +1516627.98873367 1.0000000 +Mn S + 774520.959152735 1.0000000 +Mn S + 395537.152566831 1.0000000 +Mn S + 201995.358823884 1.0000000 +Mn S + 103156.238855453 1.0000000 +Mn S + 52680.4659115021 1.0000000 +Mn S + 26903.1860742975 1.0000000 +Mn S + 13739.0854166734 1.0000000 +Mn S + 7016.36109438299 1.0000000 +Mn S + 3583.15866840945 1.0000000 +Mn S + 1829.86962476550 1.0000000 +Mn S + 934.489134729211 1.0000000 +Mn S + 477.230689612032 1.0000000 +Mn S + 243.715119463182 1.0000000 +Mn S + 124.461944187287 1.0000000 +Mn S + 63.5609952513411 1.0000000 +Mn S + 32.4597220758638 1.0000000 +Mn S + 16.5767315800501 1.0000000 +Mn S + 8.46550778330153 1.0000000 +Mn S + 4.32321786011102 1.0000000 +Mn S + 2.20780762884063 1.0000000 +Mn S + 1.12749685157938 1.0000000 +Mn S + 0.575797063890465 1.0000000 +Mn S + 0.294051604951678 1.0000000 +Mn S + 0.150168091845475 1.0000000 +Mn S + 7.668876968794858E-002 1.0000000 +Mn S + 3.916389509898707E-002 1.0000000 +Mn S + 2.000046011385546E-002 1.0000000 +Mn P + 52680.4659115021 1.0000000 +Mn P + 26903.1860742975 1.0000000 +Mn P + 13739.0854166734 1.0000000 +Mn P + 7016.36109438299 1.0000000 +Mn P + 3583.15866840945 1.0000000 +Mn P + 1829.86962476550 1.0000000 +Mn P + 934.489134729210 1.0000000 +Mn P + 477.230689612032 1.0000000 +Mn P + 243.715119463182 1.0000000 +Mn P + 124.461944187287 1.0000000 +Mn P + 63.5609952513411 1.0000000 +Mn P + 32.4597220758638 1.0000000 +Mn P + 16.5767315800501 1.0000000 +Mn P + 8.46550778330153 1.0000000 +Mn P + 4.32321786011102 1.0000000 +Mn P + 2.20780762884063 1.0000000 +Mn P + 1.12749685157938 1.0000000 +Mn P + 0.575797063890464 1.0000000 +Mn P + 0.294051604951678 1.0000000 +Mn P + 0.150168091845475 1.0000000 +Mn D + 934.489134729211 1.0000000 +Mn D + 477.230689612032 1.0000000 +Mn D + 243.715119463182 1.0000000 +Mn D + 124.461944187287 1.0000000 +Mn D + 63.5609952513412 1.0000000 +Mn D + 32.4597220758638 1.0000000 +Mn D + 16.5767315800501 1.0000000 +Mn D + 8.46550778330153 1.0000000 +Mn D + 4.32321786011102 1.0000000 +Mn D + 2.20780762884063 1.0000000 +Mn D + 1.12749685157938 1.0000000 +Mn D + 0.575797063890465 1.0000000 +Mn D + 0.294051604951678 1.0000000 +Mn D + 0.150168091845475 1.0000000 +Mn D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (31s,20p,15d) -> [31s,20p,15d] +Fe S +11387194.5850786 1.0000000 +Fe S +5815282.94190191 1.0000000 +Fe S +2969784.65079438 1.0000000 +Fe S +1516627.98873367 1.0000000 +Fe S + 774520.959152735 1.0000000 +Fe S + 395537.152566831 1.0000000 +Fe S + 201995.358823884 1.0000000 +Fe S + 103156.238855453 1.0000000 +Fe S + 52680.4659115021 1.0000000 +Fe S + 26903.1860742975 1.0000000 +Fe S + 13739.0854166734 1.0000000 +Fe S + 7016.36109438299 1.0000000 +Fe S + 3583.15866840945 1.0000000 +Fe S + 1829.86962476550 1.0000000 +Fe S + 934.489134729211 1.0000000 +Fe S + 477.230689612032 1.0000000 +Fe S + 243.715119463182 1.0000000 +Fe S + 124.461944187287 1.0000000 +Fe S + 63.5609952513411 1.0000000 +Fe S + 32.4597220758638 1.0000000 +Fe S + 16.5767315800501 1.0000000 +Fe S + 8.46550778330153 1.0000000 +Fe S + 4.32321786011102 1.0000000 +Fe S + 2.20780762884063 1.0000000 +Fe S + 1.12749685157938 1.0000000 +Fe S + 0.575797063890465 1.0000000 +Fe S + 0.294051604951678 1.0000000 +Fe S + 0.150168091845475 1.0000000 +Fe S + 7.668876968794858E-002 1.0000000 +Fe S + 3.916389509898707E-002 1.0000000 +Fe S + 2.000046011385546E-002 1.0000000 +Fe P + 52680.4659115021 1.0000000 +Fe P + 26903.1860742975 1.0000000 +Fe P + 13739.0854166734 1.0000000 +Fe P + 7016.36109438299 1.0000000 +Fe P + 3583.15866840945 1.0000000 +Fe P + 1829.86962476550 1.0000000 +Fe P + 934.489134729210 1.0000000 +Fe P + 477.230689612032 1.0000000 +Fe P + 243.715119463182 1.0000000 +Fe P + 124.461944187287 1.0000000 +Fe P + 63.5609952513411 1.0000000 +Fe P + 32.4597220758638 1.0000000 +Fe P + 16.5767315800501 1.0000000 +Fe P + 8.46550778330153 1.0000000 +Fe P + 4.32321786011102 1.0000000 +Fe P + 2.20780762884063 1.0000000 +Fe P + 1.12749685157938 1.0000000 +Fe P + 0.575797063890464 1.0000000 +Fe P + 0.294051604951678 1.0000000 +Fe P + 0.150168091845475 1.0000000 +Fe D + 934.489134729211 1.0000000 +Fe D + 477.230689612032 1.0000000 +Fe D + 243.715119463182 1.0000000 +Fe D + 124.461944187287 1.0000000 +Fe D + 63.5609952513412 1.0000000 +Fe D + 32.4597220758638 1.0000000 +Fe D + 16.5767315800501 1.0000000 +Fe D + 8.46550778330153 1.0000000 +Fe D + 4.32321786011102 1.0000000 +Fe D + 2.20780762884063 1.0000000 +Fe D + 1.12749685157938 1.0000000 +Fe D + 0.575797063890465 1.0000000 +Fe D + 0.294051604951678 1.0000000 +Fe D + 0.150168091845475 1.0000000 +Fe D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (31s,20p,15d) -> [31s,20p,15d] +Co S +11387194.5850786 1.0000000 +Co S +5815282.94190191 1.0000000 +Co S +2969784.65079438 1.0000000 +Co S +1516627.98873367 1.0000000 +Co S + 774520.959152735 1.0000000 +Co S + 395537.152566831 1.0000000 +Co S + 201995.358823884 1.0000000 +Co S + 103156.238855453 1.0000000 +Co S + 52680.4659115021 1.0000000 +Co S + 26903.1860742975 1.0000000 +Co S + 13739.0854166734 1.0000000 +Co S + 7016.36109438299 1.0000000 +Co S + 3583.15866840945 1.0000000 +Co S + 1829.86962476550 1.0000000 +Co S + 934.489134729211 1.0000000 +Co S + 477.230689612032 1.0000000 +Co S + 243.715119463182 1.0000000 +Co S + 124.461944187287 1.0000000 +Co S + 63.5609952513411 1.0000000 +Co S + 32.4597220758638 1.0000000 +Co S + 16.5767315800501 1.0000000 +Co S + 8.46550778330153 1.0000000 +Co S + 4.32321786011102 1.0000000 +Co S + 2.20780762884063 1.0000000 +Co S + 1.12749685157938 1.0000000 +Co S + 0.575797063890465 1.0000000 +Co S + 0.294051604951678 1.0000000 +Co S + 0.150168091845475 1.0000000 +Co S + 7.668876968794858E-002 1.0000000 +Co S + 3.916389509898707E-002 1.0000000 +Co S + 2.000046011385546E-002 1.0000000 +Co P + 52680.4659115021 1.0000000 +Co P + 26903.1860742975 1.0000000 +Co P + 13739.0854166734 1.0000000 +Co P + 7016.36109438299 1.0000000 +Co P + 3583.15866840945 1.0000000 +Co P + 1829.86962476550 1.0000000 +Co P + 934.489134729210 1.0000000 +Co P + 477.230689612032 1.0000000 +Co P + 243.715119463182 1.0000000 +Co P + 124.461944187287 1.0000000 +Co P + 63.5609952513411 1.0000000 +Co P + 32.4597220758638 1.0000000 +Co P + 16.5767315800501 1.0000000 +Co P + 8.46550778330153 1.0000000 +Co P + 4.32321786011102 1.0000000 +Co P + 2.20780762884063 1.0000000 +Co P + 1.12749685157938 1.0000000 +Co P + 0.575797063890464 1.0000000 +Co P + 0.294051604951678 1.0000000 +Co P + 0.150168091845475 1.0000000 +Co D + 934.489134729211 1.0000000 +Co D + 477.230689612032 1.0000000 +Co D + 243.715119463182 1.0000000 +Co D + 124.461944187287 1.0000000 +Co D + 63.5609952513412 1.0000000 +Co D + 32.4597220758638 1.0000000 +Co D + 16.5767315800501 1.0000000 +Co D + 8.46550778330153 1.0000000 +Co D + 4.32321786011102 1.0000000 +Co D + 2.20780762884063 1.0000000 +Co D + 1.12749685157938 1.0000000 +Co D + 0.575797063890465 1.0000000 +Co D + 0.294051604951678 1.0000000 +Co D + 0.150168091845475 1.0000000 +Co D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,15d) -> [30s,20p,15d] +Ni S +11387194.5850786 1.0000000 +Ni S +5815282.94190191 1.0000000 +Ni S +2969784.65079438 1.0000000 +Ni S +1516627.98873367 1.0000000 +Ni S + 774520.959152738 1.0000000 +Ni S + 395537.152566831 1.0000000 +Ni S + 201995.358823884 1.0000000 +Ni S + 103156.238855453 1.0000000 +Ni S + 52680.4659115021 1.0000000 +Ni S + 26903.1860742976 1.0000000 +Ni S + 13739.0854166734 1.0000000 +Ni S + 7016.36109438299 1.0000000 +Ni S + 3583.15866840946 1.0000000 +Ni S + 1829.86962476550 1.0000000 +Ni S + 934.489134729210 1.0000000 +Ni S + 477.230689612032 1.0000000 +Ni S + 243.715119463182 1.0000000 +Ni S + 124.461944187287 1.0000000 +Ni S + 63.5609952513411 1.0000000 +Ni S + 32.4597220758638 1.0000000 +Ni S + 16.5767315800501 1.0000000 +Ni S + 8.46550778330153 1.0000000 +Ni S + 4.32321786011102 1.0000000 +Ni S + 2.20780762884063 1.0000000 +Ni S + 1.12749685157938 1.0000000 +Ni S + 0.575797063890464 1.0000000 +Ni S + 0.294051604951678 1.0000000 +Ni S + 0.150168091845475 1.0000000 +Ni S + 7.668876968794858E-002 1.0000000 +Ni S + 3.916389509898707E-002 1.0000000 +Ni P + 52680.4659115021 1.0000000 +Ni P + 26903.1860742975 1.0000000 +Ni P + 13739.0854166734 1.0000000 +Ni P + 7016.36109438299 1.0000000 +Ni P + 3583.15866840945 1.0000000 +Ni P + 1829.86962476550 1.0000000 +Ni P + 934.489134729210 1.0000000 +Ni P + 477.230689612032 1.0000000 +Ni P + 243.715119463182 1.0000000 +Ni P + 124.461944187287 1.0000000 +Ni P + 63.5609952513411 1.0000000 +Ni P + 32.4597220758638 1.0000000 +Ni P + 16.5767315800501 1.0000000 +Ni P + 8.46550778330153 1.0000000 +Ni P + 4.32321786011102 1.0000000 +Ni P + 2.20780762884063 1.0000000 +Ni P + 1.12749685157938 1.0000000 +Ni P + 0.575797063890464 1.0000000 +Ni P + 0.294051604951678 1.0000000 +Ni P + 0.150168091845475 1.0000000 +Ni D + 934.489134729211 1.0000000 +Ni D + 477.230689612032 1.0000000 +Ni D + 243.715119463182 1.0000000 +Ni D + 124.461944187287 1.0000000 +Ni D + 63.5609952513412 1.0000000 +Ni D + 32.4597220758638 1.0000000 +Ni D + 16.5767315800501 1.0000000 +Ni D + 8.46550778330153 1.0000000 +Ni D + 4.32321786011102 1.0000000 +Ni D + 2.20780762884063 1.0000000 +Ni D + 1.12749685157938 1.0000000 +Ni D + 0.575797063890465 1.0000000 +Ni D + 0.294051604951678 1.0000000 +Ni D + 0.150168091845475 1.0000000 +Ni D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,20p,15d) -> [30s,20p,15d] +Cu S +11387194.5850786 1.0000000 +Cu S +5815282.94190191 1.0000000 +Cu S +2969784.65079438 1.0000000 +Cu S +1516627.98873367 1.0000000 +Cu S + 774520.959152738 1.0000000 +Cu S + 395537.152566831 1.0000000 +Cu S + 201995.358823884 1.0000000 +Cu S + 103156.238855453 1.0000000 +Cu S + 52680.4659115021 1.0000000 +Cu S + 26903.1860742976 1.0000000 +Cu S + 13739.0854166734 1.0000000 +Cu S + 7016.36109438299 1.0000000 +Cu S + 3583.15866840946 1.0000000 +Cu S + 1829.86962476550 1.0000000 +Cu S + 934.489134729210 1.0000000 +Cu S + 477.230689612032 1.0000000 +Cu S + 243.715119463182 1.0000000 +Cu S + 124.461944187287 1.0000000 +Cu S + 63.5609952513411 1.0000000 +Cu S + 32.4597220758638 1.0000000 +Cu S + 16.5767315800501 1.0000000 +Cu S + 8.46550778330153 1.0000000 +Cu S + 4.32321786011102 1.0000000 +Cu S + 2.20780762884063 1.0000000 +Cu S + 1.12749685157938 1.0000000 +Cu S + 0.575797063890464 1.0000000 +Cu S + 0.294051604951678 1.0000000 +Cu S + 0.150168091845475 1.0000000 +Cu S + 7.668876968794858E-002 1.0000000 +Cu S + 3.916389509898707E-002 1.0000000 +Cu P + 52680.4659115021 1.0000000 +Cu P + 26903.1860742975 1.0000000 +Cu P + 13739.0854166734 1.0000000 +Cu P + 7016.36109438299 1.0000000 +Cu P + 3583.15866840945 1.0000000 +Cu P + 1829.86962476550 1.0000000 +Cu P + 934.489134729210 1.0000000 +Cu P + 477.230689612032 1.0000000 +Cu P + 243.715119463182 1.0000000 +Cu P + 124.461944187287 1.0000000 +Cu P + 63.5609952513411 1.0000000 +Cu P + 32.4597220758638 1.0000000 +Cu P + 16.5767315800501 1.0000000 +Cu P + 8.46550778330153 1.0000000 +Cu P + 4.32321786011102 1.0000000 +Cu P + 2.20780762884063 1.0000000 +Cu P + 1.12749685157938 1.0000000 +Cu P + 0.575797063890464 1.0000000 +Cu P + 0.294051604951678 1.0000000 +Cu P + 0.150168091845475 1.0000000 +Cu D + 934.489134729211 1.0000000 +Cu D + 477.230689612032 1.0000000 +Cu D + 243.715119463182 1.0000000 +Cu D + 124.461944187287 1.0000000 +Cu D + 63.5609952513412 1.0000000 +Cu D + 32.4597220758638 1.0000000 +Cu D + 16.5767315800501 1.0000000 +Cu D + 8.46550778330153 1.0000000 +Cu D + 4.32321786011102 1.0000000 +Cu D + 2.20780762884063 1.0000000 +Cu D + 1.12749685157938 1.0000000 +Cu D + 0.575797063890465 1.0000000 +Cu D + 0.294051604951678 1.0000000 +Cu D + 0.150168091845475 1.0000000 +Cu D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (30s,21p,15d) -> [30s,21p,15d] +Zn S +11387194.5850786 1.0000000 +Zn S +5815282.94190191 1.0000000 +Zn S +2969784.65079438 1.0000000 +Zn S +1516627.98873367 1.0000000 +Zn S + 774520.959152738 1.0000000 +Zn S + 395537.152566831 1.0000000 +Zn S + 201995.358823884 1.0000000 +Zn S + 103156.238855453 1.0000000 +Zn S + 52680.4659115021 1.0000000 +Zn S + 26903.1860742976 1.0000000 +Zn S + 13739.0854166734 1.0000000 +Zn S + 7016.36109438299 1.0000000 +Zn S + 3583.15866840946 1.0000000 +Zn S + 1829.86962476550 1.0000000 +Zn S + 934.489134729210 1.0000000 +Zn S + 477.230689612032 1.0000000 +Zn S + 243.715119463182 1.0000000 +Zn S + 124.461944187287 1.0000000 +Zn S + 63.5609952513411 1.0000000 +Zn S + 32.4597220758638 1.0000000 +Zn S + 16.5767315800501 1.0000000 +Zn S + 8.46550778330153 1.0000000 +Zn S + 4.32321786011102 1.0000000 +Zn S + 2.20780762884063 1.0000000 +Zn S + 1.12749685157938 1.0000000 +Zn S + 0.575797063890464 1.0000000 +Zn S + 0.294051604951678 1.0000000 +Zn S + 0.150168091845475 1.0000000 +Zn S + 7.668876968794858E-002 1.0000000 +Zn S + 3.916389509898707E-002 1.0000000 +Zn P + 103156.238855453 1.0000000 +Zn P + 52680.4659115021 1.0000000 +Zn P + 26903.1860742975 1.0000000 +Zn P + 13739.0854166734 1.0000000 +Zn P + 7016.36109438299 1.0000000 +Zn P + 3583.15866840945 1.0000000 +Zn P + 1829.86962476550 1.0000000 +Zn P + 934.489134729210 1.0000000 +Zn P + 477.230689612032 1.0000000 +Zn P + 243.715119463182 1.0000000 +Zn P + 124.461944187287 1.0000000 +Zn P + 63.5609952513411 1.0000000 +Zn P + 32.4597220758638 1.0000000 +Zn P + 16.5767315800501 1.0000000 +Zn P + 8.46550778330153 1.0000000 +Zn P + 4.32321786011102 1.0000000 +Zn P + 2.20780762884063 1.0000000 +Zn P + 1.12749685157938 1.0000000 +Zn P + 0.575797063890464 1.0000000 +Zn P + 0.294051604951678 1.0000000 +Zn P + 0.150168091845475 1.0000000 +Zn D + 1829.86962476550 1.0000000 +Zn D + 934.489134729210 1.0000000 +Zn D + 477.230689612032 1.0000000 +Zn D + 243.715119463182 1.0000000 +Zn D + 124.461944187287 1.0000000 +Zn D + 63.5609952513411 1.0000000 +Zn D + 32.4597220758638 1.0000000 +Zn D + 16.5767315800501 1.0000000 +Zn D + 8.46550778330153 1.0000000 +Zn D + 4.32321786011102 1.0000000 +Zn D + 2.20780762884063 1.0000000 +Zn D + 1.12749685157938 1.0000000 +Zn D + 0.575797063890464 1.0000000 +Zn D + 0.294051604951678 1.0000000 +Zn D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,14d) -> [30s,22p,14d] +Ga S +11387194.5850786 1.0000000 +Ga S +5815282.94190191 1.0000000 +Ga S +2969784.65079438 1.0000000 +Ga S +1516627.98873367 1.0000000 +Ga S + 774520.959152738 1.0000000 +Ga S + 395537.152566831 1.0000000 +Ga S + 201995.358823884 1.0000000 +Ga S + 103156.238855453 1.0000000 +Ga S + 52680.4659115021 1.0000000 +Ga S + 26903.1860742976 1.0000000 +Ga S + 13739.0854166734 1.0000000 +Ga S + 7016.36109438299 1.0000000 +Ga S + 3583.15866840946 1.0000000 +Ga S + 1829.86962476550 1.0000000 +Ga S + 934.489134729210 1.0000000 +Ga S + 477.230689612032 1.0000000 +Ga S + 243.715119463182 1.0000000 +Ga S + 124.461944187287 1.0000000 +Ga S + 63.5609952513411 1.0000000 +Ga S + 32.4597220758638 1.0000000 +Ga S + 16.5767315800501 1.0000000 +Ga S + 8.46550778330153 1.0000000 +Ga S + 4.32321786011102 1.0000000 +Ga S + 2.20780762884063 1.0000000 +Ga S + 1.12749685157938 1.0000000 +Ga S + 0.575797063890464 1.0000000 +Ga S + 0.294051604951678 1.0000000 +Ga S + 0.150168091845475 1.0000000 +Ga S + 7.668876968794858E-002 1.0000000 +Ga S + 3.916389509898707E-002 1.0000000 +Ga P + 52680.4659115021 1.0000000 +Ga P + 26903.1860742976 1.0000000 +Ga P + 13739.0854166734 1.0000000 +Ga P + 7016.36109438299 1.0000000 +Ga P + 3583.15866840946 1.0000000 +Ga P + 1829.86962476550 1.0000000 +Ga P + 934.489134729210 1.0000000 +Ga P + 477.230689612032 1.0000000 +Ga P + 243.715119463182 1.0000000 +Ga P + 124.461944187287 1.0000000 +Ga P + 63.5609952513411 1.0000000 +Ga P + 32.4597220758638 1.0000000 +Ga P + 16.5767315800501 1.0000000 +Ga P + 8.46550778330153 1.0000000 +Ga P + 4.32321786011102 1.0000000 +Ga P + 2.20780762884063 1.0000000 +Ga P + 1.12749685157938 1.0000000 +Ga P + 0.575797063890464 1.0000000 +Ga P + 0.294051604951678 1.0000000 +Ga P + 0.150168091845475 1.0000000 +Ga P + 7.668876968794858E-002 1.0000000 +Ga P + 3.916389509898707E-002 1.0000000 +Ga D + 934.489134729210 1.0000000 +Ga D + 477.230689612032 1.0000000 +Ga D + 243.715119463182 1.0000000 +Ga D + 124.461944187287 1.0000000 +Ga D + 63.5609952513411 1.0000000 +Ga D + 32.4597220758638 1.0000000 +Ga D + 16.5767315800501 1.0000000 +Ga D + 8.46550778330153 1.0000000 +Ga D + 4.32321786011102 1.0000000 +Ga D + 2.20780762884063 1.0000000 +Ga D + 1.12749685157938 1.0000000 +Ga D + 0.575797063890464 1.0000000 +Ga D + 0.294051604951678 1.0000000 +Ga D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,14d) -> [30s,22p,14d] +Ge S +11387194.5850786 1.0000000 +Ge S +5815282.94190191 1.0000000 +Ge S +2969784.65079438 1.0000000 +Ge S +1516627.98873367 1.0000000 +Ge S + 774520.959152738 1.0000000 +Ge S + 395537.152566831 1.0000000 +Ge S + 201995.358823884 1.0000000 +Ge S + 103156.238855453 1.0000000 +Ge S + 52680.4659115021 1.0000000 +Ge S + 26903.1860742976 1.0000000 +Ge S + 13739.0854166734 1.0000000 +Ge S + 7016.36109438299 1.0000000 +Ge S + 3583.15866840946 1.0000000 +Ge S + 1829.86962476550 1.0000000 +Ge S + 934.489134729210 1.0000000 +Ge S + 477.230689612032 1.0000000 +Ge S + 243.715119463182 1.0000000 +Ge S + 124.461944187287 1.0000000 +Ge S + 63.5609952513411 1.0000000 +Ge S + 32.4597220758638 1.0000000 +Ge S + 16.5767315800501 1.0000000 +Ge S + 8.46550778330153 1.0000000 +Ge S + 4.32321786011102 1.0000000 +Ge S + 2.20780762884063 1.0000000 +Ge S + 1.12749685157938 1.0000000 +Ge S + 0.575797063890464 1.0000000 +Ge S + 0.294051604951678 1.0000000 +Ge S + 0.150168091845475 1.0000000 +Ge S + 7.668876968794858E-002 1.0000000 +Ge S + 3.916389509898707E-002 1.0000000 +Ge P + 52680.4659115021 1.0000000 +Ge P + 26903.1860742976 1.0000000 +Ge P + 13739.0854166734 1.0000000 +Ge P + 7016.36109438299 1.0000000 +Ge P + 3583.15866840946 1.0000000 +Ge P + 1829.86962476550 1.0000000 +Ge P + 934.489134729210 1.0000000 +Ge P + 477.230689612032 1.0000000 +Ge P + 243.715119463182 1.0000000 +Ge P + 124.461944187287 1.0000000 +Ge P + 63.5609952513411 1.0000000 +Ge P + 32.4597220758638 1.0000000 +Ge P + 16.5767315800501 1.0000000 +Ge P + 8.46550778330153 1.0000000 +Ge P + 4.32321786011102 1.0000000 +Ge P + 2.20780762884063 1.0000000 +Ge P + 1.12749685157938 1.0000000 +Ge P + 0.575797063890464 1.0000000 +Ge P + 0.294051604951678 1.0000000 +Ge P + 0.150168091845475 1.0000000 +Ge P + 7.668876968794858E-002 1.0000000 +Ge P + 3.916389509898707E-002 1.0000000 +Ge D + 934.489134729210 1.0000000 +Ge D + 477.230689612032 1.0000000 +Ge D + 243.715119463182 1.0000000 +Ge D + 124.461944187287 1.0000000 +Ge D + 63.5609952513411 1.0000000 +Ge D + 32.4597220758638 1.0000000 +Ge D + 16.5767315800501 1.0000000 +Ge D + 8.46550778330153 1.0000000 +Ge D + 4.32321786011102 1.0000000 +Ge D + 2.20780762884063 1.0000000 +Ge D + 1.12749685157938 1.0000000 +Ge D + 0.575797063890464 1.0000000 +Ge D + 0.294051604951678 1.0000000 +Ge D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,14d) -> [30s,22p,14d] +As S +22297831.7330223 1.0000000 +As S +11387194.5850786 1.0000000 +As S +5815282.94190191 1.0000000 +As S +2969784.65079438 1.0000000 +As S +1516627.98873367 1.0000000 +As S + 774520.959152738 1.0000000 +As S + 395537.152566831 1.0000000 +As S + 201995.358823884 1.0000000 +As S + 103156.238855453 1.0000000 +As S + 52680.4659115022 1.0000000 +As S + 26903.1860742976 1.0000000 +As S + 13739.0854166734 1.0000000 +As S + 7016.36109438300 1.0000000 +As S + 3583.15866840946 1.0000000 +As S + 1829.86962476550 1.0000000 +As S + 934.489134729211 1.0000000 +As S + 477.230689612032 1.0000000 +As S + 243.715119463182 1.0000000 +As S + 124.461944187287 1.0000000 +As S + 63.5609952513412 1.0000000 +As S + 32.4597220758638 1.0000000 +As S + 16.5767315800501 1.0000000 +As S + 8.46550778330153 1.0000000 +As S + 4.32321786011102 1.0000000 +As S + 2.20780762884063 1.0000000 +As S + 1.12749685157938 1.0000000 +As S + 0.575797063890465 1.0000000 +As S + 0.294051604951678 1.0000000 +As S + 0.150168091845475 1.0000000 +As S + 7.668876968794860E-002 1.0000000 +As P + 52680.4659115021 1.0000000 +As P + 26903.1860742976 1.0000000 +As P + 13739.0854166734 1.0000000 +As P + 7016.36109438299 1.0000000 +As P + 3583.15866840946 1.0000000 +As P + 1829.86962476550 1.0000000 +As P + 934.489134729210 1.0000000 +As P + 477.230689612032 1.0000000 +As P + 243.715119463182 1.0000000 +As P + 124.461944187287 1.0000000 +As P + 63.5609952513411 1.0000000 +As P + 32.4597220758638 1.0000000 +As P + 16.5767315800501 1.0000000 +As P + 8.46550778330153 1.0000000 +As P + 4.32321786011102 1.0000000 +As P + 2.20780762884063 1.0000000 +As P + 1.12749685157938 1.0000000 +As P + 0.575797063890464 1.0000000 +As P + 0.294051604951678 1.0000000 +As P + 0.150168091845475 1.0000000 +As P + 7.668876968794858E-002 1.0000000 +As P + 3.916389509898707E-002 1.0000000 +As D + 1829.86962476550 1.0000000 +As D + 934.489134729211 1.0000000 +As D + 477.230689612032 1.0000000 +As D + 243.715119463182 1.0000000 +As D + 124.461944187287 1.0000000 +As D + 63.5609952513411 1.0000000 +As D + 32.4597220758638 1.0000000 +As D + 16.5767315800501 1.0000000 +As D + 8.46550778330153 1.0000000 +As D + 4.32321786011102 1.0000000 +As D + 2.20780762884063 1.0000000 +As D + 1.12749685157938 1.0000000 +As D + 0.575797063890465 1.0000000 +As D + 0.294051604951678 1.0000000 +#BASIS SET: (30s,21p,14d) -> [30s,21p,14d] +Se S +22297831.7330223 1.0000000 +Se S +11387194.5850786 1.0000000 +Se S +5815282.94190191 1.0000000 +Se S +2969784.65079438 1.0000000 +Se S +1516627.98873367 1.0000000 +Se S + 774520.959152738 1.0000000 +Se S + 395537.152566831 1.0000000 +Se S + 201995.358823884 1.0000000 +Se S + 103156.238855453 1.0000000 +Se S + 52680.4659115022 1.0000000 +Se S + 26903.1860742976 1.0000000 +Se S + 13739.0854166734 1.0000000 +Se S + 7016.36109438300 1.0000000 +Se S + 3583.15866840946 1.0000000 +Se S + 1829.86962476550 1.0000000 +Se S + 934.489134729211 1.0000000 +Se S + 477.230689612032 1.0000000 +Se S + 243.715119463182 1.0000000 +Se S + 124.461944187287 1.0000000 +Se S + 63.5609952513412 1.0000000 +Se S + 32.4597220758638 1.0000000 +Se S + 16.5767315800501 1.0000000 +Se S + 8.46550778330153 1.0000000 +Se S + 4.32321786011102 1.0000000 +Se S + 2.20780762884063 1.0000000 +Se S + 1.12749685157938 1.0000000 +Se S + 0.575797063890465 1.0000000 +Se S + 0.294051604951678 1.0000000 +Se S + 0.150168091845475 1.0000000 +Se S + 7.668876968794860E-002 1.0000000 +Se P + 26903.1860742976 1.0000000 +Se P + 13739.0854166734 1.0000000 +Se P + 7016.36109438299 1.0000000 +Se P + 3583.15866840946 1.0000000 +Se P + 1829.86962476550 1.0000000 +Se P + 934.489134729210 1.0000000 +Se P + 477.230689612032 1.0000000 +Se P + 243.715119463182 1.0000000 +Se P + 124.461944187287 1.0000000 +Se P + 63.5609952513411 1.0000000 +Se P + 32.4597220758638 1.0000000 +Se P + 16.5767315800501 1.0000000 +Se P + 8.46550778330153 1.0000000 +Se P + 4.32321786011102 1.0000000 +Se P + 2.20780762884063 1.0000000 +Se P + 1.12749685157938 1.0000000 +Se P + 0.575797063890464 1.0000000 +Se P + 0.294051604951678 1.0000000 +Se P + 0.150168091845475 1.0000000 +Se P + 7.668876968794858E-002 1.0000000 +Se P + 3.916389509898707E-002 1.0000000 +Se D + 1829.86962476550 1.0000000 +Se D + 934.489134729211 1.0000000 +Se D + 477.230689612032 1.0000000 +Se D + 243.715119463182 1.0000000 +Se D + 124.461944187287 1.0000000 +Se D + 63.5609952513411 1.0000000 +Se D + 32.4597220758638 1.0000000 +Se D + 16.5767315800501 1.0000000 +Se D + 8.46550778330153 1.0000000 +Se D + 4.32321786011102 1.0000000 +Se D + 2.20780762884063 1.0000000 +Se D + 1.12749685157938 1.0000000 +Se D + 0.575797063890465 1.0000000 +Se D + 0.294051604951678 1.0000000 +#BASIS SET: (30s,21p,14d) -> [30s,21p,14d] +Br S +22297831.7330223 1.0000000 +Br S +11387194.5850786 1.0000000 +Br S +5815282.94190191 1.0000000 +Br S +2969784.65079438 1.0000000 +Br S +1516627.98873367 1.0000000 +Br S + 774520.959152738 1.0000000 +Br S + 395537.152566831 1.0000000 +Br S + 201995.358823884 1.0000000 +Br S + 103156.238855453 1.0000000 +Br S + 52680.4659115022 1.0000000 +Br S + 26903.1860742976 1.0000000 +Br S + 13739.0854166734 1.0000000 +Br S + 7016.36109438300 1.0000000 +Br S + 3583.15866840946 1.0000000 +Br S + 1829.86962476550 1.0000000 +Br S + 934.489134729211 1.0000000 +Br S + 477.230689612032 1.0000000 +Br S + 243.715119463182 1.0000000 +Br S + 124.461944187287 1.0000000 +Br S + 63.5609952513412 1.0000000 +Br S + 32.4597220758638 1.0000000 +Br S + 16.5767315800501 1.0000000 +Br S + 8.46550778330153 1.0000000 +Br S + 4.32321786011102 1.0000000 +Br S + 2.20780762884063 1.0000000 +Br S + 1.12749685157938 1.0000000 +Br S + 0.575797063890465 1.0000000 +Br S + 0.294051604951678 1.0000000 +Br S + 0.150168091845475 1.0000000 +Br S + 7.668876968794860E-002 1.0000000 +Br P + 52680.4659115022 1.0000000 +Br P + 26903.1860742976 1.0000000 +Br P + 13739.0854166734 1.0000000 +Br P + 7016.36109438300 1.0000000 +Br P + 3583.15866840946 1.0000000 +Br P + 1829.86962476550 1.0000000 +Br P + 934.489134729211 1.0000000 +Br P + 477.230689612032 1.0000000 +Br P + 243.715119463182 1.0000000 +Br P + 124.461944187287 1.0000000 +Br P + 63.5609952513412 1.0000000 +Br P + 32.4597220758638 1.0000000 +Br P + 16.5767315800501 1.0000000 +Br P + 8.46550778330153 1.0000000 +Br P + 4.32321786011102 1.0000000 +Br P + 2.20780762884063 1.0000000 +Br P + 1.12749685157938 1.0000000 +Br P + 0.575797063890465 1.0000000 +Br P + 0.294051604951678 1.0000000 +Br P + 0.150168091845475 1.0000000 +Br P + 7.668876968794860E-002 1.0000000 +Br D + 1829.86962476550 1.0000000 +Br D + 934.489134729211 1.0000000 +Br D + 477.230689612032 1.0000000 +Br D + 243.715119463182 1.0000000 +Br D + 124.461944187287 1.0000000 +Br D + 63.5609952513411 1.0000000 +Br D + 32.4597220758638 1.0000000 +Br D + 16.5767315800501 1.0000000 +Br D + 8.46550778330153 1.0000000 +Br D + 4.32321786011102 1.0000000 +Br D + 2.20780762884063 1.0000000 +Br D + 1.12749685157938 1.0000000 +Br D + 0.575797063890465 1.0000000 +Br D + 0.294051604951678 1.0000000 +#BASIS SET: (30s,20p,14d) -> [30s,20p,14d] +Kr S +22297831.7330223 1.0000000 +Kr S +11387194.5850786 1.0000000 +Kr S +5815282.94190191 1.0000000 +Kr S +2969784.65079438 1.0000000 +Kr S +1516627.98873367 1.0000000 +Kr S + 774520.959152738 1.0000000 +Kr S + 395537.152566831 1.0000000 +Kr S + 201995.358823884 1.0000000 +Kr S + 103156.238855453 1.0000000 +Kr S + 52680.4659115022 1.0000000 +Kr S + 26903.1860742976 1.0000000 +Kr S + 13739.0854166734 1.0000000 +Kr S + 7016.36109438300 1.0000000 +Kr S + 3583.15866840946 1.0000000 +Kr S + 1829.86962476550 1.0000000 +Kr S + 934.489134729211 1.0000000 +Kr S + 477.230689612032 1.0000000 +Kr S + 243.715119463182 1.0000000 +Kr S + 124.461944187287 1.0000000 +Kr S + 63.5609952513412 1.0000000 +Kr S + 32.4597220758638 1.0000000 +Kr S + 16.5767315800501 1.0000000 +Kr S + 8.46550778330153 1.0000000 +Kr S + 4.32321786011102 1.0000000 +Kr S + 2.20780762884063 1.0000000 +Kr S + 1.12749685157938 1.0000000 +Kr S + 0.575797063890465 1.0000000 +Kr S + 0.294051604951678 1.0000000 +Kr S + 0.150168091845475 1.0000000 +Kr S + 7.668876968794860E-002 1.0000000 +Kr P + 26903.1860742976 1.0000000 +Kr P + 13739.0854166734 1.0000000 +Kr P + 7016.36109438300 1.0000000 +Kr P + 3583.15866840946 1.0000000 +Kr P + 1829.86962476550 1.0000000 +Kr P + 934.489134729211 1.0000000 +Kr P + 477.230689612032 1.0000000 +Kr P + 243.715119463182 1.0000000 +Kr P + 124.461944187287 1.0000000 +Kr P + 63.5609952513412 1.0000000 +Kr P + 32.4597220758638 1.0000000 +Kr P + 16.5767315800501 1.0000000 +Kr P + 8.46550778330153 1.0000000 +Kr P + 4.32321786011102 1.0000000 +Kr P + 2.20780762884063 1.0000000 +Kr P + 1.12749685157938 1.0000000 +Kr P + 0.575797063890465 1.0000000 +Kr P + 0.294051604951678 1.0000000 +Kr P + 0.150168091845475 1.0000000 +Kr P + 7.668876968794860E-002 1.0000000 +Kr D + 1829.86962476550 1.0000000 +Kr D + 934.489134729211 1.0000000 +Kr D + 477.230689612032 1.0000000 +Kr D + 243.715119463182 1.0000000 +Kr D + 124.461944187287 1.0000000 +Kr D + 63.5609952513411 1.0000000 +Kr D + 32.4597220758638 1.0000000 +Kr D + 16.5767315800501 1.0000000 +Kr D + 8.46550778330153 1.0000000 +Kr D + 4.32321786011102 1.0000000 +Kr D + 2.20780762884063 1.0000000 +Kr D + 1.12749685157938 1.0000000 +Kr D + 0.575797063890465 1.0000000 +Kr D + 0.294051604951678 1.0000000 +#BASIS SET: (30s,20p,14d) -> [30s,20p,14d] +Rb S +5815282.94190191 1.0000000 +Rb S +2969784.65079438 1.0000000 +Rb S +1516627.98873367 1.0000000 +Rb S + 774520.959152735 1.0000000 +Rb S + 395537.152566831 1.0000000 +Rb S + 201995.358823884 1.0000000 +Rb S + 103156.238855453 1.0000000 +Rb S + 52680.4659115021 1.0000000 +Rb S + 26903.1860742975 1.0000000 +Rb S + 13739.0854166734 1.0000000 +Rb S + 7016.36109438299 1.0000000 +Rb S + 3583.15866840945 1.0000000 +Rb S + 1829.86962476550 1.0000000 +Rb S + 934.489134729211 1.0000000 +Rb S + 477.230689612032 1.0000000 +Rb S + 243.715119463182 1.0000000 +Rb S + 124.461944187287 1.0000000 +Rb S + 63.5609952513411 1.0000000 +Rb S + 32.4597220758638 1.0000000 +Rb S + 16.5767315800501 1.0000000 +Rb S + 8.46550778330153 1.0000000 +Rb S + 4.32321786011102 1.0000000 +Rb S + 2.20780762884063 1.0000000 +Rb S + 1.12749685157938 1.0000000 +Rb S + 0.575797063890465 1.0000000 +Rb S + 0.294051604951678 1.0000000 +Rb S + 0.150168091845475 1.0000000 +Rb S + 7.668876968794858E-002 1.0000000 +Rb S + 3.916389509898707E-002 1.0000000 +Rb S + 2.000046011385546E-002 1.0000000 +Rb P + 26903.1860742976 1.0000000 +Rb P + 13739.0854166734 1.0000000 +Rb P + 7016.36109438300 1.0000000 +Rb P + 3583.15866840946 1.0000000 +Rb P + 1829.86962476550 1.0000000 +Rb P + 934.489134729211 1.0000000 +Rb P + 477.230689612032 1.0000000 +Rb P + 243.715119463182 1.0000000 +Rb P + 124.461944187287 1.0000000 +Rb P + 63.5609952513412 1.0000000 +Rb P + 32.4597220758638 1.0000000 +Rb P + 16.5767315800501 1.0000000 +Rb P + 8.46550778330153 1.0000000 +Rb P + 4.32321786011102 1.0000000 +Rb P + 2.20780762884063 1.0000000 +Rb P + 1.12749685157938 1.0000000 +Rb P + 0.575797063890465 1.0000000 +Rb P + 0.294051604951678 1.0000000 +Rb P + 0.150168091845475 1.0000000 +Rb P + 7.668876968794860E-002 1.0000000 +Rb D + 1829.86962476550 1.0000000 +Rb D + 934.489134729211 1.0000000 +Rb D + 477.230689612032 1.0000000 +Rb D + 243.715119463182 1.0000000 +Rb D + 124.461944187287 1.0000000 +Rb D + 63.5609952513411 1.0000000 +Rb D + 32.4597220758638 1.0000000 +Rb D + 16.5767315800501 1.0000000 +Rb D + 8.46550778330153 1.0000000 +Rb D + 4.32321786011102 1.0000000 +Rb D + 2.20780762884063 1.0000000 +Rb D + 1.12749685157938 1.0000000 +Rb D + 0.575797063890465 1.0000000 +Rb D + 0.294051604951678 1.0000000 +#BASIS SET: (30s,21p,14d) -> [30s,21p,14d] +Sr S +5815282.94190191 1.0000000 +Sr S +2969784.65079438 1.0000000 +Sr S +1516627.98873367 1.0000000 +Sr S + 774520.959152735 1.0000000 +Sr S + 395537.152566831 1.0000000 +Sr S + 201995.358823884 1.0000000 +Sr S + 103156.238855453 1.0000000 +Sr S + 52680.4659115021 1.0000000 +Sr S + 26903.1860742975 1.0000000 +Sr S + 13739.0854166734 1.0000000 +Sr S + 7016.36109438299 1.0000000 +Sr S + 3583.15866840945 1.0000000 +Sr S + 1829.86962476550 1.0000000 +Sr S + 934.489134729211 1.0000000 +Sr S + 477.230689612032 1.0000000 +Sr S + 243.715119463182 1.0000000 +Sr S + 124.461944187287 1.0000000 +Sr S + 63.5609952513411 1.0000000 +Sr S + 32.4597220758638 1.0000000 +Sr S + 16.5767315800501 1.0000000 +Sr S + 8.46550778330153 1.0000000 +Sr S + 4.32321786011102 1.0000000 +Sr S + 2.20780762884063 1.0000000 +Sr S + 1.12749685157938 1.0000000 +Sr S + 0.575797063890465 1.0000000 +Sr S + 0.294051604951678 1.0000000 +Sr S + 0.150168091845475 1.0000000 +Sr S + 7.668876968794858E-002 1.0000000 +Sr S + 3.916389509898707E-002 1.0000000 +Sr S + 2.000046011385546E-002 1.0000000 +Sr P + 52680.4659115022 1.0000000 +Sr P + 26903.1860742976 1.0000000 +Sr P + 13739.0854166734 1.0000000 +Sr P + 7016.36109438300 1.0000000 +Sr P + 3583.15866840946 1.0000000 +Sr P + 1829.86962476550 1.0000000 +Sr P + 934.489134729211 1.0000000 +Sr P + 477.230689612032 1.0000000 +Sr P + 243.715119463182 1.0000000 +Sr P + 124.461944187287 1.0000000 +Sr P + 63.5609952513412 1.0000000 +Sr P + 32.4597220758638 1.0000000 +Sr P + 16.5767315800501 1.0000000 +Sr P + 8.46550778330153 1.0000000 +Sr P + 4.32321786011102 1.0000000 +Sr P + 2.20780762884063 1.0000000 +Sr P + 1.12749685157938 1.0000000 +Sr P + 0.575797063890465 1.0000000 +Sr P + 0.294051604951678 1.0000000 +Sr P + 0.150168091845475 1.0000000 +Sr P + 7.668876968794860E-002 1.0000000 +Sr D + 1829.86962476550 1.0000000 +Sr D + 934.489134729211 1.0000000 +Sr D + 477.230689612032 1.0000000 +Sr D + 243.715119463182 1.0000000 +Sr D + 124.461944187287 1.0000000 +Sr D + 63.5609952513411 1.0000000 +Sr D + 32.4597220758638 1.0000000 +Sr D + 16.5767315800501 1.0000000 +Sr D + 8.46550778330153 1.0000000 +Sr D + 4.32321786011102 1.0000000 +Sr D + 2.20780762884063 1.0000000 +Sr D + 1.12749685157938 1.0000000 +Sr D + 0.575797063890465 1.0000000 +Sr D + 0.294051604951678 1.0000000 +#BASIS SET: (30s,22p,18d) -> [30s,22p,18d] +Y S +5815282.94190191 1.0000000 +Y S +2969784.65079438 1.0000000 +Y S +1516627.98873367 1.0000000 +Y S + 774520.959152735 1.0000000 +Y S + 395537.152566831 1.0000000 +Y S + 201995.358823884 1.0000000 +Y S + 103156.238855453 1.0000000 +Y S + 52680.4659115021 1.0000000 +Y S + 26903.1860742975 1.0000000 +Y S + 13739.0854166734 1.0000000 +Y S + 7016.36109438299 1.0000000 +Y S + 3583.15866840945 1.0000000 +Y S + 1829.86962476550 1.0000000 +Y S + 934.489134729211 1.0000000 +Y S + 477.230689612032 1.0000000 +Y S + 243.715119463182 1.0000000 +Y S + 124.461944187287 1.0000000 +Y S + 63.5609952513411 1.0000000 +Y S + 32.4597220758638 1.0000000 +Y S + 16.5767315800501 1.0000000 +Y S + 8.46550778330153 1.0000000 +Y S + 4.32321786011102 1.0000000 +Y S + 2.20780762884063 1.0000000 +Y S + 1.12749685157938 1.0000000 +Y S + 0.575797063890465 1.0000000 +Y S + 0.294051604951678 1.0000000 +Y S + 0.150168091845475 1.0000000 +Y S + 7.668876968794858E-002 1.0000000 +Y S + 3.916389509898707E-002 1.0000000 +Y S + 2.000046011385546E-002 1.0000000 +Y P + 103156.238855453 1.0000000 +Y P + 52680.4659115022 1.0000000 +Y P + 26903.1860742976 1.0000000 +Y P + 13739.0854166734 1.0000000 +Y P + 7016.36109438300 1.0000000 +Y P + 3583.15866840946 1.0000000 +Y P + 1829.86962476550 1.0000000 +Y P + 934.489134729211 1.0000000 +Y P + 477.230689612032 1.0000000 +Y P + 243.715119463182 1.0000000 +Y P + 124.461944187287 1.0000000 +Y P + 63.5609952513412 1.0000000 +Y P + 32.4597220758638 1.0000000 +Y P + 16.5767315800501 1.0000000 +Y P + 8.46550778330153 1.0000000 +Y P + 4.32321786011102 1.0000000 +Y P + 2.20780762884063 1.0000000 +Y P + 1.12749685157938 1.0000000 +Y P + 0.575797063890465 1.0000000 +Y P + 0.294051604951678 1.0000000 +Y P + 0.150168091845475 1.0000000 +Y P + 7.668876968794860E-002 1.0000000 +Y D + 3583.15866840946 1.0000000 +Y D + 1829.86962476550 1.0000000 +Y D + 934.489134729210 1.0000000 +Y D + 477.230689612032 1.0000000 +Y D + 243.715119463182 1.0000000 +Y D + 124.461944187287 1.0000000 +Y D + 63.5609952513411 1.0000000 +Y D + 32.4597220758638 1.0000000 +Y D + 16.5767315800501 1.0000000 +Y D + 8.46550778330153 1.0000000 +Y D + 4.32321786011102 1.0000000 +Y D + 2.20780762884063 1.0000000 +Y D + 1.12749685157938 1.0000000 +Y D + 0.575797063890464 1.0000000 +Y D + 0.294051604951678 1.0000000 +Y D + 0.150168091845475 1.0000000 +Y D + 7.668876968794858E-002 1.0000000 +Y D + 3.916389509898707E-002 1.0000000 +#BASIS SET: (30s,22p,18d) -> [30s,22p,18d] +Zr S +5815282.94190191 1.0000000 +Zr S +2969784.65079438 1.0000000 +Zr S +1516627.98873367 1.0000000 +Zr S + 774520.959152735 1.0000000 +Zr S + 395537.152566831 1.0000000 +Zr S + 201995.358823884 1.0000000 +Zr S + 103156.238855453 1.0000000 +Zr S + 52680.4659115021 1.0000000 +Zr S + 26903.1860742975 1.0000000 +Zr S + 13739.0854166734 1.0000000 +Zr S + 7016.36109438299 1.0000000 +Zr S + 3583.15866840945 1.0000000 +Zr S + 1829.86962476550 1.0000000 +Zr S + 934.489134729211 1.0000000 +Zr S + 477.230689612032 1.0000000 +Zr S + 243.715119463182 1.0000000 +Zr S + 124.461944187287 1.0000000 +Zr S + 63.5609952513411 1.0000000 +Zr S + 32.4597220758638 1.0000000 +Zr S + 16.5767315800501 1.0000000 +Zr S + 8.46550778330153 1.0000000 +Zr S + 4.32321786011102 1.0000000 +Zr S + 2.20780762884063 1.0000000 +Zr S + 1.12749685157938 1.0000000 +Zr S + 0.575797063890465 1.0000000 +Zr S + 0.294051604951678 1.0000000 +Zr S + 0.150168091845475 1.0000000 +Zr S + 7.668876968794858E-002 1.0000000 +Zr S + 3.916389509898707E-002 1.0000000 +Zr S + 2.000046011385546E-002 1.0000000 +Zr P + 103156.238855453 1.0000000 +Zr P + 52680.4659115022 1.0000000 +Zr P + 26903.1860742976 1.0000000 +Zr P + 13739.0854166734 1.0000000 +Zr P + 7016.36109438300 1.0000000 +Zr P + 3583.15866840946 1.0000000 +Zr P + 1829.86962476550 1.0000000 +Zr P + 934.489134729211 1.0000000 +Zr P + 477.230689612032 1.0000000 +Zr P + 243.715119463182 1.0000000 +Zr P + 124.461944187287 1.0000000 +Zr P + 63.5609952513412 1.0000000 +Zr P + 32.4597220758638 1.0000000 +Zr P + 16.5767315800501 1.0000000 +Zr P + 8.46550778330153 1.0000000 +Zr P + 4.32321786011102 1.0000000 +Zr P + 2.20780762884063 1.0000000 +Zr P + 1.12749685157938 1.0000000 +Zr P + 0.575797063890465 1.0000000 +Zr P + 0.294051604951678 1.0000000 +Zr P + 0.150168091845475 1.0000000 +Zr P + 7.668876968794860E-002 1.0000000 +Zr D + 3583.15866840946 1.0000000 +Zr D + 1829.86962476550 1.0000000 +Zr D + 934.489134729210 1.0000000 +Zr D + 477.230689612032 1.0000000 +Zr D + 243.715119463182 1.0000000 +Zr D + 124.461944187287 1.0000000 +Zr D + 63.5609952513411 1.0000000 +Zr D + 32.4597220758638 1.0000000 +Zr D + 16.5767315800501 1.0000000 +Zr D + 8.46550778330153 1.0000000 +Zr D + 4.32321786011102 1.0000000 +Zr D + 2.20780762884063 1.0000000 +Zr D + 1.12749685157938 1.0000000 +Zr D + 0.575797063890464 1.0000000 +Zr D + 0.294051604951678 1.0000000 +Zr D + 0.150168091845475 1.0000000 +Zr D + 7.668876968794858E-002 1.0000000 +Zr D + 3.916389509898707E-002 1.0000000 +#BASIS SET: (31s,23p,18d) -> [31s,23p,18d] +Nb S +11387194.5850786 1.0000000 +Nb S +5815282.94190191 1.0000000 +Nb S +2969784.65079438 1.0000000 +Nb S +1516627.98873367 1.0000000 +Nb S + 774520.959152735 1.0000000 +Nb S + 395537.152566831 1.0000000 +Nb S + 201995.358823884 1.0000000 +Nb S + 103156.238855453 1.0000000 +Nb S + 52680.4659115021 1.0000000 +Nb S + 26903.1860742975 1.0000000 +Nb S + 13739.0854166734 1.0000000 +Nb S + 7016.36109438299 1.0000000 +Nb S + 3583.15866840945 1.0000000 +Nb S + 1829.86962476550 1.0000000 +Nb S + 934.489134729211 1.0000000 +Nb S + 477.230689612032 1.0000000 +Nb S + 243.715119463182 1.0000000 +Nb S + 124.461944187287 1.0000000 +Nb S + 63.5609952513411 1.0000000 +Nb S + 32.4597220758638 1.0000000 +Nb S + 16.5767315800501 1.0000000 +Nb S + 8.46550778330153 1.0000000 +Nb S + 4.32321786011102 1.0000000 +Nb S + 2.20780762884063 1.0000000 +Nb S + 1.12749685157938 1.0000000 +Nb S + 0.575797063890465 1.0000000 +Nb S + 0.294051604951678 1.0000000 +Nb S + 0.150168091845475 1.0000000 +Nb S + 7.668876968794858E-002 1.0000000 +Nb S + 3.916389509898707E-002 1.0000000 +Nb S + 2.000046011385546E-002 1.0000000 +Nb P + 201995.358823884 1.0000000 +Nb P + 103156.238855453 1.0000000 +Nb P + 52680.4659115022 1.0000000 +Nb P + 26903.1860742976 1.0000000 +Nb P + 13739.0854166734 1.0000000 +Nb P + 7016.36109438300 1.0000000 +Nb P + 3583.15866840946 1.0000000 +Nb P + 1829.86962476550 1.0000000 +Nb P + 934.489134729211 1.0000000 +Nb P + 477.230689612032 1.0000000 +Nb P + 243.715119463182 1.0000000 +Nb P + 124.461944187287 1.0000000 +Nb P + 63.5609952513412 1.0000000 +Nb P + 32.4597220758638 1.0000000 +Nb P + 16.5767315800501 1.0000000 +Nb P + 8.46550778330153 1.0000000 +Nb P + 4.32321786011102 1.0000000 +Nb P + 2.20780762884063 1.0000000 +Nb P + 1.12749685157938 1.0000000 +Nb P + 0.575797063890465 1.0000000 +Nb P + 0.294051604951678 1.0000000 +Nb P + 0.150168091845475 1.0000000 +Nb P + 7.668876968794860E-002 1.0000000 +Nb D + 3583.15866840946 1.0000000 +Nb D + 1829.86962476550 1.0000000 +Nb D + 934.489134729210 1.0000000 +Nb D + 477.230689612032 1.0000000 +Nb D + 243.715119463182 1.0000000 +Nb D + 124.461944187287 1.0000000 +Nb D + 63.5609952513411 1.0000000 +Nb D + 32.4597220758638 1.0000000 +Nb D + 16.5767315800501 1.0000000 +Nb D + 8.46550778330153 1.0000000 +Nb D + 4.32321786011102 1.0000000 +Nb D + 2.20780762884063 1.0000000 +Nb D + 1.12749685157938 1.0000000 +Nb D + 0.575797063890464 1.0000000 +Nb D + 0.294051604951678 1.0000000 +Nb D + 0.150168091845475 1.0000000 +Nb D + 7.668876968794858E-002 1.0000000 +Nb D + 3.916389509898707E-002 1.0000000 +#BASIS SET: (30s,23p,18d) -> [30s,23p,18d] +Mo S +11387194.5850786 1.0000000 +Mo S +5815282.94190191 1.0000000 +Mo S +2969784.65079438 1.0000000 +Mo S +1516627.98873367 1.0000000 +Mo S + 774520.959152738 1.0000000 +Mo S + 395537.152566831 1.0000000 +Mo S + 201995.358823884 1.0000000 +Mo S + 103156.238855453 1.0000000 +Mo S + 52680.4659115021 1.0000000 +Mo S + 26903.1860742976 1.0000000 +Mo S + 13739.0854166734 1.0000000 +Mo S + 7016.36109438299 1.0000000 +Mo S + 3583.15866840946 1.0000000 +Mo S + 1829.86962476550 1.0000000 +Mo S + 934.489134729210 1.0000000 +Mo S + 477.230689612032 1.0000000 +Mo S + 243.715119463182 1.0000000 +Mo S + 124.461944187287 1.0000000 +Mo S + 63.5609952513411 1.0000000 +Mo S + 32.4597220758638 1.0000000 +Mo S + 16.5767315800501 1.0000000 +Mo S + 8.46550778330153 1.0000000 +Mo S + 4.32321786011102 1.0000000 +Mo S + 2.20780762884063 1.0000000 +Mo S + 1.12749685157938 1.0000000 +Mo S + 0.575797063890464 1.0000000 +Mo S + 0.294051604951678 1.0000000 +Mo S + 0.150168091845475 1.0000000 +Mo S + 7.668876968794858E-002 1.0000000 +Mo S + 3.916389509898707E-002 1.0000000 +Mo P + 201995.358823884 1.0000000 +Mo P + 103156.238855453 1.0000000 +Mo P + 52680.4659115022 1.0000000 +Mo P + 26903.1860742976 1.0000000 +Mo P + 13739.0854166734 1.0000000 +Mo P + 7016.36109438300 1.0000000 +Mo P + 3583.15866840946 1.0000000 +Mo P + 1829.86962476550 1.0000000 +Mo P + 934.489134729211 1.0000000 +Mo P + 477.230689612032 1.0000000 +Mo P + 243.715119463182 1.0000000 +Mo P + 124.461944187287 1.0000000 +Mo P + 63.5609952513412 1.0000000 +Mo P + 32.4597220758638 1.0000000 +Mo P + 16.5767315800501 1.0000000 +Mo P + 8.46550778330153 1.0000000 +Mo P + 4.32321786011102 1.0000000 +Mo P + 2.20780762884063 1.0000000 +Mo P + 1.12749685157938 1.0000000 +Mo P + 0.575797063890465 1.0000000 +Mo P + 0.294051604951678 1.0000000 +Mo P + 0.150168091845475 1.0000000 +Mo P + 7.668876968794860E-002 1.0000000 +Mo D + 3583.15866840946 1.0000000 +Mo D + 1829.86962476550 1.0000000 +Mo D + 934.489134729210 1.0000000 +Mo D + 477.230689612032 1.0000000 +Mo D + 243.715119463182 1.0000000 +Mo D + 124.461944187287 1.0000000 +Mo D + 63.5609952513411 1.0000000 +Mo D + 32.4597220758638 1.0000000 +Mo D + 16.5767315800501 1.0000000 +Mo D + 8.46550778330153 1.0000000 +Mo D + 4.32321786011102 1.0000000 +Mo D + 2.20780762884063 1.0000000 +Mo D + 1.12749685157938 1.0000000 +Mo D + 0.575797063890464 1.0000000 +Mo D + 0.294051604951678 1.0000000 +Mo D + 0.150168091845475 1.0000000 +Mo D + 7.668876968794858E-002 1.0000000 +Mo D + 3.916389509898707E-002 1.0000000 +#BASIS SET: (32s,22p,17d) -> [32s,22p,17d] +Tc S +22297831.7330222 1.0000000 +Tc S +11387194.5850786 1.0000000 +Tc S +5815282.94190191 1.0000000 +Tc S +2969784.65079438 1.0000000 +Tc S +1516627.98873367 1.0000000 +Tc S + 774520.959152735 1.0000000 +Tc S + 395537.152566831 1.0000000 +Tc S + 201995.358823884 1.0000000 +Tc S + 103156.238855453 1.0000000 +Tc S + 52680.4659115021 1.0000000 +Tc S + 26903.1860742975 1.0000000 +Tc S + 13739.0854166734 1.0000000 +Tc S + 7016.36109438299 1.0000000 +Tc S + 3583.15866840945 1.0000000 +Tc S + 1829.86962476550 1.0000000 +Tc S + 934.489134729211 1.0000000 +Tc S + 477.230689612032 1.0000000 +Tc S + 243.715119463182 1.0000000 +Tc S + 124.461944187287 1.0000000 +Tc S + 63.5609952513411 1.0000000 +Tc S + 32.4597220758638 1.0000000 +Tc S + 16.5767315800501 1.0000000 +Tc S + 8.46550778330153 1.0000000 +Tc S + 4.32321786011102 1.0000000 +Tc S + 2.20780762884063 1.0000000 +Tc S + 1.12749685157938 1.0000000 +Tc S + 0.575797063890465 1.0000000 +Tc S + 0.294051604951678 1.0000000 +Tc S + 0.150168091845475 1.0000000 +Tc S + 7.668876968794858E-002 1.0000000 +Tc S + 3.916389509898707E-002 1.0000000 +Tc S + 2.000046011385546E-002 1.0000000 +Tc P + 103156.238855453 1.0000000 +Tc P + 52680.4659115022 1.0000000 +Tc P + 26903.1860742976 1.0000000 +Tc P + 13739.0854166734 1.0000000 +Tc P + 7016.36109438300 1.0000000 +Tc P + 3583.15866840946 1.0000000 +Tc P + 1829.86962476550 1.0000000 +Tc P + 934.489134729211 1.0000000 +Tc P + 477.230689612032 1.0000000 +Tc P + 243.715119463182 1.0000000 +Tc P + 124.461944187287 1.0000000 +Tc P + 63.5609952513412 1.0000000 +Tc P + 32.4597220758638 1.0000000 +Tc P + 16.5767315800501 1.0000000 +Tc P + 8.46550778330153 1.0000000 +Tc P + 4.32321786011102 1.0000000 +Tc P + 2.20780762884063 1.0000000 +Tc P + 1.12749685157938 1.0000000 +Tc P + 0.575797063890465 1.0000000 +Tc P + 0.294051604951678 1.0000000 +Tc P + 0.150168091845475 1.0000000 +Tc P + 7.668876968794860E-002 1.0000000 +Tc D + 3583.15866840946 1.0000000 +Tc D + 1829.86962476550 1.0000000 +Tc D + 934.489134729211 1.0000000 +Tc D + 477.230689612032 1.0000000 +Tc D + 243.715119463182 1.0000000 +Tc D + 124.461944187287 1.0000000 +Tc D + 63.5609952513412 1.0000000 +Tc D + 32.4597220758638 1.0000000 +Tc D + 16.5767315800501 1.0000000 +Tc D + 8.46550778330153 1.0000000 +Tc D + 4.32321786011102 1.0000000 +Tc D + 2.20780762884063 1.0000000 +Tc D + 1.12749685157938 1.0000000 +Tc D + 0.575797063890465 1.0000000 +Tc D + 0.294051604951678 1.0000000 +Tc D + 0.150168091845475 1.0000000 +Tc D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (31s,22p,17d) -> [31s,22p,17d] +Ru S +11387194.5850786 1.0000000 +Ru S +5815282.94190191 1.0000000 +Ru S +2969784.65079438 1.0000000 +Ru S +1516627.98873367 1.0000000 +Ru S + 774520.959152735 1.0000000 +Ru S + 395537.152566831 1.0000000 +Ru S + 201995.358823884 1.0000000 +Ru S + 103156.238855453 1.0000000 +Ru S + 52680.4659115021 1.0000000 +Ru S + 26903.1860742975 1.0000000 +Ru S + 13739.0854166734 1.0000000 +Ru S + 7016.36109438299 1.0000000 +Ru S + 3583.15866840945 1.0000000 +Ru S + 1829.86962476550 1.0000000 +Ru S + 934.489134729211 1.0000000 +Ru S + 477.230689612032 1.0000000 +Ru S + 243.715119463182 1.0000000 +Ru S + 124.461944187287 1.0000000 +Ru S + 63.5609952513411 1.0000000 +Ru S + 32.4597220758638 1.0000000 +Ru S + 16.5767315800501 1.0000000 +Ru S + 8.46550778330153 1.0000000 +Ru S + 4.32321786011102 1.0000000 +Ru S + 2.20780762884063 1.0000000 +Ru S + 1.12749685157938 1.0000000 +Ru S + 0.575797063890465 1.0000000 +Ru S + 0.294051604951678 1.0000000 +Ru S + 0.150168091845475 1.0000000 +Ru S + 7.668876968794858E-002 1.0000000 +Ru S + 3.916389509898707E-002 1.0000000 +Ru S + 2.000046011385546E-002 1.0000000 +Ru P + 201995.358823884 1.0000000 +Ru P + 103156.238855453 1.0000000 +Ru P + 52680.4659115021 1.0000000 +Ru P + 26903.1860742975 1.0000000 +Ru P + 13739.0854166734 1.0000000 +Ru P + 7016.36109438299 1.0000000 +Ru P + 3583.15866840945 1.0000000 +Ru P + 1829.86962476550 1.0000000 +Ru P + 934.489134729210 1.0000000 +Ru P + 477.230689612032 1.0000000 +Ru P + 243.715119463182 1.0000000 +Ru P + 124.461944187287 1.0000000 +Ru P + 63.5609952513411 1.0000000 +Ru P + 32.4597220758638 1.0000000 +Ru P + 16.5767315800501 1.0000000 +Ru P + 8.46550778330153 1.0000000 +Ru P + 4.32321786011102 1.0000000 +Ru P + 2.20780762884063 1.0000000 +Ru P + 1.12749685157938 1.0000000 +Ru P + 0.575797063890464 1.0000000 +Ru P + 0.294051604951678 1.0000000 +Ru P + 0.150168091845475 1.0000000 +Ru D + 3583.15866840946 1.0000000 +Ru D + 1829.86962476550 1.0000000 +Ru D + 934.489134729211 1.0000000 +Ru D + 477.230689612032 1.0000000 +Ru D + 243.715119463182 1.0000000 +Ru D + 124.461944187287 1.0000000 +Ru D + 63.5609952513412 1.0000000 +Ru D + 32.4597220758638 1.0000000 +Ru D + 16.5767315800501 1.0000000 +Ru D + 8.46550778330153 1.0000000 +Ru D + 4.32321786011102 1.0000000 +Ru D + 2.20780762884063 1.0000000 +Ru D + 1.12749685157938 1.0000000 +Ru D + 0.575797063890465 1.0000000 +Ru D + 0.294051604951678 1.0000000 +Ru D + 0.150168091845475 1.0000000 +Ru D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (32s,21p,17d) -> [32s,21p,17d] +Rh S +22297831.7330222 1.0000000 +Rh S +11387194.5850786 1.0000000 +Rh S +5815282.94190191 1.0000000 +Rh S +2969784.65079438 1.0000000 +Rh S +1516627.98873367 1.0000000 +Rh S + 774520.959152735 1.0000000 +Rh S + 395537.152566831 1.0000000 +Rh S + 201995.358823884 1.0000000 +Rh S + 103156.238855453 1.0000000 +Rh S + 52680.4659115021 1.0000000 +Rh S + 26903.1860742975 1.0000000 +Rh S + 13739.0854166734 1.0000000 +Rh S + 7016.36109438299 1.0000000 +Rh S + 3583.15866840945 1.0000000 +Rh S + 1829.86962476550 1.0000000 +Rh S + 934.489134729211 1.0000000 +Rh S + 477.230689612032 1.0000000 +Rh S + 243.715119463182 1.0000000 +Rh S + 124.461944187287 1.0000000 +Rh S + 63.5609952513411 1.0000000 +Rh S + 32.4597220758638 1.0000000 +Rh S + 16.5767315800501 1.0000000 +Rh S + 8.46550778330153 1.0000000 +Rh S + 4.32321786011102 1.0000000 +Rh S + 2.20780762884063 1.0000000 +Rh S + 1.12749685157938 1.0000000 +Rh S + 0.575797063890465 1.0000000 +Rh S + 0.294051604951678 1.0000000 +Rh S + 0.150168091845475 1.0000000 +Rh S + 7.668876968794858E-002 1.0000000 +Rh S + 3.916389509898707E-002 1.0000000 +Rh S + 2.000046011385546E-002 1.0000000 +Rh P + 103156.238855453 1.0000000 +Rh P + 52680.4659115021 1.0000000 +Rh P + 26903.1860742975 1.0000000 +Rh P + 13739.0854166734 1.0000000 +Rh P + 7016.36109438299 1.0000000 +Rh P + 3583.15866840945 1.0000000 +Rh P + 1829.86962476550 1.0000000 +Rh P + 934.489134729210 1.0000000 +Rh P + 477.230689612032 1.0000000 +Rh P + 243.715119463182 1.0000000 +Rh P + 124.461944187287 1.0000000 +Rh P + 63.5609952513411 1.0000000 +Rh P + 32.4597220758638 1.0000000 +Rh P + 16.5767315800501 1.0000000 +Rh P + 8.46550778330153 1.0000000 +Rh P + 4.32321786011102 1.0000000 +Rh P + 2.20780762884063 1.0000000 +Rh P + 1.12749685157938 1.0000000 +Rh P + 0.575797063890464 1.0000000 +Rh P + 0.294051604951678 1.0000000 +Rh P + 0.150168091845475 1.0000000 +Rh D + 3583.15866840946 1.0000000 +Rh D + 1829.86962476550 1.0000000 +Rh D + 934.489134729211 1.0000000 +Rh D + 477.230689612032 1.0000000 +Rh D + 243.715119463182 1.0000000 +Rh D + 124.461944187287 1.0000000 +Rh D + 63.5609952513412 1.0000000 +Rh D + 32.4597220758638 1.0000000 +Rh D + 16.5767315800501 1.0000000 +Rh D + 8.46550778330153 1.0000000 +Rh D + 4.32321786011102 1.0000000 +Rh D + 2.20780762884063 1.0000000 +Rh D + 1.12749685157938 1.0000000 +Rh D + 0.575797063890465 1.0000000 +Rh D + 0.294051604951678 1.0000000 +Rh D + 0.150168091845475 1.0000000 +Rh D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (29s,22p,18d) -> [29s,22p,18d] +Pd S +22297831.7330223 1.0000000 +Pd S +11387194.5850786 1.0000000 +Pd S +5815282.94190191 1.0000000 +Pd S +2969784.65079439 1.0000000 +Pd S +1516627.98873367 1.0000000 +Pd S + 774520.959152738 1.0000000 +Pd S + 395537.152566831 1.0000000 +Pd S + 201995.358823884 1.0000000 +Pd S + 103156.238855453 1.0000000 +Pd S + 52680.4659115021 1.0000000 +Pd S + 26903.1860742975 1.0000000 +Pd S + 13739.0854166734 1.0000000 +Pd S + 7016.36109438299 1.0000000 +Pd S + 3583.15866840945 1.0000000 +Pd S + 1829.86962476550 1.0000000 +Pd S + 934.489134729210 1.0000000 +Pd S + 477.230689612032 1.0000000 +Pd S + 243.715119463182 1.0000000 +Pd S + 124.461944187287 1.0000000 +Pd S + 63.5609952513411 1.0000000 +Pd S + 32.4597220758638 1.0000000 +Pd S + 16.5767315800501 1.0000000 +Pd S + 8.46550778330153 1.0000000 +Pd S + 4.32321786011102 1.0000000 +Pd S + 2.20780762884063 1.0000000 +Pd S + 1.12749685157938 1.0000000 +Pd S + 0.575797063890464 1.0000000 +Pd S + 0.294051604951678 1.0000000 +Pd S + 0.150168091845475 1.0000000 +Pd P + 201995.358823884 1.0000000 +Pd P + 103156.238855453 1.0000000 +Pd P + 52680.4659115021 1.0000000 +Pd P + 26903.1860742975 1.0000000 +Pd P + 13739.0854166734 1.0000000 +Pd P + 7016.36109438299 1.0000000 +Pd P + 3583.15866840945 1.0000000 +Pd P + 1829.86962476550 1.0000000 +Pd P + 934.489134729210 1.0000000 +Pd P + 477.230689612032 1.0000000 +Pd P + 243.715119463182 1.0000000 +Pd P + 124.461944187287 1.0000000 +Pd P + 63.5609952513411 1.0000000 +Pd P + 32.4597220758638 1.0000000 +Pd P + 16.5767315800501 1.0000000 +Pd P + 8.46550778330153 1.0000000 +Pd P + 4.32321786011102 1.0000000 +Pd P + 2.20780762884063 1.0000000 +Pd P + 1.12749685157938 1.0000000 +Pd P + 0.575797063890464 1.0000000 +Pd P + 0.294051604951678 1.0000000 +Pd P + 0.150168091845475 1.0000000 +Pd D + 7016.36109438300 1.0000000 +Pd D + 3583.15866840946 1.0000000 +Pd D + 1829.86962476550 1.0000000 +Pd D + 934.489134729211 1.0000000 +Pd D + 477.230689612032 1.0000000 +Pd D + 243.715119463182 1.0000000 +Pd D + 124.461944187287 1.0000000 +Pd D + 63.5609952513412 1.0000000 +Pd D + 32.4597220758638 1.0000000 +Pd D + 16.5767315800501 1.0000000 +Pd D + 8.46550778330153 1.0000000 +Pd D + 4.32321786011102 1.0000000 +Pd D + 2.20780762884063 1.0000000 +Pd D + 1.12749685157938 1.0000000 +Pd D + 0.575797063890465 1.0000000 +Pd D + 0.294051604951678 1.0000000 +Pd D + 0.150168091845475 1.0000000 +Pd D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (31s,21p,17d) -> [31s,21p,17d] +Ag S +11387194.5850786 1.0000000 +Ag S +5815282.94190191 1.0000000 +Ag S +2969784.65079438 1.0000000 +Ag S +1516627.98873367 1.0000000 +Ag S + 774520.959152735 1.0000000 +Ag S + 395537.152566831 1.0000000 +Ag S + 201995.358823884 1.0000000 +Ag S + 103156.238855453 1.0000000 +Ag S + 52680.4659115021 1.0000000 +Ag S + 26903.1860742975 1.0000000 +Ag S + 13739.0854166734 1.0000000 +Ag S + 7016.36109438299 1.0000000 +Ag S + 3583.15866840945 1.0000000 +Ag S + 1829.86962476550 1.0000000 +Ag S + 934.489134729211 1.0000000 +Ag S + 477.230689612032 1.0000000 +Ag S + 243.715119463182 1.0000000 +Ag S + 124.461944187287 1.0000000 +Ag S + 63.5609952513411 1.0000000 +Ag S + 32.4597220758638 1.0000000 +Ag S + 16.5767315800501 1.0000000 +Ag S + 8.46550778330153 1.0000000 +Ag S + 4.32321786011102 1.0000000 +Ag S + 2.20780762884063 1.0000000 +Ag S + 1.12749685157938 1.0000000 +Ag S + 0.575797063890465 1.0000000 +Ag S + 0.294051604951678 1.0000000 +Ag S + 0.150168091845475 1.0000000 +Ag S + 7.668876968794858E-002 1.0000000 +Ag S + 3.916389509898707E-002 1.0000000 +Ag S + 2.000046011385546E-002 1.0000000 +Ag P + 103156.238855453 1.0000000 +Ag P + 52680.4659115021 1.0000000 +Ag P + 26903.1860742975 1.0000000 +Ag P + 13739.0854166734 1.0000000 +Ag P + 7016.36109438299 1.0000000 +Ag P + 3583.15866840945 1.0000000 +Ag P + 1829.86962476550 1.0000000 +Ag P + 934.489134729210 1.0000000 +Ag P + 477.230689612032 1.0000000 +Ag P + 243.715119463182 1.0000000 +Ag P + 124.461944187287 1.0000000 +Ag P + 63.5609952513411 1.0000000 +Ag P + 32.4597220758638 1.0000000 +Ag P + 16.5767315800501 1.0000000 +Ag P + 8.46550778330153 1.0000000 +Ag P + 4.32321786011102 1.0000000 +Ag P + 2.20780762884063 1.0000000 +Ag P + 1.12749685157938 1.0000000 +Ag P + 0.575797063890464 1.0000000 +Ag P + 0.294051604951678 1.0000000 +Ag P + 0.150168091845475 1.0000000 +Ag D + 3583.15866840946 1.0000000 +Ag D + 1829.86962476550 1.0000000 +Ag D + 934.489134729211 1.0000000 +Ag D + 477.230689612032 1.0000000 +Ag D + 243.715119463182 1.0000000 +Ag D + 124.461944187287 1.0000000 +Ag D + 63.5609952513412 1.0000000 +Ag D + 32.4597220758638 1.0000000 +Ag D + 16.5767315800501 1.0000000 +Ag D + 8.46550778330153 1.0000000 +Ag D + 4.32321786011102 1.0000000 +Ag D + 2.20780762884063 1.0000000 +Ag D + 1.12749685157938 1.0000000 +Ag D + 0.575797063890465 1.0000000 +Ag D + 0.294051604951678 1.0000000 +Ag D + 0.150168091845475 1.0000000 +Ag D + 7.668876968794860E-002 1.0000000 +#BASIS SET: (31s,20p,16d) -> [31s,20p,16d] +Cd S +22297831.7330222 1.0000000 +Cd S +11387194.5850786 1.0000000 +Cd S +5815282.94190191 1.0000000 +Cd S +2969784.65079438 1.0000000 +Cd S +1516627.98873367 1.0000000 +Cd S + 774520.959152738 1.0000000 +Cd S + 395537.152566831 1.0000000 +Cd S + 201995.358823884 1.0000000 +Cd S + 103156.238855453 1.0000000 +Cd S + 52680.4659115021 1.0000000 +Cd S + 26903.1860742976 1.0000000 +Cd S + 13739.0854166734 1.0000000 +Cd S + 7016.36109438299 1.0000000 +Cd S + 3583.15866840946 1.0000000 +Cd S + 1829.86962476550 1.0000000 +Cd S + 934.489134729210 1.0000000 +Cd S + 477.230689612032 1.0000000 +Cd S + 243.715119463182 1.0000000 +Cd S + 124.461944187287 1.0000000 +Cd S + 63.5609952513411 1.0000000 +Cd S + 32.4597220758638 1.0000000 +Cd S + 16.5767315800501 1.0000000 +Cd S + 8.46550778330153 1.0000000 +Cd S + 4.32321786011102 1.0000000 +Cd S + 2.20780762884063 1.0000000 +Cd S + 1.12749685157938 1.0000000 +Cd S + 0.575797063890464 1.0000000 +Cd S + 0.294051604951678 1.0000000 +Cd S + 0.150168091845475 1.0000000 +Cd S + 7.668876968794858E-002 1.0000000 +Cd S + 3.916389509898707E-002 1.0000000 +Cd P + 103156.238855453 1.0000000 +Cd P + 52680.4659115021 1.0000000 +Cd P + 26903.1860742976 1.0000000 +Cd P + 13739.0854166734 1.0000000 +Cd P + 7016.36109438299 1.0000000 +Cd P + 3583.15866840946 1.0000000 +Cd P + 1829.86962476550 1.0000000 +Cd P + 934.489134729211 1.0000000 +Cd P + 477.230689612032 1.0000000 +Cd P + 243.715119463182 1.0000000 +Cd P + 124.461944187287 1.0000000 +Cd P + 63.5609952513411 1.0000000 +Cd P + 32.4597220758638 1.0000000 +Cd P + 16.5767315800501 1.0000000 +Cd P + 8.46550778330153 1.0000000 +Cd P + 4.32321786011102 1.0000000 +Cd P + 2.20780762884063 1.0000000 +Cd P + 1.12749685157938 1.0000000 +Cd P + 0.575797063890465 1.0000000 +Cd P + 0.294051604951678 1.0000000 +Cd D + 3583.15866840945 1.0000000 +Cd D + 1829.86962476550 1.0000000 +Cd D + 934.489134729210 1.0000000 +Cd D + 477.230689612032 1.0000000 +Cd D + 243.715119463182 1.0000000 +Cd D + 124.461944187287 1.0000000 +Cd D + 63.5609952513411 1.0000000 +Cd D + 32.4597220758638 1.0000000 +Cd D + 16.5767315800501 1.0000000 +Cd D + 8.46550778330153 1.0000000 +Cd D + 4.32321786011102 1.0000000 +Cd D + 2.20780762884063 1.0000000 +Cd D + 1.12749685157938 1.0000000 +Cd D + 0.575797063890464 1.0000000 +Cd D + 0.294051604951678 1.0000000 +Cd D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,16d) -> [30s,22p,16d] +In S +11387194.5850786 1.0000000 +In S +5815282.94190191 1.0000000 +In S +2969784.65079438 1.0000000 +In S +1516627.98873367 1.0000000 +In S + 774520.959152738 1.0000000 +In S + 395537.152566831 1.0000000 +In S + 201995.358823884 1.0000000 +In S + 103156.238855453 1.0000000 +In S + 52680.4659115021 1.0000000 +In S + 26903.1860742976 1.0000000 +In S + 13739.0854166734 1.0000000 +In S + 7016.36109438299 1.0000000 +In S + 3583.15866840946 1.0000000 +In S + 1829.86962476550 1.0000000 +In S + 934.489134729210 1.0000000 +In S + 477.230689612032 1.0000000 +In S + 243.715119463182 1.0000000 +In S + 124.461944187287 1.0000000 +In S + 63.5609952513411 1.0000000 +In S + 32.4597220758638 1.0000000 +In S + 16.5767315800501 1.0000000 +In S + 8.46550778330153 1.0000000 +In S + 4.32321786011102 1.0000000 +In S + 2.20780762884063 1.0000000 +In S + 1.12749685157938 1.0000000 +In S + 0.575797063890464 1.0000000 +In S + 0.294051604951678 1.0000000 +In S + 0.150168091845475 1.0000000 +In S + 7.668876968794858E-002 1.0000000 +In S + 3.916389509898707E-002 1.0000000 +In P + 52680.4659115021 1.0000000 +In P + 26903.1860742976 1.0000000 +In P + 13739.0854166734 1.0000000 +In P + 7016.36109438299 1.0000000 +In P + 3583.15866840946 1.0000000 +In P + 1829.86962476550 1.0000000 +In P + 934.489134729210 1.0000000 +In P + 477.230689612032 1.0000000 +In P + 243.715119463182 1.0000000 +In P + 124.461944187287 1.0000000 +In P + 63.5609952513411 1.0000000 +In P + 32.4597220758638 1.0000000 +In P + 16.5767315800501 1.0000000 +In P + 8.46550778330153 1.0000000 +In P + 4.32321786011102 1.0000000 +In P + 2.20780762884063 1.0000000 +In P + 1.12749685157938 1.0000000 +In P + 0.575797063890464 1.0000000 +In P + 0.294051604951678 1.0000000 +In P + 0.150168091845475 1.0000000 +In P + 7.668876968794858E-002 1.0000000 +In P + 3.916389509898707E-002 1.0000000 +In D + 3583.15866840945 1.0000000 +In D + 1829.86962476550 1.0000000 +In D + 934.489134729210 1.0000000 +In D + 477.230689612032 1.0000000 +In D + 243.715119463182 1.0000000 +In D + 124.461944187287 1.0000000 +In D + 63.5609952513411 1.0000000 +In D + 32.4597220758638 1.0000000 +In D + 16.5767315800501 1.0000000 +In D + 8.46550778330153 1.0000000 +In D + 4.32321786011102 1.0000000 +In D + 2.20780762884063 1.0000000 +In D + 1.12749685157938 1.0000000 +In D + 0.575797063890464 1.0000000 +In D + 0.294051604951678 1.0000000 +In D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,16d) -> [30s,22p,16d] +Sn S +11387194.5850786 1.0000000 +Sn S +5815282.94190191 1.0000000 +Sn S +2969784.65079438 1.0000000 +Sn S +1516627.98873367 1.0000000 +Sn S + 774520.959152738 1.0000000 +Sn S + 395537.152566831 1.0000000 +Sn S + 201995.358823884 1.0000000 +Sn S + 103156.238855453 1.0000000 +Sn S + 52680.4659115021 1.0000000 +Sn S + 26903.1860742976 1.0000000 +Sn S + 13739.0854166734 1.0000000 +Sn S + 7016.36109438299 1.0000000 +Sn S + 3583.15866840946 1.0000000 +Sn S + 1829.86962476550 1.0000000 +Sn S + 934.489134729210 1.0000000 +Sn S + 477.230689612032 1.0000000 +Sn S + 243.715119463182 1.0000000 +Sn S + 124.461944187287 1.0000000 +Sn S + 63.5609952513411 1.0000000 +Sn S + 32.4597220758638 1.0000000 +Sn S + 16.5767315800501 1.0000000 +Sn S + 8.46550778330153 1.0000000 +Sn S + 4.32321786011102 1.0000000 +Sn S + 2.20780762884063 1.0000000 +Sn S + 1.12749685157938 1.0000000 +Sn S + 0.575797063890464 1.0000000 +Sn S + 0.294051604951678 1.0000000 +Sn S + 0.150168091845475 1.0000000 +Sn S + 7.668876968794858E-002 1.0000000 +Sn S + 3.916389509898707E-002 1.0000000 +Sn P + 52680.4659115021 1.0000000 +Sn P + 26903.1860742976 1.0000000 +Sn P + 13739.0854166734 1.0000000 +Sn P + 7016.36109438299 1.0000000 +Sn P + 3583.15866840946 1.0000000 +Sn P + 1829.86962476550 1.0000000 +Sn P + 934.489134729210 1.0000000 +Sn P + 477.230689612032 1.0000000 +Sn P + 243.715119463182 1.0000000 +Sn P + 124.461944187287 1.0000000 +Sn P + 63.5609952513411 1.0000000 +Sn P + 32.4597220758638 1.0000000 +Sn P + 16.5767315800501 1.0000000 +Sn P + 8.46550778330153 1.0000000 +Sn P + 4.32321786011102 1.0000000 +Sn P + 2.20780762884063 1.0000000 +Sn P + 1.12749685157938 1.0000000 +Sn P + 0.575797063890464 1.0000000 +Sn P + 0.294051604951678 1.0000000 +Sn P + 0.150168091845475 1.0000000 +Sn P + 7.668876968794858E-002 1.0000000 +Sn P + 3.916389509898707E-002 1.0000000 +Sn D + 3583.15866840945 1.0000000 +Sn D + 1829.86962476550 1.0000000 +Sn D + 934.489134729210 1.0000000 +Sn D + 477.230689612032 1.0000000 +Sn D + 243.715119463182 1.0000000 +Sn D + 124.461944187287 1.0000000 +Sn D + 63.5609952513411 1.0000000 +Sn D + 32.4597220758638 1.0000000 +Sn D + 16.5767315800501 1.0000000 +Sn D + 8.46550778330153 1.0000000 +Sn D + 4.32321786011102 1.0000000 +Sn D + 2.20780762884063 1.0000000 +Sn D + 1.12749685157938 1.0000000 +Sn D + 0.575797063890464 1.0000000 +Sn D + 0.294051604951678 1.0000000 +Sn D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,16d) -> [30s,22p,16d] +Sb S +22297831.7330223 1.0000000 +Sb S +11387194.5850786 1.0000000 +Sb S +5815282.94190191 1.0000000 +Sb S +2969784.65079438 1.0000000 +Sb S +1516627.98873367 1.0000000 +Sb S + 774520.959152738 1.0000000 +Sb S + 395537.152566831 1.0000000 +Sb S + 201995.358823884 1.0000000 +Sb S + 103156.238855453 1.0000000 +Sb S + 52680.4659115022 1.0000000 +Sb S + 26903.1860742976 1.0000000 +Sb S + 13739.0854166734 1.0000000 +Sb S + 7016.36109438300 1.0000000 +Sb S + 3583.15866840946 1.0000000 +Sb S + 1829.86962476550 1.0000000 +Sb S + 934.489134729211 1.0000000 +Sb S + 477.230689612032 1.0000000 +Sb S + 243.715119463182 1.0000000 +Sb S + 124.461944187287 1.0000000 +Sb S + 63.5609952513412 1.0000000 +Sb S + 32.4597220758638 1.0000000 +Sb S + 16.5767315800501 1.0000000 +Sb S + 8.46550778330153 1.0000000 +Sb S + 4.32321786011102 1.0000000 +Sb S + 2.20780762884063 1.0000000 +Sb S + 1.12749685157938 1.0000000 +Sb S + 0.575797063890465 1.0000000 +Sb S + 0.294051604951678 1.0000000 +Sb S + 0.150168091845475 1.0000000 +Sb S + 7.668876968794860E-002 1.0000000 +Sb P + 52680.4659115021 1.0000000 +Sb P + 26903.1860742976 1.0000000 +Sb P + 13739.0854166734 1.0000000 +Sb P + 7016.36109438299 1.0000000 +Sb P + 3583.15866840946 1.0000000 +Sb P + 1829.86962476550 1.0000000 +Sb P + 934.489134729210 1.0000000 +Sb P + 477.230689612032 1.0000000 +Sb P + 243.715119463182 1.0000000 +Sb P + 124.461944187287 1.0000000 +Sb P + 63.5609952513411 1.0000000 +Sb P + 32.4597220758638 1.0000000 +Sb P + 16.5767315800501 1.0000000 +Sb P + 8.46550778330153 1.0000000 +Sb P + 4.32321786011102 1.0000000 +Sb P + 2.20780762884063 1.0000000 +Sb P + 1.12749685157938 1.0000000 +Sb P + 0.575797063890464 1.0000000 +Sb P + 0.294051604951678 1.0000000 +Sb P + 0.150168091845475 1.0000000 +Sb P + 7.668876968794858E-002 1.0000000 +Sb P + 3.916389509898707E-002 1.0000000 +Sb D + 3583.15866840945 1.0000000 +Sb D + 1829.86962476550 1.0000000 +Sb D + 934.489134729210 1.0000000 +Sb D + 477.230689612032 1.0000000 +Sb D + 243.715119463182 1.0000000 +Sb D + 124.461944187287 1.0000000 +Sb D + 63.5609952513411 1.0000000 +Sb D + 32.4597220758638 1.0000000 +Sb D + 16.5767315800501 1.0000000 +Sb D + 8.46550778330153 1.0000000 +Sb D + 4.32321786011102 1.0000000 +Sb D + 2.20780762884063 1.0000000 +Sb D + 1.12749685157938 1.0000000 +Sb D + 0.575797063890464 1.0000000 +Sb D + 0.294051604951678 1.0000000 +Sb D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,23p,16d) -> [30s,23p,16d] +Te S +22297831.7330223 1.0000000 +Te S +11387194.5850786 1.0000000 +Te S +5815282.94190191 1.0000000 +Te S +2969784.65079438 1.0000000 +Te S +1516627.98873367 1.0000000 +Te S + 774520.959152738 1.0000000 +Te S + 395537.152566831 1.0000000 +Te S + 201995.358823884 1.0000000 +Te S + 103156.238855453 1.0000000 +Te S + 52680.4659115022 1.0000000 +Te S + 26903.1860742976 1.0000000 +Te S + 13739.0854166734 1.0000000 +Te S + 7016.36109438300 1.0000000 +Te S + 3583.15866840946 1.0000000 +Te S + 1829.86962476550 1.0000000 +Te S + 934.489134729211 1.0000000 +Te S + 477.230689612032 1.0000000 +Te S + 243.715119463182 1.0000000 +Te S + 124.461944187287 1.0000000 +Te S + 63.5609952513412 1.0000000 +Te S + 32.4597220758638 1.0000000 +Te S + 16.5767315800501 1.0000000 +Te S + 8.46550778330153 1.0000000 +Te S + 4.32321786011102 1.0000000 +Te S + 2.20780762884063 1.0000000 +Te S + 1.12749685157938 1.0000000 +Te S + 0.575797063890465 1.0000000 +Te S + 0.294051604951678 1.0000000 +Te S + 0.150168091845475 1.0000000 +Te S + 7.668876968794860E-002 1.0000000 +Te P + 103156.238855453 1.0000000 +Te P + 52680.4659115021 1.0000000 +Te P + 26903.1860742976 1.0000000 +Te P + 13739.0854166734 1.0000000 +Te P + 7016.36109438299 1.0000000 +Te P + 3583.15866840946 1.0000000 +Te P + 1829.86962476550 1.0000000 +Te P + 934.489134729210 1.0000000 +Te P + 477.230689612032 1.0000000 +Te P + 243.715119463182 1.0000000 +Te P + 124.461944187287 1.0000000 +Te P + 63.5609952513411 1.0000000 +Te P + 32.4597220758638 1.0000000 +Te P + 16.5767315800501 1.0000000 +Te P + 8.46550778330153 1.0000000 +Te P + 4.32321786011102 1.0000000 +Te P + 2.20780762884063 1.0000000 +Te P + 1.12749685157938 1.0000000 +Te P + 0.575797063890464 1.0000000 +Te P + 0.294051604951678 1.0000000 +Te P + 0.150168091845475 1.0000000 +Te P + 7.668876968794858E-002 1.0000000 +Te P + 3.916389509898707E-002 1.0000000 +Te D + 3583.15866840945 1.0000000 +Te D + 1829.86962476550 1.0000000 +Te D + 934.489134729210 1.0000000 +Te D + 477.230689612032 1.0000000 +Te D + 243.715119463182 1.0000000 +Te D + 124.461944187287 1.0000000 +Te D + 63.5609952513411 1.0000000 +Te D + 32.4597220758638 1.0000000 +Te D + 16.5767315800501 1.0000000 +Te D + 8.46550778330153 1.0000000 +Te D + 4.32321786011102 1.0000000 +Te D + 2.20780762884063 1.0000000 +Te D + 1.12749685157938 1.0000000 +Te D + 0.575797063890464 1.0000000 +Te D + 0.294051604951678 1.0000000 +Te D + 0.150168091845475 1.0000000 +#BASIS SET: (30s,22p,16d) -> [30s,22p,16d] +I S +22297831.7330223 1.0000000 +I S +11387194.5850786 1.0000000 +I S +5815282.94190191 1.0000000 +I S +2969784.65079438 1.0000000 +I S +1516627.98873367 1.0000000 +I S + 774520.959152738 1.0000000 +I S + 395537.152566831 1.0000000 +I S + 201995.358823884 1.0000000 +I S + 103156.238855453 1.0000000 +I S + 52680.4659115022 1.0000000 +I S + 26903.1860742976 1.0000000 +I S + 13739.0854166734 1.0000000 +I S + 7016.36109438300 1.0000000 +I S + 3583.15866840946 1.0000000 +I S + 1829.86962476550 1.0000000 +I S + 934.489134729211 1.0000000 +I S + 477.230689612032 1.0000000 +I S + 243.715119463182 1.0000000 +I S + 124.461944187287 1.0000000 +I S + 63.5609952513412 1.0000000 +I S + 32.4597220758638 1.0000000 +I S + 16.5767315800501 1.0000000 +I S + 8.46550778330153 1.0000000 +I S + 4.32321786011102 1.0000000 +I S + 2.20780762884063 1.0000000 +I S + 1.12749685157938 1.0000000 +I S + 0.575797063890465 1.0000000 +I S + 0.294051604951678 1.0000000 +I S + 0.150168091845475 1.0000000 +I S + 7.668876968794860E-002 1.0000000 +I P + 103156.238855453 1.0000000 +I P + 52680.4659115022 1.0000000 +I P + 26903.1860742976 1.0000000 +I P + 13739.0854166734 1.0000000 +I P + 7016.36109438300 1.0000000 +I P + 3583.15866840946 1.0000000 +I P + 1829.86962476550 1.0000000 +I P + 934.489134729211 1.0000000 +I P + 477.230689612032 1.0000000 +I P + 243.715119463182 1.0000000 +I P + 124.461944187287 1.0000000 +I P + 63.5609952513412 1.0000000 +I P + 32.4597220758638 1.0000000 +I P + 16.5767315800501 1.0000000 +I P + 8.46550778330153 1.0000000 +I P + 4.32321786011102 1.0000000 +I P + 2.20780762884063 1.0000000 +I P + 1.12749685157938 1.0000000 +I P + 0.575797063890465 1.0000000 +I P + 0.294051604951678 1.0000000 +I P + 0.150168091845475 1.0000000 +I P + 7.668876968794860E-002 1.0000000 +I D + 3583.15866840945 1.0000000 +I D + 1829.86962476550 1.0000000 +I D + 934.489134729210 1.0000000 +I D + 477.230689612032 1.0000000 +I D + 243.715119463182 1.0000000 +I D + 124.461944187287 1.0000000 +I D + 63.5609952513411 1.0000000 +I D + 32.4597220758638 1.0000000 +I D + 16.5767315800501 1.0000000 +I D + 8.46550778330153 1.0000000 +I D + 4.32321786011102 1.0000000 +I D + 2.20780762884063 1.0000000 +I D + 1.12749685157938 1.0000000 +I D + 0.575797063890464 1.0000000 +I D + 0.294051604951678 1.0000000 +I D + 0.150168091845475 1.0000000 +#BASIS SET: (31s,22p,16d) -> [31s,22p,16d] +Xe S +43662492.6604555 1.0000000 +Xe S +22297831.7330223 1.0000000 +Xe S +11387194.5850786 1.0000000 +Xe S +5815282.94190191 1.0000000 +Xe S +2969784.65079438 1.0000000 +Xe S +1516627.98873367 1.0000000 +Xe S + 774520.959152738 1.0000000 +Xe S + 395537.152566831 1.0000000 +Xe S + 201995.358823884 1.0000000 +Xe S + 103156.238855453 1.0000000 +Xe S + 52680.4659115022 1.0000000 +Xe S + 26903.1860742976 1.0000000 +Xe S + 13739.0854166734 1.0000000 +Xe S + 7016.36109438300 1.0000000 +Xe S + 3583.15866840946 1.0000000 +Xe S + 1829.86962476550 1.0000000 +Xe S + 934.489134729211 1.0000000 +Xe S + 477.230689612032 1.0000000 +Xe S + 243.715119463182 1.0000000 +Xe S + 124.461944187287 1.0000000 +Xe S + 63.5609952513412 1.0000000 +Xe S + 32.4597220758638 1.0000000 +Xe S + 16.5767315800501 1.0000000 +Xe S + 8.46550778330153 1.0000000 +Xe S + 4.32321786011102 1.0000000 +Xe S + 2.20780762884063 1.0000000 +Xe S + 1.12749685157938 1.0000000 +Xe S + 0.575797063890465 1.0000000 +Xe S + 0.294051604951678 1.0000000 +Xe S + 0.150168091845475 1.0000000 +Xe S + 7.668876968794860E-002 1.0000000 +Xe P + 103156.238855453 1.0000000 +Xe P + 52680.4659115022 1.0000000 +Xe P + 26903.1860742976 1.0000000 +Xe P + 13739.0854166734 1.0000000 +Xe P + 7016.36109438300 1.0000000 +Xe P + 3583.15866840946 1.0000000 +Xe P + 1829.86962476550 1.0000000 +Xe P + 934.489134729211 1.0000000 +Xe P + 477.230689612032 1.0000000 +Xe P + 243.715119463182 1.0000000 +Xe P + 124.461944187287 1.0000000 +Xe P + 63.5609952513412 1.0000000 +Xe P + 32.4597220758638 1.0000000 +Xe P + 16.5767315800501 1.0000000 +Xe P + 8.46550778330153 1.0000000 +Xe P + 4.32321786011102 1.0000000 +Xe P + 2.20780762884063 1.0000000 +Xe P + 1.12749685157938 1.0000000 +Xe P + 0.575797063890465 1.0000000 +Xe P + 0.294051604951678 1.0000000 +Xe P + 0.150168091845475 1.0000000 +Xe P + 7.668876968794860E-002 1.0000000 +Xe D + 3583.15866840945 1.0000000 +Xe D + 1829.86962476550 1.0000000 +Xe D + 934.489134729210 1.0000000 +Xe D + 477.230689612032 1.0000000 +Xe D + 243.715119463182 1.0000000 +Xe D + 124.461944187287 1.0000000 +Xe D + 63.5609952513411 1.0000000 +Xe D + 32.4597220758638 1.0000000 +Xe D + 16.5767315800501 1.0000000 +Xe D + 8.46550778330153 1.0000000 +Xe D + 4.32321786011102 1.0000000 +Xe D + 2.20780762884063 1.0000000 +Xe D + 1.12749685157938 1.0000000 +Xe D + 0.575797063890464 1.0000000 +Xe D + 0.294051604951678 1.0000000 +Xe D + 0.150168091845475 1.0000000 +#BASIS SET: (32s,22p,15d) -> [32s,22p,15d] +Cs S +22297831.7330222 1.0000000 +Cs S +11387194.5850786 1.0000000 +Cs S +5815282.94190191 1.0000000 +Cs S +2969784.65079438 1.0000000 +Cs S +1516627.98873367 1.0000000 +Cs S + 774520.959152735 1.0000000 +Cs S + 395537.152566831 1.0000000 +Cs S + 201995.358823884 1.0000000 +Cs S + 103156.238855453 1.0000000 +Cs S + 52680.4659115021 1.0000000 +Cs S + 26903.1860742975 1.0000000 +Cs S + 13739.0854166734 1.0000000 +Cs S + 7016.36109438299 1.0000000 +Cs S + 3583.15866840945 1.0000000 +Cs S + 1829.86962476550 1.0000000 +Cs S + 934.489134729211 1.0000000 +Cs S + 477.230689612032 1.0000000 +Cs S + 243.715119463182 1.0000000 +Cs S + 124.461944187287 1.0000000 +Cs S + 63.5609952513411 1.0000000 +Cs S + 32.4597220758638 1.0000000 +Cs S + 16.5767315800501 1.0000000 +Cs S + 8.46550778330153 1.0000000 +Cs S + 4.32321786011102 1.0000000 +Cs S + 2.20780762884063 1.0000000 +Cs S + 1.12749685157938 1.0000000 +Cs S + 0.575797063890465 1.0000000 +Cs S + 0.294051604951678 1.0000000 +Cs S + 0.150168091845475 1.0000000 +Cs S + 7.668876968794858E-002 1.0000000 +Cs S + 3.916389509898707E-002 1.0000000 +Cs S + 2.000046011385546E-002 1.0000000 +Cs P + 103156.238855453 1.0000000 +Cs P + 52680.4659115022 1.0000000 +Cs P + 26903.1860742976 1.0000000 +Cs P + 13739.0854166734 1.0000000 +Cs P + 7016.36109438300 1.0000000 +Cs P + 3583.15866840946 1.0000000 +Cs P + 1829.86962476550 1.0000000 +Cs P + 934.489134729211 1.0000000 +Cs P + 477.230689612032 1.0000000 +Cs P + 243.715119463182 1.0000000 +Cs P + 124.461944187287 1.0000000 +Cs P + 63.5609952513412 1.0000000 +Cs P + 32.4597220758638 1.0000000 +Cs P + 16.5767315800501 1.0000000 +Cs P + 8.46550778330153 1.0000000 +Cs P + 4.32321786011102 1.0000000 +Cs P + 2.20780762884063 1.0000000 +Cs P + 1.12749685157938 1.0000000 +Cs P + 0.575797063890465 1.0000000 +Cs P + 0.294051604951678 1.0000000 +Cs P + 0.150168091845475 1.0000000 +Cs P + 7.668876968794860E-002 1.0000000 +Cs D + 3583.15866840946 1.0000000 +Cs D + 1829.86962476550 1.0000000 +Cs D + 934.489134729211 1.0000000 +Cs D + 477.230689612032 1.0000000 +Cs D + 243.715119463182 1.0000000 +Cs D + 124.461944187287 1.0000000 +Cs D + 63.5609952513411 1.0000000 +Cs D + 32.4597220758638 1.0000000 +Cs D + 16.5767315800501 1.0000000 +Cs D + 8.46550778330153 1.0000000 +Cs D + 4.32321786011102 1.0000000 +Cs D + 2.20780762884063 1.0000000 +Cs D + 1.12749685157938 1.0000000 +Cs D + 0.575797063890465 1.0000000 +Cs D + 0.294051604951678 1.0000000 +#BASIS SET: (32s,22p,16d) -> [32s,22p,16d] +Ba S +22297831.7330222 1.0000000 +Ba S +11387194.5850786 1.0000000 +Ba S +5815282.94190191 1.0000000 +Ba S +2969784.65079438 1.0000000 +Ba S +1516627.98873367 1.0000000 +Ba S + 774520.959152735 1.0000000 +Ba S + 395537.152566831 1.0000000 +Ba S + 201995.358823884 1.0000000 +Ba S + 103156.238855453 1.0000000 +Ba S + 52680.4659115021 1.0000000 +Ba S + 26903.1860742975 1.0000000 +Ba S + 13739.0854166734 1.0000000 +Ba S + 7016.36109438299 1.0000000 +Ba S + 3583.15866840945 1.0000000 +Ba S + 1829.86962476550 1.0000000 +Ba S + 934.489134729211 1.0000000 +Ba S + 477.230689612032 1.0000000 +Ba S + 243.715119463182 1.0000000 +Ba S + 124.461944187287 1.0000000 +Ba S + 63.5609952513411 1.0000000 +Ba S + 32.4597220758638 1.0000000 +Ba S + 16.5767315800501 1.0000000 +Ba S + 8.46550778330153 1.0000000 +Ba S + 4.32321786011102 1.0000000 +Ba S + 2.20780762884063 1.0000000 +Ba S + 1.12749685157938 1.0000000 +Ba S + 0.575797063890465 1.0000000 +Ba S + 0.294051604951678 1.0000000 +Ba S + 0.150168091845475 1.0000000 +Ba S + 7.668876968794858E-002 1.0000000 +Ba S + 3.916389509898707E-002 1.0000000 +Ba S + 2.000046011385546E-002 1.0000000 +Ba P + 103156.238855453 1.0000000 +Ba P + 52680.4659115022 1.0000000 +Ba P + 26903.1860742976 1.0000000 +Ba P + 13739.0854166734 1.0000000 +Ba P + 7016.36109438300 1.0000000 +Ba P + 3583.15866840946 1.0000000 +Ba P + 1829.86962476550 1.0000000 +Ba P + 934.489134729211 1.0000000 +Ba P + 477.230689612032 1.0000000 +Ba P + 243.715119463182 1.0000000 +Ba P + 124.461944187287 1.0000000 +Ba P + 63.5609952513412 1.0000000 +Ba P + 32.4597220758638 1.0000000 +Ba P + 16.5767315800501 1.0000000 +Ba P + 8.46550778330153 1.0000000 +Ba P + 4.32321786011102 1.0000000 +Ba P + 2.20780762884063 1.0000000 +Ba P + 1.12749685157938 1.0000000 +Ba P + 0.575797063890465 1.0000000 +Ba P + 0.294051604951678 1.0000000 +Ba P + 0.150168091845475 1.0000000 +Ba P + 7.668876968794860E-002 1.0000000 +Ba D + 7016.36109438299 1.0000000 +Ba D + 3583.15866840946 1.0000000 +Ba D + 1829.86962476550 1.0000000 +Ba D + 934.489134729211 1.0000000 +Ba D + 477.230689612032 1.0000000 +Ba D + 243.715119463182 1.0000000 +Ba D + 124.461944187287 1.0000000 +Ba D + 63.5609952513411 1.0000000 +Ba D + 32.4597220758638 1.0000000 +Ba D + 16.5767315800501 1.0000000 +Ba D + 8.46550778330153 1.0000000 +Ba D + 4.32321786011102 1.0000000 +Ba D + 2.20780762884063 1.0000000 +Ba D + 1.12749685157938 1.0000000 +Ba D + 0.575797063890465 1.0000000 +Ba D + 0.294051604951678 1.0000000 +#BASIS SET: (32s,24p,19d) -> [32s,24p,19d] +La S +22297831.7330222 1.0000000 +La S +11387194.5850786 1.0000000 +La S +5815282.94190191 1.0000000 +La S +2969784.65079438 1.0000000 +La S +1516627.98873367 1.0000000 +La S + 774520.959152735 1.0000000 +La S + 395537.152566831 1.0000000 +La S + 201995.358823884 1.0000000 +La S + 103156.238855453 1.0000000 +La S + 52680.4659115021 1.0000000 +La S + 26903.1860742975 1.0000000 +La S + 13739.0854166734 1.0000000 +La S + 7016.36109438299 1.0000000 +La S + 3583.15866840945 1.0000000 +La S + 1829.86962476550 1.0000000 +La S + 934.489134729211 1.0000000 +La S + 477.230689612032 1.0000000 +La S + 243.715119463182 1.0000000 +La S + 124.461944187287 1.0000000 +La S + 63.5609952513411 1.0000000 +La S + 32.4597220758638 1.0000000 +La S + 16.5767315800501 1.0000000 +La S + 8.46550778330153 1.0000000 +La S + 4.32321786011102 1.0000000 +La S + 2.20780762884063 1.0000000 +La S + 1.12749685157938 1.0000000 +La S + 0.575797063890465 1.0000000 +La S + 0.294051604951678 1.0000000 +La S + 0.150168091845475 1.0000000 +La S + 7.668876968794858E-002 1.0000000 +La S + 3.916389509898707E-002 1.0000000 +La S + 2.000046011385546E-002 1.0000000 +La P + 395537.152566831 1.0000000 +La P + 201995.358823884 1.0000000 +La P + 103156.238855453 1.0000000 +La P + 52680.4659115022 1.0000000 +La P + 26903.1860742976 1.0000000 +La P + 13739.0854166734 1.0000000 +La P + 7016.36109438300 1.0000000 +La P + 3583.15866840946 1.0000000 +La P + 1829.86962476550 1.0000000 +La P + 934.489134729211 1.0000000 +La P + 477.230689612032 1.0000000 +La P + 243.715119463182 1.0000000 +La P + 124.461944187287 1.0000000 +La P + 63.5609952513412 1.0000000 +La P + 32.4597220758638 1.0000000 +La P + 16.5767315800501 1.0000000 +La P + 8.46550778330153 1.0000000 +La P + 4.32321786011102 1.0000000 +La P + 2.20780762884063 1.0000000 +La P + 1.12749685157938 1.0000000 +La P + 0.575797063890465 1.0000000 +La P + 0.294051604951678 1.0000000 +La P + 0.150168091845475 1.0000000 +La P + 7.668876968794860E-002 1.0000000 +La D + 7016.36109438299 1.0000000 +La D + 3583.15866840946 1.0000000 +La D + 1829.86962476550 1.0000000 +La D + 934.489134729210 1.0000000 +La D + 477.230689612032 1.0000000 +La D + 243.715119463182 1.0000000 +La D + 124.461944187287 1.0000000 +La D + 63.5609952513411 1.0000000 +La D + 32.4597220758638 1.0000000 +La D + 16.5767315800501 1.0000000 +La D + 8.46550778330153 1.0000000 +La D + 4.32321786011102 1.0000000 +La D + 2.20780762884063 1.0000000 +La D + 1.12749685157938 1.0000000 +La D + 0.575797063890464 1.0000000 +La D + 0.294051604951678 1.0000000 +La D + 0.150168091845475 1.0000000 +La D + 7.668876968794858E-002 1.0000000 +La D + 3.916389509898707E-002 1.0000000 +#BASIS SET: (32s,22p,16d,11f) -> [32s,22p,16d,11f] +Ce S +22297831.7330222 1.0000000 +Ce S +11387194.5850786 1.0000000 +Ce S +5815282.94190191 1.0000000 +Ce S +2969784.65079438 1.0000000 +Ce S +1516627.98873367 1.0000000 +Ce S + 774520.959152735 1.0000000 +Ce S + 395537.152566831 1.0000000 +Ce S + 201995.358823884 1.0000000 +Ce S + 103156.238855453 1.0000000 +Ce S + 52680.4659115021 1.0000000 +Ce S + 26903.1860742975 1.0000000 +Ce S + 13739.0854166734 1.0000000 +Ce S + 7016.36109438299 1.0000000 +Ce S + 3583.15866840945 1.0000000 +Ce S + 1829.86962476550 1.0000000 +Ce S + 934.489134729211 1.0000000 +Ce S + 477.230689612032 1.0000000 +Ce S + 243.715119463182 1.0000000 +Ce S + 124.461944187287 1.0000000 +Ce S + 63.5609952513411 1.0000000 +Ce S + 32.4597220758638 1.0000000 +Ce S + 16.5767315800501 1.0000000 +Ce S + 8.46550778330153 1.0000000 +Ce S + 4.32321786011102 1.0000000 +Ce S + 2.20780762884063 1.0000000 +Ce S + 1.12749685157938 1.0000000 +Ce S + 0.575797063890465 1.0000000 +Ce S + 0.294051604951678 1.0000000 +Ce S + 0.150168091845475 1.0000000 +Ce S + 7.668876968794858E-002 1.0000000 +Ce S + 3.916389509898707E-002 1.0000000 +Ce S + 2.000046011385546E-002 1.0000000 +Ce P + 103156.238855453 1.0000000 +Ce P + 52680.4659115022 1.0000000 +Ce P + 26903.1860742976 1.0000000 +Ce P + 13739.0854166734 1.0000000 +Ce P + 7016.36109438300 1.0000000 +Ce P + 3583.15866840946 1.0000000 +Ce P + 1829.86962476550 1.0000000 +Ce P + 934.489134729211 1.0000000 +Ce P + 477.230689612032 1.0000000 +Ce P + 243.715119463182 1.0000000 +Ce P + 124.461944187287 1.0000000 +Ce P + 63.5609952513412 1.0000000 +Ce P + 32.4597220758638 1.0000000 +Ce P + 16.5767315800501 1.0000000 +Ce P + 8.46550778330153 1.0000000 +Ce P + 4.32321786011102 1.0000000 +Ce P + 2.20780762884063 1.0000000 +Ce P + 1.12749685157938 1.0000000 +Ce P + 0.575797063890465 1.0000000 +Ce P + 0.294051604951678 1.0000000 +Ce P + 0.150168091845475 1.0000000 +Ce P + 7.668876968794860E-002 1.0000000 +Ce D + 7016.36109438299 1.0000000 +Ce D + 3583.15866840946 1.0000000 +Ce D + 1829.86962476550 1.0000000 +Ce D + 934.489134729211 1.0000000 +Ce D + 477.230689612032 1.0000000 +Ce D + 243.715119463182 1.0000000 +Ce D + 124.461944187287 1.0000000 +Ce D + 63.5609952513411 1.0000000 +Ce D + 32.4597220758638 1.0000000 +Ce D + 16.5767315800501 1.0000000 +Ce D + 8.46550778330153 1.0000000 +Ce D + 4.32321786011102 1.0000000 +Ce D + 2.20780762884063 1.0000000 +Ce D + 1.12749685157938 1.0000000 +Ce D + 0.575797063890465 1.0000000 +Ce D + 0.294051604951678 1.0000000 +Ce F + 243.715119463182 1.0000000 +Ce F + 124.461944187287 1.0000000 +Ce F + 63.5609952513411 1.0000000 +Ce F + 32.4597220758638 1.0000000 +Ce F + 16.5767315800501 1.0000000 +Ce F + 8.46550778330153 1.0000000 +Ce F + 4.32321786011102 1.0000000 +Ce F + 2.20780762884063 1.0000000 +Ce F + 1.12749685157938 1.0000000 +Ce F + 0.575797063890465 1.0000000 +Ce F + 0.294051604951678 1.0000000 +#BASIS SET: (32s,22p,16d,12f) -> [32s,22p,16d,12f] +Pr S +22297831.7330222 1.0000000 +Pr S +11387194.5850786 1.0000000 +Pr S +5815282.94190191 1.0000000 +Pr S +2969784.65079438 1.0000000 +Pr S +1516627.98873367 1.0000000 +Pr S + 774520.959152735 1.0000000 +Pr S + 395537.152566831 1.0000000 +Pr S + 201995.358823884 1.0000000 +Pr S + 103156.238855453 1.0000000 +Pr S + 52680.4659115021 1.0000000 +Pr S + 26903.1860742975 1.0000000 +Pr S + 13739.0854166734 1.0000000 +Pr S + 7016.36109438299 1.0000000 +Pr S + 3583.15866840945 1.0000000 +Pr S + 1829.86962476550 1.0000000 +Pr S + 934.489134729211 1.0000000 +Pr S + 477.230689612032 1.0000000 +Pr S + 243.715119463182 1.0000000 +Pr S + 124.461944187287 1.0000000 +Pr S + 63.5609952513411 1.0000000 +Pr S + 32.4597220758638 1.0000000 +Pr S + 16.5767315800501 1.0000000 +Pr S + 8.46550778330153 1.0000000 +Pr S + 4.32321786011102 1.0000000 +Pr S + 2.20780762884063 1.0000000 +Pr S + 1.12749685157938 1.0000000 +Pr S + 0.575797063890465 1.0000000 +Pr S + 0.294051604951678 1.0000000 +Pr S + 0.150168091845475 1.0000000 +Pr S + 7.668876968794858E-002 1.0000000 +Pr S + 3.916389509898707E-002 1.0000000 +Pr S + 2.000046011385546E-002 1.0000000 +Pr P + 103156.238855453 1.0000000 +Pr P + 52680.4659115022 1.0000000 +Pr P + 26903.1860742976 1.0000000 +Pr P + 13739.0854166734 1.0000000 +Pr P + 7016.36109438300 1.0000000 +Pr P + 3583.15866840946 1.0000000 +Pr P + 1829.86962476550 1.0000000 +Pr P + 934.489134729211 1.0000000 +Pr P + 477.230689612032 1.0000000 +Pr P + 243.715119463182 1.0000000 +Pr P + 124.461944187287 1.0000000 +Pr P + 63.5609952513412 1.0000000 +Pr P + 32.4597220758638 1.0000000 +Pr P + 16.5767315800501 1.0000000 +Pr P + 8.46550778330153 1.0000000 +Pr P + 4.32321786011102 1.0000000 +Pr P + 2.20780762884063 1.0000000 +Pr P + 1.12749685157938 1.0000000 +Pr P + 0.575797063890465 1.0000000 +Pr P + 0.294051604951678 1.0000000 +Pr P + 0.150168091845475 1.0000000 +Pr P + 7.668876968794860E-002 1.0000000 +Pr D + 7016.36109438299 1.0000000 +Pr D + 3583.15866840946 1.0000000 +Pr D + 1829.86962476550 1.0000000 +Pr D + 934.489134729211 1.0000000 +Pr D + 477.230689612032 1.0000000 +Pr D + 243.715119463182 1.0000000 +Pr D + 124.461944187287 1.0000000 +Pr D + 63.5609952513411 1.0000000 +Pr D + 32.4597220758638 1.0000000 +Pr D + 16.5767315800501 1.0000000 +Pr D + 8.46550778330153 1.0000000 +Pr D + 4.32321786011102 1.0000000 +Pr D + 2.20780762884063 1.0000000 +Pr D + 1.12749685157938 1.0000000 +Pr D + 0.575797063890465 1.0000000 +Pr D + 0.294051604951678 1.0000000 +Pr F + 243.715119463182 1.0000000 +Pr F + 124.461944187287 1.0000000 +Pr F + 63.5609952513411 1.0000000 +Pr F + 32.4597220758638 1.0000000 +Pr F + 16.5767315800501 1.0000000 +Pr F + 8.46550778330153 1.0000000 +Pr F + 4.32321786011102 1.0000000 +Pr F + 2.20780762884063 1.0000000 +Pr F + 1.12749685157938 1.0000000 +Pr F + 0.575797063890464 1.0000000 +Pr F + 0.294051604951678 1.0000000 +Pr F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,22p,16d,12f) -> [32s,22p,16d,12f] +Nd S +22297831.7330222 1.0000000 +Nd S +11387194.5850786 1.0000000 +Nd S +5815282.94190191 1.0000000 +Nd S +2969784.65079438 1.0000000 +Nd S +1516627.98873367 1.0000000 +Nd S + 774520.959152735 1.0000000 +Nd S + 395537.152566831 1.0000000 +Nd S + 201995.358823884 1.0000000 +Nd S + 103156.238855453 1.0000000 +Nd S + 52680.4659115021 1.0000000 +Nd S + 26903.1860742975 1.0000000 +Nd S + 13739.0854166734 1.0000000 +Nd S + 7016.36109438299 1.0000000 +Nd S + 3583.15866840945 1.0000000 +Nd S + 1829.86962476550 1.0000000 +Nd S + 934.489134729211 1.0000000 +Nd S + 477.230689612032 1.0000000 +Nd S + 243.715119463182 1.0000000 +Nd S + 124.461944187287 1.0000000 +Nd S + 63.5609952513411 1.0000000 +Nd S + 32.4597220758638 1.0000000 +Nd S + 16.5767315800501 1.0000000 +Nd S + 8.46550778330153 1.0000000 +Nd S + 4.32321786011102 1.0000000 +Nd S + 2.20780762884063 1.0000000 +Nd S + 1.12749685157938 1.0000000 +Nd S + 0.575797063890465 1.0000000 +Nd S + 0.294051604951678 1.0000000 +Nd S + 0.150168091845475 1.0000000 +Nd S + 7.668876968794858E-002 1.0000000 +Nd S + 3.916389509898707E-002 1.0000000 +Nd S + 2.000046011385546E-002 1.0000000 +Nd P + 103156.238855453 1.0000000 +Nd P + 52680.4659115022 1.0000000 +Nd P + 26903.1860742976 1.0000000 +Nd P + 13739.0854166734 1.0000000 +Nd P + 7016.36109438300 1.0000000 +Nd P + 3583.15866840946 1.0000000 +Nd P + 1829.86962476550 1.0000000 +Nd P + 934.489134729211 1.0000000 +Nd P + 477.230689612032 1.0000000 +Nd P + 243.715119463182 1.0000000 +Nd P + 124.461944187287 1.0000000 +Nd P + 63.5609952513412 1.0000000 +Nd P + 32.4597220758638 1.0000000 +Nd P + 16.5767315800501 1.0000000 +Nd P + 8.46550778330153 1.0000000 +Nd P + 4.32321786011102 1.0000000 +Nd P + 2.20780762884063 1.0000000 +Nd P + 1.12749685157938 1.0000000 +Nd P + 0.575797063890465 1.0000000 +Nd P + 0.294051604951678 1.0000000 +Nd P + 0.150168091845475 1.0000000 +Nd P + 7.668876968794860E-002 1.0000000 +Nd D + 7016.36109438299 1.0000000 +Nd D + 3583.15866840946 1.0000000 +Nd D + 1829.86962476550 1.0000000 +Nd D + 934.489134729211 1.0000000 +Nd D + 477.230689612032 1.0000000 +Nd D + 243.715119463182 1.0000000 +Nd D + 124.461944187287 1.0000000 +Nd D + 63.5609952513411 1.0000000 +Nd D + 32.4597220758638 1.0000000 +Nd D + 16.5767315800501 1.0000000 +Nd D + 8.46550778330153 1.0000000 +Nd D + 4.32321786011102 1.0000000 +Nd D + 2.20780762884063 1.0000000 +Nd D + 1.12749685157938 1.0000000 +Nd D + 0.575797063890465 1.0000000 +Nd D + 0.294051604951678 1.0000000 +Nd F + 243.715119463182 1.0000000 +Nd F + 124.461944187287 1.0000000 +Nd F + 63.5609952513411 1.0000000 +Nd F + 32.4597220758638 1.0000000 +Nd F + 16.5767315800501 1.0000000 +Nd F + 8.46550778330153 1.0000000 +Nd F + 4.32321786011102 1.0000000 +Nd F + 2.20780762884063 1.0000000 +Nd F + 1.12749685157938 1.0000000 +Nd F + 0.575797063890464 1.0000000 +Nd F + 0.294051604951678 1.0000000 +Nd F + 0.150168091845475 1.0000000 +#BASIS SET: (31s,23p,16d,13f) -> [31s,23p,16d,13f] +Pm S +11387194.5850786 1.0000000 +Pm S +5815282.94190191 1.0000000 +Pm S +2969784.65079438 1.0000000 +Pm S +1516627.98873367 1.0000000 +Pm S + 774520.959152735 1.0000000 +Pm S + 395537.152566831 1.0000000 +Pm S + 201995.358823884 1.0000000 +Pm S + 103156.238855453 1.0000000 +Pm S + 52680.4659115021 1.0000000 +Pm S + 26903.1860742975 1.0000000 +Pm S + 13739.0854166734 1.0000000 +Pm S + 7016.36109438299 1.0000000 +Pm S + 3583.15866840945 1.0000000 +Pm S + 1829.86962476550 1.0000000 +Pm S + 934.489134729211 1.0000000 +Pm S + 477.230689612032 1.0000000 +Pm S + 243.715119463182 1.0000000 +Pm S + 124.461944187287 1.0000000 +Pm S + 63.5609952513411 1.0000000 +Pm S + 32.4597220758638 1.0000000 +Pm S + 16.5767315800501 1.0000000 +Pm S + 8.46550778330153 1.0000000 +Pm S + 4.32321786011102 1.0000000 +Pm S + 2.20780762884063 1.0000000 +Pm S + 1.12749685157938 1.0000000 +Pm S + 0.575797063890465 1.0000000 +Pm S + 0.294051604951678 1.0000000 +Pm S + 0.150168091845475 1.0000000 +Pm S + 7.668876968794858E-002 1.0000000 +Pm S + 3.916389509898707E-002 1.0000000 +Pm S + 2.000046011385546E-002 1.0000000 +Pm P + 201995.358823884 1.0000000 +Pm P + 103156.238855453 1.0000000 +Pm P + 52680.4659115022 1.0000000 +Pm P + 26903.1860742976 1.0000000 +Pm P + 13739.0854166734 1.0000000 +Pm P + 7016.36109438300 1.0000000 +Pm P + 3583.15866840946 1.0000000 +Pm P + 1829.86962476550 1.0000000 +Pm P + 934.489134729211 1.0000000 +Pm P + 477.230689612032 1.0000000 +Pm P + 243.715119463182 1.0000000 +Pm P + 124.461944187287 1.0000000 +Pm P + 63.5609952513412 1.0000000 +Pm P + 32.4597220758638 1.0000000 +Pm P + 16.5767315800501 1.0000000 +Pm P + 8.46550778330153 1.0000000 +Pm P + 4.32321786011102 1.0000000 +Pm P + 2.20780762884063 1.0000000 +Pm P + 1.12749685157938 1.0000000 +Pm P + 0.575797063890465 1.0000000 +Pm P + 0.294051604951678 1.0000000 +Pm P + 0.150168091845475 1.0000000 +Pm P + 7.668876968794860E-002 1.0000000 +Pm D + 7016.36109438299 1.0000000 +Pm D + 3583.15866840946 1.0000000 +Pm D + 1829.86962476550 1.0000000 +Pm D + 934.489134729211 1.0000000 +Pm D + 477.230689612032 1.0000000 +Pm D + 243.715119463182 1.0000000 +Pm D + 124.461944187287 1.0000000 +Pm D + 63.5609952513411 1.0000000 +Pm D + 32.4597220758638 1.0000000 +Pm D + 16.5767315800501 1.0000000 +Pm D + 8.46550778330153 1.0000000 +Pm D + 4.32321786011102 1.0000000 +Pm D + 2.20780762884063 1.0000000 +Pm D + 1.12749685157938 1.0000000 +Pm D + 0.575797063890465 1.0000000 +Pm D + 0.294051604951678 1.0000000 +Pm F + 477.230689612032 1.0000000 +Pm F + 243.715119463182 1.0000000 +Pm F + 124.461944187287 1.0000000 +Pm F + 63.5609952513411 1.0000000 +Pm F + 32.4597220758638 1.0000000 +Pm F + 16.5767315800501 1.0000000 +Pm F + 8.46550778330153 1.0000000 +Pm F + 4.32321786011102 1.0000000 +Pm F + 2.20780762884063 1.0000000 +Pm F + 1.12749685157938 1.0000000 +Pm F + 0.575797063890464 1.0000000 +Pm F + 0.294051604951678 1.0000000 +Pm F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,22p,16d,12f) -> [33s,22p,16d,12f] +Sm S +43662492.6604555 1.0000000 +Sm S +22297831.7330222 1.0000000 +Sm S +11387194.5850786 1.0000000 +Sm S +5815282.94190191 1.0000000 +Sm S +2969784.65079438 1.0000000 +Sm S +1516627.98873367 1.0000000 +Sm S + 774520.959152735 1.0000000 +Sm S + 395537.152566831 1.0000000 +Sm S + 201995.358823884 1.0000000 +Sm S + 103156.238855453 1.0000000 +Sm S + 52680.4659115021 1.0000000 +Sm S + 26903.1860742975 1.0000000 +Sm S + 13739.0854166734 1.0000000 +Sm S + 7016.36109438299 1.0000000 +Sm S + 3583.15866840945 1.0000000 +Sm S + 1829.86962476550 1.0000000 +Sm S + 934.489134729211 1.0000000 +Sm S + 477.230689612032 1.0000000 +Sm S + 243.715119463182 1.0000000 +Sm S + 124.461944187287 1.0000000 +Sm S + 63.5609952513411 1.0000000 +Sm S + 32.4597220758638 1.0000000 +Sm S + 16.5767315800501 1.0000000 +Sm S + 8.46550778330153 1.0000000 +Sm S + 4.32321786011102 1.0000000 +Sm S + 2.20780762884063 1.0000000 +Sm S + 1.12749685157938 1.0000000 +Sm S + 0.575797063890465 1.0000000 +Sm S + 0.294051604951678 1.0000000 +Sm S + 0.150168091845475 1.0000000 +Sm S + 7.668876968794858E-002 1.0000000 +Sm S + 3.916389509898707E-002 1.0000000 +Sm S + 2.000046011385546E-002 1.0000000 +Sm P + 103156.238855453 1.0000000 +Sm P + 52680.4659115022 1.0000000 +Sm P + 26903.1860742976 1.0000000 +Sm P + 13739.0854166734 1.0000000 +Sm P + 7016.36109438300 1.0000000 +Sm P + 3583.15866840946 1.0000000 +Sm P + 1829.86962476550 1.0000000 +Sm P + 934.489134729211 1.0000000 +Sm P + 477.230689612032 1.0000000 +Sm P + 243.715119463182 1.0000000 +Sm P + 124.461944187287 1.0000000 +Sm P + 63.5609952513412 1.0000000 +Sm P + 32.4597220758638 1.0000000 +Sm P + 16.5767315800501 1.0000000 +Sm P + 8.46550778330153 1.0000000 +Sm P + 4.32321786011102 1.0000000 +Sm P + 2.20780762884063 1.0000000 +Sm P + 1.12749685157938 1.0000000 +Sm P + 0.575797063890465 1.0000000 +Sm P + 0.294051604951678 1.0000000 +Sm P + 0.150168091845475 1.0000000 +Sm P + 7.668876968794860E-002 1.0000000 +Sm D + 7016.36109438299 1.0000000 +Sm D + 3583.15866840946 1.0000000 +Sm D + 1829.86962476550 1.0000000 +Sm D + 934.489134729211 1.0000000 +Sm D + 477.230689612032 1.0000000 +Sm D + 243.715119463182 1.0000000 +Sm D + 124.461944187287 1.0000000 +Sm D + 63.5609952513411 1.0000000 +Sm D + 32.4597220758638 1.0000000 +Sm D + 16.5767315800501 1.0000000 +Sm D + 8.46550778330153 1.0000000 +Sm D + 4.32321786011102 1.0000000 +Sm D + 2.20780762884063 1.0000000 +Sm D + 1.12749685157938 1.0000000 +Sm D + 0.575797063890465 1.0000000 +Sm D + 0.294051604951678 1.0000000 +Sm F + 243.715119463182 1.0000000 +Sm F + 124.461944187287 1.0000000 +Sm F + 63.5609952513411 1.0000000 +Sm F + 32.4597220758638 1.0000000 +Sm F + 16.5767315800501 1.0000000 +Sm F + 8.46550778330153 1.0000000 +Sm F + 4.32321786011102 1.0000000 +Sm F + 2.20780762884063 1.0000000 +Sm F + 1.12749685157938 1.0000000 +Sm F + 0.575797063890464 1.0000000 +Sm F + 0.294051604951678 1.0000000 +Sm F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,23p,16d,13f) -> [32s,23p,16d,13f] +Eu S +22297831.7330222 1.0000000 +Eu S +11387194.5850786 1.0000000 +Eu S +5815282.94190191 1.0000000 +Eu S +2969784.65079438 1.0000000 +Eu S +1516627.98873367 1.0000000 +Eu S + 774520.959152735 1.0000000 +Eu S + 395537.152566831 1.0000000 +Eu S + 201995.358823884 1.0000000 +Eu S + 103156.238855453 1.0000000 +Eu S + 52680.4659115021 1.0000000 +Eu S + 26903.1860742975 1.0000000 +Eu S + 13739.0854166734 1.0000000 +Eu S + 7016.36109438299 1.0000000 +Eu S + 3583.15866840945 1.0000000 +Eu S + 1829.86962476550 1.0000000 +Eu S + 934.489134729211 1.0000000 +Eu S + 477.230689612032 1.0000000 +Eu S + 243.715119463182 1.0000000 +Eu S + 124.461944187287 1.0000000 +Eu S + 63.5609952513411 1.0000000 +Eu S + 32.4597220758638 1.0000000 +Eu S + 16.5767315800501 1.0000000 +Eu S + 8.46550778330153 1.0000000 +Eu S + 4.32321786011102 1.0000000 +Eu S + 2.20780762884063 1.0000000 +Eu S + 1.12749685157938 1.0000000 +Eu S + 0.575797063890465 1.0000000 +Eu S + 0.294051604951678 1.0000000 +Eu S + 0.150168091845475 1.0000000 +Eu S + 7.668876968794858E-002 1.0000000 +Eu S + 3.916389509898707E-002 1.0000000 +Eu S + 2.000046011385546E-002 1.0000000 +Eu P + 201995.358823884 1.0000000 +Eu P + 103156.238855453 1.0000000 +Eu P + 52680.4659115022 1.0000000 +Eu P + 26903.1860742976 1.0000000 +Eu P + 13739.0854166734 1.0000000 +Eu P + 7016.36109438300 1.0000000 +Eu P + 3583.15866840946 1.0000000 +Eu P + 1829.86962476550 1.0000000 +Eu P + 934.489134729211 1.0000000 +Eu P + 477.230689612032 1.0000000 +Eu P + 243.715119463182 1.0000000 +Eu P + 124.461944187287 1.0000000 +Eu P + 63.5609952513412 1.0000000 +Eu P + 32.4597220758638 1.0000000 +Eu P + 16.5767315800501 1.0000000 +Eu P + 8.46550778330153 1.0000000 +Eu P + 4.32321786011102 1.0000000 +Eu P + 2.20780762884063 1.0000000 +Eu P + 1.12749685157938 1.0000000 +Eu P + 0.575797063890465 1.0000000 +Eu P + 0.294051604951678 1.0000000 +Eu P + 0.150168091845475 1.0000000 +Eu P + 7.668876968794860E-002 1.0000000 +Eu D + 7016.36109438299 1.0000000 +Eu D + 3583.15866840946 1.0000000 +Eu D + 1829.86962476550 1.0000000 +Eu D + 934.489134729211 1.0000000 +Eu D + 477.230689612032 1.0000000 +Eu D + 243.715119463182 1.0000000 +Eu D + 124.461944187287 1.0000000 +Eu D + 63.5609952513411 1.0000000 +Eu D + 32.4597220758638 1.0000000 +Eu D + 16.5767315800501 1.0000000 +Eu D + 8.46550778330153 1.0000000 +Eu D + 4.32321786011102 1.0000000 +Eu D + 2.20780762884063 1.0000000 +Eu D + 1.12749685157938 1.0000000 +Eu D + 0.575797063890465 1.0000000 +Eu D + 0.294051604951678 1.0000000 +Eu F + 477.230689612032 1.0000000 +Eu F + 243.715119463182 1.0000000 +Eu F + 124.461944187287 1.0000000 +Eu F + 63.5609952513411 1.0000000 +Eu F + 32.4597220758638 1.0000000 +Eu F + 16.5767315800501 1.0000000 +Eu F + 8.46550778330153 1.0000000 +Eu F + 4.32321786011102 1.0000000 +Eu F + 2.20780762884063 1.0000000 +Eu F + 1.12749685157938 1.0000000 +Eu F + 0.575797063890464 1.0000000 +Eu F + 0.294051604951678 1.0000000 +Eu F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,23p,16d,13f) -> [32s,23p,16d,13f] +Gd S +22297831.7330222 1.0000000 +Gd S +11387194.5850786 1.0000000 +Gd S +5815282.94190191 1.0000000 +Gd S +2969784.65079438 1.0000000 +Gd S +1516627.98873367 1.0000000 +Gd S + 774520.959152735 1.0000000 +Gd S + 395537.152566831 1.0000000 +Gd S + 201995.358823884 1.0000000 +Gd S + 103156.238855453 1.0000000 +Gd S + 52680.4659115021 1.0000000 +Gd S + 26903.1860742975 1.0000000 +Gd S + 13739.0854166734 1.0000000 +Gd S + 7016.36109438299 1.0000000 +Gd S + 3583.15866840945 1.0000000 +Gd S + 1829.86962476550 1.0000000 +Gd S + 934.489134729211 1.0000000 +Gd S + 477.230689612032 1.0000000 +Gd S + 243.715119463182 1.0000000 +Gd S + 124.461944187287 1.0000000 +Gd S + 63.5609952513411 1.0000000 +Gd S + 32.4597220758638 1.0000000 +Gd S + 16.5767315800501 1.0000000 +Gd S + 8.46550778330153 1.0000000 +Gd S + 4.32321786011102 1.0000000 +Gd S + 2.20780762884063 1.0000000 +Gd S + 1.12749685157938 1.0000000 +Gd S + 0.575797063890465 1.0000000 +Gd S + 0.294051604951678 1.0000000 +Gd S + 0.150168091845475 1.0000000 +Gd S + 7.668876968794858E-002 1.0000000 +Gd S + 3.916389509898707E-002 1.0000000 +Gd S + 2.000046011385546E-002 1.0000000 +Gd P + 201995.358823884 1.0000000 +Gd P + 103156.238855453 1.0000000 +Gd P + 52680.4659115022 1.0000000 +Gd P + 26903.1860742976 1.0000000 +Gd P + 13739.0854166734 1.0000000 +Gd P + 7016.36109438300 1.0000000 +Gd P + 3583.15866840946 1.0000000 +Gd P + 1829.86962476550 1.0000000 +Gd P + 934.489134729211 1.0000000 +Gd P + 477.230689612032 1.0000000 +Gd P + 243.715119463182 1.0000000 +Gd P + 124.461944187287 1.0000000 +Gd P + 63.5609952513412 1.0000000 +Gd P + 32.4597220758638 1.0000000 +Gd P + 16.5767315800501 1.0000000 +Gd P + 8.46550778330153 1.0000000 +Gd P + 4.32321786011102 1.0000000 +Gd P + 2.20780762884063 1.0000000 +Gd P + 1.12749685157938 1.0000000 +Gd P + 0.575797063890465 1.0000000 +Gd P + 0.294051604951678 1.0000000 +Gd P + 0.150168091845475 1.0000000 +Gd P + 7.668876968794860E-002 1.0000000 +Gd D + 7016.36109438299 1.0000000 +Gd D + 3583.15866840946 1.0000000 +Gd D + 1829.86962476550 1.0000000 +Gd D + 934.489134729211 1.0000000 +Gd D + 477.230689612032 1.0000000 +Gd D + 243.715119463182 1.0000000 +Gd D + 124.461944187287 1.0000000 +Gd D + 63.5609952513411 1.0000000 +Gd D + 32.4597220758638 1.0000000 +Gd D + 16.5767315800501 1.0000000 +Gd D + 8.46550778330153 1.0000000 +Gd D + 4.32321786011102 1.0000000 +Gd D + 2.20780762884063 1.0000000 +Gd D + 1.12749685157938 1.0000000 +Gd D + 0.575797063890465 1.0000000 +Gd D + 0.294051604951678 1.0000000 +Gd F + 477.230689612032 1.0000000 +Gd F + 243.715119463182 1.0000000 +Gd F + 124.461944187287 1.0000000 +Gd F + 63.5609952513411 1.0000000 +Gd F + 32.4597220758638 1.0000000 +Gd F + 16.5767315800501 1.0000000 +Gd F + 8.46550778330153 1.0000000 +Gd F + 4.32321786011102 1.0000000 +Gd F + 2.20780762884063 1.0000000 +Gd F + 1.12749685157938 1.0000000 +Gd F + 0.575797063890464 1.0000000 +Gd F + 0.294051604951678 1.0000000 +Gd F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,23p,16d,13f) -> [33s,23p,16d,13f] +Tb S +43662492.6604555 1.0000000 +Tb S +22297831.7330222 1.0000000 +Tb S +11387194.5850786 1.0000000 +Tb S +5815282.94190191 1.0000000 +Tb S +2969784.65079438 1.0000000 +Tb S +1516627.98873367 1.0000000 +Tb S + 774520.959152735 1.0000000 +Tb S + 395537.152566831 1.0000000 +Tb S + 201995.358823884 1.0000000 +Tb S + 103156.238855453 1.0000000 +Tb S + 52680.4659115021 1.0000000 +Tb S + 26903.1860742975 1.0000000 +Tb S + 13739.0854166734 1.0000000 +Tb S + 7016.36109438299 1.0000000 +Tb S + 3583.15866840945 1.0000000 +Tb S + 1829.86962476550 1.0000000 +Tb S + 934.489134729211 1.0000000 +Tb S + 477.230689612032 1.0000000 +Tb S + 243.715119463182 1.0000000 +Tb S + 124.461944187287 1.0000000 +Tb S + 63.5609952513411 1.0000000 +Tb S + 32.4597220758638 1.0000000 +Tb S + 16.5767315800501 1.0000000 +Tb S + 8.46550778330153 1.0000000 +Tb S + 4.32321786011102 1.0000000 +Tb S + 2.20780762884063 1.0000000 +Tb S + 1.12749685157938 1.0000000 +Tb S + 0.575797063890465 1.0000000 +Tb S + 0.294051604951678 1.0000000 +Tb S + 0.150168091845475 1.0000000 +Tb S + 7.668876968794858E-002 1.0000000 +Tb S + 3.916389509898707E-002 1.0000000 +Tb S + 2.000046011385546E-002 1.0000000 +Tb P + 201995.358823884 1.0000000 +Tb P + 103156.238855453 1.0000000 +Tb P + 52680.4659115022 1.0000000 +Tb P + 26903.1860742976 1.0000000 +Tb P + 13739.0854166734 1.0000000 +Tb P + 7016.36109438300 1.0000000 +Tb P + 3583.15866840946 1.0000000 +Tb P + 1829.86962476550 1.0000000 +Tb P + 934.489134729211 1.0000000 +Tb P + 477.230689612032 1.0000000 +Tb P + 243.715119463182 1.0000000 +Tb P + 124.461944187287 1.0000000 +Tb P + 63.5609952513412 1.0000000 +Tb P + 32.4597220758638 1.0000000 +Tb P + 16.5767315800501 1.0000000 +Tb P + 8.46550778330153 1.0000000 +Tb P + 4.32321786011102 1.0000000 +Tb P + 2.20780762884063 1.0000000 +Tb P + 1.12749685157938 1.0000000 +Tb P + 0.575797063890465 1.0000000 +Tb P + 0.294051604951678 1.0000000 +Tb P + 0.150168091845475 1.0000000 +Tb P + 7.668876968794860E-002 1.0000000 +Tb D + 7016.36109438299 1.0000000 +Tb D + 3583.15866840946 1.0000000 +Tb D + 1829.86962476550 1.0000000 +Tb D + 934.489134729211 1.0000000 +Tb D + 477.230689612032 1.0000000 +Tb D + 243.715119463182 1.0000000 +Tb D + 124.461944187287 1.0000000 +Tb D + 63.5609952513411 1.0000000 +Tb D + 32.4597220758638 1.0000000 +Tb D + 16.5767315800501 1.0000000 +Tb D + 8.46550778330153 1.0000000 +Tb D + 4.32321786011102 1.0000000 +Tb D + 2.20780762884063 1.0000000 +Tb D + 1.12749685157938 1.0000000 +Tb D + 0.575797063890465 1.0000000 +Tb D + 0.294051604951678 1.0000000 +Tb F + 477.230689612032 1.0000000 +Tb F + 243.715119463182 1.0000000 +Tb F + 124.461944187287 1.0000000 +Tb F + 63.5609952513411 1.0000000 +Tb F + 32.4597220758638 1.0000000 +Tb F + 16.5767315800501 1.0000000 +Tb F + 8.46550778330153 1.0000000 +Tb F + 4.32321786011102 1.0000000 +Tb F + 2.20780762884063 1.0000000 +Tb F + 1.12749685157938 1.0000000 +Tb F + 0.575797063890464 1.0000000 +Tb F + 0.294051604951678 1.0000000 +Tb F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,22p,16d,14f) -> [32s,22p,16d,14f] +Dy S +22297831.7330222 1.0000000 +Dy S +11387194.5850786 1.0000000 +Dy S +5815282.94190191 1.0000000 +Dy S +2969784.65079438 1.0000000 +Dy S +1516627.98873367 1.0000000 +Dy S + 774520.959152735 1.0000000 +Dy S + 395537.152566831 1.0000000 +Dy S + 201995.358823884 1.0000000 +Dy S + 103156.238855453 1.0000000 +Dy S + 52680.4659115021 1.0000000 +Dy S + 26903.1860742975 1.0000000 +Dy S + 13739.0854166734 1.0000000 +Dy S + 7016.36109438299 1.0000000 +Dy S + 3583.15866840945 1.0000000 +Dy S + 1829.86962476550 1.0000000 +Dy S + 934.489134729211 1.0000000 +Dy S + 477.230689612032 1.0000000 +Dy S + 243.715119463182 1.0000000 +Dy S + 124.461944187287 1.0000000 +Dy S + 63.5609952513411 1.0000000 +Dy S + 32.4597220758638 1.0000000 +Dy S + 16.5767315800501 1.0000000 +Dy S + 8.46550778330153 1.0000000 +Dy S + 4.32321786011102 1.0000000 +Dy S + 2.20780762884063 1.0000000 +Dy S + 1.12749685157938 1.0000000 +Dy S + 0.575797063890465 1.0000000 +Dy S + 0.294051604951678 1.0000000 +Dy S + 0.150168091845475 1.0000000 +Dy S + 7.668876968794858E-002 1.0000000 +Dy S + 3.916389509898707E-002 1.0000000 +Dy S + 2.000046011385546E-002 1.0000000 +Dy P + 103156.238855453 1.0000000 +Dy P + 52680.4659115022 1.0000000 +Dy P + 26903.1860742976 1.0000000 +Dy P + 13739.0854166734 1.0000000 +Dy P + 7016.36109438300 1.0000000 +Dy P + 3583.15866840946 1.0000000 +Dy P + 1829.86962476550 1.0000000 +Dy P + 934.489134729211 1.0000000 +Dy P + 477.230689612032 1.0000000 +Dy P + 243.715119463182 1.0000000 +Dy P + 124.461944187287 1.0000000 +Dy P + 63.5609952513412 1.0000000 +Dy P + 32.4597220758638 1.0000000 +Dy P + 16.5767315800501 1.0000000 +Dy P + 8.46550778330153 1.0000000 +Dy P + 4.32321786011102 1.0000000 +Dy P + 2.20780762884063 1.0000000 +Dy P + 1.12749685157938 1.0000000 +Dy P + 0.575797063890465 1.0000000 +Dy P + 0.294051604951678 1.0000000 +Dy P + 0.150168091845475 1.0000000 +Dy P + 7.668876968794860E-002 1.0000000 +Dy D + 7016.36109438299 1.0000000 +Dy D + 3583.15866840946 1.0000000 +Dy D + 1829.86962476550 1.0000000 +Dy D + 934.489134729211 1.0000000 +Dy D + 477.230689612032 1.0000000 +Dy D + 243.715119463182 1.0000000 +Dy D + 124.461944187287 1.0000000 +Dy D + 63.5609952513411 1.0000000 +Dy D + 32.4597220758638 1.0000000 +Dy D + 16.5767315800501 1.0000000 +Dy D + 8.46550778330153 1.0000000 +Dy D + 4.32321786011102 1.0000000 +Dy D + 2.20780762884063 1.0000000 +Dy D + 1.12749685157938 1.0000000 +Dy D + 0.575797063890465 1.0000000 +Dy D + 0.294051604951678 1.0000000 +Dy F + 934.489134729210 1.0000000 +Dy F + 477.230689612032 1.0000000 +Dy F + 243.715119463182 1.0000000 +Dy F + 124.461944187287 1.0000000 +Dy F + 63.5609952513411 1.0000000 +Dy F + 32.4597220758638 1.0000000 +Dy F + 16.5767315800501 1.0000000 +Dy F + 8.46550778330153 1.0000000 +Dy F + 4.32321786011102 1.0000000 +Dy F + 2.20780762884063 1.0000000 +Dy F + 1.12749685157938 1.0000000 +Dy F + 0.575797063890464 1.0000000 +Dy F + 0.294051604951678 1.0000000 +Dy F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,23p,16d,14f) -> [32s,23p,16d,14f] +Ho S +22297831.7330222 1.0000000 +Ho S +11387194.5850786 1.0000000 +Ho S +5815282.94190191 1.0000000 +Ho S +2969784.65079438 1.0000000 +Ho S +1516627.98873367 1.0000000 +Ho S + 774520.959152735 1.0000000 +Ho S + 395537.152566831 1.0000000 +Ho S + 201995.358823884 1.0000000 +Ho S + 103156.238855453 1.0000000 +Ho S + 52680.4659115021 1.0000000 +Ho S + 26903.1860742975 1.0000000 +Ho S + 13739.0854166734 1.0000000 +Ho S + 7016.36109438299 1.0000000 +Ho S + 3583.15866840945 1.0000000 +Ho S + 1829.86962476550 1.0000000 +Ho S + 934.489134729211 1.0000000 +Ho S + 477.230689612032 1.0000000 +Ho S + 243.715119463182 1.0000000 +Ho S + 124.461944187287 1.0000000 +Ho S + 63.5609952513411 1.0000000 +Ho S + 32.4597220758638 1.0000000 +Ho S + 16.5767315800501 1.0000000 +Ho S + 8.46550778330153 1.0000000 +Ho S + 4.32321786011102 1.0000000 +Ho S + 2.20780762884063 1.0000000 +Ho S + 1.12749685157938 1.0000000 +Ho S + 0.575797063890465 1.0000000 +Ho S + 0.294051604951678 1.0000000 +Ho S + 0.150168091845475 1.0000000 +Ho S + 7.668876968794858E-002 1.0000000 +Ho S + 3.916389509898707E-002 1.0000000 +Ho S + 2.000046011385546E-002 1.0000000 +Ho P + 201995.358823884 1.0000000 +Ho P + 103156.238855453 1.0000000 +Ho P + 52680.4659115022 1.0000000 +Ho P + 26903.1860742976 1.0000000 +Ho P + 13739.0854166734 1.0000000 +Ho P + 7016.36109438300 1.0000000 +Ho P + 3583.15866840946 1.0000000 +Ho P + 1829.86962476550 1.0000000 +Ho P + 934.489134729211 1.0000000 +Ho P + 477.230689612032 1.0000000 +Ho P + 243.715119463182 1.0000000 +Ho P + 124.461944187287 1.0000000 +Ho P + 63.5609952513412 1.0000000 +Ho P + 32.4597220758638 1.0000000 +Ho P + 16.5767315800501 1.0000000 +Ho P + 8.46550778330153 1.0000000 +Ho P + 4.32321786011102 1.0000000 +Ho P + 2.20780762884063 1.0000000 +Ho P + 1.12749685157938 1.0000000 +Ho P + 0.575797063890465 1.0000000 +Ho P + 0.294051604951678 1.0000000 +Ho P + 0.150168091845475 1.0000000 +Ho P + 7.668876968794860E-002 1.0000000 +Ho D + 7016.36109438299 1.0000000 +Ho D + 3583.15866840946 1.0000000 +Ho D + 1829.86962476550 1.0000000 +Ho D + 934.489134729211 1.0000000 +Ho D + 477.230689612032 1.0000000 +Ho D + 243.715119463182 1.0000000 +Ho D + 124.461944187287 1.0000000 +Ho D + 63.5609952513411 1.0000000 +Ho D + 32.4597220758638 1.0000000 +Ho D + 16.5767315800501 1.0000000 +Ho D + 8.46550778330153 1.0000000 +Ho D + 4.32321786011102 1.0000000 +Ho D + 2.20780762884063 1.0000000 +Ho D + 1.12749685157938 1.0000000 +Ho D + 0.575797063890465 1.0000000 +Ho D + 0.294051604951678 1.0000000 +Ho F + 934.489134729210 1.0000000 +Ho F + 477.230689612032 1.0000000 +Ho F + 243.715119463182 1.0000000 +Ho F + 124.461944187287 1.0000000 +Ho F + 63.5609952513411 1.0000000 +Ho F + 32.4597220758638 1.0000000 +Ho F + 16.5767315800501 1.0000000 +Ho F + 8.46550778330153 1.0000000 +Ho F + 4.32321786011102 1.0000000 +Ho F + 2.20780762884063 1.0000000 +Ho F + 1.12749685157938 1.0000000 +Ho F + 0.575797063890464 1.0000000 +Ho F + 0.294051604951678 1.0000000 +Ho F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,22p,16d,13f) -> [33s,22p,16d,13f] +Er S +43662492.6604555 1.0000000 +Er S +22297831.7330222 1.0000000 +Er S +11387194.5850786 1.0000000 +Er S +5815282.94190191 1.0000000 +Er S +2969784.65079438 1.0000000 +Er S +1516627.98873367 1.0000000 +Er S + 774520.959152735 1.0000000 +Er S + 395537.152566831 1.0000000 +Er S + 201995.358823884 1.0000000 +Er S + 103156.238855453 1.0000000 +Er S + 52680.4659115021 1.0000000 +Er S + 26903.1860742975 1.0000000 +Er S + 13739.0854166734 1.0000000 +Er S + 7016.36109438299 1.0000000 +Er S + 3583.15866840945 1.0000000 +Er S + 1829.86962476550 1.0000000 +Er S + 934.489134729211 1.0000000 +Er S + 477.230689612032 1.0000000 +Er S + 243.715119463182 1.0000000 +Er S + 124.461944187287 1.0000000 +Er S + 63.5609952513411 1.0000000 +Er S + 32.4597220758638 1.0000000 +Er S + 16.5767315800501 1.0000000 +Er S + 8.46550778330153 1.0000000 +Er S + 4.32321786011102 1.0000000 +Er S + 2.20780762884063 1.0000000 +Er S + 1.12749685157938 1.0000000 +Er S + 0.575797063890465 1.0000000 +Er S + 0.294051604951678 1.0000000 +Er S + 0.150168091845475 1.0000000 +Er S + 7.668876968794858E-002 1.0000000 +Er S + 3.916389509898707E-002 1.0000000 +Er S + 2.000046011385546E-002 1.0000000 +Er P + 201995.358823884 1.0000000 +Er P + 103156.238855453 1.0000000 +Er P + 52680.4659115021 1.0000000 +Er P + 26903.1860742975 1.0000000 +Er P + 13739.0854166734 1.0000000 +Er P + 7016.36109438299 1.0000000 +Er P + 3583.15866840945 1.0000000 +Er P + 1829.86962476550 1.0000000 +Er P + 934.489134729210 1.0000000 +Er P + 477.230689612032 1.0000000 +Er P + 243.715119463182 1.0000000 +Er P + 124.461944187287 1.0000000 +Er P + 63.5609952513411 1.0000000 +Er P + 32.4597220758638 1.0000000 +Er P + 16.5767315800501 1.0000000 +Er P + 8.46550778330153 1.0000000 +Er P + 4.32321786011102 1.0000000 +Er P + 2.20780762884063 1.0000000 +Er P + 1.12749685157938 1.0000000 +Er P + 0.575797063890464 1.0000000 +Er P + 0.294051604951678 1.0000000 +Er P + 0.150168091845475 1.0000000 +Er D + 7016.36109438299 1.0000000 +Er D + 3583.15866840946 1.0000000 +Er D + 1829.86962476550 1.0000000 +Er D + 934.489134729211 1.0000000 +Er D + 477.230689612032 1.0000000 +Er D + 243.715119463182 1.0000000 +Er D + 124.461944187287 1.0000000 +Er D + 63.5609952513411 1.0000000 +Er D + 32.4597220758638 1.0000000 +Er D + 16.5767315800501 1.0000000 +Er D + 8.46550778330153 1.0000000 +Er D + 4.32321786011102 1.0000000 +Er D + 2.20780762884063 1.0000000 +Er D + 1.12749685157938 1.0000000 +Er D + 0.575797063890465 1.0000000 +Er D + 0.294051604951678 1.0000000 +Er F + 477.230689612032 1.0000000 +Er F + 243.715119463182 1.0000000 +Er F + 124.461944187287 1.0000000 +Er F + 63.5609952513411 1.0000000 +Er F + 32.4597220758638 1.0000000 +Er F + 16.5767315800501 1.0000000 +Er F + 8.46550778330153 1.0000000 +Er F + 4.32321786011102 1.0000000 +Er F + 2.20780762884063 1.0000000 +Er F + 1.12749685157938 1.0000000 +Er F + 0.575797063890464 1.0000000 +Er F + 0.294051604951678 1.0000000 +Er F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,22p,17d,14f) -> [32s,22p,17d,14f] +Tm S +22297831.7330222 1.0000000 +Tm S +11387194.5850786 1.0000000 +Tm S +5815282.94190191 1.0000000 +Tm S +2969784.65079438 1.0000000 +Tm S +1516627.98873367 1.0000000 +Tm S + 774520.959152735 1.0000000 +Tm S + 395537.152566831 1.0000000 +Tm S + 201995.358823884 1.0000000 +Tm S + 103156.238855453 1.0000000 +Tm S + 52680.4659115021 1.0000000 +Tm S + 26903.1860742975 1.0000000 +Tm S + 13739.0854166734 1.0000000 +Tm S + 7016.36109438299 1.0000000 +Tm S + 3583.15866840945 1.0000000 +Tm S + 1829.86962476550 1.0000000 +Tm S + 934.489134729211 1.0000000 +Tm S + 477.230689612032 1.0000000 +Tm S + 243.715119463182 1.0000000 +Tm S + 124.461944187287 1.0000000 +Tm S + 63.5609952513411 1.0000000 +Tm S + 32.4597220758638 1.0000000 +Tm S + 16.5767315800501 1.0000000 +Tm S + 8.46550778330153 1.0000000 +Tm S + 4.32321786011102 1.0000000 +Tm S + 2.20780762884063 1.0000000 +Tm S + 1.12749685157938 1.0000000 +Tm S + 0.575797063890465 1.0000000 +Tm S + 0.294051604951678 1.0000000 +Tm S + 0.150168091845475 1.0000000 +Tm S + 7.668876968794858E-002 1.0000000 +Tm S + 3.916389509898707E-002 1.0000000 +Tm S + 2.000046011385546E-002 1.0000000 +Tm P + 201995.358823884 1.0000000 +Tm P + 103156.238855453 1.0000000 +Tm P + 52680.4659115021 1.0000000 +Tm P + 26903.1860742975 1.0000000 +Tm P + 13739.0854166734 1.0000000 +Tm P + 7016.36109438299 1.0000000 +Tm P + 3583.15866840945 1.0000000 +Tm P + 1829.86962476550 1.0000000 +Tm P + 934.489134729210 1.0000000 +Tm P + 477.230689612032 1.0000000 +Tm P + 243.715119463182 1.0000000 +Tm P + 124.461944187287 1.0000000 +Tm P + 63.5609952513411 1.0000000 +Tm P + 32.4597220758638 1.0000000 +Tm P + 16.5767315800501 1.0000000 +Tm P + 8.46550778330153 1.0000000 +Tm P + 4.32321786011102 1.0000000 +Tm P + 2.20780762884063 1.0000000 +Tm P + 1.12749685157938 1.0000000 +Tm P + 0.575797063890464 1.0000000 +Tm P + 0.294051604951678 1.0000000 +Tm P + 0.150168091845475 1.0000000 +Tm D + 13739.0854166734 1.0000000 +Tm D + 7016.36109438299 1.0000000 +Tm D + 3583.15866840946 1.0000000 +Tm D + 1829.86962476550 1.0000000 +Tm D + 934.489134729211 1.0000000 +Tm D + 477.230689612032 1.0000000 +Tm D + 243.715119463182 1.0000000 +Tm D + 124.461944187287 1.0000000 +Tm D + 63.5609952513411 1.0000000 +Tm D + 32.4597220758638 1.0000000 +Tm D + 16.5767315800501 1.0000000 +Tm D + 8.46550778330153 1.0000000 +Tm D + 4.32321786011102 1.0000000 +Tm D + 2.20780762884063 1.0000000 +Tm D + 1.12749685157938 1.0000000 +Tm D + 0.575797063890465 1.0000000 +Tm D + 0.294051604951678 1.0000000 +Tm F + 934.489134729210 1.0000000 +Tm F + 477.230689612032 1.0000000 +Tm F + 243.715119463182 1.0000000 +Tm F + 124.461944187287 1.0000000 +Tm F + 63.5609952513411 1.0000000 +Tm F + 32.4597220758638 1.0000000 +Tm F + 16.5767315800501 1.0000000 +Tm F + 8.46550778330153 1.0000000 +Tm F + 4.32321786011102 1.0000000 +Tm F + 2.20780762884063 1.0000000 +Tm F + 1.12749685157938 1.0000000 +Tm F + 0.575797063890464 1.0000000 +Tm F + 0.294051604951678 1.0000000 +Tm F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,22p,17d,13f) -> [32s,22p,17d,13f] +Yb S +22297831.7330222 1.0000000 +Yb S +11387194.5850786 1.0000000 +Yb S +5815282.94190191 1.0000000 +Yb S +2969784.65079438 1.0000000 +Yb S +1516627.98873367 1.0000000 +Yb S + 774520.959152735 1.0000000 +Yb S + 395537.152566831 1.0000000 +Yb S + 201995.358823884 1.0000000 +Yb S + 103156.238855453 1.0000000 +Yb S + 52680.4659115021 1.0000000 +Yb S + 26903.1860742975 1.0000000 +Yb S + 13739.0854166734 1.0000000 +Yb S + 7016.36109438299 1.0000000 +Yb S + 3583.15866840945 1.0000000 +Yb S + 1829.86962476550 1.0000000 +Yb S + 934.489134729211 1.0000000 +Yb S + 477.230689612032 1.0000000 +Yb S + 243.715119463182 1.0000000 +Yb S + 124.461944187287 1.0000000 +Yb S + 63.5609952513411 1.0000000 +Yb S + 32.4597220758638 1.0000000 +Yb S + 16.5767315800501 1.0000000 +Yb S + 8.46550778330153 1.0000000 +Yb S + 4.32321786011102 1.0000000 +Yb S + 2.20780762884063 1.0000000 +Yb S + 1.12749685157938 1.0000000 +Yb S + 0.575797063890465 1.0000000 +Yb S + 0.294051604951678 1.0000000 +Yb S + 0.150168091845475 1.0000000 +Yb S + 7.668876968794858E-002 1.0000000 +Yb S + 3.916389509898707E-002 1.0000000 +Yb S + 2.000046011385546E-002 1.0000000 +Yb P + 201995.358823884 1.0000000 +Yb P + 103156.238855453 1.0000000 +Yb P + 52680.4659115021 1.0000000 +Yb P + 26903.1860742975 1.0000000 +Yb P + 13739.0854166734 1.0000000 +Yb P + 7016.36109438299 1.0000000 +Yb P + 3583.15866840945 1.0000000 +Yb P + 1829.86962476550 1.0000000 +Yb P + 934.489134729210 1.0000000 +Yb P + 477.230689612032 1.0000000 +Yb P + 243.715119463182 1.0000000 +Yb P + 124.461944187287 1.0000000 +Yb P + 63.5609952513411 1.0000000 +Yb P + 32.4597220758638 1.0000000 +Yb P + 16.5767315800501 1.0000000 +Yb P + 8.46550778330153 1.0000000 +Yb P + 4.32321786011102 1.0000000 +Yb P + 2.20780762884063 1.0000000 +Yb P + 1.12749685157938 1.0000000 +Yb P + 0.575797063890464 1.0000000 +Yb P + 0.294051604951678 1.0000000 +Yb P + 0.150168091845475 1.0000000 +Yb D + 13739.0854166734 1.0000000 +Yb D + 7016.36109438299 1.0000000 +Yb D + 3583.15866840946 1.0000000 +Yb D + 1829.86962476550 1.0000000 +Yb D + 934.489134729211 1.0000000 +Yb D + 477.230689612032 1.0000000 +Yb D + 243.715119463182 1.0000000 +Yb D + 124.461944187287 1.0000000 +Yb D + 63.5609952513411 1.0000000 +Yb D + 32.4597220758638 1.0000000 +Yb D + 16.5767315800501 1.0000000 +Yb D + 8.46550778330153 1.0000000 +Yb D + 4.32321786011102 1.0000000 +Yb D + 2.20780762884063 1.0000000 +Yb D + 1.12749685157938 1.0000000 +Yb D + 0.575797063890465 1.0000000 +Yb D + 0.294051604951678 1.0000000 +Yb F + 477.230689612032 1.0000000 +Yb F + 243.715119463182 1.0000000 +Yb F + 124.461944187287 1.0000000 +Yb F + 63.5609952513411 1.0000000 +Yb F + 32.4597220758638 1.0000000 +Yb F + 16.5767315800501 1.0000000 +Yb F + 8.46550778330153 1.0000000 +Yb F + 4.32321786011102 1.0000000 +Yb F + 2.20780762884063 1.0000000 +Yb F + 1.12749685157938 1.0000000 +Yb F + 0.575797063890464 1.0000000 +Yb F + 0.294051604951678 1.0000000 +Yb F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,23p,19d,12f) -> [32s,23p,19d,12f] +Lu S +22297831.7330222 1.0000000 +Lu S +11387194.5850786 1.0000000 +Lu S +5815282.94190191 1.0000000 +Lu S +2969784.65079438 1.0000000 +Lu S +1516627.98873367 1.0000000 +Lu S + 774520.959152735 1.0000000 +Lu S + 395537.152566831 1.0000000 +Lu S + 201995.358823884 1.0000000 +Lu S + 103156.238855453 1.0000000 +Lu S + 52680.4659115021 1.0000000 +Lu S + 26903.1860742975 1.0000000 +Lu S + 13739.0854166734 1.0000000 +Lu S + 7016.36109438299 1.0000000 +Lu S + 3583.15866840945 1.0000000 +Lu S + 1829.86962476550 1.0000000 +Lu S + 934.489134729211 1.0000000 +Lu S + 477.230689612032 1.0000000 +Lu S + 243.715119463182 1.0000000 +Lu S + 124.461944187287 1.0000000 +Lu S + 63.5609952513411 1.0000000 +Lu S + 32.4597220758638 1.0000000 +Lu S + 16.5767315800501 1.0000000 +Lu S + 8.46550778330153 1.0000000 +Lu S + 4.32321786011102 1.0000000 +Lu S + 2.20780762884063 1.0000000 +Lu S + 1.12749685157938 1.0000000 +Lu S + 0.575797063890465 1.0000000 +Lu S + 0.294051604951678 1.0000000 +Lu S + 0.150168091845475 1.0000000 +Lu S + 7.668876968794858E-002 1.0000000 +Lu S + 3.916389509898707E-002 1.0000000 +Lu S + 2.000046011385546E-002 1.0000000 +Lu P + 395537.152566831 1.0000000 +Lu P + 201995.358823884 1.0000000 +Lu P + 103156.238855453 1.0000000 +Lu P + 52680.4659115021 1.0000000 +Lu P + 26903.1860742975 1.0000000 +Lu P + 13739.0854166734 1.0000000 +Lu P + 7016.36109438299 1.0000000 +Lu P + 3583.15866840945 1.0000000 +Lu P + 1829.86962476550 1.0000000 +Lu P + 934.489134729210 1.0000000 +Lu P + 477.230689612032 1.0000000 +Lu P + 243.715119463182 1.0000000 +Lu P + 124.461944187287 1.0000000 +Lu P + 63.5609952513411 1.0000000 +Lu P + 32.4597220758638 1.0000000 +Lu P + 16.5767315800501 1.0000000 +Lu P + 8.46550778330153 1.0000000 +Lu P + 4.32321786011102 1.0000000 +Lu P + 2.20780762884063 1.0000000 +Lu P + 1.12749685157938 1.0000000 +Lu P + 0.575797063890464 1.0000000 +Lu P + 0.294051604951678 1.0000000 +Lu P + 0.150168091845475 1.0000000 +Lu D + 7016.36109438299 1.0000000 +Lu D + 3583.15866840946 1.0000000 +Lu D + 1829.86962476550 1.0000000 +Lu D + 934.489134729210 1.0000000 +Lu D + 477.230689612032 1.0000000 +Lu D + 243.715119463182 1.0000000 +Lu D + 124.461944187287 1.0000000 +Lu D + 63.5609952513411 1.0000000 +Lu D + 32.4597220758638 1.0000000 +Lu D + 16.5767315800501 1.0000000 +Lu D + 8.46550778330153 1.0000000 +Lu D + 4.32321786011102 1.0000000 +Lu D + 2.20780762884063 1.0000000 +Lu D + 1.12749685157938 1.0000000 +Lu D + 0.575797063890464 1.0000000 +Lu D + 0.294051604951678 1.0000000 +Lu D + 0.150168091845475 1.0000000 +Lu D + 7.668876968794858E-002 1.0000000 +Lu D + 3.916389509898707E-002 1.0000000 +Lu F + 477.230689612032 1.0000000 +Lu F + 243.715119463182 1.0000000 +Lu F + 124.461944187287 1.0000000 +Lu F + 63.5609952513411 1.0000000 +Lu F + 32.4597220758638 1.0000000 +Lu F + 16.5767315800501 1.0000000 +Lu F + 8.46550778330153 1.0000000 +Lu F + 4.32321786011102 1.0000000 +Lu F + 2.20780762884063 1.0000000 +Lu F + 1.12749685157938 1.0000000 +Lu F + 0.575797063890465 1.0000000 +Lu F + 0.294051604951678 1.0000000 +#BASIS SET: (32s,22p,18d,12f) -> [32s,22p,18d,12f] +Hf S +43662492.6604555 1.0000000 +Hf S +22297831.7330222 1.0000000 +Hf S +11387194.5850786 1.0000000 +Hf S +5815282.94190191 1.0000000 +Hf S +2969784.65079438 1.0000000 +Hf S +1516627.98873367 1.0000000 +Hf S + 774520.959152738 1.0000000 +Hf S + 395537.152566831 1.0000000 +Hf S + 201995.358823884 1.0000000 +Hf S + 103156.238855453 1.0000000 +Hf S + 52680.4659115021 1.0000000 +Hf S + 26903.1860742976 1.0000000 +Hf S + 13739.0854166734 1.0000000 +Hf S + 7016.36109438299 1.0000000 +Hf S + 3583.15866840946 1.0000000 +Hf S + 1829.86962476550 1.0000000 +Hf S + 934.489134729210 1.0000000 +Hf S + 477.230689612032 1.0000000 +Hf S + 243.715119463182 1.0000000 +Hf S + 124.461944187287 1.0000000 +Hf S + 63.5609952513411 1.0000000 +Hf S + 32.4597220758638 1.0000000 +Hf S + 16.5767315800501 1.0000000 +Hf S + 8.46550778330153 1.0000000 +Hf S + 4.32321786011102 1.0000000 +Hf S + 2.20780762884063 1.0000000 +Hf S + 1.12749685157938 1.0000000 +Hf S + 0.575797063890464 1.0000000 +Hf S + 0.294051604951678 1.0000000 +Hf S + 0.150168091845475 1.0000000 +Hf S + 7.668876968794858E-002 1.0000000 +Hf S + 3.916389509898707E-002 1.0000000 +Hf P + 201995.358823884 1.0000000 +Hf P + 103156.238855453 1.0000000 +Hf P + 52680.4659115021 1.0000000 +Hf P + 26903.1860742975 1.0000000 +Hf P + 13739.0854166734 1.0000000 +Hf P + 7016.36109438299 1.0000000 +Hf P + 3583.15866840945 1.0000000 +Hf P + 1829.86962476550 1.0000000 +Hf P + 934.489134729210 1.0000000 +Hf P + 477.230689612032 1.0000000 +Hf P + 243.715119463182 1.0000000 +Hf P + 124.461944187287 1.0000000 +Hf P + 63.5609952513411 1.0000000 +Hf P + 32.4597220758638 1.0000000 +Hf P + 16.5767315800501 1.0000000 +Hf P + 8.46550778330153 1.0000000 +Hf P + 4.32321786011102 1.0000000 +Hf P + 2.20780762884063 1.0000000 +Hf P + 1.12749685157938 1.0000000 +Hf P + 0.575797063890464 1.0000000 +Hf P + 0.294051604951678 1.0000000 +Hf P + 0.150168091845475 1.0000000 +Hf D + 7016.36109438300 1.0000000 +Hf D + 3583.15866840946 1.0000000 +Hf D + 1829.86962476550 1.0000000 +Hf D + 934.489134729211 1.0000000 +Hf D + 477.230689612032 1.0000000 +Hf D + 243.715119463182 1.0000000 +Hf D + 124.461944187287 1.0000000 +Hf D + 63.5609952513412 1.0000000 +Hf D + 32.4597220758638 1.0000000 +Hf D + 16.5767315800501 1.0000000 +Hf D + 8.46550778330153 1.0000000 +Hf D + 4.32321786011102 1.0000000 +Hf D + 2.20780762884063 1.0000000 +Hf D + 1.12749685157938 1.0000000 +Hf D + 0.575797063890465 1.0000000 +Hf D + 0.294051604951678 1.0000000 +Hf D + 0.150168091845475 1.0000000 +Hf D + 7.668876968794860E-002 1.0000000 +Hf F + 477.230689612032 1.0000000 +Hf F + 243.715119463182 1.0000000 +Hf F + 124.461944187287 1.0000000 +Hf F + 63.5609952513411 1.0000000 +Hf F + 32.4597220758638 1.0000000 +Hf F + 16.5767315800501 1.0000000 +Hf F + 8.46550778330153 1.0000000 +Hf F + 4.32321786011102 1.0000000 +Hf F + 2.20780762884063 1.0000000 +Hf F + 1.12749685157938 1.0000000 +Hf F + 0.575797063890465 1.0000000 +Hf F + 0.294051604951678 1.0000000 +#BASIS SET: (31s,23p,19d,13f) -> [31s,23p,19d,13f] +Ta S +22297831.7330222 1.0000000 +Ta S +11387194.5850786 1.0000000 +Ta S +5815282.94190191 1.0000000 +Ta S +2969784.65079438 1.0000000 +Ta S +1516627.98873367 1.0000000 +Ta S + 774520.959152738 1.0000000 +Ta S + 395537.152566831 1.0000000 +Ta S + 201995.358823884 1.0000000 +Ta S + 103156.238855453 1.0000000 +Ta S + 52680.4659115021 1.0000000 +Ta S + 26903.1860742976 1.0000000 +Ta S + 13739.0854166734 1.0000000 +Ta S + 7016.36109438299 1.0000000 +Ta S + 3583.15866840946 1.0000000 +Ta S + 1829.86962476550 1.0000000 +Ta S + 934.489134729210 1.0000000 +Ta S + 477.230689612032 1.0000000 +Ta S + 243.715119463182 1.0000000 +Ta S + 124.461944187287 1.0000000 +Ta S + 63.5609952513411 1.0000000 +Ta S + 32.4597220758638 1.0000000 +Ta S + 16.5767315800501 1.0000000 +Ta S + 8.46550778330153 1.0000000 +Ta S + 4.32321786011102 1.0000000 +Ta S + 2.20780762884063 1.0000000 +Ta S + 1.12749685157938 1.0000000 +Ta S + 0.575797063890464 1.0000000 +Ta S + 0.294051604951678 1.0000000 +Ta S + 0.150168091845475 1.0000000 +Ta S + 7.668876968794858E-002 1.0000000 +Ta S + 3.916389509898707E-002 1.0000000 +Ta P + 395537.152566831 1.0000000 +Ta P + 201995.358823884 1.0000000 +Ta P + 103156.238855453 1.0000000 +Ta P + 52680.4659115021 1.0000000 +Ta P + 26903.1860742975 1.0000000 +Ta P + 13739.0854166734 1.0000000 +Ta P + 7016.36109438299 1.0000000 +Ta P + 3583.15866840945 1.0000000 +Ta P + 1829.86962476550 1.0000000 +Ta P + 934.489134729210 1.0000000 +Ta P + 477.230689612032 1.0000000 +Ta P + 243.715119463182 1.0000000 +Ta P + 124.461944187287 1.0000000 +Ta P + 63.5609952513411 1.0000000 +Ta P + 32.4597220758638 1.0000000 +Ta P + 16.5767315800501 1.0000000 +Ta P + 8.46550778330153 1.0000000 +Ta P + 4.32321786011102 1.0000000 +Ta P + 2.20780762884063 1.0000000 +Ta P + 1.12749685157938 1.0000000 +Ta P + 0.575797063890464 1.0000000 +Ta P + 0.294051604951678 1.0000000 +Ta P + 0.150168091845475 1.0000000 +Ta D + 13739.0854166734 1.0000000 +Ta D + 7016.36109438300 1.0000000 +Ta D + 3583.15866840946 1.0000000 +Ta D + 1829.86962476550 1.0000000 +Ta D + 934.489134729211 1.0000000 +Ta D + 477.230689612032 1.0000000 +Ta D + 243.715119463182 1.0000000 +Ta D + 124.461944187287 1.0000000 +Ta D + 63.5609952513412 1.0000000 +Ta D + 32.4597220758638 1.0000000 +Ta D + 16.5767315800501 1.0000000 +Ta D + 8.46550778330153 1.0000000 +Ta D + 4.32321786011102 1.0000000 +Ta D + 2.20780762884063 1.0000000 +Ta D + 1.12749685157938 1.0000000 +Ta D + 0.575797063890465 1.0000000 +Ta D + 0.294051604951678 1.0000000 +Ta D + 0.150168091845475 1.0000000 +Ta D + 7.668876968794860E-002 1.0000000 +Ta F + 934.489134729211 1.0000000 +Ta F + 477.230689612032 1.0000000 +Ta F + 243.715119463182 1.0000000 +Ta F + 124.461944187287 1.0000000 +Ta F + 63.5609952513411 1.0000000 +Ta F + 32.4597220758638 1.0000000 +Ta F + 16.5767315800501 1.0000000 +Ta F + 8.46550778330153 1.0000000 +Ta F + 4.32321786011102 1.0000000 +Ta F + 2.20780762884063 1.0000000 +Ta F + 1.12749685157938 1.0000000 +Ta F + 0.575797063890465 1.0000000 +Ta F + 0.294051604951678 1.0000000 +#BASIS SET: (31s,23p,19d,12f) -> [31s,23p,19d,12f] +W S +22297831.7330222 1.0000000 +W S +11387194.5850786 1.0000000 +W S +5815282.94190191 1.0000000 +W S +2969784.65079438 1.0000000 +W S +1516627.98873367 1.0000000 +W S + 774520.959152738 1.0000000 +W S + 395537.152566831 1.0000000 +W S + 201995.358823884 1.0000000 +W S + 103156.238855453 1.0000000 +W S + 52680.4659115021 1.0000000 +W S + 26903.1860742976 1.0000000 +W S + 13739.0854166734 1.0000000 +W S + 7016.36109438299 1.0000000 +W S + 3583.15866840946 1.0000000 +W S + 1829.86962476550 1.0000000 +W S + 934.489134729210 1.0000000 +W S + 477.230689612032 1.0000000 +W S + 243.715119463182 1.0000000 +W S + 124.461944187287 1.0000000 +W S + 63.5609952513411 1.0000000 +W S + 32.4597220758638 1.0000000 +W S + 16.5767315800501 1.0000000 +W S + 8.46550778330153 1.0000000 +W S + 4.32321786011102 1.0000000 +W S + 2.20780762884063 1.0000000 +W S + 1.12749685157938 1.0000000 +W S + 0.575797063890464 1.0000000 +W S + 0.294051604951678 1.0000000 +W S + 0.150168091845475 1.0000000 +W S + 7.668876968794858E-002 1.0000000 +W S + 3.916389509898707E-002 1.0000000 +W P + 395537.152566831 1.0000000 +W P + 201995.358823884 1.0000000 +W P + 103156.238855453 1.0000000 +W P + 52680.4659115021 1.0000000 +W P + 26903.1860742975 1.0000000 +W P + 13739.0854166734 1.0000000 +W P + 7016.36109438299 1.0000000 +W P + 3583.15866840945 1.0000000 +W P + 1829.86962476550 1.0000000 +W P + 934.489134729210 1.0000000 +W P + 477.230689612032 1.0000000 +W P + 243.715119463182 1.0000000 +W P + 124.461944187287 1.0000000 +W P + 63.5609952513411 1.0000000 +W P + 32.4597220758638 1.0000000 +W P + 16.5767315800501 1.0000000 +W P + 8.46550778330153 1.0000000 +W P + 4.32321786011102 1.0000000 +W P + 2.20780762884063 1.0000000 +W P + 1.12749685157938 1.0000000 +W P + 0.575797063890464 1.0000000 +W P + 0.294051604951678 1.0000000 +W P + 0.150168091845475 1.0000000 +W D + 13739.0854166734 1.0000000 +W D + 7016.36109438300 1.0000000 +W D + 3583.15866840946 1.0000000 +W D + 1829.86962476550 1.0000000 +W D + 934.489134729211 1.0000000 +W D + 477.230689612032 1.0000000 +W D + 243.715119463182 1.0000000 +W D + 124.461944187287 1.0000000 +W D + 63.5609952513412 1.0000000 +W D + 32.4597220758638 1.0000000 +W D + 16.5767315800501 1.0000000 +W D + 8.46550778330153 1.0000000 +W D + 4.32321786011102 1.0000000 +W D + 2.20780762884063 1.0000000 +W D + 1.12749685157938 1.0000000 +W D + 0.575797063890465 1.0000000 +W D + 0.294051604951678 1.0000000 +W D + 0.150168091845475 1.0000000 +W D + 7.668876968794860E-002 1.0000000 +W F + 934.489134729210 1.0000000 +W F + 477.230689612032 1.0000000 +W F + 243.715119463182 1.0000000 +W F + 124.461944187287 1.0000000 +W F + 63.5609952513411 1.0000000 +W F + 32.4597220758638 1.0000000 +W F + 16.5767315800501 1.0000000 +W F + 8.46550778330153 1.0000000 +W F + 4.32321786011102 1.0000000 +W F + 2.20780762884063 1.0000000 +W F + 1.12749685157938 1.0000000 +W F + 0.575797063890464 1.0000000 +#BASIS SET: (31s,23p,19d,12f) -> [31s,23p,19d,12f] +Re S +22297831.7330222 1.0000000 +Re S +11387194.5850786 1.0000000 +Re S +5815282.94190191 1.0000000 +Re S +2969784.65079438 1.0000000 +Re S +1516627.98873367 1.0000000 +Re S + 774520.959152738 1.0000000 +Re S + 395537.152566831 1.0000000 +Re S + 201995.358823884 1.0000000 +Re S + 103156.238855453 1.0000000 +Re S + 52680.4659115021 1.0000000 +Re S + 26903.1860742976 1.0000000 +Re S + 13739.0854166734 1.0000000 +Re S + 7016.36109438299 1.0000000 +Re S + 3583.15866840946 1.0000000 +Re S + 1829.86962476550 1.0000000 +Re S + 934.489134729210 1.0000000 +Re S + 477.230689612032 1.0000000 +Re S + 243.715119463182 1.0000000 +Re S + 124.461944187287 1.0000000 +Re S + 63.5609952513411 1.0000000 +Re S + 32.4597220758638 1.0000000 +Re S + 16.5767315800501 1.0000000 +Re S + 8.46550778330153 1.0000000 +Re S + 4.32321786011102 1.0000000 +Re S + 2.20780762884063 1.0000000 +Re S + 1.12749685157938 1.0000000 +Re S + 0.575797063890464 1.0000000 +Re S + 0.294051604951678 1.0000000 +Re S + 0.150168091845475 1.0000000 +Re S + 7.668876968794858E-002 1.0000000 +Re S + 3.916389509898707E-002 1.0000000 +Re P + 395537.152566831 1.0000000 +Re P + 201995.358823884 1.0000000 +Re P + 103156.238855453 1.0000000 +Re P + 52680.4659115021 1.0000000 +Re P + 26903.1860742975 1.0000000 +Re P + 13739.0854166734 1.0000000 +Re P + 7016.36109438299 1.0000000 +Re P + 3583.15866840945 1.0000000 +Re P + 1829.86962476550 1.0000000 +Re P + 934.489134729210 1.0000000 +Re P + 477.230689612032 1.0000000 +Re P + 243.715119463182 1.0000000 +Re P + 124.461944187287 1.0000000 +Re P + 63.5609952513411 1.0000000 +Re P + 32.4597220758638 1.0000000 +Re P + 16.5767315800501 1.0000000 +Re P + 8.46550778330153 1.0000000 +Re P + 4.32321786011102 1.0000000 +Re P + 2.20780762884063 1.0000000 +Re P + 1.12749685157938 1.0000000 +Re P + 0.575797063890464 1.0000000 +Re P + 0.294051604951678 1.0000000 +Re P + 0.150168091845475 1.0000000 +Re D + 13739.0854166734 1.0000000 +Re D + 7016.36109438300 1.0000000 +Re D + 3583.15866840946 1.0000000 +Re D + 1829.86962476550 1.0000000 +Re D + 934.489134729211 1.0000000 +Re D + 477.230689612032 1.0000000 +Re D + 243.715119463182 1.0000000 +Re D + 124.461944187287 1.0000000 +Re D + 63.5609952513412 1.0000000 +Re D + 32.4597220758638 1.0000000 +Re D + 16.5767315800501 1.0000000 +Re D + 8.46550778330153 1.0000000 +Re D + 4.32321786011102 1.0000000 +Re D + 2.20780762884063 1.0000000 +Re D + 1.12749685157938 1.0000000 +Re D + 0.575797063890465 1.0000000 +Re D + 0.294051604951678 1.0000000 +Re D + 0.150168091845475 1.0000000 +Re D + 7.668876968794860E-002 1.0000000 +Re F + 934.489134729210 1.0000000 +Re F + 477.230689612032 1.0000000 +Re F + 243.715119463182 1.0000000 +Re F + 124.461944187287 1.0000000 +Re F + 63.5609952513411 1.0000000 +Re F + 32.4597220758638 1.0000000 +Re F + 16.5767315800501 1.0000000 +Re F + 8.46550778330153 1.0000000 +Re F + 4.32321786011102 1.0000000 +Re F + 2.20780762884063 1.0000000 +Re F + 1.12749685157938 1.0000000 +Re F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,23p,18d,12f) -> [32s,23p,18d,12f] +Os S +22297831.7330222 1.0000000 +Os S +11387194.5850786 1.0000000 +Os S +5815282.94190191 1.0000000 +Os S +2969784.65079438 1.0000000 +Os S +1516627.98873367 1.0000000 +Os S + 774520.959152735 1.0000000 +Os S + 395537.152566831 1.0000000 +Os S + 201995.358823884 1.0000000 +Os S + 103156.238855453 1.0000000 +Os S + 52680.4659115021 1.0000000 +Os S + 26903.1860742975 1.0000000 +Os S + 13739.0854166734 1.0000000 +Os S + 7016.36109438299 1.0000000 +Os S + 3583.15866840945 1.0000000 +Os S + 1829.86962476550 1.0000000 +Os S + 934.489134729211 1.0000000 +Os S + 477.230689612032 1.0000000 +Os S + 243.715119463182 1.0000000 +Os S + 124.461944187287 1.0000000 +Os S + 63.5609952513411 1.0000000 +Os S + 32.4597220758638 1.0000000 +Os S + 16.5767315800501 1.0000000 +Os S + 8.46550778330153 1.0000000 +Os S + 4.32321786011102 1.0000000 +Os S + 2.20780762884063 1.0000000 +Os S + 1.12749685157938 1.0000000 +Os S + 0.575797063890465 1.0000000 +Os S + 0.294051604951678 1.0000000 +Os S + 0.150168091845475 1.0000000 +Os S + 7.668876968794858E-002 1.0000000 +Os S + 3.916389509898707E-002 1.0000000 +Os S + 2.000046011385546E-002 1.0000000 +Os P + 395537.152566831 1.0000000 +Os P + 201995.358823884 1.0000000 +Os P + 103156.238855453 1.0000000 +Os P + 52680.4659115021 1.0000000 +Os P + 26903.1860742975 1.0000000 +Os P + 13739.0854166734 1.0000000 +Os P + 7016.36109438299 1.0000000 +Os P + 3583.15866840945 1.0000000 +Os P + 1829.86962476550 1.0000000 +Os P + 934.489134729210 1.0000000 +Os P + 477.230689612032 1.0000000 +Os P + 243.715119463182 1.0000000 +Os P + 124.461944187287 1.0000000 +Os P + 63.5609952513411 1.0000000 +Os P + 32.4597220758638 1.0000000 +Os P + 16.5767315800501 1.0000000 +Os P + 8.46550778330153 1.0000000 +Os P + 4.32321786011102 1.0000000 +Os P + 2.20780762884063 1.0000000 +Os P + 1.12749685157938 1.0000000 +Os P + 0.575797063890464 1.0000000 +Os P + 0.294051604951678 1.0000000 +Os P + 0.150168091845475 1.0000000 +Os D + 7016.36109438300 1.0000000 +Os D + 3583.15866840946 1.0000000 +Os D + 1829.86962476550 1.0000000 +Os D + 934.489134729211 1.0000000 +Os D + 477.230689612032 1.0000000 +Os D + 243.715119463182 1.0000000 +Os D + 124.461944187287 1.0000000 +Os D + 63.5609952513412 1.0000000 +Os D + 32.4597220758638 1.0000000 +Os D + 16.5767315800501 1.0000000 +Os D + 8.46550778330153 1.0000000 +Os D + 4.32321786011102 1.0000000 +Os D + 2.20780762884063 1.0000000 +Os D + 1.12749685157938 1.0000000 +Os D + 0.575797063890465 1.0000000 +Os D + 0.294051604951678 1.0000000 +Os D + 0.150168091845475 1.0000000 +Os D + 7.668876968794860E-002 1.0000000 +Os F + 934.489134729210 1.0000000 +Os F + 477.230689612032 1.0000000 +Os F + 243.715119463182 1.0000000 +Os F + 124.461944187287 1.0000000 +Os F + 63.5609952513411 1.0000000 +Os F + 32.4597220758638 1.0000000 +Os F + 16.5767315800501 1.0000000 +Os F + 8.46550778330153 1.0000000 +Os F + 4.32321786011102 1.0000000 +Os F + 2.20780762884063 1.0000000 +Os F + 1.12749685157938 1.0000000 +Os F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,22p,18d,13f) -> [32s,22p,18d,13f] +Ir S +43662492.6604555 1.0000000 +Ir S +22297831.7330222 1.0000000 +Ir S +11387194.5850786 1.0000000 +Ir S +5815282.94190191 1.0000000 +Ir S +2969784.65079438 1.0000000 +Ir S +1516627.98873367 1.0000000 +Ir S + 774520.959152738 1.0000000 +Ir S + 395537.152566831 1.0000000 +Ir S + 201995.358823884 1.0000000 +Ir S + 103156.238855453 1.0000000 +Ir S + 52680.4659115021 1.0000000 +Ir S + 26903.1860742976 1.0000000 +Ir S + 13739.0854166734 1.0000000 +Ir S + 7016.36109438299 1.0000000 +Ir S + 3583.15866840946 1.0000000 +Ir S + 1829.86962476550 1.0000000 +Ir S + 934.489134729210 1.0000000 +Ir S + 477.230689612032 1.0000000 +Ir S + 243.715119463182 1.0000000 +Ir S + 124.461944187287 1.0000000 +Ir S + 63.5609952513411 1.0000000 +Ir S + 32.4597220758638 1.0000000 +Ir S + 16.5767315800501 1.0000000 +Ir S + 8.46550778330153 1.0000000 +Ir S + 4.32321786011102 1.0000000 +Ir S + 2.20780762884063 1.0000000 +Ir S + 1.12749685157938 1.0000000 +Ir S + 0.575797063890464 1.0000000 +Ir S + 0.294051604951678 1.0000000 +Ir S + 0.150168091845475 1.0000000 +Ir S + 7.668876968794858E-002 1.0000000 +Ir S + 3.916389509898707E-002 1.0000000 +Ir P + 103156.238855453 1.0000000 +Ir P + 52680.4659115022 1.0000000 +Ir P + 26903.1860742976 1.0000000 +Ir P + 13739.0854166734 1.0000000 +Ir P + 7016.36109438300 1.0000000 +Ir P + 3583.15866840946 1.0000000 +Ir P + 1829.86962476550 1.0000000 +Ir P + 934.489134729211 1.0000000 +Ir P + 477.230689612032 1.0000000 +Ir P + 243.715119463182 1.0000000 +Ir P + 124.461944187287 1.0000000 +Ir P + 63.5609952513412 1.0000000 +Ir P + 32.4597220758638 1.0000000 +Ir P + 16.5767315800501 1.0000000 +Ir P + 8.46550778330153 1.0000000 +Ir P + 4.32321786011102 1.0000000 +Ir P + 2.20780762884063 1.0000000 +Ir P + 1.12749685157938 1.0000000 +Ir P + 0.575797063890465 1.0000000 +Ir P + 0.294051604951678 1.0000000 +Ir P + 0.150168091845475 1.0000000 +Ir P + 7.668876968794860E-002 1.0000000 +Ir D + 13739.0854166734 1.0000000 +Ir D + 7016.36109438299 1.0000000 +Ir D + 3583.15866840945 1.0000000 +Ir D + 1829.86962476550 1.0000000 +Ir D + 934.489134729210 1.0000000 +Ir D + 477.230689612032 1.0000000 +Ir D + 243.715119463182 1.0000000 +Ir D + 124.461944187287 1.0000000 +Ir D + 63.5609952513411 1.0000000 +Ir D + 32.4597220758638 1.0000000 +Ir D + 16.5767315800501 1.0000000 +Ir D + 8.46550778330153 1.0000000 +Ir D + 4.32321786011102 1.0000000 +Ir D + 2.20780762884063 1.0000000 +Ir D + 1.12749685157938 1.0000000 +Ir D + 0.575797063890464 1.0000000 +Ir D + 0.294051604951678 1.0000000 +Ir D + 0.150168091845475 1.0000000 +Ir F + 1829.86962476550 1.0000000 +Ir F + 934.489134729210 1.0000000 +Ir F + 477.230689612032 1.0000000 +Ir F + 243.715119463182 1.0000000 +Ir F + 124.461944187287 1.0000000 +Ir F + 63.5609952513411 1.0000000 +Ir F + 32.4597220758638 1.0000000 +Ir F + 16.5767315800501 1.0000000 +Ir F + 8.46550778330153 1.0000000 +Ir F + 4.32321786011102 1.0000000 +Ir F + 2.20780762884063 1.0000000 +Ir F + 1.12749685157938 1.0000000 +Ir F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,23p,18d,13f) -> [32s,23p,18d,13f] +Pt S +43662492.6604555 1.0000000 +Pt S +22297831.7330222 1.0000000 +Pt S +11387194.5850786 1.0000000 +Pt S +5815282.94190191 1.0000000 +Pt S +2969784.65079438 1.0000000 +Pt S +1516627.98873367 1.0000000 +Pt S + 774520.959152738 1.0000000 +Pt S + 395537.152566831 1.0000000 +Pt S + 201995.358823884 1.0000000 +Pt S + 103156.238855453 1.0000000 +Pt S + 52680.4659115021 1.0000000 +Pt S + 26903.1860742976 1.0000000 +Pt S + 13739.0854166734 1.0000000 +Pt S + 7016.36109438299 1.0000000 +Pt S + 3583.15866840946 1.0000000 +Pt S + 1829.86962476550 1.0000000 +Pt S + 934.489134729210 1.0000000 +Pt S + 477.230689612032 1.0000000 +Pt S + 243.715119463182 1.0000000 +Pt S + 124.461944187287 1.0000000 +Pt S + 63.5609952513411 1.0000000 +Pt S + 32.4597220758638 1.0000000 +Pt S + 16.5767315800501 1.0000000 +Pt S + 8.46550778330153 1.0000000 +Pt S + 4.32321786011102 1.0000000 +Pt S + 2.20780762884063 1.0000000 +Pt S + 1.12749685157938 1.0000000 +Pt S + 0.575797063890464 1.0000000 +Pt S + 0.294051604951678 1.0000000 +Pt S + 0.150168091845475 1.0000000 +Pt S + 7.668876968794858E-002 1.0000000 +Pt S + 3.916389509898707E-002 1.0000000 +Pt P + 395537.152566831 1.0000000 +Pt P + 201995.358823884 1.0000000 +Pt P + 103156.238855453 1.0000000 +Pt P + 52680.4659115021 1.0000000 +Pt P + 26903.1860742975 1.0000000 +Pt P + 13739.0854166734 1.0000000 +Pt P + 7016.36109438299 1.0000000 +Pt P + 3583.15866840945 1.0000000 +Pt P + 1829.86962476550 1.0000000 +Pt P + 934.489134729210 1.0000000 +Pt P + 477.230689612032 1.0000000 +Pt P + 243.715119463182 1.0000000 +Pt P + 124.461944187287 1.0000000 +Pt P + 63.5609952513411 1.0000000 +Pt P + 32.4597220758638 1.0000000 +Pt P + 16.5767315800501 1.0000000 +Pt P + 8.46550778330153 1.0000000 +Pt P + 4.32321786011102 1.0000000 +Pt P + 2.20780762884063 1.0000000 +Pt P + 1.12749685157938 1.0000000 +Pt P + 0.575797063890464 1.0000000 +Pt P + 0.294051604951678 1.0000000 +Pt P + 0.150168091845475 1.0000000 +Pt D + 7016.36109438300 1.0000000 +Pt D + 3583.15866840946 1.0000000 +Pt D + 1829.86962476550 1.0000000 +Pt D + 934.489134729211 1.0000000 +Pt D + 477.230689612032 1.0000000 +Pt D + 243.715119463182 1.0000000 +Pt D + 124.461944187287 1.0000000 +Pt D + 63.5609952513412 1.0000000 +Pt D + 32.4597220758638 1.0000000 +Pt D + 16.5767315800501 1.0000000 +Pt D + 8.46550778330153 1.0000000 +Pt D + 4.32321786011102 1.0000000 +Pt D + 2.20780762884063 1.0000000 +Pt D + 1.12749685157938 1.0000000 +Pt D + 0.575797063890465 1.0000000 +Pt D + 0.294051604951678 1.0000000 +Pt D + 0.150168091845475 1.0000000 +Pt D + 7.668876968794860E-002 1.0000000 +Pt F + 1829.86962476550 1.0000000 +Pt F + 934.489134729210 1.0000000 +Pt F + 477.230689612032 1.0000000 +Pt F + 243.715119463182 1.0000000 +Pt F + 124.461944187287 1.0000000 +Pt F + 63.5609952513411 1.0000000 +Pt F + 32.4597220758638 1.0000000 +Pt F + 16.5767315800501 1.0000000 +Pt F + 8.46550778330153 1.0000000 +Pt F + 4.32321786011102 1.0000000 +Pt F + 2.20780762884063 1.0000000 +Pt F + 1.12749685157938 1.0000000 +Pt F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,22p,18d,12f) -> [32s,22p,18d,12f] +Au S +43662492.6604555 1.0000000 +Au S +22297831.7330222 1.0000000 +Au S +11387194.5850786 1.0000000 +Au S +5815282.94190191 1.0000000 +Au S +2969784.65079438 1.0000000 +Au S +1516627.98873367 1.0000000 +Au S + 774520.959152738 1.0000000 +Au S + 395537.152566831 1.0000000 +Au S + 201995.358823884 1.0000000 +Au S + 103156.238855453 1.0000000 +Au S + 52680.4659115021 1.0000000 +Au S + 26903.1860742976 1.0000000 +Au S + 13739.0854166734 1.0000000 +Au S + 7016.36109438299 1.0000000 +Au S + 3583.15866840946 1.0000000 +Au S + 1829.86962476550 1.0000000 +Au S + 934.489134729210 1.0000000 +Au S + 477.230689612032 1.0000000 +Au S + 243.715119463182 1.0000000 +Au S + 124.461944187287 1.0000000 +Au S + 63.5609952513411 1.0000000 +Au S + 32.4597220758638 1.0000000 +Au S + 16.5767315800501 1.0000000 +Au S + 8.46550778330153 1.0000000 +Au S + 4.32321786011102 1.0000000 +Au S + 2.20780762884063 1.0000000 +Au S + 1.12749685157938 1.0000000 +Au S + 0.575797063890464 1.0000000 +Au S + 0.294051604951678 1.0000000 +Au S + 0.150168091845475 1.0000000 +Au S + 7.668876968794858E-002 1.0000000 +Au S + 3.916389509898707E-002 1.0000000 +Au P + 201995.358823884 1.0000000 +Au P + 103156.238855453 1.0000000 +Au P + 52680.4659115021 1.0000000 +Au P + 26903.1860742975 1.0000000 +Au P + 13739.0854166734 1.0000000 +Au P + 7016.36109438299 1.0000000 +Au P + 3583.15866840945 1.0000000 +Au P + 1829.86962476550 1.0000000 +Au P + 934.489134729210 1.0000000 +Au P + 477.230689612032 1.0000000 +Au P + 243.715119463182 1.0000000 +Au P + 124.461944187287 1.0000000 +Au P + 63.5609952513411 1.0000000 +Au P + 32.4597220758638 1.0000000 +Au P + 16.5767315800501 1.0000000 +Au P + 8.46550778330153 1.0000000 +Au P + 4.32321786011102 1.0000000 +Au P + 2.20780762884063 1.0000000 +Au P + 1.12749685157938 1.0000000 +Au P + 0.575797063890464 1.0000000 +Au P + 0.294051604951678 1.0000000 +Au P + 0.150168091845475 1.0000000 +Au D + 13739.0854166734 1.0000000 +Au D + 7016.36109438299 1.0000000 +Au D + 3583.15866840945 1.0000000 +Au D + 1829.86962476550 1.0000000 +Au D + 934.489134729210 1.0000000 +Au D + 477.230689612032 1.0000000 +Au D + 243.715119463182 1.0000000 +Au D + 124.461944187287 1.0000000 +Au D + 63.5609952513411 1.0000000 +Au D + 32.4597220758638 1.0000000 +Au D + 16.5767315800501 1.0000000 +Au D + 8.46550778330153 1.0000000 +Au D + 4.32321786011102 1.0000000 +Au D + 2.20780762884063 1.0000000 +Au D + 1.12749685157938 1.0000000 +Au D + 0.575797063890464 1.0000000 +Au D + 0.294051604951678 1.0000000 +Au D + 0.150168091845475 1.0000000 +Au F + 934.489134729210 1.0000000 +Au F + 477.230689612032 1.0000000 +Au F + 243.715119463182 1.0000000 +Au F + 124.461944187287 1.0000000 +Au F + 63.5609952513411 1.0000000 +Au F + 32.4597220758638 1.0000000 +Au F + 16.5767315800501 1.0000000 +Au F + 8.46550778330153 1.0000000 +Au F + 4.32321786011102 1.0000000 +Au F + 2.20780762884063 1.0000000 +Au F + 1.12749685157938 1.0000000 +Au F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,23p,17d,13f) -> [32s,23p,17d,13f] +Hg S +43662492.6604555 1.0000000 +Hg S +22297831.7330222 1.0000000 +Hg S +11387194.5850786 1.0000000 +Hg S +5815282.94190191 1.0000000 +Hg S +2969784.65079438 1.0000000 +Hg S +1516627.98873367 1.0000000 +Hg S + 774520.959152738 1.0000000 +Hg S + 395537.152566831 1.0000000 +Hg S + 201995.358823884 1.0000000 +Hg S + 103156.238855453 1.0000000 +Hg S + 52680.4659115021 1.0000000 +Hg S + 26903.1860742976 1.0000000 +Hg S + 13739.0854166734 1.0000000 +Hg S + 7016.36109438299 1.0000000 +Hg S + 3583.15866840946 1.0000000 +Hg S + 1829.86962476550 1.0000000 +Hg S + 934.489134729210 1.0000000 +Hg S + 477.230689612032 1.0000000 +Hg S + 243.715119463182 1.0000000 +Hg S + 124.461944187287 1.0000000 +Hg S + 63.5609952513411 1.0000000 +Hg S + 32.4597220758638 1.0000000 +Hg S + 16.5767315800501 1.0000000 +Hg S + 8.46550778330153 1.0000000 +Hg S + 4.32321786011102 1.0000000 +Hg S + 2.20780762884063 1.0000000 +Hg S + 1.12749685157938 1.0000000 +Hg S + 0.575797063890464 1.0000000 +Hg S + 0.294051604951678 1.0000000 +Hg S + 0.150168091845475 1.0000000 +Hg S + 7.668876968794858E-002 1.0000000 +Hg S + 3.916389509898707E-002 1.0000000 +Hg P + 395537.152566831 1.0000000 +Hg P + 201995.358823884 1.0000000 +Hg P + 103156.238855453 1.0000000 +Hg P + 52680.4659115021 1.0000000 +Hg P + 26903.1860742975 1.0000000 +Hg P + 13739.0854166734 1.0000000 +Hg P + 7016.36109438299 1.0000000 +Hg P + 3583.15866840945 1.0000000 +Hg P + 1829.86962476550 1.0000000 +Hg P + 934.489134729210 1.0000000 +Hg P + 477.230689612032 1.0000000 +Hg P + 243.715119463182 1.0000000 +Hg P + 124.461944187287 1.0000000 +Hg P + 63.5609952513411 1.0000000 +Hg P + 32.4597220758638 1.0000000 +Hg P + 16.5767315800501 1.0000000 +Hg P + 8.46550778330153 1.0000000 +Hg P + 4.32321786011102 1.0000000 +Hg P + 2.20780762884063 1.0000000 +Hg P + 1.12749685157938 1.0000000 +Hg P + 0.575797063890464 1.0000000 +Hg P + 0.294051604951678 1.0000000 +Hg P + 0.150168091845475 1.0000000 +Hg D + 7016.36109438299 1.0000000 +Hg D + 3583.15866840945 1.0000000 +Hg D + 1829.86962476550 1.0000000 +Hg D + 934.489134729210 1.0000000 +Hg D + 477.230689612032 1.0000000 +Hg D + 243.715119463182 1.0000000 +Hg D + 124.461944187287 1.0000000 +Hg D + 63.5609952513411 1.0000000 +Hg D + 32.4597220758638 1.0000000 +Hg D + 16.5767315800501 1.0000000 +Hg D + 8.46550778330153 1.0000000 +Hg D + 4.32321786011102 1.0000000 +Hg D + 2.20780762884063 1.0000000 +Hg D + 1.12749685157938 1.0000000 +Hg D + 0.575797063890464 1.0000000 +Hg D + 0.294051604951678 1.0000000 +Hg D + 0.150168091845475 1.0000000 +Hg F + 1829.86962476550 1.0000000 +Hg F + 934.489134729210 1.0000000 +Hg F + 477.230689612032 1.0000000 +Hg F + 243.715119463182 1.0000000 +Hg F + 124.461944187287 1.0000000 +Hg F + 63.5609952513411 1.0000000 +Hg F + 32.4597220758638 1.0000000 +Hg F + 16.5767315800501 1.0000000 +Hg F + 8.46550778330153 1.0000000 +Hg F + 4.32321786011102 1.0000000 +Hg F + 2.20780762884063 1.0000000 +Hg F + 1.12749685157938 1.0000000 +Hg F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,23p,18d,13f) -> [32s,23p,18d,13f] +Tl S +43662492.6604555 1.0000000 +Tl S +22297831.7330222 1.0000000 +Tl S +11387194.5850786 1.0000000 +Tl S +5815282.94190191 1.0000000 +Tl S +2969784.65079438 1.0000000 +Tl S +1516627.98873367 1.0000000 +Tl S + 774520.959152738 1.0000000 +Tl S + 395537.152566831 1.0000000 +Tl S + 201995.358823884 1.0000000 +Tl S + 103156.238855453 1.0000000 +Tl S + 52680.4659115021 1.0000000 +Tl S + 26903.1860742976 1.0000000 +Tl S + 13739.0854166734 1.0000000 +Tl S + 7016.36109438299 1.0000000 +Tl S + 3583.15866840946 1.0000000 +Tl S + 1829.86962476550 1.0000000 +Tl S + 934.489134729210 1.0000000 +Tl S + 477.230689612032 1.0000000 +Tl S + 243.715119463182 1.0000000 +Tl S + 124.461944187287 1.0000000 +Tl S + 63.5609952513411 1.0000000 +Tl S + 32.4597220758638 1.0000000 +Tl S + 16.5767315800501 1.0000000 +Tl S + 8.46550778330153 1.0000000 +Tl S + 4.32321786011102 1.0000000 +Tl S + 2.20780762884063 1.0000000 +Tl S + 1.12749685157938 1.0000000 +Tl S + 0.575797063890464 1.0000000 +Tl S + 0.294051604951678 1.0000000 +Tl S + 0.150168091845475 1.0000000 +Tl S + 7.668876968794858E-002 1.0000000 +Tl S + 3.916389509898707E-002 1.0000000 +Tl P + 103156.238855453 1.0000000 +Tl P + 52680.4659115021 1.0000000 +Tl P + 26903.1860742976 1.0000000 +Tl P + 13739.0854166734 1.0000000 +Tl P + 7016.36109438299 1.0000000 +Tl P + 3583.15866840946 1.0000000 +Tl P + 1829.86962476550 1.0000000 +Tl P + 934.489134729210 1.0000000 +Tl P + 477.230689612032 1.0000000 +Tl P + 243.715119463182 1.0000000 +Tl P + 124.461944187287 1.0000000 +Tl P + 63.5609952513411 1.0000000 +Tl P + 32.4597220758638 1.0000000 +Tl P + 16.5767315800501 1.0000000 +Tl P + 8.46550778330153 1.0000000 +Tl P + 4.32321786011102 1.0000000 +Tl P + 2.20780762884063 1.0000000 +Tl P + 1.12749685157938 1.0000000 +Tl P + 0.575797063890464 1.0000000 +Tl P + 0.294051604951678 1.0000000 +Tl P + 0.150168091845475 1.0000000 +Tl P + 7.668876968794858E-002 1.0000000 +Tl P + 3.916389509898707E-002 1.0000000 +Tl D + 13739.0854166734 1.0000000 +Tl D + 7016.36109438299 1.0000000 +Tl D + 3583.15866840945 1.0000000 +Tl D + 1829.86962476550 1.0000000 +Tl D + 934.489134729210 1.0000000 +Tl D + 477.230689612032 1.0000000 +Tl D + 243.715119463182 1.0000000 +Tl D + 124.461944187287 1.0000000 +Tl D + 63.5609952513411 1.0000000 +Tl D + 32.4597220758638 1.0000000 +Tl D + 16.5767315800501 1.0000000 +Tl D + 8.46550778330153 1.0000000 +Tl D + 4.32321786011102 1.0000000 +Tl D + 2.20780762884063 1.0000000 +Tl D + 1.12749685157938 1.0000000 +Tl D + 0.575797063890464 1.0000000 +Tl D + 0.294051604951678 1.0000000 +Tl D + 0.150168091845475 1.0000000 +Tl F + 1829.86962476550 1.0000000 +Tl F + 934.489134729210 1.0000000 +Tl F + 477.230689612032 1.0000000 +Tl F + 243.715119463182 1.0000000 +Tl F + 124.461944187287 1.0000000 +Tl F + 63.5609952513411 1.0000000 +Tl F + 32.4597220758638 1.0000000 +Tl F + 16.5767315800501 1.0000000 +Tl F + 8.46550778330153 1.0000000 +Tl F + 4.32321786011102 1.0000000 +Tl F + 2.20780762884063 1.0000000 +Tl F + 1.12749685157938 1.0000000 +Tl F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,23p,17d,13f) -> [32s,23p,17d,13f] +Pb S +43662492.6604555 1.0000000 +Pb S +22297831.7330222 1.0000000 +Pb S +11387194.5850786 1.0000000 +Pb S +5815282.94190191 1.0000000 +Pb S +2969784.65079438 1.0000000 +Pb S +1516627.98873367 1.0000000 +Pb S + 774520.959152738 1.0000000 +Pb S + 395537.152566831 1.0000000 +Pb S + 201995.358823884 1.0000000 +Pb S + 103156.238855453 1.0000000 +Pb S + 52680.4659115021 1.0000000 +Pb S + 26903.1860742976 1.0000000 +Pb S + 13739.0854166734 1.0000000 +Pb S + 7016.36109438299 1.0000000 +Pb S + 3583.15866840946 1.0000000 +Pb S + 1829.86962476550 1.0000000 +Pb S + 934.489134729210 1.0000000 +Pb S + 477.230689612032 1.0000000 +Pb S + 243.715119463182 1.0000000 +Pb S + 124.461944187287 1.0000000 +Pb S + 63.5609952513411 1.0000000 +Pb S + 32.4597220758638 1.0000000 +Pb S + 16.5767315800501 1.0000000 +Pb S + 8.46550778330153 1.0000000 +Pb S + 4.32321786011102 1.0000000 +Pb S + 2.20780762884063 1.0000000 +Pb S + 1.12749685157938 1.0000000 +Pb S + 0.575797063890464 1.0000000 +Pb S + 0.294051604951678 1.0000000 +Pb S + 0.150168091845475 1.0000000 +Pb S + 7.668876968794858E-002 1.0000000 +Pb S + 3.916389509898707E-002 1.0000000 +Pb P + 103156.238855453 1.0000000 +Pb P + 52680.4659115021 1.0000000 +Pb P + 26903.1860742976 1.0000000 +Pb P + 13739.0854166734 1.0000000 +Pb P + 7016.36109438299 1.0000000 +Pb P + 3583.15866840946 1.0000000 +Pb P + 1829.86962476550 1.0000000 +Pb P + 934.489134729210 1.0000000 +Pb P + 477.230689612032 1.0000000 +Pb P + 243.715119463182 1.0000000 +Pb P + 124.461944187287 1.0000000 +Pb P + 63.5609952513411 1.0000000 +Pb P + 32.4597220758638 1.0000000 +Pb P + 16.5767315800501 1.0000000 +Pb P + 8.46550778330153 1.0000000 +Pb P + 4.32321786011102 1.0000000 +Pb P + 2.20780762884063 1.0000000 +Pb P + 1.12749685157938 1.0000000 +Pb P + 0.575797063890464 1.0000000 +Pb P + 0.294051604951678 1.0000000 +Pb P + 0.150168091845475 1.0000000 +Pb P + 7.668876968794858E-002 1.0000000 +Pb P + 3.916389509898707E-002 1.0000000 +Pb D + 7016.36109438299 1.0000000 +Pb D + 3583.15866840945 1.0000000 +Pb D + 1829.86962476550 1.0000000 +Pb D + 934.489134729210 1.0000000 +Pb D + 477.230689612032 1.0000000 +Pb D + 243.715119463182 1.0000000 +Pb D + 124.461944187287 1.0000000 +Pb D + 63.5609952513411 1.0000000 +Pb D + 32.4597220758638 1.0000000 +Pb D + 16.5767315800501 1.0000000 +Pb D + 8.46550778330153 1.0000000 +Pb D + 4.32321786011102 1.0000000 +Pb D + 2.20780762884063 1.0000000 +Pb D + 1.12749685157938 1.0000000 +Pb D + 0.575797063890464 1.0000000 +Pb D + 0.294051604951678 1.0000000 +Pb D + 0.150168091845475 1.0000000 +Pb F + 1829.86962476550 1.0000000 +Pb F + 934.489134729210 1.0000000 +Pb F + 477.230689612032 1.0000000 +Pb F + 243.715119463182 1.0000000 +Pb F + 124.461944187287 1.0000000 +Pb F + 63.5609952513411 1.0000000 +Pb F + 32.4597220758638 1.0000000 +Pb F + 16.5767315800501 1.0000000 +Pb F + 8.46550778330153 1.0000000 +Pb F + 4.32321786011102 1.0000000 +Pb F + 2.20780762884063 1.0000000 +Pb F + 1.12749685157938 1.0000000 +Pb F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,25p,17d,12f) -> [32s,25p,17d,12f] +Bi S +43662492.6604555 1.0000000 +Bi S +22297831.7330222 1.0000000 +Bi S +11387194.5850786 1.0000000 +Bi S +5815282.94190191 1.0000000 +Bi S +2969784.65079438 1.0000000 +Bi S +1516627.98873367 1.0000000 +Bi S + 774520.959152738 1.0000000 +Bi S + 395537.152566831 1.0000000 +Bi S + 201995.358823884 1.0000000 +Bi S + 103156.238855453 1.0000000 +Bi S + 52680.4659115021 1.0000000 +Bi S + 26903.1860742976 1.0000000 +Bi S + 13739.0854166734 1.0000000 +Bi S + 7016.36109438299 1.0000000 +Bi S + 3583.15866840946 1.0000000 +Bi S + 1829.86962476550 1.0000000 +Bi S + 934.489134729210 1.0000000 +Bi S + 477.230689612032 1.0000000 +Bi S + 243.715119463182 1.0000000 +Bi S + 124.461944187287 1.0000000 +Bi S + 63.5609952513411 1.0000000 +Bi S + 32.4597220758638 1.0000000 +Bi S + 16.5767315800501 1.0000000 +Bi S + 8.46550778330153 1.0000000 +Bi S + 4.32321786011102 1.0000000 +Bi S + 2.20780762884063 1.0000000 +Bi S + 1.12749685157938 1.0000000 +Bi S + 0.575797063890464 1.0000000 +Bi S + 0.294051604951678 1.0000000 +Bi S + 0.150168091845475 1.0000000 +Bi S + 7.668876968794858E-002 1.0000000 +Bi S + 3.916389509898707E-002 1.0000000 +Bi P + 395537.152566831 1.0000000 +Bi P + 201995.358823884 1.0000000 +Bi P + 103156.238855453 1.0000000 +Bi P + 52680.4659115021 1.0000000 +Bi P + 26903.1860742976 1.0000000 +Bi P + 13739.0854166734 1.0000000 +Bi P + 7016.36109438299 1.0000000 +Bi P + 3583.15866840946 1.0000000 +Bi P + 1829.86962476550 1.0000000 +Bi P + 934.489134729210 1.0000000 +Bi P + 477.230689612032 1.0000000 +Bi P + 243.715119463182 1.0000000 +Bi P + 124.461944187287 1.0000000 +Bi P + 63.5609952513411 1.0000000 +Bi P + 32.4597220758638 1.0000000 +Bi P + 16.5767315800501 1.0000000 +Bi P + 8.46550778330153 1.0000000 +Bi P + 4.32321786011102 1.0000000 +Bi P + 2.20780762884063 1.0000000 +Bi P + 1.12749685157938 1.0000000 +Bi P + 0.575797063890464 1.0000000 +Bi P + 0.294051604951678 1.0000000 +Bi P + 0.150168091845475 1.0000000 +Bi P + 7.668876968794858E-002 1.0000000 +Bi P + 3.916389509898707E-002 1.0000000 +Bi D + 7016.36109438299 1.0000000 +Bi D + 3583.15866840945 1.0000000 +Bi D + 1829.86962476550 1.0000000 +Bi D + 934.489134729210 1.0000000 +Bi D + 477.230689612032 1.0000000 +Bi D + 243.715119463182 1.0000000 +Bi D + 124.461944187287 1.0000000 +Bi D + 63.5609952513411 1.0000000 +Bi D + 32.4597220758638 1.0000000 +Bi D + 16.5767315800501 1.0000000 +Bi D + 8.46550778330153 1.0000000 +Bi D + 4.32321786011102 1.0000000 +Bi D + 2.20780762884063 1.0000000 +Bi D + 1.12749685157938 1.0000000 +Bi D + 0.575797063890464 1.0000000 +Bi D + 0.294051604951678 1.0000000 +Bi D + 0.150168091845475 1.0000000 +Bi F + 1829.86962476550 1.0000000 +Bi F + 934.489134729211 1.0000000 +Bi F + 477.230689612032 1.0000000 +Bi F + 243.715119463182 1.0000000 +Bi F + 124.461944187287 1.0000000 +Bi F + 63.5609952513411 1.0000000 +Bi F + 32.4597220758638 1.0000000 +Bi F + 16.5767315800501 1.0000000 +Bi F + 8.46550778330153 1.0000000 +Bi F + 4.32321786011102 1.0000000 +Bi F + 2.20780762884063 1.0000000 +Bi F + 1.12749685157938 1.0000000 +#BASIS SET: (32s,23p,18d,13f) -> [32s,23p,18d,13f] +Po S +43662492.6604555 1.0000000 +Po S +22297831.7330222 1.0000000 +Po S +11387194.5850786 1.0000000 +Po S +5815282.94190191 1.0000000 +Po S +2969784.65079438 1.0000000 +Po S +1516627.98873367 1.0000000 +Po S + 774520.959152738 1.0000000 +Po S + 395537.152566831 1.0000000 +Po S + 201995.358823884 1.0000000 +Po S + 103156.238855453 1.0000000 +Po S + 52680.4659115021 1.0000000 +Po S + 26903.1860742976 1.0000000 +Po S + 13739.0854166734 1.0000000 +Po S + 7016.36109438299 1.0000000 +Po S + 3583.15866840946 1.0000000 +Po S + 1829.86962476550 1.0000000 +Po S + 934.489134729210 1.0000000 +Po S + 477.230689612032 1.0000000 +Po S + 243.715119463182 1.0000000 +Po S + 124.461944187287 1.0000000 +Po S + 63.5609952513411 1.0000000 +Po S + 32.4597220758638 1.0000000 +Po S + 16.5767315800501 1.0000000 +Po S + 8.46550778330153 1.0000000 +Po S + 4.32321786011102 1.0000000 +Po S + 2.20780762884063 1.0000000 +Po S + 1.12749685157938 1.0000000 +Po S + 0.575797063890464 1.0000000 +Po S + 0.294051604951678 1.0000000 +Po S + 0.150168091845475 1.0000000 +Po S + 7.668876968794858E-002 1.0000000 +Po S + 3.916389509898707E-002 1.0000000 +Po P + 201995.358823884 1.0000000 +Po P + 103156.238855453 1.0000000 +Po P + 52680.4659115022 1.0000000 +Po P + 26903.1860742976 1.0000000 +Po P + 13739.0854166734 1.0000000 +Po P + 7016.36109438300 1.0000000 +Po P + 3583.15866840946 1.0000000 +Po P + 1829.86962476550 1.0000000 +Po P + 934.489134729211 1.0000000 +Po P + 477.230689612032 1.0000000 +Po P + 243.715119463182 1.0000000 +Po P + 124.461944187287 1.0000000 +Po P + 63.5609952513412 1.0000000 +Po P + 32.4597220758638 1.0000000 +Po P + 16.5767315800501 1.0000000 +Po P + 8.46550778330153 1.0000000 +Po P + 4.32321786011102 1.0000000 +Po P + 2.20780762884063 1.0000000 +Po P + 1.12749685157938 1.0000000 +Po P + 0.575797063890465 1.0000000 +Po P + 0.294051604951678 1.0000000 +Po P + 0.150168091845475 1.0000000 +Po P + 7.668876968794860E-002 1.0000000 +Po D + 13739.0854166734 1.0000000 +Po D + 7016.36109438299 1.0000000 +Po D + 3583.15866840945 1.0000000 +Po D + 1829.86962476550 1.0000000 +Po D + 934.489134729210 1.0000000 +Po D + 477.230689612032 1.0000000 +Po D + 243.715119463182 1.0000000 +Po D + 124.461944187287 1.0000000 +Po D + 63.5609952513411 1.0000000 +Po D + 32.4597220758638 1.0000000 +Po D + 16.5767315800501 1.0000000 +Po D + 8.46550778330153 1.0000000 +Po D + 4.32321786011102 1.0000000 +Po D + 2.20780762884063 1.0000000 +Po D + 1.12749685157938 1.0000000 +Po D + 0.575797063890464 1.0000000 +Po D + 0.294051604951678 1.0000000 +Po D + 0.150168091845475 1.0000000 +Po F + 1829.86962476550 1.0000000 +Po F + 934.489134729210 1.0000000 +Po F + 477.230689612032 1.0000000 +Po F + 243.715119463182 1.0000000 +Po F + 124.461944187287 1.0000000 +Po F + 63.5609952513411 1.0000000 +Po F + 32.4597220758638 1.0000000 +Po F + 16.5767315800501 1.0000000 +Po F + 8.46550778330153 1.0000000 +Po F + 4.32321786011102 1.0000000 +Po F + 2.20780762884063 1.0000000 +Po F + 1.12749685157938 1.0000000 +Po F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,24p,18d,13f) -> [32s,24p,18d,13f] +At S +85497697.1819645 1.0000000 +At S +43662492.6604555 1.0000000 +At S +22297831.7330223 1.0000000 +At S +11387194.5850786 1.0000000 +At S +5815282.94190191 1.0000000 +At S +2969784.65079438 1.0000000 +At S +1516627.98873367 1.0000000 +At S + 774520.959152738 1.0000000 +At S + 395537.152566831 1.0000000 +At S + 201995.358823884 1.0000000 +At S + 103156.238855453 1.0000000 +At S + 52680.4659115022 1.0000000 +At S + 26903.1860742976 1.0000000 +At S + 13739.0854166734 1.0000000 +At S + 7016.36109438300 1.0000000 +At S + 3583.15866840946 1.0000000 +At S + 1829.86962476550 1.0000000 +At S + 934.489134729211 1.0000000 +At S + 477.230689612032 1.0000000 +At S + 243.715119463182 1.0000000 +At S + 124.461944187287 1.0000000 +At S + 63.5609952513412 1.0000000 +At S + 32.4597220758638 1.0000000 +At S + 16.5767315800501 1.0000000 +At S + 8.46550778330153 1.0000000 +At S + 4.32321786011102 1.0000000 +At S + 2.20780762884063 1.0000000 +At S + 1.12749685157938 1.0000000 +At S + 0.575797063890465 1.0000000 +At S + 0.294051604951678 1.0000000 +At S + 0.150168091845475 1.0000000 +At S + 7.668876968794860E-002 1.0000000 +At P + 395537.152566831 1.0000000 +At P + 201995.358823884 1.0000000 +At P + 103156.238855453 1.0000000 +At P + 52680.4659115022 1.0000000 +At P + 26903.1860742976 1.0000000 +At P + 13739.0854166734 1.0000000 +At P + 7016.36109438300 1.0000000 +At P + 3583.15866840946 1.0000000 +At P + 1829.86962476550 1.0000000 +At P + 934.489134729211 1.0000000 +At P + 477.230689612032 1.0000000 +At P + 243.715119463182 1.0000000 +At P + 124.461944187287 1.0000000 +At P + 63.5609952513412 1.0000000 +At P + 32.4597220758638 1.0000000 +At P + 16.5767315800501 1.0000000 +At P + 8.46550778330153 1.0000000 +At P + 4.32321786011102 1.0000000 +At P + 2.20780762884063 1.0000000 +At P + 1.12749685157938 1.0000000 +At P + 0.575797063890465 1.0000000 +At P + 0.294051604951678 1.0000000 +At P + 0.150168091845475 1.0000000 +At P + 7.668876968794860E-002 1.0000000 +At D + 13739.0854166734 1.0000000 +At D + 7016.36109438299 1.0000000 +At D + 3583.15866840945 1.0000000 +At D + 1829.86962476550 1.0000000 +At D + 934.489134729210 1.0000000 +At D + 477.230689612032 1.0000000 +At D + 243.715119463182 1.0000000 +At D + 124.461944187287 1.0000000 +At D + 63.5609952513411 1.0000000 +At D + 32.4597220758638 1.0000000 +At D + 16.5767315800501 1.0000000 +At D + 8.46550778330153 1.0000000 +At D + 4.32321786011102 1.0000000 +At D + 2.20780762884063 1.0000000 +At D + 1.12749685157938 1.0000000 +At D + 0.575797063890464 1.0000000 +At D + 0.294051604951678 1.0000000 +At D + 0.150168091845475 1.0000000 +At F + 1829.86962476550 1.0000000 +At F + 934.489134729210 1.0000000 +At F + 477.230689612032 1.0000000 +At F + 243.715119463182 1.0000000 +At F + 124.461944187287 1.0000000 +At F + 63.5609952513411 1.0000000 +At F + 32.4597220758638 1.0000000 +At F + 16.5767315800501 1.0000000 +At F + 8.46550778330153 1.0000000 +At F + 4.32321786011102 1.0000000 +At F + 2.20780762884063 1.0000000 +At F + 1.12749685157938 1.0000000 +At F + 0.575797063890464 1.0000000 +#BASIS SET: (32s,25p,17d,13f) -> [32s,25p,17d,13f] +Rn S +43662492.6604555 1.0000000 +Rn S +22297831.7330222 1.0000000 +Rn S +11387194.5850786 1.0000000 +Rn S +5815282.94190191 1.0000000 +Rn S +2969784.65079438 1.0000000 +Rn S +1516627.98873367 1.0000000 +Rn S + 774520.959152738 1.0000000 +Rn S + 395537.152566831 1.0000000 +Rn S + 201995.358823884 1.0000000 +Rn S + 103156.238855453 1.0000000 +Rn S + 52680.4659115021 1.0000000 +Rn S + 26903.1860742976 1.0000000 +Rn S + 13739.0854166734 1.0000000 +Rn S + 7016.36109438299 1.0000000 +Rn S + 3583.15866840946 1.0000000 +Rn S + 1829.86962476550 1.0000000 +Rn S + 934.489134729210 1.0000000 +Rn S + 477.230689612032 1.0000000 +Rn S + 243.715119463182 1.0000000 +Rn S + 124.461944187287 1.0000000 +Rn S + 63.5609952513411 1.0000000 +Rn S + 32.4597220758638 1.0000000 +Rn S + 16.5767315800501 1.0000000 +Rn S + 8.46550778330153 1.0000000 +Rn S + 4.32321786011102 1.0000000 +Rn S + 2.20780762884063 1.0000000 +Rn S + 1.12749685157938 1.0000000 +Rn S + 0.575797063890464 1.0000000 +Rn S + 0.294051604951678 1.0000000 +Rn S + 0.150168091845475 1.0000000 +Rn S + 7.668876968794858E-002 1.0000000 +Rn S + 3.916389509898707E-002 1.0000000 +Rn P + 395537.152566831 1.0000000 +Rn P + 201995.358823884 1.0000000 +Rn P + 103156.238855453 1.0000000 +Rn P + 52680.4659115021 1.0000000 +Rn P + 26903.1860742976 1.0000000 +Rn P + 13739.0854166734 1.0000000 +Rn P + 7016.36109438299 1.0000000 +Rn P + 3583.15866840946 1.0000000 +Rn P + 1829.86962476550 1.0000000 +Rn P + 934.489134729210 1.0000000 +Rn P + 477.230689612032 1.0000000 +Rn P + 243.715119463182 1.0000000 +Rn P + 124.461944187287 1.0000000 +Rn P + 63.5609952513411 1.0000000 +Rn P + 32.4597220758638 1.0000000 +Rn P + 16.5767315800501 1.0000000 +Rn P + 8.46550778330153 1.0000000 +Rn P + 4.32321786011102 1.0000000 +Rn P + 2.20780762884063 1.0000000 +Rn P + 1.12749685157938 1.0000000 +Rn P + 0.575797063890464 1.0000000 +Rn P + 0.294051604951678 1.0000000 +Rn P + 0.150168091845475 1.0000000 +Rn P + 7.668876968794858E-002 1.0000000 +Rn P + 3.916389509898707E-002 1.0000000 +Rn D + 13739.0854166734 1.0000000 +Rn D + 7016.36109438299 1.0000000 +Rn D + 3583.15866840946 1.0000000 +Rn D + 1829.86962476550 1.0000000 +Rn D + 934.489134729211 1.0000000 +Rn D + 477.230689612032 1.0000000 +Rn D + 243.715119463182 1.0000000 +Rn D + 124.461944187287 1.0000000 +Rn D + 63.5609952513411 1.0000000 +Rn D + 32.4597220758638 1.0000000 +Rn D + 16.5767315800501 1.0000000 +Rn D + 8.46550778330153 1.0000000 +Rn D + 4.32321786011102 1.0000000 +Rn D + 2.20780762884063 1.0000000 +Rn D + 1.12749685157938 1.0000000 +Rn D + 0.575797063890465 1.0000000 +Rn D + 0.294051604951678 1.0000000 +Rn F + 3583.15866840946 1.0000000 +Rn F + 1829.86962476550 1.0000000 +Rn F + 934.489134729211 1.0000000 +Rn F + 477.230689612032 1.0000000 +Rn F + 243.715119463182 1.0000000 +Rn F + 124.461944187287 1.0000000 +Rn F + 63.5609952513411 1.0000000 +Rn F + 32.4597220758638 1.0000000 +Rn F + 16.5767315800501 1.0000000 +Rn F + 8.46550778330153 1.0000000 +Rn F + 4.32321786011102 1.0000000 +Rn F + 2.20780762884063 1.0000000 +Rn F + 1.12749685157938 1.0000000 +#BASIS SET: (33s,24p,18d,14f) -> [33s,24p,18d,14f] +Fr S +43662492.6604555 1.0000000 +Fr S +22297831.7330222 1.0000000 +Fr S +11387194.5850786 1.0000000 +Fr S +5815282.94190191 1.0000000 +Fr S +2969784.65079438 1.0000000 +Fr S +1516627.98873367 1.0000000 +Fr S + 774520.959152735 1.0000000 +Fr S + 395537.152566831 1.0000000 +Fr S + 201995.358823884 1.0000000 +Fr S + 103156.238855453 1.0000000 +Fr S + 52680.4659115021 1.0000000 +Fr S + 26903.1860742975 1.0000000 +Fr S + 13739.0854166734 1.0000000 +Fr S + 7016.36109438299 1.0000000 +Fr S + 3583.15866840945 1.0000000 +Fr S + 1829.86962476550 1.0000000 +Fr S + 934.489134729211 1.0000000 +Fr S + 477.230689612032 1.0000000 +Fr S + 243.715119463182 1.0000000 +Fr S + 124.461944187287 1.0000000 +Fr S + 63.5609952513411 1.0000000 +Fr S + 32.4597220758638 1.0000000 +Fr S + 16.5767315800501 1.0000000 +Fr S + 8.46550778330153 1.0000000 +Fr S + 4.32321786011102 1.0000000 +Fr S + 2.20780762884063 1.0000000 +Fr S + 1.12749685157938 1.0000000 +Fr S + 0.575797063890465 1.0000000 +Fr S + 0.294051604951678 1.0000000 +Fr S + 0.150168091845475 1.0000000 +Fr S + 7.668876968794858E-002 1.0000000 +Fr S + 3.916389509898707E-002 1.0000000 +Fr S + 2.000046011385546E-002 1.0000000 +Fr P + 395537.152566831 1.0000000 +Fr P + 201995.358823884 1.0000000 +Fr P + 103156.238855453 1.0000000 +Fr P + 52680.4659115022 1.0000000 +Fr P + 26903.1860742976 1.0000000 +Fr P + 13739.0854166734 1.0000000 +Fr P + 7016.36109438300 1.0000000 +Fr P + 3583.15866840946 1.0000000 +Fr P + 1829.86962476550 1.0000000 +Fr P + 934.489134729211 1.0000000 +Fr P + 477.230689612032 1.0000000 +Fr P + 243.715119463182 1.0000000 +Fr P + 124.461944187287 1.0000000 +Fr P + 63.5609952513412 1.0000000 +Fr P + 32.4597220758638 1.0000000 +Fr P + 16.5767315800501 1.0000000 +Fr P + 8.46550778330153 1.0000000 +Fr P + 4.32321786011102 1.0000000 +Fr P + 2.20780762884063 1.0000000 +Fr P + 1.12749685157938 1.0000000 +Fr P + 0.575797063890465 1.0000000 +Fr P + 0.294051604951678 1.0000000 +Fr P + 0.150168091845475 1.0000000 +Fr P + 7.668876968794860E-002 1.0000000 +Fr D + 13739.0854166734 1.0000000 +Fr D + 7016.36109438299 1.0000000 +Fr D + 3583.15866840945 1.0000000 +Fr D + 1829.86962476550 1.0000000 +Fr D + 934.489134729210 1.0000000 +Fr D + 477.230689612032 1.0000000 +Fr D + 243.715119463182 1.0000000 +Fr D + 124.461944187287 1.0000000 +Fr D + 63.5609952513411 1.0000000 +Fr D + 32.4597220758638 1.0000000 +Fr D + 16.5767315800501 1.0000000 +Fr D + 8.46550778330153 1.0000000 +Fr D + 4.32321786011102 1.0000000 +Fr D + 2.20780762884063 1.0000000 +Fr D + 1.12749685157938 1.0000000 +Fr D + 0.575797063890464 1.0000000 +Fr D + 0.294051604951678 1.0000000 +Fr D + 0.150168091845475 1.0000000 +Fr F + 7016.36109438299 1.0000000 +Fr F + 3583.15866840946 1.0000000 +Fr F + 1829.86962476550 1.0000000 +Fr F + 934.489134729211 1.0000000 +Fr F + 477.230689612032 1.0000000 +Fr F + 243.715119463182 1.0000000 +Fr F + 124.461944187287 1.0000000 +Fr F + 63.5609952513411 1.0000000 +Fr F + 32.4597220758638 1.0000000 +Fr F + 16.5767315800501 1.0000000 +Fr F + 8.46550778330153 1.0000000 +Fr F + 4.32321786011102 1.0000000 +Fr F + 2.20780762884063 1.0000000 +Fr F + 1.12749685157938 1.0000000 +#BASIS SET: (33s,23p,18d,14f) -> [33s,23p,18d,14f] +Ra S +43662492.6604555 1.0000000 +Ra S +22297831.7330222 1.0000000 +Ra S +11387194.5850786 1.0000000 +Ra S +5815282.94190191 1.0000000 +Ra S +2969784.65079438 1.0000000 +Ra S +1516627.98873367 1.0000000 +Ra S + 774520.959152735 1.0000000 +Ra S + 395537.152566831 1.0000000 +Ra S + 201995.358823884 1.0000000 +Ra S + 103156.238855453 1.0000000 +Ra S + 52680.4659115021 1.0000000 +Ra S + 26903.1860742975 1.0000000 +Ra S + 13739.0854166734 1.0000000 +Ra S + 7016.36109438299 1.0000000 +Ra S + 3583.15866840945 1.0000000 +Ra S + 1829.86962476550 1.0000000 +Ra S + 934.489134729211 1.0000000 +Ra S + 477.230689612032 1.0000000 +Ra S + 243.715119463182 1.0000000 +Ra S + 124.461944187287 1.0000000 +Ra S + 63.5609952513411 1.0000000 +Ra S + 32.4597220758638 1.0000000 +Ra S + 16.5767315800501 1.0000000 +Ra S + 8.46550778330153 1.0000000 +Ra S + 4.32321786011102 1.0000000 +Ra S + 2.20780762884063 1.0000000 +Ra S + 1.12749685157938 1.0000000 +Ra S + 0.575797063890465 1.0000000 +Ra S + 0.294051604951678 1.0000000 +Ra S + 0.150168091845475 1.0000000 +Ra S + 7.668876968794858E-002 1.0000000 +Ra S + 3.916389509898707E-002 1.0000000 +Ra S + 2.000046011385546E-002 1.0000000 +Ra P + 201995.358823884 1.0000000 +Ra P + 103156.238855453 1.0000000 +Ra P + 52680.4659115022 1.0000000 +Ra P + 26903.1860742976 1.0000000 +Ra P + 13739.0854166734 1.0000000 +Ra P + 7016.36109438300 1.0000000 +Ra P + 3583.15866840946 1.0000000 +Ra P + 1829.86962476550 1.0000000 +Ra P + 934.489134729211 1.0000000 +Ra P + 477.230689612032 1.0000000 +Ra P + 243.715119463182 1.0000000 +Ra P + 124.461944187287 1.0000000 +Ra P + 63.5609952513412 1.0000000 +Ra P + 32.4597220758638 1.0000000 +Ra P + 16.5767315800501 1.0000000 +Ra P + 8.46550778330153 1.0000000 +Ra P + 4.32321786011102 1.0000000 +Ra P + 2.20780762884063 1.0000000 +Ra P + 1.12749685157938 1.0000000 +Ra P + 0.575797063890465 1.0000000 +Ra P + 0.294051604951678 1.0000000 +Ra P + 0.150168091845475 1.0000000 +Ra P + 7.668876968794860E-002 1.0000000 +Ra D + 13739.0854166734 1.0000000 +Ra D + 7016.36109438299 1.0000000 +Ra D + 3583.15866840945 1.0000000 +Ra D + 1829.86962476550 1.0000000 +Ra D + 934.489134729210 1.0000000 +Ra D + 477.230689612032 1.0000000 +Ra D + 243.715119463182 1.0000000 +Ra D + 124.461944187287 1.0000000 +Ra D + 63.5609952513411 1.0000000 +Ra D + 32.4597220758638 1.0000000 +Ra D + 16.5767315800501 1.0000000 +Ra D + 8.46550778330153 1.0000000 +Ra D + 4.32321786011102 1.0000000 +Ra D + 2.20780762884063 1.0000000 +Ra D + 1.12749685157938 1.0000000 +Ra D + 0.575797063890464 1.0000000 +Ra D + 0.294051604951678 1.0000000 +Ra D + 0.150168091845475 1.0000000 +Ra F + 1829.86962476550 1.0000000 +Ra F + 934.489134729211 1.0000000 +Ra F + 477.230689612032 1.0000000 +Ra F + 243.715119463182 1.0000000 +Ra F + 124.461944187287 1.0000000 +Ra F + 63.5609952513411 1.0000000 +Ra F + 32.4597220758638 1.0000000 +Ra F + 16.5767315800501 1.0000000 +Ra F + 8.46550778330153 1.0000000 +Ra F + 4.32321786011102 1.0000000 +Ra F + 2.20780762884063 1.0000000 +Ra F + 1.12749685157938 1.0000000 +Ra F + 0.575797063890465 1.0000000 +Ra F + 0.294051604951678 1.0000000 +#BASIS SET: (33s,24p,20d,13f) -> [33s,24p,20d,13f] +Ac S +43662492.6604555 1.0000000 +Ac S +22297831.7330222 1.0000000 +Ac S +11387194.5850786 1.0000000 +Ac S +5815282.94190191 1.0000000 +Ac S +2969784.65079438 1.0000000 +Ac S +1516627.98873367 1.0000000 +Ac S + 774520.959152735 1.0000000 +Ac S + 395537.152566831 1.0000000 +Ac S + 201995.358823884 1.0000000 +Ac S + 103156.238855453 1.0000000 +Ac S + 52680.4659115021 1.0000000 +Ac S + 26903.1860742975 1.0000000 +Ac S + 13739.0854166734 1.0000000 +Ac S + 7016.36109438299 1.0000000 +Ac S + 3583.15866840945 1.0000000 +Ac S + 1829.86962476550 1.0000000 +Ac S + 934.489134729211 1.0000000 +Ac S + 477.230689612032 1.0000000 +Ac S + 243.715119463182 1.0000000 +Ac S + 124.461944187287 1.0000000 +Ac S + 63.5609952513411 1.0000000 +Ac S + 32.4597220758638 1.0000000 +Ac S + 16.5767315800501 1.0000000 +Ac S + 8.46550778330153 1.0000000 +Ac S + 4.32321786011102 1.0000000 +Ac S + 2.20780762884063 1.0000000 +Ac S + 1.12749685157938 1.0000000 +Ac S + 0.575797063890465 1.0000000 +Ac S + 0.294051604951678 1.0000000 +Ac S + 0.150168091845475 1.0000000 +Ac S + 7.668876968794858E-002 1.0000000 +Ac S + 3.916389509898707E-002 1.0000000 +Ac S + 2.000046011385546E-002 1.0000000 +Ac P + 395537.152566831 1.0000000 +Ac P + 201995.358823884 1.0000000 +Ac P + 103156.238855453 1.0000000 +Ac P + 52680.4659115022 1.0000000 +Ac P + 26903.1860742976 1.0000000 +Ac P + 13739.0854166734 1.0000000 +Ac P + 7016.36109438300 1.0000000 +Ac P + 3583.15866840946 1.0000000 +Ac P + 1829.86962476550 1.0000000 +Ac P + 934.489134729211 1.0000000 +Ac P + 477.230689612032 1.0000000 +Ac P + 243.715119463182 1.0000000 +Ac P + 124.461944187287 1.0000000 +Ac P + 63.5609952513412 1.0000000 +Ac P + 32.4597220758638 1.0000000 +Ac P + 16.5767315800501 1.0000000 +Ac P + 8.46550778330153 1.0000000 +Ac P + 4.32321786011102 1.0000000 +Ac P + 2.20780762884063 1.0000000 +Ac P + 1.12749685157938 1.0000000 +Ac P + 0.575797063890465 1.0000000 +Ac P + 0.294051604951678 1.0000000 +Ac P + 0.150168091845475 1.0000000 +Ac P + 7.668876968794860E-002 1.0000000 +Ac D + 26903.1860742976 1.0000000 +Ac D + 13739.0854166734 1.0000000 +Ac D + 7016.36109438300 1.0000000 +Ac D + 3583.15866840946 1.0000000 +Ac D + 1829.86962476550 1.0000000 +Ac D + 934.489134729211 1.0000000 +Ac D + 477.230689612032 1.0000000 +Ac D + 243.715119463182 1.0000000 +Ac D + 124.461944187287 1.0000000 +Ac D + 63.5609952513412 1.0000000 +Ac D + 32.4597220758638 1.0000000 +Ac D + 16.5767315800501 1.0000000 +Ac D + 8.46550778330153 1.0000000 +Ac D + 4.32321786011102 1.0000000 +Ac D + 2.20780762884063 1.0000000 +Ac D + 1.12749685157938 1.0000000 +Ac D + 0.575797063890465 1.0000000 +Ac D + 0.294051604951678 1.0000000 +Ac D + 0.150168091845475 1.0000000 +Ac D + 7.668876968794860E-002 1.0000000 +Ac F + 3583.15866840946 1.0000000 +Ac F + 1829.86962476550 1.0000000 +Ac F + 934.489134729211 1.0000000 +Ac F + 477.230689612032 1.0000000 +Ac F + 243.715119463182 1.0000000 +Ac F + 124.461944187287 1.0000000 +Ac F + 63.5609952513411 1.0000000 +Ac F + 32.4597220758638 1.0000000 +Ac F + 16.5767315800501 1.0000000 +Ac F + 8.46550778330153 1.0000000 +Ac F + 4.32321786011102 1.0000000 +Ac F + 2.20780762884063 1.0000000 +Ac F + 1.12749685157938 1.0000000 +#BASIS SET: (33s,25p,20d,14f) -> [33s,25p,20d,14f] +Th S +43662492.6604555 1.0000000 +Th S +22297831.7330222 1.0000000 +Th S +11387194.5850786 1.0000000 +Th S +5815282.94190191 1.0000000 +Th S +2969784.65079438 1.0000000 +Th S +1516627.98873367 1.0000000 +Th S + 774520.959152735 1.0000000 +Th S + 395537.152566831 1.0000000 +Th S + 201995.358823884 1.0000000 +Th S + 103156.238855453 1.0000000 +Th S + 52680.4659115021 1.0000000 +Th S + 26903.1860742975 1.0000000 +Th S + 13739.0854166734 1.0000000 +Th S + 7016.36109438299 1.0000000 +Th S + 3583.15866840945 1.0000000 +Th S + 1829.86962476550 1.0000000 +Th S + 934.489134729211 1.0000000 +Th S + 477.230689612032 1.0000000 +Th S + 243.715119463182 1.0000000 +Th S + 124.461944187287 1.0000000 +Th S + 63.5609952513411 1.0000000 +Th S + 32.4597220758638 1.0000000 +Th S + 16.5767315800501 1.0000000 +Th S + 8.46550778330153 1.0000000 +Th S + 4.32321786011102 1.0000000 +Th S + 2.20780762884063 1.0000000 +Th S + 1.12749685157938 1.0000000 +Th S + 0.575797063890465 1.0000000 +Th S + 0.294051604951678 1.0000000 +Th S + 0.150168091845475 1.0000000 +Th S + 7.668876968794858E-002 1.0000000 +Th S + 3.916389509898707E-002 1.0000000 +Th S + 2.000046011385546E-002 1.0000000 +Th P + 774520.959152738 1.0000000 +Th P + 395537.152566831 1.0000000 +Th P + 201995.358823884 1.0000000 +Th P + 103156.238855453 1.0000000 +Th P + 52680.4659115022 1.0000000 +Th P + 26903.1860742976 1.0000000 +Th P + 13739.0854166734 1.0000000 +Th P + 7016.36109438300 1.0000000 +Th P + 3583.15866840946 1.0000000 +Th P + 1829.86962476550 1.0000000 +Th P + 934.489134729211 1.0000000 +Th P + 477.230689612032 1.0000000 +Th P + 243.715119463182 1.0000000 +Th P + 124.461944187287 1.0000000 +Th P + 63.5609952513412 1.0000000 +Th P + 32.4597220758638 1.0000000 +Th P + 16.5767315800501 1.0000000 +Th P + 8.46550778330153 1.0000000 +Th P + 4.32321786011102 1.0000000 +Th P + 2.20780762884063 1.0000000 +Th P + 1.12749685157938 1.0000000 +Th P + 0.575797063890465 1.0000000 +Th P + 0.294051604951678 1.0000000 +Th P + 0.150168091845475 1.0000000 +Th P + 7.668876968794860E-002 1.0000000 +Th D + 26903.1860742976 1.0000000 +Th D + 13739.0854166734 1.0000000 +Th D + 7016.36109438300 1.0000000 +Th D + 3583.15866840946 1.0000000 +Th D + 1829.86962476550 1.0000000 +Th D + 934.489134729211 1.0000000 +Th D + 477.230689612032 1.0000000 +Th D + 243.715119463182 1.0000000 +Th D + 124.461944187287 1.0000000 +Th D + 63.5609952513412 1.0000000 +Th D + 32.4597220758638 1.0000000 +Th D + 16.5767315800501 1.0000000 +Th D + 8.46550778330153 1.0000000 +Th D + 4.32321786011102 1.0000000 +Th D + 2.20780762884063 1.0000000 +Th D + 1.12749685157938 1.0000000 +Th D + 0.575797063890465 1.0000000 +Th D + 0.294051604951678 1.0000000 +Th D + 0.150168091845475 1.0000000 +Th D + 7.668876968794860E-002 1.0000000 +Th F + 7016.36109438299 1.0000000 +Th F + 3583.15866840946 1.0000000 +Th F + 1829.86962476550 1.0000000 +Th F + 934.489134729211 1.0000000 +Th F + 477.230689612032 1.0000000 +Th F + 243.715119463182 1.0000000 +Th F + 124.461944187287 1.0000000 +Th F + 63.5609952513411 1.0000000 +Th F + 32.4597220758638 1.0000000 +Th F + 16.5767315800501 1.0000000 +Th F + 8.46550778330153 1.0000000 +Th F + 4.32321786011102 1.0000000 +Th F + 2.20780762884063 1.0000000 +Th F + 1.12749685157938 1.0000000 +#BASIS SET: (33s,25p,19d,15f) -> [33s,25p,19d,15f] +Pu S +43662492.6604555 1.0000000 +Pu S +22297831.7330222 1.0000000 +Pu S +11387194.5850786 1.0000000 +Pu S +5815282.94190191 1.0000000 +Pu S +2969784.65079438 1.0000000 +Pu S +1516627.98873367 1.0000000 +Pu S + 774520.959152735 1.0000000 +Pu S + 395537.152566831 1.0000000 +Pu S + 201995.358823884 1.0000000 +Pu S + 103156.238855453 1.0000000 +Pu S + 52680.4659115021 1.0000000 +Pu S + 26903.1860742975 1.0000000 +Pu S + 13739.0854166734 1.0000000 +Pu S + 7016.36109438299 1.0000000 +Pu S + 3583.15866840945 1.0000000 +Pu S + 1829.86962476550 1.0000000 +Pu S + 934.489134729211 1.0000000 +Pu S + 477.230689612032 1.0000000 +Pu S + 243.715119463182 1.0000000 +Pu S + 124.461944187287 1.0000000 +Pu S + 63.5609952513411 1.0000000 +Pu S + 32.4597220758638 1.0000000 +Pu S + 16.5767315800501 1.0000000 +Pu S + 8.46550778330153 1.0000000 +Pu S + 4.32321786011102 1.0000000 +Pu S + 2.20780762884063 1.0000000 +Pu S + 1.12749685157938 1.0000000 +Pu S + 0.575797063890465 1.0000000 +Pu S + 0.294051604951678 1.0000000 +Pu S + 0.150168091845475 1.0000000 +Pu S + 7.668876968794858E-002 1.0000000 +Pu S + 3.916389509898707E-002 1.0000000 +Pu S + 2.000046011385546E-002 1.0000000 +Pu P + 774520.959152738 1.0000000 +Pu P + 395537.152566831 1.0000000 +Pu P + 201995.358823884 1.0000000 +Pu P + 103156.238855453 1.0000000 +Pu P + 52680.4659115022 1.0000000 +Pu P + 26903.1860742976 1.0000000 +Pu P + 13739.0854166734 1.0000000 +Pu P + 7016.36109438300 1.0000000 +Pu P + 3583.15866840946 1.0000000 +Pu P + 1829.86962476550 1.0000000 +Pu P + 934.489134729211 1.0000000 +Pu P + 477.230689612032 1.0000000 +Pu P + 243.715119463182 1.0000000 +Pu P + 124.461944187287 1.0000000 +Pu P + 63.5609952513412 1.0000000 +Pu P + 32.4597220758638 1.0000000 +Pu P + 16.5767315800501 1.0000000 +Pu P + 8.46550778330153 1.0000000 +Pu P + 4.32321786011102 1.0000000 +Pu P + 2.20780762884063 1.0000000 +Pu P + 1.12749685157938 1.0000000 +Pu P + 0.575797063890465 1.0000000 +Pu P + 0.294051604951678 1.0000000 +Pu P + 0.150168091845475 1.0000000 +Pu P + 7.668876968794860E-002 1.0000000 +Pu D + 52680.4659115021 1.0000000 +Pu D + 26903.1860742976 1.0000000 +Pu D + 13739.0854166734 1.0000000 +Pu D + 7016.36109438299 1.0000000 +Pu D + 3583.15866840946 1.0000000 +Pu D + 1829.86962476550 1.0000000 +Pu D + 934.489134729211 1.0000000 +Pu D + 477.230689612032 1.0000000 +Pu D + 243.715119463182 1.0000000 +Pu D + 124.461944187287 1.0000000 +Pu D + 63.5609952513411 1.0000000 +Pu D + 32.4597220758638 1.0000000 +Pu D + 16.5767315800501 1.0000000 +Pu D + 8.46550778330153 1.0000000 +Pu D + 4.32321786011102 1.0000000 +Pu D + 2.20780762884063 1.0000000 +Pu D + 1.12749685157938 1.0000000 +Pu D + 0.575797063890465 1.0000000 +Pu D + 0.294051604951678 1.0000000 +Pu F + 1829.86962476550 1.0000000 +Pu F + 934.489134729210 1.0000000 +Pu F + 477.230689612032 1.0000000 +Pu F + 243.715119463182 1.0000000 +Pu F + 124.461944187287 1.0000000 +Pu F + 63.5609952513411 1.0000000 +Pu F + 32.4597220758638 1.0000000 +Pu F + 16.5767315800501 1.0000000 +Pu F + 8.46550778330153 1.0000000 +Pu F + 4.32321786011102 1.0000000 +Pu F + 2.20780762884063 1.0000000 +Pu F + 1.12749685157938 1.0000000 +Pu F + 0.575797063890464 1.0000000 +Pu F + 0.294051604951678 1.0000000 +Pu F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,25p,19d,14f) -> [33s,25p,19d,14f] +Am S +43662492.6604555 1.0000000 +Am S +22297831.7330222 1.0000000 +Am S +11387194.5850786 1.0000000 +Am S +5815282.94190191 1.0000000 +Am S +2969784.65079438 1.0000000 +Am S +1516627.98873367 1.0000000 +Am S + 774520.959152735 1.0000000 +Am S + 395537.152566831 1.0000000 +Am S + 201995.358823884 1.0000000 +Am S + 103156.238855453 1.0000000 +Am S + 52680.4659115021 1.0000000 +Am S + 26903.1860742975 1.0000000 +Am S + 13739.0854166734 1.0000000 +Am S + 7016.36109438299 1.0000000 +Am S + 3583.15866840945 1.0000000 +Am S + 1829.86962476550 1.0000000 +Am S + 934.489134729211 1.0000000 +Am S + 477.230689612032 1.0000000 +Am S + 243.715119463182 1.0000000 +Am S + 124.461944187287 1.0000000 +Am S + 63.5609952513411 1.0000000 +Am S + 32.4597220758638 1.0000000 +Am S + 16.5767315800501 1.0000000 +Am S + 8.46550778330153 1.0000000 +Am S + 4.32321786011102 1.0000000 +Am S + 2.20780762884063 1.0000000 +Am S + 1.12749685157938 1.0000000 +Am S + 0.575797063890465 1.0000000 +Am S + 0.294051604951678 1.0000000 +Am S + 0.150168091845475 1.0000000 +Am S + 7.668876968794858E-002 1.0000000 +Am S + 3.916389509898707E-002 1.0000000 +Am S + 2.000046011385546E-002 1.0000000 +Am P + 774520.959152738 1.0000000 +Am P + 395537.152566831 1.0000000 +Am P + 201995.358823884 1.0000000 +Am P + 103156.238855453 1.0000000 +Am P + 52680.4659115022 1.0000000 +Am P + 26903.1860742976 1.0000000 +Am P + 13739.0854166734 1.0000000 +Am P + 7016.36109438300 1.0000000 +Am P + 3583.15866840946 1.0000000 +Am P + 1829.86962476550 1.0000000 +Am P + 934.489134729211 1.0000000 +Am P + 477.230689612032 1.0000000 +Am P + 243.715119463182 1.0000000 +Am P + 124.461944187287 1.0000000 +Am P + 63.5609952513412 1.0000000 +Am P + 32.4597220758638 1.0000000 +Am P + 16.5767315800501 1.0000000 +Am P + 8.46550778330153 1.0000000 +Am P + 4.32321786011102 1.0000000 +Am P + 2.20780762884063 1.0000000 +Am P + 1.12749685157938 1.0000000 +Am P + 0.575797063890465 1.0000000 +Am P + 0.294051604951678 1.0000000 +Am P + 0.150168091845475 1.0000000 +Am P + 7.668876968794860E-002 1.0000000 +Am D + 52680.4659115021 1.0000000 +Am D + 26903.1860742976 1.0000000 +Am D + 13739.0854166734 1.0000000 +Am D + 7016.36109438299 1.0000000 +Am D + 3583.15866840946 1.0000000 +Am D + 1829.86962476550 1.0000000 +Am D + 934.489134729211 1.0000000 +Am D + 477.230689612032 1.0000000 +Am D + 243.715119463182 1.0000000 +Am D + 124.461944187287 1.0000000 +Am D + 63.5609952513411 1.0000000 +Am D + 32.4597220758638 1.0000000 +Am D + 16.5767315800501 1.0000000 +Am D + 8.46550778330153 1.0000000 +Am D + 4.32321786011102 1.0000000 +Am D + 2.20780762884063 1.0000000 +Am D + 1.12749685157938 1.0000000 +Am D + 0.575797063890465 1.0000000 +Am D + 0.294051604951678 1.0000000 +Am F + 934.489134729210 1.0000000 +Am F + 477.230689612032 1.0000000 +Am F + 243.715119463182 1.0000000 +Am F + 124.461944187287 1.0000000 +Am F + 63.5609952513411 1.0000000 +Am F + 32.4597220758638 1.0000000 +Am F + 16.5767315800501 1.0000000 +Am F + 8.46550778330153 1.0000000 +Am F + 4.32321786011102 1.0000000 +Am F + 2.20780762884063 1.0000000 +Am F + 1.12749685157938 1.0000000 +Am F + 0.575797063890464 1.0000000 +Am F + 0.294051604951678 1.0000000 +Am F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,25p,19d,15f) -> [33s,25p,19d,15f] +Cf S +43662492.6604555 1.0000000 +Cf S +22297831.7330222 1.0000000 +Cf S +11387194.5850786 1.0000000 +Cf S +5815282.94190191 1.0000000 +Cf S +2969784.65079438 1.0000000 +Cf S +1516627.98873367 1.0000000 +Cf S + 774520.959152735 1.0000000 +Cf S + 395537.152566831 1.0000000 +Cf S + 201995.358823884 1.0000000 +Cf S + 103156.238855453 1.0000000 +Cf S + 52680.4659115021 1.0000000 +Cf S + 26903.1860742975 1.0000000 +Cf S + 13739.0854166734 1.0000000 +Cf S + 7016.36109438299 1.0000000 +Cf S + 3583.15866840945 1.0000000 +Cf S + 1829.86962476550 1.0000000 +Cf S + 934.489134729211 1.0000000 +Cf S + 477.230689612032 1.0000000 +Cf S + 243.715119463182 1.0000000 +Cf S + 124.461944187287 1.0000000 +Cf S + 63.5609952513411 1.0000000 +Cf S + 32.4597220758638 1.0000000 +Cf S + 16.5767315800501 1.0000000 +Cf S + 8.46550778330153 1.0000000 +Cf S + 4.32321786011102 1.0000000 +Cf S + 2.20780762884063 1.0000000 +Cf S + 1.12749685157938 1.0000000 +Cf S + 0.575797063890465 1.0000000 +Cf S + 0.294051604951678 1.0000000 +Cf S + 0.150168091845475 1.0000000 +Cf S + 7.668876968794858E-002 1.0000000 +Cf S + 3.916389509898707E-002 1.0000000 +Cf S + 2.000046011385546E-002 1.0000000 +Cf P + 774520.959152738 1.0000000 +Cf P + 395537.152566831 1.0000000 +Cf P + 201995.358823884 1.0000000 +Cf P + 103156.238855453 1.0000000 +Cf P + 52680.4659115022 1.0000000 +Cf P + 26903.1860742976 1.0000000 +Cf P + 13739.0854166734 1.0000000 +Cf P + 7016.36109438300 1.0000000 +Cf P + 3583.15866840946 1.0000000 +Cf P + 1829.86962476550 1.0000000 +Cf P + 934.489134729211 1.0000000 +Cf P + 477.230689612032 1.0000000 +Cf P + 243.715119463182 1.0000000 +Cf P + 124.461944187287 1.0000000 +Cf P + 63.5609952513412 1.0000000 +Cf P + 32.4597220758638 1.0000000 +Cf P + 16.5767315800501 1.0000000 +Cf P + 8.46550778330153 1.0000000 +Cf P + 4.32321786011102 1.0000000 +Cf P + 2.20780762884063 1.0000000 +Cf P + 1.12749685157938 1.0000000 +Cf P + 0.575797063890465 1.0000000 +Cf P + 0.294051604951678 1.0000000 +Cf P + 0.150168091845475 1.0000000 +Cf P + 7.668876968794860E-002 1.0000000 +Cf D + 52680.4659115021 1.0000000 +Cf D + 26903.1860742976 1.0000000 +Cf D + 13739.0854166734 1.0000000 +Cf D + 7016.36109438299 1.0000000 +Cf D + 3583.15866840946 1.0000000 +Cf D + 1829.86962476550 1.0000000 +Cf D + 934.489134729211 1.0000000 +Cf D + 477.230689612032 1.0000000 +Cf D + 243.715119463182 1.0000000 +Cf D + 124.461944187287 1.0000000 +Cf D + 63.5609952513411 1.0000000 +Cf D + 32.4597220758638 1.0000000 +Cf D + 16.5767315800501 1.0000000 +Cf D + 8.46550778330153 1.0000000 +Cf D + 4.32321786011102 1.0000000 +Cf D + 2.20780762884063 1.0000000 +Cf D + 1.12749685157938 1.0000000 +Cf D + 0.575797063890465 1.0000000 +Cf D + 0.294051604951678 1.0000000 +Cf F + 1829.86962476550 1.0000000 +Cf F + 934.489134729210 1.0000000 +Cf F + 477.230689612032 1.0000000 +Cf F + 243.715119463182 1.0000000 +Cf F + 124.461944187287 1.0000000 +Cf F + 63.5609952513411 1.0000000 +Cf F + 32.4597220758638 1.0000000 +Cf F + 16.5767315800501 1.0000000 +Cf F + 8.46550778330153 1.0000000 +Cf F + 4.32321786011102 1.0000000 +Cf F + 2.20780762884063 1.0000000 +Cf F + 1.12749685157938 1.0000000 +Cf F + 0.575797063890464 1.0000000 +Cf F + 0.294051604951678 1.0000000 +Cf F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,25p,19d,15f) -> [33s,25p,19d,15f] +Es S +43662492.6604555 1.0000000 +Es S +22297831.7330222 1.0000000 +Es S +11387194.5850786 1.0000000 +Es S +5815282.94190191 1.0000000 +Es S +2969784.65079438 1.0000000 +Es S +1516627.98873367 1.0000000 +Es S + 774520.959152735 1.0000000 +Es S + 395537.152566831 1.0000000 +Es S + 201995.358823884 1.0000000 +Es S + 103156.238855453 1.0000000 +Es S + 52680.4659115021 1.0000000 +Es S + 26903.1860742975 1.0000000 +Es S + 13739.0854166734 1.0000000 +Es S + 7016.36109438299 1.0000000 +Es S + 3583.15866840945 1.0000000 +Es S + 1829.86962476550 1.0000000 +Es S + 934.489134729211 1.0000000 +Es S + 477.230689612032 1.0000000 +Es S + 243.715119463182 1.0000000 +Es S + 124.461944187287 1.0000000 +Es S + 63.5609952513411 1.0000000 +Es S + 32.4597220758638 1.0000000 +Es S + 16.5767315800501 1.0000000 +Es S + 8.46550778330153 1.0000000 +Es S + 4.32321786011102 1.0000000 +Es S + 2.20780762884063 1.0000000 +Es S + 1.12749685157938 1.0000000 +Es S + 0.575797063890465 1.0000000 +Es S + 0.294051604951678 1.0000000 +Es S + 0.150168091845475 1.0000000 +Es S + 7.668876968794858E-002 1.0000000 +Es S + 3.916389509898707E-002 1.0000000 +Es S + 2.000046011385546E-002 1.0000000 +Es P + 774520.959152738 1.0000000 +Es P + 395537.152566831 1.0000000 +Es P + 201995.358823884 1.0000000 +Es P + 103156.238855453 1.0000000 +Es P + 52680.4659115022 1.0000000 +Es P + 26903.1860742976 1.0000000 +Es P + 13739.0854166734 1.0000000 +Es P + 7016.36109438300 1.0000000 +Es P + 3583.15866840946 1.0000000 +Es P + 1829.86962476550 1.0000000 +Es P + 934.489134729211 1.0000000 +Es P + 477.230689612032 1.0000000 +Es P + 243.715119463182 1.0000000 +Es P + 124.461944187287 1.0000000 +Es P + 63.5609952513412 1.0000000 +Es P + 32.4597220758638 1.0000000 +Es P + 16.5767315800501 1.0000000 +Es P + 8.46550778330153 1.0000000 +Es P + 4.32321786011102 1.0000000 +Es P + 2.20780762884063 1.0000000 +Es P + 1.12749685157938 1.0000000 +Es P + 0.575797063890465 1.0000000 +Es P + 0.294051604951678 1.0000000 +Es P + 0.150168091845475 1.0000000 +Es P + 7.668876968794860E-002 1.0000000 +Es D + 52680.4659115021 1.0000000 +Es D + 26903.1860742976 1.0000000 +Es D + 13739.0854166734 1.0000000 +Es D + 7016.36109438299 1.0000000 +Es D + 3583.15866840946 1.0000000 +Es D + 1829.86962476550 1.0000000 +Es D + 934.489134729211 1.0000000 +Es D + 477.230689612032 1.0000000 +Es D + 243.715119463182 1.0000000 +Es D + 124.461944187287 1.0000000 +Es D + 63.5609952513411 1.0000000 +Es D + 32.4597220758638 1.0000000 +Es D + 16.5767315800501 1.0000000 +Es D + 8.46550778330153 1.0000000 +Es D + 4.32321786011102 1.0000000 +Es D + 2.20780762884063 1.0000000 +Es D + 1.12749685157938 1.0000000 +Es D + 0.575797063890465 1.0000000 +Es D + 0.294051604951678 1.0000000 +Es F + 1829.86962476550 1.0000000 +Es F + 934.489134729210 1.0000000 +Es F + 477.230689612032 1.0000000 +Es F + 243.715119463182 1.0000000 +Es F + 124.461944187287 1.0000000 +Es F + 63.5609952513411 1.0000000 +Es F + 32.4597220758638 1.0000000 +Es F + 16.5767315800501 1.0000000 +Es F + 8.46550778330153 1.0000000 +Es F + 4.32321786011102 1.0000000 +Es F + 2.20780762884063 1.0000000 +Es F + 1.12749685157938 1.0000000 +Es F + 0.575797063890464 1.0000000 +Es F + 0.294051604951678 1.0000000 +Es F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,25p,19d,15f) -> [33s,25p,19d,15f] +Fm S +43662492.6604555 1.0000000 +Fm S +22297831.7330222 1.0000000 +Fm S +11387194.5850786 1.0000000 +Fm S +5815282.94190191 1.0000000 +Fm S +2969784.65079438 1.0000000 +Fm S +1516627.98873367 1.0000000 +Fm S + 774520.959152735 1.0000000 +Fm S + 395537.152566831 1.0000000 +Fm S + 201995.358823884 1.0000000 +Fm S + 103156.238855453 1.0000000 +Fm S + 52680.4659115021 1.0000000 +Fm S + 26903.1860742975 1.0000000 +Fm S + 13739.0854166734 1.0000000 +Fm S + 7016.36109438299 1.0000000 +Fm S + 3583.15866840945 1.0000000 +Fm S + 1829.86962476550 1.0000000 +Fm S + 934.489134729211 1.0000000 +Fm S + 477.230689612032 1.0000000 +Fm S + 243.715119463182 1.0000000 +Fm S + 124.461944187287 1.0000000 +Fm S + 63.5609952513411 1.0000000 +Fm S + 32.4597220758638 1.0000000 +Fm S + 16.5767315800501 1.0000000 +Fm S + 8.46550778330153 1.0000000 +Fm S + 4.32321786011102 1.0000000 +Fm S + 2.20780762884063 1.0000000 +Fm S + 1.12749685157938 1.0000000 +Fm S + 0.575797063890465 1.0000000 +Fm S + 0.294051604951678 1.0000000 +Fm S + 0.150168091845475 1.0000000 +Fm S + 7.668876968794858E-002 1.0000000 +Fm S + 3.916389509898707E-002 1.0000000 +Fm S + 2.000046011385546E-002 1.0000000 +Fm P + 774520.959152738 1.0000000 +Fm P + 395537.152566831 1.0000000 +Fm P + 201995.358823884 1.0000000 +Fm P + 103156.238855453 1.0000000 +Fm P + 52680.4659115022 1.0000000 +Fm P + 26903.1860742976 1.0000000 +Fm P + 13739.0854166734 1.0000000 +Fm P + 7016.36109438300 1.0000000 +Fm P + 3583.15866840946 1.0000000 +Fm P + 1829.86962476550 1.0000000 +Fm P + 934.489134729211 1.0000000 +Fm P + 477.230689612032 1.0000000 +Fm P + 243.715119463182 1.0000000 +Fm P + 124.461944187287 1.0000000 +Fm P + 63.5609952513412 1.0000000 +Fm P + 32.4597220758638 1.0000000 +Fm P + 16.5767315800501 1.0000000 +Fm P + 8.46550778330153 1.0000000 +Fm P + 4.32321786011102 1.0000000 +Fm P + 2.20780762884063 1.0000000 +Fm P + 1.12749685157938 1.0000000 +Fm P + 0.575797063890465 1.0000000 +Fm P + 0.294051604951678 1.0000000 +Fm P + 0.150168091845475 1.0000000 +Fm P + 7.668876968794860E-002 1.0000000 +Fm D + 52680.4659115021 1.0000000 +Fm D + 26903.1860742976 1.0000000 +Fm D + 13739.0854166734 1.0000000 +Fm D + 7016.36109438299 1.0000000 +Fm D + 3583.15866840946 1.0000000 +Fm D + 1829.86962476550 1.0000000 +Fm D + 934.489134729211 1.0000000 +Fm D + 477.230689612032 1.0000000 +Fm D + 243.715119463182 1.0000000 +Fm D + 124.461944187287 1.0000000 +Fm D + 63.5609952513411 1.0000000 +Fm D + 32.4597220758638 1.0000000 +Fm D + 16.5767315800501 1.0000000 +Fm D + 8.46550778330153 1.0000000 +Fm D + 4.32321786011102 1.0000000 +Fm D + 2.20780762884063 1.0000000 +Fm D + 1.12749685157938 1.0000000 +Fm D + 0.575797063890465 1.0000000 +Fm D + 0.294051604951678 1.0000000 +Fm F + 1829.86962476550 1.0000000 +Fm F + 934.489134729210 1.0000000 +Fm F + 477.230689612032 1.0000000 +Fm F + 243.715119463182 1.0000000 +Fm F + 124.461944187287 1.0000000 +Fm F + 63.5609952513411 1.0000000 +Fm F + 32.4597220758638 1.0000000 +Fm F + 16.5767315800501 1.0000000 +Fm F + 8.46550778330153 1.0000000 +Fm F + 4.32321786011102 1.0000000 +Fm F + 2.20780762884063 1.0000000 +Fm F + 1.12749685157938 1.0000000 +Fm F + 0.575797063890464 1.0000000 +Fm F + 0.294051604951678 1.0000000 +Fm F + 0.150168091845475 1.0000000 +#BASIS SET: (33s,25p,19d,15f) -> [33s,25p,19d,15f] +Md S +43662492.6604555 1.0000000 +Md S +22297831.7330222 1.0000000 +Md S +11387194.5850786 1.0000000 +Md S +5815282.94190191 1.0000000 +Md S +2969784.65079438 1.0000000 +Md S +1516627.98873367 1.0000000 +Md S + 774520.959152735 1.0000000 +Md S + 395537.152566831 1.0000000 +Md S + 201995.358823884 1.0000000 +Md S + 103156.238855453 1.0000000 +Md S + 52680.4659115021 1.0000000 +Md S + 26903.1860742975 1.0000000 +Md S + 13739.0854166734 1.0000000 +Md S + 7016.36109438299 1.0000000 +Md S + 3583.15866840945 1.0000000 +Md S + 1829.86962476550 1.0000000 +Md S + 934.489134729211 1.0000000 +Md S + 477.230689612032 1.0000000 +Md S + 243.715119463182 1.0000000 +Md S + 124.461944187287 1.0000000 +Md S + 63.5609952513411 1.0000000 +Md S + 32.4597220758638 1.0000000 +Md S + 16.5767315800501 1.0000000 +Md S + 8.46550778330153 1.0000000 +Md S + 4.32321786011102 1.0000000 +Md S + 2.20780762884063 1.0000000 +Md S + 1.12749685157938 1.0000000 +Md S + 0.575797063890465 1.0000000 +Md S + 0.294051604951678 1.0000000 +Md S + 0.150168091845475 1.0000000 +Md S + 7.668876968794858E-002 1.0000000 +Md S + 3.916389509898707E-002 1.0000000 +Md S + 2.000046011385546E-002 1.0000000 +Md P + 774520.959152738 1.0000000 +Md P + 395537.152566831 1.0000000 +Md P + 201995.358823884 1.0000000 +Md P + 103156.238855453 1.0000000 +Md P + 52680.4659115022 1.0000000 +Md P + 26903.1860742976 1.0000000 +Md P + 13739.0854166734 1.0000000 +Md P + 7016.36109438300 1.0000000 +Md P + 3583.15866840946 1.0000000 +Md P + 1829.86962476550 1.0000000 +Md P + 934.489134729211 1.0000000 +Md P + 477.230689612032 1.0000000 +Md P + 243.715119463182 1.0000000 +Md P + 124.461944187287 1.0000000 +Md P + 63.5609952513412 1.0000000 +Md P + 32.4597220758638 1.0000000 +Md P + 16.5767315800501 1.0000000 +Md P + 8.46550778330153 1.0000000 +Md P + 4.32321786011102 1.0000000 +Md P + 2.20780762884063 1.0000000 +Md P + 1.12749685157938 1.0000000 +Md P + 0.575797063890465 1.0000000 +Md P + 0.294051604951678 1.0000000 +Md P + 0.150168091845475 1.0000000 +Md P + 7.668876968794860E-002 1.0000000 +Md D + 52680.4659115021 1.0000000 +Md D + 26903.1860742976 1.0000000 +Md D + 13739.0854166734 1.0000000 +Md D + 7016.36109438299 1.0000000 +Md D + 3583.15866840946 1.0000000 +Md D + 1829.86962476550 1.0000000 +Md D + 934.489134729211 1.0000000 +Md D + 477.230689612032 1.0000000 +Md D + 243.715119463182 1.0000000 +Md D + 124.461944187287 1.0000000 +Md D + 63.5609952513411 1.0000000 +Md D + 32.4597220758638 1.0000000 +Md D + 16.5767315800501 1.0000000 +Md D + 8.46550778330153 1.0000000 +Md D + 4.32321786011102 1.0000000 +Md D + 2.20780762884063 1.0000000 +Md D + 1.12749685157938 1.0000000 +Md D + 0.575797063890465 1.0000000 +Md D + 0.294051604951678 1.0000000 +Md F + 1829.86962476550 1.0000000 +Md F + 934.489134729210 1.0000000 +Md F + 477.230689612032 1.0000000 +Md F + 243.715119463182 1.0000000 +Md F + 124.461944187287 1.0000000 +Md F + 63.5609952513411 1.0000000 +Md F + 32.4597220758638 1.0000000 +Md F + 16.5767315800501 1.0000000 +Md F + 8.46550778330153 1.0000000 +Md F + 4.32321786011102 1.0000000 +Md F + 2.20780762884063 1.0000000 +Md F + 1.12749685157938 1.0000000 +Md F + 0.575797063890464 1.0000000 +Md F + 0.294051604951678 1.0000000 +Md F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,25p,19d,15f) -> [32s,25p,19d,15f] +No S +43662492.6604555 1.0000000 +No S +22297831.7330222 1.0000000 +No S +11387194.5850786 1.0000000 +No S +5815282.94190191 1.0000000 +No S +2969784.65079438 1.0000000 +No S +1516627.98873367 1.0000000 +No S + 774520.959152738 1.0000000 +No S + 395537.152566831 1.0000000 +No S + 201995.358823884 1.0000000 +No S + 103156.238855453 1.0000000 +No S + 52680.4659115021 1.0000000 +No S + 26903.1860742976 1.0000000 +No S + 13739.0854166734 1.0000000 +No S + 7016.36109438299 1.0000000 +No S + 3583.15866840946 1.0000000 +No S + 1829.86962476550 1.0000000 +No S + 934.489134729210 1.0000000 +No S + 477.230689612032 1.0000000 +No S + 243.715119463182 1.0000000 +No S + 124.461944187287 1.0000000 +No S + 63.5609952513411 1.0000000 +No S + 32.4597220758638 1.0000000 +No S + 16.5767315800501 1.0000000 +No S + 8.46550778330153 1.0000000 +No S + 4.32321786011102 1.0000000 +No S + 2.20780762884063 1.0000000 +No S + 1.12749685157938 1.0000000 +No S + 0.575797063890464 1.0000000 +No S + 0.294051604951678 1.0000000 +No S + 0.150168091845475 1.0000000 +No S + 7.668876968794858E-002 1.0000000 +No S + 3.916389509898707E-002 1.0000000 +No P + 774520.959152738 1.0000000 +No P + 395537.152566831 1.0000000 +No P + 201995.358823884 1.0000000 +No P + 103156.238855453 1.0000000 +No P + 52680.4659115022 1.0000000 +No P + 26903.1860742976 1.0000000 +No P + 13739.0854166734 1.0000000 +No P + 7016.36109438300 1.0000000 +No P + 3583.15866840946 1.0000000 +No P + 1829.86962476550 1.0000000 +No P + 934.489134729211 1.0000000 +No P + 477.230689612032 1.0000000 +No P + 243.715119463182 1.0000000 +No P + 124.461944187287 1.0000000 +No P + 63.5609952513412 1.0000000 +No P + 32.4597220758638 1.0000000 +No P + 16.5767315800501 1.0000000 +No P + 8.46550778330153 1.0000000 +No P + 4.32321786011102 1.0000000 +No P + 2.20780762884063 1.0000000 +No P + 1.12749685157938 1.0000000 +No P + 0.575797063890465 1.0000000 +No P + 0.294051604951678 1.0000000 +No P + 0.150168091845475 1.0000000 +No P + 7.668876968794860E-002 1.0000000 +No D + 52680.4659115021 1.0000000 +No D + 26903.1860742976 1.0000000 +No D + 13739.0854166734 1.0000000 +No D + 7016.36109438299 1.0000000 +No D + 3583.15866840946 1.0000000 +No D + 1829.86962476550 1.0000000 +No D + 934.489134729211 1.0000000 +No D + 477.230689612032 1.0000000 +No D + 243.715119463182 1.0000000 +No D + 124.461944187287 1.0000000 +No D + 63.5609952513411 1.0000000 +No D + 32.4597220758638 1.0000000 +No D + 16.5767315800501 1.0000000 +No D + 8.46550778330153 1.0000000 +No D + 4.32321786011102 1.0000000 +No D + 2.20780762884063 1.0000000 +No D + 1.12749685157938 1.0000000 +No D + 0.575797063890465 1.0000000 +No D + 0.294051604951678 1.0000000 +No F + 1829.86962476550 1.0000000 +No F + 934.489134729210 1.0000000 +No F + 477.230689612032 1.0000000 +No F + 243.715119463182 1.0000000 +No F + 124.461944187287 1.0000000 +No F + 63.5609952513411 1.0000000 +No F + 32.4597220758638 1.0000000 +No F + 16.5767315800501 1.0000000 +No F + 8.46550778330153 1.0000000 +No F + 4.32321786011102 1.0000000 +No F + 2.20780762884063 1.0000000 +No F + 1.12749685157938 1.0000000 +No F + 0.575797063890464 1.0000000 +No F + 0.294051604951678 1.0000000 +No F + 0.150168091845475 1.0000000 +#BASIS SET: (32s,25p,20d,15f) -> [32s,25p,20d,15f] +Lr S +43662492.6604555 1.0000000 +Lr S +22297831.7330222 1.0000000 +Lr S +11387194.5850786 1.0000000 +Lr S +5815282.94190191 1.0000000 +Lr S +2969784.65079438 1.0000000 +Lr S +1516627.98873367 1.0000000 +Lr S + 774520.959152738 1.0000000 +Lr S + 395537.152566831 1.0000000 +Lr S + 201995.358823884 1.0000000 +Lr S + 103156.238855453 1.0000000 +Lr S + 52680.4659115021 1.0000000 +Lr S + 26903.1860742976 1.0000000 +Lr S + 13739.0854166734 1.0000000 +Lr S + 7016.36109438299 1.0000000 +Lr S + 3583.15866840946 1.0000000 +Lr S + 1829.86962476550 1.0000000 +Lr S + 934.489134729210 1.0000000 +Lr S + 477.230689612032 1.0000000 +Lr S + 243.715119463182 1.0000000 +Lr S + 124.461944187287 1.0000000 +Lr S + 63.5609952513411 1.0000000 +Lr S + 32.4597220758638 1.0000000 +Lr S + 16.5767315800501 1.0000000 +Lr S + 8.46550778330153 1.0000000 +Lr S + 4.32321786011102 1.0000000 +Lr S + 2.20780762884063 1.0000000 +Lr S + 1.12749685157938 1.0000000 +Lr S + 0.575797063890464 1.0000000 +Lr S + 0.294051604951678 1.0000000 +Lr S + 0.150168091845475 1.0000000 +Lr S + 7.668876968794858E-002 1.0000000 +Lr S + 3.916389509898707E-002 1.0000000 +Lr P + 774520.959152738 1.0000000 +Lr P + 395537.152566831 1.0000000 +Lr P + 201995.358823884 1.0000000 +Lr P + 103156.238855453 1.0000000 +Lr P + 52680.4659115022 1.0000000 +Lr P + 26903.1860742976 1.0000000 +Lr P + 13739.0854166734 1.0000000 +Lr P + 7016.36109438300 1.0000000 +Lr P + 3583.15866840946 1.0000000 +Lr P + 1829.86962476550 1.0000000 +Lr P + 934.489134729211 1.0000000 +Lr P + 477.230689612032 1.0000000 +Lr P + 243.715119463182 1.0000000 +Lr P + 124.461944187287 1.0000000 +Lr P + 63.5609952513412 1.0000000 +Lr P + 32.4597220758638 1.0000000 +Lr P + 16.5767315800501 1.0000000 +Lr P + 8.46550778330153 1.0000000 +Lr P + 4.32321786011102 1.0000000 +Lr P + 2.20780762884063 1.0000000 +Lr P + 1.12749685157938 1.0000000 +Lr P + 0.575797063890465 1.0000000 +Lr P + 0.294051604951678 1.0000000 +Lr P + 0.150168091845475 1.0000000 +Lr P + 7.668876968794860E-002 1.0000000 +Lr D + 26903.1860742976 1.0000000 +Lr D + 13739.0854166734 1.0000000 +Lr D + 7016.36109438300 1.0000000 +Lr D + 3583.15866840946 1.0000000 +Lr D + 1829.86962476550 1.0000000 +Lr D + 934.489134729211 1.0000000 +Lr D + 477.230689612032 1.0000000 +Lr D + 243.715119463182 1.0000000 +Lr D + 124.461944187287 1.0000000 +Lr D + 63.5609952513412 1.0000000 +Lr D + 32.4597220758638 1.0000000 +Lr D + 16.5767315800501 1.0000000 +Lr D + 8.46550778330153 1.0000000 +Lr D + 4.32321786011102 1.0000000 +Lr D + 2.20780762884063 1.0000000 +Lr D + 1.12749685157938 1.0000000 +Lr D + 0.575797063890465 1.0000000 +Lr D + 0.294051604951678 1.0000000 +Lr D + 0.150168091845475 1.0000000 +Lr D + 7.668876968794860E-002 1.0000000 +Lr F + 3583.15866840946 1.0000000 +Lr F + 1829.86962476550 1.0000000 +Lr F + 934.489134729211 1.0000000 +Lr F + 477.230689612032 1.0000000 +Lr F + 243.715119463182 1.0000000 +Lr F + 124.461944187287 1.0000000 +Lr F + 63.5609952513411 1.0000000 +Lr F + 32.4597220758638 1.0000000 +Lr F + 16.5767315800501 1.0000000 +Lr F + 8.46550778330153 1.0000000 +Lr F + 4.32321786011102 1.0000000 +Lr F + 2.20780762884063 1.0000000 +Lr F + 1.12749685157938 1.0000000 +Lr F + 0.575797063890465 1.0000000 +Lr F + 0.294051604951678 1.0000000 +END diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 45845586..a597490c 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -1,219 +1,67 @@ """Test gbasis.integrals.libcint.""" -from gbasis.contractions import GeneralizedContractionShell -from gbasis.integrals._moment_int import _compute_multipole_moment_integrals -from gbasis.integrals.overlap import Overlap, overlap_integral + +import pytest + +import numpy as np + +from gbasis.integrals.overlap import overlap_integral + from gbasis.integrals.libcint import CBasis + from gbasis.parsers import make_contractions, parse_nwchem -import numpy as np -import pytest -from scipy.special import factorial2 -from utils import find_datafile, HortonContractions - - -# def test_overlap_construct_array_contraction(): -# """Test gbasis.integrals.overlap.Overlap.construct_array_contraction.""" -# test_one = GeneralizedContractionShell( -# 1, np.array([0.5, 1, 1.5]), np.array([1.0, 2.0]), np.array([0.1, 0.01]) -# ) -# test_two = GeneralizedContractionShell( -# 2, np.array([1.5, 2, 3]), np.array([3.0, 4.0]), np.array([0.2, 0.02]) -# ) -# answer = np.array( -# [ -# [ -# _compute_multipole_moment_integrals( -# np.array([0, 0, 0]), -# np.array([[0, 0, 0]]), -# np.array([0.5, 1, 1.5]), -# np.array([angmom_comp_one]), -# np.array([0.1, 0.01]), -# np.array([[1], [2]]), -# np.array( -# [ -# [ -# (2 * 0.1 / np.pi) ** (3 / 4) -# * (4 * 0.1) ** (1 / 2) -# / np.sqrt(np.prod(factorial2(2 * angmom_comp_one - 1))), -# (2 * 0.01 / np.pi) ** (3 / 4) -# * (4 * 0.01) ** (1 / 2) -# / np.sqrt(np.prod(factorial2(2 * angmom_comp_one - 1))), -# ] -# ] -# ), -# np.array([1.5, 2, 3]), -# np.array([angmom_comp_two]), -# np.array([0.2, 0.02]), -# np.array([[3], [4]]), -# np.array( -# [ -# [ -# (2 * 0.2 / np.pi) ** (3 / 4) -# * (4 * 0.2) ** (2 / 2) -# / np.sqrt(np.prod(factorial2(2 * angmom_comp_two - 1))), -# (2 * 0.02 / np.pi) ** (3 / 4) -# * (4 * 0.02) ** (2 / 2) -# / np.sqrt(np.prod(factorial2(2 * angmom_comp_two - 1))), -# ] -# ] -# ), -# ) -# for angmom_comp_two in test_two.angmom_components_cart -# ] -# for angmom_comp_one in test_one.angmom_components_cart -# ] -# ) -# assert np.allclose( -# np.squeeze(Overlap.construct_array_contraction(test_one, test_two)), np.squeeze(answer) -# ) -# -# with pytest.raises(TypeError): -# Overlap.construct_array_contraction(test_one, None) -# with pytest.raises(TypeError): -# Overlap.construct_array_contraction(None, test_two) -# -# -# def test_overlap_cartesian(): -# """Test gbasis.integrals.overlap.overlap_cartesian.""" -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose( -# overlap_obj.construct_array_cartesian(), overlap_integral(basis, coord_type="cartesian") -# ) -# -# -# def test_overlap_spherical(): -# """Test gbasis.integrals.overlap.overlap_spherical.""" -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose( -# overlap_obj.construct_array_spherical(), overlap_integral(basis, coord_type="spherical") -# ) -# -# -# def test_overlap_mix(): -# """Test gbasis.integrals.overlap.overlap_mix.""" -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose( -# overlap_obj.construct_array_mix(["spherical"] * 8), -# overlap_integral(basis, coord_type=["spherical"] * 8), -# ) -# -# -# def test_overlap_lincomb(): -# """Test gbasis.integrals.overlap.overlap_lincomb.""" -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# transform = np.random.rand(14, 18) -# assert np.allclose( -# overlap_obj.construct_array_lincomb(transform, "spherical"), -# overlap_integral(basis, transform=transform, coord_type="spherical"), -# ) -# -# -# def test_overlap_cartesian_norm_anorcc(): -# """Test the norm of gbasis.integrals.overlap_cartesian on the ANO-RCC basis set. -# -# The contraction coefficients in ANO-RCC is such that the cartesian contractions are normalized. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) -# -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) -# -# -# def test_overlap_spherical_norm_sto6g(): -# """Test the norm of gbasis.integrals.overlap_spherical on the STO-6G basis set. -# -# The contraction coefficients in STO-6G is such that the spherical contractions are not -# normalized to past 3rd decimal places. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_spherical()), 1) -# -# -# def test_overlap_spherical_norm_anorcc(): -# """Test the norm of gbasis.integrals.overlap_spherical on the ANO-RCC basis set. -# -# The contraction coefficients in ANO-RCC is such that the Cartesian contractions are normalized. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) -# -# basis = make_contractions(basis_dict, ["C"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) -# -# basis = make_contractions(basis_dict, ["Xe"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) -# -# -# def test_overlap_cartesian_norm_sto6g(): -# """Test the norm of gbasis.integrals.overlap_cartesian on the STO-6G basis set. -# -# The contraction coefficients in STO-6G is such that the Cartesian contractions are not -# normalized to past 3rd decimal places. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) - - -def test_overlap_horton_anorcc_hhe(): - """Test gbasis.integrals.overlap.overlap_basis_cartesian against HORTON's overlap matrix. - - The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. + +from utils import HortonContractions, find_datafile + + +def test_overlap_ugbs_hhe(): + """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. + + The test case is diatomic with H and He separated by 0.8 angstroms with basis set UGBS. """ - basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) + + atsyms = ["H", "He"] - # NOTE: used HORTON's conversion factor for angstroms to bohr - atcoords = np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) + atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 - basis = make_contractions(basis_dict, ["H", "He"], atcoords) + gbasis = make_contractions(basis_dict, atsyms, atcoords) + gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] + cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") + cbasis_olp = cbasis.olp() - horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) + assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ + gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ + cbasis.nbas - cbasis = CBasis(basis, ["H", "He"], atcoords, coord_type="cartesian") + print(cbasis_olp) - assert np.allclose(cbasis.olp(), horton_overlap) + assert np.allclose(cbasis_olp, gbasis_olp) -def test_overlap_horton_anorcc_bec(): - """Test gbasis.integrals.overlap.overlap_cartesian against HORTON's overlap matrix. +def test_overlap_horton_ugbs_bec(): + """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. - The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. + The test case is diatomic with Be and C separated by 1.0 angstroms with basis set UGBS. """ - basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) + + atsyms = ["Be", "C"] - # NOTE: used HORTON's conversion factor for angstroms to bohr - atcoords = np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) + atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 - basis = make_contractions(basis_dict, ["Be", "C"], atcoords) + gbasis = make_contractions(basis_dict, atsyms, atcoords) + gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] + cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") + cbasis_olp = cbasis.olp() - horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) + assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ + gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ + cbasis.nbas - cbasis = CBasis(basis, ["Be", "C"], atcoords, coord_type="cartesian") + print(cbasis_olp) - assert np.allclose(cbasis.olp(), horton_overlap) + assert np.allclose(cbasis_olp, gbasis_olp) From dbe41c206b1dd1b77c23f9c2f7762b79518124a5 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 15 Nov 2023 11:02:09 -0500 Subject: [PATCH 13/72] Add consistency tests for ovlp; UGBS seems to work --- tests/test_libcint.py | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index a597490c..0135a145 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -37,6 +37,7 @@ def test_overlap_ugbs_hhe(): print(cbasis_olp) + assert np.allclose(np.diag(cbasis_olp), 1) assert np.allclose(cbasis_olp, gbasis_olp) @@ -64,4 +65,61 @@ def test_overlap_horton_ugbs_bec(): print(cbasis_olp) + assert np.allclose(np.diag(cbasis_olp), 1) assert np.allclose(cbasis_olp, gbasis_olp) + + +# def test_overlap_anorcc_hhe(): +# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. +# +# The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) +# +# atsyms = ["H", "He"] +# +# atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 +# +# gbasis = make_contractions(basis_dict, atsyms, atcoords) +# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") +# +# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") +# cbasis_olp = cbasis.olp() +# +# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ +# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ +# cbasis.nbas +# +# print(cbasis_olp) +# +# assert np.allclose(np.diag(cbasis_olp), 1) +# assert np.allclose(cbasis_olp, gbasis_olp) + + +# def test_overlap_horton_anorcc_bec(): +# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. +# +# The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) +# +# atsyms = ["Be", "C"] +# +# atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 +# +# gbasis = make_contractions(basis_dict, atsyms, atcoords) +# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") +# +# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") +# cbasis_olp = cbasis.olp() +# +# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ +# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ +# cbasis.nbas +# +# print(cbasis_olp) +# +# assert np.allclose(np.diag(cbasis_olp), 1) +# assert np.allclose(cbasis_olp, gbasis_olp) From 94cee1b85765ad3b10c5b1fd6c6a2358093c7891 Mon Sep 17 00:00:00 2001 From: leila-pujal Date: Wed, 1 Nov 2023 12:36:46 -0400 Subject: [PATCH 14/72] Add icenter property to contraction base class - Add icenter property to GeneralizedContractionShell class. - Parse IOData icenter attribute for each shell. --- gbasis/wrappers.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gbasis/wrappers.py b/gbasis/wrappers.py index 57ce1184..3338168a 100644 --- a/gbasis/wrappers.py +++ b/gbasis/wrappers.py @@ -126,10 +126,15 @@ def angmom_components_sph(self): # pylint: disable=E1136 basis.append( +<<<<<<< HEAD IODataShell( angmom, mol.atcoords[shell.icenter], shell.coeffs, shell.exponents, shell.kinds[0], icenter=shell.icenter ) +======= + IODataShell(angmom, mol.atcoords[shell.icenter], + shell.coeffs, shell.exponents, icenter=shell.icenter) +>>>>>>> Add icenter property to contraction base class ) return basis From 7e997b25d5171791aa321bac7c6535ff6f1e21c0 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 1 Nov 2023 11:04:24 -0400 Subject: [PATCH 15/72] Add libcint bindings --- gbasis/integrals/libcint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 65202c30..6952a8c8 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -248,7 +248,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): nbas = 0 nexp = 0 ncof = 0 - for _, contractions in basis: + for contractions in basis: nshl += len(contractions) for shell in contractions: nbas += num_angmom(shell) From 00631b17a183f862bcd19193bd6066eb3f387684 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 2 Nov 2023 11:15:50 -0400 Subject: [PATCH 16/72] Make use of icenter attr for libcint binding --- gbasis/integrals/libcint.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 6952a8c8..11856781 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -242,6 +242,12 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): atm_basis[shell.icenter].append(shell) basis = list(atm_basis.items()) + # Organize basis by atomic center + atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} + for shell in basis: + atm_basis[shell.icenter].append(shell) + basis = list(atm_basis.values()) + # Set up counts of atomic centers/shells/gbfs/exps/coeffs natm = len(basis) nshl = 0 From 4df164faf96ff6f55d52ccd17af144958b7f1c2e Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Fri, 3 Nov 2023 09:17:35 -0400 Subject: [PATCH 17/72] Debugging WIP --- tests/test_libcint.py | 61 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 0135a145..558b4112 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -105,21 +105,58 @@ def test_overlap_horton_ugbs_bec(): # """ # basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) # -# atsyms = ["Be", "C"] +# basis = make_contractions(basis_dict, ["C"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) # -# atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 +# basis = make_contractions(basis_dict, ["Xe"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) # -# gbasis = make_contractions(basis_dict, atsyms, atcoords) -# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") # -# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") -# cbasis_olp = cbasis.olp() +# def test_overlap_cartesian_norm_sto6g(): +# """Test the norm of gbasis.integrals.overlap_cartesian on the STO-6G basis set. # -# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ -# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ -# cbasis.nbas +# The contraction coefficients in STO-6G is such that the Cartesian contractions are not +# normalized to past 3rd decimal places. # -# print(cbasis_olp) +# """ +# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) # -# assert np.allclose(np.diag(cbasis_olp), 1) -# assert np.allclose(cbasis_olp, gbasis_olp) +# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) +# overlap_obj = Overlap(basis) +# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) + + +def test_overlap_horton_anorcc_hhe(): + """Test gbasis.integrals.overlap.overlap_basis_cartesian against HORTON's overlap matrix. + + The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. + + """ + basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr + basis = make_contractions( + basis_dict, ["H", "He"], np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) + ) + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + + horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) + assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) + + +def test_overlap_horton_anorcc_bec(): + """Test gbasis.integrals.overlap.overlap_cartesian against HORTON's overlap matrix. + + The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. + + """ + basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr + basis = make_contractions( + basis_dict, ["Be", "C"], np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) + ) + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + + horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) + assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) From a1de3458bf5266f4ef11e8e0a05aae85f0bc9ba5 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 6 Nov 2023 13:35:36 -0500 Subject: [PATCH 18/72] Expose all attrs (center,charge) required for cint bindings --- gbasis/contractions.py | 1 + gbasis/wrappers.py | 5 ----- tests/test_libcint.py | 3 ++- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index e7c74f4d..57f7f629 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -153,6 +153,7 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e self.assign_norm_cont() self.coord_type = coord_type self.icenter = icenter + self.charge = charge @property def icenter(self): diff --git a/gbasis/wrappers.py b/gbasis/wrappers.py index 3338168a..57ce1184 100644 --- a/gbasis/wrappers.py +++ b/gbasis/wrappers.py @@ -126,15 +126,10 @@ def angmom_components_sph(self): # pylint: disable=E1136 basis.append( -<<<<<<< HEAD IODataShell( angmom, mol.atcoords[shell.icenter], shell.coeffs, shell.exponents, shell.kinds[0], icenter=shell.icenter ) -======= - IODataShell(angmom, mol.atcoords[shell.icenter], - shell.coeffs, shell.exponents, icenter=shell.icenter) ->>>>>>> Add icenter property to contraction base class ) return basis diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 558b4112..7798af63 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -156,7 +156,8 @@ def test_overlap_horton_anorcc_bec(): basis = make_contractions( basis_dict, ["Be", "C"], np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) ) - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter, + charge=i.charge) for i in basis] horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) From b7dc4306b811183a4e2154d99e86103cf558b384 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 7 Nov 2023 11:20:49 -0500 Subject: [PATCH 19/72] Fix CBasis interface; take in at[nums|coords] tests still fail; WIP --- gbasis/integrals/libcint.py | 5 +++-- tests/test_libcint.py | 31 ++++++++++++++++++++----------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 11856781..59d6eca4 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -246,7 +246,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} for shell in basis: atm_basis[shell.icenter].append(shell) - basis = list(atm_basis.values()) + basis = list(atm_basis.items()) # Set up counts of atomic centers/shells/gbfs/exps/coeffs natm = len(basis) @@ -254,7 +254,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): nbas = 0 nexp = 0 ncof = 0 - for contractions in basis: + for _, contractions in basis: nshl += len(contractions) for shell in contractions: nbas += num_angmom(shell) @@ -320,6 +320,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.offsets = offsets self.max_off = max(offsets) + # Make individual integral evaluation methods via `make_intNe` macros: # Kinetic energy integral diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 7798af63..ae57095b 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -135,14 +135,19 @@ def test_overlap_horton_anorcc_hhe(): """ basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr - basis = make_contractions( - basis_dict, ["H", "He"], np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) - ) - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps) for i in basis] + atcoords = np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) + + basis = make_contractions(basis_dict, ["H", "He"], atcoords) + + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) - assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) + + cbasis = CBasis(basis, [1, 2], atcoords, coord_type="cartesian") + + assert np.allclose(cbasis.olp(), horton_overlap) def test_overlap_horton_anorcc_bec(): @@ -152,12 +157,16 @@ def test_overlap_horton_anorcc_bec(): """ basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + # NOTE: used HORTON's conversion factor for angstroms to bohr - basis = make_contractions( - basis_dict, ["Be", "C"], np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) - ) - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter, - charge=i.charge) for i in basis] + atcoords = np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) + + basis = make_contractions(basis_dict, ["Be", "C"], atcoords) + + basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) - assert np.allclose(CBasis(basis, coord_type="cartesian").olp(), horton_overlap) + + cbasis = CBasis(basis, [4, 6], atcoords, coord_type="cartesian") + + assert np.allclose(cbasis.olp(), horton_overlap) From 29992d2b49d66861641b2612e56d5a95cff05f99 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 11:29:34 -0500 Subject: [PATCH 20/72] Clean up interface (remove _charge), bindings --- gbasis/contractions.py | 1 - gbasis/integrals/libcint.py | 13 +++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index 57f7f629..e7c74f4d 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -153,7 +153,6 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e self.assign_norm_cont() self.coord_type = coord_type self.icenter = icenter - self.charge = charge @property def icenter(self): diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 59d6eca4..5d674c26 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -466,3 +466,16 @@ def int2e(): LIBCINT C library handle and binding generator. """ + + +# C fuctions used in CBasis class + +cint1e_kin_cart = LIBCINT.cint1e_kin_cart +cint1e_nuc_cart = LIBCINT.cint1e_nuc_cart +cint1e_ovlp_cart = LIBCINT.cint1e_ovlp_cart +cint2e_cart = LIBCINT.cint2e_cart + +cint1e_kin_sph = LIBCINT.cint1e_kin_sph +cint1e_nuc_sph = LIBCINT.cint1e_nuc_sph +cint1e_ovlp_sph = LIBCINT.cint1e_ovlp_sph +cint2e_sph = LIBCINT.cint2e_sph From ae999bfc21ca1f41b52d0b6f13fb3d5923a7fb60 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 12:25:36 -0500 Subject: [PATCH 21/72] Add proper cache for bound LibCINT functions --- gbasis/integrals/libcint.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 5d674c26..59d6eca4 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -466,16 +466,3 @@ def int2e(): LIBCINT C library handle and binding generator. """ - - -# C fuctions used in CBasis class - -cint1e_kin_cart = LIBCINT.cint1e_kin_cart -cint1e_nuc_cart = LIBCINT.cint1e_nuc_cart -cint1e_ovlp_cart = LIBCINT.cint1e_ovlp_cart -cint2e_cart = LIBCINT.cint2e_cart - -cint1e_kin_sph = LIBCINT.cint1e_kin_sph -cint1e_nuc_sph = LIBCINT.cint1e_nuc_sph -cint1e_ovlp_sph = LIBCINT.cint1e_ovlp_sph -cint2e_sph = LIBCINT.cint2e_sph From 3dd865c006f38a3453cf611fa1a432412a23afd3 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 9 Nov 2023 14:58:19 -0500 Subject: [PATCH 22/72] Make gbasis-libcint tests match gbasis conventions --- tests/test_libcint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index ae57095b..3571f5ee 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -145,7 +145,7 @@ def test_overlap_horton_anorcc_hhe(): horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) - cbasis = CBasis(basis, [1, 2], atcoords, coord_type="cartesian") + cbasis = CBasis(basis, ["H", "He"], atcoords, coord_type="cartesian") assert np.allclose(cbasis.olp(), horton_overlap) @@ -167,6 +167,6 @@ def test_overlap_horton_anorcc_bec(): horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) - cbasis = CBasis(basis, [4, 6], atcoords, coord_type="cartesian") + cbasis = CBasis(basis, ["Be", "C"], atcoords, coord_type="cartesian") assert np.allclose(cbasis.olp(), horton_overlap) From c56ee16a6ff13361d11bdd93c3b2d87c68877d03 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 13 Nov 2023 15:21:03 -0500 Subject: [PATCH 23/72] Normalize coeffs for LibCInt CBasis binding --- tests/test_libcint.py | 48 ++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 3571f5ee..a4627e25 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -134,39 +134,49 @@ def test_overlap_horton_anorcc_hhe(): The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. """ - basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) - # NOTE: used HORTON's conversion factor for angstroms to bohr - atcoords = np.array([[0, 0, 0], [0.8 * 1.0 / 0.5291772083, 0, 0]]) + atsyms = ["H", "He"] - basis = make_contractions(basis_dict, ["H", "He"], atcoords) + atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] + gbasis = make_contractions(basis_dict, atsyms, atcoords) + gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - horton_overlap = np.load(find_datafile("data_horton_hhe_cart_overlap.npy")) + cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") + cbasis_olp = cbasis.olp() - cbasis = CBasis(basis, ["H", "He"], atcoords, coord_type="cartesian") + assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ + gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ + cbasis.nbas - assert np.allclose(cbasis.olp(), horton_overlap) + print(cbasis_olp) + assert np.allclose(cbasis_olp, gbasis_olp) -def test_overlap_horton_anorcc_bec(): - """Test gbasis.integrals.overlap.overlap_cartesian against HORTON's overlap matrix. - The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. +def test_overlap_horton_ugbs_bec(): + """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. + + The test case is diatomic with Be and C separated by 1.0 angstroms with basis set UGBS. """ - basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) + basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) - # NOTE: used HORTON's conversion factor for angstroms to bohr - atcoords = np.array([[0, 0, 0], [1.0 * 1.0 / 0.5291772083, 0, 0]]) + atsyms = ["Be", "C"] - basis = make_contractions(basis_dict, ["Be", "C"], atcoords) + atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 + + gbasis = make_contractions(basis_dict, atsyms, atcoords) + gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - basis = [HortonContractions(i.angmom, i.coord, i.coeffs, i.exps, icenter=i.icenter) for i in basis] + cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") + cbasis_olp = cbasis.olp() - horton_overlap = np.load(find_datafile("data_horton_bec_cart_overlap.npy")) + assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ + gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ + cbasis.nbas - cbasis = CBasis(basis, ["Be", "C"], atcoords, coord_type="cartesian") + print(cbasis_olp) - assert np.allclose(cbasis.olp(), horton_overlap) + assert np.allclose(cbasis_olp, gbasis_olp) From c82b730860d185125bfe461a47993396351262b6 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 15 Nov 2023 11:02:09 -0500 Subject: [PATCH 24/72] Add consistency tests for ovlp; UGBS seems to work --- tests/test_libcint.py | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index a4627e25..bf3db5eb 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -152,6 +152,7 @@ def test_overlap_horton_anorcc_hhe(): print(cbasis_olp) + assert np.allclose(np.diag(cbasis_olp), 1) assert np.allclose(cbasis_olp, gbasis_olp) @@ -179,4 +180,61 @@ def test_overlap_horton_ugbs_bec(): print(cbasis_olp) + assert np.allclose(np.diag(cbasis_olp), 1) assert np.allclose(cbasis_olp, gbasis_olp) + + +# def test_overlap_anorcc_hhe(): +# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. +# +# The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) +# +# atsyms = ["H", "He"] +# +# atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 +# +# gbasis = make_contractions(basis_dict, atsyms, atcoords) +# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") +# +# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") +# cbasis_olp = cbasis.olp() +# +# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ +# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ +# cbasis.nbas +# +# print(cbasis_olp) +# +# assert np.allclose(np.diag(cbasis_olp), 1) +# assert np.allclose(cbasis_olp, gbasis_olp) + + +# def test_overlap_horton_anorcc_bec(): +# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. +# +# The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. +# +# """ +# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) +# +# atsyms = ["Be", "C"] +# +# atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 +# +# gbasis = make_contractions(basis_dict, atsyms, atcoords) +# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") +# +# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") +# cbasis_olp = cbasis.olp() +# +# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ +# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ +# cbasis.nbas +# +# print(cbasis_olp) +# +# assert np.allclose(np.diag(cbasis_olp), 1) +# assert np.allclose(cbasis_olp, gbasis_olp) From a1492def0dbf09ca7d0dc36d5ec7f927ba04260a Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 20 Nov 2023 10:47:13 -0500 Subject: [PATCH 25/72] Working tests for most basic case, all integrals --- gbasis/contractions.py | 2 +- gbasis/integrals/libcint.py | 2 +- tests/test_libcint.py | 98 +++++++++++++++++++++++++++++-------- 3 files changed, 79 insertions(+), 23 deletions(-) diff --git a/gbasis/contractions.py b/gbasis/contractions.py index e7c74f4d..c58580b9 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -1,7 +1,7 @@ """Data class for contractions of Gaussian-type primitives.""" -from gbasis.utils import factorial2 from numbers import Integral import numpy as np +from gbasis.utils import factorial2 class GeneralizedContractionShell: diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 59d6eca4..485f97c7 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -394,7 +394,7 @@ def make_int2e(self, func): def int2e(): # Make temporary arrays shls = np.zeros(4, dtype=c_int) - buf = np.zeros(self.max_offset ** 4, dtype=c_double) + buf = np.zeros(self.max_off ** 4, dtype=c_double) # Make output array out = np.zeros((self.nbas, self.nbas, self.nbas, self.nbas), dtype=c_double) # Evaluate the integral function over all shells diff --git a/tests/test_libcint.py b/tests/test_libcint.py index bf3db5eb..bcfb5de9 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -3,48 +3,104 @@ import pytest import numpy as np +import numpy.testing as npt from gbasis.integrals.overlap import overlap_integral +from gbasis.integrals.kinetic_energy import kinetic_energy_integral +from gbasis.integrals.nuclear_electron_attraction import nuclear_electron_attraction_integral +from gbasis.integrals.electron_repulsion import electron_repulsion_integral -from gbasis.integrals.libcint import CBasis +from gbasis.integrals.libcint import ELEMENTS, CBasis from gbasis.parsers import make_contractions, parse_nwchem -from utils import HortonContractions, find_datafile +from utils import find_datafile -def test_overlap_ugbs_hhe(): - """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. +CASES = [ + ("UGBS", "H", np.asarray([[0., 0., 0.]]) / 0.5291772083), + ("UGBS", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083), + # ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), + # ("UGBS", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), + # ("ANORCC", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), + # ("ANORCC", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), +] +r""" +Test systems for gbasis.integrals.libcint. + +""" - The test case is diatomic with H and He separated by 0.8 angstroms with basis set UGBS. + +@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) +def test_cbasis_overlap(basis, atsyms, atcoords): + r""" + Test gbasis.integrals.libcint.CBasis overlap integrals + against the GBasis Python overlap integrals. """ - basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) + atsyms = [sym.strip() for sym in atsyms.split(",")] + basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) - atsyms = ["H", "He"] + py_basis = make_contractions(basis_dict, atsyms, atcoords) + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type="cartesian") - atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 + py_olp = overlap_integral(py_basis, coord_type="cartesian") + lc_olp = lc_basis.olp() - gbasis = make_contractions(basis_dict, atsyms, atcoords) - gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") + npt.assert_array_equal(py_olp.shape, lc_basis.nbas) + npt.assert_array_equal(lc_olp.shape, lc_basis.nbas) + npt.assert_allclose(np.diag(py_olp), 1) + npt.assert_allclose(lc_olp, py_olp) - cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") - cbasis_olp = cbasis.olp() - assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ - gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ - cbasis.nbas +@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) +def test_cbasis_kinetic(basis, atsyms, atcoords): + r""" + Test gbasis.integrals.libcint.CBasis kinetic energy integrals + against the GBasis Python kinetic energy integrals. - print(cbasis_olp) + """ + atsyms = [sym.strip() for sym in atsyms.split(",")] + basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) - assert np.allclose(np.diag(cbasis_olp), 1) - assert np.allclose(cbasis_olp, gbasis_olp) + py_basis = make_contractions(basis_dict, atsyms, atcoords) + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type="cartesian") + py_kin = kinetic_energy_integral(py_basis, coord_type="cartesian") + lc_kin = lc_basis.kin() -def test_overlap_horton_ugbs_bec(): - """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. + npt.assert_array_equal(py_kin.shape, lc_basis.nbas) + npt.assert_array_equal(lc_kin.shape, lc_basis.nbas) + npt.assert_allclose(lc_kin, py_kin) - The test case is diatomic with Be and C separated by 1.0 angstroms with basis set UGBS. + +@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) +def test_cbasis_nuclear(basis, atsyms, atcoords): + r""" + Test gbasis.integrals.libcint.CBasis nuclear electron attraction integrals + against the GBasis Python nuclear electron attraction integrals. + + """ + atsyms = [sym.strip() for sym in atsyms.split(",")] + basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) + + py_basis = make_contractions(basis_dict, atsyms, atcoords) + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type="cartesian") + + atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) + py_nuc = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type="cartesian") + lc_nuc = lc_basis.nuc() + + npt.assert_array_equal(py_nuc.shape, lc_basis.nbas) + npt.assert_array_equal(lc_nuc.shape, lc_basis.nbas) + npt.assert_allclose(lc_nuc, py_nuc) + + +@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) +def test_cbasis_eri(basis, atsyms, atcoords): + r""" + Test gbasis.integrals.libcint.CBasis electron repulsion integrals + against the GBasis Python electron repulsion integrals. """ basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) From 2ca87792ca154d464c41f9ab1ba0513e1404056b Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 20 Nov 2023 11:05:17 -0500 Subject: [PATCH 26/72] Translate libcint ERI to phys. notation by default --- gbasis/integrals/libcint.py | 10 ++++++++-- tests/test_libcint.py | 5 ++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 485f97c7..ed836fab 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -391,7 +391,13 @@ def make_int2e(self, func): """ # Make instance-bound integral method - def int2e(): + def int2e(notation="physicist"): + if notation == "physicist": + physicist = True + elif notation == "chemist": + physicist = False + else: + raise ValueError("`notation` must be one of 'physicist' or 'chemist'") # Make temporary arrays shls = np.zeros(4, dtype=c_int) buf = np.zeros(self.max_off ** 4, dtype=c_double) @@ -453,7 +459,7 @@ def int2e(): # Iterate `ipos` ipos += p_off # Return integrals in `out` array - return out + return out.transpose(0, 2, 1, 3) if physicist else out # Return instance-bound integral method return int2e diff --git a/tests/test_libcint.py b/tests/test_libcint.py index bcfb5de9..3f7440e4 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -199,9 +199,8 @@ def test_overlap_horton_anorcc_hhe(): gbasis = make_contractions(basis_dict, atsyms, atcoords) gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") - cbasis_olp = cbasis.olp() - + py_eri = electron_repulsion_integral(py_basis, coord_type="cartesian") + lc_eri = lc_basis.eri() assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ cbasis.nbas From a57bfa47b35401e8bd668c918b22521313d9d1cd Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 20 Nov 2023 18:47:01 -0500 Subject: [PATCH 27/72] Get multiple atomic centers working --- gbasis/integrals/libcint.py | 11 ++++------- gbasis/parsers.py | 5 +++-- tests/test_libcint.py | 9 ++++----- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index ed836fab..11a6b841 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -262,7 +262,6 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): ncof += shell.coeffs.size # Allocate and fill C input arrays - iatm = 0 ibas = 0 ioff = 20 atm = np.zeros((natm, 6), dtype=c_int) @@ -271,17 +270,17 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): offsets = [] # Go to next atomic center's contractions for atnum, atcoord, (icenter, contractions) in zip(atnums, atcoords, basis): - # Nuclear charge of `iatm` atom - atm[iatm, 0] = atnum + # Nuclear charge of `icenter` atom + atm[icenter, 0] = atnum # `env` offset to save xyz coordinates - atm[iatm, 1] = ioff + atm[icenter, 1] = ioff # Save xyz coordinates; increment ioff env[ioff:ioff + 3] = atcoord ioff += 3 # Go to next contracted GTO for shell in contractions: # Index of corresponding atom - bas[ibas, 0] = iatm + bas[ibas, 0] = icenter # Angular momentum bas[ibas, 1] = shell.angmom # Number of [primitive|contracted] GTOs in `ibas` basis function @@ -305,8 +304,6 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): ibas += 1 # Save basis function offsets offsets.append(num_angmom(shell)) - # Increment atomic center - iatm += 1 # Save inputs to `libcint` functions self.natm = natm diff --git a/gbasis/parsers.py b/gbasis/parsers.py index b0f42853..efb8c9b7 100644 --- a/gbasis/parsers.py +++ b/gbasis/parsers.py @@ -238,10 +238,11 @@ def make_contractions(basis_dict, atoms, coords, coord_types, tol=1e-20, overlap ) # make shells - for atom, coord in zip(atoms, coords): + for icenter, (atom, coord) in enumerate(zip(atoms, coords)): for angmom, exps, coeffs in basis_dict[atom]: basis.append( GeneralizedContractionShell( - angmom, coord, coeffs, exps, coord_types.pop(0), tol=tol, ovr_screen=overlap) + angmom, coord, coeffs, exps, coord_types.pop(0), + icenter=icenter, tol=tol, ovr_screen=overlap) ) return tuple(basis) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 3f7440e4..d8c2c2f0 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -20,7 +20,7 @@ CASES = [ ("UGBS", "H", np.asarray([[0., 0., 0.]]) / 0.5291772083), ("UGBS", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083), - # ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), + ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), # ("UGBS", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), # ("ANORCC", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), # ("ANORCC", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), @@ -49,8 +49,7 @@ def test_cbasis_overlap(basis, atsyms, atcoords): npt.assert_array_equal(py_olp.shape, lc_basis.nbas) npt.assert_array_equal(lc_olp.shape, lc_basis.nbas) - npt.assert_allclose(np.diag(py_olp), 1) - npt.assert_allclose(lc_olp, py_olp) + npt.assert_allclose(lc_olp, py_olp, atol=1e-7) @pytest.mark.parametrize("basis, atsyms, atcoords", CASES) @@ -71,7 +70,7 @@ def test_cbasis_kinetic(basis, atsyms, atcoords): npt.assert_array_equal(py_kin.shape, lc_basis.nbas) npt.assert_array_equal(lc_kin.shape, lc_basis.nbas) - npt.assert_allclose(lc_kin, py_kin) + npt.assert_allclose(lc_kin, py_kin, atol=1e-7) @pytest.mark.parametrize("basis, atsyms, atcoords", CASES) @@ -93,7 +92,7 @@ def test_cbasis_nuclear(basis, atsyms, atcoords): npt.assert_array_equal(py_nuc.shape, lc_basis.nbas) npt.assert_array_equal(lc_nuc.shape, lc_basis.nbas) - npt.assert_allclose(lc_nuc, py_nuc) + npt.assert_allclose(lc_nuc, py_nuc, atol=1e-7) @pytest.mark.parametrize("basis, atsyms, atcoords", CASES) From 3a6f69bcf58dd79af6f75f6eed328c82663d6f13 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 22 Nov 2023 11:15:43 -0500 Subject: [PATCH 28/72] Seg. contractions run w/o crash; numbers still bad --- gbasis/integrals/libcint.py | 43 +++++++++++++++++++++++-------------- tests/test_libcint.py | 4 +++- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 11a6b841..a4554c63 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -257,7 +257,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): for _, contractions in basis: nshl += len(contractions) for shell in contractions: - nbas += num_angmom(shell) + nbas += num_angmom(shell) * shell.coeffs.shape[1] nexp += shell.exps.size ncof += shell.coeffs.size @@ -266,7 +266,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): ioff = 20 atm = np.zeros((natm, 6), dtype=c_int) bas = np.zeros((nbas, 8), dtype=c_int) - env = np.zeros(20 + natm * 3 + nexp + ncof, dtype=c_double) + env = np.zeros(20 + natm * 4 + nexp + ncof, dtype=c_double) offsets = [] # Go to next atomic center's contractions for atnum, atcoord, (icenter, contractions) in zip(atnums, atcoords, basis): @@ -274,34 +274,45 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): atm[icenter, 0] = atnum # `env` offset to save xyz coordinates atm[icenter, 1] = ioff + # Nuclear model of `icenter`; unused here + atm[icenter, 2] = 0 + # `env` offset to save nuclear model parameters zeta; unused here + atm[icenter, 3] = 0 + # Reserved/unused in `libcint` + atm[icenter, 4:6] = 0 # Save xyz coordinates; increment ioff env[ioff:ioff + 3] = atcoord ioff += 3 # Go to next contracted GTO for shell in contractions: + jbas = ibas + shell.coeffs.shape[1] # Index of corresponding atom - bas[ibas, 0] = icenter + bas[ibas:jbas, 0] = icenter # Angular momentum - bas[ibas, 1] = shell.angmom + bas[ibas:jbas, 1] = shell.angmom # Number of [primitive|contracted] GTOs in `ibas` basis function - bas[ibas, 2:4] = shell.coeffs.shape + # bas[ibas:jbas, 2:4] = shell.coeffs.shape + # Number of primitive GTOs in `ibas` basis function + bas[ibas:jbas, 2] = shell.coeffs.shape[0] + # Number of contracted GTOs in `ibas` basis function + bas[ibas:jbas, 3] = 1 # Kappa for spinor GTO; unused here - bas[ibas, 4] = 0 + bas[ibas:jbas, 4] = 0 # `env` offset to save exponentss of primitive GTOs - bas[ibas, 5] = ioff + bas[ibas:jbas, 5] = ioff # Save exponents; increment ioff env[ioff:ioff + shell.exps.size] = shell.exps ioff += shell.exps.size - # `env` offset to save column-major contraction coefficients, - # i.e. a (no. primitive-)by-(no. contracted) matrix - bas[ibas, 6] = ioff # Save (normalized) coefficients; increment ioff - env_tmp = env[ioff:ioff + shell.coeffs.size].reshape(*shell.coeffs.shape) - for iexp, icoeffs, ienv in zip(shell.exps, shell.coeffs, env_tmp): - ienv[:] = icoeffs * LIBCINT.CINTgto_norm(shell.angmom, iexp) - ioff += shell.coeffs.size - # Increment contracted GTO - ibas += 1 + inorms = np.asarray(list(LIBCINT.CINTgto_norm(shell.angmom, iexp) for iexp in shell.exps)) + for icoeffs in shell.coeffs.T: + bas[ibas, 6] = ioff + env[ioff:ioff + icoeffs.size] = icoeffs * inorms + ioff += icoeffs.size + # Reserved/unused in `libcint` + # bas[ibas, 7] = 0 + # Increment contracted GTO + ibas += 1 # Save basis function offsets offsets.append(num_angmom(shell)) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index d8c2c2f0..bb832f53 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -18,10 +18,12 @@ CASES = [ - ("UGBS", "H", np.asarray([[0., 0., 0.]]) / 0.5291772083), ("UGBS", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083), + # ("UGBS", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083), ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), # ("UGBS", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), + ("ANORCC", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083), + # ("ANORCC", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083), # ("ANORCC", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), # ("ANORCC", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), ] From 9453135b933dc2404cb67ccd3fb8db8554ccd5f5 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 22 Nov 2023 11:38:34 -0500 Subject: [PATCH 29/72] Seg-Contr sort of works; need fixed normalization? --- gbasis/integrals/libcint.py | 4 ++-- tests/test_libcint.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index a4554c63..e974aebe 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -295,7 +295,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Number of primitive GTOs in `ibas` basis function bas[ibas:jbas, 2] = shell.coeffs.shape[0] # Number of contracted GTOs in `ibas` basis function - bas[ibas:jbas, 3] = 1 + bas[ibas:jbas, 3] = shell.coeffs.shape[1] # Kappa for spinor GTO; unused here bas[ibas:jbas, 4] = 0 # `env` offset to save exponentss of primitive GTOs @@ -310,7 +310,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): env[ioff:ioff + icoeffs.size] = icoeffs * inorms ioff += icoeffs.size # Reserved/unused in `libcint` - # bas[ibas, 7] = 0 + # bas[ibas:, 7] = 0 # Increment contracted GTO ibas += 1 # Save basis function offsets diff --git a/tests/test_libcint.py b/tests/test_libcint.py index bb832f53..e49a9f2d 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -51,7 +51,7 @@ def test_cbasis_overlap(basis, atsyms, atcoords): npt.assert_array_equal(py_olp.shape, lc_basis.nbas) npt.assert_array_equal(lc_olp.shape, lc_basis.nbas) - npt.assert_allclose(lc_olp, py_olp, atol=1e-7) + npt.assert_allclose(lc_olp, py_olp, atol=1e-7, rtol=0) @pytest.mark.parametrize("basis, atsyms, atcoords", CASES) @@ -72,7 +72,7 @@ def test_cbasis_kinetic(basis, atsyms, atcoords): npt.assert_array_equal(py_kin.shape, lc_basis.nbas) npt.assert_array_equal(lc_kin.shape, lc_basis.nbas) - npt.assert_allclose(lc_kin, py_kin, atol=1e-7) + npt.assert_allclose(lc_kin, py_kin, atol=1e-7, rtol=0) @pytest.mark.parametrize("basis, atsyms, atcoords", CASES) @@ -94,7 +94,7 @@ def test_cbasis_nuclear(basis, atsyms, atcoords): npt.assert_array_equal(py_nuc.shape, lc_basis.nbas) npt.assert_array_equal(lc_nuc.shape, lc_basis.nbas) - npt.assert_allclose(lc_nuc, py_nuc, atol=1e-7) + npt.assert_allclose(lc_nuc, py_nuc, atol=1e-7, rtol=0) @pytest.mark.parametrize("basis, atsyms, atcoords", CASES) From 08be42e77f745ee128c6882268e8ffa2f1df5a9e Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 22 Nov 2023 16:26:33 -0500 Subject: [PATCH 30/72] Clean up code; segmented contractions still broken --- gbasis/integrals/libcint.py | 122 +++++++++++++++++++----------------- tests/test_libcint.py | 74 +++++++++++++--------- 2 files changed, 108 insertions(+), 88 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index e974aebe..1cc2b8d4 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -7,7 +7,7 @@ from ctypes.util import find_library -from operator import attrgetter +from operator import attrgetter, itemgetter from numpy.ctypeslib import load_library, ndpointer @@ -237,10 +237,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): atnums = [ELEMENTS.index(elem) for elem in atnums] # Organize basis by atomic center - atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} + basis_by_center = {icenter: [] for icenter in set((shell.icenter for shell in basis))} for shell in basis: - atm_basis[shell.icenter].append(shell) - basis = list(atm_basis.items()) + basis_by_center[shell.icenter].append(shell) + basis = sorted(basis_by_center.items(), key=itemgetter(0)) # Organize basis by atomic center atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} @@ -250,76 +250,80 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Set up counts of atomic centers/shells/gbfs/exps/coeffs natm = len(basis) - nshl = 0 nbas = 0 + nbfn = 0 nexp = 0 ncof = 0 for _, contractions in basis: - nshl += len(contractions) + nbas += len(contractions) for shell in contractions: - nbas += num_angmom(shell) * shell.coeffs.shape[1] + nbfn += num_angmom(shell) * shell.coeffs.shape[1] nexp += shell.exps.size ncof += shell.coeffs.size # Allocate and fill C input arrays + iatm = 0 ibas = 0 ioff = 20 atm = np.zeros((natm, 6), dtype=c_int) bas = np.zeros((nbas, 8), dtype=c_int) env = np.zeros(20 + natm * 4 + nexp + ncof, dtype=c_double) - offsets = [] + offsets = np.zeros(nbas, dtype=c_int) # Go to next atomic center's contractions - for atnum, atcoord, (icenter, contractions) in zip(atnums, atcoords, basis): - # Nuclear charge of `icenter` atom - atm[icenter, 0] = atnum + for atnum, atcoord, (_, contractions) in zip(atnums, atcoords, basis): + # Nuclear charge of `iatm` atom + atm[iatm, 0] = atnum # `env` offset to save xyz coordinates - atm[icenter, 1] = ioff - # Nuclear model of `icenter`; unused here - atm[icenter, 2] = 0 - # `env` offset to save nuclear model parameters zeta; unused here - atm[icenter, 3] = 0 - # Reserved/unused in `libcint` - atm[icenter, 4:6] = 0 + atm[iatm, 1] = ioff # Save xyz coordinates; increment ioff env[ioff:ioff + 3] = atcoord ioff += 3 - # Go to next contracted GTO + # Nuclear model of `iatm`; unused here + atm[iatm, 2] = 0 + # `env` offset to save nuclear model zeta parameter; unused here + atm[iatm, 3] = 0 + # Save zeta parameter; increment ioff + env[ioff:ioff + 1] = 0 + ioff += 1 + # Reserved/unused in `libcint` + atm[iatm, 4:6] = 0 + # Go to next shell for shell in contractions: - jbas = ibas + shell.coeffs.shape[1] + # Save basis function offsets + offsets[ibas] = num_angmom(shell) # Index of corresponding atom - bas[ibas:jbas, 0] = icenter + bas[ibas, 0] = iatm # Angular momentum - bas[ibas:jbas, 1] = shell.angmom - # Number of [primitive|contracted] GTOs in `ibas` basis function - # bas[ibas:jbas, 2:4] = shell.coeffs.shape - # Number of primitive GTOs in `ibas` basis function - bas[ibas:jbas, 2] = shell.coeffs.shape[0] - # Number of contracted GTOs in `ibas` basis function - bas[ibas:jbas, 3] = shell.coeffs.shape[1] + bas[ibas, 1] = shell.angmom + # Number of primitive GTOs in shell + bas[ibas, 2] = shell.coeffs.shape[0] + # Number of contracted GTOs in shell + bas[ibas, 3] = shell.coeffs.shape[1] # Kappa for spinor GTO; unused here - bas[ibas:jbas, 4] = 0 - # `env` offset to save exponentss of primitive GTOs - bas[ibas:jbas, 5] = ioff + bas[ibas, 4] = 0 + # `env` offset to save exponents of primitive GTOs + bas[ibas, 5] = ioff # Save exponents; increment ioff env[ioff:ioff + shell.exps.size] = shell.exps ioff += shell.exps.size # Save (normalized) coefficients; increment ioff - inorms = np.asarray(list(LIBCINT.CINTgto_norm(shell.angmom, iexp) for iexp in shell.exps)) - for icoeffs in shell.coeffs.T: - bas[ibas, 6] = ioff - env[ioff:ioff + icoeffs.size] = icoeffs * inorms - ioff += icoeffs.size - # Reserved/unused in `libcint` - # bas[ibas:, 7] = 0 - # Increment contracted GTO - ibas += 1 - # Save basis function offsets - offsets.append(num_angmom(shell)) + bas[ibas, 6] = ioff + env_mat = env[ioff:ioff + shell.coeffs.size].reshape(shell.coeffs.shape, order="F") + env_mat[:, :] = shell.coeffs + for exp, env_row in zip(shell.exps, env_mat): + env_row *= LIBCINT.CINTgto_norm(shell.angmom, exp) + ioff += shell.coeffs.size + # Reserved/unused in `libcint` + bas[ibas, 7] = 0 + # Increment contracted GTO + ibas += 1 + # Icrement atomic center + iatm += 1 # Save inputs to `libcint` functions self.natm = natm - self.nshl = nshl self.nbas = nbas + self.nbfn = nbfn self.atm = atm self.bas = bas self.env = env @@ -356,16 +360,16 @@ def int1e(): shls = np.zeros(2, dtype=c_int) buf = np.zeros(self.max_off ** 2, dtype=c_double) # Make output array - out = np.zeros((self.nbas, self.nbas), dtype=c_double) + out = np.zeros((self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 - for ishl in range(self.nshl): - shls[0] = ishl - p_off = self.offsets[ishl] + for ibas in range(self.nbas): + shls[0] = ibas + p_off = self.offsets[ibas] jpos = 0 - for jshl in range(ishl + 1): - shls[1] = jshl - q_off = self.offsets[jshl] + for jbas in range(ibas + 1): + shls[1] = jbas + q_off = self.offsets[jbas] # Call the C function to fill `buf` func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array @@ -410,19 +414,19 @@ def int2e(notation="physicist"): shls = np.zeros(4, dtype=c_int) buf = np.zeros(self.max_off ** 4, dtype=c_double) # Make output array - out = np.zeros((self.nbas, self.nbas, self.nbas, self.nbas), dtype=c_double) + out = np.zeros((self.nbfn, self.nbfn, self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 - for ishl in range(self.nshl): - shls[0] = ishl - p_off = self.offsets[ishl] + for ibas in range(self.nbas): + shls[0] = ibas + p_off = self.offsets[ibas] jpos = 0 - for jshl in range(ishl + 1): - ij = ((ishl + 1) * ishl) // 2 + jshl - shls[1] = jshl - q_off = self.offsets[jshl] + for jbas in range(ibas + 1): + ij = ((ibas + 1) * ibas) // 2 + jbas + shls[1] = jbas + q_off = self.offsets[jbas] kpos = 0 - for kshl in range(self.nshl): + for kshl in range(self.nbas): shls[2] = kshl r_off = self.offsets[kshl] lpos = 0 diff --git a/tests/test_libcint.py b/tests/test_libcint.py index e49a9f2d..8d34a89c 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -18,14 +18,22 @@ CASES = [ - ("UGBS", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083), - # ("UGBS", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083), - ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), - # ("UGBS", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), - ("ANORCC", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083), - # ("ANORCC", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083), - # ("ANORCC", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083), - # ("ANORCC", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083), + ("UGBS", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("UGBS", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), + ("UGBS", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), + ("STO6G", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("STO6G", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("STO6G", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), + ("STO6G", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), + ("631G", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("631G", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("631G", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), + ("631G", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), + ("ANORCC", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("ANORCC", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), + ("ANORCC", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), + ("ANORCC", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), ] r""" Test systems for gbasis.integrals.libcint. @@ -33,8 +41,8 @@ """ -@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) -def test_cbasis_overlap(basis, atsyms, atcoords): +@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +def test_cbasis_overlap(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis overlap integrals against the GBasis Python overlap integrals. @@ -44,18 +52,19 @@ def test_cbasis_overlap(basis, atsyms, atcoords): basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type="cartesian") + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) + + py_olp = overlap_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_olp.shape, lc_basis.nbfn) - py_olp = overlap_integral(py_basis, coord_type="cartesian") lc_olp = lc_basis.olp() + npt.assert_array_equal(lc_olp.shape, lc_basis.nbfn) - npt.assert_array_equal(py_olp.shape, lc_basis.nbas) - npt.assert_array_equal(lc_olp.shape, lc_basis.nbas) npt.assert_allclose(lc_olp, py_olp, atol=1e-7, rtol=0) -@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) -def test_cbasis_kinetic(basis, atsyms, atcoords): +@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +def test_cbasis_kinetic(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis kinetic energy integrals against the GBasis Python kinetic energy integrals. @@ -65,18 +74,19 @@ def test_cbasis_kinetic(basis, atsyms, atcoords): basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type="cartesian") + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) + + py_kin = kinetic_energy_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_kin.shape, lc_basis.nbfn) - py_kin = kinetic_energy_integral(py_basis, coord_type="cartesian") lc_kin = lc_basis.kin() + npt.assert_array_equal(lc_kin.shape, lc_basis.nbfn) - npt.assert_array_equal(py_kin.shape, lc_basis.nbas) - npt.assert_array_equal(lc_kin.shape, lc_basis.nbas) npt.assert_allclose(lc_kin, py_kin, atol=1e-7, rtol=0) -@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) -def test_cbasis_nuclear(basis, atsyms, atcoords): +@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +def test_cbasis_nuclear(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis nuclear electron attraction integrals against the GBasis Python nuclear electron attraction integrals. @@ -86,19 +96,21 @@ def test_cbasis_nuclear(basis, atsyms, atcoords): basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type="cartesian") + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) - py_nuc = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type="cartesian") + + py_nuc = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) + npt.assert_array_equal(py_nuc.shape, lc_basis.nbfn) + lc_nuc = lc_basis.nuc() + npt.assert_array_equal(lc_nuc.shape, lc_basis.nbfn) - npt.assert_array_equal(py_nuc.shape, lc_basis.nbas) - npt.assert_array_equal(lc_nuc.shape, lc_basis.nbas) npt.assert_allclose(lc_nuc, py_nuc, atol=1e-7, rtol=0) -@pytest.mark.parametrize("basis, atsyms, atcoords", CASES) -def test_cbasis_eri(basis, atsyms, atcoords): +@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +def test_cbasis_eri(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis electron repulsion integrals against the GBasis Python electron repulsion integrals. @@ -199,8 +211,12 @@ def test_overlap_horton_anorcc_hhe(): gbasis = make_contractions(basis_dict, atsyms, atcoords) gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") + py_basis = make_contractions(basis_dict, atsyms, atcoords) + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) + + py_eri = electron_repulsion_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_eri.shape, lc_basis.nbfn) - py_eri = electron_repulsion_integral(py_basis, coord_type="cartesian") lc_eri = lc_basis.eri() assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ From 08adfc538cbae6a3ebb099c46467cbbe267c310a Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 23 Nov 2023 09:52:59 -0500 Subject: [PATCH 31/72] Add build script and setup for pkg-local LibCInt --- .gitignore | 4 ++++ gbasis/integrals/libcint.py | 8 ++++---- tools/install_libcint.sh | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100755 tools/install_libcint.sh diff --git a/.gitignore b/.gitignore index 474900b9..b43b2b0b 100644 --- a/.gitignore +++ b/.gitignore @@ -116,3 +116,7 @@ venv.bak/ # PyCharm .idea/ + +# Libcint +gbasis/integrals/lib/ +gbasis/integrals/include/ diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 1cc2b8d4..5abf8d0f 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -5,11 +5,11 @@ from ctypes import CDLL, cdll, c_int, c_double, c_void_p -from ctypes.util import find_library - from operator import attrgetter, itemgetter -from numpy.ctypeslib import load_library, ndpointer +from pathlib import Path + +from numpy.ctypeslib import ndpointer import numpy as np @@ -47,7 +47,7 @@ class _LibCInt: """ - _libcint: CDLL = cdll.LoadLibrary(find_library('cint')) + _libcint: CDLL = cdll.LoadLibrary((Path(__file__).parent / "lib" / "libcint.so")) r""" ``libcint`` shared object library. diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh new file mode 100755 index 00000000..89b65ad7 --- /dev/null +++ b/tools/install_libcint.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +# Notice for user +echo '' +echo ' NOTE: If this script has been run previously, and it failed, please' +echo ' remove the `build/libcint` directory before running it again.' +echo '' +echo ' See the GBasis documentation for help:' +echo '' +echo ' https://theochem.github.io/gbasis/PLACEHOLDER/' +echo '' + +# Terminate script if any command fails +set -e + +# Get GBasis base directory name unambiguously +gbasis_dir=$(cd "$(dirname $(dirname ${0}))" && pwd) + +# Ensure build directory exists and enter it +mkdir -p ${gbasis_dir}/build +cd ${gbasis_dir}/build + +# Clone Libcint Git repo and enter it +git clone http://github.com/sunqm/libcint.git +cd libcint + +# Setup Libcint build +mkdir build +cd build +cmake -DCMAKE_INSTALL_PREFIX=${gbasis_dir}/gbasis/integrals .. + +# Compile and install Libcint +cmake --build . +cmake --install . From d0b6b784f24baa85e21d930f1849451c0846140b Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 23 Nov 2023 15:01:49 -0500 Subject: [PATCH 32/72] Add spher coords,not all work/fix paramtrzed tests --- gbasis/integrals/libcint.py | 10 +++--- tests/test_libcint.py | 69 +++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 5abf8d0f..8028af12 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -20,7 +20,7 @@ ] -ELEMENTS = [ +ELEMENTS = ( "\0", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", @@ -31,11 +31,11 @@ "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og", -] +) r""" -List of the elements. +Tuple of all 118 elements. -This list has a placeholder element (the null character) at index zero +This tuple has a placeholder element (the null character) at index zero so that the index of each (real) element matches its atomic number. """ @@ -228,7 +228,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): if _coord_type == "spherical": num_angmom = attrgetter("num_sph") elif _coord_type == "cartesian": - num_angmom = lambda x: x.norm_cont.shape[1]#attrgetter("num_cart") + num_angmom = attrgetter("num_cart") else: raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 8d34a89c..a21aff67 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -17,39 +17,40 @@ from utils import find_datafile -CASES = [ - ("UGBS", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("UGBS", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("UGBS", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), - ("UGBS", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), - ("STO6G", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("STO6G", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("STO6G", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), - ("STO6G", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), - ("631G", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("631G", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("631G", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), - ("631G", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), - ("ANORCC", "He", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("ANORCC", "C", np.asarray([[0., 0., 0.]]) / 0.5291772083, "cartesian"), - ("ANORCC", "H,He", np.asarray([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083, "cartesian"), - ("ANORCC", "Be,C", np.asarray([[0., 0., 0.], [1., 0., 0.]]) / 0.5291772083, "cartesian"), +TEST_BASIS_SETS = [ + pytest.param("data_sto6g.nwchem", id="STO-6G"), + pytest.param("data_631g.nwchem", id="6-31G"), + pytest.param("data_ugbs.nwchem", id="UGBS"), + # pytest.param("data_anorcc.nwchem", id="ANO-RCC"), ] -r""" -Test systems for gbasis.integrals.libcint. -""" +TEST_SYSTEMS = [ + pytest.param(["He"], np.asarray([[0., 0., 0.]]), id="He"), + pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), + pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), + pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), +] + + +TEST_COORD_TYPES = [ + "cartesian", + "spherical", +] -@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) + +@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) +@pytest.mark.parametrize("basis", TEST_BASIS_SETS) def test_cbasis_overlap(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis overlap integrals against the GBasis Python overlap integrals. """ - atsyms = [sym.strip() for sym in atsyms.split(",")] - basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) + atcoords /= 0.5291772083 + + basis_dict = parse_nwchem(find_datafile(basis)) py_basis = make_contractions(basis_dict, atsyms, atcoords) lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) @@ -63,15 +64,18 @@ def test_cbasis_overlap(basis, atsyms, atcoords, coord_type): npt.assert_allclose(lc_olp, py_olp, atol=1e-7, rtol=0) -@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) +@pytest.mark.parametrize("basis", TEST_BASIS_SETS) def test_cbasis_kinetic(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis kinetic energy integrals against the GBasis Python kinetic energy integrals. """ - atsyms = [sym.strip() for sym in atsyms.split(",")] - basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) + atcoords /= 0.5291772083 + + basis_dict = parse_nwchem(find_datafile(basis)) py_basis = make_contractions(basis_dict, atsyms, atcoords) lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) @@ -85,15 +89,18 @@ def test_cbasis_kinetic(basis, atsyms, atcoords, coord_type): npt.assert_allclose(lc_kin, py_kin, atol=1e-7, rtol=0) -@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) +@pytest.mark.parametrize("basis", TEST_BASIS_SETS) def test_cbasis_nuclear(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis nuclear electron attraction integrals against the GBasis Python nuclear electron attraction integrals. """ - atsyms = [sym.strip() for sym in atsyms.split(",")] - basis_dict = parse_nwchem(find_datafile(f"data_{basis.lower()}.nwchem")) + atcoords /= 0.5291772083 + + basis_dict = parse_nwchem(find_datafile(basis)) py_basis = make_contractions(basis_dict, atsyms, atcoords) lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) @@ -109,7 +116,9 @@ def test_cbasis_nuclear(basis, atsyms, atcoords, coord_type): npt.assert_allclose(lc_nuc, py_nuc, atol=1e-7, rtol=0) -@pytest.mark.parametrize("basis, atsyms, atcoords, coord_type", CASES) +@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) +@pytest.mark.parametrize("basis", TEST_BASIS_SETS) def test_cbasis_eri(basis, atsyms, atcoords, coord_type): r""" Test gbasis.integrals.libcint.CBasis electron repulsion integrals From 97698fe4cdf35ab599460624c1997782af35d3e7 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 27 Nov 2023 10:34:47 -0500 Subject: [PATCH 33/72] Add function for reordering spherical components --- gbasis/integrals/libcint.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 8028af12..bc917062 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -3,6 +3,8 @@ """ +from copy import deepcopy + from ctypes import CDLL, cdll, c_int, c_double, c_void_p from operator import attrgetter, itemgetter @@ -226,6 +228,8 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Set coord type _coord_type = coord_type.lower() if _coord_type == "spherical": + # Reorder spherical components + basis = [reorder_sph_libcint(shell) for shell in basis] num_angmom = attrgetter("num_sph") elif _coord_type == "cartesian": num_angmom = attrgetter("num_cart") @@ -257,7 +261,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): for _, contractions in basis: nbas += len(contractions) for shell in contractions: - nbfn += num_angmom(shell) * shell.coeffs.shape[1] + nbfn += num_angmom(shell) * shell.num_seg_cont nexp += shell.exps.size ncof += shell.coeffs.size @@ -484,3 +488,14 @@ def int2e(notation="physicist"): LIBCINT C library handle and binding generator. """ + + +# Utilities + +def reorder_sph_libcint(shell): + r"""Reorder the spherical components of the shell to fit Libcint's convention.""" + # Don't overwrite the original shell passed into CBasis + # shell = deepcopy(shell) + # Set the new convention based on the value of `angmom` + # shell.angmom_components_sph = (..., ..., ...) + return shell From 63eebb9ec501978897a886309dfff3f1f8a2ce7b Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 28 Nov 2023 16:06:41 -0500 Subject: [PATCH 34/72] Add reordering functionality; s, p and d work. --- gbasis/integrals/libcint.py | 102 ++++++------ tests/test_libcint.py | 312 ++++++------------------------------ 2 files changed, 103 insertions(+), 311 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index bc917062..f3684b44 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -3,8 +3,6 @@ """ -from copy import deepcopy - from ctypes import CDLL, cdll, c_int, c_double, c_void_p from operator import attrgetter, itemgetter @@ -22,6 +20,20 @@ ] +CART_CONVENTIONS = tuple(list(range(((i + 1) * (i + 2)) // 2)) for i in range(7)) + + +SPH_CONVENTIONS = ( + [0], + [2, 0, 1], + [4, 3, 2, 0, 1], + [0, 1, 2, 3, 4, 5, 6], # TODO + [0, 1, 2, 3, 4, 5, 6, 7, 8], # TODO + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], # TODO + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], # TODO +) + + ELEMENTS = ( "\0", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", @@ -112,7 +124,7 @@ def __getattr__(self, attr): cfunc.argtypes = [ c_int, ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - ] + ] cfunc.restype = c_int elif attr == 'CINTgto_norm': @@ -123,7 +135,7 @@ def __getattr__(self, attr): cfunc.argtypes = [ ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), c_int, - ] + ] cfunc.restype = c_int elif attr.startswith('CINTshells'): @@ -131,7 +143,7 @@ def __getattr__(self, attr): ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), c_int, - ] + ] elif attr.startswith('cint1e') and not attr.endswith('optimizer'): cfunc.argtypes = [ @@ -151,7 +163,7 @@ def __getattr__(self, attr): ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), # opt (not used; put ``None`` as this argument) c_void_p, - ] + ] cfunc.restype = c_int elif attr.startswith('cint2e') and not attr.endswith('optimizer'): @@ -172,7 +184,7 @@ def __getattr__(self, attr): ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), # opt (not used; put ``None`` as this argument) c_void_p, - ] + ] cfunc.restype = c_int else: @@ -226,13 +238,13 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): """ # Set coord type - _coord_type = coord_type.lower() - if _coord_type == "spherical": - # Reorder spherical components - basis = [reorder_sph_libcint(shell) for shell in basis] + coord_type = coord_type.lower() + if coord_type == "spherical": num_angmom = attrgetter("num_sph") - elif _coord_type == "cartesian": + convs = SPH_CONVENTIONS + elif coord_type == "cartesian": num_angmom = attrgetter("num_cart") + convs = CART_CONVENTIONS else: raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") @@ -324,6 +336,9 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Icrement atomic center iatm += 1 + # Save coord type + self.coord_type = coord_type + # Save inputs to `libcint` functions self.natm = natm self.nbas = nbas @@ -340,13 +355,13 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Make individual integral evaluation methods via `make_intNe` macros: # Kinetic energy integral - self.kin = self.make_int1e(LIBCINT["cint1e_kin_cart" if _coord_type == "cartesian" else "cint1e_kin_sph"]) + self.kin = self.make_int1e(LIBCINT["cint1e_kin_cart" if coord_type == "cartesian" else "cint1e_kin_sph"]) # Nuclear-electron attraction integral - self.nuc = self.make_int1e(LIBCINT["cint1e_nuc_cart" if _coord_type == "cartesian" else "cint1e_nuc_sph"]) + self.nuc = self.make_int1e(LIBCINT["cint1e_nuc_cart" if coord_type == "cartesian" else "cint1e_nuc_sph"]) # Overlap integral - self.olp = self.make_int1e(LIBCINT["cint1e_ovlp_cart" if _coord_type == "cartesian" else "cint1e_ovlp_sph"]) + self.olp = self.make_int1e(LIBCINT["cint1e_ovlp_cart" if coord_type == "cartesian" else "cint1e_ovlp_sph"]) # Electron repulsion integral - self.eri = self.make_int2e(LIBCINT["cint2e_cart" if _coord_type == "cartesian" else "cint2e_sph"]) + self.eri = self.make_int2e(LIBCINT["cint2e_cart" if coord_type == "cartesian" else "cint2e_sph"]) def make_int1e(self, func): r""" @@ -367,20 +382,22 @@ def int1e(): out = np.zeros((self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 - for ibas in range(self.nbas): - shls[0] = ibas - p_off = self.offsets[ibas] + for ishl in range(self.nbas): + i_conv = self.convs[self.bas[ishl, 1]] + shls[0] = ishl + p_off = self.offsets[ishl] jpos = 0 - for jbas in range(ibas + 1): - shls[1] = jbas - q_off = self.offsets[jbas] + for jshl in range(ishl + 1): + j_conv = self.convs[self.bas[jshl, 1]] + shls[1] = jshl + q_off = self.offsets[jshl] # Call the C function to fill `buf` func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array for p in range(p_off): - i_off = p + ipos + i_off = i_conv[p] + ipos for q in range(q_off): - j_off = q + jpos + j_off = j_conv[q] + jpos val = buf[p * q_off + q] out[i_off, j_off] = val out[j_off, i_off] = val @@ -421,21 +438,25 @@ def int2e(notation="physicist"): out = np.zeros((self.nbfn, self.nbfn, self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 - for ibas in range(self.nbas): - shls[0] = ibas - p_off = self.offsets[ibas] + for ishl in range(self.nbas): + i_conv = self.convs[self.bas[ishl, 1]] + shls[0] = ishl + p_off = self.offsets[ishl] jpos = 0 - for jbas in range(ibas + 1): - ij = ((ibas + 1) * ibas) // 2 + jbas - shls[1] = jbas - q_off = self.offsets[jbas] + for jshl in range(ishl + 1): + ij = ((ishl + 1) * ishl) // 2 + jshl + j_conv = self.convs[self.bas[jshl, 1]] + shls[1] = jshl + q_off = self.offsets[jshl] kpos = 0 for kshl in range(self.nbas): + k_conv = self.convs[self.bas[kshl, 1]] shls[2] = kshl r_off = self.offsets[kshl] lpos = 0 for lshl in range(kshl + 1): kl = ((kshl + 1) * kshl) // 2 + lshl + l_conv = self.convs[self.bas[lshl, 1]] shls[3] = lshl s_off = self.offsets[lshl] if ij < kl: @@ -445,13 +466,13 @@ def int2e(notation="physicist"): func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array for p in range(p_off): - i_off = p + ipos + i_off = i_conv[p] + ipos for q in range(q_off): - j_off = q + jpos + j_off = j_conv[q] + jpos for r in range(r_off): - k_off = r + kpos + k_off = k_conv[r] + kpos for s in range(s_off): - l_off = s + lpos + l_off = l_conv[s] + lpos val = buf[p * (q_off * r_off * s_off) + q * (r_off * s_off) + r * (s_off) + @@ -488,14 +509,3 @@ def int2e(notation="physicist"): LIBCINT C library handle and binding generator. """ - - -# Utilities - -def reorder_sph_libcint(shell): - r"""Reorder the spherical components of the shell to fit Libcint's convention.""" - # Don't overwrite the original shell passed into CBasis - # shell = deepcopy(shell) - # Set the new convention based on the value of `angmom` - # shell.angmom_components_sph = (..., ..., ...) - return shell diff --git a/tests/test_libcint.py b/tests/test_libcint.py index a21aff67..928bbeb2 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -10,7 +10,7 @@ from gbasis.integrals.nuclear_electron_attraction import nuclear_electron_attraction_integral from gbasis.integrals.electron_repulsion import electron_repulsion_integral -from gbasis.integrals.libcint import ELEMENTS, CBasis +from gbasis.integrals.libcint import ELEMENTS, LIBCINT, CBasis from gbasis.parsers import make_contractions, parse_nwchem @@ -34,185 +34,34 @@ TEST_COORD_TYPES = [ - "cartesian", - "spherical", + pytest.param("cartesian", id="Cartesian"), + pytest.param("spherical", id="Spherical"), ] -@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) -@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) -@pytest.mark.parametrize("basis", TEST_BASIS_SETS) -def test_cbasis_overlap(basis, atsyms, atcoords, coord_type): - r""" - Test gbasis.integrals.libcint.CBasis overlap integrals - against the GBasis Python overlap integrals. - - """ - atcoords /= 0.5291772083 - - basis_dict = parse_nwchem(find_datafile(basis)) - - py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) - - py_olp = overlap_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_olp.shape, lc_basis.nbfn) - - lc_olp = lc_basis.olp() - npt.assert_array_equal(lc_olp.shape, lc_basis.nbfn) - - npt.assert_allclose(lc_olp, py_olp, atol=1e-7, rtol=0) - - -@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) -@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) -@pytest.mark.parametrize("basis", TEST_BASIS_SETS) -def test_cbasis_kinetic(basis, atsyms, atcoords, coord_type): - r""" - Test gbasis.integrals.libcint.CBasis kinetic energy integrals - against the GBasis Python kinetic energy integrals. - - """ - atcoords /= 0.5291772083 - - basis_dict = parse_nwchem(find_datafile(basis)) - - py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) - - py_kin = kinetic_energy_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_kin.shape, lc_basis.nbfn) - - lc_kin = lc_basis.kin() - npt.assert_array_equal(lc_kin.shape, lc_basis.nbfn) - - npt.assert_allclose(lc_kin, py_kin, atol=1e-7, rtol=0) +TEST_INTEGRALS = [ + pytest.param("olp", id="Overlap"), + pytest.param("kin", id="KineticEnergy"), + pytest.param("nuc", id="NuclearAttraction"), + pytest.param("eri", id="ElectronRepulsion"), +] -@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) -@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) -@pytest.mark.parametrize("basis", TEST_BASIS_SETS) -def test_cbasis_nuclear(basis, atsyms, atcoords, coord_type): +@pytest.mark.parametrize("integral", TEST_INTEGRALS) +@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +@pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) +@pytest.mark.parametrize("basis", TEST_BASIS_SETS) +def test_cbasis(basis, atsyms, atcoords, coord_type, integral): r""" - Test gbasis.integrals.libcint.CBasis nuclear electron attraction integrals - against the GBasis Python nuclear electron attraction integrals. + Test gbasis.integrals.libcint.CBasis integrals + against the GBasis Python integrals. """ - atcoords /= 0.5291772083 - - basis_dict = parse_nwchem(find_datafile(basis)) - - py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) + atcoords = atcoords / 0.5291772083 atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) - py_nuc = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) - npt.assert_array_equal(py_nuc.shape, lc_basis.nbfn) - - lc_nuc = lc_basis.nuc() - npt.assert_array_equal(lc_nuc.shape, lc_basis.nbfn) - - npt.assert_allclose(lc_nuc, py_nuc, atol=1e-7, rtol=0) - - -@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) -@pytest.mark.parametrize("atsyms,atcoords", TEST_SYSTEMS) -@pytest.mark.parametrize("basis", TEST_BASIS_SETS) -def test_cbasis_eri(basis, atsyms, atcoords, coord_type): - r""" - Test gbasis.integrals.libcint.CBasis electron repulsion integrals - against the GBasis Python electron repulsion integrals. - - """ - basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) - - atsyms = ["Be", "C"] - - atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 - - gbasis = make_contractions(basis_dict, atsyms, atcoords) - gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - - cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") - cbasis_olp = cbasis.olp() - - assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ - gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ - cbasis.nbas - - print(cbasis_olp) - - assert np.allclose(np.diag(cbasis_olp), 1) - assert np.allclose(cbasis_olp, gbasis_olp) - - -# def test_overlap_anorcc_hhe(): -# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. -# -# The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) -# -# atsyms = ["H", "He"] -# -# atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 -# -# gbasis = make_contractions(basis_dict, atsyms, atcoords) -# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") -# -# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") -# cbasis_olp = cbasis.olp() -# -# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ -# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ -# cbasis.nbas -# -# print(cbasis_olp) -# -# assert np.allclose(np.diag(cbasis_olp), 1) -# assert np.allclose(cbasis_olp, gbasis_olp) - - -# def test_overlap_horton_anorcc_bec(): -# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. -# -# The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) -# -# basis = make_contractions(basis_dict, ["C"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) -# -# basis = make_contractions(basis_dict, ["Xe"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) -# -# -# def test_overlap_cartesian_norm_sto6g(): -# """Test the norm of gbasis.integrals.overlap_cartesian on the STO-6G basis set. -# -# The contraction coefficients in STO-6G is such that the Cartesian contractions are not -# normalized to past 3rd decimal places. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_sto6g.nwchem")) -# -# basis = make_contractions(basis_dict, ["Kr"], np.array([[0, 0, 0]])) -# overlap_obj = Overlap(basis) -# assert np.allclose(np.diag(overlap_obj.construct_array_cartesian()), 1) - - -def test_overlap_horton_anorcc_hhe(): - """Test gbasis.integrals.overlap.overlap_basis_cartesian against HORTON's overlap matrix. - - The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. - - """ - basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) + basis_dict = parse_nwchem(find_datafile(basis)) atsyms = ["H", "He"] @@ -221,101 +70,34 @@ def test_overlap_horton_anorcc_hhe(): gbasis = make_contractions(basis_dict, atsyms, atcoords) gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") py_basis = make_contractions(basis_dict, atsyms, atcoords) - lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) - - py_eri = electron_repulsion_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_eri.shape, lc_basis.nbfn) - - lc_eri = lc_basis.eri() - assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ - gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ - cbasis.nbas - - print(cbasis_olp) - - assert np.allclose(np.diag(cbasis_olp), 1) - assert np.allclose(cbasis_olp, gbasis_olp) - - -def test_overlap_horton_ugbs_bec(): - """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. - - The test case is diatomic with Be and C separated by 1.0 angstroms with basis set UGBS. - - """ - basis_dict = parse_nwchem(find_datafile("data_ugbs.nwchem")) - - atsyms = ["Be", "C"] - - atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 - - gbasis = make_contractions(basis_dict, atsyms, atcoords) - gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - - cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") - cbasis_olp = cbasis.olp() - - assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ - gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ - cbasis.nbas - - print(cbasis_olp) - - assert np.allclose(np.diag(cbasis_olp), 1) - assert np.allclose(cbasis_olp, gbasis_olp) - - -# def test_overlap_anorcc_hhe(): -# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. -# -# The test case is diatomic with H and He separated by 0.8 angstroms with basis set ANO-RCC. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) -# -# atsyms = ["H", "He"] -# -# atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 -# -# gbasis = make_contractions(basis_dict, atsyms, atcoords) -# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") -# -# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") -# cbasis_olp = cbasis.olp() -# -# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ -# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ -# cbasis.nbas -# -# print(cbasis_olp) -# -# assert np.allclose(np.diag(cbasis_olp), 1) -# assert np.allclose(cbasis_olp, gbasis_olp) + lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) -# def test_overlap_horton_anorcc_bec(): -# """Test gbasis.integrals.libcint.CBasis.olp against GBasis's overlap matrix. -# -# The test case is diatomic with Be and C separated by 1.0 angstroms with basis set ANO-RCC. -# -# """ -# basis_dict = parse_nwchem(find_datafile("data_anorcc.nwchem")) -# -# atsyms = ["Be", "C"] -# -# atcoords = np.array([[0., 0., 0.], [1.0, 0., 0.]]) / 0.5291772083 -# -# gbasis = make_contractions(basis_dict, atsyms, atcoords) -# gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") -# -# cbasis = CBasis(gbasis, atsyms, atcoords, coord_type="cartesian") -# cbasis_olp = cbasis.olp() -# -# assert cbasis_olp.shape[0] == cbasis_olp.shape[1] == \ -# gbasis_olp.shape[0] == gbasis_olp.shape[1] == \ -# cbasis.nbas -# -# print(cbasis_olp) -# -# assert np.allclose(np.diag(cbasis_olp), 1) -# assert np.allclose(cbasis_olp, gbasis_olp) + if integral == "olp": + py_int = overlap_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + lc_int = lc_basis.olp() + npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + + elif integral == "kin": + py_int = kinetic_energy_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + lc_int = lc_basis.kin() + npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + + elif integral == "nuc": + py_int = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + lc_int = lc_basis.nuc() + npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + + elif integral == "eri": + py_int = electron_repulsion_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + lc_int = lc_basis.eri() + npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + + else: + raise ValueError("Invalid integral name '{integral}' passed") + + npt.assert_allclose(lc_int, py_int, atol=1e-7, rtol=0) From e91f675683a9586854a8506b73af1061e6932e59 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 29 Nov 2023 10:12:04 -0500 Subject: [PATCH 35/72] Add cint->gbasis {sph,cart} ordering conventions --- gbasis/integrals/libcint.py | 46 +++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index f3684b44..8d923858 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -5,6 +5,8 @@ from ctypes import CDLL, cdll, c_int, c_double, c_void_p +from itertools import chain + from operator import attrgetter, itemgetter from pathlib import Path @@ -20,18 +22,21 @@ ] -CART_CONVENTIONS = tuple(list(range(((i + 1) * (i + 2)) // 2)) for i in range(7)) +CART_CONVENTIONS = tuple(tuple(range(((i + 1) * (i + 2)) // 2)) for i in range(7)) +r""" +Ordering conventions for cartesian subshells. +""" -SPH_CONVENTIONS = ( - [0], - [2, 0, 1], - [4, 3, 2, 0, 1], - [0, 1, 2, 3, 4, 5, 6], # TODO - [0, 1, 2, 3, 4, 5, 6, 7, 8], # TODO - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], # TODO - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], # TODO -) + +# NOTE: This might not capture the correct ordering of d orbitals according to the +# Libcint Programmer's Reference. It's hard to tell since they describe their +# spherical subshells in terms of {x,y,z}. Will test once ordering works. +SPH_CONVENTIONS = tuple(tuple(chain(range(2 * i, i, -1), range(0, i + 1))) for i in range(7)) +r""" +Ordering conventions for spherical subshells. + +""" ELEMENTS = ( @@ -352,16 +357,17 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.max_off = max(offsets) - # Make individual integral evaluation methods via `make_intNe` macros: - - # Kinetic energy integral - self.kin = self.make_int1e(LIBCINT["cint1e_kin_cart" if coord_type == "cartesian" else "cint1e_kin_sph"]) - # Nuclear-electron attraction integral - self.nuc = self.make_int1e(LIBCINT["cint1e_nuc_cart" if coord_type == "cartesian" else "cint1e_nuc_sph"]) - # Overlap integral - self.olp = self.make_int1e(LIBCINT["cint1e_ovlp_cart" if coord_type == "cartesian" else "cint1e_ovlp_sph"]) - # Electron repulsion integral - self.eri = self.make_int2e(LIBCINT["cint2e_cart" if coord_type == "cartesian" else "cint2e_sph"]) + # Save integral functiond + if coord_type == "cartesian": + self.kin = self.make_int1e(LIBCINT.cint1e_kin_cart) + self.nuc = self.make_int1e(LIBCINT.cint1e_nuc_cart) + self.olp = self.make_int1e(LIBCINT.cint1e_ovlp_cart) + self.eri = self.make_int2e(LIBCINT.cint2e_cart) + else: + self.kin = self.make_int1e(LIBCINT.cint1e_kin_sph) + self.nuc = self.make_int1e(LIBCINT.cint1e_nuc_sph) + self.olp = self.make_int1e(LIBCINT.cint1e_ovlp_sph) + self.eri = self.make_int2e(LIBCINT.cint2e_sph) def make_int1e(self, func): r""" From 220dd14fda06d8187acb306c9be12b2df9267067 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 29 Nov 2023 11:43:27 -0500 Subject: [PATCH 36/72] Improve build script (cleanup, CMake flags) --- tools/install_libcint.sh | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index 89b65ad7..a7610901 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -2,8 +2,8 @@ # Notice for user echo '' -echo ' NOTE: If this script has been run previously, and it failed, please' -echo ' remove the `build/libcint` directory before running it again.' +echo ' NOTE: If this script has been run previously, and it failed, please ensure' +echo ' the `build/libcint` directory is removed before running it again.' echo '' echo ' See the GBasis documentation for help:' echo '' @@ -14,11 +14,25 @@ echo '' set -e # Get GBasis base directory name unambiguously -gbasis_dir=$(cd "$(dirname $(dirname ${0}))" && pwd) +gbasis_dir=$(cd "$(dirname "$(dirname "${0}")")" && pwd) + +# Cleanup function; runs on failure or exit +cleanup() { + rm -rf "${gbasis_dir}/build/libcint" +} +trap cleanup EXIT + +# Set Libcint CMake options +lc_cmake_opts= +lc_cmake_opts+=' -DWITH_FORTRAN=0' +lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=1' +lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' +lc_cmake_opts+=' -DWITH_F12=1' +lc_cmake_opts+=' -DKEEP_GOING=1' # Ensure build directory exists and enter it -mkdir -p ${gbasis_dir}/build -cd ${gbasis_dir}/build +mkdir -p "${gbasis_dir}/build" +cd "${gbasis_dir}/build" # Clone Libcint Git repo and enter it git clone http://github.com/sunqm/libcint.git @@ -27,7 +41,7 @@ cd libcint # Setup Libcint build mkdir build cd build -cmake -DCMAKE_INSTALL_PREFIX=${gbasis_dir}/gbasis/integrals .. +cmake "-DCMAKE_INSTALL_PREFIX=${gbasis_dir}/gbasis/integrals" ${lc_cmake_opts} .. # Compile and install Libcint cmake --build . From ca735d6a9ce951f7415c6241082d8f46a46a5a59 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Fri, 1 Dec 2023 11:18:45 -0500 Subject: [PATCH 37/72] Fix ordering conventions (in C, use PY,PZ,PX) --- gbasis/integrals/libcint.py | 136 +++++++++++++----------------------- tests/test_libcint.py | 3 +- tools/install_libcint.sh | 1 + 3 files changed, 50 insertions(+), 90 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 8d923858..7f1d05bc 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -22,23 +22,6 @@ ] -CART_CONVENTIONS = tuple(tuple(range(((i + 1) * (i + 2)) // 2)) for i in range(7)) -r""" -Ordering conventions for cartesian subshells. - -""" - - -# NOTE: This might not capture the correct ordering of d orbitals according to the -# Libcint Programmer's Reference. It's hard to tell since they describe their -# spherical subshells in terms of {x,y,z}. Will test once ordering works. -SPH_CONVENTIONS = tuple(tuple(chain(range(2 * i, i, -1), range(0, i + 1))) for i in range(7)) -r""" -Ordering conventions for spherical subshells. - -""" - - ELEMENTS = ( "\0", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", @@ -246,10 +229,8 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): coord_type = coord_type.lower() if coord_type == "spherical": num_angmom = attrgetter("num_sph") - convs = SPH_CONVENTIONS elif coord_type == "cartesian": num_angmom = attrgetter("num_cart") - convs = CART_CONVENTIONS else: raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") @@ -257,30 +238,16 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Process `atnums` atnums = [ELEMENTS.index(elem) for elem in atnums] - # Organize basis by atomic center - basis_by_center = {icenter: [] for icenter in set((shell.icenter for shell in basis))} - for shell in basis: - basis_by_center[shell.icenter].append(shell) - basis = sorted(basis_by_center.items(), key=itemgetter(0)) - - # Organize basis by atomic center - atm_basis = {center: [] for center in set((shell.icenter for shell in basis))} - for shell in basis: - atm_basis[shell.icenter].append(shell) - basis = list(atm_basis.items()) - - # Set up counts of atomic centers/shells/gbfs/exps/coeffs - natm = len(basis) - nbas = 0 + # Get counts of atoms/shells/bfns/exps/coeffs + natm = len(atnums) + nbas = len(basis) nbfn = 0 nexp = 0 - ncof = 0 - for _, contractions in basis: - nbas += len(contractions) - for shell in contractions: - nbfn += num_angmom(shell) * shell.num_seg_cont - nexp += shell.exps.size - ncof += shell.coeffs.size + ncoe = 0 + for shell in basis: + nbfn += num_angmom(shell) * shell.num_seg_cont + nexp += shell.exps.size + ncoe += shell.coeffs.size # Allocate and fill C input arrays iatm = 0 @@ -288,10 +255,11 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): ioff = 20 atm = np.zeros((natm, 6), dtype=c_int) bas = np.zeros((nbas, 8), dtype=c_int) - env = np.zeros(20 + natm * 4 + nexp + ncof, dtype=c_double) + env = np.zeros(20 + natm * 4 + nexp + ncoe, dtype=c_double) offsets = np.zeros(nbas, dtype=c_int) - # Go to next atomic center's contractions - for atnum, atcoord, (_, contractions) in zip(atnums, atcoords, basis): + + # Fill `atm` array + for iatm, (atnum, atcoord) in enumerate(zip(atnums, atcoords)): # Nuclear charge of `iatm` atom atm[iatm, 0] = atnum # `env` offset to save xyz coordinates @@ -308,38 +276,35 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): ioff += 1 # Reserved/unused in `libcint` atm[iatm, 4:6] = 0 - # Go to next shell - for shell in contractions: - # Save basis function offsets - offsets[ibas] = num_angmom(shell) - # Index of corresponding atom - bas[ibas, 0] = iatm - # Angular momentum - bas[ibas, 1] = shell.angmom - # Number of primitive GTOs in shell - bas[ibas, 2] = shell.coeffs.shape[0] - # Number of contracted GTOs in shell - bas[ibas, 3] = shell.coeffs.shape[1] - # Kappa for spinor GTO; unused here - bas[ibas, 4] = 0 - # `env` offset to save exponents of primitive GTOs - bas[ibas, 5] = ioff - # Save exponents; increment ioff - env[ioff:ioff + shell.exps.size] = shell.exps - ioff += shell.exps.size - # Save (normalized) coefficients; increment ioff - bas[ibas, 6] = ioff - env_mat = env[ioff:ioff + shell.coeffs.size].reshape(shell.coeffs.shape, order="F") - env_mat[:, :] = shell.coeffs - for exp, env_row in zip(shell.exps, env_mat): - env_row *= LIBCINT.CINTgto_norm(shell.angmom, exp) - ioff += shell.coeffs.size - # Reserved/unused in `libcint` - bas[ibas, 7] = 0 - # Increment contracted GTO - ibas += 1 - # Icrement atomic center - iatm += 1 + + # Fill `bas` array + for ibas, shell in enumerate(basis): + # Save basis function offsets + offsets[ibas] = num_angmom(shell) + # Index of corresponding atom + bas[ibas, 0] = shell.icenter + # Angular momentum + bas[ibas, 1] = shell.angmom + # Number of primitive GTOs in shell + bas[ibas, 2] = shell.coeffs.shape[0] + # Number of contracted GTOs in shell + bas[ibas, 3] = shell.coeffs.shape[1] + # Kappa for spinor GTO; unused here + bas[ibas, 4] = 0 + # `env` offset to save exponents of primitive GTOs + bas[ibas, 5] = ioff + # Save exponents; increment ioff + env[ioff:ioff + shell.exps.size] = shell.exps + ioff += shell.exps.size + # Save (normalized) coefficients; increment ioff + bas[ibas, 6] = ioff + env_mat = env[ioff:ioff + shell.coeffs.size].reshape(shell.coeffs.shape, order="F") + env_mat[:, :] = shell.coeffs + for exp, env_row in zip(shell.exps, env_mat): + env_row *= LIBCINT.CINTgto_norm(shell.angmom, exp) + ioff += shell.coeffs.size + # Reserved/unused in `libcint` + bas[ibas, 7] = 0 # Save coord type self.coord_type = coord_type @@ -356,7 +321,6 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.offsets = offsets self.max_off = max(offsets) - # Save integral functiond if coord_type == "cartesian": self.kin = self.make_int1e(LIBCINT.cint1e_kin_cart) @@ -389,21 +353,19 @@ def int1e(): # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): - i_conv = self.convs[self.bas[ishl, 1]] shls[0] = ishl p_off = self.offsets[ishl] jpos = 0 for jshl in range(ishl + 1): - j_conv = self.convs[self.bas[jshl, 1]] shls[1] = jshl q_off = self.offsets[jshl] # Call the C function to fill `buf` func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array for p in range(p_off): - i_off = i_conv[p] + ipos + i_off = p + ipos for q in range(q_off): - j_off = j_conv[q] + jpos + j_off = q + jpos val = buf[p * q_off + q] out[i_off, j_off] = val out[j_off, i_off] = val @@ -445,24 +407,20 @@ def int2e(notation="physicist"): # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): - i_conv = self.convs[self.bas[ishl, 1]] shls[0] = ishl p_off = self.offsets[ishl] jpos = 0 for jshl in range(ishl + 1): ij = ((ishl + 1) * ishl) // 2 + jshl - j_conv = self.convs[self.bas[jshl, 1]] shls[1] = jshl q_off = self.offsets[jshl] kpos = 0 for kshl in range(self.nbas): - k_conv = self.convs[self.bas[kshl, 1]] shls[2] = kshl r_off = self.offsets[kshl] lpos = 0 for lshl in range(kshl + 1): kl = ((kshl + 1) * kshl) // 2 + lshl - l_conv = self.convs[self.bas[lshl, 1]] shls[3] = lshl s_off = self.offsets[lshl] if ij < kl: @@ -472,13 +430,13 @@ def int2e(notation="physicist"): func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array for p in range(p_off): - i_off = i_conv[p] + ipos + i_off = p + ipos for q in range(q_off): - j_off = j_conv[q] + jpos + j_off = q + jpos for r in range(r_off): - k_off = k_conv[r] + kpos + k_off = r + kpos for s in range(s_off): - l_off = l_conv[s] + lpos + l_off = s + lpos val = buf[p * (q_off * r_off * s_off) + q * (r_off * s_off) + r * (s_off) + diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 928bbeb2..2358a6ef 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -20,7 +20,7 @@ TEST_BASIS_SETS = [ pytest.param("data_sto6g.nwchem", id="STO-6G"), pytest.param("data_631g.nwchem", id="6-31G"), - pytest.param("data_ugbs.nwchem", id="UGBS"), + # pytest.param("data_ugbs.nwchem", id="UGBS"), # pytest.param("data_anorcc.nwchem", id="ANO-RCC"), ] @@ -30,6 +30,7 @@ pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), + pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), ] diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index a7610901..e0f7a686 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -28,6 +28,7 @@ lc_cmake_opts+=' -DWITH_FORTRAN=0' lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=1' lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' lc_cmake_opts+=' -DWITH_F12=1' +lc_cmake_opts+=' -DPYPZPX=1' lc_cmake_opts+=' -DKEEP_GOING=1' # Ensure build directory exists and enter it From 2b95248184d601273a3b6e0e529d77e44960a849 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sat, 2 Dec 2023 20:58:29 -0500 Subject: [PATCH 38/72] Fix crash, add sph normalization (still no cart) --- gbasis/integrals/libcint.py | 166 +++--- tests/data_ccpvdz.nwchem | 1128 +++++++++++++++++++++++++++++++++++ tests/test_libcint.py | 29 +- tools/install_libcint.sh | 2 - 4 files changed, 1239 insertions(+), 86 deletions(-) create mode 100644 tests/data_ccpvdz.nwchem diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 7f1d05bc..254dad4c 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -7,7 +7,7 @@ from itertools import chain -from operator import attrgetter, itemgetter +from operator import attrgetter from pathlib import Path @@ -15,6 +15,8 @@ import numpy as np +from scipy.special import gamma + __all__ = [ "LIBCINT", @@ -204,6 +206,15 @@ def __getitem__(self, item): return self.__getattr__(item) +# Singleton LibCInt class instance + +LIBCINT = _LibCInt() +r""" +LIBCINT C library handle and binding generator. + +""" + + class CBasis: r""" ``libcint`` basis class. @@ -229,8 +240,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): coord_type = coord_type.lower() if coord_type == "spherical": num_angmom = attrgetter("num_sph") + normalized_coeffs = normalized_coeffs_sph elif coord_type == "cartesian": num_angmom = attrgetter("num_cart") + normalized_coeffs = normalized_coeffs_cart else: raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") @@ -240,71 +253,78 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Get counts of atoms/shells/bfns/exps/coeffs natm = len(atnums) - nbas = len(basis) + nbas = 0 nbfn = 0 - nexp = 0 - ncoe = 0 + nenv = 20 + 4 * natm + mults = [] for shell in basis: + mults.extend([num_angmom(shell)] * shell.num_seg_cont) + nbas += shell.num_seg_cont nbfn += num_angmom(shell) * shell.num_seg_cont - nexp += shell.exps.size - ncoe += shell.coeffs.size + nenv += shell.exps.size + shell.coeffs.size + mults = np.asarray(mults, dtype=c_int) # Allocate and fill C input arrays - iatm = 0 - ibas = 0 - ioff = 20 + ienv = 20 atm = np.zeros((natm, 6), dtype=c_int) bas = np.zeros((nbas, 8), dtype=c_int) - env = np.zeros(20 + natm * 4 + nexp + ncoe, dtype=c_double) - offsets = np.zeros(nbas, dtype=c_int) + env = np.zeros((nenv,), dtype=c_double) # Fill `atm` array - for iatm, (atnum, atcoord) in enumerate(zip(atnums, atcoords)): - # Nuclear charge of `iatm` atom - atm[iatm, 0] = atnum + for atm_row, atnum, atcoord in zip(atm, atnums, atcoords): + # Nuclear charge of i'th atom + atm_row[0] = atnum # `env` offset to save xyz coordinates - atm[iatm, 1] = ioff - # Save xyz coordinates; increment ioff - env[ioff:ioff + 3] = atcoord - ioff += 3 - # Nuclear model of `iatm`; unused here - atm[iatm, 2] = 0 + atm_row[1] = ienv + # Save xyz coordinates; increment ienv + env[ienv:ienv + 3] = atcoord + ienv += 3 + # Nuclear model of i'th atm; unused here + atm_row[2] = 0 # `env` offset to save nuclear model zeta parameter; unused here - atm[iatm, 3] = 0 - # Save zeta parameter; increment ioff - env[ioff:ioff + 1] = 0 - ioff += 1 + atm_row[3] = ienv + # Save zeta parameter; increment ienv + env[ienv:ienv + 1] = 0 + ienv += 1 # Reserved/unused in `libcint` - atm[iatm, 4:6] = 0 + atm_row[4:6] = 0 # Fill `bas` array - for ibas, shell in enumerate(basis): - # Save basis function offsets - offsets[ibas] = num_angmom(shell) - # Index of corresponding atom - bas[ibas, 0] = shell.icenter - # Angular momentum - bas[ibas, 1] = shell.angmom - # Number of primitive GTOs in shell - bas[ibas, 2] = shell.coeffs.shape[0] - # Number of contracted GTOs in shell - bas[ibas, 3] = shell.coeffs.shape[1] - # Kappa for spinor GTO; unused here - bas[ibas, 4] = 0 - # `env` offset to save exponents of primitive GTOs - bas[ibas, 5] = ioff - # Save exponents; increment ioff - env[ioff:ioff + shell.exps.size] = shell.exps - ioff += shell.exps.size - # Save (normalized) coefficients; increment ioff - bas[ibas, 6] = ioff - env_mat = env[ioff:ioff + shell.coeffs.size].reshape(shell.coeffs.shape, order="F") - env_mat[:, :] = shell.coeffs - for exp, env_row in zip(shell.exps, env_mat): - env_row *= LIBCINT.CINTgto_norm(shell.angmom, exp) - ioff += shell.coeffs.size - # Reserved/unused in `libcint` - bas[ibas, 7] = 0 + ibas = 0 + for shell in basis: + # Get angular momentum of shell and # of primitive bfns + nl = num_angmom(shell) + nprim = shell.coeffs.shape[0] + # Save exponents; increment ienv + iexp = ienv + ienv += shell.exps.size + env[iexp:ienv] = shell.exps + # Save coefficients; increment ienv + icoef = ienv + ienv += shell.coeffs.size + env[icoef:ienv] = normalized_coeffs(shell).reshape(-1, order="F") + # Unpack generalized contractions + for iprim in range(icoef, icoef + shell.coeffs.size, nprim): + # Basis function mult + mults[ibas] = nl + # Index of corresponding atom + bas[ibas, 0] = shell.icenter + # Angular momentum + bas[ibas, 1] = shell.angmom + # Number of primitive GTOs in shell + bas[ibas, 2] = nprim + # Number of contracted GTOs in shell + bas[ibas, 3] = 1 + # Kappa for spinor GTO; unused here + bas[ibas, 4] = 0 + # `env` offset to save exponents of primitive GTOs + bas[ibas, 5] = iexp + # `env` offset to save coefficients of segmented contractions + bas[ibas, 6] = iprim + # Reserved/unused in `libcint` + bas[ibas, 7] = 0 + # Go to next basis function + ibas += 1 # Save coord type self.coord_type = coord_type @@ -317,11 +337,11 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.bas = bas self.env = env - # Save basis function offsets - self.offsets = offsets - self.max_off = max(offsets) + # Save basis function mults + self.mults = mults + self.max_mult = max(mults) - # Save integral functiond + # Save integral functions if coord_type == "cartesian": self.kin = self.make_int1e(LIBCINT.cint1e_kin_cart) self.nuc = self.make_int1e(LIBCINT.cint1e_nuc_cart) @@ -347,18 +367,18 @@ def make_int1e(self, func): def int1e(): # Make temporary arrays shls = np.zeros(2, dtype=c_int) - buf = np.zeros(self.max_off ** 2, dtype=c_double) + buf = np.zeros(self.max_mult ** 2, dtype=c_double) # Make output array out = np.zeros((self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): shls[0] = ishl - p_off = self.offsets[ishl] + p_off = self.mults[ishl] jpos = 0 for jshl in range(ishl + 1): shls[1] = jshl - q_off = self.offsets[jshl] + q_off = self.mults[jshl] # Call the C function to fill `buf` func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) # Fill `out` array @@ -401,28 +421,28 @@ def int2e(notation="physicist"): raise ValueError("`notation` must be one of 'physicist' or 'chemist'") # Make temporary arrays shls = np.zeros(4, dtype=c_int) - buf = np.zeros(self.max_off ** 4, dtype=c_double) + buf = np.zeros(self.max_mult ** 4, dtype=c_double) # Make output array out = np.zeros((self.nbfn, self.nbfn, self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): shls[0] = ishl - p_off = self.offsets[ishl] + p_off = self.mults[ishl] jpos = 0 for jshl in range(ishl + 1): ij = ((ishl + 1) * ishl) // 2 + jshl shls[1] = jshl - q_off = self.offsets[jshl] + q_off = self.mults[jshl] kpos = 0 for kshl in range(self.nbas): shls[2] = kshl - r_off = self.offsets[kshl] + r_off = self.mults[kshl] lpos = 0 for lshl in range(kshl + 1): kl = ((kshl + 1) * kshl) // 2 + lshl shls[3] = lshl - s_off = self.offsets[lshl] + s_off = self.mults[lshl] if ij < kl: lpos += s_off continue @@ -466,10 +486,16 @@ def int2e(notation="physicist"): return int2e -# Singleton LibCInt class instance - -LIBCINT = _LibCInt() -r""" -LIBCINT C library handle and binding generator. +def normalized_coeffs_sph(shell): + r""" + Normalize the spherical GeneralizedContractionShell coefficients. -""" + """ + l = shell.angmom + n = (2 ** (2 * l + 3)) * gamma(l + 2) * ((2 * shell.exps) ** (l + 1.5)) + n /= gamma(2 * l + 3) * (np.pi ** 0.5) + n **= 0.5 + c = shell.coeffs.copy() + for ni, ci in zip(n, c): + ci *= ni + return c diff --git a/tests/data_ccpvdz.nwchem b/tests/data_ccpvdz.nwchem new file mode 100644 index 00000000..f4902510 --- /dev/null +++ b/tests/data_ccpvdz.nwchem @@ -0,0 +1,1128 @@ +#---------------------------------------------------------------------- +# Basis Set Exchange +# Version v0.9.1 +# https://www.basissetexchange.org +#---------------------------------------------------------------------- +# Basis set: cc-pVDZ +# Description: cc-pVDZ +# Role: orbital +# Version: 1 (Data from ccRepo/Grant Hill) +#---------------------------------------------------------------------- + + +BASIS "ao basis" SPHERICAL PRINT +#BASIS SET: (4s,1p) -> [2s,1p] +H S + 1.301000E+01 1.968500E-02 0.000000E+00 + 1.962000E+00 1.379770E-01 0.000000E+00 + 4.446000E-01 4.781480E-01 0.000000E+00 + 1.220000E-01 5.012400E-01 1.000000E+00 +H P + 7.270000E-01 1.0000000 +#BASIS SET: (4s,1p) -> [2s,1p] +He S + 3.836000E+01 2.380900E-02 0.000000E+00 + 5.770000E+00 1.548910E-01 0.000000E+00 + 1.240000E+00 4.699870E-01 0.000000E+00 + 2.976000E-01 5.130270E-01 1.000000E+00 +He P + 1.275000E+00 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +Li S + 1.469000E+03 7.660000E-04 -1.200000E-04 0.000000E+00 + 2.205000E+02 5.892000E-03 -9.230000E-04 0.000000E+00 + 5.026000E+01 2.967100E-02 -4.689000E-03 0.000000E+00 + 1.424000E+01 1.091800E-01 -1.768200E-02 0.000000E+00 + 4.581000E+00 2.827890E-01 -4.890200E-02 0.000000E+00 + 1.580000E+00 4.531230E-01 -9.600900E-02 0.000000E+00 + 5.640000E-01 2.747740E-01 -1.363800E-01 0.000000E+00 + 7.345000E-02 9.751000E-03 5.751020E-01 0.000000E+00 + 2.805000E-02 -3.180000E-03 5.176610E-01 1.000000E+00 +Li P + 1.534000E+00 2.278400E-02 0.000000E+00 + 2.749000E-01 1.391070E-01 0.000000E+00 + 7.362000E-02 5.003750E-01 0.000000E+00 + 2.403000E-02 5.084740E-01 1.000000E+00 +Li D + 1.144000E-01 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +Be S + 2.940000E+03 6.800000E-04 -1.230000E-04 0.000000E+00 + 4.412000E+02 5.236000E-03 -9.660000E-04 0.000000E+00 + 1.005000E+02 2.660600E-02 -4.831000E-03 0.000000E+00 + 2.843000E+01 9.999300E-02 -1.931400E-02 0.000000E+00 + 9.169000E+00 2.697020E-01 -5.328000E-02 0.000000E+00 + 3.196000E+00 4.514690E-01 -1.207230E-01 0.000000E+00 + 1.159000E+00 2.950740E-01 -1.334350E-01 0.000000E+00 + 1.811000E-01 1.258700E-02 5.307670E-01 0.000000E+00 + 5.890000E-02 -3.756000E-03 5.801170E-01 1.000000E+00 +Be P + 3.619000E+00 2.911100E-02 0.000000E+00 + 7.110000E-01 1.693650E-01 0.000000E+00 + 1.951000E-01 5.134580E-01 0.000000E+00 + 6.018000E-02 4.793380E-01 1.000000E+00 +Be D + 2.354000E-01 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +B S + 4.570000E+03 6.960000E-04 -1.390000E-04 0.000000E+00 + 6.859000E+02 5.353000E-03 -1.097000E-03 0.000000E+00 + 1.565000E+02 2.713400E-02 -5.444000E-03 0.000000E+00 + 4.447000E+01 1.013800E-01 -2.191600E-02 0.000000E+00 + 1.448000E+01 2.720550E-01 -5.975100E-02 0.000000E+00 + 5.131000E+00 4.484030E-01 -1.387320E-01 0.000000E+00 + 1.898000E+00 2.901230E-01 -1.314820E-01 0.000000E+00 + 3.329000E-01 1.432200E-02 5.395260E-01 0.000000E+00 + 1.043000E-01 -3.486000E-03 5.807740E-01 1.000000E+00 +B P + 6.001000E+00 3.548100E-02 0.000000E+00 + 1.241000E+00 1.980720E-01 0.000000E+00 + 3.364000E-01 5.052300E-01 0.000000E+00 + 9.538000E-02 4.794990E-01 1.000000E+00 +B D + 3.430000E-01 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +C S + 6.665000E+03 6.920000E-04 -1.460000E-04 0.000000E+00 + 1.000000E+03 5.329000E-03 -1.154000E-03 0.000000E+00 + 2.280000E+02 2.707700E-02 -5.725000E-03 0.000000E+00 + 6.471000E+01 1.017180E-01 -2.331200E-02 0.000000E+00 + 2.106000E+01 2.747400E-01 -6.395500E-02 0.000000E+00 + 7.495000E+00 4.485640E-01 -1.499810E-01 0.000000E+00 + 2.797000E+00 2.850740E-01 -1.272620E-01 0.000000E+00 + 5.215000E-01 1.520400E-02 5.445290E-01 0.000000E+00 + 1.596000E-01 -3.191000E-03 5.804960E-01 1.000000E+00 +C P + 9.439000E+00 3.810900E-02 0.000000E+00 + 2.002000E+00 2.094800E-01 0.000000E+00 + 5.456000E-01 5.085570E-01 0.000000E+00 + 1.517000E-01 4.688420E-01 1.000000E+00 +C D + 5.500000E-01 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +N S + 9.046000E+03 7.000000E-04 -1.530000E-04 0.000000E+00 + 1.357000E+03 5.389000E-03 -1.208000E-03 0.000000E+00 + 3.093000E+02 2.740600E-02 -5.992000E-03 0.000000E+00 + 8.773000E+01 1.032070E-01 -2.454400E-02 0.000000E+00 + 2.856000E+01 2.787230E-01 -6.745900E-02 0.000000E+00 + 1.021000E+01 4.485400E-01 -1.580780E-01 0.000000E+00 + 3.838000E+00 2.782380E-01 -1.218310E-01 0.000000E+00 + 7.466000E-01 1.544000E-02 5.490030E-01 0.000000E+00 + 2.248000E-01 -2.864000E-03 5.788150E-01 1.000000E+00 +N P + 1.355000E+01 3.991900E-02 0.000000E+00 + 2.917000E+00 2.171690E-01 0.000000E+00 + 7.973000E-01 5.103190E-01 0.000000E+00 + 2.185000E-01 4.622140E-01 1.000000E+00 +N D + 8.170000E-01 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +O S + 1.172000E+04 7.100000E-04 -1.600000E-04 0.000000E+00 + 1.759000E+03 5.470000E-03 -1.263000E-03 0.000000E+00 + 4.008000E+02 2.783700E-02 -6.267000E-03 0.000000E+00 + 1.137000E+02 1.048000E-01 -2.571600E-02 0.000000E+00 + 3.703000E+01 2.830620E-01 -7.092400E-02 0.000000E+00 + 1.327000E+01 4.487190E-01 -1.654110E-01 0.000000E+00 + 5.025000E+00 2.709520E-01 -1.169550E-01 0.000000E+00 + 1.013000E+00 1.545800E-02 5.573680E-01 0.000000E+00 + 3.023000E-01 -2.585000E-03 5.727590E-01 1.000000E+00 +O P + 1.770000E+01 4.301800E-02 0.000000E+00 + 3.854000E+00 2.289130E-01 0.000000E+00 + 1.046000E+00 5.087280E-01 0.000000E+00 + 2.753000E-01 4.605310E-01 1.000000E+00 +O D + 1.185000E+00 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +F S + 1.471000E+04 7.210000E-04 -1.650000E-04 0.000000E+00 + 2.207000E+03 5.553000E-03 -1.308000E-03 0.000000E+00 + 5.028000E+02 2.826700E-02 -6.495000E-03 0.000000E+00 + 1.426000E+02 1.064440E-01 -2.669100E-02 0.000000E+00 + 4.647000E+01 2.868140E-01 -7.369000E-02 0.000000E+00 + 1.670000E+01 4.486410E-01 -1.707760E-01 0.000000E+00 + 6.356000E+00 2.647610E-01 -1.123270E-01 0.000000E+00 + 1.316000E+00 1.533300E-02 5.628140E-01 0.000000E+00 + 3.897000E-01 -2.332000E-03 5.687780E-01 1.000000E+00 +F P + 2.267000E+01 4.487800E-02 0.000000E+00 + 4.977000E+00 2.357180E-01 0.000000E+00 + 1.347000E+00 5.085210E-01 0.000000E+00 + 3.471000E-01 4.581200E-01 1.000000E+00 +F D + 1.640000E+00 1.0000000 +#BASIS SET: (9s,4p,1d) -> [3s,2p,1d] +Ne S + 1.788000E+04 7.380000E-04 -1.720000E-04 0.000000E+00 + 2.683000E+03 5.677000E-03 -1.357000E-03 0.000000E+00 + 6.115000E+02 2.888300E-02 -6.737000E-03 0.000000E+00 + 1.735000E+02 1.085400E-01 -2.766300E-02 0.000000E+00 + 5.664000E+01 2.909070E-01 -7.620800E-02 0.000000E+00 + 2.042000E+01 4.483240E-01 -1.752270E-01 0.000000E+00 + 7.810000E+00 2.580260E-01 -1.070380E-01 0.000000E+00 + 1.653000E+00 1.506300E-02 5.670500E-01 0.000000E+00 + 4.869000E-01 -2.100000E-03 5.652160E-01 1.000000E+00 +Ne P + 2.839000E+01 4.608700E-02 0.000000E+00 + 6.270000E+00 2.401810E-01 0.000000E+00 + 1.695000E+00 5.087440E-01 0.000000E+00 + 4.317000E-01 4.556600E-01 1.000000E+00 +Ne D + 2.202000E+00 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +Na S + 3.170000E+04 4.588780E-04 -1.121620E-04 1.701600E-05 0.000000E+00 + 4.755000E+03 3.550700E-03 -8.685120E-04 1.306930E-04 0.000000E+00 + 1.082000E+03 1.826180E-02 -4.513300E-03 6.877840E-04 0.000000E+00 + 3.064000E+02 7.166500E-02 -1.814360E-02 2.723590E-03 0.000000E+00 + 9.953000E+01 2.123460E-01 -5.807990E-02 8.955290E-03 0.000000E+00 + 3.542000E+01 4.162030E-01 -1.376530E-01 2.078320E-02 0.000000E+00 + 1.330000E+01 3.730200E-01 -1.939080E-01 3.193800E-02 0.000000E+00 + 4.392000E+00 6.250540E-02 8.580090E-02 -1.913680E-02 0.000000E+00 + 1.676000E+00 -6.245320E-03 6.044190E-01 -1.025950E-01 0.000000E+00 + 5.889000E-01 2.433740E-03 4.417190E-01 -1.989450E-01 0.000000E+00 + 5.640000E-02 -4.423810E-04 1.305470E-02 6.559520E-01 0.000000E+00 + 2.307000E-02 2.419240E-04 -5.680850E-03 4.311530E-01 1.000000E+00 +Na P + 1.381000E+02 5.796410E-03 -5.815310E-04 0.000000E+00 + 3.224000E+01 4.157560E-02 -4.073060E-03 0.000000E+00 + 9.985000E+00 1.628730E-01 -1.679370E-02 0.000000E+00 + 3.484000E+00 3.594010E-01 -3.532680E-02 0.000000E+00 + 1.231000E+00 4.499880E-01 -5.219710E-02 0.000000E+00 + 4.177000E-01 2.275070E-01 -1.683590E-02 0.000000E+00 + 6.513000E-02 8.082470E-03 4.346130E-01 0.000000E+00 + 2.053000E-02 -1.962930E-03 6.582180E-01 1.000000E+00 +Na D + 9.280000E-02 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +Mg S + 4.739000E+04 3.460230E-04 -8.778390E-05 1.696280E-05 0.000000E+00 + 7.108000E+03 2.680770E-03 -6.747250E-04 1.298650E-04 0.000000E+00 + 1.618000E+03 1.383670E-02 -3.556030E-03 6.888310E-04 0.000000E+00 + 4.584000E+02 5.517670E-02 -1.421540E-02 2.735330E-03 0.000000E+00 + 1.493000E+02 1.696600E-01 -4.767480E-02 9.312240E-03 0.000000E+00 + 5.359000E+01 3.647030E-01 -1.148920E-01 2.232650E-02 0.000000E+00 + 2.070000E+01 4.068560E-01 -2.006760E-01 4.111950E-02 0.000000E+00 + 8.384000E+00 1.350890E-01 -3.412240E-02 5.456420E-03 0.000000E+00 + 2.542000E+00 4.908840E-03 5.704540E-01 -1.340120E-01 0.000000E+00 + 8.787000E-01 2.864600E-04 5.423090E-01 -2.561760E-01 0.000000E+00 + 1.077000E-01 2.645900E-05 2.181280E-02 6.058560E-01 0.000000E+00 + 3.999000E-02 -1.127080E-05 -8.277000E-03 5.094460E-01 1.000000E+00 +Mg P + 1.799000E+02 5.381610E-03 -8.659480E-04 0.000000E+00 + 4.214000E+01 3.924180E-02 -6.159780E-03 0.000000E+00 + 1.313000E+01 1.574450E-01 -2.615190E-02 0.000000E+00 + 4.628000E+00 3.585350E-01 -5.706470E-02 0.000000E+00 + 1.670000E+00 4.572260E-01 -8.739060E-02 0.000000E+00 + 5.857000E-01 2.159180E-01 -1.229900E-02 0.000000E+00 + 1.311000E-01 6.649480E-03 5.020850E-01 0.000000E+00 + 4.112000E-02 -1.253040E-04 5.972450E-01 1.000000E+00 +Mg D + 1.932000E-01 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +Al S + 6.415000E+04 2.902500E-04 -7.580480E-05 1.750780E-05 0.000000E+00 + 9.617000E+03 2.250640E-03 -5.817910E-04 1.342080E-04 0.000000E+00 + 2.189000E+03 1.164590E-02 -3.081130E-03 7.124420E-04 0.000000E+00 + 6.205000E+02 4.673770E-02 -1.231120E-02 2.843300E-03 0.000000E+00 + 2.027000E+02 1.462990E-01 -4.197810E-02 9.768420E-03 0.000000E+00 + 7.315000E+01 3.302830E-01 -1.033710E-01 2.418500E-02 0.000000E+00 + 2.855000E+01 4.158610E-01 -1.963080E-01 4.749930E-02 0.000000E+00 + 1.177000E+01 1.892530E-01 -8.300020E-02 2.036210E-02 0.000000E+00 + 3.300000E+00 1.158890E-02 5.410400E-01 -1.587880E-01 0.000000E+00 + 1.173000E+00 -1.283850E-03 5.787960E-01 -3.116940E-01 0.000000E+00 + 1.752000E-01 4.258830E-04 2.881470E-02 6.201470E-01 0.000000E+00 + 6.473000E-02 -1.992800E-04 -9.537950E-03 5.209430E-01 1.000000E+00 +Al P + 2.588000E+02 4.068470E-03 -7.480530E-04 0.000000E+00 + 6.089000E+01 3.068150E-02 -5.457960E-03 0.000000E+00 + 1.914000E+01 1.291490E-01 -2.453710E-02 0.000000E+00 + 6.881000E+00 3.208310E-01 -5.821380E-02 0.000000E+00 + 2.574000E+00 4.538150E-01 -9.837560E-02 0.000000E+00 + 9.572000E-01 2.750660E-01 -2.600640E-02 0.000000E+00 + 2.099000E-01 1.908070E-02 4.640200E-01 0.000000E+00 + 5.986000E-02 -3.128480E-03 6.488700E-01 1.000000E+00 +Al D + 1.890000E-01 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +Si S + 7.886000E+04 2.704430E-04 -7.231770E-05 1.851130E-05 0.000000E+00 + 1.182000E+04 2.097170E-03 -5.551160E-04 1.422360E-04 0.000000E+00 + 2.692000E+03 1.085060E-02 -2.938050E-03 7.521850E-04 0.000000E+00 + 7.634000E+02 4.367540E-02 -1.176870E-02 3.022790E-03 0.000000E+00 + 2.496000E+02 1.376530E-01 -4.029070E-02 1.036770E-02 0.000000E+00 + 9.028000E+01 3.166440E-01 -1.006090E-01 2.625630E-02 0.000000E+00 + 3.529000E+01 4.185810E-01 -1.965280E-01 5.239890E-02 0.000000E+00 + 1.451000E+01 2.102120E-01 -1.023820E-01 2.909590E-02 0.000000E+00 + 4.053000E+00 1.449520E-02 5.271900E-01 -1.780030E-01 0.000000E+00 + 1.482000E+00 -2.035900E-03 5.932510E-01 -3.468740E-01 0.000000E+00 + 2.517000E-01 6.241860E-04 3.326520E-02 6.230200E-01 0.000000E+00 + 9.243000E-02 -2.828720E-04 -9.736620E-03 5.377120E-01 1.000000E+00 +Si P + 3.159000E+02 3.926560E-03 -8.583020E-04 0.000000E+00 + 7.442000E+01 2.988110E-02 -6.303280E-03 0.000000E+00 + 2.348000E+01 1.272120E-01 -2.882550E-02 0.000000E+00 + 8.488000E+00 3.209430E-01 -6.945600E-02 0.000000E+00 + 3.217000E+00 4.554290E-01 -1.194930E-01 0.000000E+00 + 1.229000E+00 2.685630E-01 -1.995810E-02 0.000000E+00 + 2.964000E-01 1.883360E-02 5.102680E-01 0.000000E+00 + 8.768000E-02 -2.624310E-03 6.003820E-01 1.000000E+00 +Si D + 2.750000E-01 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +P S + 9.484000E+04 2.555090E-04 -6.969390E-05 1.911990E-05 0.000000E+00 + 1.422000E+04 1.981930E-03 -5.352660E-04 1.472230E-04 0.000000E+00 + 3.236000E+03 1.027600E-02 -2.837090E-03 7.779120E-04 0.000000E+00 + 9.171000E+02 4.148230E-02 -1.139830E-02 3.145460E-03 0.000000E+00 + 2.995000E+02 1.319840E-01 -3.929290E-02 1.082000E-02 0.000000E+00 + 1.081000E+02 3.086620E-01 -9.963640E-02 2.799570E-02 0.000000E+00 + 4.218000E+01 4.206470E-01 -1.979830E-01 5.639780E-02 0.000000E+00 + 1.728000E+01 2.228780E-01 -1.148600E-01 3.581900E-02 0.000000E+00 + 4.858000E+00 1.640350E-02 5.185950E-01 -1.933870E-01 0.000000E+00 + 1.818000E+00 -2.542550E-03 6.018470E-01 -3.720970E-01 0.000000E+00 + 3.372000E-01 7.480500E-04 3.686120E-02 6.242460E-01 0.000000E+00 + 1.232000E-01 -3.309630E-04 -9.707590E-03 5.517210E-01 1.000000E+00 +P P + 3.705000E+02 3.950050E-03 -9.598320E-04 0.000000E+00 + 8.733000E+01 3.024920E-02 -7.111770E-03 0.000000E+00 + 2.759000E+01 1.295540E-01 -3.271220E-02 0.000000E+00 + 1.000000E+01 3.275940E-01 -7.957840E-02 0.000000E+00 + 3.825000E+00 4.569920E-01 -1.350160E-01 0.000000E+00 + 1.494000E+00 2.530860E-01 -9.105850E-03 0.000000E+00 + 3.921000E-01 1.687980E-02 5.378020E-01 0.000000E+00 + 1.186000E-01 -2.070930E-03 5.690660E-01 1.000000E+00 +P D + 3.730000E-01 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +S S + 1.108000E+05 2.476350E-04 -6.870390E-05 1.990770E-05 0.000000E+00 + 1.661000E+04 1.920260E-03 -5.276810E-04 1.534830E-04 0.000000E+00 + 3.781000E+03 9.961920E-03 -2.796710E-03 8.095030E-04 0.000000E+00 + 1.071000E+03 4.029750E-02 -1.126510E-02 3.289740E-03 0.000000E+00 + 3.498000E+02 1.286040E-01 -3.888340E-02 1.129670E-02 0.000000E+00 + 1.263000E+02 3.034800E-01 -9.950250E-02 2.963850E-02 0.000000E+00 + 4.926000E+01 4.214320E-01 -1.997400E-01 5.998510E-02 0.000000E+00 + 2.016000E+01 2.307810E-01 -1.233600E-01 4.132480E-02 0.000000E+00 + 5.720000E+00 1.789710E-02 5.131940E-01 -2.074740E-01 0.000000E+00 + 2.182000E+00 -2.975160E-03 6.071200E-01 -3.928890E-01 0.000000E+00 + 4.327000E-01 8.495220E-04 3.967530E-02 6.328400E-01 0.000000E+00 + 1.570000E-01 -3.679360E-04 -9.468640E-03 5.569240E-01 1.000000E+00 +S P + 3.997000E+02 4.475410E-03 -1.162510E-03 0.000000E+00 + 9.419000E+01 3.417080E-02 -8.656640E-03 0.000000E+00 + 2.975000E+01 1.442500E-01 -3.908860E-02 0.000000E+00 + 1.077000E+01 3.539280E-01 -9.346250E-02 0.000000E+00 + 4.119000E+00 4.590850E-01 -1.479940E-01 0.000000E+00 + 1.625000E+00 2.063830E-01 3.019040E-02 0.000000E+00 + 4.726000E-01 1.021410E-02 5.615730E-01 0.000000E+00 + 1.407000E-01 -6.031220E-05 5.347760E-01 1.000000E+00 +S D + 4.790000E-01 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +Cl S + 1.279000E+05 2.411530E-04 -6.789220E-05 2.049860E-05 0.000000E+00 + 1.917000E+04 1.870950E-03 -5.218360E-04 1.582980E-04 0.000000E+00 + 4.363000E+03 9.708270E-03 -2.765130E-03 8.336390E-04 0.000000E+00 + 1.236000E+03 3.931530E-02 -1.115370E-02 3.398800E-03 0.000000E+00 + 4.036000E+02 1.259320E-01 -3.859190E-02 1.167380E-02 0.000000E+00 + 1.457000E+02 2.993410E-01 -9.948480E-02 3.096220E-02 0.000000E+00 + 5.681000E+01 4.218860E-01 -2.013920E-01 6.295330E-02 0.000000E+00 + 2.323000E+01 2.372010E-01 -1.303130E-01 4.602570E-02 0.000000E+00 + 6.644000E+00 1.915310E-02 5.094430E-01 -2.193120E-01 0.000000E+00 + 2.575000E+00 -3.347920E-03 6.107250E-01 -4.087730E-01 0.000000E+00 + 5.371000E-01 9.298830E-04 4.215490E-02 6.384650E-01 0.000000E+00 + 1.938000E-01 -3.963790E-04 -9.234270E-03 5.623620E-01 1.000000E+00 +Cl P + 4.176000E+02 5.259820E-03 -1.435700E-03 0.000000E+00 + 9.833000E+01 3.983320E-02 -1.077960E-02 0.000000E+00 + 3.104000E+01 1.646550E-01 -4.700750E-02 0.000000E+00 + 1.119000E+01 3.873220E-01 -1.110300E-01 0.000000E+00 + 4.249000E+00 4.570720E-01 -1.532750E-01 0.000000E+00 + 1.624000E+00 1.516360E-01 8.946090E-02 0.000000E+00 + 5.322000E-01 1.816150E-03 5.794440E-01 0.000000E+00 + 1.620000E-01 1.882960E-03 4.832720E-01 1.000000E+00 +Cl D + 6.000000E-01 1.0000000 +#BASIS SET: (12s,8p,1d) -> [4s,3p,1d] +Ar S + 1.457000E+05 2.367000E-04 -6.749100E-05 2.104570E-05 0.000000E+00 + 2.184000E+04 1.835230E-03 -5.185220E-04 1.625650E-04 0.000000E+00 + 4.972000E+03 9.528600E-03 -2.748250E-03 8.554630E-04 0.000000E+00 + 1.408000E+03 3.862830E-02 -1.110070E-02 3.497450E-03 0.000000E+00 + 4.597000E+02 1.240810E-01 -3.848200E-02 1.201560E-02 0.000000E+00 + 1.659000E+02 2.964710E-01 -9.975990E-02 3.213680E-02 0.000000E+00 + 6.469000E+01 4.220680E-01 -2.030880E-01 6.552790E-02 0.000000E+00 + 2.644000E+01 2.417110E-01 -1.356080E-01 4.993700E-02 0.000000E+00 + 7.628000E+00 2.005090E-02 5.071950E-01 -2.297690E-01 0.000000E+00 + 2.996000E+00 -3.610000E-03 6.128980E-01 -4.210060E-01 0.000000E+00 + 6.504000E-01 9.756070E-04 4.429680E-02 6.423310E-01 0.000000E+00 + 2.337000E-01 -4.113160E-04 -8.992780E-03 5.675400E-01 1.000000E+00 +Ar P + 4.537000E+02 5.705550E-03 -1.606550E-03 0.000000E+00 + 1.068000E+02 4.304600E-02 -1.217140E-02 0.000000E+00 + 3.373000E+01 1.765910E-01 -5.207890E-02 0.000000E+00 + 1.213000E+01 4.068630E-01 -1.237370E-01 0.000000E+00 + 4.594000E+00 4.525490E-01 -1.516190E-01 0.000000E+00 + 1.678000E+00 1.228010E-01 1.424250E-01 0.000000E+00 + 5.909000E-01 -4.459960E-03 5.845010E-01 0.000000E+00 + 1.852000E-01 2.052250E-03 4.375400E-01 1.000000E+00 +Ar D + 7.380000E-01 1.0000000 +#BASIS SET: (14s,11p,5d) -> [5s,4p,2d] +Ca S + 1.900007E+05 2.214500E-04 -6.453000E-05 2.223000E-05 5.310000E-06 0.000000E+00 + 2.848146E+04 1.718300E-03 -4.966200E-04 1.717000E-04 4.111000E-05 0.000000E+00 + 6.482701E+03 8.923480E-03 -2.628260E-03 9.045200E-04 2.156800E-04 0.000000E+00 + 1.835891E+03 3.630183E-02 -1.066845E-02 3.703430E-03 8.882700E-04 0.000000E+00 + 5.987243E+02 1.176222E-01 -3.713509E-02 1.283750E-02 3.058130E-03 0.000000E+00 + 2.158841E+02 2.860435E-01 -9.804284E-02 3.475459E-02 8.376080E-03 0.000000E+00 + 8.401242E+01 4.226071E-01 -2.034269E-01 7.303491E-02 1.741056E-02 0.000000E+00 + 3.422488E+01 2.577437E-01 -1.524465E-01 6.100083E-02 1.515453E-02 0.000000E+00 + 1.002497E+01 2.391893E-02 4.827941E-01 -2.429293E-01 -6.207919E-02 0.000000E+00 + 4.055920E+00 -4.952180E-03 6.292384E-01 -4.870850E-01 -1.261180E-01 0.000000E+00 + 1.020261E+00 1.717790E-03 6.164842E-02 5.650280E-01 1.736069E-01 0.000000E+00 + 4.268650E-01 -8.920900E-04 -1.479971E-02 6.557439E-01 3.782294E-01 0.000000E+00 + 6.334700E-02 2.451000E-04 3.610890E-03 2.672894E-02 -6.596470E-01 0.000000E+00 + 2.630100E-02 -1.239500E-04 -1.792730E-03 -9.999590E-03 -4.902216E-01 1.000000E+00 +Ca P + 1.072043E+03 1.981660E-03 -6.489100E-04 1.359500E-04 0.000000E+00 + 2.538439E+02 1.612944E-02 -5.279070E-03 1.094200E-03 0.000000E+00 + 8.131626E+01 7.657851E-02 -2.581131E-02 5.426800E-03 0.000000E+00 + 3.024183E+01 2.326959E-01 -8.062892E-02 1.674718E-02 0.000000E+00 + 1.210110E+01 4.244521E-01 -1.584655E-01 3.389863E-02 0.000000E+00 + 5.022554E+00 3.732640E-01 -1.281682E-01 2.531183E-02 0.000000E+00 + 1.909220E+00 7.868530E-02 2.561010E-01 -5.895713E-02 0.000000E+00 + 7.713040E-01 -5.999270E-03 5.872407E-01 -1.587612E-01 0.000000E+00 + 3.005700E-01 2.642570E-03 3.037256E-01 -8.554523E-02 0.000000E+00 + 7.664900E-02 -8.569400E-04 1.416451E-02 5.446467E-01 0.000000E+00 + 2.777200E-02 3.314700E-04 -1.152240E-03 5.663128E-01 1.000000E+00 +Ca D + 1.031820E+01 3.284900E-02 0.000000E+00 + 2.592420E+00 1.481920E-01 0.000000E+00 + 7.617000E-01 3.109210E-01 0.000000E+00 + 2.083800E-01 4.521950E-01 0.000000E+00 + 5.370000E-02 4.808650E-01 1.000000E+00 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Sc S + 2.715278E+06 8.147221E-06 -4.722109E-06 9.139905E-07 -2.201951E-07 -3.757238E-07 0.000000E+00 + 4.065984E+05 6.334788E-05 -3.671829E-05 7.108513E-06 -1.711419E-06 -2.981907E-06 0.000000E+00 + 9.253004E+04 3.330384E-04 -1.930883E-04 3.738126E-05 -9.008469E-06 -1.522586E-05 0.000000E+00 + 2.620792E+04 1.404055E-03 -8.146870E-04 1.578828E-04 -3.799997E-05 -6.684686E-05 0.000000E+00 + 8.549429E+03 5.081725E-03 -2.955526E-03 5.737686E-04 -1.383227E-04 -2.313129E-04 0.000000E+00 + 3.085975E+03 1.626926E-02 -9.520035E-03 1.859244E-03 -4.473692E-04 -7.959729E-04 0.000000E+00 + 1.203172E+03 4.624577E-02 -2.746858E-02 5.433182E-03 -1.310691E-03 -2.161961E-03 0.000000E+00 + 4.984869E+02 1.137223E-01 -6.991528E-02 1.425387E-02 -3.429860E-03 -6.206459E-03 0.000000E+00 + 2.167360E+02 2.257636E-01 -1.499251E-01 3.246144E-02 -7.847579E-03 -1.261905E-02 0.000000E+00 + 9.787476E+01 3.106700E-01 -2.459153E-01 6.003454E-02 -1.447189E-02 -2.739459E-02 0.000000E+00 + 4.520433E+01 2.191906E-01 -2.401293E-01 6.916105E-02 -1.690669E-02 -2.336516E-02 0.000000E+00 + 2.021187E+01 7.215879E-02 3.567987E-02 -2.113084E-02 5.396115E-03 -5.734627E-03 0.000000E+00 + 9.574751E+00 1.187030E-01 4.915023E-01 -2.666832E-01 6.671062E-02 1.536025E-01 0.000000E+00 + 4.540346E+00 1.220532E-01 4.911381E-01 -4.367591E-01 1.178356E-01 1.447100E-01 0.000000E+00 + 1.995687E+00 2.136795E-02 9.120633E-02 6.498243E-02 -2.738134E-02 9.359699E-02 0.000000E+00 + 9.422150E-01 -5.357246E-04 -5.356723E-03 7.009599E-01 -2.260149E-01 -8.687730E-01 0.000000E+00 + 4.178450E-01 2.435774E-04 8.812836E-04 4.515562E-01 -3.073539E-01 2.114597E-02 0.000000E+00 + 9.576100E-02 -8.796617E-05 -7.605536E-04 3.011910E-02 2.544054E-01 2.275498E+00 0.000000E+00 + 5.135100E-02 7.878246E-05 6.340116E-04 -1.329480E-02 5.981590E-01 -1.190770E+00 0.000000E+00 + 2.387800E-02 -1.637155E-05 -1.556163E-04 4.633679E-03 3.115202E-01 -7.674257E-01 1.000000E+00 +Sc P + 1.059219E+04 4.500000E-05 -1.500000E-05 4.000000E-06 -4.000000E-06 0.000000E+00 + 2.507533E+03 4.010000E-04 -1.310000E-04 3.900000E-05 -3.200000E-05 0.000000E+00 + 8.144571E+02 2.302000E-03 -7.570000E-04 2.210000E-04 -1.850000E-04 0.000000E+00 + 3.115195E+02 1.003700E-02 -3.318000E-03 9.840000E-04 -8.080000E-04 0.000000E+00 + 1.319617E+02 3.495400E-02 -1.170600E-02 3.423000E-03 -2.870000E-03 0.000000E+00 + 5.998718E+01 9.790900E-02 -3.360400E-02 9.993000E-03 -8.207000E-03 0.000000E+00 + 2.866250E+01 2.106800E-01 -7.487900E-02 2.191600E-02 -1.847300E-02 0.000000E+00 + 1.410851E+01 3.300930E-01 -1.225480E-01 3.700800E-02 -3.010100E-02 0.000000E+00 + 7.103706E+00 3.310270E-01 -1.302760E-01 3.779400E-02 -3.294300E-02 0.000000E+00 + 3.609200E+00 1.579600E-01 1.459600E-02 -4.379000E-03 7.958000E-03 0.000000E+00 + 1.776070E+00 2.209900E-02 3.091840E-01 -1.101640E-01 8.799300E-02 0.000000E+00 + 8.547600E-01 -1.605000E-03 4.629980E-01 -1.610170E-01 1.523770E-01 0.000000E+00 + 4.022390E-01 -1.326000E-03 3.049570E-01 -1.824820E-01 9.717000E-02 0.000000E+00 + 1.546650E-01 -2.800000E-04 5.087800E-02 3.886110E-01 -2.569380E-01 0.000000E+00 + 6.494500E-02 3.400000E-05 -4.493000E-03 6.911000E-01 -5.878150E-01 0.000000E+00 + 2.635900E-02 -1.300000E-05 1.832000E-03 7.960400E-02 -3.054210E-01 1.000000E+00 +Sc D + 5.051380E+01 4.266000E-03 -4.389000E-03 0.000000E+00 + 1.474050E+01 2.770800E-02 -2.836300E-02 0.000000E+00 + 5.195000E+00 1.000010E-01 -1.051370E-01 0.000000E+00 + 2.028460E+00 2.315810E-01 -2.348540E-01 0.000000E+00 + 8.040860E-01 3.460330E-01 -3.246090E-01 0.000000E+00 + 3.076890E-01 3.733740E-01 -6.428900E-02 0.000000E+00 + 1.113920E-01 2.642880E-01 6.017490E-01 0.000000E+00 + 3.735200E-02 6.366700E-02 3.903000E-01 1.000000E+00 +Sc F + 7.126000E-01 3.617450E-01 + 1.636000E-01 8.218680E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Ti S + 3.014643E+06 8.060782E-06 -4.630486E-06 9.230559E-07 -2.180323E-07 -3.975126E-07 0.000000E+00 + 4.514329E+05 6.267518E-05 -3.600451E-05 7.178974E-06 -1.694860E-06 -3.161080E-06 0.000000E+00 + 1.027338E+05 3.295006E-04 -1.893420E-04 3.775134E-05 -8.919208E-06 -1.609375E-05 0.000000E+00 + 2.909817E+04 1.389203E-03 -7.988781E-04 1.594532E-04 -3.763633E-05 -7.092947E-05 0.000000E+00 + 9.492330E+03 5.028469E-03 -2.898698E-03 5.795150E-04 -1.369575E-04 -2.442710E-04 0.000000E+00 + 3.426346E+03 1.610419E-02 -9.339701E-03 1.878414E-03 -4.432894E-04 -8.457892E-04 0.000000E+00 + 1.335896E+03 4.581232E-02 -2.697464E-02 5.492747E-03 -1.298868E-03 -2.282208E-03 0.000000E+00 + 5.535026E+02 1.128613E-01 -6.878913E-02 1.443297E-02 -3.406752E-03 -6.619873E-03 0.000000E+00 + 2.406925E+02 2.248193E-01 -1.481037E-01 3.296408E-02 -7.810829E-03 -1.335024E-02 0.000000E+00 + 1.087293E+02 3.114571E-01 -2.445253E-01 6.125493E-02 -1.449245E-02 -2.955830E-02 0.000000E+00 + 5.026457E+01 2.224995E-01 -2.419916E-01 7.134113E-02 -1.708136E-02 -2.477039E-02 0.000000E+00 + 2.258004E+01 7.293128E-02 3.183790E-02 -1.973150E-02 4.897666E-03 -8.414624E-03 0.000000E+00 + 1.071432E+01 1.160683E-01 4.932686E-01 -2.741869E-01 6.753108E-02 1.693855E-01 0.000000E+00 + 5.093546E+00 1.194774E-01 4.939655E-01 -4.440977E-01 1.173318E-01 1.500787E-01 0.000000E+00 + 2.244183E+00 2.097868E-02 9.196313E-02 7.776084E-02 -2.985025E-02 9.787777E-02 0.000000E+00 + 1.059570E+00 -5.091715E-04 -5.316992E-03 7.068444E-01 -2.277634E-01 -9.653608E-01 0.000000E+00 + 4.688490E-01 2.217859E-04 8.085624E-04 4.413892E-01 -2.928115E-01 1.489721E-01 0.000000E+00 + 1.061430E-01 -7.636896E-05 -6.918459E-04 2.799769E-02 2.665300E-01 2.191179E+00 0.000000E+00 + 5.526200E-02 7.719539E-05 6.086512E-04 -1.210790E-02 5.912406E-01 -1.243325E+00 0.000000E+00 + 2.546500E-02 -1.149056E-05 -1.313842E-04 4.324762E-03 3.037229E-01 -6.711916E-01 1.000000E+00 +Ti P + 1.191203E+04 4.400000E-05 -1.500000E-05 4.000000E-06 4.000000E-06 0.000000E+00 + 2.819947E+03 3.910000E-04 -1.310000E-04 3.900000E-05 3.100000E-05 0.000000E+00 + 9.159479E+02 2.248000E-03 -7.550000E-04 2.230000E-04 1.820000E-04 0.000000E+00 + 3.503842E+02 9.823000E-03 -3.319000E-03 9.920000E-04 7.950000E-04 0.000000E+00 + 1.484825E+02 3.433800E-02 -1.175000E-02 3.476000E-03 2.833000E-03 0.000000E+00 + 6.753944E+01 9.666600E-02 -3.392200E-02 1.017200E-02 8.154000E-03 0.000000E+00 + 3.230332E+01 2.094170E-01 -7.616400E-02 2.257600E-02 1.847200E-02 0.000000E+00 + 1.592786E+01 3.301890E-01 -1.257020E-01 3.823800E-02 3.040000E-02 0.000000E+00 + 8.038035E+00 3.319360E-01 -1.330980E-01 3.933700E-02 3.304700E-02 0.000000E+00 + 4.093916E+00 1.584880E-01 1.740600E-02 -6.106000E-03 -8.251000E-03 0.000000E+00 + 2.022390E+00 2.231000E-02 3.151650E-01 -1.129620E-01 -8.855400E-02 0.000000E+00 + 9.761020E-01 -1.566000E-03 4.618140E-01 -1.681140E-01 -1.496120E-01 0.000000E+00 + 4.595950E-01 -1.324000E-03 2.998560E-01 -1.659320E-01 -9.422700E-02 0.000000E+00 + 1.771520E-01 -2.710000E-04 5.000000E-02 3.914030E-01 2.508460E-01 0.000000E+00 + 7.351700E-02 3.200000E-05 -4.230000E-03 6.818400E-01 5.866430E-01 0.000000E+00 + 2.940100E-02 -1.200000E-05 1.725000E-03 8.403100E-02 3.135350E-01 1.000000E+00 +Ti D + 6.401300E+01 3.887000E-03 -3.970000E-03 0.000000E+00 + 1.881790E+01 2.639900E-02 -2.687300E-02 0.000000E+00 + 6.728700E+00 9.751100E-02 -1.022750E-01 0.000000E+00 + 2.664130E+00 2.328480E-01 -2.377280E-01 0.000000E+00 + 1.078680E+00 3.531520E-01 -3.121140E-01 0.000000E+00 + 4.232090E-01 3.721860E-01 -4.237800E-02 0.000000E+00 + 1.559990E-01 2.476720E-01 5.886580E-01 0.000000E+00 + 5.188400E-02 5.823600E-02 4.103020E-01 1.000000E+00 +Ti F + 1.227400E+00 3.581580E-01 + 2.788000E-01 8.257940E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +V S + 3.321857E+06 8.039999E-06 -4.503003E-06 9.320648E-07 -2.158944E-07 -4.093416E-07 0.000000E+00 + 4.974356E+05 6.251402E-05 -3.501295E-05 7.249306E-06 -1.678519E-06 -3.258956E-06 0.000000E+00 + 1.132027E+05 3.286553E-04 -1.841339E-04 3.811967E-05 -8.831213E-06 -1.656390E-05 0.000000E+00 + 3.206333E+04 1.385697E-03 -7.769216E-04 1.610238E-04 -3.727769E-05 -7.316689E-05 0.000000E+00 + 1.045962E+04 5.016217E-03 -2.819505E-03 5.852210E-04 -1.356099E-04 -2.512784E-04 0.000000E+00 + 3.775506E+03 1.606931E-02 -9.087486E-03 1.897502E-03 -4.392351E-04 -8.732657E-04 0.000000E+00 + 1.472040E+03 4.574242E-02 -2.627134E-02 5.550909E-03 -1.286948E-03 -2.347654E-03 0.000000E+00 + 6.099331E+02 1.128544E-01 -6.712726E-02 1.460584E-02 -3.382149E-03 -6.853150E-03 0.000000E+00 + 2.652634E+02 2.254344E-01 -1.451130E-01 3.342974E-02 -7.765646E-03 -1.376420E-02 0.000000E+00 + 1.198607E+02 3.140461E-01 -2.412483E-01 6.235722E-02 -1.447985E-02 -3.084679E-02 0.000000E+00 + 5.544891E+01 2.267819E-01 -2.416314E-01 7.312435E-02 -1.715502E-02 -2.562208E-02 0.000000E+00 + 2.498372E+01 7.334069E-02 3.067362E-02 -1.911472E-02 4.610101E-03 -1.005123E-02 0.000000E+00 + 1.188056E+01 1.102474E-01 4.970415E-01 -2.817249E-01 6.827831E-02 1.795330E-01 0.000000E+00 + 5.660311E+00 1.131358E-01 4.958875E-01 -4.488151E-01 1.161368E-01 1.522400E-01 0.000000E+00 + 2.495703E+00 1.971295E-02 9.181868E-02 9.202696E-02 -3.277049E-02 9.483887E-02 0.000000E+00 + 1.177866E+00 -4.719088E-04 -5.392514E-03 7.110117E-01 -2.280000E-01 -1.014876E+00 0.000000E+00 + 5.200440E-01 1.861606E-04 7.102380E-04 4.309274E-01 -2.793991E-01 2.308810E-01 0.000000E+00 + 1.159650E-01 -6.208598E-05 -6.363128E-04 2.604589E-02 2.771165E-01 2.113321E+00 0.000000E+00 + 5.893800E-02 7.295314E-05 5.979932E-04 -1.101049E-02 5.852999E-01 -1.253048E+00 0.000000E+00 + 2.694600E-02 -6.362062E-06 -1.100879E-04 4.106300E-03 2.963946E-01 -6.139502E-01 1.000000E+00 +V P + 1.327320E+04 4.300000E-05 -1.500000E-05 4.000000E-06 4.000000E-06 0.000000E+00 + 3.142126E+03 3.840000E-04 -1.310000E-04 3.900000E-05 3.200000E-05 0.000000E+00 + 1.020588E+03 2.210000E-03 -7.550000E-04 2.230000E-04 1.830000E-04 0.000000E+00 + 3.904407E+02 9.678000E-03 -3.325000E-03 9.960000E-04 8.020000E-04 0.000000E+00 + 1.655043E+02 3.393600E-02 -1.181100E-02 3.498000E-03 2.862000E-03 0.000000E+00 + 7.532006E+01 9.591700E-02 -3.425600E-02 1.029600E-02 8.287000E-03 0.000000E+00 + 3.605503E+01 2.088530E-01 -7.736300E-02 2.296200E-02 1.887000E-02 0.000000E+00 + 1.780436E+01 3.306600E-01 -1.284560E-01 3.920800E-02 3.130700E-02 0.000000E+00 + 9.002929E+00 3.323120E-01 -1.350780E-01 3.994300E-02 3.366000E-02 0.000000E+00 + 4.594544E+00 1.581880E-01 2.083800E-02 -7.121000E-03 -9.479000E-03 0.000000E+00 + 2.276760E+00 2.225200E-02 3.204990E-01 -1.162250E-01 -9.231300E-02 0.000000E+00 + 1.101178E+00 -1.565000E-03 4.602600E-01 -1.694960E-01 -1.489890E-01 0.000000E+00 + 5.186380E-01 -1.353000E-03 2.953460E-01 -1.553740E-01 -8.364400E-02 0.000000E+00 + 2.005650E-01 -2.650000E-04 4.904600E-02 3.950220E-01 2.493390E-01 0.000000E+00 + 8.129100E-02 2.900000E-05 -3.824000E-03 6.789080E-01 5.805150E-01 0.000000E+00 + 3.179500E-02 -1.100000E-05 1.585000E-03 8.312200E-02 3.223800E-01 1.000000E+00 +V D + 7.761150E+01 3.595000E-03 -3.818000E-03 0.000000E+00 + 2.291590E+01 2.521000E-02 -2.671700E-02 0.000000E+00 + 8.279540E+00 9.478600E-02 -1.036900E-01 0.000000E+00 + 3.309930E+00 2.303630E-01 -2.476890E-01 0.000000E+00 + 1.358630E+00 3.528940E-01 -3.115230E-01 0.000000E+00 + 5.413500E-01 3.704140E-01 -2.282700E-02 0.000000E+00 + 2.023560E-01 2.457180E-01 5.697260E-01 0.000000E+00 + 6.756800E-02 6.099300E-02 4.194930E-01 1.000000E+00 +V F + 1.748800E+00 3.900680E-01 + 4.057000E-01 8.008410E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Cr S + 6.177194E+06 4.128667E-06 -2.301772E-06 4.862957E-07 -1.102451E-07 0.000000E+00 2.179893E-07 + 9.249295E+05 3.210767E-05 -1.789536E-05 3.776645E-06 -8.530233E-07 0.000000E+00 1.612940E-06 + 2.104865E+05 1.688416E-04 -9.416174E-05 1.990664E-05 -4.520358E-06 0.000000E+00 9.111842E-06 + 5.962005E+04 7.128520E-04 -3.975074E-04 8.389164E-05 -1.891612E-05 0.000000E+00 3.500645E-05 + 1.945076E+04 2.589325E-03 -1.447025E-03 3.065706E-04 -6.974344E-05 0.000000E+00 1.435315E-04 + 7.022056E+03 8.377350E-03 -4.694622E-03 9.944107E-04 -2.237867E-04 0.000000E+00 4.035896E-04 + 2.738763E+03 2.441725E-02 -1.382387E-02 2.961959E-03 -6.754503E-04 0.000000E+00 1.425177E-03 + 1.135814E+03 6.365135E-02 -3.674643E-02 7.969473E-03 -1.789346E-03 0.000000E+00 3.114009E-03 + 4.950923E+02 1.427618E-01 -8.647185E-02 1.955017E-02 -4.477858E-03 0.000000E+00 9.814449E-03 + 2.247487E+02 2.541275E-01 -1.696735E-01 4.085035E-02 -9.140144E-03 0.000000E+00 1.474698E-02 + 1.053836E+02 3.009512E-01 -2.507089E-01 6.929003E-02 -1.610562E-02 0.000000E+00 3.911512E-02 + 5.019359E+01 1.766513E-01 -1.961156E-01 6.146984E-02 -1.334870E-02 0.000000E+00 9.170888E-03 + 2.224957E+01 6.936709E-02 1.457244E-01 -6.981302E-02 1.426027E-02 0.000000E+00 1.559878E-02 + 1.098265E+01 1.179579E-01 5.466706E-01 -3.517597E-01 8.931690E-02 0.000000E+00 -2.816844E-01 + 5.383665E+00 8.916187E-02 3.979434E-01 -3.828629E-01 8.885279E-02 0.000000E+00 -6.895261E-03 + 2.343685E+00 1.103630E-02 5.277007E-02 2.676401E-01 -6.368776E-02 0.000000E+00 -1.769781E-01 + 1.105202E+00 -3.546048E-04 -4.374537E-03 7.175950E-01 -2.783262E-01 0.000000E+00 1.443061E+00 + 4.878480E-01 1.057311E-04 3.204035E-04 3.020814E-01 -1.830071E-01 0.000000E+00 -1.029318E+00 + 8.959900E-02 1.114640E-05 -5.142077E-05 7.749514E-03 6.790937E-01 0.000000E+00 -1.307667E+00 + 3.342300E-02 2.661387E-05 1.584134E-04 2.696096E-04 4.672953E-01 1.000000E+00 1.503842E+00 +Cr P + 1.445420E+04 4.400000E-05 -1.500000E-05 4.000000E-06 4.000000E-06 0.000000E+00 + 3.421676E+03 3.890000E-04 -1.350000E-04 4.000000E-05 3.200000E-05 0.000000E+00 + 1.111387E+03 2.241000E-03 -7.770000E-04 2.290000E-04 1.850000E-04 0.000000E+00 + 4.251918E+02 9.821000E-03 -3.427000E-03 1.019000E-03 8.100000E-04 0.000000E+00 + 1.802623E+02 3.447100E-02 -1.218900E-02 3.602000E-03 2.906000E-03 0.000000E+00 + 8.206117E+01 9.746000E-02 -3.538800E-02 1.055000E-02 8.391000E-03 0.000000E+00 + 3.929726E+01 2.119850E-01 -7.991500E-02 2.370200E-02 1.919300E-02 0.000000E+00 + 1.941959E+01 3.339900E-01 -1.323350E-01 3.998800E-02 3.156400E-02 0.000000E+00 + 9.828899E+00 3.301370E-01 -1.354010E-01 4.043700E-02 3.341700E-02 0.000000E+00 + 5.016810E+00 1.522270E-01 3.200800E-02 -1.207400E-02 -1.290700E-02 0.000000E+00 + 2.487091E+00 2.042500E-02 3.338490E-01 -1.189390E-01 -9.365900E-02 0.000000E+00 + 1.198780E+00 -1.360000E-03 4.617730E-01 -1.781000E-01 -1.499770E-01 0.000000E+00 + 5.586950E-01 -1.195000E-03 2.812900E-01 -1.238650E-01 -6.723400E-02 0.000000E+00 + 2.089240E-01 -1.970000E-04 4.184300E-02 4.297220E-01 2.707590E-01 0.000000E+00 + 8.460800E-02 2.300000E-05 -4.002000E-03 6.507860E-01 5.758070E-01 0.000000E+00 + 3.325800E-02 -9.000000E-06 1.521000E-03 6.417100E-02 3.011210E-01 1.000000E+00 +Cr D + 8.857680E+01 3.621000E-03 -4.122000E-03 0.000000E+00 + 2.620450E+01 2.576600E-02 -2.930700E-02 0.000000E+00 + 9.517470E+00 9.755600E-02 -1.150620E-01 0.000000E+00 + 3.822480E+00 2.363120E-01 -2.730680E-01 0.000000E+00 + 1.575120E+00 3.582860E-01 -3.144230E-01 0.000000E+00 + 6.289280E-01 3.685430E-01 4.209700E-02 0.000000E+00 + 2.344240E-01 2.354940E-01 5.914030E-01 0.000000E+00 + 7.681500E-02 5.315600E-02 3.582150E-01 1.000000E+00 +Cr F + 2.221100E+00 4.235450E-01 + 5.231000E-01 7.741140E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Mn S + 3.960805E+06 8.242127E-06 -3.936095E-06 9.462709E-07 -2.095391E-07 -4.121231E-07 0.000000E+00 + 5.931155E+05 6.408587E-05 -3.060481E-05 7.360584E-06 -1.629439E-06 -3.282099E-06 0.000000E+00 + 1.349768E+05 3.369253E-04 -1.609626E-04 3.869935E-05 -8.570592E-06 -1.667433E-05 0.000000E+00 + 3.823067E+04 1.420648E-03 -6.792348E-04 1.635110E-04 -3.619272E-05 -7.369999E-05 0.000000E+00 + 1.247154E+04 5.143683E-03 -2.466182E-03 5.941775E-04 -1.316146E-04 -2.529495E-04 0.000000E+00 + 4.501743E+03 1.648569E-02 -7.957629E-03 1.927737E-03 -4.266810E-04 -8.801425E-04 0.000000E+00 + 1.755212E+03 4.698560E-02 -2.307248E-02 5.641731E-03 -1.250270E-03 -2.365482E-03 0.000000E+00 + 7.273039E+02 1.162437E-01 -5.932956E-02 1.487848E-02 -3.294665E-03 -6.926354E-03 0.000000E+00 + 3.163678E+02 2.335277E-01 -1.299451E-01 3.414783E-02 -7.581860E-03 -1.393851E-02 0.000000E+00 + 1.430098E+02 3.292837E-01 -2.212352E-01 6.405794E-02 -1.422864E-02 -3.143840E-02 0.000000E+00 + 6.621805E+01 2.440304E-01 -2.292550E-01 7.557659E-02 -1.693796E-02 -2.625749E-02 0.000000E+00 + 2.991896E+01 7.219806E-02 3.580733E-02 -1.946070E-02 4.454298E-03 -1.048313E-02 0.000000E+00 + 1.430318E+01 7.687806E-02 5.107602E-01 -2.957874E-01 6.867042E-02 1.856472E-01 0.000000E+00 + 6.839451E+00 7.852235E-02 5.008307E-01 -4.521170E-01 1.113335E-01 1.524839E-01 0.000000E+00 + 3.012374E+00 1.294109E-02 9.011830E-02 1.224531E-01 -3.900820E-02 7.411368E-02 0.000000E+00 + 1.418808E+00 -3.784873E-04 -6.909909E-03 7.169756E-01 -2.215755E-01 -1.018097E+00 0.000000E+00 + 6.236240E-01 -2.503203E-05 -1.912925E-04 4.092712E-01 -2.544359E-01 2.980372E-01 0.000000E+00 + 1.340980E-01 -2.421517E-05 -6.032312E-04 2.221969E-02 2.865866E-01 1.971989E+00 0.000000E+00 + 6.554800E-02 3.462071E-05 5.621608E-04 -9.011202E-03 5.755741E-01 -1.179253E+00 0.000000E+00 + 2.958400E-02 4.261482E-07 -1.021109E-04 3.691727E-03 2.898778E-01 -5.837703E-01 1.000000E+00 +Mn P + 1.620586E+04 4.200000E-05 -1.500000E-05 4.000000E-06 3.000000E-06 0.000000E+00 + 3.836274E+03 3.730000E-04 -1.290000E-04 4.000000E-05 3.000000E-05 0.000000E+00 + 1.246048E+03 2.149000E-03 -7.480000E-04 2.260000E-04 1.720000E-04 0.000000E+00 + 4.767535E+02 9.445000E-03 -3.308000E-03 1.013000E-03 7.620000E-04 0.000000E+00 + 2.021895E+02 3.329700E-02 -1.181100E-02 3.575000E-03 2.726000E-03 0.000000E+00 + 9.209487E+01 9.475900E-02 -3.453300E-02 1.061200E-02 7.976000E-03 0.000000E+00 + 4.414720E+01 2.081440E-01 -7.878500E-02 2.390200E-02 1.828700E-02 0.000000E+00 + 2.185468E+01 3.318050E-01 -1.321830E-01 4.127900E-02 3.077600E-02 0.000000E+00 + 1.108596E+01 3.331750E-01 -1.371950E-01 4.147500E-02 3.237300E-02 0.000000E+00 + 5.674108E+00 1.576010E-01 2.707500E-02 -9.458000E-03 -9.978000E-03 0.000000E+00 + 2.823170E+00 2.144500E-02 3.288910E-01 -1.236950E-01 -9.052900E-02 0.000000E+00 + 1.368621E+00 -2.558000E-03 4.572800E-01 -1.743920E-01 -1.380040E-01 0.000000E+00 + 6.444310E-01 -2.027000E-03 2.889080E-01 -1.291700E-01 -7.796500E-02 0.000000E+00 + 2.483820E-01 -3.600000E-04 4.743300E-02 4.003480E-01 2.295600E-01 0.000000E+00 + 9.725500E-02 3.400000E-05 -3.522000E-03 6.696460E-01 5.761220E-01 0.000000E+00 + 3.663300E-02 -1.300000E-05 1.456000E-03 8.273200E-02 3.485380E-01 1.000000E+00 +Mn D + 1.006630E+02 3.579000E-03 -3.454000E-03 0.000000E+00 + 2.983360E+01 2.582700E-02 -2.492500E-02 0.000000E+00 + 1.088940E+01 9.855900E-02 -9.763500E-02 0.000000E+00 + 4.393580E+00 2.383270E-01 -2.366920E-01 0.000000E+00 + 1.817820E+00 3.587070E-01 -2.923500E-01 0.000000E+00 + 7.278270E-01 3.650920E-01 -4.973000E-03 0.000000E+00 + 2.712950E-01 2.337380E-01 5.065880E-01 0.000000E+00 + 8.830900E-02 5.661800E-02 4.979510E-01 1.000000E+00 +Mn F + 2.703200E+00 4.267760E-01 + 6.438000E-01 7.697990E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Fe S + 4.316265E+06 8.048803E-06 -4.155954E-06 9.532178E-07 -2.063008E-07 -4.009367E-07 0.000000E+00 + 6.463424E+05 6.258306E-05 -3.231401E-05 7.414605E-06 -1.604169E-06 -3.189255E-06 0.000000E+00 + 1.470897E+05 3.290239E-04 -1.699525E-04 3.898393E-05 -8.438437E-06 -1.623079E-05 0.000000E+00 + 4.166152E+04 1.387355E-03 -7.171369E-04 1.647152E-04 -3.563151E-05 -7.157920E-05 0.000000E+00 + 1.359077E+04 5.023256E-03 -2.603625E-03 5.985980E-04 -1.295998E-04 -2.463958E-04 0.000000E+00 + 4.905750E+03 1.610140E-02 -8.399109E-03 1.942390E-03 -4.201534E-04 -8.544907E-04 0.000000E+00 + 1.912746E+03 4.590034E-02 -2.434109E-02 5.687237E-03 -1.231954E-03 -2.307593E-03 0.000000E+00 + 7.926043E+02 1.136154E-01 -6.251948E-02 1.501329E-02 -3.248922E-03 -6.728292E-03 0.000000E+00 + 3.448065E+02 2.283869E-01 -1.365929E-01 3.452455E-02 -7.493717E-03 -1.366165E-02 0.000000E+00 + 1.558999E+02 3.221159E-01 -2.312707E-01 6.495820E-02 -1.410102E-02 -3.062240E-02 0.000000E+00 + 7.223091E+01 2.383661E-01 -2.383734E-01 7.716194E-02 -1.691600E-02 -2.631137E-02 0.000000E+00 + 3.272506E+01 7.404667E-02 3.123837E-02 -1.873411E-02 4.218996E-03 -9.760183E-03 0.000000E+00 + 1.566762E+01 9.214197E-02 5.086818E-01 -3.009185E-01 6.833810E-02 1.801906E-01 0.000000E+00 + 7.503483E+00 9.339790E-02 4.987695E-01 -4.554661E-01 1.098201E-01 1.529634E-01 0.000000E+00 + 3.312223E+00 1.573965E-02 9.033552E-02 1.286463E-01 -4.009005E-02 5.505413E-02 0.000000E+00 + 1.558471E+00 -4.186682E-04 -6.005337E-03 7.183316E-01 -2.174739E-01 -9.551364E-01 0.000000E+00 + 6.839140E-01 5.376318E-05 2.312454E-04 4.051743E-01 -2.465135E-01 2.586813E-01 0.000000E+00 + 1.467570E-01 -3.816654E-05 -5.643680E-04 2.168227E-02 2.731435E-01 1.834049E+00 0.000000E+00 + 7.058300E-02 4.319603E-05 4.992260E-04 -8.343566E-03 5.748321E-01 -9.333240E-01 0.000000E+00 + 3.144900E-02 -3.401019E-06 -1.015293E-04 3.658979E-03 3.012713E-01 -6.981605E-01 1.000000E+00 +Fe P + 1.774569E+04 4.100000E-05 -1.500000E-05 5.000000E-06 3.000000E-06 0.000000E+00 + 4.200721E+03 3.690000E-04 -1.300000E-04 4.200000E-05 2.900000E-05 0.000000E+00 + 1.364429E+03 2.129000E-03 -7.510000E-04 2.410000E-04 1.650000E-04 0.000000E+00 + 5.220806E+02 9.369000E-03 -3.329000E-03 1.085000E-03 7.340000E-04 0.000000E+00 + 2.214595E+02 3.309700E-02 -1.191200E-02 3.831000E-03 2.626000E-03 0.000000E+00 + 1.009096E+02 9.443100E-02 -3.493300E-02 1.142300E-02 7.725000E-03 0.000000E+00 + 4.840115E+01 2.080770E-01 -7.998900E-02 2.579200E-02 1.773300E-02 0.000000E+00 + 2.398536E+01 3.323330E-01 -1.346360E-01 4.481800E-02 3.005500E-02 0.000000E+00 + 1.218250E+01 3.329870E-01 -1.385980E-01 4.459800E-02 3.109400E-02 0.000000E+00 + 6.242298E+00 1.568430E-01 3.027800E-02 -1.117700E-02 -1.004800E-02 0.000000E+00 + 3.110944E+00 2.154900E-02 3.332160E-01 -1.381340E-01 -8.830600E-02 0.000000E+00 + 1.509958E+00 -2.095000E-03 4.561530E-01 -1.882850E-01 -1.298240E-01 0.000000E+00 + 7.108450E-01 -1.739000E-03 2.850510E-01 -1.073990E-01 -7.693700E-02 0.000000E+00 + 2.731900E-01 -3.000000E-04 4.614400E-02 4.448630E-01 2.126610E-01 0.000000E+00 + 1.042330E-01 2.900000E-05 -3.249000E-03 6.402390E-01 5.730610E-01 0.000000E+00 + 3.829100E-02 -1.100000E-05 1.357000E-03 6.445700E-02 3.696510E-01 1.000000E+00 +Fe D + 1.133440E+02 3.530000E-03 -3.890000E-03 0.000000E+00 + 3.364140E+01 2.578400E-02 -2.844200E-02 0.000000E+00 + 1.233100E+01 9.911900E-02 -1.124290E-01 0.000000E+00 + 4.994780E+00 2.390730E-01 -2.742570E-01 0.000000E+00 + 2.072800E+00 3.571990E-01 -3.155460E-01 0.000000E+00 + 8.307530E-01 3.621880E-01 5.710900E-02 0.000000E+00 + 3.091780E-01 2.364610E-01 5.636040E-01 0.000000E+00 + 1.001300E-01 6.011800E-02 3.846370E-01 1.000000E+00 +Fe F + 3.224300E+00 4.222490E-01 + 7.758000E-01 7.714680E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Co S + 4.675675E+06 7.979026E-06 -4.200240E-06 9.592692E-07 -2.028840E-07 -3.863053E-07 0.000000E+00 + 7.001615E+05 6.204071E-05 -3.265831E-05 7.461851E-06 -1.577580E-06 -3.068788E-06 0.000000E+00 + 1.593373E+05 3.261735E-04 -1.717644E-04 3.923137E-05 -8.298813E-06 -1.564826E-05 0.000000E+00 + 4.513046E+04 1.375360E-03 -7.247853E-04 1.657706E-04 -3.504154E-05 -6.883588E-05 0.000000E+00 + 1.472238E+04 4.979997E-03 -2.631462E-03 6.024335E-04 -1.274655E-04 -2.377367E-04 0.000000E+00 + 5.314222E+03 1.596434E-02 -8.489272E-03 1.955217E-03 -4.132695E-04 -8.213173E-04 0.000000E+00 + 2.072018E+03 4.552086E-02 -2.460619E-02 5.726326E-03 -1.212261E-03 -2.229630E-03 0.000000E+00 + 8.586188E+02 1.127385E-01 -6.322059E-02 1.512984E-02 -3.199318E-03 -6.467841E-03 0.000000E+00 + 3.735497E+02 2.268262E-01 -1.381957E-01 3.483973E-02 -7.390972E-03 -1.325463E-02 0.000000E+00 + 1.689229E+02 3.203074E-01 -2.340680E-01 6.570351E-02 -1.393649E-02 -2.946686E-02 0.000000E+00 + 7.829639E+01 2.374021E-01 -2.415002E-01 7.831503E-02 -1.678575E-02 -2.599066E-02 0.000000E+00 + 3.552123E+01 7.477686E-02 3.035312E-02 -1.877037E-02 4.149856E-03 -8.499807E-03 0.000000E+00 + 1.704144E+01 9.581872E-02 5.101341E-01 -3.062663E-01 6.797646E-02 1.727316E-01 0.000000E+00 + 8.173000E+00 9.649911E-02 4.974939E-01 -4.566429E-01 1.075807E-01 1.512189E-01 0.000000E+00 + 3.610318E+00 1.623362E-02 8.970746E-02 1.378169E-01 -4.166022E-02 3.554509E-02 0.000000E+00 + 1.697047E+00 -4.535497E-04 -5.941034E-03 7.193676E-01 -2.128044E-01 -8.829353E-01 0.000000E+00 + 7.435320E-01 5.113519E-05 2.175362E-04 3.992579E-01 -2.381360E-01 2.143530E-01 0.000000E+00 + 1.583440E-01 -4.174508E-05 -5.480155E-04 2.079933E-02 2.650788E-01 1.711865E+00 0.000000E+00 + 7.503600E-02 4.027577E-05 4.525804E-04 -7.820663E-03 5.722774E-01 -7.140037E-01 0.000000E+00 + 3.309100E-02 -5.789067E-06 -1.066748E-04 3.533911E-03 3.091556E-01 -8.027727E-01 1.000000E+00 +Co P + 1.926778E+04 4.100000E-05 -1.500000E-05 5.000000E-06 -3.000000E-06 0.000000E+00 + 4.560986E+03 3.690000E-04 -1.310000E-04 4.500000E-05 -2.900000E-05 0.000000E+00 + 1.481436E+03 2.128000E-03 -7.580000E-04 2.550000E-04 -1.670000E-04 0.000000E+00 + 5.668671E+02 9.372000E-03 -3.363000E-03 1.144000E-03 -7.420000E-04 0.000000E+00 + 2.404910E+02 3.315500E-02 -1.205400E-02 4.061000E-03 -2.662000E-03 0.000000E+00 + 1.096105E+02 9.475200E-02 -3.542400E-02 1.209500E-02 -7.841000E-03 0.000000E+00 + 5.259491E+01 2.090930E-01 -8.128700E-02 2.747600E-02 -1.805100E-02 0.000000E+00 + 2.608361E+01 3.337220E-01 -1.369080E-01 4.755700E-02 -3.058000E-02 0.000000E+00 + 1.326143E+01 3.322080E-01 -1.390190E-01 4.730200E-02 -3.131200E-02 0.000000E+00 + 6.799778E+00 1.546130E-01 3.546800E-02 -1.441800E-02 1.131100E-02 0.000000E+00 + 3.393414E+00 2.090200E-02 3.384980E-01 -1.500620E-01 8.999000E-02 0.000000E+00 + 1.648766E+00 -2.024000E-03 4.544330E-01 -1.990920E-01 1.307330E-01 0.000000E+00 + 7.762820E-01 -1.697000E-03 2.797930E-01 -7.978300E-02 7.180800E-02 0.000000E+00 + 2.980030E-01 -2.800000E-04 4.477600E-02 4.590350E-01 -2.216580E-01 0.000000E+00 + 1.136180E-01 2.600000E-05 -3.151000E-03 6.174950E-01 -5.710250E-01 0.000000E+00 + 4.162400E-02 -1.000000E-05 1.317000E-03 6.469000E-02 -3.637890E-01 1.000000E+00 +Co D + 1.262640E+02 3.510000E-03 -4.067000E-03 0.000000E+00 + 3.752260E+01 2.588400E-02 -3.005300E-02 0.000000E+00 + 1.380210E+01 1.000580E-01 -1.196200E-01 0.000000E+00 + 5.609270E+00 2.405470E-01 -2.915130E-01 0.000000E+00 + 2.333690E+00 3.568430E-01 -3.180480E-01 0.000000E+00 + 9.364150E-01 3.595790E-01 9.169800E-02 0.000000E+00 + 3.482370E-01 2.366290E-01 5.608230E-01 0.000000E+00 + 1.123530E-01 6.212900E-02 3.586780E-01 1.000000E+00 +Co F + 3.772400E+00 4.239660E-01 + 9.170000E-01 7.684290E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Ni S + 5.045991E+06 8.208996E-06 -3.657849E-06 9.594149E-07 -2.013753E-07 -3.924245E-07 0.000000E+00 + 7.556142E+05 6.382884E-05 -2.844094E-05 7.462614E-06 -1.565832E-06 -3.113909E-06 0.000000E+00 + 1.719568E+05 3.355800E-04 -1.495928E-04 3.923843E-05 -8.237182E-06 -1.590447E-05 0.000000E+00 + 4.870479E+04 1.415075E-03 -6.313009E-04 1.657868E-04 -3.478105E-05 -6.981394E-05 0.000000E+00 + 1.588841E+04 5.124444E-03 -2.293052E-03 6.025905E-04 -1.265265E-04 -2.417848E-04 0.000000E+00 + 5.735123E+03 1.643256E-02 -7.405123E-03 1.955662E-03 -4.102589E-04 -8.326195E-04 0.000000E+00 + 2.236137E+03 4.689398E-02 -2.152032E-02 5.730391E-03 -1.203834E-03 -2.270294E-03 0.000000E+00 + 9.266468E+02 1.163534E-01 -5.560974E-02 1.514756E-02 -3.179062E-03 -6.557427E-03 0.000000E+00 + 4.031743E+02 2.350511E-01 -1.230176E-01 3.493499E-02 -7.353828E-03 -1.354288E-02 0.000000E+00 + 1.823476E+02 3.350184E-01 -2.130104E-01 6.598072E-02 -1.389022E-02 -2.989768E-02 0.000000E+00 + 8.454885E+01 2.534779E-01 -2.265837E-01 7.893083E-02 -1.677875E-02 -2.693106E-02 0.000000E+00 + 3.839634E+01 7.300901E-02 3.546796E-02 -1.906249E-02 4.163378E-03 -7.827693E-03 0.000000E+00 + 1.845859E+01 6.184244E-02 5.181697E-01 -3.095921E-01 6.814703E-02 1.741667E-01 0.000000E+00 + 8.863548E+00 6.302956E-02 5.025630E-01 -4.558610E-01 1.061029E-01 1.595468E-01 0.000000E+00 + 3.916227E+00 1.008063E-02 8.955674E-02 1.482931E-01 -4.339980E-02 1.995550E-02 0.000000E+00 + 1.838870E+00 -2.244528E-04 -7.031311E-03 7.134039E-01 -2.094950E-01 -8.897000E-01 0.000000E+00 + 8.043620E-01 -5.932767E-05 -4.339167E-04 3.976063E-01 -2.310271E-01 2.486892E-01 0.000000E+00 + 1.697970E-01 -1.158562E-05 -5.831711E-04 2.295523E-02 2.590532E-01 1.613012E+00 0.000000E+00 + 7.930600E-02 8.115109E-06 4.228788E-04 -9.151758E-03 5.691426E-01 -5.990277E-01 0.000000E+00 + 3.467700E-02 -1.681699E-06 -1.266714E-04 3.875414E-03 3.158125E-01 -8.369078E-01 1.000000E+00 +Ni P + 2.102792E+04 4.100000E-05 -1.500000E-05 6.000000E-06 3.000000E-06 0.000000E+00 + 4.977560E+03 3.630000E-04 -1.290000E-04 5.300000E-05 2.600000E-05 0.000000E+00 + 1.616740E+03 2.097000E-03 -7.490000E-04 3.050000E-04 1.520000E-04 0.000000E+00 + 6.186718E+02 9.250000E-03 -3.328000E-03 1.364000E-03 6.780000E-04 0.000000E+00 + 2.625183E+02 3.279600E-02 -1.194700E-02 4.876000E-03 2.427000E-03 0.000000E+00 + 1.196907E+02 9.400400E-02 -3.524200E-02 1.450300E-02 7.201000E-03 0.000000E+00 + 5.746585E+01 2.082800E-01 -8.120400E-02 3.329600E-02 1.657800E-02 0.000000E+00 + 2.852829E+01 3.336540E-01 -1.374930E-01 5.748200E-02 2.839200E-02 0.000000E+00 + 1.452148E+01 3.329040E-01 -1.392260E-01 5.870200E-02 2.859900E-02 0.000000E+00 + 7.453850E+00 1.553720E-01 3.601600E-02 -1.990400E-02 -1.013200E-02 0.000000E+00 + 3.723553E+00 2.085900E-02 3.391280E-01 -1.946950E-01 -8.291200E-02 0.000000E+00 + 1.809813E+00 -2.440000E-03 4.504720E-01 -2.396130E-01 -1.159980E-01 0.000000E+00 + 8.513360E-01 -1.998000E-03 2.817830E-01 -2.232000E-03 -7.279500E-02 0.000000E+00 + 3.248140E-01 -3.380000E-04 4.789800E-02 5.214350E-01 1.956400E-01 0.000000E+00 + 1.195220E-01 3.500000E-05 -2.987000E-03 5.455400E-01 5.670990E-01 0.000000E+00 + 4.236600E-02 -1.200000E-05 1.309000E-03 4.362200E-02 3.952700E-01 1.000000E+00 +Ni D + 1.402527E+02 3.376000E-03 -3.495000E-03 0.000000E+00 + 4.172610E+01 2.514100E-02 -2.601500E-02 0.000000E+00 + 1.539810E+01 9.774600E-02 -1.038760E-01 0.000000E+00 + 6.277100E+00 2.347090E-01 -2.520700E-01 0.000000E+00 + 2.618500E+00 3.469450E-01 -2.945800E-01 0.000000E+00 + 1.052600E+00 3.510680E-01 1.152000E-03 0.000000E+00 + 3.916000E-01 2.502550E-01 4.385890E-01 0.000000E+00 + 1.262000E-01 1.000820E-01 5.436260E-01 1.000000E+00 +Ni F + 4.345500E+00 4.174290E-01 + 1.068000E+00 7.714830E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Cu S + 5.430321E+06 7.801026E-06 -4.404706E-06 9.704682E-07 -1.959354E-07 -3.532229E-07 0.000000E+00 + 8.131665E+05 6.065666E-05 -3.424801E-05 7.549245E-06 -1.523472E-06 -2.798812E-06 0.000000E+00 + 1.850544E+05 3.188964E-04 -1.801238E-04 3.968892E-05 -8.014808E-06 -1.432517E-05 0.000000E+00 + 5.241466E+04 1.344687E-03 -7.600455E-04 1.677200E-04 -3.383992E-05 -6.270946E-05 0.000000E+00 + 1.709868E+04 4.869050E-03 -2.759348E-03 6.095101E-04 -1.231191E-04 -2.179490E-04 0.000000E+00 + 6.171994E+03 1.561013E-02 -8.900970E-03 1.978846E-03 -3.992085E-04 -7.474316E-04 0.000000E+00 + 2.406481E+03 4.452077E-02 -2.579378E-02 5.798049E-03 -1.171900E-03 -2.049271E-03 0.000000E+00 + 9.972584E+02 1.103111E-01 -6.623861E-02 1.534158E-02 -3.096141E-03 -5.885203E-03 0.000000E+00 + 4.339289E+02 2.220342E-01 -1.445927E-01 3.540484E-02 -7.171993E-03 -1.226885E-02 0.000000E+00 + 1.962869E+02 3.133739E-01 -2.440110E-01 6.702098E-02 -1.356621E-02 -2.683147E-02 0.000000E+00 + 9.104280E+01 2.315121E-01 -2.504837E-01 8.026945E-02 -1.643989E-02 -2.479261E-02 0.000000E+00 + 4.138425E+01 7.640920E-02 2.852577E-02 -1.927231E-02 4.107628E-03 -5.984746E-03 0.000000E+00 + 1.993278E+01 1.103818E-01 5.115874E-01 -3.160129E-01 6.693964E-02 1.557124E-01 0.000000E+00 + 9.581891E+00 1.094372E-01 4.928061E-01 -4.573162E-01 1.028221E-01 1.436683E-01 0.000000E+00 + 4.234516E+00 1.836311E-02 8.788437E-02 1.550841E-01 -4.422945E-02 8.374103E-03 0.000000E+00 + 1.985814E+00 -6.043084E-04 -5.820281E-03 7.202872E-01 -2.031191E-01 -7.460711E-01 0.000000E+00 + 8.670830E-01 5.092245E-05 2.013508E-04 3.885122E-01 -2.230022E-01 1.244367E-01 0.000000E+00 + 1.813390E-01 -5.540730E-05 -5.182553E-04 1.924326E-02 2.517975E-01 1.510110E+00 0.000000E+00 + 8.365700E-02 3.969482E-05 3.731503E-04 -7.103807E-03 5.650091E-01 -3.477122E-01 0.000000E+00 + 3.626700E-02 -1.269538E-05 -1.193171E-04 3.272906E-03 3.247243E-01 -9.774169E-01 1.000000E+00 +Cu P + 2.276057E+04 4.000000E-05 -1.500000E-05 5.000000E-06 3.000000E-06 0.000000E+00 + 5.387679E+03 3.610000E-04 -1.310000E-04 4.900000E-05 2.500000E-05 0.000000E+00 + 1.749945E+03 2.083000E-03 -7.550000E-04 2.780000E-04 1.470000E-04 0.000000E+00 + 6.696653E+02 9.197000E-03 -3.359000E-03 1.253000E-03 6.560000E-04 0.000000E+00 + 2.841948E+02 3.266000E-02 -1.208100E-02 4.447000E-03 2.351000E-03 0.000000E+00 + 1.296077E+02 9.379500E-02 -3.570300E-02 1.337000E-02 7.004000E-03 0.000000E+00 + 6.225415E+01 2.082740E-01 -8.250200E-02 3.046900E-02 1.613100E-02 0.000000E+00 + 3.092964E+01 3.339930E-01 -1.398900E-01 5.344700E-02 2.777000E-02 0.000000E+00 + 1.575827E+01 3.324930E-01 -1.407290E-01 5.263900E-02 2.756700E-02 0.000000E+00 + 8.094211E+00 1.547280E-01 3.876600E-02 -1.688100E-02 -1.011500E-02 0.000000E+00 + 4.046921E+00 2.127100E-02 3.426950E-01 -1.794480E-01 -8.100900E-02 0.000000E+00 + 1.967869E+00 -1.690000E-03 4.523100E-01 -2.095880E-01 -1.104090E-01 0.000000E+00 + 9.252950E-01 -1.516000E-03 2.770540E-01 -3.963300E-02 -7.173200E-02 0.000000E+00 + 3.529920E-01 -2.420000E-04 4.388500E-02 5.021300E-01 1.879300E-01 0.000000E+00 + 1.273070E-01 2.300000E-05 -2.802000E-03 5.811110E-01 5.646290E-01 0.000000E+00 + 4.435600E-02 -9.000000E-06 1.152000E-03 4.566600E-02 4.070000E-01 1.000000E+00 +Cu D + 1.738970E+02 2.700000E-03 -3.363000E-03 0.000000E+00 + 5.188690E+01 2.090900E-02 -2.607900E-02 0.000000E+00 + 1.934190E+01 8.440800E-02 -1.082310E-01 0.000000E+00 + 7.975720E+00 2.139990E-01 -2.822170E-01 0.000000E+00 + 3.398230E+00 3.359800E-01 -3.471900E-01 0.000000E+00 + 1.409320E+00 3.573010E-01 2.671100E-02 0.000000E+00 + 5.488580E-01 2.645780E-01 4.920470E-01 0.000000E+00 + 1.901990E-01 1.039720E-01 4.384220E-01 1.000000E+00 +Cu F + 5.028600E+00 4.242800E-01 + 1.259400E+00 7.630250E-01 +#BASIS SET: (20s,16p,8d,2f) -> [6s,5p,3d,1f] +Zn S + 5.820021E+06 8.549241E-06 -2.640069E-06 9.967103E-07 1.995818E-07 -5.435910E-07 0.000000E+00 + 8.715234E+05 6.647410E-05 -2.052720E-05 7.754163E-06 1.552973E-06 -4.336894E-06 0.000000E+00 + 1.983350E+05 3.494962E-04 -1.079859E-04 4.076019E-05 8.161259E-06 -2.197572E-05 0.000000E+00 + 5.617631E+04 1.473832E-03 -4.558577E-04 1.722811E-04 3.450747E-05 -9.747392E-05 0.000000E+00 + 1.832582E+04 5.338330E-03 -1.657758E-03 6.259370E-04 1.253275E-04 -3.331615E-04 0.000000E+00 + 6.614955E+03 1.712708E-02 -5.368492E-03 2.032855E-03 4.072990E-04 -1.166192E-03 0.000000E+00 + 2.579199E+03 4.894085E-02 -1.571249E-02 5.954646E-03 1.192734E-03 -3.119308E-03 0.000000E+00 + 1.068849E+03 1.217934E-01 -4.122558E-02 1.576640E-02 3.163140E-03 -9.239504E-03 0.000000E+00 + 4.651045E+02 2.476589E-01 -9.406459E-02 3.637638E-02 7.303942E-03 -1.855471E-02 0.000000E+00 + 2.104130E+02 3.582431E-01 -1.719954E-01 6.892343E-02 1.391279E-02 -4.281189E-02 0.000000E+00 + 9.761629E+01 2.798174E-01 -1.958523E-01 8.238093E-02 1.670620E-02 -3.571095E-02 0.000000E+00 + 4.438020E+01 6.857491E-02 4.532907E-02 -2.011360E-02 -4.035586E-03 -1.638350E-02 0.000000E+00 + 2.142308E+01 -1.311092E-03 5.244442E-01 -3.252526E-01 -6.968861E-02 2.644664E-01 0.000000E+00 + 1.030891E+01 1.914001E-03 5.006142E-01 -4.602899E-01 -1.030105E-01 2.086588E-01 0.000000E+00 + 4.553645E+00 -8.759220E-04 8.945527E-02 1.635546E-01 4.471442E-02 -1.774382E-02 0.000000E+00 + 2.132821E+00 3.740096E-04 -2.146262E-03 7.297118E-01 2.150027E-01 -1.353873E+00 0.000000E+00 + 9.296970E-01 -1.401399E-04 2.112113E-03 3.769751E-01 2.220163E-01 8.182926E-01 0.000000E+00 + 1.921470E-01 4.757132E-05 -4.133980E-04 1.433224E-02 -3.114776E-01 1.695036E+00 0.000000E+00 + 8.759500E-02 -3.642711E-05 3.209752E-04 -6.671210E-03 -5.693429E-01 -1.388656E+00 0.000000E+00 + 3.770200E-02 1.153248E-05 -1.016140E-04 1.766214E-03 -2.678440E-01 -2.188900E-01 1.000000E+00 +Zn P + 2.441198E+04 4.100000E-05 -1.500000E-05 5.000000E-06 3.000000E-06 0.000000E+00 + 5.778518E+03 3.610000E-04 -1.350000E-04 4.200000E-05 2.500000E-05 0.000000E+00 + 1.876862E+03 2.088000E-03 -7.820000E-04 2.380000E-04 1.440000E-04 0.000000E+00 + 7.182361E+02 9.221000E-03 -3.478000E-03 1.088000E-03 6.450000E-04 0.000000E+00 + 3.048327E+02 3.277300E-02 -1.252000E-02 3.821000E-03 2.311000E-03 0.000000E+00 + 1.390453E+02 9.417900E-02 -3.701600E-02 1.164400E-02 6.898000E-03 0.000000E+00 + 6.680417E+01 2.091320E-01 -8.555900E-02 2.616700E-02 1.588200E-02 0.000000E+00 + 3.320699E+01 3.345690E-01 -1.447180E-01 4.675000E-02 2.735000E-02 0.000000E+00 + 1.692816E+01 3.303590E-01 -1.434420E-01 4.330900E-02 2.662100E-02 0.000000E+00 + 8.696229E+00 1.523470E-01 4.359500E-02 -1.342900E-02 -1.085800E-02 0.000000E+00 + 4.350510E+00 2.298400E-02 3.488880E-01 -1.538970E-01 -7.985300E-02 0.000000E+00 + 2.116523E+00 1.607000E-03 4.538650E-01 -1.674130E-01 -1.061270E-01 0.000000E+00 + 9.953870E-01 4.680000E-04 2.685940E-01 -8.499500E-02 -6.888300E-02 0.000000E+00 + 3.781120E-01 6.600000E-05 3.886800E-02 4.508130E-01 1.843850E-01 0.000000E+00 + 1.345790E-01 -2.000000E-06 -2.492000E-03 6.408690E-01 5.617880E-01 0.000000E+00 + 4.628200E-02 0.000000E+00 1.014000E-03 5.417200E-02 4.144160E-01 1.000000E+00 +Zn D + 2.056177E+02 2.342000E-03 3.279000E-03 0.000000E+00 + 6.144981E+01 1.860600E-02 2.617600E-02 0.000000E+00 + 2.305689E+01 7.710200E-02 1.113670E-01 0.000000E+00 + 9.577739E+00 2.020260E-01 3.045810E-01 0.000000E+00 + 4.133734E+00 3.294540E-01 3.862990E-01 0.000000E+00 + 1.747518E+00 3.609760E-01 -5.837500E-02 0.000000E+00 + 6.995600E-01 2.716570E-01 -5.388760E-01 0.000000E+00 + 2.516080E-01 1.049810E-01 -3.454730E-01 1.000000E+00 +Zn F + 5.734400E+00 4.311320E-01 + 1.461500E+00 7.546420E-01 +#BASIS SET: (14s,11p,6d) -> [5s,4p,2d] +Ga S + 4.851300E+05 2.068000E-04 -6.430000E-05 2.450000E-05 -5.700000E-06 0.000000E+00 + 7.271900E+04 1.604700E-03 -4.954000E-04 1.895000E-04 -4.400000E-05 0.000000E+00 + 1.655200E+04 8.340200E-03 -2.620800E-03 9.964000E-04 -2.305000E-04 0.000000E+00 + 4.687800E+03 3.402480E-02 -1.068390E-02 4.108200E-03 -9.544000E-04 0.000000E+00 + 1.529100E+03 1.111699E-01 -3.741230E-02 1.429380E-02 -3.305500E-03 0.000000E+00 + 5.518100E+02 2.753930E-01 -1.009636E-01 3.980340E-02 -9.288800E-03 0.000000E+00 + 2.151800E+02 4.212628E-01 -2.145141E-01 8.559400E-02 -1.986440E-02 0.000000E+00 + 8.817400E+01 2.738906E-01 -1.752297E-01 7.963050E-02 -1.908880E-02 0.000000E+00 + 2.715400E+01 2.837200E-02 4.831599E-01 -2.939107E-01 7.323560E-02 0.000000E+00 + 1.150300E+01 -6.293100E-03 6.323677E-01 -5.263914E-01 1.341526E-01 0.000000E+00 + 3.301800E+00 2.060600E-03 6.849420E-02 5.864249E-01 -1.831929E-01 0.000000E+00 + 1.331400E+00 -9.269000E-04 -1.187120E-02 6.726347E-01 -3.571308E-01 0.000000E+00 + 1.931600E-01 2.273000E-04 2.665200E-03 2.761230E-02 6.246013E-01 0.000000E+00 + 7.089500E-02 -1.063000E-04 -1.225100E-03 -9.365100E-03 5.238430E-01 1.000000E+00 +Ga P + 3.248600E+03 1.526000E-03 -5.803000E-04 9.500000E-05 0.000000E+00 + 7.699700E+02 1.274860E-02 -4.864700E-03 7.832000E-04 0.000000E+00 + 2.482000E+02 6.337420E-02 -2.483940E-02 4.085500E-03 0.000000E+00 + 9.336400E+01 2.065775E-01 -8.417590E-02 1.359870E-02 0.000000E+00 + 3.825100E+01 4.092963E-01 -1.800885E-01 3.026950E-02 0.000000E+00 + 1.642200E+01 3.919183E-01 -1.585555E-01 2.417900E-02 0.000000E+00 + 6.791800E+00 1.029441E-01 2.355376E-01 -4.237770E-02 0.000000E+00 + 2.833600E+00 -7.203000E-04 5.820587E-01 -1.265661E-01 0.000000E+00 + 1.106200E+00 2.095000E-03 3.366619E-01 -4.994440E-02 0.000000E+00 + 2.225000E-01 -3.290000E-04 1.719120E-02 4.494199E-01 0.000000E+00 + 6.177200E-02 1.162000E-04 -3.326500E-03 6.718899E-01 1.000000E+00 +Ga D + 6.533700E+01 2.738250E-02 0.000000E+00 + 1.849700E+01 1.510805E-01 0.000000E+00 + 6.315000E+00 3.749217E-01 0.000000E+00 + 2.163500E+00 4.750799E-01 0.000000E+00 + 6.667500E-01 2.982750E-01 0.000000E+00 + 1.884000E-01 0.000000E+00 1.000000E+00 +#BASIS SET: (14s,11p,6d) -> [5s,4p,2d] +Ge S + 5.218000E+05 2.045000E-04 -6.380000E-05 2.460000E-05 -6.300000E-06 0.000000E+00 + 7.821400E+04 1.586800E-03 -4.916000E-04 1.900000E-04 -4.860000E-05 0.000000E+00 + 1.780300E+04 8.248000E-03 -2.600200E-03 9.993000E-04 -2.553000E-04 0.000000E+00 + 5.041900E+03 3.366490E-02 -1.060800E-02 4.120000E-03 -1.056000E-03 0.000000E+00 + 1.644500E+03 1.101249E-01 -3.716020E-02 1.435570E-02 -3.667400E-03 0.000000E+00 + 5.934300E+02 2.735607E-01 -1.005790E-01 4.003750E-02 -1.030530E-02 0.000000E+00 + 2.313600E+02 4.210670E-01 -2.143977E-01 8.657940E-02 -2.222000E-02 0.000000E+00 + 9.476200E+01 2.766791E-01 -1.782617E-01 8.158610E-02 -2.152750E-02 0.000000E+00 + 2.927400E+01 2.921800E-02 4.777404E-01 -2.934770E-01 8.067520E-02 0.000000E+00 + 1.245000E+01 -6.590300E-03 6.355983E-01 -5.367983E-01 1.524958E-01 0.000000E+00 + 3.646300E+00 2.243000E-03 7.221740E-02 5.637985E-01 -1.980528E-01 0.000000E+00 + 1.502500E+00 -1.038200E-03 -1.272650E-02 6.947182E-01 -4.073954E-01 0.000000E+00 + 2.450300E-01 2.695000E-04 2.960800E-03 3.157300E-02 6.477288E-01 0.000000E+00 + 9.159400E-02 -1.228000E-04 -1.329200E-03 -9.894900E-03 5.222033E-01 1.000000E+00 +Ge P + 3.568100E+03 1.459100E-03 -5.630000E-04 1.115000E-04 0.000000E+00 + 8.457200E+02 1.221760E-02 -4.735400E-03 9.212000E-04 0.000000E+00 + 2.727400E+02 6.104900E-02 -2.426430E-02 4.827300E-03 0.000000E+00 + 1.026800E+02 2.008039E-01 -8.309000E-02 1.622720E-02 0.000000E+00 + 4.214800E+01 4.038942E-01 -1.800247E-01 3.663540E-02 0.000000E+00 + 1.814900E+01 3.970027E-01 -1.663295E-01 3.078670E-02 0.000000E+00 + 7.593400E+00 1.105481E-01 2.193717E-01 -4.806430E-02 0.000000E+00 + 3.196400E+00 7.680000E-05 5.820239E-01 -1.559804E-01 0.000000E+00 + 1.274300E+00 2.126300E-03 3.477720E-01 -6.323700E-02 0.000000E+00 + 2.825800E-01 -3.744000E-04 1.924550E-02 5.040819E-01 0.000000E+00 + 8.409000E-02 1.321000E-04 -3.482500E-03 6.182200E-01 1.000000E+00 +Ge D + 7.476200E+01 2.576840E-02 0.000000E+00 + 2.130200E+01 1.454421E-01 0.000000E+00 + 7.343600E+00 3.713721E-01 0.000000E+00 + 2.565100E+00 4.800002E-01 0.000000E+00 + 8.197000E-01 2.896800E-01 0.000000E+00 + 2.470000E-01 0.000000E+00 1.000000E+00 +#BASIS SET: (14s,11p,6d) -> [5s,4p,2d] +As S + 5.595838E+05 2.024000E-04 -6.340000E-05 2.460000E-05 -6.800000E-06 0.000000E+00 + 8.387933E+04 1.570900E-03 -4.883000E-04 1.907000E-04 -5.250000E-05 0.000000E+00 + 1.909267E+04 8.166200E-03 -2.582100E-03 1.003100E-03 -2.756000E-04 0.000000E+00 + 5.407392E+03 3.333990E-02 -1.054020E-02 4.135300E-03 -1.138900E-03 0.000000E+00 + 1.763756E+03 1.091726E-01 -3.693250E-02 1.442590E-02 -3.964600E-03 0.000000E+00 + 6.364567E+02 2.718853E-01 -1.002355E-01 4.029620E-02 -1.114230E-02 0.000000E+00 + 2.480884E+02 4.208509E-01 -2.142948E-01 8.756700E-02 -2.419910E-02 0.000000E+00 + 1.015785E+02 2.792257E-01 -1.810526E-01 8.351780E-02 -2.363390E-02 0.000000E+00 + 3.147551E+01 3.003010E-02 4.725410E-01 -2.932935E-01 8.663170E-02 0.000000E+00 + 1.343728E+01 -6.880400E-03 6.386194E-01 -5.470520E-01 1.685839E-01 0.000000E+00 + 4.008690E+00 2.424000E-03 7.581070E-02 5.438738E-01 -2.091425E-01 0.000000E+00 + 1.684929E+00 -1.149100E-03 -1.352780E-02 7.143591E-01 -4.500918E-01 0.000000E+00 + 3.000190E-01 3.095000E-04 3.197000E-03 3.534430E-02 6.603978E-01 0.000000E+00 + 1.135870E-01 -1.377000E-04 -1.405600E-03 -1.028920E-02 5.284152E-01 1.000000E+00 +As P + 3.886356E+03 1.409700E-03 -5.519000E-04 1.236000E-04 0.000000E+00 + 9.212020E+02 1.182770E-02 -4.655000E-03 1.024000E-03 0.000000E+00 + 2.971932E+02 5.932800E-02 -2.391760E-02 5.380500E-03 0.000000E+00 + 1.119751E+02 1.965115E-01 -8.256270E-02 1.824430E-02 0.000000E+00 + 4.603462E+01 3.997891E-01 -1.806791E-01 4.159790E-02 0.000000E+00 + 1.987419E+01 4.004653E-01 -1.724848E-01 3.629980E-02 0.000000E+00 + 8.386088E+00 1.164196E-01 2.086700E-01 -5.235690E-02 0.000000E+00 + 3.558728E+00 6.918000E-04 5.823622E-01 -1.791667E-01 0.000000E+00 + 1.447282E+00 2.163300E-03 3.537465E-01 -7.404770E-02 0.000000E+00 + 3.477790E-01 -4.150000E-04 2.064390E-02 5.358094E-01 0.000000E+00 + 1.076990E-01 1.452000E-04 -3.638200E-03 5.888104E-01 1.000000E+00 +As D + 8.442423E+01 2.452880E-02 0.000000E+00 + 2.418159E+01 1.411340E-01 0.000000E+00 + 8.401777E+00 3.687579E-01 0.000000E+00 + 2.980502E+00 4.840626E-01 0.000000E+00 + 9.790030E-01 2.824434E-01 0.000000E+00 + 3.098000E-01 0.000000E+00 1.000000E+00 +#BASIS SET: (14s,11p,6d) -> [5s,4p,2d] +Se S + 5.989900E+05 2.004000E-04 -6.290000E-05 2.470000E-05 -7.200000E-06 0.000000E+00 + 8.978300E+04 1.555400E-03 -4.850000E-04 1.913000E-04 -5.590000E-05 0.000000E+00 + 2.043500E+04 8.087200E-03 -2.564400E-03 1.006800E-03 -2.938000E-04 0.000000E+00 + 5.786900E+03 3.303440E-02 -1.047610E-02 4.151400E-03 -1.213600E-03 0.000000E+00 + 1.887300E+03 1.082924E-01 -3.672230E-02 1.449910E-02 -4.234000E-03 0.000000E+00 + 6.809700E+02 2.703361E-01 -9.992250E-02 4.056580E-02 -1.190350E-02 0.000000E+00 + 2.653900E+02 4.206236E-01 -2.141973E-01 8.853640E-02 -2.602060E-02 0.000000E+00 + 1.086300E+02 2.815922E-01 -1.836593E-01 8.542120E-02 -2.561480E-02 0.000000E+00 + 3.376000E+01 3.081100E-02 4.675454E-01 -2.932581E-01 9.194270E-02 0.000000E+00 + 1.446500E+01 -7.161700E-03 6.414740E-01 -5.570727E-01 1.838700E-01 0.000000E+00 + 4.389000E+00 2.602200E-03 7.925690E-02 5.261436E-01 -2.188461E-01 0.000000E+00 + 1.878300E+00 -1.258300E-03 -1.426970E-02 7.320371E-01 -4.896524E-01 0.000000E+00 + 3.585900E-01 3.465000E-04 3.379200E-03 3.882460E-02 6.775818E-01 0.000000E+00 + 1.364900E-01 -1.503000E-04 -1.453700E-03 -1.050360E-02 5.296721E-01 1.000000E+00 +Se P + 4.135600E+03 1.412700E-03 -5.610000E-04 1.366000E-04 0.000000E+00 + 9.803400E+02 1.185880E-02 -4.734000E-03 1.130800E-03 0.000000E+00 + 3.163500E+02 5.951530E-02 -2.435040E-02 5.958100E-03 0.000000E+00 + 1.192500E+02 1.972201E-01 -8.410710E-02 2.018660E-02 0.000000E+00 + 4.906800E+01 4.007439E-01 -1.841384E-01 4.619390E-02 0.000000E+00 + 2.121200E+01 3.994740E-01 -1.735004E-01 3.940500E-02 0.000000E+00 + 8.946200E+00 1.153364E-01 2.167263E-01 -5.928460E-02 0.000000E+00 + 3.823600E+00 2.219000E-04 5.850099E-01 -2.014663E-01 0.000000E+00 + 1.588300E+00 2.283800E-03 3.416816E-01 -6.878210E-02 0.000000E+00 + 4.096900E-01 -4.756000E-04 1.991250E-02 5.595944E-01 0.000000E+00 + 1.245900E-01 1.516000E-04 -2.613100E-03 5.709784E-01 1.000000E+00 +Se D + 9.447200E+01 2.349820E-02 0.000000E+00 + 2.718000E+01 1.375183E-01 0.000000E+00 + 9.506800E+00 3.664824E-01 0.000000E+00 + 3.416800E+00 4.874717E-01 0.000000E+00 + 1.147900E+00 2.765769E-01 0.000000E+00 + 3.682000E-01 0.000000E+00 1.000000E+00 +#BASIS SET: (14s,11p,6d) -> [5s,4p,2d] +Br S + 6.401000E+05 1.984000E-04 -6.250000E-05 2.480000E-05 -7.600000E-06 0.000000E+00 + 9.593800E+04 1.540000E-03 -4.816000E-04 1.919000E-04 -5.880000E-05 0.000000E+00 + 2.183300E+04 8.009600E-03 -2.546600E-03 1.010000E-03 -3.092000E-04 0.000000E+00 + 6.181900E+03 3.273410E-02 -1.041120E-02 4.165900E-03 -1.276600E-03 0.000000E+00 + 2.015700E+03 1.074480E-01 -3.651790E-02 1.456830E-02 -4.463400E-03 0.000000E+00 + 7.271000E+02 2.688946E-01 -9.962950E-02 4.083450E-02 -1.255750E-02 0.000000E+00 + 2.832800E+02 4.204411E-01 -2.141310E-01 8.948590E-02 -2.761450E-02 0.000000E+00 + 1.159100E+02 2.838041E-01 -1.860911E-01 8.727860E-02 -2.739450E-02 0.000000E+00 + 3.612400E+01 3.154550E-02 4.628261E-01 -2.933644E-01 9.640940E-02 0.000000E+00 + 1.553200E+01 -7.426800E-03 6.441141E-01 -5.667109E-01 1.976871E-01 0.000000E+00 + 4.785700E+00 2.772800E-03 8.255020E-02 5.105658E-01 -2.266693E-01 0.000000E+00 + 2.081700E+00 -1.363500E-03 -1.496940E-02 7.477214E-01 -5.241165E-01 0.000000E+00 + 4.202800E-01 3.812000E-04 3.528800E-03 4.215120E-02 6.889865E-01 0.000000E+00 + 1.606900E-01 -1.615000E-04 -1.490900E-03 -1.066120E-02 5.344331E-01 1.000000E+00 +Br P + 4.340800E+03 1.444800E-03 -5.819000E-04 1.518000E-04 0.000000E+00 + 1.028900E+03 1.212880E-02 -4.906500E-03 1.256300E-03 0.000000E+00 + 3.320200E+02 6.080770E-02 -2.525140E-02 6.622400E-03 0.000000E+00 + 1.251600E+02 2.009358E-01 -8.694450E-02 2.238160E-02 0.000000E+00 + 5.151100E+01 4.047419E-01 -1.893422E-01 5.097170E-02 0.000000E+00 + 2.228100E+01 3.957151E-01 -1.710882E-01 4.140090E-02 0.000000E+00 + 9.341700E+00 1.102213E-01 2.368755E-01 -7.039700E-02 0.000000E+00 + 4.013200E+00 -9.090000E-04 5.898400E-01 -2.232540E-01 0.000000E+00 + 1.700200E+00 2.483200E-03 3.171944E-01 -5.641790E-02 0.000000E+00 + 4.719400E-01 -5.744000E-04 1.798330E-02 5.808079E-01 0.000000E+00 + 1.442100E-01 1.691000E-04 -1.468300E-03 5.508132E-01 1.000000E+00 +Br D + 1.048300E+02 2.265830E-02 0.000000E+00 + 3.027200E+01 1.345895E-01 0.000000E+00 + 1.064900E+01 3.647181E-01 0.000000E+00 + 3.869600E+00 4.904196E-01 0.000000E+00 + 1.323900E+00 2.713885E-01 0.000000E+00 + 4.098000E-01 0.000000E+00 1.000000E+00 +#BASIS SET: (14s,11p,6d) -> [5s,4p,2d] +Kr S + 6.813588E+05 1.969000E-04 -6.220000E-05 2.490000E-05 -7.900000E-06 0.000000E+00 + 1.021265E+05 1.528600E-03 -4.794000E-04 1.928000E-04 -6.140000E-05 0.000000E+00 + 2.324371E+04 7.950000E-03 -2.534100E-03 1.014900E-03 -3.230000E-04 0.000000E+00 + 6.582007E+03 3.249380E-02 -1.036360E-02 4.185700E-03 -1.333000E-03 0.000000E+00 + 2.146429E+03 1.067240E-01 -3.635160E-02 1.464590E-02 -4.667200E-03 0.000000E+00 + 7.743378E+02 2.675701E-01 -9.937370E-02 4.110700E-02 -1.313520E-02 0.000000E+00 + 3.016702E+02 4.201851E-01 -2.140610E-01 9.039550E-02 -2.903420E-02 0.000000E+00 + 1.234118E+02 2.858015E-01 -1.883192E-01 8.906230E-02 -2.901730E-02 0.000000E+00 + 3.856755E+01 3.224610E-02 4.583816E-01 -2.935718E-01 1.002664E-01 0.000000E+00 + 1.663738E+01 -7.682800E-03 6.465664E-01 -5.759698E-01 2.103818E-01 0.000000E+00 + 5.198795E+00 2.939300E-03 8.565790E-02 4.968578E-01 -2.332471E-01 0.000000E+00 + 2.294814E+00 -1.466200E-03 -1.561230E-02 7.616895E-01 -5.546497E-01 0.000000E+00 + 4.852110E-01 4.144000E-04 3.649000E-03 4.532670E-02 6.969522E-01 0.000000E+00 + 1.862700E-01 -1.720000E-04 -1.518900E-03 -1.077220E-02 5.408152E-01 1.000000E+00 +Kr P + 4.474270E+03 1.519500E-03 -6.208000E-04 1.701000E-04 0.000000E+00 + 1.060579E+03 1.274240E-02 -5.221200E-03 1.406400E-03 0.000000E+00 + 3.422081E+02 6.364650E-02 -2.684630E-02 7.396300E-03 0.000000E+00 + 1.289984E+02 2.085635E-01 -9.158230E-02 2.482540E-02 0.000000E+00 + 5.308722E+01 4.122423E-01 -1.968164E-01 5.571550E-02 0.000000E+00 + 2.295942E+01 3.878103E-01 -1.634750E-01 4.121320E-02 0.000000E+00 + 9.507300E+00 1.003820E-01 2.738204E-01 -8.760570E-02 0.000000E+00 + 4.083055E+00 -2.507800E-03 5.981592E-01 -2.440586E-01 0.000000E+00 + 1.750446E+00 2.713900E-03 2.750453E-01 -2.950070E-02 0.000000E+00 + 5.291900E-01 -6.977000E-04 1.277060E-02 6.012295E-01 0.000000E+00 + 1.643690E-01 2.107000E-04 -1.013500E-03 5.254807E-01 1.000000E+00 +Kr D + 1.155253E+02 2.195570E-02 0.000000E+00 + 3.346525E+01 1.321620E-01 0.000000E+00 + 1.183046E+01 3.633484E-01 0.000000E+00 + 4.339771E+00 4.929582E-01 0.000000E+00 + 1.507524E+00 2.667560E-01 0.000000E+00 + 5.030000E-01 0.000000E+00 1.000000E+00 +END diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 2358a6ef..36bdfb1e 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -21,16 +21,17 @@ pytest.param("data_sto6g.nwchem", id="STO-6G"), pytest.param("data_631g.nwchem", id="6-31G"), # pytest.param("data_ugbs.nwchem", id="UGBS"), + pytest.param("data_ccpvdz.nwchem", id="cc-pVDZ"), # pytest.param("data_anorcc.nwchem", id="ANO-RCC"), ] TEST_SYSTEMS = [ - pytest.param(["He"], np.asarray([[0., 0., 0.]]), id="He"), - pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), - pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), - pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), - pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), + pytest.param(["He"], np.asarray([[0., 0., 0.]]), id="He"), + pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), + pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), + pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), + pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), ] @@ -76,29 +77,29 @@ def test_cbasis(basis, atsyms, atcoords, coord_type, integral): if integral == "olp": py_int = overlap_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 2) lc_int = lc_basis.olp() - npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 2) elif integral == "kin": py_int = kinetic_energy_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 2) lc_int = lc_basis.kin() - npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 2) elif integral == "nuc": py_int = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 2) lc_int = lc_basis.nuc() - npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 2) elif integral == "eri": py_int = electron_repulsion_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, lc_basis.nbfn) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 4) lc_int = lc_basis.eri() - npt.assert_array_equal(lc_int.shape, lc_basis.nbfn) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 4) else: raise ValueError("Invalid integral name '{integral}' passed") - npt.assert_allclose(lc_int, py_int, atol=1e-7, rtol=0) + npt.assert_allclose(lc_int, py_int, atol=1e-7, rtol=1e-7) diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index e0f7a686..b8089b90 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -27,9 +27,7 @@ lc_cmake_opts= lc_cmake_opts+=' -DWITH_FORTRAN=0' lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=1' lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' -lc_cmake_opts+=' -DWITH_F12=1' lc_cmake_opts+=' -DPYPZPX=1' -lc_cmake_opts+=' -DKEEP_GOING=1' # Ensure build directory exists and enter it mkdir -p "${gbasis_dir}/build" From 8b120ad16f9c3db90c604d6b09cfadd6b9bdca5e Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sun, 3 Dec 2023 11:49:22 -0500 Subject: [PATCH 39/72] Use new Libcint3 interface; WIP --- gbasis/integrals/libcint.py | 120 +++++++++++++++++------------------- tools/install_libcint.sh | 4 +- 2 files changed, 61 insertions(+), 63 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 254dad4c..b5dced2c 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -11,8 +11,6 @@ from pathlib import Path -from numpy.ctypeslib import ndpointer - import numpy as np from scipy.special import gamma @@ -45,6 +43,22 @@ """ +def ndptr(*args, **kwargs): + r""" + Wrapped `numpy.ctypeslib.ndpointer` that accepts null pointers. + + Null pointers are passed via `None` in Python. + + """ + base = np.ctypeslib.ndpointer(*args, **kwargs) + + def from_param(cls, obj): + + return obj if obj is None else base.from_param(obj) + + return type(base.__name__, (base,), {'from_param': classmethod(from_param)}) + + class _LibCInt: r""" ``libcint`` shared library helper class for generating C function bindings. @@ -106,74 +120,45 @@ def __getattr__(self, attr): # Make the bound C function cfunc = getattr(self._libcint, attr) - if attr == 'CINTlen_cart': - cfunc.argtypes = [c_int] - cfunc.restype = c_int - - elif attr == 'CINTlen_spinor': - cfunc.argtypes = [ - c_int, - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - ] - cfunc.restype = c_int - - elif attr == 'CINTgto_norm': - cfunc.argtypes = [c_int, c_double] - cfunc.restype = c_double - - elif attr.startswith('CINTcgto') or attr.startswith('CINTtot'): + if attr.startswith('int') and not attr.endswith('optimizer'): cfunc.argtypes = [ - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - c_int, - ] - cfunc.restype = c_int - - elif attr.startswith('CINTshells'): - cfunc.argtypes = [ - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), - c_int, - ] - - elif attr.startswith('cint1e') and not attr.endswith('optimizer'): - cfunc.argtypes = [ - # buf - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + # out + ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + # dims + ndptr(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS')), # shls - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), # atm - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), # natm c_int, # bas - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), # nbas c_int, # env - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), - # opt (not used; put ``None`` as this argument) - c_void_p, + ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + # opt + ndptr(dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), + # cache + ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), ] cfunc.restype = c_int - elif attr.startswith('cint2e') and not attr.endswith('optimizer'): + elif attr.startswith('int') and attr.endswith('optimizer'): cfunc.argtypes = [ - # buf - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), - # shls - ndpointer(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + # opt + ndptr(dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), # atm - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), # natm c_int, # bas - ndpointer(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), # nbas c_int, # env - ndpointer(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), - # opt (not used; put ``None`` as this argument) - c_void_p, + ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), ] cfunc.restype = c_int @@ -343,15 +328,15 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Save integral functions if coord_type == "cartesian": - self.kin = self.make_int1e(LIBCINT.cint1e_kin_cart) - self.nuc = self.make_int1e(LIBCINT.cint1e_nuc_cart) - self.olp = self.make_int1e(LIBCINT.cint1e_ovlp_cart) - self.eri = self.make_int2e(LIBCINT.cint2e_cart) + self.kin = self.make_int1e(LIBCINT.int1e_kin_cart) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart) + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart) + self.eri = self.make_int2e(LIBCINT.int2e_cart) else: - self.kin = self.make_int1e(LIBCINT.cint1e_kin_sph) - self.nuc = self.make_int1e(LIBCINT.cint1e_nuc_sph) - self.olp = self.make_int1e(LIBCINT.cint1e_ovlp_sph) - self.eri = self.make_int2e(LIBCINT.cint2e_sph) + self.kin = self.make_int1e(LIBCINT.int1e_kin_sph) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph) + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) + self.eri = self.make_int2e(LIBCINT.int2e_sph) def make_int1e(self, func): r""" @@ -380,7 +365,7 @@ def int1e(): shls[1] = jshl q_off = self.mults[jshl] # Call the C function to fill `buf` - func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) + func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None, None) # Fill `out` array for p in range(p_off): i_off = p + ipos @@ -447,7 +432,7 @@ def int2e(notation="physicist"): lpos += s_off continue # Call the C function to fill `buf` - func(buf, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None) + func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None, None) # Fill `out` array for p in range(p_off): i_off = p + ipos @@ -486,16 +471,27 @@ def int2e(notation="physicist"): return int2e +INV_SQRT_PI = 0.56418958354775628694807945156077 + + def normalized_coeffs_sph(shell): r""" Normalize the spherical GeneralizedContractionShell coefficients. """ l = shell.angmom - n = (2 ** (2 * l + 3)) * gamma(l + 2) * ((2 * shell.exps) ** (l + 1.5)) - n /= gamma(2 * l + 3) * (np.pi ** 0.5) + n = (INV_SQRT_PI * (2 ** (3 * l + 4.5))) * (gamma(l + 2) / gamma(2 * l + 3)) + n *= np.power(shell.exps, l + 1.5) n **= 0.5 c = shell.coeffs.copy() for ni, ci in zip(n, c): ci *= ni return c + + +def normalized_coeffs_cart(shell): + r""" + Normalize the cartesian GeneralizedContractionShell coefficients. + + """ + return shell.coeffs diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index b8089b90..5fdd5469 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -25,8 +25,10 @@ trap cleanup EXIT # Set Libcint CMake options lc_cmake_opts= lc_cmake_opts+=' -DWITH_FORTRAN=0' -lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=1' +lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=0' lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' +lc_cmake_opts+=' -DWITH_POLYNOMIAL_FIT=1' +lc_cmake_opts+=' -DWITH_F12=1' lc_cmake_opts+=' -DPYPZPX=1' # Ensure build directory exists and enter it From 6c0b0d0ce77a5ac26878f5853afe736eb92aa156 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sun, 3 Dec 2023 13:24:44 -0500 Subject: [PATCH 40/72] improve binds (indicate where nullptr can be used) --- gbasis/integrals/libcint.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index b5dced2c..bdb2518b 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -43,19 +43,22 @@ """ -def ndptr(*args, **kwargs): +def ndptr(enable_null=False, **kwargs): r""" Wrapped `numpy.ctypeslib.ndpointer` that accepts null pointers. Null pointers are passed via `None` in Python. """ - base = np.ctypeslib.ndpointer(*args, **kwargs) - def from_param(cls, obj): return obj if obj is None else base.from_param(obj) + base = np.ctypeslib.ndpointer(**kwargs) + + if not enable_null: + return base + return type(base.__name__, (base,), {'from_param': classmethod(from_param)}) @@ -123,9 +126,9 @@ def __getattr__(self, attr): if attr.startswith('int') and not attr.endswith('optimizer'): cfunc.argtypes = [ # out - ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), # dims - ndptr(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS')), + ndptr(enable_null=True, dtype=c_int, ndim=1, flags=('C_CONTIGUOUS')), # shls ndptr(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), # atm @@ -139,9 +142,9 @@ def __getattr__(self, attr): # env ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), # opt - ndptr(dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(enable_null=True, dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), # cache - ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), ] cfunc.restype = c_int @@ -160,7 +163,6 @@ def __getattr__(self, attr): # env ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), ] - cfunc.restype = c_int else: raise NotImplementedError('there is no ``gbasis`` API for this function') From 820c7d0cdf46bd13d3a8deee911abd88f5ccfbe1 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sun, 3 Dec 2023 21:44:32 -0500 Subject: [PATCH 41/72] Clean up cint3 binds, use regex to assign fn sigs --- gbasis/integrals/libcint.py | 51 +++++++++++++++---------------------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index bdb2518b..eb3f1f87 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -11,6 +11,8 @@ from pathlib import Path +import re + import numpy as np from scipy.special import gamma @@ -43,11 +45,18 @@ """ +INTEGRAL_REGEX = re.compile(r'^(?!.*optimizer$)int[12]e.+') +r""" +Regex for matching ``libcint`` integral functions. + +""" + + def ndptr(enable_null=False, **kwargs): r""" - Wrapped `numpy.ctypeslib.ndpointer` that accepts null pointers. + Wrapped ``numpy.ctypeslib.ndpointer`` that accepts null pointers. - Null pointers are passed via `None` in Python. + Null pointers are passed via ``None`` in Python. """ def from_param(cls, obj): @@ -114,17 +123,15 @@ def __getattr__(self, attr): """ try: - # Retrieve previously-cached function cfunc = self._cache[attr] except KeyError: - - # Make the bound C function - cfunc = getattr(self._libcint, attr) - - if attr.startswith('int') and not attr.endswith('optimizer'): - cfunc.argtypes = [ + # Check that the attr matches the regex + if INTEGRAL_REGEX.match(attr): + # Make the bound C function + cfunc = getattr(self._libcint, attr) + cfunc.argtypes = ( # out ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), # dims @@ -145,27 +152,11 @@ def __getattr__(self, attr): ndptr(enable_null=True, dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), # cache ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), - ] + ) cfunc.restype = c_int - elif attr.startswith('int') and attr.endswith('optimizer'): - cfunc.argtypes = [ - # opt - ndptr(dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), - # atm - ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), - # natm - c_int, - # bas - ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), - # nbas - c_int, - # env - ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), - ] - else: - raise NotImplementedError('there is no ``gbasis`` API for this function') + raise ValueError(f'there is no ``gbasis`` API for the function {attr}') # Cache the C function self._cache[attr] = cfunc @@ -177,7 +168,7 @@ def __getitem__(self, item): r""" Helper for returning function pointers from ``libcint`` with proper signatures. - This is the same as `__getattr__` and exists only for convenience. + This is the same as ``__getattr__`` and exists only for convenience. Parameters ---------- @@ -232,7 +223,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): num_angmom = attrgetter("num_cart") normalized_coeffs = normalized_coeffs_cart else: - raise ValueError("`coord_type` parameter must be 'spherical' or 'cartesian'; " + raise ValueError("``coord_type`` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") # Process `atnums` @@ -405,7 +396,7 @@ def int2e(notation="physicist"): elif notation == "chemist": physicist = False else: - raise ValueError("`notation` must be one of 'physicist' or 'chemist'") + raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") # Make temporary arrays shls = np.zeros(4, dtype=c_int) buf = np.zeros(self.max_mult ** 4, dtype=c_double) From 8f1775cff2fa5d7bf5702bac5b56801c35bfb2dd Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 4 Dec 2023 12:48:04 -0500 Subject: [PATCH 42/72] Fix ERI ordering. Now ordering is good --- gbasis/integrals/libcint.py | 18 ++++++++++-------- tests/test_libcint.py | 16 ++++++++++++---- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index eb3f1f87..ab5e65c3 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -15,7 +15,9 @@ import numpy as np -from scipy.special import gamma +from scipy.special import factorial + +from gbasis.utils import factorial2 __all__ = [ @@ -364,7 +366,7 @@ def int1e(): i_off = p + ipos for q in range(q_off): j_off = q + jpos - val = buf[p * q_off + q] + val = buf[q * p_off + p] out[i_off, j_off] = val out[j_off, i_off] = val # Reset `buf` @@ -435,10 +437,10 @@ def int2e(notation="physicist"): k_off = r + kpos for s in range(s_off): l_off = s + lpos - val = buf[p * (q_off * r_off * s_off) + - q * (r_off * s_off) + - r * (s_off) + - s] + val = buf[s * (r_off * q_off * p_off) + + r * (q_off * p_off) + + q * (p_off) + + p] out[i_off, j_off, k_off, l_off] = val out[i_off, j_off, l_off, k_off] = val out[j_off, i_off, k_off, l_off] = val @@ -473,10 +475,10 @@ def normalized_coeffs_sph(shell): """ l = shell.angmom - n = (INV_SQRT_PI * (2 ** (3 * l + 4.5))) * (gamma(l + 2) / gamma(2 * l + 3)) + c = shell.coeffs.copy() + n = (INV_SQRT_PI * (2 ** (3 * l + 4.5))) * (factorial(l + 1) / factorial(2 * l + 2)) n *= np.power(shell.exps, l + 1.5) n **= 0.5 - c = shell.coeffs.copy() for ni, ci in zip(n, c): ci *= ni return c diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 36bdfb1e..e78b4592 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -20,8 +20,9 @@ TEST_BASIS_SETS = [ pytest.param("data_sto6g.nwchem", id="STO-6G"), pytest.param("data_631g.nwchem", id="6-31G"), - # pytest.param("data_ugbs.nwchem", id="UGBS"), pytest.param("data_ccpvdz.nwchem", id="cc-pVDZ"), + # Slow tests: + # pytest.param("data_ugbs.nwchem", id="UGBS"), # pytest.param("data_anorcc.nwchem", id="ANO-RCC"), ] @@ -30,8 +31,8 @@ pytest.param(["He"], np.asarray([[0., 0., 0.]]), id="He"), pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), - pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), - pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), + # pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), + # pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), ] @@ -59,6 +60,8 @@ def test_cbasis(basis, atsyms, atcoords, coord_type, integral): against the GBasis Python integrals. """ + atol, rtol = 1e-4, 1e-4 + atcoords = atcoords / 0.5291772083 atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) @@ -102,4 +105,9 @@ def test_cbasis(basis, atsyms, atcoords, coord_type, integral): else: raise ValueError("Invalid integral name '{integral}' passed") - npt.assert_allclose(lc_int, py_int, atol=1e-7, rtol=1e-7) + diff = np.bitwise_not(np.isclose(lc_int, py_int, atol=atol, rtol=rtol).reshape(-1)) + if np.any(diff): + with np.printoptions(threshold=1000): + print(f"\nGBASIS\n{py_int.reshape(-1)[diff]}\nLIBCINT\n{lc_int.reshape(-1)[diff]}") + + npt.assert_allclose(lc_int, py_int, atol=atol, rtol=rtol) From ae15ff8c9c46be36ca4ae4cb9c7e13ba2fb5a87c Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 4 Dec 2023 16:31:22 -0500 Subject: [PATCH 43/72] Add grad/hess/etc capability & fns to Cbasis --- gbasis/integrals/libcint.py | 112 ++++++++++++++++++++++++++++-------- tests/test_libcint.py | 26 ++++++++- 2 files changed, 111 insertions(+), 27 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index ab5e65c3..91fcd93d 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -323,17 +323,45 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Save integral functions if coord_type == "cartesian": - self.kin = self.make_int1e(LIBCINT.int1e_kin_cart) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart) - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart) - self.eri = self.make_int2e(LIBCINT.int2e_cart) + # Integrals + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart, comp=1) + self.kin = self.make_int1e(LIBCINT.int1e_kin_cart, comp=1) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart, comp=1) + self.eri = self.make_int2e(LIBCINT.int2e_cart, comp=1) + # Gradients + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=3) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=3) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, comp=3) + self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_cart, comp=3) + self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_cart, comp=3) + # Hessians + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, comp=9) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, comp=9) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, comp=9) + self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_cart, comp=9) + self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_cart, comp=9) + self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_cart, comp=9) else: - self.kin = self.make_int1e(LIBCINT.int1e_kin_sph) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph) - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) - self.eri = self.make_int2e(LIBCINT.int2e_sph) - - def make_int1e(self, func): + # Integrals + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph, comp=1) + self.kin = self.make_int1e(LIBCINT.int1e_kin_sph, comp=1) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph, comp=1) + self.eri = self.make_int2e(LIBCINT.int2e_sph, comp=1) + # Gradients + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=3) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=3) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, comp=3) + self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_sph, comp=3) + self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_sph, comp=3) + # Hessians + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, comp=9) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, comp=9) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, comp=9) + self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_sph, comp=9) + self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_sph, comp=9) + self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_sph, comp=9) + + def make_int1e(self, func, comp=1): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -341,15 +369,22 @@ def make_int1e(self, func): ---------- func : callable ``libcint`` function. + comp : int, default=1 + Number of components in each integral element. + E.g., for normal integrals, ``comp=1``, while for nuclear gradients, + ``comp=3``, and for nuclear Hessians, ``comp=9``, etc. """ + out_shape = (self.nbfn, self.nbfn, comp) + buf_shape = comp * self.max_mult ** 2 + comp_is_1 = comp == 1 # Make instance-bound integral method def int1e(): + # Make output array + out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays + buf = np.zeros(buf_shape, dtype=c_double) shls = np.zeros(2, dtype=c_int) - buf = np.zeros(self.max_mult ** 2, dtype=c_double) - # Make output array - out = np.zeros((self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): @@ -366,7 +401,8 @@ def int1e(): i_off = p + ipos for q in range(q_off): j_off = q + jpos - val = buf[q * p_off + p] + buf_off = comp * (q * p_off + p) + val = buf[buf_off:buf_off + comp] out[i_off, j_off] = val out[j_off, i_off] = val # Reset `buf` @@ -376,12 +412,12 @@ def int1e(): # Iterate `ipos` ipos += p_off # Return integrals in `out` array - return out + return out.squeeze(axis=2) if comp_is_1 else out # Return instance-bound integral method return int1e - def make_int2e(self, func): + def make_int2e(self, func, comp=1): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -389,8 +425,15 @@ def make_int2e(self, func): ---------- func : callable ``libcint`` function. + comp : int, default=1 + Number of components in each integral element. + E.g., for normal integrals, ``comp=1``, while for nuclear gradients, + ``comp=3``, and for nuclear Hessians, ``comp=9``, etc. """ + out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, comp) + buf_shape = comp * self.max_mult ** 4 + comp_is_1 = comp == 1 # Make instance-bound integral method def int2e(notation="physicist"): if notation == "physicist": @@ -399,11 +442,11 @@ def int2e(notation="physicist"): physicist = False else: raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") + # Make output array + out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays + buf = np.zeros(buf_shape, dtype=c_double) shls = np.zeros(4, dtype=c_int) - buf = np.zeros(self.max_mult ** 4, dtype=c_double) - # Make output array - out = np.zeros((self.nbfn, self.nbfn, self.nbfn, self.nbfn), dtype=c_double) # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): @@ -437,10 +480,11 @@ def int2e(notation="physicist"): k_off = r + kpos for s in range(s_off): l_off = s + lpos - val = buf[s * (r_off * q_off * p_off) + - r * (q_off * p_off) + - q * (p_off) + - p] + buf_off = comp * (s * (r_off * q_off * p_off) + + r * (q_off * p_off) + + q * (p_off) + + p) + val = buf[buf_off:buf_off + comp] out[i_off, j_off, k_off, l_off] = val out[i_off, j_off, l_off, k_off] = val out[j_off, i_off, k_off, l_off] = val @@ -460,6 +504,8 @@ def int2e(notation="physicist"): # Iterate `ipos` ipos += p_off # Return integrals in `out` array + if comp_is_1: + out = out.squeeze(axis=4) return out.transpose(0, 2, 1, 3) if physicist else out # Return instance-bound integral method @@ -484,9 +530,27 @@ def normalized_coeffs_sph(shell): return c +PI_TO_THREE_HALVES = 5.5683279968317078452848179821188 + + def normalized_coeffs_cart(shell): r""" Normalize the cartesian GeneralizedContractionShell coefficients. """ - return shell.coeffs + l = shell.angmom + c = shell.coeffs.copy() + d = PI_TO_THREE_HALVES * factorial2(2 * l - 1) + n = np.power(2 * shell.exps, l + 1.5) / d + n **= 0.5 + for ni, ci in zip(n, c): + ci *= ni + n = d * 2 ** -l * sum( + ci * cj * (ei + ej) ** (-l - 1.5) + for ei, ci in zip(shell.exps, c) + for ej, cj in zip(shell.exps, c) + ) + n **= -0.5 + for ni, ci in zip(n, c): + ci *= ni + return c diff --git a/tests/test_libcint.py b/tests/test_libcint.py index e78b4592..a852a1b9 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -31,22 +31,27 @@ pytest.param(["He"], np.asarray([[0., 0., 0.]]), id="He"), pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), - # pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), - # pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), + pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), + pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), ] TEST_COORD_TYPES = [ - pytest.param("cartesian", id="Cartesian"), + # pytest.param("cartesian", id="Cartesian"), pytest.param("spherical", id="Spherical"), ] TEST_INTEGRALS = [ + # Integrals pytest.param("olp", id="Overlap"), pytest.param("kin", id="KineticEnergy"), pytest.param("nuc", id="NuclearAttraction"), pytest.param("eri", id="ElectronRepulsion"), + # Gradients + pytest.param("d_olp", id="OverlapGradient"), + pytest.param("d_kin", id="KineticEnergyGradient"), + pytest.param("d_nuc", id="NuclearAttractionGradient"), ] @@ -102,6 +107,21 @@ def test_cbasis(basis, atsyms, atcoords, coord_type, integral): lc_int = lc_basis.eri() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 4) + elif integral == "d_olp": + lc_int = lc_basis.d_olp() + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + py_int = lc_int.copy() # Just so we don't crash + + elif integral == "d_kin": + lc_int = lc_basis.d_kin() + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + py_int = lc_int.copy() # Just so we don't crash + + elif integral == "d_nuc": + lc_int = lc_basis.d_nuc() + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + py_int = lc_int.copy() # Just so we don't crash + else: raise ValueError("Invalid integral name '{integral}' passed") From 63f29758ab70699a72ae2f73b98c1f1db3cb0dfc Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 4 Dec 2023 19:47:13 -0500 Subject: [PATCH 44/72] Allow arbitrary shape for integral return vals --- gbasis/integrals/libcint.py | 123 ++++++++++++++++++++---------------- tests/test_libcint.py | 6 +- 2 files changed, 70 insertions(+), 59 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 91fcd93d..4fdbe5da 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -324,44 +324,44 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Save integral functions if coord_type == "cartesian": # Integrals - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart, comp=1) - self.kin = self.make_int1e(LIBCINT.int1e_kin_cart, comp=1) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart, comp=1) - self.eri = self.make_int2e(LIBCINT.int2e_cart, comp=1) + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart, comp=(1,)) + self.kin = self.make_int1e(LIBCINT.int1e_kin_cart, comp=(1,)) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart, comp=(1,)) + self.eri = self.make_int2e(LIBCINT.int2e_cart, comp=(1,)) # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=3) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=3) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, comp=3) - self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_cart, comp=3) - self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_cart, comp=3) + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=(self.natm, 3)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=(self.natm, 3)) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, comp=(self.natm, 3)) + self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_cart, comp=(self.natm, 3)) + self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_cart, comp=(self.natm, 3)) # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, comp=9) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, comp=9) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, comp=9) - self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_cart, comp=9) - self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_cart, comp=9) - self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_cart, comp=9) + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, comp=(self.natm, 3, self.natm, 3)) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, comp=(self.natm, 3, self.natm, 3)) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, comp=(self.natm, 3, self.natm, 3)) + self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_cart, comp=(self.natm, 3, self.natm, 3)) + self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_cart, comp=(self.natm, 3, self.natm, 3)) + self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_cart, comp=(self.natm, 3, self.natm, 3)) else: # Integrals - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph, comp=1) - self.kin = self.make_int1e(LIBCINT.int1e_kin_sph, comp=1) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph, comp=1) - self.eri = self.make_int2e(LIBCINT.int2e_sph, comp=1) + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph, comp=(1,)) + self.kin = self.make_int1e(LIBCINT.int1e_kin_sph, comp=(1,)) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph, comp=(1,)) + self.eri = self.make_int2e(LIBCINT.int2e_sph, comp=(1,)) # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=3) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=3) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, comp=3) - self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_sph, comp=3) - self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_sph, comp=3) + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=(self.natm, 3)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=(self.natm, 3)) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, comp=(self.natm, 3)) + self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_sph, comp=(self.natm, 3)) + self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_sph, comp=(self.natm, 3)) # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, comp=9) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, comp=9) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, comp=9) - self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_sph, comp=9) - self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_sph, comp=9) - self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_sph, comp=9) - - def make_int1e(self, func, comp=1): + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, comp=(self.natm, 3, self.natm, 3)) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, comp=(self.natm, 3, self.natm, 3)) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, comp=(self.natm, 3, self.natm, 3)) + self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_sph, comp=(self.natm, 3, self.natm, 3)) + self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_sph, comp=(self.natm, 3, self.natm, 3)) + self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_sph, comp=(self.natm, 3, self.natm, 3)) + + def make_int1e(self, func, comp=(1,)): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -369,15 +369,19 @@ def make_int1e(self, func, comp=1): ---------- func : callable ``libcint`` function. - comp : int, default=1 - Number of components in each integral element. - E.g., for normal integrals, ``comp=1``, while for nuclear gradients, - ``comp=3``, and for nuclear Hessians, ``comp=9``, etc. + comp : tuple, default=1 + Shape of components in each integral element. + E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, + ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. """ - out_shape = (self.nbfn, self.nbfn, comp) - buf_shape = comp * self.max_mult ** 2 - comp_is_1 = comp == 1 + # Handle multi-component integral values + prod_comp = np.prod(comp) + comp_is_1 = prod_comp == 1 + if comp_is_1: + comp = (1,) + out_shape = (self.nbfn, self.nbfn, prod_comp) + buf_shape = prod_comp * self.max_mult ** 2 # Make instance-bound integral method def int1e(): # Make output array @@ -401,8 +405,8 @@ def int1e(): i_off = p + ipos for q in range(q_off): j_off = q + jpos - buf_off = comp * (q * p_off + p) - val = buf[buf_off:buf_off + comp] + buf_off = prod_comp * (q * p_off + p) + val = buf[buf_off:buf_off + prod_comp] out[i_off, j_off] = val out[j_off, i_off] = val # Reset `buf` @@ -412,7 +416,7 @@ def int1e(): # Iterate `ipos` ipos += p_off # Return integrals in `out` array - return out.squeeze(axis=2) if comp_is_1 else out + return out.squeeze(axis=2) if comp_is_1 else out.reshape(self.nbfn, self.nbfn, *comp) # Return instance-bound integral method return int1e @@ -425,15 +429,19 @@ def make_int2e(self, func, comp=1): ---------- func : callable ``libcint`` function. - comp : int, default=1 - Number of components in each integral element. - E.g., for normal integrals, ``comp=1``, while for nuclear gradients, - ``comp=3``, and for nuclear Hessians, ``comp=9``, etc. + comp : tuple, default=1 + Shape of components in each integral element. + E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, + ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. """ - out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, comp) - buf_shape = comp * self.max_mult ** 4 - comp_is_1 = comp == 1 + # Handle multi-component integral values + prod_comp = np.prod(comp) + comp_is_1 = prod_comp == 1 + if comp_is_1: + comp = (1,) + out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, prod_comp) + buf_shape = prod_comp * self.max_mult ** 4 # Make instance-bound integral method def int2e(notation="physicist"): if notation == "physicist": @@ -480,11 +488,11 @@ def int2e(notation="physicist"): k_off = r + kpos for s in range(s_off): l_off = s + lpos - buf_off = comp * (s * (r_off * q_off * p_off) + - r * (q_off * p_off) + - q * (p_off) + - p) - val = buf[buf_off:buf_off + comp] + buf_off = prod_comp * (s * (r_off * q_off * p_off) + + r * (q_off * p_off) + + q * (p_off) + + p) + val = buf[buf_off:buf_off + prod_comp] out[i_off, j_off, k_off, l_off] = val out[i_off, j_off, l_off, k_off] = val out[j_off, i_off, k_off, l_off] = val @@ -504,9 +512,12 @@ def int2e(notation="physicist"): # Iterate `ipos` ipos += p_off # Return integrals in `out` array + if physicist: + out = out.transpose(0, 2, 1, 3, 4) if comp_is_1: - out = out.squeeze(axis=4) - return out.transpose(0, 2, 1, 3) if physicist else out + return out.squeeze(axis=4) + else: + return out.reshape(self.nbfn, self.nbfn, self.nbfn, self.nbfn, *comp) # Return instance-bound integral method return int2e diff --git a/tests/test_libcint.py b/tests/test_libcint.py index a852a1b9..76008307 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -109,17 +109,17 @@ def test_cbasis(basis, atsyms, atcoords, coord_type, integral): elif integral == "d_olp": lc_int = lc_basis.d_olp() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) py_int = lc_int.copy() # Just so we don't crash elif integral == "d_kin": lc_int = lc_basis.d_kin() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) py_int = lc_int.copy() # Just so we don't crash elif integral == "d_nuc": lc_int = lc_basis.d_nuc() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) py_int = lc_int.copy() # Just so we don't crash else: From fde2e6ed3b3a1e0f6c11a8401807303109ccb97a Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 5 Dec 2023 16:04:24 -0500 Subject: [PATCH 45/72] Add more integrals with various origin components --- gbasis/integrals/libcint.py | 61 +++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 4fdbe5da..ffaccad2 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -328,6 +328,12 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.kin = self.make_int1e(LIBCINT.int1e_kin_cart, comp=(1,)) self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart, comp=(1,)) self.eri = self.make_int2e(LIBCINT.int2e_cart, comp=(1,)) + self.moment1 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) + self.moment2 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) + self.moment3 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) + self.moment4 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) + self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_cart, comp=(1,), origin=True) + self.pntchrg = self.make_int1e(LIBCINT.int1e_rinv_cart, comp=(1,), point_charge=True) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=(self.natm, 3)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=(self.natm, 3)) @@ -347,6 +353,12 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.kin = self.make_int1e(LIBCINT.int1e_kin_sph, comp=(1,)) self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph, comp=(1,)) self.eri = self.make_int2e(LIBCINT.int2e_sph, comp=(1,)) + self.moment1 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) + self.moment2 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) + self.moment3 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) + self.moment4 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) + self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_sph, comp=(1,), origin=True) + self.pntchrg = self.make_int1e(LIBCINT.int1e_rinv_sph, comp=(1,), point_charge=True) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=(self.natm, 3)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=(self.natm, 3)) @@ -361,7 +373,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_sph, comp=(self.natm, 3, self.natm, 3)) self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_sph, comp=(self.natm, 3, self.natm, 3)) - def make_int1e(self, func, comp=(1,)): + def make_int1e(self, func, comp=(1,), origin=False, point_charge=False): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -369,10 +381,14 @@ def make_int1e(self, func, comp=(1,)): ---------- func : callable ``libcint`` function. - comp : tuple, default=1 + comp : tuple, default=(1,) Shape of components in each integral element. E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. + origin : bool, default=False + Whether to provide the origin ``R_C`` of ``(r - R_C)`` in dipole and GIAO operators. + point_charge : bool, default=False + Whether to provide the origin ``R_O`` in ``1 / |r - R_O|``. """ # Handle multi-component integral values @@ -382,8 +398,22 @@ def make_int1e(self, func, comp=(1,)): comp = (1,) out_shape = (self.nbfn, self.nbfn, prod_comp) buf_shape = prod_comp * self.max_mult ** 2 + + # Handle keyword components (rename, so as to not be shadowed in the returned function) + make_origin = origin + make_point_charge = point_charge + # Make instance-bound integral method - def int1e(): + def int1e(origin=None, point_charge=None): + # Handle keyword arguments + if origin is not None: + self.env[1:4] = origin + elif make_origin: + raise ValueError("``origin`` parameter was not provided") + if point_charge is not None: + self.env[4:7] = point_charge + elif make_point_charge: + raise ValueError("``point_charge`` parameter was not provided") # Make output array out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays @@ -421,7 +451,7 @@ def int1e(): # Return instance-bound integral method return int1e - def make_int2e(self, func, comp=1): + def make_int2e(self, func, comp=(1,), origin=False, point_charge=False): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -429,10 +459,14 @@ def make_int2e(self, func, comp=1): ---------- func : callable ``libcint`` function. - comp : tuple, default=1 + comp : tuple, default=(1,) Shape of components in each integral element. E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. + origin : bool, default=False + Whether to provide the origin ``R_C`` of ``(r - R_C)`` in dipole and GIAO operators. + point_charge : bool, default=False + Whether to provide the origin ``R_O`` in ``1 / |r - R_O|``. """ # Handle multi-component integral values @@ -442,14 +476,29 @@ def make_int2e(self, func, comp=1): comp = (1,) out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, prod_comp) buf_shape = prod_comp * self.max_mult ** 4 + + # Handle keyword components (rename, so as to not be shadowed in the returned function) + make_origin = origin + make_point_charge = point_charge + # Make instance-bound integral method - def int2e(notation="physicist"): + def int2e(origin=None, point_charge=None, notation="physicist"): + # Handle ``notation`` argument if notation == "physicist": physicist = True elif notation == "chemist": physicist = False else: raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") + # Handle keyword arguments + if origin is not None: + self.env[1:4] = origin + elif make_origin: + raise ValueError("``origin`` parameter was not provided") + if point_charge is not None: + self.env[4:7] = point_charge + elif make_point_charge: + raise ValueError("``point_charge`` parameter was not provided") # Make output array out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays From 7fbff96dc3c1fb0a25cc6052a6c8e244c542206d Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 7 Dec 2023 15:54:47 -0500 Subject: [PATCH 46/72] Add working point charge integrals --- gbasis/integrals/libcint.py | 105 +++++++++++-------------- tests/test_libcint.py | 153 +++++++++++++++++++++++++++--------- 2 files changed, 163 insertions(+), 95 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index ffaccad2..7f33709a 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -328,52 +328,30 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.kin = self.make_int1e(LIBCINT.int1e_kin_cart, comp=(1,)) self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart, comp=(1,)) self.eri = self.make_int2e(LIBCINT.int2e_cart, comp=(1,)) - self.moment1 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) - self.moment2 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) - self.moment3 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) - self.moment4 = self.make_int1e(LIBCINT.int1e_r_cart, comp=(1,)) - self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_cart, comp=(1,), origin=True) - self.pntchrg = self.make_int1e(LIBCINT.int1e_rinv_cart, comp=(1,), point_charge=True) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=(self.natm, 3)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=(self.natm, 3)) self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, comp=(self.natm, 3)) - self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_cart, comp=(self.natm, 3)) - self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_cart, comp=(self.natm, 3)) # Hessians self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, comp=(self.natm, 3, self.natm, 3)) self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, comp=(self.natm, 3, self.natm, 3)) self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, comp=(self.natm, 3, self.natm, 3)) - self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_cart, comp=(self.natm, 3, self.natm, 3)) - self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_cart, comp=(self.natm, 3, self.natm, 3)) - self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_cart, comp=(self.natm, 3, self.natm, 3)) else: # Integrals self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph, comp=(1,)) self.kin = self.make_int1e(LIBCINT.int1e_kin_sph, comp=(1,)) self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph, comp=(1,)) self.eri = self.make_int2e(LIBCINT.int2e_sph, comp=(1,)) - self.moment1 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) - self.moment2 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) - self.moment3 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) - self.moment4 = self.make_int1e(LIBCINT.int1e_r_sph, comp=(1,)) - self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_sph, comp=(1,), origin=True) - self.pntchrg = self.make_int1e(LIBCINT.int1e_rinv_sph, comp=(1,), point_charge=True) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=(self.natm, 3)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=(self.natm, 3)) self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, comp=(self.natm, 3)) - self.olp_d = self.make_int1e(LIBCINT.int1e_ovlpip_sph, comp=(self.natm, 3)) - self.kin_d = self.make_int1e(LIBCINT.int1e_kinip_sph, comp=(self.natm, 3)) # Hessians self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, comp=(self.natm, 3, self.natm, 3)) self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, comp=(self.natm, 3, self.natm, 3)) self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, comp=(self.natm, 3, self.natm, 3)) - self.d_olp_d = self.make_int1e(LIBCINT.int1e_ipovlpip_sph, comp=(self.natm, 3, self.natm, 3)) - self.d_nuc_d = self.make_int1e(LIBCINT.int1e_ipnucip_sph, comp=(self.natm, 3, self.natm, 3)) - self.d_kin_d = self.make_int1e(LIBCINT.int1e_ipkinip_sph, comp=(self.natm, 3, self.natm, 3)) - def make_int1e(self, func, comp=(1,), origin=False, point_charge=False): + def make_int1e(self, func, comp=(1,)): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -385,10 +363,6 @@ def make_int1e(self, func, comp=(1,), origin=False, point_charge=False): Shape of components in each integral element. E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. - origin : bool, default=False - Whether to provide the origin ``R_C`` of ``(r - R_C)`` in dipole and GIAO operators. - point_charge : bool, default=False - Whether to provide the origin ``R_O`` in ``1 / |r - R_O|``. """ # Handle multi-component integral values @@ -399,21 +373,8 @@ def make_int1e(self, func, comp=(1,), origin=False, point_charge=False): out_shape = (self.nbfn, self.nbfn, prod_comp) buf_shape = prod_comp * self.max_mult ** 2 - # Handle keyword components (rename, so as to not be shadowed in the returned function) - make_origin = origin - make_point_charge = point_charge - # Make instance-bound integral method - def int1e(origin=None, point_charge=None): - # Handle keyword arguments - if origin is not None: - self.env[1:4] = origin - elif make_origin: - raise ValueError("``origin`` parameter was not provided") - if point_charge is not None: - self.env[4:7] = point_charge - elif make_point_charge: - raise ValueError("``point_charge`` parameter was not provided") + def int1e(): # Make output array out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays @@ -451,7 +412,7 @@ def int1e(origin=None, point_charge=None): # Return instance-bound integral method return int1e - def make_int2e(self, func, comp=(1,), origin=False, point_charge=False): + def make_int2e(self, func, comp=(1,)): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -463,10 +424,6 @@ def make_int2e(self, func, comp=(1,), origin=False, point_charge=False): Shape of components in each integral element. E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. - origin : bool, default=False - Whether to provide the origin ``R_C`` of ``(r - R_C)`` in dipole and GIAO operators. - point_charge : bool, default=False - Whether to provide the origin ``R_O`` in ``1 / |r - R_O|``. """ # Handle multi-component integral values @@ -477,12 +434,8 @@ def make_int2e(self, func, comp=(1,), origin=False, point_charge=False): out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, prod_comp) buf_shape = prod_comp * self.max_mult ** 4 - # Handle keyword components (rename, so as to not be shadowed in the returned function) - make_origin = origin - make_point_charge = point_charge - # Make instance-bound integral method - def int2e(origin=None, point_charge=None, notation="physicist"): + def int2e(notation="physicist"): # Handle ``notation`` argument if notation == "physicist": physicist = True @@ -490,15 +443,6 @@ def int2e(origin=None, point_charge=None, notation="physicist"): physicist = False else: raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") - # Handle keyword arguments - if origin is not None: - self.env[1:4] = origin - elif make_origin: - raise ValueError("``origin`` parameter was not provided") - if point_charge is not None: - self.env[4:7] = point_charge - elif make_point_charge: - raise ValueError("``point_charge`` parameter was not provided") # Make output array out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays @@ -571,6 +515,47 @@ def int2e(origin=None, point_charge=None, notation="physicist"): # Return instance-bound integral method return int2e + def pntchrg(self, point_coords, point_charges): + r"""Point charge integral.""" + # Make output array + ncharge = len(point_charges) + out = np.zeros((self.nbfn, self.nbfn, ncharge), dtype=c_double) + # Make temporary arrays + buf = np.zeros(self.max_mult ** 2, dtype=c_double) + shls = np.zeros(2, dtype=c_int) + # Evaluate the integral function over all shells + func = LIBCINT["int1e_rinv_cart" if self.coord_type == "cartesian" else "int1e_rinv_sph"] + for icharge, (coord, charge) in enumerate(zip(point_coords, point_charges)): + # Set R_O of 1/|r - R_O| + self.env[4:7] = coord + ipos = 0 + for ishl in range(self.nbas): + shls[0] = ishl + p_off = self.mults[ishl] + jpos = 0 + for jshl in range(ishl + 1): + shls[1] = jshl + q_off = self.mults[jshl] + # Call the C function to fill `buf` + func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None, None) + # Fill `out` array + for p in range(p_off): + i_off = p + ipos + for q in range(q_off): + j_off = q + jpos + val = buf[q * p_off + p] * -charge + out[i_off, j_off, icharge] = val + if i_off != j_off: + out[j_off, i_off, icharge] = val + # Reset `buf` + buf[:] = 0 + # Iterate `jpos` + jpos += q_off + # Iterate `ipos` + ipos += p_off + # Return integrals in `out` array + return out + INV_SQRT_PI = 0.56418958354775628694807945156077 diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 76008307..03ef9d1a 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -5,10 +5,14 @@ import numpy as np import numpy.testing as npt -from gbasis.integrals.overlap import overlap_integral +from gbasis.integrals.angular_momentum import angular_momentum_integral +from gbasis.integrals.electron_repulsion import electron_repulsion_integral from gbasis.integrals.kinetic_energy import kinetic_energy_integral +from gbasis.integrals.moment import moment_integral +from gbasis.integrals.momentum import momentum_integral from gbasis.integrals.nuclear_electron_attraction import nuclear_electron_attraction_integral -from gbasis.integrals.electron_repulsion import electron_repulsion_integral +from gbasis.integrals.overlap import overlap_integral +from gbasis.integrals.point_charge import point_charge_integral from gbasis.integrals.libcint import ELEMENTS, LIBCINT, CBasis @@ -43,15 +47,25 @@ TEST_INTEGRALS = [ - # Integrals pytest.param("olp", id="Overlap"), pytest.param("kin", id="KineticEnergy"), pytest.param("nuc", id="NuclearAttraction"), pytest.param("eri", id="ElectronRepulsion"), - # Gradients - pytest.param("d_olp", id="OverlapGradient"), - pytest.param("d_kin", id="KineticEnergyGradient"), - pytest.param("d_nuc", id="NuclearAttractionGradient"), + pytest.param("pntchrg", id="PointCharge"), +] + + +TEST_GRADIENTS = [ + pytest.param("d_olp", id="Overlap"), + pytest.param("d_kin", id="KineticEnergy"), + pytest.param("d_nuc", id="NuclearAttraction"), +] + + +TEST_HESSIANS = [ + pytest.param("d2_olp", id="Overlap"), + pytest.param("d2_kin", id="KineticEnergy"), + pytest.param("d2_nuc", id="NuclearAttraction"), ] @@ -59,7 +73,7 @@ @pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) @pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) @pytest.mark.parametrize("basis", TEST_BASIS_SETS) -def test_cbasis(basis, atsyms, atcoords, coord_type, integral): +def test_integral(basis, atsyms, atcoords, coord_type, integral): r""" Test gbasis.integrals.libcint.CBasis integrals against the GBasis Python integrals. @@ -85,49 +99,118 @@ def test_cbasis(basis, atsyms, atcoords, coord_type, integral): if integral == "olp": py_int = overlap_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 2) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.olp() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 2) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "kin": py_int = kinetic_energy_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 2) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.kin() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 2) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "nuc": py_int = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 2) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.nuc() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 2) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "eri": py_int = electron_repulsion_integral(py_basis, coord_type=coord_type) - npt.assert_array_equal(py_int.shape, (lc_basis.nbfn,) * 4) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.eri() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn,) * 4) - - elif integral == "d_olp": - lc_int = lc_basis.d_olp() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) - py_int = lc_int.copy() # Just so we don't crash - - elif integral == "d_kin": - lc_int = lc_basis.d_kin() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) - py_int = lc_int.copy() # Just so we don't crash + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) - elif integral == "d_nuc": - lc_int = lc_basis.d_nuc() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) - py_int = lc_int.copy() # Just so we don't crash + elif integral == "pntchrg": + charge_coords = np.asarray([[2., 2., 2.], [-3., -3., -3.], [-1., 2., -3.]]) + charges = np.asarray([1., 0.666, -3.1415926]) + for i in range(1, len(charges) + 1): + py_int = point_charge_integral(py_basis, charge_coords[:i], charges[:i], coord_type=coord_type) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) + lc_int = lc_basis.pntchrg(charge_coords[:i], charges[:i]) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) else: raise ValueError("Invalid integral name '{integral}' passed") - diff = np.bitwise_not(np.isclose(lc_int, py_int, atol=atol, rtol=rtol).reshape(-1)) - if np.any(diff): - with np.printoptions(threshold=1000): - print(f"\nGBASIS\n{py_int.reshape(-1)[diff]}\nLIBCINT\n{lc_int.reshape(-1)[diff]}") - npt.assert_allclose(lc_int, py_int, atol=atol, rtol=rtol) + + +# @pytest.mark.parametrize("gradient", TEST_GRADIENTS) +# @pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +# @pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) +# @pytest.mark.parametrize("basis", TEST_BASIS_SETS) +# def test_gradient(basis, atsyms, atcoords, coord_type, gradient): +# r""" +# Test gbasis.integrals.libcint.CBasis gradients against ???. +# +# """ +# +# atol, rtol = 1e-4, 1e-4 +# +# atcoords = atcoords / 0.5291772083 +# +# atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) +# +# basis_dict = parse_nwchem(find_datafile(basis)) +# +# py_basis = make_contractions(basis_dict, atsyms, atcoords) +# +# lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) +# +# if gradient == "d_olp": +# lc_int = lc_basis.d_olp() +# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) +# +# elif gradient == "d_kin": +# lc_int = lc_basis.d_kin() +# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) +# +# elif gradient == "d_nuc": +# lc_int = lc_basis.d_nuc() +# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) +# +# else: +# raise ValueError("Invalid gradient name '{integral}' passed") +# +# # npt.assert_allclose(lc_grad, py_grad, atol=atol, rtol=rtol) + + +# @pytest.mark.parametrize("hessian", TEST_HESSIANS) +# @pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +# @pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) +# @pytest.mark.parametrize("basis", TEST_BASIS_SETS) +# def test_hessian(basis, atsyms, atcoords, coord_type, hessian): +# r""" +# Test gbasis.integrals.libcint.CBasis Hessians against ???. +# +# """ +# +# atol, rtol = 1e-4, 1e-4 +# +# atcoords = atcoords / 0.5291772083 +# +# atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) +# +# basis_dict = parse_nwchem(find_datafile(basis)) +# +# py_basis = make_contractions(basis_dict, atsyms, atcoords) +# +# lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) +# +# if hessian == "d2_olp": +# lc_int = lc_basis.d2_olp() +# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3, lc_basis.natm, 3)) +# +# elif hessian == "d2_kin": +# lc_int = lc_basis.d2_kin() +# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3, lc_basis.natm, 3)) +# +# elif hessian == "d2_nuc": +# lc_int = lc_basis.d2_nuc() +# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3, lc_basis.natm, 3)) +# +# else: +# raise ValueError("Invalid gradient name '{integral}' passed") +# +# # npt.assert_allclose(lc_grad, py_grad, atol=atol, rtol=rtol) From c182af49f1e3443739f3f0a46c3981afe55a4e72 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 7 Dec 2023 18:02:28 -0500 Subject: [PATCH 47/72] Add facilities for auto-generating integrals --- tools/auto_intor_modify.py | 16 ++++++++++++++++ tools/install_libcint.sh | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 tools/auto_intor_modify.py diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py new file mode 100644 index 00000000..6cf7db4a --- /dev/null +++ b/tools/auto_intor_modify.py @@ -0,0 +1,16 @@ +import sys + + +old = '(gen-cint "intor1.c"' + + +new = f'{old}\n' +new += ' \'("int1e_mom" ( \\| p))' + + +with open(sys.argv[1], 'r') as f: + txt = f.read() + + +with open(sys.argv[1], 'w') as f: + f.write(txt.replace(old, new)) diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index 5fdd5469..e53d2d1c 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -10,6 +10,18 @@ echo '' echo ' https://theochem.github.io/gbasis/PLACEHOLDER/' echo '' +# Check that a Common Lisp program is installed +if command -v sbcl > /dev/null; then + lisp_program='sbcl --script' +elif command -v clisp > /dev/null; then + lisp_program='clisp' +else + echo 'ERROR: This script requires a Common Lisp interpreter.' + echo ' Please install either sbcl or clisp and try again.' + echo '' + exit 1 +fi + # Terminate script if any command fails set -e @@ -39,6 +51,13 @@ cd "${gbasis_dir}/build" git clone http://github.com/sunqm/libcint.git cd libcint +# Auto-generate integrals +cd scripts +python ../../../tools/auto_intor_modify.py auto_intor.cl +${lisp_program} auto_intor.cl +mv *.c ../src/autocode +cd .. + # Setup Libcint build mkdir build cd build From d87fa93060997a87aadcd5c5e649374738d613da Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Fri, 8 Dec 2023 11:16:11 -0500 Subject: [PATCH 48/72] Add cmplx ints incl. momentum (has bad ordering) --- gbasis/integrals/libcint.py | 40 +++++++++++++++++++++++++++---------- tests/test_libcint.py | 7 +++++++ 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 7f33709a..ec7a3d37 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -324,10 +324,11 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # Save integral functions if coord_type == "cartesian": # Integrals - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart, comp=(1,)) - self.kin = self.make_int1e(LIBCINT.int1e_kin_cart, comp=(1,)) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart, comp=(1,)) - self.eri = self.make_int2e(LIBCINT.int2e_cart, comp=(1,)) + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart) + self.kin = self.make_int1e(LIBCINT.int1e_kin_cart) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart) + self.mom = self.make_int1e(LIBCINT.int1e_mom_cart, comp=(3,), imag=True) + self.eri = self.make_int2e(LIBCINT.int2e_cart) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=(self.natm, 3)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=(self.natm, 3)) @@ -338,10 +339,11 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, comp=(self.natm, 3, self.natm, 3)) else: # Integrals - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph, comp=(1,)) - self.kin = self.make_int1e(LIBCINT.int1e_kin_sph, comp=(1,)) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph, comp=(1,)) - self.eri = self.make_int2e(LIBCINT.int2e_sph, comp=(1,)) + self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) + self.kin = self.make_int1e(LIBCINT.int1e_kin_sph) + self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph) + self.mom = self.make_int1e(LIBCINT.int1e_mom_sph, comp=(3,), imag=True) + self.eri = self.make_int2e(LIBCINT.int2e_sph) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=(self.natm, 3)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=(self.natm, 3)) @@ -351,7 +353,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, comp=(self.natm, 3, self.natm, 3)) self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, comp=(self.natm, 3, self.natm, 3)) - def make_int1e(self, func, comp=(1,)): + def make_int1e(self, func, comp=(1,), imag=False): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -363,6 +365,8 @@ def make_int1e(self, func, comp=(1,)): Shape of components in each integral element. E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. + imag : bool, default=False + Whether the components in each integral element are complex. """ # Handle multi-component integral values @@ -370,6 +374,8 @@ def make_int1e(self, func, comp=(1,)): comp_is_1 = prod_comp == 1 if comp_is_1: comp = (1,) + if imag: + prod_comp *= 2 out_shape = (self.nbfn, self.nbfn, prod_comp) buf_shape = prod_comp * self.max_mult ** 2 @@ -406,13 +412,18 @@ def int1e(): jpos += q_off # Iterate `ipos` ipos += p_off + + # Cast `out` to complex if `imag` is set + if imag: + out = out.view(np.complex_) + # Return integrals in `out` array return out.squeeze(axis=2) if comp_is_1 else out.reshape(self.nbfn, self.nbfn, *comp) # Return instance-bound integral method return int1e - def make_int2e(self, func, comp=(1,)): + def make_int2e(self, func, comp=(1,), imag=False): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -424,6 +435,8 @@ def make_int2e(self, func, comp=(1,)): Shape of components in each integral element. E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. + imag : bool, default=False + Whether the components in each integral element are complex. """ # Handle multi-component integral values @@ -431,6 +444,8 @@ def make_int2e(self, func, comp=(1,)): comp_is_1 = prod_comp == 1 if comp_is_1: comp = (1,) + if imag: + prod_comp *= 2 out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, prod_comp) buf_shape = prod_comp * self.max_mult ** 4 @@ -504,6 +519,11 @@ def int2e(notation="physicist"): jpos += q_off # Iterate `ipos` ipos += p_off + + # Cast `out` to complex if `imag` is set + if imag: + out = out.view(np.complex_) + # Return integrals in `out` array if physicist: out = out.transpose(0, 2, 1, 3, 4) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 03ef9d1a..b175eebb 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -50,6 +50,7 @@ pytest.param("olp", id="Overlap"), pytest.param("kin", id="KineticEnergy"), pytest.param("nuc", id="NuclearAttraction"), + pytest.param("mom", id="Momentum"), pytest.param("eri", id="ElectronRepulsion"), pytest.param("pntchrg", id="PointCharge"), ] @@ -115,6 +116,12 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): lc_int = lc_basis.nuc() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) + elif integral == "mom": + py_int = momentum_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + lc_int = lc_basis.mom() + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + elif integral == "eri": py_int = electron_repulsion_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) From 019c62aba1a8a34e4797e6632d6754f466b05887 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sun, 10 Dec 2023 13:01:11 -0500 Subject: [PATCH 49/72] Add more integrals --- gbasis/integrals/libcint.py | 193 ++++++++++++++++++++++++++---------- tests/test_libcint.py | 9 +- tools/auto_intor_modify.py | 2 +- tools/install_libcint.sh | 9 +- 4 files changed, 153 insertions(+), 60 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index ec7a3d37..e10ff7b6 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -327,33 +327,43 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart) self.kin = self.make_int1e(LIBCINT.int1e_kin_cart) self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart) - self.mom = self.make_int1e(LIBCINT.int1e_mom_cart, comp=(3,), imag=True) + self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_cart, components=(3,), is_complex=True, origin=True) + self.mom = self.make_int1e(LIBCINT.int1e_mom_cart, components=(3,), is_complex=True, origin=True) + self.moment1 = self.make_int1e(LIBCINT.int1e_r_cart, components=(3,), is_complex=True, origin=True) + self.moment2 = self.make_int1e(LIBCINT.int1e_rr_cart, components=(3,), is_complex=True, origin=True) + self.moment3 = self.make_int1e(LIBCINT.int1e_rrr_cart, components=(3,), is_complex=True, origin=True) + self.moment4 = self.make_int1e(LIBCINT.int1e_rrrr_cart, components=(3,), is_complex=True, origin=True) self.eri = self.make_int2e(LIBCINT.int2e_cart) # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, comp=(self.natm, 3)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, comp=(self.natm, 3)) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, comp=(self.natm, 3)) + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, components=(self.natm, 3)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, components=(self.natm, 3)) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, components=(self.natm, 3)) # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, comp=(self.natm, 3, self.natm, 3)) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, comp=(self.natm, 3, self.natm, 3)) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, comp=(self.natm, 3, self.natm, 3)) + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, components=(self.natm, 3, self.natm, 3)) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, components=(self.natm, 3, self.natm, 3)) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, components=(self.natm, 3, self.natm, 3)) else: # Integrals self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) self.kin = self.make_int1e(LIBCINT.int1e_kin_sph) self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph) - self.mom = self.make_int1e(LIBCINT.int1e_mom_sph, comp=(3,), imag=True) + self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_sph, components=(3,), is_complex=True, origin=True) + self.mom = self.make_int1e(LIBCINT.int1e_mom_sph, components=(3,), is_complex=True, origin=True) + self.moment1 = self.make_int1e(LIBCINT.int1e_r_sph, components=(3,), is_complex=True, origin=True) + self.moment2 = self.make_int1e(LIBCINT.int1e_rr_sph, components=(3,), is_complex=True, origin=True) + self.moment3 = self.make_int1e(LIBCINT.int1e_rrr_sph, components=(3,), is_complex=True, origin=True) + self.moment4 = self.make_int1e(LIBCINT.int1e_rrrr_sph, components=(3,), is_complex=True, origin=True) self.eri = self.make_int2e(LIBCINT.int2e_sph) # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, comp=(self.natm, 3)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, comp=(self.natm, 3)) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, comp=(self.natm, 3)) + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, components=(self.natm, 3)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, components=(self.natm, 3)) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, components=(self.natm, 3)) # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, comp=(self.natm, 3, self.natm, 3)) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, comp=(self.natm, 3, self.natm, 3)) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, comp=(self.natm, 3, self.natm, 3)) + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, components=(self.natm, 3, self.natm, 3)) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, components=(self.natm, 3, self.natm, 3)) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, components=(self.natm, 3, self.natm, 3)) - def make_int1e(self, func, comp=(1,), imag=False): + def make_int1e(self, func, components=tuple(), is_complex=False, origin=False, inv_origin=False): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -361,31 +371,66 @@ def make_int1e(self, func, comp=(1,), imag=False): ---------- func : callable ``libcint`` function. - comp : tuple, default=(1,) + components : tuple, default=() Shape of components in each integral element. - E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, - ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. - imag : bool, default=False + E.g., for normal integrals, ``comp=()``, while for nuclear gradients, + ``components=(Natm, 3)``, and for nuclear Hessians, ``components=(Natm, Natm, 3, 3)``, etc. + is_complex : bool, default=False Whether the components in each integral element are complex. + origin : bool, default=False + Whether you must specify an origin ``R`` for the integral computation. + inv_origin : bool, default=False + Whether you must specify an origin ``1 / |r - R|`` for the integral computation. """ # Handle multi-component integral values - prod_comp = np.prod(comp) - comp_is_1 = prod_comp == 1 - if comp_is_1: - comp = (1,) - if imag: - prod_comp *= 2 - out_shape = (self.nbfn, self.nbfn, prod_comp) + if len(components) == 0: + components = (1,) + no_comp = True + else: + no_comp = False + if is_complex: + components += (2,) + prod_comp = np.prod(components, dtype=int) + out_shape = (self.nbfn, self.nbfn) + components buf_shape = prod_comp * self.max_mult ** 2 + # Handle [inv_]origin argument (prevent shadowing) + has_origin_arg = bool(origin) + has_inv_origin_arg = bool(inv_origin) + # Make instance-bound integral method - def int1e(): + def int1e(notation="physicist", origin=None, inv_origin=None): + + # Handle ``notation`` argument + if notation not in ("physicist", "chemist"): + raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") + + # Handle origin argument + if has_origin_arg: + if origin is None: + raise ValueError("``origin`` must be specified") + else: + self.env[1:4] = origin + elif origin is not None: + raise ValueError("``origin`` must not be specified") + + # Handle inv_origin argument + if has_inv_origin_arg: + if inv_origin is None: + raise ValueError("``inv_origin`` must be specified") + else: + self.env[4:7] = inv_origin + elif inv_origin is not None: + raise ValueError("``inv_origin`` must not be specified") + # Make output array out = np.zeros(out_shape, dtype=c_double) + # Make temporary arrays buf = np.zeros(buf_shape, dtype=c_double) shls = np.zeros(2, dtype=c_int) + # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): @@ -403,7 +448,7 @@ def int1e(): for q in range(q_off): j_off = q + jpos buf_off = prod_comp * (q * p_off + p) - val = buf[buf_off:buf_off + prod_comp] + val = buf[buf_off:buf_off + prod_comp].reshape(*components, order="F") out[i_off, j_off] = val out[j_off, i_off] = val # Reset `buf` @@ -413,17 +458,21 @@ def int1e(): # Iterate `ipos` ipos += p_off - # Cast `out` to complex if `imag` is set - if imag: - out = out.view(np.complex_) + # Cast `out` to complex if `is_complex` is set + if is_complex: + out = out.reshape(*out.shape[:-2], out.shape[-2] * 2).view(np.complex_) + + # Remove useless axis in `out` if no `components` was given + if no_comp: + out = out.squeeze(axis=-1) # Return integrals in `out` array - return out.squeeze(axis=2) if comp_is_1 else out.reshape(self.nbfn, self.nbfn, *comp) + return out # Return instance-bound integral method return int1e - def make_int2e(self, func, comp=(1,), imag=False): + def make_int2e(self, func, components=tuple(), is_complex=False, origin=False, inv_origin=False): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -431,26 +480,37 @@ def make_int2e(self, func, comp=(1,), imag=False): ---------- func : callable ``libcint`` function. - comp : tuple, default=(1,) + components : tuple, default=() Shape of components in each integral element. - E.g., for normal integrals, ``comp=(1,)``, while for nuclear gradients, - ``comp=(Natm, 3)``, and for nuclear Hessians, ``comp=(Natm, Natm, 3, 3)``, etc. - imag : bool, default=False + E.g., for normal integrals, ``components=(1,)``, while for nuclear gradients, + ``components=(Natm, 3)``, and for nuclear Hessians, ``components=(Natm, Natm, 3, 3)``, etc. + is_complex : bool, default=False Whether the components in each integral element are complex. + origin : bool, default=False + Whether you must specify an origin ``R`` for the integral computation. + inv_origin : bool, default=False + Whether you must specify an origin ``1 / |r - R|`` for the integral computation. """ # Handle multi-component integral values - prod_comp = np.prod(comp) - comp_is_1 = prod_comp == 1 - if comp_is_1: - comp = (1,) - if imag: - prod_comp *= 2 - out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn, prod_comp) + if len(components) == 0: + components = (1,) + no_comp = True + else: + no_comp = False + if is_complex: + components += (2,) + prod_comp = np.prod(components, dtype=int) + out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn) + components buf_shape = prod_comp * self.max_mult ** 4 + # Handle [inv_]origin argument (prevent shadowing) + has_origin_arg = bool(origin) + has_inv_origin_arg = bool(inv_origin) + # Make instance-bound integral method - def int2e(notation="physicist"): + def int2e(notation="physicist", origin=None, inv_origin=None): + # Handle ``notation`` argument if notation == "physicist": physicist = True @@ -458,11 +518,31 @@ def int2e(notation="physicist"): physicist = False else: raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") + + # Handle origin argument + if has_origin_arg: + if origin is None: + raise ValueError("``origin`` must be specified") + else: + self.env[1:4] = origin + elif origin is not None: + raise ValueError("``origin`` must not be specified") + + # Handle inv_origin argument + if has_inv_origin_arg: + if inv_origin is None: + raise ValueError("``inv_origin`` must be specified") + else: + self.env[4:7] = inv_origin + elif inv_origin is not None: + raise ValueError("``inv_origin`` must not be specified") + # Make output array out = np.zeros(out_shape, dtype=c_double) # Make temporary arrays buf = np.zeros(buf_shape, dtype=c_double) shls = np.zeros(4, dtype=c_int) + # Evaluate the integral function over all shells ipos = 0 for ishl in range(self.nbas): @@ -500,7 +580,7 @@ def int2e(notation="physicist"): r * (q_off * p_off) + q * (p_off) + p) - val = buf[buf_off:buf_off + prod_comp] + val = buf[buf_off:buf_off + prod_comp].reshape(*components) out[i_off, j_off, k_off, l_off] = val out[i_off, j_off, l_off, k_off] = val out[j_off, i_off, k_off, l_off] = val @@ -520,17 +600,20 @@ def int2e(notation="physicist"): # Iterate `ipos` ipos += p_off - # Cast `out` to complex if `imag` is set - if imag: - out = out.view(np.complex_) + # Cast `out` to complex if `is_complex` is set + if is_complex: + out = out.reshape(*out.shape[:-2], out.shape[-2] * 2).view(np.complex_) - # Return integrals in `out` array + # Remove useless axis in `out` if no `components` was given + if no_comp: + out = out.squeeze(axis=-1) + + # Transpose integrals in `out` array to proper notation if physicist: - out = out.transpose(0, 2, 1, 3, 4) - if comp_is_1: - return out.squeeze(axis=4) - else: - return out.reshape(self.nbfn, self.nbfn, self.nbfn, self.nbfn, *comp) + out = out.transpose(0, 2, 1, 3) + + # Return integrals in `out` array + return out # Return instance-bound integral method return int2e diff --git a/tests/test_libcint.py b/tests/test_libcint.py index b175eebb..bdf5edfd 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -50,6 +50,7 @@ pytest.param("olp", id="Overlap"), pytest.param("kin", id="KineticEnergy"), pytest.param("nuc", id="NuclearAttraction"), + pytest.param("amom", id="AngularMomentum"), pytest.param("mom", id="Momentum"), pytest.param("eri", id="ElectronRepulsion"), pytest.param("pntchrg", id="PointCharge"), @@ -116,10 +117,16 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): lc_int = lc_basis.nuc() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) + elif integral == "amom": + py_int = angular_momentum_integral(py_basis, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + lc_int = lc_basis.amom(origin=np.zeros(3)) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + elif integral == "mom": py_int = momentum_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - lc_int = lc_basis.mom() + lc_int = lc_basis.mom(origin=np.zeros(3)) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) elif integral == "eri": diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py index 6cf7db4a..54df60a3 100644 --- a/tools/auto_intor_modify.py +++ b/tools/auto_intor_modify.py @@ -5,7 +5,7 @@ new = f'{old}\n' -new += ' \'("int1e_mom" ( \\| p))' +new += ' \'("int1e_mom" (#C(-1 0) \\| p))' with open(sys.argv[1], 'r') as f: diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index e53d2d1c..2e50d436 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -3,7 +3,7 @@ # Notice for user echo '' echo ' NOTE: If this script has been run previously, and it failed, please ensure' -echo ' the `build/libcint` directory is removed before running it again.' +echo ' the `build/libcint/build` directory is removed before running it again.' echo '' echo ' See the GBasis documentation for help:' echo '' @@ -30,7 +30,7 @@ gbasis_dir=$(cd "$(dirname "$(dirname "${0}")")" && pwd) # Cleanup function; runs on failure or exit cleanup() { - rm -rf "${gbasis_dir}/build/libcint" + rm -rf "${gbasis_dir}/build/libcint/build" } trap cleanup EXIT @@ -48,8 +48,11 @@ mkdir -p "${gbasis_dir}/build" cd "${gbasis_dir}/build" # Clone Libcint Git repo and enter it -git clone http://github.com/sunqm/libcint.git +if [ ! -e "${gbasis_dir}/build/libcint" ]; then + git clone http://github.com/sunqm/libcint.git +fi cd libcint +git checkout . # Auto-generate integrals cd scripts From b487dbae665ac1a34f436b86d33bc620df1f738d Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sun, 10 Dec 2023 17:36:56 -0500 Subject: [PATCH 50/72] Change grad/hess shape based on libcint docs --- gbasis/integrals/libcint.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index e10ff7b6..8f80b211 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -335,13 +335,13 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.moment4 = self.make_int1e(LIBCINT.int1e_rrrr_cart, components=(3,), is_complex=True, origin=True) self.eri = self.make_int2e(LIBCINT.int2e_cart) # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, components=(self.natm, 3)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, components=(self.natm, 3)) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, components=(self.natm, 3)) + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, components=(3,)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, components=(3)) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, components=(3,)) # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, components=(self.natm, 3, self.natm, 3)) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, components=(self.natm, 3, self.natm, 3)) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, components=(self.natm, 3, self.natm, 3)) + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, components=(3, 3)) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, components=(3, 3)) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, components=(3, 3)) else: # Integrals self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) @@ -355,13 +355,13 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.moment4 = self.make_int1e(LIBCINT.int1e_rrrr_sph, components=(3,), is_complex=True, origin=True) self.eri = self.make_int2e(LIBCINT.int2e_sph) # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, components=(self.natm, 3)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, components=(self.natm, 3)) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, components=(self.natm, 3)) + self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, components=(3,)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, components=(3)) + self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, components=(3,)) # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, components=(self.natm, 3, self.natm, 3)) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, components=(self.natm, 3, self.natm, 3)) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, components=(self.natm, 3, self.natm, 3)) + self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, components=(3, 3)) + self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, components=(3, 3)) + self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, components=(3, 3)) def make_int1e(self, func, components=tuple(), is_complex=False, origin=False, inv_origin=False): r""" From 32b121161ed9670b3550153e47b21f2c34abb425 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 11 Dec 2023 10:53:28 -0500 Subject: [PATCH 51/72] Add 2-electron repulsion Hessian --- gbasis/integrals/libcint.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 8f80b211..53b40b3b 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -338,10 +338,12 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, components=(3,)) self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, components=(3)) self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, components=(3,)) + self.d_eri = self.make_int2e(LIBCINT.int2e_ip1_cart, components=(3,)) # Hessians self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, components=(3, 3)) self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, components=(3, 3)) self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, components=(3, 3)) + self.d2_eri = self.make_int2e(LIBCINT.int2e_ipip1_cart, components=(3, 3)) else: # Integrals self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) @@ -356,12 +358,14 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.eri = self.make_int2e(LIBCINT.int2e_sph) # Gradients self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, components=(3,)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, components=(3)) + self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, components=(3,)) self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, components=(3,)) + self.d_eri = self.make_int2e(LIBCINT.int2e_ip1_sph, components=(3,)) # Hessians self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, components=(3, 3)) self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, components=(3, 3)) self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, components=(3, 3)) + self.d2_eri = self.make_int2e(LIBCINT.int2e_ipip1_sph, components=(3, 3)) def make_int1e(self, func, components=tuple(), is_complex=False, origin=False, inv_origin=False): r""" From 207d0b80725a08b8e8fc782189fe6cc98a19bc73 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 11 Dec 2023 11:39:23 -0500 Subject: [PATCH 52/72] Make use of allocated CINTOptimizer w/ contextmgr --- gbasis/integrals/libcint.py | 335 +++++++++++++++++++++--------------- 1 file changed, 200 insertions(+), 135 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 53b40b3b..b935d203 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -3,7 +3,9 @@ """ -from ctypes import CDLL, cdll, c_int, c_double, c_void_p +from contextlib import contextmanager + +from ctypes import CDLL, POINTER, Structure, cdll, byref, c_int, c_double, c_void_p from itertools import chain @@ -54,6 +56,13 @@ """ +OPTIMIZER_REGEX = re.compile(r'^(?=.*optimizer$)int[12]e.+') +r""" +Regex for matching ``libcint`` optimizer functions. + +""" + + def ndptr(enable_null=False, **kwargs): r""" Wrapped ``numpy.ctypeslib.ndpointer`` that accepts null pointers. @@ -73,6 +82,27 @@ def from_param(cls, obj): return type(base.__name__, (base,), {'from_param': classmethod(from_param)}) +class PairData(Structure): + r"""``libcint`` ``PairData`` class.""" + _fields_ = [ + ("rij", c_double * 3), + ("eij", c_double), + ("cceij", c_double), + ] + + +class CINTOpt(Structure): + r"""``libcint`` ``CINTOpt`` class.""" + _fields_ = [ + ("index_xyz_array", POINTER(POINTER(c_int))), + ("non0ctr", POINTER(POINTER(c_int))), + ("sortedidx", POINTER(POINTER(c_int))), + ("nbas", c_int), + ("log_max_coeff", POINTER(POINTER(c_double))), + ("pairdata", POINTER(POINTER(PairData))), + ] + + class _LibCInt: r""" ``libcint`` shared library helper class for generating C function bindings. @@ -104,7 +134,14 @@ def __init__(self): Singleton class inializer. """ - self._cache = dict() + # Make the bound C functions we'll always need here + cfunc = self._libcint.CINTdel_optimizer + cfunc.argtypes = (POINTER(POINTER(CINTOpt)),) + + # Set up the cache + self._cache = { + "CINTdel_optimizer": cfunc, + } def __getattr__(self, attr): r""" @@ -135,7 +172,7 @@ def __getattr__(self, attr): cfunc = getattr(self._libcint, attr) cfunc.argtypes = ( # out - ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), # dims ndptr(enable_null=True, dtype=c_int, ndim=1, flags=('C_CONTIGUOUS')), # shls @@ -151,12 +188,30 @@ def __getattr__(self, attr): # env ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), # opt - ndptr(enable_null=True, dtype=c_void_p, ndim=1, flags=('C_CONTIGUOUS',)), + POINTER(CINTOpt), # cache ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), ) cfunc.restype = c_int + elif OPTIMIZER_REGEX.match(attr): + # Make the bound C function + cfunc = getattr(self._libcint, attr) + cfunc.argtypes = ( + # opt + POINTER(POINTER(CINTOpt)), + # atm + ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # natm + c_int, + # bas + ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + # nbas + c_int, + # env + ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + ) + else: raise ValueError(f'there is no ``gbasis`` API for the function {attr}') @@ -321,60 +376,60 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.mults = mults self.max_mult = max(mults) - # Save integral functions - if coord_type == "cartesian": - # Integrals - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_cart) - self.kin = self.make_int1e(LIBCINT.int1e_kin_cart) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_cart) - self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_cart, components=(3,), is_complex=True, origin=True) - self.mom = self.make_int1e(LIBCINT.int1e_mom_cart, components=(3,), is_complex=True, origin=True) - self.moment1 = self.make_int1e(LIBCINT.int1e_r_cart, components=(3,), is_complex=True, origin=True) - self.moment2 = self.make_int1e(LIBCINT.int1e_rr_cart, components=(3,), is_complex=True, origin=True) - self.moment3 = self.make_int1e(LIBCINT.int1e_rrr_cart, components=(3,), is_complex=True, origin=True) - self.moment4 = self.make_int1e(LIBCINT.int1e_rrrr_cart, components=(3,), is_complex=True, origin=True) - self.eri = self.make_int2e(LIBCINT.int2e_cart) - # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_cart, components=(3,)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_cart, components=(3)) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_cart, components=(3,)) - self.d_eri = self.make_int2e(LIBCINT.int2e_ip1_cart, components=(3,)) - # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_cart, components=(3, 3)) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_cart, components=(3, 3)) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_cart, components=(3, 3)) - self.d2_eri = self.make_int2e(LIBCINT.int2e_ipip1_cart, components=(3, 3)) - else: - # Integrals - self.olp = self.make_int1e(LIBCINT.int1e_ovlp_sph) - self.kin = self.make_int1e(LIBCINT.int1e_kin_sph) - self.nuc = self.make_int1e(LIBCINT.int1e_nuc_sph) - self.amom = self.make_int1e(LIBCINT.int1e_giao_irjxp_sph, components=(3,), is_complex=True, origin=True) - self.mom = self.make_int1e(LIBCINT.int1e_mom_sph, components=(3,), is_complex=True, origin=True) - self.moment1 = self.make_int1e(LIBCINT.int1e_r_sph, components=(3,), is_complex=True, origin=True) - self.moment2 = self.make_int1e(LIBCINT.int1e_rr_sph, components=(3,), is_complex=True, origin=True) - self.moment3 = self.make_int1e(LIBCINT.int1e_rrr_sph, components=(3,), is_complex=True, origin=True) - self.moment4 = self.make_int1e(LIBCINT.int1e_rrrr_sph, components=(3,), is_complex=True, origin=True) - self.eri = self.make_int2e(LIBCINT.int2e_sph) - # Gradients - self.d_olp = self.make_int1e(LIBCINT.int1e_ipovlp_sph, components=(3,)) - self.d_nuc = self.make_int1e(LIBCINT.int1e_ipnuc_sph, components=(3,)) - self.d_kin = self.make_int1e(LIBCINT.int1e_ipkin_sph, components=(3,)) - self.d_eri = self.make_int2e(LIBCINT.int2e_ip1_sph, components=(3,)) - # Hessians - self.d2_olp = self.make_int1e(LIBCINT.int1e_ipipovlp_sph, components=(3, 3)) - self.d2_nuc = self.make_int1e(LIBCINT.int1e_ipipnuc_sph, components=(3, 3)) - self.d2_kin = self.make_int1e(LIBCINT.int1e_ipipkin_sph, components=(3, 3)) - self.d2_eri = self.make_int2e(LIBCINT.int2e_ipip1_sph, components=(3, 3)) - - def make_int1e(self, func, components=tuple(), is_complex=False, origin=False, inv_origin=False): + # Integrals + self.olp = self.make_int1e("int1e_ovlp") + self.kin = self.make_int1e("int1e_kin") + self.nuc = self.make_int1e("int1e_nuc") + self.amom = self.make_int1e("int1e_giao_irjxp", components=(3,), is_complex=True, origin=True) + self.mom = self.make_int1e("int1e_mom", components=(3,), is_complex=True, origin=True) + self.moment1 = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) + self.moment2 = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) + self.moment3 = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) + self.moment4 = self.make_int1e("int1e_rrrr", components=(3,), is_complex=True, origin=True) + self.eri = self.make_int2e("int2e") + # Gradients + self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) + self.d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) + self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) + self.d_eri = self.make_int2e("int2e_ip1", components=(3,)) + # Hessians + self.d2_olp = self.make_int1e("int1e_ipipovlp", components=(3, 3)) + self.d2_nuc = self.make_int1e("int1e_ipipnuc", components=(3, 3)) + self.d2_kin = self.make_int1e("int1e_ipipkin", components=(3, 3)) + self.d2_eri = self.make_int2e("int2e_ipip1", components=(3, 3)) + + @contextmanager + def optimizer(self, opt_func): + r""" + Create an optimizer in a memory-safe manner. + + Parameters + ---------- + opt_init_func : callable + A ``libcint`` optimizer C function. + + Yields + ------ + opt : pointer(pointer(CINTOpt)) + An initialized optimizer pointer. + + """ + # Initialize optimizer + opt = POINTER(CINTOpt)() + opt_func(byref(opt), self.atm, self.natm, self.bas, self.nbas, self.env) + # Return optimizer for use in calling function + yield opt + # Free optimizer from memory (always called) + LIBCINT.CINTdel_optimizer(byref(opt)) + + def make_int1e(self, func_name, components=tuple(), is_complex=False, origin=False, inv_origin=False): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. Parameters ---------- - func : callable - ``libcint`` function. + func_name : str + ``libcint`` function name. components : tuple, default=() Shape of components in each integral element. E.g., for normal integrals, ``comp=()``, while for nuclear gradients, @@ -387,6 +442,10 @@ def make_int1e(self, func, components=tuple(), is_complex=False, origin=False, i Whether you must specify an origin ``1 / |r - R|`` for the integral computation. """ + # Get C functions + func = LIBCINT[func_name + ("_cart" if self.coord_type == "cartesian" else "_sph")] + opt_func = LIBCINT[func_name + "_optimizer"] + # Handle multi-component integral values if len(components) == 0: components = (1,) @@ -436,31 +495,32 @@ def int1e(notation="physicist", origin=None, inv_origin=None): shls = np.zeros(2, dtype=c_int) # Evaluate the integral function over all shells - ipos = 0 - for ishl in range(self.nbas): - shls[0] = ishl - p_off = self.mults[ishl] - jpos = 0 - for jshl in range(ishl + 1): - shls[1] = jshl - q_off = self.mults[jshl] - # Call the C function to fill `buf` - func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None, None) - # Fill `out` array - for p in range(p_off): - i_off = p + ipos - for q in range(q_off): - j_off = q + jpos - buf_off = prod_comp * (q * p_off + p) - val = buf[buf_off:buf_off + prod_comp].reshape(*components, order="F") - out[i_off, j_off] = val - out[j_off, i_off] = val - # Reset `buf` - buf[:] = 0 - # Iterate `jpos` - jpos += q_off - # Iterate `ipos` - ipos += p_off + with self.optimizer(opt_func) as opt: + ipos = 0 + for ishl in range(self.nbas): + shls[0] = ishl + p_off = self.mults[ishl] + jpos = 0 + for jshl in range(ishl + 1): + shls[1] = jshl + q_off = self.mults[jshl] + # Call the C function to fill `buf` + func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) + # Fill `out` array + for p in range(p_off): + i_off = p + ipos + for q in range(q_off): + j_off = q + jpos + buf_off = prod_comp * (q * p_off + p) + val = buf[buf_off:buf_off + prod_comp].reshape(*components, order="F") + out[i_off, j_off] = val + out[j_off, i_off] = val + # Reset `buf` + buf[:] = 0 + # Iterate `jpos` + jpos += q_off + # Iterate `ipos` + ipos += p_off # Cast `out` to complex if `is_complex` is set if is_complex: @@ -476,14 +536,14 @@ def int1e(notation="physicist", origin=None, inv_origin=None): # Return instance-bound integral method return int1e - def make_int2e(self, func, components=tuple(), is_complex=False, origin=False, inv_origin=False): + def make_int2e(self, func_name, components=tuple(), is_complex=False, origin=False, inv_origin=False): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. Parameters ---------- - func : callable - ``libcint`` function. + func_name : str + ``libcint`` function name. components : tuple, default=() Shape of components in each integral element. E.g., for normal integrals, ``components=(1,)``, while for nuclear gradients, @@ -496,6 +556,10 @@ def make_int2e(self, func, components=tuple(), is_complex=False, origin=False, i Whether you must specify an origin ``1 / |r - R|`` for the integral computation. """ + # Get C functions + func = LIBCINT[func_name + ("_cart" if self.coord_type == "cartesian" else "_sph")] + opt_func = LIBCINT[func_name + "_optimizer"] + # Handle multi-component integral values if len(components) == 0: components = (1,) @@ -548,61 +612,62 @@ def int2e(notation="physicist", origin=None, inv_origin=None): shls = np.zeros(4, dtype=c_int) # Evaluate the integral function over all shells - ipos = 0 - for ishl in range(self.nbas): - shls[0] = ishl - p_off = self.mults[ishl] - jpos = 0 - for jshl in range(ishl + 1): - ij = ((ishl + 1) * ishl) // 2 + jshl - shls[1] = jshl - q_off = self.mults[jshl] - kpos = 0 - for kshl in range(self.nbas): - shls[2] = kshl - r_off = self.mults[kshl] - lpos = 0 - for lshl in range(kshl + 1): - kl = ((kshl + 1) * kshl) // 2 + lshl - shls[3] = lshl - s_off = self.mults[lshl] - if ij < kl: + with self.optimizer(opt_func) as opt: + ipos = 0 + for ishl in range(self.nbas): + shls[0] = ishl + p_off = self.mults[ishl] + jpos = 0 + for jshl in range(ishl + 1): + ij = ((ishl + 1) * ishl) // 2 + jshl + shls[1] = jshl + q_off = self.mults[jshl] + kpos = 0 + for kshl in range(self.nbas): + shls[2] = kshl + r_off = self.mults[kshl] + lpos = 0 + for lshl in range(kshl + 1): + kl = ((kshl + 1) * kshl) // 2 + lshl + shls[3] = lshl + s_off = self.mults[lshl] + if ij < kl: + lpos += s_off + continue + # Call the C function to fill `buf` + func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) + # Fill `out` array + for p in range(p_off): + i_off = p + ipos + for q in range(q_off): + j_off = q + jpos + for r in range(r_off): + k_off = r + kpos + for s in range(s_off): + l_off = s + lpos + buf_off = prod_comp * (s * (r_off * q_off * p_off) + + r * (q_off * p_off) + + q * (p_off) + + p) + val = buf[buf_off:buf_off + prod_comp].reshape(*components) + out[i_off, j_off, k_off, l_off] = val + out[i_off, j_off, l_off, k_off] = val + out[j_off, i_off, k_off, l_off] = val + out[j_off, i_off, l_off, k_off] = val + out[k_off, l_off, i_off, j_off] = val + out[k_off, l_off, j_off, i_off] = val + out[l_off, k_off, i_off, j_off] = val + out[l_off, k_off, j_off, i_off] = val + # Reset `buf` + buf[:] = 0 + # Iterate `lpos` lpos += s_off - continue - # Call the C function to fill `buf` - func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None, None) - # Fill `out` array - for p in range(p_off): - i_off = p + ipos - for q in range(q_off): - j_off = q + jpos - for r in range(r_off): - k_off = r + kpos - for s in range(s_off): - l_off = s + lpos - buf_off = prod_comp * (s * (r_off * q_off * p_off) + - r * (q_off * p_off) + - q * (p_off) + - p) - val = buf[buf_off:buf_off + prod_comp].reshape(*components) - out[i_off, j_off, k_off, l_off] = val - out[i_off, j_off, l_off, k_off] = val - out[j_off, i_off, k_off, l_off] = val - out[j_off, i_off, l_off, k_off] = val - out[k_off, l_off, i_off, j_off] = val - out[k_off, l_off, j_off, i_off] = val - out[l_off, k_off, i_off, j_off] = val - out[l_off, k_off, j_off, i_off] = val - # Reset `buf` - buf[:] = 0 - # Iterate `lpos` - lpos += s_off - # Iterate `kpos` - kpos += r_off - # Iterate `jpos` - jpos += q_off - # Iterate `ipos` - ipos += p_off + # Iterate `kpos` + kpos += r_off + # Iterate `jpos` + jpos += q_off + # Iterate `ipos` + ipos += p_off # Cast `out` to complex if `is_complex` is set if is_complex: From 1699a9c21a1c8f6255e68e90b19a87a5d81dd2c8 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 11 Dec 2023 11:43:37 -0500 Subject: [PATCH 53/72] Add optimizer for custom point-charge impl. --- gbasis/integrals/libcint.py | 52 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index b935d203..62d56015 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -697,34 +697,36 @@ def pntchrg(self, point_coords, point_charges): shls = np.zeros(2, dtype=c_int) # Evaluate the integral function over all shells func = LIBCINT["int1e_rinv_cart" if self.coord_type == "cartesian" else "int1e_rinv_sph"] + opt_func = LIBCINT["int1e_rinv_optimizer"] for icharge, (coord, charge) in enumerate(zip(point_coords, point_charges)): # Set R_O of 1/|r - R_O| self.env[4:7] = coord - ipos = 0 - for ishl in range(self.nbas): - shls[0] = ishl - p_off = self.mults[ishl] - jpos = 0 - for jshl in range(ishl + 1): - shls[1] = jshl - q_off = self.mults[jshl] - # Call the C function to fill `buf` - func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, None, None) - # Fill `out` array - for p in range(p_off): - i_off = p + ipos - for q in range(q_off): - j_off = q + jpos - val = buf[q * p_off + p] * -charge - out[i_off, j_off, icharge] = val - if i_off != j_off: - out[j_off, i_off, icharge] = val - # Reset `buf` - buf[:] = 0 - # Iterate `jpos` - jpos += q_off - # Iterate `ipos` - ipos += p_off + with self.optimizer(opt_func) as opt: + ipos = 0 + for ishl in range(self.nbas): + shls[0] = ishl + p_off = self.mults[ishl] + jpos = 0 + for jshl in range(ishl + 1): + shls[1] = jshl + q_off = self.mults[jshl] + # Call the C function to fill `buf` + func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) + # Fill `out` array + for p in range(p_off): + i_off = p + ipos + for q in range(q_off): + j_off = q + jpos + val = buf[q * p_off + p] * -charge + out[i_off, j_off, icharge] = val + if i_off != j_off: + out[j_off, i_off, icharge] = val + # Reset `buf` + buf[:] = 0 + # Iterate `jpos` + jpos += q_off + # Iterate `ipos` + ipos += p_off # Return integrals in `out` array return out From e8882ebbc92ea0ad71236188c74d3275c4aa2dcc Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 12 Dec 2023 09:39:57 -0500 Subject: [PATCH 54/72] Add cartesian normalization --- gbasis/integrals/libcint.py | 37 +++++++++++-------------------------- tests/test_libcint.py | 14 +++++++------- tools/install_libcint.sh | 2 +- 3 files changed, 19 insertions(+), 34 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 62d56015..a1df97b9 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -739,17 +739,12 @@ def normalized_coeffs_sph(shell): Normalize the spherical GeneralizedContractionShell coefficients. """ - l = shell.angmom - c = shell.coeffs.copy() - n = (INV_SQRT_PI * (2 ** (3 * l + 4.5))) * (factorial(l + 1) / factorial(2 * l + 2)) - n *= np.power(shell.exps, l + 1.5) - n **= 0.5 - for ni, ci in zip(n, c): - ci *= ni - return c - - -PI_TO_THREE_HALVES = 5.5683279968317078452848179821188 + n = np.sqrt( + (INV_SQRT_PI * (2 ** (3 * shell.angmom + 4.5))) * \ + (factorial(shell.angmom + 1) / factorial(2 * shell.angmom + 2)) * \ + np.power(shell.exps, shell.angmom + 1.5) + ) + return np.einsum("i,ij->ij", n, shell.coeffs) def normalized_coeffs_cart(shell): @@ -757,19 +752,9 @@ def normalized_coeffs_cart(shell): Normalize the cartesian GeneralizedContractionShell coefficients. """ - l = shell.angmom - c = shell.coeffs.copy() - d = PI_TO_THREE_HALVES * factorial2(2 * l - 1) - n = np.power(2 * shell.exps, l + 1.5) / d - n **= 0.5 - for ni, ci in zip(n, c): - ci *= ni - n = d * 2 ** -l * sum( - ci * cj * (ei + ej) ** (-l - 1.5) - for ei, ci in zip(shell.exps, c) - for ej, cj in zip(shell.exps, c) + n = np.power( + np.prod(factorial2(2 * shell.angmom_components_cart - 1), axis=1) / \ + factorial2(2 * shell.angmom - 1), + 0.5, ) - n **= -0.5 - for ni, ci in zip(n, c): - ci *= ni - return c + return np.einsum("ij,k,jk->ij", normalized_coeffs_sph(shell), n, shell.norm_cont) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index bdf5edfd..86220a5e 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -41,19 +41,19 @@ TEST_COORD_TYPES = [ - # pytest.param("cartesian", id="Cartesian"), + pytest.param("cartesian", id="Cartesian"), pytest.param("spherical", id="Spherical"), ] TEST_INTEGRALS = [ pytest.param("olp", id="Overlap"), - pytest.param("kin", id="KineticEnergy"), - pytest.param("nuc", id="NuclearAttraction"), - pytest.param("amom", id="AngularMomentum"), - pytest.param("mom", id="Momentum"), - pytest.param("eri", id="ElectronRepulsion"), - pytest.param("pntchrg", id="PointCharge"), + # pytest.param("kin", id="KineticEnergy"), + # pytest.param("nuc", id="NuclearAttraction"), + # pytest.param("amom", id="AngularMomentum"), + # pytest.param("mom", id="Momentum"), + # pytest.param("eri", id="ElectronRepulsion"), + # pytest.param("pntchrg", id="PointCharge"), ] diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index 2e50d436..a000bb3b 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -41,7 +41,7 @@ lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=0' lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' lc_cmake_opts+=' -DWITH_POLYNOMIAL_FIT=1' lc_cmake_opts+=' -DWITH_F12=1' -lc_cmake_opts+=' -DPYPZPX=1' +# lc_cmake_opts+=' -DPYPZPX=1' # Ensure build directory exists and enter it mkdir -p "${gbasis_dir}/build" From 51b4c9d747eb8971a702e6293be3adc86c5e03d9 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 12 Dec 2023 11:35:27 -0500 Subject: [PATCH 55/72] Partially fix cart. normaliztion (still some fail) --- gbasis/integrals/libcint.py | 70 +++++++++++++++++++++++++++---------- tests/test_libcint.py | 19 +++++++--- tools/install_libcint.sh | 2 +- 3 files changed, 68 insertions(+), 23 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index a1df97b9..a7912d6c 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -49,6 +49,20 @@ """ +# CART_CONVENTIONS = tuple(tuple(range(((i + 1) * (i + 2)) // 2)) for i in range(7)) +# r""" +# Ordering conventions for cartesian subshells. +# +# """ + + +# SPH_CONVENTIONS = tuple(tuple(range(2 * i + 1)) for i in range(7)) +# r""" +# Ordering conventions for spherical subshells. +# +# """ + + INTEGRAL_REGEX = re.compile(r'^(?!.*optimizer$)int[12]e.+') r""" Regex for matching ``libcint`` integral functions. @@ -275,10 +289,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): coord_type = coord_type.lower() if coord_type == "spherical": num_angmom = attrgetter("num_sph") - normalized_coeffs = normalized_coeffs_sph + # normalized_coeffs = normalized_coeffs_sph elif coord_type == "cartesian": num_angmom = attrgetter("num_cart") - normalized_coeffs = normalized_coeffs_cart + # normalized_coeffs = normalized_coeffs_cart else: raise ValueError("``coord_type`` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") @@ -446,6 +460,9 @@ def make_int1e(self, func_name, components=tuple(), is_complex=False, origin=Fal func = LIBCINT[func_name + ("_cart" if self.coord_type == "cartesian" else "_sph")] opt_func = LIBCINT[func_name + "_optimizer"] + # Get ordering convention + # convs = CART_CONVENTIONS if self.coord_type == "cartesian" else SPH_CONVENTIONS + # Handle multi-component integral values if len(components) == 0: components = (1,) @@ -499,17 +516,21 @@ def int1e(notation="physicist", origin=None, inv_origin=None): ipos = 0 for ishl in range(self.nbas): shls[0] = ishl + # p_conv = convs[self.bas[ishl, 1]] p_off = self.mults[ishl] jpos = 0 for jshl in range(ishl + 1): shls[1] = jshl + # q_conv = convs[self.bas[jshl, 1]] q_off = self.mults[jshl] # Call the C function to fill `buf` func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) # Fill `out` array for p in range(p_off): + # for p in p_conv: i_off = p + ipos for q in range(q_off): + # for q in q_conv: j_off = q + jpos buf_off = prod_comp * (q * p_off + p) val = buf[buf_off:buf_off + prod_comp].reshape(*components, order="F") @@ -560,6 +581,9 @@ def make_int2e(self, func_name, components=tuple(), is_complex=False, origin=Fal func = LIBCINT[func_name + ("_cart" if self.coord_type == "cartesian" else "_sph")] opt_func = LIBCINT[func_name + "_optimizer"] + # Get ordering convention + # convs = CART_CONVENTIONS if self.coord_type == "cartesian" else SPH_CONVENTIONS + # Handle multi-component integral values if len(components) == 0: components = (1,) @@ -616,20 +640,24 @@ def int2e(notation="physicist", origin=None, inv_origin=None): ipos = 0 for ishl in range(self.nbas): shls[0] = ishl + # p_conv = convs[self.bas[ishl, 1]] p_off = self.mults[ishl] jpos = 0 for jshl in range(ishl + 1): ij = ((ishl + 1) * ishl) // 2 + jshl shls[1] = jshl + # q_conv = convs[self.bas[jshl, 1]] q_off = self.mults[jshl] kpos = 0 for kshl in range(self.nbas): shls[2] = kshl + # r_conv = convs[self.bas[kshl, 1]] r_off = self.mults[kshl] lpos = 0 for lshl in range(kshl + 1): kl = ((kshl + 1) * kshl) // 2 + lshl shls[3] = lshl + # s_conv = convs[self.bas[lshl, 1]] s_off = self.mults[lshl] if ij < kl: lpos += s_off @@ -638,12 +666,16 @@ def int2e(notation="physicist", origin=None, inv_origin=None): func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) # Fill `out` array for p in range(p_off): + # for p in p_conv: i_off = p + ipos for q in range(q_off): + # for q in q_conv: j_off = q + jpos for r in range(r_off): + # for r in r_conv: k_off = r + kpos for s in range(s_off): + # for s in s_conv: l_off = s + lpos buf_off = prod_comp * (s * (r_off * q_off * p_off) + r * (q_off * p_off) + @@ -734,9 +766,10 @@ def pntchrg(self, point_coords, point_charges): INV_SQRT_PI = 0.56418958354775628694807945156077 -def normalized_coeffs_sph(shell): +# def normalized_coeffs_sph(shell): +def normalized_coeffs(shell): r""" - Normalize the spherical GeneralizedContractionShell coefficients. + Normalize (the radial part of) the spherical GeneralizedContractionShell coefficients. """ n = np.sqrt( @@ -744,17 +777,18 @@ def normalized_coeffs_sph(shell): (factorial(shell.angmom + 1) / factorial(2 * shell.angmom + 2)) * \ np.power(shell.exps, shell.angmom + 1.5) ) - return np.einsum("i,ij->ij", n, shell.coeffs) - - -def normalized_coeffs_cart(shell): - r""" - Normalize the cartesian GeneralizedContractionShell coefficients. - - """ - n = np.power( - np.prod(factorial2(2 * shell.angmom_components_cart - 1), axis=1) / \ - factorial2(2 * shell.angmom - 1), - 0.5, - ) - return np.einsum("ij,k,jk->ij", normalized_coeffs_sph(shell), n, shell.norm_cont) + return np.einsum("k,km->km", n, shell.coeffs) + + +# def normalized_coeffs_cart(shell): +# r""" +# Normalize the cartesian GeneralizedContractionShell coefficients. +# +# """ +# return normalized_coeffs_sph(shell) +# # n = np.power( +# # np.prod(factorial2(2 * shell.angmom_components_cart - 1), axis=1) / \ +# # factorial2(2 * shell.angmom - 1), +# # 0.5, +# # ) +# # return np.dot(normalized_coeffs_sph(shell), shell.norm_cont).dot(n) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 86220a5e..41908ef5 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -48,12 +48,12 @@ TEST_INTEGRALS = [ pytest.param("olp", id="Overlap"), - # pytest.param("kin", id="KineticEnergy"), - # pytest.param("nuc", id="NuclearAttraction"), + pytest.param("kin", id="KineticEnergy"), + pytest.param("nuc", id="NuclearAttraction"), # pytest.param("amom", id="AngularMomentum"), # pytest.param("mom", id="Momentum"), - # pytest.param("eri", id="ElectronRepulsion"), - # pytest.param("pntchrg", id="PointCharge"), + pytest.param("eri", id="ElectronRepulsion"), + pytest.param("pntchrg", id="PointCharge"), ] @@ -103,6 +103,17 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): py_int = overlap_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.olp() + # print() + # diff = np.isclose(py_int, lc_int, atol=atol, rtol=rtol) + # for row in diff.astype(int): + # print("".join(map(str, row))) + # with np.printoptions(linewidth=2**32, threshold=2**32): + # print("GBASIS") + # for row in py_int[:6]: + # print(row) + # print("LIBCINT") + # for row in lc_int: + # print(row) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "kin": diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index a000bb3b..2e50d436 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -41,7 +41,7 @@ lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=0' lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' lc_cmake_opts+=' -DWITH_POLYNOMIAL_FIT=1' lc_cmake_opts+=' -DWITH_F12=1' -# lc_cmake_opts+=' -DPYPZPX=1' +lc_cmake_opts+=' -DPYPZPX=1' # Ensure build directory exists and enter it mkdir -p "${gbasis_dir}/build" From 96b5af7c42e874ef552e8cf48914cb442087bf97 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 12 Dec 2023 20:26:30 -0500 Subject: [PATCH 56/72] Fix momentum integral, complex arrays, slicing --- gbasis/integrals/libcint.py | 66 +++++++++++++++++++++---------------- tests/test_libcint.py | 13 +------- tools/auto_intor_modify.py | 2 +- 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index a7912d6c..70e34425 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -394,8 +394,8 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.olp = self.make_int1e("int1e_ovlp") self.kin = self.make_int1e("int1e_kin") self.nuc = self.make_int1e("int1e_nuc") - self.amom = self.make_int1e("int1e_giao_irjxp", components=(3,), is_complex=True, origin=True) - self.mom = self.make_int1e("int1e_mom", components=(3,), is_complex=True, origin=True) + self.amom = self.make_int1e("int1e_giao_irjxp", components=(3,), constant=-1j, is_complex=True, origin=True) + self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) self.moment1 = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) self.moment2 = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) self.moment3 = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) @@ -436,7 +436,7 @@ def optimizer(self, opt_func): # Free optimizer from memory (always called) LIBCINT.CINTdel_optimizer(byref(opt)) - def make_int1e(self, func_name, components=tuple(), is_complex=False, origin=False, inv_origin=False): + def make_int1e(self, func_name, components=tuple(), constant=None, is_complex=False, origin=False, inv_origin=False): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -448,8 +448,11 @@ def make_int1e(self, func_name, components=tuple(), is_complex=False, origin=Fal Shape of components in each integral element. E.g., for normal integrals, ``comp=()``, while for nuclear gradients, ``components=(Natm, 3)``, and for nuclear Hessians, ``components=(Natm, Natm, 3, 3)``, etc. + constant : (float | complex), default=1. + A constant by which to multiply the whole integral array. is_complex : bool, default=False - Whether the components in each integral element are complex. + Whether the components in each integral element are complex. Not required if only + multiplying by a complex constant using the ``constant`` keyword argument.. origin : bool, default=False Whether you must specify an origin ``R`` for the integral computation. inv_origin : bool, default=False @@ -505,7 +508,7 @@ def int1e(notation="physicist", origin=None, inv_origin=None): raise ValueError("``inv_origin`` must not be specified") # Make output array - out = np.zeros(out_shape, dtype=c_double) + out = np.zeros(out_shape, dtype=c_double, order="F") # Make temporary arrays buf = np.zeros(buf_shape, dtype=c_double) @@ -526,16 +529,15 @@ def int1e(notation="physicist", origin=None, inv_origin=None): # Call the C function to fill `buf` func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) # Fill `out` array - for p in range(p_off): + buf_array = buf[:p_off * q_off * prod_comp].reshape(p_off, q_off, *components, order="F") # for p in p_conv: + for p in range(p_off): i_off = p + ipos - for q in range(q_off): # for q in q_conv: + for q in range(q_off): j_off = q + jpos - buf_off = prod_comp * (q * p_off + p) - val = buf[buf_off:buf_off + prod_comp].reshape(*components, order="F") - out[i_off, j_off] = val - out[j_off, i_off] = val + out[i_off, j_off] = buf_array[p, q] + out[j_off, i_off] = buf_array[p, q] # Reset `buf` buf[:] = 0 # Iterate `jpos` @@ -545,19 +547,23 @@ def int1e(notation="physicist", origin=None, inv_origin=None): # Cast `out` to complex if `is_complex` is set if is_complex: - out = out.reshape(*out.shape[:-2], out.shape[-2] * 2).view(np.complex_) + out = out.reshape(*out.shape[:-2], -1).view(np.complex_) # Remove useless axis in `out` if no `components` was given if no_comp: out = out.squeeze(axis=-1) + # Multiply by constant + if constant is not None: + out *= constant + # Return integrals in `out` array return out # Return instance-bound integral method return int1e - def make_int2e(self, func_name, components=tuple(), is_complex=False, origin=False, inv_origin=False): + def make_int2e(self, func_name, components=tuple(), constant=None, is_complex=False, origin=False, inv_origin=False): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -569,8 +575,11 @@ def make_int2e(self, func_name, components=tuple(), is_complex=False, origin=Fal Shape of components in each integral element. E.g., for normal integrals, ``components=(1,)``, while for nuclear gradients, ``components=(Natm, 3)``, and for nuclear Hessians, ``components=(Natm, Natm, 3, 3)``, etc. + constant : (float | complex), default=1. + A constant by which to multiply the whole integral array. is_complex : bool, default=False - Whether the components in each integral element are complex. + Whether the components in each integral element are complex. Not required if only + multiplying by a complex constant using the ``constant`` keyword argument.. origin : bool, default=False Whether you must specify an origin ``R`` for the integral computation. inv_origin : bool, default=False @@ -630,7 +639,8 @@ def int2e(notation="physicist", origin=None, inv_origin=None): raise ValueError("``inv_origin`` must not be specified") # Make output array - out = np.zeros(out_shape, dtype=c_double) + out = np.zeros(out_shape, dtype=c_double, order="F") + # Make temporary arrays buf = np.zeros(buf_shape, dtype=c_double) shls = np.zeros(4, dtype=c_int) @@ -665,6 +675,7 @@ def int2e(notation="physicist", origin=None, inv_origin=None): # Call the C function to fill `buf` func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) # Fill `out` array + buf_array = buf[:p_off * q_off * r_off * s_off * prod_comp].reshape(p_off, q_off, r_off, s_off, *components, order="F") for p in range(p_off): # for p in p_conv: i_off = p + ipos @@ -677,19 +688,14 @@ def int2e(notation="physicist", origin=None, inv_origin=None): for s in range(s_off): # for s in s_conv: l_off = s + lpos - buf_off = prod_comp * (s * (r_off * q_off * p_off) + - r * (q_off * p_off) + - q * (p_off) + - p) - val = buf[buf_off:buf_off + prod_comp].reshape(*components) - out[i_off, j_off, k_off, l_off] = val - out[i_off, j_off, l_off, k_off] = val - out[j_off, i_off, k_off, l_off] = val - out[j_off, i_off, l_off, k_off] = val - out[k_off, l_off, i_off, j_off] = val - out[k_off, l_off, j_off, i_off] = val - out[l_off, k_off, i_off, j_off] = val - out[l_off, k_off, j_off, i_off] = val + out[i_off, j_off, k_off, l_off] = buf_array[p, q, r, s] + out[i_off, j_off, l_off, k_off] = buf_array[p, q, r, s] + out[j_off, i_off, k_off, l_off] = buf_array[p, q, r, s] + out[j_off, i_off, l_off, k_off] = buf_array[p, q, r, s] + out[k_off, l_off, i_off, j_off] = buf_array[p, q, r, s] + out[k_off, l_off, j_off, i_off] = buf_array[p, q, r, s] + out[l_off, k_off, i_off, j_off] = buf_array[p, q, r, s] + out[l_off, k_off, j_off, i_off] = buf_array[p, q, r, s] # Reset `buf` buf[:] = 0 # Iterate `lpos` @@ -709,6 +715,10 @@ def int2e(notation="physicist", origin=None, inv_origin=None): if no_comp: out = out.squeeze(axis=-1) + # Multiply by constant + if constant is not None: + out *= constant + # Transpose integrals in `out` array to proper notation if physicist: out = out.transpose(0, 2, 1, 3) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 41908ef5..b404996a 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -50,8 +50,8 @@ pytest.param("olp", id="Overlap"), pytest.param("kin", id="KineticEnergy"), pytest.param("nuc", id="NuclearAttraction"), + pytest.param("mom", id="Momentum"), # pytest.param("amom", id="AngularMomentum"), - # pytest.param("mom", id="Momentum"), pytest.param("eri", id="ElectronRepulsion"), pytest.param("pntchrg", id="PointCharge"), ] @@ -103,17 +103,6 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): py_int = overlap_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.olp() - # print() - # diff = np.isclose(py_int, lc_int, atol=atol, rtol=rtol) - # for row in diff.astype(int): - # print("".join(map(str, row))) - # with np.printoptions(linewidth=2**32, threshold=2**32): - # print("GBASIS") - # for row in py_int[:6]: - # print(row) - # print("LIBCINT") - # for row in lc_int: - # print(row) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "kin": diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py index 54df60a3..10b70b5b 100644 --- a/tools/auto_intor_modify.py +++ b/tools/auto_intor_modify.py @@ -5,7 +5,7 @@ new = f'{old}\n' -new += ' \'("int1e_mom" (#C(-1 0) \\| p))' +new += ' \'("int1e_p" ( \\| p))' with open(sys.argv[1], 'r') as f: From d84b271fefd92d75f36415458a8bc8dcfaa68710 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 14 Dec 2023 11:56:28 -0500 Subject: [PATCH 57/72] CLean up normalization and point charge fn --- gbasis/integrals/libcint.py | 80 ++++++++----------------------------- 1 file changed, 17 insertions(+), 63 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 70e34425..921dd4a7 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -289,10 +289,8 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): coord_type = coord_type.lower() if coord_type == "spherical": num_angmom = attrgetter("num_sph") - # normalized_coeffs = normalized_coeffs_sph elif coord_type == "cartesian": num_angmom = attrgetter("num_cart") - # normalized_coeffs = normalized_coeffs_cart else: raise ValueError("``coord_type`` parameter must be 'spherical' or 'cartesian'; " f"the provided value, '{coord_type}', is invalid") @@ -394,18 +392,20 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.olp = self.make_int1e("int1e_ovlp") self.kin = self.make_int1e("int1e_kin") self.nuc = self.make_int1e("int1e_nuc") + self.eri = self.make_int2e("int2e") + self.rinv = self.make_int1e("int1e_rinv", inv_origin=True) self.amom = self.make_int1e("int1e_giao_irjxp", components=(3,), constant=-1j, is_complex=True, origin=True) self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) self.moment1 = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) self.moment2 = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) self.moment3 = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) self.moment4 = self.make_int1e("int1e_rrrr", components=(3,), is_complex=True, origin=True) - self.eri = self.make_int2e("int2e") # Gradients self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) - self.d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) + self.d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) self.d_eri = self.make_int2e("int2e_ip1", components=(3,)) + self.d_rinv = self.make_int1e("int1e_iprinv", components=(3,), inv_origin=True) # Hessians self.d2_olp = self.make_int1e("int1e_ipipovlp", components=(3, 3)) self.d2_nuc = self.make_int1e("int1e_ipipnuc", components=(3, 3)) @@ -732,73 +732,27 @@ def int2e(notation="physicist", origin=None, inv_origin=None): def pntchrg(self, point_coords, point_charges): r"""Point charge integral.""" # Make output array - ncharge = len(point_charges) - out = np.zeros((self.nbfn, self.nbfn, ncharge), dtype=c_double) - # Make temporary arrays - buf = np.zeros(self.max_mult ** 2, dtype=c_double) - shls = np.zeros(2, dtype=c_int) - # Evaluate the integral function over all shells - func = LIBCINT["int1e_rinv_cart" if self.coord_type == "cartesian" else "int1e_rinv_sph"] - opt_func = LIBCINT["int1e_rinv_optimizer"] + out = np.zeros((self.nbfn, self.nbfn, len(point_charges)), dtype=c_double, order="F") + # Compute 1/|r - r_{inv}| for each charge for icharge, (coord, charge) in enumerate(zip(point_coords, point_charges)): - # Set R_O of 1/|r - R_O| - self.env[4:7] = coord - with self.optimizer(opt_func) as opt: - ipos = 0 - for ishl in range(self.nbas): - shls[0] = ishl - p_off = self.mults[ishl] - jpos = 0 - for jshl in range(ishl + 1): - shls[1] = jshl - q_off = self.mults[jshl] - # Call the C function to fill `buf` - func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) - # Fill `out` array - for p in range(p_off): - i_off = p + ipos - for q in range(q_off): - j_off = q + jpos - val = buf[q * p_off + p] * -charge - out[i_off, j_off, icharge] = val - if i_off != j_off: - out[j_off, i_off, icharge] = val - # Reset `buf` - buf[:] = 0 - # Iterate `jpos` - jpos += q_off - # Iterate `ipos` - ipos += p_off + val = self.rinv(inv_origin=coord) + val *= -charge + out[:, :, icharge] = val # Return integrals in `out` array return out -INV_SQRT_PI = 0.56418958354775628694807945156077 - - -# def normalized_coeffs_sph(shell): def normalized_coeffs(shell): r""" Normalize (the radial part of) the spherical GeneralizedContractionShell coefficients. """ - n = np.sqrt( - (INV_SQRT_PI * (2 ** (3 * shell.angmom + 4.5))) * \ - (factorial(shell.angmom + 1) / factorial(2 * shell.angmom + 2)) * \ - np.power(shell.exps, shell.angmom + 1.5) + return np.einsum( + "km,k->km", + shell.coeffs, + np.sqrt( + ((np.pi ** -0.5) * (2 ** (3 * shell.angmom + 4.5))) * \ + (factorial(shell.angmom + 1) / factorial(2 * shell.angmom + 2)) * \ + (np.power(shell.exps, shell.angmom + 1.5)) + ), ) - return np.einsum("k,km->km", n, shell.coeffs) - - -# def normalized_coeffs_cart(shell): -# r""" -# Normalize the cartesian GeneralizedContractionShell coefficients. -# -# """ -# return normalized_coeffs_sph(shell) -# # n = np.power( -# # np.prod(factorial2(2 * shell.angmom_components_cart - 1), axis=1) / \ -# # factorial2(2 * shell.angmom - 1), -# # 0.5, -# # ) -# # return np.dot(normalized_coeffs_sph(shell), shell.norm_cont).dot(n) From 182a27f7c52171016158283144ac4d297920be1c Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 14 Dec 2023 14:17:33 -0500 Subject: [PATCH 58/72] Clean up ints, add libcint documentation to readme --- README.md | 11 +++++++++++ gbasis/integrals/libcint.py | 16 +--------------- tools/auto_intor_modify.py | 5 +++-- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index b63f96eb..f1160ec2 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,17 @@ git clone https://github.com/theochem/gbasis.git cd gbasis pip install --user -e .[dev,iodata] ``` +To use `gbasis.integrals.libcint`, the user must run the following script to build +and install `libcint` into the `gbasis/integrals` directory, +```bash +tools/install_libcint.sh +``` +This script depends on the following packages: +* CMake +* Git +* Python 3 +* a C compiler (gcc or clang are recommended) +* a Common Lisp interpreter (sbcl or clisp are recommended) Note that `iodata` must be installed separately. `cython` is a dependency of `iodata`. To test the installation, diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 921dd4a7..1badb574 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -49,20 +49,6 @@ """ -# CART_CONVENTIONS = tuple(tuple(range(((i + 1) * (i + 2)) // 2)) for i in range(7)) -# r""" -# Ordering conventions for cartesian subshells. -# -# """ - - -# SPH_CONVENTIONS = tuple(tuple(range(2 * i + 1)) for i in range(7)) -# r""" -# Ordering conventions for spherical subshells. -# -# """ - - INTEGRAL_REGEX = re.compile(r'^(?!.*optimizer$)int[12]e.+') r""" Regex for matching ``libcint`` integral functions. @@ -394,7 +380,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.nuc = self.make_int1e("int1e_nuc") self.eri = self.make_int2e("int2e") self.rinv = self.make_int1e("int1e_rinv", inv_origin=True) - self.amom = self.make_int1e("int1e_giao_irjxp", components=(3,), constant=-1j, is_complex=True, origin=True) + self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=1, is_complex=True, origin=True) self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) self.moment1 = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) self.moment2 = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py index 10b70b5b..aec14437 100644 --- a/tools/auto_intor_modify.py +++ b/tools/auto_intor_modify.py @@ -4,8 +4,9 @@ old = '(gen-cint "intor1.c"' -new = f'{old}\n' -new += ' \'("int1e_p" ( \\| p))' +new = f'{old}' +new += '\n \'("int1e_p" ( \\| p))' +new += '\n \'("int1e_rxp" ( \\| r cross p))' with open(sys.argv[1], 'r') as f: From 62c3cc5d2c343d0350bc6542c2f2bb26c1824561 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 14 Dec 2023 14:19:10 -0500 Subject: [PATCH 59/72] Fix readme formatting --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f1160ec2..e6fee13b 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ This script depends on the following packages: * Python 3 * a C compiler (gcc or clang are recommended) * a Common Lisp interpreter (sbcl or clisp are recommended) + Note that `iodata` must be installed separately. `cython` is a dependency of `iodata`. To test the installation, From 7ae851cb16fa0dcd0e38d1e782f69663629100d0 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Tue, 19 Dec 2023 14:56:49 -0500 Subject: [PATCH 60/72] Add proper multi-cmpnt normalization of cart ints --- gbasis/integrals/libcint.py | 71 ++++++++++++++++++++++---------- tests/test_libcint.py | 82 +------------------------------------ 2 files changed, 51 insertions(+), 102 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 1badb574..af5e5d83 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -374,6 +374,9 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.mults = mults self.max_mult = max(mults) + # Set inverse sqrt of overlap integral (temporarily, for __init__) + self._olp_minhalf = np.ones(nbfn) + # Integrals self.olp = self.make_int1e("int1e_ovlp") self.kin = self.make_int1e("int1e_kin") @@ -398,6 +401,11 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.d2_kin = self.make_int1e("int1e_ipipkin", components=(3, 3)) self.d2_eri = self.make_int2e("int2e_ipip1", components=(3, 3)) + # Set proper value for inverse sqrt of overlap integral + # for cartesian basis sets + if coord_type == "cartesian": + self._olp_minhalf = 1 / np.sqrt(np.diag(self.olp())) + @contextmanager def optimizer(self, opt_func): r""" @@ -449,11 +457,9 @@ def make_int1e(self, func_name, components=tuple(), constant=None, is_complex=Fa func = LIBCINT[func_name + ("_cart" if self.coord_type == "cartesian" else "_sph")] opt_func = LIBCINT[func_name + "_optimizer"] - # Get ordering convention - # convs = CART_CONVENTIONS if self.coord_type == "cartesian" else SPH_CONVENTIONS - # Handle multi-component integral values - if len(components) == 0: + n_components = len(components) + if n_components == 0: components = (1,) no_comp = True else: @@ -468,6 +474,10 @@ def make_int1e(self, func_name, components=tuple(), constant=None, is_complex=Fa has_origin_arg = bool(origin) has_inv_origin_arg = bool(inv_origin) + # Make einsum string for normalization + norm_einsum = f"a,b,ab{'cdefghijklmnopqrstuvwxyz'[:n_components]}->" \ + + f"ab{'cdefghijklmnopqrstuvwxyz'[:n_components]}" + # Make instance-bound integral method def int1e(notation="physicist", origin=None, inv_origin=None): @@ -543,8 +553,11 @@ def int1e(notation="physicist", origin=None, inv_origin=None): if constant is not None: out *= constant - # Return integrals in `out` array - return out + # Return normalized integrals + if self.coord_type == "cartesian": + return np.einsum(norm_einsum, self._olp_minhalf, self._olp_minhalf, out) + else: + return out # Return instance-bound integral method return int1e @@ -576,11 +589,9 @@ def make_int2e(self, func_name, components=tuple(), constant=None, is_complex=Fa func = LIBCINT[func_name + ("_cart" if self.coord_type == "cartesian" else "_sph")] opt_func = LIBCINT[func_name + "_optimizer"] - # Get ordering convention - # convs = CART_CONVENTIONS if self.coord_type == "cartesian" else SPH_CONVENTIONS - # Handle multi-component integral values - if len(components) == 0: + n_components = len(components) + if n_components == 0: components = (1,) no_comp = True else: @@ -595,6 +606,10 @@ def make_int2e(self, func_name, components=tuple(), constant=None, is_complex=Fa has_origin_arg = bool(origin) has_inv_origin_arg = bool(inv_origin) + # Make einsum string for normalization + norm_einsum = f"a,b,c,d,abcd{'efghijklmnopqrstuvwxyz'[:n_components]}->" + \ + f"abcd{'efghijklmnopqrstuvwxyz'[:n_components]}" + # Make instance-bound integral method def int2e(notation="physicist", origin=None, inv_origin=None): @@ -709,8 +724,15 @@ def int2e(notation="physicist", origin=None, inv_origin=None): if physicist: out = out.transpose(0, 2, 1, 3) - # Return integrals in `out` array - return out + # Return normalized integrals + if self.coord_type == "cartesian": + return np.einsum( + norm_einsum, + self._olp_minhalf, self._olp_minhalf, self._olp_minhalf, self._olp_minhalf, + out, + ) + else: + return out # Return instance-bound integral method return int2e @@ -733,12 +755,19 @@ def normalized_coeffs(shell): Normalize (the radial part of) the spherical GeneralizedContractionShell coefficients. """ - return np.einsum( - "km,k->km", - shell.coeffs, - np.sqrt( - ((np.pi ** -0.5) * (2 ** (3 * shell.angmom + 4.5))) * \ - (factorial(shell.angmom + 1) / factorial(2 * shell.angmom + 2)) * \ - (np.power(shell.exps, shell.angmom + 1.5)) - ), - ) + def gaussian_int(l, a): + return 0.5 * factorial(0.5 * l - 0.5) * a ** (-0.5 * l - 0.5) + + def gto_norm(l, a): + return 1 / np.sqrt(gaussian_int(2 * l + 2, 2 * a)) + + cs = np.einsum("km,k->km", shell.coeffs, gto_norm(shell.angmom, shell.exps)) + + es = gaussian_int(2 * shell.angmom + 2, shell.exps[:, np.newaxis] + shell.exps[np.newaxis, :]) + ss = 1 / np.sqrt(np.einsum("km,kl,lm->m", cs, es, cs)) + cs = np.einsum("km,m->km", cs, ss); + + return cs + + + diff --git a/tests/test_libcint.py b/tests/test_libcint.py index b404996a..0100f43b 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -51,7 +51,7 @@ pytest.param("kin", id="KineticEnergy"), pytest.param("nuc", id="NuclearAttraction"), pytest.param("mom", id="Momentum"), - # pytest.param("amom", id="AngularMomentum"), + pytest.param("amom", id="AngularMomentum"), pytest.param("eri", id="ElectronRepulsion"), pytest.param("pntchrg", id="PointCharge"), ] @@ -148,83 +148,3 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): raise ValueError("Invalid integral name '{integral}' passed") npt.assert_allclose(lc_int, py_int, atol=atol, rtol=rtol) - - -# @pytest.mark.parametrize("gradient", TEST_GRADIENTS) -# @pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) -# @pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) -# @pytest.mark.parametrize("basis", TEST_BASIS_SETS) -# def test_gradient(basis, atsyms, atcoords, coord_type, gradient): -# r""" -# Test gbasis.integrals.libcint.CBasis gradients against ???. -# -# """ -# -# atol, rtol = 1e-4, 1e-4 -# -# atcoords = atcoords / 0.5291772083 -# -# atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) -# -# basis_dict = parse_nwchem(find_datafile(basis)) -# -# py_basis = make_contractions(basis_dict, atsyms, atcoords) -# -# lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) -# -# if gradient == "d_olp": -# lc_int = lc_basis.d_olp() -# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) -# -# elif gradient == "d_kin": -# lc_int = lc_basis.d_kin() -# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) -# -# elif gradient == "d_nuc": -# lc_int = lc_basis.d_nuc() -# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3)) -# -# else: -# raise ValueError("Invalid gradient name '{integral}' passed") -# -# # npt.assert_allclose(lc_grad, py_grad, atol=atol, rtol=rtol) - - -# @pytest.mark.parametrize("hessian", TEST_HESSIANS) -# @pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) -# @pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) -# @pytest.mark.parametrize("basis", TEST_BASIS_SETS) -# def test_hessian(basis, atsyms, atcoords, coord_type, hessian): -# r""" -# Test gbasis.integrals.libcint.CBasis Hessians against ???. -# -# """ -# -# atol, rtol = 1e-4, 1e-4 -# -# atcoords = atcoords / 0.5291772083 -# -# atnums = np.asarray([ELEMENTS.index(i) for i in atsyms], dtype=float) -# -# basis_dict = parse_nwchem(find_datafile(basis)) -# -# py_basis = make_contractions(basis_dict, atsyms, atcoords) -# -# lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) -# -# if hessian == "d2_olp": -# lc_int = lc_basis.d2_olp() -# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3, lc_basis.natm, 3)) -# -# elif hessian == "d2_kin": -# lc_int = lc_basis.d2_kin() -# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3, lc_basis.natm, 3)) -# -# elif hessian == "d2_nuc": -# lc_int = lc_basis.d2_nuc() -# npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.natm, 3, lc_basis.natm, 3)) -# -# else: -# raise ValueError("Invalid gradient name '{integral}' passed") -# -# # npt.assert_allclose(lc_grad, py_grad, atol=atol, rtol=rtol) From bf2490d971a6bd0018cec088271055e2254fef01 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 20 Dec 2023 09:30:04 -0500 Subject: [PATCH 61/72] Add more integrals, cleanup auto-gen script --- gbasis/integrals/libcint.py | 22 +++++++++++++++++----- tools/auto_intor_modify.py | 33 ++++++++++++++++++++++++++------- tools/install_libcint.sh | 4 +--- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index af5e5d83..1dbc6a76 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -383,12 +383,24 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.nuc = self.make_int1e("int1e_nuc") self.eri = self.make_int2e("int2e") self.rinv = self.make_int1e("int1e_rinv", inv_origin=True) - self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=1, is_complex=True, origin=True) + self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) - self.moment1 = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) - self.moment2 = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) - self.moment3 = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) - self.moment4 = self.make_int1e("int1e_rrrr", components=(3,), is_complex=True, origin=True) + self.r = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) + self.rr = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) + self.rrr = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) + self.rrrr = self.make_int1e("int1e_rrrr", components=(3,), is_complex=True, origin=True) + self.x = self.make_int1e("int1e_x", is_complex=True, origin=True) + self.xx = self.make_int1e("int1e_xx", is_complex=True, origin=True) + self.xxx = self.make_int1e("int1e_xxx", is_complex=True, origin=True) + self.xxxx = self.make_int1e("int1e_xxxx", is_complex=True, origin=True) + self.y = self.make_int1e("int1e_y", is_complex=True, origin=True) + self.yy = self.make_int1e("int1e_yy", is_complex=True, origin=True) + self.yyy = self.make_int1e("int1e_yyy", is_complex=True, origin=True) + self.yyyy = self.make_int1e("int1e_yyyy", is_complex=True, origin=True) + self.z = self.make_int1e("int1e_z", is_complex=True, origin=True) + self.zz = self.make_int1e("int1e_zz", is_complex=True, origin=True) + self.zzz = self.make_int1e("int1e_zzz", is_complex=True, origin=True) + self.zzzz = self.make_int1e("int1e_zzzz", is_complex=True, origin=True) # Gradients self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py index aec14437..bc83667b 100644 --- a/tools/auto_intor_modify.py +++ b/tools/auto_intor_modify.py @@ -1,12 +1,31 @@ import sys -old = '(gen-cint "intor1.c"' - - -new = f'{old}' -new += '\n \'("int1e_p" ( \\| p))' -new += '\n \'("int1e_rxp" ( \\| r cross p))' +old_intor1 = '(gen-cint "intor1.c"' + + +new_intor1 = f'{old_intor1}' +new_intor1 += "\n ".join(( + # Momentum + '\'("int1e_p" ( \\| p))', + # Angular momentum + '\'("int1e_rxp" ( \\| rc cross p))', + # Moment X component + '\'("int1e_x" ( \\| xc \\| ))', + '\'("int1e_xx" ( \\| xc xc \\| ))', + '\'("int1e_xxx" ( \\| xc xc xc \\| ))', + '\'("int1e_xxxx" ( \\| xc xc xc xc \\| ))', + # Moment Y component + '\'("int1e_y" ( \\| yc \\| ))', + '\'("int1e_yy" ( \\| yc yc \\| ))', + '\'("int1e_yyy" ( \\| yc yc yc \\| ))', + '\'("int1e_yyyy" ( \\| yc yc yc yc \\| ))', + # Moment Z component + #'\'("int1e_z" ( \\| zc \\| ))', # already in `libcint` + #'\'("int1e_zz" ( \\| zc zc \\| ))', # already in `libcint` + '\'("int1e_zzz" ( \\| zc zc zc \\| ))', + '\'("int1e_zzzz" ( \\| zc zc zc zc \\| ))', + )) with open(sys.argv[1], 'r') as f: @@ -14,4 +33,4 @@ with open(sys.argv[1], 'w') as f: - f.write(txt.replace(old, new)) + f.write(txt.replace(old_intor1, new_intor1)) diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index 2e50d436..3765eb5a 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -38,10 +38,8 @@ trap cleanup EXIT lc_cmake_opts= lc_cmake_opts+=' -DWITH_FORTRAN=0' lc_cmake_opts+=' -DWITH_CINT2_INTERFACE=0' -lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' -lc_cmake_opts+=' -DWITH_POLYNOMIAL_FIT=1' -lc_cmake_opts+=' -DWITH_F12=1' lc_cmake_opts+=' -DPYPZPX=1' +lc_cmake_opts+=' -DWITH_RANGE_COULOMB=1' # Ensure build directory exists and enter it mkdir -p "${gbasis_dir}/build" From 15ecb37587d4a342a12f85158b7f97091e8e52d7 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 20 Dec 2023 12:28:47 -0500 Subject: [PATCH 62/72] Add draft impl of moment integral --- gbasis/integrals/libcint.py | 75 ++++++++++++++++++++++++++++++------- tests/test_libcint.py | 32 +++++++++------- 2 files changed, 79 insertions(+), 28 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 1dbc6a76..66b01b97 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -382,32 +382,41 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.kin = self.make_int1e("int1e_kin") self.nuc = self.make_int1e("int1e_nuc") self.eri = self.make_int2e("int2e") + self.rinv = self.make_int1e("int1e_rinv", inv_origin=True) + self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) + self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) + + # not sure if these r,rr,rrr,rrrr integrals are complex or not self.r = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) self.rr = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) self.rrr = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) self.rrrr = self.make_int1e("int1e_rrrr", components=(3,), is_complex=True, origin=True) - self.x = self.make_int1e("int1e_x", is_complex=True, origin=True) - self.xx = self.make_int1e("int1e_xx", is_complex=True, origin=True) - self.xxx = self.make_int1e("int1e_xxx", is_complex=True, origin=True) - self.xxxx = self.make_int1e("int1e_xxxx", is_complex=True, origin=True) - self.y = self.make_int1e("int1e_y", is_complex=True, origin=True) - self.yy = self.make_int1e("int1e_yy", is_complex=True, origin=True) - self.yyy = self.make_int1e("int1e_yyy", is_complex=True, origin=True) - self.yyyy = self.make_int1e("int1e_yyyy", is_complex=True, origin=True) - self.z = self.make_int1e("int1e_z", is_complex=True, origin=True) - self.zz = self.make_int1e("int1e_zz", is_complex=True, origin=True) - self.zzz = self.make_int1e("int1e_zzz", is_complex=True, origin=True) - self.zzzz = self.make_int1e("int1e_zzzz", is_complex=True, origin=True) - # Gradients + + self.x = self.make_int1e("int1e_x", origin=True) + self.xx = self.make_int1e("int1e_xx", origin=True) + self.xxx = self.make_int1e("int1e_xxx", origin=True) + self.xxxx = self.make_int1e("int1e_xxxx", origin=True) + + self.y = self.make_int1e("int1e_y", origin=True) + self.yy = self.make_int1e("int1e_yy", origin=True) + self.yyy = self.make_int1e("int1e_yyy", origin=True) + self.yyyy = self.make_int1e("int1e_yyyy", origin=True) + + self.z = self.make_int1e("int1e_z", origin=True) + self.zz = self.make_int1e("int1e_zz", origin=True) + self.zzz = self.make_int1e("int1e_zzz", origin=True) + self.zzzz = self.make_int1e("int1e_zzzz", origin=True) + self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) self.d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) self.d_eri = self.make_int2e("int2e_ip1", components=(3,)) + self.d_rinv = self.make_int1e("int1e_iprinv", components=(3,), inv_origin=True) - # Hessians + self.d2_olp = self.make_int1e("int1e_ipipovlp", components=(3, 3)) self.d2_nuc = self.make_int1e("int1e_ipipnuc", components=(3, 3)) self.d2_kin = self.make_int1e("int1e_ipipkin", components=(3, 3)) @@ -761,6 +770,44 @@ def pntchrg(self, point_coords, point_charges): # Return integrals in `out` array return out + def moment(self, orders, origin=None): + + n = len(orders) + + xs = list(set([elem[0] for elem in orders])) + ys = list(set([elem[1] for elem in orders])) + zs = list(set([elem[2] for elem in orders])) + + if np.greater([xs, ys, zs], 4).any(): + raise ValueError + + x_comps = [0] + x_comps.append(self.x(origin=origin) if 1 in xs else 0) + x_comps.append(self.xx(origin=origin) if 2 in xs else 0) + x_comps.append(self.xxx(origin=origin) if 3 in xs else 0) + x_comps.append(self.xxxx(origin=origin) if 4 in xs else 0) + + y_comps = [0] + y_comps.append(self.y(origin=origin) if 1 in ys else 0) + y_comps.append(self.yy(origin=origin) if 2 in ys else 0) + y_comps.append(self.yyy(origin=origin) if 3 in ys else 0) + y_comps.append(self.yyyy(origin=origin) if 4 in ys else 0) + + z_comps = [0] + z_comps.append(self.z(origin=origin) if 1 in zs else 0) + z_comps.append(self.zz(origin=origin) if 2 in zs else 0) + z_comps.append(self.zzz(origin=origin) if 3 in zs else 0) + z_comps.append(self.zzzz(origin=origin) if 4 in zs else 0) + + out = np.zeros((self.nbfn, self.nbfn, n), dtype=np.float64) + + for i, (x, y, z) in enumerate(orders): + out[:, :, i] += x_comps[x] + out[:, :, i] += y_comps[y] + out[:, :, i] += z_comps[z] + + return out + def normalized_coeffs(shell): r""" diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 0100f43b..f5429084 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -54,20 +54,7 @@ pytest.param("amom", id="AngularMomentum"), pytest.param("eri", id="ElectronRepulsion"), pytest.param("pntchrg", id="PointCharge"), -] - - -TEST_GRADIENTS = [ - pytest.param("d_olp", id="Overlap"), - pytest.param("d_kin", id="KineticEnergy"), - pytest.param("d_nuc", id="NuclearAttraction"), -] - - -TEST_HESSIANS = [ - pytest.param("d2_olp", id="Overlap"), - pytest.param("d2_kin", id="KineticEnergy"), - pytest.param("d2_nuc", id="NuclearAttraction"), + pytest.param("moment", id="Moment"), ] @@ -144,6 +131,23 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): lc_int = lc_basis.pntchrg(charge_coords[:i], charges[:i]) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) + elif integral == "moment": + origin = np.zeros(3) + orders = np.asarray([[0, 0, 0], + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [2, 0, 0], + [0, 2, 0], + [0, 0, 2], + [1, 1, 0], + [1, 0, 1], + [0, 1, 1]]) + py_int = moment_integral(py_basis, origin, orders, coord_type=coord_type) + npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, len(orders))) + lc_int = lc_basis.moment(orders, origin=origin) + npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, len(orders))) + else: raise ValueError("Invalid integral name '{integral}' passed") From fcac2bb0c0a3c39c8fffbf84aeb9e7316cd30616 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 10 Jan 2024 11:36:33 -0500 Subject: [PATCH 63/72] Fix libcint install script for old cmake versions --- tools/install_libcint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index 3765eb5a..f0224b58 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -65,5 +65,5 @@ cd build cmake "-DCMAKE_INSTALL_PREFIX=${gbasis_dir}/gbasis/integrals" ${lc_cmake_opts} .. # Compile and install Libcint -cmake --build . -cmake --install . +make # cmake --build . +make install # cmake --install . From d905b4bfcbd1741be22fdae3d9dad7c2c406580b Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 10 Jan 2024 11:41:41 -0500 Subject: [PATCH 64/72] Add specific tag to libcint clone Ensure that we get a specific version such that the patch is guaranteed to be applied correctly (and for API/result consistency) --- tools/install_libcint.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index f0224b58..e874c656 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -1,5 +1,8 @@ #!/usr/bin/env bash +# Libcint version to patch and install +LIBCINT_VERSION=v6.1.0 + # Notice for user echo '' echo ' NOTE: If this script has been run previously, and it failed, please ensure' @@ -47,7 +50,7 @@ cd "${gbasis_dir}/build" # Clone Libcint Git repo and enter it if [ ! -e "${gbasis_dir}/build/libcint" ]; then - git clone http://github.com/sunqm/libcint.git + git clone --branch ${LIBCINT_VERSION} --depth 1 https://github.com/sunqm/libcint.git fi cd libcint git checkout . From 2a32a1dc857b58de8d5ea502cc9d2d11ec2492ca Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Wed, 10 Jan 2024 15:54:14 -0500 Subject: [PATCH 65/72] Add working moment integral function --- gbasis/integrals/libcint.py | 85 ++++++++++++++----------------------- tests/test_libcint.py | 2 +- tools/auto_intor_modify.py | 46 ++++++++++---------- 3 files changed, 56 insertions(+), 77 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 66b01b97..49ee5cc5 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -79,7 +79,7 @@ def from_param(cls, obj): if not enable_null: return base - return type(base.__name__, (base,), {'from_param': classmethod(from_param)}) + return type(base.__name__, (base,), {"from_param": classmethod(from_param)}) class PairData(Structure): @@ -131,7 +131,7 @@ def __new__(cls): def __init__(self): r""" - Singleton class inializer. + Singleton class initializer. """ # Make the bound C functions we'll always need here @@ -385,30 +385,19 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.rinv = self.make_int1e("int1e_rinv", inv_origin=True) - self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) - - self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) - - # not sure if these r,rr,rrr,rrrr integrals are complex or not - self.r = self.make_int1e("int1e_r", components=(3,), is_complex=True, origin=True) - self.rr = self.make_int1e("int1e_rr", components=(3,), is_complex=True, origin=True) - self.rrr = self.make_int1e("int1e_rrr", components=(3,), is_complex=True, origin=True) - self.rrrr = self.make_int1e("int1e_rrrr", components=(3,), is_complex=True, origin=True) - - self.x = self.make_int1e("int1e_x", origin=True) - self.xx = self.make_int1e("int1e_xx", origin=True) - self.xxx = self.make_int1e("int1e_xxx", origin=True) - self.xxxx = self.make_int1e("int1e_xxxx", origin=True) + self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True) - self.y = self.make_int1e("int1e_y", origin=True) - self.yy = self.make_int1e("int1e_yy", origin=True) - self.yyy = self.make_int1e("int1e_yyy", origin=True) - self.yyyy = self.make_int1e("int1e_yyyy", origin=True) + self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) - self.z = self.make_int1e("int1e_z", origin=True) - self.zz = self.make_int1e("int1e_zz", origin=True) - self.zzz = self.make_int1e("int1e_zzz", origin=True) - self.zzzz = self.make_int1e("int1e_zzzz", origin=True) + self._moments = {} + for nx in range(5): + for ny in range(5): + for nz in range(5): + if 0 < nx + ny + nz < 5: + self._moments[(nx, ny, nz)] = self.make_int1e( + "int1e_" + nx * "x" + ny * "y" + nz * "z", + origin=True, + ) self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) @@ -771,40 +760,28 @@ def pntchrg(self, point_coords, point_charges): return out def moment(self, orders, origin=None): + r""" + Moment integral. - n = len(orders) - - xs = list(set([elem[0] for elem in orders])) - ys = list(set([elem[1] for elem in orders])) - zs = list(set([elem[2] for elem in orders])) - - if np.greater([xs, ys, zs], 4).any(): - raise ValueError - - x_comps = [0] - x_comps.append(self.x(origin=origin) if 1 in xs else 0) - x_comps.append(self.xx(origin=origin) if 2 in xs else 0) - x_comps.append(self.xxx(origin=origin) if 3 in xs else 0) - x_comps.append(self.xxxx(origin=origin) if 4 in xs else 0) - - y_comps = [0] - y_comps.append(self.y(origin=origin) if 1 in ys else 0) - y_comps.append(self.yy(origin=origin) if 2 in ys else 0) - y_comps.append(self.yyy(origin=origin) if 3 in ys else 0) - y_comps.append(self.yyyy(origin=origin) if 4 in ys else 0) + Notes + ----- + This function is tied to the Libcint functions generated at compile-time. + They were generated up to 4th order for any one X, Y, or Z, and up to 4th order + for any combination of X, Y, or Z (still up to 4th order for any one component). - z_comps = [0] - z_comps.append(self.z(origin=origin) if 1 in zs else 0) - z_comps.append(self.zz(origin=origin) if 2 in zs else 0) - z_comps.append(self.zzz(origin=origin) if 3 in zs else 0) - z_comps.append(self.zzzz(origin=origin) if 4 in zs else 0) + """ - out = np.zeros((self.nbfn, self.nbfn, n), dtype=np.float64) + out = np.zeros((self.nbfn, self.nbfn, len(orders)), dtype=np.float64) - for i, (x, y, z) in enumerate(orders): - out[:, :, i] += x_comps[x] - out[:, :, i] += y_comps[y] - out[:, :, i] += z_comps[z] + try: + for i, order in enumerate(orders): + if sum(order) == 0: + out[:, :, i] = self.olp() + else: + out[:, :, i] = self._moments[tuple(order)](origin=origin) + except KeyError: + raise ValueError("Invalid order; can use up to order 4 for any XYZ component," + "and up to 4th order total using combinations of XYZ components") return out diff --git a/tests/test_libcint.py b/tests/test_libcint.py index f5429084..c12d677c 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -113,7 +113,7 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): elif integral == "mom": py_int = momentum_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - lc_int = lc_basis.mom(origin=np.zeros(3)) + lc_int = lc_basis.mom() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) elif integral == "eri": diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py index bc83667b..b10443e9 100644 --- a/tools/auto_intor_modify.py +++ b/tools/auto_intor_modify.py @@ -1,36 +1,38 @@ import sys +# Original string old_intor1 = '(gen-cint "intor1.c"' -new_intor1 = f'{old_intor1}' -new_intor1 += "\n ".join(( - # Momentum - '\'("int1e_p" ( \\| p))', - # Angular momentum - '\'("int1e_rxp" ( \\| rc cross p))', - # Moment X component - '\'("int1e_x" ( \\| xc \\| ))', - '\'("int1e_xx" ( \\| xc xc \\| ))', - '\'("int1e_xxx" ( \\| xc xc xc \\| ))', - '\'("int1e_xxxx" ( \\| xc xc xc xc \\| ))', - # Moment Y component - '\'("int1e_y" ( \\| yc \\| ))', - '\'("int1e_yy" ( \\| yc yc \\| ))', - '\'("int1e_yyy" ( \\| yc yc yc \\| ))', - '\'("int1e_yyyy" ( \\| yc yc yc yc \\| ))', - # Moment Z component - #'\'("int1e_z" ( \\| zc \\| ))', # already in `libcint` - #'\'("int1e_zz" ( \\| zc zc \\| ))', # already in `libcint` - '\'("int1e_zzz" ( \\| zc zc zc \\| ))', - '\'("int1e_zzzz" ( \\| zc zc zc zc \\| ))', - )) +# Patch string +new_intor1 = old_intor1 +# Momentum +new_intor1 += '\n \'("int1e_p" ( \\| p))' + + +# Angular momentum +new_intor1 += '\n \'("int1e_rxp" ( \\| rc cross p))' + + +# Moment components +for nx in range(5): + for ny in range(5): + for nz in range(5): + # z and zz are already in ``libcint`` + if 0 < nx + ny + nz < 5 and (nx, ny, nz) != (0, 0, 1) and (nx, ny, nz) != (0, 0, 2): + name = nx * "x" + ny * "y" + nz * "z" + oper = nx * "xc " + " " + ny * "yc " + " " + nz * "zc " + new_intor1 += f'\n \'("int1e_{name}" ( \\| {oper} \\| ))' + + +# Read script with open(sys.argv[1], 'r') as f: txt = f.read() +# Patch script with open(sys.argv[1], 'w') as f: f.write(txt.replace(old_intor1, new_intor1)) From 9ddef1ec41c626d43a67000f7e304a1bbaa9ccf6 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 11 Jan 2024 11:42:46 -0500 Subject: [PATCH 66/72] Add shell offsets by atom for nuclear grads --- gbasis/integrals/libcint.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 49ee5cc5..963ec8e0 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -290,12 +290,15 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): nbfn = 0 nenv = 20 + 4 * natm mults = [] + atm_offs = np.zeros(natm + 1, dtype=int) for shell in basis: mults.extend([num_angmom(shell)] * shell.num_seg_cont) + atm_offs[shell.icenter + 1] += num_angmom(shell) * shell.num_seg_cont nbas += shell.num_seg_cont nbfn += num_angmom(shell) * shell.num_seg_cont nenv += shell.exps.size + shell.coeffs.size mults = np.asarray(mults, dtype=c_int) + atm_offs = np.cumsum(atm_offs) # Allocate and fill C input arrays ienv = 20 @@ -374,6 +377,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.mults = mults self.max_mult = max(mults) + # Save atom coordinates and atom shell offsets + self.atcoords = atcoords.copy() + self.atm_offs = atm_offs + # Set inverse sqrt of overlap integral (temporarily, for __init__) self._olp_minhalf = np.ones(nbfn) @@ -397,7 +404,7 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self._moments[(nx, ny, nz)] = self.make_int1e( "int1e_" + nx * "x" + ny * "y" + nz * "z", origin=True, - ) + ) self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) @@ -770,9 +777,9 @@ def moment(self, orders, origin=None): for any combination of X, Y, or Z (still up to 4th order for any one component). """ - + # Make output array out = np.zeros((self.nbfn, self.nbfn, len(orders)), dtype=np.float64) - + # Compute moment integral for each {X,Y,Z} order try: for i, order in enumerate(orders): if sum(order) == 0: @@ -782,13 +789,13 @@ def moment(self, orders, origin=None): except KeyError: raise ValueError("Invalid order; can use up to order 4 for any XYZ component," "and up to 4th order total using combinations of XYZ components") - + # Return integrals in `out` array return out def normalized_coeffs(shell): r""" - Normalize (the radial part of) the spherical GeneralizedContractionShell coefficients. + Normalize the GeneralizedContractionShell coefficients. """ def gaussian_int(l, a): @@ -797,13 +804,9 @@ def gaussian_int(l, a): def gto_norm(l, a): return 1 / np.sqrt(gaussian_int(2 * l + 2, 2 * a)) + # Normalize radial part of GTO cs = np.einsum("km,k->km", shell.coeffs, gto_norm(shell.angmom, shell.exps)) - + # Normalize contractions es = gaussian_int(2 * shell.angmom + 2, shell.exps[:, np.newaxis] + shell.exps[np.newaxis, :]) ss = 1 / np.sqrt(np.einsum("km,kl,lm->m", cs, es, cs)) - cs = np.einsum("km,m->km", cs, ss); - - return cs - - - + return np.einsum("km,m->km", cs, ss) From 7a0ff419bdb44750a76a96ceab71e74209439098 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Thu, 11 Jan 2024 18:18:13 -0500 Subject: [PATCH 67/72] Use x86-optimized qcint by default --- README.md | 6 ++++++ tools/install_libcint.sh | 40 +++++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index e6fee13b..28d5e872 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,12 @@ This script depends on the following packages: * Python 3 * a C compiler (gcc or clang are recommended) * a Common Lisp interpreter (sbcl or clisp are recommended) +By default, the x86-optimized `qcint` package is used for `libcint`. +If this doesn't work on your computer, then run the script with the environment +variable `USE_LIBCINT=1` to use the regular `libcint` package: +```bash +USE_LIBCINT=1 tools/install_libcint.sh +``` Note that `iodata` must be installed separately. `cython` is a dependency of `iodata`. diff --git a/tools/install_libcint.sh b/tools/install_libcint.sh index e874c656..0653be27 100755 --- a/tools/install_libcint.sh +++ b/tools/install_libcint.sh @@ -3,15 +3,21 @@ # Libcint version to patch and install LIBCINT_VERSION=v6.1.0 +if [ -z ${USE_LIBCINT:-} ]; then + cint_name=qcint +else + cint_name=libcint +fi + # Notice for user -echo '' -echo ' NOTE: If this script has been run previously, and it failed, please ensure' -echo ' the `build/libcint/build` directory is removed before running it again.' -echo '' -echo ' See the GBasis documentation for help:' -echo '' -echo ' https://theochem.github.io/gbasis/PLACEHOLDER/' -echo '' +echo "" +echo " NOTE: If this script has been run previously, and it failed, please ensure" +echo " the \`build/${cint_name}/build\` directory is removed before running it again." +echo "" +echo " See the GBasis documentation for help:" +echo "" +echo " https://theochem.github.io/gbasis/PLACEHOLDER/" +echo "" # Check that a Common Lisp program is installed if command -v sbcl > /dev/null; then @@ -19,9 +25,9 @@ if command -v sbcl > /dev/null; then elif command -v clisp > /dev/null; then lisp_program='clisp' else - echo 'ERROR: This script requires a Common Lisp interpreter.' - echo ' Please install either sbcl or clisp and try again.' - echo '' + echo "ERROR: This script requires a Common Lisp interpreter." + echo " Please install either sbcl or clisp and try again." + echo "" exit 1 fi @@ -33,7 +39,7 @@ gbasis_dir=$(cd "$(dirname "$(dirname "${0}")")" && pwd) # Cleanup function; runs on failure or exit cleanup() { - rm -rf "${gbasis_dir}/build/libcint/build" + rm -rf "${gbasis_dir}/build/${cint_name}/build" } trap cleanup EXIT @@ -49,10 +55,10 @@ mkdir -p "${gbasis_dir}/build" cd "${gbasis_dir}/build" # Clone Libcint Git repo and enter it -if [ ! -e "${gbasis_dir}/build/libcint" ]; then - git clone --branch ${LIBCINT_VERSION} --depth 1 https://github.com/sunqm/libcint.git +if [ ! -e "${gbasis_dir}/build/${cint_name}" ]; then + git clone --branch ${LIBCINT_VERSION} --depth 1 https://github.com/sunqm/${cint_name}.git fi -cd libcint +cd "${cint_name}" git checkout . # Auto-generate integrals @@ -68,5 +74,5 @@ cd build cmake "-DCMAKE_INSTALL_PREFIX=${gbasis_dir}/gbasis/integrals" ${lc_cmake_opts} .. # Compile and install Libcint -make # cmake --build . -make install # cmake --install . +make +make install From 30305f51a71e9480e0803c7382aff8cc68eae1a7 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 15 Jan 2024 09:59:04 -0500 Subject: [PATCH 68/72] Clean up CBasis attr names and add class doc. --- gbasis/integrals/libcint.py | 288 ++++++++++++++++++++++++++++-------- tests/test_libcint.py | 42 +++--- 2 files changed, 247 insertions(+), 83 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 963ec8e0..82f0093d 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -254,7 +254,54 @@ class CBasis: r""" ``libcint`` basis class. + Attributes + ---------- + coord_type : ("spherical" | "cartesian") + Coordinate type of ``libcint`` basis. + natm : int + Number of atoms. + nbas : int + Number of shells. + nbfn : int + Number of basis functions. + atm : np.ndarray(Natm, 6, dtype=float) + Buffer of atom information for ``libcint``. + bas : np.ndarray(Nbas, 8, dtype=float) + Buffer of basis shell information for ``libcint``. + env : np.ndarray(Nenv, dtype=float) + Buffer of numerical atom/basis shell data for ``libcint``. + atnums : np.ndarray(Natm, dtype=int) + Array of atomic numbers. + atcoords : np.ndarray(Natm, 3, dtype=float) + Array of atomic coordinates. + + Methods + ------- + make_int1e(self, func_name, components=tuple(), constant=None, is_complex=False, origin=False, inv_origin=False) + Make an instance-bound 1-electron integral method from a ``libcint`` function. + make_int2e(self, func_name, components=tuple(), constant=None, is_complex=False, origin=False, inv_origin=False) + Make an instance-bound 2-electron integral method from a ``libcint`` function. + overlap(self) + Compute the overlap integrals. + kinetic_energy(self) + Compute the kinetic energy integrals. + nuclear_attraction(self) + Compute the nuclear attraction integrals. + electron_repulsion(self) + Compute the electron repulsion integrals. + r_inv(self, origin=None) + Compute the :math:`1/\left|\mathbf{r} - \mathbf{R}_\text{inv}\right|` integrals. + momentum(self, origin=None) + Compute the momentum integrals. + angular_momentum(self, origin=None) + Compute the angular momentum integrals. + point_charge(self, point_coords, point_charges) + Compute the point charge integrals. + moment(self, orders, origin=None) + Compute the moment integrals. + """ + def __init__(self, basis, atnums, atcoords, coord_type="spherical"): r""" Initialize a ``CBasis`` instance. @@ -289,15 +336,15 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): nbas = 0 nbfn = 0 nenv = 20 + 4 * natm - mults = [] + offs = [] atm_offs = np.zeros(natm + 1, dtype=int) for shell in basis: - mults.extend([num_angmom(shell)] * shell.num_seg_cont) + offs.extend([num_angmom(shell)] * shell.num_seg_cont) atm_offs[shell.icenter + 1] += num_angmom(shell) * shell.num_seg_cont nbas += shell.num_seg_cont nbfn += num_angmom(shell) * shell.num_seg_cont nenv += shell.exps.size + shell.coeffs.size - mults = np.asarray(mults, dtype=c_int) + offs = np.asarray(offs, dtype=c_int) atm_offs = np.cumsum(atm_offs) # Allocate and fill C input arrays @@ -341,8 +388,8 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): env[icoef:ienv] = normalized_coeffs(shell).reshape(-1, order="F") # Unpack generalized contractions for iprim in range(icoef, icoef + shell.coeffs.size, nprim): - # Basis function mult - mults[ibas] = nl + # Basis function offset + offs[ibas] = nl # Index of corresponding atom bas[ibas, 0] = shell.icenter # Angular momentum @@ -373,29 +420,31 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self.bas = bas self.env = env - # Save basis function mults - self.mults = mults - self.max_mult = max(mults) - # Save atom coordinates and atom shell offsets + self.atnums = atnums.copy() self.atcoords = atcoords.copy() - self.atm_offs = atm_offs + self._atm_offs = atm_offs + + # Save basis function offsets + self._offs = offs + self._max_off = max(offs) # Set inverse sqrt of overlap integral (temporarily, for __init__) - self._olp_minhalf = np.ones(nbfn) + self._ovlp_minhalf = np.ones(nbfn) # Integrals - self.olp = self.make_int1e("int1e_ovlp") - self.kin = self.make_int1e("int1e_kin") - self.nuc = self.make_int1e("int1e_nuc") - self.eri = self.make_int2e("int2e") - - self.rinv = self.make_int1e("int1e_rinv", inv_origin=True) - - self.mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True) - - self.amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) - + self._ovlp = self.make_int1e("int1e_ovlp") + self._kin = self.make_int1e("int1e_kin") + self._nuc = self.make_int1e("int1e_nuc") + self._eri = self.make_int2e("int2e") + self._rinv = self.make_int1e("int1e_rinv", inv_origin=True) + self._mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) + self._amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) + self._d_ovlp = self.make_int1e("int1e_ipovlp", components=(3,)) + self._d_kin = self.make_int1e("int1e_ipkin", components=(3,)) + self._d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) + self._d_eri = self.make_int2e("int2e_ip1", components=(3,)) + self._d_rinv = self.make_int1e("int1e_iprinv", components=(3,), inv_origin=True) self._moments = {} for nx in range(5): for ny in range(5): @@ -406,22 +455,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): origin=True, ) - self.d_olp = self.make_int1e("int1e_ipovlp", components=(3,)) - self.d_kin = self.make_int1e("int1e_ipkin", components=(3,)) - self.d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) - self.d_eri = self.make_int2e("int2e_ip1", components=(3,)) - - self.d_rinv = self.make_int1e("int1e_iprinv", components=(3,), inv_origin=True) - - self.d2_olp = self.make_int1e("int1e_ipipovlp", components=(3, 3)) - self.d2_nuc = self.make_int1e("int1e_ipipnuc", components=(3, 3)) - self.d2_kin = self.make_int1e("int1e_ipipkin", components=(3, 3)) - self.d2_eri = self.make_int2e("int2e_ipip1", components=(3, 3)) - # Set proper value for inverse sqrt of overlap integral # for cartesian basis sets if coord_type == "cartesian": - self._olp_minhalf = 1 / np.sqrt(np.diag(self.olp())) + self._ovlp_minhalf = 1 / np.sqrt(np.diag(self._ovlp())) @contextmanager def optimizer(self, opt_func): @@ -485,7 +522,7 @@ def make_int1e(self, func_name, components=tuple(), constant=None, is_complex=Fa components += (2,) prod_comp = np.prod(components, dtype=int) out_shape = (self.nbfn, self.nbfn) + components - buf_shape = prod_comp * self.max_mult ** 2 + buf_shape = prod_comp * self._max_off ** 2 # Handle [inv_]origin argument (prevent shadowing) has_origin_arg = bool(origin) @@ -532,21 +569,17 @@ def int1e(notation="physicist", origin=None, inv_origin=None): ipos = 0 for ishl in range(self.nbas): shls[0] = ishl - # p_conv = convs[self.bas[ishl, 1]] - p_off = self.mults[ishl] + p_off = self._offs[ishl] jpos = 0 for jshl in range(ishl + 1): shls[1] = jshl - # q_conv = convs[self.bas[jshl, 1]] - q_off = self.mults[jshl] + q_off = self._offs[jshl] # Call the C function to fill `buf` func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) # Fill `out` array buf_array = buf[:p_off * q_off * prod_comp].reshape(p_off, q_off, *components, order="F") - # for p in p_conv: for p in range(p_off): i_off = p + ipos - # for q in q_conv: for q in range(q_off): j_off = q + jpos out[i_off, j_off] = buf_array[p, q] @@ -572,7 +605,7 @@ def int1e(notation="physicist", origin=None, inv_origin=None): # Return normalized integrals if self.coord_type == "cartesian": - return np.einsum(norm_einsum, self._olp_minhalf, self._olp_minhalf, out) + return np.einsum(norm_einsum, self._ovlp_minhalf, self._ovlp_minhalf, out) else: return out @@ -617,7 +650,7 @@ def make_int2e(self, func_name, components=tuple(), constant=None, is_complex=Fa components += (2,) prod_comp = np.prod(components, dtype=int) out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn) + components - buf_shape = prod_comp * self.max_mult ** 4 + buf_shape = prod_comp * self._max_off ** 4 # Handle [inv_]origin argument (prevent shadowing) has_origin_arg = bool(origin) @@ -668,25 +701,21 @@ def int2e(notation="physicist", origin=None, inv_origin=None): ipos = 0 for ishl in range(self.nbas): shls[0] = ishl - # p_conv = convs[self.bas[ishl, 1]] - p_off = self.mults[ishl] + p_off = self._offs[ishl] jpos = 0 for jshl in range(ishl + 1): ij = ((ishl + 1) * ishl) // 2 + jshl shls[1] = jshl - # q_conv = convs[self.bas[jshl, 1]] - q_off = self.mults[jshl] + q_off = self._offs[jshl] kpos = 0 for kshl in range(self.nbas): shls[2] = kshl - # r_conv = convs[self.bas[kshl, 1]] - r_off = self.mults[kshl] + r_off = self._offs[kshl] lpos = 0 for lshl in range(kshl + 1): kl = ((kshl + 1) * kshl) // 2 + lshl shls[3] = lshl - # s_conv = convs[self.bas[lshl, 1]] - s_off = self.mults[lshl] + s_off = self._offs[lshl] if ij < kl: lpos += s_off continue @@ -695,16 +724,12 @@ def int2e(notation="physicist", origin=None, inv_origin=None): # Fill `out` array buf_array = buf[:p_off * q_off * r_off * s_off * prod_comp].reshape(p_off, q_off, r_off, s_off, *components, order="F") for p in range(p_off): - # for p in p_conv: i_off = p + ipos for q in range(q_off): - # for q in q_conv: j_off = q + jpos for r in range(r_off): - # for r in r_conv: k_off = r + kpos for s in range(s_off): - # for s in s_conv: l_off = s + lpos out[i_off, j_off, k_off, l_off] = buf_array[p, q, r, s] out[i_off, j_off, l_off, k_off] = buf_array[p, q, r, s] @@ -745,7 +770,7 @@ def int2e(notation="physicist", origin=None, inv_origin=None): if self.coord_type == "cartesian": return np.einsum( norm_einsum, - self._olp_minhalf, self._olp_minhalf, self._olp_minhalf, self._olp_minhalf, + self._ovlp_minhalf, self._ovlp_minhalf, self._ovlp_minhalf, self._ovlp_minhalf, out, ) else: @@ -754,13 +779,127 @@ def int2e(notation="physicist", origin=None, inv_origin=None): # Return instance-bound integral method return int2e - def pntchrg(self, point_coords, point_charges): - r"""Point charge integral.""" + def overlap(self): + r""" + Compute the overlap integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, dtype=float) + Integral array. + + """ + return self._ovlp() + + def kinetic_energy(self): + r""" + Compute the kinetic energy integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, dtype=float) + Integral array. + + """ + return self._kin() + + def nuclear_attraction(self): + r""" + Compute the nuclear attraction integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, dtype=float) + Integral array. + + """ + return self._nuc() + + def electron_repulsion(self): + r""" + Compute the electron repulsion integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, Nbasis, Nbasis, dtype=float) + Integral array. + + """ + return self._eri() + + def r_inv(self, origin=None): + r""" + Compute the :math:`1/\left|\mathbf{r} - \mathbf{R}_\text{inv}\right|` integrals. + + Parameters + ---------- + origin : np.ndarray(3, dtype=float), default=[0, 0, 0] + Origin about which to evaluate integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, dtype=float) + Integral array. + + """ + return self._rinv(inv_origin=origin) + + def momentum(self, origin=None): + r""" + Compute the momentum integrals. + + Parameters + ---------- + origin : np.ndarray(3, dtype=float), default=[0, 0, 0] + Origin about which to evaluate integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, 3, dtype=complex) + Integral array. + + """ + return self._mom(origin=origin) + + def angular_momentum(self, origin=None): + r""" + Compute the angular momentum integrals. + + Parameters + ---------- + origin : np.ndarray(3, dtype=float), default=[0, 0, 0] + Origin about which to evaluate integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, 3, dtype=complex) + Integral array. + + """ + return self._amom(origin=origin) + + def point_charge(self, point_coords, point_charges): + r""" + Compute the point charge integrals. + + Parameters + ---------- + point_coords : np.ndarray(N, 3, dtype=float) + Coordinates of point charges. + point_charges : np.ndarray(N, dtype=float) + Charges of point charges. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, N, dtype=float) + Integral array. + + """ # Make output array out = np.zeros((self.nbfn, self.nbfn, len(point_charges)), dtype=c_double, order="F") # Compute 1/|r - r_{inv}| for each charge for icharge, (coord, charge) in enumerate(zip(point_coords, point_charges)): - val = self.rinv(inv_origin=coord) + val = self._rinv(inv_origin=coord) val *= -charge out[:, :, icharge] = val # Return integrals in `out` array @@ -768,7 +907,19 @@ def pntchrg(self, point_coords, point_charges): def moment(self, orders, origin=None): r""" - Moment integral. + Compute the moment integrals. + + Parameters + ---------- + orders : np.ndarray(N, 3, dtype=int) + Moment orders :math:`\left[x, y, z\right\]` to evaluate. + origin : np.ndarray(3, dtype=float), default=[0, 0, 0] + Origin about which to evaluate integrals. + + Returns + ------- + out : np.ndarray(Nbasis, Nbasis, N, dtype=float) + Integral array. Notes ----- @@ -783,7 +934,7 @@ def moment(self, orders, origin=None): try: for i, order in enumerate(orders): if sum(order) == 0: - out[:, :, i] = self.olp() + out[:, :, i] = self._ovlp() else: out[:, :, i] = self._moments[tuple(order)](origin=origin) except KeyError: @@ -797,6 +948,19 @@ def normalized_coeffs(shell): r""" Normalize the GeneralizedContractionShell coefficients. + Parameters + ---------- + shell : GeneralizedContractionShell + + Returns + ------- + coeffs : np.ndarray(K, M, dtype=float) + Normalized contraction coefficients. + + Notes + ----- + Adapted from `https://github.com/pyscf/pyscf/blob/master/pyscf/gto/mole.py`. + """ def gaussian_int(l, a): return 0.5 * factorial(0.5 * l - 0.5) * a ** (-0.5 * l - 0.5) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index c12d677c..c1001a74 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -47,13 +47,13 @@ TEST_INTEGRALS = [ - pytest.param("olp", id="Overlap"), - pytest.param("kin", id="KineticEnergy"), - pytest.param("nuc", id="NuclearAttraction"), - pytest.param("mom", id="Momentum"), - pytest.param("amom", id="AngularMomentum"), - pytest.param("eri", id="ElectronRepulsion"), - pytest.param("pntchrg", id="PointCharge"), + pytest.param("overlap", id="Overlap"), + pytest.param("kinetic_energy", id="KineticEnergy"), + pytest.param("nuclear_attraction", id="NuclearAttraction"), + pytest.param("momentum", id="Momentum"), + pytest.param("angular_momentum", id="AngularMomentum"), + pytest.param("electron_repulsion", id="ElectronRepulsion"), + pytest.param("point_charge", id="PointCharge"), pytest.param("moment", id="Moment"), ] @@ -86,49 +86,49 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) - if integral == "olp": + if integral == "overlap": py_int = overlap_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) - lc_int = lc_basis.olp() + lc_int = lc_basis.overlap() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) - elif integral == "kin": + elif integral == "kinetic_energy": py_int = kinetic_energy_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) - lc_int = lc_basis.kin() + lc_int = lc_basis.kinetic_energy() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) - elif integral == "nuc": + elif integral == "nuclear_attraction": py_int = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) - lc_int = lc_basis.nuc() + lc_int = lc_basis.nuclear_attraction() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) - elif integral == "amom": + elif integral == "angular_momentum": py_int = angular_momentum_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - lc_int = lc_basis.amom(origin=np.zeros(3)) + lc_int = lc_basis.angular_momentum(origin=np.zeros(3)) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - elif integral == "mom": + elif integral == "momentum": py_int = momentum_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - lc_int = lc_basis.mom() + lc_int = lc_basis.momentum(origin=np.zeros(3)) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - elif integral == "eri": + elif integral == "electron_repulsion": py_int = electron_repulsion_integral(py_basis, coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) - lc_int = lc_basis.eri() + lc_int = lc_basis.electron_repulsion() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) - elif integral == "pntchrg": + elif integral == "point_charge": charge_coords = np.asarray([[2., 2., 2.], [-3., -3., -3.], [-1., 2., -3.]]) charges = np.asarray([1., 0.666, -3.1415926]) for i in range(1, len(charges) + 1): py_int = point_charge_integral(py_basis, charge_coords[:i], charges[:i], coord_type=coord_type) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) - lc_int = lc_basis.pntchrg(charge_coords[:i], charges[:i]) + lc_int = lc_basis.point_charge(charge_coords[:i], charges[:i]) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) elif integral == "moment": From 00d4248f8a1a4189dbc44639f8f856c9268dfc5b Mon Sep 17 00:00:00 2001 From: leila-pujal Date: Mon, 15 Jan 2024 13:47:02 -0500 Subject: [PATCH 69/72] Include changes introduced in #140 --- tests/test_libcint.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index c1001a74..67a4aa19 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -76,48 +76,42 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): basis_dict = parse_nwchem(find_datafile(basis)) - atsyms = ["H", "He"] - - atcoords = np.array([[0., 0., 0.], [0.8, 0., 0.]]) / 0.5291772083 - - gbasis = make_contractions(basis_dict, atsyms, atcoords) - gbasis_olp = overlap_integral(gbasis, coord_type="cartesian") - py_basis = make_contractions(basis_dict, atsyms, atcoords) + py_basis = make_contractions(basis_dict, atsyms, atcoords, coord_types=coord_type) lc_basis = CBasis(py_basis, atsyms, atcoords, coord_type=coord_type) if integral == "overlap": - py_int = overlap_integral(py_basis, coord_type=coord_type) + py_int = overlap_integral(py_basis) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.overlap() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "kinetic_energy": - py_int = kinetic_energy_integral(py_basis, coord_type=coord_type) + py_int = kinetic_energy_integral(py_basis) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.kinetic_energy() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "nuclear_attraction": - py_int = nuclear_electron_attraction_integral(py_basis, atcoords, atnums, coord_type=coord_type) + py_int = nuclear_electron_attraction_integral(py_basis, atcoords, atnums) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.nuclear_attraction() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "angular_momentum": - py_int = angular_momentum_integral(py_basis, coord_type=coord_type) + py_int = angular_momentum_integral(py_basis) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) lc_int = lc_basis.angular_momentum(origin=np.zeros(3)) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) elif integral == "momentum": - py_int = momentum_integral(py_basis, coord_type=coord_type) + py_int = momentum_integral(py_basis) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) lc_int = lc_basis.momentum(origin=np.zeros(3)) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) elif integral == "electron_repulsion": - py_int = electron_repulsion_integral(py_basis, coord_type=coord_type) + py_int = electron_repulsion_integral(py_basis) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) lc_int = lc_basis.electron_repulsion() npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) @@ -126,7 +120,7 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): charge_coords = np.asarray([[2., 2., 2.], [-3., -3., -3.], [-1., 2., -3.]]) charges = np.asarray([1., 0.666, -3.1415926]) for i in range(1, len(charges) + 1): - py_int = point_charge_integral(py_basis, charge_coords[:i], charges[:i], coord_type=coord_type) + py_int = point_charge_integral(py_basis, charge_coords[:i], charges[:i]) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) lc_int = lc_basis.point_charge(charge_coords[:i], charges[:i]) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) @@ -143,7 +137,7 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): [1, 1, 0], [1, 0, 1], [0, 1, 1]]) - py_int = moment_integral(py_basis, origin, orders, coord_type=coord_type) + py_int = moment_integral(py_basis, origin, orders) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, len(orders))) lc_int = lc_basis.moment(orders, origin=origin) npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, len(orders))) From f10f3df5bd08313d9cf786b4a013bbe6ecd45d20 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 18:54:58 +0000 Subject: [PATCH 70/72] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/notes.tex | 2 +- gbasis/contractions.py | 12 +- gbasis/integrals/libcint.py | 289 +++++++++++++++++++++++++++++------- gbasis/parsers.py | 11 +- gbasis/wrappers.py | 8 +- tests/test_libcint.py | 56 ++++--- tests/test_overlap.py | 21 ++- tools/auto_intor_modify.py | 4 +- 8 files changed, 307 insertions(+), 96 deletions(-) diff --git a/docs/notes.tex b/docs/notes.tex index e9c75572..0356d389 100644 --- a/docs/notes.tex +++ b/docs/notes.tex @@ -811,7 +811,7 @@ \subsubsection{Gradient of density} with respect to atomic orbitals, \begin{lstlisting}[xleftmargin=-25pt] from gbasis.evals.density import evaluate_density_gradient - + output = evaluate_density_gradient(one_dm, basis, grid_3d, deriv_type="direct") \end{lstlisting} \item To evaluate the gradient of the density using density matrix expressed diff --git a/gbasis/contractions.py b/gbasis/contractions.py index c58580b9..3c1183e7 100644 --- a/gbasis/contractions.py +++ b/gbasis/contractions.py @@ -114,7 +114,9 @@ class GeneralizedContractionShell: """ - def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e-15, ovr_screen=False): + def __init__( + self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e-15, ovr_screen=False + ): r"""Initialize a GeneralizedContractionShell instance. Parameters @@ -158,10 +160,10 @@ def __init__(self, angmom, coord, coeffs, exps, coord_type, icenter=None, tol=1e def icenter(self): """Atom center index for the contractions. - Returns - ------- - icenter : int or None - Index for the corresponding atom center of the contractions. + Returns + ------- + icenter : int or None + Index for the corresponding atom center of the contractions. """ return self._icenter diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 82f0093d..6fbae507 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -29,16 +29,125 @@ ELEMENTS = ( - "\0", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", - "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", - "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", - "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", - "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", - "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", - "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", "Tl", "Pb", "Bi", - "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", "Pa", "U", "Np", "Pu", "Am", - "Cm", "Bk", "Cf", "Es", "Fm", "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", - "Hs", "Mt", "Ds", "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og", + "\0", + "H", + "He", + "Li", + "Be", + "B", + "C", + "N", + "O", + "F", + "Ne", + "Na", + "Mg", + "Al", + "Si", + "P", + "S", + "Cl", + "Ar", + "K", + "Ca", + "Sc", + "Ti", + "V", + "Cr", + "Mn", + "Fe", + "Co", + "Ni", + "Cu", + "Zn", + "Ga", + "Ge", + "As", + "Se", + "Br", + "Kr", + "Rb", + "Sr", + "Y", + "Zr", + "Nb", + "Mo", + "Tc", + "Ru", + "Rh", + "Pd", + "Ag", + "Cd", + "In", + "Sn", + "Sb", + "Te", + "I", + "Xe", + "Cs", + "Ba", + "La", + "Ce", + "Pr", + "Nd", + "Pm", + "Sm", + "Eu", + "Gd", + "Tb", + "Dy", + "Ho", + "Er", + "Tm", + "Yb", + "Lu", + "Hf", + "Ta", + "W", + "Re", + "Os", + "Ir", + "Pt", + "Au", + "Hg", + "Tl", + "Pb", + "Bi", + "Po", + "At", + "Rn", + "Fr", + "Ra", + "Ac", + "Th", + "Pa", + "U", + "Np", + "Pu", + "Am", + "Cm", + "Bk", + "Cf", + "Es", + "Fm", + "Md", + "No", + "Lr", + "Rf", + "Db", + "Sg", + "Bh", + "Hs", + "Mt", + "Ds", + "Rg", + "Cn", + "Nh", + "Fl", + "Mc", + "Lv", + "Ts", + "Og", ) r""" Tuple of all 118 elements. @@ -49,14 +158,14 @@ """ -INTEGRAL_REGEX = re.compile(r'^(?!.*optimizer$)int[12]e.+') +INTEGRAL_REGEX = re.compile(r"^(?!.*optimizer$)int[12]e.+") r""" Regex for matching ``libcint`` integral functions. """ -OPTIMIZER_REGEX = re.compile(r'^(?=.*optimizer$)int[12]e.+') +OPTIMIZER_REGEX = re.compile(r"^(?=.*optimizer$)int[12]e.+") r""" Regex for matching ``libcint`` optimizer functions. @@ -70,8 +179,8 @@ def ndptr(enable_null=False, **kwargs): Null pointers are passed via ``None`` in Python. """ - def from_param(cls, obj): + def from_param(cls, obj): return obj if obj is None else base.from_param(obj) base = np.ctypeslib.ndpointer(**kwargs) @@ -172,25 +281,25 @@ def __getattr__(self, attr): cfunc = getattr(self._libcint, attr) cfunc.argtypes = ( # out - ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS', 'WRITEABLE')), + ndptr(dtype=c_double, ndim=1, flags=("C_CONTIGUOUS", "WRITEABLE")), # dims - ndptr(enable_null=True, dtype=c_int, ndim=1, flags=('C_CONTIGUOUS')), + ndptr(enable_null=True, dtype=c_int, ndim=1, flags=("C_CONTIGUOUS")), # shls - ndptr(dtype=c_int, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=1, flags=("C_CONTIGUOUS",)), # atm - ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=("C_CONTIGUOUS",)), # natm c_int, # bas - ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=("C_CONTIGUOUS",)), # nbas c_int, # env - ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_double, ndim=1, flags=("C_CONTIGUOUS",)), # opt POINTER(CINTOpt), # cache - ndptr(enable_null=True, dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(enable_null=True, dtype=c_double, ndim=1, flags=("C_CONTIGUOUS",)), ) cfunc.restype = c_int @@ -201,19 +310,19 @@ def __getattr__(self, attr): # opt POINTER(POINTER(CINTOpt)), # atm - ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=("C_CONTIGUOUS",)), # natm c_int, # bas - ndptr(dtype=c_int, ndim=2, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_int, ndim=2, flags=("C_CONTIGUOUS",)), # nbas c_int, # env - ndptr(dtype=c_double, ndim=1, flags=('C_CONTIGUOUS',)), + ndptr(dtype=c_double, ndim=1, flags=("C_CONTIGUOUS",)), ) else: - raise ValueError(f'there is no ``gbasis`` API for the function {attr}') + raise ValueError(f"there is no ``gbasis`` API for the function {attr}") # Cache the C function self._cache[attr] = cfunc @@ -325,8 +434,10 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): elif coord_type == "cartesian": num_angmom = attrgetter("num_cart") else: - raise ValueError("``coord_type`` parameter must be 'spherical' or 'cartesian'; " - f"the provided value, '{coord_type}', is invalid") + raise ValueError( + "``coord_type`` parameter must be 'spherical' or 'cartesian'; " + f"the provided value, '{coord_type}', is invalid" + ) # Process `atnums` atnums = [ELEMENTS.index(elem) for elem in atnums] @@ -360,14 +471,14 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): # `env` offset to save xyz coordinates atm_row[1] = ienv # Save xyz coordinates; increment ienv - env[ienv:ienv + 3] = atcoord + env[ienv : ienv + 3] = atcoord ienv += 3 # Nuclear model of i'th atm; unused here atm_row[2] = 0 # `env` offset to save nuclear model zeta parameter; unused here atm_row[3] = ienv # Save zeta parameter; increment ienv - env[ienv:ienv + 1] = 0 + env[ienv : ienv + 1] = 0 ienv += 1 # Reserved/unused in `libcint` atm_row[4:6] = 0 @@ -438,8 +549,12 @@ def __init__(self, basis, atnums, atcoords, coord_type="spherical"): self._nuc = self.make_int1e("int1e_nuc") self._eri = self.make_int2e("int2e") self._rinv = self.make_int1e("int1e_rinv", inv_origin=True) - self._mom = self.make_int1e("int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True) - self._amom = self.make_int1e("int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True) + self._mom = self.make_int1e( + "int1e_p", components=(3,), constant=-1j, is_complex=True, origin=True + ) + self._amom = self.make_int1e( + "int1e_rxp", components=(3,), constant=-1j, is_complex=True, origin=True + ) self._d_ovlp = self.make_int1e("int1e_ipovlp", components=(3,)) self._d_kin = self.make_int1e("int1e_ipkin", components=(3,)) self._d_nuc = self.make_int1e("int1e_ipnuc", components=(3,)) @@ -484,7 +599,15 @@ def optimizer(self, opt_func): # Free optimizer from memory (always called) LIBCINT.CINTdel_optimizer(byref(opt)) - def make_int1e(self, func_name, components=tuple(), constant=None, is_complex=False, origin=False, inv_origin=False): + def make_int1e( + self, + func_name, + components=tuple(), + constant=None, + is_complex=False, + origin=False, + inv_origin=False, + ): r""" Make an instance-bound 1-electron integral method from a ``libcint`` function. @@ -522,19 +645,20 @@ def make_int1e(self, func_name, components=tuple(), constant=None, is_complex=Fa components += (2,) prod_comp = np.prod(components, dtype=int) out_shape = (self.nbfn, self.nbfn) + components - buf_shape = prod_comp * self._max_off ** 2 + buf_shape = prod_comp * self._max_off**2 # Handle [inv_]origin argument (prevent shadowing) has_origin_arg = bool(origin) has_inv_origin_arg = bool(inv_origin) # Make einsum string for normalization - norm_einsum = f"a,b,ab{'cdefghijklmnopqrstuvwxyz'[:n_components]}->" \ + norm_einsum = ( + f"a,b,ab{'cdefghijklmnopqrstuvwxyz'[:n_components]}->" + f"ab{'cdefghijklmnopqrstuvwxyz'[:n_components]}" + ) # Make instance-bound integral method def int1e(notation="physicist", origin=None, inv_origin=None): - # Handle ``notation`` argument if notation not in ("physicist", "chemist"): raise ValueError("``notation`` must be one of 'physicist' or 'chemist'") @@ -575,9 +699,22 @@ def int1e(notation="physicist", origin=None, inv_origin=None): shls[1] = jshl q_off = self._offs[jshl] # Call the C function to fill `buf` - func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) + func( + buf, + None, + shls, + self.atm, + self.natm, + self.bas, + self.nbas, + self.env, + opt, + None, + ) # Fill `out` array - buf_array = buf[:p_off * q_off * prod_comp].reshape(p_off, q_off, *components, order="F") + buf_array = buf[: p_off * q_off * prod_comp].reshape( + p_off, q_off, *components, order="F" + ) for p in range(p_off): i_off = p + ipos for q in range(q_off): @@ -612,7 +749,15 @@ def int1e(notation="physicist", origin=None, inv_origin=None): # Return instance-bound integral method return int1e - def make_int2e(self, func_name, components=tuple(), constant=None, is_complex=False, origin=False, inv_origin=False): + def make_int2e( + self, + func_name, + components=tuple(), + constant=None, + is_complex=False, + origin=False, + inv_origin=False, + ): r""" Make an instance-bound 2-electron integral method from a ``libcint`` function. @@ -650,19 +795,20 @@ def make_int2e(self, func_name, components=tuple(), constant=None, is_complex=Fa components += (2,) prod_comp = np.prod(components, dtype=int) out_shape = (self.nbfn, self.nbfn, self.nbfn, self.nbfn) + components - buf_shape = prod_comp * self._max_off ** 4 + buf_shape = prod_comp * self._max_off**4 # Handle [inv_]origin argument (prevent shadowing) has_origin_arg = bool(origin) has_inv_origin_arg = bool(inv_origin) # Make einsum string for normalization - norm_einsum = f"a,b,c,d,abcd{'efghijklmnopqrstuvwxyz'[:n_components]}->" + \ - f"abcd{'efghijklmnopqrstuvwxyz'[:n_components]}" + norm_einsum = ( + f"a,b,c,d,abcd{'efghijklmnopqrstuvwxyz'[:n_components]}->" + + f"abcd{'efghijklmnopqrstuvwxyz'[:n_components]}" + ) # Make instance-bound integral method def int2e(notation="physicist", origin=None, inv_origin=None): - # Handle ``notation`` argument if notation == "physicist": physicist = True @@ -720,9 +866,22 @@ def int2e(notation="physicist", origin=None, inv_origin=None): lpos += s_off continue # Call the C function to fill `buf` - func(buf, None, shls, self.atm, self.natm, self.bas, self.nbas, self.env, opt, None) + func( + buf, + None, + shls, + self.atm, + self.natm, + self.bas, + self.nbas, + self.env, + opt, + None, + ) # Fill `out` array - buf_array = buf[:p_off * q_off * r_off * s_off * prod_comp].reshape(p_off, q_off, r_off, s_off, *components, order="F") + buf_array = buf[ + : p_off * q_off * r_off * s_off * prod_comp + ].reshape(p_off, q_off, r_off, s_off, *components, order="F") for p in range(p_off): i_off = p + ipos for q in range(q_off): @@ -731,14 +890,30 @@ def int2e(notation="physicist", origin=None, inv_origin=None): k_off = r + kpos for s in range(s_off): l_off = s + lpos - out[i_off, j_off, k_off, l_off] = buf_array[p, q, r, s] - out[i_off, j_off, l_off, k_off] = buf_array[p, q, r, s] - out[j_off, i_off, k_off, l_off] = buf_array[p, q, r, s] - out[j_off, i_off, l_off, k_off] = buf_array[p, q, r, s] - out[k_off, l_off, i_off, j_off] = buf_array[p, q, r, s] - out[k_off, l_off, j_off, i_off] = buf_array[p, q, r, s] - out[l_off, k_off, i_off, j_off] = buf_array[p, q, r, s] - out[l_off, k_off, j_off, i_off] = buf_array[p, q, r, s] + out[i_off, j_off, k_off, l_off] = buf_array[ + p, q, r, s + ] + out[i_off, j_off, l_off, k_off] = buf_array[ + p, q, r, s + ] + out[j_off, i_off, k_off, l_off] = buf_array[ + p, q, r, s + ] + out[j_off, i_off, l_off, k_off] = buf_array[ + p, q, r, s + ] + out[k_off, l_off, i_off, j_off] = buf_array[ + p, q, r, s + ] + out[k_off, l_off, j_off, i_off] = buf_array[ + p, q, r, s + ] + out[l_off, k_off, i_off, j_off] = buf_array[ + p, q, r, s + ] + out[l_off, k_off, j_off, i_off] = buf_array[ + p, q, r, s + ] # Reset `buf` buf[:] = 0 # Iterate `lpos` @@ -770,7 +945,10 @@ def int2e(notation="physicist", origin=None, inv_origin=None): if self.coord_type == "cartesian": return np.einsum( norm_einsum, - self._ovlp_minhalf, self._ovlp_minhalf, self._ovlp_minhalf, self._ovlp_minhalf, + self._ovlp_minhalf, + self._ovlp_minhalf, + self._ovlp_minhalf, + self._ovlp_minhalf, out, ) else: @@ -938,8 +1116,10 @@ def moment(self, orders, origin=None): else: out[:, :, i] = self._moments[tuple(order)](origin=origin) except KeyError: - raise ValueError("Invalid order; can use up to order 4 for any XYZ component," - "and up to 4th order total using combinations of XYZ components") + raise ValueError( + "Invalid order; can use up to order 4 for any XYZ component," + "and up to 4th order total using combinations of XYZ components" + ) # Return integrals in `out` array return out @@ -962,6 +1142,7 @@ def normalized_coeffs(shell): Adapted from `https://github.com/pyscf/pyscf/blob/master/pyscf/gto/mole.py`. """ + def gaussian_int(l, a): return 0.5 * factorial(0.5 * l - 0.5) * a ** (-0.5 * l - 0.5) diff --git a/gbasis/parsers.py b/gbasis/parsers.py index efb8c9b7..55beab00 100644 --- a/gbasis/parsers.py +++ b/gbasis/parsers.py @@ -242,7 +242,14 @@ def make_contractions(basis_dict, atoms, coords, coord_types, tol=1e-20, overlap for angmom, exps, coeffs in basis_dict[atom]: basis.append( GeneralizedContractionShell( - angmom, coord, coeffs, exps, coord_types.pop(0), - icenter=icenter, tol=tol, ovr_screen=overlap) + angmom, + coord, + coeffs, + exps, + coord_types.pop(0), + icenter=icenter, + tol=tol, + ovr_screen=overlap, + ) ) return tuple(basis) diff --git a/gbasis/wrappers.py b/gbasis/wrappers.py index 57ce1184..40cd942b 100644 --- a/gbasis/wrappers.py +++ b/gbasis/wrappers.py @@ -127,8 +127,12 @@ def angmom_components_sph(self): # pylint: disable=E1136 basis.append( IODataShell( - angmom, mol.atcoords[shell.icenter], shell.coeffs, - shell.exponents, shell.kinds[0], icenter=shell.icenter + angmom, + mol.atcoords[shell.icenter], + shell.coeffs, + shell.exponents, + shell.kinds[0], + icenter=shell.icenter, ) ) diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 67a4aa19..069d6122 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -22,8 +22,8 @@ TEST_BASIS_SETS = [ - pytest.param("data_sto6g.nwchem", id="STO-6G"), - pytest.param("data_631g.nwchem", id="6-31G"), + pytest.param("data_sto6g.nwchem", id="STO-6G"), + pytest.param("data_631g.nwchem", id="6-31G"), pytest.param("data_ccpvdz.nwchem", id="cc-pVDZ"), # Slow tests: # pytest.param("data_ugbs.nwchem", id="UGBS"), @@ -32,11 +32,11 @@ TEST_SYSTEMS = [ - pytest.param(["He"], np.asarray([[0., 0., 0.]]), id="He"), - pytest.param(["C"], np.asarray([[0., 0., 0.]]), id="C"), - pytest.param(["H", "He"], np.asarray([[0., 0., 0.], [0.8, 0., 0.]]), id="H,He"), - pytest.param(["Be", "C"], np.asarray([[0., 0., 0.], [1.0, 0., 0.]]), id="Be,C"), - pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), + pytest.param(["He"], np.asarray([[0.0, 0.0, 0.0]]), id="He"), + pytest.param(["C"], np.asarray([[0.0, 0.0, 0.0]]), id="C"), + pytest.param(["H", "He"], np.asarray([[0.0, 0.0, 0.0], [0.8, 0.0, 0.0]]), id="H,He"), + pytest.param(["Be", "C"], np.asarray([[0.0, 0.0, 0.0], [1.0, 0.0, 0.0]]), id="Be,C"), + pytest.param(["H", "He", "Li"], np.eye(3, dtype=float), id="H,He,Li"), ] @@ -58,10 +58,10 @@ ] -@pytest.mark.parametrize("integral", TEST_INTEGRALS) -@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) +@pytest.mark.parametrize("integral", TEST_INTEGRALS) +@pytest.mark.parametrize("coord_type", TEST_COORD_TYPES) @pytest.mark.parametrize("atsyms, atcoords", TEST_SYSTEMS) -@pytest.mark.parametrize("basis", TEST_BASIS_SETS) +@pytest.mark.parametrize("basis", TEST_BASIS_SETS) def test_integral(basis, atsyms, atcoords, coord_type, integral): r""" Test gbasis.integrals.libcint.CBasis integrals @@ -112,13 +112,17 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): elif integral == "electron_repulsion": py_int = electron_repulsion_integral(py_basis) - npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) + npt.assert_array_equal( + py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn) + ) lc_int = lc_basis.electron_repulsion() - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn)) + npt.assert_array_equal( + lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn, lc_basis.nbfn) + ) elif integral == "point_charge": - charge_coords = np.asarray([[2., 2., 2.], [-3., -3., -3.], [-1., 2., -3.]]) - charges = np.asarray([1., 0.666, -3.1415926]) + charge_coords = np.asarray([[2.0, 2.0, 2.0], [-3.0, -3.0, -3.0], [-1.0, 2.0, -3.0]]) + charges = np.asarray([1.0, 0.666, -3.1415926]) for i in range(1, len(charges) + 1): py_int = point_charge_integral(py_basis, charge_coords[:i], charges[:i]) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, i)) @@ -127,16 +131,20 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): elif integral == "moment": origin = np.zeros(3) - orders = np.asarray([[0, 0, 0], - [1, 0, 0], - [0, 1, 0], - [0, 0, 1], - [2, 0, 0], - [0, 2, 0], - [0, 0, 2], - [1, 1, 0], - [1, 0, 1], - [0, 1, 1]]) + orders = np.asarray( + [ + [0, 0, 0], + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [2, 0, 0], + [0, 2, 0], + [0, 0, 2], + [1, 1, 0], + [1, 0, 1], + [0, 1, 1], + ] + ) py_int = moment_integral(py_basis, origin, orders) npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, len(orders))) lc_int = lc_basis.moment(orders, origin=origin) diff --git a/tests/test_overlap.py b/tests/test_overlap.py index 76ef9a6b..5d25989b 100644 --- a/tests/test_overlap.py +++ b/tests/test_overlap.py @@ -222,12 +222,18 @@ def test_overlap_screening_vs_without_screening(): # Test 1 uses default overlap tolerance of 1e-20 contraction = make_contractions( - basis_dict, ["H", "C", "Kr"], - np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]), "spherical", overlap=True + basis_dict, + ["H", "C", "Kr"], + np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]), + "spherical", + overlap=True, ) contraction_without_screen = make_contractions( - basis_dict, ["H", "C", "Kr"], - np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]), "spherical", overlap=False + basis_dict, + ["H", "C", "Kr"], + np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]), + "spherical", + overlap=False, ) overlaps = overlap_integral(contraction) @@ -254,8 +260,11 @@ def test_overlap_screening_with_fail(): overlap=True, ) contraction_without_screen = make_contractions( - basis_dict, ["H", "C", "Kr"], - np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]), "cartesian", overlap=False + basis_dict, + ["H", "C", "Kr"], + np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]), + "cartesian", + overlap=False, ) overlaps = overlap_integral(contraction) diff --git a/tools/auto_intor_modify.py b/tools/auto_intor_modify.py index b10443e9..881aefce 100644 --- a/tools/auto_intor_modify.py +++ b/tools/auto_intor_modify.py @@ -29,10 +29,10 @@ # Read script -with open(sys.argv[1], 'r') as f: +with open(sys.argv[1], "r") as f: txt = f.read() # Patch script -with open(sys.argv[1], 'w') as f: +with open(sys.argv[1], "w") as f: f.write(txt.replace(old_intor1, new_intor1)) From cca6345497a9645e3c4d576355d3fc0bd173177e Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Mon, 15 Jan 2024 14:12:56 -0500 Subject: [PATCH 71/72] Add C library to pyproject data_files --- pyproject.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 20f8aa96..56c0e1ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,7 +61,6 @@ doc = [ "iodata" = ["iodata>0.1.7"] "pyscf" = ["pyscf>=1.6.1"] - [tool.black] line-length = 100 @@ -88,3 +87,6 @@ addopts = "-v" #write_to = "src/gbasis/_version.py" #version_scheme = "post-release" #local_scheme = "no-local-version" + +[tool.setuptools.package-data] +"gbasis.integrals.lib" = ["libcint.so*"] From 94d685ae526e7e8a75529fce2b45bcf335d57871 Mon Sep 17 00:00:00 2001 From: Michelle Richer Date: Sun, 21 Jan 2024 10:54:08 -0500 Subject: [PATCH 72/72] Add NotImplementedError to ang. mom. fn (#149) --- gbasis/integrals/libcint.py | 3 ++- tests/test_libcint.py | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/gbasis/integrals/libcint.py b/gbasis/integrals/libcint.py index 6fbae507..c0b5c37c 100644 --- a/gbasis/integrals/libcint.py +++ b/gbasis/integrals/libcint.py @@ -1054,7 +1054,8 @@ def angular_momentum(self, origin=None): Integral array. """ - return self._amom(origin=origin) + raise NotImplementedError("Angular momentum integral doesn't work; see Issue #149") + # return self._amom(origin=origin) def point_charge(self, point_coords, point_charges): r""" diff --git a/tests/test_libcint.py b/tests/test_libcint.py index 069d6122..84edee90 100644 --- a/tests/test_libcint.py +++ b/tests/test_libcint.py @@ -99,10 +99,12 @@ def test_integral(basis, atsyms, atcoords, coord_type, integral): npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn)) elif integral == "angular_momentum": - py_int = angular_momentum_integral(py_basis) - npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) - lc_int = lc_basis.angular_momentum(origin=np.zeros(3)) - npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + # py_int = angular_momentum_integral(py_basis) + # npt.assert_array_equal(py_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + with pytest.raises(NotImplementedError): + lc_int = lc_basis.angular_momentum(origin=np.zeros(3)) + # npt.assert_array_equal(lc_int.shape, (lc_basis.nbfn, lc_basis.nbfn, 3)) + return elif integral == "momentum": py_int = momentum_integral(py_basis)