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 11398 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/LBC/mppini.F90 – NEMO

Ignore:
Timestamp:
2019-08-02T18:43:29+02:00 (5 years ago)
Author:
smasson
Message:

dev_r10984_HPC-13 : add nammpp parameter ln_listonly, see #2285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/LBC/mppini.F90

    r11317 r11398  
    154154      LOGICAL ::   llbest, llauto 
    155155      LOGICAL ::   llwrtlay 
     156      LOGICAL ::   ln_listonly 
    156157      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   iin, ii_nono, ii_noea          ! 1D workspace 
    157158      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ijn, ii_noso, ii_nowe          !  -     - 
     
    168169           &             rn_ice_tem, rn_ice_sal, rn_ice_age,                     & 
    169170           &             ln_vol, nn_volctl, nn_rimwidth 
    170       NAMELIST/nammpp/ jpni, jpnj, ln_nnogather 
     171      NAMELIST/nammpp/ jpni, jpnj, ln_nnogather, ln_listonly 
    171172      !!---------------------------------------------------------------------- 
    172173      ! 
     
    206207      IF(               ln_read_cfg ) CALL iom_open( cn_domcfg,    numbot ) 
    207208      IF( ln_bdy .AND. ln_mask_file ) CALL iom_open( cn_mask_file, numbdy ) 
     209      ! 
     210      IF( ln_listonly )   CALL mpp_init_bestpartition( MAX(mppsize,jpni*jpnj), ldlist = .TRUE. )   ! must be done by all core 
    208211      ! 
    209212      !  1. Dimension arrays for subdomains 
     
    268271         CALL ctl_stop( ctmp1, ctmp2, ctmp3, ' ', ctmp4, ' ' ) 
    269272         CALL mpp_init_bestpartition( mppsize, ldlist = .TRUE. )   ! must be done by all core 
    270          CALL ctl_stop( 'STOP' ) 
    271273      ENDIF 
    272274 
     
    293295         ENDIF 
    294296         CALL mpp_init_bestpartition( mppsize, ldlist = .TRUE. )   ! must be done by all core 
    295          CALL ctl_stop( 'STOP' ) 
    296297      ENDIF 
    297298 
     
    843844      INTEGER :: isziref, iszjref 
    844845      INTEGER :: inbij, iszij 
    845       INTEGER :: inbimax, inbjmax, inbijmax 
     846      INTEGER :: inbimax, inbjmax, inbijmax, inbijold 
    846847      INTEGER :: isz0, isz1 
    847848      INTEGER, DIMENSION(  :), ALLOCATABLE :: indexok 
     
    968969      DEALLOCATE( indexok, inbi1, inbj1, iszi1, iszj1 ) 
    969970 
    970       IF( llist ) THEN  ! we print about 21 best partitions 
     971      IF( llist ) THEN 
    971972         IF(lwp) THEN 
    972973            WRITE(numout,*) 
    973             WRITE(numout,         *) '                  For your information:' 
    974             WRITE(numout,'(a,i5,a)') '  list of the best partitions around ',   knbij, ' mpi processes' 
    975             WRITE(numout,         *) '  --------------------------------------', '-----', '--------------' 
     974            WRITE(numout,*) '                  For your information:' 
     975            WRITE(numout,*) '  list of the best partitions including land supression' 
     976            WRITE(numout,*) '  -----------------------------------------------------' 
    976977            WRITE(numout,*) 
    977978         END IF 
    978          iitarget = MINLOC( inbi0(:)*inbj0(:), mask = inbi0(:)*inbj0(:) >= knbij, dim = 1 ) 
    979          DO ji = MAX(1,iitarget-10), MIN(isz0,iitarget+10) 
     979         ji = isz0   ! initialization with the largest value 
     980         ALLOCATE( llisoce(inbi0(ji), inbj0(ji)) ) 
     981         CALL mpp_init_isoce( inbi0(ji), inbj0(ji), llisoce ) ! Warning: must be call by all cores (call mpp_sum) 
     982         inbijold = COUNT(llisoce) 
     983         DEALLOCATE( llisoce ) 
     984         DO ji =isz0-1,1,-1 
    980985            ALLOCATE( llisoce(inbi0(ji), inbj0(ji)) ) 
    981986            CALL mpp_init_isoce( inbi0(ji), inbj0(ji), llisoce ) ! Warning: must be call by all cores (call mpp_sum) 
    982987            inbij = COUNT(llisoce) 
    983988            DEALLOCATE( llisoce ) 
    984             IF(lwp) WRITE(numout,'(a, i5, a, i5, a, i4, a, i4, a, i9, a, i5, a, i5, a)')    & 
    985                &     'nb_cores ' , inbij,' oce + ', inbi0(ji)*inbj0(ji) - inbij             & 
    986                &                                , ' land ( ', inbi0(ji),' x ', inbj0(ji),   & 
    987                & ' ), nb_points ', iszi0(ji)*iszj0(ji),' ( ', iszi0(ji),' x ', iszj0(ji),' )' 
     989            IF(lwp .AND. inbij < inbijold) THEN 
     990               WRITE(numout,'(a, i6, a, i6, a, f4.1, a, i9, a, i6, a, i6, a)')                                 & 
     991                  &   'nb_cores oce: ', inbij, ', land domains excluded: ', inbi0(ji)*inbj0(ji) - inbij,       & 
     992                  &   ' (', REAL(inbi0(ji)*inbj0(ji) - inbij,wp) / REAL(inbi0(ji)*inbj0(ji),wp) *100.,         & 
     993                  &   '%), largest oce domain: ', iszi0(ji)*iszj0(ji), ' ( ', iszi0(ji),' x ', iszj0(ji), ' )' 
     994               inbijold = inbij 
     995            END IF 
    988996         END DO 
    989997         DEALLOCATE( inbi0, inbj0, iszi0, iszj0 ) 
    990          RETURN 
     998         IF(lwp) THEN 
     999            WRITE(numout,*) 
     1000            WRITE(numout,*)  '  -----------------------------------------------------------' 
     1001         ENDIF 
     1002         CALL mppsync 
     1003         CALL mppstop( ld_abort = .TRUE. ) 
    9911004      ENDIF 
    9921005       
Note: See TracChangeset for help on using the changeset viewer.