diff --git a/src/trans/cpu/external/dist_grid_32.F90 b/src/trans/cpu/external/dist_grid_32.F90 deleted file mode 100644 index 3c3cf4543..000000000 --- a/src/trans/cpu/external/dist_grid_32.F90 +++ /dev/null @@ -1,139 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -SUBROUTINE DIST_GRID_32(PGPG,KPROMA,KFDISTG,KFROM,KRESOL,PGP) - -!**** *DIST_GRID_32* - Distribute global gridpoint array among processors - -! Purpose. -! -------- -! Interface routine for distributing gridpoint array - -!** Interface. -! ---------- -! CALL DIST_GRID_32(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global spectral array -! KFDISTG - Global number of fields to be distributed -! KPROMA - required blocking factor for gridpoint input -! KFROM(:) - Processor resposible for distributing each field -! KRESOL - resolution tag which is required ,default is the -! first defined resolution (input) -! PGP(:,:) - Local spectral array -! -! Method. -! ------- - -! Externals. SET_RESOL - set resolution -! ---------- DIST_GRID_32_CTL - control routine - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 00-03-03 - -! ------------------------------------------------------------------ - -USE PARKIND1 ,ONLY : JPIM ,JPRM ,JPRB - -!ifndef INTERFACE - -USE TPM_GEN, ONLY : NERR, NOUT -USE TPM_DISTR, ONLY : D, NPROC, MYPROC - -USE SET_RESOL_MOD, ONLY : SET_RESOL -USE DIST_GRID_32_CTL_MOD, ONLY : DIST_GRID_32_CTL -USE ABORT_TRANS_MOD, ONLY : ABORT_TRANS -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK, JPHOOK - -!endif INTERFACE - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(IN) :: PGPG(:,:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFDISTG -INTEGER(KIND=JPIM) , INTENT(IN) :: KFROM(:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL -REAL(KIND=JPRM) , INTENT(OUT) :: PGP(:,:,:) - -!ifndef INTERFACE - -INTEGER(KIND=JPIM) :: IFSEND,J,IUBOUND(3),IPROMA,IGPBLKS -REAL(KIND=JPHOOK) :: ZHOOK_HANDLE - -! ------------------------------------------------------------------ - -IF (LHOOK) CALL DR_HOOK('DIST_GRID_32',0,ZHOOK_HANDLE) -! Set current resolution -CALL SET_RESOL(KRESOL) - -IPROMA = D%NGPTOT -IF(PRESENT(KPROMA)) THEN - IPROMA = KPROMA -ENDIF -IGPBLKS = (D%NGPTOT-1)/IPROMA+1 - -IF(UBOUND(KFROM,1) < KFDISTG) THEN - CALL ABORT_TRANS('DIST_GRID_32: KFROM TOO SHORT!') -ENDIF - -IFSEND = 0 -DO J=1,KFDISTG - IF(KFROM(J) < 1 .OR. KFROM(J) > NPROC) THEN - WRITE(NERR,*) 'DIST_GRID_32:ILLEGAL KFROM VALUE',KFROM(J),J - CALL ABORT_TRANS('DIST_GRID_32:ILLEGAL KFROM VALUE') - ENDIF - IF(KFROM(J) == MYPROC) IFSEND = IFSEND+1 -ENDDO - -IUBOUND=UBOUND(PGP) -IF(IUBOUND(1) < IPROMA) THEN - WRITE(NOUT,*)'DIST_GRID_32:FIRST DIM. OF PGP TOO SMALL ',IUBOUND(1),IPROMA - CALL ABORT_TRANS('DIST_GRID_32:FIRST DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(2) < KFDISTG) THEN - WRITE(NOUT,*)'DIST_GRID_32:SEC. DIM. OF PGP TOO SMALL ',IUBOUND(2),KFDISTG - CALL ABORT_TRANS('DIST_GRID_32:SECOND DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(3) < IGPBLKS) THEN - WRITE(NOUT,*)'DIST_GRID_32:THIRD DIM. OF PGP TOO SMALL ',IUBOUND(3),IGPBLKS - CALL ABORT_TRANS('DIST_GRID_32:THIRD DIMENSION OF PGP TOO SMALL ') -ENDIF - -IF(IFSEND > 0) THEN - IF(.NOT.PRESENT(PGPG)) THEN - CALL ABORT_TRANS('DIST_GRID_32:PGPG MISSING') - ENDIF - IF(UBOUND(PGPG,1) < D%NGPTOTG) THEN - CALL ABORT_TRANS('DIST_GRID_32:FIRST DIMENSION OF PGPG TOO SMALL') - ENDIF - IF(UBOUND(PGPG,2) < IFSEND) THEN - CALL ABORT_TRANS('DIST_GRID_32:FIRST DIMENSION OF PGPG TOO SMALL') - ENDIF -ENDIF - - -CALL DIST_GRID_32_CTL(PGPG,KFDISTG,IPROMA,KFROM,PGP) - -IF (LHOOK) CALL DR_HOOK('DIST_GRID_32',1,ZHOOK_HANDLE) -!endif INTERFACE - -! ------------------------------------------------------------------ - -END SUBROUTINE DIST_GRID_32 - diff --git a/src/trans/cpu/external/gath_grid_32.F90 b/src/trans/cpu/external/gath_grid_32.F90 deleted file mode 100644 index 39f36f04e..000000000 --- a/src/trans/cpu/external/gath_grid_32.F90 +++ /dev/null @@ -1,139 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -SUBROUTINE GATH_GRID_32(PGPG,KPROMA,KFGATHG,KTO,KRESOL,PGP) - -!**** *GATH_GRID_32* - Gather global gridpoint array from processors - -! Purpose. -! -------- -! Interface routine for gathering gripoint array - -!** Interface. -! ---------- -! CALL GATH_GRID_32(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFGATHG - Global number of fields to be gathered -! KPROMA - blocking factor for gridpoint input -! KTO(:) - Processor responsible for gathering each field -! KRESOL - resolution tag which is required ,default is the -! first defined resolution (input) -! PGP(:,:,:) - Local spectral array -! -! Method. -! ------- - -! Externals. SET_RESOL - set resolution -! ---------- GATH_GRID_32_CTL - control routine - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 00-03-03 - -! ------------------------------------------------------------------ - -USE PARKIND1 ,ONLY : JPIM ,JPRB ,JPRM - -!ifndef INTERFACE - -USE TPM_GEN, ONLY : NERR,NOUT -USE TPM_DISTR, ONLY : D, NPROC, MYPROC - -USE SET_RESOL_MOD, ONLY: SET_RESOL -USE GATH_GRID_32_CTL_MOD, ONLY: GATH_GRID_32_CTL -USE ABORT_TRANS_MOD, ONLY: ABORT_TRANS -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK, JPHOOK - -!endif INTERFACE - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(OUT) :: PGPG(:,:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFGATHG -INTEGER(KIND=JPIM) , INTENT(IN) :: KTO(:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL -REAL(KIND=JPRM) , INTENT(IN) :: PGP(:,:,:) - -!ifndef INTERFACE - -INTEGER(KIND=JPIM) :: IFRECV,J,IUBOUND(3),IPROMA,IGPBLKS -REAL(KIND=JPHOOK) :: ZHOOK_HANDLE - -! ------------------------------------------------------------------ - -IF (LHOOK) CALL DR_HOOK('GATH_GRID_32',0,ZHOOK_HANDLE) -! Set current resolution -CALL SET_RESOL(KRESOL) - -IPROMA = D%NGPTOT -IF(PRESENT(KPROMA)) THEN - IPROMA = KPROMA -ENDIF -IGPBLKS = (D%NGPTOT-1)/IPROMA+1 - - -IF(UBOUND(KTO,1) < KFGATHG) THEN - CALL ABORT_TRANS('GATH_GRID_32: KTO TOO SHORT!') -ENDIF - -IFRECV = 0 -DO J=1,KFGATHG - IF(KTO(J) < 1 .OR. KTO(J) > NPROC) THEN - WRITE(NERR,*) 'GATH_GRID_32:ILLEGAL KTO VALUE',KTO(J),J - CALL ABORT_TRANS('GATH_GRID_32:ILLEGAL KTO VALUE') - ENDIF - IF(KTO(J) == MYPROC) IFRECV = IFRECV+1 -ENDDO - -IUBOUND=UBOUND(PGP) -IF(IUBOUND(1) < IPROMA) THEN - WRITE(NOUT,*)'GATH_GRID_32:FIRST DIM. OF PGP TOO SMALL ',IUBOUND(1),IPROMA - CALL ABORT_TRANS('GATH_GRID_32:FIRST DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(2) < KFGATHG) THEN - WRITE(NOUT,*)'GATH_GRID_32:SEC. DIM. OF PGP TOO SMALL ',IUBOUND(2),KFGATHG - CALL ABORT_TRANS('GATH_GRID_32:SECOND DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(3) < IGPBLKS) THEN - WRITE(NOUT,*)'GATH_GRID_32:THIRD DIM. OF PGP TOO SMALL ',IUBOUND(3),IGPBLKS - CALL ABORT_TRANS('GATH_GRID_32:THIRD DIMENSION OF PGP TOO SMALL ') -ENDIF - -IF(IFRECV > 0) THEN - IF(.NOT.PRESENT(PGPG)) THEN - CALL ABORT_TRANS('GATH_GRID_32:PGPG MISSING') - ENDIF - IF(UBOUND(PGPG,1) < D%NGPTOTG) THEN - CALL ABORT_TRANS('GATH_GRID_32:FIRST DIMENSION OF PGPG TOO SMALL') - ENDIF - IF(UBOUND(PGPG,2) < IFRECV) THEN - CALL ABORT_TRANS('GATH_GRID_32:SECOND DIMENSION OF PGPG TOO SMALL') - ENDIF -ENDIF - -CALL GATH_GRID_32_CTL(PGPG,KFGATHG,IPROMA,KTO,PGP) - -IF (LHOOK) CALL DR_HOOK('GATH_GRID_32',1,ZHOOK_HANDLE) -!endif INTERFACE - -! ------------------------------------------------------------------ - -END SUBROUTINE GATH_GRID_32 - diff --git a/src/trans/cpu/internal/dist_grid_32_ctl_mod.F90 b/src/trans/cpu/internal/dist_grid_32_ctl_mod.F90 deleted file mode 100644 index 61465eb13..000000000 --- a/src/trans/cpu/internal/dist_grid_32_ctl_mod.F90 +++ /dev/null @@ -1,261 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -MODULE DIST_GRID_32_CTL_MOD -CONTAINS -SUBROUTINE DIST_GRID_32_CTL(PGPG,KFDISTG,KPROMA,KFROM,PGP) - -!**** *DIST_GRID_32_CTL* - Distributing global gridpoint array to processors - -! Purpose. -! -------- -! Routine for distributing gridpoint array - -!** Interface. -! ---------- -! CALL DIST_GRID_32_CTL(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFDISTG - Global number of fields to be distributed -! KPROMA - required blocking factor for gridpoint output -! KFROM(:) - Processor responsible for distributing each field -! PGP(:,:,:) - Local spectral array - -! Externals. SET2PE - compute "A and B" set from PE -! ---------- MPL.. - message passing routines - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 2000-04-01 - -! ------------------------------------------------------------------ - -USE PARKIND1 ,ONLY : JPIM ,JPRM -USE MPL_MODULE - -USE TPM_DISTR ,ONLY : D, NPROC, MYPROC, NPRCIDS, MTAGDISTGP -USE TPM_GEOMETRY, ONLY : G - -USE SET2PE_MOD, ONLY : SET2PE -USE ABORT_TRANS_MOD, ONLY: ABORT_TRANS -USE EQ_REGIONS_MOD, ONLY : N_REGIONS, N_REGIONS_NS - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(IN) :: PGPG(:,:) -INTEGER(KIND=JPIM) , INTENT(IN) :: KFDISTG -INTEGER(KIND=JPIM) , INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFROM(:) -REAL(KIND=JPRM) , INTENT(OUT) :: PGP(:,:,:) - -! Declaration of local variables - -REAL(KIND=JPRM),ALLOCATABLE :: ZBUF(:,:,:),ZRCV2(:,:) -REAL(KIND=JPRM) :: ZRCV(D%NGPTOTMX,KFDISTG) -INTEGER(KIND=JPIM) :: JFLD,JB,JA,IGLOFF,IGL1,IGL2,IOFF,ILAST,ILOFF,ILENR -INTEGER(KIND=JPIM) :: JGL,JLON,ISND,ITAG,J,IRCV -INTEGER(KIND=JPIM) :: JKGLO,IEND,JROF,IBL,JROC -INTEGER(KIND=JPIM) :: ISENDREQ(NPROC,KFDISTG),ILEN(NPROC,KFDISTG) -INTEGER(KIND=JPIM) :: IFROM,IMYFIELDS,IFLD,IFLDSFROM(NPROC) -LOGICAL :: LLSAME - -! ------------------------------------------------------------------ - -! Copy for single PE - -IF(NPROC == 1) THEN -!$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JFLD=1,KFDISTG - DO JROF=1,IEND - PGP(JROF,JFLD,IBL) = PGPG(IOFF+JROF,JFLD) - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - -ELSEIF(KFDISTG>0) THEN - -! test if values in KFROM are all the same - LLSAME=.TRUE. - IFROM=KFROM(1) - DO JFLD=2,KFDISTG - IF(KFROM(JFLD) /= IFROM) THEN - LLSAME=.FALSE. - EXIT - ENDIF - ENDDO - - IMYFIELDS = 0 - DO JFLD=1,KFDISTG - IF(KFROM(JFLD) == MYPROC) THEN - IMYFIELDS = IMYFIELDS+1 - ENDIF - ENDDO - - CALL GSTATS(1663,0) - IF(IMYFIELDS > 0) THEN - ALLOCATE(ZBUF(D%NGPTOTMX,IMYFIELDS,NPROC)) - -!$OMP PARALLEL DO SCHEDULE(DYNAMIC,1)& -!$OMP&PRIVATE(JFLD,JA,JB,ISND,IGLOFF,IGL1,IGL2,IOFF,ILAST,J,& -!$OMP&ILOFF,JGL,JLON) - DO JFLD=1,IMYFIELDS - DO JA=1,N_REGIONS_NS - DO JB=1,N_REGIONS(JA) - CALL SET2PE(ISND,JA,JB,0,0) - - IGLOFF = D%NPTRFRSTLAT(JA) - IGL1 = D%NFRSTLAT(JA) - IGL2 = D%NLSTLAT(JA) - IOFF = 0 - IF(JA > 1) THEN - IF( D%NLSTLAT(JA-1) == D%NFRSTLAT(JA) )THEN - ILAST = D%NLSTLAT(JA-1)-1 - ELSE - ILAST = D%NLSTLAT(JA-1) - ENDIF - DO J=D%NFRSTLAT(1),ILAST - IOFF = IOFF+G%NLOEN(J) - ENDDO - ENDIF - - ILEN(ISND,JFLD) = 0 - ILOFF = 0 - DO JGL=IGL1,IGL2 - DO JLON=1,D%NONL(IGLOFF+JGL-IGL1,JB) - ZBUF(ILEN(ISND,JFLD)+JLON,JFLD,ISND) = & - & PGPG(IOFF+ILOFF+D%NSTA(IGLOFF+JGL-IGL1,JB)+JLON-1,JFLD) - ENDDO - ILEN(ISND,JFLD) = ILEN(ISND,JFLD) + D%NONL(IGLOFF+JGL-IGL1,JB) - ILOFF = ILOFF + G%NLOEN(JGL) - ENDDO - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - ENDIF - CALL GSTATS(1663,1) - - ! Message passing - CALL GSTATS_BARRIER(791) - CALL GSTATS(811,0) - ! Send - IF( LLSAME )THEN - IF(KFROM(1) == MYPROC) THEN - ITAG = MTAGDISTGP - DO JROC=1,NPROC - CALL MPL_SEND(ZBUF(:,:,JROC),KDEST=NPRCIDS(JROC),KTAG=ITAG,& - &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(JROC,1),& - &CDSTRING='DIST_GRID_32_CTL') - ENDDO - ENDIF - ELSE - IF(IMYFIELDS > 0) THEN - ITAG = MTAGDISTGP - DO JROC=1,NPROC - CALL MPL_SEND(ZBUF(:,:,JROC),KDEST=NPRCIDS(JROC),KTAG=ITAG,& - &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(JROC,1),& - &CDSTRING='DIST_GRID_32_CTL') - ENDDO - ENDIF - ENDIF - - ! Receive - - IF( LLSAME )THEN - IRCV = KFROM(1) - ITAG = MTAGDISTGP - CALL MPL_RECV(ZRCV,KSOURCE=NPRCIDS(IRCV),KTAG=ITAG,& - &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILENR,CDSTRING='DIST_GRID_32_CTL:') - IF( ILENR /= D%NGPTOTMX*KFDISTG )THEN - CALL ABORT_TRANS(' DIST_GRID_32_CTL: INVALID RECEIVE MESSAGE LENGTH 1') - ENDIF - ELSE - IFLDSFROM(:)=0 - DO JFLD=1,KFDISTG - IFLDSFROM(KFROM(JFLD)) = IFLDSFROM(KFROM(JFLD))+1 - ENDDO - ITAG = MTAGDISTGP - DO JROC=1,NPROC - IF(IFLDSFROM(JROC) > 0 ) THEN - IRCV = JROC - ALLOCATE(ZRCV2(D%NGPTOTMX,IFLDSFROM(JROC))) - CALL MPL_RECV(ZRCV2,KSOURCE=NPRCIDS(IRCV),KTAG=ITAG,& - &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILENR,CDSTRING='DIST_GRID_32_CTL:') - IF( ILENR /= D%NGPTOTMX*IFLDSFROM(JROC) )THEN - CALL ABORT_TRANS(' DIST_GRID_32_CTL: INVALID RECEIVE MESSAGE LENGTH 2') - ENDIF - IFLD = 0 - DO JFLD=1,KFDISTG - IF(KFROM(JFLD) == JROC) THEN - IFLD = IFLD+1 - ZRCV(1:D%NGPTOT,JFLD) = ZRCV2(1:D%NGPTOT,IFLD) - ENDIF - ENDDO - DEALLOCATE(ZRCV2) - ENDIF - ENDDO - ENDIF - -! Wait for send to complete - - IF( LLSAME )THEN - IF(KFROM(1) == MYPROC) THEN - CALL MPL_WAIT(KREQUEST=ISENDREQ(:,1), & - & CDSTRING='DIST_GRID_32_CTL: WAIT 1') - ENDIF - ELSEIF(IMYFIELDS > 0) THEN - CALL MPL_WAIT(KREQUEST=ISENDREQ(:,1), & - & CDSTRING='DIST_GRID_32_CTL: WAIT 2') - ENDIF - CALL GSTATS(811,1) - CALL GSTATS_BARRIER2(791) - - CALL GSTATS(1663,0) -!$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JFLD=1,KFDISTG - DO JROF=1,IEND - PGP(JROF,JFLD,IBL) = ZRCV(IOFF+JROF,JFLD) - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - CALL GSTATS(1663,1) - !Synchronize processors - CALL GSTATS(786,0) - CALL MPL_BARRIER(CDSTRING='DIST_GRID_32_CTL:') - CALL GSTATS(786,1) - IF(ALLOCATED(ZBUF)) DEALLOCATE(ZBUF) -ENDIF - -! ------------------------------------------------------------------ - -END SUBROUTINE DIST_GRID_32_CTL -END MODULE DIST_GRID_32_CTL_MOD - - - - diff --git a/src/trans/cpu/internal/gath_grid_32_ctl_mod.F90 b/src/trans/cpu/internal/gath_grid_32_ctl_mod.F90 deleted file mode 100644 index c1b1bc7e1..000000000 --- a/src/trans/cpu/internal/gath_grid_32_ctl_mod.F90 +++ /dev/null @@ -1,276 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -MODULE GATH_GRID_32_CTL_MOD -CONTAINS -SUBROUTINE GATH_GRID_32_CTL(PGPG,KFGATHG,KPROMA,KTO,PGP) - -!**** *GATH_GRID_32_CTL* - Gather global gridpoint array from processors - -! Purpose. -! -------- -! Routine for gathering gridpoint array - -!** Interface. -! ---------- -! CALL GATH_GRID_32_CTL(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFGATHG - Global number of fields to be gathered -! KPROMA - blocking factor for gridpoint input -! KTO(:) - Processor responsible for gathering each field -! PGP(:,:,:) - Local spectral array -! -! ------------------------------------------------------------------ - - -USE PARKIND1 ,ONLY : JPIM ,JPRM -USE MPL_MODULE - -USE TPM_GEOMETRY, ONLY: G -USE TPM_DISTR, ONLY: D, NPROC, MTAGDISTSP, NPRCIDS, MYPROC - -USE SET2PE_MOD, ONLY: SET2PE -USE EQ_REGIONS_MOD, ONLY: N_REGIONS_NS, N_REGIONS - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(OUT) :: PGPG(:,:) -INTEGER(KIND=JPIM) , INTENT(IN) :: KFGATHG -INTEGER(KIND=JPIM) , INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KTO(:) -REAL(KIND=JPRM) , INTENT(IN) :: PGP(:,:,:) - -! Declaration of local variables - -REAL(KIND=JPRM) :: ZFLD(D%NGPTOTMX*KFGATHG) -REAL(KIND=JPRM),ALLOCATABLE :: ZBUF(:) -INTEGER(KIND=JPIM) :: IFLDR,JFLD,ITAG,ILEN,JA,JB,ISND,JGL,JLON,ILOFF -INTEGER(KIND=JPIM) :: IRCV,IOFF,ILAST,IGL1,IGL2,IGLOFF -INTEGER(KIND=JPIM) :: JKGLO,JROF,IEND,J,IBL,IPROC,JROC,IMYFIELDS,ILRECV -INTEGER(KIND=JPIM) :: ISENDREQ(NPROC),ITO -INTEGER(KIND=JPIM) :: ILENS(NPROC),IOFFS(NPROC),ILENR(NPROC),IOFFR(NPROC) -INTEGER(KIND=JPIM) :: IFLDL,IFLDS -LOGICAL :: LLSAME -! ------------------------------------------------------------------ - - -!GATHER SPECTRAL ARRAY - -IF( NPROC == 1 ) THEN - CALL GSTATS(1643,0) -!$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JFLD=1,KFGATHG - DO JROF=1,IEND - PGPG(IOFF+JROF,JFLD) = PGP(JROF,JFLD,IBL) - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - CALL GSTATS(1643,1) - -ELSE -! test if values in KTO are all the same - LLSAME=.TRUE. - ITO=KTO(1) - DO JFLD=2,KFGATHG - IF(KTO(JFLD) /= ITO) THEN - LLSAME=.FALSE. - EXIT - ENDIF - ENDDO - IFLDL=D%NGPTOTMX - IF(LLSAME) THEN - CALL GSTATS(1643,0) - !$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JFLD=1,KFGATHG - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JROF=1,IEND - ZFLD(IOFF+JROF+(JFLD-1)*IFLDL) = PGP(JROF,JFLD,IBL) - ENDDO - ENDDO - ENDDO - !$OMP END PARALLEL DO - CALL GSTATS(1643,1) - ELSE - ILENS(:)=0 - IOFFS(:)=0 - ILENR(:)=0 - IOFFR(:)=0 - DO JFLD=1,KFGATHG - ILENS(KTO(JFLD))=ILENS(KTO(JFLD))+IFLDL - IF(KTO(JFLD) == MYPROC) THEN - ILENR(:)=ILENR(:)+IFLDL - ENDIF - ENDDO - DO JROC=2,NPROC - IOFFR(JROC)=IOFFR(JROC-1)+ ILENR(JROC-1) - IOFFS(JROC)=IOFFS(JROC-1)+ ILENS(JROC-1) - ENDDO - IFLDS=0 - DO JROC=1,NPROC - IF(ILENS(JROC) > 0) THEN - DO JFLD=1,KFGATHG - IF(KTO(JFLD) == JROC) THEN - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JROF=1,IEND - ZFLD(IOFF+JROF+IFLDS*IFLDL) = PGP(JROF,JFLD,IBL) - ENDDO - ENDDO - IFLDS=IFLDS+1 - ENDIF - ENDDO - ENDIF - ENDDO - ENDIF - - IMYFIELDS = 0 - DO JFLD=1,KFGATHG - IF(KTO(JFLD) == MYPROC) THEN - IMYFIELDS = IMYFIELDS+1 - ENDIF - ENDDO - - IF(IMYFIELDS > 0) THEN - ALLOCATE(ZBUF(D%NGPTOTMX*IMYFIELDS*NPROC)) - ELSE - ALLOCATE(ZBUF(1)) - ENDIF - IFLDR = 0 - CALL GSTATS_BARRIER(789) - CALL GSTATS(809,0) - - IF( LLSAME )THEN - !Send - ISND = KTO(1) - ITAG = MTAGDISTSP+1+17 - CALL MPL_SEND(ZFLD,KDEST=NPRCIDS(ISND),KTAG=ITAG,& - &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(1),& - &CDSTRING='GATH_GRID_32_CTL:') - - ! RECIEVE - IF(KTO(1) == MYPROC) THEN - IFLDR = KFGATHG - DO JROC=1,NPROC - ITAG = MTAGDISTSP+1+17 - IRCV = JROC - IOFF=IFLDL*KFGATHG*(JROC-1) - CALL MPL_RECV(ZBUF(IOFF+1:IOFF+IFLDL*KFGATHG),KSOURCE=NPRCIDS(IRCV),& - &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILRECV,& - &KTAG=ITAG,CDSTRING='GATH_GRID_32_CTL:') - ENDDO - ENDIF - CALL MPL_WAIT(KREQUEST=ISENDREQ(1), & - & CDSTRING='GATH_GRID_32_CTL: WAIT') - ELSE - IFLDR=IMYFIELDS - CALL MPL_ALLTOALLV(PSENDBUF=ZFLD,KSENDCOUNTS=ILENS,& - & PRECVBUF=ZBUF,KRECVCOUNTS=ILENR,KSENDDISPL=IOFFS,KRECVDISPL=IOFFR,& - & CDSTRING='GATH_GRID_32_CTL:') -!!$ ITAG = MTAGDISTSP+1+17 -!!$ DO JROC=1,NPROC -!!$ ISND=JROC -!!$ IOFF=IOFFS(JROC) -!!$ ILEN=ILENS(JROC) -!!$ IF(ILEN > 0 ) THEN -!!$ CALL MPL_SEND(ZFLD(IOFF+1:IOFF+ILEN),KDEST=NPRCIDS(ISND),KTAG=ITAG,& -!!$ &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(ISND),& -!!$ &CDSTRING='GATH_GRID_32_CTL:') -!!$ ENDIF -!!$ ENDDO -!!$ DO JROC=1,NPROC -!!$ IRCV = JROC -!!$ IOFF = IOFFR(JROC) -!!$ ILEN = ILENR(JROC) -!!$ IF(ILEN > 0 ) THEN -!!$ CALL MPL_RECV(ZBUF(IOFF+1:IOFF+ILEN),KSOURCE=NPRCIDS(IRCV),& -!!$ &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILRECV,& -!!$ &KTAG=ITAG,CDSTRING='GATH_GRID_32_CTL:') -!!$ ENDIF -!!$ ENDDO -!!$ DO JROC=1,NPROC -!!$ ISND=JROC -!!$ ILEN=ILENS(JROC) -!!$ IF(ILEN > 0 ) THEN -!!$ CALL MPL_WAIT(KREQUEST=ISENDREQ(JROC), & -!!$ & CDSTRING='GATH_GRID_32_CTL: WAIT') -!!$ ENDIF -!!$ ENDDO - ENDIF - - CALL GSTATS(809,1) - CALL GSTATS_BARRIER2(789) - CALL GSTATS(1643,0) -!$OMP PARALLEL DO SCHEDULE(DYNAMIC,1)& -!$OMP&PRIVATE(JA,JB,IPROC,IGLOFF,IGL1,IGL2,IOFF,ILAST,J,& -!$OMP&ILEN,ILOFF,JGL,JLON,JFLD) - DO JFLD=1,IFLDR - DO JA=1,N_REGIONS_NS - DO JB=1,N_REGIONS(JA) - CALL SET2PE(IPROC,JA,JB,0,0) - IGLOFF = D%NPTRFRSTLAT(JA) - IGL1 = D%NFRSTLAT(JA) - IGL2 = D%NLSTLAT(JA) - IOFF = 0 - IF(JA > 1) THEN - IF( D%NLSTLAT(JA-1) == D%NFRSTLAT(JA) )THEN - ILAST = D%NLSTLAT(JA-1)-1 - ELSE - ILAST = D%NLSTLAT(JA-1) - ENDIF - DO J=D%NFRSTLAT(1),ILAST - IOFF = IOFF+G%NLOEN(J) - ENDDO - ENDIF - - ILEN = 0 - ILOFF = 0 - DO JGL=IGL1,IGL2 - DO JLON=1,D%NONL(IGLOFF+JGL-IGL1,JB) - PGPG(IOFF+ILOFF+D%NSTA(IGLOFF+JGL-IGL1,JB)+JLON-1,JFLD) = & - & ZBUF(ILEN+JLON+(JFLD-1)*IFLDL+(IPROC-1)*IFLDL*IMYFIELDS) - ENDDO - ILEN = ILEN + D%NONL(IGLOFF+JGL-IGL1,JB) - ILOFF = ILOFF + G%NLOEN(JGL) - ENDDO - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - - CALL GSTATS(1643,1) -! Synhronize processors -! Should not be necessary -!!$ CALL GSTATS(784,0) -!!$ CALL MPL_BARRIER(CDSTRING='GATH_GRID_32_CTL:') -!!$ CALL GSTATS(784,1) - IF(ALLOCATED(ZBUF)) DEALLOCATE(ZBUF) -ENDIF - -! ------------------------------------------------------------------ - -END SUBROUTINE GATH_GRID_32_CTL -END MODULE GATH_GRID_32_CTL_MOD - - diff --git a/src/trans/gpu/external/dist_grid_32.F90 b/src/trans/gpu/external/dist_grid_32.F90 deleted file mode 100755 index 59ce26b8b..000000000 --- a/src/trans/gpu/external/dist_grid_32.F90 +++ /dev/null @@ -1,138 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -SUBROUTINE DIST_GRID_32(PGPG,KPROMA,KFDISTG,KFROM,KRESOL,PGP) - -!**** *DIST_GRID_32* - Distribute global gridpoint array among processors - -! Purpose. -! -------- -! Interface routine for distributing gridpoint array - -!** Interface. -! ---------- -! CALL DIST_GRID_32(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global spectral array -! KFDISTG - Global number of fields to be distributed -! KPROMA - required blocking factor for gridpoint input -! KFROM(:) - Processor resposible for distributing each field -! KRESOL - resolution tag which is required ,default is the -! first defined resolution (input) -! PGP(:,:) - Local spectral array -! -! Method. -! ------- - -! Externals. SET_RESOL - set resolution -! ---------- DIST_GRID_32_CTL - control routine - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 00-03-03 - -! ------------------------------------------------------------------ - -USE PARKIND1, ONLY: JPIM, JPRM - -!ifndef INTERFACE - -USE TPM_GEN, ONLY: NERR, NOUT -USE TPM_DISTR, ONLY: D, NPROC, MYPROC -USE SET_RESOL_MOD, ONLY: SET_RESOL -USE DIST_GRID_32_CTL_MOD, ONLY: DIST_GRID_32_CTL -USE ABORT_TRANS_MOD, ONLY: ABORT_TRANS -USE YOMHOOK, ONLY: LHOOK, DR_HOOK, JPHOOK - -!endif INTERFACE - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(IN) :: PGPG(:,:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFDISTG -INTEGER(KIND=JPIM) , INTENT(IN) :: KFROM(:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL -REAL(KIND=JPRM) , INTENT(OUT) :: PGP(:,:,:) - -!ifndef INTERFACE - -INTEGER(KIND=JPIM) :: IFSEND,J,IUBOUND(3),IPROMA,IGPBLKS -REAL(KIND=JPHOOK) :: ZHOOK_HANDLE - -! ------------------------------------------------------------------ - -IF (LHOOK) CALL DR_HOOK('DIST_GRID_32',0,ZHOOK_HANDLE) -! Set current resolution -CALL SET_RESOL(KRESOL) - -IPROMA = D%NGPTOT -IF(PRESENT(KPROMA)) THEN - IPROMA = KPROMA -ENDIF -IGPBLKS = (D%NGPTOT-1)/IPROMA+1 - -IF(UBOUND(KFROM,1) < KFDISTG) THEN - CALL ABORT_TRANS('DIST_GRID_32: KFROM TOO SHORT!') -ENDIF - -IFSEND = 0 -DO J=1,KFDISTG - IF(KFROM(J) < 1 .OR. KFROM(J) > NPROC) THEN - WRITE(NERR,*) 'DIST_GRID_32:ILLEGAL KFROM VALUE',KFROM(J),J - CALL ABORT_TRANS('DIST_GRID_32:ILLEGAL KFROM VALUE') - ENDIF - IF(KFROM(J) == MYPROC) IFSEND = IFSEND+1 -ENDDO - -IUBOUND=UBOUND(PGP) -IF(IUBOUND(1) < IPROMA) THEN - WRITE(NOUT,*)'DIST_GRID_32:FIRST DIM. OF PGP TOO SMALL ',IUBOUND(1),IPROMA - CALL ABORT_TRANS('DIST_GRID_32:FIRST DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(2) < KFDISTG) THEN - WRITE(NOUT,*)'DIST_GRID_32:SEC. DIM. OF PGP TOO SMALL ',IUBOUND(2),KFDISTG - CALL ABORT_TRANS('DIST_GRID_32:SECOND DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(3) < IGPBLKS) THEN - WRITE(NOUT,*)'DIST_GRID_32:THIRD DIM. OF PGP TOO SMALL ',IUBOUND(3),IGPBLKS - CALL ABORT_TRANS('DIST_GRID_32:THIRD DIMENSION OF PGP TOO SMALL ') -ENDIF - -IF(IFSEND > 0) THEN - IF(.NOT.PRESENT(PGPG)) THEN - CALL ABORT_TRANS('DIST_GRID_32:PGPG MISSING') - ENDIF - IF(UBOUND(PGPG,1) < D%NGPTOTG) THEN - CALL ABORT_TRANS('DIST_GRID_32:FIRST DIMENSION OF PGPG TOO SMALL') - ENDIF - IF(UBOUND(PGPG,2) < IFSEND) THEN - CALL ABORT_TRANS('DIST_GRID_32:FIRST DIMENSION OF PGPG TOO SMALL') - ENDIF -ENDIF - - -CALL DIST_GRID_32_CTL(PGPG,KFDISTG,IPROMA,KFROM,PGP) - -IF (LHOOK) CALL DR_HOOK('DIST_GRID_32',1,ZHOOK_HANDLE) -!endif INTERFACE - -! ------------------------------------------------------------------ - -END SUBROUTINE DIST_GRID_32 - diff --git a/src/trans/gpu/external/gath_grid_32.F90 b/src/trans/gpu/external/gath_grid_32.F90 deleted file mode 100755 index feace16ea..000000000 --- a/src/trans/gpu/external/gath_grid_32.F90 +++ /dev/null @@ -1,138 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -SUBROUTINE GATH_GRID_32(PGPG,KPROMA,KFGATHG,KTO,KRESOL,PGP) - -!**** *GATH_GRID_32* - Gather global gridpoint array from processors - -! Purpose. -! -------- -! Interface routine for gathering gripoint array - -!** Interface. -! ---------- -! CALL GATH_GRID_32(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFGATHG - Global number of fields to be gathered -! KPROMA - blocking factor for gridpoint input -! KTO(:) - Processor responsible for gathering each field -! KRESOL - resolution tag which is required ,default is the -! first defined resolution (input) -! PGP(:,:,:) - Local spectral array -! -! Method. -! ------- - -! Externals. SET_RESOL - set resolution -! ---------- GATH_GRID_32_CTL - control routine - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 00-03-03 - -! ------------------------------------------------------------------ - -USE PARKIND1, ONLY: JPIM, JPRB, JPRM - -!ifndef INTERFACE - -USE TPM_GEN, ONLY: NERR,NOUT -USE TPM_DISTR, ONLY: D, NPROC, MYPROC -USE SET_RESOL_MOD, ONLY: SET_RESOL -USE GATH_GRID_32_CTL_MOD, ONLY: GATH_GRID_32_CTL -USE ABORT_TRANS_MOD, ONLY: ABORT_TRANS -USE YOMHOOK, ONLY: LHOOK, DR_HOOK, JPHOOK - -!endif INTERFACE - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(OUT) :: PGPG(:,:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFGATHG -INTEGER(KIND=JPIM) , INTENT(IN) :: KTO(:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL -REAL(KIND=JPRM) , INTENT(IN) :: PGP(:,:,:) - -!ifndef INTERFACE - -INTEGER(KIND=JPIM) :: IFRECV,J,IUBOUND(3),IPROMA,IGPBLKS -REAL(KIND=JPHOOK) :: ZHOOK_HANDLE - -! ------------------------------------------------------------------ - -IF (LHOOK) CALL DR_HOOK('GATH_GRID_32',0,ZHOOK_HANDLE) -! Set current resolution -CALL SET_RESOL(KRESOL) - -IPROMA = D%NGPTOT -IF(PRESENT(KPROMA)) THEN - IPROMA = KPROMA -ENDIF -IGPBLKS = (D%NGPTOT-1)/IPROMA+1 - - -IF(UBOUND(KTO,1) < KFGATHG) THEN - CALL ABORT_TRANS('GATH_GRID_32: KTO TOO SHORT!') -ENDIF - -IFRECV = 0 -DO J=1,KFGATHG - IF(KTO(J) < 1 .OR. KTO(J) > NPROC) THEN - WRITE(NERR,*) 'GATH_GRID_32:ILLEGAL KTO VALUE',KTO(J),J - CALL ABORT_TRANS('GATH_GRID_32:ILLEGAL KTO VALUE') - ENDIF - IF(KTO(J) == MYPROC) IFRECV = IFRECV+1 -ENDDO - -IUBOUND=UBOUND(PGP) -IF(IUBOUND(1) < IPROMA) THEN - WRITE(NOUT,*)'GATH_GRID_32:FIRST DIM. OF PGP TOO SMALL ',IUBOUND(1),IPROMA - CALL ABORT_TRANS('GATH_GRID_32:FIRST DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(2) < KFGATHG) THEN - WRITE(NOUT,*)'GATH_GRID_32:SEC. DIM. OF PGP TOO SMALL ',IUBOUND(2),KFGATHG - CALL ABORT_TRANS('GATH_GRID_32:SECOND DIMENSION OF PGP TOO SMALL ') -ENDIF -IF(IUBOUND(3) < IGPBLKS) THEN - WRITE(NOUT,*)'GATH_GRID_32:THIRD DIM. OF PGP TOO SMALL ',IUBOUND(3),IGPBLKS - CALL ABORT_TRANS('GATH_GRID_32:THIRD DIMENSION OF PGP TOO SMALL ') -ENDIF - -IF(IFRECV > 0) THEN - IF(.NOT.PRESENT(PGPG)) THEN - CALL ABORT_TRANS('GATH_GRID_32:PGPG MISSING') - ENDIF - IF(UBOUND(PGPG,1) < D%NGPTOTG) THEN - CALL ABORT_TRANS('GATH_GRID_32:FIRST DIMENSION OF PGPG TOO SMALL') - ENDIF - IF(UBOUND(PGPG,2) < IFRECV) THEN - CALL ABORT_TRANS('GATH_GRID_32:SECOND DIMENSION OF PGPG TOO SMALL') - ENDIF -ENDIF - -CALL GATH_GRID_32_CTL(PGPG,KFGATHG,IPROMA,KTO,PGP) - -IF (LHOOK) CALL DR_HOOK('GATH_GRID_32',1,ZHOOK_HANDLE) -!endif INTERFACE - -! ------------------------------------------------------------------ - -END SUBROUTINE GATH_GRID_32 - diff --git a/src/trans/gpu/internal/dist_grid_32_ctl_mod.F90 b/src/trans/gpu/internal/dist_grid_32_ctl_mod.F90 deleted file mode 100755 index 1c28c33e7..000000000 --- a/src/trans/gpu/internal/dist_grid_32_ctl_mod.F90 +++ /dev/null @@ -1,257 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2000- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -MODULE DIST_GRID_32_CTL_MOD -CONTAINS -SUBROUTINE DIST_GRID_32_CTL(PGPG,KFDISTG,KPROMA,KFROM,PGP) - -!**** *DIST_GRID_32_CTL* - Distributing global gridpoint array to processors - -! Purpose. -! -------- -! Routine for distributing gridpoint array - -!** Interface. -! ---------- -! CALL DIST_GRID_32_CTL(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFDISTG - Global number of fields to be distributed -! KPROMA - required blocking factor for gridpoint output -! KFROM(:) - Processor responsible for distributing each field -! PGP(:,:,:) - Local spectral array - -! Externals. SET2PE - compute "A and B" set from PE -! ---------- MPL.. - message passing routines - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 2000-04-01 - -! ------------------------------------------------------------------ - -USE PARKIND_ECTRANS, ONLY: JPIM, JPRM -USE MPL_MODULE, ONLY: MPL_RECV, JP_BLOCKING_STANDARD, MPL_SEND, JP_NON_BLOCKING_STANDARD, & - & MPL_WAIT, MPL_BARRIER -USE TPM_DISTR, ONLY: D, NPROC, MYPROC, MTAGDISTGP, NPRCIDS -USE TPM_GEOMETRY, ONLY: G -USE SET2PE_MOD, ONLY: SET2PE -USE ABORT_TRANS_MOD, ONLY: ABORT_TRANS -USE EQ_REGIONS_MOD, ONLY: N_REGIONS_NS, N_REGIONS - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(IN) :: PGPG(:,:) -INTEGER(KIND=JPIM) , INTENT(IN) :: KFDISTG -INTEGER(KIND=JPIM) , INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFROM(:) -REAL(KIND=JPRM) , INTENT(OUT) :: PGP(:,:,:) - -! Declaration of local variables - -REAL(KIND=JPRM) :: ZDUM(D%NGPTOTMX) -REAL(KIND=JPRM),ALLOCATABLE :: ZBUF(:,:,:),ZRCV2(:,:) -REAL(KIND=JPRM) :: ZRCV(D%NGPTOTMX,KFDISTG) -INTEGER(KIND=JPIM) :: JFLD,JB,JA,IGLOFF,IGL1,IGL2,IOFF,ILAST,ILOFF,ILENR -INTEGER(KIND=JPIM) :: JGL,JLON,ISND,ITAG,J,IRCV -INTEGER(KIND=JPIM) :: JKGLO,IEND,JROF,IBL,JROC -INTEGER(KIND=JPIM) :: ISENDREQ(NPROC,KFDISTG),ILEN(NPROC,KFDISTG) -INTEGER(KIND=JPIM) :: IFROM,IMYFIELDS,IFLD,IFLDSFROM(NPROC) -LOGICAL :: LLSAME - -! ------------------------------------------------------------------ - -! Copy for single PE - -IF(NPROC == 1) THEN -!$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JFLD=1,KFDISTG - DO JROF=1,IEND - PGP(JROF,JFLD,IBL) = PGPG(IOFF+JROF,JFLD) - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - -ELSEIF(KFDISTG>0) THEN - -! test if values in KFROM are all the same - LLSAME=.TRUE. - IFROM=KFROM(1) - DO JFLD=2,KFDISTG - IF(KFROM(JFLD) /= IFROM) THEN - LLSAME=.FALSE. - EXIT - ENDIF - ENDDO - - IMYFIELDS = 0 - DO JFLD=1,KFDISTG - IF(KFROM(JFLD) == MYPROC) THEN - IMYFIELDS = IMYFIELDS+1 - ENDIF - ENDDO - - CALL GSTATS(1663,0) - IF(IMYFIELDS > 0) THEN - ALLOCATE(ZBUF(D%NGPTOTMX,IMYFIELDS,NPROC)) - -!$OMP PARALLEL DO SCHEDULE(DYNAMIC,1)& -!$OMP&PRIVATE(JFLD,JA,JB,ISND,IGLOFF,IGL1,IGL2,IOFF,ILAST,J,& -!$OMP&ILOFF,JGL,JLON) - DO JFLD=1,IMYFIELDS - DO JA=1,N_REGIONS_NS - DO JB=1,N_REGIONS(JA) - CALL SET2PE(ISND,JA,JB,0,0) - - IGLOFF = D%NPTRFRSTLAT(JA) - IGL1 = D%NFRSTLAT(JA) - IGL2 = D%NLSTLAT(JA) - IOFF = 0 - IF(JA > 1) THEN - IF( D%NLSTLAT(JA-1) == D%NFRSTLAT(JA) )THEN - ILAST = D%NLSTLAT(JA-1)-1 - ELSE - ILAST = D%NLSTLAT(JA-1) - ENDIF - DO J=D%NFRSTLAT(1),ILAST - IOFF = IOFF+G%NLOEN(J) - ENDDO - ENDIF - - ILEN(ISND,JFLD) = 0 - ILOFF = 0 - DO JGL=IGL1,IGL2 - DO JLON=1,D%NONL(IGLOFF+JGL-IGL1,JB) - ZBUF(ILEN(ISND,JFLD)+JLON,JFLD,ISND) = & - & PGPG(IOFF+ILOFF+D%NSTA(IGLOFF+JGL-IGL1,JB)+JLON-1,JFLD) - ENDDO - ILEN(ISND,JFLD) = ILEN(ISND,JFLD) + D%NONL(IGLOFF+JGL-IGL1,JB) - ILOFF = ILOFF + G%NLOEN(JGL) - ENDDO - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - ENDIF - CALL GSTATS(1663,1) - - ! Message passing - CALL GSTATS_BARRIER(791) - CALL GSTATS(811,0) - ! Send - IF( LLSAME )THEN - IF(KFROM(1) == MYPROC) THEN - ITAG = MTAGDISTGP - DO JROC=1,NPROC - CALL MPL_SEND(ZBUF(:,:,JROC),KDEST=NPRCIDS(JROC),KTAG=ITAG,& - &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(JROC,1),& - &CDSTRING='DIST_GRID_32_CTL') - ENDDO - ENDIF - ELSE - IF(IMYFIELDS > 0) THEN - ITAG = MTAGDISTGP - DO JROC=1,NPROC - CALL MPL_SEND(ZBUF(:,:,JROC),KDEST=NPRCIDS(JROC),KTAG=ITAG,& - &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(JROC,1),& - &CDSTRING='DIST_GRID_32_CTL') - ENDDO - ENDIF - ENDIF - - ! Receive - - IF( LLSAME )THEN - IRCV = KFROM(1) - ITAG = MTAGDISTGP - CALL MPL_RECV(ZRCV,KSOURCE=NPRCIDS(IRCV),KTAG=ITAG,& - &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILENR,CDSTRING='DIST_GRID_32_CTL:') - IF( ILENR /= D%NGPTOTMX*KFDISTG )THEN - CALL ABORT_TRANS(' DIST_GRID_32_CTL: INVALID RECEIVE MESSAGE LENGTH 1') - ENDIF - ELSE - IFLDSFROM(:)=0 - DO JFLD=1,KFDISTG - IFLDSFROM(KFROM(JFLD)) = IFLDSFROM(KFROM(JFLD))+1 - ENDDO - ITAG = MTAGDISTGP - DO JROC=1,NPROC - IF(IFLDSFROM(JROC) > 0 ) THEN - IRCV = JROC - ALLOCATE(ZRCV2(D%NGPTOTMX,IFLDSFROM(JROC))) - CALL MPL_RECV(ZRCV2,KSOURCE=NPRCIDS(IRCV),KTAG=ITAG,& - &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILENR,CDSTRING='DIST_GRID_32_CTL:') - IF( ILENR /= D%NGPTOTMX*IFLDSFROM(JROC) )THEN - CALL ABORT_TRANS(' DIST_GRID_32_CTL: INVALID RECEIVE MESSAGE LENGTH 2') - ENDIF - IFLD = 0 - DO JFLD=1,KFDISTG - IF(KFROM(JFLD) == JROC) THEN - IFLD = IFLD+1 - ZRCV(1:D%NGPTOT,JFLD) = ZRCV2(1:D%NGPTOT,IFLD) - ENDIF - ENDDO - DEALLOCATE(ZRCV2) - ENDIF - ENDDO - ENDIF - -! Wait for send to complete - - IF( LLSAME )THEN - IF(KFROM(1) == MYPROC) THEN - CALL MPL_WAIT(KREQUEST=ISENDREQ(:,1), & - & CDSTRING='DIST_GRID_32_CTL: WAIT 1') - ENDIF - ELSEIF(IMYFIELDS > 0) THEN - CALL MPL_WAIT(KREQUEST=ISENDREQ(:,1), & - & CDSTRING='DIST_GRID_32_CTL: WAIT 2') - ENDIF - CALL GSTATS(811,1) - CALL GSTATS_BARRIER2(791) - - CALL GSTATS(1663,0) -!$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JFLD=1,KFDISTG - DO JROF=1,IEND - PGP(JROF,JFLD,IBL) = ZRCV(IOFF+JROF,JFLD) - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - CALL GSTATS(1663,1) - !Synchronize processors - CALL GSTATS(786,0) - CALL MPL_BARRIER(CDSTRING='DIST_GRID_32_CTL:') - CALL GSTATS(786,1) - IF(ALLOCATED(ZBUF)) DEALLOCATE(ZBUF) -ENDIF - -! ------------------------------------------------------------------ - -END SUBROUTINE DIST_GRID_32_CTL -END MODULE DIST_GRID_32_CTL_MOD diff --git a/src/trans/gpu/internal/gath_grid_32_ctl_mod.F90 b/src/trans/gpu/internal/gath_grid_32_ctl_mod.F90 deleted file mode 100755 index 44e4f8a97..000000000 --- a/src/trans/gpu/internal/gath_grid_32_ctl_mod.F90 +++ /dev/null @@ -1,274 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -MODULE GATH_GRID_32_CTL_MOD -CONTAINS -SUBROUTINE GATH_GRID_32_CTL(PGPG,KFGATHG,KPROMA,KTO,PGP) - -!**** *GATH_GRID_32_CTL* - Gather global gridpoint array from processors - -! Purpose. -! -------- -! Routine for gathering gridpoint array - -!** Interface. -! ---------- -! CALL GATH_GRID_32_CTL(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFGATHG - Global number of fields to be gathered -! KPROMA - blocking factor for gridpoint input -! KTO(:) - Processor responsible for gathering each field -! PGP(:,:,:) - Local spectral array -! -! ------------------------------------------------------------------ - - -USE PARKIND1, ONLY: JPIM, JPRM -USE MPL_MODULE, ONLY: MPL_SEND, JP_NON_BLOCKING_STANDARD, MPL_RECV, JP_BLOCKING_STANDARD, & - & MPL_WAIT, MPL_ALLTOALLV -USE TPM_GEOMETRY, ONLY: G -USE TPM_DISTR, ONLY: D, NPROC, MYPROC, MTAGDISTSP, NPRCIDS -USE SET2PE_MOD, ONLY: SET2PE -USE EQ_REGIONS_MOD, ONLY: N_REGIONS_NS, N_REGIONS - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(OUT) :: PGPG(:,:) -INTEGER(KIND=JPIM) , INTENT(IN) :: KFGATHG -INTEGER(KIND=JPIM) , INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KTO(:) -REAL(KIND=JPRM) , INTENT(IN) :: PGP(:,:,:) - -! Declaration of local variables - -REAL(KIND=JPRM) :: ZFLD(D%NGPTOTMX*KFGATHG) -REAL(KIND=JPRM),ALLOCATABLE :: ZBUF(:) -INTEGER(KIND=JPIM) :: IFLDR,JFLD,ITAG,ILEN,JA,JB,ISND,JGL,JLON,ILOFF,IST -INTEGER(KIND=JPIM) :: IRCV,IOFF,ILAST,IGL1,IGL2,IGLOFF -INTEGER(KIND=JPIM) :: JKGLO,JROF,IEND,J,IBL,IPROC,JROC,IMYFIELDS,ILRECV -INTEGER(KIND=JPIM) :: ISENDREQ(NPROC),ITO -INTEGER(KIND=JPIM) :: ILENS(NPROC),IOFFS(NPROC),ILENR(NPROC),IOFFR(NPROC) -INTEGER(KIND=JPIM) :: IFLDL,IFLDS -LOGICAL :: LLSAME -! ------------------------------------------------------------------ - - -!GATHER SPECTRAL ARRAY - -IF( NPROC == 1 ) THEN - CALL GSTATS(1643,0) -!$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JFLD=1,KFGATHG - DO JROF=1,IEND - PGPG(IOFF+JROF,JFLD) = PGP(JROF,JFLD,IBL) - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - CALL GSTATS(1643,1) - -ELSE -! test if values in KTO are all the same - LLSAME=.TRUE. - ITO=KTO(1) - DO JFLD=2,KFGATHG - IF(KTO(JFLD) /= ITO) THEN - LLSAME=.FALSE. - EXIT - ENDIF - ENDDO - IFLDL=D%NGPTOTMX - IF(LLSAME) THEN - CALL GSTATS(1643,0) - !$OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(JKGLO,IEND,IOFF,IBL,JFLD,JROF) - DO JFLD=1,KFGATHG - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JROF=1,IEND - ZFLD(IOFF+JROF+(JFLD-1)*IFLDL) = PGP(JROF,JFLD,IBL) - ENDDO - ENDDO - ENDDO - !$OMP END PARALLEL DO - CALL GSTATS(1643,1) - ELSE - ILENS(:)=0 - IOFFS(:)=0 - ILENR(:)=0 - IOFFR(:)=0 - DO JFLD=1,KFGATHG - ILENS(KTO(JFLD))=ILENS(KTO(JFLD))+IFLDL - IF(KTO(JFLD) == MYPROC) THEN - ILENR(:)=ILENR(:)+IFLDL - ENDIF - ENDDO - DO JROC=2,NPROC - IOFFR(JROC)=IOFFR(JROC-1)+ ILENR(JROC-1) - IOFFS(JROC)=IOFFS(JROC-1)+ ILENS(JROC-1) - ENDDO - IFLDS=0 - DO JROC=1,NPROC - IF(ILENS(JROC) > 0) THEN - DO JFLD=1,KFGATHG - IF(KTO(JFLD) == JROC) THEN - DO JKGLO=1,D%NGPTOT,KPROMA - IEND = MIN(KPROMA,D%NGPTOT-JKGLO+1) - IOFF = JKGLO-1 - IBL = (JKGLO-1)/KPROMA+1 - DO JROF=1,IEND - ZFLD(IOFF+JROF+IFLDS*IFLDL) = PGP(JROF,JFLD,IBL) - ENDDO - ENDDO - IFLDS=IFLDS+1 - ENDIF - ENDDO - ENDIF - ENDDO - ENDIF - - IMYFIELDS = 0 - DO JFLD=1,KFGATHG - IF(KTO(JFLD) == MYPROC) THEN - IMYFIELDS = IMYFIELDS+1 - ENDIF - ENDDO - - IF(IMYFIELDS > 0) THEN - ALLOCATE(ZBUF(D%NGPTOTMX*IMYFIELDS*NPROC)) - ELSE - ALLOCATE(ZBUF(1)) - ENDIF - IFLDR = 0 - CALL GSTATS_BARRIER(789) - CALL GSTATS(809,0) - - IF( LLSAME )THEN - !Send - ISND = KTO(1) - ITAG = MTAGDISTSP+1+17 - CALL MPL_SEND(ZFLD,KDEST=NPRCIDS(ISND),KTAG=ITAG,& - &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(1),& - &CDSTRING='GATH_GRID_32_CTL:') - - ! RECIEVE - IF(KTO(1) == MYPROC) THEN - IFLDR = KFGATHG - DO JROC=1,NPROC - ITAG = MTAGDISTSP+1+17 - IRCV = JROC - IOFF=IFLDL*KFGATHG*(JROC-1) - CALL MPL_RECV(ZBUF(IOFF+1:IOFF+IFLDL*KFGATHG),KSOURCE=NPRCIDS(IRCV),& - &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILRECV,& - &KTAG=ITAG,CDSTRING='GATH_GRID_32_CTL:') - ENDDO - ENDIF - CALL MPL_WAIT(KREQUEST=ISENDREQ(1), & - & CDSTRING='GATH_GRID_32_CTL: WAIT') - ELSE - IFLDR=IMYFIELDS - CALL MPL_ALLTOALLV(PSENDBUF=ZFLD,KSENDCOUNTS=ILENS,& - & PRECVBUF=ZBUF,KRECVCOUNTS=ILENR,KSENDDISPL=IOFFS,KRECVDISPL=IOFFR,& - & CDSTRING='GATH_GRID_32_CTL:') -!!$ ITAG = MTAGDISTSP+1+17 -!!$ DO JROC=1,NPROC -!!$ ISND=JROC -!!$ IOFF=IOFFS(JROC) -!!$ ILEN=ILENS(JROC) -!!$ IF(ILEN > 0 ) THEN -!!$ CALL MPL_SEND(ZFLD(IOFF+1:IOFF+ILEN),KDEST=NPRCIDS(ISND),KTAG=ITAG,& -!!$ &KMP_TYPE=JP_NON_BLOCKING_STANDARD,KREQUEST=ISENDREQ(ISND),& -!!$ &CDSTRING='GATH_GRID_32_CTL:') -!!$ ENDIF -!!$ ENDDO -!!$ DO JROC=1,NPROC -!!$ IRCV = JROC -!!$ IOFF = IOFFR(JROC) -!!$ ILEN = ILENR(JROC) -!!$ IF(ILEN > 0 ) THEN -!!$ CALL MPL_RECV(ZBUF(IOFF+1:IOFF+ILEN),KSOURCE=NPRCIDS(IRCV),& -!!$ &KMP_TYPE=JP_BLOCKING_STANDARD,KOUNT=ILRECV,& -!!$ &KTAG=ITAG,CDSTRING='GATH_GRID_32_CTL:') -!!$ ENDIF -!!$ ENDDO -!!$ DO JROC=1,NPROC -!!$ ISND=JROC -!!$ ILEN=ILENS(JROC) -!!$ IF(ILEN > 0 ) THEN -!!$ CALL MPL_WAIT(KREQUEST=ISENDREQ(JROC), & -!!$ & CDSTRING='GATH_GRID_32_CTL: WAIT') -!!$ ENDIF -!!$ ENDDO - ENDIF - - CALL GSTATS(809,1) - CALL GSTATS_BARRIER2(789) - CALL GSTATS(1643,0) -!$OMP PARALLEL DO SCHEDULE(DYNAMIC,1)& -!$OMP&PRIVATE(JA,JB,IPROC,IGLOFF,IGL1,IGL2,IOFF,ILAST,J,& -!$OMP&ILEN,ILOFF,JGL,JLON,JFLD) - DO JFLD=1,IFLDR - DO JA=1,N_REGIONS_NS - DO JB=1,N_REGIONS(JA) - CALL SET2PE(IPROC,JA,JB,0,0) - IGLOFF = D%NPTRFRSTLAT(JA) - IGL1 = D%NFRSTLAT(JA) - IGL2 = D%NLSTLAT(JA) - IOFF = 0 - IF(JA > 1) THEN - IF( D%NLSTLAT(JA-1) == D%NFRSTLAT(JA) )THEN - ILAST = D%NLSTLAT(JA-1)-1 - ELSE - ILAST = D%NLSTLAT(JA-1) - ENDIF - DO J=D%NFRSTLAT(1),ILAST - IOFF = IOFF+G%NLOEN(J) - ENDDO - ENDIF - - ILEN = 0 - ILOFF = 0 - DO JGL=IGL1,IGL2 - DO JLON=1,D%NONL(IGLOFF+JGL-IGL1,JB) - PGPG(IOFF+ILOFF+D%NSTA(IGLOFF+JGL-IGL1,JB)+JLON-1,JFLD) = & - & ZBUF(ILEN+JLON+(JFLD-1)*IFLDL+(IPROC-1)*IFLDL*IMYFIELDS) - ENDDO - ILEN = ILEN + D%NONL(IGLOFF+JGL-IGL1,JB) - ILOFF = ILOFF + G%NLOEN(JGL) - ENDDO - ENDDO - ENDDO - ENDDO -!$OMP END PARALLEL DO - - CALL GSTATS(1643,1) -! Synhronize processors -! Should not be necessary -!!$ CALL GSTATS(784,0) -!!$ CALL MPL_BARRIER(CDSTRING='GATH_GRID_32_CTL:') -!!$ CALL GSTATS(784,1) - IF(ALLOCATED(ZBUF)) DEALLOCATE(ZBUF) -ENDIF - -! ------------------------------------------------------------------ - -END SUBROUTINE GATH_GRID_32_CTL -END MODULE GATH_GRID_32_CTL_MOD - - diff --git a/src/trans/include/ectrans/dist_grid_32.h b/src/trans/include/ectrans/dist_grid_32.h deleted file mode 100644 index 0bb30d9b5..000000000 --- a/src/trans/include/ectrans/dist_grid_32.h +++ /dev/null @@ -1,69 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2013- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -INTERFACE -SUBROUTINE DIST_GRID_32(PGPG,KPROMA,KFDISTG,KFROM,KRESOL,PGP) - -!**** *DIST_GRID_32* - Distribute global gridpoint array among processors - -! Purpose. -! -------- -! Interface routine for distributing gridpoint array - -!** Interface. -! ---------- -! CALL DIST_GRID_32(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global spectral array -! KFDISTG - Global number of fields to be distributed -! KPROMA - required blocking factor for gridpoint input -! KFROM(:) - Processor resposible for distributing each field -! KRESOL - resolution tag which is required ,default is the -! first defined resulution (input) -! PGP(:,:) - Local spectral array -! -! Method. -! ------- - -! Externals. SET_RESOL - set resolution -! ---------- DIST_GRID_32_CTL - control routine - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 00-03-03 - -! ------------------------------------------------------------------ - -USE PARKIND1 ,ONLY : JPIM ,JPRB ,JPRM - - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(IN) :: PGPG(:,:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFDISTG -INTEGER(KIND=JPIM) , INTENT(IN) :: KFROM(:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL -REAL(KIND=JPRM) , INTENT(OUT) :: PGP(:,:,:) - - -! ------------------------------------------------------------------ - -END SUBROUTINE DIST_GRID_32 - -END INTERFACE diff --git a/src/trans/include/ectrans/gath_grid_32.h b/src/trans/include/ectrans/gath_grid_32.h deleted file mode 100644 index 3df5ffe9c..000000000 --- a/src/trans/include/ectrans/gath_grid_32.h +++ /dev/null @@ -1,69 +0,0 @@ -! (C) Copyright 2000- ECMWF. -! (C) Copyright 2013- Meteo-France. -! -! This software is licensed under the terms of the Apache Licence Version 2.0 -! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -! In applying this licence, ECMWF does not waive the privileges and immunities -! granted to it by virtue of its status as an intergovernmental organisation -! nor does it submit to any jurisdiction. -! - -INTERFACE -SUBROUTINE GATH_GRID_32(PGPG,KPROMA,KFGATHG,KTO,KRESOL,PGP) - -!**** *GATH_GRID_32* - Gather global gridpoint array from processors - -! Purpose. -! -------- -! Interface routine for gathering gripoint array - -!** Interface. -! ---------- -! CALL GATH_GRID_32(...) - -! Explicit arguments : -! -------------------- -! PGPG(:,:) - Global gridpoint array -! KFGATHG - Global number of fields to be gathered -! KPROMA - blocking factor for gridpoint input -! KTO(:) - Processor responsible for gathering each field -! KRESOL - resolution tag which is required ,default is the -! first defined resulution (input) -! PGP(:,:,:) - Local spectral array -! -! Method. -! ------- - -! Externals. SET_RESOL - set resolution -! ---------- GATH_GRID_32_CTL - control routine - -! Author. -! ------- -! Mats Hamrud *ECMWF* - -! Modifications. -! -------------- -! Original : 00-03-03 - -! ------------------------------------------------------------------ - -USE PARKIND1 ,ONLY : JPIM ,JPRM - - -IMPLICIT NONE - -! Declaration of arguments - -REAL(KIND=JPRM) ,OPTIONAL, INTENT(OUT) :: PGPG(:,:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KPROMA -INTEGER(KIND=JPIM) , INTENT(IN) :: KFGATHG -INTEGER(KIND=JPIM) , INTENT(IN) :: KTO(:) -INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL -REAL(KIND=JPRM) , INTENT(IN) :: PGP(:,:,:) - - -! ------------------------------------------------------------------ - -END SUBROUTINE GATH_GRID_32 - -END INTERFACE