Пример #1
0
def ring(label, num, d):
    ''' Builds a ring of a given atom using pyscf.tools.ring

    Parameters
    ----------
    label : str
        atom label
    num : int
        number of atoms in the ring
    d : float
        distance between atoms in the ring

    Returns
    -------
    atoms
        a list of tuples of (label, np.array([x, y, z])) for each atom
    '''

    from pyscf.tools import ring as _ring

    atoms = [(label, np.asarray(x, dtype=types.float64)) for x in _ring.make(num, d)]

    return atoms
Пример #2
0
    ''' Inplace version of state_average '''
    sacasscf = state_average_mix(casscf, fcisolvers, weights)
    casscf.__class__ = sacasscf.__class__
    casscf.__dict__.update(sacasscf.__dict__)
    return casscf


del (BASE, MAP2HF_TOL)

if __name__ == '__main__':
    from pyscf import mcscf
    from pyscf.tools import ring

    mol = gto.M(verbose=0,
                output=None,
                atom=[['H', c] for c in ring.make(6, 1.2)],
                basis='6-31g')

    m = scf.RHF(mol)
    ehf = m.scf()

    mc = mcscf.CASSCF(m, 6, 6)
    mc.verbose = 4
    emc, e_ci, fcivec, mo, mo_energy = mc.mc1step()
    print(ehf, emc, emc - ehf)
    print(emc - -3.272089958)

    rdm1 = make_rdm1(mc, mo, fcivec)
    rdm1, rdm2 = make_rdm12(mc, mo, fcivec)
    print(rdm1)
Пример #3
0
        if callable(old_cb):
            old_cb(envs)

    casscf.callback = hot_load
    return casscf


if __name__ == '__main__':
    from pyscf import gto
    from pyscf import mcscf
    from pyscf.tools import ring

    mol = gto.Mole()
    mol.verbose = 0
    mol.output = None
    mol.atom = [['H', c] for c in ring.make(6, 1.2)]
    mol.basis = '6-31g'
    mol.build()

    m = scf.RHF(mol)
    ehf = m.scf()

    mc = mcscf.CASSCF(m, 6, 6)
    mc.verbose = 4
    emc, e_ci, fcivec, mo, mo_energy = mc.mc1step()
    print(ehf, emc, emc-ehf)
    print(emc - -3.272089958)

    rdm1 = make_rdm1(mc, mo, fcivec)
    rdm1, rdm2 = make_rdm12(mc, mo, fcivec)
    print(rdm1)
Пример #4
0
'''

#
# Modify the default core valence settings for Be and Al
#
# 1 s-shell as core, 1 s-shell + 1 p-shell as valence
lo.set_atom_conf('Be', ('1s', '1s1p'))
# 2 s-shells + 1 p-shell as core, 1 s-shell + 1 p-shell + 1 d-shell as valence
lo.set_atom_conf('Al', ('2s1p', '1s1p1d'))
# double-d shell for Fe, ie taking 3d and 4d orbitals as valence
lo.set_atom_conf('Fe', 'double d')
# double-d shell for Mo, ie taking 4d and 5d orbitals as valence
lo.set_atom_conf('Mo', 'double d')
# Put 3d orbital in valence space for Si
lo.set_atom_conf('Si', 'polarize')

#
# Localize Be12 ring
#
mol = gto.M(atom = [('Be', x) for x in ring.make(12, 2.4)], basis='ccpvtz')
c = lo.orth.orth_ao(mol)
molden.from_mo(mol, 'be12.molden', c)

#
# Localize Al12 ring
#
mol = gto.M(atom = [('Al', x) for x in ring.make(12, 2.4)], basis='ccpvtz')
c = lo.orth.orth_ao(mol)
molden.from_mo(mol, 'al12.molden', c)

Пример #5
0
                _bi_trace(dm2bb, s_xA, s_xB) -
                _bi_trace(dm2ab.transpose(2, 3, 0, 1), s_xA, s_xB)) * .25
        ssxy = (_bi_trace(dm2abba, s_Ax, s_Bx) +
                _bi_trace(dm2baab, s_Ax, s_Bx)) * .5
        ssxy += (_bi_trace(dm2abba, s_xA, s_xB) +
                 _bi_trace(dm2baab, s_xA, s_xB)) * .5
        ss = ssxy + ssz
        return ss * .5

    return eval_ss_frac


if __name__ == '__main__':

    mol = gto.Mole()
    mol.atom = [('C', x) for x in ring.make(13, 1.25)]
    #    mol.atom = '''
    #    C  0.00000   0.00000   0.00000
    #    C  0.00000   0.00000   1.25000
    #    C  0.00000   0.00000   2.5000
    #    C  0.00000   0.00000   3.7500
    #    '''
    mol.basis = 'cc-pVDZ'
    mol.symmetry = 1
    mol.symmetry_subgroup = 'C2v'
    mol.charge = 0
    mol.spin = 0
    mol.verbose = 5
    mol.build()
    nbas_atm = 14
Пример #6
0
        ssz+=(_bi_trace(dm2aa, s_xA, s_xB)
            - _bi_trace(dm2ab, s_xA, s_xB)
            + _bi_trace(dm2bb, s_xA, s_xB)
            - _bi_trace(dm2ab.transpose(2,3,0,1), s_xA, s_xB)) * .25
        ssxy =(_bi_trace(dm2abba, s_Ax, s_Bx)
             + _bi_trace(dm2baab, s_Ax, s_Bx)) * .5
        ssxy+=(_bi_trace(dm2abba, s_xA, s_xB)
             + _bi_trace(dm2baab, s_xA, s_xB)) * .5
        ss = ssxy + ssz
        return ss*.5
    return eval_ss_frac

if __name__ == '__main__':

    mol = gto.Mole()
    mol.atom = [('C', x) for x in ring.make(13,1.25)]
#    mol.atom = '''
#    C  0.00000   0.00000   0.00000
#    C  0.00000   0.00000   1.25000
#    C  0.00000   0.00000   2.5000
#    C  0.00000   0.00000   3.7500
#    '''
    mol.basis='cc-pVDZ'
    mol.symmetry = 1
    mol.symmetry_subgroup = 'C2v'
    mol.charge = 0
    mol.spin = 0
    mol.verbose = 5
    mol.build()
    nbas_atm = 14