Changeset 717 for trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
- Timestamp:
- 2007-10-16T13:03:55+02:00 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r708 r717 1 1 MODULE traadv_cen2 2 !!====================================================================== ========3 !! 2 !!====================================================================== 3 !! *** MODULE traadv_cen2 *** 4 4 !! Ocean active tracers: horizontal & vertical advective trend 5 !!============================================================================== 6 !! History : 8.2 ! 01-08 (G. Madec, E. Durand) trahad+trazad = traadv 7 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 8 !! 9.0 ! 05-11 (V. Garnier) Surface pressure gradient organization 9 !! " " ! 06-04 (R. Benshila, G. Madec) Step reorganization 5 !!====================================================================== 6 !! History : 8.2 ! 01-08 (G. Madec, E. Durand) trahad+trazad=traadv 7 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 8 !! 9.0 ! 04-08 (C. Talandier) New trends organization 9 !! " " ! 05-11 (V. Garnier) Surface pressure gradient organization 10 !! " " ! 06-04 (R. Benshila, G. Madec) Step reorganization 11 !! " " ! 06-07 (G. madec) add ups_orca_set routine 10 12 !!---------------------------------------------------------------------- 11 13 … … 14 16 !! vertical advection trends using a seconder order 15 17 !! centered scheme. (k-j-i loops) 18 !! ups_orca_set : allow mixed upstream/centered scheme in specific 19 !! area (set for orca 2 and 4 only) 16 20 !!---------------------------------------------------------------------- 17 21 USE oce ! ocean dynamics and active tracers … … 21 25 USE trdmod_oce ! ocean variables trends 22 26 USE trdmod ! ocean active tracers trends 27 USE closea ! closed sea 23 28 USE trabbl ! advective term in the BBL 24 29 USE ocfzpt ! 30 USE sbcrnf ! river runoffs 25 31 USE in_out_manager ! I/O manager 26 32 USE lib_mpp … … 32 38 PRIVATE 33 39 34 PUBLIC tra_adv_cen2 ! routine called by step.F90 40 PUBLIC tra_adv_cen2 ! routine called by step.F90 41 PUBLIC ups_orca_set ! routine used by traadv_cen2_jki.F90 42 43 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: upsmsk !: mixed upstream/centered scheme near some straits 44 ! ! and in closed seas (orca 2 and 4 configurations) 35 45 36 46 REAL(wp), DIMENSION(jpi,jpj) :: btr2 ! inverse of T-point surface [1/(e1t*e2t)] … … 40 50 # include "vectopt_loop_substitute.h90" 41 51 !!---------------------------------------------------------------------- 42 !! OPA 9.0 , LOCEAN-IPSL (200 5)52 !! OPA 9.0 , LOCEAN-IPSL (2006) 43 53 !! $Id$ 44 54 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 119 129 !! 120 130 INTEGER :: ji, jj, jk ! dummy loop indices 121 REAL(wp) :: & 122 zbtr, zta, zsa, zfui, zfvj, & ! temporary scalars 123 zhw, ze3tr, zcofi, zcofj, & ! " " 124 zupsut, zupsvt, zupsus, zupsvs, & ! " " 125 zfp_ui, zfp_vj, zfm_ui, zfm_vj, & ! " " 126 zcofk, zupst, zupss, zcent, & ! " " 127 zcens, zfp_w, zfm_w, & ! " " 128 zcenut, zcenvt, zcenus, zcenvs, & ! " " 129 z_hdivn_x, z_hdivn_y, z_hdivn 130 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwz, ztrdt, zind ! 3D workspace 131 REAL(wp) :: zta, zsa, zbtr, zhw, ze3tr, & ! temporary scalars 132 & zfp_ui, zfp_vj, zfp_w , zfui , & ! " " 133 & zfm_ui, zfm_vj, zfm_w , zfvj , & ! " " 134 & zcofi , zcofj , zcofk , & ! " " 135 & zupsut, zupsus, zcenut, zcenus, & ! " " 136 & zupsvt, zupsvs, zcenvt, zcenvs, & ! " " 137 & zupst , zupss , zcent , zcens , & ! " " 138 & z_hdivn_x, z_hdivn_y, z_hdivn 139 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwz, ztrdt, zind ! 3D workspace 131 140 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zww, ztrds ! " " 132 141 !!---------------------------------------------------------------------- … … 137 146 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ Vector optimization case' 138 147 IF(lwp) WRITE(numout,*) 139 ! 140 btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) 148 ! 149 upsmsk(:,:) = 0.e0 ! not upstream by default 150 IF( cp_cfg == "orca" ) CALL ups_orca_set ! set mixed Upstream/centered scheme near some straits 151 ! ! and in closed seas (orca2 and orca4 only) 152 ! 153 btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) ! inverse of T-point surface 141 154 ENDIF 142 155 … … 146 159 DO jj = 1, jpj 147 160 DO ji = 1, jpi 148 zind(ji,jj,jk) = MAX ( upsrnfh(ji,jj) * upsrnfz(jk), & ! changing advection scheme near runoff 149 & upsadv(ji,jj) & ! in the vicinity of some straits 161 zind(ji,jj,jk) = MAX ( & 162 rnfmsk(ji,jj) * rnfmsk_z(jk), & ! near runoff mouths (& closed sea outflows) 163 upsmsk(ji,jj) & ! some of some straits 150 164 #if defined key_ice_lim 151 & , tmask(ji,jj,jk) & ! half upstream tracer fluxes 152 & * MAX( 0., SIGN( 1., fzptn(ji,jj) & ! if tn < ("freezing"+0.1 ) 153 & +0.1-tn(ji,jj,jk) ) ) & 165 ! ! below ice covered area (if tn < "freezing"+0.1 ) 166 , MAX( 0., SIGN( 1., fzptn(ji,jj) + 0.1 - tn(ji,jj,jk) ) ) * tmask(ji,jj,jk) & 154 167 #endif 155 168 & ) … … 158 171 END DO 159 172 160 161 ! Horizontal advective fluxes 162 ! ----------------------------- 173 ! I. Horizontal advective fluxes 174 ! ------------------------------ 175 ! Second order centered tracer flux at u and v-points 176 ! ----------------------------------------------------- 163 177 ! ! =============== 164 178 DO jk = 1, jpkm1 ! Horizontal slab … … 208 222 zbtr = btr2(ji,jj) / fse3t(ji,jj,jk) 209 223 #endif 210 ! horizontal advective trends 211 zta = - zbtr * ( zwx(ji,jj,jk) - zwx(ji-1,jj ,jk) & 224 zta = - zbtr * ( zwx(ji,jj,jk) - zwx(ji-1,jj ,jk) & ! horizontal advective trends 212 225 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk) ) 213 226 zsa = - zbtr * ( zww(ji,jj,jk) - zww(ji-1,jj ,jk) & 214 227 & + zwz(ji,jj,jk) - zwz(ji ,jj-1,jk) ) 215 ! add it to the general tracer trends 216 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 228 ta(ji,jj,jk) = ta(ji,jj,jk) + zta ! add it to the general tracer trends 217 229 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 218 230 END DO … … 279 291 & tab3d_2=sa, clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 280 292 281 ! 4. "zonal" mean advective heat and salt transport 282 ! ------------------------------------------------- 283 293 ! "zonal" mean advective heat and salt transport 284 294 IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 285 295 IF( lk_zco ) THEN … … 313 323 ENDIF 314 324 315 ! 1. Vertical advective fluxes 325 ! 1. Vertical advective fluxes (Second order centered tracer flux at w-point) 316 326 ! ---------------------------- 317 ! Second order centered tracer flux at w-point318 327 DO jk = 2, jpk 319 328 DO jj = 2, jpjm1 320 329 DO ji = fs_2, fs_jpim1 ! vector opt. 321 ! upstream indicator 322 zcofk = MAX( zind(ji,jj,jk-1), zind(ji,jj,jk) ) 323 ! velocity * 1/2 324 zhw = 0.5 * pwn(ji,jj,jk) 325 ! upstream scheme 326 zfp_w = zhw + ABS( zhw ) 330 zcofk = MAX( zind(ji,jj,jk-1), zind(ji,jj,jk) ) ! upstream indicator 331 zhw = 0.5 * pwn(ji,jj,jk) ! velocity * 1/2 332 zfp_w = zhw + ABS( zhw ) ! upstream scheme 327 333 zfm_w = zhw - ABS( zhw ) 328 334 zupst = zfp_w * tb(ji,jj,jk) + zfm_w * tb(ji,jj,jk-1) 329 335 zupss = zfp_w * sb(ji,jj,jk) + zfm_w * sb(ji,jj,jk-1) 330 ! centered scheme 331 zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) ) 336 zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) ) ! centered scheme 332 337 zcens = zhw * ( sn(ji,jj,jk) + sn(ji,jj,jk-1) ) 333 ! mixed centered / upstream scheme 334 zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent 338 zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent ! mixed centered / upstream scheme 335 339 zwy(ji,jj,jk) = zcofk * zupss + (1.-zcofk) * zcens 336 340 END DO … … 344 348 DO ji = fs_2, fs_jpim1 ! vector opt. 345 349 ze3tr = 1. / fse3t(ji,jj,jk) 346 ! vertical advective trends 347 zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) 350 zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) ! vertical advective trends 348 351 zsa = - ze3tr * ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) 349 ! add it to the general tracer trends 350 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 352 ta(ji,jj,jk) = ta(ji,jj,jk) + zta ! add it to the general tracer trends 351 353 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 352 354 END DO … … 387 389 ! 388 390 END SUBROUTINE tra_adv_cen2 391 392 393 SUBROUTINE ups_orca_set 394 !!---------------------------------------------------------------------- 395 !! *** ROUTINE ups_orca_set *** 396 !! 397 !! ** Purpose : add a portion of upstream scheme in area where the 398 !! centered scheme generates too strong overshoot 399 !! 400 !! ** Method : orca (R4 and R2) confiiguration setting. Set upsmsk 401 !! array to nozero value in some straith. 402 !! 403 !! ** Action : - upsmsk set to 1 at some strait, 0 elsewhere for orca 404 !!---------------------------------------------------------------------- 405 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers 406 !!---------------------------------------------------------------------- 407 408 ! mixed upstream/centered scheme near river mouths 409 ! ------------------------------------------------ 410 SELECT CASE ( jp_cfg ) 411 ! ! ======================= 412 CASE ( 4 ) ! ORCA_R4 configuration 413 ! ! ======================= 414 ! ! Gibraltar Strait 415 ii0 = 70 ; ii1 = 71 416 ij0 = 52 ; ij1 = 53 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 417 ! 418 ! ! ======================= 419 CASE ( 2 ) ! ORCA_R2 configuration 420 ! ! ======================= 421 ! ! Gibraltar Strait 422 ij0 = 102 ; ij1 = 102 423 ii0 = 138 ; ii1 = 138 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.20 424 ii0 = 139 ; ii1 = 139 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40 425 ii0 = 140 ; ii1 = 140 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 426 ij0 = 101 ; ij1 = 102 427 ii0 = 141 ; ii1 = 141 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 428 ! ! Bab el Mandeb Strait 429 ij0 = 87 ; ij1 = 88 430 ii0 = 164 ; ii1 = 164 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.10 431 ij0 = 88 ; ij1 = 88 432 ii0 = 163 ; ii1 = 163 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 433 ii0 = 162 ; ii1 = 162 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40 434 ii0 = 160 ; ii1 = 161 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 435 ij0 = 89 ; ij1 = 89 436 ii0 = 158 ; ii1 = 160 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 437 ij0 = 90 ; ij1 = 90 438 ii0 = 160 ; ii1 = 160 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 439 ! ! Sound Strait 440 ij0 = 116 ; ij1 = 116 441 ii0 = 144 ; ii1 = 144 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 442 ii0 = 145 ; ii1 = 147 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50 443 ii0 = 148 ; ii1 = 148 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25 444 ! 445 END SELECT 446 447 ! mixed upstream/centered scheme over closed seas 448 ! ----------------------------------------------- 449 CALL clo_ups( upsmsk(:,:) ) 450 ! 451 END SUBROUTINE ups_orca_set 389 452 390 453 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.