gs_calc.write('na2_gs.gpw', 'all') # 16 fs run with 8.0 attosec time step time_step = 8.0 # 8.0 as (1 as = 0.041341 autime)5D iters = 10 # 2000 x 8 as => 16 fs # Weak delta kick to z-direction kick = [0, 0, 1e-3] # TDDFT calculator td_calc = TDDFT('na2_gs.gpw') # Kick td_calc.absorption_kick(kick) # Propagate td_calc.propagate(time_step, iters, 'na2_dmz.dat', 'na2_td.gpw') # Linear absorption spectrum photoabsorption_spectrum('na2_dmz.dat', 'na2_spectrum_z.dat', width=0.3) iters = 3 # test restart td_rest = TDDFT('na2_td.gpw') td_rest.propagate(time_step, iters, 'na2_dmz2.dat', 'na2_td2.gpw') # test restart td_rest = TDDFT('na2_td.gpw', solver='BiCGStab') td_rest.propagate(time_step, iters, 'na2_dmz3.dat', 'na2_td3.gpw') # test absorbing boundary conditions # linear imaginary potential td_ipabs = TDDFT('na2_td.gpw')
[7.912, 1.361, 81.04]] # Initialize classical material classical_material = PolarizableMaterial() # Classical nanosphere classical_material.add_component( PolarizableSphere(center=0.5 * large_cell, radius=radius, permittivity=PermittivityPlus(data=gold))) # Quasistatic FDTD qsfdtd = QSFDTD(classical_material=classical_material, atoms=None, cells=large_cell, spacings=[8.0, 1.0], communicator=world, remove_moments=(4, 1)) # Run ground state energy = qsfdtd.ground_state('gs.gpw', nbands=-1) # Run time evolution qsfdtd.time_propagation('gs.gpw', time_step=10, iterations=1000, kick_strength=[0.001, 0.000, 0.000], dipole_moment_file='dm.dat') # Spectrum photoabsorption_spectrum('dm.dat', 'spec.dat', width=0.0)
gs_calc.write('na2_gs.gpw', 'all') # 16 fs run with 8.0 attosec time step time_step = 8.0 # 8.0 as (1 as = 0.041341 autime)5D iters = 10 # 2000 x 8 as => 16 fs # Weak delta kick to z-direction kick = [0,0,1e-3] # TDDFT calculator td_calc = TDDFT('na2_gs.gpw') # Kick td_calc.absorption_kick(kick) # Propagate td_calc.propagate(time_step, iters, 'na2_dmz.dat', 'na2_td.gpw') # Linear absorption spectrum photoabsorption_spectrum('na2_dmz.dat', 'na2_spectrum_z.dat', width=0.3) iters = 3 # test restart td_rest = TDDFT('na2_td.gpw') td_rest.propagate(time_step, iters, 'na2_dmz2.dat', 'na2_td2.gpw') # test restart td_rest = TDDFT('na2_td.gpw', solver='BiCGStab') td_rest.propagate(time_step, iters, 'na2_dmz3.dat', 'na2_td3.gpw') # test absorbing boundary conditions # linear imaginary potential
h = 0.4 b = 'dzp' sy = 'Na2' positions = [[0.0, 0.0, 0.0], [0.0, 0.0, 2.0]] atoms = Atoms(symbols=sy, positions=positions) atoms.center(vacuum=3) # LCAO-RT-TDDFT calc = GPAW(mode=LCAO(force_complex_dtype=True), nbands=1, xc=xc, h=h, basis=b, charge=c, width=0, convergence={'density': 1e-8}, setups={'Na': '1'}) atoms.set_calculator(calc) atoms.get_potential_energy() calc.write('Na2.gpw', 'all') del calc calc = LCAOTDDFT('Na2.gpw') dmfile = sy + '_lcao_restart_' + b + '_rt_z.dm' + str(world.size) specfile = sy + '_lcao_restart_' + b + '_rt_z.spectrum' + str(world.size) calc.absorption_kick([0.0, 0, 0.001]) calc.propagate(10, 20, dmfile) if world.rank == 0: photoabsorption_spectrum(dmfile, specfile)
from ase import Atoms from gpaw.tddft import photoabsorption_spectrum from gpaw import PoissonSolver from gpaw.lcaotddft.tddfpt import DensityCollector from gpaw.lcaotddft import LCAOTDDFT atoms = Atoms('Na8', positions=[[i * 3.0, 0, 0] for i in range(8)]) atoms.center(vacuum=5.0) # Calculate all bands td_calc = LCAOTDDFT(basis='dzp', setups={'Na': '1'}, xc='LDA', h=0.3, nbands=4, convergence={'density': 1e-7}, poissonsolver=PoissonSolver(eps=1e-14, remove_moment=1 + 3 + 5)) atoms.set_calculator(td_calc) atoms.get_potential_energy() td_calc.write('Na8_gs.gpw', mode='all') td_calc = LCAOTDDFT('Na8_gs.gpw') td_calc.attach(DensityCollector('Na8.TdDen', td_calc)) td_calc.absorption_kick([1e-4, 0.0, 0.0]) td_calc.propagate(20, 1000, 'Na8.dm') photoabsorption_spectrum('Na8.dm', 'Na8.spec', width=0.15)
qsfdtd = QSFDTD(classical_material = classical_material, atoms = None, cells = simulation_cell, spacings = [2.0, 0.5], remove_moments = (1, 1)) energy = qsfdtd.ground_state('gs.gpw', nbands = 1) qsfdtd.time_propagation('gs.gpw', kick_strength=[0.001, 0.000, 0.000], time_step=10, iterations=1500, dipole_moment_file='dm.dat') photoabsorption_spectrum('dm.dat', 'spec.1.dat', width=0.15) # 2) Na2 only (radius=0) classical_material = PolarizableMaterial() classical_material.add_component(PolarizableSphere(center = sphere_center, radius = 0.0, permittivity = eps_gold)) qsfdtd = QSFDTD(classical_material = classical_material, atoms = atoms, cells = (simulation_cell, 4.0), # vacuum = 4.0 Ang spacings = [2.0, 0.5], remove_moments = (1, 1)) energy = qsfdtd.ground_state('gs.gpw', nbands = -1)
qsfdtd = QSFDTD(classical_material=classical_material, atoms=None, cells=simulation_cell, spacings=[2.0, 0.5], remove_moments=(1, 1)) energy = qsfdtd.ground_state('gs.gpw', nbands=1) qsfdtd.time_propagation('gs.gpw', kick_strength=[0.001, 0.000, 0.000], time_step=10, iterations=1500, dipole_moment_file='dm.dat') photoabsorption_spectrum('dm.dat', 'spec.1.dat', width=0.15) # 2) Na2 only (radius=0) classical_material = PolarizableMaterial() classical_material.add_component(PolarizableSphere(center=sphere_center, radius=0.0, permittivity=eps_gold)) qsfdtd = QSFDTD(classical_material=classical_material, atoms=atoms, cells=(simulation_cell, 4.0), # vacuum = 4.0 Ang spacings=[2.0, 0.5], remove_moments=(1, 1)) energy = qsfdtd.ground_state('gs.gpw', nbands=-1)
import numpy as np import matplotlib.pyplot as plt from pyramids.plot.setting import getPropertyFromPosition, setProperty from gpaw.tddft import photoabsorption_spectrum import os print os.path.abspath('.') name = os.path.abspath('.').split('/')[-1] fig, ax = plt.subplots(1, 1, figsize=(6, 6 / 2**0.5)) colors = ['r', 'g', 'b'] direct = ['x', 'y', 'z'] for i in range(3): photoabsorption_spectrum(name + str(i) + '.dm', name + str(i) + '.spec', width=0.5) data = np.loadtxt(name + str(i) + '.spec') ax.plot(data[:, 0], data[:, 1], colors[i], label=direct[i]) setProperty( ax, **getPropertyFromPosition(title=r'Absorption spectrum of ' + name, xlabel='eV', ylabel='Absorption (arbitrary units)')) plt.tight_layout() for save_type in ['.pdf', '.png']: filename = name + save_type plt.savefig(filename, dpi=600)
# Save state gs_calc.write('gs.gpw', 'all') # Initialize TDDFT and FDTD kick = [0.001, 0.000, 0.000] time_step = 10 iterations = 1000 td_calc = TDDFT('gs.gpw') td_calc.absorption_kick(kick_strength=kick) td_calc.hamiltonian.poisson.set_kick(kick) # Attach InducedField to the calculation frequencies = [2.45] width = 0.0 ind = FDTDInducedField(paw=td_calc, frequencies=frequencies, width=width) # Propagate TDDFT and FDTD td_calc.propagate(time_step, iterations, 'dm0.dat', 'td.gpw') # Save results td_calc.write('td.gpw', 'all') ind.write('td.ind') # Spectrum photoabsorption_spectrum('dm0.dat', 'spec.dat', width=width) # Induced field ind.calculate_induced_field(gridrefinement=2) ind.write('field.ind', mode='all')
[5.747, 1.958, 22.55], [7.912, 1.361, 81.04], ] # Initialize classical material classical_material = PolarizableMaterial() # Classical nanosphere classical_material.add_component( PolarizableSphere(center=0.5 * large_cell, radius=radius, permittivity=PermittivityPlus(data=gold)) ) # Quasistatic FDTD qsfdtd = QSFDTD( classical_material=classical_material, atoms=None, cells=large_cell, spacings=[8.0, 1.0], communicator=world, remove_moments=(4, 1), ) # Run ground state energy = qsfdtd.ground_state("gs.gpw", nbands=-1) # Run time evolution qsfdtd.time_propagation( "gs.gpw", time_step=10, iterations=1000, kick_strength=[0.001, 0.000, 0.000], dipole_moment_file="dm.dat" ) # Spectrum photoabsorption_spectrum("dm.dat", "spec.dat", width=0.0)
convergence = {'density': 1e-6} # Increase accuracy of Poisson Solver and apply multipole corrections up to l=2 poissonsolver = PoissonSolver(eps=1e-14, remove_moment=1 + 3) td_calc = LCAOTDDFT(xc='GLLBSC', basis='GLLBSC.dz', h=0.3, nbands=352, convergence=convergence, poissonsolver=poissonsolver, occupations=FermiDirac(0.1), parallel={ 'sl_default': (8, 8, 32), 'band': 2 }) atoms.set_calculator(td_calc) # Relax the ground state atoms.get_potential_energy() # For demonstration purposes, save intermediate ground state result to a file td_calc.write('ag55.gpw', mode='all') td_calc = LCAOTDDFT('ag55.gpw', parallel={'sl_default': (8, 8, 32), 'band': 2}) td_calc.absorption_kick([1e-5, 0.0, 0.0]) td_calc.propagate(20, 500, 'ag55.dm') photoabsorption_spectrum('ag55.dm', 'ag55.spec', width=0.2)
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')
from pyramids.plot.setting import getPropertyFromPosition, setProperty from gpaw.tddft import photoabsorption_spectrum from pyramids.io.output import writeGPAWdipole from pyramids.io.result import getDipole import os print os.path.abspath('.') name= os.path.abspath('.').split('/')[-1] fig,ax = plt.subplots(1,1,figsize=(6, 6 / 2 ** 0.5)) colors = ['r','g','b'] direct = ['x','y','z'] for i in range(3): os.chdir(direct[i]) time, dipole = getDipole() kick = [0.0, 0.0, 0.0] kick[i] = 1e-1 print time.shape, dipole.shape writeGPAWdipole(name+str(i)+'.dm',kick,time,dipole) photoabsorption_spectrum(name+str(i)+'.dm', name+str(i)+'.spec', width=0.001) data = np.loadtxt(name+str(i)+'.spec') ax.plot(data[:, 0], data[:, 1]/data[:, 0], colors[i],label=direct[i]) os.chdir('..') setProperty(ax,**getPropertyFromPosition(title=r'Absorption spectrum of '+name, xlabel='eV', ylabel='Absorption (arbitrary units)')) plt.tight_layout() for save_type in ['.pdf','.png']: filename = name + save_type plt.savefig(filename,dpi=600)
from gpaw import PoissonSolver # Sodium dimer atoms = Atoms('Na2', positions=[[0.0, 0.0, 0.0], [3.0, 0.0, 0.0]]) atoms.center(vacuum=3.5) from gpaw.lcaotddft import LCAOTDDFT # Increase accuragy of density for ground state convergence = {'density': 1e-7} # Increase accuracy of Poisson Solver and apply multipole corrections up to l=1 poissonsolver = PoissonSolver(eps=1e-14, remove_moment=1 + 3) td_calc = LCAOTDDFT(setups={'Na': '1'}, basis='dzp', xc='LDA', h=0.3, nbands=1, convergence=convergence, poissonsolver=poissonsolver) atoms.set_calculator(td_calc) # Relax the ground state atoms.get_potential_energy() td_calc.absorption_kick([1e-5, 0.0, 0.0]) td_calc.propagate(20, 250, 'Na2.dm') photoabsorption_spectrum('Na2.dm', 'Na2.spec', width=0.4)