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.
Milestones/New_Surface_Module – NEMO
wiki:Milestones/New_Surface_Module

Milestone New Surface Module


Information about new surface module

Timestamp?

Color(white,red, STILL TO DO)?

- For freeze(:,:) array: change this name into fr_ice_cover(:,:) and make its declaration into sbc_oce.F90 [[BR]]
- in sbcice_if:F90: fr_ice_cover(:,:) = zicover
- in sbcice_lim_2.F90: fr_ice_cover(:,:) = 1. - frld(:,:)
- in sbcice_lim_3.F90: fr_ice_cover(:,:) = at_i(:,:) (A CHECKER)
- in other case set it to zero into sbcmod.F90 (nn_ice parameter) ++ add comments about this field in output.
- move the print control from limdyn.F90 into limrhg.F90
- add the 2m option for Bulk CORE
- move the CALL sbc_mod from step.F90 to opa.F90 to make easier the coupling with any other sea-ice model.
- add the management of fields for interannual runs
DONE: - Ajouter le seuillage sur le calcul du  flux de chaleur latente dans CORE comme c'est fait dans CLIO.
DONE: - Use the tmask(:,:) in the computatin of wind speed zwind_speed_t in sbcblk_core.F90 but replace (2. - tmask(:,:))
in the computation of wind stress utau & vtau by (2. - MIN(tmask(i,j),tmask(i+1,j) ) ) (for utau in tis case)
DONE: - add the computation of Sea-ice cover (freeze(:,:) array) = (1. -frld(:,:)) somewhere maybe into limsbc.F90 module since it is saved in diawri.F90
DONE: - check freshwater budget

For the climatological run:

- Add New TKE (the wind speed must be saved in sbcblk_core.F90 and a even when no bulk are used), 
check also the latitude dependence of the Kz background coefficient.
- aadd the Kz tides (2 algo.)
- add three lenght waves (RGB) and ocean color data
- modifications related to the cross-land advection over straits.
- advective BBL ?
- in daymod.F90, add a case to switch either to 365 or 366 days.
- Add an other case in sbcfwb in which we just adjust the precip to close the freswater budget. (RISKY)

Thur Feb 14 16:31:59 2008

  • Other bug in limdyn.F90 from the REF_CORE code; there is a wrong indices shift in the computation

of the wind module ust2s() on T-points using ui_ice()-ui_oce() at I-points. It should be as 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

Wed Feb 13 18:45:01 2008

  • Bug correction in ocesbc.F90 module in the computation of the wind-stress between sea-ice and ocean
             ! 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
    

Tue Jan 14 10:15:46 2008

Name of variables outputs by the sea-ice model.

lim_wri_init : Ice parameters for outputs
 ~~~~~~~~~~~~
     number of fields to be stored         noumef =   19
            title                            name     unit      Saving (1/0)     multiplicative constant       additive constant
 1  Snow thickness                        isnowthi      m           1            1.000000000000000            0.000000000000000D+00
 2  Ice thickness                         iicethic      m           1            1.000000000000000            0.000000000000000D+00
 3  Ice produced                          iiceprod      m/kt        1            1.000000000000000            0.000000000000000D+00
 4  Ice concentration                     ileadfra      %           1            -1.000000000000000            1.000000000000000
 5  Ice temperature                       iicetemp      C           1            1.000000000000000            -273.1500000000000
 6  Oceanic flux at the ice base          ioceflxb      w/m2        1            1.000000000000000            0.000000000000000D+00
 7  Ice velocity u                        iicevelu      m/s         1            1.000000000000000            0.000000000000000D+00
 8  Ice velocity v                        iicevelv      m/s         1            1.000000000000000            0.000000000000000D+00
 9  Sea surface temperature               isstempe      C           1            1.000000000000000            -273.1500000000000
10  Sea surface salinity                  isssalin      PSU         1            1.000000000000000            0.000000000000000D+00
11  Total flux at ocean surface           iocetflx      w/m2        1            1.000000000000000            0.000000000000000D+00
12  Solar flux at ocean surface           iocesflx      w/m2        1            1.000000000000000            0.000000000000000D+00
13  Non-solar flux at ocean surface       iocwnsfl      w/m2        1            1.000000000000000            0.000000000000000D+00
14  Salt flux at ocean surface            iocesafl      kg/m2/kt    1            1.000000000000000            0.000000000000000D+00
15  Wind stress u                         iocestru      Pa          1            1.000000000000000            0.000000000000000D+00
16  Wind stress v                         iocestrv      Pa          1            1.000000000000000            0.000000000000000D+00
17  Solar flux at ice/ocean surface       iicesflx      w/m2        1            1.000000000000000            0.000000000000000D+00
18  Non-solar flux at ice/ocean surface   iicenflx      w/m2        1            1.000000000000000            0.000000000000000D+00
19  Snow precipitation                    isnowpre      kg/day      1            1.000000000000000            0.000000000000000D+00

