- Timestamp:
- 2018-02-01T13:12:00+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/r6232_tracer_advection/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r9295 r9299 129 129 IF( l_trdtra ) THEN ! store now fields before applying the Asselin filter 130 130 CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 131 ztrdt(:,:, :) = tsn(:,:,:,jp_tem)132 ztrds(:,:, :) = tsn(:,:,:,jp_sal)131 ztrdt(:,:,jpk) = 0._wp 132 ztrds(:,:,jpk) = 0._wp 133 133 IF( ln_traldf_iso ) THEN ! diagnose the "pure" Kz diffusive trend 134 134 CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) 135 135 CALL trd_tra( kt, 'TRA', jp_sal, jptra_zdfp, ztrds ) 136 136 ENDIF 137 ENDIF 138 137 ! total trend for the non-time-filtered variables. 138 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 139 IF( lk_vvl ) THEN 140 DO jk = 1, jpkm1 141 zfact = 1.0 / rdttra(jk) 142 ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 143 ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 144 END DO 145 ELSE 146 DO jk = 1, jpkm1 147 zfact = 1.0 / rdttra(jk) 148 ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact 149 ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact 150 END DO 151 END IF 152 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 153 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 154 IF( .NOT.lk_vvl ) THEN 155 ! Store now fields before applying the Asselin filter 156 ! in order to calculate Asselin filter trend later. 157 ztrdt(:,:,:) = tsn(:,:,:,jp_tem) 158 ztrds(:,:,:) = tsn(:,:,:,jp_sal) 159 END IF 160 END IF 161 ! 139 162 IF( neuler == 0 .AND. kt == nit000 ) THEN ! Euler time-stepping at first time-step (only swap) 140 163 DO jn = 1, jpts … … 143 166 END DO 144 167 END DO 168 IF (l_trdtra.AND.lk_vvl) THEN ! Zero Asselin filter contribution must be explicitly written out since for vvl 169 ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 170 ztrdt(:,:,:) = 0._wp 171 ztrds(:,:,:) = 0._wp 172 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 173 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 174 END IF 145 175 ELSE ! Leap-Frog + Asselin filter time stepping 146 176 ! … … 152 182 ! 153 183 ! trends computation 154 IF( l_trdtra 184 IF( l_trdtra.AND..NOT.lk_vvl) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 155 185 DO jk = 1, jpkm1 156 186 zfact = 1._wp / r2dtra(jk) … … 160 190 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 161 191 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 162 CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds )163 192 END IF 164 !193 IF( l_trdtra) CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 165 194 ! ! control print 166 195 IF(ln_ctl) CALL prt_ctl( tab3d_1=tsn(:,:,:,jp_tem), clinfo1=' nxt - Tn: ', mask1=tmask, & … … 277 306 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf, ll_isf ! local logical 278 307 INTEGER :: ji, jj, jk, jn ! dummy loop indices 279 REAL(wp) :: zfact 1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar308 REAL(wp) :: zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar 280 309 REAL(wp) :: zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d ! - - 310 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrd_atf 281 311 !!---------------------------------------------------------------------- 282 312 ! … … 303 333 ENDIF 304 334 ! 335 IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) ) THEN 336 CALL wrk_alloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 337 ztrd_atf(:,:,:,:) = 0.0_wp 338 ENDIF 305 339 DO jn = 1, kjpt 306 340 DO jk = 1, jpkm1 341 zfact = 1._wp / p2dt(jk) 307 342 zfact1 = atfp * p2dt(jk) 308 343 zfact2 = zfact1 / rau0 … … 359 394 pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n + rbcp * ztc_d ) ! ta <-- Brown & Campana average 360 395 ENDIF 396 IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) ) THEN 397 ztrd_atf(ji,jj,jk,jn) = (ztc_f - ztc_n) * zfact/ze3t_n 398 ENDIF 361 399 END DO 362 400 END DO … … 365 403 END DO 366 404 ! 405 IF( l_trdtra .AND. cdtype == 'TRA' ) THEN 406 CALL trd_tra( kt, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 407 CALL trd_tra( kt, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 408 CALL wrk_dealloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 409 ENDIF 410 IF( l_trdtrc .AND. cdtype == 'TRC' ) THEN 411 DO jn = 1, kjpt 412 CALL trd_tra( kt, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 413 END DO 414 CALL wrk_dealloc( jpi, jpj, jpk, kjpt, ztrd_atf ) 415 ENDIF 416 367 417 END SUBROUTINE tra_nxt_vvl 368 418
Note: See TracChangeset
for help on using the changeset viewer.