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.
user/ctlod/NewSurfaceModule – NEMO
wiki:user/ctlod/NewSurfaceModule

Version 64 (modified by rblod, 15 years ago) (diff)

--

New Surface Module

We put here description of the work done around this package. Mainly some figures ...etc

CONTEXT:
Experiments: REF_CORE (reference version) & SBC_NEW (new surface module)
Configuration type: Configuration ORCA2_LIM with bulk CORE
"Forcing spefs:" precipitation and snow are monthly value without time interpolation else
it will be different in SBC_NEW and REF_CORE.

EXPERIENCES DESCRIPTION:

FULL_SDP10:

* FULL_SDP10:
Both for NEW_SBC & REF_CORE: follow SDP9 BUT with ln_limdyn=.FALSE.
This time the SSS damping is active AND ust2s(:,:) below is set to ZERO in both experiment since
is seems to have an impact (a minimum value is used 5.e-3)
Modifications in the REF_CORE limdyn.F90 and ocesbc.F90:
limdyn.F90:

!CT start SDP10
!CT gtau[xy] fields are computed at I-points, whereas ust2s() must be at T-point
!CT so we take here directly the wind stress over the ocean tau[xy] calculated in flx_core.h90
!CT the computation is exactly the same than in NEW_SBC
                ztair2       = taux(ji,jj) * taux(ji,jj) + taux(ji-1,jj) * taux(ji-1,jj)   &
                     &       + tauy(ji,jj) * tauy(ji,jj) + tauy(ji,jj-1) * tauy(ji,jj-1)
                zustm        = SQRT( 0.5 * ztair2  )

                ust2s(ji,jj) = ( zustm / rau0 ) * tms(ji,jj)

!CT SDP10               ztair2       = gtaux(ji,jj) * gtaux(ji,jj) + gtauy(ji,jj) * gtauy(ji,jj)
!CT SDP10               zustm        = SQRT( ztair2  )
!CT
!CT SDP10               ust2s(ji,jj) = ( zustm / rau0 ) * ( rone + sdvt(ji,jj) ) * tms(ji,jj)
!CT end SDP10

               ust2s(:,:) = 0.e0

ocesbc.F90: add the logical ln_limdyn to avoid modifications of the ocean stress tau[xy].
Color(white,red, NOTICE: )? in the case ln_limdyn=FALSE, the friction velocity is computed in limdyn.F90 in using the wind stress u|vtau over the ocean, which are themselves computed in using the wind module zwind_speed_t in sbcblk_core.F90 which MUST NOT BE MASKED with tmask field else big differences will occur along the coast in polar regions.
Icethickness differences NEW_SBC SDP10 & REF_CORE SDP10 / 21 March :


Icethickness differences NEW_SBC SDP10 & REF_CORE SDP10 / 21 September :


FULL_SDP9:

* FULL_SDP9:(second "stream")
We made again this experiment since the previous one didn't active the SSS restoring n_sssr=1, we perform a new run for both NEW_SBC & REF_CORE.
ln_limdyn=.true.
The 2 experiments are very similar in the treatment of the wind stress & bug correction.
Icethickness differences NEW_SBC SDP9 & REF_CORE SDP9 / 21 March :

  • very weak differences after 10years run.


Icethickness differences NEW_SBC SDP9 & REF_CORE SDP9 / 21 September :


Global SST NEW_SBC SDP9 & REF_CORE SDP9 / 21 Nov :


Global SSS NEW_SBC SDP9 & REF_CORE SDP9 / 21 Nov :


* FULL_SDP9: (first "stream")
Only for NEW_SBC: correct a bug found in limsbc.F90
It is the responsible of the differences on the meridional ocean stress.
Notice the ocean velocity noise desappear at the same time.
Color(white,red, CAUTION: for this run I forget to active the SSS damping term n_ssr = 1 in the ocean namelist .....)?

         DO jj = 2, jpjm1
            DO ji = fs_2, fs_jpim1   ! vertor opt.
               ! ... ice-cover wheighted ice-ocean stress at U and V-points  (from I-point values)
               zutau  = 0.5 * ( ztio_u(ji+1,jj) + ztio_u(ji+1,jj+1) )
