Beispiel #1
0
 def _debug_cispace (xci, label):
     xci_norm = [np.dot (c.ravel (), c.ravel ()) for c in xci]
     try:
         xci_ss = self.base.fcisolver.states_spin_square (xci, self.base.ncas, self.base.nelecas)[0]
     except AttributeError:
         nelec = sum (_unpack_nelec (self.base.nelecas))
         xci_ss = [spin_square (x, self.base.ncas, ((nelec+m)//2,(nelec-m)//2))[0]
             for x, m in zip (xci, self.spin_states)]
     xci_ss = [x / max (y, 1e-8) for x, y in zip (xci_ss, xci_norm)] 
     xci_multip = [np.sqrt (x+.25) - .5 for x in xci_ss]
     for ix, (norm, ss, multip) in enumerate (zip (xci_norm, xci_ss, xci_multip)):
         lib.logger.debug (self,
             ' State {} {} norm = {:.7e} ; <S^2> = {:.7f} ; 2S+1 = {:.7f}'.format
             (ix, label, norm, ss, multip))
Beispiel #2
0
 def spin_square(self, fcivec, norb, nelec):
     from pyscf.fci import spin_op
     return spin_op.spin_square(fcivec, norb, nelec)
Beispiel #3
0
 def spin_square(self, fcivec, norb, nelec):
     from pyscf.fci import spin_op
     return spin_op.spin_square(fcivec, norb, nelec)
Beispiel #4
0
    mc2.fcisolver = direct_spin1.FCISolver(mol)
    emc2, e_cas2, fcivec2 = mc2.kernel()[:3]
    #ss_tot = spin_op.spin_square(fcivec2, norb, nelec)[0]
    #    print 'ss_tot exact: ',ss_tot
    (dm1a_, dm1b_), (dm2aa_, dm2ab_,
                     dm2bb_) = direct_spin1.make_rdm12s(fcivec2,
                                                        norb,
                                                        nelec,
                                                        reorder=False)

    #f_dbg = dbg_ss_frac(dm1, dm2, norb, mo_cas, ovlp)
    # dm2baab(pq,rs) = <p(beta)* q(alpha) r(alpha)* s(beta)
    dm2baab_ = spin_op._make_rdm2_baab(fcivec2, norb, nelec)
    # dm2abba(pq,rs) = <q(alpha)* p(beta) s(beta)* r(alpha)
    dm2abba_ = spin_op._make_rdm2_abba(fcivec2, norb, nelec)
    ss_tot = spin_op.spin_square(fcivec2, norb, nelec)[0]

    f_opt_act = opt_ss_frac(dm1a_, dm1b_, dm2aa_, dm2ab_, dm2bb_, dm2baab_,
                            dm2abba_, norb, nelec, mo_cas, ovlp)
    f_mag_act = opt_mag_frac(dm1a_, dm1b_, norb, nelec, mo_cas, ovlp)
    if DoNECI:
        f_opt_full = opt_ss_frac(dm1a, dm1b, dm2aa, dm2ab, dm2bb, dm2baab,
                                 dm2abba, n_occorbs, nelec_full, occorbs, ovlp)
        f_mag_full = opt_mag_frac(dm1a, dm1b, n_occorbs, nelec_full, occorbs,
                                  ovlp)
    if not Addcore and DoNECI:
        assert (numpy.allclose(dm1a, dm1a_))
        assert (numpy.allclose(dm1b, dm1b_))
        assert (numpy.allclose(dm2aa, dm2aa_))
        assert (numpy.allclose(dm2ab, dm2ab_))
        assert (numpy.allclose(dm2bb, dm2bb_))
Beispiel #5
0
    from pyscf.fci import cistring, spin_op
    from mrh.exploratory.citools import fockspace

    t1_rand = np.random.rand (norb,norb)
    t2_rand = np.random.rand (norb,norb,norb,norb)
    uop_s = get_uccs_op (norb, t1=t1_rand)
    upsi = uop_s (psi)
    upsi_h = fockspace.fock2hilbert (upsi, norb, nelec)
    uTupsi = uop_s (upsi, transpose=True)
    for ix in range (2**(2*norb)):
        if np.any (np.abs ([psi[ix], upsi[ix], uTupsi[ix]]) > 1e-8):
            print (pbin (ix), psi[ix], upsi[ix], uTupsi[ix])
    print ("<psi|psi> =",psi.dot (psi), "<psi|U|psi> =",psi.dot (upsi),"<psi|U'U|psi> =",upsi.dot (upsi))
    print ("<psi|S**2|psi> =",spin_square (psi, norb)[0],
           "<psi|U'S**2U|psi> =",spin_square (upsi, norb)[0],spin_op.spin_square (upsi_h, norb, nelec)[0])

    uop_sd = get_uccsd_op (norb)
    x_rand = (1 - 2*np.random.rand (uop_sd.ngen_uniq)) * math.pi/4
    uop_sd.set_uniq_amps_(x_rand)
    upsi = uop_sd (psi)
    upsi_h = fockspace.fock2hilbert (upsi, norb, nelec)
    uTupsi = uop_sd (upsi, transpose=True)
    for ix in range (2**(2*norb)):
        if np.any (np.abs ([psi[ix], upsi[ix], uTupsi[ix]]) > 1e-8):
            print (pbin (ix), psi[ix], upsi[ix], uTupsi[ix])
    print ("<psi|psi> =",psi.dot (psi), "<psi|U|psi> =",psi.dot (upsi),"<psi|U'U|psi> =",upsi.dot (upsi))
    print ("<psi|S**2|psi> =",spin_square (psi, norb)[0],
           "<psi|U'S**2U|psi> =",spin_square (upsi, norb)[0], spin_op.spin_square (upsi_h, norb, nelec)[0])

    ndet = cistring.num_strings (norb, nelec//2)
Beispiel #6
0
            assert(numpy.allclose(two_sf[:n_occorbs,:n_occorbs,:n_occorbs,:n_occorbs], spinfree_2))
    
    mc2 = mcscf.CASCI(mf, 6, 6)
#    mc2.canonicalization = False
    mc2.fcisolver = direct_spin1.FCISolver(mol)
    emc2, e_cas2, fcivec2 = mc2.kernel()[:3]
    #ss_tot = spin_op.spin_square(fcivec2, norb, nelec)[0]
#    print 'ss_tot exact: ',ss_tot
    (dm1a_, dm1b_), (dm2aa_, dm2ab_, dm2bb_) = direct_spin1.make_rdm12s(fcivec2, norb, nelec, reorder=False)
    
    #f_dbg = dbg_ss_frac(dm1, dm2, norb, mo_cas, ovlp)
    # dm2baab(pq,rs) = <p(beta)* q(alpha) r(alpha)* s(beta)
    dm2baab_ = spin_op._make_rdm2_baab(fcivec2, norb, nelec)
    # dm2abba(pq,rs) = <q(alpha)* p(beta) s(beta)* r(alpha)
    dm2abba_ = spin_op._make_rdm2_abba(fcivec2, norb, nelec)
    ss_tot = spin_op.spin_square(fcivec2, norb, nelec)[0]

    f_opt_act = opt_ss_frac(dm1a_, dm1b_, dm2aa_, dm2ab_, dm2bb_, dm2baab_,  
            dm2abba_, norb, nelec, mo_cas, ovlp)
    f_mag_act = opt_mag_frac(dm1a_, dm1b_, norb, nelec, mo_cas, ovlp)
    if DoNECI:
        f_opt_full = opt_ss_frac(dm1a, dm1b, dm2aa, dm2ab, dm2bb, dm2baab,  
                dm2abba, n_occorbs, nelec_full, occorbs, ovlp)
        f_mag_full = opt_mag_frac(dm1a, dm1b, n_occorbs, nelec_full, occorbs, ovlp)
    if not Addcore and DoNECI:
        assert(numpy.allclose(dm1a,dm1a_))
        assert(numpy.allclose(dm1b,dm1b_))
        assert(numpy.allclose(dm2aa,dm2aa_))
        assert(numpy.allclose(dm2ab,dm2ab_))
        assert(numpy.allclose(dm2bb,dm2bb_))
        assert(numpy.allclose(dm2baab,dm2baab_))