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 3625 for branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90 – NEMO

Ignore:
Timestamp:
2012-11-21T14:19:18+01:00 (11 years ago)
Author:
acc
Message:

Branch dev_NOC_2012_r3555. #1006. Step 7. Check in code now merged with dev_r3385_NOCS04_HAMF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_3/limthd_lac.F90

    r3294 r3625  
    1313   !!   'key_lim3'                                      LIM3 sea-ice model 
    1414   !!---------------------------------------------------------------------- 
    15    !!   lim_lat_acr    : lateral accretion of ice 
    16    !!---------------------------------------------------------------------- 
    17    USE par_oce          ! ocean parameters 
    18    USE dom_oce          ! domain variables 
    19    USE phycst           ! physical constants 
    20    USE sbc_oce          ! Surface boundary condition: ocean fields 
    21    USE sbc_ice          ! Surface boundary condition: ice fields 
    22    USE thd_ice          ! LIM thermodynamics 
    23    USE dom_ice          ! LIM domain 
    24    USE par_ice          ! LIM parameters 
    25    USE ice              ! LIM variables 
    26    USE limtab           ! LIM 2D <==> 1D 
    27    USE limcons          ! LIM conservation 
    28    USE in_out_manager   ! I/O manager 
    29    USE lib_mpp          ! MPP library 
    30    USE wrk_nemo         ! work arrays 
     15   !!   lim_lat_acr   : lateral accretion of ice 
     16   !!---------------------------------------------------------------------- 
     17   USE par_oce        ! ocean parameters 
     18   USE dom_oce        ! domain variables 
     19   USE phycst         ! physical constants 
     20   USE sbc_oce        ! Surface boundary condition: ocean fields 
     21   USE sbc_ice        ! Surface boundary condition: ice fields 
     22   USE thd_ice        ! LIM thermodynamics 
     23   USE dom_ice        ! LIM domain 
     24   USE par_ice        ! LIM parameters 
     25   USE ice            ! LIM variables 
     26   USE limtab         ! LIM 2D <==> 1D 
     27   USE limcons        ! LIM conservation 
     28   USE in_out_manager ! I/O manager 
     29   USE lib_mpp        ! MPP library 
     30   USE wrk_nemo       ! work arrays 
     31   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    3132 
    3233   IMPLICIT NONE 
     
    4546 
    4647   !!---------------------------------------------------------------------- 
    47    !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     48   !! NEMO/LIM3 3.4 , UCL - NEMO Consortium (2011) 
    4849   !! $Id$ 
    4950   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    7778      !!               update ht_s_b, ht_i_b and tbif_1d(:,:)       
    7879      !!------------------------------------------------------------------------ 
    79       INTEGER ::   ji,jj,jk,jl,jm   ! dummy loop indices 
    80       INTEGER ::   layer, nbpac     ! local integers  
    81       INTEGER ::   zji, zjj, iter   !   -       - 
    82       REAL(wp)  ::   ztmelts, zdv, zqold, zfrazb, zweight, zalphai, zindb, zde  ! local scalars 
     80      INTEGER  ::   ji,jj,jk,jl,jm   ! dummy loop indices 
     81      INTEGER  ::   layer, nbpac     ! local integers  
     82      INTEGER  ::   zji, zjj, iter   !   -       - 
     83      REAL(wp) ::   ztmelts, zdv, zqold, zfrazb, zweight, zalphai, zindb, zde   ! local scalars 
    8384      REAL(wp) ::   zgamafr, zvfrx, zvgx, ztaux, ztwogp, zf , zhicol_new        !   -      - 
    8485      REAL(wp) ::   ztenagm, zvfry, zvgy, ztauy, zvrel2, zfp, zsqcd , zhicrit   !   -      - 
     86      REAL(wp) ::   zcoef                                                       !   -      - 
    8587      LOGICAL  ::   iterate_frazil   ! iterate frazil ice collection thickness 
    8688      CHARACTER (len = 15) :: fieldid 
     
    143145      ! 1) Conservation check and changes in each ice category 
    144146      !------------------------------------------------------------------------------! 
    145       IF ( con_i ) THEN 
    146          CALL lim_column_sum (jpl, v_i, vt_i_init) 
    147          CALL lim_column_sum (jpl, v_s, vt_s_init) 
    148          CALL lim_column_sum_energy (jpl, nlay_i, e_i, et_i_init) 
    149          CALL lim_column_sum (jpl,  e_s(:,:,1,:) , et_s_init) 
     147      IF( con_i ) THEN 
     148         CALL lim_column_sum        ( jpl, v_i          , vt_i_init) 
     149         CALL lim_column_sum        ( jpl, v_s          , vt_s_init) 
     150         CALL lim_column_sum_energy ( jpl, nlay_i , e_i , et_i_init) 
     151         CALL lim_column_sum        ( jpl, e_s(:,:,1,:) , et_s_init) 
    150152      ENDIF 
    151153 
     
    158160               DO ji = 1, jpi 
    159161                  !Energy of melting q(S,T) [J.m-3] 
    160                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / & 
    161                      MAX( area(ji,jj) * v_i(ji,jj,jl) ,  epsi10 ) * & 
    162                      nlay_i 
    163                   zindb      = 1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) !0 if no ice and 1 if yes 
    164                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl)*unit_fac*zindb 
     162                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / MAX( area(ji,jj) * v_i(ji,jj,jl) ,  epsi10 ) * nlay_i 
     163                  zindb = 1._wp - MAX(  0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) )  )   !0 if no ice and 1 if yes 
     164                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb 
    165165               END DO 
    166166            END DO 
     
    182182      !  
    183183 
    184       zvrel(:,:) = 0.0 
     184      zvrel(:,:) = 0._wp 
    185185 
    186186      ! Default new ice thickness  
    187       DO jj = 1, jpj 
    188          DO ji = 1, jpi 
    189             hicol(ji,jj) = hiccrit(1) 
    190          END DO 
    191       END DO 
    192  
    193       IF (fraz_swi.eq.1.0) THEN 
     187      hicol(:,:) = hiccrit(1) 
     188 
     189      IF( fraz_swi == 1._wp ) THEN 
    194190 
    195191         !-------------------- 
    196192         ! Physical constants 
    197193         !-------------------- 
    198          hicol(:,:) = 0.0 
     194         hicol(:,:) = 0._wp 
    199195 
    200196         zhicrit = 0.04 ! frazil ice thickness 
     
    211207                  !------------- 
    212208                  ! C-grid wind stress components 
    213                   ztaux         = ( utau_ice(ji-1,jj  ) * tmu(ji-1,jj  ) & 
    214                      &          +   utau_ice(ji  ,jj  ) * tmu(ji  ,jj  ) ) / 2.0 
    215                   ztauy         = ( vtau_ice(ji  ,jj-1) * tmv(ji  ,jj-1) & 
    216                      &          +   vtau_ice(ji  ,jj  ) * tmv(ji  ,jj  ) ) / 2.0 
     209                  ztaux         = ( utau_ice(ji-1,jj  ) * tmu(ji-1,jj  )   & 
     210                     &          +   utau_ice(ji  ,jj  ) * tmu(ji  ,jj  ) ) * 0.5_wp 
     211                  ztauy         = ( vtau_ice(ji  ,jj-1) * tmv(ji  ,jj-1)   & 
     212                     &          +   vtau_ice(ji  ,jj  ) * tmv(ji  ,jj  ) ) * 0.5_wp 
    217213                  ! Square root of wind stress 
    218214                  ztenagm       =  SQRT( SQRT( ztaux * ztaux + ztauy * ztauy ) ) 
     
    228224                  !------------------- 
    229225                  ! C-grid ice velocity 
    230                   zindb = MAX(0.0, SIGN(1.0, at_i(ji,jj) )) 
    231                   zvgx  = zindb * ( u_ice(ji-1,jj  ) * tmu(ji-1,jj  ) & 
    232                      + u_ice(ji,jj    ) * tmu(ji  ,jj  ) ) / 2.0 
    233                   zvgy  = zindb * ( v_ice(ji  ,jj-1) * tmv(ji  ,jj-1) & 
    234                      + v_ice(ji,jj    ) * tmv(ji  ,jj  ) ) / 2.0 
     226                  zindb = MAX(  0._wp, SIGN( 1._wp , at_i(ji,jj) )  ) 
     227                  zvgx  = zindb * (  u_ice(ji-1,jj  ) * tmu(ji-1,jj  )    & 
     228                     &             + u_ice(ji,jj    ) * tmu(ji  ,jj  )  ) * 0.5_wp 
     229                  zvgy  = zindb * (  v_ice(ji  ,jj-1) * tmv(ji  ,jj-1)    & 
     230                     &             + v_ice(ji,jj    ) * tmv(ji  ,jj  )  ) * 0.5_wp 
    235231 
    236232                  !----------------------------------- 
     
    238234                  !----------------------------------- 
    239235                  ! absolute relative velocity 
    240                   zvrel2        = MAX( ( zvfrx - zvgx ) * ( zvfrx - zvgx ) + & 
    241                      ( zvfry - zvgy ) * ( zvfry - zvgy )   & 
    242                      , 0.15 * 0.15 ) 
    243                   zvrel(ji,jj)  = SQRT(zvrel2) 
     236                  zvrel2 = MAX(  ( zvfrx - zvgx ) * ( zvfrx - zvgx )   & 
     237                     &         + ( zvfry - zvgy ) * ( zvfry - zvgy ) , 0.15 * 0.15 ) 
     238                  zvrel(ji,jj)  = SQRT( zvrel2 ) 
    244239 
    245240                  !--------------------- 
     
    247242                  !--------------------- 
    248243                  hicol(ji,jj) = zhicrit + 0.1  
    249                   hicol(ji,jj) = zhicrit + hicol(ji,jj) /      &  
    250                      ( hicol(ji,jj) * hicol(ji,jj) - & 
    251                      zhicrit * zhicrit ) * ztwogp * zvrel2 
     244                  hicol(ji,jj) = zhicrit +   hicol(ji,jj)    & 
     245                     &                   / ( hicol(ji,jj) * hicol(ji,jj) -  zhicrit * zhicrit ) * ztwogp * zvrel2 
     246 
     247!!gm better coding: above: hicol(ji,jj) * hicol(ji,jj) = (zhicrit + 0.1)*(zhicrit + 0.1) 
     248!!gm                                                   = zhicrit**2 + 0.2*zhicrit +0.01 
     249!!gm                therefore the 2 lines with hicol can be replaced by 1 line: 
     250!!gm              hicol(ji,jj) = zhicrit + (zhicrit + 0.1) / ( 0.2 * zhicrit + 0.01 ) * ztwogp * zvrel2 
     251!!gm further more (zhicrit + 0.1)/(0.2 * zhicrit + 0.01 )*ztwogp can be computed one for all outside the DO loop 
    252252 
    253253                  iter = 1 
     
    284284      DO jj = 1, jpj 
    285285         DO ji = 1, jpi 
    286             IF ( tms(ji,jj) * ( qcmif(ji,jj) - qldif(ji,jj) ) > 0.e0 ) THEN 
     286            IF ( tms(ji,jj) * ( qcmif(ji,jj) - qldif(ji,jj) )  >  0._wp ) THEN 
    287287               nbpac = nbpac + 1 
    288288               npac( nbpac ) = (jj - 1) * jpi + ji 
    289                IF ( (ji.eq.jiindx).AND.(jj.eq.jjindx) ) THEN 
    290                   jiindex_1d = nbpac 
    291                ENDIF 
     289               IF( ji == jiindx .AND. jj == jjindx )   jiindex_1d = nbpac 
    292290            ENDIF 
    293291         END DO 
    294292      END DO 
    295293 
    296       IF( ln_nicep ) THEN 
    297          WRITE(numout,*) 'lim_thd_lac : nbpac = ', nbpac 
    298       ENDIF 
     294      IF( ln_nicep )   WRITE(numout,*) 'lim_thd_lac : nbpac = ', nbpac 
    299295 
    300296      !------------------------------ 
     
    306302      IF ( nbpac > 0 ) THEN 
    307303 
    308          CALL tab_2d_1d( nbpac, zat_i_ac  (1:nbpac)     , at_i         ,       & 
    309             jpi, jpj, npac(1:nbpac) ) 
     304         CALL tab_2d_1d( nbpac, zat_i_ac  (1:nbpac)     , at_i         , jpi, jpj, npac(1:nbpac) ) 
    310305         DO jl = 1, jpl 
    311             CALL tab_2d_1d( nbpac, za_i_ac(1:nbpac,jl)  , a_i(:,:,jl)  ,       & 
    312                jpi, jpj, npac(1:nbpac) ) 
    313             CALL tab_2d_1d( nbpac, zv_i_ac(1:nbpac,jl)  , v_i(:,:,jl)  ,       & 
    314                jpi, jpj, npac(1:nbpac) ) 
    315             CALL tab_2d_1d( nbpac, zoa_i_ac(1:nbpac,jl) , oa_i(:,:,jl) ,       & 
    316                jpi, jpj, npac(1:nbpac) ) 
    317             CALL tab_2d_1d( nbpac, zsmv_i_ac(1:nbpac,jl), smv_i(:,:,jl),       & 
    318                jpi, jpj, npac(1:nbpac) ) 
     306            CALL tab_2d_1d( nbpac, za_i_ac  (1:nbpac,jl), a_i  (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     307            CALL tab_2d_1d( nbpac, zv_i_ac  (1:nbpac,jl), v_i  (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     308            CALL tab_2d_1d( nbpac, zoa_i_ac (1:nbpac,jl), oa_i (:,:,jl), jpi, jpj, npac(1:nbpac) ) 
     309            CALL tab_2d_1d( nbpac, zsmv_i_ac(1:nbpac,jl), smv_i(:,:,jl), jpi, jpj, npac(1:nbpac) ) 
    319310            DO jk = 1, nlay_i 
    320                CALL tab_2d_1d( nbpac, ze_i_ac(1:nbpac,jk,jl), e_i(:,:,jk,jl) , & 
    321                   jpi, jpj, npac(1:nbpac) ) 
     311               CALL tab_2d_1d( nbpac, ze_i_ac(1:nbpac,jk,jl), e_i(:,:,jk,jl) , jpi, jpj, npac(1:nbpac) ) 
    322312            END DO ! jk 
    323313         END DO ! jl 
    324314 
    325          CALL tab_2d_1d( nbpac, qldif_1d  (1:nbpac)     , qldif ,              & 
    326             jpi, jpj, npac(1:nbpac) ) 
    327          CALL tab_2d_1d( nbpac, qcmif_1d  (1:nbpac)     , qcmif ,              & 
    328             jpi, jpj, npac(1:nbpac) ) 
    329          CALL tab_2d_1d( nbpac, t_bo_b    (1:nbpac)     , t_bo  ,              & 
    330             jpi, jpj, npac(1:nbpac) ) 
    331          CALL tab_2d_1d( nbpac, fseqv_1d  (1:nbpac)     , fseqv ,              & 
    332             jpi, jpj, npac(1:nbpac) ) 
    333          CALL tab_2d_1d( nbpac, hicol_b   (1:nbpac)     , hicol ,              & 
    334             jpi, jpj, npac(1:nbpac) ) 
    335          CALL tab_2d_1d( nbpac, zvrel_ac  (1:nbpac)     , zvrel ,              & 
    336             jpi, jpj, npac(1:nbpac) ) 
     315         CALL tab_2d_1d( nbpac, qldif_1d  (1:nbpac)     , qldif  , jpi, jpj, npac(1:nbpac) ) 
     316         CALL tab_2d_1d( nbpac, qcmif_1d  (1:nbpac)     , qcmif  , jpi, jpj, npac(1:nbpac) ) 
     317         CALL tab_2d_1d( nbpac, t_bo_b    (1:nbpac)     , t_bo   , jpi, jpj, npac(1:nbpac) ) 
     318         CALL tab_2d_1d( nbpac, sfx_thd_1d(1:nbpac)     , sfx_thd, jpi, jpj, npac(1:nbpac) ) 
     319         CALL tab_2d_1d( nbpac, rdm_ice_1d(1:nbpac)     , rdm_ice, jpi, jpj, npac(1:nbpac) ) 
     320         CALL tab_2d_1d( nbpac, hicol_b   (1:nbpac)     , hicol  , jpi, jpj, npac(1:nbpac) ) 
     321         CALL tab_2d_1d( nbpac, zvrel_ac  (1:nbpac)     , zvrel  , jpi, jpj, npac(1:nbpac) ) 
    337322 
    338323         !------------------------------------------------------------------------------! 
     
    344329         !---------------------- 
    345330         DO ji = 1, nbpac 
    346             zh_newice(ji)     = hiccrit(1) 
    347          END DO 
    348          IF ( fraz_swi .EQ. 1.0 ) zh_newice(:) = hicol_b(:) 
     331            zh_newice(ji) = hiccrit(1) 
     332         END DO 
     333         IF( fraz_swi == 1.0 )  zh_newice(:) = hicol_b(:) 
    349334 
    350335         !---------------------- 
     
    352337         !---------------------- 
    353338 
    354          IF ( num_sal .EQ. 1 ) THEN 
    355             zs_newice(:)      =   bulk_sal 
    356          ENDIF ! num_sal 
    357  
    358          IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) THEN 
    359  
    360             DO ji = 1, nbpac 
    361                zs_newice(ji)  =   MIN( 4.606 + 0.91 / zh_newice(ji) , s_i_max ) 
    362                zji            =   MOD( npac(ji) - 1, jpi ) + 1 
    363                zjj            =   ( npac(ji) - 1 ) / jpi + 1 
    364                zs_newice(ji)  =   MIN( 0.5*sss_m(zji,zjj) , zs_newice(ji) ) 
    365             END DO ! jl 
    366  
    367          ENDIF ! num_sal 
    368  
    369          IF ( num_sal .EQ. 3 ) THEN 
    370             zs_newice(:)      =   2.3 
    371          ENDIF ! num_sal 
     339         SELECT CASE ( num_sal ) 
     340         CASE ( 1 )                    ! Sice = constant  
     341            zs_newice(:) = bulk_sal 
     342         CASE ( 2 )                    ! Sice = F(z,t) [Vancoppenolle et al (2005)] 
     343            DO ji = 1, nbpac 
     344               zji =   MOD( npac(ji) - 1 , jpi ) + 1 
     345               zjj =      ( npac(ji) - 1 ) / jpi + 1 
     346               zs_newice(ji) = MIN(  4.606 + 0.91 / zh_newice(ji) , s_i_max , 0.5 * sss_m(zji,zjj)  ) 
     347            END DO 
     348         CASE ( 3 )                    ! Sice = F(z) [multiyear ice] 
     349            zs_newice(:) =   2.3 
     350         END SELECT 
     351 
    372352 
    373353         !------------------------- 
     
    376356         ! We assume that new ice is formed at the seawater freezing point 
    377357         DO ji = 1, nbpac 
    378             ztmelts           = - tmut * zs_newice(ji) + rtt ! Melting point (K) 
    379             ze_newice(ji)     =   rhoic * ( cpic * ( ztmelts - t_bo_b(ji) )    & 
    380                + lfus * ( 1.0 - ( ztmelts - rtt )   & 
    381                / ( t_bo_b(ji) - rtt ) )           & 
    382                - rcp * ( ztmelts-rtt ) ) 
    383             ze_newice(ji)     =   MAX( ze_newice(ji) , 0.0 ) +                 & 
    384                MAX( 0.0 , SIGN( 1.0 , - ze_newice(ji) ) )   &  
    385                * rhoic * lfus 
     358            ztmelts       = - tmut * zs_newice(ji) + rtt                  ! Melting point (K) 
     359            ze_newice(ji) =   rhoic * (  cpic * ( ztmelts - t_bo_b(ji) )                             & 
     360               &                       + lfus * ( 1.0 - ( ztmelts - rtt ) / ( t_bo_b(ji) - rtt ) )   & 
     361               &                       - rcp  *         ( ztmelts - rtt )  ) 
     362            ze_newice(ji) =   MAX( ze_newice(ji) , 0._wp )    & 
     363               &          +   MAX(  0.0 , SIGN( 1.0 , - ze_newice(ji) )  ) * rhoic * lfus 
    386364         END DO ! ji 
    387365         !---------------- 
     
    389367         !---------------- 
    390368         DO ji = 1, nbpac 
    391             zo_newice(ji)     = 0.0 
     369            zo_newice(ji) = 0._wp 
    392370         END DO ! ji 
    393371 
     
    396374         !-------------------------- 
    397375         DO ji = 1, nbpac 
    398             zqbgow(ji)        = qldif_1d(ji) - qcmif_1d(ji) !<0 
     376            zqbgow(ji) = qldif_1d(ji) - qcmif_1d(ji)    !<0 
    399377         END DO ! ji 
    400378 
     
    403381         !------------------- 
    404382         DO ji = 1, nbpac 
    405             zv_newice(ji)     = - zqbgow(ji) / ze_newice(ji) 
     383            zv_newice(ji) = - zqbgow(ji) / ze_newice(ji) 
    406384 
    407385            ! A fraction zfrazb of frazil ice is accreted at the ice bottom 
    408             zfrazb        = ( TANH ( Cfrazb * ( zvrel_ac(ji) - vfrazb ) )     &  
    409                + 1.0 ) / 2.0 * maxfrazb 
    410             zdh_frazb(ji) = zfrazb*zv_newice(ji) 
     386            zfrazb        = ( TANH ( Cfrazb * ( zvrel_ac(ji) - vfrazb ) ) + 1.0 ) * 0.5 * maxfrazb 
     387            zdh_frazb(ji) =         zfrazb   * zv_newice(ji) 
    411388            zv_newice(ji) = ( 1.0 - zfrazb ) * zv_newice(ji) 
    412389         END DO 
     
    415392         ! Salt flux due to new ice growth 
    416393         !--------------------------------- 
    417          IF ( ( num_sal .EQ. 4 ) ) THEN  
    418             DO ji = 1, nbpac 
    419                zji            = MOD( npac(ji) - 1, jpi ) + 1 
    420                zjj            = ( npac(ji) - 1 ) / jpi + 1 
    421                fseqv_1d(ji)   = fseqv_1d(ji) +                                     & 
    422                   ( sss_m(zji,zjj) - bulk_sal      ) * rhoic *       & 
    423                   zv_newice(ji) / rdt_ice 
    424             END DO 
    425          ELSE 
    426             DO ji = 1, nbpac 
    427                zji            = MOD( npac(ji) - 1, jpi ) + 1 
    428                zjj            = ( npac(ji) - 1 ) / jpi + 1 
    429                fseqv_1d(ji)   = fseqv_1d(ji) +                                     & 
    430                   ( sss_m(zji,zjj) - zs_newice(ji) ) * rhoic *       & 
    431                   zv_newice(ji) / rdt_ice 
    432             END DO ! ji 
    433          ENDIF 
     394         ! note that for constant salinity zs_newice() = bulk_sal (see top of the subroutine) 
     395         DO ji = 1, nbpac 
     396            sfx_thd_1d(ji) = sfx_thd_1d(ji) - zs_newice(ji) * rhoic * zv_newice(ji) * r1_rdtice 
     397            rdm_ice_1d(ji) = rdm_ice_1d(ji) +                 rhoic * zv_newice(ji) 
     398         END DO ! ji 
    434399 
    435400         !------------------------------------ 
     
    437402         !------------------------------------ 
    438403         DO ji = 1, nbpac 
    439             ! Volume 
    440             zji                  = MOD( npac(ji) - 1, jpi ) + 1 
    441             zjj                  = ( npac(ji) - 1 ) / jpi + 1 
    442             vt_i_init(zji,zjj)   = vt_i_init(zji,zjj) + zv_newice(ji) 
    443             ! Energy 
    444             zde                  = ze_newice(ji) / unit_fac 
    445             zde                  = zde * area(zji,zjj) * zv_newice(ji) 
    446             et_i_init(zji,zjj)   = et_i_init(zji,zjj) + zde 
     404            zji = MOD( npac(ji) - 1 , jpi ) + 1 
     405            zjj =    ( npac(ji) - 1 ) / jpi + 1 
     406            ! 
     407            zde = ze_newice(ji) / unit_fac * area(zji,zjj) * zv_newice(ji) 
     408            ! 
     409            vt_i_init(zji,zjj) = vt_i_init(zji,zjj) + zv_newice(ji)             ! volume 
     410            et_i_init(zji,zjj) = et_i_init(zji,zjj) + zde                       ! Energy 
     411 
    447412         END DO 
    448413 
    449414         ! keep new ice volume in memory 
    450          CALL tab_1d_2d( nbpac, v_newice , npac(1:nbpac), zv_newice(1:nbpac) , & 
    451             jpi, jpj ) 
     415         CALL tab_1d_2d( nbpac, v_newice , npac(1:nbpac), zv_newice(1:nbpac) , jpi, jpj ) 
    452416 
    453417         !----------------- 
     
    455419         !----------------- 
    456420         DO ji = 1, nbpac 
    457             za_newice(ji)     = zv_newice(ji) / zh_newice(ji) 
    458             ! diagnostic 
    459             zji                  = MOD( npac(ji) - 1, jpi ) + 1 
    460             zjj                  = ( npac(ji) - 1 ) / jpi + 1 
    461             diag_lat_gr(zji,zjj) = zv_newice(ji) / rdt_ice 
     421            zji = MOD( npac(ji) - 1 , jpi ) + 1 
     422            zjj =    ( npac(ji) - 1 ) / jpi + 1 
     423            za_newice(ji) = zv_newice(ji) / zh_newice(ji) 
     424            diag_lat_gr(zji,zjj) = zv_newice(ji) * r1_rdtice 
    462425         END DO !ji 
    463426 
     
    476439         !------------------------------------------- 
    477440         ! If lateral ice growth gives an ice concentration gt 1, then 
    478          ! we keep the excessive volume in memory and attribute it later 
    479          ! to bottom accretion 
    480          DO ji = 1, nbpac 
    481             ! vectorize 
    482             IF ( za_newice(ji) .GT. ( 1.0 - zat_i_ac(ji) ) ) THEN 
    483                zda_res(ji)    = za_newice(ji) - (1.0 - zat_i_ac(ji) ) 
    484                zdv_res(ji)    = zda_res(ji) * zh_newice(ji)  
    485                za_newice(ji)  = za_newice(ji) - zda_res(ji) 
    486                zv_newice(ji)  = zv_newice(ji) - zdv_res(ji) 
     441         ! we keep the excessive volume in memory and attribute it later to bottom accretion 
     442         DO ji = 1, nbpac 
     443            IF ( za_newice(ji)  >  ( 1._wp - zat_i_ac(ji) ) ) THEN 
     444               zda_res(ji)   = za_newice(ji) - (1.0 - zat_i_ac(ji) ) 
     445               zdv_res(ji)   = zda_res  (ji) * zh_newice(ji)  
     446               za_newice(ji) = za_newice(ji) - zda_res  (ji) 
     447               zv_newice(ji) = zv_newice(ji) - zdv_res  (ji) 
    487448            ELSE 
    488                zda_res(ji) = 0.0 
    489                zdv_res(ji) = 0.0 
     449               zda_res(ji) = 0._wp 
     450               zdv_res(ji) = 0._wp 
    490451            ENDIF 
    491452         END DO ! ji 
     
    497458         DO jl = 1, jpl 
    498459            DO ji = 1, nbpac 
    499                IF(  hi_max   (jl-1)  <  zh_newice(ji)   .AND.   & 
    500                   & zh_newice(ji)    <= hi_max   (jl)         ) THEN 
     460               IF(  hi_max   (jl-1)  <   zh_newice(ji)   .AND.   & 
     461                  & zh_newice(ji)    <=  hi_max   (jl)         ) THEN 
    501462                  za_i_ac (ji,jl) = za_i_ac (ji,jl) + za_newice(ji) 
    502463                  zv_i_ac (ji,jl) = zv_i_ac (ji,jl) + zv_newice(ji) 
     
    504465                  zcatac  (ji)    = jl 
    505466               ENDIF 
    506             END DO ! ji 
    507          END DO ! jl 
     467            END DO 
     468         END DO 
    508469 
    509470         !---------------------------------- 
     
    521482            DO ji = 1, nbpac 
    522483               jl = zcatac(ji) 
    523                zqold   = ze_i_ac(ji,jk,jl) ! [ J.m-3 ] 
     484               zqold   = ze_i_ac(ji,jk,jl)      ! [ J.m-3 ] 
    524485               zalphai = MIN( zhice_old(ji,jl) *   jk       / nlay_i , zh_newice(ji) )   & 
    525486                  &    - MIN( zhice_old(ji,jl) * ( jk - 1 ) / nlay_i , zh_newice(ji) ) 
     
    527488                  + ( 1.0 - zswinew(ji) ) * ( za_old(ji,jl)  * zqold * zhice_old(ji,jl) / nlay_i   & 
    528489                  + za_newice(ji)  * ze_newice(ji) * zalphai                                       & 
    529                   + za_newice(ji)  * ze_newice(ji) * zdhex(ji) / nlay_i ) / ( ( zv_i_ac(ji,jl) ) / nlay_i ) 
     490                  + za_newice(ji)  * ze_newice(ji) * zdhex(ji) / nlay_i ) / ( zv_i_ac(ji,jl) / nlay_i ) 
    530491            END DO 
    531492         END DO 
     
    567528               zdhicbot (ji,jl) = zdv_res(ji)    / MAX( za_i_ac(ji,jl) , epsi10 ) * zindb    & 
    568529                  &             +  zindb * zdh_frazb(ji)                               ! frazil ice may coalesce 
    569                zdummy(ji,jl)    = zv_i_ac(ji,jl)/MAX(za_i_ac(ji,jl),epsi10)*zindb      ! thickness of residual ice 
     530               zdummy(ji,jl)    = zv_i_ac(ji,jl) / MAX( za_i_ac(ji,jl) , epsi10 ) * zindb      ! thickness of residual ice 
    570531            END DO 
    571532         END DO 
     
    628589         ! Update salinity 
    629590         !----------------- 
    630          IF(  num_sal == 2  .OR.  num_sal == 4  ) THEN 
     591         IF(  num_sal == 2  ) THEN      ! Sice = F(z,t) 
    631592            DO jl = 1, jpl 
    632593               DO ji = 1, nbpac 
    633                   zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zv_i_ac(ji,jl) ) )  ! 0 if no ice and 1 if yes 
     594                  zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zv_i_ac(ji,jl) ) )   ! 0 if no ice and 1 if yes 
    634595                  zdv   = zv_i_ac(ji,jl) - zv_old(ji,jl) 
    635596                  zsmv_i_ac(ji,jl) = ( zsmv_i_ac(ji,jl) + zdv * zs_newice(ji) ) * zindb 
     
    645606            CALL tab_1d_2d( nbpac, v_i (:,:,jl), npac(1:nbpac), zv_i_ac (1:nbpac,jl), jpi, jpj ) 
    646607            CALL tab_1d_2d( nbpac, oa_i(:,:,jl), npac(1:nbpac), zoa_i_ac(1:nbpac,jl), jpi, jpj ) 
    647             IF (  num_sal == 2  .OR.  num_sal == 4  )   & 
     608            IF (  num_sal == 2  )   & 
    648609               CALL tab_1d_2d( nbpac, smv_i (:,:,jl), npac(1:nbpac), zsmv_i_ac(1:nbpac,jl) , jpi, jpj ) 
    649610            DO jk = 1, nlay_i 
     
    651612            END DO 
    652613         END DO 
    653          CALL tab_1d_2d( nbpac, fseqv , npac(1:nbpac), fseqv_1d  (1:nbpac) , jpi, jpj ) 
     614         CALL tab_1d_2d( nbpac, sfx_thd, npac(1:nbpac), sfx_thd_1d(1:nbpac), jpi, jpj ) 
     615         CALL tab_1d_2d( nbpac, rdm_ice, npac(1:nbpac), rdm_ice_1d(1:nbpac), jpi, jpj ) 
    654616         ! 
    655617      ENDIF ! nbpac > 0 
     
    660622      DO jl = 1, jpl 
    661623         DO jk = 1, nlay_i          ! heat content in 10^9 Joules 
    662             e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * area(:,:) * v_i(:,:,jl) / nlay_i  / unit_fac  
     624            e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * area(:,:) * v_i(:,:,jl) / nlay_i / unit_fac  
    663625         END DO 
    664626      END DO 
Note: See TracChangeset for help on using the changeset viewer.