- Timestamp:
- 2015-12-16T10:25:22+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r5836 r6060 14 14 15 15 !!---------------------------------------------------------------------- 16 !! tra_ldf_iso : update the tracer trend with the horizontal component of a iso-neutral laplacian operator17 !! and with the vertical part of the isopycnal or geopotential s-coord. operator16 !! tra_ldf_iso : update the tracer trend with the horizontal component of a iso-neutral laplacian operator 17 !! and with the vertical part of the isopycnal or geopotential s-coord. operator 18 18 !!---------------------------------------------------------------------- 19 USE oce 20 USE dom_oce 21 USE trc_oce 22 USE zdf_oce 23 USE ldftra 24 USE ldfslp 25 USE diaptr 19 USE oce ! ocean dynamics and active tracers 20 USE dom_oce ! ocean space and time domain 21 USE trc_oce ! share passive tracers/Ocean variables 22 USE zdf_oce ! ocean vertical physics 23 USE ldftra ! lateral diffusion: tracer eddy coefficients 24 USE ldfslp ! iso-neutral slopes 25 USE diaptr ! poleward transport diagnostics 26 26 ! 27 USE in_out_manager 28 USE iom 29 USE phycst 30 USE lbclnk 31 USE wrk_nemo 32 USE timing 27 USE in_out_manager ! I/O manager 28 USE iom ! I/O library 29 USE phycst ! physical constants 30 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 USE wrk_nemo ! Memory Allocation 32 USE timing ! Timing 33 33 34 34 IMPLICIT NONE … … 38 38 39 39 !! * Substitutions 40 # include "domzgr_substitute.h90"41 40 # include "vectopt_loop_substitute.h90" 42 41 !!---------------------------------------------------------------------- … … 127 126 ah_wslp2(:,:,:) = 0._wp 128 127 ENDIF 129 !130 128 ! ! set time step size (Euler/Leapfrog) 131 129 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdttra(1) ! at nit000 (Euler) … … 138 136 ENDIF 139 137 140 141 138 !!---------------------------------------------------------------------- 142 139 !! 0 - calculate ah_wslp2 and akz … … 149 146 DO ji = fs_2, fs_jpim1 ! vector opt. 150 147 ! 151 zmsku = tmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) &148 zmsku = wmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) & 152 149 & + umask(ji-1,jj,jk-1) + umask(ji ,jj,jk) , 1._wp ) 153 zmskv = tmask(ji,jj,jk) / MAX( vmask(ji,jj ,jk-1) + vmask(ji,jj-1,jk) &150 zmskv = wmask(ji,jj,jk) / MAX( vmask(ji,jj ,jk-1) + vmask(ji,jj-1,jk) & 154 151 & + vmask(ji,jj-1,jk-1) + vmask(ji,jj ,jk) , 1._wp ) 155 152 ! … … 183 180 DO ji = 1, fs_jpim1 184 181 akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk) & 185 & * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( fse3w(ji,jj,jk) * fse3w(ji,jj,jk) ) )182 & * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) ) ) 186 183 END DO 187 184 END DO … … 191 188 DO jj = 1, jpjm1 192 189 DO ji = 1, fs_jpim1 193 ze3w_2 = fse3w(ji,jj,jk) * fse3w(ji,jj,jk)190 ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 194 191 zcoef0 = z2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) 195 192 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt … … 242 239 ENDIF 243 240 ENDIF 244 241 ! 245 242 !!---------------------------------------------------------------------- 246 243 !! II - horizontal trend (full) … … 266 263 ! END IF 267 264 !!gm 268 269 265 DO jj = 1 , jpjm1 !== Horizontal fluxes 270 266 DO ji = 1, fs_jpim1 ! vector opt. 271 zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * fse3u_n(ji,jj,jk)272 zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * fse3v_n(ji,jj,jk)267 zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) 268 zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) 273 269 ! 274 270 zmsku = 1. / MAX( tmask(ji+1,jj,jk ) + tmask(ji,jj,jk+1) & … … 294 290 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) & 295 291 & + zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) & 296 & / ( e1e2t(ji,jj) * fse3t(ji,jj,jk))292 & * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 297 293 END DO 298 294 END DO 299 295 END DO ! End of slab 300 296 301 302 297 !!---------------------------------------------------------------------- 303 298 !! III - vertical trend (full) 304 299 !!---------------------------------------------------------------------- 305 300 ! 306 301 ztfw(1,:,:) = 0._wp ; ztfw(jpi,:,:) = 0._wp 307 302 ! 308 303 ! Vertical fluxes 309 304 ! --------------- 310 311 ! Surface and bottom vertical fluxes set to zero 305 ! ! Surface and bottom vertical fluxes set to zero 312 306 ztfw(:,:, 1 ) = 0._wp ; ztfw(:,:,jpk) = 0._wp 313 307 314 ! interior (2=<jk=<jpk-1) 315 DO jk = 2, jpkm1 308 DO jk = 2, jpkm1 ! interior (2=<jk=<jpk-1) 316 309 DO jj = 2, jpjm1 317 310 DO ji = fs_2, fs_jpim1 ! vector opt. 318 311 ! 319 zmsku = tmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) &312 zmsku = wmask(ji,jj,jk) / MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) & 320 313 & + umask(ji-1,jj,jk-1) + umask(ji ,jj,jk) , 1._wp ) 321 zmskv = tmask(ji,jj,jk) / MAX( vmask(ji,jj ,jk-1) + vmask(ji,jj-1,jk) &314 zmskv = wmask(ji,jj,jk) / MAX( vmask(ji,jj ,jk-1) + vmask(ji,jj-1,jk) & 322 315 & + vmask(ji,jj-1,jk-1) + vmask(ji,jj ,jk) , 1._wp ) 323 316 ! … … 337 330 END DO 338 331 END DO 339 !340 332 ! !== add the vertical 33 flux ==! 341 333 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz … … 343 335 DO jj = 1, jpjm1 344 336 DO ji = fs_2, fs_jpim1 345 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk) &337 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) & 346 338 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & 347 339 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) … … 358 350 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) & 359 351 & + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj) & 360 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) / fse3w(ji,jj,jk)352 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 361 353 END DO 362 354 END DO … … 366 358 DO jj = 1, jpjm1 367 359 DO ji = fs_2, fs_jpim1 368 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk) &360 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) & 369 361 & * ( ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) ) & 370 362 & + akz (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) ) ) … … 379 371 DO ji = fs_2, fs_jpim1 ! vector opt. 380 372 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * ( ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1) ) & 381 & / ( e1e2t(ji,jj) * fse3t_n(ji,jj,jk))373 & * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 382 374 END DO 383 375 END DO
Note: See TracChangeset
for help on using the changeset viewer.