- Timestamp:
- 09/30/20 23:22:33 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/parallel/transfert_mpi_collectives.f90
r963 r1055 1 1 MODULE transfert_mpi_collectives_mod 2 IMPLICIT NONE2 IMPLICIT NONE 3 3 4 4 INTERFACE bcast_mpi 5 MODULE PROCEDURE bcast_mpi_c, &6 bcast_mpi_i,bcast_mpi_i1,bcast_mpi_i2,bcast_mpi_i3,bcast_mpi_i4, &7 bcast_mpi_r,bcast_mpi_r1,bcast_mpi_r2,bcast_mpi_r3,bcast_mpi_r4, &8 bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l45 MODULE PROCEDURE bcast_mpi_c 6 MODULE PROCEDURE bcast_mpi_i, bcast_mpi_i1, bcast_mpi_i2, bcast_mpi_i3, bcast_mpi_i4 7 MODULE PROCEDURE bcast_mpi_r, bcast_mpi_r1, bcast_mpi_r2, bcast_mpi_r3, bcast_mpi_r4 8 MODULE PROCEDURE bcast_mpi_l, bcast_mpi_l1, bcast_mpi_l2, bcast_mpi_l3, bcast_mpi_l4 9 9 END INTERFACE 10 10 … … 12 12 13 13 SUBROUTINE gather_field(field_loc,field_glo) 14 USE field_mod 15 USE domain_mod 16 USE mpi_mod 17 USE mpipara 18 IMPLICIT NONE 14 USE field_mod 15 USE domain_mod 16 USE mpi_mod 17 USE mpipara 19 18 TYPE(t_field),POINTER :: field_loc(:) 20 19 TYPE(t_field),POINTER :: field_glo(:) … … 25 24 26 25 IF (.NOT. using_mpi) THEN 27 28 DO ind_loc=1,ndomain 29 IF (field_loc(ind_loc)%ndim==2) field_glo(ind_loc)%rval2d=field_loc(ind_loc)%rval2d 30 IF (field_loc(ind_loc)%ndim==3) field_glo(ind_loc)%rval3d=field_loc(ind_loc)%rval3d 31 IF (field_loc(ind_loc)%ndim==4) field_glo(ind_loc)%rval4d=field_loc(ind_loc)%rval4d 32 ENDDO 26 DO ind_loc=1,ndomain 27 field_glo(ind_loc)%rval4d=field_loc(ind_loc)%rval4d 28 ENDDO 33 29 34 30 ELSE 35 36 nreq=ndomain 37 IF (mpi_rank==0) nreq=nreq+ndomain_glo 38 ALLOCATE(mpi_req(nreq)) 39 ALLOCATE(status(MPI_STATUS_SIZE,nreq)) 40 41 42 ireq=0 43 IF (mpi_rank==0) THEN 44 DO ind_glo=1,ndomain_glo 31 nreq=ndomain 32 IF (mpi_rank==0) nreq=nreq+ndomain_glo 33 ALLOCATE(mpi_req(nreq)) 34 ALLOCATE(status(MPI_STATUS_SIZE,nreq)) 35 36 ireq=0 37 IF (mpi_rank==0) THEN 38 DO ind_glo=1,ndomain_glo 39 ireq=ireq+1 40 CALL MPI_IRECV(field_glo(ind_glo)%rval4d,size(field_glo(ind_glo)%rval4d) , MPI_REAL8 , & 41 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr) 42 ENDDO 43 ENDIF 44 45 DO ind_loc=1,ndomain 45 46 ireq=ireq+1 46 47 IF (field_glo(ind_glo)%ndim==2) THEN48 CALL MPI_IRECV(field_glo(ind_glo)%rval2d,size(field_glo(ind_glo)%rval2d) , MPI_REAL8 , &49 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr)50 51 ELSE IF (field_glo(ind_glo)%ndim==3) THEN52 CALL MPI_IRECV(field_glo(ind_glo)%rval3d,size(field_glo(ind_glo)%rval3d) , MPI_REAL8 , &53 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr)54 55 ELSE IF (field_glo(ind_glo)%ndim==4) THEN56 CALL MPI_IRECV(field_glo(ind_glo)%rval4d,size(field_glo(ind_glo)%rval4d) , MPI_REAL8 , &57 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr)58 ENDIF59 60 ENDDO61 ENDIF62 63 DO ind_loc=1,ndomain64 ireq=ireq+165 66 IF (field_loc(ind_loc)%ndim==2) THEN67 CALL MPI_ISEND(field_loc(ind_loc)%rval2d,size(field_loc(ind_loc)%rval2d) , MPI_REAL8 , &68 0, ind_loc, comm_icosa, mpi_req(ireq), ierr)69 ELSE IF (field_loc(ind_loc)%ndim==3) THEN70 CALL MPI_ISEND(field_loc(ind_loc)%rval3d,size(field_loc(ind_loc)%rval3d) , MPI_REAL8 , &71 0, ind_loc, comm_icosa, mpi_req(ireq), ierr)72 ELSE IF (field_loc(ind_loc)%ndim==4) THEN73 47 CALL MPI_ISEND(field_loc(ind_loc)%rval4d,size(field_loc(ind_loc)%rval4d) , MPI_REAL8 , & 74 0, ind_loc, comm_icosa, mpi_req(ireq), ierr) 75 ENDIF 76 77 ENDDO 78 79 CALL MPI_WAITALL(nreq,mpi_req,status,ierr) 48 0, ind_loc, comm_icosa, mpi_req(ireq), ierr) 49 ENDDO 50 51 CALL MPI_WAITALL(nreq,mpi_req,status,ierr) 80 52 81 53 ENDIF … … 84 56 85 57 SUBROUTINE bcast_field(field_glo) 86 USE field_mod 87 USE domain_mod 88 USE mpi_mod 89 USE mpipara 90 IMPLICIT NONE 58 USE field_mod 59 USE domain_mod 60 USE mpi_mod 61 USE mpipara 91 62 TYPE(t_field),POINTER :: field_glo(:) 92 63 INTEGER :: ind_glo 93 64 94 IF (.NOT. using_mpi) THEN 95 96 ! nothing to do 97 98 ELSE 99 100 DO ind_glo=1,ndomain_glo 101 102 IF (field_glo(ind_glo)%ndim==2) THEN 103 CALL MPI_BCAST(field_glo(ind_glo)%rval2d, size(field_glo(ind_glo)%rval2d) , MPI_REAL8, 0, comm_icosa, ierr) 104 ELSE IF (field_glo(ind_glo)%ndim==3) THEN 105 CALL MPI_BCAST(field_glo(ind_glo)%rval3d, size(field_glo(ind_glo)%rval3d) , MPI_REAL8, 0, comm_icosa, ierr) 106 ELSE IF (field_glo(ind_glo)%ndim==4) THEN 107 CALL MPI_BCAST(field_glo(ind_glo)%rval4d, size(field_glo(ind_glo)%rval4d) , MPI_REAL8, 0, comm_icosa, ierr) 108 ENDIF 109 110 ENDDO 111 ENDIF 65 IF (using_mpi) THEN 66 DO ind_glo=1,ndomain_glo 67 CALL MPI_BCAST(field_glo(ind_glo)%rval4d, size(field_glo(ind_glo)%rval4d) , MPI_REAL8, 0, comm_icosa, ierr) 68 ENDDO 69 ENDIF 112 70 113 71 END SUBROUTINE bcast_field 114 72 115 73 SUBROUTINE scatter_field(field_glo,field_loc) 116 USE field_mod 117 USE domain_mod 118 USE mpi_mod 119 USE mpipara 120 IMPLICIT NONE 74 USE field_mod 75 USE domain_mod 76 USE mpi_mod 77 USE mpipara 121 78 TYPE(t_field),POINTER :: field_glo(:) 122 79 TYPE(t_field),POINTER :: field_loc(:) … … 127 84 128 85 IF (.NOT. using_mpi) THEN 129 130 DO ind_loc=1,ndomain 131 IF (field_loc(ind_loc)%ndim==2) field_loc(ind_loc)%rval2d=field_glo(ind_loc)%rval2d 132 IF (field_loc(ind_loc)%ndim==3) field_loc(ind_loc)%rval3d=field_glo(ind_loc)%rval3d 133 IF (field_loc(ind_loc)%ndim==4) field_loc(ind_loc)%rval4d=field_glo(ind_loc)%rval4d 134 ENDDO 86 DO ind_loc=1,ndomain 87 field_loc(ind_loc)%rval4d=field_glo(ind_loc)%rval4d 88 ENDDO 135 89 136 90 ELSE 137 138 nreq=ndomain 139 IF (mpi_rank==0) nreq=nreq+ndomain_glo 140 ALLOCATE(mpi_req(nreq)) 141 ALLOCATE(status(MPI_STATUS_SIZE,nreq)) 142 143 144 ireq=0 145 IF (mpi_rank==0) THEN 146 DO ind_glo=1,ndomain_glo 91 nreq=ndomain 92 IF (mpi_rank==0) nreq=nreq+ndomain_glo 93 ALLOCATE(mpi_req(nreq)) 94 ALLOCATE(status(MPI_STATUS_SIZE,nreq)) 95 96 ireq=0 97 IF (mpi_rank==0) THEN 98 DO ind_glo=1,ndomain_glo 99 ireq=ireq+1 100 CALL MPI_ISEND(field_glo(ind_glo)%rval4d,size(field_glo(ind_glo)%rval4d) , MPI_REAL8 , & 101 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr) 102 ENDDO 103 ENDIF 104 105 DO ind_loc=1,ndomain 147 106 ireq=ireq+1 148 149 IF (field_glo(ind_glo)%ndim==2) THEN150 CALL MPI_ISEND(field_glo(ind_glo)%rval2d,size(field_glo(ind_glo)%rval2d) , MPI_REAL8 , &151 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr)152 153 ELSE IF (field_glo(ind_glo)%ndim==3) THEN154 CALL MPI_ISEND(field_glo(ind_glo)%rval3d,size(field_glo(ind_glo)%rval3d) , MPI_REAL8 , &155 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr)156 157 ELSE IF (field_glo(ind_glo)%ndim==4) THEN158 CALL MPI_ISEND(field_glo(ind_glo)%rval4d,size(field_glo(ind_glo)%rval4d) , MPI_REAL8 , &159 domglo_rank(ind_glo),domglo_loc_ind(ind_glo), comm_icosa, mpi_req(ireq), ierr)160 ENDIF161 162 ENDDO163 ENDIF164 165 DO ind_loc=1,ndomain166 ireq=ireq+1167 168 IF (field_loc(ind_loc)%ndim==2) THEN169 CALL MPI_IRECV(field_loc(ind_loc)%rval2d,size(field_loc(ind_loc)%rval2d) , MPI_REAL8 , &170 0, ind_loc, comm_icosa, mpi_req(ireq), ierr)171 ELSE IF (field_loc(ind_loc)%ndim==3) THEN172 CALL MPI_IRECV(field_loc(ind_loc)%rval3d,size(field_loc(ind_loc)%rval3d) , MPI_REAL8 , &173 0, ind_loc, comm_icosa, mpi_req(ireq), ierr)174 ELSE IF (field_loc(ind_loc)%ndim==4) THEN175 107 CALL MPI_IRECV(field_loc(ind_loc)%rval4d,size(field_loc(ind_loc)%rval4d) , MPI_REAL8 , & 176 0, ind_loc, comm_icosa, mpi_req(ireq), ierr) 177 ENDIF 178 179 ENDDO 180 181 CALL MPI_WAITALL(nreq,mpi_req,status,ierr) 108 0, ind_loc, comm_icosa, mpi_req(ireq), ierr) 109 ENDDO 110 111 CALL MPI_WAITALL(nreq,mpi_req,status,ierr) 182 112 183 113 ENDIF … … 185 115 END SUBROUTINE scatter_field 186 116 187 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 188 !! Definition des Broadcast --> 4D !! 189 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 190 191 !! -- Les chaine de charactï¿œre -- !! 192 193 SUBROUTINE bcast_mpi_c(var1) 194 IMPLICIT NONE 195 CHARACTER(LEN=*),INTENT(INOUT) :: Var1 196 197 CALL bcast_mpi_cgen(Var1,len(Var1)) 198 199 END SUBROUTINE bcast_mpi_c 200 201 !! -- Les entiers -- !! 202 203 SUBROUTINE bcast_mpi_i(var) 204 USE mpipara 205 IMPLICIT NONE 206 INTEGER,INTENT(INOUT) :: Var 207 208 INTEGER :: var_tmp(1) 209 210 IF (is_mpi_master) var_tmp(1)=var 211 CALL bcast_mpi_igen(Var_tmp,1) 212 var=var_tmp(1) 213 214 END SUBROUTINE bcast_mpi_i 215 216 SUBROUTINE bcast_mpi_i1(var) 217 IMPLICIT NONE 218 INTEGER,INTENT(INOUT) :: Var(:) 219 220 CALL bcast_mpi_igen(Var,size(Var)) 221 222 END SUBROUTINE bcast_mpi_i1 223 224 SUBROUTINE bcast_mpi_i2(var) 225 IMPLICIT NONE 226 INTEGER,INTENT(INOUT) :: Var(:,:) 227 228 CALL bcast_mpi_igen(Var,size(Var)) 229 230 END SUBROUTINE bcast_mpi_i2 231 232 SUBROUTINE bcast_mpi_i3(var) 233 IMPLICIT NONE 234 INTEGER,INTENT(INOUT) :: Var(:,:,:) 235 236 CALL bcast_mpi_igen(Var,size(Var)) 237 238 END SUBROUTINE bcast_mpi_i3 239 240 SUBROUTINE bcast_mpi_i4(var) 241 IMPLICIT NONE 242 INTEGER,INTENT(INOUT) :: Var(:,:,:,:) 243 244 CALL bcast_mpi_igen(Var,size(Var)) 245 246 END SUBROUTINE bcast_mpi_i4 247 248 249 !! -- Les reels -- !! 250 251 SUBROUTINE bcast_mpi_r(var) 252 USE mpipara 253 IMPLICIT NONE 254 REAL,INTENT(INOUT) :: Var 255 REAL :: var_tmp(1) 256 257 IF (is_mpi_master) var_tmp(1)=var 258 CALL bcast_mpi_rgen(Var_tmp,1) 259 var=var_tmp(1) 260 261 END SUBROUTINE bcast_mpi_r 262 263 SUBROUTINE bcast_mpi_r1(var) 264 IMPLICIT NONE 265 REAL,INTENT(INOUT) :: Var(:) 266 267 CALL bcast_mpi_rgen(Var,size(Var)) 268 269 END SUBROUTINE bcast_mpi_r1 270 271 SUBROUTINE bcast_mpi_r2(var) 272 IMPLICIT NONE 273 REAL,INTENT(INOUT) :: Var(:,:) 274 275 CALL bcast_mpi_rgen(Var,size(Var)) 276 277 END SUBROUTINE bcast_mpi_r2 278 279 SUBROUTINE bcast_mpi_r3(var) 280 IMPLICIT NONE 281 REAL,INTENT(INOUT) :: Var(:,:,:) 282 283 CALL bcast_mpi_rgen(Var,size(Var)) 284 285 END SUBROUTINE bcast_mpi_r3 286 287 SUBROUTINE bcast_mpi_r4(var) 288 IMPLICIT NONE 289 REAL,INTENT(INOUT) :: Var(:,:,:,:) 290 291 CALL bcast_mpi_rgen(Var,size(Var)) 292 293 END SUBROUTINE bcast_mpi_r4 294 295 !! -- Les booleans -- !! 296 297 SUBROUTINE bcast_mpi_l(var) 298 USE mpipara 299 IMPLICIT NONE 300 LOGICAL,INTENT(INOUT) :: Var 301 LOGICAL :: var_tmp(1) 302 303 IF (is_mpi_master) var_tmp(1)=var 304 CALL bcast_mpi_lgen(Var_tmp,1) 305 var=var_tmp(1) 306 307 END SUBROUTINE bcast_mpi_l 308 309 SUBROUTINE bcast_mpi_l1(var) 310 IMPLICIT NONE 311 LOGICAL,INTENT(INOUT) :: Var(:) 312 313 CALL bcast_mpi_lgen(Var,size(Var)) 314 315 END SUBROUTINE bcast_mpi_l1 316 317 SUBROUTINE bcast_mpi_l2(var) 318 IMPLICIT NONE 319 LOGICAL,INTENT(INOUT) :: Var(:,:) 320 321 CALL bcast_mpi_lgen(Var,size(Var)) 322 323 END SUBROUTINE bcast_mpi_l2 324 325 SUBROUTINE bcast_mpi_l3(var) 326 IMPLICIT NONE 327 LOGICAL,INTENT(INOUT) :: Var(:,:,:) 328 329 CALL bcast_mpi_lgen(Var,size(Var)) 330 331 END SUBROUTINE bcast_mpi_l3 332 333 SUBROUTINE bcast_mpi_l4(var) 334 IMPLICIT NONE 335 LOGICAL,INTENT(INOUT) :: Var(:,:,:,:) 336 337 CALL bcast_mpi_lgen(Var,size(Var)) 338 339 END SUBROUTINE bcast_mpi_l4 340 341 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 342 !! DEFINITION DES FONCTIONS DE TRANSFERT GENERIQUES ! 343 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 117 !=================== Broadcast routines for strings ==================! 344 118 345 119 SUBROUTINE bcast_mpi_cgen(var,nb) 346 120 USE mpi_mod 347 121 USE mpipara 348 IMPLICIT NONE349 350 122 CHARACTER(LEN=*),INTENT(INOUT) :: Var 351 123 INTEGER,INTENT(IN) :: nb 352 353 124 IF (.NOT. using_mpi) RETURN 354 355 125 CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_master,comm_icosa,ierr) 356 357 126 END SUBROUTINE bcast_mpi_cgen 358 127 359 128 SUBROUTINE bcast_mpi_c(var1) 129 CHARACTER(LEN=*),INTENT(INOUT) :: Var1 130 CALL bcast_mpi_cgen(Var1,len(Var1)) 131 END SUBROUTINE bcast_mpi_c 132 133 !============= Broadcast routines for INTEGER scalars and arrays ============! 360 134 361 135 SUBROUTINE bcast_mpi_igen(var,nb) 362 136 USE mpi_mod 363 137 USE mpipara 364 IMPLICIT NONE 365 INTEGER,INTENT(IN) :: nb 366 INTEGER,DIMENSION(nb),INTENT(INOUT) :: Var 367 368 IF (.NOT. using_mpi) RETURN 369 370 CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_master,comm_icosa,ierr) 371 138 INTEGER, INTENT(IN) :: nb 139 INTEGER, DIMENSION(nb), INTENT(INOUT) :: var 140 IF (using_mpi) CALL MPI_BCAST(Var, nb, MPI_INTEGER, mpi_master, comm_icosa, ierr) 372 141 END SUBROUTINE bcast_mpi_igen 373 142 374 375 143 SUBROUTINE bcast_mpi_i(var) 144 USE mpipara 145 INTEGER, INTENT(INOUT) :: var 146 INTEGER :: var_tmp(1) 147 IF (is_mpi_master) var_tmp(1)=var 148 CALL bcast_mpi_igen(var_tmp,1) 149 var=var_tmp(1) 150 END SUBROUTINE bcast_mpi_i 151 152 SUBROUTINE bcast_mpi_i1(var) 153 INTEGER, INTENT(INOUT) :: var(:) 154 CALL bcast_mpi_igen(var,size(var)) 155 END SUBROUTINE bcast_mpi_i1 156 157 SUBROUTINE bcast_mpi_i2(var) 158 INTEGER, INTENT(INOUT) :: var(:,:) 159 CALL bcast_mpi_igen(var,size(var)) 160 END SUBROUTINE bcast_mpi_i2 161 162 SUBROUTINE bcast_mpi_i3(var) 163 INTEGER, INTENT(INOUT) :: var(:,:,:) 164 CALL bcast_mpi_igen(var,size(var)) 165 END SUBROUTINE bcast_mpi_i3 166 167 SUBROUTINE bcast_mpi_i4(var) 168 INTEGER, INTENT(INOUT) :: var(:,:,:,:) 169 CALL bcast_mpi_igen(var,size(var)) 170 END SUBROUTINE bcast_mpi_i4 171 172 !============= Broadcast routines for REAL scalars and arrays ============! 376 173 377 174 SUBROUTINE bcast_mpi_rgen(var,nb) 378 175 USE mpi_mod 379 176 USE mpipara 380 IMPLICIT NONE 381 INTEGER,INTENT(IN) :: nb 382 REAL,DIMENSION(nb),INTENT(INOUT) :: Var 383 384 IF (.NOT. using_mpi) RETURN 385 386 CALL MPI_BCAST(Var,nb,MPI_REAL8,mpi_master,comm_icosa,ierr) 387 177 INTEGER, INTENT(IN) :: nb 178 REAL, DIMENSION(nb), INTENT(INOUT) :: var 179 IF (using_mpi) CALL MPI_BCAST(Var, nb, MPI_REAL8, mpi_master, comm_icosa, ierr) 388 180 END SUBROUTINE bcast_mpi_rgen 389 181 390 391 182 SUBROUTINE bcast_mpi_r(var) 183 USE mpipara 184 REAL, INTENT(INOUT) :: var 185 REAL :: var_tmp(1) 186 IF (is_mpi_master) var_tmp(1)=var 187 CALL bcast_mpi_rgen(var_tmp,1) 188 var=var_tmp(1) 189 END SUBROUTINE bcast_mpi_r 190 191 SUBROUTINE bcast_mpi_r1(var) 192 REAL, INTENT(INOUT) :: var(:) 193 CALL bcast_mpi_rgen(var,size(var)) 194 END SUBROUTINE bcast_mpi_r1 195 196 SUBROUTINE bcast_mpi_r2(var) 197 REAL, INTENT(INOUT) :: var(:,:) 198 CALL bcast_mpi_rgen(var,size(var)) 199 END SUBROUTINE bcast_mpi_r2 200 201 SUBROUTINE bcast_mpi_r3(var) 202 REAL, INTENT(INOUT) :: var(:,:,:) 203 CALL bcast_mpi_rgen(var,size(var)) 204 END SUBROUTINE bcast_mpi_r3 205 206 SUBROUTINE bcast_mpi_r4(var) 207 REAL, INTENT(INOUT) :: var(:,:,:,:) 208 CALL bcast_mpi_rgen(var,size(var)) 209 END SUBROUTINE bcast_mpi_r4 210 211 !============= Broadcast routines for LOGICAL scalars and arrays ============! 392 212 393 213 SUBROUTINE bcast_mpi_lgen(var,nb) 394 214 USE mpi_mod 395 215 USE mpipara 396 IMPLICIT NONE 397 INTEGER,INTENT(IN) :: nb 398 LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var 399 400 IF (.NOT. using_mpi) RETURN 401 402 CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_master,comm_icosa,ierr) 403 216 INTEGER, INTENT(IN) :: nb 217 LOGICAL, DIMENSION(nb), INTENT(INOUT) :: var 218 IF (using_mpi) CALL MPI_BCAST(Var, nb, MPI_LOGICAL, mpi_master, comm_icosa, ierr) 404 219 END SUBROUTINE bcast_mpi_lgen 405 220 221 SUBROUTINE bcast_mpi_l(var) 222 USE mpipara 223 LOGICAL, INTENT(INOUT) :: var 224 LOGICAL :: var_tmp(1) 225 IF (is_mpi_master) var_tmp(1)=var 226 CALL bcast_mpi_lgen(var_tmp,1) 227 var=var_tmp(1) 228 END SUBROUTINE bcast_mpi_l 229 230 SUBROUTINE bcast_mpi_l1(var) 231 LOGICAL, INTENT(INOUT) :: var(:) 232 CALL bcast_mpi_lgen(var,size(var)) 233 END SUBROUTINE bcast_mpi_l1 234 235 SUBROUTINE bcast_mpi_l2(var) 236 LOGICAL, INTENT(INOUT) :: var(:,:) 237 CALL bcast_mpi_lgen(var,size(var)) 238 END SUBROUTINE bcast_mpi_l2 239 240 SUBROUTINE bcast_mpi_l3(var) 241 LOGICAL, INTENT(INOUT) :: var(:,:,:) 242 CALL bcast_mpi_lgen(var,size(var)) 243 END SUBROUTINE bcast_mpi_l3 244 245 SUBROUTINE bcast_mpi_l4(var) 246 LOGICAL, INTENT(INOUT) :: var(:,:,:,:) 247 CALL bcast_mpi_lgen(var,size(var)) 248 END SUBROUTINE bcast_mpi_l4 406 249 407 250 END MODULE transfert_mpi_collectives_mod 408 409 410 411 412
Note: See TracChangeset
for help on using the changeset viewer.