Esempio n. 1
0
def setUpModule():
    global mol, mol1, mf_uhf, td_hf, mf_lda, mf_bp86, mf_b3lyp, mf_m06l
    mol = gto.Mole()
    mol.verbose = 5
    mol.output = '/dev/null'
    mol.atom = '''
    O     0.   0.       0.
    H     0.   -0.757   0.587
    H     0.   0.757    0.587'''
    mol.spin = 2
    mol.basis = '631g'
    mol.build()

    mol1 = gto.Mole()
    mol1.verbose = 0
    mol1.atom = '''
    O     0.   0.       0.
    H     0.   -0.757   0.587
    H     0.   0.757    0.587'''
    mol1.basis = '631g'
    mol1.build()

    mf_uhf = scf.UHF(mol).run()
    td_hf = tdscf.TDHF(mf_uhf).run(conv_tol=1e-12)

    mf_lda = dft.UKS(mol).set(xc='lda', conv_tol=1e-12)
    mf_lda.grids.prune = None
    mf_lda = mf_lda.newton().run()
    mf_bp86 = dft.UKS(mol).set(xc='b88,p86', conv_tol=1e-12)
    mf_bp86.grids.prune = None
    mf_bp86 = mf_bp86.newton().run()
    mf_b3lyp = dft.UKS(mol).set(xc='b3lyp', conv_tol=1e-12)
    mf_b3lyp.grids.prune = None
    mf_b3lyp = mf_b3lyp.newton().run()
    mf_m06l = dft.UKS(mol).run(xc='m06l')
Esempio n. 2
0
    def test_polarizability_with_freq_against_tdhf(self):
        # modified based on https://github.com/pyscf/pyscf/issues/507
        mol = gto.M(atom='''
                O  0.0  0.0  0.0
                O  0.0  0.0  1.5
                H  1.0  0.0  0.0
                H  0.0  0.7  1.0''')
        nmo, nocc = mol.nao, mol.nelec[0]
        nvir = nmo - nocc
        mf = scf.RHF(mol).run()
        mf_td = tdscf.TDHF(mf)
        mf_td.nstates = nocc * nvir
        mf_td.run()
        td_transdip = mf_td.transition_dipole()
        td_eig = mf_td.e

        freq_to_res = lambda omega: numpy.einsum(
            "nt, n, ns -> ts", td_transdip, 1 / (td_eig - omega), td_transdip)
        freq_to_nonres = lambda omega: numpy.einsum(
            "nt, n, ns -> ts", td_transdip, 1 / (td_eig + omega), td_transdip)
        freq_to_alpha = lambda omega: freq_to_res(omega) + freq_to_nonres(omega
                                                                          )

        ref = freq_to_alpha(0.)
        val = rhf.Polarizability(mf).polarizability_with_freq(freq=0.)
        self.assertAlmostEqual(abs(ref - val).max(), 0, 8)
        ref = freq_to_alpha(0.1)
        val = rhf.Polarizability(mf).polarizability_with_freq(freq=0.1)
        self.assertAlmostEqual(abs(ref - val).max(), 0, 8)
Esempio n. 3
0
def setUpModule():
    global mol, mf, td_hf, mf_lda, mf_bp86, mf_b3lyp, mf_m06l
    mol = gto.Mole()
    mol.verbose = 5
    mol.output = '/dev/null'
    mol.atom = [
        ['H' , (0. , 0. , .917)],
        ['F' , (0. , 0. , 0.)], ]
    mol.basis = '631g'
    mol.build()

    mf = scf.RHF(mol).run()
    td_hf = tdscf.TDHF(mf).run()

    mf_lda = dft.RKS(mol)
    mf_lda.xc = 'lda, vwn'
    mf_lda.grids.prune = None
    mf_lda.scf()

    mf_bp86 = dft.RKS(mol)
    mf_bp86.xc = 'b88,p86'
    mf_bp86.grids.prune = None
    mf_bp86.scf()

    mf_b3lyp = dft.RKS(mol)
    mf_b3lyp.xc = 'b3lyp'
    mf_b3lyp.grids.prune = None
    mf_b3lyp.scf()

    mf_m06l = dft.RKS(mol).run(xc='m06l')
Esempio n. 4
0
 def test_analyze(self):
     mf = scf.RHF(mol).run()
     td = tdscf.TDHF(mf).run()
     f = td.oscillator_strength(gauge='length')
     self.assertAlmostEqual(lib.finger(f), -0.13908774016795605, 7)
     f = td.oscillator_strength(gauge='velocity', order=2)
     self.assertAlmostEqual(lib.finger(f), -0.096991134490587522, 7)
     td.analyze()
Esempio n. 5
0
 def test_analyze(self):
     mf = scf.UHF(mol).run()
     td = tdscf.TDHF(mf).run()
     f = td.oscillator_strength(gauge='length')
     self.assertAlmostEqual(lib.finger(f), 0.16147450863004867, 7)
     f = td.oscillator_strength(gauge='velocity', order=2)
     self.assertAlmostEqual(lib.finger(f), 0.19750347627735745, 7)
     td.analyze()
