def run_tddft_iter(): t1 = timer() td = tddft_iter(label="siesta", iter_broadening=0.0035/Ha, xc_code='LDA,PZ', level=0, tddft_iter_tol=1e-3, tol_loc=1e-4, tol_biloc=1e-6) t2 = timer() print("time tddft_iter = ", t2-t1) omegas = np.arange(2.0, 8.0, 2.5E-3)/Ha + 1j*td.eps t3 = timer() pxx = -td.comp_polariz_nonin_ave(omegas) t4 = timer() print("time chi0 = ", t4-t3) data = np.zeros((omegas.shape[0], 3)) data[:, 0] = omegas.real*Ha data[:, 1] = pxx.real data[:, 2] = pxx.imag np.savetxt('polarizability_nonin_siesta.avg.txt', data) t5 = timer() pxx = -td.comp_polariz_inter_ave(omegas) t6 = timer() print("time chi = ", t6-t5) data = np.zeros((omegas.shape[0], 3)) data[:, 0] = omegas.real*Ha data[:, 1] = pxx.real data[:, 2] = pxx.imag np.savetxt('polarizability_inter_siesta.avg.txt', data) print("nb call:") print("rf0_ncalls = {0}, matvec_ncalls ={1}".format(td.rf0_ncalls, td.matvec_ncalls)) t7 = timer() print("total time = ", t7-t1)
def test_load_kernel(self): data_ref_nonin = np.loadtxt(dname + '/water.tddft_iter.omega.pxx.txt-ref')[:, 1] data_ref_inter = np.loadtxt( dname + '/water.tddft_iter.omega.inter.pxx.txt-ref')[:, 1] for form in ["txt", "npy", "hdf5"]: td = tddft_iter(label='water', cd=dname, iter_broadening=1e-2, xc_code='RPA', load_kernel=True, kernel_fname="kernel." + form, kernel_format=form, kernel_path_hdf5="kernel_pack") omegas = np.linspace(0.0, 2.0, 150) + 1j * td.eps pxx = -td.comp_polariz_inter_xx(omegas).imag data = np.array([omegas.real * 27.2114, pxx]) np.savetxt('water.tddft_iter_rpa.omega.inter.pxx.txt', data.T, fmt=['%f', '%f']) self.assertTrue( np.allclose(data_ref_inter, pxx, rtol=1.0, atol=1e-05))
def test_134_h2o_rhf_rpa_pb(self): """ This """ mol = gto.M(verbose=1,atom='O 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',basis='cc-pvdz') gto_mf = scf.RHF(mol) gto_mf.kernel() nao_mf = tddft_iter(gto=mol, mf=gto_mf, tol_loc=1e-5, tol_biloc=1e-7, xc_code="RPA") comega = np.arange(0.0, 2.0, 0.01) + 1j*0.03 pnonin = -nao_mf.comp_polariz_inter_ave(comega, verbosity=0).imag data = np.array([comega.real*HARTREE2EV, pnonin]) np.savetxt('test_134_h2o_rhf_rpa_pb.txt', data.T, fmt=['%f','%f']) data_ref = np.loadtxt('test_134_h2o_rhf_rpa_pb.txt-ref').T self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
def test_tddft_gto_vs_nao_nonin(self): """ Non-interacting case """ omegas = np.linspace(0.0,2.0,150)+1j*0.04 p_ave = -polariz_nonin_ave(gto_mf, mol, omegas).imag data = np.array([omegas.real*27.2114, p_ave]) np.savetxt('hydrogen.tddft_lda.omega.nonin.pav.txt', data.T, fmt=['%f','%f']) nao_td = tddft_iter(mf=gto_mf, gto=mol) p_iter = -nao_td.comp_polariz_nonin_ave(omegas).imag data = np.array([omegas.real*27.2114, p_iter]) np.savetxt('hydrogen.tddft_iter_lda.omega.nonin.pav.txt', data.T, fmt=['%f','%f']) #print('nonin', abs(p_ave-p_iter).sum()/omegas.size) self.assertTrue(abs(p_ave-p_iter).sum()/omegas.size<0.03)
def test_load_kernel(self): data_ref_nonin = np.loadtxt(dname+'/water.tddft_iter.omega.pxx.txt-ref')[:, 1] data_ref_inter = np.loadtxt(dname+'/water.tddft_iter.omega.inter.pxx.txt-ref')[:, 1] for form in ["txt", "npy", "hdf5"]: td = tddft_iter(label='water', cd=dname, iter_broadening=1e-2, xc_code='RPA', load_kernel=True, kernel_fname = "kernel." + form, kernel_format = form, kernel_path_hdf5="kernel_pack") omegas = np.linspace(0.0,2.0,150)+1j*td.eps pxx = -td.comp_polariz_inter_xx(omegas).imag data = np.array([omegas.real*27.2114, pxx]) np.savetxt('water.tddft_iter_rpa.omega.inter.pxx.txt', data.T, fmt=['%f','%f']) self.assertTrue(np.allclose(data_ref_inter, pxx, rtol=1.0, atol=1e-05))
def test_tddft_iter_lda(self): """ Compute polarization with LDA TDDFT """ from timeit import default_timer as timer dname = os.path.dirname(os.path.abspath(__file__)) td = tddft_iter(label='water', cd=dname, jcutoff=7, iter_broadening=1e-2, xc_code='LDA,PZ', level=0) omegas = np.linspace(0.0,2.0,150)+1j*td.eps pxx = -td.comp_polariz_inter_xx(omegas).imag data = np.array([omegas.real*27.2114, pxx]) np.savetxt('water.tddft_iter_lda.omega.inter.pxx.txt', data.T, fmt=['%f','%f']) data_ref = np.loadtxt(dname+'/water.tddft_iter_lda.omega.inter.pxx.txt-ref') #print(' td.rf0_ncalls ', td.rf0_ncalls) #print(' td.matvec_ncalls ', td.matvec_ncalls) self.assertTrue(np.allclose(data_ref,data.T, rtol=1.0, atol=1e-05))
def test_143_h2b_uks_rpa_pb(self): """ This """ mol = gto.M(verbose=1,atom='B 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074',basis='cc-pvdz',spin=3) gto_mf = dft.UKS(mol) gto_mf.kernel() nao_mf = tddft_iter(gto=mol, mf=gto_mf, tol_loc=1e-5, tol_biloc=1e-7, xc_code='RPA') comega = np.arange(0.0, 2.0, 0.01) + 1j*0.03 polave = -nao_mf.polariz_inter_ave(comega, verbosity=0).imag data = np.array([comega.real*HARTREE2EV, polave]) np.savetxt('test_143_h2b_uks_rpa_pb.txt', data.T, fmt=['%f','%f']) data_ref = np.loadtxt('test_143_h2b_uks_rpa_pb.txt-ref').T self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
def run_tddft_iter(calculator, label, freq): from pyscf.nao import tddft_iter td = tddft_iter(gpaw=calculator, iter_broadening=1e-2) omegas = np.linspace(freq[0], freq[freq.shape[0]-1], freq.shape[0]) + 1j*td.eps pxx_nonin = np.zeros(omegas.shape[0], dtype=float) pxx_inter = np.zeros(omegas.shape[0], dtype=float) vext = np.transpose(td.moms1) for iomega,omega in enumerate(omegas): pxx_nonin[iomega] = -np.dot(td.apply_rf0(vext[0,:], omega), vext[0,:]).imag pxx_inter = td.comp_polariz_inter_xx(omegas).imag return pxx_nonin, pxx_inter
def test_tddft_gto_vs_nao_nonin(self): """ Non-interacting case """ omegas = np.linspace(0.0, 2.0, 150) + 1j * 0.04 p_ave = -polariz_nonin_ave(gto_mf, mol, omegas).imag data = np.array([omegas.real * 27.2114, p_ave]) np.savetxt('hydrogen.tddft_lda.omega.nonin.pav.txt', data.T, fmt=['%f', '%f']) nao_td = tddft_iter(mf=gto_mf, gto=mol) p_iter = -nao_td.comp_polariz_nonin_ave(omegas).imag data = np.array([omegas.real * 27.2114, p_iter]) np.savetxt('hydrogen.tddft_iter_lda.omega.nonin.pav.txt', data.T, fmt=['%f', '%f']) #print('nonin', abs(p_ave-p_iter).sum()/omegas.size) self.assertTrue(abs(p_ave - p_iter).sum() / omegas.size < 0.03)
def run_tddft_iter(calculator, label, freq): from pyscf.nao import tddft_iter td = tddft_iter(gpaw=calculator, iter_broadening=1e-2) omegas = np.linspace(freq[0], freq[freq.shape[0] - 1], freq.shape[0]) + 1j * td.eps pxx_nonin = np.zeros(omegas.shape[0], dtype=float) pxx_inter = np.zeros(omegas.shape[0], dtype=float) vext = np.transpose(td.moms1) for iomega, omega in enumerate(omegas): pxx_nonin[iomega] = -np.dot(td.apply_rf0(vext[0, :], omega), vext[0, :]).imag pxx_inter = td.comp_polariz_inter_xx(omegas).imag return pxx_nonin, pxx_inter
def test_qchem_irf(self): """ Test """ gto_hf = dft.RKS(mol) gto_hf.kernel() nocc = mol.nelectron//2 nmo = gto_hf.mo_energy.size nvir = nmo-nocc gto_td = tddft.dRPA(gto_hf) gto_td.nstates = min(100, nocc*nvir) gto_td.kernel() gto_gw = GW(gto_hf, gto_td) gto_gw.kernel() nao_td = tddft_iter(mf=gto_hf, gto=mol, xc_code='RPA') eps = 0.02 omegas = np.arange(0.0,2.0,eps/2.0)+1j*eps p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag data = np.array([omegas.real*27.2114, p_iter]) np.savetxt('NH.tddft_iter_rpa.omega.inter.pav.txt', data.T, fmt=['%f','%f']) np.set_printoptions(linewidth=180)
def test_tddft_iter_lda(self): """ Compute polarization with LDA TDDFT """ from timeit import default_timer as timer dname = os.path.dirname(os.path.abspath(__file__)) td = tddft_iter(label='water', cd=dname, jcutoff=7, iter_broadening=1e-2, xc_code='LDA,PZ', level=0) omegas = np.linspace(0.0, 2.0, 150) + 1j * td.eps pxx = -td.comp_polariz_inter_xx(omegas).imag data = np.array([omegas.real * 27.2114, pxx]) np.savetxt('water.tddft_iter_lda.omega.inter.pxx.txt', data.T, fmt=['%f', '%f']) data_ref = np.loadtxt(dname + '/water.tddft_iter_lda.omega.inter.pxx.txt-ref') #print(' td.rf0_ncalls ', td.rf0_ncalls) #print(' td.matvec_ncalls ', td.matvec_ncalls) self.assertTrue(np.allclose(data_ref, data.T, rtol=1.0, atol=1e-05))
def test_155_tddft_h2b_uks_nonin(self): """ This example is with discrepancies... """ mol = gto.M(verbose=1, atom='B 0 0 0; H 0 0.489 1.074; H 0 0.489 -1.074', basis='cc-pvdz', spin=3) gto_mf = scf.UKS(mol) gto_mf.kernel() omegas = np.arange(0.0, 2.0, 0.01) + 1j * 0.03 p_ave = -polariz_nonin_ave(gto_mf, mol, omegas).imag data = np.array([omegas.real * HARTREE2EV, p_ave]) np.savetxt('test_0155_tddft_h2b_uks_nonin_pyscf.txt', data.T, fmt=['%f', '%f']) data_ref = np.loadtxt('test_0155_tddft_h2b_uks_nonin_pyscf.txt-ref').T self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3)) nao_td = tddft_iter(mf=gto_mf, gto=mol, verbosity=0, xc_code='RPA') polariz = -nao_td.polariz_nonin_ave_matelem(omegas).imag data = np.array([omegas.real * HARTREE2EV, polariz]) np.savetxt('test_0155_tddft_h2b_uks_nonin_matelem.txt', data.T, fmt=['%f', '%f']) data_ref = np.loadtxt( 'test_0155_tddft_h2b_uks_nonin_matelem.txt-ref').T self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3)) polariz = -nao_td.comp_polariz_nonin_ave(omegas).imag data = np.array([omegas.real * HARTREE2EV, polariz]) np.savetxt('test_0155_tddft_h2b_uks_nonin_nao.txt', data.T, fmt=['%f', '%f']) data_ref = np.loadtxt('test_0155_tddft_h2b_uks_nonin_nao.txt-ref').T self.assertTrue(np.allclose(data_ref, data, atol=1e-6, rtol=1e-3))
def test_qchem_irf(self): """ Test """ gto_hf = dft.RKS(mol) gto_hf.kernel() nocc = mol.nelectron // 2 nmo = gto_hf.mo_energy.size nvir = nmo - nocc gto_td = tddft.dRPA(gto_hf) gto_td.nstates = min(100, nocc * nvir) gto_td.kernel() gto_gw = GW(gto_hf, gto_td) gto_gw.kernel() nao_td = tddft_iter(mf=gto_hf, gto=mol, xc_code='RPA') eps = 0.02 omegas = np.arange(0.0, 2.0, eps / 2.0) + 1j * eps p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag data = np.array([omegas.real * 27.2114, p_iter]) np.savetxt('NH.tddft_iter_rpa.omega.inter.pav.txt', data.T, fmt=['%f', '%f']) np.set_printoptions(linewidth=180)
mol = gto.M( verbose=1, atom=''' H 0 0 0 H 0.17 0.7 0.587''', basis='cc-pvdz', ) gto_mf = scf.RKS(mol) gto_mf.kernel() gto_td = tddft.TDDFT(gto_mf) gto_td.nstates = 9 gto_td.kernel() nao_td = tddft_iter(mf=gto_mf, gto=mol) class KnowValues(unittest.TestCase): def test_tddft_gto_vs_nao_inter(self): """ Interacting case """ omegas = np.linspace(0.0, 2.0, 150) + 1j * 0.04 p_ave = -polariz_inter_ave(gto_mf, mol, gto_td, omegas).imag data = np.array([omegas.real * 27.2114, p_ave]) np.savetxt('hydrogen.tddft_lda.omega.inter.pav.txt', data.T, fmt=['%f', '%f']) p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag data = np.array([omegas.real * 27.2114, p_iter]) np.savetxt('hydrogen.tddft_iter_lda.omega.inter.pav.txt', data.T,
# You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function, division import os,unittest,numpy as np from pyscf.nao import tddft_iter dname = os.path.dirname(os.path.abspath(__file__)) td = tddft_iter(label='water', cd=dname, jcutoff=7, iter_broadening=1e-2, xc_code='RPA') class KnowValues(unittest.TestCase): def test_non_inter_polariz(self): """ This is non-interacting polarizability TDDFT with SIESTA starting point """ omegas = np.linspace(0.0,2.0,500)+1j*td.eps pxx = -td.comp_polariz_nonin_xx(omegas).imag #pxx = np.zeros_like(omegas) #vext = np.transpose(td.moms1) #for iomega,omega in enumerate(omegas): pxx[iomega] = -np.dot(td.apply_rf0(vext[0,:], omega), vext[0,:]).imag data = np.array([27.2114*omegas.real, pxx]) data_ref = np.loadtxt(dname+'/water.tddft_iter.omega.pxx.txt-ref') self.assertTrue(np.allclose(data_ref,data.T, rtol=1.0, atol=1e-05)) #np.savetxt('water.tddft_iter.omega.nonin.pxx.txt', data.T, fmt=['%f','%f'])
from __future__ import print_function, division import os,unittest from pyscf.nao import tddft_iter from pyscf.nao.m_comp_spatial_distributions import spatial_distribution import h5py import numpy as np dname = os.path.dirname(os.path.abspath(__file__)) Ha = 27.211386024367243 td = tddft_iter(label='water', iter_broadening=0.15/Ha, xc_code='LDA,PZ', tol_loc=1e-4, tol_biloc=1e-6, cd=dname, verbosity=0) class KnowValues(unittest.TestCase): def test_tddft_iter_spatial(self): """ Check the spatial density change distribution""" self.assertTrue(hasattr(td, 'xocc')) self.assertTrue(hasattr(td, 'xvrt')) self.assertEqual(td.xocc[0].shape[0], 4) self.assertEqual(td.xvrt[0].shape[0], 19) # run TDDFT omegas = h5py.File(dname+"/tddft_iter_output_water_ref.hdf5", "r")["polarizability/frequency"].value/Ha + 1j*td.eps td.comp_dens_inter_along_Eext(omegas, Eext=np.array([1.0, 1.0, 1.0])) np.save("density_change_pyscf.npy", td.dn) np.save("frequency.npy", omegas.real) np.save("pol_tensor.npy", td.p_mat) ref = h5py.File(dname+"/tddft_iter_output_water_ref.hdf5", "r")["polarizability"] pyscf = np.load("pol_tensor.npy")
from __future__ import print_function, division import os, unittest, numpy as np from pyscf.nao import tddft_iter dname = os.path.dirname(os.path.abspath(__file__)) td = tddft_iter(label='water', cd=dname, jcutoff=7, iter_broadening=1e-2, xc_code='RPA', telec=0.03) class KnowValues(unittest.TestCase): def test_non_inter_polariz(self): """ This is non-interacting polarizability TDDFT with SIESTA starting point """ omegas = np.linspace(0.0, 2.0, 500) + 1j * td.eps pave = -td.comp_polariz_nonin_ave(omegas).imag data = np.array([27.2114 * omegas.real, pave]) np.savetxt('water.tddft_iter.telec-0.03.omega-nonin.pav.txt', data.T, fmt=['%f', '%f']) data_ref = np.loadtxt( dname + '/water.tddft_iter.telec-0.03.omega-nonin.pav.txt-ref') self.assertTrue(np.allclose(data_ref, data.T, rtol=1.0, atol=1e-05)) def test_inter_polariz(self): """ This is interacting polarizability with SIESTA starting point """ omegas = np.linspace(0.0, 2.0, 150) + 1j * td.eps pxx = -td.comp_polariz_inter_ave(omegas).imag data = np.array([omegas.real * 27.2114, pxx])
from __future__ import print_function, division import os, unittest from pyscf.nao import tddft_iter dname = os.path.dirname(os.path.abspath(__file__)) td = tddft_iter(label='water', cd=dname) try: from pyscf.lib import misc libnao_gpu = misc.load_library("libnao_gpu") td_gpu = tddft_iter(label='water', cd=dname, GPU=True) except: td_gpu = None class KnowValues(unittest.TestCase): def test_tddft_iter(self): """ This is iterative TDDFT with SIESTA starting point """ self.assertTrue(hasattr(td, 'xocc')) self.assertTrue(hasattr(td, 'xvrt')) self.assertTrue( td.ksn2f.sum() == 8.0) # water: O -- 6 electrons in the valence + H2 -- 2 electrons self.assertEqual(td.xocc[0].shape[0], 4) self.assertEqual(td.xvrt[0].shape[0], 19) dn0 = td.apply_rf0(td.moms1[:, 0]) print(__name__, dn0.sum()) def test_tddft_iter_gpu(self): """ Test GPU version """ if td_gpu is not None:
from __future__ import print_function, division from pyscf.nao import tddft_iter from pyscf.nao.m_x_zip import x_zip, ee2dos, ee_xx_oo2dos import numpy as np c = tddft_iter(label='siesta', force_gamma=True, gen_pb=False, dealloc_hsx=False) eps = 0.01 vst, i2w,i2dos, m2e, ma2x = x_zip(c.mo_energy[0,0], c.mo_coeff[0,0,:,:,0], eps) print(vst) print(m2e.size) np.savetxt('i2dos.txt', np.column_stack((i2w.real,i2dos.real))) i2w,i2dos = ee2dos(c.mo_energy[0,0], eps) np.savetxt('n2dos.txt', np.column_stack((i2w.real,i2dos.real))) ab2o = c.hsx.s4_csr.toarray() i2w,i2dos = ee_xx_oo2dos(m2e, ma2x, ab2o, eps=eps) np.savetxt('m2dos.txt', np.column_stack((i2w.real,i2dos.real)))
from __future__ import print_function, division from pyscf.nao import tddft_iter from pyscf.nao.m_x_zip import x_zip, ee2dos, ee_xx_oo2dos import numpy as np c = tddft_iter(label='siesta', force_gamma=True, gen_pb=False, dealloc_hsx=False) eps = 0.01 vst, i2w, i2dos, m2e, ma2x = x_zip(c.mo_energy[0, 0], c.mo_coeff[0, 0, :, :, 0], eps) print(vst) print(m2e.size) np.savetxt('i2dos.txt', np.column_stack((i2w.real, i2dos.real))) i2w, i2dos = ee2dos(c.mo_energy[0, 0], eps) np.savetxt('n2dos.txt', np.column_stack((i2w.real, i2dos.real))) ab2o = c.hsx.s4_csr.toarray() i2w, i2dos = ee_xx_oo2dos(m2e, ma2x, ab2o, eps=eps) np.savetxt('m2dos.txt', np.column_stack((i2w.real, i2dos.real)))
def test_fxc(self): """ Compute TDDFT interaction kernel """ td = tddft_iter(label='water', cd=os.path.dirname(os.path.abspath(__file__))) fxc = td.comp_fxc_lil(xc_code='1.0*LDA,1.0*PZ', level=4)
from __future__ import print_function, division from pyscf.nao import tddft_iter from pyscf.nao.m_x_zip import x_zip, ee2dos, ee_xx_oo2dos import numpy as np c = tddft_iter(label='siesta', nr=128, jcutoff=7, force_gamma=True, gen_pb=True, dealloc_hsx=False, verbosity=1, xc_code='RPA', x_zip=True) #print(c.sm2e.shape) #print(c.sma2x[0].shape) print( c.comp_polariz_inter_ave( np.array([0.5+1j*0.01]) ) )
from __future__ import print_function, division import os, unittest from pyscf.nao import tddft_iter from pyscf.nao.m_comp_spatial_distributions import spatial_distribution import h5py import numpy as np dname = os.path.dirname(os.path.abspath(__file__)) Ha = 27.211386024367243 td = tddft_iter(label='water', iter_broadening=0.15 / Ha, xc_code='LDA,PZ', tol_loc=1e-4, tol_biloc=1e-6, cd=dname, verbosity=0) class KnowValues(unittest.TestCase): def test_tddft_iter_spatial(self): """ Check the spatial density change distribution""" self.assertTrue(hasattr(td, 'xocc')) self.assertTrue(hasattr(td, 'xvrt')) self.assertEqual(td.xocc[0].shape[0], 4) self.assertEqual(td.xvrt[0].shape[0], 19) # run TDDFT omegas = h5py.File( dname + "/tddft_iter_output_water_ref.hdf5", "r")["polarizability/frequency"].value / Ha + 1j * td.eps
from __future__ import print_function, division import os,unittest from pyscf.nao import tddft_iter dname = os.path.dirname(os.path.abspath(__file__)) td = tddft_iter(label='water', cd=dname) try: from pyscf.lib import misc libnao_gpu = misc.load_library("libnao_gpu") td_gpu = tddft_iter(label='water', cd=dname, GPU=True) except: td_gpu = None class KnowValues(unittest.TestCase): def test_tddft_iter(self): """ This is iterative TDDFT with SIESTA starting point """ self.assertTrue(hasattr(td, 'xocc')) self.assertTrue(hasattr(td, 'xvrt')) self.assertTrue(td.ksn2f.sum()==8.0) # water: O -- 6 electrons in the valence + H2 -- 2 electrons self.assertEqual(td.xocc[0].shape[0], 4) self.assertEqual(td.xvrt[0].shape[0], 19) dn0 = td.apply_rf0(td.moms1[:,0]) print(__name__, dn0.sum()) def test_tddft_iter_gpu(self): """ Test GPU version """ if td_gpu is not None: self.assertTrue(hasattr(td_gpu, 'xocc')) self.assertTrue(hasattr(td_gpu, 'xvrt'))
from __future__ import print_function, division from pyscf.nao import tddft_iter from pyscf.nao.m_x_zip import x_zip, ee2dos, ee_xx_oo2dos import numpy as np c = tddft_iter(label='siesta', nr=128, jcutoff=7, force_gamma=True, gen_pb=True, dealloc_hsx=False, verbosity=1, xc_code='RPA', x_zip=True) #print(c.sm2e.shape) #print(c.sma2x[0].shape) print(c.comp_polariz_inter_ave(np.array([0.5 + 1j * 0.01])))
from pyscf import gto, tddft, scf from pyscf.nao import tddft_iter from pyscf.nao import polariz_inter_ave, polariz_nonin_ave mol = gto.M( verbose = 1, atom = ''' H 0 0 0 H 0.17 0.7 0.587''', basis = 'cc-pvdz',) gto_mf = scf.RKS(mol) gto_mf.kernel() gto_td = tddft.TDDFT(gto_mf) gto_td.nstates = 9 gto_td.kernel() nao_td = tddft_iter(mf=gto_mf, gto=mol) class KnowValues(unittest.TestCase): def test_tddft_gto_vs_nao_inter(self): """ Interacting case """ omegas = np.linspace(0.0,2.0,150)+1j*0.04 p_ave = -polariz_inter_ave(gto_mf, mol, gto_td, omegas).imag data = np.array([omegas.real*27.2114, p_ave]) np.savetxt('hydrogen.tddft_lda.omega.inter.pav.txt', data.T, fmt=['%f','%f']) p_iter = -nao_td.comp_polariz_inter_ave(omegas).imag data = np.array([omegas.real*27.2114, p_iter]) np.savetxt('hydrogen.tddft_iter_lda.omega.inter.pav.txt', data.T, fmt=['%f','%f']) #print('inter', abs(p_ave-p_iter).sum()/omegas.size) self.assertTrue(abs(p_ave-p_iter).sum()/omegas.size<0.03)