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 9943 for NEMO/trunk/src/ICE/icedyn_adv.F90 – NEMO

Ignore:
Timestamp:
2018-07-13T16:15:22+02:00 (6 years ago)
Author:
clem
Message:

add a proper correction for negative values occuring after Ultimate-Macho advection scheme. This correction conserves mass, heat etc. 3 diagnostics have also been added in the outputs to make sure that the negative values are indeed small and unimportant in view of the advantages in using Ultimate-Macho

File:
1 edited

Legend:

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

    r9935 r9943  
    6666      !!---------------------------------------------------------------------- 
    6767      INTEGER, INTENT(in) ::   kt   ! number of iteration 
     68      ! 
     69      INTEGER ::   jl   ! dummy loop indice 
     70      REAL(wp), DIMENSION(jpi,jpj) ::   zmask  ! fraction of time step with v_i < 0 
    6871      !!--------------------------------------------------------------------- 
    6972      ! 
     
    98101      ! Debug the advection schemes 
    99102      !---------------------------- 
    100       ! clem: The 2 advection schemes above are not strictly positive. 
    101       !       In Prather, advected fields are bounded by 0 (not anymore?) in the routine with a MAX(0,field) ==> likely conservation issues 
    102       !       In UM  , advected fields are not bounded and negative values can appear. 
     103      ! clem: At least one advection scheme above is not strictly positive => UM from 3d to 5th order 
     104      !       In Prather, I am not sure if the fields are bounded by 0 or not (it seems not) 
     105      !       In UM3-5  , advected fields are not bounded and negative values can appear. 
    103106      !                   These values are usually very small but in some occasions they can also be non-negligible 
    104107      !                   Therefore one needs to bound the advected fields by 0 (though this is not a clean fix) 
    105       ! ==> 1) remove negative ice areas and volumes (conservation is ensure) 
    106       CALL ice_var_zapsmall  
    107       ! ==> 2) remove remaining negative advected fields (conservation is not preserved) => conservation issue 
    108       WHERE( v_s (:,:,:)   < 0._wp )   v_s (:,:,:)   = 0._wp 
    109       WHERE( sv_i(:,:,:)   < 0._wp )   sv_i(:,:,:)   = 0._wp 
    110       WHERE( e_i (:,:,:,:) < 0._wp )   e_i (:,:,:,:) = 0._wp 
    111       WHERE( e_s (:,:,:,:) < 0._wp )   e_s (:,:,:,:) = 0._wp 
     108      ! 
     109      ! record the negative values resulting from UMx 
     110      zmask(:,:) = 0._wp ! keep the init to 0 here 
     111      DO jl = 1, jpl 
     112         WHERE( v_i(:,:,jl) < 0._wp )   zmask(:,:) = 1._wp 
     113      END DO 
     114      IF( iom_use('iceneg_pres') )   CALL iom_put("iceneg_pres", zmask                                      )  ! fraction of time step with v_i < 0 
     115      IF( iom_use('iceneg_volu') )   CALL iom_put("iceneg_volu", SUM(MIN( v_i, 0. ), dim=3 )                )  ! negative ice volume (only) 
     116      IF( iom_use('iceneg_hfx' ) )   CALL iom_put("iceneg_hfx" , ( SUM(SUM( MIN( e_i(:,:,1:nlay_i,:), 0. )  &  ! negative ice heat content (only) 
     117         &                                                                  , dim=4 ), dim=3 ) )* r1_rdtice )  ! -- eq. heat flux [W/m2] 
     118      ! 
     119      ! ==> conservation is ensured by calling this routine below, 
     120      !     however the global ice volume is then changed by advection (but errors are very small)  
     121      CALL ice_var_zapneg( ato_i, v_i, v_s, sv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i ) 
    112122 
    113123      !------------ 
Note: See TracChangeset for help on using the changeset viewer.