Changeset 719 for trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
- Timestamp:
- 2007-10-16T16:59:56+02:00 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/TRA/traadv_cen2.F90
- Property svn:keywords changed from Id to Author Date Id Revision
r717 r719 1 1 MODULE traadv_cen2 2 !!====================================================================== 3 !! *** MODULE traadv_cen2 ***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 ! 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 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 12 10 !!---------------------------------------------------------------------- 13 11 … … 16 14 !! vertical advection trends using a seconder order 17 15 !! centered scheme. (k-j-i loops) 18 !! ups_orca_set : allow mixed upstream/centered scheme in specific19 !! area (set for orca 2 and 4 only)20 16 !!---------------------------------------------------------------------- 21 17 USE oce ! ocean dynamics and active tracers 22 18 USE dom_oce ! ocean space and time domain 23 USE sbc_oce ! surface boundary condition: ocean 24 USE dynspg_oce ! choice/control of key cpp for surface pressure gradient 19 USE trdmod ! ocean active tracers trends 25 20 USE trdmod_oce ! ocean variables trends 26 USE trdmod ! ocean active tracers trends 27 USE closea ! closed sea 21 USE flxrnf ! 28 22 USE trabbl ! advective term in the BBL 29 23 USE ocfzpt ! 30 USE sbcrnf ! river runoffs31 USE in_out_manager ! I/O manager32 24 USE lib_mpp 33 25 USE lbclnk ! ocean lateral boundary condition (or mpp link) 26 USE in_out_manager ! I/O manager 34 27 USE diaptr ! poleward transport diagnostics 28 USE dynspg_oce ! choice/control of key cpp for surface pressure gradient 35 29 USE prtctl ! Print control 36 30 … … 38 32 PRIVATE 39 33 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) 34 PUBLIC tra_adv_cen2 ! routine called by step.F90 45 35 46 36 REAL(wp), DIMENSION(jpi,jpj) :: btr2 ! inverse of T-point surface [1/(e1t*e2t)] … … 50 40 # include "vectopt_loop_substitute.h90" 51 41 !!---------------------------------------------------------------------- 52 !! OPA 9.0 , LOCEAN-IPSL (200 6)53 !! $ Id$42 !! OPA 9.0 , LOCEAN-IPSL (2005) 43 !! $Header$ 54 44 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 55 45 !!---------------------------------------------------------------------- … … 129 119 !! 130 120 INTEGER :: ji, jj, jk ! dummy loop indices 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 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 140 131 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zww, ztrds ! " " 141 132 !!---------------------------------------------------------------------- … … 146 137 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ Vector optimization case' 147 138 IF(lwp) WRITE(numout,*) 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 139 ! 140 btr2(:,:) = 1. / ( e1t(:,:) * e2t(:,:) ) 154 141 ENDIF 155 142 … … 159 146 DO jj = 1, jpj 160 147 DO ji = 1, jpi 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 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 164 150 #if defined key_ice_lim 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) & 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) ) ) & 167 154 #endif 168 155 & ) … … 171 158 END DO 172 159 173 ! I. Horizontal advective fluxes 174 ! ------------------------------ 175 ! Second order centered tracer flux at u and v-points 176 ! ----------------------------------------------------- 160 161 ! Horizontal advective fluxes 162 ! ----------------------------- 177 163 ! ! =============== 178 164 DO jk = 1, jpkm1 ! Horizontal slab … … 222 208 zbtr = btr2(ji,jj) / fse3t(ji,jj,jk) 223 209 #endif 224 zta = - zbtr * ( zwx(ji,jj,jk) - zwx(ji-1,jj ,jk) & ! horizontal advective trends 210 ! horizontal advective trends 211 zta = - zbtr * ( zwx(ji,jj,jk) - zwx(ji-1,jj ,jk) & 225 212 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk) ) 226 213 zsa = - zbtr * ( zww(ji,jj,jk) - zww(ji-1,jj ,jk) & 227 214 & + zwz(ji,jj,jk) - zwz(ji ,jj-1,jk) ) 228 ta(ji,jj,jk) = ta(ji,jj,jk) + zta ! add it to the general tracer trends 215 ! add it to the general tracer trends 216 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 229 217 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 230 218 END DO … … 291 279 & tab3d_2=sa, clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 292 280 293 ! "zonal" mean advective heat and salt transport 281 ! 4. "zonal" mean advective heat and salt transport 282 ! ------------------------------------------------- 283 294 284 IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 295 285 IF( lk_zco ) THEN … … 323 313 ENDIF 324 314 325 ! 1. Vertical advective fluxes (Second order centered tracer flux at w-point)315 ! 1. Vertical advective fluxes 326 316 ! ---------------------------- 317 ! Second order centered tracer flux at w-point 327 318 DO jk = 2, jpk 328 319 DO jj = 2, jpjm1 329 320 DO ji = fs_2, fs_jpim1 ! vector opt. 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 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 ) 333 327 zfm_w = zhw - ABS( zhw ) 334 328 zupst = zfp_w * tb(ji,jj,jk) + zfm_w * tb(ji,jj,jk-1) 335 329 zupss = zfp_w * sb(ji,jj,jk) + zfm_w * sb(ji,jj,jk-1) 336 zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) ) ! centered scheme 330 ! centered scheme 331 zcent = zhw * ( tn(ji,jj,jk) + tn(ji,jj,jk-1) ) 337 332 zcens = zhw * ( sn(ji,jj,jk) + sn(ji,jj,jk-1) ) 338 zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent ! mixed centered / upstream scheme 333 ! mixed centered / upstream scheme 334 zwx(ji,jj,jk) = zcofk * zupst + (1.-zcofk) * zcent 339 335 zwy(ji,jj,jk) = zcofk * zupss + (1.-zcofk) * zcens 340 336 END DO … … 348 344 DO ji = fs_2, fs_jpim1 ! vector opt. 349 345 ze3tr = 1. / fse3t(ji,jj,jk) 350 zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) ! vertical advective trends 346 ! vertical advective trends 347 zta = - ze3tr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) 351 348 zsa = - ze3tr * ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) 352 ta(ji,jj,jk) = ta(ji,jj,jk) + zta ! add it to the general tracer trends 349 ! add it to the general tracer trends 350 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 353 351 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 354 352 END DO … … 389 387 ! 390 388 END SUBROUTINE tra_adv_cen2 391 392 393 SUBROUTINE ups_orca_set394 !!----------------------------------------------------------------------395 !! *** ROUTINE ups_orca_set ***396 !!397 !! ** Purpose : add a portion of upstream scheme in area where the398 !! centered scheme generates too strong overshoot399 !!400 !! ** Method : orca (R4 and R2) confiiguration setting. Set upsmsk401 !! array to nozero value in some straith.402 !!403 !! ** Action : - upsmsk set to 1 at some strait, 0 elsewhere for orca404 !!----------------------------------------------------------------------405 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integers406 !!----------------------------------------------------------------------407 408 ! mixed upstream/centered scheme near river mouths409 ! ------------------------------------------------410 SELECT CASE ( jp_cfg )411 ! ! =======================412 CASE ( 4 ) ! ORCA_R4 configuration413 ! ! =======================414 ! ! Gibraltar Strait415 ii0 = 70 ; ii1 = 71416 ij0 = 52 ; ij1 = 53 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50417 !418 ! ! =======================419 CASE ( 2 ) ! ORCA_R2 configuration420 ! ! =======================421 ! ! Gibraltar Strait422 ij0 = 102 ; ij1 = 102423 ii0 = 138 ; ii1 = 138 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.20424 ii0 = 139 ; ii1 = 139 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40425 ii0 = 140 ; ii1 = 140 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50426 ij0 = 101 ; ij1 = 102427 ii0 = 141 ; ii1 = 141 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50428 ! ! Bab el Mandeb Strait429 ij0 = 87 ; ij1 = 88430 ii0 = 164 ; ii1 = 164 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.10431 ij0 = 88 ; ij1 = 88432 ii0 = 163 ; ii1 = 163 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25433 ii0 = 162 ; ii1 = 162 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.40434 ii0 = 160 ; ii1 = 161 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50435 ij0 = 89 ; ij1 = 89436 ii0 = 158 ; ii1 = 160 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25437 ij0 = 90 ; ij1 = 90438 ii0 = 160 ; ii1 = 160 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25439 ! ! Sound Strait440 ij0 = 116 ; ij1 = 116441 ii0 = 144 ; ii1 = 144 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25442 ii0 = 145 ; ii1 = 147 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.50443 ii0 = 148 ; ii1 = 148 ; upsmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 0.25444 !445 END SELECT446 447 ! mixed upstream/centered scheme over closed seas448 ! -----------------------------------------------449 CALL clo_ups( upsmsk(:,:) )450 !451 END SUBROUTINE ups_orca_set452 389 453 390 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.