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.
#2627 (sea-ice bug when using conduction flux instead of solar/non-solar) – NEMO

Opened 3 years ago

Last modified 3 years ago

#2627 new Bug

sea-ice bug when using conduction flux instead of solar/non-solar

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

Description

Context

There is a series of bugs related to sea-ice when using conduction flux as an input instead of regular solar and non-solar fluxes. It is only tested without really being used in NEMO forced setup. It affects simulations using Jules interface as done by the Met-Office

Analysis

1) In forced mode, when emulating the conduction flux, one should calculate this flux by calling the routine blk_ice_qcn. It is not the case.
2) The heat budget is not designed for dealing with conduction fluxes. So, in iceupdate.F90 it is wrong to state that qt_atm_oi = qns_tot + qsr_tot

Fix

--
1)
--
In icesbc.F90, replace these lines:

         IF( ln_cndflx .AND. .NOT.ln_cndemulate ) &
            &                     CALL blk_ice_qcn    ( ln_virtual_itd, t_su, t_bo, h_s, h_i )

by

         IF( ln_cndflx .AND. ln_cndemulate ) &
            &                     CALL blk_ice_qcn    ( ln_virtual_itd, t_su, t_bo, h_s, h_i )

Also, in icethd_dh.F90, replace these lines:

      IF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN
         !
         DO ji = 1, npti
            zq_top(ji)     = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice )
         END DO

by

      IF( ln_cndflx ) THEN
         !
         DO ji = 1, npti
            zq_top(ji)     = MAX( 0._wp, qml_ice_1d(ji) * rdt_ice )
         END DO

And finally, I do not see why we need to pass 2 times in icethd_zdf_bl99 when conduction flux is emulated. I would suppose that once conduction flux has been evaluated in blk_ice_qcn, it is not necessary to go through the bl99 routine 2 times. But I need some input from Martin on that.
Should we replace:

         ELSEIF( ln_cndflx .AND.      ln_cndemulate ) THEN   ! Conduction flux is emulated 
            CALL ice_thd_zdf_BL99( np_cnd_EMU )
            CALL ice_thd_zdf_BL99( np_cnd_ON  )

by

         ELSEIF( ln_cndflx .AND.      ln_cndemulate ) THEN   ! Conduction flux is emulated 
            CALL ice_thd_zdf_BL99( np_cnd_ON  )

--
2)
--
qns_ice and qsr_ice made no sense when forcing with conduction fluxes. There is 2 solutions and I am still unsure whether we should change the surface heat budget in the ice code to concur with the "conductive flux" formulation or to simulate a qns_ice+qsr_ice from qcn and qml. I think the final solution is to change the ice code.
I guess the right solution for qt_atm_oi is something like (though I am not sure):

qt_atm_oi = ( 1 - a ) * ( qns_oce + qsr_oce ) + qemp_oce &
   &            + a   * ( qcn_ice + qml_ice + qtr_ice_top ) + qemp_ice

Commit History (2)

ChangesetAuthorTimeChangeLog
14595clem2021-03-05T23:36:50+01:00

trunk: solve ticket #2627.

14590clem2021-03-05T14:21:05+01:00

4.0-HEAD: solve ticket #2627 to allow simulations with conductive fluxes instead of normal fluxes on top of sea ice (MetO requirement). I do not think I tackled all the issues but this is the best I can do without having a proper configuration to test it.

Change History (3)

comment:1 Changed 3 years ago by clem

Well, I misunderstood the logical ln_cndemulate. So, forget about the point 1) and only focus on point 2). For precaution, in addition to the correction in iceupdate.F90, one should also change sbccpl.F90 to "fake" a non-solar flux as:

IF( TRIM(sn_rcv_iceflx%cldes) == 'coupled' ) THEN
   zqns_ice(:,:,:) = qml_ice(:,:,:) + qcn_ice(:,:,:)
ELSE
   zqns_ice(:,:,:) = 0._wp
ENDIF

comment:2 Changed 3 years ago by clem

In 14590:

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

comment:3 Changed 3 years ago by clem

In 14595:

Error: Failed to load processor CommitTicketReference
No macro or processor named 'CommitTicketReference' found
Note: See TracTickets for help on using tickets.