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 11632 – NEMO

Changeset 11632


Ignore:
Timestamp:
2019-10-01T20:57:51+02:00 (5 years ago)
Author:
clem
Message:

limit snow thickness after advection (with Prather) if snow load makes the ice-snow interface to deplet below sea surface (as for UM scheme)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/ICE/icedyn_adv_pra.F90

    r11627 r11632  
    229229      ! 
    230230      ! --- Ensure non-negative fields --- ! 
    231       ! Remove negative values (conservation is ensured) 
    232       !    (because advected fields are not perfectly bounded and tiny negative values can occur, e.g. -1.e-20) 
     231      !     Remove negative values (conservation is ensured) 
     232      !     (because advected fields are not perfectly bounded and tiny negative values can occur, e.g. -1.e-20) 
    233233      CALL ice_var_zapneg( zdt, pato_i, pv_i, pv_s, psv_i, poa_i, pa_i, pa_ip, pv_ip, pe_s, pe_i ) 
     234      ! 
     235      ! --- Ensure snow load is not too big --- ! 
     236      CALL Hsnow( zdt, pv_i, pv_s, pa_i, pa_ip, pe_s ) 
    234237      ! 
    235238      IF( lrst_ice )   CALL adv_pra_rst( 'WRITE', kt )   !* write Prather fields in the restart file 
     
    576579      ! 
    577580   END SUBROUTINE adv_y 
     581 
     582 
     583   SUBROUTINE Hsnow( pdt, pv_i, pv_s, pa_i, pa_ip, pe_s ) 
     584      !!------------------------------------------------------------------- 
     585      !!                  ***  ROUTINE Hsnow  *** 
     586      !! 
     587      !! ** Purpose : 1- Check snow load after advection 
     588      !!              2- Correct pond concentration to avoid a_ip > a_i 
     589      !! 
     590      !! ** Method :  If snow load makes snow-ice interface to deplet below the ocean surface 
     591      !!              then put the snow excess in the ocean 
     592      !! 
     593      !! ** Notes :   This correction is crucial because of the call to routine icecor afterwards 
     594      !!              which imposes a mini of ice thick. (rn_himin). This imposed mini can artificially 
     595      !!              make the snow very thick (if concentration decreases drastically) 
     596      !!              This behavior has been seen in Ultimate-Macho and supposedly it can also be true for Prather 
     597      !!------------------------------------------------------------------- 
     598      REAL(wp)                    , INTENT(in   ) ::   pdt   ! tracer time-step 
     599      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pv_i, pv_s, pa_i, pa_ip 
     600      REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) ::   pe_s 
     601      ! 
     602      INTEGER  ::   ji, jj, jl   ! dummy loop indices 
     603      REAL(wp) ::   z1_dt, zvs_excess, zfra 
     604      !!------------------------------------------------------------------- 
     605      ! 
     606      z1_dt = 1._wp / pdt 
     607      ! 
     608      ! -- check snow load -- ! 
     609      DO jl = 1, jpl 
     610         DO jj = 1, jpj 
     611            DO ji = 1, jpi 
     612               IF ( pv_i(ji,jj,jl) > 0._wp ) THEN 
     613                  ! 
     614                  zvs_excess = MAX( 0._wp, pv_s(ji,jj,jl) - pv_i(ji,jj,jl) * (rau0-rhoi) * r1_rhos ) 
     615                  ! 
     616                  IF( zvs_excess > 0._wp ) THEN   ! snow-ice interface deplets below the ocean surface 
     617                     ! put snow excess in the ocean 
     618                     zfra = ( pv_s(ji,jj,jl) - zvs_excess ) / MAX( pv_s(ji,jj,jl), epsi20 ) 
     619                     wfx_res(ji,jj) = wfx_res(ji,jj) + zvs_excess * rhos * z1_dt 
     620                     hfx_res(ji,jj) = hfx_res(ji,jj) - SUM( pe_s(ji,jj,1:nlay_s,jl) ) * ( 1._wp - zfra ) * z1_dt ! W.m-2 <0 
     621                     ! correct snow volume and heat content 
     622                     pe_s(ji,jj,1:nlay_s,jl) = pe_s(ji,jj,1:nlay_s,jl) * zfra 
     623                     pv_s(ji,jj,jl)          = pv_s(ji,jj,jl) - zvs_excess 
     624                  ENDIF 
     625                  ! 
     626               ENDIF 
     627            END DO 
     628         END DO 
     629      END DO 
     630      ! 
     631      !-- correct pond concentration to avoid a_ip > a_i -- ! 
     632      WHERE( pa_ip(:,:,:) > pa_i(:,:,:) )   pa_ip(:,:,:) = pa_i(:,:,:) 
     633      ! 
     634   END SUBROUTINE Hsnow 
    578635 
    579636 
Note: See TracChangeset for help on using the changeset viewer.