Changeset 10297 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_lnk_generic.h90
- Timestamp:
- 2018-11-12T16:20:57+01:00 (5 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
r10179 r10297 63 63 INTEGER :: ml_req1, ml_req2, ml_err ! for key_mpi_isend 64 64 INTEGER :: ierr 65 INTEGER :: icom_freq 65 66 REAL(wp) :: zland 66 67 INTEGER , DIMENSION(MPI_STATUS_SIZE) :: ml_stat ! for key_mpi_isend … … 153 154 ! 154 155 IF( narea == 1 ) THEN 155 IF ( ncom_stp == nit000 ) THEN 156 157 ! find the smallest common frequency: default = frequency product, if multiple, choose the larger of the 2 frequency 158 icom_freq = ncom_fsbc * ncom_dttrc 159 IF( MOD( MAX(ncom_fsbc,ncom_dttrc), MIN(ncom_fsbc,ncom_dttrc) ) == 0 ) icom_freq = MAX(ncom_fsbc,ncom_dttrc) 160 161 IF ( ncom_stp == nit000+icom_freq ) THEN ! avoid to count extra communications in potential initializations at nit000 156 162 IF( .NOT. ALLOCATED( ncomm_sequence) ) THEN 157 163 ALLOCATE( ncomm_sequence(2000,2), STAT=ierr ) 158 164 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'lnk_generic, cannot allocate ncomm_sequence' ) 159 ALLOCATE( crname (2000), STAT=ierr )165 ALLOCATE( crname_lbc(2000), STAT=ierr ) 160 166 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'lnk_generic, cannot allocate crname' ) 161 167 ENDIF 162 n_sequence = n_sequence + 1 163 IF( n_sequence > 2000 ) 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,I4)') ' Exchanged halos : ', n_sequence 168 n_sequence_lbc = n_sequence_lbc + 1 169 IF( n_sequence_lbc > 2000 ) CALL ctl_stop( 'STOP', 'lnk_generic, increase ncomm_sequence first dimension' ) 170 ncomm_sequence(n_sequence_lbc,1) = ipk*ipl ! size of 3rd and 4th dimensions 171 ncomm_sequence(n_sequence_lbc,2) = ipf ! number of arrays to be treated (multi) 172 crname_lbc (n_sequence_lbc) = cdname ! keep the name of the calling routine 173 ELSE IF ( ncom_stp == (nit000+2*icom_freq) ) THEN 174 IF ( numcom == -1 ) THEN 175 CALL ctl_opn( numcom, 'communication_report.txt', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 176 WRITE(numcom,*) ' ' 177 WRITE(numcom,*) ' ------------------------------------------------------------' 178 WRITE(numcom,*) ' Communication pattern report (second oce+sbc+top time step):' 179 WRITE(numcom,*) ' ------------------------------------------------------------' 180 WRITE(numcom,*) ' ' 181 WRITE(numcom,'(A,I4)') ' Exchanged halos : ', n_sequence_lbc 175 182 jj = 0; jk = 0; jf = 0; jh = 0 176 DO ji = 1, n_sequence 183 DO ji = 1, n_sequence_lbc 177 184 IF ( ncomm_sequence(ji,1) .GT. 1 ) jk = jk + 1 178 185 IF ( ncomm_sequence(ji,2) .GT. 1 ) jf = jf + 1 … … 180 187 jh = MAX (jh, ncomm_sequence(ji,1)*ncomm_sequence(ji,2)) 181 188 END DO 182 WRITE(num out,'(A,I3)') ' 3D Exchanged halos : ', jk183 WRITE(num out,'(A,I3)') ' Multi arrays exchanged halos : ', jf184 WRITE(num out,'(A,I3)') ' from which 3D : ', jj185 WRITE(num out,'(A,I10)') ' Array max size : ', jh*jpi*jpj186 WRITE(num out,*) ' '187 WRITE(num out,*) ' lbc_lnk called'189 WRITE(numcom,'(A,I3)') ' 3D Exchanged halos : ', jk 190 WRITE(numcom,'(A,I3)') ' Multi arrays exchanged halos : ', jf 191 WRITE(numcom,'(A,I3)') ' from which 3D : ', jj 192 WRITE(numcom,'(A,I10)') ' Array max size : ', jh*jpi*jpj 193 WRITE(numcom,*) ' ' 194 WRITE(numcom,*) ' lbc_lnk called' 188 195 jj = 1 189 DO ji = 2, n_sequence 190 IF( crname (ji-1) /= crname(ji) ) THEN191 WRITE(num out,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname(ji-1))196 DO ji = 2, n_sequence_lbc 197 IF( crname_lbc(ji-1) /= crname_lbc(ji) ) THEN 198 WRITE(numcom,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname_lbc(ji-1)) 192 199 jj = 0 193 200 END IF 194 201 jj = jj + 1 195 202 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,*) ' ' 203 WRITE(numcom,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname_lbc(n_sequence_lbc)) 204 WRITE(numcom,*) ' ' 205 IF ( n_sequence_glb > 0 ) THEN 206 WRITE(numcom,'(A,I4)') ' Global communications : ', n_sequence_glb 207 jj = 1 208 DO ji = 2, n_sequence_glb 209 IF( crname_glb(ji-1) /= crname_glb(ji) ) THEN 210 WRITE(numcom,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname_glb(ji-1)) 211 jj = 0 212 END IF 213 jj = jj + 1 214 END DO 215 WRITE(numcom,'(A, I4, A, A)') ' - ', jj,' times by subroutine ', TRIM(crname_glb(n_sequence_glb)) 216 DEALLOCATE(crname_glb) 217 ELSE 218 WRITE(numcom,*) ' No MPI global communication ' 219 ENDIF 220 WRITE(numcom,*) ' ' 221 WRITE(numcom,*) ' -----------------------------------------------' 222 WRITE(numcom,*) ' ' 200 223 DEALLOCATE(ncomm_sequence) 201 DEALLOCATE(crname) 202 l_comm_report_done = .TRUE. 224 DEALLOCATE(crname_lbc) 203 225 ENDIF 204 226 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.