mirror of https://gitlab.com/QEF/q-e.git
104 lines
4.2 KiB
Fortran
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
|
|
!=----------------------------------------------------------------------=!
|