def run (mf, CASlist=None, **kwargs): # I/O # -------------------------------------------------------------------------------------------------------------------- mol = mf.mol my_kwargs = {'calcname': 'me2n2_lasscf', 'doLASSCF': True, 'debug_energy': False, 'debug_reloc': False, 'nelec_int_thresh': 1e-5, 'num_mf_stab_checks': 0} bath_tol = 1e-8 my_kwargs.update (kwargs) # Set up the localized AO basis # -------------------------------------------------------------------------------------------------------------------- myInts = localintegrals.localintegrals(mf, range(mol.nao_nr ()), 'meta_lowdin') # Build fragments from atom list # -------------------------------------------------------------------------------------------------------------------- N2 = make_fragment_atom_list (myInts, list (range(2)), 'CASSCF(4,4)', name="N2") N2.target_S = N2.target_MS = mol.spin // 2 Me1 = make_fragment_atom_list (myInts, list (range(2,6)), 'RHF', name='Me1') Me2 = make_fragment_atom_list (myInts, list (range(6,10)), 'RHF', name='Me2') N2.bath_tol = Me1.bath_tol = Me2.bath_tol = bath_tol fraglist = [N2, Me1, Me2] # Generate active orbital guess # -------------------------------------------------------------------------------------------------------------------- me2n2_dmet = dmet (myInts, fraglist, **my_kwargs) me2n2_dmet.generate_frag_cas_guess (mf.mo_coeff, caslst=CASlist, force_imp=True, confine_guess=False) # Calculation # -------------------------------------------------------------------------------------------------------------------- e = me2n2_dmet.doselfconsistent () me2n2_dmet.lasci_log.close () return e
if not mf.converged: mf = mf.newton() mf.kernel() for i in range(my_kwargs['num_mf_stab_checks']): new_mo = mf.stability()[0] dm0 = reduce(np.dot, (new_mo, np.diag(mf.mo_occ), new_mo.conjugate().T)) mf = scf.RHF(mol) mf.verbose = 4 mf.kernel(dm0) if not mf.converged: mf = mf.newton() mf.kernel() # Set up the localized AO basis # -------------------------------------------------------------------------------------------------------------------- myInts = localintegrals.localintegrals(mf, range(mol.nao_nr()), 'meta_lowdin') myInts.molden(my_kwargs['calcname'] + '_locints.molden') # Build fragments from atom list # -------------------------------------------------------------------------------------------------------------------- N2 = make_fragment_atom_list(myInts, list(range(2)), 'CASSCF(4,4)', name="N2") Me1 = make_fragment_atom_list(myInts, list(range(2, 6)), 'RHF', name='Me1') Me2 = make_fragment_atom_list(myInts, list(range(6, 10)), 'RHF', name='Me2') N2.bath_tol = Me1.bath_tol = Me2.bath_tol = bath_tol fraglist = [N2, Me1, Me2] # Load or generate active orbital guess # -------------------------------------------------------------------------------------------------------------------- me2n2_dmet = dmet(myInts, fraglist, **my_kwargs) if load_casscf_guess: npyfile = 'me2n2_casano.{:.1f}.npy'.format(r_nn)
def build(mf, m1=0, m2=0, ir1=0, ir2=0, CASlist=None, active_first=False, calcname='c2h4n4', **kwargs): # I/O # -------------------------------------------------------------------------------------------------------------------- mol = mf.mol my_kwargs = { 'calcname': calcname, 'doLASSCF': True, 'debug_energy': False, 'debug_reloc': False, 'nelec_int_thresh': 1e-3, 'num_mf_stab_checks': 0, 'do_conv_molden': False } bath_tol = 1e-8 my_kwargs.update(kwargs) # Set up the localized AO basis # -------------------------------------------------------------------------------------------------------------------- myInts = localintegrals.localintegrals(mf, range(mol.nao_nr()), 'meta_lowdin') # Build fragments from atom list # -------------------------------------------------------------------------------------------------------------------- N2Ha = make_fragment_atom_list(myInts, list(range(3)), 'CASSCF(4,4)', name='N2Ha') #, active_orb_list = CASlist) C2H2 = make_fragment_atom_list(myInts, list(range(3, 7)), 'RHF', name='C2H2') N2Hb = make_fragment_atom_list(myInts, list(range(7, 10)), 'CASSCF(4,4)', name='N2Hb') #, active_orb_list = CASlist) N2Ha.bath_tol = C2H2.bath_tol = N2Hb.bath_tol = bath_tol N2Ha.target_S = abs(m1) N2Ha.target_MS = m1 #N2Ha.mol_output = calcname + '_N2Ha.log' N2Hb.target_S = abs(m2) N2Hb.target_MS = m2 #N2Hb.mol_output = calcname + '_N2Hb.log' if mol.symmetry: N2Ha.wfnsym = ir1 N2Hb.wfnsym = ir2 fraglist = [N2Ha, C2H2, N2Hb] # Load or generate active orbital guess # -------------------------------------------------------------------------------------------------------------------- c2h4n4_dmet = dmet(myInts, fraglist, **my_kwargs) c2h4n4_dmet.generate_frag_cas_guess(mf.mo_coeff, caslst=CASlist, force_imp=active_first, confine_guess=(not active_first)) # Calculation # -------------------------------------------------------------------------------------------------------------------- return c2h4n4_dmet