• 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
Name
Last commit
Last update
COUPLE Loading commit data...
CPV Loading commit data...
Doc Loading commit data...
EPW Loading commit data...
FFTXlib Loading commit data...
GUI Loading commit data...
GWW Loading commit data...
KS_Solvers Loading commit data...
LAXlib Loading commit data...
LR_Modules Loading commit data...
Modules Loading commit data...
NEB Loading commit data...
PHonon Loading commit data...
PP Loading commit data...
PW Loading commit data...
PWCOND Loading commit data...
PlotPhon Loading commit data...
QHA Loading commit data...
TDDFPT Loading commit data...
UtilXlib Loading commit data...
XSpectra Loading commit data...
archive Loading commit data...
atomic Loading commit data...
clib Loading commit data...
dev-tools Loading commit data...
include Loading commit data...
install Loading commit data...
pseudo Loading commit data...
test-suite Loading commit data...
upftools Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
License Loading commit data...
Makefile Loading commit data...
README Loading commit data...
TODO Loading commit data...
configure Loading commit data...
environment_variables Loading commit data...