- Timestamp:
- 2015-09-13T09:42:41+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5721_CNRS9_NOC3_LDF/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r5029 r5737 213 213 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 214 214 !!---------------------------------------------------------------------- 215 !216 215 INTEGER , INTENT(in ) :: kt ! ocean time-step index 217 216 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 237 236 zfact2 = 0.5 * 0.5 ! Local constant initialization 238 237 239 !CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz )240 238 ! ! =============== 241 239 DO jk = 1, jpkm1 ! Horizontal slab … … 252 250 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 253 251 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 254 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj))252 & * 0.5 * r1_e1e2f(ji,jj) 255 253 END DO 256 254 END DO … … 262 260 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 263 261 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 264 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) )&262 & * 0.5 * r1_e1e2f(ji,jj) & 265 263 & ) 266 264 END DO … … 285 283 zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 286 284 zx2 = zwx(ji ,jj) + zwx(ji ,jj+1) 287 pua(ji,jj,jk) = pua(ji,jj,jk) + zfact2 /e1u(ji,jj) * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 )288 pva(ji,jj,jk) = pva(ji,jj,jk) - zfact2 /e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 )285 pua(ji,jj,jk) = pua(ji,jj,jk) + zfact2 * r1_e1u(ji,jj) * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 286 pva(ji,jj,jk) = pva(ji,jj,jk) - zfact2 * r1_e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 289 287 END DO 290 288 END DO … … 365 363 zww(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 366 364 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 367 & * 0.5 / ( e1 f(ji,jj) *e2f (ji,jj) * fse3f(ji,jj,jk) )365 & * 0.5 / ( e1e2f (ji,jj) * fse3f(ji,jj,jk) ) 368 366 END DO 369 367 END DO … … 380 378 zww(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 381 379 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 382 & * 0.5 / ( e1f(ji,jj) * e2f (ji,jj))380 & * 0.5 * r1_e1e2f(ji,jj) 383 381 END DO 384 382 END DO … … 393 391 DO jj = 2, jpjm1 394 392 DO ji = fs_2, fs_jpim1 ! vector opt. 395 zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) /e1u(ji,jj)396 zy2 = ( zwy(ji,jj ) + zwy(ji+1,jj ) ) /e1u(ji,jj)397 zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) /e2v(ji,jj)398 zx2 = ( zwx(ji ,jj) + zwx(ji ,jj+1) ) /e2v(ji,jj)393 zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) * r1_e1u(ji,jj) 394 zy2 = ( zwy(ji,jj ) + zwy(ji+1,jj ) ) * r1_e1u(ji,jj) 395 zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) * r1_e2v(ji,jj) 396 zx2 = ( zwx(ji ,jj) + zwx(ji ,jj+1) ) * r1_e2v(ji,jj) 399 397 ! enstrophy conserving formulation for relative vorticity term 400 398 zua = zfact1 * ( zww(ji ,jj-1) + zww(ji,jj) ) * ( zy1 + zy2 ) … … 481 479 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 482 480 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 483 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj))481 & * 0.5 * r1_e1e2f(ji,jj) 484 482 END DO 485 483 END DO … … 491 489 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 492 490 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 493 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj)) &491 & * 0.5 * r1_e1e2f(ji,jj) & 494 492 & ) 495 493 END DO … … 497 495 END SELECT 498 496 ! 499 IF( ln_sco ) THEN 500 DO jj = 1, jpj ! caution: don't use (:,:) for this loop 501 DO ji = 1, jpi ! it causes optimization problems on NEC in auto-tasking 502 zwz(ji,jj) = zwz(ji,jj) / fse3f(ji,jj,jk) 503 zwx(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk) 504 zwy(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk) 505 END DO 506 END DO 497 IF( ln_sco ) THEN !== horizontal fluxes ==! 498 zwz(:,:) = zwz(:,:) / fse3f(:,:,jk) 499 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 500 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 507 501 ELSE 508 DO jj = 1, jpj ! caution: don't use (:,:) for this loop 509 DO ji = 1, jpi ! it causes optimization problems on NEC in auto-tasking 510 zwx(ji,jj) = e2u(ji,jj) * un(ji,jj,jk) 511 zwy(ji,jj) = e1v(ji,jj) * vn(ji,jj,jk) 512 END DO 513 END DO 514 ENDIF 515 ! 516 ! Compute and add the vorticity term trend 517 ! ---------------------------------------- 502 zwx(:,:) = e2u(:,:) * un(:,:,jk) 503 zwy(:,:) = e1v(:,:) * vn(:,:,jk) 504 ENDIF 505 ! !== compute and add the vorticity term trend =! 518 506 DO jj = 2, jpjm1 519 507 DO ji = fs_2, fs_jpim1 ! vector opt. 520 zuav = zfact1 /e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) &521 & + zwy(ji ,jj ) + zwy(ji+1,jj ) )522 zvau =-zfact1 /e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) &523 & + zwx(ji ,jj ) + zwx(ji ,jj+1) )508 zuav = zfact1 * r1_e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) & 509 & + zwy(ji ,jj ) + zwy(ji+1,jj ) ) 510 zvau =-zfact1 * r1_e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) & 511 & + zwx(ji ,jj ) + zwx(ji ,jj+1) ) 524 512 pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji ,jj-1) + zwz(ji,jj) ) 525 513 pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj ) + zwz(ji,jj) ) … … 553 541 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 554 542 !!---------------------------------------------------------------------- 555 !556 543 INTEGER , INTENT(in ) :: kt ! ocean time-step index 557 544 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; … … 627 614 zfac12 = 1._wp / 12._wp ! Local constant initialization 628 615 629 630 !CDIR PARALLEL DO PRIVATE( zwx, zwy, zwz, ztnw, ztne, ztsw, ztse )631 616 ! ! =============== 632 617 DO jk = 1, jpkm1 ! Horizontal slab … … 645 630 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 646 631 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 647 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj)) * ze3f(ji,jj,jk)632 & * 0.5 * r1_e1e2f(ji,jj) * ze3f(ji,jj,jk) 648 633 END DO 649 634 END DO … … 657 642 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 658 643 & - ( un(ji ,jj+1,jk) + un (ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 659 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 660 & ) * ze3f(ji,jj,jk) 644 & * 0.5 * r1_e1e2f(ji,jj) ) * ze3f(ji,jj,jk) 661 645 END DO 662 646 END DO 663 647 CALL lbc_lnk( zwz, 'F', 1. ) 664 648 END SELECT 665 649 ! 650 ! !== horizontal fluxes ==! 666 651 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 667 652 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 668 653 669 ! Compute and add the vorticity term trend 670 ! ---------------------------------------- 654 ! !== compute and add the vorticity term trend =! 671 655 jj = 2 672 656 ztne(1,:) = 0 ; ztnw(1,:) = 0 ; ztse(1,:) = 0 ; ztsw(1,:) = 0 673 DO ji = 2, jpi 657 DO ji = 2, jpi ! split in 2 parts due to vector opt. 674 658 ztne(ji,jj) = zwz(ji-1,jj ) + zwz(ji ,jj ) + zwz(ji ,jj-1) 675 659 ztnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj ) + zwz(ji ,jj ) … … 687 671 DO jj = 2, jpjm1 688 672 DO ji = fs_2, fs_jpim1 ! vector opt. 689 zua = + zfac12 /e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) &673 zua = + zfac12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 690 674 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 691 zva = - zfac12 /e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) &675 zva = - zfac12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & 692 676 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) 693 677 pua(ji,jj,jk) = pua(ji,jj,jk) + zua
Note: See TracChangeset
for help on using the changeset viewer.