!CT start SDP9
               zvtau  = 0.5 * ( ztio_v(ji,jj+1) + ztio_v(ji+1,jj+1) )
!CT               zvtau  = 0.5 * ( ztio_v(ji,jj+1) + ztio_u(ji+1,jj+1) )
!CT end SDP9
               ! ... open-ocean (lead) fraction at U- & V-points (from T-point values)
               zfrldu = 0.5 * ( frld (ji,jj) + frld (ji+1,jj  ) )
               zfrldv = 0.5 * ( frld (ji,jj) + frld (ji  ,jj+1) )
               ! update surface ocean stress
               utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * zutau
               vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * zvtau
               !
            END DO
         END DO

meridional ocean stress in NEW_SBC SDP9 & REF_CORE SDP8 / 21 March :

  • no more differences on this field.


meridional surface ocean velocity in NEW_SBC SDP9 & REF_CORE SDP8 / 21 March :


zonal surface ocean velocity in NEW_SBC SDP9 & REF_CORE SDP8 / 21 March :


FULL_SDP8:

* FULL_SDP8:
REF_CORE & NEW_SBC: idem than FUL_SDP7, run on 3 months only with instantaneous outputs.
Major differences arise on the meridionnal ocean stress component (whereas no difference exist on the zonal one); the zonal/meridional sea-ice velocities are the same in both experiments; and ocean velocities are quite noisy: Color(white,red, search a bug on the meridionnal stress component)?

meridional ocean stress in NEW_SBC SDP8 & REF_CORE SDP8 / 21 March :

  • big differences on this field.


zonal ocean stress in NEW_SBC SDP8 & REF_CORE SDP8 / 21 March :

  • conversely to the meridional componant, there is NO major differences on this field.


meridional surface ocean velocity in NEW_SBC SDP8 & REF_CORE SDP8 / 21 March :

  • noisy field and different patterns between the 2 experiences.


zonal surface ocean velocity in NEW_SBC SDP8 & REF_CORE SDP8 / 21 March :

  • idem, noisy field in boths expereinces.


FULL_SDP7:

* FULL_SDP7:
Only for REF_CORE: following FULL_SDP6 exp., modifications in REF_CORE in the wind stress management over sea-ice and ocean to be closer to what is done in NEW_SBC.
Color(white,red,MINOR impact of these changes surprisingly !!)?

  • in flx_core.h90, splitting of the ocean/sea-ice wind stress:
              tauxt(:,:) = rhoa*dUnormt(:,:)*Cd(:,:)*(flxnow(:,:,2) - zut(:,:))
              taux_it(:,:) = rhoa*dUnormt(:,:)*Cice*flxnow(:,:,2)
    
    !CT          tauxt(:,:) = rhoa*dUnormt(:,:)*( (1. - freeze(:,:))*Cd(:,:)*(flxnow(:,:,2) - zut(:,:))    &
    !CT               &                          + freeze(:,:)*Cice*flxnow(:,:,2) ) !lb correct pour glace
             ! Tau_y at T-point
             tauyt(:,:) = rhoa*dUnormt(:,:)*Cd(:,:)*(flxnow(:,:,3) - zvt(:,:))
             tauy_it(:,:) = rhoa*dUnormt(:,:)*Cice*flxnow(:,:,3)
    
  • the ocean wind stress is masked using tmask(:,:)
             !Tau_x at U-point
             DO jj = 1, jpjm1
                DO ji = 1, jpi
                   taux(ji,jj) = 0.5*(tauxt(ji,jj) + tauxt(ji+1,jj))*( 2. - tmask(ji,jj,1) )
                   tauy(ji,jj) = 0.5*(tauyt(ji,jj) + tauyt(ji,jj+1))*( 2. - tmask(ji,jj,1) )
                END DO
             END DO
    
  • in icestp.F90: compute wind stress gtau[xy] over sea-ice at I-point location using tau[xy]_it(:,:) fileds.
  • in limdyn.F90: compute the ice/ocean stress the same way it is done in NEW_SBC, i.e. only based on the wind speed [uv]_ice - [uv]_oce differences
  • in ocesbc.F90: the final wind stress over the ocean is the result of both ice/ocean & "pure" ocean stress weighted using leads fraction.
             ! update the stress below sea-ice area
             DO jj = 1, jpjm1
                DO ji = 1, fs_jpim1   ! vertor opt.
    !CT start SDP7
                  ! ... open-ocean (lead) fraction at U- & V-points (from T-point values)
                   ztx = 0.5 * ( frld (ji,jj) + frld (ji+1,jj  ) )
                   zty = 0.5 * ( frld (ji,jj) + frld (ji  ,jj+1) )
                   ztaux       = 0.5 *( ftaux(ji+1,jj) + ftaux(ji+1,jj+1) ) ! ice-ocean stress at U- and V-points
                   ztauy       = 0.5 *( ftauy(ji,jj+1) + ftauy(ji+1,jj+1) )
                   taux(ji,jj) = ztx * taux(ji,jj) + (1. -ztx) * ztaux    ! stress at the ocean surface
                   tauy(ji,jj) = zty * tauy(ji,jj) + (1.- zty) * ztauy
    !CT end SDP7
    

