Changeset 216 for trunk/NEMO/OPA_SRC/TRA/traadv_muscl.F90
- Timestamp:
- 2005-03-17T15:02:38+01:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r132 r216 12 12 USE oce ! ocean dynamics and active tracers 13 13 USE dom_oce ! ocean space and time domain 14 USE trdtra_oce ! ocean active tracer trends 14 USE trdmod ! ocean active tracers trends 15 USE trdmod_oce ! ocean variables trends 15 16 USE in_out_manager ! I/O manager 16 17 USE dynspg_fsc ! surface pressure gradient 17 18 USE dynspg_fsc_atsk ! autotasked surface pressure gradient 18 19 USE trabbl ! tracers: bottom boundary layer 19 USE lib_mpp 20 USE lib_mpp ! distribued memory computing 20 21 USE lbclnk ! ocean lateral boundary condition (or mpp link) 21 22 USE diaptr ! poleward transport diagnostics … … 39 40 !!---------------------------------------------------------------------- 40 41 !! *** ROUTINE tra_adv_muscl *** 41 !! 42 !! 42 43 !! ** Purpose : Compute the now trend due to total advection of T and 43 44 !! S using a MUSCL scheme (Monotone Upstream-centered Scheme for 44 45 !! Conservation Laws) and add it to the general tracer trend. 45 46 !! 46 !! ** Method : 47 !! ** Method : MUSCL scheme plus centered scheme at ocean boundaries 47 48 !! 48 49 !! ** Action : - update (ta,sa) with the now advective tracer trends 49 !! - save trends in ( ttrdh,ttrd,strdh,strd) ('key_trdtra')50 !! - save trends in (ztdta,ztdsa) ('key_trdtra') 50 51 !! 51 52 !! References : … … 57 58 !! ! 01-08 (E.Durand G.Madec) adapted for T & S 58 59 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 60 !! 9.0 ! 04-08 (C. Talandier) New trends organization 59 61 !!---------------------------------------------------------------------- 60 62 !! * modules used … … 74 76 !! * Local declarations 75 77 INTEGER :: ji, jj, jk ! dummy loop indices 78 REAL(wp) :: & 79 zu, zv, zw, zeu, zev, & 80 zew, zbtr, zstep, & 81 z0u, z0v, z0w, & 82 zzt1, zzt2, zalpha, & 83 zzs1, zzs2, z2, & 84 zta, zsa 76 85 REAL(wp), DIMENSION (jpi,jpj,jpk) :: & 77 zt1, zt2, ztp1, ztp2, & 78 zs1, zs2, zsp1, zsp2 79 REAL(wp) :: zu, zv, zw, zeu, zev, zew, zbtr, zstep, zta, zsa 80 REAL(wp) :: z0u, z0v, z0w 81 REAL(wp) :: zzt1, zzt2, zalpha 82 REAL(wp) :: zzs1, zzs2 83 REAL(wp) :: z2 84 #if defined key_trdtra || defined key_trdmld 85 REAL(wp) :: ztai, ztaj, zsai, zsaj 86 REAL(wp) :: zfui, zfvj 87 #endif 86 zt1, zt2, ztp1, ztp2, & 87 zs1, zs2, zsp1, zsp2, & 88 ztdta, ztdsa 88 89 !!---------------------------------------------------------------------- 89 90 … … 100 101 ENDIF 101 102 103 ! Save ta and sa trends 104 IF( l_trdtra ) THEN 105 ztdta(:,:,:) = ta(:,:,:) 106 ztdsa(:,:,:) = sa(:,:,:) 107 l_adv = 'mus' 108 ENDIF 109 102 110 #if defined key_trabbl_adv 103 104 111 ! Advective bottom boundary layer 105 112 ! ------------------------------- … … 216 223 217 224 ! lateral boundary conditions on zt1, zt2 ; zs1, zs2 (changed sign) 218 CALL lbc_lnk( zt1, 'U', -1. ) ; CALL lbc_lnk( zs1, 'U', -1. ) 225 CALL lbc_lnk( zt1, 'U', -1. ) ; CALL lbc_lnk( zs1, 'U', -1. ) 219 226 CALL lbc_lnk( zt2, 'V', -1. ) ; CALL lbc_lnk( zs2, 'V', -1. ) 227 228 ! Save MUSCL fluxes to compute i- & j- horizontal 229 ! advection trends in the MLD 230 IF( l_trdtra ) THEN 231 ! save i- terms 232 tladi(:,:,:) = zt1(:,:,:) 233 sladi(:,:,:) = zs1(:,:,:) 234 ! save j- terms 235 tladj(:,:,:) = zt2(:,:,:) 236 sladj(:,:,:) = zs2(:,:,:) 237 ENDIF 220 238 221 239 ! Compute & add the horizontal advective trend … … 237 255 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 238 256 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 239 #if defined key_trdtra || defined key_trdmld240 ! save the horizontal advective trend of tracer241 ttrd(ji,jj,jk,1) = zta + tn(ji,jj,jk) * hdivn(ji,jj,jk)242 strd(ji,jj,jk,1) = zsa + sn(ji,jj,jk) * hdivn(ji,jj,jk)243 ! recompute the trends in i- and j-direction as Uh gradh(T)244 # if defined key_s_coord || defined key_partial_steps245 zfui = e2u(ji ,jj) * fse3u(ji, jj,jk) * un(ji, jj,jk) &246 & - e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * un(ji-1,jj,jk)247 zfvj = e1v(ji,jj ) * fse3v(ji,jj ,jk) * vn(ji,jj ,jk) &248 & - e1v(ji,jj-1) * fse3v(ji,jj-1,jk) * vn(ji,jj-1,jk)249 # else250 zfui = e2u(ji ,jj) * un(ji, jj,jk) &251 & - e2u(ji-1,jj) * un(ji-1,jj,jk)252 zfvj = e1v(ji,jj ) * vn(ji,jj ,jk) &253 & - e1v(ji,jj-1) * vn(ji,jj-1,jk)254 # endif255 ztai =-zbtr * ( zt1(ji,jj,jk) - zt1(ji-1,jj ,jk) - tn(ji,jj,jk) * zfui )256 ztaj =-zbtr * ( zt2(ji,jj,jk) - zt2(ji ,jj-1,jk) - tn(ji,jj,jk) * zfvj )257 zsai =-zbtr * ( zs1(ji,jj,jk) - zs1(ji-1,jj ,jk) - sn(ji,jj,jk) * zfui )258 zsaj =-zbtr * ( zs2(ji,jj,jk) - zs2(ji ,jj-1,jk) - sn(ji,jj,jk) * zfvj )259 ! save i- and j- advective trends computed as Uh gradh(T)260 ttrdh(ji,jj,jk,1) = ztai261 ttrdh(ji,jj,jk,2) = ztaj262 strdh(ji,jj,jk,1) = zsai263 strdh(ji,jj,jk,2) = zsaj264 #endif265 257 END DO 266 258 END DO 267 259 END DO 260 261 ! Save the horizontal advective trends for diagnostic 262 263 IF( l_trdtra ) THEN 264 ! Recompute the horizontal advection zta & zsa trends computed 265 ! at the step 2. above in making the difference between the new 266 ! trends and the previous one ta()/sa - ztdta()/ztdsa() and add 267 ! the term tn()/sn()*hdivn() to recover the Uh gradh(T/S) trends 268 ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) + tn(:,:,:) * hdivn(:,:,:) 269 ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) + sn(:,:,:) * hdivn(:,:,:) 270 271 CALL trd_mod(ztdta, ztdsa, jpttdlad, 'TRA', kt) 272 273 ! Save the new ta and sa trends 274 ztdta(:,:,:) = ta(:,:,:) 275 ztdsa(:,:,:) = sa(:,:,:) 276 277 ENDIF 268 278 269 279 IF(l_ctl) THEN … … 274 284 ENDIF 275 285 276 ! "zonal" mean advective heat and salt transport 286 ! "zonal" mean advective heat and salt transport 277 287 IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 278 288 # if defined key_s_coord || defined key_partial_steps … … 361 371 zt1(:,:, 1 ) = zwn(:,:,1) * tb(:,:,1) 362 372 zs1(:,:, 1 ) = zwn(:,:,1) * sb(:,:,1) 363 ELSE ! rigid lid : flux set to zero373 ELSE ! rigid lid : flux set to zero 364 374 zt1(:,:, 1 ) = 0.e0 365 375 zs1(:,:, 1 ) = 0.e0 366 376 ENDIF 377 367 378 ! bottom values 368 379 zt1(:,:,jpk) = 0.e0 … … 382 393 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 383 394 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 384 #if defined key_trdtra || defined key_trdmld 385 ! save the vertical advective trends computed as w gradz(T) 386 ttrd(ji,jj,jk,2) = zta - tn(ji,jj,jk) * hdivn(ji,jj,jk) 387 strd(ji,jj,jk,2) = zsa - sn(ji,jj,jk) * hdivn(ji,jj,jk) 388 #endif 389 END DO 390 END DO 391 END DO 395 END DO 396 END DO 397 END DO 398 399 ! Save the vertical advective trends for diagnostic 400 401 IF( l_trdtra ) THEN 402 ! Recompute the vertical advection zta & zsa trends computed 403 ! at the step 2. above in making the difference between the new 404 ! trends and the previous one: ta()/sa - ztdta()/ztdsa() and substract 405 ! the term tn()/sn()*hdivn() to recover the W gradz(T/S) trends 406 ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) - tn(:,:,:) * hdivn(:,:,:) 407 ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) - sn(:,:,:) * hdivn(:,:,:) 408 409 CALL trd_mod(ztdta, ztdsa, jpttdzad, 'TRA', kt) 410 ENDIF 392 411 393 412 IF(l_ctl) THEN
Note: See TracChangeset
for help on using the changeset viewer.