Esempio n. 1
0
 def _contract_vvVV_t2(self, mycc, t2, vvvv_or_direct=False, out=None, verbose=None):
     if isinstance(vvvv_or_direct, np.ndarray):
         vvvv = vvvv_or_direct
     elif vvvv_or_direct:
         vvvv = None
     else:
         vvvv = self.vvVV
     return ccsd._contract_vvvv_t2(mycc, self.mol, vvvv, t2, out, verbose)
Esempio n. 2
0
 def _contract_vvVV_t2(self, mycc, t2, vvvv_or_direct=False, out=None, verbose=None):
     if isinstance(vvvv_or_direct, np.ndarray):
         vvvv = vvvv_or_direct
     elif vvvv_or_direct:
         vvvv = None
     else:
         vvvv = self.vvVV
     return ccsd._contract_vvvv_t2(mycc, self.mol, vvvv, t2, out, verbose)
Esempio n. 3
0
def _add_vvvv(mycc, t1, t2, eris, out=None, with_ovvv=False, t2sym=None):
    time0 = time.clock(), time.time()
    log = logger.Logger(mycc.stdout, mycc.verbose)
    if t1 is None:
        t2aa, t2ab, t2bb = t2
    else:
        t2aa, t2ab, t2bb = make_tau(t2, t1, t1)
    nocca, nvira = t2aa.shape[1:3]
    noccb, nvirb = t2bb.shape[1:3]

    if mycc.direct:
        assert (t2sym is None)
        if with_ovvv:
            raise NotImplementedError
        if getattr(eris, 'mo_coeff', None) is not None:
            mo_a, mo_b = eris.mo_coeff
        else:
            moidxa, moidxb = mycc.get_frozen_mask()
            mo_a = mycc.mo_coeff[0][:, moidxa]
            mo_b = mycc.mo_coeff[1][:, moidxb]
        nao = mo_a.shape[0]
        otrila = np.tril_indices(nocca, -1)
        otrilb = np.tril_indices(noccb, -1)
        if nocca > 1:
            tauaa = lib.einsum('xab,pa->xpb', t2aa[otrila], mo_a[:, nocca:])
            tauaa = lib.einsum('xab,pb->xap', tauaa, mo_a[:, nocca:])
        else:
            tauaa = np.zeros((0, nao, nao))
        if noccb > 1:
            taubb = lib.einsum('xab,pa->xpb', t2bb[otrilb], mo_b[:, noccb:])
            taubb = lib.einsum('xab,pb->xap', taubb, mo_b[:, noccb:])
        else:
            taubb = np.zeros((0, nao, nao))
        tauab = lib.einsum('ijab,pa->ijpb', t2ab, mo_a[:, nocca:])
        tauab = lib.einsum('ijab,pb->ijap', tauab, mo_b[:, noccb:])
        tau = np.vstack((tauaa, taubb, tauab.reshape(nocca * noccb, nao, nao)))
        tauaa = taubb = tauab = None
        time0 = log.timer_debug1('vvvv-tau', *time0)

        buf = ccsd._contract_vvvv_t2(mycc, mycc.mol, None, tau, out, log)

        mo = np.asarray(np.hstack((mo_a[:, nocca:], mo_b[:, noccb:])),
                        order='F')
        u2aa = np.zeros_like(t2aa)
        if nocca > 1:
            u2tril = buf[:otrila[0].size]
            u2tril = _ao2mo.nr_e2(u2tril.reshape(-1, nao**2), mo.conj(),
                                  (0, nvira, 0, nvira), 's1', 's1')
            u2tril = u2tril.reshape(otrila[0].size, nvira, nvira)
            u2aa[otrila[1], otrila[0]] = u2tril.transpose(0, 2, 1)
            u2aa[otrila] = u2tril

        u2bb = np.zeros_like(t2bb)
        if noccb > 1:
            u2tril = buf[otrila[0].size:otrila[0].size + otrilb[0].size]
            u2tril = _ao2mo.nr_e2(u2tril.reshape(-1, nao**2), mo.conj(),
                                  (nvira, nvira + nvirb, nvira, nvira + nvirb),
                                  's1', 's1')
            u2tril = u2tril.reshape(otrilb[0].size, nvirb, nvirb)
            u2bb[otrilb[1], otrilb[0]] = u2tril.transpose(0, 2, 1)
            u2bb[otrilb] = u2tril

        u2ab = _ao2mo.nr_e2(
            buf[-nocca * noccb:].reshape(nocca * noccb, nao**2), mo,
            (0, nvira, nvira, nvira + nvirb), 's1', 's1')
        u2ab = u2ab.reshape(t2ab.shape)

    else:
        assert (not with_ovvv)
        if t2sym is None:
            tmp = eris._contract_vvvv_t2(mycc, t2aa[np.tril_indices(nocca)],
                                         mycc.direct, None)
            u2aa = ccsd._unpack_t2_tril(tmp, nocca, nvira, None, 'jiba')
            tmp = eris._contract_VVVV_t2(mycc, t2bb[np.tril_indices(noccb)],
                                         mycc.direct, None)
            u2bb = ccsd._unpack_t2_tril(tmp, noccb, nvirb, None, 'jiba')
            u2ab = eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, None)
        else:
            u2aa = eris._contract_vvvv_t2(mycc, t2aa, mycc.direct, None)
            u2bb = eris._contract_VVVV_t2(mycc, t2bb, mycc.direct, None)
            u2ab = eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, None)

    return u2aa, u2ab, u2bb
