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
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) 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)
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
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 # -------------------------------------------------------------------------------------------------------------------- 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
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") N2.bath_tol = bath_tol fraglist = [N2] # 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_1edmet_r{:2.0f}'.format(dr_guess * 10) me2n2_dmet.load_checkpoint(chkname + '.chk.npy') else:
fake_occ[:norbs_cmo] = 2 fake_occ[norbs_cmo:norbs_omo] = 1 #molden.from_mo (mol, my_kwargs['calcname'] + '_avas.molden', mo, occ=fake_occ) #if spinS == 0: # mf.mo_coeff = mo ''' # 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 # -------------------------------------------------------------------------------------------------------------------- Fe = make_fragment_atom_list(myInts, [0], 'CASSCF(6,5)', name="Fe", add_virtual_bath=add_virtual_bath) NCHa = make_fragment_atom_list(myInts, [1, 7, 8], 'dummy RHF', name='NCHa') NCHb = make_fragment_atom_list(myInts, [2, 13, 14], 'dummy RHF', name='NCHb') NCHc = make_fragment_atom_list(myInts, [3, 9, 10], 'dummy RHF', name='NCHc') NCHd = make_fragment_atom_list(myInts, [4, 11, 12], 'dummy RHF', name='NCHd') NCHe = make_fragment_atom_list(myInts, [5, 17, 18], 'dummy RHF', name='NCHe') NCHf = make_fragment_atom_list(myInts, [6, 15, 16], 'dummy RHF', name='NCHf') Fe.target_S = spinS 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'],
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 # -------------------------------------------------------------------------------------------------------------------- N2Ha = make_fragment_atom_list(myInts, list(range(3)), 'CASSCF(4,4)', name='N2Ha') #, active_orb_list = CASlist) C2H4 = make_fragment_atom_list(myInts, list(range(3, 9)), 'RHF', name='C2H4') N2Hb = make_fragment_atom_list(myInts, list(range(9, 12)), 'CASSCF(4,4)', name='N2Hb') #, active_orb_list = CASlist) N2Ha.bath_tol = C2H4.bath_tol = N2Hb.bath_tol = bath_tol fraglist = [N2Ha, C2H4, N2Hb] # Load or generate active orbital guess # -------------------------------------------------------------------------------------------------------------------- c2h6n4_dmet = dmet(myInts, fraglist, **my_kwargs) if load_casscf_guess: npyfile = 'c2h6n4_casano.{:.1f}.npy'.format(dr_nn) norbs_cmo = (mol.nelectron - 8) // 2