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')
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)
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')
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()
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()
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)
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()
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
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()
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()