Ice thickness diffs. between REF_CORE SDP7 - REF_CORE SDP6 / Year 10 / Winter March:

  • impact on the Icethickness of these changes are shown below in winter (March): very small changes.


Ice thickness diffs. between SBC_NEW SDP3 - REF_CORE SDP7 / Year 10 / Winter March:

  • compared to NEW_SBC SDP3, patterns are still the same as the Min & Max of Icethickness differences especially off the east greenland coast.


Snow thickness diffs. between SBC_NEW SDP3 - REF_CORE SDP7 / Year 10 / Winter March:


Ice thickness SBC_NEW SDP3 & sea-ice velovity / Year 10 / Winter March:


Ice thickness REF_CORE SDP7 & sea-ice velovity / Year 10 / Winter March:


FULL_SDP6:

* FULL_SDP6:
Only for REF_CORE: Correction of an other bug in limdyn.F90:
The friction velocity ust2s() is computed at T-point. To do so, we must compute a mean of speed velocities using velocities around T-point at i,j location and not i-1,j-1 location as it is done in the reference.
Color(white,red,'''NOTICE''')?: this run includes the modification done for SDP5. See below.

        ! computation of friction velocity
         DO jj = 2, jpjm1
            DO ji = 2, jpim1

!CT start SDP6
               zu_ice   = u_ice(ji+1,jj+1) - u_oce(ji+1,jj+1)
               zv_ice   = v_ice(ji+1,jj+1) - v_oce(ji+1,jj+1)
!CT SDP6              zu_ice   = u_ice(ji-1,jj-1) - u_oce(ji-1,jj-1)
!CT SDP6              zv_ice   = v_ice(ji-1,jj-1) - v_oce(ji-1,jj-1)
               zt11  = rhoco * ( zu_ice * zu_ice + zv_ice * zv_ice )

               zu_ice   = u_ice(ji,jj+1) - u_oce(ji,jj+1)
               zv_ice   = v_ice(ji,jj+1) - v_oce(ji,jj+1)
!CT SDP6              zu_ice   = u_ice(ji-1,jj) - u_oce(ji-1,jj)
!CT SDP6              zv_ice   = v_ice(ji-1,jj) - v_oce(ji-1,jj)
               zt12  = rhoco * ( zu_ice * zu_ice + zv_ice * zv_ice )

               zu_ice   = u_ice(ji+1,jj) - u_oce(ji+1,jj)
               zv_ice   = v_ice(ji+1,jj) - v_oce(ji+1,jj)
!CT SDP6              zu_ice   = u_ice(ji,jj-1) - u_oce(ji,jj-1)
!CT SDP6              zv_ice   = v_ice(ji,jj-1) - v_oce(ji,jj-1)
               zt21  = rhoco * ( zu_ice * zu_ice + zv_ice * zv_ice )

               zu_ice   = u_ice(ji,jj) - u_oce(ji,jj)
               zv_ice   = v_ice(ji,jj) - v_oce(ji,jj)
               zt22  = rhoco * ( zu_ice * zu_ice + zv_ice * zv_ice )
