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 834 for trunk/NEMO/LIM_SRC_3/limthd_dh.F90 – NEMO

Ignore:
Timestamp:
2008-03-07T18:11:35+01:00 (16 years ago)
Author:
ctlod
Message:

Clean comments and useless lines, see ticket:#72

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC_3/limthd_dh.F90

    r825 r834  
    11MODULE limthd_dh 
    22#if defined key_lim3 
     3   !!---------------------------------------------------------------------- 
     4   !!   'key_lim3'                                      LIM3 sea-ice model 
     5   !!---------------------------------------------------------------------- 
    36   !!====================================================================== 
    47   !!                       ***  MODULE limthd_dh *** 
     
    1922   USE ice 
    2023   USE par_ice 
    21    USE limicepoints 
    2224       
    2325   IMPLICIT NONE 
     
    3638 
    3739   !!---------------------------------------------------------------------- 
    38    !!   LIM 3.0,  UCL-ASTR-LOCEAN-IPSL (2005) 
     40   !!   LIM 3.0,  UCL-ASTR-LOCEAN-IPSL (2008) 
    3941   !!---------------------------------------------------------------------- 
    4042 
     
    7072       !! ** References : Bitz and Lipscomb, JGR 99 
    7173       !!                 Fichefet T. and M. Maqueda 1997, J. Geophys. Res., 102(C6), 12609-12646    
    72        !!                 Vancoppenolle Fichefet and Bitz, GRL 2005 
     74       !!                 Vancoppenolle, Fichefet and Bitz, GRL 2005 
     75       !!                 Vancoppenolle et al., OM08 
    7376       !! 
    7477       !! ** History  :  
    7578       !!   original code    01-04 (LIM) 
    7679       !!   original routine 
    77        !!               (05-2003) Martin Vancoppenolle, Louvain-La-Neuve, Belgium 
    78        !!               (06/07-2005) Martin Vancoppenolle for the 3D version 
     80       !!               (05-2003) M. Vancoppenolle, Louvain-La-Neuve, Belgium 
     81       !!               (06/07-2005) 3D version 
     82       !!               (03-2008)    Clean code 
    7983       !! 
    8084       !!------------------------------------------------------------------ 
     
    9094          jk        ,         &  !: ice layer index 
    9195          isnow     ,         &  !: switch for presence (1) or absence (0) of snow 
    92           index     ,         &  !: ice point index (limicepoints) 
    9396          zji       ,         &  !: 2D corresponding indices to ji 
    9497          zjj       ,         & 
     
    107110          zhnfi     ,         & 
    108111          zihg      ,         & 
    109           zdhgm     ,         & 
    110112          zdhnm     ,         & 
    111113          zhnnew    ,         & 
    112           zdfseqv   ,         & 
    113114          zeps = 1.0e-13,     & 
    114115          zhisn     ,         & 
     
    116117                                 !: entrapment 
    117118          zds       ,         &  !: increment of bottom ice salinity 
    118           zoldsinew ,         &  !: dummy argument for error diagnosis 
    119119          zcoeff    ,         &  !: dummy argument for snowfall partitioning 
    120120                                 !: over ice and leads 
    121           zjiindex  ,         &  !: zdhs_temp, & 
    122121          zsm_snowice,        &  !: snow-ice salinity 
    123122          zswi1     ,         &  !: switch for computation of bottom salinity 
     
    159158 
    160159       REAL(wp), DIMENSION(jpij,jkmax) :: & 
    161           zqt_i_lay  ,        &  !: total ice heat content 
    162           zqt_s_lay              !: total snow heat content 
     160          zqt_i_lay              !: total ice heat content 
    163161 
    164162       ! Heat conservation  
     
    181179      WRITE(numout,*) 'lim_thd_dh : computation of vertical snow/ice accretion/ablation' 
    182180      WRITE(numout,*) '~~~~~~~~~' 
     181 
    183182      zfsalt_melt(:)  = 0.0 
    184183      ftotal_fin(:)   = 0.0 
     
    211210      dsm_i_se_1d(:) = 0.0      
    212211      dsm_i_si_1d(:) = 0.0      
    213 !     ! heat conservation 
    214 !     IF ( con_i ) THEN 
    215 !     IF (jiindex_1d .GT.0) WRITE(numout,*) ' zf_surf   : ', z_f_surf(jiindex_1d) 
    216 !     IF (jiindex_1d .GT.0) WRITE(numout,*) ' qnsr_ice  : ', qnsr_ice_1d(jiindex_1d) 
    217 !     IF (jiindex_1d .GT.0) WRITE(numout,*) ' qsr_ice   : ', qsr_ice_1d(jiindex_1d) 
    218 !     IF (jiindex_1d .GT.0) WRITE(numout,*) ' fc_su     : ', fc_su(jiindex_1d) 
    219 !     IF (jiindex_1d .GT.0) WRITE(numout,*) ' i0        : ', i0(jiindex_1d) 
    220 !     ENDIF 
    221  
     212! 
    222213!------------------------------------------------------------------------------! 
    223214!  2) Computing layer thicknesses and  snow and sea-ice enthalpies.            ! 
    224215!------------------------------------------------------------------------------! 
    225  
    226       !----------------- 
     216! 
    227217      ! Layer thickness 
    228       !----------------- 
    229218      DO ji = kideb,kiut 
    230219         zh_i(ji) = ht_i_b(ji) / nlay_i 
     
    232221      END DO 
    233222 
    234       !-------------------------------------- 
    235       ! Snow energy of melting, heat content 
    236       !-------------------------------------- 
     223      ! Total enthalpy of the snow 
    237224      zqt_s(:) = 0.0 
    238225      DO jk = 1, nlay_s 
    239226         DO ji = kideb,kiut 
    240             ! this line could be removed 
    241 !           q_s_b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 
    242             ! heat conservation 
    243227            zqt_s(ji)    =  zqt_s(ji) + q_s_b(ji,jk) * ht_s_b(ji) / nlay_s 
    244228         END DO 
    245229      END DO 
    246230 
    247 !     ! heat conservation 
    248 !     qt_s_in(:,jl) = zqt_s(:) 
    249 !     IF (jiindex_1d.GT.0) & 
    250 !     WRITE(numout,*) 'jl : ', jl, ' zqts    : ', zqt_s(jiindex_1d) / & 
    251 !                      rdt_ice 
    252  
    253 !     IF (jiindex_1d.GT.0) THEN 
    254 !     WRITE(numout,*) ' Vertical profile : ' 
    255 !     WRITE(numout,*) ' ht_s_b : ', ht_s_b(jiindex_1d) 
    256 !     WRITE(numout,*) ' qm0    : ', q_s_b(jiindex_1d,1:nlay_s) * ht_s_b(jiindex_1d) / & 
    257 !     rdt_ice 
    258 !     WRITE(numout,*) ' q_s_b  : ', q_s_b(jiindex_1d,1) 
    259 !     WRITE(numout,*) ' t_s_b  : ', t_s_b(jiindex_1d,1) 
    260 !     WRITE(numout,*) ' zthick0: ', ht_s_b(jiindex_1d) 
    261 !     ENDIF 
    262  
    263       !------------------------------------- 
    264       ! Ice energy of melting, heat content 
    265       !------------------------------------- 
     231      ! Total enthalpy of the ice 
    266232      zqt_i(:) = 0.0 
    267233      DO jk = 1, nlay_i 
    268234         DO ji = kideb,kiut 
    269             ! Melting point in K 
    270 !           ztmelts          =  - tmut * s_i_b(ji,jk) + rtt  
    271             ! this line could be removed 
    272 !           q_i_b(ji,jk)     =  rhoic *                                       & 
    273 !                             ( cpic    * ( ztmelts - t_i_b(ji,jk) )          & 
    274 !                             + lfus * ( 1.0 - (ztmelts-rtt) /                & 
    275 !                               MIN( ( t_i_b(ji,jk) - rtt ) , - zeps ) )      & 
    276 !                               - rcp      * ( ztmelts-rtt  ) ) 
    277235            zqt_i(ji)        =  zqt_i(ji) + q_i_b(ji,jk) * ht_i_b(ji) / nlay_i 
    278236            zqt_i_lay(ji,jk) =  q_i_b(ji,jk) * ht_i_b(ji) / nlay_i 
    279237         END DO 
    280238      END DO 
    281 !     IF (jiindex_1d.GT.0) & 
    282 !     WRITE(numout,*) 'jl : ', jl, ' zqti    : ', zqt_i(jiindex_1d) / & 
    283 !                      rdt_ice 
    284  
    285 !     IF (jiindex_1d.GT.0) THEN 
    286 !     WRITE(numout,*) ' --- Vertical profile : ' 
    287 !     WRITE(numout,*) ' ht_s_b : ', ht_s_b(jiindex_1d) 
    288 !     WRITE(numout,*) ' ht_i_b : ', ht_i_b(jiindex_1d) 
    289 !     WRITE(numout,*) ' q_i_b  : ', q_i_b(jiindex_1d, 1:nlay_i) 
    290 !     WRITE(numout,*) ' t_i_b  : ', t_i_b(jiindex_1d, 1:nlay_i) 
    291 !     WRITE(numout,*) ' qm0    : ', zqt_i_lay(jiindex_1d,1:nlay_i) / rdt_ice 
    292 !     WRITE(numout,*) ' zthick0: ', ht_i_b(jiindex_1d) / nlay_i 
    293 !     ENDIF 
    294  
    295239! 
    296240!------------------------------------------------------------------------------| 
     
    298242!------------------------------------------------------------------------------| 
    299243! 
    300       !--------------------- 
    301       ! Snow precips / melt 
    302       !--------------------- 
     244      !------------------------- 
     245      ! 3.1 Snow precips / melt 
     246      !------------------------- 
    303247      ! Snow accumulation in one thermodynamic time step 
    304248      ! snowfall is partitionned between leads and ice 
     
    306250      ! but because of the winds, more snow falls on leads than on sea ice 
    307251      ! and a greater fraction (1-at_i)^beta of the total mass of snow  
    308       ! (beta < 1) falls in leads 
     252      ! (beta < 1) falls in leads. 
    309253      ! In reality, beta depends on wind speed,  
    310254      ! and should decrease with increasing wind speed but here, it is  
    311       ! considered as a constant 
    312       ! an average value is 0.66 
     255      ! considered as a constant. an average value is 0.66 
    313256      ! Martin Vancoppenolle, December 2006 
    314257 
     
    322265      ! Melt of fallen snow 
    323266      DO ji = kideb, kiut 
    324  
    325267         ! tatm_ice is now in K 
    326268         zqprec(ji)     =  rhosn * ( cpic * ( rtt - tatm_ice_1d(ji) ) + lfus )   
     
    334276         qt_s_in(ji,jl) =  qt_s_in(ji,jl) + zqprec(ji) * zdh_s_pre(ji) 
    335277         zqt_s(ji)      =  zqt_s(ji) + zqprec(ji) * zdh_s_pre(ji) 
    336           
    337       END DO 
    338  
    339 !     IF (jiindex_1d .GT. 0) THEN 
    340 !        WRITE(numout,*) ' zqfont_su : ', zqfont_su(jiindex_1d) 
    341 !        WRITE(numout,*) ' zqprec    : ', zqprec(jiindex_1d)*( zdh_s_pre(jiindex_1d) + zdh_s_mel(jiindex_1d) ) / rdt_ice 
    342 !        WRITE(numout,*) ' tatm      : ', tatm_ice_1d(jiindex_1d) 
    343 !        WRITE(numout,*) 'jl : ', jl, ' zqts    : ', zqt_s(jiindex_1d) / & 
    344 !                         rdt_ice 
    345 !     ENDIF 
    346  
    347       ! updated total snow heat content 
     278      END DO 
     279 
     280      ! Update total snow heat content 
    348281      zqt_s(ji)         =  MAX ( zqt_s(ji) - zqfont_su(ji) , 0.0 )  
    349  
    350 !     IF (jiindex_1D .GT. 0) & 
    351 !     WRITE(numout,*) 'jl : ', jl, ' zqts    : ', zqt_s(jiindex_1d) / & 
    352 !                      rdt_ice 
    353282 
    354283      ! Snow melt due to surface heat imbalance 
     
    358287            zqfont_su(ji)  =  MAX( 0.0 , - zh_s(ji) - zdeltah(ji,jk) ) * & 
    359288                              q_s_b(ji,jk)  
    360 !           IF (ji.eq.jiindex_1d) WRITE(numout,*) ' zqfont_su : ', & 
    361 !           zqfont_su(jiindex_1d) 
    362289            zdeltah(ji,jk) =  MAX( zdeltah(ji,jk) , - zh_s(ji) ) 
    363290            zdh_s_mel(ji)  =  zdh_s_mel(ji) + zdeltah(ji,jk) !resulting melt of snow     
    364291         END DO 
    365292      END DO 
    366  
    367 !     !+++++ 
    368 !     IF (jiindex_1d .GT. 0 ) THEN 
    369 !     WRITE(numout,*) ' dhs_pre :', zdh_s_pre(jiindex_1d) 
    370 !     WRITE(numout,*) ' dhs_mel :', zdh_s_mel(jiindex_1d) 
    371 !     WRITE(numout,*) ' zqfont_su : ', zqfont_su(jiindex_1d) 
    372 !     ENDIF 
    373 !     !+++++ 
    374293 
    375294      ! Apply snow melt to snow depth 
     
    389308      END DO ! ji 
    390309 
    391 !     !+++++ 
    392 !     IF (jiindex_1d .GT. 1) WRITE(numout,*) ' dhs_tot   :', dh_s_tot(jiindex_1d) 
    393 !     IF (jiindex_1d .GT. 1) WRITE(numout,*) ' zqfont_su :', zqfont_su(jiindex_1d) 
    394 !     !+++++ 
    395  
    396       !---------------------- 
    397       ! Surface ice ablation  
    398       !---------------------- 
     310      !-------------------------- 
     311      ! 3.2 Surface ice ablation  
     312      !-------------------------- 
    399313      DO ji = kideb, kiut  
    400 !        IF (ji.eq.jiindex_1d) WRITE(numout,*) ' zqfont_su : ', & 
    401 !        zqfont_su(jiindex_1d) 
    402314         dh_i_surf(ji) =  0.0 
    403          ! Heat conservation test 
     315         ! For heat conservation test 
    404316         z_f_surf(ji)  =  zqfont_su(ji) / rdt_ice ! heat conservation test 
    405317         zdq_i(ji)     =  0.0 
     
    408320      DO jk = 1, nlay_i 
    409321         DO ji = kideb, kiut  
     322            ! melt of layer jk 
    410323            zdeltah(ji,jk)      = - zqfont_su(ji) / q_i_b(ji,jk) 
     324            ! recompute heat available 
    411325            zqfont_su(ji)       = MAX( 0.0 , - zh_i(ji) - zdeltah(ji,jk) ) *  & 
    412326                                  q_i_b(ji,jk)  
     327            ! melt of layer jk cannot be higher than its thickness 
    413328            zdeltah(ji,jk)      = MAX( zdeltah(ji,jk) , - zh_i(ji) ) 
     329            ! update surface melt 
    414330            dh_i_surf(ji)       = dh_i_surf(ji) + zdeltah(ji,jk)  
     331            ! for energy conservation 
    415332            zdq_i(ji)           = zdq_i(ji) + zdeltah(ji,jk) *                & 
    416333                                        q_i_b(ji,jk) / rdt_ice 
    417             ! Contribution to salt flux -> to change 
     334            ! contribution to ice-ocean salt flux  
    418335            zji                 = MOD( npb(ji) - 1, jpi ) + 1 
    419336            zjj                 = ( npb(ji) - 1 ) / jpi + 1 
    420337            zfsalt_melt(ji)     = zfsalt_melt(ji) +                           & 
    421 !                                 ( sss_io(zji,zjj) - s_i_b(ji,jk) ) *        & 
    422338                                  ( sss_io(zji,zjj) - sm_i_b(ji)   ) *        & 
    423339                                  a_i_b(ji) *                                 & 
    424340                                  MIN( zdeltah(ji,jk) , 0.0 ) * rhoic / rdt_ice  
    425 !+++++++++++ 
    426 !           IF ( (zji.eq.jiindex) .AND. (zjj.eq.jjindex) ) THEN 
    427 !              WRITE(numout,*) ' surf abl ' 
    428 !              WRITE(numout,*) ' zfsalt_melt : ', zfsalt_melt(ji) / ( sss_io(zji,zjj)+epsi16) 
    429 !              WRITE(numout,*) ' sss_io      : ', sss_io(zji,zjj) 
    430 !           ENDIF 
    431 !+++++++++++ 
    432341         END DO ! ji 
    433342      END DO ! jk 
     
    446355         ENDIF 
    447356 
    448          IF ( z_f_surf(ji) + zdq_i(ji) .GE. 1.0e-3  ) THEN!.GE. 1.0e-3 ) .AND. & 
    449 !             ( ( ht_i_b(ji) + dh_i_bott(ji) ) .GE. 1.0e-6 ) ) THEN 
     357         IF ( z_f_surf(ji) + zdq_i(ji) .GE. 1.0e-3  ) THEN! 
    450358            WRITE(numout,*) ' ALERTE heat loss for surface melt ' 
    451359            WRITE(numout,*) ' zji, zjj, jl :', zji, zjj, jl 
     
    471379      ENDIF ! con_i 
    472380 
    473       !------------------ 
    474       ! Snow sublimation 
    475       !------------------ 
    476 !     !++++++ 
    477 !     zqt_dummy(:) = 0.0 
    478 !     DO jk = 1, nlay_s 
    479 !        DO ji = kideb,kiut 
    480 !           q_s_b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 
    481 !           ! heat conservation 
    482 !           zqt_dummy(ji)    =  zqt_dummy(ji) + q_s_b(ji,jk) * old_ht_s_b(ji) / nlay_s 
    483 !        END DO 
    484 !     END DO 
    485  
    486 !     IF (jiindex_1d .GT. 0) & 
    487 !     WRITE(numout,*) 'jl : ', jl, ' Old zqts : ', zqt_dummy(jiindex_1d) / & 
    488 !                     rdt_ice 
    489       !++++++ 
    490 !     !++++++ 
    491 !     zqt_dummy(:) = 0.0 
    492 !     DO jk = 1, nlay_s 
    493 !        DO ji = kideb,kiut 
    494 !           q_s_b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 
    495 !           ! heat conservation 
    496 !           zqt_dummy(ji)    =  zqt_dummy(ji) + q_s_b(ji,jk) * ht_s_b(ji) / nlay_s 
    497 !        END DO 
    498 !     END DO 
    499 !     IF (jiindex_1d .GT. 0) & 
    500 !     WRITE(numout,*) 'jl : ', jl, ' New zqts : ', zqt_dummy(jiindex_1d) / & 
    501 !                     rdt_ice 
    502 !     !++++++ 
     381      !---------------------- 
     382      ! 3.3 Snow sublimation 
     383      !---------------------- 
    503384 
    504385      DO ji = kideb, kiut 
     
    510391         ht_s_b(ji)      =  MAX( zzero , zdhcf ) 
    511392         ! we recompute dh_s_tot  
    512          ! which may be different in case of total snow melt 
    513393         dh_s_tot(ji)    =  ht_s_b(ji) - zhsold(ji) 
    514 !        IF ( ht_s_b(ji) .LE. 0.0 ) THEN 
    515 !           dh_s_tot(ji) =  MAX( 0.0 , dh_s_tot(ji) ) 
    516 !        ENDIF  
    517  
    518394         qt_s_in(ji,jl) =  qt_s_in(ji,jl) + zdh_s_sub(ji)*q_s_b(ji,1) 
    519395      END DO  !ji 
    520396 
    521 !     IF ( jiindex_1d .GT. 0 ) THEN 
    522 !        WRITE(numout,*) ' dh_s_sub : ', zdh_s_sub(jiindex_1d) 
    523 !        WRITE(numout,*) ' dhs_tot  : ', dh_s_tot(jiindex_1d) 
    524 !     ENDIF 
    525  
    526       !++++++ 
    527397      zqt_dummy(:) = 0.0 
    528398      DO jk = 1, nlay_s 
     
    533403         END DO 
    534404      END DO 
    535 !     IF (jiindex_1d .GT. 0) & 
    536 !     WRITE(numout,*) 'jl : ', jl, ' Old zqts : ', zqt_dummy(jiindex_1d) / & 
    537 !                     rdt_ice 
    538 !     !++++++ 
    539  
    540 !     IF (jiindex_1d .GT. 0) THEN 
    541 !        WRITE(numout,*) ' t_s_b : ', t_s_b(jiindex_1d,1) 
    542 !        WRITE(numout,*) ' q_s_b : ', q_s_b(jiindex_1d,1) 
    543 !     ENDIF 
    544405 
    545406      DO jk = 1, nlay_s !n  
     
    553414      END DO  
    554415 
    555 !     IF (jiindex_1d .GT. 0) THEN 
    556 !        WRITE(numout,*) ' t_s_b : ', t_s_b(jiindex_1d,1) 
    557 !        WRITE(numout,*) ' q_s_b : ', q_s_b(jiindex_1d,1) 
    558 !     ENDIF 
    559  
    560416! 
    561417!------------------------------------------------------------------------------! 
     
    567423      ! the inner conductive flux  (fc_bo_i), from the open water heat flux  
    568424      ! (qlbbqb) and the turbulent ocean flux (fbif).  
    569       ! fc_bo_i is positive downwards 
    570       ! fbif and qlbbq are positive to the ice  
    571  
    572       !--------------------------------------------- 
    573       ! Basal growth - salinity not varying in time  
    574       !--------------------------------------------- 
    575       IF ( num_sal .NE. 2 ) THEN 
     425      ! fc_bo_i is positive downwards. fbif and qlbbq are positive to the ice  
     426 
     427      !----------------------------------------------------- 
     428      ! 4.1 Basal growth - (a) salinity not varying in time  
     429      !----------------------------------------------------- 
     430      IF ( ( num_sal .NE. 2 ) .AND. ( num_sal .NE. 4 ) ) THEN 
    576431         DO ji = kideb, kiut 
    577432            IF (  ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) .LT. 0.0  ) THEN 
     
    590445               dh_i_bott(ji)       =  - rdt_ice*( fc_bo_i(ji) + fbif_1d(ji) + & 
    591446                                      qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1)  
    592 !              IF ( ji .EQ. jiindex_1d ) THEN 
    593 !                 WRITE(numout,*) ' s_i_new : ', s_i_new(ji) 
    594 !                 WRITE(numout,*) ' ztmelts : ', ztmelts 
    595 !                 WRITE(numout,*) ' t_bo    : ', t_bo_b(ji) 
    596 !                 WRITE(numout,*) ' q_i_b   : ', q_i_b(ji,nlay_i+1) 
    597 !                 WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    598 !              ENDIF 
    599447            ENDIF ! heat budget 
    600448         END DO ! ji 
    601449      ENDIF ! num_sal 
    602450 
    603 !     IF ( jiindex_1d .GT. 0 ) THEN 
    604 !     WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(jiindex_1d) 
    605 !     WRITE(numout,*) ' q_i_b     : ', q_i_b(jiindex_1d,nlay_i+1) 
    606 !     WRITE(numout,*) ' fc_bo_i   : ', fc_bo_i(jiindex_1d) 
    607 !     WRITE(numout,*) ' fbif_1d   : ', fbif_1d(jiindex_1d) 
    608 !     WRITE(numout,*) ' qlbbq_1d  : ', qlbbq_1d(jiindex_1d) 
    609 !     ENDIF 
    610  
    611       !----------------------------------------- 
    612       ! Basal growth - salinity varying in time  
    613       !----------------------------------------- 
     451      !------------------------------------------------- 
     452      ! 4.1 Basal growth - (b) salinity varying in time  
     453      !------------------------------------------------- 
    614454      IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) THEN 
    615455         ! the growth rate (dh_i_bott) is function of the new ice 
     
    617457         ! salinity (snewice). snewice depends on dh_i_bott 
    618458         ! it converges quickly, so, no problem 
     459         ! See Vancoppenolle et al., OM08 for more info on this 
    619460 
    620461         ! Initial value (tested 1D, can be anything between 1 and 20) 
     
    636477                                                 ( t_bo_b(ji) - rtt ) )       & 
    637478                                      - rcp * ( ztmelts-rtt ) ) 
    638 !              !+++++++ 
    639 !              IF (ji.EQ.jiindex_1d) THEN 
    640 !                 WRITE(numout,*) ' ztmelts            : ', ztmelts 
    641 !                 WRITE(numout,*) ' t_bo_b             : ', t_bo_b(ji) 
    642 !                 WRITE(numout,*) ' q_i_b(ji,nlay_i+1) : ', q_i_b(ji,nlay_i+1) 
    643 !              ENDIF 
    644 !              !+++++++ 
    645479                  ! Bottom growth rate = - F*dt / q 
    646480                  dh_i_bott(ji)       =  - rdt_ice * ( fc_bo_i(ji) + fbif_1d(ji) & 
     
    650484                  ! zswi12 (1) if dh_i_bott/rdt .LT. 3.6e-7 and .GT. 2.0e-8 
    651485                  ! zswi1  (1) if dh_i_bott/rdt .LT. 2.0e-8 
    652 !                 zgrr   = MAX( dh_i_bott(ji) / rdt_ice, 0.0 ) 
    653486                  zgrr   = MIN( 1.0e-3, MAX ( dh_i_bott(ji) / rdt_ice , zeps ) ) 
    654487                  zswi2  = MAX( zzero , SIGN( zone , zgrr - 3.6e-7 ) )  
    655488                  zswi12 = MAX( zzero , SIGN( zone , zgrr - 2.0e-8 ) ) * ( 1.0 - zswi2 ) 
    656489                  zswi1  = 1. - zswi2 * zswi12  
    657 !                 IF (ji.EQ.jiindex_1d) THEN 
    658 !                    WRITE(numout,*) ' zgrr  : ', zgrr 
    659 !                    WRITE(numout,*) ' zswi2 : ', zswi2, ' zswi12 :', zswi12, ' zswi1 :', zswi1 
    660 !                 ENDIF 
    661490                  zfracs = zswi1  * 0.12 +  & 
    662491                           zswi12 * ( 0.8925 + 0.0568 * LOG( 100.0 * zgrr ) ) + & 
     
    673502            IF ( ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) .LT. 0.0  ) THEN 
    674503               ! New ice salinity must not exceed 15 psu 
    675                zoldsinew   = s_i_new(ji) 
    676504               s_i_new(ji) = MIN( s_i_new(ji), s_i_max ) 
    677505               ! Metling point in K 
     
    684512                                   - rcp * ( ztmelts-rtt ) ) 
    685513               ! Basal growth rate = - F*dt / q 
    686                ! sometimes, growth is very high because of very high bottom cond 
    687                ! flux... this is dangerous 
    688514               dh_i_bott(ji)       =  - rdt_ice*( fc_bo_i(ji) + fbif_1d(ji) + & 
    689515                                      qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1)  
    690       ! new lines 
    691       !----------------- 
    692       ! Salinity update 
    693       !----------------- 
     516               ! Salinity update 
    694517               ! entrapment during bottom growth 
    695518               dsm_i_se_1d(ji) =  ( s_i_new(ji)*dh_i_bott(ji) +              &  
     
    701524      ENDIF ! num_sal 
    702525 
    703 !     IF ( jiindex_1d .GT. 0 ) THEN 
    704 !     WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(jiindex_1d) 
    705 !     WRITE(numout,*) ' s_i_new   : ', s_i_new(jiindex_1d) 
    706 !     ENDIF 
    707  
    708       !------------ 
    709       ! Basal melt 
    710       !------------ 
    711       !++++++ 
     526      !---------------- 
     527      ! 4.2 Basal melt 
     528      !---------------- 
    712529      meance_dh = 0.0 
    713530      numce_dh = 0 
    714531      innermelt(:) = 0 
    715       !++++++ 
    716532 
    717533      DO ji = kideb, kiut 
     
    729545      END DO 
    730546 
    731 !     IF ( jiindex_1d .GT. 0 ) THEN 
    732 !     WRITE(numout,*) ' zqfont_bo : ', zqfont_bo(jiindex_1d) / rdt_ice 
    733 !     WRITE(numout,*) ' fc_bo_i   : ', fc_bo_i(jiindex_1d) 
    734 !     WRITE(numout,*) ' fbif      : ', fbif_1d(jiindex_1d) 
    735 !     WRITE(numout,*) ' qlbbq     : ', qlbbq_1d(jiindex_1d) 
    736 !     WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(jiindex_1d) 
    737 !     ENDIF 
    738  
    739547      DO jk = nlay_i, 1, -1 
    740548         DO ji = kideb, kiut 
    741549            IF (  ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) .GE. 0.0  ) THEN 
    742550               ztmelts             =   - tmut * s_i_b(ji,jk) + rtt  
    743                ! sometimes internal temperature gt melting point  
    744                ! the whole layer is removed 
    745 !              IF (ji.EQ.jiindex_1d) THEN 
    746 !                 WRITE(numout,*) ' jk : ', jk 
    747 !                 WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    748 !                 WRITE(numout,*) ' zqfont_bo : ', zqfont_bo(ji) 
    749 !                 WRITE(numout,*) ' t_i_b     : ', t_i_b(ji,jk) 
    750 !                 WRITE(numout,*) ' q_i_b     : ', q_i_b(ji,jk) 
    751 !              ENDIF 
    752551               IF ( t_i_b(ji,jk) .GE. ztmelts ) THEN 
    753552                  zdeltah(ji,jk)  = - zh_i(ji) 
    754       !           zqfont_bo(ji)   = zqfont_bo(ji) 
    755553                  dh_i_bott(ji)   = dh_i_bott(ji) + zdeltah(ji,jk) 
    756                   !++++++ 
    757554                  innermelt(ji)   = 1 
    758                   !++++++ 
    759 !                 IF (ji.EQ.jiindex_1d) THEN 
    760 !                    WRITE(numout,*) ' Inner melt: ', innermelt(ji) 
    761 !                    WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    762 !                    WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    763 !                 ENDIF 
    764555               ELSE  ! normal ablation 
    765556                  zdeltah(ji,jk)  = - zqfont_bo(ji) / q_i_b(ji,jk) 
     
    774565                  zjj             = ( npb(ji) - 1 ) / jpi + 1 
    775566                  zfsalt_melt(ji) = zfsalt_melt(ji) +                         & 
    776 !                                  ( sss_io(zji,zjj) - s_i_b(ji,jk) ) *       & 
    777567                                   ( sss_io(zji,zjj) - sm_i_b(ji)   ) *       & 
    778568                                   a_i_b(ji) * & 
    779569                                   MIN( zdeltah(ji,jk) , 0.0 ) * rhoic / rdt_ice  
    780 !                 IF (ji.EQ.jiindex_1d) THEN 
    781 !                    WRITE(numout,*) ' No inner melt ' 
    782 !                    WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    783 !                    WRITE(numout,*) ' zqfont_bo : ', zqfont_bo(ji) 
    784 !                    WRITE(numout,*) ' t_i_b     : ', t_i_b(ji,jk) 
    785 !                    WRITE(numout,*) ' q_i_b     : ', q_i_b(ji,jk) 
    786 !                    WRITE(numout,*) 
    787 !                 ENDIF 
    788570               ENDIF 
    789 !           IF ( ji .EQ. jiindex_1d ) THEN 
    790 !              WRITE(numout,*) ' basal melt ' 
    791 !              WRITE(numout,*) ' sss_io      : ', sss_io(zji,zjj) 
    792 !              WRITE(numout,*) ' zfsalt_melt : ', zfsalt_melt(ji) 
    793 !              WRITE(numout,*) ' zfsalt_melt good units : ', zfsalt_melt(ji) / ( sss_io(zji,zjj) + epsi16 ) 
    794 !           ENDIF 
    795             !+++++ 
    796571            ENDIF 
    797572         END DO ! ji 
    798573      END DO ! jk 
    799574 
     575      !------------------- 
     576      ! Conservation test 
     577      !------------------- 
    800578      IF ( con_i ) THEN 
    801579      DO ji = kideb, kiut 
    802580         IF (  ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) .GE. 0.0  ) THEN 
    803             !------------------- 
    804             ! Conservation test 
    805             !------------------- 
    806581            IF ( ( zfbase(ji) + zdq_i(ji) ) .GE. 1.0e-3 ) THEN 
    807582               numce_dh = numce_dh + 1 
    808583               meance_dh = meance_dh + zfbase(ji) + zdq_i(ji) 
    809584            ENDIF 
    810             IF ( zfbase(ji) + zdq_i(ji) .GE. 1.0e-3  ) THEN!.GE. 1.0e-3 ) .AND. & 
    811 !                ( ( ht_i_b(ji) + dh_i_bott(ji) ) .GE. 1.0e-6 ) ) THEN 
     585            IF ( zfbase(ji) + zdq_i(ji) .GE. 1.0e-3  ) THEN 
    812586                WRITE(numout,*) ' ALERTE heat loss for basal  melt ' 
    813587                WRITE(numout,*) ' zji, zjj, jl :', zji, zjj, jl 
     
    834608      ENDIF ! con_i 
    835609 
    836 !     IF ( jiindex_1d .GT. 0 ) THEN 
    837 !        WRITE(numout,*) ' zqfont_bo : ', zqfont_bo(jiindex_1d) / rdt_ice 
    838 !        WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(jiindex_1d) 
    839 !     ENDIF 
    840610! 
    841611!------------------------------------------------------------------------------! 
     
    843613!------------------------------------------------------------------------------! 
    844614! 
    845       !------------------------------------------ 
    846       ! Excessive ablation in a 1-category model 
    847       !------------------------------------------ 
     615      !---------------------------------------------- 
     616      ! 5.1 Excessive ablation in a 1-category model 
     617      !---------------------------------------------- 
    848618 
    849619      DO ji = kideb, kiut 
     
    872642      END DO 
    873643 
    874 !     IF (jiindex_1d .GT. 0 ) THEN 
    875 !     WRITE(numout,*) ' ht_i_b : ', ht_i_b(jiindex_1d) 
    876 !     WRITE(numout,*) ' ht_s_b : ', ht_s_b(jiindex_1d) 
    877 !     ENDIF 
    878  
    879       !-------------------------- 
    880       ! If too much ice melts 
    881       !-------------------------- 
     644      !----------------------------------- 
     645      ! 5.2 More than available ice melts 
     646      !----------------------------------- 
    882647      ! then heat applied minus heat content at previous time step 
    883648      ! should equal heat remaining  
     
    890655         zhgnew(ji) =  zihgnew * zhgnew(ji) ! ice thickness is put to 0 
    891656         ! remaining heat 
    892          zfdt_final(ji) = ( 1.0 - zihgnew ) * ( zqfont_su(ji) +  zqfont_bo(ji) ) ! & 
    893 !                       + zihgnew * MAX ( zfdt_init(ji) - zqt_i(ji) - zqt_s(ji), 0.0 ) 
    894  
    895 !        !++++++++++ 
    896 !        IF (ji.EQ.jiindex_1d) THEN 
    897 !           WRITE(numout,*) ' zfdt_init : ', zfdt_init(ji) / rdt_ice 
    898 !           WRITE(numout,*) ' zqt_i     : ', zqt_i(ji) / rdt_ice 
    899 !           WRITE(numout,*) ' 1. zqt_s  : ', zqt_s(ji) / rdt_ice 
    900 !           WRITE(numout,*) ' zqt       : ', ( zqt_i(ji) + zqt_s(ji) ) / rdt_ice 
    901 !           WRITE(numout,*) ' zhgnew    : ', zhgnew(ji) 
    902 !           WRITE(numout,*) ' zihgnew   : ', zihgnew 
    903 !           WRITE(numout,*) ' dh_i_surf : ', dh_i_surf(ji) 
    904 !           WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    905 !           WRITE(numout,*) ' ht_s_b    : ', ht_s_b(ji) 
    906 !           WRITE(numout,*) ' 1. zfdt_final: ', zfdt_final(ji) / rdt_ice 
    907 !           WRITE(numout,*) ' zqfont_su : ', zqfont_su(jiindex_1d) / rdt_ice 
    908 !           WRITE(numout,*) ' zqfont_bo : ', zqfont_bo(jiindex_1d) / rdt_ice 
    909 !        ENDIF 
    910 !        !++++++++++ 
     657         zfdt_final(ji) = ( 1.0 - zihgnew ) * ( zqfont_su(ji) +  zqfont_bo(ji) )  
    911658 
    912659         ! If snow remains, energy is used to melt snow 
     
    923670         zqt_s(ji)      =  zqt_s(ji) * ht_s_b(ji) 
    924671 
    925 !        IF (ji.EQ.jiindex_1d) THEN 
    926 !           WRITE(numout,*) ' 2. zfdt_final   : ', zfdt_final(ji) / rdt_ice 
    927 !           WRITE(numout,*) ' ht_s_b       : ', ht_s_b(ji) 
    928 !           WRITE(numout,*) ' zhgnew       : ', zhgnew(ji) 
    929 !           WRITE(numout,*) ' 2. zqt_s     : ', zqt_s(ji) / rdt_ice 
    930 !           WRITE(numout,*) ' zdhnm        : ', zdhnm 
    931 !           WRITE(numout,*)  
    932 !        ENDIF 
    933  
    934672         ! Mass variations of ice and snow 
    935673         !--------------------------------- 
     
    942680         ! Remaining heat to the ocean  
    943681         !--------------------------------- 
    944          ! check the switches here 
    945682         ! focea is in W.m-2 * dt 
    946  
    947683         focea(ji)  = - zfdt_final(ji) / rdt_ice 
    948684 
    949 !        IF ( (zji.eq.jiindex) .AND. (zjj.eq.jjindex) ) THEN 
    950 !                WRITE(numout,*) ' focea : ', focea(ji) 
    951 !        ENDIF 
    952  
    953       END DO 
    954  
    955 !     IF (jiindex_1d .GT. 0 ) THEN 
    956 !     WRITE(numout,*) ' ht_i_b : ', ht_i_b(jiindex_1d) 
    957 !     WRITE(numout,*) ' ht_s_b : ', ht_s_b(jiindex_1d) 
    958 !     ENDIF 
     685      END DO 
    959686 
    960687      ftotal_fin (:) = zfdt_final(:)  / rdt_ice 
    961 !     IF (jiindex_1d .GT. 1 ) WRITE(numout,*) ' ftotal_fin : ', ftotal_fin(jiindex_1d) 
    962688 
    963689      !--------------------------- 
     
    986712                         focea(ji) * a_i_b(ji) * rdt_ice 
    987713 
    988 !        ! astarojna 
    989714         zihic   = 1.0 - MAX( zzero , SIGN( zone , -ht_i_b(ji) ) ) 
    990715         ! equals 0 if ht_i = 0, 1 if ht_i gt 0 
    991          ! fstbif_1d est cumulatif merde 
    992716         fscbq_1d(ji) =  a_i_b(ji) * fstbif_1d(ji) 
    993          ! here there is a bug 
    994717         qldif_1d(ji)  = qldif_1d(ji)                                         & 
    995718                       + fsup(ji) + ( 1.0 - zihgnew ) * focea(ji) * a_i_b(ji) &  
     
    1011734            t_i_b(ji,jk)  =  zihgnew * t_i_b(ji,jk) + ( 1.0 - zihgnew ) * rtt 
    1012735            q_i_b(ji,jk)  =  zihgnew * q_i_b(ji,jk) 
    1013 !           IF (ji.eq.jiindex_1d) THEN 
    1014 !                   WRITE(numout,*) ' jk    : ', jk 
    1015 !                   WRITE(numout,*) ' q_i_b : ', q_i_b(ji,jk) 
    1016 !                   WRITE(numout,*) ' t_i_b  : ', t_i_b(jiindex_1d, 1:nlay_i) 
    1017 !                   WRITE(numout,*) ' zihgnew : ', zihgnew, ' zhgnew : ', & 
    1018 !                   zhgnew(ji) 
    1019 !           ENDIF 
    1020736         END DO 
    1021737      END DO  ! ji 
    1022738 
    1023 !     IF (jiindex_1d.GT.0) THEN 
    1024 !     WRITE(numout,*) ' --- Vertical profile : ' 
    1025 !     WRITE(numout,*) ' q_i_b  : ', q_i_b(jiindex_1d, 1:nlay_i) 
    1026 !     ENDIF 
    1027  
    1028739      DO ji = kideb, kiut 
    1029740         ht_i_b(ji) = zhgnew(ji) 
    1030741      END DO  ! ji 
    1031  
    1032 !     IF (jiindex_1d .GT. 0 ) THEN 
    1033 !     WRITE(numout,*) ' ht_i_b : ', ht_i_b(jiindex_1d) 
    1034 !     WRITE(numout,*) ' ht_s_b : ', ht_s_b(jiindex_1d) 
    1035 !     ENDIF 
    1036742! 
    1037743!------------------------------------------------------------------------------| 
     
    1065771         zji                 = MOD( npb(ji) - 1, jpi ) + 1 
    1066772         zjj                 = ( npb(ji) - 1 ) / jpi + 1 
    1067 !        zsm_snowice  = MIN ( s_i_max, ( rhoic - rhosn ) / rhoic *            & 
    1068 !                       sss_io(zji,zjj) ) 
    1069773 
    1070774         zsm_snowice  = ( rhoic - rhosn ) / rhoic *            & 
     
    1115819      END DO !ji 
    1116820 
    1117 !     IF (jiindex_1d .GT. 1 ) THEN 
    1118 !     WRITE(numout,*) ' ht_i_b : ', ht_i_b(jiindex_1d) 
    1119 !     WRITE(numout,*) ' ht_s_b : ', ht_s_b(jiindex_1d) 
    1120 !     ENDIF 
    1121  
    1122821    END SUBROUTINE lim_thd_dh 
    1123822#else 
Note: See TracChangeset for help on using the changeset viewer.