Tue Jan 7 15:43:32 2008

- For the 10 years run, use monthly values for precip and snow without time interpolation between 
months because it is not well done in flx_core.h90 for leapyear

Mon Jan 7 11:30:30 2008

- when switching to nbit_cmp=0 one must force the field erp(:,:) to zero in the reference code
oce_sbc_dmp() subroutine to avoid SSS restoring when key_dtasal is active since it doesn't occur 
in the New SBC module.
- the switch of ln_limdyn=.true. seems also good.

Have a look here to see some difference plots: private/NewSurfaceModule?

Thu Jan 3 17:24:23 2008

- The bug below is replaced by the following lines into sbcblk_core.F90
         emp (:,:) = zevap(:,:) - sf(jp_prec)%fnow(:,:) * tmask(:,:,1)
         emps(:,:) = zevap(:,:) - sf(jp_prec)%fnow(:,:) * tmask(:,:,1)
as before and into limsbc.F90
            zemp = + emp(ji,jj)     *         frld(ji,jj)     &   !  e-p budget over open ocean fraction 
               &   - tprecip(ji,jj)  * ( 1. - frld(ji,jj) )      &   !  liquid precipitation reaches directly the ocean
               &   + sprecip(ji,jj) * ( 1. - pfrld(ji,jj) )    &   !  taking into account change in ice cover within the time step
               &   + rdmsnif(ji,jj) / rdt_ice                      !  freshwaterflux due to snow melting


- Potential BUG in sbcblk_core.F90, add the following lines concerning the emp() & emps() computation 
!CT start
      IF( lk_ice_lim )   THEN
!CDIR COLLAPSE
         emp (:,:) = zevap(:,:) 
         emps(:,:) = zevap(:,:)
      ELSE
!CDIR COLLAPSE
         emp (:,:) = zevap(:,:) - sf(jp_prec)%fnow(:,:) * tmask(:,:,1)
         emps(:,:) = zevap(:,:) - sf(jp_prec)%fnow(:,:) * tmask(:,:,1)
      ENDIF
!CT end
because in limsbc.F90 we do: 
            zemp = + emp(ji,jj)     *         frld(ji,jj)      &   !  e-p budget over open ocean fraction 
               &   - tprecip(ji,jj)                            &   !  liquid precipitation reaches directly the ocean
               &   + sprecip(ji,jj) * ( 1. - pfrld(ji,jj) )    &   !  taking into account change in ice cover within the time step
               &   + rdmsnif(ji,jj) / rdt_ice                      !  freshwaterflux due to snow melting

- in step.F90, line "adatrj = adatrj + rdt/86400._wp" seems to be useless, to remove ???
- modification in daymod.F90 to ensure restartability. test aver 14 days with ORCA2_LIM: check OK
- check that data read when begening a run the 8th day are strictly the same than those read when restarting the 8th day: check OK
- Remove useless CALL to day(nit000) into opa.F90 module since it is done in istate_init CALL day(-1) 

Tue Nov 6 16:00:30 2007

- modifcations to perfom into the sbcana.F90 module for the GYRE configuration:

Mon Nov 5 16:00:30 2007

- Correct following bug:
            zemp = + emp(ji,jj)     *         frld(ji,jj)      &   !  e-p budget over open ocean fraction 
!!gm              &   - tprecip(ji,jj)                            &   !  liquid precipitation reaches directly the ocean
               &   - tprecip(ji,jj) * ( 1. -  frld(ji,jj) )    &   !  liquid precipitation reaches directly the ocean
               &   + sprecip(ji,jj) * ( 1. - pfrld(ji,jj) )    &   !  taking into account change in ice cover within the time step
               &   + rdmsnif(ji,jj) / rdt_ice                      !  freshwaterflux due to snow melting 
               !                                                   !  ice-covered fraction:

