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 4972 for branches/2014/dev_MERGE_2014 – NEMO

Ignore:
Timestamp:
2014-12-05T16:28:42+01:00 (9 years ago)
Author:
clem
Message:

LIM3 cleaning (1st part) with modification in the ice namelist. 2nd part is coming soon

Location:
branches/2014/dev_MERGE_2014/NEMOGCM
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_MERGE_2014/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref

    r4924 r4972  
    4646   om          =   0.5     !  relaxation constant  
    4747   cw          =   5.0e-03 !  drag coefficient for oceanic stress 
    48    angvg       =   0.0     !  turning angle for oceanic stress 
    4948   pstar       =   2.0e+04 !  1st bulk-rheology parameter 
    5049   c_rhg       =  20.0     !  2nd bulk-rhelogy parameter 
  • branches/2014/dev_MERGE_2014/NEMOGCM/CONFIG/cfg.txt

    r4946 r4972  
    44ORCA2_SAS_LIM OPA_SRC SAS_SRC LIM_SRC_2 NST_SRC 
    55C1D_PAPA OPA_SRC 
    6 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
    76GYRE_BFM OPA_SRC TOP_SRC 
    87AMM12 OPA_SRC 
    9 ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 
    108ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    119ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 
    1210ISOMIP OPA_SRC 
    1311GYRE OPA_SRC 
     12SPITZ025 OPA_SRC LIM_SRC_3 
     13ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 
     14GYRE_LONG OPA_SRC 
     15ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
     16GYRE_4 OPA_SRC 
     17ORCA2LIMPIS_LONG OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r4924 r4972  
    170170   REAL(wp), PUBLIC ::   om               !: relaxation constant 
    171171   REAL(wp), PUBLIC ::   cw               !: drag coefficient for oceanic stress 
    172    REAL(wp), PUBLIC ::   angvg            !: turning angle for oceanic stress 
    173172   REAL(wp), PUBLIC ::   pstar            !: determines ice strength (N/M), Hibler JPO79 
    174173   REAL(wp), PUBLIC ::   c_rhg            !: determines changes in ice strength 
     
    179178   REAL(wp), PUBLIC ::   relast           !: ratio => telast/rdt_ice (1/3 or 1/9 depending on nb of subcycling nevp)  
    180179   REAL(wp), PUBLIC ::   alphaevp         !: coeficient of the internal stresses  
    181    REAL(wp), PUBLIC ::   unit_fac = 1.e+09_wp  !: conversion factor for ice / snow enthalpy 
    182180   REAL(wp), PUBLIC ::   hminrhg          !: ice volume (a*h, in m) below which ice velocity is set to ocean velocity 
    183181 
     
    224222   REAL(wp), PUBLIC ::   usecc2           !:  = 1.0 / ( ecc * ecc ) 
    225223   REAL(wp), PUBLIC ::   rhoco            !: = rau0 * cw 
    226    REAL(wp), PUBLIC ::   sangvg, cangvg   !: sin and cos of the turning angle for ocean stress 
    227    REAL(wp), PUBLIC ::   pstarh           !: pstar / 2.0 
     224 
     225   !                                     !!** switch for presence of ice or not  
     226   REAL(wp), PUBLIC ::   rswitch 
     227 
     228   !                                     !!** define some parameters  
     229   REAL(wp), PUBLIC, PARAMETER ::   unit_fac = 1.e+09_wp  !: conversion factor for ice / snow enthalpy 
     230   REAL(wp), PUBLIC, PARAMETER ::   epsi06   = 1.e-06_wp  !: small number  
     231   REAL(wp), PUBLIC, PARAMETER ::   epsi10   = 1.e-10_wp  !: small number  
     232   REAL(wp), PUBLIC, PARAMETER ::   epsi20   = 1.e-20_wp  !: small number  
    228233 
    229234   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   u_oce, v_oce   !: surface ocean velocity used in ice dynamics 
     
    364369   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   d_sm_i_fl  , d_sm_i_gd                 !: 
    365370   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   d_sm_i_se  , d_sm_i_si  , d_sm_i_la    !: 
    366    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   d_oa_i_thd , d_oa_i_trp , s_i_newice   !: 
     371   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   d_oa_i_thd , d_oa_i_trp                !: 
    367372 
    368373   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   d_e_s_thd  , d_e_s_trp     !: 
     
    395400   LOGICAL , PUBLIC                                      ::   ln_limdiaout  !: flag for ice diag (T) or not (F) 
    396401   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dv_dt_thd     !: thermodynamic growth rates  
    397    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   izero 
    398402   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_trp_vi   !: transport of ice volume 
    399403   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_trp_vs   !: transport of snw volume 
     
    418422      INTEGER :: ice_alloc 
    419423      ! 
    420       INTEGER :: ierr(20), ii 
     424      INTEGER :: ierr(19), ii 
    421425      !!----------------------------------------------------------------- 
    422426 
     
    448452         &      hfx_thd(jpi,jpj) , hfx_dyn(jpi,jpj) , hfx_spr(jpi,jpj) ,  STAT=ierr(ii) ) 
    449453 
    450       ii = ii + 1 
    451       ALLOCATE( dh_i_surf2D(jpi,jpj) , dh_i_bott2D(jpi,jpj) , q_s(jpi,jpj) , STAT=ierr(ii) ) 
    452  
    453454      ! * Ice global state variables 
    454455      ii = ii + 1 
     
    497498         &      d_v_i_thd(jpi,jpj,jpl) , d_v_i_trp (jpi,jpj,jpl) , d_smv_i_thd(jpi,jpj,jpl) , d_smv_i_trp(jpi,jpj,jpl) ,   &      
    498499         &      d_sm_i_fl(jpi,jpj,jpl) , d_sm_i_gd (jpi,jpj,jpl) , d_sm_i_se  (jpi,jpj,jpl) , d_sm_i_si  (jpi,jpj,jpl) ,   & 
    499          &      d_sm_i_la(jpi,jpj,jpl) , d_oa_i_thd(jpi,jpj,jpl) , d_oa_i_trp (jpi,jpj,jpl) , s_i_newice (jpi,jpj,jpl) ,   & 
     500         &      d_sm_i_la(jpi,jpj,jpl) , d_oa_i_thd(jpi,jpj,jpl) , d_oa_i_trp (jpi,jpj,jpl) ,   & 
    500501         &     STAT=ierr(ii) ) 
    501502      ii = ii + 1 
    502       ALLOCATE( d_e_s_thd(jpi,jpj,nlay_s,jpl) , d_e_i_thd(jpi,jpj,nlay_i+1,jpl) , d_u_ice_dyn(jpi,jpj) ,     & 
    503          &      d_e_s_trp(jpi,jpj,nlay_s,jpl) , d_e_i_trp(jpi,jpj,nlay_i+1,jpl) , d_v_ice_dyn(jpi,jpj) , STAT=ierr(ii) ) 
     503      ALLOCATE( d_e_s_thd(jpi,jpj,nlay_s,jpl) , d_e_i_thd(jpi,jpj,nlay_i,jpl) , d_u_ice_dyn(jpi,jpj) ,     & 
     504         &      d_e_s_trp(jpi,jpj,nlay_s,jpl) , d_e_i_trp(jpi,jpj,nlay_i,jpl) , d_v_ice_dyn(jpi,jpj) , STAT=ierr(ii) ) 
    504505       
    505506      ! * Ice thickness distribution variables 
     
    509510      ! * Ice diagnostics 
    510511      ii = ii + 1 
    511       ALLOCATE( dv_dt_thd(jpi,jpj,jpl), izero (jpi,jpj,jpl),    & 
     512      ALLOCATE( dv_dt_thd(jpi,jpj,jpl),    & 
    512513         &      diag_trp_vi(jpi,jpj), diag_trp_vs  (jpi,jpj), diag_trp_ei(jpi,jpj),   &  
    513514         &      diag_trp_es(jpi,jpj), diag_heat_dhc(jpi,jpj),  STAT=ierr(ii) ) 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90

    r4924 r4972  
    3030   PUBLIC   lim_adv_x   ! called by lim_trp 
    3131   PUBLIC   lim_adv_y   ! called by lim_trp 
    32  
    33    REAL(wp)  ::   epsi20 = 1.e-20_wp   ! constant values 
    3432 
    3533   !! * Substitutions 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90

    r4967 r4972  
    3737   real(wp) ::   frc_sal, frc_vol   ! global forcing trends 
    3838   real(wp) ::   bg_grme            ! global ice growth+melt trends 
    39    REAL(wp) ::   epsi06 = 1.e-6_wp  ! small number 
    4039 
    4140   !! * Substitutions 
     
    6867      real(wp)   ::   z_frc_vol, z_frc_sal, z_bg_grme  
    6968      real(wp)   ::   z1_area                     !    -     - 
    70       real(wp)   ::   zinda, zindb 
    7169      REAL(wp)   ::   ztmp 
    7270      !!--------------------------------------------------------------------------- 
     
    7876      z1_area = 1._wp / MAX( glob_sum( area(:,:) * tms(:,:) ), epsi06 ) 
    7977 
    80       zinda = MAX( 0._wp , SIGN( 1._wp , glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) ) 
     78      rswitch = MAX( 0._wp , SIGN( 1._wp , glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) ) 
    8179      ! ----------------------- ! 
    8280      ! 1 -  Content variations ! 
     
    9290 
    9391      ! Volume 
    94       ztmp = zinda * z1_area * r1_rau0 * rday 
     92      ztmp = rswitch * z1_area * r1_rau0 * rday 
    9593      zbg_vfx     = ztmp * glob_sum(     emp(:,:) * area(:,:) * tms(:,:) ) 
    9694      zbg_vfx_bog = ztmp * glob_sum( wfx_bog(:,:) * area(:,:) * tms(:,:) ) 
     
    155153      ! 3 - Diagnostics writing ! 
    156154      ! ----------------------- ! 
    157       zindb = MAX( 0._wp , SIGN( 1._wp , zbg_ivo - epsi06 ) ) 
     155      rswitch = MAX( 0._wp , SIGN( 1._wp , zbg_ivo - epsi06 ) ) 
    158156      ! 
    159157      IF( iom_use('ibgvoltot') )   & 
     
    164162      CALL iom_put( 'ibgarea'   , zbg_are * 1.e-6                          )   ! ice area   (km2) 
    165163      IF( iom_use('ibgsaline') )   & 
    166       CALL iom_put( 'ibgsaline' , zindb * zbg_sal / MAX( zbg_ivo, epsi06 ) )   ! ice saline (psu) 
     164      CALL iom_put( 'ibgsaline' , rswitch * zbg_sal / MAX( zbg_ivo, epsi06 ) )   ! ice saline (psu) 
    167165      IF( iom_use('ibgtemper') )   & 
    168       CALL iom_put( 'ibgtemper' , zindb * zbg_tem / MAX( zbg_ivo, epsi06 ) )   ! ice temper (C) 
     166      CALL iom_put( 'ibgtemper' , rswitch * zbg_tem / MAX( zbg_ivo, epsi06 ) )   ! ice temper (C) 
    169167      CALL iom_put( 'ibgheatco' , zbg_ihc                                  )   ! ice heat content (1.e20 J)         
    170168      CALL iom_put( 'sbgheatco' , zbg_shc                                  )   ! snw heat content (1.e20 J) 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90

    r4924 r4972  
    6464      INTEGER  ::   i_j1, i_jpj       ! Starting/ending j-indices for rheology 
    6565      REAL(wp) ::   zcoef             ! local scalar 
    66       REAL(wp), POINTER, DIMENSION(:)   ::   zind           ! i-averaged indicator of sea-ice 
     66      REAL(wp), POINTER, DIMENSION(:)   ::   zswitch        ! i-averaged indicator of sea-ice 
    6767      REAL(wp), POINTER, DIMENSION(:)   ::   zmsk           ! i-averaged of tmask 
    6868      REAL(wp), POINTER, DIMENSION(:,:) ::   zu_io, zv_io   ! ice-ocean velocity 
     
    7474 
    7575      CALL wrk_alloc( jpi, jpj, zu_io, zv_io ) 
    76       CALL wrk_alloc( jpj, zind, zmsk ) 
     76      CALL wrk_alloc( jpj, zswitch, zmsk ) 
    7777 
    7878      IF( kt == nit000 )   CALL lim_dyn_init   ! Initialization (first time-step only) 
     
    100100            ! 
    101101            DO jj = 1, jpj 
    102                zind(jj) = SUM( 1.0 - at_i(:,jj) )   ! = REAL(jpj) if ocean everywhere on a j-line 
     102               zswitch(jj) = SUM( 1.0 - at_i(:,jj) )   ! = REAL(jpj) if ocean everywhere on a j-line 
    103103               zmsk(jj) = SUM( tmask(:,jj,1)    )   ! = 0         if land  everywhere on a j-line 
    104104            END DO 
     
    110110               i_j1  = njeq 
    111111               i_jpj = jpj 
    112                DO WHILE ( i_j1 <= jpj .AND. zind(i_j1) == FLOAT(jpi) .AND. zmsk(i_j1) /=0 ) 
     112               DO WHILE ( i_j1 <= jpj .AND. zswitch(i_j1) == FLOAT(jpi) .AND. zmsk(i_j1) /=0 ) 
    113113                  i_j1 = i_j1 + 1 
    114114               END DO 
     
    120120               i_j1  =  1 
    121121               i_jpj = njeq 
    122                DO WHILE ( i_jpj >= 1 .AND. zind(i_jpj) == FLOAT(jpi) .AND. zmsk(i_jpj) /=0 ) 
     122               DO WHILE ( i_jpj >= 1 .AND. zswitch(i_jpj) == FLOAT(jpi) .AND. zmsk(i_jpj) /=0 ) 
    123123                  i_jpj = i_jpj - 1 
    124124               END DO 
     
    132132               !                                 ! latitude strip 
    133133               i_j1  = 1 
    134                DO WHILE ( i_j1 <= jpj .AND. zind(i_j1) == FLOAT(jpi) .AND. zmsk(i_j1) /=0 ) 
     134               DO WHILE ( i_j1 <= jpj .AND. zswitch(i_j1) == FLOAT(jpi) .AND. zmsk(i_j1) /=0 ) 
    135135                  i_j1 = i_j1 + 1 
    136136               END DO 
     
    138138 
    139139               i_jpj  = jpj 
    140                DO WHILE ( i_jpj >= 1  .AND. zind(i_jpj) == FLOAT(jpi) .AND. zmsk(i_jpj) /=0 ) 
     140               DO WHILE ( i_jpj >= 1  .AND. zswitch(i_jpj) == FLOAT(jpi) .AND. zmsk(i_jpj) /=0 ) 
    141141                  i_jpj = i_jpj - 1 
    142142               END DO 
     
    221221      ! 
    222222      CALL wrk_dealloc( jpi, jpj, zu_io, zv_io ) 
    223       CALL wrk_dealloc( jpj, zind, zmsk ) 
     223      CALL wrk_dealloc( jpj, zswitch, zmsk ) 
    224224      ! 
    225225      IF( nn_timing == 1 )  CALL timing_stop('limdyn') 
     
    241241      !!------------------------------------------------------------------- 
    242242      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    243       NAMELIST/namicedyn/ epsd, om, cw, angvg, pstar,   & 
     243      NAMELIST/namicedyn/ epsd, om, cw, pstar,   & 
    244244         &                c_rhg, creepl, ecc, ahi0,     & 
    245245         &                nevp, relast, alphaevp, hminrhg 
     
    262262         WRITE(numout,*) '   relaxation constant                              om     = ', om 
    263263         WRITE(numout,*) '   drag coefficient for oceanic stress              cw     = ', cw 
    264          WRITE(numout,*) '   turning angle for oceanic stress                 angvg  = ', angvg 
    265264         WRITE(numout,*) '   first bulk-rheology parameter                    pstar  = ', pstar 
    266265         WRITE(numout,*) '   second bulk-rhelogy parameter                    c_rhg  = ', c_rhg 
     
    274273      ENDIF 
    275274      ! 
    276       IF( angvg /= 0._wp ) THEN 
    277          CALL ctl_warn( 'lim_dyn_init: turning angle for oceanic stress not properly coded for EVP ',   & 
    278             &           '(see limsbc module). We force  angvg = 0._wp'  ) 
    279          angvg = 0._wp 
    280       ENDIF 
    281        
    282275      usecc2 = 1._wp / ( ecc * ecc ) 
    283276      rhoco  = rau0  * cw 
    284       angvg  = angvg * rad 
    285       sangvg = SIN( angvg ) 
    286       cangvg = COS( angvg ) 
    287       pstarh = pstar * 0.5_wp 
    288277 
    289278      ! elastic damping 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r4924 r4972  
    4343   PUBLIC   lim_itd_me_alloc        ! called by iceini.F90 
    4444 
    45    REAL(wp) ::   epsi20 = 1.e-20_wp   ! constant values 
    46    REAL(wp) ::   epsi10 = 1.e-10_wp   ! constant values 
    47    REAL(wp) ::   epsi06 = 1.e-06_wp   ! constant values 
    48  
    4945   !----------------------------------------------------------------------- 
    5046   ! Variables shared among ridging subroutines 
     
    851847      INTEGER ::   ij                ! horizontal index, combines i and j loops 
    852848      INTEGER ::   icells            ! number of cells with aicen > puny 
    853       REAL(wp) ::   zindb    ! local scalar 
    854849      REAL(wp) ::   hL, hR, farea, zdummy, zdummy0, ztmelts    ! left and right limits of integration 
    855850      REAL(wp) ::   zsstK            ! SST in Kelvin 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90

    r4924 r4972  
    4646   PUBLIC   lim_itd_shiftice 
    4747 
    48    REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
    49    REAL(wp) ::   epsi06 = 1.e-6_wp   ! 
    50  
    5148   !!---------------------------------------------------------------------- 
    5249   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2010) 
     
    156153      REAL(wp) ::   zx1, zwk1, zdh0, zetamin, zdamax   ! local scalars 
    157154      REAL(wp) ::   zx2, zwk2, zda0, zetamax           !   -      - 
    158       REAL(wp) ::   zx3,             zareamin, zindb   !   -      - 
     155      REAL(wp) ::   zx3,             zareamin          !   -      - 
    159156      CHARACTER (len = 15) :: fieldid 
    160157 
     
    219216         DO jj = 1, jpj 
    220217            DO ji = 1, jpi 
    221                zindb             = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i(ji,jj,jl) + epsi10 ) )     !0 if no ice and 1 if yes 
    222                ht_i(ji,jj,jl)    = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb 
    223                zindb             = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i_b(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes 
    224                zht_i_b(ji,jj,jl) = v_i_b(ji,jj,jl) / MAX( a_i_b(ji,jj,jl), epsi10 ) * zindb 
     218               rswitch             = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i(ji,jj,jl) + epsi10 ) )     !0 if no ice and 1 if yes 
     219               ht_i(ji,jj,jl)    = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * rswitch 
     220               rswitch             = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i_b(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes 
     221               zht_i_b(ji,jj,jl) = v_i_b(ji,jj,jl) / MAX( a_i_b(ji,jj,jl), epsi10 ) * rswitch 
    225222               IF( a_i(ji,jj,jl) > epsi10 )   zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_b(ji,jj,jl)  
    226223            END DO 
     
    589586      REAL(wp) ::   zdo_aice           ! ice age times volume transferred 
    590587      REAL(wp) ::   zdaTsf             ! aicen*Tsfcn transferred 
    591       REAL(wp) ::   zindsn             ! snow or not 
    592       REAL(wp) ::   zindb              ! ice or not 
    593588 
    594589      INTEGER, POINTER, DIMENSION(:) ::   nind_i, nind_j   ! compressed indices for i/j directions 
     
    717712 
    718713            jl1 = zdonor(ii,ij,jl) 
    719             zindb             = MAX( 0.0 , SIGN( 1.0 , v_i(ii,ij,jl1) - epsi10 ) ) 
    720             zworka(ii,ij)   = zdvice(ii,ij,jl) / MAX(v_i(ii,ij,jl1),epsi10) * zindb 
     714            rswitch             = MAX( 0.0 , SIGN( 1.0 , v_i(ii,ij,jl1) - epsi10 ) ) 
     715            zworka(ii,ij)   = zdvice(ii,ij,jl) / MAX(v_i(ii,ij,jl1),epsi10) * rswitch 
    721716            IF( jl1 == jl) THEN   ;   jl2 = jl1+1 
    722717            ELSE                    ;   jl2 = jl  
     
    814809                  ht_i(ji,jj,jl)  =  v_i   (ji,jj,jl) / a_i(ji,jj,jl)  
    815810                  t_su(ji,jj,jl)  =  zaTsfn(ji,jj,jl) / a_i(ji,jj,jl)  
    816                   zindsn          =  1.0 - MAX(0.0,SIGN(1.0,-v_s(ji,jj,jl)+epsi10)) !0 if no ice and 1 if yes 
     811                  rswitch         =  1.0 - MAX(0.0,SIGN(1.0,-v_s(ji,jj,jl)+epsi10)) !0 if no ice and 1 if yes 
    817812               ELSE 
    818813                  ht_i(ji,jj,jl)  = 0._wp 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90

    r4924 r4972  
    5050   PUBLIC   lim_rhg        ! routine called by lim_dyn (or lim_dyn_2) 
    5151 
    52    REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
    53        
    5452   !! * Substitutions 
    5553#  include "vectopt_loop_substitute.h90" 
     
    119117      CHARACTER (len=50) ::   charout 
    120118      REAL(wp) ::   zt11, zt12, zt21, zt22, ztagnx, ztagny, delta                         ! 
    121       REAL(wp) ::   za, zstms, zsang, zmask   ! local scalars 
     119      REAL(wp) ::   za, zstms, zmask   ! local scalars 
     120      REAL(wp) ::   zc1, zc2, zc3             ! ice mass 
    122121 
    123122      REAL(wp) ::   dtevp              ! time step for subcycling 
     
    125124      REAL(wp) ::   z0, zr, zcca, zccb ! temporary scalars 
    126125      REAL(wp) ::   zu_ice2, zv_ice1   ! 
    127       REAL(wp) ::   zddc, zdtc, zzdst   ! delta on corners and on centre 
     126      REAL(wp) ::   zddc, zdtc         ! delta on corners and on centre 
     127      REAL(wp) ::   zdst               ! shear at the center of the grid point 
    128128      REAL(wp) ::   zdsshx, zdsshy     ! term for the gradient of ocean surface 
    129129      REAL(wp) ::   sigma1, sigma2     ! internal ice stress 
    130130 
    131131      REAL(wp) ::   zresm         ! Maximal error on ice velocity 
    132       REAL(wp) ::   zindb         ! ice (1) or not (0)       
    133132      REAL(wp) ::   zdummy        ! dummy argument 
    134133      REAL(wp) ::   zintb, zintn  ! dummy argument 
     
    140139      REAL(wp), POINTER, DIMENSION(:,:) ::   zcorl1, zcorl2   ! coriolis parameter on U/V points 
    141140      REAL(wp), POINTER, DIMENSION(:,:) ::   za1ct , za2ct    ! temporary arrays 
    142       REAL(wp), POINTER, DIMENSION(:,:) ::   zc1              ! ice mass 
    143       REAL(wp), POINTER, DIMENSION(:,:) ::   zusw             ! temporary weight for ice strength computation 
    144141      REAL(wp), POINTER, DIMENSION(:,:) ::   u_oce1, v_oce1   ! ocean u/v component on U points                            
    145142      REAL(wp), POINTER, DIMENSION(:,:) ::   u_oce2, v_oce2   ! ocean u/v component on V points 
     
    147144      REAL(wp), POINTER, DIMENSION(:,:) ::   zf1   , zf2      ! arrays for internal stresses 
    148145       
    149       REAL(wp), POINTER, DIMENSION(:,:) ::   zdd   , zdt      ! Divergence and tension at centre of grid cells 
     146      REAL(wp), POINTER, DIMENSION(:,:) ::   zdt              ! tension at centre of grid cells 
    150147      REAL(wp), POINTER, DIMENSION(:,:) ::   zds              ! Shear on northeast corner of grid cells 
    151       REAL(wp), POINTER, DIMENSION(:,:) ::   zdst             ! Shear on centre of grid cells 
    152       REAL(wp), POINTER, DIMENSION(:,:) ::   deltat, deltac   ! Delta at centre and corners of grid cells 
    153148      REAL(wp), POINTER, DIMENSION(:,:) ::   zs1   , zs2      ! Diagonal stress tensor components zs1 and zs2  
    154149      REAL(wp), POINTER, DIMENSION(:,:) ::   zs12             ! Non-diagonal stress tensor component zs12 
     
    160155 
    161156      CALL wrk_alloc( jpi,jpj, zpresh, zfrld1, zmass1, zcorl1, za1ct , zpreshc, zfrld2, zmass2, zcorl2, za2ct ) 
    162       CALL wrk_alloc( jpi,jpj, zc1   , u_oce1, u_oce2, u_ice2, zusw  , v_oce1 , v_oce2, v_ice1                ) 
    163       CALL wrk_alloc( jpi,jpj, zf1   , deltat, zu_ice, zf2   , deltac, zv_ice , zdd   , zdt    , zds  , zdst  ) 
    164       CALL wrk_alloc( jpi,jpj, zdd   , zdt   , zds   , zs1   , zs2   , zs12   , zresr , zpice                 ) 
     157      CALL wrk_alloc( jpi,jpj, u_oce1, u_oce2, u_ice2, v_oce1 , v_oce2, v_ice1                ) 
     158      CALL wrk_alloc( jpi,jpj, zf1   , zu_ice, zf2   , zv_ice , zdt    , zds  ) 
     159      CALL wrk_alloc( jpi,jpj, zdt   , zds   , zs1   , zs2   , zs12   , zresr , zpice                 ) 
    165160 
    166161#if  defined key_lim2 && ! defined key_lim2_vp 
     
    179174      ! 
    180175      !------------------------------------------------------------------------------! 
    181       ! 1) Ice-Snow mass (zc1), ice strength (zpresh)                                ! 
     176      ! 1) Ice strength (zpresh)                                ! 
    182177      !------------------------------------------------------------------------------! 
    183178      ! 
    184179      ! Put every vector to 0 
    185       zpresh (:,:) = 0._wp   ;   zc1   (:,:) = 0._wp 
     180      delta_i(:,:) = 0._wp   ; 
     181      zpresh (:,:) = 0._wp   ;   
    186182      zpreshc(:,:) = 0._wp 
    187183      u_ice2 (:,:) = 0._wp   ;   v_ice1(:,:) = 0._wp 
    188       zdd    (:,:) = 0._wp   ;   zdt   (:,:) = 0._wp   ;   zds(:,:) = 0._wp 
     184      divu_i (:,:) = 0._wp   ;   zdt   (:,:) = 0._wp   ;   zds(:,:) = 0._wp 
     185      shear_i(:,:) = 0._wp 
    189186 
    190187#if defined key_lim3 
     
    196193!CDIR NOVERRCHK 
    197194         DO ji = 1 , jpi 
    198             zc1(ji,jj)    = tms(ji,jj) * ( rhosn * vt_s(ji,jj) + rhoic * vt_i(ji,jj) ) 
    199195#if defined key_lim3 
    200196            zpresh(ji,jj) = tms(ji,jj) *  strength(ji,jj) 
     
    218214               &              tms(ji+1,jj)   * wght(ji+1,jj+1,2,1) + & 
    219215               &              tms(ji,jj)     * wght(ji+1,jj+1,1,1) 
    220             zusw(ji,jj)    = 1.0 / MAX( zstms, epsd ) 
    221216            zpreshc(ji,jj) = (  zpresh(ji+1,jj+1) * wght(ji+1,jj+1,2,2) + & 
    222217               &                zpresh(ji,jj+1)   * wght(ji+1,jj+1,1,2) + & 
    223218               &                zpresh(ji+1,jj)   * wght(ji+1,jj+1,2,1) + &  
    224219               &                zpresh(ji,jj)     * wght(ji+1,jj+1,1,1)   & 
    225                &             ) * zusw(ji,jj) 
     220               &             ) / MAX( zstms, epsd ) 
    226221         END DO 
    227222      END DO 
     
    265260         DO ji = fs_2, fs_jpim1 
    266261 
     262            zc1 = tms(ji  ,jj  ) * ( rhosn * vt_s(ji  ,jj  ) + rhoic * vt_i(ji  ,jj  ) ) 
     263            zc2 = tms(ji+1,jj  ) * ( rhosn * vt_s(ji+1,jj  ) + rhoic * vt_i(ji+1,jj  ) ) 
     264            zc3 = tms(ji  ,jj+1) * ( rhosn * vt_s(ji  ,jj+1) + rhoic * vt_i(ji  ,jj+1) ) 
     265 
    267266            zt11 = tms(ji  ,jj) * e1t(ji  ,jj) 
    268267            zt12 = tms(ji+1,jj) * e1t(ji+1,jj) 
     
    275274 
    276275            ! Mass, coriolis coeff. and currents 
    277             zmass1(ji,jj) = ( zt12*zc1(ji,jj) + zt11*zc1(ji+1,jj) ) / (zt11+zt12+epsd) 
    278             zmass2(ji,jj) = ( zt22*zc1(ji,jj) + zt21*zc1(ji,jj+1) ) / (zt21+zt22+epsd) 
     276            zmass1(ji,jj) = ( zt12*zc1 + zt11*zc2 ) / (zt11+zt12+epsd) 
     277            zmass2(ji,jj) = ( zt22*zc1 + zt21*zc3 ) / (zt21+zt22+epsd) 
    279278            zcorl1(ji,jj) = zmass1(ji,jj) * ( e1t(ji+1,jj)*fcor(ji,jj) + e1t(ji,jj)*fcor(ji+1,jj) )   & 
    280279               &                          / ( e1t(ji,jj) + e1t(ji+1,jj) + epsd ) 
     
    344343               !   
    345344               !- Divergence, tension and shear (Section a. Appendix B of Hunke & Dukowicz, 2002) 
    346                !- zdd(:,:), zdt(:,:): divergence and tension at centre of grid cells 
     345               !- divu_i(:,:), zdt(:,:): divergence and tension at centre of grid cells 
    347346               !- zds(:,:): shear on northeast corner of grid cells 
    348347               ! 
     
    353352               !                      bugs (Martin, for Miguel). 
    354353               ! 
    355                !- ALSO: arrays zdd, zdt, zds and delta could  
     354               !- ALSO: arrays zdt, zds and delta could  
    356355               !  be removed in the future to minimise memory demand. 
    357356               ! 
     
    361360               ! 
    362361               ! 
    363                zdd(ji,jj) = ( e2u(ji,jj)*u_ice(ji,jj)                      & 
    364                   &          -e2u(ji-1,jj)*u_ice(ji-1,jj)                  & 
    365                   &          +e1v(ji,jj)*v_ice(ji,jj)                      & 
    366                   &          -e1v(ji,jj-1)*v_ice(ji,jj-1)                  & 
    367                   &          )                                             & 
    368                   &         / area(ji,jj) 
     362               divu_i(ji,jj) = ( e2u(ji,jj)*u_ice(ji,jj)                      & 
     363                  &             -e2u(ji-1,jj)*u_ice(ji-1,jj)                  & 
     364                  &             +e1v(ji,jj)*v_ice(ji,jj)                      & 
     365                  &             -e1v(ji,jj-1)*v_ice(ji,jj-1)                  & 
     366                  &             )                                             & 
     367                  &            / area(ji,jj) 
    369368 
    370369               zdt(ji,jj) = ( ( u_ice(ji,jj)/e2u(ji,jj)                    & 
     
    408407 
    409408               !- Calculate Delta at centre of grid cells 
    410                zzdst      = (  e2u(ji  , jj) * v_ice1(ji  ,jj)          & 
     409               zdst      = (  e2u(ji  , jj) * v_ice1(ji  ,jj)          & 
    411410                  &          - e2u(ji-1, jj) * v_ice1(ji-1,jj)          & 
    412411                  &          + e1v(ji, jj  ) * u_ice2(ji,jj  )          & 
     
    415414                  &         / area(ji,jj) 
    416415 
    417                delta = SQRT( zdd(ji,jj)*zdd(ji,jj) + ( zdt(ji,jj)*zdt(ji,jj) + zzdst*zzdst ) * usecc2 )   
    418                ! MV rewriting 
    419                ! deltat(ji,jj) = MAX( SQRT(zdd(ji,jj)**2 + (zdt(ji,jj)**2 + zzdst**2)*usecc2), creepl ) 
    420                !!gm faster to replace the line above with simply: 
    421                !!                deltat(ji,jj) = MAX( delta, creepl ) 
    422                !!gm end   
    423                deltat(ji,jj) = delta + creepl 
    424                ! END MV 
     416               delta = SQRT( divu_i(ji,jj)*divu_i(ji,jj) + ( zdt(ji,jj)*zdt(ji,jj) + zdst*zdst ) * usecc2 )   
     417               delta_i(ji,jj) = delta + creepl 
    425418               !-Calculate stress tensor components zs1 and zs2  
    426419               !-at centre of grid cells (see section 3.5 of CICE user's guide). 
    427                !zs1(ji,jj) = ( zs1(ji,jj) - dtotel*( ( 1._wp - alphaevp) * zs1(ji,jj) +   & 
    428                !   &          ( delta / deltat(ji,jj) - zdd(ji,jj) / deltat(ji,jj) ) * zpresh(ji,jj) ) )  &        
    429                !   &          / ( 1._wp + alphaevp * dtotel ) 
    430  
    431                !zs2(ji,jj) = ( zs2(ji,jj) - dtotel * ( ( 1._wp - alphaevp ) * ecc2 * zs2(ji,jj) -   & 
    432                !              zdt(ji,jj) / deltat(ji,jj) * zpresh(ji,jj) ) )   & 
    433                !   &          / ( 1._wp + alphaevp * ecc2 * dtotel ) 
    434  
    435                ! new formulation from S. Bouillon to help stabilizing the code (no need of alphaevp) 
    436                zs1(ji,jj) = ( zs1(ji,jj) + dtotel * ( ( zdd(ji,jj) / deltat(ji,jj) - delta / deltat(ji,jj) )  & 
     420               zs1(ji,jj) = ( zs1(ji,jj) + dtotel * ( ( divu_i(ji,jj) / delta_i(ji,jj) - delta / delta_i(ji,jj) )  & 
    437421                  &         * zpresh(ji,jj) ) ) / ( 1._wp + dtotel ) 
    438                zs2(ji,jj) = ( zs2(ji,jj) + dtotel * ( ecci * zdt(ji,jj) / deltat(ji,jj) * zpresh(ji,jj) ) )  & 
     422               zs2(ji,jj) = ( zs2(ji,jj) + dtotel * ( ecci * zdt(ji,jj) / delta_i(ji,jj) * zpresh(ji,jj) ) )  & 
    439423                  &         / ( 1._wp + dtotel ) 
    440424 
     
    468452                  &        / ( e1f(ji,jj) * e2f(ji,jj) ) 
    469453 
    470                deltac(ji,jj) = SQRT(zddc**2+(zdtc**2+zds(ji,jj)**2)*usecc2) + creepl 
     454               zddc = SQRT(zddc**2+(zdtc**2+zds(ji,jj)**2)*usecc2) + creepl 
    471455 
    472456               !-Calculate stress tensor component zs12 at corners (see section 3.5 of CICE user's guide). 
    473                !zs12(ji,jj) = ( zs12(ji,jj) - dtotel * ( (1.0-alphaevp) * ecc2 * zs12(ji,jj) - zds(ji,jj) /  & 
    474                !   &          ( 2._wp * deltac(ji,jj) ) * zpreshc(ji,jj) ) )  & 
    475                !   &          / ( 1._wp + alphaevp * ecc2 * dtotel )  
    476  
    477                ! new formulation from S. Bouillon to help stabilizing the code (no need of alphaevp) 
    478457               zs12(ji,jj) = ( zs12(ji,jj) + dtotel *  & 
    479                   &          ( ecci * zds(ji,jj) / ( 2._wp * deltac(ji,jj) ) * zpreshc(ji,jj) ) )  & 
     458                  &          ( ecci * zds(ji,jj) / ( 2._wp * zddc ) * zpreshc(ji,jj) ) )  & 
    480459                  &          / ( 1.0 + dtotel )  
    481460 
     
    513492               DO ji = fs_2, fs_jpim1 
    514493                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass1(ji,jj))))*tmu(ji,jj) 
    515                   zsang        = SIGN ( 1.0 , fcor(ji,jj) ) * sangvg 
    516494                  z0           = zmass1(ji,jj)/dtevp 
    517495 
     
    523501                     (zv_ice1-v_oce1(ji,jj))**2) * (1.0-zfrld1(ji,jj)) 
    524502                  zr           = z0*u_ice(ji,jj) + zf1(ji,jj) + za1ct(ji,jj) + & 
    525                      za*(cangvg*u_oce1(ji,jj)-zsang*v_oce1(ji,jj)) 
    526                   zcca         = z0+za*cangvg 
    527                   zccb         = zcorl1(ji,jj)+za*zsang 
     503                     za*(u_oce1(ji,jj)) 
     504                  zcca         = z0+za 
     505                  zccb         = zcorl1(ji,jj) 
    528506                  u_ice(ji,jj) = (zr+zccb*zv_ice1)/(zcca+epsd)*zmask  
    529507 
     
    536514#endif 
    537515#if defined key_bdy 
    538          ! clem: change u_ice and v_ice at the boundary for each iteration 
    539516         CALL bdy_ice_lim_dyn( 'U' ) 
    540517#endif          
     
    546523 
    547524                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass2(ji,jj))))*tmv(ji,jj) 
    548                   zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    549525                  z0           = zmass2(ji,jj)/dtevp 
    550526                  ! SB modif because ocean has no slip boundary condition 
     
    555531                     (v_ice(ji,jj)-v_oce2(ji,jj))**2)*(1.0-zfrld2(ji,jj)) 
    556532                  zr           = z0*v_ice(ji,jj) + zf2(ji,jj) + & 
    557                      za2ct(ji,jj) + za*(cangvg*v_oce2(ji,jj)+zsang*u_oce2(ji,jj)) 
    558                   zcca         = z0+za*cangvg 
    559                   zccb         = zcorl2(ji,jj)+za*zsang 
     533                     za2ct(ji,jj) + za*(v_oce2(ji,jj)) 
     534                  zcca         = z0+za 
     535                  zccb         = zcorl2(ji,jj) 
    560536                  v_ice(ji,jj) = (zr-zccb*zu_ice2)/(zcca+epsd)*zmask 
    561537 
     
    568544#endif 
    569545#if defined key_bdy 
    570          ! clem: change u_ice and v_ice at the boundary for each iteration 
    571546         CALL bdy_ice_lim_dyn( 'V' ) 
    572547#endif          
     
    578553               DO ji = fs_2, fs_jpim1 
    579554                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass2(ji,jj))))*tmv(ji,jj) 
    580                   zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    581555                  z0           = zmass2(ji,jj)/dtevp 
    582556                  ! SB modif because ocean has no slip boundary condition 
     
    588562                     (v_ice(ji,jj)-v_oce2(ji,jj))**2)*(1.0-zfrld2(ji,jj)) 
    589563                  zr           = z0*v_ice(ji,jj) + zf2(ji,jj) + & 
    590                      za2ct(ji,jj) + za*(cangvg*v_oce2(ji,jj)+zsang*u_oce2(ji,jj)) 
    591                   zcca         = z0+za*cangvg 
    592                   zccb         = zcorl2(ji,jj)+za*zsang 
     564                     za2ct(ji,jj) + za*(v_oce2(ji,jj)) 
     565                  zcca         = z0+za 
     566                  zccb         = zcorl2(ji,jj) 
    593567                  v_ice(ji,jj) = (zr-zccb*zu_ice2)/(zcca+epsd)*zmask 
    594568 
     
    601575#endif 
    602576#if defined key_bdy 
    603          ! clem: change u_ice and v_ice at the boundary for each iteration 
    604577         CALL bdy_ice_lim_dyn( 'V' ) 
    605578#endif          
     
    610583               DO ji = fs_2, fs_jpim1 
    611584                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass1(ji,jj))))*tmu(ji,jj) 
    612                   zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    613585                  z0           = zmass1(ji,jj)/dtevp 
    614                   ! SB modif because ocean has no slip boundary condition 
    615                   ! GG Bug 
    616                   !                   zv_ice1       = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji+1,jj)      & 
    617                   !                      &                 +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji,jj))   & 
    618                   !                      &               /(e1t(ji+1,jj)+e1t(ji,jj)) * tmu(ji,jj) 
    619586                  zv_ice1       = 0.5*( (v_ice(ji,jj)+v_ice(ji,jj-1))*e1t(ji,jj)      & 
    620587                     &                 +(v_ice(ji+1,jj)+v_ice(ji+1,jj-1))*e1t(ji+1,jj))   & 
     
    624591                     (zv_ice1-v_oce1(ji,jj))**2)*(1.0-zfrld1(ji,jj)) 
    625592                  zr           = z0*u_ice(ji,jj) + zf1(ji,jj) + za1ct(ji,jj) + & 
    626                      za*(cangvg*u_oce1(ji,jj)-zsang*v_oce1(ji,jj)) 
    627                   zcca         = z0+za*cangvg 
    628                   zccb         = zcorl1(ji,jj)+za*zsang 
     593                     za*(u_oce1(ji,jj)) 
     594                  zcca         = z0+za 
     595                  zccb         = zcorl1(ji,jj) 
    629596                  u_ice(ji,jj) = (zr+zccb*zv_ice1)/(zcca+epsd)*zmask  
    630597               END DO ! ji 
     
    636603#endif 
    637604#if defined key_bdy 
    638          ! clem: change u_ice and v_ice at the boundary for each iteration 
    639605         CALL bdy_ice_lim_dyn( 'U' ) 
    640606#endif          
     
    666632!CDIR NOVERRCHK 
    667633         DO ji = fs_2, fs_jpim1 
    668             zindb  = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - epsi10 ) )  
    669             !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , epsi10 ) 
    670634            zdummy = vt_i(ji,jj) 
    671635            IF ( zdummy .LE. hminrhg ) THEN 
     
    683647#endif 
    684648#if defined key_bdy 
    685       ! clem: change u_ice and v_ice at the boundary 
    686649      CALL bdy_ice_lim_dyn( 'U' ) 
    687650      CALL bdy_ice_lim_dyn( 'V' ) 
     
    690653      DO jj = k_j1+1, k_jpj-1  
    691654         DO ji = fs_2, fs_jpim1 
    692             zindb  = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - epsi10 ) )  
    693             !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , epsi10 ) 
    694655            zdummy = vt_i(ji,jj) 
    695656            IF ( zdummy .LE. hminrhg ) THEN 
     
    713674!CDIR NOVERRCHK 
    714675         DO ji = fs_2, jpim1   !RB bug no vect opt due to tmi 
    715             !- zdd(:,:), zdt(:,:): divergence and tension at centre  
     676            !- divu_i(:,:), zdt(:,:): divergence and tension at centre  
    716677            !- zds(:,:): shear on northeast corner of grid cells 
    717             zindb  = MAX( 0.0, SIGN( 1.0, at_i(ji,jj) - epsi10 ) )  
    718             !zdummy = zindb * vt_i(ji,jj) / MAX(at_i(ji,jj) , epsi10 ) 
    719678            zdummy = vt_i(ji,jj) 
    720679            IF ( zdummy .LE. hminrhg ) THEN 
    721680 
    722                zdd(ji,jj) = ( e2u(ji,jj)*u_ice(ji,jj)                      & 
    723                   &          -e2u(ji-1,jj)*u_ice(ji-1,jj)                  & 
    724                   &          +e1v(ji,jj)*v_ice(ji,jj)                      & 
    725                   &          -e1v(ji,jj-1)*v_ice(ji,jj-1)                  & 
    726                   &         )                                              & 
    727                   &         / area(ji,jj) 
     681               divu_i(ji,jj) = ( e2u(ji,jj)*u_ice(ji,jj)                      & 
     682                  &             -e2u(ji-1,jj)*u_ice(ji-1,jj)                  & 
     683                  &             +e1v(ji,jj)*v_ice(ji,jj)                      & 
     684                  &             -e1v(ji,jj-1)*v_ice(ji,jj-1)                  & 
     685                  &            )                                              & 
     686                  &            / area(ji,jj) 
    728687 
    729688               zdt(ji,jj) = ( ( u_ice(ji,jj)/e2u(ji,jj)                    & 
     
    747706                  &        * tmi(ji+1,jj) * tmi(ji+1,jj+1) 
    748707 
    749                zdst(ji,jj) = (  e2u( ji  , jj   ) * v_ice1(ji  ,jj  )    & 
     708               zdst = (  e2u( ji  , jj   ) * v_ice1(ji  ,jj  )    & 
    750709                  &           - e2u( ji-1, jj   ) * v_ice1(ji-1,jj  )    & 
    751710                  &           + e1v( ji  , jj   ) * u_ice2(ji  ,jj  )    & 
    752711                  &           - e1v( ji  , jj-1 ) * u_ice2(ji  ,jj-1)  ) / area(ji,jj) 
    753712 
    754 !              deltat(ji,jj) = SQRT(    zdd(ji,jj)*zdd(ji,jj)   &  
    755 !                  &                 + ( zdt(ji,jj)*zdt(ji,jj) + zdst(ji,jj)*zdst(ji,jj) ) * usecc2 &  
    756 !                  &                          ) + creepl 
    757                ! MV rewriting 
    758                delta = SQRT( zdd(ji,jj)*zdd(ji,jj) + ( zdt(ji,jj)*zdt(ji,jj) + zdst(ji,jj)*zdst(ji,jj) ) * usecc2 )   
    759                deltat(ji,jj) = delta + creepl 
    760                ! END MV 
     713               delta = SQRT( divu_i(ji,jj)*divu_i(ji,jj) + ( zdt(ji,jj)*zdt(ji,jj) + zdst*zdst ) * usecc2 )   
     714               delta_i(ji,jj) = delta + creepl 
    761715             
    762716            ENDIF ! zdummy 
     
    773727      DO jj = k_j1+1, k_jpj-1 
    774728         DO ji = fs_2, fs_jpim1 
    775             divu_i (ji,jj) = zdd   (ji,jj) 
    776             delta_i(ji,jj) = deltat(ji,jj) 
    777729            ! begin TECLIM change  
    778             zdst(ji,jj)= (  e2u( ji  , jj   ) * v_ice1(ji,jj)           &    
     730            zdst= (  e2u( ji  , jj   ) * v_ice1(ji,jj)           &    
    779731               &          - e2u( ji-1, jj   ) * v_ice1(ji-1,jj)         &    
    780732               &          + e1v( ji  , jj   ) * u_ice2(ji,jj)           &    
    781733               &          - e1v( ji  , jj-1 ) * u_ice2(ji,jj-1) ) / area(ji,jj)  
    782             shear_i(ji,jj) = SQRT( zdt(ji,jj) * zdt(ji,jj) + zdst(ji,jj) * zdst(ji,jj) ) 
     734            shear_i(ji,jj) = SQRT( zdt(ji,jj) * zdt(ji,jj) + zdst * zdst ) 
    783735            ! end TECLIM change 
    784736         END DO 
     
    834786      ! 
    835787      CALL wrk_dealloc( jpi,jpj, zpresh, zfrld1, zmass1, zcorl1, za1ct , zpreshc, zfrld2, zmass2, zcorl2, za2ct ) 
    836       CALL wrk_dealloc( jpi,jpj, zc1   , u_oce1, u_oce2, u_ice2, zusw  , v_oce1 , v_oce2, v_ice1                ) 
    837       CALL wrk_dealloc( jpi,jpj, zf1   , deltat, zu_ice, zf2   , deltac, zv_ice , zdd   , zdt    , zds  , zdst  ) 
    838       CALL wrk_dealloc( jpi,jpj, zdd   , zdt   , zds   , zs1   , zs2   , zs12   , zresr , zpice                 ) 
     788      CALL wrk_dealloc( jpi,jpj, u_oce1, u_oce2, u_ice2, v_oce1 , v_oce2, v_ice1                ) 
     789      CALL wrk_dealloc( jpi,jpj, zf1   , zu_ice, zf2   , zv_ice , zdt    , zds  ) 
     790      CALL wrk_dealloc( jpi,jpj, zdt   , zds   , zs1   , zs2   , zs12   , zresr , zpice                 ) 
    839791 
    840792   END SUBROUTINE lim_rhg 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90

    r4924 r4972  
    308308      INTEGER :: ji, jj, jk, jl, indx 
    309309      REAL(wp) ::   zfice, ziter 
    310       REAL(wp) ::   zs_inf, z_slope_s, zsmax, zsmin, zalpha, zindb   ! local scalars used for the salinity profile 
    311       REAL(wp), POINTER, DIMENSION(:)  ::   zs_zero  
     310      REAL(wp) ::   zs_inf, z_slope_s, zsmax, zsmin, zalpha   ! local scalars used for the salinity profile 
     311      REAL(wp), POINTER, DIMENSION(:)   ::   zs_zero  
    312312      REAL(wp), POINTER, DIMENSION(:,:) ::   z2d 
    313313      CHARACTER(len=15) ::   znam 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r4967 r4972  
    5050   PUBLIC   lim_sbc_flx    ! called by sbc_ice_lim 
    5151   PUBLIC   lim_sbc_tau    ! called by sbc_ice_lim 
    52  
    53    REAL(wp)  ::   epsi10 = 1.e-10   ! 
    54    REAL(wp)  ::   epsi20 = 1.e-20   ! 
    5552 
    5653   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   utau_oce, vtau_oce   ! air-ocean surface i- & j-stress     [N/m2] 
     
    108105      INTEGER  ::   ji, jj, jl, jk                                  ! dummy loop indices 
    109106      ! 
    110       REAL(wp) ::   zinda, zemp                                     !  local scalars 
     107      REAL(wp) ::   zemp                                            !  local scalars 
    111108      REAL(wp) ::   zf_mass                                         ! Heat flux associated with mass exchange ice->ocean (W.m-2) 
    112109      REAL(wp) ::   zfcm1                                           ! New solar flux received by the ocean 
     
    131128            !      heat flux at the ocean surface      ! 
    132129            !------------------------------------------! 
    133             zinda   = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( 1._wp - pfrld(ji,jj) ) ) ) ! 1 if ice 
    134  
    135130            ! Solar heat flux reaching the ocean = zfcm1 (W.m-2)  
    136131            !--------------------------------------------------- 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r4946 r4972  
    5050   PUBLIC   lim_thd        ! called by limstp module 
    5151   PUBLIC   lim_thd_init   ! called by iceini module 
    52  
    53    REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
    5452 
    5553   !! * Substitutions 
     
    8987      REAL(wp) :: zfric_umin = 0._wp        ! lower bound for the friction velocity (cice value=5.e-04) 
    9088      REAL(wp) :: zch        = 0.0057_wp    ! heat transfer coefficient 
    91       REAL(wp) :: zinda, zindb, zareamin  
     89      REAL(wp) :: zareamin  
    9290      REAL(wp) :: zfric_u, zqld, zqfr 
    9391      ! 
     
    103101      IF( ln_limdiahsb ) CALL lim_cons_hsm(0, 'limthd', zvi_b, zsmv_b, zei_b, zfw_b, zfs_b, zft_b) 
    104102 
    105       !------------------------------------------------------------------------------! 
    106       ! 1) Initialization of diagnostic variables                                    ! 
    107       !------------------------------------------------------------------------------! 
     103      !------------------------------------------------------------------------! 
     104      ! 1) Initialization of some variables                                    ! 
     105      !------------------------------------------------------------------------! 
     106      ftr_ice(:,:,:) = 0._wp  ! part of solar radiation transmitted through the ice 
     107 
    108108 
    109109      !-------------------- 
     
    116116               DO ji = 1, jpi 
    117117                  !0 if no ice and 1 if yes 
    118                   zindb = 1.0 - MAX(  0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 )  ) 
     118                  rswitch = 1.0 - MAX(  0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 )  ) 
    119119                  !Energy of melting q(S,T) [J.m-3] 
    120                   e_i(ji,jj,jk,jl) = zindb * e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i ) 
     120                  e_i(ji,jj,jk,jl) = rswitch * e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i ) 
    121121                  !convert units ! very important that this line is here         
    122122                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac  
     
    128128               DO ji = 1, jpi 
    129129                  !0 if no ice and 1 if yes 
    130                   zindb = 1.0 - MAX(  0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) + epsi10 )  ) 
     130                  rswitch = 1.0 - MAX(  0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) + epsi10 )  ) 
    131131                  !Energy of melting q(S,T) [J.m-3] 
    132                   e_s(ji,jj,jk,jl) = zindb * e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL( nlay_s ) 
     132                  e_s(ji,jj,jk,jl) = rswitch * e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL( nlay_s ) 
    133133                  !convert units ! very important that this line is here 
    134134                  e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac  
     
    165165!CDIR NOVERRCHK 
    166166         DO ji = 1, jpi 
    167             zinda          = tms(ji,jj) * ( 1._wp - MAX( 0._wp , SIGN( 1._wp , - at_i(ji,jj) + epsi10 ) ) ) ! 0 if no ice 
     167            rswitch          = tms(ji,jj) * ( 1._wp - MAX( 0._wp , SIGN( 1._wp , - at_i(ji,jj) + epsi10 ) ) ) ! 0 if no ice 
    168168            ! 
    169169            !           !  solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 
     
    201201               fhld (ji,jj) = zqld * r1_rdtice / at_i(ji,jj) ! divided by at_i since this is (re)multiplied by a_i in limthd_dh.F90 
    202202               qlead(ji,jj) = 0._wp 
     203            ELSE 
     204               fhld (ji,jj) = 0._wp 
    203205            ENDIF 
    204206            ! 
     
    206208            !clem zfric_u        = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin ) 
    207209            zfric_u      = MAX( SQRT( ust2s(ji,jj) ), zfric_umin )  
    208             fhtur(ji,jj) = MAX( 0._wp, zinda * rau0 * rcp * zch  * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ) ! W.m-2  
     210            fhtur(ji,jj) = MAX( 0._wp, rswitch * rau0 * rcp * zch  * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ) ! W.m-2  
    209211            ! upper bound for fhtur: we do not want SST to drop below Tfreeze.  
    210212            ! So we say that the heat retrieved from the ocean (fhtur+fhld) must be < to the heat necessary to reach Tfreeze (zqfr)    
    211213            ! This is not a clean budget, so that should be corrected at some point 
    212             fhtur(ji,jj) = zinda * MIN( fhtur(ji,jj), - fhld(ji,jj) - zqfr * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 
     214            fhtur(ji,jj) = rswitch * MIN( fhtur(ji,jj), - fhld(ji,jj) - zqfr * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) 
    213215 
    214216            ! ----------------------------------------- 
     
    418420               CALL tab_1d_2d( nbpb, sfx_sni       , npb, sfx_sni_1d(1:nbpb)   , jpi, jpj ) 
    419421               CALL tab_1d_2d( nbpb, sfx_res       , npb, sfx_res_1d(1:nbpb)   , jpi, jpj ) 
    420             ! 
    421             IF( num_sal == 2 ) THEN 
    422422               CALL tab_1d_2d( nbpb, sfx_bri       , npb, sfx_bri_1d(1:nbpb)   , jpi, jpj ) 
    423             ENDIF 
    424423 
    425424              CALL tab_1d_2d( nbpb, hfx_thd       , npb, hfx_thd_1d(1:nbpb)   , jpi, jpj ) 
     
    436435              CALL tab_1d_2d( nbpb, hfx_err_rem   , npb, hfx_err_rem_1d(1:nbpb)   , jpi, jpj ) 
    437436            ! 
    438             !+++++       temporary stuff for a dummy version 
    439               CALL tab_1d_2d( nbpb, dh_i_surf2D, npb, dh_i_surf(1:nbpb)      , jpi, jpj ) 
    440               CALL tab_1d_2d( nbpb, dh_i_bott2D, npb, dh_i_bott(1:nbpb)      , jpi, jpj ) 
    441               CALL tab_1d_2d( nbpb, s_i_newice , npb, s_i_new  (1:nbpb)      , jpi, jpj ) 
    442               CALL tab_1d_2d( nbpb, izero(:,:,jl) , npb, i0    (1:nbpb)      , jpi, jpj ) 
    443             !+++++ 
    444437              CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) 
    445438              CALL tab_1d_2d( nbpb, ftr_ice(:,:,jl), npb, ftr_ice_1d(1:nbpb) , jpi, jpj ) 
     
    536529      !! 
    537530      INTEGER  ::   ji, jk   ! dummy loop indices 
    538       REAL(wp) ::   ztmelts, zswitch, zaaa, zbbb, zccc, zdiscrim  ! local scalar  
     531      REAL(wp) ::   ztmelts, zaaa, zbbb, zccc, zdiscrim  ! local scalar  
    539532      !!------------------------------------------------------------------- 
    540533      ! Recover ice temperature 
     
    547540            zccc          =  lfus * ( ztmelts - rtt ) 
    548541            zdiscrim      =  SQRT( MAX( zbbb * zbbb - 4._wp * zaaa * zccc, 0._wp ) ) 
    549             t_i_1d(ji,jk)  =  rtt - ( zbbb + zdiscrim ) / ( 2._wp * zaaa ) 
     542            t_i_1d(ji,jk) =  rtt - ( zbbb + zdiscrim ) / ( 2._wp * zaaa ) 
    550543             
    551544            ! mask temperature 
    552             zswitch      =  1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) )  
    553             t_i_1d(ji,jk) =  zswitch * t_i_1d(ji,jk) + ( 1._wp - zswitch ) * rtt 
     545            rswitch       =  1._wp - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) )  
     546            t_i_1d(ji,jk) =  rswitch * t_i_1d(ji,jk) + ( 1._wp - rswitch ) * rtt 
    554547         END DO  
    555548      END DO  
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r4946 r4972  
    3232   PUBLIC   lim_thd_dh   ! called by lim_thd 
    3333 
    34    REAL(wp) ::   epsi20 = 1.e-20   ! constant values 
    35    REAL(wp) ::   epsi10 = 1.e-10   ! 
    36  
    3734   !!---------------------------------------------------------------------- 
    3835   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2010) 
     
    111108 
    112109      ! mass and salt flux (clem) 
    113       REAL(wp) :: zdvres, zswitch_sal, zswitch 
     110      REAL(wp) :: zdvres, zswitch_sal 
    114111 
    115112      ! Heat conservation  
    116113      INTEGER  ::   num_iter_max 
    117       REAL(wp) ::   zinda, zindq, zindh  
    118       REAL(wp), POINTER, DIMENSION(:) ::   zintermelt   ! debug 
    119114 
    120115      !!------------------------------------------------------------------ 
     
    128123      CALL wrk_alloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_1cat, zq_rema ) 
    129124      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
    130       CALL wrk_alloc( jpij, zintermelt ) 
    131125      CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) 
    132126      CALL wrk_alloc( jpij, icount ) 
     
    147141      zh_i      (:,:) = 0._wp        
    148142      zdeltah   (:,:) = 0._wp        
    149       zintermelt(:)   = 0._wp 
    150143      icount    (:)   = 0 
    151144 
     
    165158      ! 
    166159      DO ji = kideb, kiut 
    167          zinda         = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) 
    168          ztmelts       = zinda * rtt + ( 1._wp - zinda ) * rtt 
     160         rswitch       = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) 
     161         ztmelts       = rswitch * rtt + ( 1._wp - rswitch ) * rtt 
    169162 
    170163         zfdum      = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji)  
     
    254247         ! thickness change 
    255248         IF( zdh_s_pre(ji) > 0._wp ) THEN 
    256          zindq          = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zqprec(ji) + epsi20 ) ) 
    257          zdh_s_mel (ji) = - zindq * zq_su(ji) / MAX( zqprec(ji) , epsi20 ) 
     249         rswitch        = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zqprec(ji) + epsi20 ) ) 
     250         zdh_s_mel (ji) = - rswitch * zq_su(ji) / MAX( zqprec(ji) , epsi20 ) 
    258251         zdh_s_mel (ji) = MAX( - zdh_s_pre(ji), zdh_s_mel(ji) ) ! bound melting  
    259252         ! heat used to melt snow (W.m-2, >0) 
     
    275268         DO ji = kideb, kiut 
    276269            ! thickness change 
    277             zindh            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )  
    278             zindq            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_1d(ji,jk) + epsi20 ) )  
    279             zdeltah  (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 
     270            rswitch          = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )  
     271            rswitch          = rswitch * ( 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_1d(ji,jk) + epsi20 ) ) )  
     272            zdeltah  (ji,jk) = - rswitch * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 
    280273            zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji) ) ! bound melting 
    281274            zdh_s_mel(ji)    = zdh_s_mel(ji) + zdeltah(ji,jk)     
     
    331324      DO jk = 1, nlay_s 
    332325         DO ji = kideb,kiut 
    333             zindh  =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) + epsi20 )  ) 
    334             q_s_1d(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_1d(ji), epsi20 ) *             & 
     326            rswitch       =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) + epsi20 )  ) 
     327            q_s_1d(ji,jk) = ( 1._wp - rswitch ) / MAX( ht_s_1d(ji), epsi20 ) *             & 
    335328              &            ( (   MAX( 0._wp, dh_s_tot(ji) )              ) * zqprec(ji) +  & 
    336329              &              ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_1d(ji) ) * rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) ) 
     
    382375            !    => icount=0 : no layer has vanished 
    383376            !    => icount=5 : 5 layers have vanished 
    384             zindh       = NINT( MAX( 0._wp , SIGN( 1._wp , - ( zh_i(ji,jk) + zdeltah(ji,jk) ) ) ) )  
    385             icount(ji)  = icount(ji) + zindh 
     377            rswitch     = MAX( 0._wp , SIGN( 1._wp , - ( zh_i(ji,jk) + zdeltah(ji,jk) ) ) )  
     378            icount(ji)  = icount(ji) + NINT( rswitch ) 
    386379            zh_i(ji,jk) = MAX( 0._wp , zh_i(ji,jk) + zdeltah(ji,jk) ) 
    387380 
     
    515508 
    516509               IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 
    517                   zintermelt(ji)    = 1._wp 
    518510 
    519511                  zEi               = - q_i_1d(ji,jk) / rhoic        ! Specific enthalpy of melting ice (J/kg, <0) 
     
    602594! 
    603595!               ! excessive energy is sent to lateral ablation 
    604 !               zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) ) 
    605 !               zq_1cat(ji) =  zinda * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0 
     596!               rswitch = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) ) 
     597!               zq_1cat(ji) =  rswitch * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0 
    606598! 
    607599!               ! correct salt and mass fluxes 
     
    668660         ! new salinity difference stored (to be used in limthd_ent.F90) 
    669661         IF (  num_sal == 2  ) THEN 
    670             zswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi10 ) ) 
     662            rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi10 ) ) 
    671663            ! salinity dif due to snow-ice formation 
    672             dsm_i_si_1d(ji) = ( zs_snic - sm_i_1d(ji) ) * dh_snowice(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch      
     664            dsm_i_si_1d(ji) = ( zs_snic - sm_i_1d(ji) ) * dh_snowice(ji) / MAX( ht_i_1d(ji), epsi10 ) * rswitch      
    673665            ! salinity dif due to bottom growth  
    674666            IF (  zf_tt(ji)  < 0._wp ) THEN 
    675                dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_1d(ji) ) * dh_i_bott(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch 
     667               dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_1d(ji) ) * dh_i_bott(ji) / MAX( ht_i_1d(ji), epsi10 ) * rswitch 
    676668            ENDIF 
    677669         ENDIF 
     
    710702      !clem bug: we should take snow into account here 
    711703      DO ji = kideb, kiut 
    712          zindh    =  1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) )  
    713          t_su_1d(ji) =  zindh * t_su_1d(ji) + ( 1.0 - zindh ) * rtt 
     704         rswitch     =  1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) )  
     705         t_su_1d(ji) =  rswitch * t_su_1d(ji) + ( 1.0 - rswitch ) * rtt 
    714706      END DO  ! ji 
    715707 
     
    717709         DO ji = kideb,kiut 
    718710            ! mask enthalpy 
    719             zinda        =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) )  ) 
    720             q_s_1d(ji,jk) = ( 1.0 - zinda ) * q_s_1d(ji,jk) 
     711            rswitch       =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) )  ) 
     712            q_s_1d(ji,jk) = ( 1.0 - rswitch ) * q_s_1d(ji,jk) 
    721713            ! recalculate t_s_1d from q_s_1d 
    722             t_s_1d(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
     714            t_s_1d(ji,jk) = rtt + ( 1._wp - rswitch ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
    723715         END DO 
    724716      END DO 
     
    726718      CALL wrk_dealloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_1cat, zq_rema ) 
    727719      CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
    728       CALL wrk_dealloc( jpij, zintermelt ) 
    729720      CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) 
    730721      CALL wrk_dealloc( jpij, icount ) 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r4964 r4972  
    3232   PUBLIC   lim_thd_dif   ! called by lim_thd 
    3333 
    34    REAL(wp) ::   epsi10 = 1.e-10_wp    ! 
    3534   !!---------------------------------------------------------------------- 
    3635   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     
    141140      REAL(wp), POINTER, DIMENSION(:,:) ::   ztsb        ! Temporary temperature in the snow 
    142141      REAL(wp), POINTER, DIMENSION(:,:) ::   z_s         ! Vertical cotes of the layers in the snow 
    143       REAL(wp), POINTER, DIMENSION(:,:) ::   zindterm    ! Independent term 
    144       REAL(wp), POINTER, DIMENSION(:,:) ::   zindtbis    ! temporary independent term 
     142      REAL(wp), POINTER, DIMENSION(:,:) ::   zswiterm    ! Independent term 
     143      REAL(wp), POINTER, DIMENSION(:,:) ::   zswitbis    ! temporary independent term 
    145144      REAL(wp), POINTER, DIMENSION(:,:) ::   zdiagbis 
    146145      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrid     ! tridiagonal system terms 
     
    154153      CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0) 
    155154      CALL wrk_alloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) 
    156       CALL wrk_alloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis  ) 
     155      CALL wrk_alloc( jpij, nlay_i+3, zswiterm, zswitbis, zdiagbis  ) 
    157156      CALL wrk_alloc( jpij, nlay_i+3, 3, ztrid ) 
    158157 
     
    438437               ztrid(ji,numeq,2) = 0. 
    439438               ztrid(ji,numeq,3) = 0. 
    440                zindterm(ji,numeq)= 0. 
    441                zindtbis(ji,numeq)= 0. 
     439               zswiterm(ji,numeq)= 0. 
     440               zswitbis(ji,numeq)= 0. 
    442441               zdiagbis(ji,numeq)= 0. 
    443442            ENDDO 
     
    451450                  zkappa_i(ji,jk)) 
    452451               ztrid(ji,numeq,3)  =  - zeta_i(ji,jk)*zkappa_i(ji,jk) 
    453                zindterm(ji,numeq) =  ztib(ji,jk) + zeta_i(ji,jk)* & 
     452               zswiterm(ji,numeq) =  ztib(ji,jk) + zeta_i(ji,jk)* & 
    454453                  zradab_i(ji,jk) 
    455454            END DO 
     
    463462               +  zkappa_i(ji,nlay_i-1) ) 
    464463            ztrid(ji,numeq,3)  =  0.0 
    465             zindterm(ji,numeq) =  ztib(ji,nlay_i) + zeta_i(ji,nlay_i)* & 
     464            zswiterm(ji,numeq) =  ztib(ji,nlay_i) + zeta_i(ji,nlay_i)* & 
    466465               ( zradab_i(ji,nlay_i) + zkappa_i(ji,nlay_i)*zg1 & 
    467466               *  t_bo_1d(ji) )  
     
    483482                     zkappa_s(ji,jk) ) 
    484483                  ztrid(ji,numeq,3)   =  - zeta_s(ji,jk)*zkappa_s(ji,jk) 
    485                   zindterm(ji,numeq)  =  ztsb(ji,jk) + zeta_s(ji,jk)* & 
     484                  zswiterm(ji,numeq)  =  ztsb(ji,jk) + zeta_s(ji,jk)* & 
    486485                     zradab_s(ji,jk) 
    487486               END DO 
     
    490489               IF ( nlay_i.eq.1 ) THEN 
    491490                  ztrid(ji,nlay_s+2,3)    =  0.0 
    492                   zindterm(ji,nlay_s+2)   =  zindterm(ji,nlay_s+2) + zkappa_i(ji,1)* & 
     491                  zswiterm(ji,nlay_s+2)   =  zswiterm(ji,nlay_s+2) + zkappa_i(ji,1)* & 
    493492                     t_bo_1d(ji)  
    494493               ENDIF 
     
    507506                  ztrid(ji,1,2) = dzf(ji) - zg1s*zkappa_s(ji,0) 
    508507                  ztrid(ji,1,3) = zg1s*zkappa_s(ji,0) 
    509                   zindterm(ji,1) = dzf(ji)*t_su_1d(ji)   - zf(ji) 
     508                  zswiterm(ji,1) = dzf(ji)*t_su_1d(ji)   - zf(ji) 
    510509 
    511510                  !!first layer of snow equation 
     
    513512                  ztrid(ji,2,2)  =  1.0 + zeta_s(ji,1)*(zkappa_s(ji,1) + zkappa_s(ji,0)*zg1s) 
    514513                  ztrid(ji,2,3)  =  - zeta_s(ji,1)* zkappa_s(ji,1) 
    515                   zindterm(ji,2) =  ztsb(ji,1) + zeta_s(ji,1)*zradab_s(ji,1) 
     514                  zswiterm(ji,2) =  ztsb(ji,1) + zeta_s(ji,1)*zradab_s(ji,1) 
    516515 
    517516               ELSE  
     
    530529                     zkappa_s(ji,0) * zg1s ) 
    531530                  ztrid(ji,2,3)  =  - zeta_s(ji,1)*zkappa_s(ji,1)  
    532                   zindterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1) *            & 
     531                  zswiterm(ji,2) = ztsb(ji,1) + zeta_s(ji,1) *            & 
    533532                     ( zradab_s(ji,1) +                         & 
    534533                     zkappa_s(ji,0) * zg1s * t_su_1d(ji) )  
     
    554553                  ztrid(ji,numeqmin(ji),2)   =  dzf(ji) - zkappa_i(ji,0)*zg1     
    555554                  ztrid(ji,numeqmin(ji),3)   =  zkappa_i(ji,0)*zg1 
    556                   zindterm(ji,numeqmin(ji))  =  dzf(ji)*t_su_1d(ji) - zf(ji) 
     555                  zswiterm(ji,numeqmin(ji))  =  dzf(ji)*t_su_1d(ji) - zf(ji) 
    557556 
    558557                  !!first layer of ice equation 
     
    561560                     + zkappa_i(ji,0) * zg1 ) 
    562561                  ztrid(ji,numeqmin(ji)+1,3) =  - zeta_i(ji,1)*zkappa_i(ji,1)   
    563                   zindterm(ji,numeqmin(ji)+1)=  ztib(ji,1) + zeta_i(ji,1)*zradab_i(ji,1)   
     562                  zswiterm(ji,numeqmin(ji)+1)=  ztib(ji,1) + zeta_i(ji,1)*zradab_i(ji,1)   
    564563 
    565564                  !!case of only one layer in the ice (surface & ice equations are altered) 
     
    574573                     ztrid(ji,numeqmin(ji)+1,3)  =  0.0 
    575574 
    576                      zindterm(ji,numeqmin(ji)+1) =  ztib(ji,1) + zeta_i(ji,1)* & 
     575                     zswiterm(ji,numeqmin(ji)+1) =  ztib(ji,1) + zeta_i(ji,1)* & 
    577576                        ( zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji) ) 
    578577                  ENDIF 
     
    594593                     zg1)   
    595594                  ztrid(ji,numeqmin(ji),3)      =  - zeta_i(ji,1) * zkappa_i(ji,1) 
    596                   zindterm(ji,numeqmin(ji))     =  ztib(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + & 
     595                  zswiterm(ji,numeqmin(ji))     =  ztib(ji,1) + zeta_i(ji,1)*( zradab_i(ji,1) + & 
    597596                     zkappa_i(ji,0) * zg1 * t_su_1d(ji) )  
    598597 
     
    603602                        zkappa_i(ji,1)) 
    604603                     ztrid(ji,numeqmin(ji),3)  =  0.0 
    605                      zindterm(ji,numeqmin(ji)) =  ztib(ji,1) + zeta_i(ji,1)* & 
     604                     zswiterm(ji,numeqmin(ji)) =  ztib(ji,1) + zeta_i(ji,1)* & 
    606605                        (zradab_i(ji,1) + zkappa_i(ji,1)*t_bo_1d(ji)) & 
    607606                        + t_su_1d(ji)*zeta_i(ji,1)*zkappa_i(ji,0)*2.0 
     
    627626 
    628627         DO ji = kideb , kiut 
    629             zindtbis(ji,numeqmin(ji)) =  zindterm(ji,numeqmin(ji)) 
     628            zswitbis(ji,numeqmin(ji)) =  zswiterm(ji,numeqmin(ji)) 
    630629            zdiagbis(ji,numeqmin(ji)) =  ztrid(ji,numeqmin(ji),2) 
    631630            minnumeqmin               =  MIN(numeqmin(ji),minnumeqmin) 
     
    638637               zdiagbis(ji,numeq)  =  ztrid(ji,numeq,2) - ztrid(ji,numeq,1)* & 
    639638                  ztrid(ji,numeq-1,3)/zdiagbis(ji,numeq-1) 
    640                zindtbis(ji,numeq)  =  zindterm(ji,numeq) - ztrid(ji,numeq,1)* & 
    641                   zindtbis(ji,numeq-1)/zdiagbis(ji,numeq-1) 
     639               zswitbis(ji,numeq)  =  zswiterm(ji,numeq) - ztrid(ji,numeq,1)* & 
     640                  zswitbis(ji,numeq-1)/zdiagbis(ji,numeq-1) 
    642641            END DO 
    643642         END DO 
     
    645644         DO ji = kideb , kiut 
    646645            ! ice temperatures 
    647             t_i_1d(ji,nlay_i)    =  zindtbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji)) 
     646            t_i_1d(ji,nlay_i)    =  zswitbis(ji,numeqmax(ji))/zdiagbis(ji,numeqmax(ji)) 
    648647         END DO 
    649648 
     
    651650            DO ji = kideb , kiut 
    652651               jk    =  numeq - nlay_s - 1 
    653                t_i_1d(ji,jk)  =  (zindtbis(ji,numeq) - ztrid(ji,numeq,3)* & 
     652               t_i_1d(ji,jk)  =  (zswitbis(ji,numeq) - ztrid(ji,numeq,3)* & 
    654653                  t_i_1d(ji,jk+1))/zdiagbis(ji,numeq) 
    655654            END DO 
     
    659658            ! snow temperatures       
    660659            IF (ht_s_1d(ji).GT.0._wp) & 
    661                t_s_1d(ji,nlay_s)     =  (zindtbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 
     660               t_s_1d(ji,nlay_s)     =  (zswitbis(ji,nlay_s+1) - ztrid(ji,nlay_s+1,3) & 
    662661               *  t_i_1d(ji,1))/zdiagbis(ji,nlay_s+1) & 
    663662               *        MAX(0.0,SIGN(1.0,ht_s_1d(ji)))  
     
    667666            ztsubit(ji) = t_su_1d(ji) 
    668667            IF( t_su_1d(ji) < ztfs(ji) ) & 
    669                t_su_1d(ji) = ( zindtbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_1d(ji,1)   & 
     668               t_su_1d(ji) = ( zswitbis(ji,numeqmin(ji)) - ztrid(ji,numeqmin(ji),3)* ( REAL( isnow(ji) )*t_s_1d(ji,1)   & 
    670669               &          + REAL( 1 - isnow(ji) )*t_i_1d(ji,1) ) ) / zdiagbis(ji,numeqmin(ji))   
    671670         END DO 
     
    780779         &              ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart = 0 ) 
    781780      CALL wrk_dealloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart = 0 ) 
    782       CALL wrk_dealloc( jpij, nlay_i+3, zindterm, zindtbis, zdiagbis ) 
     781      CALL wrk_dealloc( jpij, nlay_i+3, zswiterm, zswitbis, zdiagbis ) 
    783782      CALL wrk_dealloc( jpij, nlay_i+3, 3, ztrid ) 
    784783      CALL wrk_dealloc( jpij, zdq, zq_ini, zhfx_err ) 
     
    797796      ! 
    798797      INTEGER  ::   ji, jk   ! dummy loop indices 
    799       REAL(wp) ::   ztmelts, zindb  ! local scalar  
     798      REAL(wp) ::   ztmelts  ! local scalar  
    800799      !!------------------------------------------------------------------- 
    801800      ! 
     
    803802         DO ji = kideb, kiut 
    804803            ztmelts      = - tmut  * s_i_1d(ji,jk) + rtt  
    805             zindb        = MAX( 0._wp , SIGN( 1._wp , -(t_i_1d(ji,jk) - rtt) - epsi10 ) ) 
     804            rswitch      = MAX( 0._wp , SIGN( 1._wp , -(t_i_1d(ji,jk) - rtt) - epsi10 ) ) 
    806805            q_i_1d(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_1d(ji,jk) )                                             & 
    807                &                   + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_1d(ji,jk)-rtt, -epsi10 ) )   & 
     806               &                   + lfus * ( 1.0 - rswitch * ( ztmelts-rtt ) / MIN( t_i_1d(ji,jk)-rtt, -epsi10 ) )   & 
    808807               &                   - rcp  *                 ( ztmelts-rtt )  )  
    809808         END DO 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_ent.F90

    r4924 r4972  
    3838   PUBLIC   lim_thd_ent         ! called by limthd and limthd_lac 
    3939 
    40    REAL(wp) :: epsi20 = 1.e-20   ! constant values 
    41    REAL(wp) :: epsi10 = 1.e-10   ! constant values 
    42  
    4340   !!---------------------------------------------------------------------- 
    4441   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     
    7976      INTEGER  :: ji         !  dummy loop indices 
    8077      INTEGER  :: jk0, jk1   !  old/new layer indices 
    81       REAL(wp) :: zswitch 
    8278      ! 
    8379      REAL(wp), POINTER, DIMENSION(:,:) :: zqh_cum0, zh_cum0   ! old cumulative enthlapies and layers interfaces 
     
    137133      DO jk1 = 1, nlay_i 
    138134         DO ji = kideb, kiut 
    139             zswitch      = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zhnew(ji) + epsi10 ) )  
    140             qnew(ji,jk1) = zswitch * ( zqh_cum1(ji,jk1) - zqh_cum1(ji,jk1-1) ) / MAX( zhnew(ji), epsi10 ) 
     135            rswitch      = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zhnew(ji) + epsi10 ) )  
     136            qnew(ji,jk1) = rswitch * ( zqh_cum1(ji,jk1) - zqh_cum1(ji,jk1-1) ) / MAX( zhnew(ji), epsi10 ) 
    141137         ENDDO 
    142138      ENDDO 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90

    r4946 r4972  
    3737 
    3838   PUBLIC lim_thd_lac     ! called by lim_thd 
    39  
    40    REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
    41    REAL(wp) ::   epsi20 = 1.e-20_wp   ! 
    4239 
    4340   !!---------------------------------------------------------------------- 
     
    7774      INTEGER ::   nbpac            ! local integers  
    7875      INTEGER ::   ii, ij, iter     !   -       - 
    79       REAL(wp)  ::   ztmelts, zdv, zfrazb, zweight, zindb, zinda, zde  ! local scalars 
     76      REAL(wp)  ::   ztmelts, zdv, zfrazb, zweight, zde                         ! local scalars 
    8077      REAL(wp) ::   zgamafr, zvfrx, zvgx, ztaux, ztwogp, zf , zhicol_new        !   -      - 
    8178      REAL(wp) ::   ztenagm, zvfry, zvgy, ztauy, zvrel2, zfp, zsqcd , zhicrit   !   -      - 
     
    132129               DO ji = 1, jpi 
    133130                  !Energy of melting q(S,T) [J.m-3] 
    134                   zindb = 1._wp - MAX(  0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) + epsi10 )  )   !0 if no ice and 1 if yes 
    135                   e_i(ji,jj,jk,jl) = zindb * e_i(ji,jj,jk,jl) & 
     131                  rswitch          = 1._wp - MAX(  0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) + epsi10 )  )   !0 if no ice and 1 if yes 
     132                  e_i(ji,jj,jk,jl) = rswitch * e_i(ji,jj,jk,jl) & 
    136133                      &   / ( area(ji,jj) * MAX( v_i(ji,jj,jl) ,  epsi10 ) ) * REAL( nlay_i, wp ) 
    137134                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac 
     
    189186                  ! Frazil ice velocity 
    190187                  !--------------------- 
    191                   zindb = MAX( 0._wp, SIGN( 1._wp , ztenagm - epsi10 ) ) 
    192                   zvfrx = zindb * zgamafr * zsqcd * ztaux / MAX( ztenagm, epsi10 ) 
    193                   zvfry = zindb * zgamafr * zsqcd * ztauy / MAX( ztenagm, epsi10 ) 
     188                  rswitch = MAX( 0._wp, SIGN( 1._wp , ztenagm - epsi10 ) ) 
     189                  zvfrx   = rswitch * zgamafr * zsqcd * ztaux / MAX( ztenagm, epsi10 ) 
     190                  zvfry   = rswitch * zgamafr * zsqcd * ztauy / MAX( ztenagm, epsi10 ) 
    194191 
    195192                  !------------------- 
     
    197194                  !------------------- 
    198195                  ! C-grid ice velocity 
    199                   zindb = MAX(  0._wp, SIGN( 1._wp , at_i(ji,jj) )  ) 
    200                   zvgx  = zindb * (  u_ice(ji-1,jj  ) * tmu(ji-1,jj  )    & 
    201                      &             + u_ice(ji,jj    ) * tmu(ji  ,jj  )  ) * 0.5_wp 
    202                   zvgy  = zindb * (  v_ice(ji  ,jj-1) * tmv(ji  ,jj-1)    & 
    203                      &             + v_ice(ji,jj    ) * tmv(ji  ,jj  )  ) * 0.5_wp 
     196                  rswitch = MAX(  0._wp, SIGN( 1._wp , at_i(ji,jj) )  ) 
     197                  zvgx    = rswitch * ( u_ice(ji-1,jj  ) * tmu(ji-1,jj  )  + u_ice(ji,jj) * tmu(ji,jj) ) * 0.5_wp 
     198                  zvgy    = rswitch * ( v_ice(ji  ,jj-1) * tmv(ji  ,jj-1)  + v_ice(ji,jj) * tmv(ji,jj) ) * 0.5_wp 
    204199 
    205200                  !----------------------------------- 
     
    391386 
    392387            ! A fraction zfrazb of frazil ice is accreted at the ice bottom 
    393             zinda         = 1._wp - MAX( 0._wp, SIGN( 1._wp , - zat_i_1d(ji) ) ) 
    394             zfrazb        = zinda * ( TANH ( Cfrazb * ( zvrel_1d(ji) - vfrazb ) ) + 1.0 ) * 0.5 * maxfrazb 
     388            rswitch       = 1._wp - MAX( 0._wp, SIGN( 1._wp , - zat_i_1d(ji) ) ) 
     389            zfrazb        = rswitch * ( TANH ( Cfrazb * ( zvrel_1d(ji) - vfrazb ) ) + 1.0 ) * 0.5 * maxfrazb 
    395390            zv_frazb(ji)  =         zfrazb   * zv_newice(ji) 
    396391            zv_newice(ji) = ( 1.0 - zfrazb ) * zv_newice(ji) 
     
    447442            DO ji = 1, nbpac 
    448443               jl = jcat(ji) 
    449                zinda = MAX( 0._wp, SIGN( 1._wp , zv_i_1d(ji,jl) - epsi20 ) ) 
     444               rswitch = MAX( 0._wp, SIGN( 1._wp , zv_i_1d(ji,jl) - epsi20 ) ) 
    450445               ze_i_1d(ji,jk,jl) = zswinew(ji)   *   ze_newice(ji) +                                                      & 
    451446                  &        ( 1.0 - zswinew(ji) ) * ( ze_newice(ji) * zv_newice(ji) + ze_i_1d(ji,jk,jl) * zv_b(ji,jl) )  & 
    452                   &        * zinda / MAX( zv_i_1d(ji,jl), epsi20 ) 
     447                  &        * rswitch / MAX( zv_i_1d(ji,jl), epsi20 ) 
    453448            END DO 
    454449         END DO 
     
    471466            ! new volumes including lateral/bottom accretion + residual 
    472467            DO ji = 1, nbpac 
    473                zinda          = MAX( 0._wp, SIGN( 1._wp , zat_i_1d(ji) - epsi20 ) ) 
    474                zv_newfra      = zinda * ( zdv_res(ji) + zv_frazb(ji) ) * za_i_1d(ji,jl) / MAX( zat_i_1d(ji) , epsi20 ) 
    475                za_i_1d(ji,jl) = zinda * za_i_1d(ji,jl)                
     468               rswitch        = MAX( 0._wp, SIGN( 1._wp , zat_i_1d(ji) - epsi20 ) ) 
     469               zv_newfra      = rswitch * ( zdv_res(ji) + zv_frazb(ji) ) * za_i_1d(ji,jl) / MAX( zat_i_1d(ji) , epsi20 ) 
     470               za_i_1d(ji,jl) = rswitch * za_i_1d(ji,jl)                
    476471               zv_i_1d(ji,jl) = zv_i_1d(ji,jl) + zv_newfra 
    477472               ! for remapping 
     
    488483         DO jl = 1, jpl 
    489484            DO ji = 1, nbpac 
    490                zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - za_i_1d(ji,jl) + epsi20 ) )  ! 0 if no ice and 1 if yes 
    491                zoa_i_1d(ji,jl)  = za_b(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * zindb    
     485               rswitch          = 1._wp - MAX( 0._wp , SIGN( 1._wp , - za_i_1d(ji,jl) + epsi20 ) )  ! 0 if no ice and 1 if yes 
     486               zoa_i_1d(ji,jl)  = za_b(ji,jl) * zoa_i_1d(ji,jl) / MAX( za_i_1d(ji,jl) , epsi20 ) * rswitch    
    492487            END DO  
    493488         END DO    
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limtrp.F90

    r4963 r4972  
    3737   PUBLIC   lim_trp    ! called by ice_step 
    3838 
    39    REAL(wp)  ::   epsi10 = 1.e-10_wp   
    40    REAL(wp)  ::   epsi20 = 1.e-20_wp   
    41  
    4239   !! * Substitution 
    4340#  include "vectopt_loop_substitute.h90" 
     
    6562      INTEGER  ::   ji, jj, jk, jl, jn      ! dummy loop indices 
    6663      INTEGER  ::   initad                  ! number of sub-timestep for the advection 
    67       INTEGER  ::   ierr                    ! error status 
    68       REAL(wp) ::   zindb  , zindsn , zindic, zindh, zinda      ! local scalar 
    69       REAL(wp) ::   zcfl , zusnit                 !   -      - 
    70       REAL(wp) ::   zsal   , zage          !   -      - 
     64      REAL(wp) ::   zcfl , zusnit           !   -      - 
    7165      ! 
    7266      REAL(wp), POINTER, DIMENSION(:,:)      ::   zui_u, zvi_v, zsm, zs0at, zs0ow 
    7367      REAL(wp), POINTER, DIMENSION(:,:,:)    ::   zs0ice, zs0sn, zs0a, zs0c0 , zs0sm , zs0oi 
    7468      REAL(wp), POINTER, DIMENSION(:,:,:,:)  ::   zs0e 
    75       ! mass and salt flux (clem) 
    76       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zviold, zvsold   ! old ice volume... 
    77       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zaiold, zhimax   ! old ice concentration and thickness 
    78       REAL(wp), POINTER, DIMENSION(:,:)   ::   zeiold, zesold   ! old enthalpies 
     69      REAL(wp), POINTER, DIMENSION(:,:,:)    ::   zviold, zvsold   ! old ice volume... 
     70      REAL(wp), POINTER, DIMENSION(:,:,:)    ::   zaiold, zhimax   ! old ice concentration and thickness 
     71      REAL(wp), POINTER, DIMENSION(:,:)      ::   zeiold, zesold   ! old enthalpies 
    7972      REAL(wp) :: zdv, zda, zvi, zvs, zsmv, zes, zei 
    8073      ! 
     
    341334            DO jj = 1, jpj 
    342335               DO ji = 1, jpi 
    343                   zindb= MAX( 0._wp , SIGN( 1._wp, zs0a(ji,jj,jl) - epsi10 ) ) 
     336                  rswitch = MAX( 0._wp , SIGN( 1._wp, zs0a(ji,jj,jl) - epsi10 ) ) 
    344337 
    345338                  zvi  = zs0ice(ji,jj,jl) 
     
    349342                  ! 
    350343                  ! Remove very small areas 
    351                   v_s(ji,jj,jl)   = zindb * zs0sn (ji,jj,jl)  
    352                   v_i(ji,jj,jl)   = zindb * zs0ice(ji,jj,jl) 
    353                   a_i(ji,jj,jl)   = zindb * zs0a  (ji,jj,jl) 
    354                   e_s(ji,jj,1,jl) = zindb * zs0c0 (ji,jj,jl)       
     344                  v_s(ji,jj,jl)   = rswitch * zs0sn (ji,jj,jl)  
     345                  v_i(ji,jj,jl)   = rswitch * zs0ice(ji,jj,jl) 
     346                  a_i(ji,jj,jl)   = rswitch * zs0a  (ji,jj,jl) 
     347                  e_s(ji,jj,1,jl) = rswitch * zs0c0 (ji,jj,jl)       
    355348                  ! Ice salinity and age 
    356349                  IF(  num_sal == 2  ) THEN 
    357350                     smv_i(ji,jj,jl) = MAX( MIN( s_i_max * v_i(ji,jj,jl), zsmv ), s_i_min * v_i(ji,jj,jl) ) 
    358351                  ENDIF 
    359                   oa_i(ji,jj,jl) = MAX( zindb * zs0oi(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ), 0._wp ) * a_i(ji,jj,jl) 
     352                  oa_i(ji,jj,jl) = MAX( rswitch * zs0oi(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ), 0._wp ) * a_i(ji,jj,jl) 
    360353 
    361354                 ! Update fluxes 
     
    372365               DO jj = 1, jpj 
    373366                  DO ji = 1, jpi 
    374                      zindb            = MAX( 0._wp , SIGN( 1._wp, zs0a(ji,jj,jl) - epsi10 ) ) 
     367                     rswitch          = MAX( 0._wp , SIGN( 1._wp, zs0a(ji,jj,jl) - epsi10 ) ) 
    375368                     zei              = zs0e(ji,jj,jk,jl)       
    376                      e_i(ji,jj,jk,jl) = zindb * MAX( 0._wp, zs0e(ji,jj,jk,jl) ) 
     369                     e_i(ji,jj,jk,jl) = rswitch * MAX( 0._wp, zs0e(ji,jj,jk,jl) ) 
    377370                     ! Update fluxes 
    378371                     hfx_res(ji,jj) = hfx_res(ji,jj) + ( e_i(ji,jj,jk,jl) - zei ) * unit_fac / area(ji,jj) * r1_rdtice ! W.m-2 <0 
     
    397390                     !zda = a_i(ji,jj,jl) - zaiold(ji,jj,jl)    
    398391                      
    399                      zindh = 1._wp 
     392                     rswitch = 1._wp 
    400393                     IF ( ( zdv > 0.0 .AND. ht_i(ji,jj,jl) > zhimax(ji,jj,jl) .AND. SUM( zaiold(ji,jj,1:jpl) ) < 0.80 ) .OR. & 
    401394                        & ( zdv < 0.0 .AND. ht_i(ji,jj,jl) > zhimax(ji,jj,jl) ) ) THEN                                           
    402395                        ht_i(ji,jj,jl) = MIN( zhimax(ji,jj,jl), hi_max(jl) ) 
    403                         zindh   = MAX( 0._wp, SIGN( 1._wp, ht_i(ji,jj,jl) - epsi20 ) ) 
    404                         a_i(ji,jj,jl)  = zindh * v_i(ji,jj,jl) / MAX( ht_i(ji,jj,jl), epsi20 ) 
     396                        rswitch        = MAX( 0._wp, SIGN( 1._wp, ht_i(ji,jj,jl) - epsi20 ) ) 
     397                        a_i(ji,jj,jl)  = rswitch * v_i(ji,jj,jl) / MAX( ht_i(ji,jj,jl), epsi20 ) 
    405398                     ELSE 
    406399                        ht_i(ji,jj,jl) = MAX( MIN( ht_i(ji,jj,jl), hi_max(jl) ), hi_max(jl-1) ) 
    407                         zindh   = MAX( 0._wp, SIGN( 1._wp, ht_i(ji,jj,jl) - epsi20 ) ) 
    408                         a_i(ji,jj,jl)  = zindh * v_i(ji,jj,jl) / MAX( ht_i(ji,jj,jl), epsi20 ) 
     400                        rswitch        = MAX( 0._wp, SIGN( 1._wp, ht_i(ji,jj,jl) - epsi20 ) ) 
     401                        a_i(ji,jj,jl)  = rswitch * v_i(ji,jj,jl) / MAX( ht_i(ji,jj,jl), epsi20 ) 
    409402                     ENDIF 
    410403 
    411                      ! small correction due to *zindh for a_i 
    412                      v_i  (ji,jj,jl) = zindh * v_i  (ji,jj,jl) 
    413                      v_s  (ji,jj,jl) = zindh * v_s  (ji,jj,jl) 
    414                      smv_i(ji,jj,jl) = zindh * smv_i(ji,jj,jl) 
    415                      e_s(ji,jj,1,jl) = zindh * e_s(ji,jj,1,jl) 
    416                      e_i(ji,jj,1:nlay_i,jl) = zindh * e_i(ji,jj,1:nlay_i,jl) 
     404                     ! small correction due to *rswitch for a_i 
     405                     v_i  (ji,jj,jl) = rswitch * v_i  (ji,jj,jl) 
     406                     v_s  (ji,jj,jl) = rswitch * v_s  (ji,jj,jl) 
     407                     smv_i(ji,jj,jl) = rswitch * smv_i(ji,jj,jl) 
     408                     e_s(ji,jj,1,jl) = rswitch * e_s(ji,jj,1,jl) 
     409                     e_i(ji,jj,1:nlay_i,jl) = rswitch * e_i(ji,jj,1:nlay_i,jl) 
    417410 
    418411                     ! Update mass fluxes 
     
    422415                     hfx_res(ji,jj) = hfx_res(ji,jj) + ( e_s(ji,jj,1,jl) - zes ) * unit_fac / area(ji,jj) * r1_rdtice ! W.m-2 <0 
    423416                     hfx_res(ji,jj) = hfx_res(ji,jj) + ( SUM( e_i(ji,jj,1:nlay_i,jl) ) - zei ) * unit_fac / area(ji,jj) * r1_rdtice ! W.m-2 <0 
    424  
    425417                  ENDIF 
    426  
    427                   diag_trp_vi(ji,jj) = diag_trp_vi(ji,jj) + ( v_i(ji,jj,jl) - zviold(ji,jj,jl) ) * r1_rdtice 
    428                   diag_trp_vs(ji,jj) = diag_trp_vs(ji,jj) + ( v_s(ji,jj,jl) - zvsold(ji,jj,jl) ) * r1_rdtice 
    429  
    430418               END DO 
    431419            END DO 
     
    438426               diag_trp_ei(ji,jj) = ( SUM( e_i(ji,jj,1:nlay_i,:) ) - zeiold(ji,jj) ) / area(ji,jj) * unit_fac * r1_rdtice 
    439427               diag_trp_es(ji,jj) = ( SUM( e_s(ji,jj,1:nlay_s,:) ) - zesold(ji,jj) ) / area(ji,jj) * unit_fac * r1_rdtice 
    440             END DO 
    441          END DO 
    442  
    443          ! --- agglomerate variables (clem) ----------------- 
     428 
     429               diag_trp_vi(ji,jj) = SUM( v_i(ji,jj,:) - zviold(ji,jj,:) ) * r1_rdtice 
     430               diag_trp_vs(ji,jj) = SUM( v_s(ji,jj,:) - zvsold(ji,jj,:) ) * r1_rdtice 
     431            END DO 
     432         END DO 
     433 
     434         ! --- agglomerate variables ----------------- 
    444435         vt_i (:,:) = 0._wp 
    445436         vt_s (:,:) = 0._wp 
     
    462453            DO ji = 1, jpi 
    463454               ! open water = 1 if at_i=0 
    464                zindb        = MAX( 0._wp , SIGN( 1._wp, - at_i(ji,jj) ) ) 
    465                ato_i(ji,jj) = zindb + (1._wp - zindb ) * zs0ow(ji,jj) 
     455               rswitch      = MAX( 0._wp , SIGN( 1._wp, - at_i(ji,jj) ) ) 
     456               ato_i(ji,jj) = rswitch + (1._wp - rswitch ) * zs0ow(ji,jj) 
    466457            END DO 
    467458         END DO       
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limupdate1.F90

    r4924 r4972  
    5050   PUBLIC   lim_update1   ! routine called by ice_step 
    5151 
    52       REAL(wp)  ::   epsi10 = 1.e-10_wp   !    -       - 
    53           
    5452   !! * Substitutions 
    5553#  include "vectopt_loop_substitute.h90" 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limupdate2.F90

    r4924 r4972  
    4747   PUBLIC   lim_update2   ! routine called by ice_step 
    4848 
    49    REAL(wp)  ::   epsi10 = 1.e-10_wp   !    -       - 
    50    REAL(wp)  ::   epsi20 = 1.e-20_wp    
    51        
    5249   !! * Substitutions 
    5350#  include "vectopt_loop_substitute.h90" 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90

    r4924 r4972  
    6666   PUBLIC   lim_var_salprof1d    ! 
    6767 
    68    REAL(wp) ::   epsi10 = 1.e-10_wp   !    -       - 
    69  
    7068   !!---------------------------------------------------------------------- 
    7169   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     
    9290      ! 
    9391      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    94       REAL(wp) ::   zinda, zindb 
    9592      !!------------------------------------------------------------------ 
    9693 
     
    111108               at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration 
    112109               ! 
    113                zinda = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) )  
    114                icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , epsi10 ) * zinda  ! ice thickness 
     110               rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) )  
     111               icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , epsi10 ) * rswitch  ! ice thickness 
    115112            END DO 
    116113         END DO 
     
    132129            DO jj = 1, jpj 
    133130               DO ji = 1, jpi 
    134                   zinda = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) )  
    135                   zindb = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) )  
    136131                  et_s(ji,jj)  = et_s(ji,jj)  + e_s(ji,jj,1,jl)                                       ! snow heat content 
    137                   smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi10 ) * zinda   ! ice salinity 
    138                   ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , epsi10 ) * zindb   ! ice age 
     132                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) )  
     133                  smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi10 ) * rswitch   ! ice salinity 
     134                  rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) )  
     135                  ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , epsi10 ) * rswitch   ! ice age 
    139136               END DO 
    140137            END DO 
     
    161158      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    162159      REAL(wp) ::   zq_i, zaaa, zbbb, zccc, zdiscrim     ! local scalars 
    163       REAL(wp) ::   ztmelts, zindb, zq_s, zfac1, zfac2   !   -      - 
     160      REAL(wp) ::   ztmelts, zq_s, zfac1, zfac2   !   -      - 
    164161      !!------------------------------------------------------------------ 
    165162 
     
    170167         DO jj = 1, jpj 
    171168            DO ji = 1, jpi 
    172                zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) + epsi10 ) )   !0 if no ice and 1 if yes 
    173                ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * zindb 
    174                ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * zindb 
    175                o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * zindb 
     169               rswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) + epsi10 ) )   !0 if no ice and 1 if yes 
     170               ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
     171               ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
     172               o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
    176173            END DO 
    177174         END DO 
     
    182179            DO jj = 1, jpj 
    183180               DO ji = 1, jpi 
    184                   zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) + epsi10 ) )   !0 if no ice and 1 if yes 
    185                   sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , epsi10 ) * zindb 
     181                  rswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) + epsi10 ) )   !0 if no ice and 1 if yes 
     182                  sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , epsi10 ) * rswitch 
    186183               END DO 
    187184            END DO 
     
    203200               DO ji = 1, jpi 
    204201                  !                                                              ! Energy of melting q(S,T) [J.m-3] 
    205                   zindb   = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 ) )     ! zindb = 0 if no ice and 1 if yes 
    206                   zq_i    = zindb * e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , epsi10 ) * REAL(nlay_i,wp)  
     202                  rswitch   = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 ) )     ! rswitch = 0 if no ice and 1 if yes 
     203                  zq_i    = rswitch * e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , epsi10 ) * REAL(nlay_i,wp)  
    207204                  zq_i    = zq_i * unit_fac                             !convert units 
    208205                  ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt                       ! Ice layer melt temperature 
     
    212209                  zccc       =  lfus * (ztmelts-rtt) 
    213210                  zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4._wp*zaaa*zccc , 0._wp) ) 
    214                   t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / ( 2.0 *zaaa ) 
     211                  t_i(ji,jj,jk,jl) = rtt + rswitch *( - zbbb - zdiscrim ) / ( 2.0 *zaaa ) 
    215212                  t_i(ji,jj,jk,jl) = MIN( rtt, MAX( 173.15_wp, t_i(ji,jj,jk,jl) ) )       ! 100-rtt < t_i < rtt 
    216213               END DO 
     
    229226               DO ji = 1, jpi 
    230227                  !Energy of melting q(S,T) [J.m-3] 
    231                   zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - v_s(ji,jj,jl) + epsi10 ) )     ! zindb = 0 if no ice and 1 if yes 
    232                   zq_s  = zindb * e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL(nlay_s,wp) 
     228                  rswitch = 1._wp - MAX( 0._wp , SIGN( 1._wp , - v_s(ji,jj,jl) + epsi10 ) )     ! rswitch = 0 if no ice and 1 if yes 
     229                  zq_s  = rswitch * e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL(nlay_s,wp) 
    233230                  zq_s  = zq_s * unit_fac                                    ! convert units 
    234231                  ! 
    235                   t_s(ji,jj,jk,jl) = rtt + zindb * ( - zfac1 * zq_s + zfac2 ) 
     232                  t_s(ji,jj,jk,jl) = rtt + rswitch * ( - zfac1 * zq_s + zfac2 ) 
    236233                  t_s(ji,jj,jk,jl) = MIN( rtt, MAX( 173.15, t_s(ji,jj,jk,jl) ) )     ! 100-rtt < t_i < rtt 
    237234               END DO 
     
    248245            DO jj = 1, jpj 
    249246               DO ji = 1, jpi 
    250                   zindb = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
    251                   tm_i(ji,jj) = tm_i(ji,jj) + zindb * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
     247                  rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
     248                  tm_i(ji,jj) = tm_i(ji,jj) + rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
    252249                     &                      / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , epsi10 )  ) 
    253250               END DO 
     
    295292      INTEGER  ::   ji, jj, jk, jl   ! dummy loop index 
    296293      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac, zsal      ! local scalar 
    297       REAL(wp) ::   zind0, zind01, zindbal, zargtemp , zs_zero   !   -      - 
     294      REAL(wp) ::   zswi0, zswi01, zswibal, zargtemp , zs_zero   !   -      - 
    298295      REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_slope_s, zalpha   ! 3D pointer 
    299296      !!------------------------------------------------------------------ 
     
    330327            DO jj = 1, jpj 
    331328               DO ji = 1, jpi 
    332                   ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise 
    333                   zind0  = MAX( 0._wp   , SIGN( 1._wp  , s_i_0 - sm_i(ji,jj,jl) ) )  
    334                   ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
    335                   zind01 = ( 1._wp - zind0 ) * MAX( 0._wp   , SIGN( 1._wp  , s_i_1 - sm_i(ji,jj,jl) ) )  
    336                   ! If 2.sm_i GE sss_m then zindbal = 1 
     329                  ! zswi0 = 1 if sm_i le s_i_0 and 0 otherwise 
     330                  zswi0  = MAX( 0._wp   , SIGN( 1._wp  , s_i_0 - sm_i(ji,jj,jl) ) )  
     331                  ! zswi01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
     332                  zswi01 = ( 1._wp - zswi0 ) * MAX( 0._wp   , SIGN( 1._wp  , s_i_1 - sm_i(ji,jj,jl) ) )  
     333                  ! If 2.sm_i GE sss_m then zswibal = 1 
    337334                  ! this is to force a constant salinity profile in the Baltic Sea 
    338                   zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i(ji,jj,jl) - sss_m(ji,jj) ) ) 
    339                   zalpha(ji,jj,jl) = zind0  + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + dummy_fac1 ) 
    340                   zalpha(ji,jj,jl) = zalpha(ji,jj,jl) * ( 1._wp - zindbal ) 
     335                  zswibal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i(ji,jj,jl) - sss_m(ji,jj) ) ) 
     336                  zalpha(ji,jj,jl) = zswi0  + zswi01 * ( sm_i(ji,jj,jl) * dummy_fac0 + dummy_fac1 ) 
     337                  zalpha(ji,jj,jl) = zalpha(ji,jj,jl) * ( 1._wp - zswibal ) 
    341338               END DO 
    342339            END DO 
     
    390387      !!------------------------------------------------------------------ 
    391388      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    392       REAL(wp) ::   zindb   !   -      - 
    393389      !!------------------------------------------------------------------ 
    394390 
     
    399395            DO jj = 1, jpj 
    400396               DO ji = 1, jpi 
    401                   zindb = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
    402                   tm_i(ji,jj) = tm_i(ji,jj) + zindb * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
     397                  rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
     398                  tm_i(ji,jj) = tm_i(ji,jj) + rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
    403399                     &                      / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , epsi10 )  ) 
    404400               END DO 
     
    421417      !!------------------------------------------------------------------ 
    422418      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    423       REAL(wp) ::   zbvi, zinda, zindb      ! local scalars 
     419      REAL(wp) ::   zbvi             ! local scalars 
    424420      !!------------------------------------------------------------------ 
    425421      ! 
     
    429425            DO jj = 1, jpj 
    430426               DO ji = 1, jpi 
    431                   zinda = (  1._wp - MAX( 0._wp , SIGN( 1._wp , (t_i(ji,jj,jk,jl) - rtt) + epsi10 ) )  ) 
    432                   zindb = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
    433                   zbvi  = - zinda * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - rtt, - epsi10 )   & 
     427                  rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , (t_i(ji,jj,jk,jl) - rtt) + epsi10 ) )  ) 
     428                  zbvi  = - rswitch * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - rtt, - epsi10 )   & 
    434429                     &                   * v_i(ji,jj,jl)    / REAL(nlay_i,wp) 
    435                   bv_i(ji,jj) = bv_i(ji,jj) + zindb * zbvi  / MAX( vt_i(ji,jj) , epsi10 ) 
     430                  rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
     431                  bv_i(ji,jj) = bv_i(ji,jj) + rswitch * zbvi  / MAX( vt_i(ji,jj) , epsi10 ) 
    436432               END DO 
    437433            END DO 
     
    454450      INTEGER  ::   ii, ij  ! local integers 
    455451      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac2, zargtemp, zsal   ! local scalars 
    456       REAL(wp) ::   zalpha, zind0, zind01, zindbal, zs_zero              !   -      - 
     452      REAL(wp) ::   zalpha, zswi0, zswi01, zswibal, zs_zero              !   -      - 
    457453      ! 
    458454      REAL(wp), POINTER, DIMENSION(:) ::   z_slope_s 
     
    488484               ii =  MOD( npb(ji) - 1 , jpi ) + 1 
    489485               ij =     ( npb(ji) - 1 ) / jpi + 1 
    490                ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise 
    491                zind0  = MAX( 0._wp , SIGN( 1._wp  , s_i_0 - sm_i_1d(ji) ) )  
    492                ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
    493                zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_1d(ji) ) )  
    494                ! if 2.sm_i GE sss_m then zindbal = 1 
     486               ! zswi0 = 1 if sm_i le s_i_0 and 0 otherwise 
     487               zswi0  = MAX( 0._wp , SIGN( 1._wp  , s_i_0 - sm_i_1d(ji) ) )  
     488               ! zswi01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws  
     489               zswi01 = ( 1._wp - zswi0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_1d(ji) ) )  
     490               ! if 2.sm_i GE sss_m then zswibal = 1 
    495491               ! this is to force a constant salinity profile in the Baltic Sea 
    496                zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_1d(ji) - sss_m(ii,ij) ) ) 
     492               zswibal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_1d(ji) - sss_m(ii,ij) ) ) 
    497493               ! 
    498                zalpha = (  zind0 + zind01 * ( sm_i_1d(ji) * dummy_fac0 + dummy_fac1 )  ) * ( 1.0 - zindbal ) 
     494               zalpha = (  zswi0 + zswi01 * ( sm_i_1d(ji) * dummy_fac0 + dummy_fac1 )  ) * ( 1.0 - zswibal ) 
    499495               ! 
    500496               zs_zero = z_slope_s(ji) * ( REAL(jk,wp) - 0.5_wp ) * ht_i_1d(ji) * dummy_fac2 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/LIM_SRC_3/limwri.F90

    r4967 r4972  
    3535   PUBLIC lim_wri_state  ! called by dia_wri_state  
    3636 
    37    REAL(wp)  ::   epsi06 = 1.e-6_wp 
    3837   !!---------------------------------------------------------------------- 
    3938   !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     
    5958      INTEGER, INTENT(in) ::   kindic   ! if kindic < 0 there has been an error somewhere 
    6059      ! 
    61       INTEGER ::  ji, jj, jk, jl  ! dummy loop indices 
    62       REAL(wp) ::  zinda, zindb, z1_365 
     60      INTEGER  ::  ji, jj, jk, jl  ! dummy loop indices 
     61      REAL(wp) ::  z1_365 
    6362      REAL(wp) ::  ztmp 
    64       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zoi, zei 
    65       REAL(wp), POINTER, DIMENSION(:,:)   :: z2d, z2da, z2db, zind    ! 2D workspace 
     63      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zoi, zei 
     64      REAL(wp), POINTER, DIMENSION(:,:)   ::  z2d, z2da, z2db, zswi    ! 2D workspace 
    6665      !!------------------------------------------------------------------- 
    6766 
     
    6968 
    7069      CALL wrk_alloc( jpi, jpj, jpl, zoi, zei ) 
    71       CALL wrk_alloc( jpi, jpj     , z2d, z2da, z2db, zind ) 
     70      CALL wrk_alloc( jpi, jpj     , z2d, z2da, z2db, zswi ) 
    7271 
    7372      !----------------------------- 
     
    8180      DO jj = 1, jpj          ! presence indicator of ice 
    8281         DO ji = 1, jpi 
    83             zind(ji,jj)  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) 
     82            zswi(ji,jj)  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi06 ) ) 
    8483         END DO 
    8584      END DO 
     
    9089         DO jj = 1, jpj  
    9190            DO ji = 1, jpi 
    92                z2d(ji,jj)  = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 
     91               z2d(ji,jj)  = vt_i(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zswi(ji,jj) 
    9392            END DO 
    9493         END DO 
     
    9998         DO jj = 1, jpj                                             
    10099            DO ji = 1, jpi 
    101                z2d(ji,jj)  = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zind(ji,jj) 
     100               z2d(ji,jj)  = vt_s(ji,jj) / MAX( at_i(ji,jj), epsi06 ) * zswi(ji,jj) 
    102101            END DO 
    103102         END DO 
     
    129128            DO jj = 1, jpj 
    130129               DO ji = 1, jpi 
    131                   z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * oa_i(ji,jj,jl) 
     130                  z2d(ji,jj) = z2d(ji,jj) + zswi(ji,jj) * oa_i(ji,jj,jl) 
    132131               END DO 
    133132            END DO 
     
    140139         DO jj = 1, jpj 
    141140            DO ji = 1, jpi 
    142                z2d(ji,jj) = ( tm_i(ji,jj) - rtt ) * zind(ji,jj) 
     141               z2d(ji,jj) = ( tm_i(ji,jj) - rtt ) * zswi(ji,jj) 
    143142            END DO 
    144143         END DO 
     
    151150            DO jj = 1, jpj 
    152151               DO ji = 1, jpi 
    153                   z2d(ji,jj) = z2d(ji,jj) + zind(ji,jj) * ( t_su(ji,jj,jl) - rtt ) * a_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi06 ) 
     152                  z2d(ji,jj) = z2d(ji,jj) + zswi(ji,jj) * ( t_su(ji,jj,jl) - rtt ) * a_i(ji,jj,jl) / MAX( at_i(ji,jj) , epsi06 ) 
    154153               END DO 
    155154            END DO 
     
    161160         DO jj = 1, jpj 
    162161            DO ji = 1, jpi 
    163                zindb  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) ) ) 
    164                z2d(ji,jj) = hicol(ji,jj) * zindb 
     162               rswitch  = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) ) ) 
     163               z2d(ji,jj) = hicol(ji,jj) * rswitch 
    165164            END DO 
    166165         END DO 
     
    245244            DO jj = 1, jpj 
    246245               DO ji = 1, jpi 
    247                   zinda = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 
    248                   zoi(ji,jj,jl) = oa_i(ji,jj,jl)  / MAX( a_i(ji,jj,jl) , epsi06 ) * zinda 
     246                  rswitch = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 
     247                  zoi(ji,jj,jl) = oa_i(ji,jj,jl)  / MAX( a_i(ji,jj,jl) , epsi06 ) * rswitch 
    249248               END DO 
    250249            END DO 
     
    260259               DO jj = 1, jpj 
    261260                  DO ji = 1, jpi 
    262                      zinda = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 
     261                     rswitch = MAX( 0._wp , SIGN( 1._wp , a_i(ji,jj,jl) - epsi06 ) ) 
    263262                     zei(ji,jj,jl) = zei(ji,jj,jl) + 100.0* & 
    264263                        ( - tmut * s_i(ji,jj,jk,jl) / MIN( ( t_i(ji,jj,jk,jl) - rtt ), - epsi06 ) ) * & 
    265                         zinda / nlay_i 
     264                        rswitch / nlay_i 
    266265                  END DO 
    267266               END DO 
     
    276275       
    277276      CALL wrk_dealloc( jpi, jpj, jpl, zoi, zei ) 
    278       CALL wrk_dealloc( jpi, jpj     , z2d, zind, z2da, z2db ) 
     277      CALL wrk_dealloc( jpi, jpj     , z2d, zswi, z2da, z2db ) 
    279278 
    280279      IF( nn_timing == 1 )  CALL timing_stop('limwri') 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/OPA_SRC/BDY/bdyice_lim.F90

    r4924 r4972  
    4545   PUBLIC   bdy_ice_lim_dyn ! routine called in limrhg 
    4646 
    47    REAL(wp) ::   epsi20 = 1.e-20_wp  ! module constants 
    48    REAL(wp) ::   epsi10 = 1.e-10_wp  ! min area allowed by ice model 
    4947   !!---------------------------------------------------------------------- 
    5048   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    9896      INTEGER  ::   ji, jj, ii, ij     ! local scalar 
    9997      REAL(wp) ::   zwgt, zwgt1        ! local scalar 
    100       REAL(wp) ::   zinda, ztmelts, zdh 
     98      REAL(wp) ::   ztmelts, zdh 
    10199 
    102100      !!------------------------------------------------------------------------------ 
     
    115113         hicif(ji,jj) = ( hicif(ji,jj) * zwgt1 + dta%hicif(jb) * zwgt ) * tmask(ji,jj,1)     ! Ice depth  
    116114         hsnif(ji,jj) = ( hsnif(ji,jj) * zwgt1 + dta%hsnif(jb) * zwgt ) * tmask(ji,jj,1)     ! Snow depth 
    117  
    118 !         zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - frld(ji,jj) ) ) ! 0 if no ice 
    119 !         !------------------------------ 
    120 !         ! Sea ice surface temperature 
    121 !         !------------------------------ 
    122 !         sist(ji,jj)   = zinda * 270.0 + ( 1.0 - zinda ) * tfu(ji,jj) 
    123 !         !----------------------------------------------- 
    124 !         ! Ice/snow temperatures and energy stored in brines  
    125 !         !----------------------------------------------- 
    126 !         !!! TO BE CONTIUNED (as LIM3 below) !!! 
    127 !            zindhe = MAX( 0.e0, SIGN( 1.e0, fcor(1,jj) ) )              ! = 0 for SH, =1 for NH 
    128 !  
    129 !               ! Recover in situ values. 
    130 !               zindb         = MAX( rzero, SIGN( rone, zs0a(ji,jj) - epsi06 ) ) 
    131 !               zacrith       = 1.0 - ( zindhe * acrit(1) + ( 1.0 - zindhe ) * acrit(2) ) 
    132 !               zs0a (ji,jj)  = zindb * MIN( zs0a(ji,jj), zacrith ) 
    133 !               hsnif(ji,jj)  = zindb * ( zs0sn(ji,jj) /MAX( zs0a(ji,jj), epsi16 ) ) 
    134 !               hicif(ji,jj)  = zindb * ( zs0ice(ji,jj)/MAX( zs0a(ji,jj), epsi16 ) ) 
    135 !               zindsn        = MAX( rzero, SIGN( rone, hsnif(ji,jj) - epsi06 ) ) 
    136 !               zindic        = MAX( rzero, SIGN( rone, hicif(ji,jj) - epsi03 ) ) 
    137 !               zindb         = MAX( zindsn, zindic ) 
    138 !               zs0a (ji,jj)  = zindb * zs0a(ji,jj) 
    139 !               frld (ji,jj)  = 1.0 - zs0a(ji,jj) 
    140 !               hsnif(ji,jj)  = zindsn * hsnif(ji,jj) 
    141 !               hicif(ji,jj)  = zindic * hicif(ji,jj) 
    142 !               zusvosn       = 1.0/MAX( hsnif(ji,jj) * zs0a(ji,jj), epsi16 ) 
    143 !               zusvoic       = 1.0/MAX( hicif(ji,jj) * zs0a(ji,jj), epsi16 ) 
    144 !               zignm         = MAX( rzero,  SIGN( rone, hsndif - hsnif(ji,jj) ) ) 
    145 !               zrtt          = 173.15 * rone  
    146 !               ztsn          =          zignm   * tbif(ji,jj,1)  & 
    147 !                              + ( 1.0 - zignm ) * MIN( MAX( zrtt, rt0_snow * zusvosn * zs0c0(ji,jj)) , tfu(ji,jj) )  
    148 !               ztic1          = MIN( MAX( zrtt, rt0_ice * zusvoic * zs0c1(ji,jj) ) , tfu(ji,jj) ) 
    149 !               ztic2          = MIN( MAX( zrtt, rt0_ice * zusvoic * zs0c2(ji,jj) ) , tfu(ji,jj) ) 
    150 !  
    151 !               tbif(ji,jj,1) = zindsn * ztsn  + ( 1.0 - zindsn ) * tfu(ji,jj)                
    152 !               tbif(ji,jj,2) = zindic * ztic1 + ( 1.0 - zindic ) * tfu(ji,jj) 
    153 !               tbif(ji,jj,3) = zindic * ztic2 + ( 1.0 - zindic ) * tfu(ji,jj) 
    154 !               qstoif(ji,jj) = zindb  * xlic * zs0st(ji,jj) /  MAX( zs0a(ji,jj), epsi16 ) 
    155  
    156115      END DO  
    157116 
     
    215174            IF ( v_ice(ji  ,jj-1) > 0. .AND. vmask(ji  ,jj+1,1) == 0. ) jpbound = 1; ii = ji  ; ij = jj-1 
    216175 
    217             zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ii,ij) + 0.01 ) ) ! 0 if no ice 
     176            rswitch = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ii,ij) + 0.01 ) ) ! 0 if no ice 
    218177 
    219178            ! concentration and thickness 
    220             a_i (ji,jj,jl) = a_i (ii,ij,jl) * zinda 
    221             ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * zinda 
    222             ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * zinda 
     179            a_i (ji,jj,jl) = a_i (ii,ij,jl) * rswitch 
     180            ht_i(ji,jj,jl) = ht_i(ii,ij,jl) * rswitch 
     181            ht_s(ji,jj,jl) = ht_s(ii,ij,jl) * rswitch 
    223182 
    224183            ! Ice and snow volumes 
     
    231190 
    232191               ! Ice salinity, age, temperature 
    233                sm_i(ji,jj,jl)   = zinda * rn_ice_sal(ib_bdy)  + ( 1.0 - zinda ) * s_i_min 
    234                o_i(ji,jj,jl)    = zinda * rn_ice_age(ib_bdy)  + ( 1.0 - zinda ) 
    235                t_su(ji,jj,jl)   = zinda * rn_ice_tem(ib_bdy)  + ( 1.0 - zinda ) * rn_ice_tem(ib_bdy) 
     192               sm_i(ji,jj,jl)   = rswitch * rn_ice_sal(ib_bdy)  + ( 1.0 - rswitch ) * s_i_min 
     193               o_i(ji,jj,jl)    = rswitch * rn_ice_age(ib_bdy)  + ( 1.0 - rswitch ) 
     194               t_su(ji,jj,jl)   = rswitch * rn_ice_tem(ib_bdy)  + ( 1.0 - rswitch ) * rn_ice_tem(ib_bdy) 
    236195               DO jk = 1, nlay_s 
    237                   t_s(ji,jj,jk,jl) = zinda * rn_ice_tem(ib_bdy) + ( 1.0 - zinda ) * rtt 
     196                  t_s(ji,jj,jk,jl) = rswitch * rn_ice_tem(ib_bdy) + ( 1.0 - rswitch ) * rtt 
    238197               END DO 
    239198               DO jk = 1, nlay_i 
    240                   t_i(ji,jj,jk,jl) = zinda * rn_ice_tem(ib_bdy) + ( 1.0 - zinda ) * rtt  
    241                   s_i(ji,jj,jk,jl) = zinda * rn_ice_sal(ib_bdy) + ( 1.0 - zinda ) * s_i_min 
     199                  t_i(ji,jj,jk,jl) = rswitch * rn_ice_tem(ib_bdy) + ( 1.0 - rswitch ) * rtt  
     200                  s_i(ji,jj,jk,jl) = rswitch * rn_ice_sal(ib_bdy) + ( 1.0 - rswitch ) * s_i_min 
    242201               END DO 
    243202                
     
    245204  
    246205               ! Ice salinity, age, temperature 
    247                sm_i(ji,jj,jl)   = zinda * sm_i(ii,ij,jl)  + ( 1.0 - zinda ) * s_i_min 
    248                o_i(ji,jj,jl)    = zinda * o_i(ii,ij,jl)   + ( 1.0 - zinda ) 
    249                t_su(ji,jj,jl)   = zinda * t_su(ii,ij,jl)  + ( 1.0 - zinda ) * rtt 
     206               sm_i(ji,jj,jl)   = rswitch * sm_i(ii,ij,jl)  + ( 1.0 - rswitch ) * s_i_min 
     207               o_i(ji,jj,jl)    = rswitch * o_i(ii,ij,jl)   + ( 1.0 - rswitch ) 
     208               t_su(ji,jj,jl)   = rswitch * t_su(ii,ij,jl)  + ( 1.0 - rswitch ) * rtt 
    250209               DO jk = 1, nlay_s 
    251                   t_s(ji,jj,jk,jl) = zinda * t_s(ii,ij,jk,jl) + ( 1.0 - zinda ) * rtt 
     210                  t_s(ji,jj,jk,jl) = rswitch * t_s(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rtt 
    252211               END DO 
    253212               DO jk = 1, nlay_i 
    254                   t_i(ji,jj,jk,jl) = zinda * t_i(ii,ij,jk,jl) + ( 1.0 - zinda ) * rtt 
    255                   s_i(ji,jj,jk,jl) = zinda * s_i(ii,ij,jk,jl) + ( 1.0 - zinda ) * s_i_min 
     213                  t_i(ji,jj,jk,jl) = rswitch * t_i(ii,ij,jk,jl) + ( 1.0 - rswitch ) * rtt 
     214                  s_i(ji,jj,jk,jl) = rswitch * s_i(ii,ij,jk,jl) + ( 1.0 - rswitch ) * s_i_min 
    256215               END DO 
    257216 
     
    269228            DO jk = 1, nlay_s 
    270229               ! Snow energy of melting 
    271                e_s(ji,jj,jk,jl) = zinda * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 
     230               e_s(ji,jj,jk,jl) = rswitch * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 
    272231               ! Change dimensions 
    273232               e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac 
     
    278237               ztmelts          = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K                   
    279238               ! heat content per unit volume 
    280                e_i(ji,jj,jk,jl) = zinda * rhoic * & 
     239               e_i(ji,jj,jk,jl) = rswitch * rhoic * & 
    281240                  (   cpic    * ( ztmelts - t_i(ji,jj,jk,jl) ) & 
    282241                  +   lfus    * ( 1.0 - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) & 
     
    335294      INTEGER  ::   ji, jj             ! local scalar 
    336295      INTEGER  ::   ib_bdy ! Loop index 
    337       REAL(wp) ::   zmsk1, zmsk2, zflag, zinda  
     296      REAL(wp) ::   zmsk1, zmsk2, zflag 
    338297     !!------------------------------------------------------------------------------ 
    339298      ! 
     
    375334                  ENDIF 
    376335                  ! mask ice velocities 
    377                   zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 
    378                   u_ice(ji,jj) = zinda * u_ice(ji,jj) 
     336                  rswitch = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 
     337                  u_ice(ji,jj) = rswitch * u_ice(ji,jj) 
    379338                   
    380339               ENDDO 
     
    404363                  ENDIF 
    405364                  ! mask ice velocities 
    406                   zinda = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 
    407                   v_ice(ji,jj) = zinda * v_ice(ji,jj) 
     365                  rswitch = 1.0 - MAX( 0.0_wp , SIGN ( 1.0_wp , - at_i(ji,jj) + 0.01 ) ) ! 0 if no ice 
     366                  v_ice(ji,jj) = rswitch * v_ice(ji,jj) 
    408367                   
    409368               ENDDO 
  • branches/2014/dev_MERGE_2014/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r4946 r4972  
    221221         v_ice_b(:,:)     = v_ice(:,:) 
    222222 
    223          ! trends    !!gm is it truly necessary ??? 
    224          d_a_i_thd  (:,:,:)   = 0._wp   ;   d_a_i_trp  (:,:,:)   = 0._wp 
    225          d_v_i_thd  (:,:,:)   = 0._wp   ;   d_v_i_trp  (:,:,:)   = 0._wp 
    226          d_e_i_thd  (:,:,:,:) = 0._wp   ;   d_e_i_trp  (:,:,:,:) = 0._wp 
    227          d_v_s_thd  (:,:,:)   = 0._wp   ;   d_v_s_trp  (:,:,:)   = 0._wp 
    228          d_e_s_thd  (:,:,:,:) = 0._wp   ;   d_e_s_trp  (:,:,:,:) = 0._wp 
    229          d_smv_i_thd(:,:,:)   = 0._wp   ;   d_smv_i_trp(:,:,:)   = 0._wp 
    230          d_oa_i_thd (:,:,:)   = 0._wp   ;   d_oa_i_trp (:,:,:)   = 0._wp 
    231          d_u_ice_dyn(:,:)     = 0._wp   ;   d_v_ice_dyn(:,:)     = 0._wp 
    232  
    233223         ! salt, heat and mass fluxes 
    234224         sfx    (:,:) = 0._wp   ; 
     
    254244         hfx_spr(:,:) = 0._wp   ;   hfx_dif(:,:) = 0._wp  
    255245         hfx_err(:,:) = 0._wp   ;   hfx_err_rem(:,:) = 0._wp 
    256  
    257          ! 
    258          fhld  (:,:)    = 0._wp  
    259          fmmflx(:,:)    = 0._wp      
    260          ! part of solar radiation transmitted through the ice 
    261          ftr_ice(:,:,:) = 0._wp 
    262  
    263          ! diags 
    264          diag_trp_vi  (:,:) = 0._wp  ; diag_trp_vs(:,:) = 0._wp  ;  diag_trp_ei(:,:) = 0._wp  ;  diag_trp_es(:,:) = 0._wp 
    265          diag_heat_dhc(:,:) = 0._wp   
    266  
    267          ! dynamical invariants 
    268          delta_i(:,:) = 0._wp       ;   divu_i(:,:) = 0._wp       ;   shear_i(:,:) = 0._wp 
    269246 
    270247                          CALL lim_rst_opn( kt )     ! Open Ice restart file 
Note: See TracChangeset for help on using the changeset viewer.