- Timestamp:
- 2016-05-04T16:23:46+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_v3_6_STABLE_OMP/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_tvd.F90
r6204 r6508 103 103 IF( l_trd ) THEN 104 104 CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 105 ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0 105 !$OMP PARALLEL WORKSHARE 106 ztrdx(:,:,:) = 0.e0 ; ztrdy(:,:,:) = 0.e0 ; ztrdz(:,:,:) = 0.e0 107 !$OMP END PARALLEL WORKSHARE 106 108 ENDIF 107 109 ! 108 zwi(:,:,:) = 0.e0 ; 110 !$OMP PARALLEL WORKSHARE 111 zwi(:,:,:) = 0.e0 ; 112 !$OMP END PARALLEL WORKSHARE 109 113 ! 110 114 ! ! =========== … … 120 124 ! -------------------------------------------------------------------- 121 125 ! upstream tracer flux in the i and j direction 126 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui) 122 127 DO jk = 1, jpkm1 123 128 DO jj = 1, jpjm1 … … 136 141 ! upstream tracer flux in the k direction 137 142 ! Interior value 143 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 138 144 DO jk = 2, jpkm1 139 145 DO jj = 1, jpj … … 169 175 170 176 ! total advective trend 177 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 171 178 DO jk = 1, jpkm1 172 179 z2dtt = p2dt(jk) … … 201 208 ! -------------------------------------------------- 202 209 ! antidiffusive flux on i and j 210 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 203 211 DO jk = 1, jpkm1 204 212 DO jj = 1, jpjm1 … … 212 220 ! antidiffusive flux on k 213 221 ! Interior value 222 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 214 223 DO jk = 2, jpkm1 215 224 DO jj = 1, jpj … … 227 236 END DO 228 237 ELSE 238 !$OMP PARALLEL WORKSHARE 229 239 zwz(:,:,1) = 0.e0 240 !$OMP END PARALLEL WORKSHARE 230 241 END IF 231 242 CALL lbc_lnk( zwx, 'U', -1. ) ; CALL lbc_lnk( zwy, 'V', -1. ) ! Lateral bondary conditions … … 239 250 ! 5. final trend with corrected fluxes 240 251 ! ------------------------------------ 252 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 241 253 DO jk = 1, jpkm1 242 254 DO jj = 2, jpjm1 … … 339 351 IF( l_trd ) THEN 340 352 CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 353 !$OMP PARALLEL WORKSHARE 341 354 ztrdx(:,:,:) = 0._wp ; ztrdy(:,:,:) = 0._wp ; ztrdz(:,:,:) = 0._wp 355 !$OMP END PARALLEL WORKSHARE 342 356 ENDIF 343 357 ! 358 !$OMP PARALLEL WORKSHARE 344 359 zwi(:,:,:) = 0._wp 360 !$OMP END PARALLEL WORKSHARE 345 361 z_rzts = 1._wp / REAL( jnzts, wp ) 346 362 zr_p2dt(:) = 1._wp / p2dt(:) … … 351 367 ! 1. Bottom value : flux set to zero 352 368 ! ---------------------------------- 369 !$OMP PARALLEL WORKSHARE 353 370 zwx(:,:,jpk) = 0._wp ; zwz(:,:,jpk) = 0._wp 354 371 zwy(:,:,jpk) = 0._wp ; zwi(:,:,jpk) = 0._wp 355 372 !$OMP END PARALLEL WORKSHARE 356 373 ! 2. upstream advection with initial mass fluxes & intermediate update 357 374 ! -------------------------------------------------------------------- 358 375 ! upstream tracer flux in the i and j direction 376 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_vj, zfm_vj, zfp_ui, zfm_ui) 359 377 DO jk = 1, jpkm1 360 378 DO jj = 1, jpjm1 … … 373 391 ! upstream tracer flux in the k direction 374 392 ! Interior value 393 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zfp_wk, zfm_wk) 375 394 DO jk = 2, jpkm1 376 395 DO jj = 1, jpj … … 385 404 IF( lk_vvl ) THEN 386 405 IF ( ln_isfcav ) THEN 406 !$OMP PARALLEL DO schedule(static) private(jj, ji) 387 407 DO jj = 1, jpj 388 408 DO ji = 1, jpi … … 391 411 END DO 392 412 ELSE 413 !$OMP PARALLEL WORKSHARE 393 414 zwz(:,:,1) = 0.e0 ! volume variable + no isf 415 !$OMP END PARALLEL WORKSHARE 394 416 END IF 395 417 ELSE 396 418 IF ( ln_isfcav ) THEN 419 !$OMP PARALLEL DO schedule(static) private(jj, ji) 397 420 DO jj = 1, jpj 398 421 DO ji = 1, jpi … … 401 424 END DO 402 425 ELSE 426 !$OMP PARALLEL WORKSHARE 403 427 zwz(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) ! linear free surface + no isf 428 !$OMP END PARALLEL WORKSHARE 404 429 END IF 405 430 ENDIF 406 431 407 432 ! total advective trend 433 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 408 434 DO jk = 1, jpkm1 409 435 z2dtt = p2dt(jk) … … 427 453 IF( l_trd ) THEN 428 454 ! store intermediate advective trends 455 !$OMP PARALLEL WORKSHARE 429 456 ztrdx(:,:,:) = zwx(:,:,:) ; ztrdy(:,:,:) = zwy(:,:,:) ; ztrdz(:,:,:) = zwz(:,:,:) 457 !$OMP END PARALLEL WORKSHARE 430 458 END IF 431 459 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) … … 439 467 ! antidiffusive flux on i and j 440 468 441 469 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 442 470 DO jk = 1, jpkm1 443 471 … … 451 479 END DO 452 480 END DO 453 481 !$OMP PARALLEL DO schedule(static) private(jj, ji) 454 482 DO jj = 2, jpjm1 ! partial horizontal divergence 455 483 DO ji = fs_2, fs_jpim1 … … 458 486 END DO 459 487 END DO 460 488 !$OMP PARALLEL DO schedule(static) private(jj, ji) 461 489 DO jj = 1, jpjm1 462 490 DO ji = 1, fs_jpim1 ! vector opt. … … 468 496 469 497 ! antidiffusive flux on k 498 !$OMP PARALLEL WORKSHARE 470 499 zwz(:,:,1) = 0._wp ! Surface value 471 500 zwz_sav(:,:,:) = zwz(:,:,:) … … 473 502 ztrs(:,:,:,1) = ptb(:,:,:,jn) 474 503 zwzts(:,:,:) = 0._wp 475 504 !$OMP END PARALLEL WORKSHARE 476 505 DO jl = 1, jnzts ! Start of sub timestepping loop 477 506 … … 490 519 jta = MOD(jta,3) + 1 491 520 ENDIF 521 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 492 522 DO jk = 2, jpkm1 ! Interior value 493 523 DO jj = 2, jpjm1 … … 500 530 501 531 jtaken = MOD( jtaken + 1 , 2 ) 502 532 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 503 533 DO jk = 2, jpkm1 ! Interior value 504 534 DO jj = 2, jpjm1 … … 513 543 514 544 END DO 515 545 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 516 546 DO jk = 2, jpkm1 ! Anti-diffusive vertical flux using average flux from the sub-timestepping 517 547 DO jj = 2, jpjm1 … … 531 561 ! 5. final trend with corrected fluxes 532 562 ! ------------------------------------ 563 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zbtr, ztra) 533 564 DO jk = 1, jpkm1 534 565 DO jj = 2, jpjm1 … … 547 578 ! ! trend diagnostics (contribution of upstream fluxes) 548 579 IF( l_trd ) THEN 580 !$OMP PARALLEL WORKSHARE 549 581 ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:) ! <<< Add to previously computed 550 582 ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:) ! <<< Add to previously computed 551 583 ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:) ! <<< Add to previously computed 552 584 !$OMP END PARALLEL WORKSHARE 553 585 CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) ) 554 586 CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) ) … … 602 634 zbig = 1.e+40_wp 603 635 zrtrn = 1.e-15_wp 636 !$OMP PARALLEL WORKSHARE 604 637 zbetup(:,:,:) = 0._wp ; zbetdo(:,:,:) = 0._wp 605 638 !$OMP END PARALLEL WORKSHARE 606 639 ! Search local extrema 607 640 ! -------------------- 608 641 ! max/min of pbef & paft with large negative/positive value (-/+zbig) inside land 609 zbup = MAX( pbef * tmask - zbig * ( 1._wp - tmask ), & 610 & paft * tmask - zbig * ( 1._wp - tmask ) ) 611 zbdo = MIN( pbef * tmask + zbig * ( 1._wp - tmask ), & 612 & paft * tmask + zbig * ( 1._wp - tmask ) ) 613 642 !zbup = MAX( pbef * tmask - zbig * ( 1._wp - tmask ), & 643 ! & paft * tmask - zbig * ( 1._wp - tmask ) ) 644 !zbdo = MIN( pbef * tmask + zbig * ( 1._wp - tmask ), & 645 ! & paft * tmask + zbig * ( 1._wp - tmask ) ) 646 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji) 647 DO jk = 1, jpk 648 DO jj = 1, jpj 649 !DIR$ IVDEP 650 DO ji = 1, jpi 651 zbup(ji,jj,jk) = MAX( pbef(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1._wp - tmask(ji,jj,jk) ), & 652 & paft(ji,jj,jk) * tmask(ji,jj,jk) - zbig * ( 1._wp - tmask(ji,jj,jk) ) ) 653 zbdo(ji,jj,jk) = MIN( pbef(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1._wp - tmask(ji,jj,jk) ), & 654 & paft(ji,jj,jk) * tmask(ji,jj,jk) + zbig * ( 1._wp - tmask(ji,jj,jk) ) ) 655 END DO 656 END DO 657 END DO 658 659 660 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, zpos, zneg, zbt, ikm1, z2dtt, zup, zdo) 614 661 DO jk = 1, jpkm1 615 662 ikm1 = MAX(jk-1,1) … … 651 698 ! 3. monotonic flux in the i & j direction (paa & pbb) 652 699 ! ---------------------------------------- 700 !$OMP PARALLEL DO schedule(static) private(jk, jj, ji, za, zb, zc, zav, zbv, zcv, zau, zbu, zcu) 653 701 DO jk = 1, jpkm1 654 702 DO jj = 2, jpjm1
Note: See TracChangeset
for help on using the changeset viewer.