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

Ignore:
Timestamp:
2014-12-15T17:42:49+01:00 (9 years ago)
Author:
timgraham
Message:

Merged branches/2014/dev_MERGE_2014 back onto the trunk as follows:

In the working copy of branch ran:
svn merge svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk@HEAD
1 conflict in LIM_SRC_3/limdiahsb.F90
Resolved by keeping the version from dev_MERGE_2014 branch
and commited at r4989

In working copy run:
svn switch svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/trunk
to switch working copy

Run:
svn merge --reintegrate svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/2014/dev_MERGE_2014
to merge the branch into the trunk - no conflicts at this stage.

File:
1 edited

Legend:

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

    r4873 r4990  
    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 ) 
    132125      CALL wrk_alloc( jpij, nlay_i+1, zdeltah, zh_i ) 
    133126      CALL wrk_alloc( jpij, icount ) 
     
    148141      zh_i      (:,:) = 0._wp        
    149142      zdeltah   (:,:) = 0._wp        
    150       zintermelt(:)   = 0._wp 
    151143      icount    (:)   = 0 
    152144 
     
    166158      ! 
    167159      DO ji = kideb, kiut 
    168          zinda         = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_1d(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)  
     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)  
    173165 
    174166         zq_su (ji) = MAX( 0._wp, zfdum     * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_1d(ji) - ztmelts ) ) 
     
    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) 
     
    276268         DO ji = kideb, kiut 
    277269            ! thickness change 
    278             zindh            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )  
    279             zindq            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_1d(ji,jk) + epsi20 ) )  
    280             zdeltah  (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 
     270            rswitch          = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_1d(ji) ) )  
     271            rswitch          = rswitch * ( 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_1d(ji,jk) + epsi20 ) ) )  
     272            zdeltah  (ji,jk) = - rswitch * zq_su(ji) / MAX( q_s_1d(ji,jk), epsi20 ) 
    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)     
     
    332324      DO jk = 1, nlay_s 
    333325         DO ji = kideb,kiut 
    334             zindh  =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) + epsi20 )  ) 
    335             q_s_1d(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_1d(ji), epsi20 ) *             & 
     326            rswitch       =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) + epsi20 )  ) 
     327            q_s_1d(ji,jk) = ( 1._wp - rswitch ) / MAX( ht_s_1d(ji), epsi20 ) *             & 
    336328              &            ( (   MAX( 0._wp, dh_s_tot(ji) )              ) * zqprec(ji) +  & 
    337329              &              ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_1d(ji) ) * rhosn * ( cpic * ( rtt - t_s_1d(ji,jk) ) + lfus ) ) 
     
    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 
     
    516508 
    517509               IF( t_i_1d(ji,jk) >= ztmelts ) THEN !!! Internal melting 
    518                   zintermelt(ji)    = 1._wp 
    519510 
    520511                  zEi               = - q_i_1d(ji,jk) / rhoic        ! Specific enthalpy of melting ice (J/kg, <0) 
     
    603594! 
    604595!               ! excessive energy is sent to lateral ablation 
    605 !               zinda = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) ) 
    606 !               zq_1cat(ji) =  zinda * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0 
     596!               rswitch = MAX( 0._wp, SIGN( 1._wp , 1._wp - at_i_1d(ji) - epsi20 ) ) 
     597!               zq_1cat(ji) =  rswitch * rhoic * lfus * at_i_1d(ji) / MAX( 1._wp - at_i_1d(ji) , epsi20 ) * zdvres ! J.m-2 >=0 
    607598! 
    608599!               ! correct salt and mass fluxes 
     
    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_1d(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_1d(ji) ) * dh_snowice(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch      
     664            dsm_i_si_1d(ji) = ( zs_snic - sm_i_1d(ji) ) * dh_snowice(ji) / MAX( ht_i_1d(ji), epsi10 ) * rswitch      
    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_1d(ji) ) * dh_i_bott(ji) / MAX( ht_i_1d(ji), epsi10 ) * zswitch 
     667               dsm_i_se_1d(ji) = ( s_i_new(ji) - sm_i_1d(ji) ) * dh_i_bott(ji) / MAX( ht_i_1d(ji), epsi10 ) * rswitch 
    677668            ENDIF 
    678669         ENDIF 
     
    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_1d(ji) ) )  
    714          t_su_1d(ji) =  zindh * t_su_1d(ji) + ( 1.0 - zindh ) * rtt 
     704         rswitch     =  1.0 - MAX( 0._wp , SIGN( 1._wp , - ht_i_1d(ji) ) )  
     705         t_su_1d(ji) =  rswitch * t_su_1d(ji) + ( 1.0 - rswitch ) * rtt 
    715706      END DO  ! ji 
    716707 
     
    718709         DO ji = kideb,kiut 
    719710            ! mask enthalpy 
    720             zinda        =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) )  ) 
    721             q_s_1d(ji,jk) = ( 1.0 - zinda ) * q_s_1d(ji,jk) 
     711            rswitch       =  MAX(  0._wp , SIGN( 1._wp, - ht_s_1d(ji) )  ) 
     712            q_s_1d(ji,jk) = ( 1.0 - rswitch ) * q_s_1d(ji,jk) 
    722713            ! recalculate t_s_1d from q_s_1d 
    723             t_s_1d(ji,jk) = rtt + ( 1._wp - zinda ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
     714            t_s_1d(ji,jk) = rtt + ( 1._wp - rswitch ) * ( - q_s_1d(ji,jk) / ( rhosn * cpic ) + lfus / cpic ) 
    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 ) 
    730720      CALL wrk_dealloc( jpij, nlay_i+1, zdeltah, zh_i ) 
    731721      CALL wrk_dealloc( jpij, icount ) 
Note: See TracChangeset for help on using the changeset viewer.