예제 #1
0
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
예제 #2
0
# 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')
예제 #3
0
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
예제 #4
0
# --------------------------------------------------------------------------------------------------------------------
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
# --------------------------------------------------------------------------------------------------------------------
예제 #5
0
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,