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.
#1703 (Wrong runoff fields time swap in coupled mode (ln_cpl)) – NEMO

Opened 8 years ago

Closed 8 years ago

Last modified 2 years ago

#1703 closed Bug (fixed)

Wrong runoff fields time swap in coupled mode (ln_cpl)

Reported by: lovato Owned by: nemo
Priority: low Milestone:
Component: OCE Version: v3.6
Severity: Keywords: OPA SBC runoffs v3.6
Cc:

Description

The swap of runoff fields between now and before timesteps is done at the beginning of sbcrnf, which is correct when runoff data are read from an external file but it is inconsistent in the case of forcing fields provided by an external module through the coupler (ln_cpl=.true.).

In coupled mode case, the runoff field is updated in sbccpl subroutine that is called before the sbcrnf one.
Thus, the swap between the BEFORE and NOW rnf and rnf_tsc fields is incorrect as both will have the same value and their integrations (e.g. in dynnxt, tranxt) will be inconsistent.

My suggestion is to move the swap of these fields from sbcrnf subroutine to the sbcmod one (as done for other forcings like emp, tau etc) and to enclose them in an if..then structure using ln_rnf, as in the following example

In sbcmod.F90 at line 375

IF( kt /= nit000 ) THEN ! Swap of forcing fields !

! ! ---------------------------------------- !
utau_b(:,:) = utau(:,:) ! Swap the ocean forcing fields
vtau_b(:,:) = vtau(:,:) ! (except at nit000 where before fields
qns_b (:,:) = qns (:,:) ! are set at the end of the routine)
! The 3D heat content due to qsr forcing is treated in traqsr
! qsr_b (:,:) = qsr (:,:)
emp_b(:,:) = emp(:,:)
sfx_b(:,:) = sfx(:,:)
IF ( ln_rnf ) THEN

rnf_b (:,: ) = rnf (:,: )
rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:)

ENDIF

ENDIF

and sbcmod.F90 at line 479

IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields set to nit000'

utau_b(:,:) = utau(:,:)
vtau_b(:,:) = vtau(:,:)
qns_b (:,:) = qns (:,:)
emp_b (:,:) = emp(:,:)
sfx_b (:,:) = sfx(:,:)
IF ( ln_rnf ) THEN

rnf_b (:,: ) = rnf (:,: )
rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:)

ENDIF

ENDIF

Commit History (2)

ChangesetAuthorTimeChangeLog
6460lovato2016-04-08T18:00:29+02:00

Move runoff fields time swap in sbcmod (#1703) and change SETTE path definition of MAIN_DIR (#1655)

6459lovato2016-04-08T18:00:11+02:00

Move runoff fields time swap in sbcmod (#1703) and change SETTE path definition of MAIN_DIR (#1655)

Change History (8)

comment:1 Changed 8 years ago by gm

Thanks for identifying this issue.

Your analysis is correct and the solution you suggest is what has to be done.

Gurvan

comment:2 Changed 8 years ago by lovato

  • Resolution set to fixed
  • Status changed from new to closed

I actually revised the proposed solution
and It would be necessary only to move the time swap when kt /= nit000,
while the one at kt = nit000 can be left in the sbcrnf.

The changes were committed in nemo_v3_6_STABLE at r6459
and in the trunk at r6460

comment:3 Changed 8 years ago by nicolasmartin

  • Keywords SBC added; sbc removed

comment:4 Changed 8 years ago by nicolasmartin

  • Keywords runoffs added; runoff removed

comment:5 Changed 8 years ago by nicolasmartin

  • Keywords nemo_v3_6* added

comment:6 Changed 7 years ago by nemo

  • Keywords release-3.6* added; nemo_v3_6* removed

comment:7 Changed 7 years ago by nemo

  • Keywords release-3.6* removed

comment:8 Changed 2 years ago by nemo

  • Keywords OPA v3.6 added
Note: See TracTickets for help on using tickets.