Skip to content

Commit

Permalink
Modifications for zcombufs and zcombufr now both being allocated at t…
Browse files Browse the repository at this point in the history
…he top level. Not complete: need to figure out how to compute kvset.
  • Loading branch information
dmitrypek committed Aug 15, 2024
1 parent b3d35ea commit f917c2e
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 46 deletions.
67 changes: 51 additions & 16 deletions src/trans/cpu/internal/dir_trans_ctl_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ MODULE DIR_TRANS_CTL_MOD
TYPE(BATCHLIST) :: ACTIVE_BATCHES
REAL(KIND=JPRB), ALLOCATABLE :: BGTF(:,:)
INTEGER(KIND=JPIM), ALLOCATABLE :: IREQ_RECV(:,:)
REAL(KIND=JPRB), ALLOCATABLE :: ZCOMBUFR(:,:)
REAL(KIND=JPRB), ALLOCATABLE :: ZCOMBUFR(:,:),ZCOMBUFS(:,:)

CONTAINS
SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&
Expand Down Expand Up @@ -115,11 +115,12 @@ SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&

TYPE(BATCH) :: NEW_BATCH
INTEGER(KIND=JPIM) :: IBLKS,JBLK
INTEGER(KIND=JPIM) :: NDONE,KNRECV,KRECVCOUNT,IGL,JGL,J,ISETW
INTEGER(KIND=JPIM) :: NDONE,KNRECV,KRECVCOUNT,KSENDCOUNT,IGL,JGL,J,ISETW,KNSEND
INTEGER(KIND=JPIM) :: IFIRSTLAT, ILASTLAT, IPOS, ISETA, ISETB, IRECV, ISETV,JFLD,JROC
INTEGER(KIND=JPIM), ALLOCATABLE :: KRECVTOT(:)
INTEGER(KIND=JPIM), ALLOCATABLE :: KRECVTOT(:),KSENDTOT(:),KGPTRSEND(:),IGPTRRECV(:)
TYPE(LINKEDLISTNODE), POINTER :: IB
INTEGER(KIND=JPIM), ALLOCATABLE :: NPTRFS(:)
INTEGER(KIND=JPIM) :: IOFFSEND,IOFFRECV,IOFFGTF,IPOS,JFLD

! ------------------------------------------------------------------

Expand All @@ -142,16 +143,37 @@ SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&
ALLOCATE(BGTF(KF_FS,D%NLENGTF))
ENDIF

! IBLKS = (KF_GP - 1) / NPROMATR + 1
IBLKS = (KF_FS - 1) / NPROMATR + 1
IBLKS = (KF_GP - 1) / NPROMATR + 1
! IBLKS = (KF_FS - 1) / NPROMATR + 1

! CALL COMPUTE_RECV_PARAMS(KNRECV,KRECVCOUNT)
KNRECV = 0
KNSEND = 0
ALLOCATE(KRECVTOT(NPROC))
ALLOCATE(KSENDTOT(NPROC))
ALLOCATE(KGPTRSEND(2,NGPBLKS,NPRTRNS))
ALLOCATE(IGPTRRECV(NPRTRNS))
CALL INIGPTR(KGPTRSEND,IGPTRRECV)

DO JROC=1,NPROC

CALL PE2SET(JROC,ISETA,ISETB,ISETW,ISETV)

! count up expected number of fields

!KVSET ???

IPOS = 0
DO JFLD=1,KF_GP
IF(KVSET(JFLD) == ISETV .OR. KVSET(JFLD) == -1) IPOS = IPOS+1
ENDDO
KSENDTOT(JROC) = IGPTRRECV(ISETW)*IPOS

IF( JROC /= MYPROC) THEN
IF(KSENDTOT(JROC) > 0) THEN
KNSEND = KNSEND+1
ENDIF
ENDIF

IFIRSTLAT = MAX(D%NPTRLS(MYSETW),D%NFRSTLAT(ISETA))
ILASTLAT = MIN(D%NPTRLS(MYSETW)+D%NULTPP(MYSETW)-1,D%NLSTLAT(ISETA))
Expand All @@ -168,10 +190,9 @@ SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&
ENDIF

