Changeset 13295 for NEMO/trunk/src/SWE/dynvor.F90
- Timestamp:
- 2020-07-10T20:24:21+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/SWE/dynvor.F90
r12983 r13295 232 232 CASE ( np_RVO , np_CRV ) !* relative vorticity at f-point is used 233 233 DO jk = 1, jpkm1 ! Horizontal slab 234 DO_2D _10_10234 DO_2D( 1, 0, 1, 0 ) 235 235 zwz(ji,jj,jk) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 236 236 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 237 237 END_2D 238 238 IF( ln_dynvor_msk ) THEN ! mask relative vorticity 239 DO_2D _10_10239 DO_2D( 1, 0, 1, 0 ) 240 240 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 241 241 END_2D … … 255 255 zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t(:,:,jk,Kmm) 256 256 CASE ( np_RVO ) !* relative vorticity 257 DO_2D _01_01257 DO_2D( 0, 1, 0, 1 ) 258 258 zwt(ji,jj) = r1_4 * ( zwz(ji-1,jj ,jk) + zwz(ji,jj ,jk) & 259 259 & + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) & … … 261 261 END_2D 262 262 CASE ( np_MET ) !* metric term 263 DO_2D _01_01263 DO_2D( 0, 1, 0, 1 ) 264 264 zwt(ji,jj) = ( ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj) & 265 265 & - ( pu(ji,jj,jk) + pu(ji-1,jj,jk) ) * dj_e1v_2(ji,jj) ) & … … 267 267 END_2D 268 268 CASE ( np_CRV ) !* Coriolis + relative vorticity 269 DO_2D _01_01269 DO_2D( 0, 1, 0, 1 ) 270 270 zwt(ji,jj) = ( ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj ,jk) + zwz(ji,jj ,jk) & 271 271 & + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) ) & … … 273 273 END_2D 274 274 CASE ( np_CME ) !* Coriolis + metric 275 DO_2D _01_01275 DO_2D( 0, 1, 0, 1 ) 276 276 zwt(ji,jj) = ( ff_t(ji,jj) * e1e2t(ji,jj) & 277 277 & + ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj) & … … 284 284 ! 285 285 ! !== compute and add the vorticity term trend =! 286 DO_2D _00_00286 DO_2D( 0, 0, 0, 0 ) 287 287 pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + r1_4 * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm) & 288 288 & * ( zwt(ji+1,jj) * ( pv(ji+1,jj,jk) + pv(ji+1,jj-1,jk) ) & … … 344 344 zwz(:,:) = ff_f(:,:) 345 345 CASE ( np_RVO ) !* relative vorticity 346 DO_2D _10_10346 DO_2D( 1, 0, 1, 0 ) 347 347 zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 348 348 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 349 349 END_2D 350 350 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 351 DO_2D _10_10351 DO_2D( 1, 0, 1, 0 ) 352 352 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 353 353 END_2D 354 354 ENDIF 355 355 CASE ( np_MET ) !* metric term 356 DO_2D _10_10356 DO_2D( 1, 0, 1, 0 ) 357 357 zwz(ji,jj) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 358 358 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 359 359 END_2D 360 360 CASE ( np_CRV ) !* Coriolis + relative vorticity 361 DO_2D _10_10361 DO_2D( 1, 0, 1, 0 ) 362 362 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 363 363 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 364 364 END_2D 365 365 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity (NOT the Coriolis term) 366 DO_2D _10_10366 DO_2D( 1, 0, 1, 0 ) 367 367 zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 368 368 END_2D 369 369 ENDIF 370 370 CASE ( np_CME ) !* Coriolis + metric 371 DO_2D _10_10371 DO_2D( 1, 0, 1, 0 ) 372 372 zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 373 373 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) … … 383 383 ! 384 384 ! !== compute and add the vorticity term trend =! 385 DO_2D _00_00385 DO_2D( 0, 0, 0, 0 ) 386 386 zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 387 387 zy2 = zwy(ji,jj ) + zwy(ji+1,jj ) … … 441 441 zwz(:,:) = ff_f(:,:) 442 442 CASE ( np_RVO ) !* relative vorticity 443 DO_2D _10_10443 DO_2D( 1, 0, 1, 0 ) 444 444 zwz(ji,jj) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 445 445 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 446 446 END_2D 447 447 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity 448 DO_2D _10_10448 DO_2D( 1, 0, 1, 0 ) 449 449 zwz(ji,jj) = ff_f(ji,jj) * fmask(ji,jj,jk) 450 450 END_2D 451 451 ENDIF 452 452 CASE ( np_MET ) !* metric term 453 DO_2D _10_10453 DO_2D( 1, 0, 1, 0 ) 454 454 zwz(ji,jj) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 455 455 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 456 456 END_2D 457 457 CASE ( np_CRV ) !* Coriolis + relative vorticity 458 DO_2D _10_10458 DO_2D( 1, 0, 1, 0 ) 459 459 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 460 460 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj) 461 461 END_2D 462 462 IF( ln_dynvor_msk ) THEN ! mask the relative vorticity (NOT the Coriolis term) 463 DO_2D _10_10463 DO_2D( 1, 0, 1, 0 ) 464 464 zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 465 465 END_2D 466 466 ENDIF 467 467 CASE ( np_CME ) !* Coriolis + metric 468 DO_2D _10_10468 DO_2D( 1, 0, 1, 0 ) 469 469 zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 470 470 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) … … 481 481 ! 482 482 ! !== compute and add the vorticity term trend =! 483 DO_2D _00_00483 DO_2D( 0, 0, 0, 0 ) 484 484 zuav = r1_8 * r1_e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) & 485 485 & + zwy(ji ,jj ) + zwy(ji+1,jj ) ) … … 539 539 SELECT CASE( nn_een_e3f ) ! == reciprocal of e3 at F-point 540 540 CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) 541 DO_2D _10_10541 DO_2D( 1, 0, 1, 0 ) 542 542 ze3f = ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & 543 543 & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) & … … 549 549 END_2D 550 550 CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) 551 DO_2D _10_10551 DO_2D( 1, 0, 1, 0 ) 552 552 ze3f = ( e3t(ji ,jj+1,jk,Kmm)*tmask(ji ,jj+1,jk) & 553 553 & + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk) & … … 564 564 SELECT CASE( kvor ) !== vorticity considered ==! 565 565 CASE ( np_COR ) !* Coriolis (planetary vorticity) 566 DO_2D _10_10566 DO_2D( 1, 0, 1, 0 ) 567 567 zwz(ji,jj,jk) = ff_f(ji,jj) * z1_e3f(ji,jj) 568 568 END_2D 569 569 CASE ( np_RVO ) !* relative vorticity 570 DO_2D _10_10570 DO_2D( 1, 0, 1, 0 ) 571 571 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 572 572 & - e1u(ji ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) 573 573 END_2D 574 574 CASE ( np_MET ) !* metric term 575 DO_2D _10_10575 DO_2D( 1, 0, 1, 0 ) 576 576 zwz(ji,jj,jk) = ( ( pv(ji+1,jj,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 577 577 & - ( pu(ji,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj) 578 578 END_2D 579 579 CASE ( np_CRV ) !* Coriolis + relative vorticity 580 DO_2D _10_10580 DO_2D( 1, 0, 1, 0 ) 581 581 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 582 582 & - e1u(ji ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) & … … 584 584 END_2D 585 585 CASE ( np_CME ) !* Coriolis + metric 586 DO_2D _10_10586 DO_2D( 1, 0, 1, 0 ) 587 587 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 588 588 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj) … … 593 593 ! 594 594 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 595 DO_2D _10_10595 DO_2D( 1, 0, 1, 0 ) 596 596 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 597 597 END_2D … … 624 624 END DO 625 625 END DO 626 DO_2D _00_00626 DO_2D( 0, 0, 0, 0 ) 627 627 zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 628 628 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) … … 684 684 SELECT CASE( kvor ) !== vorticity considered ==! 685 685 CASE ( np_COR ) !* Coriolis (planetary vorticity) 686 DO_2D _10_10686 DO_2D( 1, 0, 1, 0 ) 687 687 zwz(ji,jj,jk) = ff_f(ji,jj) 688 688 END_2D 689 689 CASE ( np_RVO ) !* relative vorticity 690 DO_2D _10_10690 DO_2D( 1, 0, 1, 0 ) 691 691 zwz(ji,jj,jk) = ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 692 692 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) & … … 694 694 END_2D 695 695 CASE ( np_MET ) !* metric term 696 DO_2D _10_10696 DO_2D( 1, 0, 1, 0 ) 697 697 zwz(ji,jj,jk) = ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 698 698 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 699 699 END_2D 700 700 CASE ( np_CRV ) !* Coriolis + relative vorticity 701 DO_2D _10_10701 DO_2D( 1, 0, 1, 0 ) 702 702 zwz(ji,jj,jk) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pv(ji+1,jj ,jk) - e2v(ji,jj) * pv(ji,jj,jk) & 703 703 & - e1u(ji ,jj+1) * pu(ji ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) & … … 705 705 END_2D 706 706 CASE ( np_CME ) !* Coriolis + metric 707 DO_2D _10_10707 DO_2D( 1, 0, 1, 0 ) 708 708 zwz(ji,jj,jk) = ff_f(ji,jj) + ( pv(ji+1,jj ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 709 709 & - ( pu(ji ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) … … 714 714 ! 715 715 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 716 DO_2D _10_10716 DO_2D( 1, 0, 1, 0 ) 717 717 zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 718 718 END_2D … … 747 747 END DO 748 748 END DO 749 DO_2D _00_00749 DO_2D( 0, 0, 0, 0 ) 750 750 zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 751 751 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) … … 807 807 IF(lwp) WRITE(numout,*) ' change fmask value in the angles (T) ln_vorlat = ', ln_vorlat 808 808 IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 809 DO_3D _10_10(1, jpk )809 DO_3D( 1, 0, 1, 0, 1, jpk ) 810 810 IF( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 811 811 & + tmask(ji,jj ,jk) + tmask(ji+1,jj+1,jk) == 3._wp ) fmask(ji,jj,jk) = 1._wp … … 846 846 CASE( np_ENT ) !* T-point metric term : pre-compute di(e2u)/2 and dj(e1v)/2 847 847 ALLOCATE( di_e2u_2(jpi,jpj), dj_e1v_2(jpi,jpj) ) 848 DO_2D _00_00848 DO_2D( 0, 0, 0, 0 ) 849 849 di_e2u_2(ji,jj) = ( e2u(ji,jj) - e2u(ji-1,jj ) ) * 0.5_wp 850 850 dj_e1v_2(ji,jj) = ( e1v(ji,jj) - e1v(ji ,jj-1) ) * 0.5_wp … … 854 854 CASE DEFAULT !* F-point metric term : pre-compute di(e2u)/(2*e1e2f) and dj(e1v)/(2*e1e2f) 855 855 ALLOCATE( di_e2v_2e1e2f(jpi,jpj), dj_e1u_2e1e2f(jpi,jpj) ) 856 DO_2D _10_10856 DO_2D( 1, 0, 1, 0 ) 857 857 di_e2v_2e1e2f(ji,jj) = ( e2v(ji+1,jj ) - e2v(ji,jj) ) * 0.5 * r1_e1e2f(ji,jj) 858 858 dj_e1u_2e1e2f(ji,jj) = ( e1u(ji ,jj+1) - e1u(ji,jj) ) * 0.5 * r1_e1e2f(ji,jj)
Note: See TracChangeset
for help on using the changeset viewer.