!CT end SDP6

               ztair2 = gtaux(ji,jj) * gtaux(ji,jj) + gtauy(ji,jj) * gtauy(ji,jj)

!CT start SDP5
               zustm =  0.25 * ( zt11 + zt12 + zt21 + zt22 )
!CT start               zustm =  ( 1 - frld(ji,jj) ) * 0.25 * ( zt11 + zt12 + zt21 + zt22 )        &
!CT start                  &  +        frld(ji,jj)   * SQRT( ztair2 )
!CT start SDP5

               ust2s(ji,jj) = ( zustm / rau0 ) * ( rone + sdvt(ji,jj) ) * tms(ji,jj)
            END DO
         END DO

It results in a systematic icethickness decreasing O(-2/4 cm) in winter (March) along the sea-ice edge.
Whereas "inside" Arctic area, it increases lightly icethickness O(+1/2 cm) with max. O(+10 cm) in the Hudson bay and off the North Siberian coast.
The trend for ice fraction leads is the same, i.e. an decreasing between O(-1/5 %) at the sea-ice limit extent.
But it doesn't change radically the icethickness differences with with the SDP3 New run. Patterns are still unchanged in Arctic.
So even this bug correction doesn't explain the big differences between REF_CORE and SBC_NEW experiments.

Ice thickness diffs. between REF_CORE SDP6 - REF_CORE SDP5 / Year 10 / Winter March:


Fraction leads diffs. between REF_CORE SDP6 - REF_CORE SDP5 / Year 10 / Winter March:


Ice thickness diffs. between SBC_NEW SDP3 - REF_CORE SDP6 / Year 10 / Winter March:


FULL_SDP5:

* FULL_SDP5:
Only for the REF_CORE code, we remove the fraction leads frld in the computation of the friction velocity between sea-ice & ocean in limdyn.F90. It is not necessary to mix since the friction velocity is only used to compute flux at Ice/ocean interface? So:

               ztair2 = gtaux(ji,jj) * gtaux(ji,jj) + gtauy(ji,jj) * gtauy(ji,jj)
!CT start SDP5
               zustm =  0.25 * ( zt11 + zt12 + zt21 + zt22 )
!CT start               zustm =  ( 1 - frld(ji,jj) ) * 0.25 * ( zt11 + zt12 + zt21 + zt22 )        &
!CT start                  &  +        frld(ji,jj)   * SQRT( ztair2 )
!CT start SDP5
               ust2s(ji,jj) = ( zustm / rau0 ) * ( rone + sdvt(ji,jj) ) * tms(ji,jj)

Above, gtau[xy] are wind stress components over the ocean at I-point.
In doing that we are closer to what is done in limdyn.F90 of the NEW SBC.
It results in a sea-ice surface temperature colder O(-1/2°C) than in SDP Ref mainly in the limit sea-ice extent.
And a systematic decrease of the icet thickness by O(-2/4 cm) over all the Arctic reaching in some area O(-10 cm) Hudson bay or near the Bering strait.
So its impact is significant and must be take into account in the rewritten of this part in the NEW _SBC.
Color(white,red,'''BUT''')? it remains a bug in the comptutation of zt11, zt12 ..etc see SDP6 experience above

Ice temperature diffs. between REF_CORE SDP5 - REF_CORE SDP / Year 10 / Winter March:


Ice thickness diffs. between REF_CORE SDP5 - REF_CORE SDP / Year 10 / Winter March:


FULL_SDP4:

* FULL_SDP4:
Only for the REF_CORE code, correction of a bug in the computation of the final wind stress in ocesbc.F90 module.

         ! update the stress below sea-ice area
         DO jj = 1, jpjm1
            DO ji = 1, fs_jpim1   ! vertor opt.
!CT start SDP4
               ztx         = MAX( freezn(ji,jj), freezn(ji+1,jj) )
               zty         = MAX( freezn(ji,jj), freezn(ji,jj+1) )
