Changeset 12377 for NEMO/trunk/src/TOP/trcstp.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/trcstp.F90
r12136 r12377 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2004-03 (C. Ethe) Original 7 !! 4.1 ! 2019-08 (A. Coward, D. Storkey) rewrite in preparation for new timestepping scheme 7 8 !!---------------------------------------------------------------------- 8 9 #if defined key_top … … 17 18 USE trcwri 18 19 USE trcrst 19 USE trcsub !20 20 USE trdtrc_oce 21 21 USE trdmxl_trc … … 44 44 CONTAINS 45 45 46 SUBROUTINE trc_stp( kt )46 SUBROUTINE trc_stp( kt, Kbb, Kmm, Krhs, Kaa ) 47 47 !!------------------------------------------------------------------- 48 48 !! *** ROUTINE trc_stp *** … … 53 53 !! Update the passive tracers 54 54 !!------------------------------------------------------------------- 55 INTEGER, INTENT( in ) :: kt ! ocean time-step index 55 INTEGER, INTENT( in ) :: kt ! ocean time-step index 56 INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs, Kaa ! time level indices 56 57 ! 57 58 INTEGER :: jk, jn ! dummy loop indices … … 65 66 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 66 67 r2dttrc = rdttrc ! = rdttrc (use or restarting with Euler time stepping) 67 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+168 r2dttrc = 2. * rdttrc ! = 2 rdttrc (leapfrog) 69 ENDIF 70 ! 71 ll_trcstat = ( ln_ctl .OR.sn_cfctl%l_trcstat ) .AND. &68 ELSEIF( kt <= nittrc000 + 1 ) THEN ! at nittrc000 or nittrc000+1 69 r2dttrc = 2. * rdttrc ! = 2 rdttrc (leapfrog) 70 ENDIF 71 ! 72 ll_trcstat = ( sn_cfctl%l_trcstat ) .AND. & 72 73 & ( ( MOD( kt, sn_cfctl%ptimincr ) == 0 ) .OR. ( kt == nitend ) ) 73 74 … … 77 78 IF( .NOT.ln_linssh ) THEN ! update ocean volume due to ssh temporal evolution 78 79 DO jk = 1, jpk 79 cvol(:,:,jk) = e1e2t(:,:) * e3t _n(:,:,jk) * tmask(:,:,jk)80 cvol(:,:,jk) = e1e2t(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 80 81 END DO 81 IF ( l n_ctl .OR. kt == nitrst .OR. ( ln_check_mass .AND. kt == nitend )&82 IF ( ll_trcstat .OR. kt == nitrst .OR. ( ln_check_mass .AND. kt == nitend ) & 82 83 & .OR. iom_use( "pno3tot" ) .OR. iom_use( "ppo4tot" ) .OR. iom_use( "psiltot" ) & 83 84 & .OR. iom_use( "palktot" ) .OR. iom_use( "pfertot" ) ) & … … 87 88 IF( l_trcdm2dc ) CALL trc_mean_qsr( kt ) 88 89 ! 89 IF( nn_dttrc /= 1 ) CALL trc_sub_stp( kt ) ! averaging physical variables for sub-stepping 90 ! 91 IF( MOD( kt , nn_dttrc ) == 0 ) THEN ! only every nn_dttrc time step 92 ! 93 IF(ln_ctl) THEN 94 WRITE(charout,FMT="('kt =', I4,' d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 95 CALL prt_ctl_trc_info(charout) 96 ENDIF 97 ! 98 tra(:,:,:,:) = 0.e0 99 ! 100 CALL trc_rst_opn ( kt ) ! Open tracer restart file 101 IF( lrst_trc ) CALL trc_rst_cal ( kt, 'WRITE' ) ! calendar 102 CALL trc_wri ( kt ) ! output of passive tracers with iom I/O manager 103 CALL trc_sms ( kt ) ! tracers: sinks and sources 104 CALL trc_trp ( kt ) ! transport of passive tracers 105 IF( kt == nittrc000 ) THEN 106 CALL iom_close( numrtr ) ! close input tracer restart file 107 IF(lwm) CALL FLUSH( numont ) ! flush namelist output 108 ENDIF 109 IF( lrst_trc ) CALL trc_rst_wri ( kt ) ! write tracer restart file 110 IF( lk_trdmxl_trc ) CALL trd_mxl_trc ( kt ) ! trends: Mixed-layer 111 ! 112 IF( nn_dttrc /= 1 ) CALL trc_sub_reset( kt ) ! resetting physical variables when sub-stepping 113 ! 90 ! 91 IF(sn_cfctl%l_prttrc) THEN 92 WRITE(charout,FMT="('kt =', I4,' d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear 93 CALL prt_ctl_trc_info(charout) 94 ENDIF 95 ! 96 tr(:,:,:,:,Krhs) = 0._wp 97 ! 98 CALL trc_rst_opn ( kt ) ! Open tracer restart file 99 IF( lrst_trc ) CALL trc_rst_cal ( kt, 'WRITE' ) ! calendar 100 CALL trc_wri ( kt, Kmm ) ! output of passive tracers with iom I/O manager 101 CALL trc_sms ( kt, Kbb, Kmm, Krhs ) ! tracers: sinks and sources 102 CALL trc_trp ( kt, Kbb, Kmm, Krhs, Kaa ) ! transport of passive tracers 103 ! 104 ! Note passive tracers have been time-filtered in trc_trp but the time level 105 ! indices will not be swapped until after tra_atf/dyn_atf/ssh_atf in stp. Subsequent calls here 106 ! anticipate this update which will be: Nrhs= Nbb ; Nbb = Nnn ; Nnn = Naa ; Naa = Nrhs 107 ! and use the filtered levels explicitly. 108 ! 109 IF( kt == nittrc000 ) THEN 110 CALL iom_close( numrtr ) ! close input tracer restart file 111 IF(lwm) CALL FLUSH( numont ) ! flush namelist output 112 ENDIF 113 IF( lrst_trc ) CALL trc_rst_wri ( kt, Kmm, Kaa, Kbb ) ! write tracer restart file 114 IF( lk_trdmxl_trc ) CALL trd_mxl_trc ( kt, Kaa ) ! trends: Mixed-layer 115 ! 116 IF( ln_top_euler ) THEN 117 ! For Euler timestepping for TOP we need to copy the "after" to the "now" fields 118 ! here then after the (leapfrog) swapping of the time-level indices in OCE/step.F90 we have 119 ! "before" fields = "now" fields. 120 tr(:,:,:,:,Kmm) = tr(:,:,:,:,Kaa) 114 121 ENDIF 115 122 ! … … 117 124 ztrai = 0._wp ! content of all tracers 118 125 DO jn = 1, jptra 119 ztrai = ztrai + glob_sum( 'trcstp', tr n(:,:,:,jn) * cvol(:,:,:) )126 ztrai = ztrai + glob_sum( 'trcstp', tr(:,:,:,jn,Kaa) * cvol(:,:,:) ) 120 127 END DO 121 128 IF( lwm ) WRITE(numstr,9300) kt, ztrai / areatot … … 126 133 ! 127 134 END SUBROUTINE trc_stp 135 128 136 129 137 SUBROUTINE trc_stp_ctl
Note: See TracChangeset
for help on using the changeset viewer.