From 4a8cbbdc4f5a4e6f89d8e129b8ec5de6d0b65dfa Mon Sep 17 00:00:00 2001 From: Simon Mueller <11-smueller@users.noreply.forge.nemo-ocean.eu> Date: Thu, 23 Jun 2022 13:16:03 +0100 Subject: [PATCH] Enhanced robustness of the passive-tracer restart mechanism in configurations with forward Euler time stepping (see issue #54) --- src/TOP/AGE/trcsms_age.F90 | 7 +------ src/TOP/PISCES/P4Z/p4zsms.F90 | 8 +------- src/TOP/trcrst.F90 | 11 ++++++++--- src/TOP/trcstp.F90 | 3 ++- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/TOP/AGE/trcsms_age.F90 b/src/TOP/AGE/trcsms_age.F90 index dec67f35..583e551a 100644 --- a/src/TOP/AGE/trcsms_age.F90 +++ b/src/TOP/AGE/trcsms_age.F90 @@ -54,12 +54,7 @@ CONTAINS IF(lwp) WRITE(numout,*) IF(lwp) WRITE(numout,*) ' trc_sms_age: AGE model' IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' - - IF( l_1st_euler .OR. ln_top_euler ) THEN - tr(:,:,:,jp_age,Kbb) = tr(:,:,:,jp_age,Kmm) - 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 40a0d964..a6240218 100644 --- a/src/TOP/trcrst.F90 +++ b/src/TOP/trcrst.F90 @@ -133,9 +133,14 @@ CONTAINS CALL iom_get( numrtr, jpdom_auto, 'TRN'//ctrcnm(jn), tr(:,:,:,jn,Kmm) ) END DO - DO jn = 1, jptra - CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) - 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 + DO jn = 1, jptra + CALL iom_get( numrtr, jpdom_auto, 'TRB'//ctrcnm(jn), tr(:,:,:,jn,Kbb) ) + END DO + END IF ! 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 124269c6..5d448290 100644 --- a/src/TOP/trcstp.F90 +++ b/src/TOP/trcstp.F90 @@ -115,7 +115,6 @@ 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, 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 @@ -125,6 +124,8 @@ CONTAINS tr(:,:,:,:,Kmm) = tr(:,:,:,:,Kaa) ENDIF ! + 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 DO jn = 1, jptra -- GitLab