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.
#2737 (mass of the ice+ocean system depends on the init of ice) – NEMO

Opened 2 years ago

Last modified 2 years ago

#2737 assigned Defect

mass of the ice+ocean system depends on the init of ice

Reported by: clem Owned by: systeam
Priority: normal Milestone:
Component: SI3 Version: v4.0.*
Severity: minor Keywords:
Cc:

Description

Analysis

The mass of the "ocean + ice" system depends on the initialization of the ice cover. I think it should not. For instance, a simulation initialized with 1m of ice contains less mass than a simulation initialized with 2m of ice. This solely concerns levitating sea ice (the default). For embedded sea ice, ssh is depleted below the ice cover.
This dependency problem has already been raised in ticket #2487 but not yet adressed.

Recommendation

For embedded sea ice, the ssh is depleted below the ice cover so that the mass of the "ocean+ice" system does not depend on the ice initialization.

I propose to do similar thing for levitating sea ice, except that the depletion is spread over the whole basin (including ice shelves). Here is the new piece of code I adapted from Simon to be added in iceistate.F90 (note that a special treatment for agrif is necessary):

      IF( ln_ice_embd ) THEN            ! embedded sea-ice: deplete the initial ssh below sea-ice area
         !                              ! ----------------
         ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rho0
         ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rho0
         !
      ELSE                              ! levitating sea-ice: deplete the initial ssh over the whole domain
         !                              ! ------------------
         area    = glob_sum( 'iceistate', e1e2t(:,:) * ssmask(:,:) )
         zsshadj = glob_sum( 'iceistate', snwice_mass(:,:) * r1_rho0 * e1e2t(:,:) ) / area
#if defined key_agrif
         ! Override ssh adjustment in nested domains by the root-domain ssh adjustment;
         ! store the adjustment value in a global module variable to make it retrievable in nested domains
         IF( .NOT.Agrif_Root() ) THEN
            zsshadj = Agrif_Parent(rsshadj)
         ELSE
            rsshadj = zsshadj
         ENDIF
#endif
         IF(lwp) WRITE(numout,'(A23,F10.6,A20)') ' sea level adjusted by ', -zsshadj, ' m to compensate for'
         IF(lwp) WRITE(numout,*) ' the initial snow+ice mass'
         !
         WHERE( ssmask(:,:) == 1._wp )
            ssh(:,:,Kmm) = ssh(:,:,Kmm) - zsshadj
            ssh(:,:,Kbb) = ssh(:,:,Kbb) - zsshadj
         ENDWHERE
         !
      ENDIF

This change at the init makes the ssh to drop globally of about 10cm, but simulations with and without are very similar, though I do not have a simulation with open ice shelf cavities to test it. Of course, sette tests are fine.
I think it needs to be implemented in both 4.0-HEAD and the trunk but I need the agreement of the system team before moving forward

Commit History (3)

ChangesetAuthorTimeChangeLog
15503jchanut2021-11-15T10:15:37+01:00

#2737, correct ssh adjustment induced by sea-ice in case of interpolation from parent (set it to 0)

15496clem2021-11-11T13:02:37+01:00

trunk: solve ticket #2737. The ssh is now adjusted to the init of sea ice, hence the total oce+ice mass remains unchanged across simulations. This applies to both levitating and embedded sea ice. Therefore, results from the configurations with sea ice are changed

15495clem2021-11-10T17:18:22+01:00

4.0-HEAD: solve ticket #2737. The ssh is now adjusted to the init of sea ice, hence the total oce+ice mass remains unchanged across simulations. This applies to both levitating and embedded sea ice. Therefore, results from the configurations with sea ice are changed

Change History (5)

comment:1 Changed 2 years ago by clem

Also in the trunk, the vertical scale factors are not correctly adjusted when changing ssh in iceistate.
One should change that line:

         CALL dom_vvl_zgr( Kbb, Kmm, Kaa )   ! interpolation of scale factor, depth and water column

by

         DO jk = 1, jpk
            DO_2D( nn_hls, nn_hls, nn_hls, nn_hls)
               IF( snwice_mass(ji,jj) /= 0._wp ) THEN
                  e3t(ji,jj,jk,Kmm) = e3t_0(ji,jj,jk) * ( 1._wp + ssh(ji,jj,Kmm) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) )
                  e3t(ji,jj,jk,Kbb) = e3t_0(ji,jj,jk) * ( 1._wp + ssh(ji,jj,Kbb) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) )
               ENDIF
            END_2D
         END DO
         !
         CALL dom_vvl_zgr( Kbb, Kmm, Kaa )   ! interpolation of scale factor, depth and water column

comment:2 Changed 2 years ago by clem

In 15495:

Error: Failed to load processor CommitTicketReference
No macro or processor named 'CommitTicketReference' found

comment:3 Changed 2 years ago by clem

In 15496:

Error: Failed to load processor CommitTicketReference
No macro or processor named 'CommitTicketReference' found

comment:4 Changed 2 years ago by jchanut

In 15503:

Error: Failed to load processor CommitTicketReference
No macro or processor named 'CommitTicketReference' found

comment:5 Changed 2 years ago by nemo

  • Owner set to systeam
  • Status changed from new to assigned
Note: See TracTickets for help on using tickets.