Exemplo n.º 1
0
# Ground-state calculation
from gpaw import GPAW
calc = GPAW(mode='lcao',
            h=0.3,
            basis='dzp',
            setups={'Na': '1'},
            poissonsolver=poissonsolver,
            convergence={'density': 1e-8})
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Time-propagation calculation
from gpaw.lcaotddft import LCAOTDDFT
from gpaw.lcaotddft.dipolemomentwriter import DipoleMomentWriter
# Read converged ground-state file
td_calc = LCAOTDDFT('gs.gpw')
# Attach any data recording or analysis tools
DipoleMomentWriter(td_calc, 'dm.dat')
# Kick
td_calc.absorption_kick([0.0, 0.0, 1e-5])
# Propagate
td_calc.propagate(10, 3000)
# Save the state for restarting later
td_calc.write('td.gpw', mode='all')

# Analyze the results
from gpaw.tddft.spectrum import photoabsorption_spectrum
photoabsorption_spectrum('dm.dat', 'spec.dat')
Exemplo n.º 2
0
# Calculate ground state in LCAO mode
calc = GPAW(xc='GLLBSC',
            basis='GLLBSC.dz',
            h=0.3,
            nbands=352,
            mode='lcao',
            convergence=convergence,
            poissonsolver=poissonsolver,
            occupations=FermiDirac(0.1),
            parallel={
                'sl_default': (8, 6, 32),
                'band': 2
            })
atoms.set_calculator(calc)
# Relax the ground state
atoms.get_potential_energy()
# Save the intermediate ground state result to a file
calc.write('ag55_gs.gpw', mode='all')

# Time propagation
td_calc = LCAOTDDFT('ag55_gs.gpw',
                    parallel={
                        'sl_default': (8, 6, 32),
                        'band': 2
                    })
DipoleMomentWriter(td_calc, 'ag55.dm')
td_calc.absorption_kick([1e-5, 0.0, 0.0])
td_calc.propagate(20, 500)

photoabsorption_spectrum('ag55.dm', 'ag55.spec', width=0.2)
Exemplo n.º 3
0
# Ground-state calculation
calc = GPAW(nbands=2,
            h=0.4,
            setups=dict(Na='1'),
            basis='sz(dzp)',
            mode='lcao',
            xc='oldLDA',
            poissonsolver=PoissonSolver(eps=1e-16),
            convergence={'density': 1e-8},
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Time-propagation calculation
td_calc = LCAOTDDFT('gs.gpw', txt='td.out')
DipoleMomentWriter(td_calc, 'dm.dat')
td_calc.absorption_kick([0, 0, 1e-5])
td_calc.propagate(30, 150)
photoabsorption_spectrum('dm.dat',
                         'spec.dat',
                         e_max=10,
                         width=0.5,
                         delta_e=0.1)

# LrTDDFT2 calculation
calc = GPAW('gs.gpw', txt='lr.out')
lr = LrTDDFT2('lr2', calc, fxc='LDA')
lr.calculate()
lr.get_spectrum('lr_spec.dat', 0, 10.1, 0.1, width=0.5)
world.barrier()
Exemplo n.º 4
0
from gpaw.lcaotddft import LCAOTDDFT
from gpaw.lcaotddft.densitymatrix import DensityMatrix
from gpaw.lcaotddft.frequencydensitymatrix import FrequencyDensityMatrix
from gpaw.tddft.folding import frequencies

# Read the ground-state file
td_calc = LCAOTDDFT('gs.gpw')

# Attach analysis tools
dmat = DensityMatrix(td_calc)
freqs = frequencies([1.12, 2.48], 'Gauss', 0.1)
fdm = FrequencyDensityMatrix(td_calc, dmat, frequencies=freqs)

# Replay the propagation
td_calc.replay(name='wf.ulm', update='none')

# Store the density matrix
fdm.write('fdm.ulm')
Exemplo n.º 5
0
from gpaw.lcaotddft import LCAOTDDFT
from gpaw.lcaotddft.dipolemomentwriter import DipoleMomentWriter
from gpaw.lcaotddft.wfwriter import WaveFunctionWriter

# Read the restart file
td_calc = LCAOTDDFT('td.gpw', txt='tdc.out')

# Attach the data recording for appending the new data
DipoleMomentWriter(td_calc, 'dm.dat')
WaveFunctionWriter(td_calc, 'wf.ulm')

# Continue propagation
td_calc.propagate(20, 500)

# Save the state for restarting later
td_calc.write('td.gpw', mode='all')
Exemplo n.º 6
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)
Exemplo n.º 7
0
# Atoms
atoms = molecule('Na2')
atoms.center(vacuum=4.0)

