Changeset 10170 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_lnk_generic.h90
- Timestamp:
- 2018-10-03T16:49:50+02:00 (6 years ago)
- 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 46 46 47 47 #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 ) 49 49 INTEGER , INTENT(in ) :: kfld ! number of pt3d arrays 50 50 #else 51 SUBROUTINE ROUTINE_LNK( ptab, cd_nat, psgn , cd_mpp, pval )51 SUBROUTINE ROUTINE_LNK( cdname, ptab, cd_nat, psgn , cd_mpp, pval ) 52 52 #endif 53 53 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 54 55 CHARACTER(len=1) , INTENT(in ) :: NAT_IN(:) ! nature of array grid-points 55 56 REAL(wp) , INTENT(in ) :: SGN_IN(:) ! sign used across the north fold boundary … … 61 62 INTEGER :: imigr, iihom, ijhom ! local integers 62 63 INTEGER :: ml_req1, ml_req2, ml_err ! for key_mpi_isend 64 INTEGER :: ierr 63 65 REAL(wp) :: zland 64 66 INTEGER , DIMENSION(MPI_STATUS_SIZE) :: ml_stat ! for key_mpi_isend … … 150 152 imigr = nn_hls * jpj * ipk * ipl * ipf 151 153 ! 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 ! 152 207 SELECT CASE ( nbondi ) 153 208 CASE ( -1 )
Note: See TracChangeset
for help on using the changeset viewer.