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 10292 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lib_mpp.F90 – NEMO

Ignore:
Timestamp:
2018-11-09T16:35:08+01:00 (5 years ago)
Author:
smasson
Message:

dev_r10164_HPC09_ESIWACE_PREP_MERGE: action 4b: reduce communications in si3, see #2133

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lib_mpp.F90

    r10180 r10292  
    8383   PUBLIC   mpp_lbc_north_icb 
    8484   PUBLIC   mpp_min, mpp_max, mpp_sum, mpp_minloc, mpp_maxloc 
     85   PUBLIC   mpp_ilor 
    8586   PUBLIC   mpp_max_multiple 
    8687   PUBLIC   mppscatter, mppgather 
     
    633634      ptab = zwork 
    634635   END SUBROUTINE mppmax_real 
     636   !! 
     637   SUBROUTINE mpp_ilor( ld_switch, ldlast, kcom ) 
     638      ! WARNING: must be used only once (by ice_dyn_adv_umx) because ll_switch and ireq are SAVE 
     639      !!---------------------------------------------------------------------- 
     640      LOGICAL, INTENT(inout), DIMENSION(2) ::   ld_switch 
     641      LOGICAL, INTENT(in   ), OPTIONAL     ::   ldlast 
     642      INTEGER, INTENT(in   ), OPTIONAL     ::   kcom  
     643      INTEGER  ::   ierror, ilocalcomm 
     644      LOGICAL, SAVE ::   ll_switch  
     645      INTEGER, SAVE ::   ireq = -1 
     646      !!---------------------------------------------------------------------- 
     647      ilocalcomm = mpi_comm_oce 
     648      IF( PRESENT(kcom) )   ilocalcomm = kcom 
     649       
     650      IF ( ireq /= -1 ) THEN   ! get ld_switch(2) from ll_switch (from previous call) 
     651         CALL mpi_wait(ireq, MPI_STATUS_IGNORE, ierror ) 
     652         ld_switch(2) = ll_switch 
     653      ENDIF 
     654      IF( .NOT. ldlast ) &     ! send ll_switch to be received on next call 
     655         CALL mpi_iallreduce( ld_switch(1), ll_switch, 1, MPI_LOGICAL, mpi_lor, ilocalcomm, ireq, ierror ) 
     656 
     657   END SUBROUTINE mpp_ilor 
    635658 
    636659 
     
    17201743   END SUBROUTINE mpp_maxloc3d 
    17211744 
     1745   SUBROUTINE mpp_ilor( ld_switch, ldlast, kcom ) 
     1746      LOGICAL, INTENT(in   ), DIMENSION(2) ::   ld_switch 
     1747      LOGICAL, INTENT(in   ), OPTIONAL     ::   ldlast 
     1748      INTEGER, INTENT(in   ), OPTIONAL     ::   kcom    ! ??? 
     1749      WRITE(*,*) 'mpp_ilor: You should not have seen this print! error?', ld_switch 
     1750   END SUBROUTINE mpp_ilor 
     1751 
    17221752   SUBROUTINE mppstop 
    17231753      STOP      ! non MPP case, just stop the run 
Note: See TracChangeset for help on using the changeset viewer.