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 10929 for NEMO/releases/release-4.0/src/ICE/icevar.F90 – NEMO

Ignore:
Timestamp:
2019-05-05T21:35:24+02:00 (5 years ago)
Author:
clem
Message:

solve a problem of conservation when ice advection is called twice (because of a cfl that is too large)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/release-4.0/src/ICE/icevar.F90

    r10589 r10929  
    229229                  IF ( v_i(ji,jj,jl) > epsi20 ) THEN     !--- icy area  
    230230                     ! 
    231                      ze_i             =   e_i (ji,jj,jk,jl) * z1_v_i(ji,jj,jl) * zlay_i               ! Energy of melting e(S,T) [J.m-3] 
     231                     ze_i             =   e_i (ji,jj,jk,jl) * z1_v_i(ji,jj,jl) * zlay_i             ! Energy of melting e(S,T) [J.m-3] 
    232232                     ztmelts          = - sz_i(ji,jj,jk,jl) * rTmlt                                 ! Ice layer melt temperature [C] 
    233233                     ! Conversion q(S,T) -> T (second order equation) 
     
    236236                     t_i(ji,jj,jk,jl) = MAX( -100._wp , MIN( -( zbbb + zccc ) * 0.5_wp * r1_rcpi , ztmelts ) ) + rt0   ! [K] with bounds: -100 < t_i < ztmelts 
    237237                     ! 
    238                   ELSE                                !--- no ice 
     238                  ELSE                                   !--- no ice 
    239239                     t_i(ji,jj,jk,jl) = rt0 
    240240                  ENDIF 
     
    537537 
    538538 
    539    SUBROUTINE ice_var_zapneg( pato_i, pv_i, pv_s, psv_i, poa_i, pa_i, pa_ip, pv_ip, pe_s, pe_i ) 
     539   SUBROUTINE ice_var_zapneg( pdt, pato_i, pv_i, pv_s, psv_i, poa_i, pa_i, pa_ip, pv_ip, pe_s, pe_i ) 
    540540      !!------------------------------------------------------------------- 
    541541      !!                   ***  ROUTINE ice_var_zapneg *** 
     
    543543      !! ** Purpose :   Remove negative sea ice fields and correct fluxes 
    544544      !!------------------------------------------------------------------- 
    545       INTEGER  ::   ji, jj, jl, jk   ! dummy loop indices 
    546       ! 
     545      REAL(wp)                    , INTENT(in   ) ::   pdt        ! tracer time-step 
    547546      REAL(wp), DIMENSION(:,:)    , INTENT(inout) ::   pato_i     ! open water area 
    548547      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pv_i       ! ice volume 
     
    555554      REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) ::   pe_s       ! snw heat content 
    556555      REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) ::   pe_i       ! ice heat content 
    557       !!------------------------------------------------------------------- 
    558       ! 
     556      ! 
     557      INTEGER  ::   ji, jj, jl, jk   ! dummy loop indices 
     558      REAL(wp) ::   z1_dt 
     559      !!------------------------------------------------------------------- 
     560      ! 
     561      z1_dt = 1._wp / pdt 
    559562      ! 
    560563      DO jl = 1, jpl       !==  loop over the categories  ==! 
     
    567570               DO ji = 1 , jpi 
    568571                  IF( pe_i(ji,jj,jk,jl) < 0._wp .OR. pa_i(ji,jj,jl) < 0._wp ) THEN 
    569                      hfx_res(ji,jj)   = hfx_res(ji,jj) - pe_i(ji,jj,jk,jl) * r1_rdtice ! W.m-2 >0 
     572                     hfx_res(ji,jj)   = hfx_res(ji,jj) - pe_i(ji,jj,jk,jl) * z1_dt ! W.m-2 >0 
    570573                     pe_i(ji,jj,jk,jl) = 0._wp 
    571574                  ENDIF 
     
    578581               DO ji = 1 , jpi 
    579582                  IF( pe_s(ji,jj,jk,jl) < 0._wp .OR. pa_i(ji,jj,jl) < 0._wp ) THEN 
    580                      hfx_res(ji,jj)   = hfx_res(ji,jj) - pe_s(ji,jj,jk,jl) * r1_rdtice ! W.m-2 <0 
     583                     hfx_res(ji,jj)   = hfx_res(ji,jj) - pe_s(ji,jj,jk,jl) * z1_dt ! W.m-2 <0 
    581584                     pe_s(ji,jj,jk,jl) = 0._wp 
    582585                  ENDIF 
     
    591594            DO ji = 1 , jpi 
    592595               IF( pv_i(ji,jj,jl) < 0._wp .OR. pa_i(ji,jj,jl) < 0._wp ) THEN 
    593                   wfx_res(ji,jj)    = wfx_res(ji,jj) + pv_i (ji,jj,jl) * rhoi * r1_rdtice 
     596                  wfx_res(ji,jj)    = wfx_res(ji,jj) + pv_i (ji,jj,jl) * rhoi * z1_dt 
    594597                  pv_i   (ji,jj,jl) = 0._wp 
    595598               ENDIF 
    596599               IF( pv_s(ji,jj,jl) < 0._wp .OR. pa_i(ji,jj,jl) < 0._wp ) THEN 
    597                   wfx_res(ji,jj)    = wfx_res(ji,jj) + pv_s (ji,jj,jl) * rhos * r1_rdtice 
     600                  wfx_res(ji,jj)    = wfx_res(ji,jj) + pv_s (ji,jj,jl) * rhos * z1_dt 
    598601                  pv_s   (ji,jj,jl) = 0._wp 
    599602               ENDIF 
    600603               IF( psv_i(ji,jj,jl) < 0._wp .OR. pa_i(ji,jj,jl) < 0._wp ) THEN 
    601                   sfx_res(ji,jj)    = sfx_res(ji,jj) + psv_i(ji,jj,jl) * rhoi * r1_rdtice 
     604                  sfx_res(ji,jj)    = sfx_res(ji,jj) + psv_i(ji,jj,jl) * rhoi * z1_dt 
    602605                  psv_i  (ji,jj,jl) = 0._wp 
    603606               ENDIF 
Note: See TracChangeset for help on using the changeset viewer.