[QE-developers] R: R: Parallelization question for G-wise projector-wavefunctions product computation

Paolo Giannozzi paolo.giannozzi at uniud.it
Mon Feb 10 16:04:48 CET 2025


On 10/02/2025 14:12, Marin Luca wrot

> Concerning one point that you mentioned, namely that the AE partial 
> waves are kept on the radial (logarithmic) grid, I was in fact also 
> representing them on the FFT grid. The idea was to perform a pw.x 
> calculation with a very high cutoff (say 200 Ry or more)

more, more ...

The pp.x postprocessing code can do that, if I remember correctly, for 
the charge density (not for Kohn-Sham states). You may want to try it.

Paolo

> to produce a very large grid, as my system is fairly simple in terms of number of 
> atoms. Maybe this is also not feasible, I will have to test it (I'm 
> trying to reproduce some calculations which, with other codes, have 
> already accomplished this).
> 
> Thanks again for the helpful reply.
> 
> Best,
> Luca
> ------------------------------------------------------------------------
> *Da:* developers <developers-bounces at lists.quantum-espresso.org> per 
> conto di Stefano de Gironcoli <degironc at sissa.it>
> *Inviato:* sabato 8 febbraio 2025 19:41
> *A:* developers at lists.quantum-espresso.org <developers at lists.quantum- 
> espresso.org>
> *Oggetto:* Re: [QE-developers] R: Parallelization question for G-wise 
> projector-wavefunctions product computation
> 
> not sure I understand what you need.
> 
> 
> calbec computes the dot product  <\beta_{R,l}|\psi_{ps}> and I don't 
> think in the paw formalism there is any use for the individual Fourier 
> components.
> 
> 
> if you want the shape of a pw, say |k+G>,  "dressed" with paw terms 
> (like one would have, conceptually, in the augmented plane waves method, 
> where pw in the interstitial region are matched to atomic solutions 
> inside the atomic sphere) you need to call calbec with a fake psi where 
> the |k+G> component is set to 1 and all the rest is set to 0. and then 
> apply the formula that you wrote... except that one does not know where 
> to represent that expression...  certainly not on the fft grid because 
> the atomic partial waves (especially the AE ones) have Fourier 
> components that exceed the cutoff of the fft grid, and in fact are kept 
> on the radial logarithmic grid and never used anywhere else.
> 
> 
> The matrix elements of a physical quantities of interest (if the 
> operator is local like the potential or the kinetic energy) are computed 
> exploiting the (assumed) completeness of the partial wave expansion in 
> the atomic sphere
> 
>   I_\Omega_{R} x \sum_I  |\phi_{R,l}^{ps}> <\beta_{R,l}|      \approx   
>    I_ \Omega_{R}
> 
>   where I_\Omega_{R} is the identity inside the atomic sphere of atom R 
> and zero outside.
> 
> 
>   One can then write
> 
> <\psi_{ae}_i|OP|\psi_{ae}_j> = <\psi_{ps}_i|OP|\psi_{ps}_j> +
> 
>     \sum_{R,l,J}   [ <\phi_{R,l}^{ae}|OP|\phis_{R,J}^{ae}>  - 
> <\phi_{R,l}^{ps}|OP|\phi_{R,J}^{ps}> ]  x
> 
>                             <\psi_{ps}_i|\beta_{R,I}><\beta_{R,J}| 
> \psi_{ps}_j>
> 
> where the first row is computed on the FFT grid, the second on the 
> atomic radial grids and the third row terms by calbec (and accumulated 
> if needed in sumbec)
> 
> 
> electrostatics is a bit more complicated
> 
> 
> stefano
> 
> 
> On 08/02/25 18:22, Marin Luca wrote:
>> Dear Stefano,
>>
>> Thanks a lot for the kind and fast reply! This is a good question, I 
>> also wondered that maybe the storage part was useless. I need this 
>> term because it enters the PAW equation for the "all-electron 
>> reconstruction" of the pseudopotential KS-states:
>>
>> \psi_{ae} = \psi_{ps} + \sum_{R,l} [\phi_{R,l}^{ae} - \phi_{R,l}^{ps}] 
>> x <\beta_{R,l}|\psi_{ps}>
>>
>> where R and l are the atomic species and projectors indices, \phi the 
>> "atomic-like" states from the PP calculation and \psi the KS state 
>> (there might be slight mistake in the formula).
>>
>> If I now want to apply this correction to each of the u_{k+G} pw 
>> coefficients that contributes to \psi_{ps}, I think I also need the 
>> <\beta_{R,l}|\psi_{ps}> in a "G-wise" fashion, as I was naming it in 
>> the question.
>>
>> I was therefore implementing this routine inside "gipaw", which 
>> already has precious stuff written for this PAW reconstruction.
>>
>> I hope this gives you more information, and please let me know if you 
>> think there is already a good place either in pw or gipaw where to 
>> perform this!
>>
>> Best,
>> Luca
>> ETH Zurich, PhD student
>> ------------------------------------------------------------------------
>> *Da:* developers <developers-bounces at lists.quantum-espresso.org> 
>> <mailto:developers-bounces at lists.quantum-espresso.org> per conto di 
>> Stefano de Gironcoli <degironc at sissa.it> <mailto:degironc at sissa.it>
>> *Inviato:* sabato 8 febbraio 2025 15:55
>> *A:* developers at lists.quantum-espresso.org 
>> <mailto:developers at lists.quantum-espresso.org> 
>> <developers at lists.quantum-espresso.org> 
>> <mailto:developers at lists.quantum-espresso.org>
>> *Oggetto:* Re: [QE-developers] Parallelization question for G-wise 
>> projector-wavefunctions product computation
>>
>> Dear Luca,
>>
>>    the array betapsi_g(1:npw,1:nkb,1:nbnd) looks very big to me, 
>> unless the system is very small
>>
>>    what do you need it for ? maybe one can compute the target quantity 
>> on the fly rather than storing this intermediate result
>>
>>
>> stefano
>>
>>
>> On 08/02/25 15:31, Marin Luca wrote:
>>> Dear QE developers,
>>> I had a conceptual question of how I should correctly modify a 
>>> subroutine in order to avoid parallelization and memory’s 
>>> absurdities. Specifically, my idea is to slightly modify one of the 
>>> subroutines in the “calbec” (becmod.f90) interface that is computing 
>>> <\Beta|\psi> products, and I am using QE v.6.4 because I’m working on 
>>> a specific code repository using this version. By calling such or 
>>> similar line:
>>> CALL ZGEMV( 'C', npw, nkb, (1.0_DP,0.0_DP), beta, npwx, psi, 1, &
>>> (0.0_DP, 0.0_DP), betapsi, 1 )
>>> and subsequently summing through bands:
>>> CALL mp_sum( betapsi( :, 1:m ), intra_bgrp_comm )
>>> “calbec_k” computes the betapsi product as a 2D matrix with dimension 
>>> (number of projectors, number of bands). My goal is to compute the 
>>> same product but accessing the elements at each G vectors, i.e. 
>>> without summing over the G vectors themselves. To this end, my (very 
>>> basic, probably terrible) idea was to define another subroutine with 
>>> an extra variable like this (without breaking the requirement of 
>>> having unambiguous interface procedures in “calbec”):
>>> calbec_k_modified ( npw, beta, psi, betapsi, betapsi_g, nbnd )
>>> COMPLEX (DP), INTENT (out) :: betapsi_g(:,:,:)
>>> and explicitly computing betapsi_g with nested do loops:
>>> DO k = 1, npw
>>> DO i = 1, nkb
>>> DO j = 1, m
>>> betapsi_g(k, i, j) = CONJG(beta(k, i)) * psi(k, j)
>>> ENDDO
>>> ENDDO
>>> ENDDO
>>> I am very unsure of whether this is a feasible approach and how I 
>>> should handle the MPI parallelization in this case (I have little 
>>> experience in QE development). I read the parallelization section of 
>>> the developer’s manual, but I’m still quite confused. Any 
>>> suggestions, critics or explanations will be very appreciated.
>>> Best regards,
>>> Luca Marin
>>> ETH Zurich, PhD student
>>>
>>>
>>>
>>> ________________________________________________
>>> The Quantum ESPRESSO Foundation stands in solidarity with all civilians worldwide who are victims of terrorism, military aggression, and indiscriminate warfare.
>>> _______________________________________________
>>> developers mailing list
>>> developers at lists.quantum-espresso.org <mailto:developers at lists.quantum-espresso.org>
>>> https://lists.quantum-espresso.org/mailman/listinfo/developers <https://lists.quantum-espresso.org/mailman/listinfo/developers>
>>
>> ________________________________________________
>> The Quantum ESPRESSO Foundation stands in solidarity with all civilians worldwide who are victims of terrorism, military aggression, and indiscriminate warfare.
>> _______________________________________________
>> developers mailing list
>> developers at lists.quantum-espresso.org <mailto:developers at lists.quantum-espresso.org>
>> https://lists.quantum-espresso.org/mailman/listinfo/developers <https://lists.quantum-espresso.org/mailman/listinfo/developers>
> 
> ________________________________________________
> The Quantum ESPRESSO Foundation stands in solidarity with all civilians worldwide who are victims of terrorism, military aggression, and indiscriminate warfare.
> _______________________________________________
> developers mailing list
> developers at lists.quantum-espresso.org
> https://lists.quantum-espresso.org/mailman/listinfo/developers

-- 
Paolo Giannozzi, Dip. Scienze Matematiche Informatiche e Fisiche,
Univ. Udine, via delle Scienze 206, 33100 Udine Italy, +39-0432-558216



More information about the developers mailing list