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 2715 for trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90 – NEMO

Ignore:
Timestamp:
2011-03-30T17:58:35+02:00 (13 years ago)
Author:
rblod
Message:

First attempt to put dynamic allocation on the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90

    r2528 r2715  
    44   !! LIM transport ice model : sea-ice advection/diffusion 
    55   !!====================================================================== 
     6   !! History : LIM-2 ! 2000-01 (M.A. Morales Maqueda, H. Goosse, and T. Fichefet)  Original code 
     7   !!            3.0  ! 2005-11 (M. Vancoppenolle)   Multi-layer sea ice, salinity variations 
     8   !!            4.0  ! 2011-02 (G. Madec) dynamical allocation 
     9   !!---------------------------------------------------------------------- 
    610#if defined key_lim3 
    711   !!---------------------------------------------------------------------- 
     
    913   !!---------------------------------------------------------------------- 
    1014   !!   lim_trp      : advection/diffusion process of sea ice 
    11    !!   lim_trp_init : initialization and namelist read 
    12    !!---------------------------------------------------------------------- 
    13    USE phycst 
    14    USE dom_oce 
     15   !!---------------------------------------------------------------------- 
     16   USE phycst          ! physical constant 
     17   USE dom_oce         ! ocean domain 
     18   USE sbc_oce         ! ocean surface boundary condition 
     19   USE par_ice         ! LIM-3 parameter 
     20   USE dom_ice         ! LIM-3 domain 
     21   USE ice             ! LIM-3 variables 
     22   USE limadv          ! LIM-3 advection 
     23   USE limhdf          ! LIM-3 horizontal diffusion 
    1524   USE in_out_manager  ! I/O manager 
    16    USE sbc_oce         ! Surface boundary condition: ocean fields 
    17    USE dom_ice 
    18    USE ice 
    19    USE limadv 
    20    USE limhdf 
    21    USE lbclnk 
    22    USE lib_mpp 
    23    USE par_ice 
     25   USE lbclnk          ! lateral boundary conditions -- MPP exchanges 
     26   USE lib_mpp         ! MPP library 
    2427   USE prtctl          ! Print control 
    2528 
     
    2730   PRIVATE 
    2831 
    29    !! * Routine accessibility 
    30    PUBLIC lim_trp       ! called by ice_step 
    31  
    32    !! * Shared module variables 
    33    REAL(wp), PUBLIC  ::   &  !: 
    34       bound  = 0.e0           !: boundary condit. (0.0 no-slip, 1.0 free-slip) 
    35  
    36    !! * Module variables 
    37    REAL(wp)  ::           &  ! constant values 
    38       epsi06 = 1.e-06  ,  & 
    39       epsi03 = 1.e-03  ,  & 
    40       epsi16 = 1.e-16  ,  & 
    41       rzero  = 0.e0    ,  & 
    42       rone   = 1.e0    ,  & 
    43       zeps10 = 1.e-10 
     32   PUBLIC   lim_trp    ! called by ice_step 
     33 
     34   REAL(wp), PUBLIC ::   bound  = 0._wp   !: boundary condit. (0.0 no-slip, 1.0 free-slip) 
     35 
     36   REAL(wp)  ::   epsi06 = 1.e-06_wp   ! constant values 
     37   REAL(wp)  ::   epsi03 = 1.e-03_wp   
     38   REAL(wp)  ::   zeps10 = 1.e-10_wp   
     39   REAL(wp)  ::   epsi16 = 1.e-16_wp 
     40   REAL(wp)  ::   rzero  = 0._wp    
     41   REAL(wp)  ::   rone   = 1._wp 
    4442 
    4543   !! * Substitution 
    4644#  include "vectopt_loop_substitute.h90" 
    4745   !!---------------------------------------------------------------------- 
    48    !! NEMO/LIM3 3.3 , UCL - NEMO Consortium (2010) 
     46   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
    4947   !! $Id$ 
    50    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    51    !!---------------------------------------------------------------------- 
    52  
     48   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     49   !!---------------------------------------------------------------------- 
    5350CONTAINS 
    5451 
     
    6461      !! 
    6562      !! ** action : 
    66       !! 
    67       !! History : 
    68       !!   1.0  !  00-01 (M.A. Morales Maqueda, H. Goosse, and T. Fichefet)  Original code 
    69       !!        !  01-05 (G. Madec, R. Hordoir) opa norm 
    70       !!   2.0  !  04-01 (G. Madec, C. Ethe)  F90, mpp 
    71       !!   3.0  !  05-11 (M. Vancoppenolle)   Multi-layer sea ice, salinity variations 
    7263      !!--------------------------------------------------------------------- 
    73       INTEGER, INTENT(in) ::   kt     ! number of iteration 
    74       !! * Local Variables 
    75       INTEGER  ::   ji, jj, jk, jl, layer, &  ! dummy loop indices 
    76          initad           ! number of sub-timestep for the advection 
    77       INTEGER  ::   ji_maxu, ji_maxv, jj_maxu, jj_maxv 
    78  
    79       REAL(wp) ::  &                               
    80          zindb  ,  & 
    81          zindsn ,  & 
    82          zindic ,  & 
    83          zusvosn,  & 
    84          zusvoic,  & 
    85          zvbord ,  & 
    86          zcfl   ,  & 
    87          zusnit ,  & 
    88          zrtt, zsal, zage, & 
    89          zbigval, ze, & 
    90          zmaxu, zmaxv 
    91  
    92       REAL(wp), DIMENSION(jpi,jpj)  ::   &  ! temporary workspace 
    93          zui_u , zvi_v , zsm   ,         & 
    94          zs0at, zs0ow 
    95  
    96       REAL(wp), DIMENSION(jpi,jpj,jpl):: &  ! temporary workspace 
    97          zs0ice, zs0sn, zs0a   ,         & 
    98          zs0c0 ,                         & 
    99          zs0sm , zs0oi 
    100  
    101       ! MHE Multilayer heat content 
    102       REAL(wp), DIMENSION(jpi,jpj,jkmax,jpl)  ::   &  ! temporary workspace 
    103          zs0e 
    104  
    105       !--------------------------------------------------------------------- 
    106  
    107       IF( numit == nstart  )   CALL lim_trp_init      ! Initialization (first time-step only) 
    108  
     64      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     65      USE wrk_nemo, ONLY:   zs0at => wrk_2d_1 , zsm => wrk_2d_2 , zs0ow  => wrk_2d_3      ! 2D workspace 
     66      USE wrk_nemo, ONLY:   wrk_3d_1, wrk_3d_2, wrk_3d_3, wrk_3d_4, wrk_3d_5, wrk_3d_6    ! 3D workspace 
     67      USE wrk_nemo, ONLY:   wrk_4d_1                                                      ! 4D workspace 
     68      ! 
     69      INTEGER, INTENT(in) ::   kt   ! number of iteration 
     70      ! 
     71      INTEGER  ::   ji, jj, jk, jl, layer   ! dummy loop indices 
     72      INTEGER  ::   initad                  ! number of sub-timestep for the advection 
     73      REAL(wp) ::   zindb  , zindsn , zindic      ! local scalar 
     74      REAL(wp) ::   zusvosn, zusvoic, zbigval     !   -      - 
     75      REAL(wp) ::   zcfl , zusnit , zrtt          !   -      - 
     76      REAL(wp) ::   ze   , zsal   , zage          !   -      - 
     77      ! 
     78      REAL(wp), POINTER, DIMENSION(:,:,:)   ::   zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi   ! 3D pointer 
     79      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zs0e                                         ! 4D pointer 
     80      !!--------------------------------------------------------------------- 
     81 
     82      IF( wrk_in_use(2, 1,2,3,4,5) ) THEN 
     83         CALL ctl_stop( 'lim_trp : requested workspace arrays unavailable' )   ;   RETURN 
     84      END IF 
     85 
     86      zs0ice => wrk_3d_1(:,:,1:jpl)   ;   zs0a  => wrk_3d_3   ;   zs0sm => wrk_3d_3 
     87      zs0sn  => wrk_3d_2(:,:,1:jpl)   ;   zs0c0 => wrk_3d_3   ;   zs0oi => wrk_3d_3 
     88      zs0e   => wrk_4d_1(:,:,1:jkmax,1:jpl) 
     89 
     90 
     91      IF( numit == nstart .AND. lwp ) THEN 
     92         WRITE(numout,*) 
     93         IF( ln_limdyn ) THEN   ;   WRITE(numout,*) 'lim_trp : Ice transport ' 
     94         ELSE                   ;   WRITE(numout,*) 'lim_trp : No ice advection as ln_limdyn = ', ln_limdyn 
     95         ENDIF 
     96         WRITE(numout,*) '~~~~~~~~~~~~' 
     97      ENDIF 
     98       
    10999      zsm(:,:) = area(:,:) 
    110100 
    111       IF( ln_limdyn ) THEN 
    112          IF( kt == nit000 .AND. lwp ) THEN 
    113             WRITE(numout,*) ' lim_trp : Ice Advection' 
    114             WRITE(numout,*) ' ~~~~~~~' 
    115          ENDIF 
    116  
    117          !-----------------------------------------------------------------------------! 
    118          ! 1) CFL Test                                                              
    119          !-----------------------------------------------------------------------------! 
    120  
    121          !------------------------------------------ 
    122          ! ice velocities at ocean U- and V-points  
    123          !------------------------------------------ 
    124  
    125          ! zvbord factor between 1 and 2 to take into account slip or no-slip boundary conditions.         
    126          zvbord = 1.0 + ( 1.0 - bound ) 
    127          DO jj = 1, jpjm1 
    128             DO ji = 1, fs_jpim1 
    129                zui_u(ji,jj) = u_ice(ji,jj) 
    130                zvi_v(ji,jj) = v_ice(ji,jj) 
    131             END DO 
    132          END DO 
    133  
    134          ! Lateral boundary conditions 
    135          CALL lbc_lnk( zui_u, 'U', -1. ) 
    136          CALL lbc_lnk( zvi_v, 'V', -1. ) 
     101      !                             !-------------------------------------! 
     102      IF( ln_limdyn ) THEN          !   Advection of sea ice properties   ! 
     103         !                          !-------------------------------------! 
     104         ! 
    137105 
    138106         !------------------------- 
     107         ! transported fields                                         
     108         !------------------------- 
     109         ! Snow vol, ice vol, salt and age contents, area 
     110         zs0ow(:,:) = ato_i(:,:) * area(:,:)               ! Open water area  
     111         DO jl = 1, jpl 
     112            zs0sn (:,:,jl)   = v_s  (:,:,jl) * area(:,:)    ! Snow volume 
     113            zs0ice(:,:,jl)   = v_i  (:,:,jl) * area(:,:)    ! Ice  volume 
     114            zs0a  (:,:,jl)   = a_i  (:,:,jl) * area(:,:)    ! Ice area 
     115            zs0sm (:,:,jl)   = smv_i(:,:,jl) * area(:,:)    ! Salt content 
     116            zs0oi (:,:,jl)   = oa_i (:,:,jl) * area(:,:)    ! Age content 
     117            zs0c0 (:,:,jl)   = e_s  (:,:,1,jl)              ! Snow heat content 
     118            zs0e  (:,:,:,jl) = e_i  (:,:,:,jl)              ! Ice  heat content 
     119         END DO 
     120 
     121         !-------------------------- 
     122         ! Advection of Ice fields  (Prather scheme)                                             
     123         !-------------------------- 
     124         ! If ice drift field is too fast, use an appropriate time step for advection.          
    139125         ! CFL test for stability 
    140          !------------------------- 
    141  
    142          zcfl  = 0.e0 
    143          zcfl  = MAX( zcfl, MAXVAL( ABS( zui_u(1:jpim1, :     ) ) * rdt_ice / e1u(1:jpim1, :     ) ) ) 
    144          zcfl  = MAX( zcfl, MAXVAL( ABS( zvi_v( :     ,1:jpjm1) ) * rdt_ice / e2v( :     ,1:jpjm1) ) ) 
    145  
    146          zmaxu = 0.0 
    147          zmaxv = 0.0 
    148          DO ji = 1, jpim1 
    149             DO jj = 1, jpjm1 
    150                IF ( (ABS(zui_u(ji,jj)) .GT. zmaxu) ) THEN  
    151                   zmaxu = MAX(zui_u(ji,jj), zmaxu ) 
    152                   ji_maxu = ji 
    153                   jj_maxu = jj 
    154                ENDIF 
    155                IF ( (ABS(zvi_v(ji,jj)) .GT. zmaxv) ) THEN  
    156                   zmaxv = MAX(zvi_v(ji,jj), zmaxv ) 
    157                   ji_maxv = ji 
    158                   jj_maxv = jj 
    159                ENDIF 
    160             END DO 
    161          END DO 
    162  
    163          IF (lk_mpp ) CALL mpp_max(zcfl) 
    164  
    165          IF ( zcfl > 0.5 .AND. lwp ) & 
    166             WRITE(numout,*) 'lim_trp : violation of cfl criterion the ',nday,'th day, cfl = ',zcfl 
    167  
    168          !-----------------------------------------------------------------------------! 
    169          ! 2) Computation of transported fields                                         
    170          !-----------------------------------------------------------------------------! 
    171  
    172          !------------------------------------------------------ 
    173          ! 1.1) Snow vol, ice vol, salt and age contents, area 
    174          !------------------------------------------------------ 
    175  
    176          zs0ow (:,:) =  ato_i(:,:)    * area(:,:)           ! Open water area  
    177          DO jl = 1, jpl  !sum over thickness categories 
    178             ! area -> is the unmasked and masked area of T-grid cell 
    179             zs0sn (:,:,jl) =  v_s(:,:,jl)    * area(:,:)    ! Snow volume. 
    180             zs0ice(:,:,jl) =  v_i(:,:,jl)    * area(:,:)    ! Ice volume. 
    181             zs0a  (:,:,jl) =  a_i(:,:,jl)    * area(:,:)    ! Ice area 
    182             zs0sm (:,:,jl) =  smv_i(:,:,jl)  * area(:,:)    ! Salt content 
    183             zs0oi (:,:,jl) =  oa_i (:,:,jl)  * area(:,:)    ! Age content 
    184  
    185             !---------------------------------- 
    186             ! 1.2) Ice and snow heat contents 
    187             !---------------------------------- 
    188  
    189             zs0c0 (:,:,jl)     = e_s(:,:,1,jl)              ! Snow heat cont. 
    190             DO jk = 1, nlay_i 
    191                zs0e(:,:,jk,jl) = e_i(:,:,jk,jl)             ! Ice heat content 
    192             END DO 
    193          END DO 
    194  
    195          !-----------------------------------------------------------------------------! 
    196          ! 3) Advection of Ice fields                                               
    197          !-----------------------------------------------------------------------------! 
    198  
    199          ! If ice drift field is too fast, use an appropriate time step for advection.          
     126         zcfl  =            MAXVAL( ABS( u_ice(:,:) ) * rdt_ice / e1u(:,:) ) 
     127         zcfl  = MAX( zcfl, MAXVAL( ABS( v_ice(:,:) ) * rdt_ice / e2v(:,:) ) ) 
     128         IF(lk_mpp )   CALL mpp_max( zcfl ) 
     129!!gm more readability: 
     130!         IF( zcfl > 0.5 ) THEN   ;   initad = 2   ;   zusnit = 0.5_wp 
     131!         ELSE                    ;   initad = 1   ;   zusnit = 1.0_wp 
     132!         ENDIF 
     133!!gm end 
    200134         initad = 1 + INT( MAX( rzero, SIGN( rone, zcfl-0.5 ) ) ) 
    201135         zusnit = 1.0 / REAL( initad )  
    202  
    203          IF( MOD( ( kt - 1) / nn_fsbc , 2 ) == 0) THEN        !==  odd ice time step:  adv_x then adv_y  ==! 
     136         IF( zcfl > 0.5 .AND. lwp )   & 
     137            WRITE(numout,*) 'lim_trp_2 : CFL violation at day ', nday, ', cfl = ', zcfl,   & 
     138               &                        ': the ice time stepping is split in two' 
     139 
     140         IF( MOD( ( kt - 1) / nn_fsbc , 2 ) == 0 ) THEN       !==  odd ice time step:  adv_x then adv_y  ==! 
    204141            DO jk = 1,initad 
    205                !--- ice open water area 
    206                CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0ow(:,:) , sxopw(:,:) , &  
    207                   sxxopw(:,:), syopw(:,:) , &  
    208                   syyopw(:,:), sxyopw(:,:) ) 
    209                CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0ow(:,:) , sxopw (:,:) , & 
    210                   sxxopw(:,:), syopw (:,:) , &  
    211                   syyopw(:,:), sxyopw(:,:) ) 
     142               CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0ow (:,:), sxopw(:,:),   &             !--- ice open water area 
     143                  &                                       sxxopw(:,:), syopw(:,:), syyopw(:,:), sxyopw(:,:)  ) 
     144               CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0ow (:,:), sxopw(:,:),   & 
     145                  &                                       sxxopw(:,:), syopw(:,:), syyopw(:,:), sxyopw(:,:)  ) 
    212146               DO jl = 1, jpl 
    213                   !--- ice volume  --- 
    214                   CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , &  
    215                      sxxice(:,:,jl) , syice (:,:,jl) , &  
    216                      syyice(:,:,jl) , sxyice(:,:,jl) ) 
    217                   CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , & 
    218                      sxxice(:,:,jl) , syice (:,:,jl) , &  
    219                      syyice(:,:,jl) , sxyice(:,:,jl) ) 
    220                   !--- snow volume  --- 
    221                   CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0sn (:,:,jl) , sxsn  (:,:,jl) , & 
    222                      sxxsn (:,:,jl) , sysn  (:,:,jl) , & 
    223                      syysn (:,:,jl) , sxysn (:,:,jl) ) 
    224                   CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0sn (:,:,jl) , sxsn  (:,:,jl) , & 
    225                      sxxsn (:,:,jl) , sysn  (:,:,jl) , & 
    226                      syysn (:,:,jl) , sxysn (:,:,jl) ) 
    227                   !--- ice salinity --- 
    228                   CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 
    229                      sxxsal(:,:,jl) , sysal (:,:,jl) , & 
    230                      syysal(:,:,jl) , sxysal(:,:,jl)  ) 
    231                   CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 
    232                      sxxsal(:,:,jl) , sysal (:,:,jl) , & 
    233                      syysal(:,:,jl) , sxysal(:,:,jl)  ) 
    234                   !--- ice age      ---      
    235                   CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 
    236                      sxxage(:,:,jl) , syage (:,:,jl) , & 
    237                      syyage(:,:,jl) , sxyage(:,:,jl)  ) 
    238                   CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 
    239                      sxxage(:,:,jl) , syage (:,:,jl) , & 
    240                      syyage(:,:,jl) , sxyage(:,:,jl)  ) 
    241                   !--- ice concentrations --- 
    242                   CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0a  (:,:,jl) , sxa   (:,:,jl) , & 
    243                      sxxa  (:,:,jl) , sya   (:,:,jl) , &  
    244                      syya  (:,:,jl) , sxya  (:,:,jl)  ) 
    245                   CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0a  (:,:,jl) , sxa   (:,:,jl) , &  
    246                      sxxa  (:,:,jl) , sya   (:,:,jl) , &  
    247                      syya  (:,:,jl) , sxya  (:,:,jl)  ) 
    248                   !--- ice / snow thermal energetic contents --- 
    249                   CALL lim_adv_x( zusnit, zui_u, rone , zsm, zs0c0 (:,:,jl) , sxc0  (:,:,jl) , &  
    250                      sxxc0 (:,:,jl) , syc0  (:,:,jl) , & 
    251                      syyc0 (:,:,jl) , sxyc0 (:,:,jl)  ) 
    252                   CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, zs0c0 (:,:,jl) , sxc0  (:,:,jl) , & 
    253                      sxxc0 (:,:,jl) , syc0  (:,:,jl) , & 
    254                      syyc0 (:,:,jl) , sxyc0 (:,:,jl)  ) 
    255                   DO layer = 1, nlay_i 
    256                      CALL lim_adv_x( zusnit, zui_u, rone , zsm, & 
    257                         zs0e(:,:,layer,jl) , sxe (:,:,layer,jl) , &  
    258                         sxxe(:,:,layer,jl) , sye (:,:,layer,jl) , & 
    259                         syye(:,:,layer,jl) , sxye(:,:,layer,jl) ) 
    260                      CALL lim_adv_y( zusnit, zvi_v, rzero, zsm, &  
    261                         zs0e(:,:,layer,jl) , sxe (:,:,layer,jl) , &  
    262                         sxxe(:,:,layer,jl) , sye (:,:,layer,jl) , & 
    263                         syye(:,:,layer,jl) , sxye(:,:,layer,jl) ) 
     147                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0ice(:,:,jl), sxice(:,:,jl),   &    !--- ice volume  --- 
     148                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
     149                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0ice(:,:,jl), sxice(:,:,jl),   & 
     150                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
     151                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0sn (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  --- 
     152                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
     153                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0sn (:,:,jl), sxsn (:,:,jl),   & 
     154                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
     155                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0sm (:,:,jl), sxsal(:,:,jl),   &    !--- ice salinity --- 
     156                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
     157                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0sm (:,:,jl), sxsal(:,:,jl),   & 
     158                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
     159                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0oi (:,:,jl), sxage(:,:,jl),   &   !--- ice age      ---      
     160                     &                                       sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  ) 
     161                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0oi (:,:,jl), sxage(:,:,jl),   & 
     162                     &                                       sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  ) 
     163                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0a  (:,:,jl), sxa  (:,:,jl),   &   !--- ice concentrations --- 
     164                     &                                       sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  ) 
     165                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0a  (:,:,jl), sxa  (:,:,jl),   &  
     166                     &                                       sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  ) 
     167                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0c0 (:,:,jl), sxc0 (:,:,jl),   &  !--- snow heat contents --- 
     168                     &                                       sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  ) 
     169                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0c0 (:,:,jl), sxc0 (:,:,jl),   & 
     170                     &                                       sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  ) 
     171                  DO layer = 1, nlay_i                                                           !--- ice heat contents --- 
     172                     CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0e(:,:,layer,jl), sxe (:,:,layer,jl),   &  
     173                        &                                       sxxe(:,:,layer,jl), sye (:,:,layer,jl),   & 
     174                        &                                       syye(:,:,layer,jl), sxye(:,:,layer,jl) ) 
     175                     CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0e(:,:,layer,jl), sxe (:,:,layer,jl),   &  
     176                        &                                       sxxe(:,:,layer,jl), sye (:,:,layer,jl),   & 
     177                        &                                       syye(:,:,layer,jl), sxye(:,:,layer,jl) ) 
    264178                  END DO 
    265179               END DO 
     
    267181         ELSE 
    268182            DO jk = 1, initad 
    269                !--- ice volume  --- 
    270                CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0ow (:,:) , sxopw (:,:) , & 
    271                   sxxopw(:,:) , syopw (:,:) , &  
    272                   syyopw(:,:) , sxyopw(:,:) ) 
    273                CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0ow (:,:) , sxopw (:,:) , &  
    274                   sxxopw(:,:) , syopw (:,:) , & 
    275                   syyopw(:,:) , sxyopw(:,:) ) 
     183               CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0ow (:,:), sxopw(:,:),   &             !--- ice open water area 
     184                  &                                       sxxopw(:,:), syopw(:,:), syyopw(:,:), sxyopw(:,:)  ) 
     185               CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0ow (:,:), sxopw(:,:),   & 
     186                  &                                       sxxopw(:,:), syopw(:,:), syyopw(:,:), sxyopw(:,:)  ) 
    276187               DO jl = 1, jpl 
    277                   !--- ice volume  --- 
    278                   CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , & 
    279                      sxxice(:,:,jl) , syice (:,:,jl) , &  
    280                      syyice(:,:,jl) , sxyice(:,:,jl) ) 
    281                   CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0ice(:,:,jl) , sxice (:,:,jl) , &  
    282                      sxxice(:,:,jl) , syice (:,:,jl) , & 
    283                      syyice(:,:,jl) , sxyice(:,:,jl) ) 
    284                   !--- snow volume  --- 
    285                   CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0sn (:,:,jl) , sxsn  (:,:,jl) , &  
    286                      sxxsn (:,:,jl) , sysn  (:,:,jl) , &  
    287                      syysn (:,:,jl) , sxysn (:,:,jl) ) 
    288                   CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0sn (:,:,jl) , sxsn  (:,:,jl) , &  
    289                      sxxsn (:,:,jl) , sysn  (:,:,jl) , &  
    290                      syysn (:,:,jl) , sxysn (:,:,jl) ) 
    291                   !--- ice salinity --- 
    292                   CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 
    293                      sxxsal(:,:,jl) , sysal (:,:,jl) , & 
    294                      syysal(:,:,jl) , sxysal(:,:,jl) ) 
    295                   CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0sm (:,:,jl) , sxsal (:,:,jl) , & 
    296                      sxxsal(:,:,jl) , sysal (:,:,jl) , & 
    297                      syysal(:,:,jl) , sxysal(:,:,jl) ) 
    298                   !--- ice age      --- 
    299                   CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 
    300                      sxxage(:,:,jl) , syage (:,:,jl) , &  
    301                      syyage(:,:,jl) , sxyage(:,:,jl)  ) 
    302                   CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0oi (:,:,jl) , sxage (:,:,jl) , & 
    303                      sxxage(:,:,jl) , syage (:,:,jl) , & 
    304                      syyage(:,:,jl) , sxyage(:,:,jl)   ) 
    305                   !--- ice concentration --- 
    306                   CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0a  (:,:,jl) , sxa   (:,:,jl) , &  
    307                      sxxa  (:,:,jl) , sya   (:,:,jl) , &  
    308                      syya  (:,:,jl) , sxya  (:,:,jl)  ) 
    309                   CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0a  (:,:,jl) , sxa   (:,:,jl) , &  
    310                      sxxa  (:,:,jl) , sya   (:,:,jl) , &  
    311                      syya  (:,:,jl) , sxya  (:,:,jl)  ) 
    312                   !--- ice / snow thermal energetic contents --- 
    313                   CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0c0 (:,:,jl) , sxc0  (:,:,jl) , &  
    314                      sxxc0 (:,:,jl) , syc0  (:,:,jl) , & 
    315                      syyc0 (:,:,jl) , sxyc0 (:,:,jl)  ) 
    316                   CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0c0 (:,:,jl) , sxc0  (:,:,jl) , & 
    317                      sxxc0 (:,:,jl) , syc0  (:,:,jl) , & 
    318                      syyc0 (:,:,jl) , sxyc0 (:,:,jl)  ) 
    319                   DO layer = 1, nlay_i 
    320                      CALL lim_adv_y( zusnit, zvi_v, rone , zsm, zs0e(:,:,layer,jl) , & 
    321                         sxe (:,:,layer,jl) , sxxe (:,:,layer,jl) , sye (:,:,layer,jl) , & 
    322                         syye (:,:,layer,jl), sxye (:,:,layer,jl) ) 
    323                      CALL lim_adv_x( zusnit, zui_u, rzero, zsm, zs0e(:,:,layer,jl) , & 
    324                         sxe (:,:,layer,jl) , sxxe (:,:,layer,jl) , sye (:,:,layer,jl) , & 
    325                         syye (:,:,layer,jl), sxye (:,:,layer,jl)  ) 
     188                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0ice(:,:,jl), sxice(:,:,jl),   &    !--- ice volume  --- 
     189                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
     190                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0ice(:,:,jl), sxice(:,:,jl),   & 
     191                     &                                       sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  ) 
     192                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0sn (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  --- 
     193                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
     194                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0sn (:,:,jl), sxsn (:,:,jl),   & 
     195                     &                                       sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  ) 
     196                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0sm (:,:,jl), sxsal(:,:,jl),   &    !--- ice salinity --- 
     197                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
     198                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0sm (:,:,jl), sxsal(:,:,jl),   & 
     199                     &                                       sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  ) 
     200 
     201                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0oi (:,:,jl), sxage(:,:,jl),   &   !--- ice age      --- 
     202                     &                                       sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  ) 
     203                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0oi (:,:,jl), sxage(:,:,jl),   & 
     204                     &                                       sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  ) 
     205                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0a  (:,:,jl), sxa  (:,:,jl),   &   !--- ice concentrations --- 
     206                     &                                       sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  ) 
     207                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0a  (:,:,jl), sxa  (:,:,jl),   & 
     208                     &                                       sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  ) 
     209                  CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0c0 (:,:,jl), sxc0 (:,:,jl),   &  !--- snow heat contents --- 
     210                     &                                       sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  ) 
     211                  CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0c0 (:,:,jl), sxc0 (:,:,jl),   & 
     212                     &                                       sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  ) 
     213                  DO layer = 1, nlay_i                                                           !--- ice heat contents --- 
     214                     CALL lim_adv_y( zusnit, v_ice, rzero, zsm, zs0e(:,:,layer,jl), sxe (:,:,layer,jl),   &  
     215                        &                                       sxxe(:,:,layer,jl), sye (:,:,layer,jl),   & 
     216                        &                                       syye(:,:,layer,jl), sxye(:,:,layer,jl) ) 
     217                     CALL lim_adv_x( zusnit, u_ice, rone , zsm, zs0e(:,:,layer,jl), sxe (:,:,layer,jl),   &  
     218                        &                                       sxxe(:,:,layer,jl), sye (:,:,layer,jl),   & 
     219                        &                                       syye(:,:,layer,jl), sxye(:,:,layer,jl) ) 
    326220                  END DO 
    327  
    328221               END DO 
    329222            END DO 
     
    333226         ! Recover the properties from their contents 
    334227         !------------------------------------------- 
    335  
    336          zs0ow (:,:)       = zs0ow(:,:) / area(:,:) 
     228         zs0ow(:,:) = zs0ow(:,:) / area(:,:) 
    337229         DO jl = 1, jpl 
    338230            zs0ice(:,:,jl) = zs0ice(:,:,jl) / area(:,:) 
     
    351243         !------------------------------------------------------------------------------! 
    352244 
     245         !-------------------------------- 
     246         !  diffusion of open water area 
     247         !-------------------------------- 
     248         zs0at(:,:) = zs0a(:,:,1)      ! total ice fraction 
     249         DO jl = 2, jpl 
     250            zs0at(:,:) = zs0at(:,:) + zs0a(:,:,jl) 
     251         END DO 
     252         ! 
     253         !                             ! Masked eddy diffusivity coefficient at ocean U- and V-points 
     254         DO jj = 1, jpjm1                    ! NB: has not to be defined on jpj line and jpi row 
     255            DO ji = 1 , fs_jpim1   ! vector opt. 
     256               pahu(ji,jj) = ( 1._wp - MAX( rzero, SIGN( rone, -zs0at(ji  ,jj) ) ) )   & 
     257                  &        * ( 1._wp - MAX( rzero, SIGN( rone, -zs0at(ji+1,jj) ) ) ) * ahiu(ji,jj) 
     258               pahv(ji,jj) = ( 1._wp - MAX( rzero, SIGN( rone, -zs0at(ji,jj  ) ) ) )   & 
     259                  &        * ( 1._wp - MAX( rzero, SIGN( rone,- zs0at(ji,jj+1) ) ) ) * ahiv(ji,jj) 
     260            END DO 
     261         END DO 
     262         ! 
     263         CALL lim_hdf( zs0ow (:,:) )   ! Diffusion 
     264 
    353265         !------------------------------------ 
    354          ! 4.1) diffusion of open water area 
     266         !  Diffusion of other ice variables 
    355267         !------------------------------------ 
    356  
    357          ! Compute total ice fraction 
    358          zs0at(:,:) = 0.0 
    359          DO jl = 1, jpl 
    360             DO jj = 1, jpj 
    361                DO ji = 1, jpi 
    362                   zs0at (ji,jj) = zs0at(ji,jj) + zs0a(ji,jj,jl) ! 
    363                END DO 
    364             END DO 
    365          END DO 
    366  
    367          ! Masked eddy diffusivity coefficient at ocean U- and V-points 
    368          DO jj = 1, jpjm1          ! NB: has not to be defined on jpj line and jpi row 
    369             DO ji = 1 , fs_jpim1   ! vector opt. 
    370                pahu(ji,jj) = ( 1.0 - MAX( rzero, SIGN( rone, -zs0at(ji  ,jj) ) ) )   & 
    371                   &        * ( 1.0 - MAX( rzero, SIGN( rone, -zs0at(ji+1,jj) ) ) ) * ahiu(ji,jj) 
    372                pahv(ji,jj) = ( 1.0 - MAX( rzero, SIGN( rone, -zs0at(ji,jj  ) ) ) )   & 
    373                   &        * ( 1.0 - MAX( rzero, SIGN( rone,- zs0at(ji,jj+1) ) ) ) * ahiv(ji,jj) 
    374             END DO !jj 
    375          END DO ! ji 
    376  
    377          ! Diffusion 
    378          CALL lim_hdf( zs0ow (:,:) ) 
    379  
    380          !---------------------------------------- 
    381          ! 4.2) Diffusion of other ice variables 
    382          !---------------------------------------- 
    383          DO jl = 1, jpl 
    384  
    385             ! Masked eddy diffusivity coefficient at ocean U- and V-points 
    386             DO jj = 1, jpjm1          ! NB: has not to be defined on jpj line and jpi row 
     268         DO jl = 1, jpl 
     269         !                             ! Masked eddy diffusivity coefficient at ocean U- and V-points 
     270            DO jj = 1, jpjm1                 ! NB: has not to be defined on jpj line and jpi row 
    387271               DO ji = 1 , fs_jpim1   ! vector opt. 
    388                   pahu(ji,jj) = ( 1.0 - MAX( rzero, SIGN( rone, -zs0a(ji  ,jj,jl) ) ) )   & 
    389                      &        * ( 1.0 - MAX( rzero, SIGN( rone, -zs0a(ji+1,jj,jl) ) ) ) * ahiu(ji,jj) 
    390                   pahv(ji,jj) = ( 1.0 - MAX( rzero, SIGN( rone, -zs0a(ji,jj,jl  ) ) ) )   & 
    391                      &        * ( 1.0 - MAX( rzero, SIGN( rone,- zs0a(ji,jj+1,jl) ) ) ) * ahiv(ji,jj) 
    392                END DO !jj 
    393             END DO ! ji 
     272                  pahu(ji,jj) = ( 1._wp - MAX( rzero, SIGN( rone, -zs0a(ji  ,jj,jl) ) ) )   & 
     273                     &        * ( 1._wp - MAX( rzero, SIGN( rone, -zs0a(ji+1,jj,jl) ) ) ) * ahiu(ji,jj) 
     274                  pahv(ji,jj) = ( 1._wp - MAX( rzero, SIGN( rone, -zs0a(ji,jj  ,jl) ) ) )   & 
     275                     &        * ( 1._wp - MAX( rzero, SIGN( rone,- zs0a(ji,jj+1,jl) ) ) ) * ahiv(ji,jj) 
     276               END DO 
     277            END DO 
    394278 
    395279            CALL lim_hdf( zs0ice (:,:,jl) ) 
     
    401285            DO jk = 1, nlay_i 
    402286               CALL lim_hdf( zs0e (:,:,jk,jl) ) 
    403             END DO ! jk 
    404          END DO !jl 
     287            END DO 
     288         END DO 
    405289 
    406290         !----------------------------------------- 
    407          ! 4.3) Remultiply everything by ice area 
     291         ! Remultiply everything by ice area 
    408292         !----------------------------------------- 
    409          zs0ow(:,:) = MAX(rzero, zs0ow(:,:) * area(:,:) ) 
     293         zs0ow(:,:) = MAX( rzero, zs0ow(:,:) * area(:,:) ) 
    410294         DO jl = 1, jpl 
    411295            zs0ice(:,:,jl) = MAX( rzero, zs0ice(:,:,jl) * area(:,:) )    !!bug:  est-ce utile 
     
    432316               DO jj = 1, jpj 
    433317                  DO ji = 1, jpi 
    434                      zs0e (ji,jj,jk,jl) =  & 
    435                         MAX( rzero, zs0e (ji,jj,jk,jl) / area(ji,jj) ) 
     318                     zs0e(ji,jj,jk,jl) = MAX( rzero, zs0e(ji,jj,jk,jl) / area(ji,jj) ) 
    436319                  END DO 
    437320               END DO 
     
    441324         DO jj = 1, jpj 
    442325            DO ji = 1, jpi 
    443                zs0ow (ji,jj) = MAX( rzero, zs0ow (ji,jj) / area(ji,jj) ) 
    444             END DO 
    445          END DO 
    446  
    447          zs0at(:,:) = 0.0 
     326               zs0ow(ji,jj) = MAX( rzero, zs0ow (ji,jj) / area(ji,jj) ) 
     327            END DO 
     328         END DO 
     329 
     330         zs0at(:,:) = 0._wp 
    448331         DO jl = 1, jpl 
    449332            DO jj = 1, jpj 
     
    463346         ! 5.2) Snow thickness, Ice thickness, Ice concentrations 
    464347         !--------------------------------------------------------- 
    465  
    466348         DO jj = 1, jpj 
    467349            DO ji = 1, jpi 
    468                zindb         = MAX( 0.0 , SIGN( 1.0, zs0at(ji,jj) - zeps10) ) 
    469                zs0ow(ji,jj)  = (1.0 - zindb) + zindb*MAX( zs0ow(ji,jj), 0.00 ) 
    470                ato_i(ji,jj)  = zs0ow(ji,jj) 
    471             END DO 
    472          END DO 
    473  
    474          ! Remove very small areas  
    475          DO jl = 1, jpl 
     350               zindb        = MAX( 0._wp , SIGN( 1.0, zs0at(ji,jj) - zeps10) ) 
     351               zs0ow(ji,jj) = ( 1._wp - zindb ) + zindb * MAX( zs0ow(ji,jj), 0._wp ) 
     352               ato_i(ji,jj) = zs0ow(ji,jj) 
     353            END DO 
     354         END DO 
     355 
     356         DO jl = 1, jpl         ! Remove very small areas  
    476357            DO jj = 1, jpj 
    477358               DO ji = 1, jpi 
    478359                  zindb         = MAX( 0.0 , SIGN( 1.0, zs0a(ji,jj,jl) - zeps10) ) 
    479  
    480                   zs0a(ji,jj,jl)  = zindb * MIN( zs0a(ji,jj,jl), 0.99 ) 
    481                   v_s(ji,jj,jl)   = zindb * zs0sn (ji,jj,jl)  
    482                   v_i(ji,jj,jl)   = zindb * zs0ice(ji,jj,jl) 
    483  
    484                   zindsn          = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - zeps10 ) ) 
    485                   zindic          = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - zeps10 ) ) 
    486                   zindb           = MAX( zindsn, zindic ) 
    487                   zs0a (ji,jj,jl) = zindb  * zs0a(ji,jj,jl) !ice concentration 
    488                   a_i  (ji,jj,jl) = zs0a(ji,jj,jl) 
    489                   v_s  (ji,jj,jl) = zindsn * v_s(ji,jj,jl) 
    490                   v_i  (ji,jj,jl) = zindic * v_i(ji,jj,jl) 
     360                  ! 
     361                  zs0a(ji,jj,jl) = zindb * MIN( zs0a(ji,jj,jl), 0.99 ) 
     362                  v_s(ji,jj,jl)  = zindb * zs0sn (ji,jj,jl)  
     363                  v_i(ji,jj,jl)  = zindb * zs0ice(ji,jj,jl) 
     364                  ! 
     365                  zindsn         = MAX( rzero, SIGN( rone, v_s(ji,jj,jl) - zeps10 ) ) 
     366                  zindic         = MAX( rzero, SIGN( rone, v_i(ji,jj,jl) - zeps10 ) ) 
     367                  zindb          = MAX( zindsn, zindic ) 
     368                  zs0a(ji,jj,jl) = zindb  * zs0a(ji,jj,jl) !ice concentration 
     369                  a_i (ji,jj,jl) = zs0a(ji,jj,jl) 
     370                  v_s (ji,jj,jl) = zindsn * v_s(ji,jj,jl) 
     371                  v_i (ji,jj,jl) = zindic * v_i(ji,jj,jl) 
    491372               END DO 
    492373            END DO 
     
    495376         DO jj = 1, jpj 
    496377            DO ji = 1, jpi 
    497                zs0at(ji,jj)       = SUM( zs0a(ji,jj,1:jpl) ) 
     378               zs0at(ji,jj) = SUM( zs0a(ji,jj,1:jpl) ) 
    498379            END DO 
    499380         END DO 
     
    503384         !---------------------- 
    504385 
    505          zbigval         =  1.0d+13 
     386         zbigval = 1.d+13 
    506387 
    507388         DO jl = 1, jpl 
     
    518399 
    519400                  ! Ice salinity and age 
    520                   zsal            = MAX( MIN( (rhoic-rhosn)/rhoic*sss_m(ji,jj)  , & 
    521                      zusvoic * zs0sm(ji,jj,jl) ), s_i_min ) * & 
    522                      v_i(ji,jj,jl) 
     401                  zsal = MAX( MIN( (rhoic-rhosn)/rhoic*sss_m(ji,jj)  , & 
     402                     zusvoic * zs0sm(ji,jj,jl) ), s_i_min ) * v_i(ji,jj,jl) 
    523403                  IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) &  
    524404                     smv_i(ji,jj,jl) = zindic*zsal + (1.0-zindic)*0.0 
    525405 
    526                   zage            = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / &  
    527                      MAX( a_i(ji,jj,jl), epsi16 )  ), 0.0 ) * & 
    528                      a_i(ji,jj,jl) 
     406                  zage = MAX( MIN( zbigval, zs0oi(ji,jj,jl) / &  
     407                     MAX( a_i(ji,jj,jl), epsi16 )  ), 0.0 ) * a_i(ji,jj,jl) 
    529408                  oa_i (ji,jj,jl)  = zindic*zage  
    530409 
     
    583462         END DO 
    584463      ENDIF 
    585  
     464      ! 
     465      IF( wrk_not_released(2, 1,2,3,4,5) )   CALL ctl_stop('lim_trp_2 : failed to release workspace arrays') 
     466      ! 
    586467   END SUBROUTINE lim_trp 
    587  
    588  
    589    SUBROUTINE lim_trp_init 
    590       !!------------------------------------------------------------------- 
    591       !!                  ***  ROUTINE lim_trp_init  *** 
    592       !! 
    593       !! ** Purpose :   initialization of ice advection parameters 
    594       !! 
    595       !! ** Method  : Read the namicetrp namelist and check the parameter  
    596       !!       values called at the first timestep (nit000) 
    597       !! 
    598       !! ** input   :   Namelist namicetrp 
    599       !! 
    600       !! history : 
    601       !!   2.0  !  03-08 (C. Ethe)  Original code 
    602       !!------------------------------------------------------------------- 
    603       NAMELIST/namicetrp/ bound 
    604       !!------------------------------------------------------------------- 
    605  
    606       ! Read Namelist namicetrp 
    607       REWIND ( numnam_ice ) 
    608       READ   ( numnam_ice  , namicetrp ) 
    609       IF(lwp) THEN 
    610          WRITE(numout,*) 
    611          WRITE(numout,*) 'lim_trp_init : Ice parameters for advection ' 
    612          WRITE(numout,*) '~~~~~~~~~~~~' 
    613          WRITE(numout,*) ' boundary conditions (0.0 no-slip, 1.0 free-slip) bound  = ', bound 
    614          WRITE(numout,*)  
    615       ENDIF 
    616  
    617    END SUBROUTINE lim_trp_init 
    618468 
    619469#else 
Note: See TracChangeset for help on using the changeset viewer.