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 4064 for branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90 – NEMO

Ignore:
Timestamp:
2013-10-15T19:54:10+02:00 (11 years ago)
Author:
cetlod
Message:

branch dev_r3940_CNRS4_IOCRS: some improvments+ minor bug corrections

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3940_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdom.F90

    r4015 r4064  
    5151   END INTERFACE 
    5252 
     53   REAL(wp) :: r_inf = 1e+36 
     54 
    5355   !! Substitutions 
    5456#  include "domzgr_substitute.h90" 
     
    6062       
    6163      INTEGER  ::  ji, jj, jk                   ! dummy loop indices 
    62       INTEGER  ::  ijie,ijis,ijje,ijjs 
     64      INTEGER  ::  ijie,ijis,ijje,ijjs,ij,je_2 
    6365      REAL(wp) ::  zmask 
    6466       
     
    6971      umask_crs(:,:,:) = 0.0 
    7072      fmask_crs(:,:,:) = 0.0 
    71        
     73   
     74             
     75      IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     76         IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     77            je_2 = mje_crs(2)   ;  ij = je_2 
     78         ENDIF 
     79      ELSE 
     80         je_2 = mje_crs(2)      ;  ij = mjs_crs(2)  
     81      ENDIF 
    7282      DO jk = 1, jpkm1 
    7383         DO ji = 2, nlei_crs   
    74             ijie = mie_crs(ji) 
    75             ijis = mis_crs(ji) 
    76             DO jj = nldj_crs, nlej_crs  
    77                ijje = mje_crs(jj)  
    78                ijjs = mjs_crs(jj)  
    79                                   
     84            ijis = mis_crs(ji)  ;  ijie = mie_crs(ji)     
     85            !           
     86            zmask = 0.0 
     87            zmask = SUM( tmask(ijis:ijie,ij:je_2,jk) )  
     88            IF ( zmask > 0.0 ) tmask_crs(ji,2,jk) = 1.0 
     89                
     90            zmask = 0.0 
     91            zmask = SUM( vmask(ijis:ijie,je_2     ,jk) )   
     92            IF ( zmask > 0.0 ) vmask_crs(ji,2,jk) = 1.0 
     93                
     94            zmask = 0.0 
     95            zmask = SUM(umask(ijie,ij:je_2,jk))    
     96            IF ( zmask > 0.0 ) umask_crs(ji,2,jk) = 1.0 
     97                
     98            fmask_crs(ji,je_2,jk) = fmask(ijie,2,jk) 
     99         ENDDO 
     100      ENDDO 
     101      ! 
     102      DO jk = 1, jpkm1 
     103         DO ji = 2, nlei_crs   
     104            ijis = mis_crs(ji)     ;   ijie = mie_crs(ji)        
     105            DO jj = 3, nlej_crs 
     106               ijjs = mjs_crs(jj)  ;   ijje = mje_crs(jj) 
     107                           
    80108               zmask = 0.0 
    81109               zmask = SUM( tmask(ijis:ijie,ijjs:ijje,jk) )  
     
    91119                
    92120               fmask_crs(ji,jj,jk) = fmask(ijie,ijje,jk)   
    93  
    94121            ENDDO 
    95122         ENDDO 
    96123      ENDDO 
     124 
    97125      ! 
    98126      CALL crs_lbc_lnk( tmask_crs, 'T', 1.0 ) 
     
    195223            ENDDO 
    196224      END SELECT 
    197  
    198       !                                             ! Fill i=1, i=jpi at j=1 
    199       p_gphi_crs(1      ,1) = p_gphi(jpi_crsm1,1) 
    200       p_glam_crs(1      ,1) = p_glam(jpi_crsm1,1) 
    201       !                                             ! Fill upper-right corner i=1, j=jpj_crs 
    202       p_gphi_crs(jpi_crs,1) = p_gphi(2        ,1) 
    203       p_glam_crs(jpi_crs,1) = p_glam(2        ,1) 
    204       !                                             
     225      ! 
    205226   END SUBROUTINE crs_dom_coordinates 
    206227 
     
    233254      !! Local variables 
    234255      INTEGER :: ji, jj, jk     ! dummy loop indices 
    235       INTEGER :: ijie,ijis,ijje,ijjs,ijrs 
     256      INTEGER :: ijie,ijje,ijrs 
    236257   
    237258      !!----------------------------------------------------------------   
     
    241262         DO ji = 2, nlei_crs 
    242263            ijie = mie_crs(ji) 
    243             ijis = mis_crs(ji) 
    244264            DO jj = nldj_crs, nlej_crs 
    245                ijje = mje_crs(jj)  
    246                ijjs = mjs_crs(jj)                    
    247                ijrs =  mje_crs(jj) - mjs_crs(jj) 
     265               ijje = mje_crs(jj)   ;   ijrs =  mje_crs(jj) - mjs_crs(jj) 
    248266               ! Only for a factro 3 coarsening 
    249267               SELECT CASE ( cd_type ) 
     
    335353      !! Local variables 
    336354      REAL(wp)                                :: zdAm 
    337       INTEGER                                 :: ji, jj, jk       ! dummy loop indices 
    338       INTEGER                                 :: ii, ij, ijie,ijje 
    339  
    340       REAL(wp), DIMENSION(:,:,:), POINTER     :: zvol       
     355      INTEGER                                 :: ji, jj, jk , ii, ij, je_2 
     356 
     357      REAL(wp), DIMENSION(:,:,:), POINTER     :: zvol, zmask       
    341358      !!----------------------------------------------------------------   
    342359    
    343       CALL wrk_alloc( jpi, jpj, jpk, zvol ) 
     360      CALL wrk_alloc( jpi, jpj, jpk, zvol, zmask ) 
     361 
     362      p_fld1_crs(:,:,:) = 0.0 
     363      p_fld2_crs(:,:,:) = 0.0 
    344364 
    345365      DO jk = 1, jpk 
     
    347367      ENDDO 
    348368 
     369      zmask(:,:,:) = 0.0 
     370      IF( cd_type == 'W' ) THEN 
     371         zmask(:,:,1) = p_mask(:,:,1)  
     372         DO jk = 2, jpk 
     373            zmask(:,:,jk) = p_mask(:,:,jk-1)  
     374         ENDDO 
     375      ELSE 
     376         DO jk = 1, jpk 
     377             zmask(:,:,jk) = p_mask(:,:,jk)  
     378         ENDDO 
     379      ENDIF 
     380 
     381      IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     382         IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     383            je_2 = mje_crs(2) 
     384            DO jk = 1, jpk            
     385               DO ji = nistr, niend, nn_factx 
     386                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     387                  p_fld1_crs(ii,2,jk) =  zvol(ji,je_2  ,jk) + zvol(ji+1,je_2  ,jk) + zvol(ji+2,je_2  ,jk)  & 
     388                     &                 + zvol(ji,je_2-1,jk) + zvol(ji+1,je_2-1,jk) + zvol(ji+2,je_2-1,jk)  
     389                  ! 
     390                  zdAm =  zvol(ji  ,je_2,jk) * zmask(ji  ,je_2,jk)  & 
     391                    &   + zvol(ji+1,je_2,jk) * zmask(ji+1,je_2,jk)  & 
     392                    &   + zvol(ji+2,je_2,jk) * zmask(ji+2,je_2,jk)  
     393                  !  
     394                  p_fld2_crs(ii,2,jk) = zdAm / p_fld1_crs(ii,2,jk)  
     395               ENDDO 
     396            ENDDO 
     397         ENDIF 
     398      ELSE 
     399         je_2 = mjs_crs(2) 
     400         DO jk = 1, jpk            
     401            DO ji = nistr, niend, nn_factx 
     402               ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     403               p_fld1_crs(ii,2,jk) =  zvol(ji,je_2  ,jk) + zvol(ji+1,je_2  ,jk) + zvol(ji+2,je_2  ,jk)  & 
     404                   &                + zvol(ji,je_2+1,jk) + zvol(ji+1,je_2+1,jk) + zvol(ji+2,je_2+1,jk)  & 
     405                   &                + zvol(ji,je_2+2,jk) + zvol(ji+1,je_2+2,jk) + zvol(ji+2,je_2+2,jk)   
     406              ! 
     407               zdAm = zvol(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk)  & 
     408                 &  + zvol(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk)  & 
     409                 &  + zvol(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk)  & 
     410                 &  + zvol(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk)  & 
     411                 &  + zvol(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk)  & 
     412                 &  + zvol(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk)  & 
     413                 &  + zvol(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk)  & 
     414                 &  + zvol(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk)  & 
     415                 &  + zvol(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) 
     416                 !  
     417                 p_fld2_crs(ii,2,jk) = zdAm / p_fld1_crs(ii,2,jk)  
     418            ENDDO 
     419         ENDDO 
     420      ENDIF 
     421 
    349422      DO jk = 1, jpk            
    350          DO ji = nistr, niend, nn_factx 
    351             DO jj   = njstr, njend, nn_facty 
    352                ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    353                ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    354                ijje = mje_crs(ij) 
    355                ijie = mie_crs(ii) 
     423         DO jj  = njstr, njend, nn_facty 
     424            DO ji = nistr, niend, nn_factx 
     425               ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     426               ij  = ( jj - njstr ) * rfacty_r + 3 
    356427               ! 
    357428               p_fld1_crs(ii,ij,jk) =  zvol(ji,jj  ,jk) + zvol(ji+1,jj  ,jk) + zvol(ji+2,jj  ,jk)  & 
    358429                   &                 + zvol(ji,jj+1,jk) + zvol(ji+1,jj+1,jk) + zvol(ji+2,jj+1,jk)  & 
    359                    &                 + zvol(ji,jj+2,jk) + zvol(ji+1,jj+2,jk) + zvol(ji+2,jj+2,jk)   
     430                   &                 + zvol(ji,jj+2,jk) + zvol(ji+1,jj+2,jk) + zvol(ji+2,jj+2,jk)  
     431               ! 
     432               zdAm =  zvol(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk)  & 
     433                 &   + zvol(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk)  & 
     434                 &   + zvol(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk)  & 
     435                 &   + zvol(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk)  & 
     436                 &   + zvol(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk)  & 
     437                 &   + zvol(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk)  & 
     438                 &   + zvol(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk)  & 
     439                 &   + zvol(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk)  & 
     440                 &   + zvol(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) 
     441                 !  
     442                p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk)  
    360443            ENDDO 
    361444         ENDDO 
    362445      ENDDO 
    363  
    364       IF( cd_type == 'T' ) THEN 
    365          DO jk = 1, jpk            
    366             DO ji = nistr, niend, nn_factx 
    367                DO jj   = njstr, njend, nn_facty 
    368                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    369                   ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    370                   ijje = mje_crs(ij) 
    371                   ijie = mie_crs(ii) 
    372                   ! 
    373                   zdAm =  zvol(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk)  & 
    374                     &   + zvol(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk)  & 
    375                     &   + zvol(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk)  & 
    376                     &   + zvol(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk)  & 
    377                     &   + zvol(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk)  & 
    378                     &   + zvol(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk)  & 
    379                     &   + zvol(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk)  & 
    380                     &   + zvol(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk)  & 
    381                     &   + zvol(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) 
    382                     !  
    383                    IF( p_fld1_crs(ii,ij,jk) /= 0._wp ) p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk)  
    384                    !  
    385                ENDDO 
    386             ENDDO 
    387          ENDDO 
    388       ENDIF 
    389       ! 
    390       IF( cd_type == 'W' ) THEN 
    391          DO jk = 2, jpk            
    392             DO ji = nistr, niend, nn_factx 
    393                DO jj   = njstr, njend, nn_facty 
    394                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    395                   ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    396                   ijje = mje_crs(ij) 
    397                   ijie = mie_crs(ii) 
    398                   ! 
    399                   zdAm =  zvol(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1)  & 
    400                     &   + zvol(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1)  & 
    401                     &   + zvol(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1)  & 
    402                     &   + zvol(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1)  & 
    403                     &   + zvol(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1)  & 
    404                     &   + zvol(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1)  & 
    405                     &   + zvol(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1)  & 
    406                     &   + zvol(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1)  & 
    407                     &   + zvol(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) 
    408                   ! 
    409                   IF( p_fld1_crs(ii,ij,jk) /= 0._wp ) p_fld2_crs(ii,ij,jk) = zdAm / p_fld1_crs(ii,ij,jk)  
    410                   ! 
    411                ENDDO 
    412             ENDDO 
    413          ENDDO 
    414          DO ji = nistr, niend, nn_factx 
    415             DO jj   = njstr, njend, nn_facty 
    416                ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    417                ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    418                ijje = mje_crs(ij) 
    419                ijie = mie_crs(ii) 
    420                ! 
    421                zdAm =  zvol(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1)  & 
    422                  &   + zvol(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1)  & 
    423                  &   + zvol(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1)  & 
    424                  &   + zvol(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1)  & 
    425                  &   + zvol(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1)  & 
    426                  &   + zvol(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1)  & 
    427                  &   + zvol(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1)  & 
    428                  &   + zvol(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1)  & 
    429                  &   + zvol(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) 
    430                !  
    431                IF( p_fld1_crs(ii,ij,1) /= 0._wp ) p_fld2_crs(ii,ij,1) = zdAm / p_fld2_crs(ii,ij,1)  
    432                !  
    433             ENDDO 
    434          ENDDO 
    435       ENDIF 
    436        
    437446      !                                             !  Retroactively add back the boundary halo cells. 
    438447      CALL crs_lbc_lnk( p_fld1_crs, cd_type, 1.0 )  
    439448      CALL crs_lbc_lnk( p_fld2_crs, cd_type, 1.0 )  
    440449      ! 
    441       CALL wrk_dealloc( jpi, jpj, jpk, zvol ) 
     450      CALL wrk_dealloc( jpi, jpj, jpk, zvol, zmask ) 
    442451      ! 
    443452   END SUBROUTINE crs_dom_facvol 
    444453 
    445454 
    446    SUBROUTINE crs_dom_ope_3d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs ) 
     455   SUBROUTINE crs_dom_ope_3d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs, psgn ) 
    447456      !!---------------------------------------------------------------- 
    448457      !!               *** SUBROUTINE crsfun_UV *** 
     
    476485      REAL(wp), DIMENSION(jpi,jpj,jpk),         INTENT(in), OPTIONAL :: p_e3     ! Parent grid vertical level thickness (fse3u, fse3v) 
    477486      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_surf_crs ! Coarse grid area-weighting denominator     
    478       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_mask_crs    ! Coarse grid T,U,V mask 
     487      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_mask_crs    ! Coarse grid T,U,V maska 
     488      REAL(wp),                                 INTENT(in)           :: psgn    ! sign  
     489 
    479490 
    480491      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out)          :: p_fld_crs ! Coarse grid box 3D quantity  
    481492 
    482493      !! Local variables 
    483       INTEGER  :: ji, jj, jk                 ! dummy loop indices 
    484       INTEGER  :: ijie, ijje, ii, ij 
     494      INTEGER  :: ji, jj, jk  
     495      INTEGER  :: ii, ij, ijie, ijje, je_2 
    485496      REAL(wp) :: zflcrs, zsfcrs    
    486       REAL(wp) :: zeps = 1.e20     
    487       REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf    
    488  
     497      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf, zsurfmsk, zmask   
    489498      !!----------------------------------------------------------------   
    490499    
     500      p_fld_crs(:,:,:) = 0.0 
    491501 
    492502      SELECT CASE ( cd_op ) 
     
    494504         CASE ( 'VOL' ) 
    495505       
    496             CALL wrk_alloc( jpi, jpj, jpk, zsurf ) 
    497             DO jk = 1, jpk 
    498               zsurf(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) 
    499             ENDDO 
     506            CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 
    500507          
    501508            SELECT CASE ( cd_type ) 
    502509             
    503                CASE( 'T' ) 
     510               CASE( 'T', 'W' ) 
     511                  IF( cd_type == 'T' ) THEN 
     512                     DO jk = 1, jpk 
     513                        zsurf   (:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) *  p_mask(:,:,jk)  
     514                        zsurfmsk(:,:,jk) =  zsurf(:,:,jk)  
     515                    ENDDO 
     516                  ELSE 
     517                     zsurf   (:,:,1) =  p_e12(:,:) * p_e3(:,:,1) 
     518                     zsurfmsk(:,:,1) =  zsurf(:,:,1) *  p_mask(:,:,1)  
     519                     DO jk = 2, jpk 
     520                        zsurf   (:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) 
     521                        zsurfmsk(:,:,jk) =  zsurf(:,:,jk) * p_mask(:,:,jk-1)  
     522                     ENDDO 
     523                  ENDIF 
    504524          
    505                   DO jk = 1, jpk 
    506                      
    507                      DO ji = nistr, niend, nn_factx 
    508                         DO jj = njstr, njend, nn_facty 
    509                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    510                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    511                            ijje = mje_crs(ij) 
    512                            ijie = mie_crs(ii)                   
     525                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     526                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     527                        je_2 = mje_crs(2) 
     528                        DO jk = 1, jpk            
     529                           DO ji = nistr, niend, nn_factx 
     530                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2        
     531                              zflcrs =  p_fld(ji  ,je_2,jk) * zsurfmsk(ji  ,je_2,jk)   & 
     532                                &     + p_fld(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk)   & 
     533                                &     + p_fld(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk)  
    513534  
    514                            zflcrs =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk) & 
    515                              &     + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk) & 
    516                              &     + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk) & 
    517                              &     + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk) & 
    518                              &     + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk) & 
    519                              &     + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk) & 
    520                              &     + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk) & 
    521                              &     + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk) & 
    522                              &     + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk)  
    523   
    524                            zsfcrs =  zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk) & 
    525                              &     + zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk) & 
    526                              &     + zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk) & 
    527                              &     + zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk) & 
    528                              &     + zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk) & 
    529                              &     + zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk) & 
    530                              &     + zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk) & 
    531                              &     + zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk) & 
    532                              &     + zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk)  
    533                            ! 
     535                              zsfcrs =  zsurf(ji,je_2,jk) + zsurf(ji+1,je_2,jk) + zsurf(ji+2,je_2,jk)  
     536                              ! 
     537                              p_fld_crs(ii,2,jk) = zflcrs 
     538                              IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 
     539                           ENDDO 
     540                        ENDDO 
     541                     ENDIF 
     542                  ELSE 
     543                     je_2 = mjs_crs(2) 
     544                     DO jk = 1, jpk            
     545                        DO ji = nistr, niend, nn_factx 
     546                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     547                           zflcrs =  p_fld(ji  ,je_2  ,jk) * zsurfmsk(ji  ,je_2  ,jk) & 
     548                             &     + p_fld(ji+1,je_2  ,jk) * zsurfmsk(ji+1,je_2  ,jk) & 
     549                             &     + p_fld(ji+2,je_2  ,jk) * zsurfmsk(ji+2,je_2  ,jk) & 
     550                             &     + p_fld(ji  ,je_2+1,jk) * zsurfmsk(ji  ,je_2+1,jk) & 
     551                             &     + p_fld(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk) & 
     552                             &     + p_fld(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk) & 
     553                             &     + p_fld(ji  ,je_2+2,jk) * zsurfmsk(ji  ,je_2+2,jk) & 
     554                             &     + p_fld(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk) & 
     555                             &     + p_fld(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk)  
     556 
     557                           zsfcrs =  zsurf(ji,je_2  ,jk) + zsurf(ji+1,je_2  ,jk) + zsurf(ji+2,je_2  ,jk) & 
     558                             &     + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk) & 
     559                             &     + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk)  
     560                            ! 
     561                            p_fld_crs(ii,2,jk) = zflcrs 
     562                            IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2,jk) = zflcrs / zsfcrs 
     563                        ENDDO 
     564                     ENDDO 
     565                  ENDIF 
     566                  ! 
     567                  DO jk = 1, jpk            
     568                     DO jj  = njstr, njend, nn_facty 
     569                        DO ji = nistr, niend, nn_factx 
     570                           ii = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     571                           ij = ( jj - njstr ) * rfacty_r + 3 
     572                           zflcrs =  p_fld(ji  ,jj  ,jk) * zsurfmsk(ji  ,jj  ,jk) & 
     573                             &     + p_fld(ji+1,jj  ,jk) * zsurfmsk(ji+1,jj  ,jk) & 
     574                             &     + p_fld(ji+2,jj  ,jk) * zsurfmsk(ji+2,jj  ,jk) & 
     575                             &     + p_fld(ji  ,jj+1,jk) * zsurfmsk(ji  ,jj+1,jk) & 
     576                             &     + p_fld(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk) & 
     577                             &     + p_fld(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk) & 
     578                             &     + p_fld(ji  ,jj+2,jk) * zsurfmsk(ji  ,jj+2,jk) & 
     579                             &     + p_fld(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk) & 
     580                             &     + p_fld(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk)  
     581 
     582                           zsfcrs =  zsurf(ji,jj  ,jk) + zsurf(ji+1,jj  ,jk) + zsurf(ji+2,jj  ,jk) & 
     583                             &     + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk) & 
     584                             &     + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk)  
     585                            ! 
    534586                           p_fld_crs(ii,ij,jk) = zflcrs 
    535587                           IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs 
    536  
     588                        ENDDO       
     589                     ENDDO 
     590                  ENDDO   
     591               CASE DEFAULT 
     592                    STOP 
     593               END SELECT 
     594 
     595              CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 
     596 
     597         CASE ( 'SUM' ) 
     598          
     599            CALL wrk_alloc( jpi, jpj, jpk, zsurfmsk ) 
     600 
     601            SELECT CASE ( cd_type ) 
     602              CASE( 'W' ) 
     603                  IF( PRESENT( p_e3 ) ) THEN 
     604                    zsurfmsk(:,:,1) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1)  
     605                    DO jk = 2, jpk 
     606                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk-1)  
     607                    ENDDO 
     608                 ELSE 
     609                    zsurfmsk(:,:,1) =  p_e12(:,:) * p_mask(:,:,1)  
     610                    DO jk = 2, jpk 
     611                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_mask(:,:,jk-1)  
     612                    ENDDO 
     613                 ENDIF 
     614              CASE DEFAULT 
     615                 IF( PRESENT( p_e3 ) ) THEN 
     616                    DO jk = 1, jpk 
     617                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) * p_mask(:,:,jk)  
     618                    ENDDO 
     619                 ELSE 
     620                    DO jk = 1, jpk 
     621                      zsurfmsk(:,:,jk) =  p_e12(:,:) * p_mask(:,:,jk)  
     622                    ENDDO 
     623                 ENDIF 
     624              END SELECT 
     625 
     626            SELECT CASE ( cd_type ) 
     627             
     628               CASE( 'T', 'W' ) 
     629          
     630                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     631                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     632                        je_2 = mje_crs(2) 
     633                        DO jk = 1, jpk            
     634                           DO ji = nistr, niend, nn_factx 
     635                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2           
     636                              zflcrs  =  p_fld(ji  ,je_2,jk) * zsurfmsk(ji  ,je_2,jk) & 
     637                                &      + p_fld(ji+1,je_2,jk) * zsurfmsk(ji+1,je_2,jk) & 
     638                                &      + p_fld(ji+2,je_2,jk) * zsurfmsk(ji+2,je_2,jk)  
     639                               ! 
     640                              p_fld_crs(ii,2,jk) = zflcrs 
     641                           ENDDO 
     642                        ENDDO 
     643                      ENDIF 
     644                  ELSE 
     645                     je_2 = mjs_crs(2) 
     646                     DO jk = 1, jpk            
     647                        DO ji = nistr, niend, nn_factx 
     648                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     649                           zflcrs  =  p_fld(ji  ,je_2  ,jk) * zsurfmsk(ji  ,je_2  ,jk)  & 
     650                             &      + p_fld(ji+1,je_2  ,jk) * zsurfmsk(ji+1,je_2  ,jk)  & 
     651                             &      + p_fld(ji+2,je_2  ,jk) * zsurfmsk(ji+2,je_2  ,jk)  & 
     652                             &      + p_fld(ji  ,je_2+1,jk) * zsurfmsk(ji  ,je_2+1,jk)  & 
     653                             &      + p_fld(ji+1,je_2+1,jk) * zsurfmsk(ji+1,je_2+1,jk)  & 
     654                             &      + p_fld(ji+2,je_2+1,jk) * zsurfmsk(ji+2,je_2+1,jk)  & 
     655                             &      + p_fld(ji  ,je_2+2,jk) * zsurfmsk(ji  ,je_2+2,jk)  & 
     656                             &      + p_fld(ji+1,je_2+2,jk) * zsurfmsk(ji+1,je_2+2,jk)  & 
     657                             &      + p_fld(ji+2,je_2+2,jk) * zsurfmsk(ji+2,je_2+2,jk)   
     658                            ! 
     659                            p_fld_crs(ii,2,jk) = zflcrs 
     660                        ENDDO 
     661                     ENDDO 
     662                  ENDIF 
     663                  ! 
     664                  DO jk = 1, jpk            
     665                     DO jj  = njstr, njend, nn_facty 
     666                        DO ji = nistr, niend, nn_factx 
     667                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     668                           ij  = ( jj - njstr ) * rfacty_r + 3 
     669                           zflcrs  =  p_fld(ji  ,jj  ,jk) * zsurfmsk(ji  ,jj  ,jk)  & 
     670                             &      + p_fld(ji+1,jj  ,jk) * zsurfmsk(ji+1,jj  ,jk)  & 
     671                             &      + p_fld(ji+2,jj  ,jk) * zsurfmsk(ji+2,jj  ,jk)  & 
     672                             &      + p_fld(ji  ,jj+1,jk) * zsurfmsk(ji  ,jj+1,jk)  & 
     673                             &      + p_fld(ji+1,jj+1,jk) * zsurfmsk(ji+1,jj+1,jk)  & 
     674                             &      + p_fld(ji+2,jj+1,jk) * zsurfmsk(ji+2,jj+1,jk)  & 
     675                             &      + p_fld(ji  ,jj+2,jk) * zsurfmsk(ji  ,jj+2,jk)  & 
     676                             &      + p_fld(ji+1,jj+2,jk) * zsurfmsk(ji+1,jj+2,jk)  & 
     677                             &      + p_fld(ji+2,jj+2,jk) * zsurfmsk(ji+2,jj+2,jk)   
     678                            ! 
     679                            p_fld_crs(ii,ij,jk) = zflcrs 
     680                            !  
    537681                        ENDDO       
    538682                     ENDDO 
    539683                  ENDDO    
    540684             
    541                CASE( 'W' ) 
    542           
    543                   DO jk = 2, jpk 
    544                      
     685               CASE( 'V' ) 
     686 
     687                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     688                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     689                        ijje = mje_crs(2) 
     690                     ENDIF 
     691                  ELSE 
     692                     ijje = mjs_crs(2) 
     693                  ENDIF 
     694                  ! 
     695                  DO jk = 1, jpk            
    545696                     DO ji = nistr, niend, nn_factx 
    546                         DO jj = njstr, njend, nn_facty 
    547                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    548                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
     697                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     698                        zflcrs  =  p_fld(ji  ,ijje,jk) * zsurfmsk(ji  ,ijje,jk) & 
     699                          &      + p_fld(ji+1,ijje,jk) * zsurfmsk(ji+1,ijje,jk) & 
     700                          &      + p_fld(ji+2,ijje,jk) * zsurfmsk(ji+2,ijje,jk)  
     701                          ! 
     702                        p_fld_crs(ii,2,jk) = zflcrs 
     703                     ENDDO 
     704                  ENDDO 
     705                  ! 
     706                  DO jk = 1, jpk            
     707                     DO jj  = njstr, njend, nn_facty 
     708                        DO ji = nistr, niend, nn_factx 
     709                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     710                           ij   = ( jj - njstr ) * rfacty_r + 3 
    549711                           ijje = mje_crs(ij) 
    550                            ijie = mie_crs(ii)                   
    551   
    552                            zflcrs =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1) & 
    553                              &     + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1) & 
    554                              &     + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1) & 
    555                              &     + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1) & 
    556                              &     + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1) & 
    557                              &     + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1) & 
    558                              &     + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1) & 
    559                              &     + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1) & 
    560                              &     + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1)  
    561   
    562                            zsfcrs =  zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1) & 
    563                              &     + zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1) & 
    564                              &     + zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1) & 
    565                              &     + zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1) & 
    566                              &     + zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1) & 
    567                              &     + zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1) & 
    568                              &     + zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1) & 
    569                              &     + zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1) & 
    570                              &     + zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1)  
    571                            ! 
     712                           zflcrs  =  p_fld(ji  ,ijje,jk) * zsurfmsk(ji  ,ijje,jk) & 
     713                             &      + p_fld(ji+1,ijje,jk) * zsurfmsk(ji+1,ijje,jk) & 
     714                             &      + p_fld(ji+2,ijje,jk) * zsurfmsk(ji+2,ijje,jk)  
     715                             ! 
    572716                           p_fld_crs(ii,ij,jk) = zflcrs 
    573                            IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij,jk) = zflcrs / zsfcrs 
    574  
     717                           !  
    575718                        ENDDO       
    576719                     ENDDO 
    577720                  ENDDO    
    578  
    579                   DO ji = nistr, niend, nn_factx 
    580                      DO jj = njstr, njend, nn_facty 
    581                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    582                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    583                         ijje = mje_crs(ij) 
    584                         ijie = mie_crs(ii)                   
    585  
    586                           zflcrs =   p_fld(ji  ,jj  ,1) * zsurf(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1) & 
    587                              &     + p_fld(ji+1,jj  ,1) * zsurf(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1) & 
    588                              &     + p_fld(ji+2,jj  ,1) * zsurf(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1) & 
    589                              &     + p_fld(ji  ,jj+1,1) * zsurf(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1) & 
    590                              &     + p_fld(ji+1,jj+1,1) * zsurf(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1) & 
    591                              &     + p_fld(ji+2,jj+1,1) * zsurf(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1) & 
    592                              &     + p_fld(ji  ,jj+2,1) * zsurf(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1) & 
    593                              &     + p_fld(ji+1,jj+2,1) * zsurf(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1) & 
    594                              &     + p_fld(ji+2,jj+2,1) * zsurf(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1)  
    595   
    596                            zsfcrs =  zsurf(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1) & 
    597                              &     + zsurf(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1) & 
    598                              &     + zsurf(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1) & 
    599                              &     + zsurf(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1) & 
    600                              &     + zsurf(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1) & 
    601                              &     + zsurf(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1) & 
    602                              &     + zsurf(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1) & 
    603                              &     + zsurf(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1) & 
    604                              &     + zsurf(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1)  
    605                           
    606                         p_fld_crs(ii,ij,1) = zflcrs 
    607                         IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij,1) = zflcrs / zsfcrs 
    608  
    609                      ENDDO       
     721             
     722               CASE( 'U' ) 
     723 
     724                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     725                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     726                        je_2 = mje_crs(2) 
     727                        DO jk = 1, jpk            
     728                           DO ji = nistr, niend, nn_factx 
     729                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
     730                              ijie = mie_crs(ii) 
     731                              zflcrs  =  p_fld(ijie,je_2,jk) * zsurfmsk(ijie,je_2,jk)   
     732                              p_fld_crs(ii,2,jk) = zflcrs 
     733                           ENDDO 
     734                        ENDDO 
     735                      ENDIF 
     736                  ELSE 
     737                     je_2 = mjs_crs(2) 
     738                     DO jk = 1, jpk            
     739                        DO ji = nistr, niend, nn_factx 
     740                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     741                           ijie = mie_crs(ii) 
     742                           zflcrs =  p_fld(ijie,je_2  ,jk) * zsurfmsk(ijie,je_2  ,jk)  & 
     743                             &     + p_fld(ijie,je_2+1,jk) * zsurfmsk(ijie,je_2+1,jk)  & 
     744                             &     + p_fld(ijie,je_2+2,jk) * zsurfmsk(ijie,je_2+2,jk)  
     745 
     746                           p_fld_crs(ii,2,jk) = zflcrs 
     747                        ENDDO 
     748                     ENDDO 
     749                  ENDIF 
     750                  ! 
     751                  DO jk = 1, jpk            
     752                     DO jj  = njstr, njend, nn_facty 
     753                        DO ji = nistr, niend, nn_factx 
     754                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     755                           ij   = ( jj - njstr ) * rfacty_r + 3 
     756                           ijie = mie_crs(ii) 
     757                           zflcrs =  p_fld(ijie,jj  ,jk) * zsurfmsk(ijie,jj  ,jk)  & 
     758                              &    + p_fld(ijie,jj+1,jk) * zsurfmsk(ijie,jj+1,jk)  & 
     759                              &    + p_fld(ijie,jj+2,jk) * zsurfmsk(ijie,jj+2,jk)  
     760                             ! 
     761                           p_fld_crs(ii,ij,jk) = zflcrs 
     762                           !  
     763                        ENDDO       
     764                     ENDDO 
     765                  ENDDO    
     766 
     767              END SELECT 
     768 
     769              IF( PRESENT( p_surf_crs ) ) THEN 
     770                 WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:,:) = p_fld_crs(:,:,:) / p_surf_crs(:,:,:) 
     771              ENDIF 
     772 
     773              CALL wrk_dealloc( jpi, jpj, jpk, zsurfmsk ) 
     774 
     775         CASE ( 'MAX' )    !  search the max of unmasked grid cells 
     776 
     777            CALL wrk_alloc( jpi, jpj, jpk, zmask ) 
     778 
     779            SELECT CASE ( cd_type ) 
     780              CASE( 'W' ) 
     781                  zmask(:,:,1) = p_mask(:,:,1)  
     782                  DO jk = 2, jpk 
     783                     zmask(:,:,jk) = p_mask(:,:,jk-1)  
    610784                  ENDDO 
    611  
    612               END SELECT 
    613  
    614               CALL wrk_dealloc( jpi, jpj, jpk, zsurf ) 
    615  
    616          CASE ( 'SUM' ) 
    617           
    618             CALL wrk_alloc( jpi, jpj, jpk, zsurf ) 
    619  
    620             IF( PRESENT( p_e3 ) ) THEN 
    621                DO jk = 1, jpk 
    622                  zsurf(:,:,jk) =  p_e12(:,:) * p_e3(:,:,jk) 
    623                ENDDO 
    624             ELSE 
    625                DO jk = 1, jpk 
    626                  zsurf(:,:,jk) =  p_e12(:,:)  
    627                ENDDO 
    628             ENDIF 
     785              CASE ( 'T' ) 
     786                  DO jk = 1, jpk 
     787                     zmask(:,:,jk) = p_mask(:,:,jk)  
     788                  ENDDO 
     789            END SELECT 
    629790 
    630791            SELECT CASE ( cd_type ) 
    631792             
    632                CASE( 'T' ) 
     793               CASE( 'T', 'W' ) 
    633794          
    634                   DO jk = 1, jpk 
    635                      DO ji = nistr, niend, nn_factx 
    636                         DO jj = njstr, njend, nn_facty 
    637                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    638                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    639                            ijje = mje_crs(ij) 
    640                            ijie = mie_crs(ii)                   
    641   
    642                            zflcrs  =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk) & 
    643                              &      + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk) & 
    644                              &      + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk) & 
    645                              &      + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk) & 
    646                              &      + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk) & 
    647                              &      + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk) & 
    648                              &      + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk) & 
    649                              &      + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk) & 
    650                              &      + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk)  
     795                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     796                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     797                        je_2 = mje_crs(2) 
     798                        DO jk = 1, jpk            
     799                           DO ji = nistr, niend, nn_factx 
     800                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2         
     801                              zflcrs =  & 
     802                                & MAX( p_fld(ji  ,je_2,jk) * zmask(ji  ,je_2,jk) - ( 1.- zmask(ji  ,je_2,jk) ) * r_inf ,  & 
     803                                &      p_fld(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) - ( 1.- zmask(ji+1,je_2,jk) ) * r_inf ,  & 
     804                                &      p_fld(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) - ( 1.- zmask(ji+2,je_2,jk) ) * r_inf  ) 
     805                              ! 
     806                              p_fld_crs(ii,2,jk) = zflcrs 
     807                           ENDDO 
     808                        ENDDO 
     809                      ENDIF 
     810                  ELSE 
     811                     je_2 = mjs_crs(2) 
     812                     DO jk = 1, jpk            
     813                        DO ji = nistr, niend, nn_factx 
     814                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     815                           zflcrs =  & 
     816                             & MAX( p_fld(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk) - ( 1.- zmask(ji  ,je_2  ,jk) ) * r_inf ,  & 
     817                             &      p_fld(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk) - ( 1.- zmask(ji+1,je_2  ,jk) ) * r_inf ,  & 
     818                             &      p_fld(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk) - ( 1.- zmask(ji+2,je_2  ,jk) ) * r_inf ,  & 
     819                             &      p_fld(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk) - ( 1.- zmask(ji  ,je_2+1,jk) ) * r_inf ,  & 
     820                             &      p_fld(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) - ( 1.- zmask(ji+1,je_2+1,jk) ) * r_inf ,  & 
     821                             &      p_fld(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) - ( 1.- zmask(ji+2,je_2+1,jk) ) * r_inf ,  & 
     822                             &      p_fld(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk) - ( 1.- zmask(ji  ,je_2+2,jk) ) * r_inf ,  & 
     823                             &      p_fld(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) - ( 1.- zmask(ji+1,je_2+2,jk) ) * r_inf ,  & 
     824                             &      p_fld(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) - ( 1.- zmask(ji+2,je_2+2,jk) ) * r_inf   ) 
     825                           ! 
     826                           p_fld_crs(ii,2,jk) = zflcrs 
     827                        ENDDO 
     828                     ENDDO 
     829                  ENDIF 
     830                  ! 
     831                  DO jk = 1, jpk            
     832                     DO jj  = njstr, njend, nn_facty 
     833                        DO ji = nistr, niend, nn_factx 
     834                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     835                           ij  = ( jj - njstr ) * rfacty_r + 3 
     836                           zflcrs =  & 
     837                             & MAX( p_fld(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk) - ( 1.- zmask(ji  ,jj  ,jk) ) * r_inf ,  & 
     838                             &      p_fld(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk) - ( 1.- zmask(ji+1,jj  ,jk) ) * r_inf ,  & 
     839                             &      p_fld(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk) - ( 1.- zmask(ji+2,jj  ,jk) ) * r_inf ,  & 
     840                             &      p_fld(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk) - ( 1.- zmask(ji  ,jj+1,jk) ) * r_inf ,  & 
     841                             &      p_fld(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) - ( 1.- zmask(ji+1,jj+1,jk) ) * r_inf ,  & 
     842                             &      p_fld(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) - ( 1.- zmask(ji+2,jj+1,jk) ) * r_inf ,  & 
     843                             &      p_fld(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk) - ( 1.- zmask(ji  ,jj+2,jk) ) * r_inf ,  & 
     844                             &      p_fld(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) - ( 1.- zmask(ji+1,jj+2,jk) ) * r_inf ,  & 
     845                             &      p_fld(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) - ( 1.- zmask(ji+2,jj+2,jk) ) * r_inf   ) 
    651846                           ! 
    652847                           p_fld_crs(ii,ij,jk) = zflcrs 
     
    656851                  ENDDO    
    657852             
    658                CASE( 'W' ) 
    659           
    660                   DO jk = 2, jpk 
     853               CASE( 'V' ) 
     854 
     855                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     856                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     857                        ijje = mje_crs(2) 
     858                      ENDIF 
     859                  ELSE 
     860                     ijje = mjs_crs(2) 
     861                  ENDIF 
     862 
     863                  DO jk = 1, jpk 
    661864                     DO ji = nistr, niend, nn_factx 
    662                         DO jj = njstr, njend, nn_facty 
    663                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    664                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
     865                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     866                        zflcrs = & 
     867                          & MAX( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     868                          &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     869                          &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ) 
     870                          ! 
     871                        p_fld_crs(ii,2,jk) = zflcrs 
     872                     ENDDO 
     873                  ENDDO 
     874                  ! 
     875                  DO jk = 1, jpk            
     876                     DO jj  = njstr, njend, nn_facty 
     877                        DO ji = nistr, niend, nn_factx 
     878                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     879                           ij  = ( jj - njstr ) * rfacty_r + 3 
    665880                           ijje = mje_crs(ij) 
    666                            ijie = mie_crs(ii) 
    667881                           !                   
    668                            zflcrs  =  p_fld(ji  ,jj  ,jk) * zsurf(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1) & 
    669                              &      + p_fld(ji+1,jj  ,jk) * zsurf(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1) & 
    670                              &      + p_fld(ji+2,jj  ,jk) * zsurf(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1) & 
    671                              &      + p_fld(ji  ,jj+1,jk) * zsurf(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1) & 
    672                              &      + p_fld(ji+1,jj+1,jk) * zsurf(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1) & 
    673                              &      + p_fld(ji+2,jj+1,jk) * zsurf(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1) & 
    674                              &      + p_fld(ji  ,jj+2,jk) * zsurf(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1) & 
    675                              &      + p_fld(ji+1,jj+2,jk) * zsurf(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1) & 
    676                              &      + p_fld(ji+2,jj+2,jk) * zsurf(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1)  
     882                           zflcrs = & 
     883                             & MAX( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     884                             &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     885                             &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) - ( 1.- p_mask(ji,ijje,jk) ) * r_inf ) 
    677886                           ! 
    678887                           p_fld_crs(ii,ij,jk) = zflcrs 
     
    682891                  ENDDO    
    683892 
    684                   DO ji = nistr, niend, nn_factx 
    685                      DO jj = njstr, njend, nn_facty 
    686                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    687                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    688                         ijje = mje_crs(ij) 
    689                         ijie = mie_crs(ii)                   
    690                         ! 
    691                         zflcrs  =   p_fld(ji  ,jj  ,1) * zsurf(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1) & 
    692                            &      + p_fld(ji+1,jj  ,1) * zsurf(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1) & 
    693                            &      + p_fld(ji+2,jj  ,1) * zsurf(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1) & 
    694                            &      + p_fld(ji  ,jj+1,1) * zsurf(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1) & 
    695                            &      + p_fld(ji+1,jj+1,1) * zsurf(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1) & 
    696                            &      + p_fld(ji+2,jj+1,1) * zsurf(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1) & 
    697                            &      + p_fld(ji  ,jj+2,1) * zsurf(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1) & 
    698                            &      + p_fld(ji+1,jj+2,1) * zsurf(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1) & 
    699                            &      + p_fld(ji+2,jj+2,1) * zsurf(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1)  
    700                         ! 
    701                         p_fld_crs(ii,ij,1) = zflcrs 
    702                         ! 
    703                      ENDDO       
    704                   ENDDO 
    705             
    706                CASE( 'V' ) 
    707           
    708                   DO jk = 1, jpk 
    709                      DO ji = nistr, niend, nn_factx 
    710                         DO jj = njstr, njend, nn_facty 
    711                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    712                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    713                            ijje = mje_crs(ij) 
    714                            ijie = mie_crs(ii) 
    715                            !                   
    716                            zflcrs  =  p_fld(ji  ,ijje,jk) * zsurf(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) & 
    717                              &      + p_fld(ji+1,ijje,jk) * zsurf(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) & 
    718                              &      + p_fld(ji+2,ijje,jk) * zsurf(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk)  
    719                            ! 
    720                            p_fld_crs(ii,ij,jk) = zflcrs 
    721                            ! 
    722                          ENDDO       
    723                      ENDDO 
    724                   ENDDO    
    725  
    726893             
    727894               CASE( 'U' ) 
    728           
    729                   DO jk = 1, jpk 
    730                      DO ji = nistr, niend, nn_factx 
    731                         DO jj = njstr, njend, nn_facty 
     895 
     896                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     897                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     898                        je_2 = mje_crs(2) 
     899                        DO jk = 1, jpk            
     900                           DO ji = nistr, niend, nn_factx 
     901                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
     902                              ijie = mie_crs(ii) 
     903                              zflcrs = p_fld(ijie,je_2,jk) * p_mask(ijie,je_2,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf  
     904                              ! 
     905                              p_fld_crs(ii,2,jk) = zflcrs 
     906                            ENDDO 
     907                        ENDDO 
     908                      ENDIF 
     909                  ELSE 
     910                     je_2 = mjs_crs(2) 
     911                     DO jk = 1, jpk            
     912                        DO ji = nistr, niend, nn_factx 
     913                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     914                           ijie = mie_crs(ii) 
     915                           zflcrs = & 
     916                             & MAX( p_fld(ijie,je_2  ,jk) * p_mask(ijie,je_2  ,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  & 
     917                             &      p_fld(ijie,je_2+1,jk) * p_mask(ijie,je_2+1,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  & 
     918                             &      p_fld(ijie,je_2+2,jk) * p_mask(ijie,je_2+2,jk) - ( 1.- p_mask(ijie,je_2,jk) ) * r_inf  ) 
     919                            ! 
     920                           p_fld_crs(ii,2,jk) = zflcrs 
     921                        ENDDO 
     922                     ENDDO 
     923                  ENDIF 
     924                  ! 
     925                  DO jk = 1, jpk            
     926                     DO jj  = njstr, njend, nn_facty 
     927                        DO ji = nistr, niend, nn_factx 
    732928                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    733                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    734                            ijje = mje_crs(ij) 
     929                           ij   = ( jj - njstr ) * rfacty_r + 3 
    735930                           ijie = mie_crs(ii) 
    736                            !                   
    737                            zflcrs =  p_fld(ijie,jj  ,jk) * zsurf(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk) & 
    738                              &     + p_fld(ijie,jj+1,jk) * zsurf(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) & 
    739                              &     + p_fld(ijie,jj+2,jk) * zsurf(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) 
    740                            ! 
     931                           zflcrs =  & 
     932                             & MAX( p_fld(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf , & 
     933                             &      p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf , & 
     934                             &      p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) - ( 1.- p_mask(ijie,jj,jk) ) * r_inf  ) 
     935                           !  
    741936                           p_fld_crs(ii,ij,jk) = zflcrs 
    742                            ! 
     937                           !  
    743938                        ENDDO       
    744939                     ENDDO 
     
    747942              END SELECT 
    748943 
    749               IF( PRESENT( p_surf_crs ) ) THEN 
    750                  WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:,:) = p_fld_crs(:,:,:) / p_surf_crs(:,:,:) 
    751               ENDIF 
    752  
    753               CALL wrk_dealloc( jpi, jpj, jpk, zsurf ) 
    754  
    755          CASE ( 'MAX' ) 
     944              CALL wrk_dealloc( jpi, jpj, jpk, zmask ) 
     945 
     946         CASE ( 'MIN' )      !   Search the min of unmasked grid cells 
     947 
     948            CALL wrk_alloc( jpi, jpj, jpk, zmask ) 
     949 
     950            SELECT CASE ( cd_type ) 
     951              CASE( 'W' ) 
     952                  zmask(:,:,1) = p_mask(:,:,1)  
     953                  DO jk = 2, jpk 
     954                     zmask(:,:,jk) = p_mask(:,:,jk-1)  
     955                  ENDDO 
     956              CASE ( 'T' ) 
     957                  DO jk = 1, jpk 
     958                     zmask(:,:,jk) = p_mask(:,:,jk)  
     959                  ENDDO 
     960            END SELECT 
     961 
     962            SELECT CASE ( cd_type ) 
     963 
     964               CASE( 'T', 'W' ) 
    756965          
    757             SELECT CASE ( cd_type ) 
    758              
    759                CASE( 'T' ) 
    760           
    761                   DO jk = 1, jpk 
    762                      DO ji = nistr, niend, nn_factx 
    763                         DO jj = njstr, njend, nn_facty 
    764                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    765                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    766                            ijje = mje_crs(ij) 
    767                            ijie = mie_crs(ii)                   
    768   
    769                            zflcrs =  MAX( p_fld(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk),  & 
    770                              &            p_fld(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk),  & 
    771                              &            p_fld(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk),  & 
    772                              &            p_fld(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk),  & 
    773                              &            p_fld(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk),  & 
    774                              &            p_fld(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk),  & 
    775                              &            p_fld(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk),  & 
    776                              &            p_fld(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk),  & 
    777                              &            p_fld(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk)   ) 
     966                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     967                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     968                        je_2 = mje_crs(2) 
     969                        DO jk = 1, jpk            
     970                           DO ji = nistr, niend, nn_factx 
     971                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2         
     972                              zflcrs =  & 
     973                                & MIN( p_fld(ji  ,je_2,jk) * zmask(ji  ,je_2,jk) + ( 1.- zmask(ji  ,je_2,jk) ) * r_inf ,  & 
     974                                &      p_fld(ji+1,je_2,jk) * zmask(ji+1,je_2,jk) + ( 1.- zmask(ji+1,je_2,jk) ) * r_inf ,  & 
     975                                &      p_fld(ji+2,je_2,jk) * zmask(ji+2,je_2,jk) + ( 1.- zmask(ji+2,je_2,jk) ) * r_inf  ) 
     976                              ! 
     977                              p_fld_crs(ii,2,jk) = zflcrs 
     978                           ENDDO 
     979                        ENDDO 
     980                      ENDIF 
     981                  ELSE 
     982                     je_2 = mjs_crs(2) 
     983                     DO jk = 1, jpk            
     984                        DO ji = nistr, niend, nn_factx 
     985                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     986                           zflcrs =  & 
     987                             & MIN( p_fld(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk) + ( 1.- zmask(ji  ,je_2  ,jk) ) * r_inf ,  & 
     988                             &      p_fld(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk) + ( 1.- zmask(ji+1,je_2  ,jk) ) * r_inf ,  & 
     989                             &      p_fld(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk) + ( 1.- zmask(ji+2,je_2  ,jk) ) * r_inf ,  & 
     990                             &      p_fld(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk) + ( 1.- zmask(ji  ,je_2+1,jk) ) * r_inf ,  & 
     991                             &      p_fld(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk) + ( 1.- zmask(ji+1,je_2+1,jk) ) * r_inf ,  & 
     992                             &      p_fld(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk) + ( 1.- zmask(ji+2,je_2+1,jk) ) * r_inf ,  & 
     993                             &      p_fld(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk) + ( 1.- zmask(ji  ,je_2+2,jk) ) * r_inf ,  & 
     994                             &      p_fld(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk) + ( 1.- zmask(ji+1,je_2+2,jk) ) * r_inf ,  & 
     995                             &      p_fld(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) + ( 1.- zmask(ji+2,je_2+2,jk) ) * r_inf   ) 
     996                           ! 
     997                           p_fld_crs(ii,2,jk) = zflcrs 
     998                        ENDDO 
     999                     ENDDO 
     1000                  ENDIF 
     1001                  ! 
     1002                  DO jk = 1, jpk            
     1003                     DO jj  = njstr, njend, nn_facty 
     1004                        DO ji = nistr, niend, nn_factx 
     1005                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     1006                           ij  = ( jj - njstr ) * rfacty_r + 3 
     1007                           zflcrs =  & 
     1008                             & MIN( p_fld(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk) + ( 1.- zmask(ji  ,jj  ,jk) ) * r_inf ,  & 
     1009                             &      p_fld(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk) + ( 1.- zmask(ji+1,jj  ,jk) ) * r_inf ,  & 
     1010                             &      p_fld(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk) + ( 1.- zmask(ji+2,jj  ,jk) ) * r_inf ,  & 
     1011                             &      p_fld(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk) + ( 1.- zmask(ji  ,jj+1,jk) ) * r_inf ,  & 
     1012                             &      p_fld(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk) + ( 1.- zmask(ji+1,jj+1,jk) ) * r_inf ,  & 
     1013                             &      p_fld(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk) + ( 1.- zmask(ji+2,jj+1,jk) ) * r_inf ,  & 
     1014                             &      p_fld(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk) + ( 1.- zmask(ji  ,jj+2,jk) ) * r_inf ,  & 
     1015                             &      p_fld(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk) + ( 1.- zmask(ji+1,jj+2,jk) ) * r_inf ,  & 
     1016                             &      p_fld(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) + ( 1.- zmask(ji+2,jj+2,jk) ) * r_inf   ) 
    7781017                           ! 
    7791018                           p_fld_crs(ii,ij,jk) = zflcrs 
     
    7831022                  ENDDO    
    7841023             
    785                CASE( 'W' ) 
    786           
    787                   DO jk = 2, jpk 
     1024               CASE( 'V' ) 
     1025 
     1026                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1027                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1028                        ijje = mje_crs(2) 
     1029                      ENDIF 
     1030                  ELSE 
     1031                     ijje = mjs_crs(2) 
     1032                  ENDIF 
     1033 
     1034                  DO jk = 1, jpk 
    7881035                     DO ji = nistr, niend, nn_factx 
    789                         DO jj = njstr, njend, nn_facty 
    790                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    791                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
     1036                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1037                        zflcrs = & 
     1038                          & MIN( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     1039                          &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     1040                          &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ) 
     1041                          ! 
     1042                        p_fld_crs(ii,2,jk) = zflcrs 
     1043                     ENDDO 
     1044                  ENDDO 
     1045                  ! 
     1046                  DO jk = 1, jpk            
     1047                     DO jj  = njstr, njend, nn_facty 
     1048                        DO ji = nistr, niend, nn_factx 
     1049                           ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     1050                           ij  = ( jj - njstr ) * rfacty_r + 3 
    7921051                           ijje = mje_crs(ij) 
    793                            ijie = mie_crs(ii) 
    794                            !                   
    795                            zflcrs =  MAX( p_fld(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1),  & 
    796                              &            p_fld(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1),  & 
    797                              &            p_fld(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1),  & 
    798                              &            p_fld(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1),  & 
    799                              &            p_fld(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1),  & 
    800                              &            p_fld(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1),  & 
    801                              &            p_fld(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1),  & 
    802                              &            p_fld(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1),  & 
    803                              &            p_fld(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) ) 
     1052                           zflcrs = & 
     1053                             & MIN( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     1054                             &      p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ,  & 
     1055                             &      p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) + ( 1.- p_mask(ji,ijje,jk) ) * r_inf ) 
    8041056                           ! 
    8051057                           p_fld_crs(ii,ij,jk) = zflcrs 
     
    8091061                  ENDDO    
    8101062 
    811                   DO ji = nistr, niend, nn_factx 
    812                      DO jj = njstr, njend, nn_facty 
    813                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    814                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    815                         ijje = mje_crs(ij) 
    816                         ijie = mie_crs(ii)                   
    817                         ! 
    818                         zflcrs = MAX( p_fld(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1),  & 
    819                            &          p_fld(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1),  & 
    820                            &          p_fld(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1),  & 
    821                            &          p_fld(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1),  & 
    822                            &          p_fld(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1),  & 
    823                            &          p_fld(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1),  & 
    824                            &          p_fld(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1),  & 
    825                            &          p_fld(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1),  & 
    826                            &          p_fld(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1)  )  
    827                          ! 
    828                          p_fld_crs(ii,ij,1) = zflcrs 
    829                          ! 
    830                      ENDDO       
    831                   ENDDO 
    832             
    833                CASE( 'V' ) 
    834           
    835                   DO jk = 1, jpk 
    836                      DO ji = nistr, niend, nn_factx 
    837                         DO jj = njstr, njend, nn_facty 
     1063             
     1064               CASE( 'U' ) 
     1065 
     1066                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1067                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1068                        je_2 = mje_crs(2) 
     1069                        DO jk = 1, jpk            
     1070                           DO ji = nistr, niend, nn_factx 
     1071                              ii   = ( ji - mis_crs(2) ) * rfactx_r + 2   
     1072                              ijie = mie_crs(ii) 
     1073                              zflcrs = p_fld(ijie,je_2,jk) * p_mask(ijie,je_2,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf  
     1074                              ! 
     1075                              p_fld_crs(ii,2,jk) = zflcrs 
     1076                            ENDDO 
     1077                        ENDDO 
     1078                      ENDIF 
     1079                  ELSE 
     1080                     je_2 = mjs_crs(2) 
     1081                     DO jk = 1, jpk            
     1082                        DO ji = nistr, niend, nn_factx 
     1083                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     1084                           ijie = mie_crs(ii) 
     1085                           zflcrs = & 
     1086                             & MIN( p_fld(ijie,je_2  ,jk) * p_mask(ijie,je_2  ,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  & 
     1087                             &      p_fld(ijie,je_2+1,jk) * p_mask(ijie,je_2+1,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf ,  & 
     1088                             &      p_fld(ijie,je_2+2,jk) * p_mask(ijie,je_2+2,jk) + ( 1.- p_mask(ijie,je_2,jk) ) * r_inf  ) 
     1089                            ! 
     1090                           p_fld_crs(ii,2,jk) = zflcrs 
     1091                        ENDDO 
     1092                     ENDDO 
     1093                  ENDIF 
     1094                  ! 
     1095                  DO jk = 1, jpk            
     1096                     DO jj  = njstr, njend, nn_facty 
     1097                        DO ji = nistr, niend, nn_factx 
    8381098                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    839                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    840                            ijje = mje_crs(ij) 
     1099                           ij   = ( jj - njstr ) * rfacty_r + 3 
    8411100                           ijie = mie_crs(ii) 
    842                            !                   
    843                            zflcrs = MAX( p_fld(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk),  & 
    844                              &           p_fld(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk),  & 
    845                              &           p_fld(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk) ) 
    846                            ! 
     1101                           zflcrs = & 
     1102                             & MIN( p_fld(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf ,  & 
     1103                             &      p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf ,  & 
     1104                             &      p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) + ( 1.- p_mask(ijie,jj,jk) ) * r_inf ) 
     1105                           !  
    8471106                           p_fld_crs(ii,ij,jk) = zflcrs 
    848                            ! 
     1107                           !  
    8491108                        ENDDO       
    8501109                     ENDDO 
    8511110                  ENDDO    
    852  
    853              
    854                CASE( 'U' ) 
    855           
    856                   DO jk = 1, jpk 
    857                      DO ji = nistr, niend, nn_factx 
    858                         DO jj = njstr, njend, nn_facty 
    859                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    860                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    861                            ijje = mje_crs(ij) 
    862                            ijie = mie_crs(ii) 
    863                            !                   
    864                            Zflcrs = MAX( p_fld(ijie,jj  ,jk) * p_mask(ijie,jj  ,jk),  & 
    865                              &           p_fld(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk),  & 
    866                              &           p_fld(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk) ) 
    867                            ! 
    868                            p_fld_crs(ii,ij,jk) = zflcrs 
    869                            ! 
    870                         ENDDO       
    871                      ENDDO 
    872                   ENDDO    
    873  
    874               END SELECT 
    875  
    876          CASE ( 'MIN' ) 
    877             !   Search the min of masked grid cells 
    878             SELECT CASE ( cd_type ) 
    879              
    880                CASE( 'T' ) 
    881           
    882                   DO jk = 1, jpk 
    883                      DO ji = nistr, niend, nn_factx 
    884                         DO jj = njstr, njend, nn_facty 
    885                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    886                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    887                            ijje = mje_crs(ij) 
    888                            ijie = mie_crs(ii)                   
    889                             
    890                            zflcrs =  MIN( p_fld(ji  ,jj  ,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk) ) * zeps ),  & 
    891                              &            p_fld(ji+1,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+1,jj  ,jk) ) * zeps ),  & 
    892                              &            p_fld(ji+2,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+2,jj  ,jk) ) * zeps ),  & 
    893                              &            p_fld(ji  ,jj+1,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk) ) * zeps ),  & 
    894                              &            p_fld(ji+1,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk) ) * zeps ),  & 
    895                              &            p_fld(ji+2,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk) ) * zeps ),  & 
    896                              &            p_fld(ji  ,jj+2,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk) ) * zeps ),  & 
    897                              &            p_fld(ji+1,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk) ) * zeps ),  & 
    898                              &            p_fld(ji+2,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk) ) * zeps )   ) 
    899                            ! 
    900                            p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk) 
    901                            ! 
    902                         ENDDO       
    903                      ENDDO 
    904                   ENDDO    
    905             
    906                CASE( 'W' ) 
    907           
    908                   DO jk = 2, jpk 
    909                      DO ji = nistr, niend, nn_factx 
    910                         DO jj = njstr, njend, nn_facty 
    911                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    912                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    913                            ijje = mje_crs(ij) 
    914                            ijie = mie_crs(ii)                   
    915                             
    916                            zflcrs =  MIN( p_fld(ji  ,jj  ,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk-1) ) * zeps ),  & 
    917                              &            p_fld(ji+1,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+1,jj  ,jk-1) ) * zeps ),  & 
    918                              &            p_fld(ji+2,jj  ,jk) * ( 1. + ( 1. - p_mask(ji+2,jj  ,jk-1) ) * zeps ),  & 
    919                              &            p_fld(ji  ,jj+1,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk-1) ) * zeps ),  & 
    920                              &            p_fld(ji+1,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk-1) ) * zeps ),  & 
    921                              &            p_fld(ji+2,jj+1,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk-1) ) * zeps ),  & 
    922                              &            p_fld(ji  ,jj+2,jk) * ( 1. + ( 1. - p_mask(ji  ,jj  ,jk-1) ) * zeps ),  & 
    923                              &            p_fld(ji+1,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+1,jj+1,jk-1) ) * zeps ),  & 
    924                              &            p_fld(ji+2,jj+2,jk) * ( 1. + ( 1. - p_mask(ji+2,jj+2,jk-1) ) * zeps )   ) 
    925                            ! 
    926                            p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk) 
    927                            ! 
    928                         ENDDO       
    929                      ENDDO 
    930                   ENDDO   
    931   
    932                   DO ji = nistr, niend, nn_factx 
    933                      DO jj = njstr, njend, nn_facty 
    934                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    935                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    936                         ijje = mje_crs(ij) 
    937                         ijie = mie_crs(ii)                   
    938                          
    939                         zflcrs =  MIN( p_fld(ji  ,jj  ,1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  & 
    940                           &            p_fld(ji+1,jj  ,1) * ( 1. + ( 1. - p_mask(ji+1,jj  ,1) ) * zeps ),  & 
    941                           &            p_fld(ji+2,jj  ,1) * ( 1. + ( 1. - p_mask(ji+2,jj  ,1) ) * zeps ),  & 
    942                           &            p_fld(ji  ,jj+1,1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  & 
    943                           &            p_fld(ji+1,jj+1,1) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  & 
    944                           &            p_fld(ji+2,jj+1,1) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps ),  & 
    945                           &            p_fld(ji  ,jj+2,1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  & 
    946                           &            p_fld(ji+1,jj+2,1) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  & 
    947                           &            p_fld(ji+2,jj+2,1) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps )   ) 
    948                         ! 
    949                         p_fld_crs(ii,ij,1) = zflcrs * p_mask_crs(ii,ij,1) 
    950                         ! 
    951                      ENDDO       
    952                   ENDDO 
    953  
    954                CASE( 'V' ) 
    955           
    956                   DO jk = 1, jpk 
    957                      DO ji = nistr, niend, nn_factx 
    958                         DO jj = njstr, njend, nn_facty 
    959                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    960                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    961                            ijje = mje_crs(ij) 
    962                            ijie = mie_crs(ii)                   
    963                             
    964                            zflcrs =  MIN( p_fld(ji  ,ijje,jk) * ( 1. + ( 1. - p_mask(ji  ,ijje,jk) ) * zeps ),  & 
    965                              &            p_fld(ji+1,ijje,jk) * ( 1. + ( 1. - p_mask(ji+1,ijje,jk) ) * zeps ),  & 
    966                              &            p_fld(ji+2,ijje,jk) * ( 1. + ( 1. - p_mask(ji+2,ijje,jk) ) * zeps )   ) 
    967                            ! 
    968                            p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk) 
    969                            ! 
    970                         ENDDO       
    971                      ENDDO 
    972                   ENDDO   
    973  
    974  
    975                CASE( 'U' ) 
    976           
    977                   DO jk = 1, jpk 
    978                      DO ji = nistr, niend, nn_factx 
    979                         DO jj = njstr, njend, nn_facty 
    980                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    981                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    982                            ijje = mje_crs(ij) 
    983                            ijie = mie_crs(ii)                   
    984                             
    985                            zflcrs =  MIN( p_fld(ijie,jj  ,jk) * ( 1. + ( 1. - p_mask(ijie,jj  ,jk) ) * zeps ),  & 
    986                              &            p_fld(ijie,jj+1,jk) * ( 1. + ( 1. - p_mask(ijie,jj+1,jk) ) * zeps ),  & 
    987                              &            p_fld(ijie,jj+2,jk) * ( 1. + ( 1. - p_mask(ijie,jj+2,jk) ) * zeps )   ) 
    988                            ! 
    989                            p_fld_crs(ii,ij,jk) = zflcrs * p_mask_crs(ii,ij,jk) 
    990                            ! 
    991                         ENDDO       
    992                      ENDDO 
    993                   ENDDO   
     1111           
    9941112            END SELECT 
     1113            ! 
     1114            CALL wrk_dealloc( jpi, jpj, jpk, zmask ) 
    9951115            ! 
    9961116         END SELECT 
    9971117         ! 
    998          CALL crs_lbc_lnk( p_fld_crs, cd_type, 1.0 ) 
     1118         CALL crs_lbc_lnk( p_fld_crs, cd_type, psgn ) 
    9991119         ! 
    10001120    END SUBROUTINE crs_dom_ope_3d 
    10011121 
    1002     SUBROUTINE crs_dom_ope_2d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs ) 
     1122    SUBROUTINE crs_dom_ope_2d( p_fld, cd_op, cd_type, p_mask, p_fld_crs, p_e12, p_e3, p_surf_crs, p_mask_crs, psgn ) 
    10031123      !!---------------------------------------------------------------- 
    10041124      !!               *** SUBROUTINE crsfun_UV *** 
     
    10331153      REAL(wp), DIMENSION(jpi_crs,jpj_crs)    , INTENT(in), OPTIONAL :: p_surf_crs ! Coarse grid area-weighting denominator     
    10341154      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(in), OPTIONAL :: p_mask_crs    ! Coarse grid T,U,V mask 
     1155      REAL(wp),                                 INTENT(in)           :: psgn    
    10351156 
    10361157      REAL(wp), DIMENSION(jpi_crs,jpj_crs)    , INTENT(out)          :: p_fld_crs ! Coarse grid box 3D quantity  
     
    10381159      !! Local variables 
    10391160      INTEGER  :: ji, jj, jk                 ! dummy loop indices 
    1040       INTEGER  :: ijie, ijje, ii, ij 
     1161      INTEGER  :: ijie, ijje, ii, ij, je_2 
    10411162      REAL(wp) :: zflcrs, zsfcrs    
    1042       REAL(wp) :: zeps = 1.e20     
    1043       REAL(wp), DIMENSION(:,:), POINTER :: zsurf    
     1163      REAL(wp), DIMENSION(:,:), POINTER :: zsurfmsk    
    10441164 
    10451165      !!----------------------------------------------------------------   
    10461166    
     1167      p_fld_crs(:,:) = 0.0 
    10471168 
    10481169      SELECT CASE ( cd_op ) 
    10491170       
    1050          CASE ( 'VOL' ) 
     1171        CASE ( 'VOL' ) 
    10511172       
    1052            CALL wrk_alloc( jpi, jpj, zsurf ) 
    1053            zsurf(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 
    1054                      
    1055            DO ji = nistr, niend, nn_factx 
    1056               DO jj = njstr, njend, nn_facty 
    1057                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1058                  ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1059                  ijje = mje_crs(ij) 
    1060                  ijie = mie_crs(ii)                   
    1061   
    1062                  zflcrs =  p_fld(ji  ,jj  ) * zsurf(ji  ,jj  )  & 
    1063                    &     + p_fld(ji+1,jj  ) * zsurf(ji+1,jj  )  & 
    1064                    &     + p_fld(ji+2,jj  ) * zsurf(ji+2,jj  )  & 
    1065                    &     + p_fld(ji  ,jj+1) * zsurf(ji  ,jj+1)  & 
    1066                    &     + p_fld(ji+1,jj+1) * zsurf(ji+1,jj+1)  & 
    1067                    &     + p_fld(ji+2,jj+1) * zsurf(ji+2,jj+1)  & 
    1068                    &     + p_fld(ji  ,jj+2) * zsurf(ji  ,jj+2)  & 
    1069                    &     + p_fld(ji+1,jj+2) * zsurf(ji+1,jj+2)  & 
    1070                    &     + p_fld(ji+2,jj+2) * zsurf(ji+2,jj+2)   
    1071  
    1072                  zsfcrs =  zsurf(ji,jj  ) + zsurf(ji+1,jj  ) + zsurf(ji+2,jj  )  & 
    1073                    &     + zsurf(ji,jj+1) + zsurf(ji+1,jj+1) + zsurf(ji+2,jj+1)  & 
    1074                    &     + zsurf(ji,jj+2) + zsurf(ji+1,jj+2) + zsurf(ji+2,jj+2)   
    1075                  ! 
    1076                  p_fld_crs(ii,ij) = zflcrs 
    1077                  IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij) = zflcrs / zsfcrs 
    1078  
    1079               ENDDO       
    1080            ENDDO 
    1081              
    1082            CALL wrk_dealloc( jpi, jpj, zsurf ) 
     1173            CALL wrk_alloc( jpi, jpj, zsurfmsk ) 
     1174            zsurfmsk(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 
     1175 
     1176            IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1177               IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1178                  je_2 = mje_crs(2) 
     1179                  DO ji = nistr, niend, nn_factx 
     1180                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2        
     1181                     zflcrs =  p_fld(ji  ,je_2) * zsurfmsk(ji  ,je_2)   & 
     1182                       &     + p_fld(ji+1,je_2) * zsurfmsk(ji+1,je_2)   & 
     1183                       &     + p_fld(ji+2,je_2) * zsurfmsk(ji+2,je_2)  
     1184 
     1185                     zsfcrs =  zsurfmsk(ji,je_2) + zsurfmsk(ji+1,je_2) + zsurfmsk(ji+2,je_2)  
     1186                     ! 
     1187                     p_fld_crs(ii,2) = zflcrs 
     1188                     IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2) = zflcrs / zsfcrs 
     1189                  ENDDO 
     1190               ENDIF 
     1191            ELSE 
     1192               je_2 = mjs_crs(2) 
     1193               DO ji = nistr, niend, nn_factx 
     1194                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2    
     1195                  zflcrs =  p_fld(ji  ,je_2  ) * zsurfmsk(ji  ,je_2  ) & 
     1196                    &     + p_fld(ji+1,je_2  ) * zsurfmsk(ji+1,je_2  ) & 
     1197                    &     + p_fld(ji+2,je_2  ) * zsurfmsk(ji+2,je_2  ) & 
     1198                    &     + p_fld(ji  ,je_2+1) * zsurfmsk(ji  ,je_2+1) & 
     1199                    &     + p_fld(ji+1,je_2+1) * zsurfmsk(ji+1,je_2+1) & 
     1200                    &     + p_fld(ji+2,je_2+1) * zsurfmsk(ji+2,je_2+1) & 
     1201                    &     + p_fld(ji  ,je_2+2) * zsurfmsk(ji  ,je_2+2) & 
     1202                    &     + p_fld(ji+1,je_2+2) * zsurfmsk(ji+1,je_2+2) & 
     1203                    &     + p_fld(ji+2,je_2+2) * zsurfmsk(ji+2,je_2+2)  
     1204 
     1205                   zsfcrs =  zsurfmsk(ji,je_2  ) + zsurfmsk(ji+1,je_2  ) + zsurfmsk(ji+2,je_2  ) & 
     1206                     &     + zsurfmsk(ji,je_2+1) + zsurfmsk(ji+1,je_2+1) + zsurfmsk(ji+2,je_2+1) & 
     1207                     &     + zsurfmsk(ji,je_2+2) + zsurfmsk(ji+1,je_2+2) + zsurfmsk(ji+2,je_2+2)  
     1208                    ! 
     1209                    p_fld_crs(ii,2) = zflcrs 
     1210                    IF( zsfcrs /= 0.0 )  p_fld_crs(ii,2) = zflcrs / zsfcrs 
     1211                ENDDO 
     1212            ENDIF 
     1213                  ! 
     1214            DO jj  = njstr, njend, nn_facty 
     1215               DO ji = nistr, niend, nn_factx 
     1216                  ii  = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
     1217                  ij  = ( jj - njstr ) * rfacty_r + 3 
     1218                  zflcrs =  p_fld(ji  ,jj  ) * zsurfmsk(ji  ,jj  ) & 
     1219                    &     + p_fld(ji+1,jj  ) * zsurfmsk(ji+1,jj  ) & 
     1220                    &     + p_fld(ji+2,jj  ) * zsurfmsk(ji+2,jj  ) & 
     1221                    &     + p_fld(ji  ,jj+1) * zsurfmsk(ji  ,jj+1) & 
     1222                    &     + p_fld(ji+1,jj+1) * zsurfmsk(ji+1,jj+1) & 
     1223                    &     + p_fld(ji+2,jj+1) * zsurfmsk(ji+2,jj+1) & 
     1224                    &     + p_fld(ji  ,jj+2) * zsurfmsk(ji  ,jj+2) & 
     1225                    &     + p_fld(ji+1,jj+2) * zsurfmsk(ji+1,jj+2) & 
     1226                    &     + p_fld(ji+2,jj+2) * zsurfmsk(ji+2,jj+2)  
     1227   
     1228                  zsfcrs =  zsurfmsk(ji,jj  ) + zsurfmsk(ji+1,jj  ) + zsurfmsk(ji+2,jj  ) & 
     1229                    &     + zsurfmsk(ji,jj+1) + zsurfmsk(ji+1,jj+1) + zsurfmsk(ji+2,jj+1) & 
     1230                    &     + zsurfmsk(ji,jj+2) + zsurfmsk(ji+1,jj+2) + zsurfmsk(ji+2,jj+2)  
     1231                   ! 
     1232                  p_fld_crs(ii,ij) = zflcrs 
     1233                  IF( zsfcrs /= 0.0 )  p_fld_crs(ii,ij) = zflcrs / zsfcrs 
     1234               ENDDO       
     1235            ENDDO 
     1236 
     1237            CALL wrk_dealloc( jpi, jpj, zsurfmsk ) 
    10831238 
    10841239         CASE ( 'SUM' ) 
    10851240          
    1086             CALL wrk_alloc( jpi, jpj, zsurf ) 
     1241            CALL wrk_alloc( jpi, jpj, zsurfmsk ) 
    10871242            IF( PRESENT( p_e3 ) ) THEN 
    1088                zsurf(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 
     1243               zsurfmsk(:,:) =  p_e12(:,:) * p_e3(:,:,1) * p_mask(:,:,1) 
    10891244            ELSE 
    1090                zsurf(:,:) =  p_e12(:,:) * p_mask(:,:,1) 
     1245               zsurfmsk(:,:) =  p_e12(:,:) * p_mask(:,:,1) 
    10911246            ENDIF 
     1247 
     1248            SELECT CASE ( cd_type ) 
     1249 
     1250               CASE( 'T', 'W' ) 
     1251 
     1252                   IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1253                      IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1254                         je_2 = mje_crs(2) 
     1255                         DO ji = nistr, niend, nn_factx 
     1256                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1257                            zflcrs  =  p_fld(ji  ,je_2) * zsurfmsk(ji  ,je_2) & 
     1258                              &      + p_fld(ji+1,je_2) * zsurfmsk(ji+1,je_2) & 
     1259                              &      + p_fld(ji+2,je_2) * zsurfmsk(ji+2,je_2)  
     1260                              ! 
     1261                             p_fld_crs(ii,2) = zflcrs 
     1262                         ENDDO 
     1263                      ENDIF 
     1264                   ELSE 
     1265                      je_2 = mjs_crs(2) 
     1266                      DO ji = nistr, niend, nn_factx 
     1267                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1268                         zflcrs  =  p_fld(ji  ,je_2  ) * zsurfmsk(ji  ,je_2  )  & 
     1269                           &      + p_fld(ji+1,je_2  ) * zsurfmsk(ji+1,je_2  )  & 
     1270                           &      + p_fld(ji+2,je_2  ) * zsurfmsk(ji+2,je_2  )  & 
     1271                           &      + p_fld(ji  ,je_2+1) * zsurfmsk(ji  ,je_2+1)  & 
     1272                           &      + p_fld(ji+1,je_2+1) * zsurfmsk(ji+1,je_2+1)  & 
     1273                           &      + p_fld(ji+2,je_2+1) * zsurfmsk(ji+2,je_2+1)  & 
     1274                           &      + p_fld(ji  ,je_2+2) * zsurfmsk(ji  ,je_2+2)  & 
     1275                           &      + p_fld(ji+1,je_2+2) * zsurfmsk(ji+1,je_2+2)  & 
     1276                           &      + p_fld(ji+2,je_2+2) * zsurfmsk(ji+2,je_2+2)   
     1277                            ! 
     1278                            p_fld_crs(ii,2) = zflcrs 
     1279                      ENDDO 
     1280                   ENDIF 
     1281                     ! 
     1282                   DO jj = njstr, njend, nn_facty 
     1283                      DO ji = nistr, niend, nn_factx 
     1284                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1285                         ij   = ( jj - njstr ) * rfacty_r + 3 
     1286                         zflcrs  =  p_fld(ji  ,jj  ) * zsurfmsk(ji  ,jj  )  & 
     1287                           &      + p_fld(ji+1,jj  ) * zsurfmsk(ji+1,jj  )  & 
     1288                           &      + p_fld(ji+2,jj  ) * zsurfmsk(ji+2,jj  )  & 
     1289                           &      + p_fld(ji  ,jj+1) * zsurfmsk(ji  ,jj+1)  & 
     1290                           &      + p_fld(ji+1,jj+1) * zsurfmsk(ji+1,jj+1)  & 
     1291                           &      + p_fld(ji+2,jj+1) * zsurfmsk(ji+2,jj+1)  & 
     1292                           &      + p_fld(ji  ,jj+2) * zsurfmsk(ji  ,jj+2)  & 
     1293                           &      + p_fld(ji+1,jj+2) * zsurfmsk(ji+1,jj+2)  & 
     1294                           &      + p_fld(ji+2,jj+2) * zsurfmsk(ji+2,jj+2)   
     1295                           ! 
     1296                          p_fld_crs(ii,ij) = zflcrs 
     1297                          !  
     1298                      ENDDO       
     1299                   ENDDO 
     1300             
     1301               CASE( 'V' ) 
     1302 
     1303                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1304                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1305                        ijje = mje_crs(2) 
     1306                      ENDIF 
     1307                  ELSE 
     1308                     ijje = mjs_crs(2) 
     1309                  ENDIF 
     1310 
     1311                  DO ji = nistr, niend, nn_factx 
     1312                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1313                     zflcrs  =  p_fld(ji  ,ijje) * zsurfmsk(ji  ,ijje) & 
     1314                       &      + p_fld(ji+1,ijje) * zsurfmsk(ji+1,ijje) & 
     1315                       &      + p_fld(ji+2,ijje) * zsurfmsk(ji+2,ijje)  
     1316                            ! 
     1317                     p_fld_crs(ii,2) = zflcrs 
     1318                  ENDDO 
     1319 
     1320                  DO jj = njstr, njend, nn_facty 
     1321                     DO ji = nistr, niend, nn_factx 
     1322                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1323                        ij   = ( jj - njstr ) * rfacty_r + 3 
     1324                        ijje = mje_crs(ij) 
     1325                        zflcrs  =  p_fld(ji  ,ijje) * zsurfmsk(ji  ,ijje) & 
     1326                          &      + p_fld(ji+1,ijje) * zsurfmsk(ji+1,ijje) & 
     1327                          &      + p_fld(ji+2,ijje) * zsurfmsk(ji+2,ijje)  
     1328                          ! 
     1329                        p_fld_crs(ii,ij) = zflcrs 
     1330                        !  
     1331                     ENDDO       
     1332                  ENDDO 
     1333             
     1334               CASE( 'U' ) 
     1335 
     1336                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1337                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1338                        je_2 = mje_crs(2) 
     1339                        DO ji = nistr, niend, nn_factx 
     1340                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1341                           ijie = mie_crs(ii) 
     1342                           zflcrs  =  p_fld(ijie,je_2) * zsurfmsk(ijie,je_2)   
     1343                           p_fld_crs(ii,2) = zflcrs 
     1344                        ENDDO 
     1345                     ENDIF 
     1346                  ELSE 
     1347                     je_2 = mjs_crs(2) 
     1348                     DO ji = nistr, niend, nn_factx 
     1349                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1350                        ijie = mie_crs(ii) 
     1351                        zflcrs =  p_fld(ijie,je_2  ) * zsurfmsk(ijie,je_2  )  & 
     1352                          &     + p_fld(ijie,je_2+1) * zsurfmsk(ijie,je_2+1)  & 
     1353                          &     + p_fld(ijie,je_2+2) * zsurfmsk(ijie,je_2+2)  
     1354    
     1355                        p_fld_crs(ii,2) = zflcrs 
     1356                     ENDDO 
     1357                 ENDIF 
     1358 
     1359                 DO jj = njstr, njend, nn_facty 
     1360                    DO ji = nistr, niend, nn_factx 
     1361                       ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1362                       ij   = ( jj - njstr ) * rfacty_r + 3 
     1363                       ijie = mie_crs(ii) 
     1364                       zflcrs =  p_fld(ijie,jj  ) * zsurfmsk(ijie,jj  )  & 
     1365                          &    + p_fld(ijie,jj+1) * zsurfmsk(ijie,jj+1)  & 
     1366                          &    + p_fld(ijie,jj+2) * zsurfmsk(ijie,jj+2)  
     1367                         ! 
     1368                       p_fld_crs(ii,ij) = zflcrs 
     1369                       !  
     1370                    ENDDO       
     1371                 ENDDO 
     1372 
     1373              END SELECT 
     1374 
     1375              IF( PRESENT( p_surf_crs ) ) THEN 
     1376                 WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:) = p_fld_crs(:,:) / p_surf_crs(:,:) 
     1377              ENDIF 
     1378 
     1379              CALL wrk_dealloc( jpi, jpj, zsurfmsk ) 
     1380 
     1381         CASE ( 'MAX' ) 
    10921382 
    10931383            SELECT CASE ( cd_type ) 
    10941384             
    10951385               CASE( 'T', 'W' ) 
    1096           
    1097                   DO ji = nistr, niend, nn_factx 
    1098                      DO jj = njstr, njend, nn_facty 
    1099                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1100                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1101                         ijje = mje_crs(ij) 
    1102                         ijie = mie_crs(ii)                   
    1103  
    1104                         zflcrs  =  p_fld(ji  ,jj  ) * zsurf(ji  ,jj  )  & 
    1105                           &      + p_fld(ji+1,jj  ) * zsurf(ji+1,jj  )  & 
    1106                           &      + p_fld(ji+2,jj  ) * zsurf(ji+2,jj  )  & 
    1107                           &      + p_fld(ji  ,jj+1) * zsurf(ji  ,jj+1)  & 
    1108                           &      + p_fld(ji+1,jj+1) * zsurf(ji+1,jj+1)  & 
    1109                           &      + p_fld(ji+2,jj+1) * zsurf(ji+2,jj+1)  & 
    1110                           &      + p_fld(ji  ,jj+2) * zsurf(ji  ,jj+2)  & 
    1111                           &      + p_fld(ji+1,jj+2) * zsurf(ji+1,jj+2)  & 
    1112                           &      + p_fld(ji+2,jj+2) * zsurf(ji+2,jj+2)   
    1113                         ! 
    1114                         p_fld_crs(ii,ij) = zflcrs 
    1115                         ! 
    1116                      ENDDO       
    1117                   ENDDO 
     1386   
     1387                   IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1388                      IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1389                         je_2 = mje_crs(2) 
     1390                         DO ji = nistr, niend, nn_factx 
     1391                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1392                            zflcrs =  & 
     1393                              & MAX( p_fld(ji  ,je_2) * p_mask(ji  ,je_2,1) - ( 1.- p_mask(ji  ,je_2,1) ) * r_inf ,  & 
     1394                             &       p_fld(ji+1,je_2) * p_mask(ji+1,je_2,1) - ( 1.- p_mask(ji+1,je_2,1) ) * r_inf ,  & 
     1395                             &       p_fld(ji+2,je_2) * p_mask(ji+2,je_2,1) - ( 1.- p_mask(ji+2,je_2,1) ) * r_inf  ) 
     1396                            ! 
     1397                            p_fld_crs(ii,2) = zflcrs 
     1398                         ENDDO 
     1399                      ENDIF 
     1400                   ELSE 
     1401                      je_2 = mjs_crs(2)  
     1402                      zflcrs =  & 
     1403                        &  MAX( p_fld(ji  ,je_2  ) * p_mask(ji  ,je_2  ,1) - ( 1.- p_mask(ji  ,je_2  ,1) ) * r_inf ,  & 
     1404                        &       p_fld(ji+1,je_2  ) * p_mask(ji+1,je_2  ,1) - ( 1.- p_mask(ji+1,je_2  ,1) ) * r_inf ,  & 
     1405                        &       p_fld(ji+2,je_2  ) * p_mask(ji+2,je_2  ,1) - ( 1.- p_mask(ji+2,je_2  ,1) ) * r_inf ,  & 
     1406                        &       p_fld(ji  ,je_2+1) * p_mask(ji  ,je_2+1,1) - ( 1.- p_mask(ji  ,je_2+1,1) ) * r_inf ,  & 
     1407                        &       p_fld(ji+1,je_2+1) * p_mask(ji+1,je_2+1,1) - ( 1.- p_mask(ji+1,je_2+1,1) ) * r_inf ,  & 
     1408                        &       p_fld(ji+2,je_2+1) * p_mask(ji+2,je_2+1,1) - ( 1.- p_mask(ji+2,je_2+1,1) ) * r_inf ,  & 
     1409                        &       p_fld(ji  ,je_2+2) * p_mask(ji  ,je_2+2,1) - ( 1.- p_mask(ji  ,je_2+2,1) ) * r_inf ,  & 
     1410                        &       p_fld(ji+1,je_2+2) * p_mask(ji+1,je_2+2,1) - ( 1.- p_mask(ji+1,je_2+2,1) ) * r_inf ,  & 
     1411                        &       p_fld(ji+2,je_2+2) * p_mask(ji+2,je_2+2,1) - ( 1.- p_mask(ji+2,je_2+2,1) ) * r_inf   ) 
     1412                      ! 
     1413                      p_fld_crs(ii,2) = zflcrs 
     1414                   ENDIF 
     1415 
     1416                   DO jj = njstr, njend, nn_facty 
     1417                      DO ji = nistr, niend, nn_factx 
     1418                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1419                         ij   = ( jj - njstr ) * rfacty_r + 3 
     1420                         zflcrs = & 
     1421                          &  MAX( p_fld(ji  ,jj  ) * p_mask(ji  ,jj  ,1) - ( 1.- p_mask(ji  ,jj  ,1) ) * r_inf ,  & 
     1422                          &       p_fld(ji+1,jj  ) * p_mask(ji+1,jj  ,1) - ( 1.- p_mask(ji+1,jj  ,1) ) * r_inf ,  & 
     1423                          &       p_fld(ji+2,jj  ) * p_mask(ji+2,jj  ,1) - ( 1.- p_mask(ji+2,jj  ,1) ) * r_inf ,  & 
     1424                          &       p_fld(ji  ,jj+1) * p_mask(ji  ,jj+1,1) - ( 1.- p_mask(ji  ,jj+1,1) ) * r_inf ,  & 
     1425                          &       p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1) - ( 1.- p_mask(ji+1,jj+1,1) ) * r_inf ,  & 
     1426                          &       p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1) - ( 1.- p_mask(ji+2,jj+1,1) ) * r_inf ,  & 
     1427                          &       p_fld(ji  ,jj+2) * p_mask(ji  ,jj+2,1) - ( 1.- p_mask(ji  ,jj+2,1) ) * r_inf ,  & 
     1428                          &       p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1) - ( 1.- p_mask(ji+1,jj+2,1) ) * r_inf ,  & 
     1429                          &       p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1) - ( 1.- p_mask(ji+2,jj+2,1) ) * r_inf   ) 
     1430                         ! 
     1431                         p_fld_crs(ii,ij) = zflcrs 
     1432                         ! 
     1433                      ENDDO       
     1434                   ENDDO 
    11181435             
    11191436               CASE( 'V' ) 
    1120           
    1121                   DO jk = 1, jpk 
     1437 
     1438                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1439                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1440                        ijje = mje_crs(2) 
     1441                      ENDIF 
     1442                  ELSE 
     1443                     ijje = mjs_crs(2) 
     1444                  ENDIF 
     1445 
     1446                  DO ji = nistr, niend, nn_factx 
     1447                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1448                     zflcrs = MAX( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1449                       &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1450                       &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ) 
     1451                       ! 
     1452                     p_fld_crs(ii,2) = zflcrs 
     1453                  ENDDO       
     1454                  DO jj = njstr, njend, nn_facty 
    11221455                     DO ji = nistr, niend, nn_factx 
    1123                         DO jj = njstr, njend, nn_facty 
    1124                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1125                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1126                            ijje = mje_crs(ij) 
    1127                            ijie = mie_crs(ii) 
    1128                            !                   
    1129                            zflcrs  =  p_fld(ji  ,ijje) * zsurf(ji  ,ijje)  & 
    1130                              &      + p_fld(ji+1,ijje) * zsurf(ji+1,ijje)  & 
    1131                              &      + p_fld(ji+2,ijje) * zsurf(ji+2,ijje)   
    1132                            ! 
    1133                            p_fld_crs(ii,ij) = zflcrs 
    1134                            ! 
    1135                          ENDDO       
    1136                      ENDDO 
    1137                   ENDDO    
    1138  
    1139              
    1140                CASE( 'U' ) 
    1141           
    1142                   DO jk = 1, jpk 
    1143                      DO ji = nistr, niend, nn_factx 
    1144                         DO jj = njstr, njend, nn_facty 
    1145                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1146                            ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1147                            ijje = mje_crs(ij) 
    1148                            ijie = mie_crs(ii) 
    1149                            !                   
    1150                            zflcrs =  p_fld(ijie,jj  ) * zsurf(ijie,jj  )  & 
    1151                              &     + p_fld(ijie,jj+1) * zsurf(ijie,jj+1)  & 
    1152                              &     + p_fld(ijie,jj+2) * zsurf(ijie,jj+2)  
    1153                            ! 
    1154                            p_fld_crs(ii,ij) = zflcrs 
    1155                            ! 
    1156                         ENDDO       
    1157                      ENDDO 
    1158                   ENDDO    
    1159  
    1160               END SELECT 
    1161  
    1162               IF( PRESENT( p_surf_crs ) ) THEN 
    1163                  WHERE ( p_surf_crs /= 0.0 ) p_fld_crs(:,:) = p_fld_crs(:,:) / p_surf_crs(:,:) 
    1164               ENDIF 
    1165  
    1166               CALL wrk_dealloc( jpi, jpj, zsurf ) 
    1167  
    1168          CASE ( 'MAX' ) 
    1169           
    1170             SELECT CASE ( cd_type ) 
    1171              
    1172                CASE( 'T', 'W' ) 
    1173           
    1174                   DO ji = nistr, niend, nn_factx 
    1175                      DO jj = njstr, njend, nn_facty 
    1176                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1177                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1178                         ijje = mje_crs(ij) 
    1179                         ijie = mie_crs(ii)                   
    1180  
    1181                         zflcrs =  MAX( p_fld(ji  ,jj  ) * p_mask(ji  ,jj  ,1),  & 
    1182                           &            p_fld(ji+1,jj  ) * p_mask(ji+1,jj  ,1),  & 
    1183                           &            p_fld(ji+2,jj  ) * p_mask(ji+2,jj  ,1),  & 
    1184                           &            p_fld(ji  ,jj+1) * p_mask(ji  ,jj+1,1),  & 
    1185                           &            p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1),  & 
    1186                           &            p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1),  & 
    1187                           &            p_fld(ji  ,jj+2) * p_mask(ji  ,jj+2,1),  & 
    1188                           &            p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1),  & 
    1189                           &            p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1)   ) 
    1190                         ! 
    1191                         p_fld_crs(ii,ij) = zflcrs 
    1192                         ! 
    1193                      ENDDO       
    1194                   ENDDO 
    1195              
    1196                CASE( 'V' ) 
    1197           
    1198                   DO ji = nistr, niend, nn_factx 
    1199                      DO jj = njstr, njend, nn_facty 
    1200                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1201                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1202                         ijje = mje_crs(ij) 
    1203                         ijie = mie_crs(ii) 
     1456                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1457                        ij   = ( jj - njstr ) * rfacty_r + 3                
     1458                        ijje = mje_crs(ij)  
    12041459                        !                   
    1205                         zflcrs = MAX( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1),  & 
    1206                           &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1),  & 
    1207                           &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) ) 
     1460                        zflcrs = MAX( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1461                          &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1462                          &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) - ( 1.- p_mask(ji,ijje,1) ) * r_inf ) 
    12081463                        ! 
    12091464                        p_fld_crs(ii,ij) = zflcrs 
     
    12131468             
    12141469               CASE( 'U' ) 
    1215           
     1470 
     1471                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1472                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1473                        je_2 = mje_crs(2) 
     1474                        DO ji = nistr, niend, nn_factx 
     1475                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1476                           ijie = mie_crs(ii) 
     1477                           zflcrs  =  p_fld(ijie,je_2) * p_mask(ijie,je_2,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf  
     1478                           p_fld_crs(ii,2) = zflcrs 
     1479                        ENDDO 
     1480                     ENDIF 
     1481                 ELSE 
     1482                     je_2 = mjs_crs(2) 
     1483                     DO ji = nistr, niend, nn_factx 
     1484                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1485                        ijie = mie_crs(ii) 
     1486                        zflcrs =  & 
     1487                          &  MAX( p_fld(ijie,je_2  ) * p_mask(ijie,je_2  ,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  & 
     1488                          &       p_fld(ijie,je_2+1) * p_mask(ijie,je_2+1,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  & 
     1489                          &       p_fld(ijie,je_2+2) * p_mask(ijie,je_2+2,1) - ( 1.- p_mask(ijie,je_2,1) ) * r_inf  ) 
     1490                        p_fld_crs(ii,2) = zflcrs 
     1491                     ENDDO 
     1492                 ENDIF 
     1493                 DO jj = njstr, njend, nn_facty 
     1494                    DO ji = nistr, niend, nn_factx 
     1495                       ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1496                       ij   = ( jj - njstr ) * rfacty_r + 3 
     1497                       ijie = mie_crs(ii) 
     1498                       zflcrs =  & 
     1499                         &  MAX( p_fld(ijie,jj  ) * p_mask(ijie,jj  ,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  & 
     1500                         &       p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  & 
     1501                          &      p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) - ( 1.- p_mask(ijie,jj,1) ) * r_inf  ) 
     1502                        p_fld_crs(ii,ij) = zflcrs 
     1503                        !  
     1504                     ENDDO       
     1505                  ENDDO 
     1506 
     1507              END SELECT 
     1508 
     1509         CASE ( 'MIN' )      !   Search the min of unmasked grid cells 
     1510 
     1511           SELECT CASE ( cd_type ) 
     1512 
     1513              CASE( 'T', 'W' ) 
     1514   
     1515                   IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1516                      IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1517                         je_2 = mje_crs(2) 
     1518                         DO ji = nistr, niend, nn_factx 
     1519                            ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1520                            zflcrs =  & 
     1521                              & MIN( p_fld(ji  ,je_2) * p_mask(ji  ,je_2,1) + ( 1.- p_mask(ji  ,je_2,1) ) * r_inf ,  & 
     1522                             &       p_fld(ji+1,je_2) * p_mask(ji+1,je_2,1) + ( 1.- p_mask(ji+1,je_2,1) ) * r_inf ,  & 
     1523                             &       p_fld(ji+2,je_2) * p_mask(ji+2,je_2,1) + ( 1.- p_mask(ji+2,je_2,1) ) * r_inf  ) 
     1524                            ! 
     1525                            p_fld_crs(ii,2) = zflcrs 
     1526                         ENDDO 
     1527                      ENDIF 
     1528                   ELSE 
     1529                      je_2 = mjs_crs(2)  
     1530                      zflcrs =  & 
     1531                        &  MIN( p_fld(ji  ,je_2  ) * p_mask(ji  ,je_2  ,1) + ( 1.- p_mask(ji  ,je_2  ,1) ) * r_inf ,  & 
     1532                        &       p_fld(ji+1,je_2  ) * p_mask(ji+1,je_2  ,1) + ( 1.- p_mask(ji+1,je_2  ,1) ) * r_inf ,  & 
     1533                        &       p_fld(ji+2,je_2  ) * p_mask(ji+2,je_2  ,1) + ( 1.- p_mask(ji+2,je_2  ,1) ) * r_inf ,  & 
     1534                        &       p_fld(ji  ,je_2+1) * p_mask(ji  ,je_2+1,1) + ( 1.- p_mask(ji  ,je_2+1,1) ) * r_inf ,  & 
     1535                        &       p_fld(ji+1,je_2+1) * p_mask(ji+1,je_2+1,1) + ( 1.- p_mask(ji+1,je_2+1,1) ) * r_inf ,  & 
     1536                        &       p_fld(ji+2,je_2+1) * p_mask(ji+2,je_2+1,1) + ( 1.- p_mask(ji+2,je_2+1,1) ) * r_inf ,  & 
     1537                        &       p_fld(ji  ,je_2+2) * p_mask(ji  ,je_2+2,1) + ( 1.- p_mask(ji  ,je_2+2,1) ) * r_inf ,  & 
     1538                        &       p_fld(ji+1,je_2+2) * p_mask(ji+1,je_2+2,1) + ( 1.- p_mask(ji+1,je_2+2,1) ) * r_inf ,  & 
     1539                        &       p_fld(ji+2,je_2+2) * p_mask(ji+2,je_2+2,1) + ( 1.- p_mask(ji+2,je_2+2,1) ) * r_inf   ) 
     1540                      ! 
     1541                      p_fld_crs(ii,2) = zflcrs 
     1542                   ENDIF 
     1543 
     1544                   DO jj = njstr, njend, nn_facty 
     1545                      DO ji = nistr, niend, nn_factx 
     1546                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1547                         ij   = ( jj - njstr ) * rfacty_r + 3 
     1548                         zflcrs = & 
     1549                          &  MIN( p_fld(ji  ,jj  ) * p_mask(ji  ,jj  ,1) + ( 1.- p_mask(ji  ,jj  ,1) ) * r_inf ,  & 
     1550                          &       p_fld(ji+1,jj  ) * p_mask(ji+1,jj  ,1) + ( 1.- p_mask(ji+1,jj  ,1) ) * r_inf ,  & 
     1551                          &       p_fld(ji+2,jj  ) * p_mask(ji+2,jj  ,1) + ( 1.- p_mask(ji+2,jj  ,1) ) * r_inf ,  & 
     1552                          &       p_fld(ji  ,jj+1) * p_mask(ji  ,jj+1,1) + ( 1.- p_mask(ji  ,jj+1,1) ) * r_inf ,  & 
     1553                          &       p_fld(ji+1,jj+1) * p_mask(ji+1,jj+1,1) + ( 1.- p_mask(ji+1,jj+1,1) ) * r_inf ,  & 
     1554                          &       p_fld(ji+2,jj+1) * p_mask(ji+2,jj+1,1) + ( 1.- p_mask(ji+2,jj+1,1) ) * r_inf ,  & 
     1555                          &       p_fld(ji  ,jj+2) * p_mask(ji  ,jj+2,1) + ( 1.- p_mask(ji  ,jj+2,1) ) * r_inf ,  & 
     1556                          &       p_fld(ji+1,jj+2) * p_mask(ji+1,jj+2,1) + ( 1.- p_mask(ji+1,jj+2,1) ) * r_inf ,  & 
     1557                          &       p_fld(ji+2,jj+2) * p_mask(ji+2,jj+2,1) + ( 1.- p_mask(ji+2,jj+2,1) ) * r_inf   ) 
     1558                         ! 
     1559                         p_fld_crs(ii,ij) = zflcrs 
     1560                         ! 
     1561                      ENDDO       
     1562                   ENDDO 
     1563             
     1564               CASE( 'V' ) 
     1565 
     1566                  IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1567                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1568                        ijje = mje_crs(2) 
     1569                      ENDIF 
     1570                  ELSE 
     1571                     ijje = mjs_crs(2) 
     1572                  ENDIF 
     1573 
    12161574                  DO ji = nistr, niend, nn_factx 
    1217                      DO jj = njstr, njend, nn_facty 
    1218                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1219                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1220                         ijje = mje_crs(ij) 
    1221                         ijie = mie_crs(ii) 
     1575                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1576                     zflcrs = MIN( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1577                       &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1578                       &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ) 
     1579                       ! 
     1580                     p_fld_crs(ii,2) = zflcrs 
     1581                  ENDDO       
     1582                  DO jj = njstr, njend, nn_facty 
     1583                     DO ji = nistr, niend, nn_factx 
     1584                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1585                        ij   = ( jj - njstr ) * rfacty_r + 3                
     1586                        ijje = mje_crs(ij)  
    12221587                        !                   
    1223                         zflcrs = MAX( p_fld(ijie,jj  ) * p_mask(ijie,jj  ,1),  & 
    1224                           &           p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1),  & 
    1225                           &           p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) ) 
     1588                        zflcrs = MIN( p_fld(ji  ,ijje) * p_mask(ji  ,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1589                          &           p_fld(ji+1,ijje) * p_mask(ji+1,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ,  & 
     1590                          &           p_fld(ji+2,ijje) * p_mask(ji+2,ijje,1) + ( 1.- p_mask(ji,ijje,1) ) * r_inf ) 
    12261591                        ! 
    12271592                        p_fld_crs(ii,ij) = zflcrs 
     
    12291594                     ENDDO       
    12301595                  ENDDO 
    1231  
    1232               END SELECT 
    1233  
    1234          CASE ( 'MIN' ) 
    1235             !   Search the min of masked grid cells 
    1236             SELECT CASE ( cd_type ) 
    12371596             
    1238                CASE( 'T', 'W' ) 
    1239           
    1240                   DO ji = nistr, niend, nn_factx 
    1241                      DO jj = njstr, njend, nn_facty 
    1242                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1243                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1244                         ijje = mje_crs(ij) 
    1245                         ijie = mie_crs(ii)                   
    1246                          
    1247                         zflcrs =  MIN( p_fld(ji  ,jj  ) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  & 
    1248                           &            p_fld(ji+1,jj  ) * ( 1. + ( 1. - p_mask(ji+1,jj  ,1) ) * zeps ),  & 
    1249                           &            p_fld(ji+2,jj  ) * ( 1. + ( 1. - p_mask(ji+2,jj  ,1) ) * zeps ),  & 
    1250                           &            p_fld(ji  ,jj+1) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  & 
    1251                           &            p_fld(ji+1,jj+1) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  & 
    1252                           &            p_fld(ji+2,jj+1) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps ),  & 
    1253                           &            p_fld(ji  ,jj+2) * ( 1. + ( 1. - p_mask(ji  ,jj  ,1) ) * zeps ),  & 
    1254                           &            p_fld(ji+1,jj+2) * ( 1. + ( 1. - p_mask(ji+1,jj+1,1) ) * zeps ),  & 
    1255                           &            p_fld(ji+2,jj+2) * ( 1. + ( 1. - p_mask(ji+2,jj+2,1) ) * zeps )   ) 
    1256                         ! 
    1257                         p_fld_crs(ii,ij) = zflcrs * p_mask_crs(ii,ij,1) 
    1258                         ! 
     1597               CASE( 'U' ) 
     1598 
     1599                 IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1600                     IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1601                        je_2 = mje_crs(2) 
     1602                        DO ji = nistr, niend, nn_factx 
     1603                           ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1604                           ijie = mie_crs(ii) 
     1605                           zflcrs  =  p_fld(ijie,je_2) * p_mask(ijie,je_2,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf  
     1606  
     1607                           p_fld_crs(ii,2) = zflcrs 
     1608                        ENDDO 
     1609                     ENDIF 
     1610                 ELSE 
     1611                     je_2 = mjs_crs(2) 
     1612                     DO ji = nistr, niend, nn_factx 
     1613                        ii   = ( ji - mis_crs(2) ) * rfactx_r + 2     
     1614                        ijie = mie_crs(ii) 
     1615                        zflcrs =  & 
     1616                          &  MIN( p_fld(ijie,je_2  ) * p_mask(ijie,je_2  ,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  & 
     1617                          &       p_fld(ijie,je_2+1) * p_mask(ijie,je_2+1,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf ,  & 
     1618                          &       p_fld(ijie,je_2+2) * p_mask(ijie,je_2+2,1) + ( 1.- p_mask(ijie,je_2,1) ) * r_inf  ) 
     1619                        p_fld_crs(ii,2) = zflcrs 
     1620                     ENDDO 
     1621                 ENDIF 
     1622                 DO jj = njstr, njend, nn_facty 
     1623                    DO ji = nistr, niend, nn_factx 
     1624                       ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1625                       ij   = ( jj - njstr ) * rfacty_r + 3 
     1626                       ijie = mie_crs(ii) 
     1627                       zflcrs =  & 
     1628                         &  MIN( p_fld(ijie,jj  ) * p_mask(ijie,jj  ,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  & 
     1629                         &       p_fld(ijie,jj+1) * p_mask(ijie,jj+1,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf ,  & 
     1630                          &      p_fld(ijie,jj+2) * p_mask(ijie,jj+2,1) + ( 1.- p_mask(ijie,jj,1) ) * r_inf  ) 
     1631                        p_fld_crs(ii,ij) = zflcrs 
     1632                        !  
    12591633                     ENDDO       
    12601634                  ENDDO 
    1261   
    1262                CASE( 'V' ) 
    1263           
    1264                   DO ji = nistr, niend, nn_factx 
    1265                      DO jj = njstr, njend, nn_facty 
    1266                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1267                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1268                         ijje = mje_crs(ij) 
    1269                         ijie = mie_crs(ii)                   
    1270                          
    1271                         zflcrs =  MIN( p_fld(ji  ,ijje) * ( 1. + ( 1. - p_mask(ji  ,ijje,1) ) * zeps ),  & 
    1272                           &            p_fld(ji+1,ijje) * ( 1. + ( 1. - p_mask(ji+1,ijje,1) ) * zeps ),  & 
    1273                           &            p_fld(ji+2,ijje) * ( 1. + ( 1. - p_mask(ji+2,ijje,1) ) * zeps )   ) 
    1274                         ! 
    1275                         p_fld_crs(ii,ij) = zflcrs * p_mask_crs(ii,ij,1) 
    1276                         ! 
    1277                      ENDDO       
    1278                   ENDDO 
    1279  
    1280                CASE( 'U' ) 
    1281           
    1282                   DO ji = nistr, niend, nn_factx 
    1283                      DO jj = njstr, njend, nn_facty 
    1284                         ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1285                         ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1286                         ijje = mje_crs(ij) 
    1287                         ijie = mie_crs(ii)                   
    1288                          
    1289                         zflcrs =  MIN( p_fld(ijie,jj  ) * ( 1. + ( 1. - p_mask(ijie,jj  ,1) ) * zeps ),  & 
    1290                           &            p_fld(ijie,jj+1) * ( 1. + ( 1. - p_mask(ijie,jj+1,1) ) * zeps ),  & 
    1291                           &            p_fld(ijie,jj+2) * ( 1. + ( 1. - p_mask(ijie,jj+2,1) ) * zeps )   ) 
    1292                         ! 
    1293                         p_fld_crs(ii,ij) = zflcrs * p_mask_crs(ii,ij,1) 
    1294                         ! 
    1295                      ENDDO       
    1296                   ENDDO 
    1297             END SELECT 
    1298             ! 
     1635 
     1636              END SELECT 
     1637             ! 
    12991638         END SELECT 
    13001639         ! 
    1301          CALL crs_lbc_lnk( p_fld_crs, cd_type, 1.0 ) 
     1640         CALL crs_lbc_lnk( p_fld_crs, cd_type, psgn ) 
    13021641         ! 
    13031642   END SUBROUTINE crs_dom_ope_2d 
     
    13161655      !! Local variables 
    13171656      INTEGER ::  ji, jj, jk                   ! dummy loop indices 
    1318       INTEGER ::  ijie, ijje, ii, ij 
     1657      INTEGER ::  ijie, ijje, ii, ij, je_2 
    13191658      REAL(wp) :: ze3crs   
     1659      REAL(wp), DIMENSION(:,:,:), POINTER :: zmask, zsurf    
    13201660 
    13211661      !!----------------------------------------------------------------   
     1662 
     1663       p_e3_crs    (:,:,:) = 0. 
     1664       p_e3_max_crs(:,:,:) = 1. 
    13221665    
    1323       SELECT CASE ( cd_type ) 
    1324        
    1325          CASE ('T', 'U', 'V') 
    1326           
    1327             DO jk = 1 , jpk 
    1328                DO ji = nistr, niend, nn_factx 
    1329                   DO jj = njstr, njend, nn_facty 
    1330                      ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    1331                      ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1332                      ijje = mje_crs(ij) 
    1333                      ijie = mie_crs(ii) 
    1334                      !  
    1335                      ze3crs =  p_e3(ji  ,jj  ,jk) * p_e1(ji  ,jj  ) * p_e2(ji  ,jj  ) * p_mask(ji  ,jj  ,jk) +  & 
    1336                         &      p_e3(ji+1,jj  ,jk) * p_e1(ji+1,jj  ) * p_e2(ji+1,jj  ) * p_mask(ji+1,jj  ,jk) +  & 
    1337                         &      p_e3(ji+2,jj  ,jk) * p_e1(ji+2,jj  ) * p_e2(ji+2,jj  ) * p_mask(ji+2,jj  ,jk) +  & 
    1338                         &      p_e3(ji  ,jj+1,jk) * p_e1(ji  ,jj+1) * p_e2(ji  ,jj+1) * p_mask(ji  ,jj+1,jk) +  & 
    1339                         &      p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk) +  & 
    1340                         &      p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk) +  & 
    1341                         &      p_e3(ji  ,jj+2,jk) * p_e1(ji  ,jj+2) * p_e2(ji  ,jj+2) * p_mask(ji  ,jj+2,jk) +  & 
    1342                         &      p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk) +  & 
    1343                         &      p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk) 
    1344   
    1345                      p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 
    1346                      ! 
    1347                      ze3crs = MAX( p_e3(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk),  & 
    1348                         &          p_e3(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk),  & 
    1349                         &          p_e3(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk),  & 
    1350                         &          p_e3(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk),  & 
    1351                         &          p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk),  & 
    1352                         &          p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk),  & 
    1353                         &          p_e3(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk),  & 
    1354                         &          p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk),  & 
    1355                         &          p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk) ) 
    1356                      
    1357                      p_e3_max_crs(ii,ij,jk) = ze3crs 
    1358                   ENDDO 
    1359                ENDDO 
    1360             ENDDO 
    1361   
    1362          CASE ('W') 
    1363           
    1364             DO jk = 2 , jpk 
    1365                DO ji = nistr, niend, nn_factx 
    1366                   DO jj = njstr, njend, nn_facty 
    1367                      ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    1368                      ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1369                      ijje = mje_crs(ij) 
    1370                      ijie = mie_crs(ii) 
    1371                      !   
    1372                      ze3crs =  p_e3(ji  ,jj  ,jk) * p_e1(ji  ,jj  ) * p_e2(ji  ,jj  ) * p_mask(ji  ,jj  ,jk-1) +  & 
    1373                         &      p_e3(ji+1,jj  ,jk) * p_e1(ji+1,jj  ) * p_e2(ji+1,jj  ) * p_mask(ji+1,jj  ,jk-1) +  & 
    1374                         &      p_e3(ji+2,jj  ,jk) * p_e1(ji+2,jj  ) * p_e2(ji+2,jj  ) * p_mask(ji+2,jj  ,jk-1) +  & 
    1375                         &      p_e3(ji  ,jj+1,jk) * p_e1(ji  ,jj+1) * p_e2(ji  ,jj+1) * p_mask(ji  ,jj+1,jk-1) +  & 
    1376                         &      p_e3(ji+1,jj+1,jk) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,jk-1) +  & 
    1377                         &      p_e3(ji+2,jj+1,jk) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,jk-1) +  & 
    1378                         &      p_e3(ji  ,jj+2,jk) * p_e1(ji  ,jj+2) * p_e2(ji  ,jj+2) * p_mask(ji  ,jj+2,jk-1) +  & 
    1379                         &      p_e3(ji+1,jj+2,jk) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,jk-1) +  & 
    1380                         &      p_e3(ji+2,jj+2,jk) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,jk-1) 
    1381                          
    1382                      p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 
    1383                      ! 
    1384                      ze3crs = MAX( p_e3(ji  ,jj  ,jk) * p_mask(ji  ,jj  ,jk-1),  & 
    1385                         &          p_e3(ji+1,jj  ,jk) * p_mask(ji+1,jj  ,jk-1),  & 
    1386                         &          p_e3(ji+2,jj  ,jk) * p_mask(ji+2,jj  ,jk-1),  & 
    1387                         &          p_e3(ji  ,jj+1,jk) * p_mask(ji  ,jj+1,jk-1),  & 
    1388                         &          p_e3(ji+1,jj+1,jk) * p_mask(ji+1,jj+1,jk-1),  & 
    1389                         &          p_e3(ji+2,jj+1,jk) * p_mask(ji+2,jj+1,jk-1),  & 
    1390                         &          p_e3(ji  ,jj+2,jk) * p_mask(ji  ,jj+2,jk-1),  & 
    1391                         &          p_e3(ji+1,jj+2,jk) * p_mask(ji+1,jj+2,jk-1),  & 
    1392                         &          p_e3(ji+2,jj+2,jk) * p_mask(ji+2,jj+2,jk-1) ) 
    1393                      
    1394                      p_e3_max_crs(ii,ij,jk) = ze3crs 
    1395                   ENDDO 
    1396                ENDDO 
    1397             ENDDO 
    1398               
    1399             DO ji = nistr, niend, nn_factx 
    1400                DO jj = njstr, njend, nn_facty 
    1401                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    1402                   ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1403                   ijje = mje_crs(ij) 
    1404                   ijie = mie_crs(ii) 
    1405                   !   
    1406                    ze3crs =  p_e3(ji  ,jj  ,1) * p_e1(ji  ,jj  ) * p_e2(ji  ,jj  ) * p_mask(ji  ,jj  ,1) +  & 
    1407                         &    p_e3(ji+1,jj  ,1) * p_e1(ji+1,jj  ) * p_e2(ji+1,jj  ) * p_mask(ji+1,jj  ,1) +  & 
    1408                         &    p_e3(ji+2,jj  ,1) * p_e1(ji+2,jj  ) * p_e2(ji+2,jj  ) * p_mask(ji+2,jj  ,1) +  & 
    1409                         &    p_e3(ji  ,jj+1,1) * p_e1(ji  ,jj+1) * p_e2(ji  ,jj+1) * p_mask(ji  ,jj+1,1) +  & 
    1410                         &    p_e3(ji+1,jj+1,1) * p_e1(ji+1,jj+1) * p_e2(ji+1,jj+1) * p_mask(ji+1,jj+1,1) +  & 
    1411                         &    p_e3(ji+2,jj+1,1) * p_e1(ji+2,jj+1) * p_e2(ji+2,jj+1) * p_mask(ji+2,jj+1,1) +  & 
    1412                         &    p_e3(ji  ,jj+2,1) * p_e1(ji  ,jj+2) * p_e2(ji  ,jj+2) * p_mask(ji  ,jj+2,1) +  & 
    1413                         &    p_e3(ji+1,jj+2,1) * p_e1(ji+1,jj+2) * p_e2(ji+1,jj+2) * p_mask(ji+1,jj+2,1) +  & 
    1414                         &    p_e3(ji+2,jj+2,1) * p_e1(ji+2,jj+2) * p_e2(ji+2,jj+2) * p_mask(ji+2,jj+2,1) 
    1415                          
    1416                   p_e3_crs(ii,ij,1) = ze3crs / p_sfc_crs(ii,ij,1) 
    1417                   ! 
    1418                   ze3crs = MAX( p_e3(ji  ,jj  ,1) * p_mask(ji  ,jj  ,1),  & 
    1419                      &          p_e3(ji+1,jj  ,1) * p_mask(ji+1,jj  ,1),  & 
    1420                      &          p_e3(ji+2,jj  ,1) * p_mask(ji+2,jj  ,1),  & 
    1421                      &          p_e3(ji  ,jj+1,1) * p_mask(ji  ,jj+1,1),  & 
    1422                      &          p_e3(ji+1,jj+1,1) * p_mask(ji+1,jj+1,1),  & 
    1423                      &          p_e3(ji+2,jj+1,1) * p_mask(ji+2,jj+1,1),  & 
    1424                      &          p_e3(ji  ,jj+2,1) * p_mask(ji  ,jj+2,1),  & 
    1425                      &          p_e3(ji+1,jj+2,1) * p_mask(ji+1,jj+2,1),  & 
    1426                      &          p_e3(ji+2,jj+2,1) * p_mask(ji+2,jj+2,1) ) 
    1427                   
    1428                   p_e3_max_crs(ii,ij,1) = ze3crs 
    1429                ENDDO 
    1430             ENDDO 
    1431              
    1432          END SELECT  
    1433          !               
    1434          CALL crs_lbc_lnk( p_e3_crs    , cd_type, 1.0, pval=1.0 )   
    1435          CALL crs_lbc_lnk( p_e3_max_crs, cd_type, 1.0, pval=1.0 )   
    1436          !               
     1666 
     1667       CALL wrk_alloc( jpi, jpj, jpk, zmask, zsurf ) 
     1668 
     1669       SELECT CASE ( cd_type ) 
     1670          CASE( 'W' ) 
     1671              zmask(:,:,1) = p_mask(:,:,1)  
     1672              DO jk = 2, jpk 
     1673                 zmask(:,:,jk) = p_mask(:,:,jk-1)  
     1674              ENDDO 
     1675           CASE DEFAULT 
     1676              DO jk = 1, jpk 
     1677                 zmask(:,:,jk) = p_mask(:,:,jk)  
     1678              ENDDO 
     1679       END SELECT 
     1680 
     1681       DO jk = 1, jpk 
     1682          zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:) * p_e3(:,:,jk)  
     1683       ENDDO 
     1684 
     1685       IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1686          IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1687             je_2 = mje_crs(2) 
     1688             DO jk = 1 , jpk 
     1689                DO ji = nistr, niend, nn_factx 
     1690                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1691                   ze3crs =   zsurf(ji  ,je_2,jk) * zmask(ji  ,je_2,jk)   & 
     1692                        &   + zsurf(ji+1,je_2,jk) * zmask(ji+1,je_2,jk)   & 
     1693                        &   + zsurf(ji+2,je_2,jk) * zmask(ji+2,je_2,jk)  
     1694 
     1695                   p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 
     1696                   ! 
     1697                   ze3crs = MAX( p_e3(ji  ,je_2,jk) * zmask(ji  ,je_2,jk),  & 
     1698                      &          p_e3(ji+1,je_2,jk) * zmask(ji+1,je_2,jk),  & 
     1699                      &          p_e3(ji+2,je_2,jk) * zmask(ji+2,je_2,jk)  ) 
     1700                   ! 
     1701                   p_e3_max_crs(ii,2,jk) = ze3crs 
     1702                ENDDO 
     1703             ENDDO 
     1704          ENDIF 
     1705       ELSE 
     1706          je_2 = mjs_crs(2) 
     1707          DO jk = 1 , jpk 
     1708             DO ji = nistr, niend, nn_factx 
     1709                ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
     1710                ze3crs =  zsurf(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk)   & 
     1711                   &    + zsurf(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk)   & 
     1712                   &    + zsurf(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk)   & 
     1713                   &    + zsurf(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk)   & 
     1714                   &    + zsurf(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk)   & 
     1715                   &    + zsurf(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk)   & 
     1716                   &    + zsurf(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk)   & 
     1717                   &    + zsurf(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk)   & 
     1718                   &    + zsurf(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) 
     1719 
     1720                p_e3_crs(ii,2,jk) = ze3crs / p_sfc_crs(ii,2,jk) 
     1721                ! 
     1722                ze3crs = MAX( p_e3(ji  ,je_2  ,jk) * zmask(ji  ,je_2  ,jk),  & 
     1723                   &          p_e3(ji+1,je_2  ,jk) * zmask(ji+1,je_2  ,jk),  & 
     1724                   &          p_e3(ji+2,je_2  ,jk) * zmask(ji+2,je_2  ,jk),  & 
     1725                   &          p_e3(ji  ,je_2+1,jk) * zmask(ji  ,je_2+1,jk),  & 
     1726                   &          p_e3(ji+1,je_2+1,jk) * zmask(ji+1,je_2+1,jk),  & 
     1727                   &          p_e3(ji+2,je_2+1,jk) * zmask(ji+2,je_2+1,jk),  & 
     1728                   &          p_e3(ji  ,je_2+2,jk) * zmask(ji  ,je_2+2,jk),  & 
     1729                   &          p_e3(ji+1,je_2+2,jk) * zmask(ji+1,je_2+2,jk),  & 
     1730                   &          p_e3(ji+2,je_2+2,jk) * zmask(ji+2,je_2+2,jk) ) 
     1731                
     1732                p_e3_max_crs(ii,2,jk) = ze3crs 
     1733                ENDDO 
     1734             ENDDO 
     1735          ENDIF 
     1736          DO jk = 1 , jpk 
     1737             DO jj = njstr, njend, nn_facty 
     1738                DO ji = nistr, niend, nn_factx 
     1739                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2           
     1740                   ij   = ( jj - njstr ) * rfacty_r + 3 
     1741                   ze3crs =   zsurf(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk)   & 
     1742                   &        + zsurf(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk)   & 
     1743                   &        + zsurf(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk)   & 
     1744                   &        + zsurf(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk)   & 
     1745                   &        + zsurf(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk)   & 
     1746                   &        + zsurf(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk)   & 
     1747                   &        + zsurf(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk)   & 
     1748                   &        + zsurf(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk)   & 
     1749                   &        + zsurf(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) 
     1750 
     1751                p_e3_crs(ii,ij,jk) = ze3crs / p_sfc_crs(ii,ij,jk) 
     1752                ! 
     1753                ze3crs = MAX( p_e3(ji  ,jj  ,jk) * zmask(ji  ,jj  ,jk),  & 
     1754                   &          p_e3(ji+1,jj  ,jk) * zmask(ji+1,jj  ,jk),  & 
     1755                   &          p_e3(ji+2,jj  ,jk) * zmask(ji+2,jj  ,jk),  & 
     1756                   &          p_e3(ji  ,jj+1,jk) * zmask(ji  ,jj+1,jk),  & 
     1757                   &          p_e3(ji+1,jj+1,jk) * zmask(ji+1,jj+1,jk),  & 
     1758                   &          p_e3(ji+2,jj+1,jk) * zmask(ji+2,jj+1,jk),  & 
     1759                   &          p_e3(ji  ,jj+2,jk) * zmask(ji  ,jj+2,jk),  & 
     1760                   &          p_e3(ji+1,jj+2,jk) * zmask(ji+1,jj+2,jk),  & 
     1761                   &          p_e3(ji+2,jj+2,jk) * zmask(ji+2,jj+2,jk) ) 
     1762                
     1763                p_e3_max_crs(ii,ij,jk) = ze3crs 
     1764             ENDDO 
     1765          ENDDO 
     1766       ENDDO 
     1767                   
     1768       CALL crs_lbc_lnk( p_e3_crs    , cd_type, 1.0, pval=1.0 )   
     1769       CALL crs_lbc_lnk( p_e3_max_crs, cd_type, 1.0, pval=1.0 )   
     1770       !               
     1771       CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zmask ) 
     1772       ! 
    14371773   END SUBROUTINE crs_dom_e3 
    14381774 
     
    14401776 
    14411777      !!  Arguments 
    1442       CHARACTER(len=1),                 INTENT(in) :: cd_type      ! grid type T, W ( U, V, F) 
    1443       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: p_mask       ! Parent grid T mask 
    1444       REAL(wp), DIMENSION(jpi,jpj)    , INTENT(in), OPTIONAL :: p_e1, p_e2         ! 3D tracer T or W on parent grid 
    1445       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: p_e3         ! 3D tracer T or W on parent grid 
    1446       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out):: p_surf_crs ! Coarse grid box east or north face quantity  
    1447       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out):: p_surf_crs_msk ! Coarse grid box east or north face quantity  
     1778      CHARACTER(len=1),                         INTENT(in)          :: cd_type      ! grid type T, W ( U, V, F) 
     1779      REAL(wp), DIMENSION(jpi,jpj,jpk)        , INTENT(in)          :: p_mask       ! Parent grid T mask 
     1780      REAL(wp), DIMENSION(jpi,jpj)            , INTENT(in), OPTIONAL :: p_e1, p_e2         ! 3D tracer T or W on parent grid 
     1781      REAL(wp), DIMENSION(jpi,jpj,jpk)        , INTENT(in), OPTIONAL :: p_e3         ! 3D tracer T or W on parent grid 
     1782      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out)          :: p_surf_crs ! Coarse grid box east or north face quantity  
     1783      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(out)          :: p_surf_crs_msk ! Coarse grid box east or north face quantity  
    14481784 
    14491785      !! Local variables 
    14501786      INTEGER  :: ji, jj, jk                   ! dummy loop indices 
    1451       INTEGER  :: ijie, ijje, ii, ij 
    1452       REAL(wp), DIMENSION(:,:)  , POINTER :: zsurf    
    1453       REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf3d    
    1454       REAL(wp) :: zsfcrs, zsfcrs_msk 
     1787      INTEGER  :: ii, ij, je_2 
     1788      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurf, zsurfmsk    
    14551789      !!----------------------------------------------------------------   
    14561790      ! Initialize 
    14571791 
    14581792 
     1793      CALL wrk_alloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 
    14591794      ! 
    14601795      SELECT CASE ( cd_type ) 
    14611796       
    1462          CASE ('W') 
    1463        
    1464            CALL wrk_alloc( jpi, jpj, zsurf ) 
    1465            zsurf(:,:) =  p_e1(:,:) * p_e2(:,:) 
    1466          
    1467             DO ji = nistr, niend, nn_factx 
    1468                DO jj   = njstr, njend, nn_facty 
    1469                   ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    1470                   ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1471                   ijje = mje_crs(ij) 
    1472                   ijie = mie_crs(ii) 
     1797         CASE ('W')     
     1798            DO jk = 1, jpk 
     1799               zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:)  
     1800            ENDDO 
     1801            zsurfmsk(:,:,1) = zsurf(:,:,1) * p_mask(:,:,1)  
     1802            DO jk = 2, jpk 
     1803               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk-1)  
     1804            ENDDO 
     1805 
     1806         CASE ('V')      
     1807            DO jk = 1, jpk 
     1808               zsurf(:,:,jk) = p_e1(:,:) * p_e3(:,:,jk)  
     1809            ENDDO 
     1810            DO jk = 1, jpk 
     1811               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk)  
     1812            ENDDO 
     1813 
     1814         CASE ('U')      
     1815            DO jk = 1, jpk 
     1816               zsurf(:,:,jk) = p_e2(:,:) * p_e3(:,:,jk)  
     1817            ENDDO 
     1818            DO jk = 1, jpk 
     1819               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk)  
     1820            ENDDO 
     1821 
     1822         CASE DEFAULT 
     1823            DO jk = 1, jpk 
     1824               zsurf(:,:,jk) = p_e1(:,:) * p_e2(:,:)  
     1825            ENDDO 
     1826            DO jk = 1, jpk 
     1827               zsurfmsk(:,:,jk) = zsurf(:,:,jk) * p_mask(:,:,jk)  
     1828            ENDDO 
     1829      END SELECT 
     1830 
     1831      IF( nldj_crs == 1 .AND. ( ( mje_crs(2) - mjs_crs(2) ) < 2 ) ) THEN     !!cc bande du sud style ORCA2 
     1832         IF( mje_crs(2) - mjs_crs(2) == 1 ) THEN 
     1833            je_2 = mje_crs(2) 
     1834            DO jk = 1, jpk 
     1835               DO ji = nistr, niend, nn_factx 
     1836                  ii   = ( ji - mis_crs(2) ) * rfactx_r + 2  
     1837                  !     
     1838                  p_surf_crs    (ii,2,jk) =  zsurf(ji,je_2  ,jk) + zsurf(ji+1,je_2  ,jk) + zsurf(ji+2,je_2  ,jk) & 
     1839                    &                      + zsurf(ji,je_2-1,jk) + zsurf(ji+1,je_2-1,jk) + zsurf(ji+2,je_2-1,jk)  ! Why ????? 
    14731840                  ! 
    1474                   zsfcrs     =  zsurf(ji,jj  ) + zsurf(ji+1,jj  ) + zsurf(ji+2,jj  )  & 
    1475                     &         + zsurf(ji,jj+1) + zsurf(ji+1,jj+1) + zsurf(ji+2,jj+1)  & 
    1476                     &         + zsurf(ji,jj+2) + zsurf(ji+1,jj+2) + zsurf(ji+2,jj+2)   
    1477                   ! 
    1478                   zsfcrs_msk =  zsurf(ji  ,jj  ) * p_mask(ji  ,jj  ,1)  & 
    1479                     &         + zsurf(ji+1,jj  ) * p_mask(ji+1,jj  ,1)  & 
    1480                     &         + zsurf(ji+2,jj  ) * p_mask(ji+2,jj  ,1)  & 
    1481                     &         + zsurf(ji  ,jj+1) * p_mask(ji  ,jj+1,1)  & 
    1482                     &         + zsurf(ji+1,jj+1) * p_mask(ji+1,jj+1,1)  & 
    1483                     &         + zsurf(ji+2,jj+1) * p_mask(ji+2,jj+1,1)  & 
    1484                     &         + zsurf(ji  ,jj+2) * p_mask(ji  ,jj+2,1)  & 
    1485                     &         + zsurf(ji+1,jj+2) * p_mask(ji+1,jj+2,1)  & 
    1486                     &         + zsurf(ji+2,jj+2) * p_mask(ji+2,jj+2,1) 
    1487                   ! 
    1488                   p_surf_crs    (ii,ij,1) = zsfcrs 
    1489                   p_surf_crs_msk(ii,ij,1) = zsfcrs_msk 
     1841                  p_surf_crs_msk(ii,2,jk) =  zsurfmsk(ji,je_2,jk) + zsurfmsk(ji+1,je_2,jk) + zsurfmsk(ji+2,je_2,jk)  
    14901842                  ! 
    14911843               ENDDO 
    14921844            ENDDO 
    1493             DO jk = 2, jpk 
     1845         ENDIF 
     1846      ELSE 
     1847         je_2 = mjs_crs(2) 
     1848         DO jk = 1, jpk 
     1849            DO ji = nistr, niend, nn_factx 
     1850               ii   = ( ji - mis_crs(2) ) * rfactx_r + 2  
     1851               !   
     1852               p_surf_crs    (ii,2,jk) =  zsurf(ji,je_2  ,jk) + zsurf(ji+1,je_2  ,jk) + zsurf(ji+2,je_2  ,jk)  & 
     1853                    &                   + zsurf(ji,je_2+1,jk) + zsurf(ji+1,je_2+1,jk) + zsurf(ji+2,je_2+1,jk)  & 
     1854                    &                   + zsurf(ji,je_2+2,jk) + zsurf(ji+1,je_2+2,jk) + zsurf(ji+2,je_2+2,jk)   
     1855 
     1856               p_surf_crs_msk(ii,2,jk) =  zsurfmsk(ji,je_2  ,jk) + zsurfmsk(ji+1,je_2  ,jk) + zsurfmsk(ji+2,je_2  ,jk)  & 
     1857                    &                   + zsurfmsk(ji,je_2+1,jk) + zsurfmsk(ji+1,je_2+1,jk) + zsurfmsk(ji+2,je_2+1,jk)  & 
     1858                    &                   + zsurfmsk(ji,je_2+2,jk) + zsurfmsk(ji+1,je_2+2,jk) + zsurfmsk(ji+2,je_2+2,jk)   
     1859                ENDDO 
     1860            ENDDO 
     1861      ENDIF 
     1862          
     1863      DO jk = 1, jpk 
     1864         DO jj = njstr, njend, nn_facty 
     1865            DO ji = nistr, niend, nn_factx 
     1866               ii = ( ji - mis_crs(2) ) * rfactx_r + 2   
     1867               ij = ( jj - njstr ) * rfacty_r + 3 
    14941868               ! 
    1495                p_surf_crs(:,:,jk) = p_surf_crs(:,:,1) 
    1496                ! 
    1497                DO ji = nistr, niend, nn_factx 
    1498                   DO jj   = njstr, njend, nn_facty 
    1499                      ii   = ( ji - mis_crs(2) ) * rfactx_r + 2                 ! cordinate in parent grid 
    1500                      ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1501                      ijje = mje_crs(ij) 
    1502                      ijie = mie_crs(ii) 
    1503                      ! 
    1504                      zsfcrs_msk =  zsurf(ji  ,jj  ) * p_mask(ji  ,jj  ,jk-1)  & 
    1505                        &         + zsurf(ji+1,jj  ) * p_mask(ji+1,jj  ,jk-1)  & 
    1506                        &         + zsurf(ji+2,jj  ) * p_mask(ji+2,jj  ,jk-1)  & 
    1507                        &         + zsurf(ji  ,jj+1) * p_mask(ji  ,jj+1,jk-1)  & 
    1508                        &         + zsurf(ji+1,jj+1) * p_mask(ji+1,jj+1,jk-1)  & 
    1509                        &         + zsurf(ji+2,jj+1) * p_mask(ji+2,jj+1,jk-1)  & 
    1510                        &         + zsurf(ji  ,jj+2) * p_mask(ji  ,jj+2,jk-1)  & 
    1511                        &         + zsurf(ji+1,jj+2) * p_mask(ji+1,jj+2,jk-1)  & 
    1512                        &         + zsurf(ji+2,jj+2) * p_mask(ji+2,jj+2,jk-1) 
    1513                        ! 
    1514                        p_surf_crs_msk(ii,ij,jk) = zsfcrs_msk 
    1515                        ! 
    1516                    ENDDO 
    1517                 ENDDO 
    1518             ENDDO 
    1519                          
    1520             CALL wrk_dealloc( jpi, jpj, zsurf ) 
    1521            
    1522          CASE( 'V' ) 
    1523             
    1524            CALL wrk_alloc( jpi, jpj, jpk, zsurf3d ) 
    1525            DO jk = 1, jpk 
    1526               zsurf3d(:,:,jk) =  p_e1(:,:) * p_e3(:,:,jk) 
    1527            ENDDO 
    1528           
    1529            DO jk = 1, jpk 
    1530               DO ji = nistr, niend, nn_factx 
    1531                  DO jj = njstr, njend, nn_facty 
    1532                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1533                     ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1534                     ijje = mje_crs(ij) 
    1535                     ijie = mie_crs(ii) 
    1536                     !                   
    1537                     zsfcrs      =  zsurf3d(ji,ijje,jk) + zsurf3d(ji+1,ijje,jk) + zsurf3d(ji+2,ijje,jk) 
    1538                     ! 
    1539                     zsfcrs_msk  =  zsurf3d(ji  ,ijje,jk) * p_mask(ji  ,ijje,jk) & 
    1540                       &          + zsurf3d(ji+1,ijje,jk) * p_mask(ji+1,ijje,jk) & 
    1541                       &          + zsurf3d(ji+2,ijje,jk) * p_mask(ji+2,ijje,jk)  
    1542                     ! 
    1543                     p_surf_crs    (ii,ij,jk) = zsfcrs 
    1544                     p_surf_crs_msk(ii,ij,jk) = zsfcrs_msk 
    1545                     ! 
    1546                   ENDDO       
    1547               ENDDO 
    1548            ENDDO    
    1549  
    1550            CALL wrk_dealloc( jpi, jpj, jpk, zsurf3d ) 
    1551              
    1552          CASE( 'U' ) 
    1553           
    1554            CALL wrk_alloc( jpi, jpj, jpk, zsurf3d ) 
    1555            DO jk = 1, jpk 
    1556               zsurf3d(:,:,jk) =  p_e2(:,:) * p_e3(:,:,jk) 
    1557            ENDDO 
    1558           
    1559            DO jk = 1, jpk 
    1560               DO ji = nistr, niend, nn_factx 
    1561                  DO jj = njstr, njend, nn_facty 
    1562                     ii   = ( ji - mis_crs(2) ) * rfactx_r + 2      
    1563                     ij   = ( jj - mjs_crs(2) ) * rfacty_r + 2 
    1564                     ijje = mje_crs(ij) 
    1565                     ijie = mie_crs(ii) 
    1566                     !                   
    1567                     zsfcrs      =  zsurf3d(ijie,jj,jk) + zsurf3d(ijie,jj+1,jk) + zsurf3d(ijie,jj+2,jk) 
    1568                     ! 
    1569                     zsfcrs_msk  =  zsurf3d(ijie  ,jj,jk) * p_mask(ijie,jj  ,jk) & 
    1570                       &          + zsurf3d(ijie,jj+1,jk) * p_mask(ijie,jj+1,jk) & 
    1571                       &          + zsurf3d(ijie,jj+2,jk) * p_mask(ijie,jj+2,jk)  
    1572                     ! 
    1573                     p_surf_crs    (ii,ij,jk) = zsfcrs 
    1574                     p_surf_crs_msk(ii,ij,jk) = zsfcrs_msk 
    1575                     ! 
    1576                   ENDDO       
    1577               ENDDO 
    1578            ENDDO   
    1579   
    1580            CALL wrk_dealloc( jpi, jpj, jpk, zsurf3d ) 
    1581  
    1582       END SELECT 
    1583        
     1869               p_surf_crs    (ii,ij,jk) =  zsurf(ji,jj  ,jk) + zsurf(ji+1,jj  ,jk) + zsurf(ji+2,jj  ,jk)  & 
     1870                    &                    + zsurf(ji,jj+1,jk) + zsurf(ji+1,jj+1,jk) + zsurf(ji+2,jj+1,jk)  & 
     1871                    &                    + zsurf(ji,jj+2,jk) + zsurf(ji+1,jj+2,jk) + zsurf(ji+2,jj+2,jk)   
     1872 
     1873               p_surf_crs_msk(ii,ij,jk) =  zsurfmsk(ji,jj  ,jk) + zsurfmsk(ji+1,jj  ,jk) + zsurfmsk(ji+2,jj  ,jk)  & 
     1874                    &                    + zsurfmsk(ji,jj+1,jk) + zsurfmsk(ji+1,jj+1,jk) + zsurfmsk(ji+2,jj+1,jk)  & 
     1875                    &                    + zsurfmsk(ji,jj+2,jk) + zsurfmsk(ji+1,jj+2,jk) + zsurfmsk(ji+2,jj+2,jk)   
     1876            ENDDO       
     1877         ENDDO 
     1878      ENDDO    
     1879 
    15841880      CALL crs_lbc_lnk( p_surf_crs    , cd_type, 1.0, pval=1.0 ) 
    15851881      CALL crs_lbc_lnk( p_surf_crs_msk, cd_type, 1.0, pval=1.0 ) 
    15861882 
     1883      CALL wrk_dealloc( jpi, jpj, jpk, zsurf, zsurfmsk ) 
    15871884 
    15881885   END SUBROUTINE crs_dom_sfc 
     
    16011898      INTEGER  :: ji,jj,jk,ijjgloT,ijis,ijie,ijjs,ijje,jn      ! dummy indices 
    16021899      INTEGER  :: ierr                                ! allocation error status 
    1603     
    1604      ! 1.a. Define global domain indices 
     1900  
     1901   
     1902     ! 1.a. Define global domain indices  : take into account the interior domain only ( removes i/j=1 , i/j=jpiglo/jpjglo ) then add 2/3 grid points  
    16051903      jpiglo_crs   = INT( (jpiglo - 2) / nn_factx ) + 2 
    1606       jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 2  ! the -2 removes j=1, j=jpj 
     1904  !    jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 2  ! the -2 removes j=1, j=jpj 
     1905  !    jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 3 
     1906      jpjglo_crs   = INT( (jpjglo - MOD(jpjglo, nn_facty)) / nn_facty ) + 3 
    16071907      jpiglo_crsm1 = jpiglo_crs - 1 
    16081908      jpjglo_crsm1 = jpjglo_crs - 1   
    16091909 
    1610      ! 1.b. Define local domain indices 
    1611       jpi_crs = ( jpiglo_crs-2 * jpreci + (jpni-1) ) / jpni + 2*jpreci 
    1612       jpj_crs = ( jpjglo_crs-2 * jprecj + (jpnj-1) ) / jpnj + 2*jprecj 
     1910      jpi_crs = ( jpiglo_crs   - 2 * jpreci + (jpni-1) ) / jpni + 2 * jpreci 
     1911      jpj_crs = ( jpjglo_crsm1 - 2 * jprecj + (jpnj-1) ) / jpnj + 2 * jprecj    
     1912               
     1913      IF( noso < 0 ) jpj_crs = jpj_crs + 1    ! add a local band on southern processors   
    16131914        
    16141915      jpi_crsm1   = jpi_crs - 1 
     
    16181919       
    16191920      ierr = crs_dom_alloc()          ! allocate most coarse grid arrays 
    1620      ! 2.a Define processor domain 
     1921 
     1922      ! 2.a Define processor domain 
    16211923      IF( .NOT. lk_mpp ) THEN 
    16221924         nimpp_crs  = 1 
     
    16281930         nlei_crs   = jpi_crs 
    16291931         nlej_crs   = jpj_crs 
    1630  
    16311932      ELSE 
    16321933         ! Initialisation of most local variables - 
     
    16421943        ! Calculs suivant une découpage en j 
    16431944        DO jn = 1, jpnij, jpni 
    1644            IF( jn < (jpnij-jpni + 1)) THEN 
     1945           IF( jn < ( jpnij - jpni + 1 ) ) THEN 
    16451946              nlejt_crs(jn) = AINT( REAL( ( jpjglo - (njmppt(jn     ) - 1) ) / nn_facty, wp ) ) & 
    16461947                       &    - AINT( REAL( ( jpjglo - (njmppt(jn+jpni) - 1) ) / nn_facty, wp ) ) 
     
    16481949              nlejt_crs(jn) = AINT( REAL(  nlejt(jn) / nn_facty, wp ) ) + 1             
    16491950           ENDIF 
    1650             
     1951           IF( noso < 0 ) nlejt_crs(jn) = nlejt_crs(jn) + 1              
    16511952           SELECT CASE( ibonjt(jn) ) 
    16521953              CASE ( -1 ) 
    1653                 IF( MOD( jpjglo - njmppt(jn), nn_facty) > 0 )    nlejt_crs(jn) = nlejt_crs(jn) + 1 
     1954                IF( MOD( jpjglo - njmppt(jn), nn_facty) > 0 )  nlejt_crs(jn) = nlejt_crs(jn) + 1 
    16541955                nlcjt_crs(jn) = nlejt_crs(jn) + jprecj 
    16551956                nldjt_crs(jn) = nldjt(jn) 
     
    16571958              CASE ( 0 ) 
    16581959               
     1960                nldjt_crs(jn) = nldjt(jn) 
     1961                IF( nldjt(jn) == 1 )  nlejt_crs(jn) = nlejt_crs(jn) + 1 
    16591962                nlejt_crs(jn) = nlejt_crs(jn) + jprecj 
    16601963                nlcjt_crs(jn) = nlejt_crs(jn) + jprecj 
    1661                 nldjt_crs(jn) = nldjt(jn) 
    16621964                 
    16631965              CASE ( 1, 2 ) 
     
    16701972                 STOP 
    16711973           END SELECT 
    1672           
    1673            njmppt_crs(jn) = ANINT(REAL((njmppt(jn) + 1 + MOD( jpjglo - njmppt(jn) + 1, nn_facty )) / nn_facty, wp ) ) 
     1974           IF( nlcjt_crs(jn) > jpj_crs )     jpj_crs = jpj_crs + 1 
     1975 
     1976           IF(nldjt_crs(jn) == 1 ) THEN 
     1977              njmppt_crs(jn) = 1 
     1978           ELSE 
     1979              njmppt_crs(jn) = 2 + ANINT(REAL((njmppt(jn) + 1 - MOD( jpjglo , nn_facty )) / nn_facty, wp ) ) 
     1980           ENDIF            
    16741981            
    16751982           DO jj = jn + 1, jn + jpni - 1 
     
    16851992        njmpp_crs = njmppt_crs(nproc + 1) 
    16861993 
    1687          !!!! Calcul suivant un decoupage en i 
    1688            DO jn = 1, jpni 
    1689               IF( jn < jpni ) THEN 
    1690           
    1691                  nleit_crs(jn) = AINT( REAL( ( jpiglo - (nimppt(jn  ) - 1) ) / nn_factx, wp ) ) & 
    1692                          &     - AINT( REAL( ( jpiglo - (nimppt(jn+1) - 1) ) / nn_factx, wp ) ) 
    1693               ELSE 
    1694                  nleit_crs(jn) = AINT( REAL( ( jpiglo - (nimppt(jn  ) - 1) ) / nn_factx, wp ) ) 
    1695               ENDIF 
    1696               SELECT CASE( ibonit(jn) ) 
    1697             
    1698                  CASE ( -1 ) 
    1699                    nleit_crs(jn) = nleit_crs(jn) + jpreci            
    1700                    nlcit_crs(jn) = nleit_crs(jn) + jpreci 
    1701                    nldit_crs(jn) = nldit(jn)  
     1994        ! Calcul suivant un decoupage en i 
     1995        DO jn = 1, jpni 
     1996           IF( jn == 1 ) THEN           
     1997              nleit_crs(jn) = AINT( REAL( ( nimppt(jn  ) - 1 + nlcit(jn  ) )  / nn_factx, wp) ) 
     1998           ELSE 
     1999              nleit_crs(jn) = AINT( REAL( ( nimppt(jn  ) - 1 + nlcit(jn  ) )  / nn_factx, wp) ) & 
     2000                 &          - AINT( REAL( ( nimppt(jn-1) - 1 + nlcit(jn-1) )  / nn_factx, wp) ) 
     2001           ENDIF 
     2002 
     2003           SELECT CASE( ibonit(jn) ) 
     2004              CASE ( -1 ) 
     2005                 nleit_crs(jn) = nleit_crs(jn) + jpreci            
     2006                 nlcit_crs(jn) = nleit_crs(jn) + jpreci 
     2007                 nldit_crs(jn) = nldit(jn)  
    17022008               
    1703                  CASE ( 0 ) 
    1704                    nleit_crs(jn) = nleit_crs(jn) + jpreci 
    1705                    nlcit_crs(jn) = nleit_crs(jn) + jpreci 
    1706                    nldit_crs(jn) = nldit(jn)  
     2009              CASE ( 0 ) 
     2010                 nleit_crs(jn) = nleit_crs(jn) + jpreci 
     2011                 nlcit_crs(jn) = nleit_crs(jn) + jpreci 
     2012                 nldit_crs(jn) = nldit(jn)  
    17072013                 
    1708                  CASE ( 1, 2 ) 
    1709                    IF( MOD( jpiglo - nimppt(jn), nn_factx) > 0 )    nleit_crs(jn) = nleit_crs(jn) + 1 
    1710                    nleit_crs(jn) = nleit_crs(jn) + jpreci 
    1711                    nlcit_crs(jn) = nleit_crs(jn) 
    1712                    nldit_crs(jn) = nldit(jn)  
    1713                  
    1714                  CASE DEFAULT 
    1715                     STOP 
    1716               END SELECT 
    1717  
    1718               nimppt_crs(jn) =ANINT( REAL( (nimppt(jn) + 1 ) / nn_factx, wp ) ) + 1 
    1719               DO jj = jn+jpni , jpnij, jpni 
    1720                  nleit_crs(jj) = nleit_crs(jn)  
    1721                  nlcit_crs(jj) = nlcit_crs(jn) 
    1722                  nldit_crs(jj) = nldit_crs(jn) 
    1723                  nimppt_crs(jj)= nimppt_crs(jn) 
    1724               ENDDO 
    1725            ENDDO  
     2014              CASE ( 1, 2 ) 
     2015                 IF( MOD( jpiglo - nimppt(jn), nn_factx) > 0 )  nleit_crs(jn) = nleit_crs(jn) + 1 
     2016                 nleit_crs(jn) = nleit_crs(jn) + jpreci 
     2017                 nlcit_crs(jn) = nleit_crs(jn) 
     2018                 nldit_crs(jn) = nldit(jn)  
     2019 
     2020              CASE DEFAULT 
     2021                 STOP 
     2022           END SELECT 
     2023 
     2024           nimppt_crs(jn) = ANINT( REAL( (nimppt(jn) + 1 ) / nn_factx, wp ) ) + 1 
     2025           DO jj = jn + jpni , jpnij, jpni 
     2026              nleit_crs(jj) = nleit_crs(jn)  
     2027              nlcit_crs(jj) = nlcit_crs(jn) 
     2028              nldit_crs(jj) = nldit_crs(jn) 
     2029              nimppt_crs(jj)= nimppt_crs(jn) 
     2030           ENDDO 
     2031         ENDDO  
    17262032         
    17272033         nlei_crs  = nleit_crs(nproc + 1)  
     
    17302036         nimpp_crs = nimppt_crs(nproc + 1) 
    17312037 
    1732          ! rajouter la condition stop 
     2038         ! No coarsening with zoom 
    17332039         IF( jpizoom /= 1 .OR. jpjzoom /= 1)    STOP  
     2040 
    17342041         DO ji = 1, jpi_crs 
    17352042            mig_crs(ji) = ji + nimpp_crs - 1 
     
    17372044         DO jj = 1, jpj_crs 
    17382045            mjg_crs(jj) = jj + njmpp_crs - 1! 
     2046         ENDDO 
     2047        
     2048         DO ji = 1, jpiglo_crs 
     2049            mi0_crs(ji) = MAX( 1, MIN( ji - nimpp_crs + 1 , jpi_crs + 1 ) ) 
     2050            mi1_crs(ji) = MAX( 0, MIN( ji - nimpp_crs + 1 , jpi_crs     ) ) 
     2051         ENDDO 
     2052          
     2053         DO jj = 1, jpjglo_crs 
     2054            mj0_crs(jj) = MAX( 1, MIN( jj - njmpp_crs + 1 , jpj_crs + 1 ) ) 
     2055            mj1_crs(jj) = MAX( 0, MIN( jj - njmpp_crs + 1 , jpj_crs     ) ) 
    17392056         ENDDO 
    17402057 
     
    17732090      
    17742091 
    1775       IF (lwp) THEN 
     2092      IF(lwp) THEN 
    17762093         WRITE(numout,*) 
    17772094         WRITE(numout,*) 'crs_init : coarse grid dimensions' 
     
    17932110         WRITE(numout,*) ' njmpp  = '     , njmpp 
    17942111         WRITE(numout,*) ' njmpp_full  = ', njmpp_full 
    1795          WRITE(numout,*) ' nreci'         , nreci  
    1796    !      WRITE(numout,*) ' nlejt'         , nlejt 
    1797    !      WRITE(numout,*) ' nldjt'         , nldjt 
    1798    !      WRITE(numout,*) ' nlcjt'         , nlcjt 
    1799    !      WRITE(numout,*) ' njmppt'        , njmppt 
    1800    !      WRITE(numout,*) ' nleit'         , nleit 
    1801    !      WRITE(numout,*) ' nldit'         , nldit 
    1802    !      WRITE(numout,*) ' nlcit'         , nlcit          
    1803    !      WRITE(numout,*) ' nimppt'        , nimppt 
    1804    !      WRITE(numout,*) ' nleit_full'    , nleit_full 
    18052112         WRITE(numout,*) 
    18062113      ENDIF 
    18072114       
    1808  
    18092115      CALL dom_grid_glo 
    18102116       
     
    18472153         
    18482154            DO ji = 2, jpiglo_crsm1 
    1849                ijie = (ji*nn_factx)-nn_factx   !cc 
    1850                ijis = ijie-nn_factx+1 
     2155               ijie = ( ji * nn_factx ) - nn_factx   !cc 
     2156               ijis = ijie - nn_factx + 1 
    18512157               mis2_crs(ji) = ijis 
    18522158               mie2_crs(ji) = ijie 
    18532159            ENDDO 
    1854             IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie2_crs(jpiglo_crsm1)  = jpiglo- 
     2160            IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie2_crs(jpiglo_crsm1) = jpiglo -  
    18552161 
    18562162            ! Handle first the northernmost bin 
     
    18592165            ENDIF 
    18602166 
    1861             DO jj = 2, jpjglo_crsm1 
    1862                 ijje = ijjgloT-nn_facty*(jj-2) 
    1863                 ijjs = ijje-nn_facty+1                    
    1864                 mjs2_crs(jpjglo_crs-jj+1) = ijjs 
    1865                 mje2_crs(jpjglo_crs-jj+1) = ijje 
     2167            DO jj = 2, jpjglo_crs 
     2168                ijje = ijjgloT - nn_facty * ( jj - 3 ) 
     2169                ijjs = ijje - nn_facty + 1                    
     2170                mjs2_crs(jpjglo_crs-jj+2) = ijjs 
     2171                mje2_crs(jpjglo_crs-jj+2) = ijje 
    18662172            ENDDO 
    18672173 
     
    18722178 
    18732179            DO ji = 2, jpiglo_crsm1 
    1874                ijie = (ji*nn_factx)-nn_factx  
    1875                ijis = ijie-nn_factx+1 
     2180               ijie = ( ji * nn_factx ) - nn_factx  
     2181               ijis = ijie - nn_factx + 1 
    18762182               mis2_crs(ji) = ijis 
    18772183               mie2_crs(ji) = ijie 
    18782184            ENDDO 
    1879             IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1)  = jpiglo-2  
     2185            IF ( jpiglo - 1 - mie2_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1)  = jpiglo - 2  
    18802186 
    18812187            ! Treat the northernmost bin separately. 
    18822188            jj = 2 
    1883             ijje = jpj-nn_facty*(jj-2) 
     2189            ijje = jpj - nn_facty * ( jj - 2 ) 
    18842190            IF ( nn_facty == 3 ) THEN   ;  ijjs = ijje - 1  
    18852191            ELSE                        ;  ijjs = ijje - nn_facty + 1 
     
    18902196            ! Now bin the rest, any remainder at the south is lumped in the southern bin 
    18912197            DO jj = 3, jpjglo_crsm1 
    1892                 ijje = jpjglo-nn_facty*(jj-2) 
    1893                 ijjs = ijje-nn_facty+1                   
    1894                 IF ( ijjs <= nn_facty )   ijjs = 2 
    1895                 mjs2_crs(jpj_crs-jj+1) = ijjs 
    1896                 mje2_crs(jpj_crs-jj+1) = ijje 
     2198                ijje = jpjglo - nn_facty * ( jj - 2 ) 
     2199                ijjs = ijje - nn_facty + 1                   
     2200                IF ( ijjs <= nn_facty )  ijjs = 2 
     2201                mjs2_crs(jpj_crs-jj+1)   = ijjs 
     2202                mje2_crs(jpj_crs-jj+1)   = ijje 
    18972203            ENDDO 
    18982204 
     
    19082214 
    19092215     ! Pad the boundaries, do not know if it is necessary 
    1910       mis2_crs(1) = 1             ; mis2_crs(jpiglo_crs) = mie2_crs(jpiglo_crs - 1) + 1    
    1911       mie2_crs(1) = nn_factx      ; mie2_crs(jpiglo_crs) = jpiglo                          
    1912       mje2_crs(1) = mjs2_crs(2)-1 ; mje2_crs(jpjglo_crs) = jpjglo 
    1913       mjs2_crs(1) = 1             ; mjs2_crs(jpjglo_crs) = mje2_crs(jpjglo_crs) - nn_facty + 1  
     2216      mis2_crs(2) = 1             ;  mis2_crs(jpiglo_crs) = mie2_crs(jpiglo_crs - 1) + 1    
     2217      mie2_crs(2) = nn_factx      ;  mie2_crs(jpiglo_crs) = jpiglo                          
     2218      ! 
     2219      mjs2_crs(1) = 1 
     2220      mje2_crs(1) = 1 
     2221      ! 
     2222      mje2_crs(2) = mjs2_crs(3)-1 ;  mje2_crs(jpjglo_crs) = jpjglo 
     2223      mjs2_crs(2) = 1             ;  mjs2_crs(jpjglo_crs) = mje2_crs(jpjglo_crs) - nn_facty + 1  
    19142224  
    19152225      IF( .NOT. lk_mpp ) THEN      
     
    19282238        ENDDO 
    19292239      ENDIF 
    1930       njstr = mjs_crs(2)  ;   njend = mjs_crs(nlcj_crs - 1) 
     2240      ! 
    19312241      nistr = mis_crs(2)  ;   niend = mis_crs(nlci_crs - 1) 
     2242      njstr = mjs_crs(3)  ;   njend = mjs_crs(nlcj_crs - 1) 
    19322243      ! 
    19332244   END SUBROUTINE crs_dom_def 
Note: See TracChangeset for help on using the changeset viewer.