1. 12 Jul, 2018 1 commit
  2. 03 Jan, 2018 1 commit
  3. 24 Dec, 2017 1 commit
  4. 26 Aug, 2017 1 commit
  5. 01 Aug, 2017 1 commit
    • degironc's avatar
      MAJOR restructuring of the FFTXlib library · 3e6b4f8e
      degironc authored
      In real space processors are organized in a 2D pattern.
      
      Each processor owns data from a sub-set of Z-planes and a sub-set of Y-planes.
      In reciprocal space each processor owns Z-columns that belong to a sub set of
      X-values. This allows to split the processors in two sets for communication
      in the YZ and XY planes.
      In alternative, if the situation allows for it, a task group paralelization is used
      (with ntg=nyfft) where complete XY planes of ntg wavefunctions are collected and Fourier
      trasnformed in G space by different task-groups. This is preferable to the Z-proc + Y-proc
      paralleization if task group can be used because a smaller number of larger ammounts of 
      data are transferred. Hence three types of fft are implemented: 
       
        !
        !! ... isgn = +-1 : parallel 3d fft for rho and for the potential
        !
        !! ... isgn = +-2 : parallel 3d fft for wavefunctions
        !
        !! ... isgn = +-3 : parallel 3d fft for wavefunctions with task group
        !
        !! ... isgn = +   : G-space to R-space, output = \sum_G f(G)exp(+iG*R)
        !! ...              fft along z using pencils        (cft_1z)
        !! ...              transpose across nodes           (fft_scatter_yz)
        !! ...              fft along y using pencils        (cft_1y)
        !! ...              transpose across nodes           (fft_scatter_xy)
        !! ...              fft along x using pencils        (cft_1x)
        !
        !! ... isgn = -   : R-space to G-space, output = \int_R f(R)exp(-iG*R)/Omega
        !! ...              fft along x using pencils        (cft_1x)
        !! ...              transpose across nodes           (fft_scatter_xy)
        !! ...              fft along y using pencils        (cft_1y)
        !! ...              transpose across nodes           (fft_scatter_yz)
        !! ...              fft along z using pencils        (cft_1z)
        !
        ! If task_group_fft_is_active the FFT acts on a number of wfcs equal to 
        ! dfft%nproc2, the number of Y-sections in which a plane is divided. 
        ! Data are reshuffled by the fft_scatter_tg routine so that each of the 
        ! dfft%nproc2 subgroups (made by dfft%nproc3 procs) deals with whole planes 
        ! of a single wavefunciton.
        !
      
      fft_type module heavily modified, a number of variables renamed with more intuitive names 
      (at least to me), a number of more variables introduced for the Y-proc parallelization.
      
      Task_group module made void. task_group management is now reduced to the logical component
       fft_desc%have_task_groups of fft_type_descriptor type variable fft_desc.
      
      In term of interfaces, the 'easy' calling sequences are
      
      SUBROUTINE invfft/fwfft( grid_type, f, dfft, howmany )
      
        !! where:
        !! 
        !! **grid_type = 'Dense'** : 
        !!   inverse/direct fourier transform of potentials and charge density f
        !!   on the dense grid (dfftp). On output, f is overwritten
        !! 
        !! **grid_type = 'Smooth'** :
        !!   inverse/direct fourier transform of  potentials and charge density f
        !!   on the smooth grid (dffts). On output, f is overwritten
        !! 
        !! **grid_type = 'Wave'** :
        !!   inverse/direct fourier transform of  wave functions f
        !!   on the smooth grid (dffts). On output, f is overwritten
        !!
        !! **grid_type = 'tgWave'** :
        !!   inverse/direct fourier transform of  wave functions f with task group
        !!   on the smooth grid (dffts). On output, f is overwritten
        !!
        !! **grid_type = 'Custom'** : 
        !!   inverse/direct fourier transform of potentials and charge density f
        !!   on a custom grid (dfft_exx). On output, f is overwritten
        !! 
        !! **grid_type = 'CustomWave'** :
        !!   inverse/direct fourier transform of  wave functions f
        !!   on a custom grid (dfft_exx). On output, f is overwritten
        !! 
        !! **dfft = FFT descriptor**, IMPORTANT NOTICE: grid is specified only by dfft.
        !!   No check is performed on the correspondence between dfft and grid_type.
        !!   grid_type is now used only to distinguish cases 'Wave' / 'CustomWave' 
        !!   from all other cases
                                                                                                       
      
      Many more files modified.
      
      
      
      
      git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13676 c92efa57-630b-4861-b058-cf58834340f0
      3e6b4f8e
  6. 29 Jul, 2016 2 commits
  7. 04 Jun, 2016 1 commit
  8. 14 Feb, 2016 2 commits
  9. 19 Jan, 2016 1 commit
  10. 07 Apr, 2014 1 commit
  11. 18 Nov, 2013 1 commit
  12. 03 Nov, 2013 1 commit
  13. 19 Jan, 2013 1 commit
  14. 21 Sep, 2011 1 commit
  15. 25 Aug, 2011 1 commit
  16. 31 Dec, 2010 1 commit
  17. 24 Dec, 2010 1 commit
  18. 26 Oct, 2010 1 commit
  19. 24 Oct, 2010 1 commit
  20. 14 Sep, 2010 1 commit
  21. 28 Aug, 2010 1 commit
  22. 23 Oct, 2009 1 commit
  23. 03 Aug, 2009 1 commit
  24. 04 Feb, 2009 2 commits
  25. 24 Sep, 2008 1 commit
  26. 27 Aug, 2008 1 commit
  27. 08 Feb, 2007 1 commit
  28. 06 Feb, 2007 1 commit
  29. 28 Aug, 2005 1 commit
  30. 26 Aug, 2005 1 commit
    • giannozz's avatar
      General cleanup of intrinsic functions: · bf4bfe22
      giannozz authored
      conversion to real    => DBLE
      (including real part of a complex number)
      conversion to complex => CMPLX
      complex conjugate     => CONJG
      imaginary part        => AIMAG
      
      All functions are uppercase.
      CMPLX is preprocessed by f_defs.h and performs an explicit cast:
      #define CMPLX(a,b)  cmplx(a,b,kind=DP)
      This implies that 1) f_defs.h must be included whenever a CMPLX is present,
      2) CMPLX should stay in a single line, 3) DP must be defined.
      
      All occurrences of real, float, dreal, dfloat, dconjg, dimag, dcmplx
      removed - please do not reintroduce any of them.
      Tested only with ifc7 and g95 - beware unintended side effects
      
      Maybe not the best solution (explicit casts everywhere would be better)
      but it can be easily changed with a script if the need arises.
      The following code might be used to test for possible trouble:
      
      program test_intrinsic
      
        implicit none
        integer, parameter :: dp = selected_real_kind(14,200)
        real (kind=dp) :: a = 0.123456789012345_dp
        real (kind=dp) :: b = 0.987654321098765_dp
        complex (kind=dp) :: c = ( 0.123456789012345_dp, 0.987654321098765_dp)
      
        print *, '      A = ', a
        print *, ' DBLE(A)= ', DBLE(a)
        print *, '      C = ', c
        print *, 'CONJG(C)= ', CONJG(c)
        print *, 'DBLE(c),AIMAG(C)  = ', DBLE(c), AIMAG(c)
        print *, 'CMPLX(A,B,kind=dp)= ', CMPLX( a, b, kind=dp)
      
      end program test_intrinsic
      
      Note that CMPLX and REAL without a cast yield single precision numbers on
      ifc7 and g95 !!!
      
      
      git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2133 c92efa57-630b-4861-b058-cf58834340f0
      bf4bfe22
  31. 25 Jun, 2004 1 commit
  32. 12 Jun, 2004 1 commit
  33. 31 May, 2004 1 commit
  34. 07 Mar, 2004 1 commit
  35. 23 Jan, 2004 1 commit
  36. 09 Nov, 2003 1 commit
  37. 05 Nov, 2003 1 commit