# Restart and continue td_calc = TDDFT('na2_td.gpw') # Load and attach InducedField object ind = TDDFTInducedField(filename='na2_td.ind', paw=td_calc, restart_file='na2_td.ind') # Continue propagation as usual td_calc.propagate(time_step, iterations // 2, 'na2_td_dm.dat', 'na2_td.gpw') # Calculate induced electric field ind.calculate_induced_field(gridrefinement=2, from_density='comp', poissonsolver=poissonsolver, extend_N_cd=3 * np.ones((3, 2), int), deextend=True) # Save ind.write('na2_td_field.ind', 'all') ind.paw = None td_calc = None ind = None # Read data (test also field data I/O) ind = BaseInducedField(filename='na2_td_field.ind', readmode='field') # Estimate tolerance (worst case error accumulation) tol = (iterations * ind.fieldgd.integrate(ind.fieldgd.zeros() + 1.0) *
ind.paw = None # Restart and continue td_calc = TDDFT('na2_td.gpw') # Load and attach InducedField object ind = TDDFTInducedField(filename='na2_td.ind', paw=td_calc, restart_file='na2_td.ind') # Continue propagation as usual td_calc.propagate(time_step, iterations / 2, 'na2_td_dm.dat', 'na2_td.gpw') # Calculate induced electric field 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, 3307.77279745, tol) equal(val2, 2.24614158834, tol)
from gpaw.tddft import TDDFT from gpaw.inducedfield.inducedfield_fdtd import (FDTDInducedField, calculate_hybrid_induced_field ) from gpaw.inducedfield.inducedfield_tddft import TDDFTInducedField td_calc = TDDFT('td.gpw') # Classical subsystem cl_ind = FDTDInducedField(filename='cl.ind', paw=td_calc) cl_ind.calculate_induced_field(gridrefinement=2) cl_ind.write('cl_field.ind', mode='all') # Quantum subsystem qm_ind = TDDFTInducedField(filename='qm.ind', paw=td_calc) qm_ind.calculate_induced_field(gridrefinement=2) qm_ind.write('qm_field.ind', mode='all') # Total system, interpolate/extrapolate to a grid with spacing h tot_ind = calculate_hybrid_induced_field(cl_ind, qm_ind, h=1.0) tot_ind.write('tot_field.ind', mode='all')
from gpaw.tddft import TDDFT, photoabsorption_spectrum from gpaw.inducedfield.inducedfield_tddft import TDDFTInducedField # Calculate photoabsorption spectrum as usual folding = 'Gauss' width = 0.1 e_min = 0.0 e_max = 4.0 photoabsorption_spectrum('na2_td_dm.dat', 'na2_td_spectrum_x.dat', folding=folding, width=width, e_min=e_min, e_max=e_max, delta_e=1e-2) # Load TDDFT object td_calc = TDDFT('na2_td.gpw') # Load InducedField object ind = TDDFTInducedField(filename='na2_td.ind', paw=td_calc) # Calculate induced electric field ind.calculate_induced_field(gridrefinement=2, from_density='comp') # Save induced electric field ind.write('na2_td_field.ind', mode='all')