# Ground-state calculation that will never converge
maxiter = 100
calc = GPAW(mode='lcao',
            basis='sz(dzp)',
            setups='1',
            convergence={'density': 1e-100},
            maxiter=maxiter)
atoms.set_calculator(calc)

tl = TimeLimiter(calc, timelimit=0, output='scf.txt')
tl.reset('scf', min_updates=3)
try:
    atoms.get_potential_energy()
except KohnShamConvergenceError:
    assert calc.scf.maxiter < maxiter, 'TimeLimiter did not break the SCF loop'
else:
    raise AssertionError('SCF loop ended too early')
calc.write('gs.gpw', mode='all')

# Time-propagation calculation that will never finish
td_calc = LCAOTDDFT('gs.gpw')
tl = TimeLimiter(td_calc, timelimit=0, output='tddft.txt')
tl.reset('tddft', min_updates=3)
td_calc.propagate(10, maxiter - td_calc.niter)
assert td_calc.maxiter < maxiter, 'TimeLimiter did not break the TDDFT loop'
Exemplo n.º 8
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)
Exemplo n.º 9
0
atoms = read('ag55.xyz')
atoms.center(vacuum=5.0)

# Increase accuragy of density for ground state
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})
Exemplo n.º 10
0
# Ground-state calculation
calc = GPAW(nbands=7,
            h=0.4,
            basis='dzp',
            mode='lcao',
            poissonsolver=PoissonSolver(eps=1e-16),
            convergence={'density': 1e-8},
            xc='GLLBSC',
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

fxc = 'LDA'
# Time-propagation calculation with fxc
td_calc = LCAOTDDFT('gs.gpw', fxc=fxc, txt='td_fxc.out')
DipoleMomentWriter(td_calc, 'dm_fxc.dat')
td_calc.absorption_kick(np.ones(3) * 1e-5)
td_calc.propagate(20, 4)

# Time-propagation calculation with linearize_to_fxc()
td_calc = LCAOTDDFT('gs.gpw', txt='td_lin.out')
td_calc.linearize_to_xc(fxc)
DipoleMomentWriter(td_calc, 'dm_lin.dat')
td_calc.absorption_kick(np.ones(3) * 1e-5)
td_calc.propagate(20, 4)

# Test the equivalence
world.barrier()
ref = np.loadtxt('dm_fxc.dat').ravel()
data = np.loadtxt('dm_lin.dat').ravel()
Exemplo n.º 11
0
# Atoms
atoms = molecule('Na2')
atoms.center(vacuum=4.0)

# Ground-state calculation
calc = GPAW(nbands=2, h=0.4, setups=dict(Na='1'),
            basis='dzp', mode='lcao',
            poissonsolver=PoissonSolver(eps=1e-16),
            convergence={'density': 1e-8},
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Time-propagation calculation
td_calc = LCAOTDDFT('gs.gpw', txt='td.out')
DipoleMomentWriter(td_calc, 'dm.dat')
WaveFunctionWriter(td_calc, 'wf.ulm')
WaveFunctionWriter(td_calc, 'wf_split.ulm', split=True)
td_calc.absorption_kick(np.ones(3) * 1e-5)
td_calc.propagate(20, 3)
td_calc.write('td.gpw', mode='all')
td_calc.propagate(7, 3)

# Restart from the restart point
td_calc = LCAOTDDFT('td.gpw', txt='td2.out')
DipoleMomentWriter(td_calc, 'dm.dat')
WaveFunctionWriter(td_calc, 'wf.ulm')
WaveFunctionWriter(td_calc, 'wf_split.ulm')
td_calc.propagate(20, 3)
td_calc.propagate(20, 3)
Exemplo n.º 12
0
# Ground-state calculation
calc = GPAW(nbands=2,
            h=0.4,
            setups=dict(Na='1'),
            basis='dzp',
            mode='lcao',
            poissonsolver=PoissonSolver('fd', eps=1e-16),
            convergence={'density': 1e-8},
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Time-propagation calculation with fxc
td_calc = LCAOTDDFT('gs.gpw', fxc='RPA', txt='td.out')
DipoleMomentWriter(td_calc, 'dm.dat')
td_calc.absorption_kick(np.ones(3) * 1e-5)
td_calc.propagate(20, 3)
world.barrier()

# Check dipole moment file
data = np.loadtxt('dm.dat')[:, 2:].ravel()
if 0:
    from gpaw.test import print_reference
    print_reference(data, 'ref', '%.12le')

ref = [
    4.786589735249e-15, 6.509942495725e-15, 3.836848815869e-14,
    4.429061708370e-15, 7.320865686028e-15, 2.877243538173e-14,
    1.960742479669e-05, 1.960742479842e-05, 1.804029540200e-05,
Exemplo n.º 13
0
# Ground-state calculation
calc = GPAW(nbands=6,
            h=0.4,
            setups=dict(Na='1'),
            basis='dzp',
            mode='lcao',
            poissonsolver=PoissonSolver(eps=1e-16),
            convergence={'density': 1e-8},
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Time-propagation calculation
td_calc = LCAOTDDFT('gs.gpw', txt='td.out')
dmat = DensityMatrix(td_calc)
freqs = frequencies(range(0, 31, 5), 'Gauss', 0.1)
fdm = FrequencyDensityMatrix(td_calc, dmat, frequencies=freqs)
DipoleMomentWriter(td_calc, 'dm.dat')
kick_v = np.ones(3) * 1e-5
td_calc.absorption_kick(kick_v)
td_calc.propagate(20, 3)
fdm.write('fdm.ulm')

# Calculate reference spectrum
photoabsorption_spectrum('dm.dat', 'spec.dat', delta_e=5, width=0.1)
world.barrier()
ref_wv = np.loadtxt('spec.dat')[:, 1:]

# Calculate ground state with full unoccupied space
Exemplo n.º 14
0
Arquivo: td.py Projeto: thonmaker/gpaw
from gpaw.lcaotddft import LCAOTDDFT
from gpaw.lcaotddft.dipolemomentwriter import DipoleMomentWriter
from gpaw.lcaotddft.wfwriter import WaveFunctionWriter

# Read the ground-state file
td_calc = LCAOTDDFT('gs.gpw', txt='td.out')

# Attach any data recording or analysis tools
DipoleMomentWriter(td_calc, 'dm.dat')
WaveFunctionWriter(td_calc, 'wf.ulm')

# Kick and propagate
td_calc.absorption_kick([1e-5, 0., 0.])
td_calc.propagate(20, 1500)

# Save the state for restarting later
td_calc.write('td.gpw', mode='all')
Exemplo n.º 15
0
# Ground-state calculation
calc = GPAW(nbands=7,
            h=0.4,
            basis='dzp',
            mode='lcao',
            poissonsolver=PoissonSolver(eps=1e-16),
            convergence={'density': 1e-8},
            xc='GLLBSC',
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Time-propagation calculation
td_calc = LCAOTDDFT('gs.gpw', txt='td.out')
DipoleMomentWriter(td_calc, 'dm.dat')
td_calc.absorption_kick(np.ones(3) * 1e-5)
td_calc.propagate(20, 3)

# Write a restart point
td_calc.write('td.gpw', mode='all')

# Keep propagating
td_calc.propagate(20, 3)

# Restart from the restart point
td_calc = LCAOTDDFT('td.gpw', txt='td2.out')
DipoleMomentWriter(td_calc, 'dm.dat')
td_calc.propagate(20, 3)
world.barrier()
Exemplo n.º 16
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)

Exemplo n.º 17
0
# Atoms
atoms = molecule('NaCl')
atoms.center(vacuum=4.0)

# Ground-state calculation
calc = GPAW(nbands=7, h=0.4, setups=dict(Na='1'),
            basis='dzp', mode='lcao',
            poissonsolver=PoissonSolver(eps=1e-16),
            convergence={'density': 1e-8},
            txt='gs.out')
atoms.set_calculator(calc)
energy = atoms.get_potential_energy()
calc.write('gs.gpw', mode='all')

# Reference time-propagation calculation
td_calc = LCAOTDDFT('gs.gpw', txt='td.out')
DipoleMomentWriter(td_calc, 'dm.dat')
td_calc.absorption_kick(np.ones(3) * 1e-5)
td_calc.propagate(20, 3)

# Check dipole moment file
world.barrier()
ref = np.loadtxt('dm.dat').ravel()

# Test parallelization options
par_i = []

if world.size == 2:
    par_i.append({'band': 2})
    par_i.append({'sl_default': (2, 1, 2)})
    par_i.append({'sl_default': (1, 2, 4), 'band': 2})