1. 20 Aug, 2017 1 commit
  2. 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
  3. 18 May, 2017 1 commit
  4. 16 May, 2017 1 commit
  5. 12 May, 2017 1 commit
  6. 10 May, 2017 2 commits
  7. 09 May, 2017 1 commit
  8. 14 Mar, 2017 4 commits
  9. 13 Mar, 2017 1 commit
  10. 25 Sep, 2016 1 commit
  11. 12 Sep, 2016 1 commit
  12. 27 Aug, 2016 2 commits
  13. 28 Jul, 2016 1 commit
  14. 27 Jul, 2016 1 commit
  15. 07 May, 2015 1 commit
  16. 06 Jun, 2014 1 commit
  17. 28 Apr, 2014 1 commit
  18. 13 Mar, 2014 1 commit
  19. 05 Feb, 2014 1 commit
  20. 07 Nov, 2013 1 commit
  21. 07 Oct, 2013 1 commit
  22. 07 May, 2013 1 commit
  23. 07 Apr, 2013 1 commit
  24. 11 Mar, 2013 1 commit
    • paulatto's avatar
      All c/fortran interfaces replace with iso_c_binding. · 0db771c5
      paulatto authored
      f_mkdir replaced with a more explicit f_mkdir_safe, f_mkdir is now a direct wrapper of the POSIX function.
      
      f_mkdir_safe now checks if a directory exists and is writable before creating it, it will only return error if at the end the directory is not writable
      Possible causes: file exists but is not a directory; exists and is a directory, but not owned by the user; broken filesystem; perverted umask
      
      check_tempdir does not change directly, but it benefits from the changes in f_mkdir_safe
      
      parallel_mkdir replaced with check_tempdir where it was necessary
      
      
      
      git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@10052 c92efa57-630b-4861-b058-cf58834340f0
      0db771c5
  25. 11 Feb, 2013 1 commit
  26. 04 Feb, 2013 1 commit
  27. 23 Jan, 2013 1 commit
  28. 10 Jan, 2013 1 commit
  29. 24 Oct, 2012 1 commit
  30. 16 Oct, 2012 1 commit
  31. 10 Oct, 2012 1 commit
  32. 19 Sep, 2012 3 commits
  33. 25 Aug, 2012 1 commit