- Timestamp:
- 2021-03-03T17:04:07+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_triad.F90
r14537 r14576 152 152 IF( kpass == 1 ) THEN !== first pass only and whatever the tracer is ==! 153 153 ! 154 DO_3D( 0, 0, 0, 0, 1, jpk ) 154 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk ) 155 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 155 156 akz (ji,jj,jk) = 0._wp 156 157 ah_wslp2(ji,jj,jk) = 0._wp … … 159 160 DO ip = 0, 1 ! i-k triads 160 161 DO kp = 0, 1 161 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 162 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 163 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 162 164 ze3wr = 1._wp / e3w(ji,jj,jk+kp,Kmm) 163 165 zbu = e1e2u(ji-ip,jj) * e3u(ji-ip,jj,jk,Kmm) … … 177 179 DO jp = 0, 1 ! j-k triads 178 180 DO kp = 0, 1 179 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 181 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 182 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 180 183 ze3wr = 1.0_wp / e3w(ji,jj,jk+kp,Kmm) 181 184 zbv = e1e2v(ji,jj-jp) * e3v(ji,jj-jp,jk,Kmm) … … 197 200 ! 198 201 IF( ln_traldf_blp ) THEN ! bilaplacian operator 199 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 202 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 203 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 200 204 akz(ji,jj,jk) = 16._wp & 201 205 & * ah_wslp2 (ji,jj,jk) & … … 205 209 END_3D 206 210 ELSEIF( ln_traldf_lap ) THEN ! laplacian operator 207 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 211 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 212 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 208 213 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 209 214 zcoef0 = rDt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) … … 213 218 ! 214 219 ELSE ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 215 DO_3D( 0, 0, 0, 0, 1, jpk ) 220 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpk ) 221 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 216 222 akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) 217 223 END_3D … … 228 234 DO jp = 0, 1 229 235 DO kp = 0, 1 230 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 236 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 237 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) 231 238 zpsi_uw(ji,jj,jk+kp) = zpsi_uw(ji,jj,jk+kp) & 232 239 & + 0.25_wp * aeiu(ji,jj,jk) * e2u(ji,jj) * triadi_g(ji+jp,jj,jk,1-jp,kp) … … 253 260 zftv(:,:,:) = 0._wp 254 261 ! 255 DO_3D( 1, 0, 1, 0, 1, jpkm1 ) !== before lateral T & S gradients at T-level jk ==! 262 ! [comm_cleanup] ! DO_3D( 1, 0, 1, 0, 1, jpkm1 ) !== before lateral T & S gradients at T-level jk ==! 263 DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 ) 256 264 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 257 265 zdjt(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 258 266 END_3D 259 267 IF( ln_zps .AND. l_grad_zps ) THEN ! partial steps: correction at top/bottom ocean level 260 DO_2D( 1, 0, 1, 0 ) ! bottom level 268 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) ! bottom level 269 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 261 270 zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 262 271 zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 263 272 END_2D 264 273 IF( ln_isfcav ) THEN ! top level (ocean cavities only) 265 DO_2D( 1, 0, 1, 0 ) 274 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) 275 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 266 276 IF( miku(ji,jj) > 1 ) zdit(ji,jj,miku(ji,jj) ) = pgui(ji,jj,jn) 267 277 IF( mikv(ji,jj) > 1 ) zdjt(ji,jj,mikv(ji,jj) ) = pgvi(ji,jj,jn) … … 276 286 DO jk = 1, jpkm1 277 287 ! !== Vertical tracer gradient at level jk and jk+1 278 DO_2D( 1, 1, 1, 1 ) 288 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) 289 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 279 290 zdkt3d(ji,jj,1) = ( pt(ji,jj,jk,jn) - pt(ji,jj,jk+1,jn) ) * tmask(ji,jj,jk+1) 280 291 END_2D … … 283 294 IF( jk == 1 ) THEN ; zdkt3d(:,:,0) = zdkt3d(:,:,1) 284 295 ELSE 285 DO_2D( 1, 1, 1, 1 ) 296 ! [comm_cleanup] ! DO_2D( 1, 1, 1, 1 ) 297 DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 286 298 zdkt3d(ji,jj,0) = ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 287 299 END_2D … … 293 305 DO ip = 0, 1 !== Horizontal & vertical fluxes 294 306 DO kp = 0, 1 295 DO_2D( 1, 0, 1, 0 ) 307 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) 308 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 296 309 ze1ur = r1_e1u(ji,jj) 297 310 zdxt = zdit(ji,jj,jk) * ze1ur … … 314 327 DO jp = 0, 1 315 328 DO kp = 0, 1 316 DO_2D( 1, 0, 1, 0 ) 329 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) 330 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 317 331 ze2vr = r1_e2v(ji,jj) 318 332 zdyt = zdjt(ji,jj,jk) * ze2vr … … 336 350 DO ip = 0, 1 !== Horizontal & vertical fluxes 337 351 DO kp = 0, 1 338 DO_2D( 1, 0, 1, 0 ) 352 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) 353 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 339 354 ze1ur = r1_e1u(ji,jj) 340 355 zdxt = zdit(ji,jj,jk) * ze1ur … … 357 372 DO jp = 0, 1 358 373 DO kp = 0, 1 359 DO_2D( 1, 0, 1, 0 ) 374 ! [comm_cleanup] ! DO_2D( 1, 0, 1, 0 ) 375 DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 360 376 ze2vr = r1_e2v(ji,jj) 361 377 zdyt = zdjt(ji,jj,jk) * ze2vr … … 376 392 ENDIF 377 393 ! !== horizontal divergence and add to the general trend ==! 378 DO_2D( 0, 0, 0, 0 ) 394 ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 395 DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 379 396 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) & 380 397 & + zsign * ( zftu(ji-1,jj ,jk) - zftu(ji,jj,jk) & … … 387 404 ! !== add the vertical 33 flux ==! 388 405 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz 389 DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 406 ! [comm_cleanup] ! DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 407 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 390 408 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 391 409 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & … … 395 413 SELECT CASE( kpass ) 396 414 CASE( 1 ) ! 1st pass : eddy coef = ah_wslp2 397 DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 415 ! [comm_cleanup] ! DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 416 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 398 417 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 399 418 & * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 400 419 END_3D 401 420 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 402 DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 421 ! [comm_cleanup] ! DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 422 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 403 423 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 404 424 & * ( ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) ) & … … 408 428 ENDIF 409 429 ! 410 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==! 430 ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) !== Divergence of vertical fluxes added to pta ==! 431 DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 411 432 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) & 412 433 & + zsign * ( ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk) ) &
Note: See TracChangeset
for help on using the changeset viewer.