!CT            ztx         = MAX( freezn(ji,jj), freezn(ji,jj+1) )   ! ice/ocean indicator at U- and V-points
!CT            zty         = MAX( freezn(ji,jj), freezn(ji+1,jj) )
!CT end SDP4
               ztaux       = 0.5 *( ftaux(ji+1,jj) + ftaux(ji+1,jj+1) ) ! ice-ocean stress at U- and V-points
               ztauy       = 0.5 *( ftauy(ji,jj+1) + ftauy(ji+1,jj+1) )
               taux(ji,jj) = (1.-ztx) * taux(ji,jj) + ztx * ztaux    ! stress at the ocean surface
               tauy(ji,jj) = (1.-zty) * tauy(ji,jj) + zty * ztauy
            END DO
         END DO

The impact of this modification is weak as seen on plots below change in ice thickness are O(±1/2 cm)) in Arctic during winter (March). Same behaviour in summer (Sept).
Ice thickness diffs. between REF_CORE SDP4 - REF_CORE SDP / Year 10 / Winter March:


Ice thickness diffs. between REF_CORE SDP4 - REF_CORE SDP / Year 10 / Summer September:


FULL_SDP3:

* FULL_SDP3:
Only for the SBC_NEW code, this time this run is identical to FULL_SDP but in sbcblk_core.F90, the sea-ice velocity ([uv]i_ice()) has been removed in the computation of the wind stress and wind module over sea-ice.
Since the computation is clearly done in a better way now, it could implies important modifications which should be identify.
Small impact O(±2/3 cm) in the Arctic area but shoul be underlined.

Ice thickness in NEW_SBC experience / Year 10 / Winter March:


Ice thickness in NEW_SBC experience / Year 10 / Summer September:


Ice thickness differences between New SDP3 - New SDP experience / Year 10 / Winter March:
In SDP3 the sea-ice velocity [uv]i_ice() is removed from the computation of sea-ice wind-stress and & scalar wind-stress in sbc_blk_ice() whereas it is used in SDP experience, it is the only thing which changes between the 2
This modification implies a weaker extension off the east Greenland coast and north to the Spitzberg.
A lightly increasing of the ice thickness close to the Greenland and North to the Bering strait area O(+2cm)


Ice thickness differences between NEW_SBC SDP3 - REF_CORE SDP experience / Year 10 / Winter March:
Even with this modification in SDP3, the ice thickness differences are still important O(±10/15 cm) reaching min/max O(±50 cm).
Differences are almost the same than the initial NEW_SBC SDP - REF_CORE SDP see next plot.


Ice thickness differences between NEW_SBC SDP - REF_CORE SDP experience / Year 10 / Winter March:


FULL_SDP2:

* FULL_SDP2:
Still SSS damping term without the ice-dynamics, i.e. ln_limdyn=.FALSE. in the sea-ice namelist.

Ice thickness in NEW_SBC experience / Year 10: NO SEA-ICE DYNAMICS = ln_limdyn=FALSE


Ice thickness differences between NEW_SBC & REF_CORE experience / Year 10: NO SEA-ICE DYNAMICS = ln_limdyn=FALSE


FULL_SDP:

* FULL_SDP:
similar to FULL but with a strong restoring SSS damping of ~ 787 mm/day correponding to 12 days of time restoring
It is the same time damping as the SST which corresponds to -40 W/m2/K used for SST over a 10 meters ocean water column.
Modifications have been necessary in sbcssr.F90 module such as using the array sdta(:,:) computed in dtasal.F90 to ensure same
SSS damping field in both experiments SBC_NEW and REF_CORE.

Ice thickness in NEW_SBC experience / Year 10
The sea-ice extension in winter seems to be larger in this run than in the REF_CORE one.


Ice thickness in REF_CORE experience / Year 10


FULL:

* FULL: done for REF_CORE and SBC_NEW:
We fully relax constrains imposed in T2X experiences, i.e. on stress, frictional velocity and so on ...

T24:

* T2X:
In doing the following modifications in both experiments, we are waiting for almost exactly the same results.
# The wind stress ([uv]tau/gtau[xy]) and wind module (zwind_speed_t(:,:)/dUnormt(:,:) at the ocean surface (even
above sea-ice) is forced to be the same in both experiments. (sbcblk_core.F90/flx_core.h90)
# The friction velocity ust2s(:,:) between sea-ice and ocean is also forced to be the same (limdyn.F90)

Attachments (39)