# Calculate photoabsorption spectrum as usual folding = 'Gauss' width = 0.1 e_min = 0.0 e_max = 4.0 photoabsorption_spectrum(lr, 'na2_casida_spectrum.dat', folding=folding, width=width, e_min=e_min, e_max=e_max, delta_e=1e-2) # Load GPAW object calc = GPAW('na2_gs_casida.gpw') # Calculate induced field frequencies = [1.0, 2.08] # Frequencies of interest in eV folding = 'Gauss' # Folding function width = 0.1 # Line width for folding in eV kickdir = 0 # Kick field direction 0, 1, 2 for x, y, z ind = LrTDDFTInducedField(paw=calc, lr=lr, frequencies=frequencies, folding=folding, width=width, kickdir=kickdir) ind.calculate_induced_field(gridrefinement=2, from_density='comp') ind.write('na2_casida_field.ind', mode='field')
# Load LrTDDFT object lr = LrTDDFT('na2_lr.dat.gz') # Calculate photoabsorption spectrum as usual folding = 'Gauss' width = 0.1 e_min = 0.0 e_max = 4.0 photoabsorption_spectrum(lr, 'na2_casida_spectrum.dat', folding=folding, width=width, e_min=e_min, e_max=e_max, delta_e=1e-2) # Load GPAW object calc = GPAW('na2_gs_casida.gpw') print calc.wfs.rank_a # Calculate induced field frequencies = [1.0, 2.08] # Frequencies of interest in eV folding = 'Gauss' # Folding function width = 0.1 # Line width for folding in eV kickdir = 0 # Kick field direction 0, 1, 2 for x, y, z ind = LrTDDFTInducedField(paw=calc, lr=lr, frequencies=frequencies, folding=folding, width=width, kickdir=kickdir) ind.calculate_induced_field(gridrefinement=2, from_density='comp') ind.write('na2_casida_field.ind', mode='field')
# Start from scratch del lr del calc calc = GPAW('na2_gs_casida.gpw') # calc.initialize_positions() # calc.set_positions() lr = LrTDDFT('na2_lr.dat.gz') # 3) Calculate induced field frequencies = [1.0, 2.08] # Frequencies of interest in eV folding = 'Gauss' # Folding function width = 0.1 # Line width for folding in eV kickdir = 0 # Kick field direction 0, 1, 2 for x, y, z ind = LrTDDFTInducedField(paw=calc, lr=lr, frequencies=frequencies, folding=folding, width=width, kickdir=kickdir) ind.calculate_induced_field(gridrefinement=2, from_density='comp', poissonsolver=poissonsolver, extend_N_cd=3 * np.ones((3, 2), int), deextend=True) # Estimate tolerance (worst case error accumulation) tol = (len(lr)**2 * ind.fieldgd.integrate(ind.fieldgd.zeros() + 1.0) * max(density_eps, np.sqrt(poisson_eps))) # tol = 0.702253185994 if do_print_values: print('tol = %.12f' % tol)
calc.write('na2_gs_casida.gpw', mode='all') # 2) Casida calculation calc = GPAW('na2_gs_casida.gpw') istart = 0 jend = 20 lr = LrTDDFT(calc, xc='LDA', istart=istart, jend=jend) lr.diagonalize() lr.write('na2_lr.dat.gz') # 3) Calculate induced field frequencies = [1.0, 2.08] # Frequencies of interest in eV folding = 'Gauss' # Folding function width = 0.1 # Line width for folding in eV kickdir = 0 # Kick field direction 0, 1, 2 for x, y, z ind = LrTDDFTInducedField(paw=calc, lr=lr, frequencies=frequencies, folding=folding, width=width, kickdir=kickdir) ind.calculate_induced_field(gridrefinement=2, from_density='comp') # Test from gpaw.test import equal tol = 0.0001 val1 = ind.fieldgd.integrate(ind.Ffe_wg[0]) val2 = ind.fieldgd.integrate(np.abs(ind.Fef_wvg[0][0])) val3 = ind.fieldgd.integrate(np.abs(ind.Fef_wvg[0][1])) val4 = ind.fieldgd.integrate(np.abs(ind.Fef_wvg[0][2])) val5 = ind.fieldgd.integrate(ind.Ffe_wg[1]) val6 = ind.fieldgd.integrate(np.abs(ind.Fef_wvg[1][0])) val7 = ind.fieldgd.integrate(np.abs(ind.Fef_wvg[1][1])) val8 = ind.fieldgd.integrate(np.abs(ind.Fef_wvg[1][2])) equal(val1, 3175.76177761, tol) equal(val2, 1700.43442519, tol)