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

Ignore:
Timestamp:
2015-03-24T18:35:00+01:00 (9 years ago)
Author:
clem
Message:

LIM3 bug fix. see ticket #1492 (forthcoming update) which also solve ticket #1497

File:
1 edited

Legend:

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

    r5134 r5167  
    124124               DO ji = 1, jpi 
    125125                  et_s(ji,jj)  = et_s(ji,jj)  + e_s(ji,jj,1,jl)                                           ! snow heat content 
    126                   rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) )  
    127                   smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi10 ) * rswitch   ! ice salinity 
    128                   rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi10 ) )  
    129                   ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , epsi10 ) * rswitch   ! ice age 
     126                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi20 ) )  
     127                  smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , epsi20 ) * rswitch   ! ice salinity 
     128                  rswitch = MAX( 0._wp , SIGN( 1._wp , at_i(ji,jj) - epsi20 ) )  
     129                  ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , epsi20 ) * rswitch   ! ice age 
    130130               END DO 
    131131            END DO 
     
    161161         DO jj = 1, jpj 
    162162            DO ji = 1, jpi 
    163                rswitch = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,jl) - epsi10 ) )   !0 if no ice and 1 if yes 
    164                ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
    165                ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
    166                o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi10 ) * rswitch 
     163               rswitch = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,jl) - epsi20 ) )   !0 if no ice and 1 if yes 
     164               ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     165               ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
     166               o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , epsi20 ) * rswitch 
    167167            END DO 
    168168         END DO 
     
    173173            DO jj = 1, jpj 
    174174               DO ji = 1, jpi 
    175                   rswitch = MAX( 0._wp , SIGN( 1._wp, v_i(ji,jj,jl) - epsi10 ) )   !0 if no ice and 1 if yes 
    176                   sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , epsi10 ) * rswitch 
     175                  rswitch = MAX( 0._wp , SIGN( 1._wp, v_i(ji,jj,jl) - epsi20 ) )   !0 if no ice and 1 if yes 
     176                  sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , epsi20 ) * rswitch 
    177177               END DO 
    178178            END DO 
     
    228228      ! Mean temperature 
    229229      !------------------- 
     230      vt_i (:,:) = 0._wp 
     231      DO jl = 1, jpl 
     232         vt_i(:,:) = vt_i(:,:) + v_i(:,:,jl) 
     233      END DO 
     234 
    230235      tm_i(:,:) = 0._wp 
    231236      DO jl = 1, jpl 
     
    233238            DO jj = 1, jpj 
    234239               DO ji = 1, jpi 
    235                   rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) ) 
    236                   tm_i(ji,jj) = tm_i(ji,jj) + rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
    237                      &                      / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , epsi10 )  ) 
     240                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi20 ) ) 
     241                  tm_i(ji,jj) = tm_i(ji,jj) + ( 1._wp - rswitch ) * rt0 +  & 
     242                     &                        rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
     243                     &                        / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , epsi20 )  ) 
    238244               END DO 
    239245            END DO 
     
    305311            DO jj = 1, jpj 
    306312               DO ji = 1, jpi 
    307                   z_slope_s(ji,jj,jl) = 2._wp * sm_i(ji,jj,jl) / MAX( epsi10 , ht_i(ji,jj,jl) ) 
     313                  rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i(ji,jj,jl) - epsi20 ) ) 
     314                  z_slope_s(ji,jj,jl) = rswitch * 2._wp * sm_i(ji,jj,jl) / MAX( epsi20 , ht_i(ji,jj,jl) ) 
    308315               END DO 
    309316            END DO 
     
    379386 
    380387      ! Mean sea ice temperature 
     388      vt_i (:,:) = 0._wp 
     389      DO jl = 1, jpl 
     390         vt_i(:,:) = vt_i(:,:) + v_i(:,:,jl) 
     391      END DO 
     392 
    381393      tm_i(:,:) = 0._wp 
    382394      DO jl = 1, jpl 
     
    384396            DO jj = 1, jpj 
    385397               DO ji = 1, jpi 
    386                   rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi10 ) ) 
     398                  rswitch = MAX( 0._wp , SIGN( 1._wp , vt_i(ji,jj) - epsi06 ) ) 
    387399                  tm_i(ji,jj) = tm_i(ji,jj) + rswitch * t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   & 
    388                      &                      * r1_nlay_i / MAX( vt_i(ji,jj) , epsi10 ) 
     400                     &                      * r1_nlay_i / MAX( vt_i(ji,jj) , epsi06 ) 
    389401               END DO 
    390402            END DO 
     
    409421      !!------------------------------------------------------------------ 
    410422      ! 
     423      vt_i (:,:) = 0._wp 
     424      DO jl = 1, jpl 
     425         vt_i(:,:) = vt_i(:,:) + v_i(:,:,jl) 
     426      END DO 
     427 
    411428      bv_i(:,:) = 0._wp 
    412429      DO jl = 1, jpl 
     
    417434                  zbvi  = - rswitch * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - rt0, - epsi10 )   & 
    418435                     &                   * v_i(ji,jj,jl) * r1_nlay_i 
    419                   rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi10 ) )  ) 
    420                   bv_i(ji,jj) = bv_i(ji,jj) + rswitch * zbvi  / MAX( vt_i(ji,jj) , epsi10 ) 
     436                  rswitch = (  1._wp - MAX( 0._wp , SIGN( 1._wp , - vt_i(ji,jj) + epsi20 ) )  ) 
     437                  bv_i(ji,jj) = bv_i(ji,jj) + rswitch * zbvi  / MAX( vt_i(ji,jj) , epsi20 ) 
    421438               END DO 
    422439            END DO 
     
    460477         ! 
    461478         DO ji = kideb, kiut          ! Slope of the linear profile zs_zero 
    462             z_slope_s(ji) = 2._wp * sm_i_1d(ji) / MAX( epsi10 , ht_i_1d(ji) ) 
     479            rswitch = MAX( 0._wp , SIGN( 1._wp , ht_i_1d(ji) - epsi20 ) ) 
     480            z_slope_s(ji) = rswitch * 2._wp * sm_i_1d(ji) / MAX( epsi20 , ht_i_1d(ji) ) 
    463481         END DO 
    464482 
Note: See TracChangeset for help on using the changeset viewer.