1. 08 Feb, 2018 2 commits
  2. 08 Jan, 2018 1 commit
  3. 02 Jan, 2018 1 commit
    • Stefano de Gironcoli's avatar
      new interface to fft calls · 41e91c0d
      Stefano de Gironcoli authored
         three types of calls are possibles :  'Rho', 'Wave', 'tgWave'
      
         In order to enable an fft-type for a given grid the corresponding clock_labels must be set.
         One gives a name to desc%rho_clock_lable for 'Rho' type fft and a name to
         desc%wave_clock_lable for 'Wave' and 'tgWave' types. Whether tg is
         possible depends of the already defined value of desc%have_task_groups variable (mispell to be corrected soon).
      
         definining
            dffts%rho_clock_label='ffts', dffts%wave_clock_label='fftw',
            dfftp%rho_clock_label='fft', dfftt%rho_clock_label='fftc' and
            dfftt%wave_clock_label='fftcw'
         and changing
            'Dense'->'Rho', 'Smooth'->'Rho', 'Custom'->'Rho', 'CustomWave'->'Wave'
         the same clock names and the same overall behavior as with the old interface is obtained.
      41e91c0d
  4. 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
  5. 27 Nov, 2016 1 commit
    • giannozz's avatar
      Cleanup of FFTXlib: · 229692d7
      giannozz authored
      1) routines fwfft and invfft moved out of file fft_interfaces.f90 into new
         file fft_fwinv.f90. Prevents massive recompilation if something changes
         in the FFT routines.
      2) machine-dependent fft_scalar.*.f90 are now modules with different names,
         conditionally included into fft_scalar with a USE, no longer an #include.
         Avoids trouble with dependencies, allow simplification of makedeps.sh.
      All changes should be harmless, but I have tested only FFTW, FFTW3, DFTI.
      Please let me know if there is any problem
      
      
      
      git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13185 c92efa57-630b-4861-b058-cf58834340f0
      229692d7
  6. 22 Aug, 2016 1 commit
  7. 20 Aug, 2016 1 commit
  8. 19 Aug, 2016 1 commit
  9. 09 Aug, 2016 1 commit
    • ccavazzoni's avatar
      · 75cb15a7
      ccavazzoni authored
      - real space grid initialization moved to fft_types module
        (it was acting only on descriptor variables, noneed to keep it into module)
      - name change: all function/variables named *_dlay_* renamed *_type_* for consistency
      
      - IMPORTANT: fft_type_allocate merged with real space grid initializaiton
        some other grid functions removed/merged with fft types.
        Since some initialization has been moved elseware there could be some SIDE EFFECT
      
      - In practice, now grid dimensions (nr1, nr2, nr3) comes with fft variable definition
        and variable allocation. 
        NEXT: review of the initialization/setting of the fft parallelization
      
      - real space grid initialization subroutines moved to fft_types module
        (it was acting only on descriptor variables, no need to keep it in Modules)
      - name change: all function/variables named *_dlay_* renamed *_type_* for consistency
      
      - IMPORTANT: fft_type_allocate merged with real space grid initializaiton
        some other grid functions removed/merged with fft types.
        Since some initialization has been moved elseware there could be some SIDE EFFECT
      
      - In practice, now grid dimensions (nr1, nr2, nr3) comes with fft variable definition
        and variable allocation.
        NEXT: review of the initialization/setting of the fft parallelization
      
      
      
      git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@12703 c92efa57-630b-4861-b058-cf58834340f0
      75cb15a7
  10. 06 Aug, 2016 1 commit
  11. 29 Jul, 2016 2 commits
  12. 13 Mar, 2016 1 commit
  13. 11 Mar, 2016 1 commit
  14. 30 Nov, 2015 1 commit
  15. 21 Nov, 2015 1 commit
  16. 16 Sep, 2015 1 commit
  17. 04 Jun, 2015 1 commit
    • giannozz's avatar
      FFT interface routines simplified. The "Box" case is treated separately, since · 6a1c6ec7
      giannozz authored
      it requires a quite different treatment from all other cases. These are made
      uniform: the FFT descriptor passed in input is always used (before it was a bit
      but not always). Should be safe, nothing has changed in practice.
      Disadvantage: no more consistency check between declared grid and descriptor.
      Advantages: simpler; more uniformity between the three grids (and in case of
      more future grids); no more dependent upon fft_base modules via dffts and dfftp 
      descriptors, that can now be moved where they should belong (i.e. to modules 
      gvect, gvecs, containing G-vectors and indices) (I am not going to do this any
      time soon, though: it takes a lot of small changes everywhere) 
      
      
      git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@11559 c92efa57-630b-4861-b058-cf58834340f0
      6a1c6ec7
  18. 02 Feb, 2012 1 commit
  19. 13 Dec, 2011 1 commit
  20. 14 Nov, 2011 1 commit
  21. 23 Feb, 2011 1 commit
  22. 23 Jan, 2011 1 commit
  23. 26 Aug, 2010 1 commit