ENDDO
KRECVCOUNT=0
DO J=1,NPROC
KRECVCOUNT=MAX(KRECVCOUNT,KRECVTOT(J))
ENDDO

KRECVCOUNT=MAXVAL(KRECVCOUNT)
KSENDCOUNT=MAXVAL(KSENDCOUNT)
DEALLOCATE(KRECVTOT)


Expand All @@ -189,21 +210,33 @@ SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&
ALLOCATE(ZCOMBUFR(KRECVCOUNT,KNRECV))
endif

IF (ALLOCATED(ZCOMBUFS) .AND. SIZE(ZCOMBUFS,2) /= KNSEND .AND. SIZE(ZCOMBUFS,1) /= KSENDCOUNT) THEN
DEALLOCATE(ZCOMBUFS)
ENDIF
IF(.NOT. ALLOCATED(ZCOMBUFS)) THEN
ALLOCATE(ZCOMBUFS(KSENDCOUNT,KNSEND))
endif

IF (THIS%NNSEND > 0 .AND. KSENDCOUNT >= -1) ZCOMBUFS(-1,1) = HUGE(1._JPRB)

ALLOCATE(NPTRFS(IBLKS+1))

IOFFSEND = 1
IOFFRECV = 1
IOFFGTF = 1
JBLK = 1
NDONE = 0

CALL ACTIVATE(JBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, BGTF,NPTRFS)
CALL ACTIVATE(JBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, NPTRFS,IOFFSEND,IOFFRECV,IOFFGTF,KSENDCOUNT,KRECVCOUNT)

DO WHILE (NDONE < IBLKS)

IB => ACTIVE_BATCHES%HEAD
DO WHILE (ASSOCIATED(IB))
SELECT TYPE (THISBATCH => IB%VALUE)
TYPE IS (BATCH)
IF (THISBATCH%COMM_COMPLETE()) THEN
CALL THISBATCH%FINISH_COMM(BGTF, PSPVOR, PSPDIV, PSPSCALAR)
IF (THISBATCH%COMM_COMPLETE(IREQ_RECV(:,THISBATCH%NBLK))) THEN
CALL THISBATCH%FINISH_COMM(ZGTF,IRECV_REQ(:,THISBATCH%NBLK),ZCOMBUFR,PSPVOR, PSPDIV, PSPSCALAR)
CALL ACTIVE_BATCHES%REMOVE(IB)
NDONE = NDONE + 1
EXIT
Expand All @@ -214,7 +247,7 @@ SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&