Esempio n. 6
0
def seek_states(mf, nstates):
    td = tdscf.TDHF(mf, nstates*2)
    td.kernel()
    n = int(nstates*1.5)
    xy = td.xy[:n]
    td_dm = td_density(td, xy[0])
    for i in range(1,n):
        dm = td_density(td, xy[i])
        td_dm += dm
    td_dm = td_dm * (1.0 / n)
    no = get_no(td_dm)
    return mf, no, nacto, (nacta, nactb)
Esempio n. 7
0
def setUpModule():
    global mol, mf, td_hf, mf_lda3, mf_lda, mf_bp86, mf_b3lyp, mf_b3lyp1#, mf_b3pw91g
    mol = gto.Mole()
    mol.verbose = 5
    mol.output = '/dev/null'
    mol.atom = [
        ['H' , (0. , 0. , .917)],
        ['F' , (0. , 0. , 0.)], ]
    mol.basis = '631g'
    mol.build()

    mf = scf.RHF(mol).run()
    td_hf = tdscf.TDHF(mf).run()

    mf_lda3 = dft.RKS(mol)
    mf_lda3.xc = 'lda, vwn_rpa'
    mf_lda3.grids.prune = None
    mf_lda3.scf()

    mf_lda = dft.RKS(mol)
    mf_lda.xc = 'lda, vwn'
    mf_lda.grids.prune = None
    mf_lda.scf()

    mf_bp86 = dft.RKS(mol)
    mf_bp86.xc = 'b88,p86'
    mf_bp86.grids.prune = None
    mf_bp86.scf()

    mf_b3lyp = dft.RKS(mol)
    mf_b3lyp.xc = 'b3lyp'
    mf_b3lyp.grids.prune = None
    mf_b3lyp.scf()

    mf_b3lyp1 = dft.RKS(mol)
    mf_b3lyp1.xc = 'b3lyp'
    mf_b3lyp1.grids.prune = None
    mf_b3lyp1._numint.libxc = dft.xcfun
    mf_b3lyp1.scf()
Esempio n. 8
0
from pyscf import lib, gto, scf, dft
from pyscf import tdscf

mol = gto.Mole()
mol.verbose = 5
mol.output = '/dev/null'
mol.atom = [
    ["O" , (0. , 0.     , 0.)],
    [1   , (0. , -0.757 , 0.587)],
    [1   , (0. , 0.757  , 0.587)] ]
mol.spin = 2
mol.basis = '631g'
mol.build()

mf = scf.UHF(mol).run()
td_hf = tdscf.TDHF(mf).run(conv_tol=1e-12)

mf_lda = dft.UKS(mol).set(xc='lda', conv_tol=1e-12)
mf_lda.grids.prune = None
mf_lda = mf_lda.newton().run()
mf_bp86 = dft.UKS(mol).set(xc='b88,p86', conv_tol=1e-12)
mf_bp86.grids.prune = None
mf_bp86 = mf_bp86.newton().run()
mf_b3lyp = dft.UKS(mol).set(xc='b3lyp', conv_tol=1e-12)
mf_b3lyp.grids.prune = None
mf_b3lyp = mf_b3lyp.newton().run()

def diagonalize(a, b, nroots=4):
    a_aa, a_ab, a_bb = a
    b_aa, b_ab, b_bb = b
    nocc_a, nvir_a, nocc_b, nvir_b = a_ab.shape
Esempio n. 9
0
from pyscf.tdscf import rhf, rks
from pyscf import tdscf
from pyscf.data import nist

mol = gto.Mole()
mol.verbose = 5
mol.output = '/dev/null'
mol.atom = [
    ['H', (0., 0., .917)],
    ['F', (0., 0., 0.)],
]
mol.basis = '631g'
mol.build()

mf = scf.RHF(mol).run()
td_hf = tdscf.TDHF(mf).run()

mf_lda3 = dft.RKS(mol)
mf_lda3.xc = 'lda, vwn_rpa'
mf_lda3.grids.prune = None
mf_lda3.scf()

mf_lda = dft.RKS(mol)
mf_lda.xc = 'lda, vwn'
mf_lda.grids.prune = None
mf_lda.scf()

mf_bp86 = dft.RKS(mol)
mf_bp86.xc = 'b88,p86'
mf_bp86.grids.prune = None
mf_bp86.scf()
Esempio n. 10
0
    norm = lib.norm(x)**2 - lib.norm(y)**2
    norm = numpy.sqrt(1.0 / norm)
    return x * norm, y * norm


state = 0
lib.logger.info(mf, "Analyzing state : %s" % state)
xy = norm_xy(c[:, state])
coeff = mf.mo_coeff
occ = mf.mo_occ
orbo = coeff[:, occ == 2]
orbv = coeff[:, occ == 0]
x, y = xy
norm = x**2 - y**2
norm = numpy.sum(norm)
lib.logger.info(mf, "Norm X^2 - Y^2 = 1, value %s" % norm)

ab1 = a + b
ab2 = a - b
ab = numpy.dot(ab1, ab2)
e = numpy.linalg.eig(ab)[0]
e = numpy.sqrt(e)
e = numpy.sort(e[e > 0])[:nroots]
e = numpy.asarray(e) * nist.HARTREE2EV
lib.logger.info(mf, 'Alternative TD-HF: %s' % e.real)

from pyscf import tdscf
td = tdscf.TDHF(mf)
td.nstates = nov
td.kernel()