Esempio n. 4
0
def _add_vvvv(mycc, t1, t2, eris, out=None, with_ovvv=False, t2sym=None):
    time0 = time.clock(), time.time()
    log = logger.Logger(mycc.stdout, mycc.verbose)
    if t1 is None:
        t2aa, t2ab, t2bb = t2
    else:
        t2aa, t2ab, t2bb = make_tau(t2, t1, t1)
    nocca, nvira = t2aa.shape[1:3]
    noccb, nvirb = t2bb.shape[1:3]

    if mycc.direct:
        assert(t2sym is None)
        if with_ovvv:
            raise NotImplementedError
        if getattr(eris, 'mo_coeff', None) is not None:
            mo_a, mo_b = eris.mo_coeff
        else:
            moidxa, moidxb = mycc.get_frozen_mask()
            mo_a = mycc.mo_coeff[0][:,moidxa]
            mo_b = mycc.mo_coeff[1][:,moidxb]
        nao = mo_a.shape[0]
        otrila = np.tril_indices(nocca,-1)
        otrilb = np.tril_indices(noccb,-1)
        if nocca > 1:
            tauaa = lib.einsum('xab,pa->xpb', t2aa[otrila], mo_a[:,nocca:])
            tauaa = lib.einsum('xab,pb->xap', tauaa, mo_a[:,nocca:])
        else:
            tauaa = np.zeros((0,nao,nao))
        if noccb > 1:
            taubb = lib.einsum('xab,pa->xpb', t2bb[otrilb], mo_b[:,noccb:])
            taubb = lib.einsum('xab,pb->xap', taubb, mo_b[:,noccb:])
        else:
            taubb = np.zeros((0,nao,nao))
        tauab = lib.einsum('ijab,pa->ijpb', t2ab, mo_a[:,nocca:])
        tauab = lib.einsum('ijab,pb->ijap', tauab, mo_b[:,noccb:])
        tau = np.vstack((tauaa, taubb, tauab.reshape(nocca*noccb,nao,nao)))
        tauaa = taubb = tauab = None
        time0 = log.timer_debug1('vvvv-tau', *time0)

        buf = ccsd._contract_vvvv_t2(mycc, mycc.mol, None, tau, out, log)

        mo = np.asarray(np.hstack((mo_a[:,nocca:], mo_b[:,noccb:])), order='F')
        u2aa = np.zeros_like(t2aa)
        if nocca > 1:
            u2tril = buf[:otrila[0].size]
            u2tril = _ao2mo.nr_e2(u2tril.reshape(-1,nao**2), mo.conj(),
                                  (0,nvira,0,nvira), 's1', 's1')
            u2tril = u2tril.reshape(otrila[0].size,nvira,nvira)
            u2aa[otrila[1],otrila[0]] = u2tril.transpose(0,2,1)
            u2aa[otrila] = u2tril

        u2bb = np.zeros_like(t2bb)
        if noccb > 1:
            u2tril = buf[otrila[0].size:otrila[0].size+otrilb[0].size]
            u2tril = _ao2mo.nr_e2(u2tril.reshape(-1,nao**2), mo.conj(),
                                  (nvira,nvira+nvirb,nvira,nvira+nvirb), 's1', 's1')
            u2tril = u2tril.reshape(otrilb[0].size,nvirb,nvirb)
            u2bb[otrilb[1],otrilb[0]] = u2tril.transpose(0,2,1)
            u2bb[otrilb] = u2tril

        u2ab = _ao2mo.nr_e2(buf[-nocca*noccb:].reshape(nocca*noccb,nao**2), mo,
                            (0,nvira,nvira,nvira+nvirb), 's1', 's1')
        u2ab = u2ab.reshape(t2ab.shape)

    else:
        assert(not with_ovvv)
        if t2sym is None:
            tmp = eris._contract_vvvv_t2(mycc, t2aa[np.tril_indices(nocca)],
                                         mycc.direct, None)
            u2aa = ccsd._unpack_t2_tril(tmp, nocca, nvira, None, 'jiba')
            tmp = eris._contract_VVVV_t2(mycc, t2bb[np.tril_indices(noccb)],
                                         mycc.direct, None)
            u2bb = ccsd._unpack_t2_tril(tmp, noccb, nvirb, None, 'jiba')
            u2ab = eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, None)
        else:
            u2aa = eris._contract_vvvv_t2(mycc, t2aa, mycc.direct, None)
            u2bb = eris._contract_VVVV_t2(mycc, t2bb, mycc.direct, None)
            u2ab = eris._contract_vvVV_t2(mycc, t2ab, mycc.direct, None)

    return u2aa,u2ab,u2bb