Example #1
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
td_ipabs = TDDFT('na2_td.gpw')
Example #2
0
        [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)
Example #3
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
Example #4
0
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)

Example #5
0
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)
Example #7
0
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)
Example #8
0
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)
Example #9
0
# 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)
Example #11
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')
Example #13
0
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)
Example #14
0
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)
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')