From b1945992cf6a004b6d84123759f41ed6d21b5704 Mon Sep 17 00:00:00 2001 From: Simon Mueller <11-smueller@users.noreply.forge.nemo-ocean.eu> Date: Fri, 2 Dec 2022 12:59:55 +0000 Subject: [PATCH] Resolve "Robust and accurate passive-tracer restart mechanism for configurations with forward Euler time stepping of passive tracers" ('main') --- src/TOP/AGE/trcsms_age.F90 | 8 +------- src/TOP/PISCES/P4Z/p4zsms.F90 | 8 +------- src/TOP/trcrst.F90 | 17 +++++++++++++---- src/TOP/trcstp.F90 | 7 ++++--- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/TOP/AGE/trcsms_age.F90 b/src/TOP/AGE/trcsms_age.F90 index a8283edf..8e793d23 100644 --- a/src/TOP/AGE/trcsms_age.F90 +++ b/src/TOP/AGE/trcsms_age.F90 @@ -56,13 +56,7 @@ CONTAINS IF(lwp) WRITE(numout,*) ' trc_sms_age: AGE model' IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' ENDIF - -#if ! defined key_RK3 - IF( l_1st_euler .OR. ln_top_euler ) THEN - tr(:,:,:,jp_age,Kbb) = tr(:,:,:,jp_age,Kmm) - ENDIF -#endif - + ! DO jk = 1, nla_age tr(:,:,jk,jp_age,Krhs) = rn_age_kill_rate * tr(:,:,jk,jp_age,Kbb) END DO diff --git a/src/TOP/PISCES/P4Z/p4zsms.F90 b/src/TOP/PISCES/P4Z/p4zsms.F90 index 664d1206..32a3c6fb 100644 --- a/src/TOP/PISCES/P4Z/p4zsms.F90 +++ b/src/TOP/PISCES/P4Z/p4zsms.F90 @@ -104,13 +104,7 @@ CONTAINS IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 IF(lwp) WRITE(numout,*) ENDIF - - IF( l_1st_euler .OR. ln_top_euler ) THEN - DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter - tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm) - END DO - ENDIF - + ! DO jn = jp_pcs0, jp_pcs1 ! Store the tracer concentrations before entering PISCES ztrbbio(:,:,:,jn) = tr(:,:,:,jn,Kbb) END DO diff --git a/src/TOP/trcrst.F90 b/src/TOP/trcrst.F90 index 78ff2bbc..fc54fc09 100644 --- a/src/TOP/trcrst.F90 +++ b/src/TOP/trcrst.F90 @@ -130,14 +130,23 @@ CONTAINS IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' ! READ prognostic variables and computes diagnostic variable -#if ! defined key_RK3 +#if defined key_RK3 + DO jn = 1, jptra ! RK3: Before time step + CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) + END DO +#else DO jn = 1, jptra ! MLF only : Now time step CALL iom_get( numrtr, jpdom_auto, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) ) END DO + IF( l_1st_euler .OR. ln_top_euler ) THEN + IF(lwp) WRITE(numout,*) ' + adjustment for forward Euler time stepping' + tr(:,:,:,1:jptra,Kbb) = tr(:,:,:,1:jptra,Kmm) + ELSE ! MLF only : Before time step + DO jn = 1, jptra + CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) + END DO + END IF #endif - DO jn = 1, jptra ! RK3 and MLF : Before time step - CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) - END DO ! IF(.NOT.lrxios) CALL iom_delay_rst( 'READ', 'TOP', numrtr ) ! read only TOP delayed global communication variables END SUBROUTINE trc_rst_read diff --git a/src/TOP/trcstp.F90 b/src/TOP/trcstp.F90 index 9d7e7574..e016e27c 100644 --- a/src/TOP/trcstp.F90 +++ b/src/TOP/trcstp.F90 @@ -115,9 +115,7 @@ CONTAINS IF(lrxios) CALL iom_context_finalize( cr_toprst_cxt ) IF(lwm) CALL FLUSH( numont ) ! flush namelist output ENDIF - IF( lrst_trc ) CALL trc_rst_wri ( kt, Kbb, Kmm, Kaa ) ! write tracer restart file -! IF( lrst_trc ) CALL trc_rst_wri ( kt, Kmm, Kaa, Kbb ) ! write tracer restart file - + ! IF( lk_trdmxl_trc ) CALL trd_mxl_trc ( kt, Kaa ) ! trends: Mixed-layer ! IF( ln_top_euler ) THEN @@ -126,6 +124,9 @@ CONTAINS ! "before" fields = "now" fields. tr(:,:,:,:,Kmm) = tr(:,:,:,:,Kaa) ENDIF + ! + IF( lrst_trc ) CALL trc_rst_wri ( kt, Kbb, Kmm, Kaa ) ! write tracer restart file +! IF( lrst_trc ) CALL trc_rst_wri ( kt, Kmm, Kaa, Kbb ) ! write tracer restart file ! IF (ll_trcstat) THEN ztrai = 0._wp ! content of all tracers -- GitLab