quantum-espresso/Modules/fft_base.f90

104 lines
4.2 KiB
Fortran

!
! Copyright (C) 2006-2015 Quantum ESPRESSO group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!----------------------------------------------------------------------
! FFT data Module.
! Written by Carlo Cavazzoni
!----------------------------------------------------------------------
!
!=----------------------------------------------------------------------=!
MODULE fft_base
!=----------------------------------------------------------------------=!
!! FFT data Module. Includes data structure containing all
!! information about FFT data distribution for a given potential
!! grid, and its wave functions sub-grid.
!! Written by Carlo Cavazzoni.
USE parallel_include
USE fft_types, ONLY: fft_type_descriptor
USE fft_smallbox_type, ONLY: fft_box_descriptor
USE stick_base, ONLY: sticks_map, sticks_map_deallocate
IMPLICIT NONE
TYPE ( fft_type_descriptor ) :: dfftp
!! descriptor for dense grid.
!! Dimensions of the 3D real and reciprocal space FFT grid
!! relative to the charge density and potential ("dense" grid).
TYPE ( fft_type_descriptor ) :: dffts
!! descriptor for smooth grid.
!! Dimensions of the 3D real and reciprocal space
!! FFT grid relative to the smooth part of the charge density
!! (may differ from the full charge density grid for USPP )
TYPE ( fft_box_descriptor ) :: dfftb
!! descriptor for box grids.
!! Dimensions of the 3D real and reciprocal space
!! FFT grid relative to the "small box" computation
!! of the atomic augmentation part of the
!! charge density used in USPP (to speed up CPV iterations)
TYPE ( fft_type_descriptor ) :: dfft3d
!
TYPE (sticks_map) :: smap
!! Stick map descriptor.
SAVE
PRIVATE
PUBLIC :: dfftp, dffts, dfft3d, fft_type_descriptor
PUBLIC :: dfftb, fft_box_descriptor, fft_base_info
PUBLIC :: smap, pstickdealloc
CONTAINS
SUBROUTINE pstickdealloc()
CALL sticks_map_deallocate( smap )
END SUBROUTINE pstickdealloc
SUBROUTINE fft_base_info( ionode, stdout )
!! Display fft basic information
LOGICAL, INTENT(IN) :: ionode
INTEGER, INTENT(IN) :: stdout
!
IF (ionode) THEN
WRITE( stdout,*)
IF ( dfftp%nproc > 1 ) THEN
WRITE( stdout, '(5X,"Parallelization info")')
ELSE
WRITE( stdout, '(5X,"G-vector sticks info")')
ENDIF
WRITE( stdout, '(5X,"--------------------")')
WRITE( stdout, '(5X,"sticks: dense smooth PW", &
& 5X,"G-vecs: dense smooth PW")')
IF ( dfftp%nproc > 1 ) THEN
WRITE( stdout,'(5X,"Min",4X,2I8,I7,12X,2I9,I8)') &
minval(dfftp%nsp), minval(dffts%nsp), minval(dffts%nsw), &
minval(dfftp%ngl), minval(dffts%ngl), minval(dffts%nwl)
WRITE( stdout,'(5X,"Max",4X,2I8,I7,12X,2I9,I8)') &
maxval(dfftp%nsp), maxval(dffts%nsp), maxval(dffts%nsw), &
maxval(dfftp%ngl), maxval(dffts%ngl), maxval(dffts%nwl)
END IF
WRITE( stdout,'(5X,"Sum",4X,2I8,I7,12X,2I9,I8)') &
sum(dfftp%nsp), sum(dffts%nsp), sum(dffts%nsw), &
sum(dfftp%ngl), sum(dffts%ngl), sum(dffts%nwl)
ENDIF
IF(ionode) WRITE( stdout,*)
IF ( .not. dffts%use_pencil_decomposition ) WRITE( stdout,'(5X, "Using Slab Decomposition")')
IF ( dffts%use_pencil_decomposition ) WRITE( stdout, '(5X, "Using Pencil Decomposition")')
IF(ionode) WRITE( stdout,*)
RETURN
END SUBROUTINE fft_base_info
!=----------------------------------------------------------------------=!
END MODULE fft_base
!=----------------------------------------------------------------------=!