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 12807 for NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC – NEMO

Ignore:
Timestamp:
2020-04-23T15:14:45+02:00 (4 years ago)
Author:
smasson
Message:

Extra_Halo: input file only over inner domain + new variables names, see #2366

Location:
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/halo_mng.F90

    r12719 r12807  
    2626   INTEGER :: jpi_1, jpj_1 
    2727   INTEGER :: jpimax_1, jpjmax_1 
    28    INTEGER :: nlci_1, nlcj_1 
    29    INTEGER :: nldi_1, nldj_1 
    30    INTEGER :: nlei_1, nlej_1 
     28   INTEGER :: Nis0_1, Njs0_1 
     29   INTEGER :: Nie0_1, Nje0_1 
    3130CONTAINS 
    3231 
     
    3635        jpj_1 = jpj 
    3736 
    38         nlci_1 = nlci 
    39         nlcj_1 = nlcj 
     37        Nis0_1 = Nis0 
     38        Njs0_1 = Njs0 
    4039 
    41         nldi_1 = nldi 
    42         nldj_1 = nldj 
    43  
    44         nlei_1 = nlei 
    45         nlej_1 = nlej 
     40        Nie0_1 = Nie0 
     41        Nje0_1 = Nje0 
    4642 
    4743      jpimax_1 = jpimax 
     
    5955        jpj = jpj_1 + 2*khls -2 
    6056 
    61         nlci = nlci_1 + 2*khls -2 
    62         nlcj = nlcj_1 + 2*khls -2 
     57        jpi = jpi_1 + 2*khls -2 
     58        jpj = jpj_1 + 2*khls -2 
    6359         
    6460        jpimax = jpimax_1 + 2*khls -2 
    6561        jpjmax = jpjmax_1 + 2*khls -2 
    6662 
    67         nldi = nldi_1 + khls - 1 
    68         nldj = nldj_1 + khls - 1 
     63        Nis0 = Nis0_1 + khls - 1 
     64        Njs0 = Njs0_1 + khls - 1 
    6965 
    70         nlei = nlei_1 + khls - 1 
    71         nlej = nlej_1 + khls - 1 
     66        Nie0 = Nie0_1 + khls - 1 
     67        Nje0 = Nje0_1 + khls - 1 
    7268 
    7369   END SUBROUTINE halo_mng_set 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/lbc_nfd_ext_generic.h90

    r10525 r12807  
    2828      ! 
    2929      SELECT CASE ( jpni ) 
    30       CASE ( 1 )     ;   ipj = nlcj       ! 1 proc only  along the i-direction 
     30      CASE ( 1 )     ;   ipj = jpj        ! 1 proc only  along the i-direction 
    3131      CASE DEFAULT   ;   ipj = 4          ! several proc along the i-direction 
    3232      END SELECT 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/lbc_nfd_generic.h90

    r10425 r12807  
    6565      ! 
    6666      SELECT CASE ( jpni ) 
    67       CASE ( 1 )     ;   ipj = nlcj       ! 1 proc only  along the i-direction 
     67      CASE ( 1 )     ;   ipj = jpj        ! 1 proc only  along the i-direction 
    6868      CASE DEFAULT   ;   ipj = 4          ! several proc along the i-direction 
    6969      END SELECT 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/lbc_nfd_nogather_generic.h90

    r12719 r12807  
    9797               DO jl = 1, ipl; DO jk = 1, ipk 
    9898                    DO jj = 1, nn_hls 
    99                        ijj = nlcj -jj +1 
    100                      DO ji = startloop, nlci 
     99                       ijj = jpj -jj +1 
     100                     DO ji = startloop, jpi 
    101101                     ijt = jpiglo - (ji + nimpp-nn_hls+1 ) - nfiimpp(isendto(1),jpnj) + 4 
    102102                        ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     
    107107                  DO jl = 1, ipl; DO jk = 1, ipk 
    108108                     DO jj = 1, nn_hls 
    109                      ijj = nlcj -jj +1 
     109                     ijj = jpj -jj +1 
    110110                     DO ii = 0, nn_hls-1 
    111                         ARRAY_IN(ii+1,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii+1,nlcj-2*nn_hls+jj-1,jk,jl,jf) 
     111                        ARRAY_IN(ii+1,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii+1,jpj-2*nn_hls+jj-1,jk,jl,jf) 
    112112                     END DO 
    113113                     END DO 
     
    118118                  IF( nimpp >= jpiglo/2+1 ) THEN 
    119119                     startloop = 1 
    120                   ELSEIF( nimpp+nlci-2*nn_hls+1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
     120                  ELSEIF( nimpp+jpi-2*nn_hls+1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
    121121                     startloop = jpiglo/2+1 - nimpp + nn_hls 
    122122                  ELSE 
    123                      startloop = nlci + 1 
    124                   ENDIF 
    125                   IF( startloop <= nlci ) THEN 
     123                     startloop = jpi + 1 
     124                  ENDIF 
     125                  IF( startloop <= jpi ) THEN 
    126126                     DO jl = 1, ipl; DO jk = 1, ipk 
    127                         DO ji = startloop, nlci 
     127                        DO ji = startloop, jpi 
    128128                           ijt  = jpiglo - (ji + nimpp -nn_hls+1)- nfiimpp(isendto(1),jpnj) + 4 
    129129                           jia  = ji + nimpp -nn_hls 
    130130                           ijta = jpiglo - jia + 2 
    131131                           IF( ijta >= startloop+nimpp-1 .AND. ijta < jia ) THEN 
    132                               ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijta-nimpp+nn_hls,nlcj-nn_hls,jk,jl,jf) 
     132                              ARRAY_IN(ji,jpj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijta-nimpp+nn_hls,jpj-nn_hls,jk,jl,jf) 
    133133                           ELSE 
    134                               ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,nn_hls+1,jk,jl,jf) 
     134                              ARRAY_IN(ji,jpj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,nn_hls+1,jk,jl,jf) 
    135135                           ENDIF 
    136136                        END DO 
     
    139139               ENDIF 
    140140            CASE ( 'U' )                                     ! U-point 
    141                IF( nimpp + nlci - 2*nn_hls+1 /= jpiglo ) THEN 
    142                   endloop = nlci 
     141               IF( nimpp + jpi - 2*nn_hls+1 /= jpiglo ) THEN 
     142                  endloop = jpi 
    143143               ELSE 
    144                   endloop = nlci - nn_hls 
    145                ENDIF 
    146                DO jl = 1, ipl; DO jk = 1, ipk 
    147         DO jj = 1, nn_hls 
    148               ijj = nlcj -jj +1 
     144                  endloop = jpi - nn_hls 
     145               ENDIF 
     146               DO jl = 1, ipl; DO jk = 1, ipk 
     147        DO jj = 1, nn_hls 
     148              ijj = jpj -jj +1 
    149149                     DO ji = 1, endloop 
    150150                        iju = jpiglo - (ji + nimpp -nn_hls+1)- nfiimpp(isendto(1),jpnj) + 3 
     
    155155               IF (nimpp .eq. 1) THEN 
    156156        DO jj = 1, nn_hls 
    157            ijj = nlcj -jj +1 
     157           ijj = jpj -jj +1 
    158158           DO ii = 0, nn_hls-1 
    159          ARRAY_IN(ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii,nlcj-2*nn_hls+jj-1,:,:,jf) 
     159         ARRAY_IN(ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii,jpj-2*nn_hls+jj-1,:,:,jf) 
    160160           END DO 
    161161                  END DO 
    162162               ENDIF 
    163                IF((nimpp + nlci - 2*nn_hls+1) .eq. jpiglo) THEN 
     163               IF((nimpp + jpi - 2*nn_hls+1) .eq. jpiglo) THEN 
    164164                  DO jj = 1, nn_hls 
    165                        ijj = nlcj -jj +1 
     165                       ijj = jpj -jj +1 
    166166         DO ii = 1, nn_hls 
    167                ARRAY_IN(nlci-ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2*nn_hls+ii,nlcj-2*nn_hls+jj-1,:,:,jf) 
     167               ARRAY_IN(jpi-ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(jpi-2*nn_hls+ii,jpj-2*nn_hls+jj-1,:,:,jf) 
    168168         END DO 
    169169        END DO 
     
    171171               ! 
    172172               IF ( .NOT. l_fast_exchanges ) THEN 
    173                   IF( nimpp + nlci - 2*nn_hls+1 /= jpiglo ) THEN 
    174                      endloop = nlci 
    175                   ELSE 
    176                      endloop = nlci - nn_hls 
     173                  IF( nimpp + jpi - 2*nn_hls+1 /= jpiglo ) THEN 
     174                     endloop = jpi 
     175                  ELSE 
     176                     endloop = jpi - nn_hls 
    177177                  ENDIF 
    178178                  IF( nimpp >= jpiglo/2 ) THEN 
    179179                     startloop = 1 
    180                   ELSEIF( ( nimpp + nlci - 2*nn_hls+1 >= jpiglo/2 ) .AND. ( nimpp < jpiglo/2 ) ) THEN 
     180                  ELSEIF( ( nimpp + jpi - 2*nn_hls+1 >= jpiglo/2 ) .AND. ( nimpp < jpiglo/2 ) ) THEN 
    181181                     startloop = jpiglo/2 - (nimpp -nn_hls+1) +1 
    182182                  ELSE 
     
    190190                        ijua = jpiglo - jia + 1 
    191191                        IF( ijua >= startloop+nimpp-1 .AND. ijua < jia ) THEN 
    192                            ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijua-nimpp+nn_hls,nlcj-nn_hls,jk,jl,jf) 
     192                           ARRAY_IN(ji,jpj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijua-nimpp+nn_hls,jpj-nn_hls,jk,jl,jf) 
    193193                        ELSE 
    194                            ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,nn_hls+1,jk,jl,jf) 
     194                           ARRAY_IN(ji,jpj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,nn_hls+1,jk,jl,jf) 
    195195                        ENDIF 
    196196                     END DO 
     
    208208                  DO jl = 1, ipl; DO jk = 1, ipk 
    209209                       DO jj = 2, nn_hls+1 
    210                      ijj = nlcj -jj +1 
    211                         DO ji = startloop, nlci 
     210                     ijj = jpj -jj +1 
     211                        DO ji = startloop, jpi 
    212212                           ijt=jpiglo - (ji +nimpp -nn_hls+1)- nfiimpp(isendto(1),jpnj) + 4 
    213213                           ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     
    217217               ENDIF 
    218218               DO jl = 1, ipl; DO jk = 1, ipk 
    219                   DO ji = startloop, nlci 
     219                  DO ji = startloop, jpi 
    220220                     ijt=jpiglo - (ji + nimpp -nn_hls+1)- nfiimpp(isendto(1),jpnj) + 4 
    221                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,1,jk,jl,jf) 
     221                     ARRAY_IN(ji,jpj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,1,jk,jl,jf) 
    222222                  END DO 
    223223               END DO; END DO 
    224224               IF (nimpp .eq. 1) THEN 
    225225        DO jj = 1, nn_hls 
    226                        ijj = nlcj-jj+1 
     226                       ijj = jpj-jj+1 
    227227                       DO ii = 0, nn_hls-1 
    228                         ARRAY_IN(ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii+1,nlcj-2*nn_hls+jj-1,:,:,jf) 
     228                        ARRAY_IN(ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii+1,jpj-2*nn_hls+jj-1,:,:,jf) 
    229229           END DO 
    230230        END DO 
    231231               ENDIF 
    232232            CASE ( 'F' )                                     ! F-point 
    233                IF( nimpp + nlci - 2*nn_hls+1 /= jpiglo ) THEN 
    234                   endloop = nlci 
     233               IF( nimpp + jpi - 2*nn_hls+1 /= jpiglo ) THEN 
     234                  endloop = jpi 
    235235               ELSE 
    236                   endloop = nlci - nn_hls 
     236                  endloop = jpi - nn_hls 
    237237               ENDIF 
    238238               IF ( .NOT. l_fast_exchanges ) THEN 
    239239                  DO jl = 1, ipl; DO jk = 1, ipk 
    240240                       DO jj = 2, nn_hls+1 
    241                      ijj = nlcj -jj +1 
     241                     ijj = jpj -jj +1 
    242242                        DO ji = 1, endloop 
    243243                           iju = jpiglo - (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 3 
     
    250250                  DO ji = 1, endloop 
    251251                     iju = jpiglo - (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 3 
    252                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,1,jk,jl,jf) 
     252                     ARRAY_IN(ji,jpj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,1,jk,jl,jf) 
    253253                  END DO 
    254254               END DO; END DO 
    255255      IF (nimpp .eq. 1) THEN                
    256256         DO ii = 1, nn_hls 
    257                  ARRAY_IN(ii+1,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii,nlcj-2*nn_hls-1,:,:,jf) 
     257                 ARRAY_IN(ii+1,jpj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii,jpj-2*nn_hls-1,:,:,jf) 
    258258         END DO 
    259259         IF ( .NOT. l_fast_exchanges ) THEN 
    260260            DO jj = 1, nn_hls 
    261                       ijj = nlcj -jj 
     261                      ijj = jpj -jj 
    262262                      DO ii = 1, nn_hls 
    263                          ARRAY_IN(2-ii,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii,nlcj-2*nn_hls+jj-1,:,:,jf) 
     263                         ARRAY_IN(2-ii,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2*nn_hls-ii,jpj-2*nn_hls+jj-1,:,:,jf) 
    264264                   END DO 
    265265                      END DO 
    266266                     ENDIF 
    267267      ENDIF 
    268       IF((nimpp + nlci - 2*nn_hls+1 ) .eq. jpiglo) THEN 
     268      IF((nimpp + jpi - 2*nn_hls+1 ) .eq. jpiglo) THEN 
    269269                   DO ii = 1, nn_hls 
    270                  ARRAY_IN(nlci-ii+1,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2*nn_hls+ii,nlcj-2*nn_hls-1,:,:,jf) 
     270                 ARRAY_IN(jpi-ii+1,jpj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(jpi-2*nn_hls+ii,jpj-2*nn_hls-1,:,:,jf) 
    271271         END DO 
    272272         IF ( .NOT. l_fast_exchanges ) THEN 
    273273            DO jj = 1, nn_hls 
    274                            ijj = nlcj -jj 
     274                           ijj = jpj -jj 
    275275                      DO ii = 1, nn_hls 
    276                          ARRAY_IN(nlci-ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2*nn_hls+ii,nlcj-2*nn_hls+jj-1,:,:,jf) 
     276                         ARRAY_IN(jpi-ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(jpi-2*nn_hls+ii,jpj-2*nn_hls+jj-1,:,:,jf) 
    277277                         END DO 
    278278                      END DO 
     
    288288               DO jl = 1, ipl; DO jk = 1, ipk 
    289289        DO jj = 1, nn_hls 
    290            ijj = nlcj-jj+1 
    291            DO ji = 1, nlci 
     290           ijj = jpj-jj+1 
     291           DO ji = 1, jpi 
    292292                        ijt = jpiglo - ( ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 3 
    293293                        ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     
    297297               ! 
    298298            CASE ( 'U' )                                     ! U-point 
    299                IF( nimpp + nlci - 2*nn_hls+1 /= jpiglo ) THEN 
    300                   endloop = nlci 
     299               IF( nimpp + jpi - 2*nn_hls+1 /= jpiglo ) THEN 
     300                  endloop = jpi 
    301301               ELSE 
    302                   endloop = nlci - nn_hls 
    303                ENDIF 
    304                DO jl = 1, ipl; DO jk = 1, ipk 
    305         DO jj = 1, nn_hls 
    306            ijj = nlcj-jj+1 
     302                  endloop = jpi - nn_hls 
     303               ENDIF 
     304               DO jl = 1, ipl; DO jk = 1, ipk 
     305        DO jj = 1, nn_hls 
     306           ijj = jpj-jj+1 
    307307                     DO ji = 1, endloop 
    308308                        iju = jpiglo- (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 2 
     
    311311                  END DO 
    312312               END DO; END DO 
    313                IF(nimpp + nlci - 2*nn_hls+1 .eq. jpiglo) THEN 
     313               IF(nimpp + jpi - 2*nn_hls+1 .eq. jpiglo) THEN 
    314314                  DO jl = 1, ipl; DO jk = 1, ipk 
    315315                     DO jj = 1, nn_hls 
    316                           ijj = nlcj-jj+1 
     316                          ijj = jpj-jj+1 
    317317                        DO ii = 1, nn_hls 
    318             iij = nlci-ii+1 
    319                            ARRAY_IN(iij,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2*nn_hls+ii-1,nlcj-2*nn_hls+jj,jk,jl,jf) 
     318            iij = jpi-ii+1 
     319                           ARRAY_IN(iij,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(jpi-2*nn_hls+ii-1,jpj-2*nn_hls+jj,jk,jl,jf) 
    320320                        END DO 
    321321                     END DO 
     
    326326               DO jl = 1, ipl; DO jk = 1, ipk 
    327327        DO jj = 1, nn_hls 
    328            ijj = nlcj -jj +1 
    329                      DO ji = 1, nlci 
     328           ijj = jpj -jj +1 
     329                     DO ji = 1, jpi 
    330330                        ijt = jpiglo - (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 3 
    331331                        ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     
    337337                  IF( nimpp >= jpiglo/2+1 ) THEN 
    338338                     startloop = 1 
    339                   ELSEIF( nimpp+nlci-2*nn_hls+1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
     339                  ELSEIF( nimpp+jpi-2*nn_hls+1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
    340340                     startloop = jpiglo/2+1 - nimpp + nn_hls 
    341341                  ELSE 
    342                      startloop = nlci + 1 
    343                   ENDIF 
    344                   IF( startloop <= nlci ) THEN 
    345                   DO jl = 1, ipl; DO jk = 1, ipk 
    346                         DO ji = startloop, nlci 
     342                     startloop = jpi + 1 
     343                  ENDIF 
     344                  IF( startloop <= jpi ) THEN 
     345                  DO jl = 1, ipl; DO jk = 1, ipk 
     346                        DO ji = startloop, jpi 
    347347                        ijt = jpiglo - (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 3 
    348                            ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,nn_hls+1,jk,jl,jf) 
     348                           ARRAY_IN(ji,jpj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,nn_hls+1,jk,jl,jf) 
    349349                        END DO 
    350350                  END DO; END DO 
     
    353353               ! 
    354354            CASE ( 'F' )                               ! F-point 
    355                IF( nimpp + nlci - 2*nn_hls+1 /= jpiglo ) THEN 
    356                   endloop = nlci 
     355               IF( nimpp + jpi - 2*nn_hls+1 /= jpiglo ) THEN 
     356                  endloop = jpi 
    357357               ELSE 
    358                   endloop = nlci - nn_hls 
    359                ENDIF 
    360                DO jl = 1, ipl; DO jk = 1, ipk 
    361         DO jj = 1, nn_hls 
    362           ijj = nlcj -jj +1 
     358                  endloop = jpi - nn_hls 
     359               ENDIF 
     360               DO jl = 1, ipl; DO jk = 1, ipk 
     361        DO jj = 1, nn_hls 
     362          ijj = jpj -jj +1 
    363363                    DO ji = 1, endloop 
    364364                       iju = jpiglo - (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 2 
     
    367367                  END DO 
    368368               END DO; END DO 
    369                IF((nimpp + nlci - 2*nn_hls+1) .eq. jpiglo) THEN 
     369               IF((nimpp + jpi - 2*nn_hls+1) .eq. jpiglo) THEN 
    370370                  DO jl = 1, ipl; DO jk = 1, ipk 
    371371                     DO jj = 1, nn_hls 
    372                         ijj = nlcj -jj +1 
     372                        ijj = jpj -jj +1 
    373373                        DO ii = 1, nn_hls 
    374             iij = nlci -ii+1 
    375                            ARRAY_IN(iij,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2*nn_hls+ii-1,nlcj-2*nn_hls+jj-1,jk,jl,jf) 
     374            iij = jpi -ii+1 
     375                           ARRAY_IN(iij,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(jpi-2*nn_hls+ii-1,jpj-2*nn_hls+jj-1,jk,jl,jf) 
    376376                        END DO 
    377377                     END DO 
     
    380380               ! 
    381381               IF ( .NOT. l_fast_exchanges ) THEN 
    382                   IF( nimpp + nlci - 2*nn_hls+1 /= jpiglo ) THEN 
    383                      endloop = nlci 
    384                   ELSE 
    385                      endloop = nlci - nn_hls 
     382                  IF( nimpp + jpi - 2*nn_hls+1 /= jpiglo ) THEN 
     383                     endloop = jpi 
     384                  ELSE 
     385                     endloop = jpi - nn_hls 
    386386                  ENDIF 
    387387                  IF( nimpp >= jpiglo/2+1 ) THEN 
    388388                     startloop = 1  
    389                   ELSEIF( nimpp+nlci-2*nn_hls+1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
     389                  ELSEIF( nimpp+jpi-2*nn_hls+1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
    390390                     startloop = jpiglo/2+1 - nimpp + nn_hls 
    391391                  ELSE 
     
    396396                        DO ji = startloop, endloop 
    397397                           iju = jpiglo - (ji + nimpp -nn_hls+1) - nfiimpp(isendto(1),jpnj) + 2 
    398                            ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,nn_hls+1,jk,jl,jf) 
     398                           ARRAY_IN(ji,jpj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,nn_hls+1,jk,jl,jf) 
    399399                        END DO 
    400400                     END DO; END DO 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/lbclnk.F90

    r12377 r12807  
    248248      ! 
    249249      INTEGER ::   ji, jj, jr 
    250       INTEGER ::   ierr, itaille, ildi, ilei, iilb 
     250      INTEGER ::   ierr, itaille, iis0, iie0, iilb 
    251251      INTEGER ::   ipj, ij, iproc 
    252252      ! 
     
    282282      DO jr = 1, ndim_rank_north            ! recover the global north array 
    283283         iproc = nrank_north(jr) + 1 
    284          ildi = nldit (iproc) 
    285          ilei = nleit (iproc) 
     284         iis0 = nis0all(iproc) 
     285         iie0 = nie0all(iproc) 
    286286         iilb = nimppt(iproc) 
    287287         DO jj = 1-kextj, ipj+kextj 
    288             DO ji = ildi, ilei 
     288            DO ji = iis0, iie0 
    289289               ztab_e(ji+iilb-1,jj) = znorthgloio_e(ji,jj,jr) 
    290290            END DO 
     
    396396      SELECT CASE ( nbondi )      ! Read Dirichlet lateral conditions 
    397397      CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case) 
    398          iihom = jpi-nreci-kexti 
     398         iihom = jpi - (2 * nn_hls) - kexti 
    399399         DO jl = 1, ipreci 
    400400            r2dew(:,jl,1) = pt2d(nn_hls+jl,:) 
     
    453453      ! 
    454454      IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions 
    455          ijhom = jpj-nrecj-kextj 
     455         ijhom = jpj - ( 2 * nn_hls ) -kextj 
    456456         DO jl = 1, iprecj 
    457457            r2dsn(:,jl,1) = pt2d(:,ijhom +jl) 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/mpp_lnk_generic.h90

    r12719 r12807  
    189189         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
    190190            ARRAY_IN(ji,jj,jk,jl,jf) = zrcv_we(ji,jj,jk,jl,jf)   ! 1 -> nn_hls 
    191          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     191         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    192192      CASE ( jpfillperio )                 ! use east-weast periodicity 
    193193         ishift2 = jpi - 2 * nn_hls 
    194194         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
    195195            ARRAY_IN(ji,jj,jk,jl,jf) = ARRAY_IN(ishift2+ji,jj,jk,jl,jf) 
    196          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     196         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    197197      CASE ( jpfillcopy  )                 ! filling with inner domain values 
    198          DO jf = 1, ipf                               ! number of arrays to be treated 
    199             IF( .NOT. NAT_IN(jf) == 'F' ) THEN        ! do nothing for F point 
    200                DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
    201                   ARRAY_IN(ji,jj,jk,jl,jf) = ARRAY_IN(nn_hls+1,jj,jk,jl,jf) 
    202                END DO   ;   END DO   ;   END DO   ;   END DO 
    203             ENDIF 
    204          END DO 
     198         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
     199            ARRAY_IN(ji,jj,jk,jl,jf) = ARRAY_IN(nn_hls+1,jj,jk,jl,jf) 
     200         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    205201      CASE ( jpfillcst   )                 ! filling with constant value 
    206          DO jf = 1, ipf                               ! number of arrays to be treated 
    207             IF( .NOT. NAT_IN(jf) == 'F' ) THEN        ! do nothing for F point 
    208                DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
    209                   ARRAY_IN(ji,jj,jk,jl,jf) = zland 
    210                END DO;   END DO   ;   END DO   ;   END DO 
    211             ENDIF 
    212          END DO 
     202         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
     203            ARRAY_IN(ji,jj,jk,jl,jf) = zland 
     204         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    213205      END SELECT 
    214206      ! 
     
    234226         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, jpj   ;   DO ji = 1, nn_hls 
    235227            ARRAY_IN(ishift+ji,jj,jk,jl,jf) = zland 
    236          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     228         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    237229      END SELECT 
    238230      ! 
     
    303295         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
    304296            ARRAY_IN(ji,jj,jk,jl,jf) = zrcv_so(ji,jj,jk,jl,jf)   ! 1 -> nn_hls 
    305          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     297         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    306298      CASE ( jpfillperio )                 ! use north-south periodicity 
    307299         ishift2 = jpj - 2 * nn_hls 
    308300         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
    309301            ARRAY_IN(ji,jj,jk,jl,jf) = ARRAY_IN(ji,ishift2+jj,jk,jl,jf) 
    310          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     302         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    311303      CASE ( jpfillcopy  )                 ! filling with inner domain values 
    312          DO jf = 1, ipf                               ! number of arrays to be treated 
    313             IF( .NOT. NAT_IN(jf) == 'F' ) THEN        ! do nothing for F point 
    314                DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
    315                   ARRAY_IN(ji,jj,jk,jl,jf) = ARRAY_IN(ji,nn_hls+1,jk,jl,jf) 
    316                END DO   ;   END DO   ;   END DO   ;   END DO 
    317             ENDIF 
    318          END DO 
     304         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
     305            ARRAY_IN(ji,jj,jk,jl,jf) = ARRAY_IN(ji,nn_hls+1,jk,jl,jf) 
     306         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    319307      CASE ( jpfillcst   )                 ! filling with constant value 
    320          DO jf = 1, ipf                               ! number of arrays to be treated 
    321             IF( .NOT. NAT_IN(jf) == 'F' ) THEN        ! do nothing for F point 
    322                DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi  
    323                   ARRAY_IN(ji,jj,jk,jl,jf) = zland 
    324                END DO;   END DO   ;   END DO   ;   END DO 
    325             ENDIF 
    326          END DO 
     308         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi  
     309            ARRAY_IN(ji,jj,jk,jl,jf) = zland 
     310         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    327311      END SELECT 
    328312      ! 
     
    340324         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
    341325            ARRAY_IN(ji,ishift+jj,jk,jl,jf) = ARRAY_IN(ji,ishift2+jj,jk,jl,jf) 
    342          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     326         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    343327      CASE ( jpfillcopy  )                 ! filling with inner domain values 
    344328         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
    345329            ARRAY_IN(ji,ishift+jj,jk,jl,jf) = ARRAY_IN(ji,ishift,jk,jl,jf) 
    346          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     330         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    347331      CASE ( jpfillcst   )                 ! filling with constant value 
    348332         DO jf = 1, ipf   ;   DO jl = 1, ipl   ;   DO jk = 1, ipk   ;   DO jj = 1, nn_hls   ;   DO ji = 1, jpi 
    349333            ARRAY_IN(ji,ishift+jj,jk,jl,jf) = zland 
    350          END DO;   END DO   ;   END DO   ;   END DO   ;   END DO 
     334         END DO   ;   END DO   ;   END DO   ;   END DO   ;   END DO 
    351335      END SELECT 
    352336      ! 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/mpp_nfd_generic.h90

    r12719 r12807  
    5656      INTEGER  ::   ipi, ipk, ipl, ipf         ! dimension of the input array 
    5757      INTEGER  ::   imigr, iihom, ijhom             ! local integers 
    58       INTEGER  ::   ierr, ibuffsize, ilci, ildi, ilei, iilb 
     58      INTEGER  ::   ierr, ibuffsize, ijpi, iis0, iie0, iilb 
    5959      INTEGER  ::   ij, iproc 
    6060      INTEGER, DIMENSION (jpmaxngh)       ::   ml_req_nf   ! for mpi_isend when avoiding mpi_allgather 
     
    111111               CASE ( 'T' , 'W' ,'U' )                            ! T-, U-, W-point 
    112112                  DO ji = 1, nn_hls+1 
    113                      jj_s(jf,ji) = nlcj - 2*nn_hls +ji -1 
     113                     jj_s(jf,ji) = jpj - 2*nn_hls +ji -1 
    114114                  ENDDO 
    115115               CASE ( 'V' , 'F' )                                 ! V-, F-point 
    116116                  DO ji = 1, nn_hls+1 
    117                      jj_s(jf,ji) = nlcj - 2*nn_hls +ji - 2 
     117                     jj_s(jf,ji) = jpj - 2*nn_hls +ji - 2 
    118118                  ENDDO 
    119119               END SELECT 
     
    124124               CASE ( 'T' , 'W' ,'U' )                            ! T-, U-, W-point 
    125125                  DO ji = 1, nn_hls 
    126                      jj_s(jf,ji) = nlcj - 2*nn_hls + ji 
     126                     jj_s(jf,ji) = jpj - 2*nn_hls + ji 
    127127                  ENDDO 
    128128                  ipj_s(jf) = nn_hls                  ! need only one line anyway 
    129129               CASE ( 'V' , 'F' )                                 ! V-, F-point 
    130130                  DO ji = 1, nn_hls+1 
    131                      jj_s(jf,ji) = nlcj - 2*nn_hls +ji -1 
     131                     jj_s(jf,ji) = jpj - 2*nn_hls +ji -1 
    132132                  ENDDO 
    133133               END SELECT 
     
    175175            iproc = nfipproc(isendto(jr),jpnj) 
    176176            IF(iproc /= -1) THEN 
    177                iilb = nimppt(iproc+1) 
    178                ilci = nlcit (iproc+1) 
    179                ildi = nldit (iproc+1) + nn_hls-1 
    180                ilei = nleit (iproc+1) + nn_hls-1 
    181                IF( iilb            ==      1 )   ildi = nn_hls   ! e-w boundary already done -> force to take 1st column 
    182                IF( iilb + ilci - 1 == jpiglo )   ilei = nlei+1   ! e-w boundary already done -> force to take last column 
     177               iilb =  nimppt(iproc+1) 
     178               ijpi =  jpiall(iproc+1) 
     179               iis0 = nis0all(iproc+1) + nn_hls-1 
     180               iie0 = nie0all(iproc+1) + nn_hls-1 
     181               IF( iilb            ==      1 )   iis0 = nn_hls   ! e-w boundary already done -> force to take 1st column 
     182               IF( iilb + ijpi - 1 == jpiglo )   iie0 = Nie0+1   ! e-w boundary already done -> force to take last column 
    183183               iilb = nfiimpp(isendto(jr),jpnj) - nfiimpp(isendto(1),jpnj) 
    184184            ENDIF 
     
    190190                  DO jl = 1, ipl 
    191191                     DO jk = 1, ipk 
    192                         DO ji = ildi, ilei 
     192                        DO ji = iis0, iie0 
    193193                           ztabr(iilb-nn_hls+1+ji,jj,jk,jl,jf) = zfoldwk(ji,js,jk,jl,1) 
    194194                        END DO 
     
    200200                  DO jl = 1, ipl 
    201201                     DO jk = 1, ipk 
    202                         DO ji = ildi, ilei 
     202                        DO ji = iis0, iie0 
    203203                           ztabr(iilb-nn_hls+1+ji,jj,jk,jl,jf) = ARRAY_IN(ji,jj_s(jf,jj),jk,jl,jf) 
    204204                        END DO 
     
    233233            DO jl = 1, ipl 
    234234               DO jk = 1, ipk 
    235                   DO jj = nlcj - ijpj +1, nlcj 
    236                      ij = jj - nlcj + ijpj 
     235                  DO jj = jpj - ijpj +1, jpj 
     236                     ij = jj - jpj + ijpj 
    237237                     znorthloc(1:jpi,ij,jk,jl,jf) = ARRAY_IN(1:jpi,jj,jk,jl,jf) 
    238238                  END DO 
     
    262262         DO jr = 1, ndim_rank_north         ! recover the global north array 
    263263            iproc = nrank_north(jr) + 1 
    264             iilb  = nimppt(iproc) 
    265             ilci  = nlcit (iproc) 
    266             ildi  = nldit (iproc) 
    267             ilei  = nleit (iproc) 
    268             IF( iilb            ==      1 )   ildi = 1      ! e-w boundary already done -> force to take 1st column 
    269             IF( iilb + ilci - 1 == jpiglo )   ilei = ilci   ! e-w boundary already done -> force to take last column 
     264            iilb  =  nimppt(iproc) 
     265            ijpi  =  jpiall(iproc) 
     266            iis0  = nis0all(iproc) 
     267            iie0  = nie0all(iproc) 
     268            IF( iilb            ==      1 )   iis0 = 1      ! e-w boundary already done -> force to take 1st column 
     269            IF( iilb + ijpi - 1 == jpiglo )   iie0 = ijpi   ! e-w boundary already done -> force to take last column 
    270270            DO jf = 1, ipf 
    271271               DO jl = 1, ipl 
    272272                  DO jk = 1, ipk 
    273273                     DO jj = 1, ijpj 
    274                         DO ji = ildi, ilei 
     274                        DO ji = iis0, iie0 
    275275                           ztab(ji+iilb-1,jj,jk,jl,jf) = znorthgloio(ji,jj,jk,jl,jf,jr) 
    276276                        END DO 
     
    287287            DO jl = 1, ipl 
    288288               DO jk = 1, ipk 
    289                   DO jj = nlcj-ijpj+1, nlcj             ! Scatter back to ARRAY_IN 
    290                      ij = jj - nlcj + ijpj 
    291                      DO ji= 1, nlci 
     289                  DO jj = jpj-ijpj+1, jpj             ! Scatter back to ARRAY_IN 
     290                     ij = jj - jpj + ijpj 
     291                     DO ji= 1, jpi 
    292292                        ARRAY_IN(ji,jj,jk,jl,jf) = ztab(ji+nimpp-1,ij,jk,jl,jf) 
    293293                     END DO 
  • NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/mppini.F90

    r12760 r12807  
    5959      !!---------------------------------------------------------------------- 
    6060      ! 
     61      jpiglo = Ni0glo 
     62      jpjglo = Nj0glo 
    6163      jpimax = jpiglo 
    6264      jpjmax = jpjglo 
     
    7678      nimpp  = 1           !  
    7779      njmpp  = 1 
    78       nlci   = jpi 
    79       nlcj   = jpj 
    80       nldi   = 1 
    81       nldj   = 1 
    82       nlei   = jpi 
    83       nlej   = jpj 
    8480      nbondi = 2 
    8581      nbondj = 2 
     
    131127      !!                    njmpp     : latitudinal  index 
    132128      !!                    narea     : number for local area 
    133       !!                    nlci      : first dimension 
    134       !!                    nlcj      : second dimension 
    135129      !!                    nbondi    : mark for "east-west local boundary" 
    136130      !!                    nbondj    : mark for "north-south local boundary" 
     
    158152      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   iin, ii_nono, ii_noea          ! 1D workspace 
    159153      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ijn, ii_noso, ii_nowe          !  -     - 
    160       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iimppt, ilci, ibondi, ipproc   ! 2D workspace 
    161       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ijmppt, ilcj, ibondj, ipolj    !  -     - 
    162       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ilei, ildi, iono, ioea         !  -     - 
    163       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ilej, ildj, ioso, iowe         !  -     - 
     154      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iimppt, ijpi, ibondi, ipproc   ! 2D workspace 
     155      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ijmppt, ijpj, ibondj, ipolj    !  -     - 
     156      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iie0, iis0, iono, ioea         !  -     - 
     157      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ije0, ijs0, ioso, iowe         !  -     - 
    164158      LOGICAL, ALLOCATABLE, DIMENSION(:,:) ::   llisoce                        !  -     - 
    165159      NAMELIST/nambdy/ ln_bdy, nb_bdy, ln_coords_file, cn_coords_file,           & 
     
    194188      ! 
    195189      IF(lwm)   WRITE( numond, nammpp ) 
    196  
     190      ! 
     191!!!------------------------------------ 
     192!!!  nn_hls shloud be read in nammpp 
     193!!!------------------------------------ 
     194      jpiglo = Ni0glo + 2 * nn_hls 
     195      jpjglo = Nj0glo + 2 * nn_hls 
     196      ! 
    197197      ! do we need to take into account bdy_msk? 
    198198      READ  ( numnam_ref, nambdy, IOSTAT = ios, ERR = 903) 
     
    204204      IF( ln_bdy .AND. ln_mask_file ) CALL iom_open( cn_mask_file, numbdy ) 
    205205      ! 
    206       IF( ln_listonly )   CALL mpp_init_bestpartition( MAX(mppsize,jpni*jpnj), ldlist = .TRUE. )   ! must be done by all core 
     206      IF( ln_listonly )   CALL bestpartition( MAX(mppsize,jpni*jpnj), ldlist = .TRUE. )   ! must be done by all core 
    207207      ! 
    208208      !  1. Dimension arrays for subdomains 
    209209      ! ----------------------------------- 
    210210      ! 
    211       ! If dimensions of processor grid weren't specified in the namelist file 
     211      ! If dimensions of processors grid weren't specified in the namelist file 
    212212      ! then we calculate them here now that we have our communicator size 
    213213      IF(lwp) THEN 
     
    217217      ENDIF 
    218218      IF( jpni < 1 .OR. jpnj < 1 ) THEN 
    219          CALL mpp_init_bestpartition( mppsize, jpni, jpnj )           ! best mpi decomposition for mppsize mpi processes 
     219         CALL bestpartition( mppsize, jpni, jpnj )           ! best mpi decomposition for mppsize mpi processes 
    220220         llauto = .TRUE. 
    221221         llbest = .TRUE. 
    222222      ELSE 
    223223         llauto = .FALSE. 
    224          CALL mpp_init_bestpartition( mppsize, inbi, inbj, icnt2 )    ! best mpi decomposition for mppsize mpi processes 
     224         CALL bestpartition( mppsize, inbi, inbj, icnt2 )    ! best mpi decomposition for mppsize mpi processes 
    225225         ! largest subdomain size for mpi decoposition jpni*jpnj given in the namelist 
    226          CALL mpp_basic_decomposition( jpni, jpnj, jpimax, jpjmax ) 
    227          ! largest subdomain size for mpi decoposition inbi*inbj given by mpp_init_bestpartition 
    228          CALL mpp_basic_decomposition( inbi, inbj,  iimax,  ijmax ) 
     226         CALL basic_decomposition( jpiglo, jpjglo, nn_hls, jpni, jpnj, jpimax, jpjmax ) 
     227         ! largest subdomain size for mpi decoposition inbi*inbj given by bestpartition 
     228         CALL basic_decomposition( jpiglo, jpjglo, nn_hls, inbi, inbj,  iimax,  ijmax ) 
    229229         icnt1 = jpni*jpnj - mppsize   ! number of land subdomains that should be removed to use mppsize mpi processes 
    230230         IF(lwp) THEN 
     
    257257      ! look for land mpi subdomains... 
    258258      ALLOCATE( llisoce(jpni,jpnj) ) 
    259       CALL mpp_init_isoce( jpni, jpnj, llisoce ) 
     259      CALL is_ocean( jpni, jpnj, llisoce ) 
    260260      inijmin = COUNT( llisoce )   ! number of oce subdomains 
    261261 
     
    266266         WRITE(ctmp4,*) '   ==>>> There is the list of best domain decompositions you should use: ' 
    267267         CALL ctl_stop( ctmp1, ctmp2, ctmp3, ' ', ctmp4, ' ' ) 
    268          CALL mpp_init_bestpartition( mppsize, ldlist = .TRUE. )   ! must be done by all core 
     268         CALL bestpartition( mppsize, ldlist = .TRUE. )   ! must be done by all core 
    269269      ENDIF 
    270270 
     
    290290            WRITE(numout,*) 
    291291         ENDIF 
    292          CALL mpp_init_bestpartition( mppsize, ldlist = .TRUE. )   ! must be done by all core 
     292         CALL bestpartition( mppsize, ldlist = .TRUE. )   ! must be done by all core 
    293293      ENDIF 
    294294 
     
    318318      IF( numbdy /= -1 )   CALL iom_close( numbdy ) 
    319319     
    320       ALLOCATE(  nfiimpp(jpni,jpnj), nfipproc(jpni,jpnj), nfilcit(jpni,jpnj) ,    & 
    321          &       nimppt(jpnij) , ibonit(jpnij) , nlcit(jpnij) , nlcjt(jpnij) ,    & 
    322          &       njmppt(jpnij) , ibonjt(jpnij) , nldit(jpnij) , nldjt(jpnij) ,    & 
    323          &                                       nleit(jpnij) , nlejt(jpnij) ,    & 
     320      ALLOCATE(  nfiimpp(jpni,jpnj), nfipproc(jpni,jpnj), nfijpit(jpni,jpnj) ,    & 
     321         &       nimppt(jpnij) , ibonit(jpnij) ,  jpiall(jpnij) ,  jpjall(jpnij) ,    & 
     322         &       njmppt(jpnij) , ibonjt(jpnij) , nis0all(jpnij) , njs0all(jpnij) ,    & 
     323         &                                       nie0all(jpnij) , nje0all(jpnij) ,    & 
    324324         &       iin(jpnij), ii_nono(jpnij), ii_noea(jpnij),   & 
    325325         &       ijn(jpnij), ii_noso(jpnij), ii_nowe(jpnij),   & 
    326          &       iimppt(jpni,jpnj), ilci(jpni,jpnj), ibondi(jpni,jpnj), ipproc(jpni,jpnj),   & 
    327          &       ijmppt(jpni,jpnj), ilcj(jpni,jpnj), ibondj(jpni,jpnj), ipolj(jpni,jpnj),   & 
    328          &       ilei(jpni,jpnj), ildi(jpni,jpnj), iono(jpni,jpnj), ioea(jpni,jpnj),   & 
    329          &       ilej(jpni,jpnj), ildj(jpni,jpnj), ioso(jpni,jpnj), iowe(jpni,jpnj),   & 
     326         &       iimppt(jpni,jpnj), ijpi(jpni,jpnj), ibondi(jpni,jpnj), ipproc(jpni,jpnj),   & 
     327         &       ijmppt(jpni,jpnj), ijpj(jpni,jpnj), ibondj(jpni,jpnj), ipolj(jpni,jpnj),   & 
     328         &         iie0(jpni,jpnj), iis0(jpni,jpnj),   iono(jpni,jpnj),  ioea(jpni,jpnj),   & 
     329         &         ije0(jpni,jpnj), ijs0(jpni,jpnj),   ioso(jpni,jpnj),  iowe(jpni,jpnj),   & 
    330330         &       STAT=ierr ) 
    331331      CALL mpp_sum( 'mppini', ierr ) 
     
    345345      ! ----------------------------------- 
    346346      ! 
    347       nreci = 2 * nn_hls 
    348       nrecj = 2 * nn_hls 
    349       CALL mpp_basic_decomposition( jpni, jpnj, jpimax, jpjmax, iimppt, ijmppt, ilci, ilcj ) 
     347      CALL basic_decomposition( jpiglo, jpjglo, nn_hls, jpni, jpnj, jpimax, jpjmax, iimppt, ijmppt, ijpi, ijpj ) 
    350348      nfiimpp(:,:) = iimppt(:,:) 
    351       nfilcit(:,:) = ilci(:,:) 
     349      nfijpit(:,:) = ijpi(:,:) 
    352350      ! 
    353351      IF(lwp) THEN 
     
    359357         WRITE(numout,*) '      jpnj = ', jpnj 
    360358         WRITE(numout,*) 
    361          WRITE(numout,*) '      sum ilci(i,1) = ', sum(ilci(:,1)), ' jpiglo = ', jpiglo 
    362          WRITE(numout,*) '      sum ilcj(1,j) = ', sum(ilcj(1,:)), ' jpjglo = ', jpjglo 
     359         WRITE(numout,*) '      sum ijpi(i,1) = ', sum(ijpi(:,1)), ' jpiglo = ', jpiglo 
     360         WRITE(numout,*) '      sum ijpj(1,j) = ', sum(ijpj(1,:)), ' jpjglo = ', jpjglo 
    363361      ENDIF 
    364362      
     
    375373         ii = 1 + MOD(iarea0,jpni) 
    376374         ij = 1 +     iarea0/jpni 
    377          ili = ilci(ii,ij) 
    378          ilj = ilcj(ii,ij) 
     375         ili = ijpi(ii,ij) 
     376         ilj = ijpj(ii,ij) 
    379377         ibondi(ii,ij) = 0                         ! default: has e-w neighbours 
    380378         IF( ii   ==    1 )   ibondi(ii,ij) = -1   ! first column, has only e neighbour 
     
    391389         ioea(ii,ij) = iarea0 + 1 
    392390         iono(ii,ij) = iarea0 + jpni 
    393          ildi(ii,ij) =  1  + nn_hls 
    394          ilei(ii,ij) = ili - nn_hls 
    395          ildj(ii,ij) =  1  + nn_hls 
    396          ilej(ii,ij) = ilj - nn_hls 
     391         iis0(ii,ij) =  1  + nn_hls 
     392         iie0(ii,ij) = ili - nn_hls 
     393         ijs0(ii,ij) =  1  + nn_hls 
     394         ije0(ii,ij) = ilj - nn_hls 
    397395 
    398396         ! East-West periodicity: change ibondi, ioea, iowe 
     
    500498         ENDIF 
    501499      END DO 
    502  
    503       ! Update il[de][ij] according to modified ibond[ij] 
    504       ! ---------------------- 
    505       DO jproc = 1, jpnij 
    506          ii = iin(jproc) 
    507          ij = ijn(jproc) 
    508          IF( ibondi(ii,ij) == -1 .OR. ibondi(ii,ij) == 2 ) ildi(ii,ij) =  1 
    509          IF( ibondi(ii,ij) ==  1 .OR. ibondi(ii,ij) == 2 ) ilei(ii,ij) = ilci(ii,ij) 
    510          IF( ibondj(ii,ij) == -1 .OR. ibondj(ii,ij) == 2 ) ildj(ii,ij) =  1 
    511          IF( ibondj(ii,ij) ==  1 .OR. ibondj(ii,ij) == 2 ) ilej(ii,ij) = ilcj(ii,ij) 
    512       END DO 
    513500       
    514501      ! 5. Subdomain print 
     
    523510            DO jj = jpnj, 1, -1 
    524511               WRITE(numout,9403) ('   ',ji=il1,il2-1) 
    525                WRITE(numout,9402) jj, (ilci(ji,jj),ilcj(ji,jj),ji=il1,il2) 
     512               WRITE(numout,9402) jj, (ijpi(ji,jj),ijpj(ji,jj),ji=il1,il2) 
    526513               WRITE(numout,9404) (ipproc(ji,jj),ji=il1,il2) 
    527514               WRITE(numout,9403) ('   ',ji=il1,il2-1) 
     
    580567      noea = ii_noea(narea) 
    581568      nono = ii_nono(narea) 
    582       nlci = ilci(ii,ij)   
    583       nldi = ildi(ii,ij) 
    584       nlei = ilei(ii,ij) 
    585       nlcj = ilcj(ii,ij)   
    586       nldj = ildj(ii,ij) 
    587       nlej = ilej(ii,ij) 
     569      jpi    = ijpi(ii,ij)   
     570!!$      Nis0  = iis0(ii,ij) 
     571!!$      Nie0  = iie0(ii,ij) 
     572      jpj    = ijpj(ii,ij)   
     573!!$      Njs0  = ijs0(ii,ij) 
     574!!$      Nje0  = ije0(ii,ij) 
    588575      nbondi = ibondi(ii,ij) 
    589576      nbondj = ibondj(ii,ij) 
    590577      nimpp = iimppt(ii,ij)   
    591578      njmpp = ijmppt(ii,ij) 
    592       jpi = nlci 
    593       jpj = nlcj 
    594579      jpk = jpkglo                              ! third dim 
    595580#if defined key_agrif 
     
    609594         ii = iin(jproc) 
    610595         ij = ijn(jproc) 
    611          nlcit(jproc) = ilci(ii,ij) 
    612          nldit(jproc) = ildi(ii,ij) 
    613          nleit(jproc) = ilei(ii,ij) 
    614          nlcjt(jproc) = ilcj(ii,ij) 
    615          nldjt(jproc) = ildj(ii,ij) 
    616          nlejt(jproc) = ilej(ii,ij) 
     596         jpiall (jproc) = ijpi(ii,ij) 
     597         nis0all(jproc) = iis0(ii,ij) 
     598         nie0all(jproc) = iie0(ii,ij) 
     599         jpjall (jproc) = ijpj(ii,ij) 
     600         njs0all(jproc) = ijs0(ii,ij) 
     601         nje0all(jproc) = ije0(ii,ij) 
    617602         ibonit(jproc) = ibondi(ii,ij) 
    618603         ibonjt(jproc) = ibondj(ii,ij) 
     
    628613         WRITE(inum,'(6i8,a,3i8,a)') jpnij,jpimax,jpjmax,jpk,jpiglo,jpjglo,& 
    629614   &           ' ( local: ',narea,jpi,jpj,' )' 
    630          WRITE(inum,'(a)') 'nproc nlci nlcj nldi nldj nlei nlej nimp njmp nono noso nowe noea nbondi nbondj ' 
     615         WRITE(inum,'(a)') 'nproc jpi jpj Nis0 Njs0 Nie0 Nje0 nimp njmp nono noso nowe noea nbondi nbondj ' 
    631616 
    632617         DO jproc = 1, jpnij 
    633             WRITE(inum,'(13i5,2i7)')   jproc-1, nlcit  (jproc), nlcjt  (jproc),   & 
    634                &                                nldit  (jproc), nldjt  (jproc),   & 
    635                &                                nleit  (jproc), nlejt  (jproc),   & 
     618            WRITE(inum,'(13i5,2i7)')   jproc-1,  jpiall(jproc),  jpjall(jproc),   & 
     619               &                                nis0all(jproc), njs0all(jproc),   & 
     620               &                                nie0all(jproc), nje0all(jproc),   & 
    636621               &                                nimppt (jproc), njmppt (jproc),   &  
    637622               &                                ii_nono(jproc), ii_noso(jproc),   & 
     
    667652         WRITE(numout,*) '    l_Iperio = ', l_Iperio 
    668653         WRITE(numout,*) '    l_Jperio = ', l_Jperio 
    669          WRITE(numout,*) '      nlci   = ', nlci 
    670          WRITE(numout,*) '      nlcj   = ', nlcj 
    671654         WRITE(numout,*) '      nimpp  = ', nimpp 
    672655         WRITE(numout,*) '      njmpp  = ', njmpp 
    673          WRITE(numout,*) '      nreci  = ', nreci   
    674          WRITE(numout,*) '      nrecj  = ', nrecj   
    675656         WRITE(numout,*) '      nn_hls = ', nn_hls  
    676657      ENDIF 
     
    712693      DEALLOCATE(iin, ijn, ii_nono, ii_noea, ii_noso, ii_nowe,    & 
    713694         &       iimppt, ijmppt, ibondi, ibondj, ipproc, ipolj,   & 
    714          &       ilci, ilcj, ilei, ilej, ildi, ildj,              & 
     695         &       ijpi, ijpj, iie0, ije0, iis0, ijs0,              & 
    715696         &       iono, ioea, ioso, iowe, llisoce) 
    716697      ! 
     
    718699 
    719700 
    720     SUBROUTINE mpp_basic_decomposition( knbi, knbj, kimax, kjmax, kimppt, kjmppt, klci, klcj) 
    721       !!---------------------------------------------------------------------- 
    722       !!                  ***  ROUTINE mpp_basic_decomposition  *** 
     701    SUBROUTINE basic_decomposition( kiglo, kjglo, khls, knbi, knbj, kimax, kjmax, kimppt, kjmppt, klci, klcj) 
     702      !!---------------------------------------------------------------------- 
     703      !!                  ***  ROUTINE basic_decomposition  *** 
    723704      !!                     
    724705      !! ** Purpose :   Lay out the global domain over processors. 
     
    732713      !!                    klcj       : second dimension 
    733714      !!---------------------------------------------------------------------- 
     715      INTEGER,                                 INTENT(in   ) ::   kiglo, kjglo 
     716      INTEGER,                                 INTENT(in   ) ::   khls 
    734717      INTEGER,                                 INTENT(in   ) ::   knbi, knbj 
    735718      INTEGER,                                 INTENT(  out) ::   kimax, kjmax 
     
    738721      ! 
    739722      INTEGER ::   ji, jj 
     723      INTEGER ::   i2hls  
    740724      INTEGER ::   iresti, irestj, irm, ijpjmin 
    741       INTEGER ::   ireci, irecj 
    742       !!---------------------------------------------------------------------- 
     725      !!---------------------------------------------------------------------- 
     726      i2hls = 2*khls 
    743727      ! 
    744728#if defined key_nemocice_decomp 
    745       kimax = ( nx_global+2-2*nn_hls + (knbi-1) ) / knbi + 2*nn_hls    ! first  dim. 
    746       kjmax = ( ny_global+2-2*nn_hls + (knbj-1) ) / knbj + 2*nn_hls    ! second dim.  
     729      kimax = ( nx_global+2-i2hls + (knbi-1) ) / knbi + i2hls    ! first  dim. 
     730      kjmax = ( ny_global+2-i2hls + (knbj-1) ) / knbj + i2hls    ! second dim.  
    747731#else 
    748       kimax = ( jpiglo - 2*nn_hls + (knbi-1) ) / knbi + 2*nn_hls    ! first  dim. 
    749       kjmax = ( jpjglo - 2*nn_hls + (knbj-1) ) / knbj + 2*nn_hls    ! second dim. 
     732      kimax = ( kiglo - i2hls + (knbi-1) ) / knbi + i2hls    ! first  dim. 
     733      kjmax = ( kjglo - i2hls + (knbj-1) ) / knbj + i2hls    ! second dim. 
    750734#endif 
    751735      IF( .NOT. PRESENT(kimppt) ) RETURN 
     
    754738      ! ----------------------------------- 
    755739      !  Computation of local domain sizes klci() klcj() 
    756       !  These dimensions depend on global sizes knbi,knbj and jpiglo,jpjglo 
     740      !  These dimensions depend on global sizes knbi,knbj and kiglo,kjglo 
    757741      !  The subdomains are squares lesser than or equal to the global 
    758742      !  dimensions divided by the number of processors minus the overlap array. 
    759743      ! 
    760       ireci = 2 * nn_hls 
    761       irecj = 2 * nn_hls 
    762       iresti = 1 + MOD( jpiglo - ireci -1 , knbi ) 
    763       irestj = 1 + MOD( jpjglo - irecj -1 , knbj ) 
     744      iresti = 1 + MOD( kiglo - i2hls - 1 , knbi ) 
     745      irestj = 1 + MOD( kjglo - i2hls - 1 , knbj ) 
    764746      ! 
    765747      !  Need to use kimax and kjmax here since jpi and jpj not yet defined 
    766748#if defined key_nemocice_decomp 
    767749      ! Change padding to be consistent with CICE 
    768       klci(1:knbi-1      ,:) = kimax 
    769       klci(knbi          ,:) = jpiglo - (knbi - 1) * (kimax - nreci) 
    770       klcj(:,      1:knbj-1) = kjmax 
    771       klcj(:,          knbj) = jpjglo - (knbj - 1) * (kjmax - nrecj) 
     750      klci(1:knbi-1,:       ) = kimax 
     751      klci(  knbi  ,:       ) = kiglo - (knbi - 1) * (kimax - i2hls) 
     752      klcj(:       ,1:knbj-1) = kjmax 
     753      klcj(:       ,  knbj  ) = kjglo - (knbj - 1) * (kjmax - i2hls) 
    772754#else 
    773755      klci(1:iresti      ,:) = kimax 
    774756      klci(iresti+1:knbi ,:) = kimax-1 
    775       IF( MINVAL(klci) < 3 ) THEN 
    776          WRITE(ctmp1,*) '   mpp_basic_decomposition: minimum value of jpi must be >= 3' 
     757      IF( MINVAL(klci) < 2*i2hls ) THEN 
     758         WRITE(ctmp1,*) '   basic_decomposition: minimum value of jpi must be >= ', 2*i2hls 
    777759         WRITE(ctmp2,*) '   We have ', MINVAL(klci) 
    778760        CALL ctl_stop( 'STOP', ctmp1, ctmp2 ) 
     
    780762      IF( jperio == 3 .OR. jperio == 4 .OR. jperio == 5 .OR. jperio == 6 ) THEN 
    781763         ! minimize the size of the last row to compensate for the north pole folding coast 
    782          IF( jperio == 3 .OR. jperio == 4 )   ijpjmin = 5   ! V and F folding involves line jpj-3 that must not be south boundary 
    783          IF( jperio == 5 .OR. jperio == 6 )   ijpjmin = 4   ! V and F folding involves line jpj-2 that must not be south boundary 
    784          irm = knbj - irestj                                    ! total number of lines to be removed 
    785          klcj(:,            knbj) = MAX( ijpjmin, kjmax-irm )   ! we must have jpj >= ijpjmin in the last row 
    786          irm = irm - ( kjmax - klcj(1,knbj) )                   ! remaining number of lines to remove  
    787          irestj = knbj - 1 - irm                         
    788          klcj(:,        1:irestj) = kjmax 
     764         IF( jperio == 3 .OR. jperio == 4 )   ijpjmin = 2+3*khls   ! V and F folding must be outside of southern halos 
     765         IF( jperio == 5 .OR. jperio == 6 )   ijpjmin = 1+3*khls   ! V and F folding must be outside of southern halos 
     766         irm = knbj - irestj                                       ! total number of lines to be removed 
     767         klcj(:,knbj) = MAX( ijpjmin, kjmax-irm )                  ! we must have jpj >= ijpjmin in the last row 
     768         irm = irm - ( kjmax - klcj(1,knbj) )                      ! remaining number of lines to remove  
     769         irestj = knbj - 1 - irm 
    789770         klcj(:, irestj+1:knbj-1) = kjmax-1 
    790771      ELSE 
    791          ijpjmin = 3 
    792          klcj(:,      1:irestj) = kjmax 
    793          klcj(:, irestj+1:knbj) = kjmax-1 
    794       ENDIF 
    795       IF( MINVAL(klcj) < ijpjmin ) THEN 
    796          WRITE(ctmp1,*) '   mpp_basic_decomposition: minimum value of jpj must be >= ', ijpjmin 
     772         klcj(:, irestj+1:knbj  ) = kjmax-1 
     773      ENDIF 
     774      klcj(:,1:irestj) = kjmax 
     775      IF( MINVAL(klcj) < 2*i2hls ) THEN 
     776         WRITE(ctmp1,*) '   basic_decomposition: minimum value of jpj must be >= ', 2*i2hls 
    797777         WRITE(ctmp2,*) '   We have ', MINVAL(klcj) 
    798778         CALL ctl_stop( 'STOP', ctmp1, ctmp2 ) 
     
    808788         DO jj = 1, knbj 
    809789            DO ji = 2, knbi 
    810                kimppt(ji,jj) = kimppt(ji-1,jj) + klci(ji-1,jj) - ireci 
     790               kimppt(ji,jj) = kimppt(ji-1,jj) + klci(ji-1,jj) - 2 * nn_hls 
    811791            END DO 
    812792         END DO 
     
    816796         DO jj = 2, knbj 
    817797            DO ji = 1, knbi 
    818                kjmppt(ji,jj) = kjmppt(ji,jj-1) + klcj(ji,jj-1) - irecj 
     798               kjmppt(ji,jj) = kjmppt(ji,jj-1) + klcj(ji,jj-1) - 2 * nn_hls 
    819799            END DO 
    820800         END DO 
    821801      ENDIF 
    822802       
    823    END SUBROUTINE mpp_basic_decomposition 
    824  
    825  
    826    SUBROUTINE mpp_init_bestpartition( knbij, knbi, knbj, knbcnt, ldlist ) 
    827       !!---------------------------------------------------------------------- 
    828       !!                 ***  ROUTINE mpp_init_bestpartition  *** 
     803   END SUBROUTINE basic_decomposition 
     804 
     805 
     806   SUBROUTINE bestpartition( knbij, knbi, knbj, knbcnt, ldlist ) 
     807      !!---------------------------------------------------------------------- 
     808      !!                 ***  ROUTINE bestpartition  *** 
    829809      !! 
    830810      !! ** Purpose : 
     
    877857         iszitst = ( nx_global+2-2*nn_hls + (ji-1) ) / ji + 2*nn_hls    ! first  dim. 
    878858#else 
    879          iszitst = ( jpiglo - 2*nn_hls + (ji-1) ) / ji + 2*nn_hls 
     859         iszitst = ( Ni0glo + (ji-1) ) / ji + 2*nn_hls 
    880860#endif 
    881861         IF( iszitst < isziref ) THEN 
     
    888868         iszjtst = ( ny_global+2-2*nn_hls + (ji-1) ) / ji + 2*nn_hls    ! first  dim. 
    889869#else 
    890          iszjtst = ( jpjglo - 2*nn_hls + (ji-1) ) / ji + 2*nn_hls 
     870         iszjtst = ( Nj0glo + (ji-1) ) / ji + 2*nn_hls 
    891871#endif 
    892872         IF( iszjtst < iszjref ) THEN 
     
    976956         ji = isz0   ! initialization with the largest value 
    977957         ALLOCATE( llisoce(inbi0(ji), inbj0(ji)) ) 
    978          CALL mpp_init_isoce( inbi0(ji), inbj0(ji), llisoce ) ! Warning: must be call by all cores (call mpp_sum) 
     958         CALL is_ocean( inbi0(ji), inbj0(ji), llisoce ) ! Warning: must be call by all cores (call mpp_sum) 
    979959         inbijold = COUNT(llisoce) 
    980960         DEALLOCATE( llisoce ) 
    981961         DO ji =isz0-1,1,-1 
    982962            ALLOCATE( llisoce(inbi0(ji), inbj0(ji)) ) 
    983             CALL mpp_init_isoce( inbi0(ji), inbj0(ji), llisoce ) ! Warning: must be call by all cores (call mpp_sum) 
     963            CALL is_ocean( inbi0(ji), inbj0(ji), llisoce ) ! Warning: must be call by all cores (call mpp_sum) 
    984964            inbij = COUNT(llisoce) 
    985965            DEALLOCATE( llisoce ) 
     
    1007987         ii = ii -1  
    1008988         ALLOCATE( llisoce(inbi0(ii), inbj0(ii)) ) 
    1009          CALL mpp_init_isoce( inbi0(ii), inbj0(ii), llisoce )            ! must be done by all core 
     989         CALL is_ocean( inbi0(ii), inbj0(ii), llisoce )            ! must be done by all core 
    1010990         inbij = COUNT(llisoce) 
    1011991         DEALLOCATE( llisoce ) 
     
    1016996      DEALLOCATE( inbi0, inbj0 ) 
    1017997      ! 
    1018    END SUBROUTINE mpp_init_bestpartition 
     998   END SUBROUTINE bestpartition 
    1019999    
    10201000    
     
    10251005      !! ** Purpose : the the proportion of land points in the surface land-sea mask 
    10261006      !! 
    1027       !! ** Method  : read iproc strips (of length jpiglo) of the land-sea mask 
     1007      !! ** Method  : read iproc strips (of length Ni0glo) of the land-sea mask 
    10281008      !!---------------------------------------------------------------------- 
    10291009      REAL(wp), INTENT(  out) :: propland    ! proportion of land points in the global domain (between 0 and 1) 
     
    10421022 
    10431023      ! number of processes reading the bathymetry file  
    1044       iproc = MINVAL( (/mppsize, jpjglo/2, 100/) )  ! read a least 2 lines, no more that 100 processes reading at the same time 
     1024      iproc = MINVAL( (/mppsize, Nj0glo/2, 100/) )  ! read a least 2 lines, no more that 100 processes reading at the same time 
    10451025       
    10461026      ! we want to read iproc strips of the land-sea mask. -> pick up iproc processes every idiv processes starting at 1 
     
    10521032      IF( MOD( narea-1, idiv ) == 0 .AND. iarea < iproc ) THEN   ! beware idiv can be = to 1 
    10531033         ! 
    1054          ijsz = jpjglo / iproc                                               ! width of the stripe to read 
    1055          IF( iarea < MOD(jpjglo,iproc) ) ijsz = ijsz + 1 
    1056          ijstr = iarea*(jpjglo/iproc) + MIN(iarea, MOD(jpjglo,iproc)) + 1    ! starting j position of the reading 
    1057          ! 
    1058          ALLOCATE( lloce(jpiglo, ijsz) )                                     ! allocate the strip 
    1059          CALL mpp_init_readbot_strip( ijstr, ijsz, lloce ) 
     1034         ijsz = Nj0glo / iproc                                               ! width of the stripe to read 
     1035         IF( iarea < MOD(Nj0glo,iproc) ) ijsz = ijsz + 1 
     1036         ijstr = iarea*(Nj0glo/iproc) + MIN(iarea, MOD(Nj0glo,iproc)) + 1    ! starting j position of the reading 
     1037         ! 
     1038         ALLOCATE( lloce(Ni0glo, ijsz) )                                     ! allocate the strip 
     1039         CALL readbot_strip( ijstr, ijsz, lloce ) 
    10601040         inboce = COUNT(lloce)                                               ! number of ocean point in the stripe 
    10611041         DEALLOCATE(lloce) 
     
    10661046      CALL mpp_sum( 'mppini', inboce )   ! total number of ocean points over the global domain 
    10671047      ! 
    1068       propland = REAL( jpiglo*jpjglo - inboce, wp ) / REAL( jpiglo*jpjglo, wp )  
     1048      propland = REAL( Ni0glo*Nj0glo - inboce, wp ) / REAL( Ni0glo*Nj0glo, wp )  
    10691049      ! 
    10701050   END SUBROUTINE mpp_init_landprop 
    10711051    
    10721052    
    1073    SUBROUTINE mpp_init_isoce( knbi, knbj, ldisoce ) 
     1053   SUBROUTINE is_ocean( knbi, knbj, ldisoce ) 
    10741054      !!---------------------------------------------------------------------- 
    10751055      !!                  ***  ROUTINE mpp_init_nboce  *** 
     
    10781058      !!              subdomains contain at least 1 ocean point 
    10791059      !! 
    1080       !! ** Method  : read knbj strips (of length jpiglo) of the land-sea mask 
     1060      !! ** Method  : read knbj strips (of length Ni0glo) of the land-sea mask 
    10811061      !!---------------------------------------------------------------------- 
    10821062      INTEGER,                       INTENT(in   ) ::   knbi, knbj     ! domain decomposition 
     
    10881068      INTEGER :: ji, jn 
    10891069      LOGICAL, ALLOCATABLE, DIMENSION(:,:) ::   lloce                  ! lloce(i,j) = .true. if the point (i,j) is ocean  
    1090       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iimppt, ilci 
    1091       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ijmppt, ilcj 
     1070      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iimppt, ijpi 
     1071      INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   ijmppt, ijpj 
    10921072      !!---------------------------------------------------------------------- 
    10931073      ! do nothing if there is no land-sea mask 
     
    11091089         IF( MOD( narea-1, idiv ) == 0 .AND. iarea < knbj ) THEN   ! beware idiv can be = to 1 
    11101090            ! 
    1111             ALLOCATE( iimppt(knbi,knbj), ijmppt(knbi,knbj), ilci(knbi,knbj), ilcj(knbi,knbj) ) 
    1112             CALL mpp_basic_decomposition( knbi, knbj, iimax, ijmax, iimppt, ijmppt, ilci, ilcj ) 
     1091            ALLOCATE( iimppt(knbi,knbj), ijmppt(knbi,knbj), ijpi(knbi,knbj), ijpj(knbi,knbj) ) 
     1092            CALL basic_decomposition( Ni0glo, Nj0glo, 0, knbi, knbj, iimax, ijmax, iimppt, ijmppt, ijpi, ijpj ) 
    11131093            ! 
    1114             ALLOCATE( lloce(jpiglo, ilcj(1,iarea+1)) )                                         ! allocate the strip 
    1115             CALL mpp_init_readbot_strip( ijmppt(1,iarea+1), ilcj(1,iarea+1), lloce )           ! read the strip 
     1094            ALLOCATE( lloce(Ni0glo, ijpj(1,iarea+1)) )                       ! allocate the strip 
     1095            CALL readbot_strip( ijmppt(1,iarea+1), ijpj(1,iarea+1), lloce )           ! read the strip 
    11161096            DO  ji = 1, knbi 
    1117                inboce(ji,iarea+1) = COUNT( lloce(iimppt(ji,1):iimppt(ji,1)+ilci(ji,1)-1,:) )   ! number of ocean point in subdomain 
     1097               inboce(ji,iarea+1) = COUNT( lloce(iimppt(ji,1):iimppt(ji,1)+ijpi(ji,1)-1,:) )   ! number of ocean point in subdomain 
    11181098            END DO 
    11191099            ! 
    11201100            DEALLOCATE(lloce) 
    1121             DEALLOCATE(iimppt, ijmppt, ilci, ilcj) 
     1101            DEALLOCATE(iimppt, ijmppt, ijpi, ijpj) 
    11221102            ! 
    11231103         ENDIF 
     
    11291109      ldisoce(:,:) = inboce(:,:) /= 0 
    11301110      ! 
    1131    END SUBROUTINE mpp_init_isoce 
     1111   END SUBROUTINE is_ocean 
    11321112    
    11331113    
    1134    SUBROUTINE mpp_init_readbot_strip( kjstr, kjcnt, ldoce ) 
    1135       !!---------------------------------------------------------------------- 
    1136       !!                  ***  ROUTINE mpp_init_readbot_strip  *** 
     1114   SUBROUTINE readbot_strip( kjstr, kjcnt, ldoce ) 
     1115      !!---------------------------------------------------------------------- 
     1116      !!                  ***  ROUTINE readbot_strip  *** 
    11371117      !! 
    11381118      !! ** Purpose : Read relevant bathymetric information in order to 
     
    11401120      !!              of land domains, in an mpp computation. 
    11411121      !! 
    1142       !! ** Method  : read stipe of size (jpiglo,...) 
     1122      !! ** Method  : read stipe of size (Ni0glo,...) 
    11431123      !!---------------------------------------------------------------------- 
    11441124      INTEGER                         , INTENT(in   ) :: kjstr       ! starting j position of the reading 
    11451125      INTEGER                         , INTENT(in   ) :: kjcnt       ! number of lines to read 
    1146       LOGICAL, DIMENSION(jpiglo,kjcnt), INTENT(  out) :: ldoce       ! ldoce(i,j) = .true. if the point (i,j) is ocean  
     1126      LOGICAL, DIMENSION(Ni0glo,kjcnt), INTENT(  out) :: ldoce       ! ldoce(i,j) = .true. if the point (i,j) is ocean  
    11471127      ! 
    11481128      INTEGER                           ::   inumsave                ! local logical unit 
    1149       REAL(wp), DIMENSION(jpiglo,kjcnt) ::   zbot, zbdy  
     1129      REAL(wp), DIMENSION(Ni0glo,kjcnt) ::   zbot, zbdy  
    11501130      !!---------------------------------------------------------------------- 
    11511131      ! 
    11521132      inumsave = numout   ;   numout = numnul   !   redirect all print to /dev/null 
    11531133      ! 
    1154       IF( numbot /= -1 ) THEN 
    1155          CALL iom_get( numbot, jpdom_unknown, 'bottom_level', zbot, kstart = (/1,kjstr/), kcount = (/jpiglo, kjcnt/) ) 
     1134      IF( numbot /= -1 ) THEN    
     1135         CALL iom_get( numbot, jpdom_unknown, 'bottom_level', zbot, kstart = (/1,kjstr/), kcount = (/Ni0glo, kjcnt/) ) 
    11561136      ELSE 
    1157          zbot(:,:) = 1.                         ! put a non-null value 
    1158       ENDIF 
    1159  
    1160        IF( numbdy /= -1 ) THEN                  ! Adjust with bdy_msk if it exists     
    1161          CALL iom_get ( numbdy, jpdom_unknown, 'bdy_msk', zbdy, kstart = (/1,kjstr/), kcount = (/jpiglo, kjcnt/) ) 
     1137         zbot(:,:) = 1._wp                      ! put a non-null value 
     1138      ENDIF 
     1139      ! 
     1140      IF( numbdy /= -1 ) THEN                   ! Adjust with bdy_msk if it exists     
     1141         CALL iom_get ( numbdy, jpdom_unknown,     'bdy_msk', zbdy, kstart = (/1,kjstr/), kcount = (/Ni0glo, kjcnt/) ) 
    11621142         zbot(:,:) = zbot(:,:) * zbdy(:,:) 
    11631143      ENDIF 
    11641144      ! 
    1165       ldoce(:,:) = zbot(:,:) > 0. 
     1145      ldoce(:,:) = zbot(:,:) > 0._wp 
    11661146      numout = inumsave 
    11671147      ! 
    1168    END SUBROUTINE mpp_init_readbot_strip 
     1148   END SUBROUTINE readbot_strip 
    11691149 
    11701150 
     
    11901170      iglo(1) = jpiglo 
    11911171      iglo(2) = jpjglo 
    1192       iloc(1) = nlci 
    1193       iloc(2) = nlcj 
     1172      iloc(1) = jpi 
     1173      iloc(2) = jpj 
    11941174      iabsf(1) = nimppt(narea) 
    11951175      iabsf(2) = njmppt(narea) 
    11961176      iabsl(:) = iabsf(:) + iloc(:) - 1 
    1197       ihals(1) = nldi - 1 
    1198       ihals(2) = nldj - 1 
    1199       ihale(1) = nlci - nlei 
    1200       ihale(2) = nlcj - nlej 
     1177      ihals(1) = Nis0 - 1 
     1178      ihals(2) = Njs0 - 1 
     1179      ihale(1) = jpi - Nie0 
     1180      ihale(2) = jpj - Nje0 
    12011181      idid(1) = 1 
    12021182      idid(2) = 2 
     
    12391219         ! 
    12401220         !sxM is the first point (in the global domain) needed to compute the north-fold for the current process 
    1241          sxM = jpiglo - nimppt(narea) - nlcit(narea) + 1 
     1221         sxM = jpiglo - nimppt(narea) - jpiall(narea) + 1 
    12421222         !dxM is the last point (in the global domain) needed to compute the north-fold for the current process 
    12431223         dxM = jpiglo - nimppt(narea) + 2 
     
    12491229            ! 
    12501230            sxT = nfiimpp(jn, jpnj)                            ! sxT = 1st  point (in the global domain) of the jn process 
    1251             dxT = nfiimpp(jn, jpnj) + nfilcit(jn, jpnj) - 1    ! dxT = last point (in the global domain) of the jn process 
     1231            dxT = nfiimpp(jn, jpnj) + nfijpit(jn, jpnj) - 1    ! dxT = last point (in the global domain) of the jn process 
    12521232            ! 
    12531233            IF    ( sxT < sxM  .AND.  sxM < dxT ) THEN 
     
    12811261      IF(     nn_hls == 1 ) THEN          !* halo size of 1 
    12821262         ! 
    1283          nIs_0 =   2     ;   nIs_1 =   1     ;   nIs_1nxt2 = nIs_0   ;   nIs_2 = nIs_1 
    1284          nJs_0 =   2     ;   nJs_1 =   1     ;   nJs_1nxt2 = nJs_0   ;   nJs_2 = nJs_1 
     1263         Nis0 =   2     ;   Nis1 =   1     ;   Nis1nxt2 = Nis0   ;   Nis2 = Nis1 
     1264         Njs0 =   2     ;   Njs1 =   1     ;   Njs1nxt2 = Njs0   ;   Njs2 = Njs1 
    12851265         !                                    
    1286          nIe_0 = jpi-1   ;   nIe_1 = jpi     ;   nIe_1nxt2 = nIe_0   ;   nIe_2 = nIe_1 
    1287          nJe_0 = jpj-1   ;   nJe_1 = jpj     ;   nJe_1nxt2 = nJe_0   ;   nJe_2 = nJe_1 
     1266         Nie0 = jpi-1   ;   Nie1 = jpi     ;   Nie1nxt2 = Nie0   ;   Nie2 = Nie1 
     1267         Nje0 = jpj-1   ;   Nje1 = jpj     ;   Nje1nxt2 = Nje0   ;   Nje2 = Nje1 
    12881268         ! 
    12891269      ELSEIF( nn_hls == 2 ) THEN          !* halo size of 2 
    12901270         ! 
    1291          nIs_0 =   3     ;   nIs_1 =   2     ;   nIs_1nxt2 = nIs_1   ;   nIs_2 =   1 
    1292          nJs_0 =   3     ;   nJs_1 =   2     ;   nJs_1nxt2 = nJs_1   ;   nJs_2 =   1 
     1271         Nis0 =   3     ;   Nis1 =   2     ;   Nis1nxt2 = Nis1   ;   Nis2 =   1 
     1272         Njs0 =   3     ;   Njs1 =   2     ;   Njs1nxt2 = Njs1   ;   Njs2 =   1 
    12931273         !                                                               
    1294          nIe_0 = jpi-2   ;   nIe_1 = jpi-1   ;   nIe_1nxt2 = nIe_1   ;   nIe_2 = jpi 
    1295          nJe_0 = jpj-2   ;   nJe_1 = jpj-1   ;   nJe_1nxt2 = nJe_1   ;   nJe_2 = jpj 
     1274         Nie0 = jpi-2   ;   Nie1 = jpi-1   ;   Nie1nxt2 = Nie1   ;   Nie2 = jpi 
     1275         Nje0 = jpj-2   ;   Nje1 = jpj-1   ;   Nje1nxt2 = Nje1   ;   Nje2 = jpj 
    12961276         ! 
    12971277      ELSE                                !* unexpected halo size 
    12981278         CALL ctl_stop( 'STOP', 'ini_mpp:  wrong value of halo size : nn_hls= 1 or 2 only !') 
    12991279      ENDIF 
     1280      ! 
     1281      Ni_0 = Nie0 - Nis0 + 1 
     1282      Nj_0 = Nje0 - Njs0 + 1 
     1283      Ni_1 = Nie1 - Nis1 + 1 
     1284      Nj_1 = Nje1 - Njs1 + 1 
     1285      Ni_2 = Nie2 - Nis2 + 1 
     1286      Nj_2 = Nje2 - Njs2 + 1 
    13001287      ! 
    13011288   END SUBROUTINE init_doloop 
Note: See TracChangeset for help on using the changeset viewer.