def test_with_x2c_scanner(self): mc1 = mcscf.UCASSCF(m, 4, 4).x2c().run() self.assertAlmostEqual(mc1.e_tot, -75.795316854668201, 6) mc1 = mcscf.UCASSCF(m, 4, 4).x2c().as_scanner().as_scanner() mc1(mol) self.assertAlmostEqual(mc1.e_tot, -75.795316865791847, 6)
def test_0core_0virtual(self): mol = gto.M(atom='He', basis='321g') mf = scf.UHF(mol).run() mc1 = mcscf.UCASSCF(mf, 2, 2).run() self.assertAlmostEqual(mc1.e_tot, -2.850576699649737, 9) mc1 = mcscf.UCASSCF(mf, 1, 2).run() self.assertAlmostEqual(mc1.e_tot, -2.8356798736405673, 9) mc1 = mcscf.UCASSCF(mf, 1, 0).run() self.assertAlmostEqual(mc1.e_tot, -2.8356798736405673, 9)
def setUpModule(): global mol, mfr, mcr, mfu, mcu, mcr_prg, mcr_prb, mfr_prg, mfr_prb, mcu_prg, mfu_prg b = 1.4 mol = gto.Mole() mol.build(verbose=7, output='/dev/null', atom=[ ['N', (0.000000, 0.000000, -b / 2)], ['N', (0.000000, 0.000000, b / 2)], ], basis={ 'N': 'ccpvdz', }, symmetry=1) mfr = scf.RHF(mol) mfr.scf() mcr = mcscf.CASSCF(mfr, 4, 4) mcr.conv_tol_grad = 1e-6 mcr.mc1step()[0] mfu = scf.UHF(mol) mfu.scf() mcu = mcscf.UCASSCF(mfu, 4, 4) mcu.conv_tol_grad = 1e-6 mcu.mc1step()[0] mol_prg = gto.M(verbose=0, atom=[ ['N', (0.000000, 0.000000, -(b + 0.1) / 2)], ['N', (0.000000, 0.000000, (b + 0.1) / 2)], ], basis='ccpvdz', symmetry=1) mfr_prg = scf.RHF(mol_prg).set(max_cycle=1).run() mcr_prg = mcscf.CASSCF(mfr_prg, 4, 4).set(max_cycle_macro=1).run() mfu_prg = scf.UHF(mol_prg).set(max_cycle=1).run() mcu_prg = mcscf.UCASSCF(mfu_prg, 4, 4).set(max_cycle_macro=1).run() mol_prb = mol.copy() mol_prb.basis = {'N': 'aug-cc-pvdz'} mol_prb.build() mfr_prb = scf.RHF(mol_prb).set(max_cycle=1).run() mcr_prb = mcscf.CASSCF(mfr_prb, 4, 4).set(max_cycle_macro=1).run()
def test_external_fcisolver(self): fcisolver1 = fci.direct_uhf.FCISolver(mol) class FCI_as_DMRG(fci.direct_uhf.FCISolver): def __getattribute__(self, attr): """Prevent 'private' attribute access""" if attr in ('make_rdm1s', 'spin_square', 'contract_2e', 'absorb_h1e'): raise AttributeError else: return object.__getattribute__(self, attr) def kernel(self, *args, **kwargs): return fcisolver1.kernel(*args, **kwargs) def approx_kernel(self, *args, **kwargs): return fcisolver1.kernel(*args, **kwargs) mc = mcscf.UCASSCF(m, 5, (4,2)) mc.fcisolver = FCI_as_DMRG(mol) mc.kernel() self.assertAlmostEqual(mc.e_tot, -75.755924721041396, 7)
['N', (0.000000, 0.000000, -b / 2)], ['N', (0.000000, 0.000000, b / 2)], ], basis={ 'N': 'ccpvdz', }, symmetry=1) mfr = scf.RHF(mol) mfr.scf() mcr = mcscf.CASSCF(mfr, 4, 4) mcr.conv_tol_grad = 1e-6 mcr.mc1step()[0] mfu = scf.UHF(mol) mfu.scf() mcu = mcscf.UCASSCF(mfu, 4, 4) mcu.conv_tol_grad = 1e-6 mcu.mc1step()[0] def tearDownModule(): global mol, mfr, mcr, mfu, mcu mol.stdout.close() del mol, mfr, mcr, mfu, mcu class KnownValues(unittest.TestCase): def test_spin_square(self): ss = mcscf.addons.spin_square(mcr)[0] self.assertAlmostEqual(ss, 0, 7)
['N', (0.000000, 0.000000, -b / 2)], ['N', (0.000000, 0.000000, b / 2)], ], basis={ 'N': 'ccpvdz', }, symmetry=1) mfr = scf.RHF(mol) mfr.scf() mcr = mcscf.CASSCF(mfr, 4, 4) mcr.conv_tol_grad = 1e-6 mcr.mc1step()[0] mfu = scf.UHF(mol) mfu.scf() mcu = mcscf.UCASSCF(mfu, 4, 4) mcu.conv_tol_grad = 1e-6 mcu.mc1step()[0] mol_prg = gto.M(verbose=0, atom=[ ['N', (0.000000, 0.000000, -(b + 0.1) / 2)], ['N', (0.000000, 0.000000, (b + 0.1) / 2)], ], basis='ccpvdz', symmetry=1) mfr_prg = scf.RHF(mol_prg).set(max_cycle=1).run() mcr_prg = mcscf.CASSCF(mfr_prg, 4, 4).set(max_cycle_macro=1).run() mfu_prg = scf.UHF(mol_prg).set(max_cycle=1).run() mcu_prg = mcscf.UCASSCF(mfu_prg, 4, 4).set(max_cycle_macro=1).run()
def test_casci_in_casscf(self): mc1 = mcscf.UCASSCF(m, 5, (4, 2)) e_tot, e_ci, fcivec = mc1.casci(mc1.mo_coeff) self.assertAlmostEqual(e_tot, -75.733190125187946, 9)
def test_frozen(self): mc = mcscf.UCASSCF(m, 5, (4, 2)) mc.frozen = 2 mc.kernel() self.assertAlmostEqual(mc.e_tot, -75.753628185779561, 7)
def test_ucasscf_high_cost(self): mc = mcscf.UCASSCF(msym, 4, (3, 1)) emc = mc.kernel()[0] self.assertAlmostEqual(emc, -108.80789718975041, 7)
UHF-CASSCF does impose the degeneracy between alpha and beta orbitals ''' mol = gto.Mole() mol.atom = [ ["O", (0., 0., 0.7)], ["O", (0., 0., -0.7)], ] mol.basis = 'cc-pvdz' mol.spin = 2 mol.build() mf = scf.UHF(mol) print('E(UHF) = %.15g' % mf.kernel()) mc = mcscf.UCASSCF(mf, 4, (4, 2)) emc1 = mc.kernel()[0] print('* Triplet with UHF-CASSCF, E(UCAS) = %.15g' % emc1) # Generally, 2s+1 is not 3 print(' S^2 = %.6f, 2S+1 = %.6f' % mcscf.spin_square(mc)) print('\n') mol.spin = 0 mol.build() mf = scf.UHF(mol) print('E(UHF) = %.15g' % mf.kernel()) mc = mcscf.UCASSCF(mf, 4, 6) emc1 = mc.kernel()[0] print('* Singlet with UHF-CASSCF, E(UCAS) = %.15g' % emc1) # Generally, 2s+1 is not 1