18 INTEGER,
DIMENSION(:),
INTENT(IN) :: kwork
19 INTEGER,
DIMENSION(:),
INTENT(OUT) :: kwork2
21 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
27 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: kwork
28 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kwork2
30 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
36 REAL,
DIMENSION(:),
INTENT(IN) :: pwork
37 REAL,
DIMENSION(:),
INTENT(OUT) :: pwork2
39 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
45 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwork
46 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pwork2
48 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
54 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pwork
55 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pwork2
57 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
68 xtime_npio_read, xtime_comm_read, idx_r,
wlog_mpi
73 USE yomhook
,ONLY : lhook, dr_hook
74 USE parkind1
,ONLY : jprb
82 INTEGER,
DIMENSION(:),
INTENT(IN) :: kwork
83 INTEGER,
DIMENSION(:),
INTENT(OUT) :: kwork2
85 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
88 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: istatus
95 REAL(KIND=JPRB) :: zhook_handle
97 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_N1D',0,zhook_handle)
101 IF (nrank==npio)
THEN
119 IF ( nindex(j)==mod(i,nproc) )
THEN
121 nwork(icpt) = kwork(j)
127 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
131 CALL mpi_send(nwork,
SIZE(nwork)*kind(nwork)/4,mpi_integer,i,idx_r,ncomm,infompi)
132 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
150 CALL mpi_recv(nwork,
SIZE(nwork)*kind(nwork)/4,mpi_integer,npio,idx_r,ncomm,istatus,infompi)
151 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
158 IF (present(kmask))
THEN
161 kwork2(:) = nwork(nindx1sfx:nindx2sfx)
164 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_N1D',1,zhook_handle)
173 USE modd_surfex_mpi, ONLY : nindex, nproc, nrank, ncomm, npio, nsize, &
174 xtime_npio_read, xtime_comm_read, idx_r,
wlog_mpi
179 USE yomhook
,ONLY : lhook, dr_hook
180 USE parkind1
,ONLY : jprb
188 INTEGER,
DIMENSION(:,:),
INTENT(IN) :: kwork
189 INTEGER,
DIMENSION(:,:),
INTENT(OUT) :: kwork2
191 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
194 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: istatus
202 REAL(KIND=JPRB) :: zhook_handle
204 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_N2D',0,zhook_handle)
214 ALLOCATE(nwork2(nsize,ip2))
218 IF (nrank==npio)
THEN
236 IF ( nindex(j)==mod(i,nproc) )
THEN
238 nwork2(icpt,1:ip2) = kwork(j,:)
244 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
248 CALL mpi_send(nwork2(:,1:ip2),nsize*ip2*kind(nwork2)/4,mpi_integer,i,idx_r,ncomm,infompi)
249 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
267 CALL mpi_recv(nwork2(:,1:ip2),nsize*ip2*kind(nwork2)/4,mpi_integer,npio,idx_r,ncomm,istatus,infompi)
268 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
275 IF (present(kmask))
THEN
276 CALL
pack_same_rank(kmask,nwork2(nindx1sfx:nindx2sfx,1:ip2),kwork2)
278 kwork2(:,:) = nwork2(nindx1sfx:nindx2sfx,1:ip2)
281 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_N2D',1,zhook_handle)
290 USE modd_surfex_mpi, ONLY : nindex, nproc, nrank, ncomm, npio, nsize, &
291 xtime_npio_read, xtime_comm_read,
wlog_mpi, idx_r
296 USE yomhook
,ONLY : lhook, dr_hook
297 USE parkind1
,ONLY : jprb
305 REAL,
DIMENSION(:),
INTENT(IN) :: pwork
306 REAL,
DIMENSION(:),
INTENT(OUT) :: pwork2
308 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
311 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: istatus
318 REAL(KIND=JPRB) :: zhook_handle
320 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_X1D',0,zhook_handle)
324 IF (nrank==npio)
THEN
342 IF ( nindex(j)==mod(i,nproc) )
THEN
344 xwork(icpt) = pwork(j)
350 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
354 CALL mpi_send(xwork,
SIZE(xwork)*kind(xwork)/4,mpi_real,i,idx_r,ncomm,infompi)
355 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
373 CALL mpi_recv(xwork,
SIZE(xwork)*kind(xwork)/4,mpi_real,npio,idx_r,ncomm,istatus,infompi)
374 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
381 IF (present(kmask))
THEN
384 pwork2(:) = xwork(nindx1sfx:nindx2sfx)
387 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_X1D',1,zhook_handle)
395 USE modd_surfex_mpi, ONLY : nindex, nproc, nrank, ncomm, npio, nsize, &
396 xtime_npio_read, xtime_comm_read,
wlog_mpi, idx_r
401 USE yomhook
,ONLY : lhook, dr_hook
402 USE parkind1
,ONLY : jprb
410 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwork
411 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pwork2
413 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
416 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: istatus
424 REAL(KIND=JPRB) :: zhook_handle
426 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_X2D',0,zhook_handle)
436 ALLOCATE(xwork2(nsize,ip2))
440 IF (nrank==npio)
THEN
458 IF ( nindex(j)==mod(i,nproc) )
THEN
460 xwork2(icpt,1:ip2) = pwork(j,:)
466 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
470 CALL mpi_send(xwork2(:,1:ip2),nsize*ip2*kind(xwork2)/4,mpi_real,i,idx_r,ncomm,infompi)
471 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
489 CALL mpi_recv(xwork2(:,1:ip2),nsize*ip2*kind(xwork2)/4,mpi_real,npio,idx_r,ncomm,istatus,infompi)
490 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
497 IF (present(kmask))
THEN
498 CALL
pack_same_rank(kmask,xwork2(nindx1sfx:nindx2sfx,1:ip2),pwork2)
500 pwork2(:,:) = xwork2(nindx1sfx:nindx2sfx,1:ip2)
503 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_X2D',1,zhook_handle)
510 USE modd_surfex_mpi, ONLY : nindex, nproc, nrank, ncomm, npio, nsize, &
511 xtime_npio_read, xtime_comm_read, idx_r,
wlog_mpi
516 USE yomhook
,ONLY : lhook, dr_hook
517 USE parkind1
,ONLY : jprb
525 REAL,
DIMENSION(:,:,:),
INTENT(IN) :: pwork
526 REAL,
DIMENSION(:,:,:),
INTENT(OUT) :: pwork2
528 INTEGER,
DIMENSION(:),
INTENT(IN),
OPTIONAL :: kmask
531 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: istatus
533 INTEGER :: ip2, is2, ip3, is3
539 REAL(KIND=JPRB) :: zhook_handle
541 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_X3D',0,zhook_handle)
551 IF (ip2>is2 .OR. ip3>is3)
THEN
553 ALLOCATE(xwork3(nsize,max(ip2,is2),max(ip3,is3)))
557 IF (nrank==npio)
THEN
571 xwork3(:,1:ip2,1:ip3) = 0.
575 IF ( nindex(j)==mod(i,nproc) )
THEN
577 xwork3(icpt,1:ip2,1:ip3) = pwork(j,:,:)
583 xtime_npio_read = xtime_npio_read + (mpi_wtime() - xtime0)
587 CALL mpi_send(xwork3(:,1:ip2,1:ip3),nsize*ip2*ip3*kind(xwork3)/4,mpi_real,i,idx_r,ncomm,infompi)
588 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
603 xwork3(:,1:ip2,1:ip3) = 0.
606 CALL mpi_recv(xwork3(:,1:ip2,1:ip3),nsize*ip2*ip3*kind(xwork3)/4,mpi_real,npio,idx_r,ncomm,istatus,infompi)
607 xtime_comm_read = xtime_comm_read + (mpi_wtime() - xtime0)
614 IF (present(kmask))
THEN
615 CALL
pack_same_rank(kmask,xwork3(nindx1sfx:nindx2sfx,1:ip2,1:ip3),pwork2)
617 pwork2(:,:,:) = xwork3(nindx1sfx:nindx2sfx,1:ip2,1:ip3)
620 IF (lhook) CALL dr_hook(
'READ_AND_SEND_MPI_X3D',1,zhook_handle)
subroutine read_and_send_mpi_x3d(PWORK, PWORK2, KMASK)
subroutine read_and_send_mpi_n1d(KWORK, KWORK2, KMASK)
subroutine read_and_send_mpi_x2d(PWORK, PWORK2, KMASK)
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)
subroutine read_and_send_mpi_n2d(KWORK, KWORK2, KMASK)
subroutine read_and_send_mpi_x1d(PWORK, PWORK2, KMASK)