Ejemplo n.º 1
0
    def build_Dvv(self,t1,t2,l1,l2):
        o = self.o
        v = self.v

        self.Dvv  = ndot('ka,bk->ab',t1,l1)
        self.Dvv += ndot('klca,cbkl->ab',t2,l2)
        return self.Dvv
Ejemplo n.º 2
0
    def build_Doo(self,t1,t2,l1,l2):
        o = self.o
        v = self.v

        self.Doo  = ndot('jc,ci->ij',t1,l1,prefactor=-1)
        self.Doo -= ndot('kjcd,cdki->ij',t2,l2)
        return self.Doo
Ejemplo n.º 3
0
    def build_Doo(self, t1=None,t2=None,l1=None,l2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2
        if l1 is None: l1 = self.l1
        if l2 is None: l2 = self.l2

        self.Doo  = ndot('jc,ci->ij',t1,l1,prefactor=-1)
        self.Doo -= ndot('kjcd,cdki->ij',t2,l2,prefactor=0.5)
        return self.Doo
Ejemplo n.º 4
0
    def build_Dvv(self, t1=None,t2=None,l1=None,l2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2
        if l1 is None: l1 = self.l1
        if l2 is None: l2 = self.l2

        self.Dvv  = ndot('ka,bk->ab',t1,l1)
        self.Dvv += ndot('klca,cbkl->ab',t2,l2,prefactor=0.5)
        return self.Dvv
Ejemplo n.º 5
0
    def compute_pseudoenergy(self, F=None,l1=None,l2=None):
        if F  is None: F = self.F
        if l1 is None: l1 = self.l1
        if l2 is None: l2 = self.l2

        o = self.o
        v = self.v
        
        e  = ndot('ai,ia->',l1,F[o,v])
        e += ndot('abij,ijab->',l2,self.TEI[o,o,v,v],prefactor=0.25)
        return e
Ejemplo n.º 6
0
    def build_Fme(self, F=None,t1=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1

        o = self.o
        v = self.v

        Fme  = F[o,v].copy() + 1j*0.0
        Fme += ndot('nf,mnef->me',t1,self.TEI[o,o,v,v],prefactor=2)
        Fme += ndot('nf,mnfe->me',t1,self.TEI[o,o,v,v],prefactor=-1)
        return Fme      # Fme
Ejemplo n.º 7
0
    def build_Dov(self,t1,t2,l1,l2):
        o = self.o
        v = self.v

        self.Dov  = 2*t1.copy()
        self.Dov += ndot('ikac,ck->ia',t2,l1,prefactor=2)
        self.Dov -= ndot('ikca,ck->ia',t2,l1)
        tmp = ndot('ka,ck->ca',t1,l1)
        self.Dov -= ndot('ic,ca->ia',t1,tmp)
        self.Dov -= contract('la,kicd,cdkl->ia',t1,t2,l2)
        self.Dov -= contract('id,klca,cdkl->ia',t1,t2,l2)
        return self.Dov
Ejemplo n.º 8
0
    def build_Foo(self, F=None,t1=None,t2=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v
        
        Foo  = F[o,o].copy() + 1j*0.0
        Foo += ndot('ie,me->mi',t1,F[o,v],prefactor=0.5)
        Foo += ndot('ne,mnie->mi',t1,self.TEI[o,o,o,v])
        Foo += ndot('inef,mnef->mi',self.build_tau_tilde(t1,t2),self.TEI[o,o,v,v],prefactor=0.5)
        return Foo      # Fmi
Ejemplo n.º 9
0
    def build_Fvv(self, F=None,t1=None,t2=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        Fvv  = F[v,v].copy() + 1j*0.0
        Fvv -= ndot('ma,me->ae',t1,F[o,v],prefactor=0.5)
        Fvv += ndot('mf,mafe->ae',t1,self.TEI[o,v,v,v])
        Fvv -= ndot('mnaf,mnef->ae',self.build_tau_tilde(t1,t2),self.TEI[o,o,v,v],prefactor=0.5)
        return Fvv      # Fae
Ejemplo n.º 10
0
    def build_Wmnij(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        W  = self.TEI[o,o,o,o].copy()   # V(ijkl)
        W  = W + ndot('ijef,mnef->mnij',self.build_tau(t1,t2),self.TEI[o,o,v,v])
        W += ndot('je,mnie->mnij',t1,self.TEI[o,o,o,v])
        W += ndot('ie,mnej->mnij',t1,self.TEI[o,o,v,o])     ## test
        
        return W           # Wmnij
Ejemplo n.º 11
0
    def build_Dov(self, t1=None,t2=None,l1=None,l2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2
        if l1 is None: l1 = self.l1
        if l2 is None: l2 = self.l2

        self.Dov  = t1.copy()
        self.Dov += ndot('ikac,ck->ia',t2,l1)
        tmp = ndot('ka,ck->ca',t1,l1)
        self.Dov -= ndot('ic,ca->ia',t1,tmp)
        self.Dov -= 0.5*contract('la,kicd,cdkl->ia',t1,t2,l2)
        self.Dov -= 0.5*contract('id,klca,cdkl->ia',t1,t2,l2)
        return self.Dov
Ejemplo n.º 12
0
    def build_Wabef(self,ccsd, t1=None,t2=None):            #   < ab | Hbar | ef >
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        tau = ccsd.build_tau(t1,t2)

        W = self.TEI[v,v,v,v].copy() + 1j*0.0
        W += ndot('mnab,mnef->abef',tau,self.TEI[o,o,v,v])
        W -= ndot('mb,amef->abef',t1,self.TEI[v,o,v,v])
        W -= ndot('ma,bmfe->abef',t1,self.TEI[v,o,v,v])
        return W        # Wabef
Ejemplo n.º 13
0
    def compute_corr_energy(self, F=None,t1=None,t2=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        e  = ndot('ia,ia->',F[o,v],t1)
        e += ndot('ijab,abij->',self.build_tau(t1,t2),self.TEI[v,v,o,o],prefactor=2)
        e += ndot('ijab,abji->',self.build_tau(t1,t2),self.TEI[v,v,o,o],prefactor=-1)
        self.e_ccsd = e.real
        self.E_ccsd = e.real + self.e_scf
        return e
Ejemplo n.º 14
0
    def build_Wmbje(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        W  = -1.0 * self.TEI[o,v,o,v].copy()        # V(mbje)
        W  = W - ndot('jf,mbfe->mbje',t1,self.TEI[o,v,v,v])
        W += ndot('nb,mnje->mbje',t1,self.TEI[o,o,o,v])

        tmp = 0.5 * t2 + ndot('jf,nb->jnfb',t1,t1)
        W += ndot('jnfb,mnfe->mbje',tmp,self.TEI[o,o,v,v])
        return W        # Wmbje
Ejemplo n.º 15
0
    def build_Wmbje(self,ccsd, t1=None,t2=None):            #   < mb | Hbar | je >
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        tau = ccsd.build_tau(t1,t2)

        W  = self.TEI[o,v,o,v].copy() + 1j*0.0
        W -= ndot('jnfb,nmef->mbje',tau,self.TEI[o,o,v,v])
        W += ndot('jf,bmef->mbje',t1,self.TEI[v,o,v,v])
        W -= ndot('nb,mnje->mbje',t1,self.TEI[o,o,o,v])
        return W        # Wmbje
Ejemplo n.º 16
0
    def build_Woooo(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        W = self.TEI[o,o,o,o].copy()   # V(ijkl)
        W = W + ndot('ijef,mnef->mnij',self.build_tau(t1,t2),self.TEI[o,o,v,v],prefactor=0.25)
        
        Pij = ndot('je,mnie->mnij',t1,self.TEI[o,o,o,v])
        W += Pij
        W -= Pij.swapaxes(2,3)
        return W           # Wmnij
Ejemplo n.º 17
0
    def build_Wvvvv(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        W = self.TEI[v,v,v,v].copy()
        W = W + ndot('mnab,mnef->abef', self.build_tau(t1,t2), self.TEI[o,o,v,v], prefactor=0.25)

        Pab = ndot('mb,amef->abef', t1, self.TEI[v,o,v,v])
        W -= Pab
        W += Pab.swapaxes(0, 1)

        return W        # Wabef
Ejemplo n.º 18
0
    def build_Fmi(self,ccsd, F=None,t1=None,t2=None):       #   < m | Hbar | i >
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v
        
        Fmi  = F[o,o].copy() + 1j*0.0
        Fmi += ndot('ie,me->mi',t1,F[o,v])
        Fmi += ndot('ne,mnie->mi',t1,self.TEI[o,o,o,v],prefactor=2)
        Fmi += ndot('ne,nmie->mi',t1,self.TEI[o,o,o,v],prefactor=-1)
        Fmi += ndot('inef,mnef->mi',ccsd.build_tau(t1,t2),self.TEI[o,o,v,v],prefactor=2)
        Fmi += ndot('inef,mnfe->mi',ccsd.build_tau(t1,t2),self.TEI[o,o,v,v],prefactor=-1)
        return Fmi      # Fmi
Ejemplo n.º 19
0
    def build_Fae(self, F=None,t1=None,t2=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        Fae  = self.F[v,v].copy() + 1j*0.0
        Fae -= ndot('ma,me->ae',t1,F[o,v],prefactor=0.5)
        Fae += ndot('mf,amef->ae',t1,self.TEI[v,o,v,v],prefactor=2)
        Fae += ndot('mf,amfe->ae',t1,self.TEI[v,o,v,v],prefactor=-1)
        Fae -= ndot('mnaf,mnef->ae',self.build_tau_tilde(t1,t2),self.TEI[o,o,v,v],prefactor=2)
        Fae -= ndot('mnaf,mnfe->ae',self.build_tau_tilde(t1,t2),self.TEI[o,o,v,v],prefactor=-1)
        return Fae      # Fae
Ejemplo n.º 20
0
    def build_Fae(self,ccsd, F=None,t1=None,t2=None):       #   < a | Hbar | e >
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        Fae  = F[v,v].copy() + 1j*0.0
        Fae -= ndot('ma,me->ae',t1,F[o,v])
        Fae += ndot('mf,amef->ae',t1,self.TEI[v,o,v,v],prefactor=2)
        Fae += ndot('mf,amfe->ae',t1,self.TEI[v,o,v,v],prefactor=-1)
        Fae -= ndot('mnfa,mnfe->ae',ccsd.build_tau(t1,t2),self.TEI[o,o,v,v],prefactor=2)
        Fae -= ndot('mnfa,mnef->ae',ccsd.build_tau(t1,t2),self.TEI[o,o,v,v],prefactor=-1)
        return Fae      # Fae
Ejemplo n.º 21
0
    def build_tau_tilde(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        tau = t2.copy()
        tau = tau + ndot('ia,jb->ijab',t1,t1,prefactor=0.5)
        return tau  # Tau tilde (alpha/beta)
Ejemplo n.º 22
0
    def build_Wovvo(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        W = self.TEI[o,v,v,o].copy()
        W = W + ndot('jf,mbef->mbej', t1, self.TEI[o,v,v,v])
        W -= ndot('nb,mnej->mbej', t1, self.TEI[o,o,v,o])

        tmp  = (0.5 * t2)
        tmp += np.einsum('jf,nb->jnfb', t1, t1)
        W -= ndot('jnfb,mnef->mbej', tmp, self.TEI[o,o,v,v])

        return W        # Wmbej
Ejemplo n.º 23
0
 def compute_hf_dipole(self,P):
     # Compute HF electronic dipole moments
     dipoles_elec = []
     for n in range(3):
         mu  = ndot('uv,vu->',np.asarray(self.ints[n]),self.P)
         dipoles_elec.append(mu)
     return dipoles_elec
Ejemplo n.º 24
0
    def build_Wmbej(self,ccsd, t1=None,t2=None):            #   < mb | Hbar | ej >
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        o = self.o
        v = self.v

        tau = ccsd.build_tau(t1,t2)

        W  = self.TEI[o,v,v,o].copy() + 1j*0.0
        W += ndot('jnbf,nmfe->mbej',t2,self.TEI[o,o,v,v],prefactor=2)
        W += ndot('jnbf,nmef->mbej',t2,self.TEI[o,o,v,v],prefactor=-1)
        W -= ndot('jnfb,nmfe->mbej',tau,self.TEI[o,o,v,v])
        W += ndot('jf,mbef->mbej',t1,self.TEI[o,v,v,v])
        W -= ndot('nb,mnej->mbej',t1,self.TEI[o,o,v,o])
        return W        # Wmbej
Ejemplo n.º 25
0
    def build_tau(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        tau = t2.copy()
        tau = tau + ndot('ia,jb->ijab',t1,t1)
        return tau      # Tau (alpha/beta)
Ejemplo n.º 26
0
    def transform_Fvv(self,ccsd, F=None,t1=None,t2=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        Fvv  = ccsd.build_Fvv(F,t1,t2).swapaxes(0,1)
        Fvv -= ndot('me,ma->ea',t1,self.Fov,prefactor=0.5)
        return Fvv      # Fea
Ejemplo n.º 27
0
    def transform_Foo(self,ccsd, F=None,t1=None,t2=None):
        if F  is None: F = self.F
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        Foo  = ccsd.build_Foo(F,t1,t2).swapaxes(0,1)
        Foo -= ndot('me,ie->im',t1,self.Fov,prefactor=0.5)
        return Foo      # Fim
Ejemplo n.º 28
0
    def build_tau_tilde(self, t1=None,t2=None):
        if t1 is None: t1 = self.t1
        if t2 is None: t2 = self.t2

        tau = t2.copy()
        tmp = ndot('ia,jb->ijab',t1,t1,prefactor=0.5)
        tau += tmp - tmp.swapaxes(2,3)
        return tau  # Tau tilde
Ejemplo n.º 29
0
 def compute_ccsd_dipole(self,D):
     # Compute CCSD correlated dipole
     dipoles_elec = []
     for n in range(3):
         d = contract('ui,uv,vj->ij',self.npC,np.asarray(self.ints[n]),self.npC)
         mu = ndot('ij,ji->',d,D)
         dipoles_elec.append(mu)
     return dipoles_elec
Ejemplo n.º 30
0
    def residual_l1(self,ccsd, F,t1,t2,l1,l2):
        o = self.o
        v = self.v

        # compute intermediates independent of Lambda
        self.Fov = ccsd.build_Fov(F,t1)
        self.Foo = self.transform_Foo(ccsd, F,t1,t2)
        self.Fvv = self.transform_Fvv(ccsd, F,t1,t2)

        self.Wvoov = self.transform_Wovvo(ccsd, t1,t2)

        self.Wooov = self.build_Wooov(ccsd, F,t1,t2)
        self.Wvovv = self.build_Wvovv(ccsd, t1,t2)
        self.Wovoo = self.build_Wovoo(ccsd, t1,t2)
        self.Wvvvo = self.build_Wvvvo(ccsd, t1,t2)

        # compute lambda dependent intermediates
        Goo = self.build_Goo(t2,l2)
        Gvv = self.build_Gvv(t2,l2)

        #### Build RHS side of l1 equations
        rhs_L1  = self.Fov.swapaxes(0,1).copy()
        rhs_L1 += ndot('ei,ea->ai',l1,self.Fvv)
        rhs_L1 -= ndot('am,im->ai',l1,self.Foo)
        rhs_L1 += ndot('em,eima->ai',l1,self.Wvoov)
        rhs_L1 += ndot('efim,efam->ai',l2,self.Wvvvo,prefactor=0.5)
        rhs_L1 -= ndot('aemn,iemn->ai',l2,self.Wovoo,prefactor=0.5)
        rhs_L1 -= ndot('ef,eifa->ai',Gvv,self.Wvovv)
        rhs_L1 -= ndot('mn,mina->ai',Goo,self.Wooov)
        
        return rhs_L1