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
# 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) norbs_cmo = (mol.nelectron - 4) // 2 norbs_amo = 4 N2.load_amo_guess_from_casscf_npy(npyfile, norbs_cmo, norbs_amo) elif dr_guess is not None: chkname = 'me2n2_casdmet_r{:2.0f}'.format(dr_guess * 10) me2n2_dmet.load_checkpoint(chkname + '.chk.npy') else: me2n2_dmet.generate_frag_cas_guess(mf, CASlist) # Calculation # -------------------------------------------------------------------------------------------------------------------- energy_result = me2n2_dmet.doselfconsistent() me2n2_dmet.save_checkpoint(my_kwargs['calcname'] + '.chk.npy')
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
# -------------------------------------------------------------------------------------------------------------------- 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 fraglist = [N2Ha, C2H2, N2Hb] # Load or generate active orbital guess # -------------------------------------------------------------------------------------------------------------------- c2h4n4_dmet = dmet(myInts, fraglist, **my_kwargs) if load_casscf_guess: npyfile = 'c2h4n4_cas8_ano.{:.1f}.npy'.format(dr_nn) norbs_cmo = (mol.nelectron - 8) // 2 norbs_amo = 8 N2Ha.load_amo_guess_from_casscf_npy(npyfile, norbs_cmo, norbs_amo) N2Hb.load_amo_guess_from_casscf_npy(npyfile, norbs_cmo, norbs_amo) elif dr_guess is not None: chkname = ('c2h4n4_lasscf8_dr' + ['{:02.0F}', '{:03.0F}'][dr_guess < 0]).format(dr_guess * 10) c2h4n4_dmet.load_checkpoint(chkname + '.chk.npy') else: c2h4n4_dmet.generate_frag_cas_guess(mf, CASlist) # Calculation # --------------------------------------------------------------------------------------------------------------------
Fe.target_MS = spinS Fe.mol_output = my_kwargs['calcname'] + '_Fe.log' Fe.imp_maxiter = 200 Fe.bath_tol = NCHa.bath_tol = NCHb.bath_tol = NCHc.bath_tol = NCHd.bath_tol = NCHe.bath_tol = NCHf.bath_tol = bath_tol Fe.debug_energy = NCHa.debug_energy = True fraglist = [Fe, NCHa, NCHb, NCHc, NCHd, NCHe, NCHf] for l, x in zip(['a', 'b', 'c', 'd', 'e', 'f'], [NCHa, NCHb, NCHc, NCHd, NCHe, NCHf]): x.mol_output = my_kwargs['calcname'] + '_NCH' + l + '.log' for x in [NCHa, NCHb, NCHc, NCHd, NCHe, NCHf]: x.quasidirect = True # Load or generate active orbital guess # -------------------------------------------------------------------------------------------------------------------- print("Building DMET object") fench_dmet = dmet(myInts, fraglist, **my_kwargs) print("Going into checkpoint loading") if load_casscf_guess: npyfile = 'fench_{}_casscf65_anodz_no.npy'.format(('ls', 'hs')[spinS // 2]) norbs_cmo = (mol.nelectron - 6) // 2 norbs_amo = 5 Fe.load_amo_guess_from_casscf_npy(npyfile, norbs_cmo, norbs_amo) elif load_lasscf_chk: fench_dmet.load_checkpoint(my_kwargs['calcname'] + '.chk.npy') elif load_lasscf_sto3g_chk: fench_dmet.load_checkpoint(my_kwargs['calcname'][:-5] + 'sto3g.chk.npy', prev_mol=mol_sto3g) else: fn = (grab_3d_ls, grab_3d_hs)[spinS // 2] fench_dmet.generate_frag_cas_guess(fn(mf), force_imp=True,