[Pw_forum] fft 3D

Andrei Malashevich andrei.malashevich at yale.edu
Thu May 16 20:50:44 CEST 2013


Dear Paolo,

I apologize if my question is not really relevant to the discussion but
some time ago I also encountered a question about FFT grids that I wanted
to clarify.

When I was studying the PP/stm.f90 routine, I decided to do the following
test.
In this routine I set the density rho%of_r by hand to be just some linear
function of the z coordinate, rho(z), see, e.g. attached file
before_fft.eps.
In this file the x-axis corresponds to the 3rd dimension of the FFT grid,
and y-axis shows rho(z).

The routine stm.f90 at the end has symmetrization part, that involves fwfft
and invfft:

  IF ( .not. gamma_only) THEN
     !
     CALL sym_rho_init (gamma_only)
     !
     psic(:) = cmplx ( rho%of_r(:,1), 0.0_dp, kind=dp)
     CALL fwfft ('Dense', psic, dfftp)
     rho%of_g(:,1) = psic(nl(:))
     CALL sym_rho (1, rho%of_g)
     psic(:) = (0.0_dp, 0.0_dp)
     psic(nl(:)) = rho%of_g(:,1)
     CALL invfft ('Dense', psic, dfftp)
     rho%of_r(:,1) = dble(psic(:))
  ENDIF

If I comment this symmetrization part entirely, I obtain the result shown
in the file before_fft.eps, which is what I wanted.
Now if I uncomment everyhting related to fwfft and invfft and comment only
calls to sym_rho_init and sym_rho, I get the result shown in figure
after_fft.eps.

So it looks that by doing FFT and inverse FFT did not return the original
function.
I understand that my function rho(z) is not realistic and has a huge
discontinuity but I thought that it should not really matter for this FFT
test.
At least when I took a similar function in 1D, and did FFT and inverse FFT
in my python script I got my original function back.

Did I do something wrong with this test, or is it indeed the expected
behavior of the code for some reason?
Do you know why this happens?
I would appreciate if you could comment on this.

Thank you,
Andrei Malashevich

Postdoctoral Associate
Department of Applied Physics
Yale University





On Thu, May 16, 2013 at 1:18 PM, Fang Liu <cufe.fliu at gmail.com> wrote:

> Dear Paolo,
>
> Thank you very much for your quick reply.
>
>
>> > In real space, the wavefunction is a real vector.
>>
>> only for k=0 or if there is inversion symmetry
>>
>
> Yes. I'm only considering the case k=0 at this moment.
>
>>
>> > I want to write some code using 3D fft (forward and backward)
>> > in Quantum Espresso for general complex vector (stored in 3D
>> > array)
>>
>> I am not sure I understand what you want to do: the 3D FFT in
>> QE is quite general.
>>
>> _______________________________________________
>>
>> I tried the following test codes in QE.
> That is, I use a 25*25*25 3D FFT mesh. The original 3d array g3d =
> (1.0_DP, -1.0_DP).
> First I do invfft and then fwfft. Finally I don't get the original 3d
> array, but a 3d array g3dnew
>  in which g3dnew(1),g3dnew(2),...,g3dnew(3025)= (1.0_DP, -1.0_DP)
> while g3dnew(3026),....,g3dnew(15625)=0.0.
>
> But if I do fwfft first and then invfft, I can finally get the original 3d
> array.
>
> I don't know the reason. I tried to attach my results, but it seems too
> large to be sent
> quickly. So I cancelled it.
>
> Thank you very much.
>
> ===========
>      open(UNIT=73, FILE='g3d.log',STATUS='replace', FORM='formatted',
> ACTION='write')
>
>     g3d = (1.0_DP, -1.0_DP)
>     write(73,*), 'g3d: original'
>     do i=1, dffts%nnr
>        write(73,101), i, g3d(i)
>     enddo
>
>
>     CALL invfft ('Wave', g3d, dffts) !transform potential to real space
>
>     write(73,*), 'g3d: after invfft'
>     do i=1, dffts%nnr
>        write(73,101), i, g3d(i)
>     enddo
>
>     CALL fwfft ('Wave', g3d, dffts) !transform potential to reciprocal
> space
>
>     write(73,*), 'g3d: after fwfft'
>     do i=1, dffts%nnr
>        write(73,101), i, g3d(i)
>     enddo
>
>     close(73)
> ==============
>
> Best,
> Fang
>
>
> 2013/5/16 Paolo Giannozzi <paolo.giannozzi at uniud.it>
>
>> On Wed, 2013-05-15 at 16:45 -0700, Fang Liu wrote:
>>
>> > In real space, the wavefunction is a real vector.
>>
>> only for k=0 or if there is inversion symmetry
>>
>> > I want to write some code using 3D fft (forward and backward)
>> > in Quantum Espresso for general complex vector (stored in 3D
>> > array)
>>
>> I am not sure I understand what you want to do: the 3D FFT in
>> QE is quite general.
>>
>> P.
>> --
>>  Paolo Giannozzi, Dept. Chemistry&Physics&Environment,
>>  Univ. Udine, via delle Scienze 208, 33100 Udine, Italy
>>  Phone +39-0432-558216, fax +39-0432-558222
>>
>> _______________________________________________
>> Pw_forum mailing list
>> Pw_forum at pwscf.org
>> http://pwscf.org/mailman/listinfo/pw_forum
>>
>
>
> _______________________________________________
> Pw_forum mailing list
> Pw_forum at pwscf.org
> http://pwscf.org/mailman/listinfo/pw_forum
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.quantum-espresso.org/pipermail/users/attachments/20130516/670ae550/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: after_fft.eps
Type: application/postscript
Size: 28673 bytes
Desc: not available
URL: <http://lists.quantum-espresso.org/pipermail/users/attachments/20130516/670ae550/attachment.eps>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: before_fft.eps
Type: application/postscript
Size: 20443 bytes
Desc: not available
URL: <http://lists.quantum-espresso.org/pipermail/users/attachments/20130516/670ae550/attachment-0001.eps>


More information about the users mailing list