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 5208 for branches/2014/dev_r4650_UKMO11_restart_functionality/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90 – NEMO

Ignore:
Timestamp:
2015-04-13T15:08:59+02:00 (9 years ago)
Author:
davestorkey
Message:

Merge in changes from trunk up to 5021.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO11_restart_functionality/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r4688 r5208  
    2626   USE wrk_nemo       ! work arrays 
    2727   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    28    USE cpl_oasis3, ONLY : lk_cpl 
    2928    
    3029   IMPLICIT NONE 
     
    3231 
    3332   PUBLIC   lim_thd_dh   ! called by lim_thd 
    34  
    35    REAL(wp) ::   epsi20 = 1.e-20   ! constant values 
    36    REAL(wp) ::   epsi10 = 1.e-10   ! 
    3733 
    3834   !!---------------------------------------------------------------------- 
     
    112108 
    113109      ! mass and salt flux (clem) 
    114       REAL(wp) :: zdvres, zswitch_sal, zswitch 
     110      REAL(wp) :: zdvres, zswitch_sal 
    115111 
    116112      ! Heat conservation  
    117113      INTEGER  ::   num_iter_max 
    118       REAL(wp) ::   zinda, zindq, zindh  
    119       REAL(wp), POINTER, DIMENSION(:) ::   zintermelt   ! debug 
    120114 
    121115      !!------------------------------------------------------------------ 
     
    129123      CALL wrk_alloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_1cat, zq_rema ) 
    130124      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
    131       CALL wrk_alloc( jpij, zintermelt ) 
    132       CALL wrk_alloc( jpij, jkmax, zdeltah, zh_i ) 
     125      CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) 
    133126      CALL wrk_alloc( jpij, icount ) 
    134127       
     
    148141      zh_i      (:,:) = 0._wp        
    149142      zdeltah   (:,:) = 0._wp        
    150       zintermelt(:)   = 0._wp 
    151143      icount    (:)   = 0 
    152144 
     
    156148      DO jk = 1, nlay_i 
    157149         DO ji = kideb, kiut 
    158             h_i_old (ji,jk) = ht_i_b(ji) / REAL( nlay_i ) 
    159             qh_i_old(ji,jk) = q_i_b(ji,jk) * h_i_old(ji,jk) 
     150            h_i_old (ji,jk) = ht_i_1d(ji) / REAL( nlay_i ) 
     151            qh_i_old(ji,jk) = q_i_1d(ji,jk) * h_i_old(ji,jk) 
    160152         ENDDO 
    161153      ENDDO 
     
    166158      ! 
    167159      DO ji = kideb, kiut 
    168          zinda         = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_b(ji) ) ) 
    169          ztmelts       = zinda * rtt + ( 1._wp - zinda ) * rtt 
    170  
    171          zfdum     = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji)  
    172          zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji)  
    173  
    174          zq_su (ji) = MAX( 0._wp, zfdum     * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_b(ji) - ztmelts ) ) 
     160         rswitch       = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_1d(ji) ) ) 
     161         ztmelts       = rswitch * rtt + ( 1._wp - rswitch ) * rtt 
     162 
     163         zfdum      = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji)  
     164         zf_tt(ji)  = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji)  
     165 
     166         zq_su (ji) = MAX( 0._wp, zfdum     * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - ztmelts ) ) 
    175167         zq_bo (ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 
    176168      END DO 
     
    182174      !------------------------------------------------------------------------------! 
    183175      DO ji = kideb, kiut 
    184          IF( t_s_b(ji,1) > rtt ) THEN !!! Internal melting 
     176         IF( t_s_1d(ji,1) > rtt ) THEN !!! Internal melting 
    185177            ! Contribution to heat flux to the ocean [W.m-2], < 0   
    186             hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_b(ji,1) * ht_s_b(ji) * a_i_b(ji) * r1_rdtice 
     178            hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_1d(ji,1) * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 
    187179            ! Contribution to mass flux 
    188             wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * ht_s_b(ji) * a_i_b(ji) * r1_rdtice 
     180            wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * ht_s_1d(ji) * a_i_1d(ji) * r1_rdtice 
    189181            ! updates 
    190             ht_s_b(ji)   = 0._wp 
    191             q_s_b (ji,1) = 0._wp 
    192             t_s_b (ji,1) = rtt 
     182            ht_s_1d(ji)   = 0._wp 
     183            q_s_1d (ji,1) = 0._wp 
     184            t_s_1d (ji,1) = rtt 
    193185         END IF 
    194186      END DO 
     
    199191      ! 
    200192      DO ji = kideb, kiut      
    201          zh_s(ji) = ht_s_b(ji) / REAL( nlay_s ) 
     193         zh_s(ji) = ht_s_1d(ji) / REAL( nlay_s ) 
    202194      END DO 
    203195      ! 
    204196      DO jk = 1, nlay_s 
    205197         DO ji = kideb, kiut 
    206             zqh_s(ji) =  zqh_s(ji) + q_s_b(ji,jk) * zh_s(ji) 
     198            zqh_s(ji) =  zqh_s(ji) + q_s_1d(ji,jk) * zh_s(ji) 
    207199         END DO 
    208200      END DO 
     
    210202      DO jk = 1, nlay_i 
    211203         DO ji = kideb, kiut 
    212             zh_i(ji,jk) = ht_i_b(ji) / REAL( nlay_i ) 
    213             zqh_i(ji)   = zqh_i(ji) + q_i_b(ji,jk) * zh_i(ji,jk) 
     204            zh_i(ji,jk) = ht_i_1d(ji) / REAL( nlay_i ) 
     205            zqh_i(ji)   = zqh_i(ji) + q_i_1d(ji,jk) * zh_i(ji,jk) 
    214206         END DO 
    215207      END DO 
     
    238230         !----------- 
    239231         ! thickness change 
    240          zcoeff = ( 1._wp - ( 1._wp - at_i_b(ji) )**betas ) / at_i_b(ji)  
     232         zcoeff = ( 1._wp - ( 1._wp - at_i_1d(ji) )**betas ) / at_i_1d(ji)  
    241233         zdh_s_pre(ji) = zcoeff * sprecip_1d(ji) * rdt_ice / rhosn 
    242234         ! enthalpy of the precip (>0, J.m-3) (tatm_ice is now in K) 
     
    244236         IF( sprecip_1d(ji) == 0._wp ) zqprec(ji) = 0._wp 
    245237         ! heat flux from snow precip (>0, W.m-2) 
    246          hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_b(ji) * zqprec(ji) * r1_rdtice 
     238         hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 
    247239         ! mass flux, <0 
    248          wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_b(ji) * zdh_s_pre(ji) * r1_rdtice 
     240         wfx_spr_1d(ji) = wfx_spr_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_pre(ji) * r1_rdtice 
    249241         ! update thickness 
    250          ht_s_b    (ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_pre(ji) ) 
     242         ht_s_1d    (ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_pre(ji) ) 
    251243 
    252244         !--------------------- 
     
    255247         ! thickness change 
    256248         IF( zdh_s_pre(ji) > 0._wp ) THEN 
    257          zindq          = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zqprec(ji) + epsi20 ) ) 
    258          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 ) 
    259251         zdh_s_mel (ji) = MAX( - zdh_s_pre(ji), zdh_s_mel(ji) ) ! bound melting  
    260252         ! heat used to melt snow (W.m-2, >0) 
    261          hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_b(ji) * zqprec(ji) * r1_rdtice 
     253         hfx_snw_1d(ji) = hfx_snw_1d(ji) - zdh_s_mel(ji) * a_i_1d(ji) * zqprec(ji) * r1_rdtice 
    262254         ! snow melting only = water into the ocean (then without snow precip), >0 
    263          wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_b(ji) * zdh_s_mel(ji) * r1_rdtice 
     255         wfx_snw_1d(ji) = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_mel(ji) * r1_rdtice 
    264256          
    265257         ! updates available heat + thickness 
    266258         zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdh_s_mel(ji) * zqprec(ji) )       
    267          ht_s_b(ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_mel(ji) ) 
    268          zh_s  (ji) = ht_s_b(ji) / REAL( nlay_s ) 
     259         ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdh_s_mel(ji) ) 
     260         zh_s  (ji) = ht_s_1d(ji) / REAL( nlay_s ) 
    269261 
    270262         ENDIF 
     
    276268         DO ji = kideb, kiut 
    277269            ! thickness change 
    278             zindh            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_b(ji) ) )  
    279             zindq            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_b(ji,jk) + epsi20 ) )  
    280             zdeltah  (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_b(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 ) 
    281273            zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji) ) ! bound melting 
    282274            zdh_s_mel(ji)    = zdh_s_mel(ji) + zdeltah(ji,jk)     
    283275            ! heat used to melt snow(W.m-2, >0) 
    284             hfx_snw_1d(ji)   = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_b(ji) * q_s_b(ji,jk) * r1_rdtice  
     276            hfx_snw_1d(ji)   = hfx_snw_1d(ji) - zdeltah(ji,jk) * a_i_1d(ji) * q_s_1d(ji,jk) * r1_rdtice  
    285277            ! snow melting only = water into the ocean (then without snow precip) 
    286             wfx_snw_1d(ji)   = wfx_snw_1d(ji) - rhosn * a_i_b(ji) * zdeltah(ji,jk) * r1_rdtice 
     278            wfx_snw_1d(ji)   = wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 
    287279 
    288280            ! updates available heat + thickness 
    289             zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_b(ji,jk) ) 
    290             ht_s_b(ji) = MAX( 0._wp , ht_s_b(ji) + zdeltah(ji,jk) ) 
     281            zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_1d(ji,jk) ) 
     282            ht_s_1d(ji) = MAX( 0._wp , ht_s_1d(ji) + zdeltah(ji,jk) ) 
    291283 
    292284         END DO 
     
    305297         ! forced  mode: snow thickness change due to sublimation 
    306298         DO ji = kideb, kiut 
    307             zdh_s_sub(ji)  =  MAX( - ht_s_b(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 
     299            zdh_s_sub(ji)  =  MAX( - ht_s_1d(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 
    308300            ! Heat flux by sublimation [W.m-2], < 0 
    309301            !      sublimate first snow that had fallen, then pre-existing snow 
    310302            zcoeff         =      ( MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) )   * zqprec(ji) +   & 
    311                &  ( zdh_s_sub(ji) - MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) ) * q_s_b(ji,1) )  & 
    312                &  * a_i_b(ji) * r1_rdtice 
     303               &  ( zdh_s_sub(ji) - MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) ) * q_s_1d(ji,1) )  & 
     304               &  * a_i_1d(ji) * r1_rdtice 
    313305            hfx_sub_1d(ji) = hfx_sub_1d(ji) + zcoeff 
    314306            ! Mass flux by sublimation 
    315             wfx_sub_1d(ji) =  wfx_sub_1d(ji) - rhosn * a_i_b(ji) * zdh_s_sub(ji) * r1_rdtice 
     307            wfx_sub_1d(ji) =  wfx_sub_1d(ji) - rhosn * a_i_1d(ji) * zdh_s_sub(ji) * r1_rdtice 
    316308            ! new snow thickness 
    317             ht_s_b(ji)     =  MAX( 0._wp , ht_s_b(ji) + zdh_s_sub(ji) ) 
     309            ht_s_1d(ji)     =  MAX( 0._wp , ht_s_1d(ji) + zdh_s_sub(ji) ) 
    318310         END DO 
    319311      ENDIF 
     
    322314      DO ji = kideb, kiut 
    323315         dh_s_tot(ji)   = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 
    324          zh_s(ji)       = ht_s_b(ji) / REAL( nlay_s ) 
     316         zh_s(ji)       = ht_s_1d(ji) / REAL( nlay_s ) 
    325317      END DO ! ji 
    326318 
     
    332324      DO jk = 1, nlay_s 
    333325         DO ji = kideb,kiut 
    334             zindh  =  MAX(  0._wp , SIGN( 1._wp, - ht_s_b(ji) + epsi20 )  ) 
    335             q_s_b(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_b(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 ) *             & 
    336328              &            ( (   MAX( 0._wp, dh_s_tot(ji) )              ) * zqprec(ji) +  & 
    337               &              ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_b(ji) ) * rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) ) 
    338             zq_s(ji)     =  zq_s(ji) + q_s_b(ji,jk) 
     329              &              ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_1d(ji) ) * rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) ) 
     330            zq_s(ji)     =  zq_s(ji) + q_s_1d(ji,jk) 
    339331         END DO 
    340332      END DO 
     
    346338      DO jk = 1, nlay_i 
    347339         DO ji = kideb, kiut  
    348             zEi            = - q_i_b(ji,jk) / rhoic                ! Specific enthalpy of layer k [J/kg, <0] 
    349  
    350             ztmelts        = - tmut * s_i_b(ji,jk) + rtt           ! Melting point of layer k [K] 
     340            zEi            = - q_i_1d(ji,jk) / rhoic                ! Specific enthalpy of layer k [J/kg, <0] 
     341 
     342            ztmelts        = - tmut * s_i_1d(ji,jk) + rtt           ! Melting point of layer k [K] 
    351343 
    352344            zEw            =    rcp * ( ztmelts - rt0 )            ! Specific enthalpy of resulting meltwater [J/kg, <0] 
     
    368360            zQm            = zfmdt * zEw                           ! Energy of the melt water sent to the ocean [J/m2, <0] 
    369361 
    370             ! Contribution to salt flux (clem: using sm_i_b and not s_i_b(jk) is ok) 
    371             sfx_sum_1d(ji)   = sfx_sum_1d(ji) - sm_i_b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     362            ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 
     363            sfx_sum_1d(ji)   = sfx_sum_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
    372364 
    373365            ! Contribution to heat flux [W.m-2], < 0 
    374             hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_b(ji) * zEw * r1_rdtice 
     366            hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 
    375367 
    376368            ! Total heat flux used in this process [W.m-2], > 0   
    377             hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_b(ji) * zdE * r1_rdtice 
     369            hfx_sum_1d(ji) = hfx_sum_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 
    378370 
    379371            ! Contribution to mass flux 
    380             wfx_sum_1d(ji) =  wfx_sum_1d(ji) - rhoic * a_i_b(ji) * zdeltah(ji,jk) * r1_rdtice 
     372            wfx_sum_1d(ji) =  wfx_sum_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 
    381373            
    382374            ! record which layers have disappeared (for bottom melting)  
    383375            !    => icount=0 : no layer has vanished 
    384376            !    => icount=5 : 5 layers have vanished 
    385             zindh       = NINT( MAX( 0._wp , SIGN( 1._wp , - ( zh_i(ji,jk) + zdeltah(ji,jk) ) ) ) )  
    386             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 ) 
    387379            zh_i(ji,jk) = MAX( 0._wp , zh_i(ji,jk) + zdeltah(ji,jk) ) 
    388380 
    389381            ! update heat content (J.m-2) and layer thickness 
    390             qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_b(ji,jk) 
     382            qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 
    391383            h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    392384         END DO 
     
    394386      ! update ice thickness 
    395387      DO ji = kideb, kiut 
    396          ht_i_b(ji) =  MAX( 0._wp , ht_i_b(ji) + dh_i_surf(ji) ) 
     388         ht_i_1d(ji) =  MAX( 0._wp , ht_i_1d(ji) + dh_i_surf(ji) ) 
    397389      END DO 
    398390 
     
    424416      !clem debug. Just to be sure that enthalpy at nlay_i+1 is null 
    425417      DO ji = kideb, kiut 
    426          q_i_b(ji,nlay_i+1) = 0._wp 
     418         q_i_1d(ji,nlay_i+1) = 0._wp 
    427419      END DO 
    428420 
     
    446438 
    447439               s_i_new(ji)        = zswitch_sal * zfracs * sss_m(ii,ij)  &  ! New ice salinity 
    448                                   + ( 1. - zswitch_sal ) * sm_i_b(ji)  
     440                                  + ( 1. - zswitch_sal ) * sm_i_1d(ji)  
    449441               ! New ice growth 
    450442               ztmelts            = - tmut * s_i_new(ji) + rtt          ! New ice melting point (K) 
    451443 
    452                zt_i_new           = zswitch_sal * t_bo_b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i) 
     444               zt_i_new           = zswitch_sal * t_bo_1d(ji) + ( 1. - zswitch_sal) * t_i_1d(ji, nlay_i) 
    453445                
    454446               zEi                = cpic * ( zt_i_new - ztmelts ) &     ! Specific enthalpy of forming ice (J/kg, <0)       
     
    456448                  &               + rcp  * ( ztmelts-rtt )           
    457449 
    458                zEw                = rcp  * ( t_bo_b(ji) - rt0 )         ! Specific enthalpy of seawater (J/kg, < 0) 
     450               zEw                = rcp  * ( t_bo_1d(ji) - rt0 )         ! Specific enthalpy of seawater (J/kg, < 0) 
    459451 
    460452               zdE                = zEi - zEw                           ! Specific enthalpy difference (J/kg, <0) 
     
    462454               dh_i_bott(ji)      = rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) ) 
    463455 
    464                q_i_b(ji,nlay_i+1) = -zEi * rhoic                        ! New ice energy of melting (J/m3, >0) 
     456               q_i_1d(ji,nlay_i+1) = -zEi * rhoic                        ! New ice energy of melting (J/m3, >0) 
    465457                
    466458            ENDIF ! fc_bo_i 
     
    477469            ztmelts        = - tmut * s_i_new(ji) + rtt          ! New ice melting point (K) 
    478470             
    479             zt_i_new       = zswitch_sal * t_bo_b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i) 
     471            zt_i_new       = zswitch_sal * t_bo_1d(ji) + ( 1. - zswitch_sal) * t_i_1d(ji, nlay_i) 
    480472             
    481473            zEi            = cpic * ( zt_i_new - ztmelts ) &     ! Specific enthalpy of forming ice (J/kg, <0)       
     
    483475               &               + rcp  * ( ztmelts-rtt )           
    484476             
    485             zEw            = rcp  * ( t_bo_b(ji) - rt0 )         ! Specific enthalpy of seawater (J/kg, < 0) 
     477            zEw            = rcp  * ( t_bo_1d(ji) - rt0 )         ! Specific enthalpy of seawater (J/kg, < 0) 
    486478             
    487479            zdE            = zEi - zEw                           ! Specific enthalpy difference (J/kg, <0) 
    488480             
    489481            ! Contribution to heat flux to the ocean [W.m-2], >0   
    490             hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_b(ji) * zEw * r1_rdtice 
     482            hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 
    491483 
    492484            ! Total heat flux used in this process [W.m-2], <0   
    493             hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_b(ji) * zdE * r1_rdtice 
     485            hfx_bog_1d(ji) = hfx_bog_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 
    494486             
    495487            ! Contribution to salt flux, <0 
    496             sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_b(ji) * zfmdt * r1_rdtice 
     488            sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_1d(ji) * zfmdt * r1_rdtice 
    497489 
    498490            ! Contribution to mass flux, <0 
    499             wfx_bog_1d(ji) =  wfx_bog_1d(ji) - rhoic * a_i_b(ji) * dh_i_bott(ji) * r1_rdtice 
     491            wfx_bog_1d(ji) =  wfx_bog_1d(ji) - rhoic * a_i_1d(ji) * dh_i_bott(ji) * r1_rdtice 
    500492 
    501493            ! update heat content (J.m-2) and layer thickness 
    502             qh_i_old(ji,nlay_i+1) = qh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * q_i_b(ji,nlay_i+1) 
     494            qh_i_old(ji,nlay_i+1) = qh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * q_i_1d(ji,nlay_i+1) 
    503495            h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bott(ji) 
    504496         ENDIF 
     
    513505            IF(  zf_tt(ji)  >=  0._wp  .AND. jk > icount(ji) ) THEN   ! do not calculate where layer has already disappeared from surface melting  
    514506 
    515                ztmelts = - tmut * s_i_b(ji,jk) + rtt  ! Melting point of layer jk (K) 
    516  
    517                IF( t_i_b(ji,jk) >= ztmelts ) THEN !!! Internal melting 
    518                   zintermelt(ji)    = 1._wp 
    519  
    520                   zEi               = - q_i_b(ji,jk) / rhoic        ! Specific enthalpy of melting ice (J/kg, <0) 
    521  
    522                   !!zEw               = rcp * ( t_i_b(ji,jk) - rtt )  ! Specific enthalpy of meltwater at T = t_i_b (J/kg, <0) 
     507               ztmelts = - tmut * s_i_1d(ji,jk) + rtt  ! Melting point of layer jk (K) 
     508 
     509               IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 
     510 
     511                  zEi               = - q_i_1d(ji,jk) / rhoic        ! Specific enthalpy of melting ice (J/kg, <0) 
     512 
     513                  !!zEw               = rcp * ( t_i_1d(ji,jk) - rtt )  ! Specific enthalpy of meltwater at T = t_i_1d (J/kg, <0) 
    523514 
    524515                  zdE               = 0._wp                         ! Specific enthalpy difference   (J/kg, <0) 
     
    533524 
    534525                  ! Contribution to heat flux to the ocean [W.m-2], <0 (ice enthalpy zEi is "sent" to the ocean)  
    535                   hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_b(ji) * zEi * r1_rdtice 
    536  
    537                   ! Contribution to salt flux (clem: using sm_i_b and not s_i_b(jk) is ok) 
    538                   sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     526                  hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_1d(ji) * zEi * r1_rdtice 
     527 
     528                  ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 
     529                  sfx_res_1d(ji) = sfx_res_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
    539530                                     
    540531                  ! Contribution to mass flux 
    541                   wfx_res_1d(ji) =  wfx_res_1d(ji) - rhoic * a_i_b(ji) * zdeltah(ji,jk) * r1_rdtice 
     532                  wfx_res_1d(ji) =  wfx_res_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 
    542533 
    543534                  ! update heat content (J.m-2) and layer thickness 
    544                   qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_b(ji,jk) 
     535                  qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 
    545536                  h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    546537 
    547538               ELSE                               !!! Basal melting 
    548539 
    549                   zEi               = - q_i_b(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0) 
     540                  zEi               = - q_i_1d(ji,jk) / rhoic ! Specific enthalpy of melting ice (J/kg, <0) 
    550541 
    551542                  zEw               = rcp * ( ztmelts - rtt )! Specific enthalpy of meltwater (J/kg, <0) 
     
    568559 
    569560                  ! Contribution to heat flux to the ocean [W.m-2], <0   
    570                   hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_b(ji) * zEw * r1_rdtice 
    571  
    572                   ! Contribution to salt flux (clem: using sm_i_b and not s_i_b(jk) is ok) 
    573                   sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     561                  hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice 
     562 
     563                  ! Contribution to salt flux (clem: using sm_i_1d and not s_i_1d(jk) is ok) 
     564                  sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
    574565                   
    575566                  ! Total heat flux used in this process [W.m-2], >0   
    576                   hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_b(ji) * zdE * r1_rdtice 
     567                  hfx_bom_1d(ji) = hfx_bom_1d(ji) - zfmdt * a_i_1d(ji) * zdE * r1_rdtice 
    577568                   
    578569                  ! Contribution to mass flux 
    579                   wfx_bom_1d(ji) =  wfx_bom_1d(ji) - rhoic * a_i_b(ji) * zdeltah(ji,jk) * r1_rdtice 
     570                  wfx_bom_1d(ji) =  wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdeltah(ji,jk) * r1_rdtice 
    580571 
    581572                  ! update heat content (J.m-2) and layer thickness 
    582                   qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_b(ji,jk) 
     573                  qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_1d(ji,jk) 
    583574                  h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    584575               ENDIF 
     
    603594! 
    604595!               ! excessive energy is sent to lateral ablation 
    605 !               zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_b(ji) - epsi20 ) ) 
    606 !               zq_1cat(ji) =  zinda * rhoic * lfus * at_i_b(ji) / MAX( 1._wp - at_i_b(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 
    607598! 
    608599!               ! correct salt and mass fluxes 
    609 !               sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_b(ji) * a_i_b(ji) * zdvres * rhoic * r1_rdtice ! this is only a raw approximation 
    610 !               wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_b(ji) * zdvres * r1_rdtice 
     600!               sfx_bom_1d(ji) = sfx_bom_1d(ji) - sm_i_1d(ji) * a_i_1d(ji) * zdvres * rhoic * r1_rdtice ! this is only a raw approximation 
     601!               wfx_bom_1d(ji) = wfx_bom_1d(ji) - rhoic * a_i_1d(ji) * zdvres * r1_rdtice 
    611602!            ENDIF 
    612603!         END DO 
     
    617608      !------------------------------------------- 
    618609      DO ji = kideb, kiut 
    619          ht_i_b(ji) =  MAX( 0._wp , ht_i_b(ji) + dh_i_bott(ji) ) 
     610         ht_i_1d(ji) =  MAX( 0._wp , ht_i_1d(ji) + dh_i_bott(ji) ) 
    620611      END DO   
    621612 
     
    628619      DO ji = kideb, kiut 
    629620         zq_rema(ji)     = zq_su(ji) + zq_bo(ji)  
    630 !         zindh           = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_b(ji) ) )   ! =1 if snow 
     621!         zindh           = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )   ! =1 if snow 
    631622!         zindq           = 1._wp - MAX( 0._wp, SIGN( 1._wp, - zq_s(ji) + epsi20 ) ) 
    632623!         zdeltah  (ji,1) = - zindh * zindq * zq_rema(ji) / MAX( zq_s(ji), epsi20 ) 
    633 !         zdeltah  (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_b(ji) ) ) ! bound melting 
     624!         zdeltah  (ji,1) = MIN( 0._wp , MAX( zdeltah(ji,1) , - ht_s_1d(ji) ) ) ! bound melting 
    634625!         zdh_s_mel(ji)   = zdh_s_mel(ji) + zdeltah(ji,1)     
    635626!         dh_s_tot (ji)   = dh_s_tot(ji) + zdeltah(ji,1) 
    636 !         ht_s_b   (ji)   = ht_s_b(ji)   + zdeltah(ji,1) 
     627!         ht_s_1d   (ji)   = ht_s_1d(ji)   + zdeltah(ji,1) 
    637628!         
    638629!         zq_rema(ji)     = zq_rema(ji) + zdeltah(ji,1) * zq_s(ji)                ! update available heat (J.m-2) 
    639630!         ! heat used to melt snow 
    640 !         hfx_snw_1d(ji)  = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_b(ji) * zq_s(ji) * r1_rdtice ! W.m-2 (>0) 
     631!         hfx_snw_1d(ji)  = hfx_snw_1d(ji) - zdeltah(ji,1) * a_i_1d(ji) * zq_s(ji) * r1_rdtice ! W.m-2 (>0) 
    641632!         ! Contribution to mass flux 
    642 !         wfx_snw_1d(ji)  =  wfx_snw_1d(ji) - rhosn * a_i_b(ji) * zdeltah(ji,1) * r1_rdtice 
     633!         wfx_snw_1d(ji)  =  wfx_snw_1d(ji) - rhosn * a_i_1d(ji) * zdeltah(ji,1) * r1_rdtice 
    643634!     
    644635         ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
    645636         ! Remaining heat flux (W.m-2) is sent to the ocean heat budget 
    646          hfx_out(ii,ij)  = hfx_out(ii,ij) + ( zq_1cat(ji) + zq_rema(ji) * a_i_b(ji) ) * r1_rdtice 
     637         hfx_out(ii,ij)  = hfx_out(ii,ij) + ( zq_1cat(ji) + zq_rema(ji) * a_i_1d(ji) ) * r1_rdtice 
    647638 
    648639         IF( ln_nicep .AND. zq_rema(ji) < 0. .AND. lwp ) WRITE(numout,*) 'ALERTE zq_rema <0 = ', zq_rema(ji) 
     
    657648      DO ji = kideb, kiut 
    658649         ! 
    659          dh_snowice(ji) = MAX(  0._wp , ( rhosn * ht_s_b(ji) + (rhoic-rau0) * ht_i_b(ji) ) / ( rhosn+rau0-rhoic )  ) 
    660  
    661          ht_i_b(ji)     = ht_i_b(ji) + dh_snowice(ji) 
    662          ht_s_b(ji)     = ht_s_b(ji) - dh_snowice(ji) 
     650         dh_snowice(ji) = MAX(  0._wp , ( rhosn * ht_s_1d(ji) + (rhoic-rau0) * ht_i_1d(ji) ) / ( rhosn+rau0-rhoic )  ) 
     651 
     652         ht_i_1d(ji)     = ht_i_1d(ji) + dh_snowice(ji) 
     653         ht_s_1d(ji)     = ht_s_1d(ji) - dh_snowice(ji) 
    663654 
    664655         ! Salinity of snow ice 
    665656         ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
    666          zs_snic = zswitch_sal * sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic + ( 1. - zswitch_sal ) * sm_i_b(ji) 
     657         zs_snic = zswitch_sal * sss_m(ii,ij) * ( rhoic - rhosn ) / rhoic + ( 1. - zswitch_sal ) * sm_i_1d(ji) 
    667658 
    668659         ! entrapment during snow ice formation 
    669660         ! new salinity difference stored (to be used in limthd_ent.F90) 
    670661         IF (  num_sal == 2  ) THEN 
    671             zswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_b(ji) - epsi10 ) ) 
     662            rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi10 ) ) 
    672663            ! salinity dif due to snow-ice formation 
    673             dsm_i_si_1d(ji) = ( zs_snic - sm_i_b(ji) ) * dh_snowice(ji) / MAX( ht_i_b(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      
    674665            ! salinity dif due to bottom growth  
    675666            IF (  zf_tt(ji)  < 0._wp ) THEN 
    676                dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_b(ji) ) * dh_i_bott(ji) / MAX( ht_i_b(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 
    677668            ENDIF 
    678669         ENDIF 
     
    686677          
    687678         ! Contribution to heat flux 
    688          hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_b(ji) * zEw * r1_rdtice  
     679         hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_1d(ji) * zEw * r1_rdtice  
    689680 
    690681         ! Contribution to salt flux 
    691          sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_m(ii,ij) * a_i_b(ji) * zfmdt * r1_rdtice  
     682         sfx_sni_1d(ji) = sfx_sni_1d(ji) + sss_m(ii,ij) * a_i_1d(ji) * zfmdt * r1_rdtice  
    692683           
    693684         ! Contribution to mass flux 
    694685         ! All snow is thrown in the ocean, and seawater is taken to replace the volume 
    695          wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_b(ji) * dh_snowice(ji) * rhoic * r1_rdtice 
    696          wfx_snw_1d(ji) = wfx_snw_1d(ji) + a_i_b(ji) * dh_snowice(ji) * rhosn * r1_rdtice 
     686         wfx_sni_1d(ji) = wfx_sni_1d(ji) - a_i_1d(ji) * dh_snowice(ji) * rhoic * r1_rdtice 
     687         wfx_snw_1d(ji) = wfx_snw_1d(ji) + a_i_1d(ji) * dh_snowice(ji) * rhosn * r1_rdtice 
    697688 
    698689         ! update heat content (J.m-2) and layer thickness 
    699          qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_b(ji,1) + zfmdt * zEw 
     690         qh_i_old(ji,0) = qh_i_old(ji,0) + dh_snowice(ji) * q_s_1d(ji,1) + zfmdt * zEw 
    700691         h_i_old (ji,0) = h_i_old (ji,0) + dh_snowice(ji) 
    701692          
    702693         ! Total ablation (to debug) 
    703          IF( ht_i_b(ji) <= 0._wp )   a_i_b(ji) = 0._wp 
     694         IF( ht_i_1d(ji) <= 0._wp )   a_i_1d(ji) = 0._wp 
    704695 
    705696      END DO !ji 
     
    711702      !clem bug: we should take snow into account here 
    712703      DO ji = kideb, kiut 
    713          zindh    =  1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_b(ji) ) )  
    714          t_su_b(ji) =  zindh * t_su_b(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 
    715706      END DO  ! ji 
    716707 
     
    718709         DO ji = kideb,kiut 
    719710            ! mask enthalpy 
    720             zinda        =  MAX(  0._wp , SIGN( 1._wp, - ht_s_b(ji) )  ) 
    721             q_s_b(ji,jk) = ( 1.0 - zinda ) * q_s_b(ji,jk) 
    722             ! recalculate t_s_b from q_s_b 
    723             t_s_b(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_b(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
     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) 
     713            ! recalculate t_s_1d from q_s_1d 
     714            t_s_1d(ji,jk) = rtt + ( 1._wp - rswitch ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
    724715         END DO 
    725716      END DO 
     
    727718      CALL wrk_dealloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_1cat, zq_rema ) 
    728719      CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
    729       CALL wrk_dealloc( jpij, zintermelt ) 
    730       CALL wrk_dealloc( jpij, jkmax, zdeltah, zh_i ) 
     720      CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) 
    731721      CALL wrk_dealloc( jpij, icount ) 
    732722      ! 
Note: See TracChangeset for help on using the changeset viewer.