1! 2! Copyright (C) 2010 Quantum ESPRESSO group 3! This file is distributed under the terms of the 4! GNU General Public License. See the file `License' 5! in the root directory of the present distribution, 6! or http://www.gnu.org/copyleft/gpl.txt . 7! 8!=----------------------------------------------------------------------------=! 9 MODULE smallbox_grid_dim 10!=----------------------------------------------------------------------------=! 11 12 ! Dimensions of the 3D real and reciprocal space FFT subgrids 13 ! used for atomic augmentation charge density (USPP) 14 ! Dependencies: 15 ! fft_scalar good_fft_dimension, good_fft_order 16 ! io_global stdout, ionode 17 ! 18 19 IMPLICIT NONE 20 SAVE 21 22 PRIVATE 23 PUBLIC :: smallbox_grid_init, smallbox_grid_info 24 25 CONTAINS 26 27 SUBROUTINE smallbox_grid_init( dfftp, dfftb ) 28 ! 29 USE fft_support, only: good_fft_dimension, good_fft_order 30 USE fft_types, only: fft_type_descriptor 31 USE fft_smallbox_type, only: fft_box_descriptor 32 ! 33 IMPLICIT NONE 34 ! 35 TYPE(fft_type_descriptor), INTENT(IN) :: dfftp 36 TYPE(fft_box_descriptor), INTENT(INOUT) :: dfftb 37 ! 38 ! no default values for grid box: if nr*b=0, ignore 39 40 IF( dfftb%nr1 > 0 .AND. dfftb%nr2 > 0 .AND. dfftb%nr3 > 0 ) THEN 41 42 dfftb%nr1 = good_fft_order( dfftb%nr1 ) 43 dfftb%nr2 = good_fft_order( dfftb%nr2 ) 44 dfftb%nr3 = good_fft_order( dfftb%nr3 ) 45 dfftb%nr1x = good_fft_dimension( dfftb%nr1 ) 46 47 ELSE 48 49 dfftb%nr1x = dfftb%nr1 50 51 END IF 52 53 dfftb%nr2x = dfftb%nr2 54 dfftb%nr3x = dfftb%nr3 55 dfftb%nnr = dfftb%nr1x * dfftb%nr2x * dfftb%nr3x 56 57 IF ( dfftb%nr1 > dfftp%nr1 .or. dfftb%nr2 > dfftp%nr2 .or. dfftb%nr3 > dfftp%nr3 ) & 58 CALL errore(' smallbox_grid_init ', ' box grid larger than dense grid?',1) 59 RETURN 60 61 END SUBROUTINE smallbox_grid_init 62 63 SUBROUTINE smallbox_grid_info( dfftb ) 64 ! 65 USE io_global, ONLY: stdout, ionode 66 USE fft_smallbox_type, only: fft_box_descriptor 67 ! 68 TYPE(fft_box_descriptor), INTENT(IN) :: dfftb 69 ! 70 IF ( ionode ) THEN 71 IF ( dfftb%nr1 > 0 .AND. dfftb%nr2 > 0 .AND. dfftb%nr3 > 0 ) THEN 72 WRITE( stdout,*) 73 WRITE( stdout,*) ' Small Box Real Mesh' 74 WRITE( stdout,*) ' -------------------' 75 WRITE( stdout,1000) dfftb%nr1, dfftb%nr2, dfftb%nr3, dfftb%nr1, dfftb%nr2, dfftb%nr3, 1, 1, 1 76 WRITE( stdout,1010) dfftb%nr1x, dfftb%nr2x, dfftb%nr3x 77 WRITE( stdout,1020) dfftb%nnr 78 END IF 79 END IF 80 811000 FORMAT(3X, & 82 'Global Dimensions Local Dimensions Processor Grid',/,3X, & 83 '.X. .Y. .Z. .X. .Y. .Z. .X. .Y. .Z.',/, & 84 3(1X,I5),2X,3(1X,I5),2X,3(1X,I5) ) 851010 FORMAT(3X, 'Array leading dimensions ( nr1x, nr2x, nr3x ) = ', 3(1X,I5) ) 861020 FORMAT(3X, 'Local number of cell to store the grid ( nrxx ) = ', 1X, I9 ) 87 88 89 END SUBROUTINE smallbox_grid_info 90 91!=----------------------------------------------------------------------------=! 92 END MODULE smallbox_grid_dim 93!=----------------------------------------------------------------------------=! 94