Changeset 151 for codes/icosagcm/trunk/src/mpipara.F90
- Timestamp:
- 05/13/13 14:30:31 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/mpipara.F90
r118 r151 8 8 LOGICAL,SAVE :: using_mpi 9 9 LOGICAL,SAVE :: is_mpi_root 10 11 INTERFACE allocate_mpi_buffer 12 MODULE PROCEDURE allocate_mpi_buffer_r2, allocate_mpi_buffer_r3,allocate_mpi_buffer_r4 13 END INTERFACE allocate_mpi_buffer 10 14 11 15 CONTAINS … … 48 52 END SUBROUTINE finalize_mpipara 49 53 54 55 SUBROUTINE allocate_mpi_buffer_r2(buffer,length) 56 USE ISO_C_BINDING 57 USE mpi_mod 58 USE prec 59 IMPLICIT NONE 60 REAL(rstd), POINTER :: buffer(:) 61 INTEGER,INTENT(IN) :: length 62 63 TYPE(C_PTR) :: base_ptr 64 INTEGER(KIND=MPI_ADDRESS_KIND) :: size 65 INTEGER :: real_size,ierr 66 67 CALL MPI_TYPE_EXTENT(MPI_REAL8, real_size, ierr) 68 size=length*real_size 69 70 CALL MPI_ALLOC_MEM(size,MPI_INFO_NULL,base_ptr,ierr) 71 CALL C_F_POINTER(base_ptr, buffer, (/ length /)) 72 73 END SUBROUTINE allocate_mpi_buffer_r2 74 75 SUBROUTINE allocate_mpi_buffer_r3(buffer,length,dim3) 76 USE ISO_C_BINDING 77 USE mpi_mod 78 USE prec 79 IMPLICIT NONE 80 REAL(rstd), POINTER :: buffer(:,:) 81 INTEGER,INTENT(IN) :: length 82 INTEGER,INTENT(IN) :: dim3 83 84 TYPE(C_PTR) :: base_ptr 85 INTEGER(KIND=MPI_ADDRESS_KIND) :: size 86 INTEGER :: real_size,ierr 87 88 CALL MPI_TYPE_EXTENT(MPI_REAL8, real_size, ierr) 89 size=length*real_size*dim3 90 91 CALL MPI_ALLOC_MEM(size,MPI_INFO_NULL,base_ptr,ierr) 92 CALL C_F_POINTER(base_ptr, buffer, (/ length,dim3 /)) 93 94 END SUBROUTINE allocate_mpi_buffer_r3 95 96 SUBROUTINE allocate_mpi_buffer_r4(buffer,length,dim3,dim4) 97 USE ISO_C_BINDING 98 USE mpi_mod 99 USE prec 100 IMPLICIT NONE 101 REAL(rstd), POINTER :: buffer(:,:,:) 102 INTEGER,INTENT(IN) :: length 103 INTEGER,INTENT(IN) :: dim3 104 INTEGER,INTENT(IN) :: dim4 105 106 TYPE(C_PTR) :: base_ptr 107 INTEGER(KIND=MPI_ADDRESS_KIND) :: size 108 INTEGER :: real_size,ierr 109 110 CALL MPI_TYPE_EXTENT(MPI_REAL8, real_size, ierr) 111 size=length*real_size*dim3*dim4 112 113 CALL MPI_ALLOC_MEM(size,MPI_INFO_NULL,base_ptr,ierr) 114 CALL C_F_POINTER(base_ptr, buffer, (/ length, dim3, dim4 /)) 115 116 END SUBROUTINE allocate_mpi_buffer_r4 50 117 51 118 END MODULE mpipara
Note: See TracChangeset
for help on using the changeset viewer.