Changeset 186 for codes/icosagcm/trunk/src/mpipara.F90
- Timestamp:
- 01/09/14 09:56:11 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/mpipara.F90
r171 r186 3 3 INTEGER,SAVE :: mpi_rank 4 4 INTEGER,SAVE :: mpi_size 5 INTEGER,SAVE :: mpi_threading_mode 5 6 6 7 INTEGER,SAVE :: comm_icosa … … 13 14 END INTERFACE allocate_mpi_buffer 14 15 16 INTERFACE free_mpi_buffer 17 MODULE PROCEDURE free_mpi_buffer_r2, free_mpi_buffer_r3, free_mpi_buffer_r4 18 END INTERFACE free_mpi_buffer 19 15 20 CONTAINS 16 21 17 22 SUBROUTINE init_mpipara 18 23 USE mpi_mod 24 USE getin_mod 19 25 #ifdef CPP_USING_XIOS 20 26 USE xios 21 27 #endif 22 28 IMPLICIT NONE 29 CHARACTER(LEN=256) :: required_mode_str 30 INTEGER :: required_mode 23 31 24 32 using_mpi=.FALSE. … … 28 36 29 37 IF (using_mpi) THEN 30 CALL MPI_INIT(ierr) 31 38 39 required_mode_str='multiple' 40 CALL getin('mpi_threading_mode',required_mode_str) 41 42 SELECT CASE(TRIM(required_mode_str)) 43 CASE ('single') 44 required_mode=MPI_THREAD_SINGLE 45 CASE ('funneled') 46 required_mode=MPI_THREAD_FUNNELED 47 CASE ('serialized') 48 required_mode=MPI_THREAD_SERIALIZED 49 CASE ('multiple') 50 required_mode=MPI_THREAD_MULTIPLE 51 CASE DEFAULT 52 PRINT*,'Bad selector for variable mpi_threading_mode : <', TRIM(required_mode_str), & 53 '> => options are <single>, <funneled>, <serialized>, <multiple>' 54 STOP 55 END SELECT 56 57 58 IF (required_mode==MPI_THREAD_SINGLE) PRINT*,'MPI_INIT_THREAD : MPI_SINGLE_THREAD required' 59 IF (required_mode==MPI_THREAD_FUNNELED) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_FUNNELED required' 60 IF (required_mode==MPI_THREAD_SERIALIZED) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_SERIALIZED required' 61 IF (required_mode==MPI_THREAD_MULTIPLE) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_MULTIPLE required' 62 63 64 CALL MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,mpi_threading_mode,ierr) 65 66 IF (mpi_threading_mode==MPI_THREAD_SINGLE) PRINT*,'MPI_INIT_THREAD : MPI_SINGLE_THREAD provided' 67 IF (mpi_threading_mode==MPI_THREAD_FUNNELED) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_FUNNELED provided' 68 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_SERIALIZED provided' 69 IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_MULTIPLE provided' 70 71 IF (mpi_threading_mode > required_mode) mpi_threading_mode=required_mode 72 73 IF (mpi_threading_mode==MPI_THREAD_SINGLE) PRINT*,'MPI_INIT_THREAD : MPI_SINGLE_THREAD used' 74 IF (mpi_threading_mode==MPI_THREAD_FUNNELED) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_FUNNELED used' 75 IF (mpi_threading_mode==MPI_THREAD_SERIALIZED) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_SERIALIZED used' 76 IF (mpi_threading_mode==MPI_THREAD_MULTIPLE) PRINT*,'MPI_INIT_THREAD : MPI_THREAD_MULTIPLE used' 77 32 78 #ifdef CPP_USING_XIOS 33 79 CALL xios_initialize("icosagcm",return_comm=comm_icosa) … … 79 125 CALL C_F_POINTER(base_ptr, buffer, (/ length /)) 80 126 81 END SUBROUTINE allocate_mpi_buffer_r2 127 END SUBROUTINE allocate_mpi_buffer_r2 128 129 SUBROUTINE free_mpi_buffer_r2(buffer) 130 USE ISO_C_BINDING 131 USE mpi_mod 132 USE prec 133 IMPLICIT NONE 134 REAL(rstd), POINTER :: buffer(:) 135 136 CALL MPI_FREE_MEM(buffer,ierr) 137 138 END SUBROUTINE free_mpi_buffer_r2 82 139 83 140 SUBROUTINE allocate_mpi_buffer_r3(buffer,length,dim3) … … 100 157 CALL C_F_POINTER(base_ptr, buffer, (/ length,dim3 /)) 101 158 102 END SUBROUTINE allocate_mpi_buffer_r3 159 END SUBROUTINE allocate_mpi_buffer_r3 160 161 SUBROUTINE free_mpi_buffer_r3(buffer) 162 USE ISO_C_BINDING 163 USE mpi_mod 164 USE prec 165 IMPLICIT NONE 166 REAL(rstd), POINTER :: buffer(:,:) 167 168 CALL MPI_FREE_MEM(buffer,ierr) 169 170 END SUBROUTINE free_mpi_buffer_r3 103 171 104 172 SUBROUTINE allocate_mpi_buffer_r4(buffer,length,dim3,dim4) … … 123 191 124 192 END SUBROUTINE allocate_mpi_buffer_r4 193 194 SUBROUTINE free_mpi_buffer_r4(buffer) 195 USE ISO_C_BINDING 196 USE mpi_mod 197 USE prec 198 IMPLICIT NONE 199 REAL(rstd), POINTER :: buffer(:,:,:) 200 201 CALL MPI_FREE_MEM(buffer,ierr) 202 203 END SUBROUTINE free_mpi_buffer_r4 125 204 126 205 END MODULE mpipara
Note: See TracChangeset
for help on using the changeset viewer.