def solver(mol, singlet=True, symm=None): if symm is None: symm = mol.symmetry if symm: if singlet: return direct_spin0_symm.FCISolver(mol) else: return direct_spin1_symm.FCISolver(mol) else: if singlet: return direct_spin0.FCISolver(mol) else: return direct_spin1.FCISolver(mol)
def solver(mol=None, singlet=False, symm=None): if mol and symm is None: symm = mol.symmetry if symm: if singlet: return direct_spin0_symm.FCISolver(mol) else: return direct_spin1_symm.FCISolver(mol) else: if singlet: # The code for singlet direct_spin0 sometimes gets error of # "State not singlet x.xxxxxxe-06" due to numerical issues. # Calling direct_spin1 is slightly slower but more robust than # direct_spin0 especially when combining to energy penalty method # (:func:`fix_spin_`) return direct_spin0.FCISolver(mol) else: return direct_spin1.FCISolver(mol)
for i in range(dm2abba.shape[0]): dm2abba[:, i, i, :] += dm1b dm2baab = dm2abba if reorder: spinfree_2 = dm2aa + dm2bb + 2 * dm2ab one_sf, two_sf = find_full_casscf_12rdm(mc.fcisolver, mf.mo_coeff, 'spinfree_TwoRDM.1', norb, nelec) 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]