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 11129 for NEMO/branches/2019/ENHANCE-03_domcfg/src – NEMO

Ignore:
Timestamp:
2019-06-18T17:11:36+02:00 (5 years ago)
Author:
mathiot
Message:

simplification of domcfg (rm all var_n and var_b as it is not needed) (ticket #2143)

Location:
NEMO/branches/2019/ENHANCE-03_domcfg
Files:
6 deleted
12 edited
2 copied

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/agrif_user.F90

    r10727 r11129  
    1212      !!---------------------------------------------------------------------- 
    1313   USE Agrif_Util 
    14    USE oce  
    1514   USE dom_oce 
    1615   USE nemogcm 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/daymod.f90

    r10727 r11129  
    273273 
    274274      IF( nsec_week > 7*nsecd )   nsec_week = ndt05     ! New week 
    275  
    276       IF(ln_ctl) THEN 
    277          WRITE(charout,FMT="('kt =', I4,'  d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 
    278          CALL prt_ctl_info(charout) 
    279       ENDIF 
    280275 
    281276      IF( lrst_oce         ) CALL day_rst( kt, 'WRITE' )      ! write day restart information 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/dom_oce.F90

    r10727 r11129  
    5050   LOGICAL, PUBLIC ::   lzoom_n    =  .FALSE.   !: North zoom type flag 
    5151 
     52   LOGICAL, PUBLIC ::   ln_closea  =  .FALSE. 
    5253 
    5354   INTEGER       ::   jphgr_msh          !: type of horizontal mesh 
     
    202203   LOGICAL, PUBLIC ::   ln_sco       !: s-coordinate or hybrid z-s coordinate 
    203204   LOGICAL, PUBLIC ::   ln_isfcav    !: presence of ISF  
    204    !                                                        !  ref.   ! before  !   now   ! after  ! 
    205    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3t_0 ,   e3t_b ,   e3t_n ,  e3t_a   !: t- vert. scale factor [m] 
    206    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3u_0 ,   e3u_b ,   e3u_n ,  e3u_a   !: u- vert. scale factor [m] 
    207    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3v_0 ,   e3v_b ,   e3v_n ,  e3v_a   !: v- vert. scale factor [m] 
    208    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3f_0           ,   e3f_n            !: f- vert. scale factor [m] 
    209    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::     e3w_0 ,   e3w_b ,   e3w_n            !: w- vert. scale factor [m] 
    210    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::    e3uw_0 ,  e3uw_b ,  e3uw_n            !: uw-vert. scale factor [m] 
    211    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::    e3vw_0 ,  e3vw_b ,  e3vw_n            !: vw-vert. scale factor [m] 
    212  
    213    !                                                        !  ref.   ! before  !   now   ! 
    214    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdept_0 , gdept_b , gdept_n   !: t- depth              [m] 
    215    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdepw_0 , gdepw_b , gdepw_n   !: w- depth              [m] 
    216    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gde3w_0           , gde3w_n   !: w- depth (sum of e3w) [m] 
    217     
    218    !                                                      !  ref. ! before  !   now   !  after  ! 
    219    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ht_0            ,    ht_n             !: t-depth              [m] 
    220    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hu_0  ,    hu_b ,    hu_n ,    hu_a   !: u-depth              [m] 
    221    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hv_0  ,    hv_b ,    hv_n ,    hv_a   !: v-depth              [m] 
    222    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::           r1_hu_b , r1_hu_n , r1_hu_a   !: inverse of u-depth [1/m] 
    223    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::           r1_hv_b , r1_hv_n , r1_hv_a   !: inverse of v-depth [1/m] 
     205   ! 
     206   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  e3t_0, e3u_0 , e3v_0 , e3f_0 !: t-,u-,v-,f-vert. scale factor [m] 
     207   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  e3w_0, e3uw_0, e3vw_0        !: w-,uw-,vw-vert. scale factor [m] 
     208   ! 
     209   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdept_0 !: t- depth              [m] 
     210   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gdepw_0 !: w- depth              [m] 
     211   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   gde3w_0 !: w- depth (sum of e3w) [m] 
     212   !  
     213   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ht_0  !: t-depth              [m] 
     214   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hu_0  !: u-depth              [m] 
     215   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hv_0  !: v-depth              [m] 
    224216 
    225217   INTEGER, PUBLIC ::   nla10              !: deepest    W level Above  ~10m (nlb10 - 1) 
     
    331323         &      ff_f (jpi,jpj) ,    ff_t (jpi,jpj)                                     , STAT=ierr(3) ) 
    332324         ! 
    333       ALLOCATE( gdept_0(jpi,jpj,jpk) , gdepw_0(jpi,jpj,jpk) , gde3w_0(jpi,jpj,jpk) ,      & 
    334          &      gdept_b(jpi,jpj,jpk) , gdepw_b(jpi,jpj,jpk) ,                             & 
    335          &      gdept_n(jpi,jpj,jpk) , gdepw_n(jpi,jpj,jpk) , gde3w_n(jpi,jpj,jpk) , STAT=ierr(4) ) 
    336          ! 
    337       ALLOCATE( e3t_0(jpi,jpj,jpk) , e3u_0(jpi,jpj,jpk) , e3v_0(jpi,jpj,jpk) , e3f_0(jpi,jpj,jpk) , e3w_0(jpi,jpj,jpk) ,   & 
    338          &      e3t_b(jpi,jpj,jpk) , e3u_b(jpi,jpj,jpk) , e3v_b(jpi,jpj,jpk) ,                      e3w_b(jpi,jpj,jpk) ,   &  
    339          &      e3t_n(jpi,jpj,jpk) , e3u_n(jpi,jpj,jpk) , e3v_n(jpi,jpj,jpk) , e3f_n(jpi,jpj,jpk) , e3w_n(jpi,jpj,jpk) ,   &  
    340          &      e3t_a(jpi,jpj,jpk) , e3u_a(jpi,jpj,jpk) , e3v_a(jpi,jpj,jpk) ,                                             & 
    341          !                                                          ! 
    342          &      e3uw_0(jpi,jpj,jpk) , e3vw_0(jpi,jpj,jpk) ,         & 
    343          &      e3uw_b(jpi,jpj,jpk) , e3vw_b(jpi,jpj,jpk) ,         &                
    344          &      e3uw_n(jpi,jpj,jpk) , e3vw_n(jpi,jpj,jpk) ,     STAT=ierr(5) )                        
    345          ! 
    346       ALLOCATE( ht_0(jpi,jpj) , hu_0(jpi,jpj) , hv_0(jpi,jpj) ,                                           & 
    347          &                      hu_b(jpi,jpj) , hv_b(jpi,jpj) , r1_hu_b(jpi,jpj) , r1_hv_b(jpi,jpj) ,     & 
    348          &      ht_n(jpi,jpj) , hu_n(jpi,jpj) , hv_n(jpi,jpj) , r1_hu_n(jpi,jpj) , r1_hv_n(jpi,jpj) ,     & 
    349          &                      hu_a(jpi,jpj) , hv_a(jpi,jpj) , r1_hu_a(jpi,jpj) , r1_hv_a(jpi,jpj) , STAT=ierr(6)  ) 
     325      ALLOCATE( gdept_0(jpi,jpj,jpk) , gdepw_0(jpi,jpj,jpk) , gde3w_0(jpi,jpj,jpk) , STAT=ierr(4) ) 
     326         ! 
     327      ALLOCATE( e3t_0 (jpi,jpj,jpk) , e3u_0 (jpi,jpj,jpk) , e3v_0(jpi,jpj,jpk) , e3f_0(jpi,jpj,jpk) , e3w_0(jpi,jpj,jpk) ,   & 
     328         &      e3uw_0(jpi,jpj,jpk) , e3vw_0(jpi,jpj,jpk) , STAT=ierr(5) )                        
     329         ! 
     330      ALLOCATE( ht_0(jpi,jpj) , hu_0(jpi,jpj) , hv_0(jpi,jpj) , STAT=ierr(6)  ) 
    350331         ! 
    351332         ! 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/domain.F90

    r10727 r11129  
    2121   !!   dom_ctl        : control print for the ocean domain 
    2222   !!---------------------------------------------------------------------- 
    23    USE oce             ! ocean variables 
    2423   USE dom_oce         ! domain: ocean 
    2524   USE phycst          ! physical constants 
    26  !  USE closea          ! closed seas 
     25   !  USE closea          ! closed seas 
    2726   USE domhgr          ! domain: set the horizontal mesh 
    2827   USE domzgr          ! domain: set the vertical mesh 
    29  !  USE domstp          ! domain: set the time-step 
    3028   USE dommsk          ! domain: set the mask system 
    3129   USE domwri          ! domain: write the meshmask file 
    32    USE domvvl          ! variable volume 
    3330   ! 
    3431   USE in_out_manager  ! I/O manager 
    3532   USE iom             !  
    36    USE wrk_nemo        ! Memory Allocation 
    37    USE lib_mpp         ! distributed memory computing library 
    38    USE lbclnk          ! ocean lateral boundary condition (or mpp link) 
    39    USE timing          ! Timing 
    4033 
    4134   IMPLICIT NONE 
     
    7467      !!---------------------------------------------------------------------- 
    7568      ! 
    76      ! IF( nn_timing == 1 )   CALL timing_start('dom_init') 
    77       ! 
    7869      IF(lwp) THEN 
    7970         WRITE(numout,*) 
     
    8475      !                       !==  Reference coordinate system  ==! 
    8576      ! 
    86                      CALL dom_nam               ! read namelist ( namrun, namdom ) 
    87                   !   CALL dom_clo               ! Closed seas and lake 
    88           
    89                      CALL dom_hgr               ! Horizontal mesh 
    90                      CALL dom_zgr               ! Vertical mesh and bathymetry 
    91                      CALL dom_msk               ! Masks 
     77      CALL dom_nam               ! read namelist ( namrun, namdom ) 
     78      ! 
     79      !   CALL dom_clo               ! Closed seas and lake 
     80      !  
     81      CALL dom_hgr               ! Horizontal mesh 
     82      ! 
     83      CALL dom_zgr               ! Vertical mesh and bathymetry 
     84      ! 
     85      CALL dom_msk               ! Masks 
    9286      ! 
    9387      ht_0(:,:) = e3t_0(:,:,1) * tmask(:,:,1)   ! Reference ocean thickness 
     
    10094      END DO 
    10195      ! 
    102       !              !==  time varying part of coordinate system  ==! 
    103       ! 
    104       IF( ln_linssh ) THEN          ! Fix in time : set to the reference one for all 
    105          !       before        !          now          !       after         ! 
    106          ;  gdept_b = gdept_0  ;   gdept_n = gdept_0   !        ---          ! depth of grid-points 
    107          ;  gdepw_b = gdepw_0  ;   gdepw_n = gdepw_0   !        ---          ! 
    108          ;                     ;   gde3w_n = gde3w_0   !        ---          ! 
    109          !                                                                   
    110          ;    e3t_b =   e3t_0  ;     e3t_n =   e3t_0   ;   e3t_a =  e3t_0    ! scale factors 
    111          ;    e3u_b =   e3u_0  ;     e3u_n =   e3u_0   ;   e3u_a =  e3u_0    ! 
    112          ;    e3v_b =   e3v_0  ;     e3v_n =   e3v_0   ;   e3v_a =  e3v_0    ! 
    113          ;                     ;     e3f_n =   e3f_0   !        ---          ! 
    114          ;    e3w_b =   e3w_0  ;     e3w_n =   e3w_0   !        ---          ! 
    115          ;   e3uw_b =  e3uw_0  ;    e3uw_n =  e3uw_0   !        ---          ! 
    116          ;   e3vw_b =  e3vw_0  ;    e3vw_n =  e3vw_0   !        ---          ! 
    117          ! 
    118          CALL wrk_alloc( jpi,jpj,   z1_hu_0, z1_hv_0 ) 
    119          ! 
    120          z1_hu_0(:,:) = ssumask(:,:) / ( hu_0(:,:) + 1._wp - ssumask(:,:) )     ! _i mask due to ISF 
    121          z1_hv_0(:,:) = ssvmask(:,:) / ( hv_0(:,:) + 1._wp - ssvmask(:,:) ) 
    122          ! 
    123          !        before       !          now          !       after         ! 
    124          ;                     ;      ht_n =    ht_0   !                     ! water column thickness 
    125          ;     hu_b =    hu_0  ;      hu_n =    hu_0   ;    hu_a =    hu_0   !  
    126          ;     hv_b =    hv_0  ;      hv_n =    hv_0   ;    hv_a =    hv_0   ! 
    127          ;  r1_hu_b = z1_hu_0  ;   r1_hu_n = z1_hu_0   ; r1_hu_a = z1_hu_0   ! inverse of water column thickness 
    128          ;  r1_hv_b = z1_hv_0  ;   r1_hv_n = z1_hv_0   ; r1_hv_a = z1_hv_0   ! 
    129          ! 
    130          CALL wrk_dealloc( jpi,jpj,   z1_hu_0, z1_hv_0 ) 
    131          ! 
    132       ELSE                         ! time varying : initialize before/now/after variables 
    133          ! 
    134          CALL dom_vvl_init  
    135          ! 
    136       ENDIF 
    137       ! 
    138       CALL cfg_write         ! create the configuration file 
    139       ! 
    140     !  IF( nn_timing == 1 )   CALL timing_stop('dom_init') 
     96      CALL cfg_write             ! create the configuration file 
     97      ! 
     98      CALL dom_wri 
    14199      ! 
    142100   END SUBROUTINE dom_init 
    143  
    144101 
    145102   SUBROUTINE dom_nam 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/dombat.F90

    r10727 r11129  
    11MODULE dombat 
    22 
    3    USE oce               ! ocean variables 
    43   USE dom_oce           ! ocean domain 
    54!   USE closea            ! closed seas 
     
    109   USE lib_mpp           ! distributed memory computing library 
    1110   USE wrk_nemo          ! Memory allocation 
    12    USE timing            ! Timing 
    1311   USE agrif_modutil 
    1412   USE bilinear_interp 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/domcfg.f90

    r10727 r11129  
    1515   USE in_out_manager  ! I/O manager 
    1616   USE lib_mpp         ! distributed memory computing library 
    17    USE timing          ! Timing 
    1817 
    1918   IMPLICIT NONE 
     
    3635      !! 
    3736      !!---------------------------------------------------------------------- 
    38       ! 
    39     !  IF( nn_timing == 1 )  CALL timing_start('dom_cfg') 
    4037      ! 
    4138      IF(lwp) THEN                   ! Control print 
     
    6057      CALL dom_glo                   ! global domain versus zoom and/or local domain 
    6158      ! 
    62     !  IF( nn_timing == 1 )  CALL timing_stop('dom_cfg') 
    63       ! 
    6459   END SUBROUTINE dom_cfg 
    65  
    6660 
    6761   SUBROUTINE dom_glo 
     
    6963      !!                     ***  ROUTINE dom_glo  *** 
    7064      !! 
    71       !! ** Purpose :   initialization for global domain, zoom and local domain 
     65      !! ** Purpose :   initialization of global domain <--> local domain indices 
    7266      !! 
    7367      !! ** Method  :    
    7468      !! 
    75       !! ** Action  : - mig  , mjg :  
    76       !!              - mi0  , mi1   : 
    77       !!              - mj0, , mj1   : 
     69      !! ** Action  : - mig , mjg : local  domain indices ==> global domain indices 
     70      !!              - mi0 , mi1 : global domain indices ==> local  domain indices 
     71      !!              - mj0,, mj1   (global point not in the local domain ==> mi0>mi1 and/or mj0>mj1) 
    7872      !!---------------------------------------------------------------------- 
    7973      INTEGER ::   ji, jj   ! dummy loop argument 
    8074      !!---------------------------------------------------------------------- 
    81       !                              ! recalculate jpizoom/jpjzoom given lat/lon 
    8275      ! 
    83       !                        ! ============== ! 
    84       !                        !  Local domain  !  
    85       !                        ! ============== ! 
    86       DO ji = 1, jpi                 ! local domain indices ==> data domain indices 
    87         mig(ji) = ji + jpizoom - 1 + nimpp - 1 
     76      DO ji = 1, jpi                 ! local domain indices ==> global domain indices 
     77        mig(ji) = ji + nimpp - 1 
    8878      END DO 
    8979      DO jj = 1, jpj 
    90         mjg(jj) = jj + jpjzoom - 1 + njmpp - 1 
     80        mjg(jj) = jj + njmpp - 1 
    9181      END DO 
    92       ! 
    93       !                              ! data domain indices ==> local domain indices 
     82      !                              ! global domain indices ==> local domain indices 
    9483      !                                   ! (return (m.0,m.1)=(1,0) if data domain gridpoint is to the west/south of the  
    95       !                                   !local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.  
    96       DO ji = 1, jpidta 
    97         mi0(ji) = MAX( 1, MIN( ji - jpizoom + 1 - nimpp + 1, jpi+1 ) ) 
    98         mi1(ji) = MAX( 0, MIN( ji - jpizoom + 1 - nimpp + 1, jpi   ) ) 
     84      !                                   ! local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.  
     85      DO ji = 1, jpiglo 
     86        mi0(ji) = MAX( 1 , MIN( ji - nimpp + 1, jpi+1 ) ) 
     87        mi1(ji) = MAX( 0 , MIN( ji - nimpp + 1, jpi   ) ) 
    9988      END DO 
    100       DO jj = 1, jpjdta 
    101         mj0(jj) = MAX( 1, MIN( jj - jpjzoom + 1 - njmpp + 1, jpj+1 ) ) 
    102         mj1(jj) = MAX( 0, MIN( jj - jpjzoom + 1 - njmpp + 1, jpj   ) ) 
     89      DO jj = 1, jpjglo 
     90        mj0(jj) = MAX( 1 , MIN( jj - njmpp + 1, jpj+1 ) ) 
     91        mj1(jj) = MAX( 0 , MIN( jj - njmpp + 1, jpj   ) ) 
    10392      END DO 
    10493      IF(lwp) THEN                   ! control print 
    10594         WRITE(numout,*) 
    106          WRITE(numout,*) 'dom_glo : domain: data / local ' 
     95         WRITE(numout,*) 'dom_glo : domain: global <<==>> local ' 
    10796         WRITE(numout,*) '~~~~~~~ ' 
    108          WRITE(numout,*) '          data input domain    : jpidta = ', jpidta,   & 
    109             &                                            ' jpjdta = ', jpjdta, ' jpkdta = ', jpkdta 
    110          WRITE(numout,*) '          global or zoom domain: jpiglo = ', jpiglo,   & 
    111             &                                            ' jpjglo = ', jpjglo, ' jpk    = ', jpk 
    112          WRITE(numout,*) '          local domain         : jpi    = ', jpi   ,   & 
    113             &                                            ' jpj    = ', jpj   , ' jpk    = ', jpk 
     97         WRITE(numout,*) '   global domain:   jpiglo = ', jpiglo, ' jpjglo = ', jpjglo, ' jpkglo = ', jpkglo 
     98         WRITE(numout,*) '   local  domain:   jpi    = ', jpi   , ' jpj    = ', jpj   , ' jpk    = ', jpk 
    11499         WRITE(numout,*) 
    115          WRITE(numout,*) '          south-west indices    jpizoom = ', jpizoom,   & 
    116             &                                           ' jpjzoom = ', jpjzoom 
     100         WRITE(numout,*) '   conversion from local to global domain indices (and vise versa) done' 
    117101         IF( nn_print >= 1 ) THEN 
    118102            WRITE(numout,*) 
    119             WRITE(numout,*) '          conversion local  ==> data i-index domain' 
     103            WRITE(numout,*) '          conversion local  ==> global i-index domain (mig)' 
    120104            WRITE(numout,25)              (mig(ji),ji = 1,jpi) 
    121105            WRITE(numout,*) 
    122             WRITE(numout,*) '          conversion data  ==> local  i-index domain' 
    123             WRITE(numout,*) '             starting index' 
    124             WRITE(numout,25)              (mi0(ji),ji = 1,jpidta) 
    125             WRITE(numout,*) '             ending index' 
    126             WRITE(numout,25)              (mi1(ji),ji = 1,jpidta) 
     106            WRITE(numout,*) '          conversion global ==> local  i-index domain' 
     107            WRITE(numout,*) '             starting index (mi0)' 
     108            WRITE(numout,25)              (mi0(ji),ji = 1,jpiglo) 
     109            WRITE(numout,*) '             ending index (mi1)' 
     110            WRITE(numout,25)              (mi1(ji),ji = 1,jpiglo) 
    127111            WRITE(numout,*) 
    128             WRITE(numout,*) '          conversion local  ==> data j-index domain' 
     112            WRITE(numout,*) '          conversion local  ==> global j-index domain (mjg)' 
    129113            WRITE(numout,25)              (mjg(jj),jj = 1,jpj) 
    130114            WRITE(numout,*) 
    131             WRITE(numout,*) '          conversion data  ==> local j-index domain' 
    132             WRITE(numout,*) '             starting index' 
    133             WRITE(numout,25)              (mj0(jj),jj = 1,jpjdta) 
    134             WRITE(numout,*) '             ending index' 
    135             WRITE(numout,25)              (mj1(jj),jj = 1,jpjdta) 
     115            WRITE(numout,*) '          conversion global ==> local j-index domain' 
     116            WRITE(numout,*) '             starting index (mj0)' 
     117            WRITE(numout,25)              (mj0(jj),jj = 1,jpjglo) 
     118            WRITE(numout,*) '             ending index (mj1)' 
     119            WRITE(numout,25)              (mj1(jj),jj = 1,jpjglo) 
    136120         ENDIF 
    137121      ENDIF 
    138122 25   FORMAT( 100(10x,19i4,/) ) 
    139  
    140       !                        ! ============== ! 
    141       !                        !  Zoom domain   ! 
    142       !                        ! ============== ! 
    143       !                              ! zoom control 
    144       IF( jpiglo + jpizoom - 1  >  jpidta .OR.   & 
    145           jpjglo + jpjzoom - 1  >  jpjdta      ) & 
    146           &   CALL ctl_stop( ' global or zoom domain exceed the data domain ! ' ) 
    147  
    148       !                              ! set zoom flag 
    149       IF( jpiglo < jpidta .OR. jpjglo < jpjdta )   lzoom = .TRUE. 
    150  
    151       !                              ! set zoom type flags 
    152       IF( lzoom .AND. jpizoom /= 1 )   lzoom_w = .TRUE.                     !  
    153       IF( lzoom .AND. jpjzoom /= 1 )   lzoom_s = .TRUE. 
    154       IF( lzoom .AND. jpiglo + jpizoom -1 /= jpidta )   lzoom_e = .TRUE. 
    155       IF( lzoom .AND. jpjglo + jpjzoom -1 /= jpjdta )   lzoom_n = .TRUE. 
    156       IF(lwp) THEN 
    157          WRITE(numout,*) 
    158          WRITE(numout,*) '          zoom flags : ' 
    159          WRITE(numout,*) '             lzoom   = ', lzoom  , ' (T = zoom, F = global )' 
    160          WRITE(numout,*) '             lzoom_e = ', lzoom_e, ' (T = forced closed east  boundary)' 
    161          WRITE(numout,*) '             lzoom_w = ', lzoom_w, ' (T = forced closed west  boundary)' 
    162          WRITE(numout,*) '             lzoom_s = ', lzoom_s, ' (T = forced closed South boundary)' 
    163          WRITE(numout,*) '             lzoom_n = ', lzoom_n, ' (T = forced closed North boundary)' 
    164       ENDIF 
    165       IF(  ( lzoom_e .OR. lzoom_w )  .AND.  ( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 )  )   & 
    166            &   CALL ctl_stop( ' Your zoom choice is inconsistent with east-west cyclic boundary condition' ) 
    167       IF(  lzoom_n  .AND.  ( 3 <= jperio .AND. jperio <= 6 )  )   & 
    168            &   CALL ctl_stop( ' Your zoom choice is inconsistent with North fold boundary condition' ) 
    169  
    170       !                              ! Pre-defined arctic/antarctic zoom of ORCA configuration flag 
    171       IF( cp_cfg == "orca" ) THEN 
    172          SELECT CASE ( jp_cfg ) 
    173          CASE ( 2 )                               !  ORCA_R2 configuration 
    174             IF(  cp_cfz == "arctic"    .AND. jpiglo  == 142    .AND. jpjglo  ==  53 .AND.   & 
    175                & jpizoom ==  21    .AND. jpjzoom ==  97         )   THEN 
    176               IF(lwp) WRITE(numout,*) '          ORCA configuration: arctic zoom ' 
    177             ENDIF 
    178             IF(  cp_cfz == "antarctic" .AND. jpiglo  == jpidta .AND. jpjglo  ==  50 .AND.   & 
    179                & jpizoom ==   1    .AND. jpjzoom ==   1         )   THEN 
    180               IF(lwp) WRITE(numout,*) '          ORCA configuration: antarctic zoom ' 
    181             ENDIF 
    182             !                              
    183          CASE ( 05 )                              !  ORCA_R05 configuration 
    184             IF(    cp_cfz == "arctic"    .AND. jpiglo  == 562    .AND. jpjglo  == 202 .AND.   & 
    185                & jpizoom ==  81    .AND. jpjzoom == 301         )   THEN 
    186               IF(lwp) WRITE(numout,*) '          ORCA configuration: arctic zoom ' 
    187             ENDIF 
    188             IF(    cp_cfz == "antarctic" .AND. jpiglo  == jpidta .AND. jpjglo  == 187 .AND.   & 
    189                & jpizoom ==   1    .AND. jpjzoom ==   1         )   THEN 
    190               IF(lwp) WRITE(numout,*) '          ORCA configuration: antarctic zoom ' 
    191             ENDIF 
    192          END SELECT 
    193          ! 
    194       ENDIF 
    195123      ! 
    196124   END SUBROUTINE dom_glo 
    197  
    198125   !!====================================================================== 
    199126END MODULE domcfg 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/domhgr.F90

    r10727 r11129  
    111111      INTEGER  ::   ie1e2u_v             ! fag for u- & v-surface read in coordinate file or not 
    112112      !!---------------------------------------------------------------------- 
    113       ! 
    114   !    IF( nn_timing == 1 )  CALL timing_start('dom_hgr') 
    115113      ! 
    116114      IF(lwp) THEN 
     
    437435      ! ------------------------------------------ 
    438436      ! The equator line must be the latitude coordinate axe 
    439  
    440 !      IF( nperio == 2 ) THEN 
    441 !         znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / REAL( jpi ) 
    442 !         IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 
    443 !      ENDIF 
    444       ! 
    445     !  IF( nn_timing == 1 )  CALL timing_stop('dom_hgr') 
     437! (PM) be carefull with nperio/jperio  
     438      IF( jperio == 2 ) THEN 
     439         znorme = SQRT( SUM( gphiu(:,2) * gphiu(:,2) ) ) / REAL( jpi ) 
     440         IF( znorme > 1.e-13 ) CALL ctl_stop( ' ===>>>> : symmetrical condition: rerun with good equator line' ) 
     441      ENDIF 
    446442      ! 
    447443   END SUBROUTINE dom_hgr 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/dommsk.F90

    r10727 r11129  
    99   !!             -   ! 1996-05  (G. Madec)  mask computed from tmask 
    1010   !!            8.0  ! 1997-02  (G. Madec)  mesh information put in domhgr.F 
    11    !!            8.1  ! 1997-07  (G. Madec)  modification of mbathy and fmask 
     11   !!            8.1  ! 1997-07  (G. Madec)  modification of kbat and fmask 
    1212   !!             -   ! 1998-05  (G. Roullet)  free surface 
    1313   !!            8.2  ! 2000-03  (G. Madec)  no slip accurate 
     
    1717   !!            3.2  ! 2009-07  (R. Benshila) Suppression of rigid-lid option 
    1818   !!            3.6  ! 2015-05  (P. Mathiot) ISF: add wmask,wumask and wvmask 
    19    !!---------------------------------------------------------------------- 
    20  
    21    !!---------------------------------------------------------------------- 
    22    !!   dom_msk        : compute land/ocean mask 
    23    !!---------------------------------------------------------------------- 
    24    USE oce             ! ocean dynamics and tracers 
    25    USE dom_oce         ! ocean space and time domain 
     19   !!            4.0  ! 2016-06  (G. Madec, S. Flavoni)  domain configuration / user defined interface 
     20   !!---------------------------------------------------------------------- 
     21 
     22   !!---------------------------------------------------------------------- 
     23   !!   dom_msk       : compute land/ocean mask 
     24   !!---------------------------------------------------------------------- 
     25   USE dom_oce        ! ocean space and time domain 
     26   USE bdy_oce        ! open boundary 
    2627   ! 
    27    USE in_out_manager  ! I/O manager 
    28    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    29    USE lib_mpp         ! 
    30    USE wrk_nemo        ! Memory allocation 
    31    USE timing          ! Timing 
     28   USE in_out_manager ! I/O manager 
     29   USE iom            ! IOM library 
     30   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     31   USE lib_mpp        ! Massively Parallel Processing library 
    3232 
    3333   IMPLICIT NONE 
     
    4242 
    4343   !! * Substitutions 
    44    !!---------------------------------------------------------------------- 
    45    !!                   ***  vectopt_loop_substitute  *** 
    46    !!---------------------------------------------------------------------- 
    47    !! ** purpose :   substitute the inner loop start/end indices with CPP macro 
    48    !!                allow unrolling of do-loop (useful with vector processors) 
    49    !!---------------------------------------------------------------------- 
    50    !!---------------------------------------------------------------------- 
    51    !! NEMO/OPA 3.7 , NEMO Consortium (2014) 
    52    !! $Id: vectopt_loop_substitute.h90 4990 2014-12-15 16:42:49Z timgraham $  
    53    !! Software governed by the CeCILL licence (./LICENSE) 
    54    !!---------------------------------------------------------------------- 
    55    !!---------------------------------------------------------------------- 
    56    !! NEMO/OPA 3.2 , LODYC-IPSL  (2009) 
    57    !! $Id: dommsk.F90 6140 2015-12-21 11:35:23Z timgraham $  
    58    !! Software governed by the CeCILL licence     (./LICENSE) 
     44#  include "vectopt_loop_substitute.h90" 
     45   !!---------------------------------------------------------------------- 
     46   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     47   !! $Id: dommsk.F90 10425 2018-12-19 21:54:16Z smasson $  
     48   !! Software governed by the CeCILL license (see ./LICENSE) 
    5949   !!---------------------------------------------------------------------- 
    6050CONTAINS 
     
    6757      !!      zontal velocity points (u & v), vorticity points (f) points. 
    6858      !! 
    69       !! ** Method  :   The ocean/land mask is computed from the basin bathy- 
    70       !!      metry in level (mbathy) which is defined or read in dommba. 
    71       !!      mbathy equals 0 over continental T-point  
    72       !!      and the number of ocean level over the ocean. 
    73       !! 
    74       !!      At a given position (ji,jj,jk) the ocean/land mask is given by: 
    75       !!      t-point : 0. IF mbathy( ji ,jj) =< 0 
    76       !!                1. IF mbathy( ji ,jj) >= jk 
    77       !!      u-point : 0. IF mbathy( ji ,jj)  or mbathy(ji+1, jj ) =< 0 
    78       !!                1. IF mbathy( ji ,jj) and mbathy(ji+1, jj ) >= jk. 
    79       !!      v-point : 0. IF mbathy( ji ,jj)  or mbathy( ji ,jj+1) =< 0 
    80       !!                1. IF mbathy( ji ,jj) and mbathy( ji ,jj+1) >= jk. 
    81       !!      f-point : 0. IF mbathy( ji ,jj)  or mbathy( ji ,jj+1) 
    82       !!                   or mbathy(ji+1,jj)  or mbathy(ji+1,jj+1) =< 0 
    83       !!                1. IF mbathy( ji ,jj) and mbathy( ji ,jj+1) 
    84       !!                  and mbathy(ji+1,jj) and mbathy(ji+1,jj+1) >= jk. 
    85       !!      tmask_i : interior ocean mask at t-point, i.e. excluding duplicated 
    86       !!                rows/lines due to cyclic or North Fold boundaries as well 
    87       !!                as MPP halos. 
    88       !! 
    89       !!        The lateral friction is set through the value of fmask along 
    90       !!      the coast and topography. This value is defined by rn_shlat, a 
    91       !!      namelist parameter: 
     59      !! ** Method  :   The ocean/land mask  at t-point is deduced from ko_top  
     60      !!      and ko_bot, the indices of the fist and last ocean t-levels which  
     61      !!      are either defined in usrdef_zgr or read in zgr_read. 
     62      !!                The velocity masks (umask, vmask, wmask, wumask, wvmask)  
     63      !!      are deduced from a product of the two neighboring tmask. 
     64      !!                The vorticity mask (fmask) is deduced from tmask taking 
     65      !!      into account the choice of lateral boundary condition (rn_shlat) : 
    9266      !!         rn_shlat = 0, free slip  (no shear along the coast) 
    9367      !!         rn_shlat = 2, no slip  (specified zero velocity at the coast) 
     
    9569      !!         2 < rn_shlat, strong slip        | in the lateral boundary layer 
    9670      !! 
    97       !!      N.B. If nperio not equal to 0, the land/ocean mask arrays 
    98       !!      are defined with the proper value at lateral domain boundaries. 
    99       !! 
    100       !!      In case of open boundaries (lk_bdy=T): 
    101       !!        - tmask is set to 1 on the points to be computed bay the open 
    102       !!          boundaries routines. 
    103       !! 
    104       !! ** Action :   tmask    : land/ocean mask at t-point (=0. or 1.) 
    105       !!               umask    : land/ocean mask at u-point (=0. or 1.) 
    106       !!               vmask    : land/ocean mask at v-point (=0. or 1.) 
    107       !!               fmask    : land/ocean mask at f-point (=0. or 1.) 
    108       !!                          =rn_shlat along lateral boundaries 
    109       !!               tmask_i  : interior ocean mask 
     71      !!      tmask_i : interior ocean mask at t-point, i.e. excluding duplicated 
     72      !!                rows/lines due to cyclic or North Fold boundaries as well 
     73      !!                as MPP halos. 
     74      !!      tmask_h : halo mask at t-point, i.e. excluding duplicated rows/lines 
     75      !!                due to cyclic or North Fold boundaries as well as MPP halos. 
     76      !! 
     77      !! ** Action :   tmask, umask, vmask, wmask, wumask, wvmask : land/ocean mask  
     78      !!                         at t-, u-, v- w, wu-, and wv-points (=0. or 1.) 
     79      !!               fmask   : land/ocean mask at f-point (=0., or =1., or  
     80      !!                         =rn_shlat along lateral boundaries) 
     81      !!               tmask_i : interior ocean mask  
     82      !!               tmask_h : halo mask 
     83      !!               ssmask , ssumask, ssvmask, ssfmask : 2D ocean mask 
    11084      !!---------------------------------------------------------------------- 
    111       INTEGER  ::   ji, jj, jk               ! dummy loop indices 
    112       INTEGER  ::   iif, iil, ii0, ii1, ii   ! local integers 
    113       INTEGER  ::   ijf, ijl, ij0, ij1       !   -       - 
    114       INTEGER  ::   ios 
    115       INTEGER  ::   isrow                    ! index for ORCA1 starting row 
    116       INTEGER , POINTER, DIMENSION(:,:) ::  imsk 
    117       REAL(wp), POINTER, DIMENSION(:,:) ::  zwf 
     85      ! 
     86      INTEGER  ::   ji, jj, jk     ! dummy loop indices 
     87      INTEGER  ::   iif, iil       ! local integers 
     88      INTEGER  ::   ijf, ijl       !   -       - 
     89      INTEGER  ::   iktop, ikbot   !   -       - 
     90      INTEGER  ::   ios, inum 
     91      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zwf   ! 2D workspace 
    11892      !! 
    11993      NAMELIST/namlbc/ rn_shlat, ln_vorlat 
     94      NAMELIST/nambdy/ ln_bdy ,nb_bdy, ln_coords_file, cn_coords_file,         & 
     95         &             ln_mask_file, cn_mask_file, cn_dyn2d, nn_dyn2d_dta,     & 
     96         &             cn_dyn3d, nn_dyn3d_dta, cn_tra, nn_tra_dta,             & 
     97         &             ln_tra_dmp, ln_dyn3d_dmp, rn_time_dmp, rn_time_dmp_out, & 
     98         &             cn_ice, nn_ice_dta,                                     & 
     99         &             rn_ice_tem, rn_ice_sal, rn_ice_age,                     & 
     100         &             ln_vol, nn_volctl, nn_rimwidth, nb_jpk_bdy 
    120101      !!--------------------------------------------------------------------- 
    121       ! 
    122   !    IF( nn_timing == 1 )  CALL timing_start('dom_msk') 
    123       ! 
    124       CALL wrk_alloc( jpi, jpj, imsk ) 
    125       CALL wrk_alloc( jpi, jpj, zwf  ) 
    126102      ! 
    127103      REWIND( numnam_ref )              ! Namelist namlbc in reference namelist : Lateral momentum boundary condition 
    128104      READ  ( numnam_ref, namlbc, IOSTAT = ios, ERR = 901 ) 
    129 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlbc in reference namelist', lwp ) 
    130  
     105901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlbc in reference namelist', lwp ) 
    131106      REWIND( numnam_cfg )              ! Namelist namlbc in configuration namelist : Lateral momentum boundary condition 
    132107      READ  ( numnam_cfg, namlbc, IOSTAT = ios, ERR = 902 ) 
    133 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlbc in configuration namelist', lwp ) 
     108902   IF( ios >  0 )  CALL ctl_nam ( ios , 'namlbc in configuration namelist', lwp ) 
    134109      IF(lwm) WRITE ( numond, namlbc ) 
    135110       
     
    142117         WRITE(numout,*) '      consistency with analytical form   ln_vorlat = ',ln_vorlat  
    143118      ENDIF 
    144  
    145       IF     (      rn_shlat == 0.               ) THEN   ;   IF(lwp) WRITE(numout,*) '   ocean lateral  free-slip ' 
    146       ELSEIF (      rn_shlat == 2.               ) THEN   ;   IF(lwp) WRITE(numout,*) '   ocean lateral  no-slip ' 
    147       ELSEIF ( 0. < rn_shlat .AND. rn_shlat < 2. ) THEN   ;   IF(lwp) WRITE(numout,*) '   ocean lateral  partial-slip ' 
    148       ELSEIF ( 2. < rn_shlat                     ) THEN   ;   IF(lwp) WRITE(numout,*) '   ocean lateral  strong-slip ' 
     119      ! 
     120      IF(lwp) WRITE(numout,*) 
     121      IF     (      rn_shlat == 0.               ) THEN   ;   IF(lwp) WRITE(numout,*) '   ==>>>   ocean lateral  free-slip' 
     122      ELSEIF (      rn_shlat == 2.               ) THEN   ;   IF(lwp) WRITE(numout,*) '   ==>>>   ocean lateral  no-slip' 
     123      ELSEIF ( 0. < rn_shlat .AND. rn_shlat < 2. ) THEN   ;   IF(lwp) WRITE(numout,*) '   ==>>>   ocean lateral  partial-slip' 
     124      ELSEIF ( 2. < rn_shlat                     ) THEN   ;   IF(lwp) WRITE(numout,*) '   ==>>>   ocean lateral  strong-slip' 
    149125      ELSE 
    150          WRITE(ctmp1,*) ' rn_shlat is negative = ', rn_shlat 
    151          CALL ctl_stop( ctmp1 ) 
    152       ENDIF 
    153  
    154       ! 1. Ocean/land mask at t-point (computed from mbathy) 
    155       ! ----------------------------- 
    156       ! N.B. tmask has already the right boundary conditions since mbathy is ok 
    157       ! 
     126         CALL ctl_stop( 'dom_msk: wrong value for rn_shlat (i.e. a negalive value). We stop.' ) 
     127      ENDIF 
     128 
     129     ! 1. Ocean/land mask at t-point (computed from mbathy) 
     130     ! ----------------------------- 
     131     ! N.B. tmask has already the right boundary conditions since mbathy is ok 
     132     ! 
    158133      tmask(:,:,:) = 0._wp 
    159134      DO jk = 1, jpk 
    160135         DO jj = 1, jpj 
    161136            DO ji = 1, jpi 
    162                IF( REAL( mbathy(ji,jj) - jk, wp ) + 0.1_wp >= 0._wp )   tmask(ji,jj,jk) = 1._wp 
    163             END DO   
    164          END DO   
    165       END DO   
    166        
    167       ! (ISF) define barotropic mask and mask the ice shelf point 
    168       ssmask(:,:)=tmask(:,:,1) ! at this stage ice shelf is not masked 
    169        
    170       DO jk = 1, jpk 
    171          DO jj = 1, jpj 
    172             DO ji = 1, jpi 
    173                IF( REAL( misfdep(ji,jj) - jk, wp ) - 0.1_wp >= 0._wp )   THEN 
    174                   tmask(ji,jj,jk) = 0._wp 
    175                END IF 
    176             END DO   
    177          END DO   
    178       END DO   
    179  
    180       ! Interior domain mask (used for global sum) 
    181       ! -------------------- 
    182    !   tmask_i(:,:) = ssmask(:,:)            ! (ISH) tmask_i = 1 even on the ice shelf 
    183  
    184   !    tmask_h(:,:) = 1._wp                 ! 0 on the halo and 1 elsewhere 
    185   !    iif = jpreci                         ! ??? 
    186   !    iil = nlci - jpreci + 1 
    187   !    ijf = jprecj                         ! ??? 
    188   !    ijl = nlcj - jprecj + 1 
    189  
    190    !   tmask_h( 1 :iif,   :   ) = 0._wp      ! first columns 
    191    !   tmask_h(iil:jpi,   :   ) = 0._wp      ! last  columns (including mpp extra columns) 
    192    !   tmask_h(   :   , 1 :ijf) = 0._wp      ! first rows 
    193    !   tmask_h(   :   ,ijl:jpj) = 0._wp      ! last  rows (including mpp extra rows) 
    194  
    195       ! north fold mask 
    196       ! --------------- 
    197    !   tpol(1:jpiglo) = 1._wp  
    198    !   fpol(1:jpiglo) = 1._wp 
    199    !   IF( jperio == 3 .OR. jperio == 4 ) THEN      ! T-point pivot 
    200    !      tpol(jpiglo/2+1:jpiglo) = 0._wp 
    201    !      fpol(     1    :jpiglo) = 0._wp 
    202    !      IF( mjg(nlej) == jpjglo ) THEN                  ! only half of the nlcj-1 row 
    203    !         DO ji = iif+1, iil-1 
    204    !            tmask_h(ji,nlej-1) = tmask_h(ji,nlej-1) * tpol(mig(ji)) 
    205    !         END DO 
    206    !      ENDIF 
    207    !   ENDIF 
     137               IF(      ( REAL( mbathy (ji,jj) - jk, wp ) + 0.1_wp >= 0._wp )         & 
     138               &  .AND. ( REAL( misfdep(ji,jj) - jk, wp ) - 0.1_wp <= 0._wp ) ) THEN 
     139                  tmask(ji,jj,jk) = 1._wp 
     140               END IF   
     141            END DO 
     142         END DO 
     143      END DO 
    208144      
    209    !   tmask_i(:,:) = tmask_i(:,:) * tmask_h(:,:) 
    210  
    211   !    IF( jperio == 5 .OR. jperio == 6 ) THEN      ! F-point pivot 
    212   !       tpol(     1    :jpiglo) = 0._wp 
    213   !       fpol(jpiglo/2+1:jpiglo) = 0._wp 
    214   !    ENDIF 
    215  
    216       ! 2. Ocean/land mask at u-,  v-, and z-points (computed from tmask) 
    217       ! ------------------------------------------- 
     145!SF  add here lbc_lnk: bug not still understood : cause now domain configuration is read ! 
     146!!gm I don't understand why...   
     147      CALL lbc_lnk( 'dommsk', tmask  , 'T', 1._wp )      ! Lateral boundary conditions 
     148 
     149     ! Mask corrections for bdy (read in mppini2) 
     150      REWIND( numnam_ref )              ! Namelist nambdy in reference namelist :Unstructured open boundaries 
     151      READ  ( numnam_ref, nambdy, IOSTAT = ios, ERR = 903) 
     152903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy in reference namelist', lwp ) 
     153      REWIND( numnam_cfg )              ! Namelist nambdy in configuration namelist :Unstructured open boundaries 
     154      READ  ( numnam_cfg, nambdy, IOSTAT = ios, ERR = 904 ) 
     155904   IF( ios >  0 )   CALL ctl_nam ( ios , 'nambdy in configuration namelist', lwp ) 
     156      ! ------------------------ 
     157      IF ( ln_bdy .AND. ln_mask_file ) THEN 
     158         CALL iom_open( cn_mask_file, inum ) 
     159         CALL iom_get ( inum, jpdom_data, 'bdy_msk', bdytmask(:,:) ) 
     160         CALL iom_close( inum ) 
     161         DO jk = 1, jpkm1 
     162            DO jj = 1, jpj 
     163               DO ji = 1, jpi 
     164                  tmask(ji,jj,jk) = tmask(ji,jj,jk) * bdytmask(ji,jj) 
     165               END DO 
     166            END DO 
     167         END DO 
     168      ENDIF 
     169          
     170      !  Ocean/land mask at u-, v-, and f-points   (computed from tmask) 
     171      ! ---------------------------------------- 
     172      ! NB: at this point, fmask is designed for free slip lateral boundary condition 
    218173      DO jk = 1, jpk 
    219174         DO jj = 1, jpjm1 
    220             DO ji = 1, jpim1   ! vector loop 
     175            DO ji = 1, fs_jpim1   ! vector loop 
    221176               umask(ji,jj,jk) = tmask(ji,jj  ,jk) * tmask(ji+1,jj  ,jk) 
    222177               vmask(ji,jj,jk) = tmask(ji,jj  ,jk) * tmask(ji  ,jj+1,jk) 
     
    228183         END DO 
    229184      END DO 
    230       ! (ISF) MIN(1,SUM(umask)) is here to check if you have effectively at least 1 wet cell at u point 
    231 !     DO jj = 1, jpjm1 
    232 !         DO ji = 1, jpim1   ! vector loop 
    233 !            ssumask(ji,jj)  = ssmask(ji,jj) * ssmask(ji+1,jj  )  * MIN(1._wp,SUM(umask(ji,jj,:))) 
    234 !            ssvmask(ji,jj)  = ssmask(ji,jj) * ssmask(ji  ,jj+1)  * MIN(1._wp,SUM(vmask(ji,jj,:))) 
    235 !!         END DO 
    236 !         DO ji = 1, jpim1      ! NO vector opt. 
    237 !            ssfmask(ji,jj) =  ssmask(ji,jj  ) * ssmask(ji+1,jj  )   & 
    238 !               &            * ssmask(ji,jj+1) * ssmask(ji+1,jj+1) * MIN(1._wp,SUM(fmask(ji,jj,:))) 
    239 !         END DO 
    240 !      END DO 
    241       CALL lbc_lnk( 'toto',umask  , 'U', 1._wp )      ! Lateral boundary conditions 
    242       CALL lbc_lnk( 'toto',vmask  , 'V', 1._wp ) 
    243       CALL lbc_lnk( 'toto',fmask  , 'F', 1._wp ) 
    244  !     CALL lbc_lnk( 'toto',ssumask, 'U', 1._wp )      ! Lateral boundary conditions 
    245  !     CALL lbc_lnk( 'toto',ssvmask, 'V', 1._wp ) 
    246  !     CALL lbc_lnk( 'toto',ssfmask, 'F', 1._wp ) 
    247  
    248       ! 3. Ocean/land mask at wu-, wv- and w points  
    249       !---------------------------------------------- 
     185      CALL lbc_lnk_multi( 'dommsk', umask, 'U', 1., vmask, 'V', 1., fmask, 'F', 1. )      ! Lateral boundary conditions 
     186  
     187      ! Ocean/land mask at wu-, wv- and w points    (computed from tmask) 
     188      !----------------------------------------- 
    250189      wmask (:,:,1) = tmask(:,:,1)     ! surface 
    251190      wumask(:,:,1) = umask(:,:,1) 
     
    257196      END DO 
    258197 
     198 
     199      ! Ocean/land column mask at t-, u-, and v-points   (i.e. at least 1 wet cell in the vertical) 
     200      ! ---------------------------------------------- 
     201      ssmask (:,:) = MAXVAL( tmask(:,:,:), DIM=3 ) 
     202      ssumask(:,:) = MAXVAL( umask(:,:,:), DIM=3 ) 
     203      ssvmask(:,:) = MAXVAL( vmask(:,:,:), DIM=3 ) 
     204 
     205 
     206      ! Interior domain mask  (used for global sum) 
     207      ! -------------------- 
     208      ! 
     209      iif = nn_hls   ;   iil = nlci - nn_hls + 1 
     210      ijf = nn_hls   ;   ijl = nlcj - nn_hls + 1 
     211      ! 
     212      !                          ! halo mask : 0 on the halo and 1 elsewhere 
     213      tmask_h(:,:) = 1._wp                   
     214      tmask_h( 1 :iif,   :   ) = 0._wp      ! first columns 
     215      tmask_h(iil:jpi,   :   ) = 0._wp      ! last  columns (including mpp extra columns) 
     216      tmask_h(   :   , 1 :ijf) = 0._wp      ! first rows 
     217      tmask_h(   :   ,ijl:jpj) = 0._wp      ! last  rows (including mpp extra rows) 
     218      ! 
     219      !                          ! north fold mask 
     220      tpol(1:jpiglo) = 1._wp  
     221      fpol(1:jpiglo) = 1._wp 
     222      IF( jperio == 3 .OR. jperio == 4 ) THEN      ! T-point pivot 
     223         tpol(jpiglo/2+1:jpiglo) = 0._wp 
     224         fpol(     1    :jpiglo) = 0._wp 
     225         IF( mjg(nlej) == jpjglo ) THEN                  ! only half of the nlcj-1 row for tmask_h 
     226            DO ji = iif+1, iil-1 
     227               tmask_h(ji,nlej-1) = tmask_h(ji,nlej-1) * tpol(mig(ji)) 
     228            END DO 
     229         ENDIF 
     230      ENDIF 
     231      ! 
     232      IF( jperio == 5 .OR. jperio == 6 ) THEN      ! F-point pivot 
     233         tpol(     1    :jpiglo) = 0._wp 
     234         fpol(jpiglo/2+1:jpiglo) = 0._wp 
     235      ENDIF 
     236      ! 
     237      !                          ! interior mask : 2D ocean mask x halo mask  
     238      tmask_i(:,:) = ssmask(:,:) * tmask_h(:,:) 
     239 
     240 
    259241      ! Lateral boundary conditions on velocity (modify fmask) 
    260       ! ---------------------------------------      
    261       DO jk = 1, jpk 
    262          zwf(:,:) = fmask(:,:,jk)          
    263          DO jj = 2, jpjm1 
    264             DO ji = 2, jpim1   ! vector opt. 
    265                IF( fmask(ji,jj,jk) == 0._wp ) THEN 
    266                   fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
    267                      &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
    268                ENDIF 
    269             END DO 
    270          END DO 
    271          DO jj = 2, jpjm1 
    272             IF( fmask(1,jj,jk) == 0._wp ) THEN 
    273                fmask(1  ,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 
    274             ENDIF 
    275             IF( fmask(jpi,jj,jk) == 0._wp ) THEN 
    276                fmask(jpi,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 
    277             ENDIF 
    278          END DO          
    279          DO ji = 2, jpim1 
    280             IF( fmask(ji,1,jk) == 0._wp ) THEN 
    281                fmask(ji, 1 ,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 
    282             ENDIF 
    283             IF( fmask(ji,jpj,jk) == 0._wp ) THEN 
    284                fmask(ji,jpj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 
    285             ENDIF 
    286          END DO 
    287       END DO 
    288       ! 
    289       IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN   ! ORCA_R2 configuration 
    290          !                                                 ! Increased lateral friction near of some straits 
    291          !                                ! Gibraltar strait  : partial slip (fmask=0.5) 
    292          ij0 = 101   ;   ij1 = 101 
    293          ii0 = 139   ;   ii1 = 140   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5_wp 
    294          ij0 = 102   ;   ij1 = 102 
    295          ii0 = 139   ;   ii1 = 140   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5_wp 
    296          ! 
    297          !                                ! Bab el Mandeb : partial slip (fmask=1) 
    298          ij0 =  87   ;   ij1 =  88 
    299          ii0 = 160   ;   ii1 = 160   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1._wp 
    300          ij0 =  88   ;   ij1 =  88 
    301          ii0 = 159   ;   ii1 = 159   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1._wp 
    302          ! 
    303          !                                ! Danish straits  : strong slip (fmask > 2) 
    304 ! We keep this as an example but it is instable in this case  
    305 !         ij0 = 115   ;   ij1 = 115 
    306 !         ii0 = 145   ;   ii1 = 146   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp 
    307 !         ij0 = 116   ;   ij1 = 116 
    308 !         ii0 = 145   ;   ii1 = 146   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp 
    309          ! 
    310       ENDIF 
    311       ! 
    312       IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN   ! ORCA R1 configuration 
    313          !                                                 ! Increased lateral friction near of some straits 
    314          ! This dirty section will be suppressed by simplification process: 
    315          ! all this will come back in input files 
    316          ! Currently these hard-wired indices relate to configuration with 
    317          ! extend grid (jpjglo=332) 
    318          ! 
    319          isrow = 332 - jpjglo 
    320          ! 
    321          IF(lwp) WRITE(numout,*) 
    322          IF(lwp) WRITE(numout,*) '   orca_r1: increase friction near the following straits : ' 
    323          IF(lwp) WRITE(numout,*) '      Gibraltar ' 
    324          ii0 = 282           ;   ii1 = 283        ! Gibraltar Strait  
    325          ij0 = 241 - isrow   ;   ij1 = 241 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    326  
    327          IF(lwp) WRITE(numout,*) '      Bhosporus ' 
    328          ii0 = 314           ;   ii1 = 315        ! Bhosporus Strait  
    329          ij0 = 248 - isrow   ;   ij1 = 248 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    330  
    331          IF(lwp) WRITE(numout,*) '      Makassar (Top) ' 
    332          ii0 =  48           ;   ii1 =  48        ! Makassar Strait (Top)  
    333          ij0 = 189 - isrow   ;   ij1 = 190 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp   
    334  
    335          IF(lwp) WRITE(numout,*) '      Lombok ' 
    336          ii0 =  44           ;   ii1 =  44        ! Lombok Strait  
    337          ij0 = 164 - isrow   ;   ij1 = 165 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    338  
    339          IF(lwp) WRITE(numout,*) '      Ombai ' 
    340          ii0 =  53           ;   ii1 =  53        ! Ombai Strait  
    341          ij0 = 164 - isrow   ;   ij1 = 165 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    342  
    343          IF(lwp) WRITE(numout,*) '      Timor Passage ' 
    344          ii0 =  56           ;   ii1 =  56        ! Timor Passage  
    345          ij0 = 164 - isrow   ;   ij1 = 165 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp   
    346  
    347          IF(lwp) WRITE(numout,*) '      West Halmahera ' 
    348          ii0 =  58           ;   ii1 =  58        ! West Halmahera Strait  
    349          ij0 = 181 - isrow   ;   ij1 = 182 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp   
    350  
    351          IF(lwp) WRITE(numout,*) '      East Halmahera ' 
    352          ii0 =  55           ;   ii1 =  55        ! East Halmahera Strait  
    353          ij0 = 181 - isrow   ;   ij1 = 182 - isrow   ;   fmask( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp   
    354          ! 
    355       ENDIF 
    356       ! 
    357       CALL lbc_lnk( 'toto',fmask, 'F', 1._wp )      ! Lateral boundary conditions on fmask 
    358       ! 
    359       ! CAUTION : The fmask may be further modified in dyn_vor_init ( dynvor.F90 ) 
    360       ! 
    361       CALL wrk_dealloc( jpi, jpj, imsk ) 
    362       CALL wrk_dealloc( jpi, jpj, zwf  ) 
    363       ! 
    364   !    IF( nn_timing == 1 )  CALL timing_stop('dom_msk') 
     242      ! ---------------------------------------   
     243      IF( rn_shlat /= 0 ) THEN      ! Not free-slip lateral boundary condition 
     244         ! 
     245         ALLOCATE( zwf(jpi,jpj) ) 
     246         ! 
     247         DO jk = 1, jpk 
     248            zwf(:,:) = fmask(:,:,jk)          
     249            DO jj = 2, jpjm1 
     250               DO ji = fs_2, fs_jpim1   ! vector opt. 
     251                  IF( fmask(ji,jj,jk) == 0._wp ) THEN 
     252                     fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
     253                        &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
     254                  ENDIF 
     255               END DO 
     256            END DO 
     257            DO jj = 2, jpjm1 
     258               IF( fmask(1,jj,jk) == 0._wp ) THEN 
     259                  fmask(1  ,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 
     260               ENDIF 
     261               IF( fmask(jpi,jj,jk) == 0._wp ) THEN 
     262                  fmask(jpi,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 
     263               ENDIF 
     264            END DO          
     265            DO ji = 2, jpim1 
     266               IF( fmask(ji,1,jk) == 0._wp ) THEN 
     267                  fmask(ji, 1 ,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 
     268               ENDIF 
     269               IF( fmask(ji,jpj,jk) == 0._wp ) THEN 
     270                  fmask(ji,jpj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 
     271               ENDIF 
     272            END DO 
     273#if defined key_agrif  
     274            IF( .NOT. AGRIF_Root() ) THEN  
     275               IF ((nbondi ==  1).OR.(nbondi == 2)) fmask(nlci-1 , :     ,jk) = 0.e0      ! east  
     276               IF ((nbondi == -1).OR.(nbondi == 2)) fmask(1      , :     ,jk) = 0.e0      ! west  
     277               IF ((nbondj ==  1).OR.(nbondj == 2)) fmask(:      ,nlcj-1 ,jk) = 0.e0      ! north  
     278               IF ((nbondj == -1).OR.(nbondj == 2)) fmask(:      ,1      ,jk) = 0.e0      ! south  
     279            ENDIF  
     280#endif  
     281         END DO 
     282         ! 
     283         DEALLOCATE( zwf ) 
     284         ! 
     285         CALL lbc_lnk( 'dommsk', fmask, 'F', 1._wp )      ! Lateral boundary conditions on fmask 
     286         ! 
     287         ! CAUTION : The fmask may be further modified in dyn_vor_init ( dynvor.F90 ) depending on ln_vorlat 
     288         ! 
     289      ENDIF 
    365290      ! 
    366291   END SUBROUTINE dom_msk 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/domzgr.F90

    r10727 r11129  
    3535   !!       fgamma       : Siddorn and Furner 2012 stretching function 
    3636   !!--------------------------------------------------------------------- 
    37    USE oce               ! ocean variables 
    3837   USE dom_oce           ! ocean domain 
    3938!   USE closea            ! closed seas 
     
    4342   USE lbclnk            ! ocean lateral boundary conditions (or mpp link) 
    4443   USE lib_mpp           ! distributed memory computing library 
    45    USE wrk_nemo          ! Memory allocation 
    46    USE timing            ! Timing 
     44   USE lib_fortran 
    4745   USE dombat 
    4846 
     
    6361   REAL(wp), PUBLIC ::   e3zps_min       !: miminum thickness for partial steps (meters) 
    6462   REAL(wp), PUBLIC ::   e3zps_rat       !: minimum thickness ration for partial steps 
    65    INTEGER, PUBLIC ::   nperio            !: type of lateral boundary condition 
     63   INTEGER, PUBLIC  ::   nperio          !: type of lateral boundary condition 
    6664 
    6765   ! Song and Haidvogel 1994 stretching parameters 
     
    121119      !!---------------------------------------------------------------------- 
    122120      ! 
    123   !    IF( nn_timing == 1 )   CALL timing_start('dom_zgr') 
    124121      ! 
    125122      REWIND( numnam_ref )              ! Namelist namzgr in reference namelist : Vertical coordinate 
     
    189186      ENDIF 
    190187      ! 
    191     !  IF( nn_timing == 1 )  CALL timing_stop('dom_zgr') 
    192       ! 
    193188   END SUBROUTINE dom_zgr 
    194189 
     
    222217      REAL(wp) ::   za2, zkth2, zacr2      ! Values for optional double tanh function set from parameters  
    223218      !!---------------------------------------------------------------------- 
    224       ! 
    225    !   IF( nn_timing == 1 )  CALL timing_start('zgr_z') 
    226219      ! 
    227220      ! Set variables from parameters 
     
    355348      END DO 
    356349      ! 
    357    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_z') 
    358       ! 
    359350   END SUBROUTINE zgr_z 
    360351 
     
    401392      !!---------------------------------------------------------------------- 
    402393      ! 
    403    !   IF( nn_timing == 1 )  CALL timing_start('zgr_bat') 
    404       ! 
    405394      IF(lwp) WRITE(numout,*) 
    406395      IF(lwp) WRITE(numout,*) '    zgr_bat : defines level and meter bathymetry' 
     
    411400         !                                            ! global domain level and meter bathymetry (idta,zdta) 
    412401         ! 
    413          ALLOCATE( idta(jpidta,jpjdta), STAT=ierror ) 
     402         ALLOCATE( idta(jpiglo,jpjglo), STAT=ierror ) 
    414403         IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate idta array' ) 
    415          ALLOCATE( zdta(jpidta,jpjdta), STAT=ierror ) 
     404         ALLOCATE( zdta(jpiglo,jpjglo), STAT=ierror ) 
    416405         IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate zdta array' ) 
    417406         ! 
     
    439428            IF(lwp) WRITE(numout,*) 
    440429            IF(lwp) WRITE(numout,*) '         bathymetry field: flat basin with a bump' 
    441             ii_bump = jpidta / 2                           ! i-index of the bump center 
    442             ij_bump = jpjdta / 2                           ! j-index of the bump center 
     430            ii_bump = jpiglo / 2                           ! i-index of the bump center 
     431            ij_bump = jpjglo / 2                           ! j-index of the bump center 
    443432            r_bump  = 50000._wp                            ! bump radius (meters)        
    444433            h_bump  =  2700._wp                            ! bump height (meters) 
     
    450439            IF(lwp) WRITE(numout,*) '            background ocean depth = ', h_oce  , ' meters' 
    451440            !                                         
    452             DO jj = 1, jpjdta                              ! zdta : 
    453                DO ji = 1, jpidta 
     441            DO jj = 1, jpjglo                              ! zdta : 
     442               DO ji = 1, jpiglo 
    454443                  zi = FLOAT( ji - ii_bump ) * ppe1_m / r_bump 
    455444                  zj = FLOAT( jj - ij_bump ) * ppe2_m / r_bump 
     
    467456            ENDIF 
    468457         ENDIF 
     458         ! 
    469459         !                                            ! set GLOBAL boundary conditions  
    470          !                                            ! Caution : idta on the global domain: use of jperio, not nperio 
    471460         IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN 
    472461            idta( :    , 1    ) = -1                ;      zdta( :    , 1    ) = -1._wp 
    473             idta( :    ,jpjdta) =  0                ;      zdta( :    ,jpjdta) =  0._wp 
     462            idta( :    ,jpjglo) =  0                ;      zdta( :    ,jpjglo) =  0._wp 
    474463         ELSEIF( jperio == 2 ) THEN 
    475464            idta( :    , 1    ) = idta( : ,  3  )   ;      zdta( :    , 1    ) = zdta( : ,  3  ) 
    476             idta( :    ,jpjdta) = 0                 ;      zdta( :    ,jpjdta) =  0._wp 
     465            idta( :    ,jpjglo) = 0                 ;      zdta( :    ,jpjglo) =  0._wp 
    477466            idta( 1    , :    ) = 0                 ;      zdta( 1    , :    ) =  0._wp 
    478             idta(jpidta, :    ) = 0                 ;      zdta(jpidta, :    ) =  0._wp 
     467            idta(jpiglo, :    ) = 0                 ;      zdta(jpiglo, :    ) =  0._wp 
    479468         ELSE 
    480469            ih = 0                                  ;      zh = 0._wp 
    481470            IF( ln_sco )   ih = jpkm1               ;      IF( ln_sco )   zh = h_oce 
    482471            idta( :    , 1    ) = ih                ;      zdta( :    , 1    ) =  zh 
    483             idta( :    ,jpjdta) = ih                ;      zdta( :    ,jpjdta) =  zh 
     472            idta( :    ,jpjglo) = ih                ;      zdta( :    ,jpjglo) =  zh 
    484473            idta( 1    , :    ) = ih                ;      zdta( 1    , :    ) =  zh 
    485             idta(jpidta, :    ) = ih                ;      zdta(jpidta, :    ) =  zh 
     474            idta(jpiglo, :    ) = ih                ;      zdta(jpiglo, :    ) =  zh 
    486475         ENDIF 
    487476 
     
    646635      ENDIF 
    647636      ! 
    648    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_bat') 
    649       ! 
    650637   END SUBROUTINE zgr_bat 
    651638 
     
    727714      INTEGER ::   ji, jj, jl                    ! dummy loop indices 
    728715      INTEGER ::   icompt, ibtest, ikmax         ! temporary integers 
    729       REAL(wp), POINTER, DIMENSION(:,:) ::  zbathy 
    730       !!---------------------------------------------------------------------- 
    731       ! 
    732   !    IF( nn_timing == 1 )  CALL timing_start('zgr_bat_ctl') 
    733       ! 
    734       CALL wrk_alloc( jpi, jpj, zbathy ) 
     716      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::  zbathy 
     717      !!---------------------------------------------------------------------- 
     718      ! 
     719      ALLOCATE(zbathy(jpi,jpj)) 
    735720      ! 
    736721      IF(lwp) WRITE(numout,*) 
     
    743728      icompt = 0 
    744729      DO jl = 1, 2 
    745          IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
     730         IF( l_Iperio ) THEN 
    746731            mbathy( 1 ,:) = mbathy(jpim1,:)           ! local domain is cyclic east-west 
    747732            mbathy(jpi,:) = mbathy(  2  ,:) 
    748733         ENDIF 
     734         zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     735         CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 
     736         mbathy(:,:) = INT( zbathy(:,:) ) 
     737          
    749738         DO jj = 2, jpjm1 
    750739            DO ji = 2, jpim1 
     
    760749         END DO 
    761750      END DO 
    762    !   IF( lk_mpp )   CALL mpp_sum( icompt ) 
     751 
     752      IF( lk_mpp )   CALL mpp_sum( 'domzgr', icompt ) 
    763753      IF( icompt == 0 ) THEN 
    764754         IF(lwp) WRITE(numout,*)'     no isolated ocean grid points' 
     
    766756         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points suppressed' 
    767757      ENDIF 
    768       IF( lk_mpp ) THEN 
    769          zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    770          CALL lbc_lnk( 'toto',zbathy, 'T', 1._wp ) 
    771          mbathy(:,:) = INT( zbathy(:,:) ) 
    772       ENDIF 
     758 
     759      zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     760      CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 
     761      mbathy(:,:) = INT( zbathy(:,:) ) 
     762 
    773763      !                                          ! East-west cyclic boundary conditions 
    774       IF( nperio == 0 ) THEN 
    775          IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west boundary: nperio = ', nperio 
     764      IF( jperio == 0 ) THEN 
     765         IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west boundary: jperio = ', jperio 
    776766         IF( lk_mpp ) THEN 
    777767            IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
     
    790780            ENDIF 
    791781         ENDIF 
    792       ELSEIF( nperio == 1 .OR. nperio == 4 .OR. nperio ==  6 ) THEN 
    793          IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions on mbathy: nperio = ', nperio 
     782      ELSEIF( jperio == 1 .OR. jperio == 4 .OR. jperio ==  6 ) THEN 
     783         IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions on mbathy: jperio = ', jperio 
    794784         mbathy( 1 ,:) = mbathy(jpim1,:) 
    795785         mbathy(jpi,:) = mbathy(  2  ,:) 
    796       ELSEIF( nperio == 2 ) THEN 
    797          IF(lwp) WRITE(numout,*) '   equatorial boundary conditions on mbathy: nperio = ', nperio 
     786      ELSEIF( jperio == 2 ) THEN 
     787         IF(lwp) WRITE(numout,*) '   equatorial boundary conditions on mbathy: jperio = ', jperio 
    798788      ELSE 
    799789         IF(lwp) WRITE(numout,*) '    e r r o r' 
    800          IF(lwp) WRITE(numout,*) '    parameter , nperio = ', nperio 
     790         IF(lwp) WRITE(numout,*) '    parameter , jperio = ', jperio 
    801791         !         STOP 'dom_mba' 
    802792      ENDIF 
     793 
    803794      !  Boundary condition on mbathy 
    804795      IF( .NOT.lk_mpp ) THEN  
     
    806797         !   ... mono- or macro-tasking: T-point, >0, 2D array, no slab 
    807798         zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    808          CALL lbc_lnk( 'toto',zbathy, 'T', 1._wp ) 
     799         CALL lbc_lnk( 'domzgr',zbathy, 'T', 1._wp ) 
    809800         mbathy(:,:) = INT( zbathy(:,:) ) 
    810801      ENDIF 
     802 
    811803      ! Number of ocean level inferior or equal to jpkm1 
    812       ikmax = 0 
    813       DO jj = 1, jpj 
    814          DO ji = 1, jpi 
    815             ikmax = MAX( ikmax, mbathy(ji,jj) ) 
    816          END DO 
    817       END DO 
    818 !!gm  !!! test to do:   ikmax = MAX( mbathy(:,:) )   ??? 
     804      zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     805      ikmax = glob_max( 'domzgr', zbathy(:,:) ) 
     806 
    819807      IF( ikmax > jpkm1 ) THEN 
    820808         IF(lwp) WRITE(numout,*) ' maximum number of ocean level = ', ikmax,' >  jpk-1' 
     
    825813      ENDIF 
    826814      ! 
    827       CALL wrk_dealloc( jpi, jpj, zbathy ) 
    828       ! 
    829    !!   IF( nn_timing == 1 )  CALL timing_stop('zgr_bat_ctl') 
     815      DEALLOCATE( zbathy ) 
    830816      ! 
    831817   END SUBROUTINE zgr_bat_ctl 
     
    845831      !!---------------------------------------------------------------------- 
    846832      INTEGER ::   ji, jj   ! dummy loop indices 
    847       REAL(wp), POINTER, DIMENSION(:,:) ::  zmbk 
    848       !!---------------------------------------------------------------------- 
    849       ! 
    850    !   IF( nn_timing == 1 )  CALL timing_start('zgr_bot_level') 
    851       ! 
    852       CALL wrk_alloc( jpi, jpj, zmbk ) 
     833      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::  zmbk 
     834      !!---------------------------------------------------------------------- 
     835      ! 
     836      ALLOCATE( zmbk(jpi,jpj) ) 
    853837      ! 
    854838      IF(lwp) WRITE(numout,*) 
     
    866850      END DO 
    867851      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
    868       zmbk(:,:) = REAL( mbku(:,:), wp )   ;   CALL lbc_lnk('toto',zmbk,'U',1.)   ;   mbku  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    869       zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk('toto',zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    870       ! 
    871       CALL wrk_dealloc( jpi, jpj, zmbk ) 
    872       ! 
    873    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_bot_level') 
     852      zmbk(:,:) = REAL( mbku(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmbk,'U',1.)   ;   mbku  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
     853      zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
     854      ! 
     855      DEALLOCATE( zmbk ) 
    874856      ! 
    875857   END SUBROUTINE zgr_bot_level 
     
    889871      !!---------------------------------------------------------------------- 
    890872      INTEGER ::   ji, jj   ! dummy loop indices 
    891       REAL(wp), POINTER, DIMENSION(:,:) ::  zmik 
    892       !!---------------------------------------------------------------------- 
    893       ! 
    894    !   IF( nn_timing == 1 )  CALL timing_start('zgr_top_level') 
    895       ! 
    896       CALL wrk_alloc( jpi, jpj, zmik ) 
     873      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::  zmik 
     874      !!---------------------------------------------------------------------- 
     875      ! 
     876      ALLOCATE( zmik(jpi,jpj) ) 
    897877      ! 
    898878      IF(lwp) WRITE(numout,*) 
     
    911891 
    912892      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
    913       zmik(:,:) = REAL( miku(:,:), wp )   ;   CALL lbc_lnk('toto',zmik,'U',1.)   ;   miku  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
    914       zmik(:,:) = REAL( mikv(:,:), wp )   ;   CALL lbc_lnk('toto',zmik,'V',1.)   ;   mikv  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
    915       zmik(:,:) = REAL( mikf(:,:), wp )   ;   CALL lbc_lnk('toto',zmik,'F',1.)   ;   mikf  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
    916       ! 
    917       CALL wrk_dealloc( jpi, jpj, zmik ) 
    918       ! 
    919    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_top_level') 
     893      zmik(:,:) = REAL( miku(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmik,'U',1.)   ;   miku  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     894      zmik(:,:) = REAL( mikv(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmik,'V',1.)   ;   mikv  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     895      zmik(:,:) = REAL( mikf(:,:), wp )   ;   CALL lbc_lnk('domzgr',zmik,'F',1.)   ;   mikf  (:,:) = MAX( INT( zmik(:,:) ), 1 ) 
     896      ! 
     897      DEALLOCATE( zmik ) 
    920898      ! 
    921899   END SUBROUTINE zgr_top_level 
     
    932910      INTEGER  ::   jk 
    933911      !!---------------------------------------------------------------------- 
    934       ! 
    935     !  IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
    936912      ! 
    937913      DO jk = 1, jpk 
     
    948924      END DO 
    949925      ! 
    950    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_zco') 
    951       ! 
    952926   END SUBROUTINE zgr_zco 
    953927 
     
    1004978      REAL(wp) ::   zdiff            ! temporary scalar 
    1005979      REAL(wp) ::   zmax             ! temporary scalar 
    1006       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
     980      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::  zprt 
    1007981      !!--------------------------------------------------------------------- 
    1008982      ! 
    1009    !   IF( nn_timing == 1 )  CALL timing_start('zgr_zps') 
    1010       ! 
    1011       CALL wrk_alloc( jpi,jpj,jpk,   zprt ) 
     983      ALLOCATE( zprt(jpi,jpj,jpk) ) 
    1012984      ! 
    1013985      IF(lwp) WRITE(numout,*) 
     
    11401112      END IF 
    11411113 
    1142       CALL lbc_lnk('toto', e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk('toto', e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
    1143       CALL lbc_lnk( 'toto',e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk('toto', e3vw_0, 'V', 1._wp ) 
     1114      CALL lbc_lnk('domzgr', e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk('domzgr', e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
     1115      CALL lbc_lnk('domzgr', e3v_0 , 'V', 1._wp )   ;   CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 
    11441116      ! 
    11451117 
     
    11621134         END DO 
    11631135      END DO 
    1164       CALL lbc_lnk('toto', e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
     1136      CALL lbc_lnk('domzgr', e3f_0, 'F', 1._wp )       ! Lateral boundary conditions 
    11651137      ! 
    11661138      DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     
    12031175      END IF 
    12041176      ! 
    1205       CALL wrk_dealloc( jpi,jpj,jpk,   zprt ) 
    1206       ! 
    1207    !   IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
     1177      DEALLOCATE( zprt ) 
    12081178      ! 
    12091179   END SUBROUTINE zgr_zps 
     
    12351205      REAL(wp) ::   zdepwp           ! Ajusted ocean depth to avoid too small e3t 
    12361206      REAL(wp) ::   zdiff            ! temporary scalar 
    1237       REAL(wp), POINTER, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
    1238       INTEGER , POINTER, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
     1207      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zrisfdep, zbathy, zmask   ! 2D workspace (ISH) 
     1208      INTEGER , ALLOCATABLE, DIMENSION(:,:)   ::   zmbathy, zmisfdep         ! 2D workspace (ISH) 
    12391209      !!--------------------------------------------------------------------- 
    12401210      ! 
    1241   !!    IF( nn_timing == 1 )   CALL timing_start('zgr_isf') 
    1242       ! 
    1243       CALL wrk_alloc( jpi,jpj,   zbathy, zmask, zrisfdep) 
    1244       CALL wrk_alloc( jpi,jpj,   zmisfdep, zmbathy ) 
    1245  
     1211      ALLOCATE( zbathy(jpi,jpj), zmask(jpi,jpj), zrisfdep(jpi,jpj) ) 
     1212      ALLOCATE( zmisfdep(jpi,jpj), zmbathy(jpi,jpj) ) 
     1213      ! 
    12461214      ! (ISF) compute misfdep 
    12471215      WHERE( risfdep(:,:) == 0._wp .AND. bathy(:,:) /= 0 ) ;   misfdep(:,:) = 1   ! open water : set misfdep to 1   
     
    12861254         IF( lk_mpp ) THEN 
    12871255            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1288             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1256            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    12891257            misfdep(:,:) = INT( zbathy(:,:) ) 
    12901258 
    1291             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1292             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1259            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1260            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    12931261 
    12941262            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1295             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1263            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    12961264            mbathy(:,:)  = INT( zbathy(:,:) ) 
    12971265         ENDIF 
     
    14071375         IF( lk_mpp ) THEN 
    14081376            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1409             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1377            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    14101378            misfdep(:,:) = INT( zbathy(:,:) ) 
    14111379 
    1412             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1413             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1380            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1381            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    14141382 
    14151383            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1416             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1384            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    14171385            mbathy(:,:)  = INT( zbathy(:,:) ) 
    14181386         ENDIF 
     
    14441412         IF( lk_mpp ) THEN  
    14451413            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1446             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1414            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    14471415            misfdep(:,:) = INT( zbathy(:,:) ) 
    14481416 
    1449             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1450             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1417            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1418            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    14511419 
    14521420            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1453             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1421            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    14541422            mbathy(:,:)  = INT( zbathy(:,:) ) 
    14551423         ENDIF  
     
    14811449         IF( lk_mpp ) THEN  
    14821450            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1483             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1451            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    14841452            misfdep(:,:) = INT( zbathy(:,:) ) 
    14851453 
    1486             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1487             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1454            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1455            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    14881456 
    14891457            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1490             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1458            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    14911459            mbathy(:,:)  = INT( zbathy(:,:) ) 
    14921460         ENDIF  
     
    15181486         IF( lk_mpp ) THEN 
    15191487            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1520             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1488            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    15211489            misfdep(:,:) = INT( zbathy(:,:) ) 
    15221490 
    1523             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1524             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1491            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1492            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    15251493 
    15261494            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1527             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1495            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    15281496            mbathy(:,:)  = INT( zbathy(:,:) ) 
    15291497         ENDIF 
     
    15551523         IF( lk_mpp ) THEN 
    15561524            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1557             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1525            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    15581526            misfdep(:,:) = INT( zbathy(:,:) ) 
    15591527 
    1560             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1561             CALL lbc_lnk('toto', bathy,  'T', 1. ) 
     1528            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1529            CALL lbc_lnk('domzgr', bathy,  'T', 1. ) 
    15621530 
    15631531            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1564             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1532            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    15651533            mbathy(:,:)  = INT( zbathy(:,:) ) 
    15661534         ENDIF 
     
    15871555         IF( lk_mpp ) THEN 
    15881556            zbathy(:,:)  = FLOAT( misfdep(:,:) ) 
    1589             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1557            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    15901558            misfdep(:,:) = INT( zbathy(:,:) ) 
    15911559 
    1592             CALL lbc_lnk( 'toto',risfdep,'T', 1. ) 
    1593             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1560            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. ) 
     1561            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    15941562 
    15951563            zbathy(:,:)  = FLOAT( mbathy(:,:) ) 
    1596             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1564            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    15971565            mbathy(:,:)  = INT( zbathy(:,:) ) 
    15981566         ENDIF 
     
    16231591         IF( lk_mpp ) THEN  
    16241592            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1625             CALL lbc_lnk( 'toto',zbathy,  'T', 1. )  
     1593            CALL lbc_lnk( 'domzgr',zbathy,  'T', 1. )  
    16261594            misfdep(:,:) = INT( zbathy(:,:) )  
    16271595 
    1628             CALL lbc_lnk( 'toto',risfdep, 'T', 1. )  
    1629             CALL lbc_lnk( 'toto',bathy,   'T', 1. ) 
     1596            CALL lbc_lnk( 'domzgr',risfdep, 'T', 1. )  
     1597            CALL lbc_lnk( 'domzgr',bathy,   'T', 1. ) 
    16301598 
    16311599            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1632             CALL lbc_lnk( 'toto',zbathy,  'T', 1. ) 
     1600            CALL lbc_lnk( 'domzgr',zbathy,  'T', 1. ) 
    16331601            mbathy(:,:) = INT( zbathy(:,:) ) 
    16341602         ENDIF  
     
    16561624         IF( lk_mpp ) THEN  
    16571625            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1658             CALL lbc_lnk( 'toto',zbathy,  'T', 1. )  
     1626            CALL lbc_lnk( 'domzgr',zbathy,  'T', 1. )  
    16591627            misfdep(:,:) = INT( zbathy(:,:) )  
    16601628 
    1661             CALL lbc_lnk( 'toto',risfdep, 'T', 1. )  
    1662             CALL lbc_lnk( 'toto',bathy,   'T', 1. ) 
     1629            CALL lbc_lnk( 'domzgr',risfdep, 'T', 1. )  
     1630            CALL lbc_lnk( 'domzgr',bathy,   'T', 1. ) 
    16631631 
    16641632            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1665             CALL lbc_lnk( 'toto',zbathy,  'T', 1. ) 
     1633            CALL lbc_lnk( 'domzgr',zbathy,  'T', 1. ) 
    16661634            mbathy(:,:) = INT( zbathy(:,:) ) 
    16671635         ENDIF  
     
    16761644         IF( lk_mpp ) THEN  
    16771645            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1678             CALL lbc_lnk( 'toto',zbathy,  'T', 1. )  
     1646            CALL lbc_lnk( 'domzgr',zbathy,  'T', 1. )  
    16791647            misfdep(:,:) = INT( zbathy(:,:) )  
    16801648 
    1681             CALL lbc_lnk('toto', risfdep, 'T', 1. )  
    1682             CALL lbc_lnk('toto', bathy,   'T', 1. ) 
     1649            CALL lbc_lnk('domzgr', risfdep, 'T', 1. )  
     1650            CALL lbc_lnk('domzgr', bathy,   'T', 1. ) 
    16831651 
    16841652            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1685             CALL lbc_lnk( 'toto',zbathy,  'T', 1. ) 
     1653            CALL lbc_lnk( 'domzgr',zbathy,  'T', 1. ) 
    16861654            mbathy(:,:) = INT( zbathy(:,:) ) 
    16871655         ENDIF  
     
    16961664         IF( lk_mpp ) THEN  
    16971665            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1698             CALL lbc_lnk('toto', zbathy, 'T', 1. )  
     1666            CALL lbc_lnk('domzgr', zbathy, 'T', 1. )  
    16991667            misfdep(:,:) = INT( zbathy(:,:) )  
    17001668 
    1701             CALL lbc_lnk('toto', risfdep,'T', 1. )  
    1702             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1669            CALL lbc_lnk('domzgr', risfdep,'T', 1. )  
     1670            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    17031671 
    17041672            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1705             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1673            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    17061674            mbathy(:,:) = INT( zbathy(:,:) ) 
    17071675         ENDIF  
     
    17161684         IF( lk_mpp ) THEN  
    17171685            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1718             CALL lbc_lnk( 'toto',zbathy, 'T', 1. )  
     1686            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )  
    17191687            misfdep(:,:) = INT( zbathy(:,:) )  
    17201688 
    1721             CALL lbc_lnk( 'toto',risfdep,'T', 1. )  
    1722             CALL lbc_lnk('toto', bathy,  'T', 1. ) 
     1689            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )  
     1690            CALL lbc_lnk('domzgr', bathy,  'T', 1. ) 
    17231691 
    17241692            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1725             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1693            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    17261694            mbathy(:,:) = INT( zbathy(:,:) ) 
    17271695         ENDIF  
     
    17361704         IF( lk_mpp ) THEN  
    17371705            zbathy(:,:)  = FLOAT( misfdep(:,:) )  
    1738             CALL lbc_lnk( 'toto',zbathy, 'T', 1. )  
     1706            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. )  
    17391707            misfdep(:,:) = INT( zbathy(:,:) )  
    17401708 
    1741             CALL lbc_lnk( 'toto',risfdep,'T', 1. )  
    1742             CALL lbc_lnk( 'toto',bathy,  'T', 1. ) 
     1709            CALL lbc_lnk( 'domzgr',risfdep,'T', 1. )  
     1710            CALL lbc_lnk( 'domzgr',bathy,  'T', 1. ) 
    17431711 
    17441712            zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    1745             CALL lbc_lnk( 'toto',zbathy, 'T', 1. ) 
     1713            CALL lbc_lnk( 'domzgr',zbathy, 'T', 1. ) 
    17461714            mbathy(:,:) = INT( zbathy(:,:) ) 
    17471715         ENDIF  
     
    18771845      END DO  
    18781846 
    1879       CALL wrk_dealloc( jpi, jpj, zmask, zbathy, zrisfdep ) 
    1880       CALL wrk_dealloc( jpi, jpj, zmisfdep, zmbathy ) 
    1881       ! 
    1882   !    IF( nn_timing == 1 )   CALL timing_stop('zgr_isf') 
    1883       !       
     1847      DEALLOCATE( zbathy, zmask, zrisfdep ) 
     1848      DEALLOCATE( zmisfdep, zmbathy ) 
     1849      ! 
    18841850   END SUBROUTINE zgr_isf 
    18851851 
     
    19351901      REAL(wp) ::   zrfact 
    19361902      ! 
    1937       REAL(wp), POINTER, DIMENSION(:,:  ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 
    1938       REAL(wp), POINTER, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
     1903      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: ztmpi1, ztmpi2, ztmpj1, ztmpj2 
     1904      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
    19391905      !! 
    19401906      NAMELIST/namzgr_sco/ln_s_sh94, ln_s_sf12, ln_sigcrit, rn_sbot_min, rn_sbot_max, rn_hc, rn_rmax,rn_theta, & 
     
    19421908     !!---------------------------------------------------------------------- 
    19431909      ! 
    1944    !!   IF( nn_timing == 1 )  CALL timing_start('zgr_sco') 
    1945       ! 
    1946       CALL wrk_alloc( jpi,jpj,   zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
     1910      ALLOCATE( zenv(jpi,jpj), ztmp(jpi,jpj), zmsk(jpi,jpj), zri(jpi,jpj), zrj(jpi,jpj), zhbat(jpi,jpj) , ztmpi1(jpi,jpj), ztmpi2(jpi,jpj), ztmpj1(jpi,jpj), ztmpj2(jpi,jpj) ) 
    19471911      ! 
    19481912      REWIND( numnam_ref )              ! Namelist namzgr_sco in reference namelist : Sigma-stretching parameters 
     
    20241988 
    20251989      ! apply lateral boundary condition   CAUTION: keep the value when the lbc field is zero 
    2026       CALL lbc_lnk( 'toto',zenv, 'T', 1._wp, 'no0' ) 
     1990      CALL lbc_lnk( 'domzgr',zenv, 'T', 1._wp, 'no0' ) 
    20271991      !  
    20281992      ! smooth the bathymetry (if required) 
     
    20882052         END DO 
    20892053         ! apply lateral boundary condition   CAUTION: keep the value when the lbc field is zero 
    2090          CALL lbc_lnk( 'toto',zenv, 'T', 1._wp, 'no0' ) 
     2054         CALL lbc_lnk( 'domzgr',zenv, 'T', 1._wp, 'no0' ) 
    20912055         !                                                  ! ================ ! 
    20922056      END DO                                                !     End loop     ! 
     
    21322096      ! Apply lateral boundary condition 
    21332097!!gm  ! CAUTION: retain non zero value in the initial file this should be OK for orca cfg, not for EEL 
    2134       zhbat(:,:) = hbatu(:,:)   ;   CALL lbc_lnk('toto', hbatu, 'U', 1._wp ) 
     2098      zhbat(:,:) = hbatu(:,:)   ;   CALL lbc_lnk('domzgr', hbatu, 'U', 1._wp ) 
    21352099      DO jj = 1, jpj 
    21362100         DO ji = 1, jpi 
     
    21422106         END DO 
    21432107      END DO 
    2144       zhbat(:,:) = hbatv(:,:)   ;   CALL lbc_lnk('toto', hbatv, 'V', 1._wp ) 
     2108      zhbat(:,:) = hbatv(:,:)   ;   CALL lbc_lnk('domzgr', hbatv, 'V', 1._wp ) 
    21452109      DO jj = 1, jpj 
    21462110         DO ji = 1, jpi 
     
    21512115         END DO 
    21522116      END DO 
    2153       zhbat(:,:) = hbatf(:,:)   ;   CALL lbc_lnk('toto', hbatf, 'F', 1._wp ) 
     2117      zhbat(:,:) = hbatf(:,:)   ;   CALL lbc_lnk('domzgr', hbatf, 'F', 1._wp ) 
    21542118      DO jj = 1, jpj 
    21552119         DO ji = 1, jpi 
     
    21992163      ENDIF  
    22002164 
    2201       CALL lbc_lnk( 'toto',e3t_0 , 'T', 1._wp ) 
    2202       CALL lbc_lnk( 'toto',e3u_0 , 'U', 1._wp ) 
    2203       CALL lbc_lnk( 'toto',e3v_0 , 'V', 1._wp ) 
    2204       CALL lbc_lnk( 'toto',e3f_0 , 'F', 1._wp ) 
    2205       CALL lbc_lnk( 'toto',e3w_0 , 'W', 1._wp ) 
    2206       CALL lbc_lnk( 'toto',e3uw_0, 'U', 1._wp ) 
    2207       CALL lbc_lnk('toto', e3vw_0, 'V', 1._wp ) 
     2165      CALL lbc_lnk( 'domzgr',e3t_0 , 'T', 1._wp ) 
     2166      CALL lbc_lnk( 'domzgr',e3u_0 , 'U', 1._wp ) 
     2167      CALL lbc_lnk( 'domzgr',e3v_0 , 'V', 1._wp ) 
     2168      CALL lbc_lnk( 'domzgr',e3f_0 , 'F', 1._wp ) 
     2169      CALL lbc_lnk( 'domzgr',e3w_0 , 'W', 1._wp ) 
     2170      CALL lbc_lnk( 'domzgr',e3uw_0, 'U', 1._wp ) 
     2171      CALL lbc_lnk('domzgr', e3vw_0, 'V', 1._wp ) 
    22082172      ! 
    22092173        WHERE( e3t_0 (:,:,:) == 0._wp )   e3t_0 (:,:,:) = 1._wp 
     
    22142178        WHERE( e3uw_0(:,:,:) == 0._wp )   e3uw_0(:,:,:) = 1._wp 
    22152179        WHERE( e3vw_0(:,:,:) == 0._wp )   e3vw_0(:,:,:) = 1._wp 
    2216  
    2217  
    2218 !!gm   I don't like that HERE we are supposed to set the reference coordinate (i.e. _0 arrays) 
    2219 !!gm   and only that !!!!! 
    2220 !!gm   THIS should be removed from here ! 
    2221       gdept_n(:,:,:) = gdept_0(:,:,:) 
    2222       gdepw_n(:,:,:) = gdepw_0(:,:,:) 
    2223       gde3w_n(:,:,:) = gde3w_0(:,:,:) 
    2224       e3t_n  (:,:,:) = e3t_0  (:,:,:) 
    2225       e3u_n  (:,:,:) = e3u_0  (:,:,:) 
    2226       e3v_n  (:,:,:) = e3v_0  (:,:,:) 
    2227       e3f_n  (:,:,:) = e3f_0  (:,:,:) 
    2228       e3w_n  (:,:,:) = e3w_0  (:,:,:) 
    2229       e3uw_n (:,:,:) = e3uw_0 (:,:,:) 
    2230       e3vw_n (:,:,:) = e3vw_0 (:,:,:) 
    2231 !!gm and obviously in the following, use the _0 arrays until the end of this subroutine 
    2232 !! gm end 
    22332180!! 
    22342181      ! HYBRID :  
     
    22362183         DO ji = 1, jpi 
    22372184            DO jk = 1, jpkm1 
    2238                IF( scobot(ji,jj) >= gdept_n(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
     2185               IF( scobot(ji,jj) >= gdept_0(ji,jj,jk) )   mbathy(ji,jj) = MAX( 2, jk ) 
    22392186            END DO 
    22402187         END DO 
     
    22982245               DO jk = 1, mbathy(ji,jj) 
    22992246                 ! check coordinate is monotonically increasing 
    2300                  IF (e3w_n(ji,jj,jk) <= 0._wp .OR. e3t_n(ji,jj,jk) <= 0._wp ) THEN 
     2247                 IF (e3w_0(ji,jj,jk) <= 0._wp .OR. e3t_0(ji,jj,jk) <= 0._wp ) THEN 
    23012248                    WRITE(ctmp1,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    23022249                    WRITE(numout,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2303                     WRITE(numout,*) 'e3w',e3w_n(ji,jj,:) 
    2304                     WRITE(numout,*) 'e3t',e3t_n(ji,jj,:) 
     2250                    WRITE(numout,*) 'e3w',e3w_0(ji,jj,:) 
     2251                    WRITE(numout,*) 'e3t',e3t_0(ji,jj,:) 
    23052252                    CALL ctl_stop( ctmp1 ) 
    23062253                 ENDIF 
    23072254                 ! and check it has never gone negative 
    2308                  IF( gdepw_n(ji,jj,jk) < 0._wp .OR. gdept_n(ji,jj,jk) < 0._wp ) THEN 
     2255                 IF( gdepw_0(ji,jj,jk) < 0._wp .OR. gdept_0(ji,jj,jk) < 0._wp ) THEN 
    23092256                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw or gdept =< 0  at point (i,j,k)= ', ji, jj, jk 
    23102257                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw   or gdept   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2311                     WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
    2312                     WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
     2258                    WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 
     2259                    WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 
    23132260                    CALL ctl_stop( ctmp1 ) 
    23142261                 ENDIF 
    23152262                 ! and check it never exceeds the total depth 
    2316                  IF( gdepw_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2263                 IF( gdepw_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    23172264                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    23182265                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2319                     WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
     2266                    WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 
    23202267                    CALL ctl_stop( ctmp1 ) 
    23212268                 ENDIF 
     
    23242271               DO jk = 1, mbathy(ji,jj)-1 
    23252272                 ! and check it never exceeds the total depth 
    2326                 IF( gdept_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2273                IF( gdept_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    23272274                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    23282275                    WRITE(numout,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2329                     WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
     2276                    WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 
    23302277                    CALL ctl_stop( ctmp1 ) 
    23312278                 ENDIF 
     
    23352282      END DO 
    23362283      ! 
    2337       CALL wrk_dealloc( jpi, jpj, zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
    2338       ! 
    2339    !!!   IF( nn_timing == 1 )  CALL timing_stop('zgr_sco') 
     2284      DEALLOCATE( zenv, ztmp, zmsk, zri, zrj, zhbat , ztmpi1, ztmpi2, ztmpj1, ztmpj2 ) 
    23402285      ! 
    23412286   END SUBROUTINE zgr_sco 
     
    23582303      REAL(wp) ::   ztmpu1, ztmpv1, ztmpf1 
    23592304      ! 
    2360       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    2361       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2362       !!---------------------------------------------------------------------- 
    2363  
    2364       CALL wrk_alloc( jpi,jpj,jpk,   z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2365       CALL wrk_alloc( jpi,jpj,jpk,   z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2305      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
     2306      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
     2307      !!---------------------------------------------------------------------- 
     2308 
     2309      ALLOCATE( z_gsigw3 (jpi,jpj,jpk), z_gsigt3 (jpi,jpj,jpk), z_gsi3w3 (jpi,jpj,jpk) ) 
     2310      ALLOCATE( z_esigt3 (jpi,jpj,jpk), z_esigw3 (jpi,jpj,jpk), z_esigtu3(jpi,jpj,jpk), z_esigtv3(jpi,jpj,jpk) ) 
     2311      ALLOCATE( z_esigtf3(jpi,jpj,jpk), z_esigwu3(jpi,jpj,jpk), z_esigwv3(jpi,jpj,jpk) ) 
    23662312 
    23672313      z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp   ;   z_gsi3w3  = 0._wp 
     
    24482394      END DO 
    24492395      ! 
    2450       CALL wrk_dealloc( jpi,jpj,jpk,  z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2451       CALL wrk_dealloc( jpi,jpj,jpk,  z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2396      DEALLOCATE( z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2397      DEALLOCATE( z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    24522398      ! 
    24532399   END SUBROUTINE s_sh94 
     
    24762422      REAL(wp) ::   ztmpu1, ztmpv1, ztmpf1 
    24772423      ! 
    2478       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
    2479       REAL(wp), POINTER, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
    2480       !!---------------------------------------------------------------------- 
    2481       ! 
    2482       CALL wrk_alloc( jpi, jpj, jpk, z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2483       CALL wrk_alloc( jpi, jpj, jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2424      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_gsigw3, z_gsigt3, z_gsi3w3 
     2425      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3            
     2426      !!---------------------------------------------------------------------- 
     2427      ! 
     2428      ALLOCATE( z_gsigw3 (jpi,jpj,jpk), z_gsigt3 (jpi,jpj,jpk), z_gsi3w3 (jpi,jpj,jpk) ) 
     2429      ALLOCATE( z_esigt3 (jpi,jpj,jpk), z_esigw3 (jpi,jpj,jpk), z_esigtu3(jpi,jpj,jpk), z_esigtv3(jpi,jpj,jpk)) 
     2430      ALLOCATE( z_esigtf3(jpi,jpj,jpk), z_esigwu3(jpi,jpj,jpk), z_esigwv3(jpi,jpj,jpk) ) 
    24842431 
    24852432      z_gsigw3  = 0._wp   ;   z_gsigt3  = 0._wp   ;   z_gsi3w3  = 0._wp 
     
    26082555      ENDDO 
    26092556      ! 
    2610       CALL lbc_lnk('toto',e3t_0 ,'T',1.) ; CALL lbc_lnk('toto',e3u_0 ,'T',1.) 
    2611       CALL lbc_lnk('toto',e3v_0 ,'T',1.) ; CALL lbc_lnk('toto',e3f_0 ,'T',1.) 
    2612       CALL lbc_lnk('toto',e3w_0 ,'T',1.) 
    2613       CALL lbc_lnk('toto',e3uw_0,'T',1.) ; CALL lbc_lnk('toto',e3vw_0,'T',1.) 
    2614       ! 
    2615       CALL wrk_dealloc( jpi,jpj,jpk,  z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
    2616       CALL wrk_dealloc( jpi,jpj,jpk,  z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
     2557      CALL lbc_lnk('domzgr',e3t_0 ,'T',1.) ; CALL lbc_lnk('domzgr',e3u_0 ,'T',1.) 
     2558      CALL lbc_lnk('domzgr',e3v_0 ,'T',1.) ; CALL lbc_lnk('domzgr',e3f_0 ,'T',1.) 
     2559      CALL lbc_lnk('domzgr',e3w_0 ,'T',1.) 
     2560      CALL lbc_lnk('domzgr',e3uw_0,'T',1.) ; CALL lbc_lnk('domzgr',e3vw_0,'T',1.) 
     2561      ! 
     2562      DEALLOCATE( z_gsigw3, z_gsigt3, z_gsi3w3                                      ) 
     2563      DEALLOCATE( z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 
    26172564      ! 
    26182565   END SUBROUTINE s_sf12 
     
    26312578      INTEGER  ::   ji, jj, jk       ! dummy loop argument 
    26322579      REAL(wp) ::   zcoeft, zcoefw   ! temporary scalars 
    2633       REAL(wp), POINTER, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w 
    2634       REAL(wp), POINTER, DIMENSION(:) :: z_esigt, z_esigw 
    2635       !!---------------------------------------------------------------------- 
    2636  
    2637       CALL wrk_alloc( jpk,   z_gsigw, z_gsigt, z_gsi3w ) 
    2638       CALL wrk_alloc( jpk,   z_esigt, z_esigw ) 
     2580      REAL(wp), ALLOCATABLE, DIMENSION(:) :: z_gsigw, z_gsigt, z_gsi3w 
     2581      REAL(wp), ALLOCATABLE, DIMENSION(:) :: z_esigt, z_esigw 
     2582      !!---------------------------------------------------------------------- 
     2583 
     2584      ALLOCATE( z_gsigw(jpk), z_gsigt(jpk), z_gsi3w(jpk) ) 
     2585      ALLOCATE( z_esigt(jpk), z_esigw(jpk) ) 
    26392586 
    26402587      z_gsigw  = 0._wp   ;   z_gsigt  = 0._wp   ;   z_gsi3w  = 0._wp 
     
    26862633      END DO 
    26872634      ! 
    2688       CALL wrk_dealloc( jpk,  z_gsigw, z_gsigt, z_gsi3w ) 
    2689       CALL wrk_dealloc( jpk,  z_esigt, z_esigw          ) 
     2635      DEALLOCATE( z_gsigw, z_gsigt, z_gsi3w ) 
     2636      DEALLOCATE( z_esigt, z_esigw          ) 
    26902637      ! 
    26912638   END SUBROUTINE s_tanh 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/iom.F90

    r10727 r11129  
    6464   PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 
    6565# endif 
    66    PUBLIC iom_set_rstw_var_active, iom_set_rstw_core, iom_set_rst_vars 
     66   PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 
    6767 
    6868   INTERFACE iom_get 
     
    348348#endif 
    349349   END SUBROUTINE iom_set_rstr_active 
    350  
    351    SUBROUTINE iom_set_rstw_core(cdmdl) 
    352       !!--------------------------------------------------------------------- 
    353       !!                   ***  SUBROUTINE  iom_set_rstw_core  *** 
    354       !! 
    355       !! ** Purpose :  set variables which are always in restart file  
    356       !!--------------------------------------------------------------------- 
    357    CHARACTER (len=*), INTENT (IN) :: cdmdl ! model OPA or SAS 
    358    CHARACTER(LEN=256)             :: clinfo    ! info character 
    359 #if defined key_iomput 
    360    IF(cdmdl == "OPA") THEN 
    361 !from restart.F90 
    362    CALL iom_set_rstw_var_active("rdt") 
    363    IF ( .NOT. ln_diurnal_only ) THEN 
    364         CALL iom_set_rstw_var_active('ub'  ) 
    365         CALL iom_set_rstw_var_active('vb'  ) 
    366         CALL iom_set_rstw_var_active('tb'  ) 
    367         CALL iom_set_rstw_var_active('sb'  ) 
    368         CALL iom_set_rstw_var_active('sshb') 
    369         ! 
    370         CALL iom_set_rstw_var_active('un'  ) 
    371         CALL iom_set_rstw_var_active('vn'  ) 
    372         CALL iom_set_rstw_var_active('tn'  ) 
    373         CALL iom_set_rstw_var_active('sn'  ) 
    374         CALL iom_set_rstw_var_active('sshn') 
    375         CALL iom_set_rstw_var_active('rhop') 
    376      ! extra variable needed for the ice sheet coupling 
    377         IF ( ln_iscpl ) THEN 
    378              CALL iom_set_rstw_var_active('tmask') 
    379              CALL iom_set_rstw_var_active('umask') 
    380              CALL iom_set_rstw_var_active('vmask') 
    381              CALL iom_set_rstw_var_active('smask') 
    382              CALL iom_set_rstw_var_active('e3t_n') 
    383              CALL iom_set_rstw_var_active('e3u_n') 
    384              CALL iom_set_rstw_var_active('e3v_n') 
    385              CALL iom_set_rstw_var_active('gdepw_n') 
    386         END IF 
    387       ENDIF 
    388       IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 
    389 !from trasbc.F90 
    390          CALL iom_set_rstw_var_active('sbc_hc_b') 
    391          CALL iom_set_rstw_var_active('sbc_sc_b') 
    392    ENDIF 
    393 #else 
    394         clinfo = 'iom_set_rstw_core: key_iomput is needed to use XIOS restart read/write functionality' 
    395         CALL ctl_stop('STOP', TRIM(clinfo)) 
    396 #endif 
    397    END SUBROUTINE iom_set_rstw_core 
    398350 
    399351   SUBROUTINE iom_set_rst_vars(fields) 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/lbclnk.F90

    r10727 r11129  
    7171   !!   lbc_bdy_lnk   : set the lateral BDY boundary condition 
    7272   !!---------------------------------------------------------------------- 
    73    USE oce            ! ocean dynamics and tracers    
    7473   USE dom_oce        ! ocean space and time domain  
    7574   USE in_out_manager ! I/O manager 
  • NEMO/branches/2019/ENHANCE-03_domcfg/src/nemogcm.F90

    r10727 r11129  
    4444   !!   factorise     : calculate the factors of the no. of MPI processes 
    4545   !!---------------------------------------------------------------------- 
    46    USE step_oce       ! module used in the ocean time stepping module (step.F90) 
     46   USE dom_oce        ! ocean space and time domain variables 
     47   USE in_out_manager ! I/O manager 
     48   USE iom            ! 
    4749   USE domcfg         ! domain configuration               (dom_cfg routine) 
    4850   USE mppini         ! shared/distributed memory setting (mpp_init routine) 
     
    9799      CALL nemo_init               !==  Initialisations  ==! 
    98100      !                            !-----------------------! 
     101      PRINT *, 'end nemo init' 
    99102 
    100103#if defined key_agrif     
     
    126129      ! 
    127130      ! 
     131      PRINT *, 'close file' 
    128132      CALL nemo_closefile 
     133      PRINT *, 'The end' 
    129134      ! 
    130135      ! 
     
    141146      INTEGER  ::   ios, ilocal_comm   ! local integers 
    142147      CHARACTER(len=120), DIMENSION(60) ::   cltxt, cltxt2, clnam 
    143        ! 
    144       NAMELIST/namctl/ ln_ctl   , sn_cfctl, nn_print,ln_timing 
     148      !! 
     149      NAMELIST/namctl/ ln_ctl   , sn_cfctl, nn_print, nn_ictls, nn_ictle,   & 
     150         &             nn_isplt , nn_jsplt, nn_jctls, nn_jctle,             & 
     151         &             ln_timing, ln_diacfl 
    145152      NAMELIST/namcfg/ ln_e3_dep,                                & 
    146153         &             cp_cfg, cp_cfz, jp_cfg, jpidta, jpjdta, jpkdta, jpiglo, jpjglo, & 
     
    154161      CALL ctl_opn( numnam_cfg, 'namelist_cfg', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE. ) 
    155162      ! 
    156       REWIND( numnam_ref )              ! Namelist namctl in reference namelist : Control prints & Benchmark 
     163      REWIND( numnam_ref )              ! Namelist namctl in reference namelist 
    157164      READ  ( numnam_ref, namctl, IOSTAT = ios, ERR = 901 ) 
    158 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namctl in reference namelist', .TRUE. ) 
    159  
    160       REWIND( numnam_cfg )              ! Namelist namctl in confguration namelist : Control prints & Benchmark 
     165901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namctl in reference namelist', .TRUE. ) 
     166      REWIND( numnam_cfg )              ! Namelist namctl in confguration namelist 
    161167      READ  ( numnam_cfg, namctl, IOSTAT = ios, ERR = 902 ) 
    162       902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namctl in configuration namelist', .TRUE. ) 
    163  
    164       ! 
    165       REWIND( numnam_ref )              ! Namelist namcfg in reference namelist : Control prints & Benchmark 
     168902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namctl in configuration namelist', .TRUE. ) 
     169      ! 
     170      REWIND( numnam_ref )              ! Namelist namcfg in reference namelist 
    166171      READ  ( numnam_ref, namcfg, IOSTAT = ios, ERR = 903 ) 
    167 903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in reference namelist', .TRUE. ) 
    168  
    169       REWIND( numnam_cfg )              ! Namelist namcfg in confguration namelist : Control prints & Benchmark 
     172903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namcfg in reference namelist', .TRUE. ) 
     173      REWIND( numnam_cfg )              ! Namelist namcfg in confguration namelist 
    170174      READ  ( numnam_cfg, namcfg, IOSTAT = ios, ERR = 904 ) 
    171 904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. )    
     175904   IF( ios >  0 )  CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. )    
    172176 
    173177! Force values for AGRIF zoom (cf. agrif_user.F90) 
     
    265269                            CALL     dom_cfg    ! Domain configuration 
    266270                            CALL     dom_init   ! Domain 
    267       IF( ln_ctl        )   CALL prt_ctl_init   ! Print control 
    268271      ! 
    269272   END SUBROUTINE nemo_init 
     
    409412      !!---------------------------------------------------------------------- 
    410413      ! 
    411       ierr =        oce_alloc       ()          ! ocean 
    412       ierr = ierr + dom_oce_alloc   ()          ! ocean domain 
     414      ierr = dom_oce_alloc   ()          ! ocean domain 
    413415      ! 
    414416      CALL mpp_sum( 'nemogcm', ierr ) 
Note: See TracChangeset for help on using the changeset viewer.