- Timestamp:
- 2017-11-30T09:30:44+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r8568 r8850 113 113 114 114 ! set time step size (Euler/Leapfrog) 115 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt! at nit000 (Euler)115 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000 (Euler) 116 116 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2._wp* rdt ! at nit000 or nit000+1 (Leapfrog) 117 117 ENDIF … … 120 120 IF( l_trdtra ) THEN 121 121 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 122 ztrdt(:,:,j k) = 0._wp123 ztrds(:,:,j k) = 0._wp122 ztrdt(:,:,jpk) = 0._wp 123 ztrds(:,:,jpk) = 0._wp 124 124 IF( ln_traldf_iso ) THEN ! diagnose the "pure" Kz diffusive trend 125 125 CALL trd_tra( kt, 'TRA', jp_tem, jptra_zdfp, ztrdt ) … … 127 127 ENDIF 128 128 ! total trend for the non-time-filtered variables. 129 zfact = 1.0 / rdt 129 zfact = 1.0 / rdt 130 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 130 131 DO jk = 1, jpkm1 131 ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem) - tsn(:,:,jk,jp_tem) ) * zfact132 ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal) - tsn(:,:,jk,jp_sal) ) * zfact132 ztrdt(:,:,jk) = ( tsa(:,:,jk,jp_tem)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_tem)) * zfact 133 ztrds(:,:,jk) = ( tsa(:,:,jk,jp_sal)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - tsn(:,:,jk,jp_sal)) * zfact 133 134 END DO 134 135 CALL trd_tra( kt, 'TRA', jp_tem, jptra_tot, ztrdt ) 135 136 CALL trd_tra( kt, 'TRA', jp_sal, jptra_tot, ztrds ) 136 ! Store now fields before applying the Asselin filter 137 ! in order to calculate Asselin filter trend later. 138 ztrdt(:,:,:) = tsn(:,:,:,jp_tem) 139 ztrds(:,:,:) = tsn(:,:,:,jp_sal) 137 IF( ln_linssh ) THEN ! linear sea surface height only 138 ! Store now fields before applying the Asselin filter 139 ! in order to calculate Asselin filter trend later. 140 ztrdt(:,:,:) = tsn(:,:,:,jp_tem) 141 ztrds(:,:,:) = tsn(:,:,:,jp_sal) 142 ENDIF 140 143 ENDIF 141 144 … … 146 149 END DO 147 150 END DO 151 IF (l_trdtra .AND. .NOT. ln_linssh ) THEN ! Zero Asselin filter contribution must be explicitly written out since for vvl 152 ! ! Asselin filter is output by tra_nxt_vvl that is not called on this time step 153 ztrdt(:,:,:) = 0._wp 154 ztrds(:,:,:) = 0._wp 155 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 156 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 157 END IF 148 158 ! 149 159 ELSE ! Leap-Frog + Asselin filter time stepping … … 161 171 ENDIF 162 172 ! 163 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 173 IF( l_trdtra .AND. ln_linssh ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 174 zfact = 1._wp / r2dt 164 175 DO jk = 1, jpkm1 165 zfact = 1._wp / r2dt166 176 ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 167 177 ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact … … 169 179 CALL trd_tra( kt, 'TRA', jp_tem, jptra_atf, ztrdt ) 170 180 CALL trd_tra( kt, 'TRA', jp_sal, jptra_atf, ztrds ) 171 DEALLOCATE( ztrdt , ztrds )172 181 END IF 182 IF( l_trdtra ) DEALLOCATE( ztrdt , ztrds ) 173 183 ! 174 184 ! ! control print … … 258 268 LOGICAL :: ll_traqsr, ll_rnf, ll_isf ! local logical 259 269 INTEGER :: ji, jj, jk, jn ! dummy loop indices 260 REAL(wp) :: zfact 1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar270 REAL(wp) :: zfact, zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar 261 271 REAL(wp) :: zfact2, ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d ! - - 272 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztrd_atf 262 273 !!---------------------------------------------------------------------- 263 274 ! … … 278 289 ENDIF 279 290 ! 291 IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) ) THEN 292 ALLOCATE( ztrd_atf(jpi,jpj,jpk,kjpt) ) 293 ztrd_atf(:,:,:,:) = 0.0_wp 294 ENDIF 295 zfact = 1._wp / r2dt 296 zfact1 = atfp * p2dt 297 zfact2 = zfact1 * r1_rau0 280 298 DO jn = 1, kjpt 281 299 DO jk = 1, jpkm1 282 zfact1 = atfp * p2dt283 zfact2 = zfact1 * r1_rau0284 300 DO jj = 2, jpjm1 285 301 DO ji = fs_2, fs_jpim1 … … 330 346 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 331 347 ! 348 IF( ( l_trdtra .and. cdtype == 'TRA' ) .OR. ( l_trdtrc .and. cdtype == 'TRC' ) ) THEN 349 ztrd_atf(ji,jj,jk,jn) = (ztc_f - ztc_n) * zfact/ze3t_n 350 ENDIF 351 ! 332 352 END DO 333 353 END DO … … 336 356 END DO 337 357 ! 358 IF( ( l_trdtra .AND. cdtype == 'TRA' ) .OR. ( l_trdtrc .AND. cdtype == 'TRC' ) ) THEN 359 IF( l_trdtra .AND. cdtype == 'TRA' ) THEN 360 CALL trd_tra( kt, cdtype, jp_tem, jptra_atf, ztrd_atf(:,:,:,jp_tem) ) 361 CALL trd_tra( kt, cdtype, jp_sal, jptra_atf, ztrd_atf(:,:,:,jp_sal) ) 362 ENDIF 363 IF( l_trdtrc .AND. cdtype == 'TRC' ) THEN 364 DO jn = 1, kjpt 365 CALL trd_tra( kt, cdtype, jn, jptra_atf, ztrd_atf(:,:,:,jn) ) 366 END DO 367 ENDIF 368 DEALLOCATE( ztrd_atf ) 369 ENDIF 370 ! 338 371 END SUBROUTINE tra_nxt_vvl 339 372
Note: See TracChangeset
for help on using the changeset viewer.