- in daymod.F90 ( kt == -1 ) is NOT A BUG !!!!!, add "CALL day( -1 )" into istate.F90 module for the calendar initialisation
Schematic view of calling sequence with the new organisation   
step |
        |
        `- CALL sbc | (sbcmod.F90)
                    |- CALL sbc_init 
                    |- CALL sbc_ssm  (sbcssm.F90) 
                    |- CALL sbc_blk_core | (sbcblk_core.F90)
                    |                    |- CALL fld_read     (fldread.F90)
                    |                    `- CALL blk_oce_core (sbcblk_core.F90) >>>> OUT = qsr, qns, emp, emps, utau, vtau OVER OCEAN
                    | - CALL sbc_ice_lim | (sbcblk_core.F90)
                    |                    |- CALL ice_init
                    |                    |- CALL blk_albedo (albedo.F90)
                    |                    |- CALL blk_ice_core (sbcblk_core.F90)
                    |                    |- CALL lim_rst_opn
                    |                    |- CALL lim_dyn |
                    |                    |               |- CALL lim_dyn_init
                    |                    |               `- CALL lim_rhg
                    |                    |- CALL lim_trp
                    |                    |- CALL lim_dmp
                    |                    |- CALL lim_thd |
                    |                    |               |- CALL lim_thd_init
                    |                    |               |- CALL lim_thd_zdf
                    |                    |               `- CALL lim_thd_lac
                    |                    |- CALL lim_sbc >>>> OUT = qsr, qns, emp, emps, utau, vtau UNDER SEA-ICE
                    |                    |- CALL lim_dia
                    |                    |- CALL lim_wri
                    |                    `- CALL lim_rst_write
                    |- CALL sbc_ssr (sbcssr.F90)
                    |- CALL sbc_rnf (sbcrnf.F90)
                    |- CALL sbc_fwb (sbcfwb.F90)
                    `- CALL sbc_clo (sbcclo.F90)
- transform CALL flx_blk_albedo into blk_albedo in limsbc.F90

Mon Nov 5 16:00:30 2007

- correct the bug on the re-initialisation to zero of mean fields arrays ssX_m() in sbcssm.F90. 
It should be: IF( MOD(kt-2,nn_fsbc) == 0 ) ... instead of IF( MOD(kt,nn_fsbc) == 0 )
         ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN      !   Initialisation: New mean computation   !
            !                                             ! ---------------------------------------- !
            ssu_m(:,:) = 0.e0      ! reset to zero ocean mean sbc fields
            ssv_m(:,:) = 0.e0
            sst_m(:,:) = 0.e0
            sss_m(:,:) = 0.e0
         ENDIF

Wed Oct 31 18:50:05 2007

- bug in iceini.F90, nn_fsbc param. is not known when passing into ice_init() subroutine, this param. is only read
 in sbc_init called when time loop start in step.F90 module.
- move the CALL ice_init line into sbcice_lim.F90 module and remove it from opa.F90 
- remove the "mask multiplication" 1- frld() applied to field tprecip when computing emp(field in lim_sbc() subroutine

Wed Oct 31 14:59:05 2007

- change nn_sst & nn_sss into nn_sstr & nn_sssr into sbcssr.F90 module

Thu Oct 25 09:15:20 2007

- think to update the CORE bulk with the reference one (ln_2m, n_alpha)
- correct bug into daymod.F90 module test "IF (kt == -1 ) into IF (kt == nit000)
- remove the nn_fld parameter from the namsbc_core namelist
- remove the nn_runoff parameter from the namsbc namelist
- add the namsbc_rnf namelist with following parameters:
nn_runoff  = 1       !: runoffs flag
rn_hrnf    = 0.e0    !: runoffs, depth over which enhanced vertical mixing is used
rn_avt_rnf = 0.e0    !: runoffs, value of the additional vertical mixing coef. [m2/s]
cn_dir     = './'    !: Root directory for location of ssr files
sn_rnf               !: informations about the runoff file to be read
sn_cnf               !: informations about the runoff mouth file to be read
- adpat the namsbc namelist in adding ln_dm2dc, nn_ice, nn_fwb, ln_rnf: imply modifications into sbcmod.F90, sbcrnf.F90

Tue Oct 24311:09:08 2007

- which value of roatation angle angv should be applied to the wind stress & to the sea-ice velocity ?
- cpp key_lim_fdd doesn't exist anymore, only key_ice_lim remains
- qla, qlw & qsb must be commented in diawri.F90 module
- remove the '''nrunoff''' parameter from the namrun ocean namelist
- remove the nfice and nfbulk parameters from the namdom ocean namelist

Last modified 8 years ago Last modified on 2016-07-06T12:17:12+02:00