IF (JBLK < IBLKS) THEN
JBLK = JBLK + 1
CALL ACTIVATE(JBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, BGTF,NPTRFS)
CALL ACTIVATE(JBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, NPTRFS,IOFFSEND,IOFFRECV,IOFFGTF,KSENDCOUNT,KRECVCOUNT)
ENDIF
ENDDO
ELSE
Expand All @@ -228,11 +261,13 @@ SUBROUTINE DIR_TRANS_CTL(KF_UV_G,KF_SCALARS_G,KF_GP,KF_FS,KF_UV,KF_SCALARS,&

END SUBROUTINE DIR_TRANS_CTL

SUBROUTINE ACTIVATE(N, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, PGTF,NPTRFS)
SUBROUTINE ACTIVATE(N, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, NPTRFS,IOFFSEND,IOFFRECV,IOFFGTF,SENDCNTMAX,RECVCNTMAX)
INTEGER, INTENT(IN) :: N
INTEGER(KIND=JPIM), INTENT(IN) :: KF_GP
INTEGER(KIND=JPIM), INTENT(IN) :: KF_SCALARS_G
INTEGER(KIND=JPIM), INTENT(IN) :: KF_UV_G
INTEGER(KIND=JPIM), INTENT(INOUT) :: IOFFSEND,IOFFRECV,IOFFGTF
INTEGER(KIND=JPIM), INTENT(IN) :: SENDCNTMAX,RECVCNTMAX
INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KVSETUV(:)
INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KVSETSC(:)
REAL(KIND=JPRB), OPTIONAL, INTENT(IN) :: PGP(:,:,:)
Expand All @@ -242,11 +277,11 @@ SUBROUTINE ACTIVATE(N, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC, PGP, PGTF
CLASS(BATCH), POINTER :: NEW_BATCH

! Add a new Batch to the list
CALL ACTIVE_BATCHES%APPEND(BATCH(N, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,NPTRFS))
CALL ACTIVE_BATCHES%APPEND(BATCH(N, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,NPTRFS,IOFFSEND,IOFFRECV,IOFFGTF,SENDCNTMAX,RECVCNTMAX))

SELECT TYPE (NEW_BATCH => ACTIVE_BATCHES%TAIL%VALUE)
TYPE IS (BATCH)
CALL NEW_BATCH%START_COMM(PGP, PGTF)
CALL NEW_BATCH%START_COMM(PGP, IREQ_RECV(:,N),BGTF,ZCOMBUFS,ZCOMBUFR)
END SELECT
END SUBROUTINE ACTIVATE

Expand Down
66 changes: 41 additions & 25 deletions src/trans/cpu/internal/overlap_types_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ MODULE OVERLAP_TYPES_MOD
INTEGER(KIND=JPIM), ALLOCATABLE :: NGPTRSEND(:,:,:)
REAL(KIND=JPRB), ALLOCATABLE :: PCOMBUFS(:,:)
REAL(KIND=JPRB), ALLOCATABLE :: PCOMBUFR(:,:)
INTEGER(KIND=JPIM), ALLOCATABLE :: NREQ_RECV(:)
! INTEGER(KIND=JPIM), ALLOCATABLE :: NREQ_RECV(:)
CONTAINS
PROCEDURE :: START_COMM
PROCEDURE :: COMM_COMPLETE
Expand All @@ -65,7 +65,7 @@ MODULE OVERLAP_TYPES_MOD
! Batch methods
! -----------------------------------------------------------------------------

FUNCTION BATCH_CONSTRUCTOR(KBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,NPTRFS) RESULT(THIS)
FUNCTION BATCH_CONSTRUCTOR(KBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,NPTRFS,IOFFSEND,IOFFRECV,IOFFGTF,SENDCNTMAX,RECVCNTMAX) RESULT(THIS)
USE SHUFFLE_MOD, ONLY: SHUFFLE
USE FIELD_SPLIT_MOD, ONLY: FIELD_SPLIT
USE TPM_GEN, ONLY: NPROMATR, NOUT
Expand All @@ -82,6 +82,8 @@ FUNCTION BATCH_CONSTRUCTOR(KBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,
INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KVSETUV(:)
INTEGER(KIND=JPIM), OPTIONAL, INTENT(IN) :: KVSETSC(:)
INTEGER(KIND=JPIM), ALLOCATABLE :: NPTRFS(:)
INTEGER(KIND=JPIM), INTENT(INOUT) :: IOFFSEND,IOFFRECV,IOFFGTF
INTEGER(KIND=JPIM), INTENT(IN) :: SENDCNTMAX,RECVCNTMAX

INTEGER :: JFLD, IST

Expand Down Expand Up @@ -125,12 +127,14 @@ FUNCTION BATCH_CONSTRUCTOR(KBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,

! Compute this batch's offset into PGTF
! THIS%IOFFGTF = (THIS%NBLK - 1) * NPROMATR + 1
IF(KBLK .EQ. 1) THEN
NPTRFS(1) = 1
ENDIF
NPTRFS(KBLK+1) = NPTRFS(KBLK) + THIS%NF_FS
THIS%IOFFGTF = NPTRFS(KBLK)

! IF(KBLK .EQ. 1) THEN
! NPTRFS(1) = 1
! ENDIF
! NPTRFS(KBLK+1) = NPTRFS(KBLK) + THIS%NF_GP
! THIS%IOFFGTF = NPTRFS(KBLK)
THIS%IOFFGTF = IOFFGTF
IOFFGTF = IOFFGTF + THIS%NF_FS

ALLOCATE(THIS%NVSET(THIS%NF_GP))
IST = 1
IF (THIS%NF_UV_G > 0) THEN
Expand All @@ -155,33 +159,42 @@ FUNCTION BATCH_CONSTRUCTOR(KBLK, KF_GP, KF_SCALARS_G, KF_UV_G, KVSETUV, KVSETSC,
& THIS%NNSEND, THIS%NNRECV, THIS%NSENDTOT, THIS%NRECVTOT, THIS%NSEND, &
& THIS%NRECV, THIS%NINDEX, THIS%NNDOFF, THIS%NGPTRSEND)

ALLOCATE(THIS%PCOMBUFS(-1:THIS%NSENDCOUNT,THIS%NNSEND))

! ALLOCATE(THIS%PCOMBUFS(-1:THIS%NSENDCOUNT,THIS%NNSEND))
! Now, force the OS to allocate this shared array right now, not when it starts to be used which is
! an OPEN-MP loop, that would cause a threads synchronization lock :
IF (THIS%NNSEND > 0 .AND. THIS%NSENDCOUNT >= -1) THIS%PCOMBUFS(-1,1) = HUGE(1._JPRB)

ALLOCATE(THIS%PCOMBUFR(-1:THIS%NRECVCOUNT,THIS%NNRECV))

! ALLOCATE(THIS%PCOMBUFR(-1:THIS%NRECVCOUNT,THIS%NNRECV))

ALLOCATE(THIS%NREQ_RECV(NPROC))
END FUNCTION BATCH_CONSTRUCTOR

SUBROUTINE START_COMM(THIS, PGP, PGTF)
THIS%MYOFFSEND = IOFFSEND
IOFFSEND = IOFFSEND + SENDCNTMAX
THIS%MYOFFRECV = IOFFRECV
IOFFRECV = IOFFRECV + RECVCNTMAX

END FUNCTION BATCH_CONSTRUCTOR

SUBROUTINE START_COMM(THIS, PGP, IREQ_RECV,PGTF,PCOMBUFS,PCOMBUFR)
USE TRGTOL_MOD, ONLY: TRGTOL_COMM_SEND
USE TPM_GEN, ONLY: NOUT

CLASS(BATCH), INTENT(INOUT) :: THIS
REAL(KIND=JPRB), OPTIONAL, INTENT(IN) :: PGP(:,:,:)
REAL(KIND=JPRB), INTENT(OUT) :: PGTF(:,:)

REAL(KIND=JPRB), ALLOCATABLE :: PCOMBUFR(:,:),PCOMBUFS(:,:)
INTEGER(KIND=JPIM), INTENT(INOUT) :: IREQ_RECV(:)

WRITE(NOUT,*) "DEBUG", THIS%IOFFGTF, THIS%NF_FS
FLUSH(NOUT)

CALL TRGTOL_COMM_SEND(PGTF(THIS%IOFFGTF:THIS%IOFFGTF+THIS%NF_FS-1,:), THIS%NF_FS, &
& THIS%NF_GP, THIS%NF_SCALARS_G, THIS%NVSET, THIS%NSENDCOUNT, &
CALL TRGTOL_COMM_SEND(PGTF(THIS%IOFFGTF:THIS%IOFFGTF+THIS%NF_FS-1,:), &
& PCOMBUFS(THIS%IOFFSEND:THIS%IOFFSEND+THIS%SENDCNTMAX,:), &
& PCOMBUFR(THIS%IOFFRECV:THIS%IOFFRECV+THIS%RECVCNTMAX,:), &
& THIS%NF_FS, THIS%NF_GP, THIS%NF_SCALARS_G, THIS%NVSET, THIS%NSENDCOUNT, &
& THIS%NRECVCOUNT, THIS%NNSEND, THIS%NNRECV, THIS%NSENDTOT, &
& THIS%NRECVTOT, THIS%NSEND, THIS%NRECV, THIS%NINDEX, THIS%NNDOFF, &
& THIS%NGPTRSEND, THIS%PCOMBUFS, THIS%PCOMBUFR, THIS%NREQ_RECV, &
& THIS%NGPTRSEND, THIS%MYOFFSEND, THIS%MYOFFRECV,THIS%NREQ_RECV, &
& THIS%NPTRGP, PGP)
END SUBROUTINE START_COMM

Expand All @@ -198,11 +211,11 @@ FUNCTION COMM_COMPLETE(THIS)

COMM_COMPLETE = .FALSE.
DO WHILE(.NOT. COMM_COMPLETE)
CALL MPI_TESTALL(THIS%NNRECV, THIS%NREQ_RECV(1:THIS%NNRECV), COMM_COMPLETE, ISTATS, IERROR)
CALL MPI_TESTALL(THIS%NNRECV, IREQ_RECV(1:THIS%NNRECV), COMM_COMPLETE, ISTATS, IERROR)
ENDDO
END FUNCTION COMM_COMPLETE

SUBROUTINE FINISH_COMM(THIS, PGTF, PSPVOR, PSPDIV, PSPSCALAR)
SUBROUTINE FINISH_COMM(THIS, PGTF, IREQ_RECV,PCOMBUFR,PSPVOR, PSPDIV, PSPSCALAR)
USE TRGTOL_MOD, ONLY: TRGTOL_COMM_RECV
USE FTDIR_CTL_MOD, ONLY: FTDIR_CTL_COMP
USE LTDIR_CTL_MOD, ONLY: LTDIR_CTL
Expand All @@ -212,10 +225,13 @@ SUBROUTINE FINISH_COMM(THIS, PGTF, PSPVOR, PSPDIV, PSPSCALAR)
REAL(KIND=JPRB), OPTIONAL, INTENT(INOUT) :: PSPVOR(:,:)
REAL(KIND=JPRB), OPTIONAL, INTENT(INOUT) :: PSPDIV(:,:)
REAL(KIND=JPRB), OPTIONAL, INTENT(INOUT) :: PSPSCALAR(:,:)

CALL TRGTOL_COMM_RECV(PGTF(THIS%IOFFGTF:THIS%IOFFGTF+THIS%NF_FS-1,:), THIS%NF_FS, &
& THIS%NRECVCOUNT, THIS%NNRECV, THIS%NRECVTOT, THIS%NRECV, &
& THIS%NINDEX, THIS%NNDOFF, THIS%PCOMBUFR, THIS%NREQ_RECV)
REAL(KIND=JPRB), ALLOCATABLE :: PCOMBUFR(:,:)
INTEGER(KIND=JPIM), INTENT(INOUT) :: IREQ_RECV(:)

CALL TRGTOL_COMM_RECV(PGTF(THIS%IOFFGTF:THIS%IOFFGTF+THIS%NF_FS-1,:),
& PCOMBUFR(THIS%IOFFRECV:THIS%IOFFRECV+THIS%RECVCNTMAX,:), &
& THIS%NF_FS, THIS%NRECVCOUNT, THIS%NNRECV, THIS%NRECVTOT, THIS%NRECV, &
& THIS%NINDEX, THIS%NNDOFF, THIS%MYOFFRECV, IREQ_RECV)
CALL FTDIR_CTL_COMP(PGTF(THIS%IOFFGTF:THIS%IOFFGTF+THIS%NF_FS-1,:), THIS%NF_FS)
CALL LTDIR_CTL(THIS%NF_FS, THIS%NF_UV, THIS%NF_SCALARS, PSPVOR=PSPVOR, PSPDIV=PSPDIV, &
& PSPSCALAR=PSPSCALAR, KFLDPTRUV=THIS%NPTRSPUV, KFLDPTRSC=THIS%NPTRSPSC)
Expand Down
14 changes: 9 additions & 5 deletions src/trans/cpu/internal/trgtol_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,9 @@ SUBROUTINE TRGTOL_PROLOG(KF_FS,KF_GP,KVSET,&

END SUBROUTINE TRGTOL_PROLOG

SUBROUTINE TRGTOL_COMM_SEND(PGLAT,KF_FS,KF_GP,KF_SCALARS_G,KVSET,&
SUBROUTINE TRGTOL_COMM_SEND(PGLAT,PCOMBUFS,PCOMBUFR,KF_FS,KF_GP,KF_SCALARS_G,KVSET,&
& KSENDCOUNT,KRECVCOUNT,KNSEND,KNRECV,KSENDTOT,KRECVTOT,KSEND,KRECV,KINDEX,KNDOFF,KGPTRSEND,&
& PCOMBUFS,PCOMBUFR, KREQ_RECV, &
& KREQ_RECV, &
& KPTRGP,PGP,PGPUV,PGP3A,PGP3B,PGP2)

!**** *TRGTOL_COMM * - transposition of grid point data from column
Expand Down Expand Up @@ -687,13 +687,16 @@ SUBROUTINE TRGTOL_COMM_SEND(PGLAT,KF_FS,KF_GP,KF_SCALARS_G,KVSET,&
CALL MPL_SEND(PCOMBUFS(-1:KSENDTOT(ISEND),INS),KDEST=NPRCIDS(ISEND), &
& KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=IREQ_SEND(INS), &
& KTAG=ITAG,CDSTRING='TRGTOL_COMM: NON-BLOCKING ISEND' )
! CALL MPL_SEND(PCOMBUFS(-1:KSENDTOT(ISEND),INS),KDEST=NPRCIDS(ISEND), &
! & KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=IREQ_SEND(INS), &
! & KTAG=ITAG,CDSTRING='TRGTOL_COMM: NON-BLOCKING ISEND' )

ENDDO

END SUBROUTINE TRGTOL_COMM_SEND

SUBROUTINE TRGTOL_COMM_RECV(PGLAT, KF_FS, KRECVCOUNT, KNRECV, KRECVTOT, KRECV, KINDEX, KNDOFF, &
& PCOMBUFR, KREQ_RECV)
SUBROUTINE TRGTOL_COMM_RECV(PGLAT, PCOMBUFR,KF_FS, KRECVCOUNT, KNRECV, KRECVTOT, KRECV, KINDEX, &
& KNDOFF, KREQ_RECV)

USE PARKIND1, ONLY: JPRB, JPIM
USE TPM_DISTR, ONLY: D, NPROC
Expand All @@ -708,6 +711,7 @@ SUBROUTINE TRGTOL_COMM_RECV(PGLAT, KF_FS, KRECVCOUNT, KNRECV, KRECVTOT, KRECV, K
INTEGER(KIND=JPIM), INTENT(IN) :: KINDEX(D%NLENGTF)
INTEGER(KIND=JPIM), INTENT(IN) :: KNDOFF(NPROC)
INTEGER(KIND=JPIM), INTENT(IN) :: KRECVTOT(NPROC)
INTEGER(KIND=JPIM), INTENT(IN) :: MYOFFRECV
REAL(KIND=JPRB), INTENT(INOUT) :: PCOMBUFR(-1:KRECVCOUNT,KNRECV)
INTEGER(KIND=JPIM), INTENT(INOUT) :: KREQ_RECV(:)

Expand All @@ -724,7 +728,7 @@ SUBROUTINE TRGTOL_COMM_RECV(PGLAT, KF_FS, KRECVCOUNT, KNRECV, KRECVTOT, KRECV, K
DO JL = 1, ILEN
II = KINDEX(KNDOFF(IRECV)+JL)
DO JFLD = IRECV_FLD_START, IRECV_FLD_END
PGLAT(JFLD,II) = PCOMBUFR(JL+(JFLD-IRECV_FLD_START)*ILEN,JNR)
PGLAT(JFLD,II) = ZCOMBUFR(JL+MYOFFRECV+(JFLD-IRECV_FLD_START)*ILEN,JNR)
ENDDO
ENDDO
!$OMP END PARALLEL DO
Expand Down

0 comments on commit f917c2e

Please sign in to comment.