Ignore:
Timestamp:
2019-10-18T12:52:29+02:00 (13 months ago)
Author:
francesca
Message:

add extra halo support- ticket #2009

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11514_HPC-02_single-core-extrahalo/src/OCE/LBC/lbc_nfd_nogather_generic.h90

    r11692 r11719  
    4444#      define L_SIZE(ptab)          SIZE(ptab,4) 
    4545#   endif 
    46 #   define ARRAY2_IN(i,j,k,l,f)  ptab2(i,j,k,l) 
    4746#   define J_SIZE(ptab2)             SIZE(ptab2,2) 
     47#   define ARRAY2_IN(i,j,k,l,f)   ptab2(i,j,k,l) 
    4848#   define ARRAY_TYPE(i,j,k,l,f)     REAL(wp),INTENT(inout)::ARRAY_IN(i,j,k,l,f) 
    4949#   define ARRAY2_TYPE(i,j,k,l,f)    REAL(wp),INTENT(inout)::ARRAY2_IN(i,j,k,l,f) 
     
    5757      !! 
    5858      !!---------------------------------------------------------------------- 
    59       ARRAY_TYPE(:,:,:,:,:)                             ! array or pointer of arrays on which the boundary condition is applied 
    60       ARRAY2_TYPE(:,:,:,:,:)                            ! array or pointer of arrays on which the boundary condition is applied 
     59      ARRAY_TYPE(1-nn_hls+1:,1-nn_hls+1:,:,:,:) 
     60      ARRAY2_TYPE(1-nn_hls+1:,:,:,:,:)  
    6161      CHARACTER(len=1) , INTENT(in   ) ::   NAT_IN(:)   ! nature of array grid-points 
    6262      REAL(wp)         , INTENT(in   ) ::   SGN_IN(:)   ! sign used across the north fold boundary 
    6363      INTEGER, OPTIONAL, INTENT(in   ) ::   kfld        ! number of pt3d arrays 
    6464      ! 
    65       INTEGER  ::    ji,  jj,   jk,     jl,   jh,  jf   ! dummy loop indices 
    66       INTEGER  ::   ipi, ipj,  ipk,    ipl,  ipf        ! dimension of the input array 
    67       INTEGER  ::   ijt, iju, ijpj, ijpjp1, ijta, ijua, jia, startloop, endloop 
     65      INTEGER  ::    ji,  jj,   jk, jn, ii,   jl,   jh,  jf   ! dummy loop indices 
     66      INTEGER  ::   ipi, ipj,  ipk,    ipl,  ipf, ijj   ! dimension of the input array 
     67      INTEGER  ::   ijt, iju, ijta, ijua, jia, startloop, endloop 
    6868      LOGICAL  ::   l_fast_exchanges 
    6969      !!---------------------------------------------------------------------- 
     
    7575      ! Security check for further developments 
    7676      IF ( ipf > 1 ) CALL ctl_stop( 'STOP', 'lbc_nfd_nogather: multiple fields not allowed. Revise implementation...' ) 
    77       ! 
    78       ijpj   = 1    ! index of first modified line  
    79       ijpjp1 = 2    ! index + 1 
    80        
    8177      ! 2nd dimension determines exchange speed 
    8278      IF (ipj == 1 ) THEN 
     
    9591            ! 
    9692            CASE ( 'T' , 'W' )                         ! T-, W-point 
    97                IF ( nimpp /= 1 ) THEN   ;   startloop = 1 
     93               IF ( nimpp - nn_hls+1 /= 1 ) THEN  ;  startloop = 1 - nn_hls + 1 
    9894               ELSE                     ;   startloop = 2 
    9995               ENDIF 
    10096               ! 
    10197               DO jl = 1, ipl; DO jk = 1, ipk 
    102                   DO ji = startloop, nlci 
    103                      ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4 
    104                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpj,jk,jl,jf) 
    105                   END DO 
    106                END DO; END DO 
    107                IF( nimpp == 1 ) THEN 
    108                   DO jl = 1, ipl; DO jk = 1, ipk 
    109                      ARRAY_IN(1,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(3,nlcj-2,jk,jl,jf) 
    110                   END DO; END DO 
    111                ENDIF 
    112                ! 
    113                IF ( .NOT. l_fast_exchanges ) THEN 
    114                   IF( nimpp >= jpiglo/2+1 ) THEN 
    115                      startloop = 1 
    116                   ELSEIF( nimpp+nlci-1 >= jpiglo/2+1 .AND. nimpp < jpiglo/2+1 ) THEN 
    117                      startloop = jpiglo/2+1 - nimpp + 1 
     98                    DO jj = 1, nn_hls 
     99                     ijj = nlcj -jj +1 
     100                     DO ji = startloop, nlci 
     101                     ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4 
     102                        ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     103                    END DO 
     104                  END DO 
     105               END DO; END DO 
     106               IF( nimpp - nn_hls+1 == 1 ) THEN 
     107                  DO jl = 1, ipl; DO jk = 1, ipk 
     108                     DO jj = 1, nn_hls 
     109                        ijj = nlcj -jj +1 
     110                        DO ii = 1, nn_hls 
     111                           ARRAY_IN(1-ii+1,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ii+2,nlcj-2*nn_hls+jj-1,jk,jl,jf) 
     112                        END DO 
     113                     END DO 
     114                  END DO; END DO 
     115               ENDIF               
     116               ! 
     117               IF ( .NOT. l_fast_exchanges ) THEN 
     118                  IF( nimpp - nn_hls +1 >= jpiglo/2+1 ) THEN 
     119                     startloop = 1 - nn_hls +1 
     120                ELSEIF( nimpp+nlci-1 >= jpiglo/2+1 .AND. nimpp - nn_hls +1 < jpiglo/2+1 ) THEN 
     121                     startloop = jpiglo/2+1 - nimpp + nn_hls 
    118122                  ELSE 
    119123                     startloop = nlci + 1 
     
    126130                           ijta = jpiglo - jia + 2 
    127131                           IF( ijta >= startloop+nimpp-1 .AND. ijta < jia ) THEN 
    128                               ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijta-nimpp+1,nlcj-1,jk,jl,jf) 
     132                              ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijta-nimpp+1,nlcj-nn_hls,jk,jl,jf) 
    129133                           ELSE 
    130                               ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpjp1,jk,jl,jf) 
     134                              ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,nn_hls+1,jk,jl,jf) 
    131135                           ENDIF 
    132136                        END DO 
     
    134138                  ENDIF 
    135139               ENDIF 
    136  
     140            CASE ( 'U' )                                     ! U-point 
     141               IF( nimpp + nlci - nn_hls /= jpiglo ) THEN 
     142                  endloop = nlci 
     143               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 
     149                     DO ji = 1-nn_hls+1, endloop 
     150                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
     151                        ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,jj,jk,jl,jf) 
     152                     END DO 
     153                  END DO 
     154               END DO; END DO 
     155               IF (nimpp - nn_hls+1 .eq. 1) THEN 
     156               DO jj = 1, nn_hls 
     157                  ijj = nlcj -jj +1 
     158                  DO ii = 1, nn_hls 
     159                     ARRAY_IN(2-ii,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(ii+1,nlcj-2*nn_hls+jj-1,:,:,jf) 
     160                  END DO 
     161                     END DO 
     162               ENDIF 
     163               IF((nimpp + nlci - nn_hls) .eq. jpiglo) THEN 
     164                     DO jj = 1, nn_hls 
     165                        ijj = nlcj -jj +1 
     166                  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) 
     168                  END DO 
     169               END DO 
     170               ENDIF 
     171               ! 
     172               IF ( .NOT. l_fast_exchanges ) THEN 
     173                  IF( nimpp + nlci - nn_hls /= jpiglo ) THEN 
     174                     endloop = nlci 
     175                  ELSE 
     176                     endloop = nlci - nn_hls 
     177                  ENDIF 
     178                  IF( nimpp - nn_hls+1 >= jpiglo/2 ) THEN 
     179                     startloop = 1- nn_hls + 1 
     180                     ELSEIF( ( nimpp+nlci-1 >= jpiglo/2 ) .AND. ( nimpp - nn_hls+1 < jpiglo/2 ) ) THEN 
     181                     startloop = jpiglo/2 - nimpp + nn_hls 
     182                  ELSE 
     183                     startloop = endloop + 1 
     184                  ENDIF 
     185                  IF( startloop <= endloop ) THEN 
     186                  DO jl = 1, ipl; DO jk = 1, ipk 
     187                     DO ji = startloop, endloop 
     188                        iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
     189                        jia = ji + nimpp - 1 
     190                        ijua = jpiglo - jia + 1 
     191                        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+1,nlcj-nn_hls,jk,jl,jf) 
     193                        ELSE 
     194                           ARRAY_IN(ji,nlcj-nn_hls,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,nn_hls+1,jk,jl,jf) 
     195                        ENDIF 
     196                     END DO 
     197                  END DO; END DO 
     198                  ENDIF 
     199               ENDIF 
     200               ! 
     201            CASE ( 'V' )                                     ! V-point 
     202               IF( nimpp - nn_hls+1 /= 1 ) THEN 
     203                 startloop = 1 - nn_hls + 1 
     204               ELSE 
     205                 startloop = 2 
     206               ENDIF 
     207               IF ( .NOT. l_fast_exchanges ) THEN 
     208                  DO jl = 1, ipl; DO jk = 1, ipk 
     209                     DO jj = 2, nn_hls+1 
     210                        ijj = nlcj -jj +1 
     211                        DO ji = startloop, nlci 
     212                           ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4 
     213                           ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     214                        END DO 
     215                    END DO 
     216                  END DO; END DO 
     217               ENDIF 
     218               DO jl = 1, ipl; DO jk = 1, ipk 
     219                  DO ji = startloop, nlci 
     220                     ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4 
     221                     ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,1,jk,jl,jf) 
     222                  END DO 
     223               END DO; END DO 
     224               IF (nimpp - nn_hls+1.eq. 1) THEN 
     225               DO jj = 1, nn_hls 
     226                        ijj = nlcj-jj+1 
     227                        DO ii = 1, nn_hls 
     228                        ARRAY_IN(1-ii+1,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(ii+2,nlcj-2*nn_hls+jj-1,:,:,jf) 
     229                  END DO 
     230               END DO 
     231               ENDIF 
     232            CASE ( 'F' )                                     ! F-point 
     233               IF( nimpp + nlci - nn_hls /= jpiglo ) THEN 
     234                  endloop = nlci 
     235               ELSE 
     236                  endloop = nlci - nn_hls 
     237               ENDIF 
     238               IF ( .NOT. l_fast_exchanges ) THEN 
     239                  DO jl = 1, ipl; DO jk = 1, ipk 
     240                     DO jj = 2, nn_hls+1 
     241                        ijj = nlcj -jj +1 
     242                        DO ji = 1 - nn_hls +1, endloop 
     243                           iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
     244                           ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,jj,jk,jl,jf) 
     245                        END DO 
     246                    END DO 
     247                  END DO; END DO 
     248               ENDIF 
     249               DO jl = 1, ipl; DO jk = 1, ipk 
     250                  DO ji = 1- nn_hls +1, endloop 
     251                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
     252                     ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,1,jk,jl,jf) 
     253                  END DO 
     254               END DO; END DO 
     255      IF (nimpp - nn_hls+1.eq. 1) THEN                
     256         DO ii = 1, nn_hls 
     257                     ARRAY_IN(2-ii,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(ii+1,nlcj-2*nn_hls-1,:,:,jf) 
     258         END DO 
     259         IF ( .NOT. l_fast_exchanges ) THEN 
     260            DO jj = 1, nn_hls 
     261                           ijj = nlcj -jj 
     262                           DO ii = 1, nn_hls 
     263                           ARRAY_IN(2-ii,ijj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(ii+1,nlcj-2*nn_hls+jj-1,:,:,jf) 
     264                              END DO 
     265                        END DO 
     266                     ENDIF 
     267      ENDIF 
     268      IF((nimpp + nlci - nn_hls ) .eq. jpiglo) THEN 
     269                     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) 
     271         END DO 
     272         IF ( .NOT. l_fast_exchanges ) THEN 
     273            DO jj = 1, nn_hls 
     274                           ijj = nlcj -jj 
     275                           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) 
     277                           END DO 
     278                        END DO 
     279                     ENDIF 
     280                  ENDIF 
     281                  ! 
     282       END SELECT 
     283            ! 
     284         CASE ( 5, 6 )                        ! *  North fold  F-point pivot 
     285            ! 
     286            WRITE(*,*) 'extrahalo not handled in this case', __FILE__, __LINE__ 
     287            SELECT CASE ( NAT_IN(jf) ) 
     288            CASE ( 'T' , 'W' )                               ! T-, W-point 
     289               DO jl = 1, ipl; DO jk = 1, ipk 
     290              DO jj = 1, nn_hls 
     291                      ijj = nlcj -jj+1 
     292                  DO ji = 1, nlci 
     293                     ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
     294                     ARRAY_IN(ji,ijj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,jj,jk,jl,jf) 
     295                  END DO 
     296              END DO 
     297               END DO; END DO 
     298               ! 
    137299            CASE ( 'U' )                                     ! U-point 
    138300               IF( nimpp + nlci - 1 /= jpiglo ) THEN 
     
    143305               DO jl = 1, ipl; DO jk = 1, ipk 
    144306                  DO ji = 1, endloop 
    145                      iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    146                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj,jk,jl,jf) 
    147                   END DO 
    148                END DO; END DO 
    149                IF (nimpp .eq. 1) THEN 
    150                   ARRAY_IN(1,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2,nlcj-2,:,:,jf) 
    151                ENDIF 
     307                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2 
     308                     ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj-1,jk,jl,jf) 
     309                  END DO 
     310               END DO; END DO 
    152311               IF((nimpp + nlci - 1) .eq. jpiglo) THEN 
    153                   ARRAY_IN(nlci,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(nlci-1,nlcj-2,:,:,jf) 
    154                ENDIF 
    155                ! 
    156                IF ( .NOT. l_fast_exchanges ) THEN 
    157                   IF( nimpp + nlci - 1 /= jpiglo ) THEN 
    158                      endloop = nlci 
    159                   ELSE 
    160                      endloop = nlci - 1 
    161                   ENDIF 
    162                   IF( nimpp >= jpiglo/2 ) THEN 
    163                      startloop = 1 
    164                      ELSEIF( ( nimpp+nlci-1 >= jpiglo/2 ) .AND. ( nimpp < jpiglo/2 ) ) THEN 
    165                      startloop = jpiglo/2 - nimpp + 1 
    166                   ELSE 
    167                      startloop = endloop + 1 
    168                   ENDIF 
    169                   IF( startloop <= endloop ) THEN 
    170                   DO jl = 1, ipl; DO jk = 1, ipk 
    171                      DO ji = startloop, endloop 
    172                         iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    173                         jia = ji + nimpp - 1 
    174                         ijua = jpiglo - jia + 1 
    175                         IF( ijua >= startloop+nimpp-1 .AND. ijua < jia ) THEN 
    176                            ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(ijua-nimpp+1,nlcj-1,jk,jl,jf) 
    177                         ELSE 
    178                            ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpjp1,jk,jl,jf) 
    179                         ENDIF 
    180                      END DO 
    181                   END DO; END DO 
    182                   ENDIF 
     312                  DO jl = 1, ipl; DO jk = 1, ipk 
     313                     ARRAY_IN(nlci,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2,nlcj-1,jk,jl,jf) 
     314                  END DO; END DO 
    183315               ENDIF 
    184316               ! 
    185317            CASE ( 'V' )                                     ! V-point 
    186                IF( nimpp /= 1 ) THEN 
    187                  startloop = 1 
    188                ELSE 
    189                  startloop = 2 
    190                ENDIF 
    191                IF ( .NOT. l_fast_exchanges ) THEN 
    192                   DO jl = 1, ipl; DO jk = 1, ipk 
    193                      DO ji = startloop, nlci 
    194                         ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4 
    195                         ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpjp1,jk,jl,jf) 
    196                      END DO 
    197                   END DO; END DO 
    198                ENDIF 
    199                DO jl = 1, ipl; DO jk = 1, ipk 
    200                   DO ji = startloop, nlci 
    201                      ijt=jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 4 
    202                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpj,jk,jl,jf) 
    203                   END DO 
    204                END DO; END DO 
    205                IF (nimpp .eq. 1) THEN 
    206                   ARRAY_IN(1,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(3,nlcj-3,:,:,jf) 
    207                ENDIF 
    208             CASE ( 'F' )                                     ! F-point 
    209                IF( nimpp + nlci - 1 /= jpiglo ) THEN 
    210                   endloop = nlci 
    211                ELSE 
    212                   endloop = nlci - 1 
    213                ENDIF 
    214                IF ( .NOT. l_fast_exchanges ) THEN 
    215                   DO jl = 1, ipl; DO jk = 1, ipk 
    216                      DO ji = 1, endloop 
    217                         iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    218                         ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpjp1,jk,jl,jf) 
    219                      END DO 
    220                   END DO; END DO 
    221                ENDIF 
    222                DO jl = 1, ipl; DO jk = 1, ipk 
    223                   DO ji = 1, endloop 
    224                      iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    225                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj,jk,jl,jf) 
    226                   END DO 
    227                END DO; END DO 
    228                IF (nimpp .eq. 1) THEN 
    229                   ARRAY_IN(1,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2,nlcj-3,:,:,jf) 
    230                   IF ( .NOT. l_fast_exchanges ) & 
    231                      ARRAY_IN(1,nlcj-1,:,:,jf) = SGN_IN(jf) * ARRAY_IN(2,nlcj-2,:,:,jf) 
    232                ENDIF 
    233                IF((nimpp + nlci - 1) .eq. jpiglo) THEN 
    234                   ARRAY_IN(nlci,nlcj,:,:,jf) = SGN_IN(jf) * ARRAY_IN(nlci-1,nlcj-3,:,:,jf) 
    235                   IF ( .NOT. l_fast_exchanges ) & 
    236                      ARRAY_IN(nlci,nlcj-1,:,:,jf) = SGN_IN(jf) * ARRAY_IN(nlci-1,nlcj-2,:,:,jf) 
    237                ENDIF 
    238                ! 
    239             END SELECT 
    240             ! 
    241          CASE ( 5, 6 )                        ! *  North fold  F-point pivot 
    242             ! 
    243             SELECT CASE ( NAT_IN(jf) ) 
    244             CASE ( 'T' , 'W' )                               ! T-, W-point 
    245318               DO jl = 1, ipl; DO jk = 1, ipk 
    246319                  DO ji = 1, nlci 
    247320                     ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    248                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpj,jk,jl,jf) 
    249                   END DO 
    250                END DO; END DO 
    251                ! 
    252             CASE ( 'U' )                                     ! U-point 
    253                IF( nimpp + nlci - 1 /= jpiglo ) THEN 
    254                   endloop = nlci 
    255                ELSE 
    256                   endloop = nlci - 1 
    257                ENDIF 
    258                DO jl = 1, ipl; DO jk = 1, ipk 
    259                   DO ji = 1, endloop 
    260                      iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2 
    261                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj,jk,jl,jf) 
    262                   END DO 
    263                END DO; END DO 
    264                IF((nimpp + nlci - 1) .eq. jpiglo) THEN 
    265                   DO jl = 1, ipl; DO jk = 1, ipk 
    266                      ARRAY_IN(nlci,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY_IN(nlci-2,nlcj-1,jk,jl,jf) 
    267                   END DO; END DO 
    268                ENDIF 
    269                ! 
    270             CASE ( 'V' )                                     ! V-point 
    271                DO jl = 1, ipl; DO jk = 1, ipk 
    272                   DO ji = 1, nlci 
    273                      ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    274                      ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpj,jk,jl,jf) 
     321                     ARRAY_IN(ji,nlcj,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpj-1,jk,jl,jf) 
    275322                  END DO 
    276323               END DO; END DO 
     
    288335                     DO ji = startloop, nlci 
    289336                        ijt = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 3 
    290                         ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpjp1,jk,jl,jf) 
     337                        ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(ijt,ijpj,jk,jl,jf) 
    291338                     END DO 
    292339                  END DO; END DO 
     
    303350                  DO ji = 1, endloop 
    304351                     iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2 
    305                      ARRAY_IN(ji,nlcj ,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj,jk,jl,jf) 
     352                     ARRAY_IN(ji,nlcj ,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj-1,jk,jl,jf) 
    306353                  END DO 
    307354               END DO; END DO 
     
    329376                        DO ji = startloop, endloop 
    330377                           iju = jpiglo - ji - nimpp - nfiimpp(isendto(1),jpnj) + 2 
    331                            ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpjp1,jk,jl,jf) 
     378                           ARRAY_IN(ji,nlcj-1,jk,jl,jf) = SGN_IN(jf) * ARRAY2_IN(iju,ijpj,jk,jl,jf) 
    332379                        END DO 
    333380                     END DO; END DO 
Note: See TracChangeset for help on using the changeset viewer.