New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10170 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_lnk_generic.h90 – NEMO

Ignore:
Timestamp:
2018-10-03T16:49:50+02:00 (6 years ago)
Author:
smasson
Message:

dev_r10164_HPC09_ESIWACE_PREP_MERGE: action 2a: add report calls of lbc_lnk, see #2133

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_lnk_generic.h90

    r10068 r10170  
    4646 
    4747#if defined MULTI 
    48    SUBROUTINE ROUTINE_LNK( ptab, cd_nat, psgn, kfld, cd_mpp, pval ) 
     48   SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn, kfld, cd_mpp, pval ) 
    4949      INTEGER                     , INTENT(in   ) ::   kfld        ! number of pt3d arrays 
    5050#else 
    51    SUBROUTINE ROUTINE_LNK( ptab, cd_nat, psgn      , cd_mpp, pval ) 
     51   SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn      , cd_mpp, pval ) 
    5252#endif 
    5353      ARRAY_TYPE(:,:,:,:,:)                                        ! array or pointer of arrays on which the boundary condition is applied 
     54      CHARACTER(len=*)            , INTENT(in   ) ::   cdname      ! name of the calling subroutine 
    5455      CHARACTER(len=1)            , INTENT(in   ) ::   NAT_IN(:)   ! nature of array grid-points 
    5556      REAL(wp)                    , INTENT(in   ) ::   SGN_IN(:)   ! sign used across the north fold boundary 
     
    6162      INTEGER  ::   imigr, iihom, ijhom          ! local integers 
    6263      INTEGER  ::   ml_req1, ml_req2, ml_err     ! for key_mpi_isend 
     64      INTEGER  ::   ierr 
    6365      REAL(wp) ::   zland 
    6466      INTEGER , DIMENSION(MPI_STATUS_SIZE)      ::   ml_stat        ! for key_mpi_isend 
     
    150152      imigr = nn_hls * jpj * ipk * ipl * ipf 
    151153      ! 
     154      IF( narea == 1 ) THEN 
     155         IF ( ncom_stp == nit000 ) THEN 
     156            IF( .NOT. ALLOCATED( ncomm_sequence) ) THEN 
     157               ALLOCATE( ncomm_sequence(1000,2), STAT=ierr ) 
     158               IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'lnk_generic, cannot allocate ncomm_sequence' ) 
     159               ALLOCATE( crname(1000), STAT=ierr ) 
     160               IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'lnk_generic, cannot allocate crname' ) 
     161            ENDIF 
     162            n_sequence = n_sequence + 1 
     163            IF( n_sequence > 1000 ) CALL ctl_stop( 'STOP', 'lnk_generic, increase ncomm_sequence first dimension' ) 
     164            ncomm_sequence(n_sequence,1) = ipk*ipl   ! size of 3rd and 4th dimensions 
     165            ncomm_sequence(n_sequence,2) = ipf       ! number of arrays to be treated (multi) 
     166            crname(n_sequence) = cdname              ! keep the name of the calling routine 
     167         ELSE IF ( ncom_stp == (nit000+1) ) THEN 
     168            IF ( .NOT. l_comm_report_done ) THEN 
     169               WRITE(numout,*) ' ' 
     170               WRITE(numout,*) ' -----------------------------------------------' 
     171               WRITE(numout,*) ' Communication pattern report (first time step):' 
     172               WRITE(numout,*) ' -----------------------------------------------' 
     173               WRITE(numout,*) ' ' 
     174               WRITE(numout,'(A,I3)') ' Exchanged halos : ', n_sequence 
     175               jj = 0; jk = 0; jf = 0; jh = 0 
     176               DO ji = 1, n_sequence 
     177                  IF ( ncomm_sequence(ji,1) .GT. 1 ) jk = jk + 1 
     178                  IF ( ncomm_sequence(ji,2) .GT. 1 ) jf = jf + 1 
     179                  IF ( ncomm_sequence(ji,1) .GT. 1 .AND. ncomm_sequence(ji,2) .GT. 1 ) jj = jj + 1 
     180                  jh = MAX (jh, ncomm_sequence(ji,1)*ncomm_sequence(ji,2)) 
     181               END DO 
     182               WRITE(numout,'(A,I3)') ' 3D Exchanged halos : ', jk 
     183               WRITE(numout,'(A,I3)') ' Multi arrays exchanged halos : ', jf 
     184               WRITE(numout,'(A,I3)') '   from which 3D : ', jj 
     185               WRITE(numout,'(A,I10)') ' Array max size : ', jh*jpi*jpj 
     186               WRITE(numout,*) ' ' 
     187               WRITE(numout,*) ' lbc_lnk called' 
     188               jj = 1 
     189               DO ji = 2, n_sequence 
     190                  IF( crname(ji-1) /= crname(ji) ) THEN 
     191                    WRITE(numout,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname(ji-1)) 
     192                    jj = 0 
     193                  END IF 
     194                  jj = jj + 1  
     195               END DO 
     196               WRITE(numout,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname(n_sequence)) 
     197               WRITE(numout,*) ' ' 
     198               WRITE(numout,*) ' -----------------------------------------------' 
     199               WRITE(numout,*) ' ' 
     200               DEALLOCATE(ncomm_sequence) 
     201               DEALLOCATE(crname) 
     202               l_comm_report_done = .TRUE. 
     203            ENDIF 
     204         ENDIF 
     205      ENDIF 
     206      ! 
    152207      SELECT CASE ( nbondi ) 
    153208      CASE ( -1 ) 
Note: See TracChangeset for help on using the changeset viewer.