[gpaw-users] LCAO-TDDFT propagation on a charged system

Varadharajan Srinivasan varadharajan.srinivasan at gmail.com
Fri Aug 13 14:01:03 CEST 2021


Dear Tuomas,

I think their some related issue downstream as well when the density matrix
is processed for KS decomposition and density calculations. These codes
currently raise the error

'K-points are not fully supported'

which I think is arising because the check that is done is

if len(paw.wfs.kpt_u) > 1


However, if I understand correctly in the spin-polarized (nspins=2) case,
even for gamma point only calculations, one kpoint object is assigned for
each spin.

Is this correct?


I tested a temporary bypass for this which seemed to work


            gamma_only = len(self.kpt_u) == 1 or (len(self.kpt_u) == 2 and
paw.wfs.nspins == 2)

            assert gamma_only, 'K-points not implemented'



and also modified the get_density method in lcaotddft/densitymatrix.py to
loop over the two spins to compute the total density at gamma point

    rho_G = density.gd.zeros()  ## Total density

    rho_Gs = density.gd.zeros() ## Density from one spin at a time


    for iu in range(2):

        kpt = wfs.kpt_u[iu]

        assert kpt.q == 0

        wfs.basis_functions.construct_density(rho_MM.astype(wfs.dtype),

                                              rho_Gs, kpt.q)


        rho_G += rho_Gs


I haven't done extensive tests yet but it didn't throw any more errors.


Do let me know if I am completely off here.


Thanks,

Vardha.

On Tue, Aug 10, 2021 at 3:09 PM Varadharajan Srinivasan <
varadharajan.srinivasan at gmail.com> wrote:

> Dear Tuomas,
>
> Thanks for confirming and for fixing the issue. I am happy to test it on
> some small systems if that could help.
>
> Best,
> Vardha
>
> On Tuesday, August 10, 2021, Tuomas Rossi <tuomas.rossi at aalto.fi> wrote:
>
>> Dear Vardha,
>>
>> It seems that the spin-polarized calculation was broken for LCAO
>> RT-TDDFT. Thank you for reporting the issue!
>>
>> A fix for the spin-polarized calculation is work in progress in
>> https://gitlab.com/gpaw/gpaw/-/merge_requests/910. Before the fix,
>> odd-electron systems would work only in spin-paired mode (resulting in
>> partial occupations).
>>
>> Best regards,
>>
>> Tuomas
>>
>>
>> On 5.8.2021 10.11, Varadharajan Srinivasan via gpaw-users wrote:
>>
>>> Dear all,
>>>
>>> I was wondering whether there are any limitations on using the
>>> LCAO-based RT-TDDFT on a singly charged (odd-electron) system? I ran an
>>> example for Na2- and, while I was able to perform the ground state
>>> calculation, the time-dependent run crashed with the following error:
>>>   vt_G = hamiltonian.vt_sG[kpt.s]
>>> IndexError: list index out of range
>>>
>>> I am able to run RT-TDDFT on the same system in FD mode just fine. My
>>> ground state and tddft input scripts are given below. I am using GPAW
>>> 21.6.0. Any help would be appreciated. I apologize if this issue has been
>>> answered before but I couldn't find any posts. Also, not sure if there are
>>> any obvious mistakes I am making here.
>>>
>>> Thanks,
>>> Vardha.
>>>
>>> GS:
>>>
>>> from ase import Atoms
>>> from gpaw import GPAW
>>> from gpaw.poisson import PoissonSolver
>>> from gpaw.poisson_extravacuum import ExtraVacuumPoissonSolver
>>>
>>> # Sodium atom chain
>>> atoms = Atoms('Na2',
>>>                positions=[[i * 3.0, 0, 0] for i in range(2)])
>>> atoms.center(vacuum=6.0)
>>>
>>> # Use an advanced Poisson solver
>>> ps = ExtraVacuumPoissonSolver(gpts=(512, 256, 256),
>>>                                poissonsolver_large=PoissonSolver(),
>>>                                coarses=2,
>>>                                poissonsolver_small=PoissonSolver())
>>>
>>> # Ground-state calculation
>>> calc = GPAW(mode='lcao', h=0.3, basis='pvalence.dz <http://pvalence.dz/
>>> xc='LDA', charge = -1.0,
>>>              setups={'Na': '1'}, spinpol = True,
>>>              poissonsolver=ps,
>>>              convergence={'density': 1e-12},
>>>              txt='gs.out')
>>> atoms.calc = calc
>>> energy = atoms.get_potential_energy()
>>> calc.write('gs.gpw', mode='all')
>>>
>>> TD: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')
>>>
>>>
>>>
>>> _______________________________________________
>>> gpaw-users mailing list
>>> gpaw-users at listserv.fysik.dtu.dk
>>> https://listserv.fysik.dtu.dk/mailman/listinfo/gpaw-users
>>>
>>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/gpaw-users/attachments/20210813/1066c6d5/attachment.htm>


More information about the gpaw-users mailing list