- Timestamp:
- 2016-12-08T19:33:38+01:00 (8 years ago)
- Location:
- branches/UKMO/r6232_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 1 deleted
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/r6232_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r7470 r7481 11 11 !! 3.5 ! 2013-07 (J. Chanut) Switch to Forward-backward time stepping 12 12 !! 3.6 ! 2013-11 (A. Coward) Update for z-tilde compatibility 13 !! - ! 2016-12 (G. Madec, E. Clementi) update for Stoke-Drift divergence 13 14 !!--------------------------------------------------------------------- 14 15 #if defined key_dynspg_ts || defined key_esopa … … 31 32 USE sbctide ! tides 32 33 USE updtide ! tide potential 34 USE sbcwave ! surface wave 35 ! 36 USE sbcwave ! surface wave 33 37 USE lib_mpp ! distributed memory computing library 34 38 USE lbclnk ! ocean lateral boundary conditions (or mpp link) … … 459 463 & + fwfisf(:,:) + fwfisf_b(:,:) ) 460 464 ENDIF 465 ! 466 IF( ln_sdw ) THEN ! Stokes drift divergence added if necessary 467 zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 468 ENDIF 469 ! 461 470 #if defined key_asminc 462 471 ! ! Include the IAU weighted SSH increment -
branches/UKMO/r6232_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r7470 r7481 32 32 USE trd_oce ! trends: ocean variables 33 33 USE trddyn ! trend manager: dynamics 34 USE sbcwave ! Surface Waves (add Stokes-Coriolis force) 35 USE sbc_oce , ONLY : ln_stcor ! use Stoke-Coriolis force 36 ! 34 37 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 35 38 USE prtctl ! Print control … … 91 94 ! 92 95 CASE ( -1 ) ! esopa: test all possibility with control print 93 CALL vor_ene( kt, ntot, u a, va )96 CALL vor_ene( kt, ntot, un, vn, ua, va ) 94 97 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 95 98 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 96 CALL vor_ens( kt, ntot, u a, va )99 CALL vor_ens( kt, ntot, un, vn, ua, va ) 97 100 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 98 101 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) … … 100 103 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 101 104 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 102 CALL vor_een( kt, ntot, u a, va )105 CALL vor_een( kt, ntot, un, vn, ua, va ) 103 106 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 104 107 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) … … 108 111 ztrdu(:,:,:) = ua(:,:,:) 109 112 ztrdv(:,:,:) = va(:,:,:) 110 CALL vor_ene( kt, nrvm, u a, va )! relative vorticity or metric trend113 CALL vor_ene( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 111 114 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 112 115 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 114 117 ztrdu(:,:,:) = ua(:,:,:) 115 118 ztrdv(:,:,:) = va(:,:,:) 116 CALL vor_ene( kt, ncor, u a, va )! planetary vorticity trend119 CALL vor_ene( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 117 120 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 118 121 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 119 122 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 120 123 ELSE 121 CALL vor_ene( kt, ntot, ua, va ) ! total vorticity 124 CALL vor_ene( kt, ntot, un, vn, ua, va ) ! total vorticity trend 125 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 122 126 ENDIF 123 127 ! … … 126 130 ztrdu(:,:,:) = ua(:,:,:) 127 131 ztrdv(:,:,:) = va(:,:,:) 128 CALL vor_ens( kt, nrvm, u a, va )! relative vorticity or metric trend132 CALL vor_ens( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 129 133 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 130 134 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 132 136 ztrdu(:,:,:) = ua(:,:,:) 133 137 ztrdv(:,:,:) = va(:,:,:) 134 CALL vor_ens( kt, ncor, u a, va )! planetary vorticity trend138 CALL vor_ens( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 135 139 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 136 140 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 137 141 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 138 142 ELSE 139 CALL vor_ens( kt, ntot, ua, va ) ! total vorticity 143 CALL vor_ens( kt, ntot, un, vn, ua, va ) ! total vorticity 144 IF( ln_stcor ) CALL vor_ens( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 140 145 ENDIF 141 146 ! … … 144 149 ztrdu(:,:,:) = ua(:,:,:) 145 150 ztrdv(:,:,:) = va(:,:,:) 146 CALL vor_ens( kt, nrvm, u a, va )! relative vorticity or metric trend (ens)151 CALL vor_ens( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend (ens) 147 152 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 148 153 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 150 155 ztrdu(:,:,:) = ua(:,:,:) 151 156 ztrdv(:,:,:) = va(:,:,:) 152 CALL vor_ene( kt, ncor, u a, va )! planetary vorticity trend (ene)157 CALL vor_ene( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend (ene) 153 158 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 154 159 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 155 160 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 156 161 ELSE 157 CALL vor_mix( kt ) ! total vorticity (mix=ens-ene) 162 CALL vor_ens( kt, nrvm, un , vn , ua, va ) ! relative vorticity or metric trend (ens) 163 CALL vor_ene( kt, ncor, un , vn , ua, va ) ! planetary vorticity trend (ene) 164 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 158 165 ENDIF 159 166 ! … … 162 169 ztrdu(:,:,:) = ua(:,:,:) 163 170 ztrdv(:,:,:) = va(:,:,:) 164 CALL vor_een( kt, nrvm, u a, va )! relative vorticity or metric trend171 CALL vor_een( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 165 172 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 166 173 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 168 175 ztrdu(:,:,:) = ua(:,:,:) 169 176 ztrdv(:,:,:) = va(:,:,:) 170 CALL vor_een( kt, ncor, u a, va )! planetary vorticity trend177 CALL vor_een( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 171 178 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 172 179 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 173 180 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 174 181 ELSE 175 CALL vor_een( kt, ntot, ua, va ) ! total vorticity 182 CALL vor_een( kt, ntot, un, vn, ua, va ) ! total vorticity 183 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 176 184 ENDIF 177 185 ! … … 189 197 190 198 191 SUBROUTINE vor_ene( kt, kvor, pu a, pva )199 SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 192 200 !!---------------------------------------------------------------------- 193 201 !! *** ROUTINE vor_ene *** … … 219 227 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 220 228 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 229 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 221 230 ! 222 231 INTEGER :: ji, jj, jk ! dummy loop indices … … 246 255 SELECT CASE( kvor ) ! vorticity considered 247 256 CASE ( 1 ) ; zwz(:,:) = ff(:,:) ! planetary vorticity (Coriolis) 248 CASE ( 2 ) ; zwz(:,:) = rotn(:,:,jk) ! relative vorticity 257 CASE ( 2 ) ! relative vorticity 258 DO jj = 1, jpjm1 259 DO ji = 1, fs_jpim1 ! vector opt. 260 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 261 & - e1u(ji ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e12f(ji,jj) 262 END DO 263 END DO 249 264 CASE ( 3 ) ! metric term 250 265 DO jj = 1, jpjm1 251 266 DO ji = 1, fs_jpim1 ! vector opt. 252 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) &253 & - ( 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))267 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 268 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 269 & * 0.5 * r1_e12f(ji,jj) 255 270 END DO 256 271 END DO 257 CASE ( 4 ) ; zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) ! total (relative + planetary vorticity) 272 CASE ( 4 ) ! total (relative + planetary vorticity) 273 DO jj = 1, jpjm1 274 DO ji = 1, fs_jpim1 ! vector opt. 275 zwz(ji,jj) = ff(ji,jj) + ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 276 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 277 & * r1_e12f(ji,jj) 278 END DO 279 END DO 258 280 CASE ( 5 ) ! total (coriolis + metric) 259 DO jj = 1, jpjm1 260 DO ji = 1, fs_jpim1 ! vector opt. 261 zwz(ji,jj) = ( ff (ji,jj) & 262 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 263 & - ( 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) ) & 265 & ) 266 END DO 281 DO jj = 1, jpjm1 282 DO ji = 1, fs_jpim1 ! vector opt. 283 zwz(ji,jj) = ff(ji,jj) & 284 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 285 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 286 & * 0.5 * r1_e12f(ji,jj) 287 END DO 267 288 END DO 268 289 END SELECT 269 290 270 IF( ln_sco ) THEN 271 zwz(:,:) = zwz(:,:) / fse3f(:,:,jk) 272 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 273 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 274 ELSE 275 zwx(:,:) = e2u(:,:) * un(:,:,jk) 276 zwy(:,:) = e1v(:,:) * vn(:,:,jk) 277 ENDIF 291 zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 292 zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 293 zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 278 294 279 295 ! Compute and add the vorticity term trend … … 418 434 419 435 420 SUBROUTINE vor_ens( kt, kvor, pu a, pva )436 SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 421 437 !!---------------------------------------------------------------------- 422 438 !! *** ROUTINE vor_ens *** … … 448 464 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 449 465 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 466 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 450 467 ! 451 468 INTEGER :: ji, jj, jk ! dummy loop indices … … 475 492 SELECT CASE( kvor ) ! vorticity considered 476 493 CASE ( 1 ) ; zwz(:,:) = ff(:,:) ! planetary vorticity (Coriolis) 477 CASE ( 2 ) ; zwz(:,:) = rotn(:,:,jk) ! relative vorticity 494 CASE ( 2 ) ! relative vorticity 495 DO jj = 1, jpjm1 496 DO ji = 1, fs_jpim1 ! vector opt. 497 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 498 & - e1u(ji ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e12f(ji,jj) 499 END DO 500 END DO 478 501 CASE ( 3 ) ! metric term 479 DO jj = 1, jpjm1 480 DO ji = 1, fs_jpim1 ! vector opt. 481 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 482 & - ( 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) ) 484 END DO 485 END DO 486 CASE ( 4 ) ; zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) ! total (relative + planetary vorticity) 502 DO jj = 1, jpjm1 503 DO ji = 1, fs_jpim1 ! vector opt. 504 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 505 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 506 & * 0.5 * r1_e12f(ji,jj) 507 END DO 508 END DO 509 CASE ( 4 ) ! total (relative + planetary vorticity) 510 DO jj = 1, jpjm1 511 DO ji = 1, fs_jpim1 ! vector opt. 512 zwz(ji,jj) = ff(ji,jj) + ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 513 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 514 & * r1_e12f(ji,jj) 515 END DO 516 END DO 487 517 CASE ( 5 ) ! total (coriolis + metric) 488 DO jj = 1, jpjm1 489 DO ji = 1, fs_jpim1 ! vector opt. 490 zwz(ji,jj) = ( ff (ji,jj) & 491 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 492 & - ( 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) ) & 494 & ) 495 END DO 518 DO jj = 1, jpjm1 519 DO ji = 1, fs_jpim1 ! vector opt. 520 zwz(ji,jj) = ff(ji,jj) & 521 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 522 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 523 & * 0.5 * r1_e12f(ji,jj) 524 END DO 496 525 END DO 497 526 END SELECT 498 ! 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 507 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 ! 527 ! !== horizontal fluxes ==! 528 zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 529 zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 530 zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 531 ! 516 532 ! Compute and add the vorticity term trend 517 533 ! ---------------------------------------- … … 536 552 537 553 538 SUBROUTINE vor_een( kt, kvor, pu a, pva )554 SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 539 555 !!---------------------------------------------------------------------- 540 556 !! *** ROUTINE vor_een *** … … 559 575 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 560 576 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 577 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 561 578 !! 562 579 INTEGER :: ji, jj, jk ! dummy loop indices … … 604 621 ze3 = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 605 622 & + fse3t(ji,jj ,jk)*tmask(ji,jj ,jk) + fse3t(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 606 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = 4.0_wp / ze3 623 IF( ze3 /= 0._wp ) THEN ; ze3f(ji,jj,jk) = 4.0_wp / ze3 624 ELSE ; ze3f(ji,jj) = 0._wp 625 ENDIF 607 626 END DO 608 627 END DO … … 616 635 zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 617 636 & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) 618 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = zmsk / ze3 637 IF( ze3 /= 0._wp ) THEN ; ze3f(ji,jj,jk) = zmsk / ze3 638 ELSE ; ze3f(ji,jj) = 0._wp 639 ENDIF 619 640 END DO 620 641 END DO … … 639 660 zwz(:,:) = ff(:,:) * ze3f(:,:,jk) 640 661 CASE ( 2 ) ! relative vorticity 641 zwz(:,:) = rotn(:,:,jk) * ze3f(:,:,jk) 642 CASE ( 3 ) ! metric term 643 DO jj = 1, jpjm1 644 DO ji = 1, fs_jpim1 ! vector opt. 645 zwz(ji,jj) = ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 646 & - ( 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) 648 END DO 649 END DO 650 CALL lbc_lnk( zwz, 'F', 1. ) 662 DO jj = 1, jpjm1 663 DO ji = 1, fs_jpim1 ! vector opt. 664 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 665 & - e1u(ji ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 666 & * r1_e12f(ji,jj) * ze3f(ji,jj) 667 END DO 668 END DO 669 CASE ( 3 ) ! metric term 670 DO jj = 1, jpjm1 671 DO ji = 1, fs_jpim1 ! vector opt. 672 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 673 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 674 & * 0.5 * r1_e12f(ji,jj) * ze3f(ji,jj) 675 END DO 676 END DO 651 677 CASE ( 4 ) ! total (relative + planetary vorticity) 652 zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) * ze3f(:,:,jk) 678 DO jj = 1, jpjm1 679 DO ji = 1, fs_jpim1 ! vector opt. 680 zwz(ji,jj) = ( ff(ji,jj) + ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 681 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 682 & * r1_e12f(ji,jj) ) * ze3f(ji,jj) 683 END DO 684 END DO 653 685 CASE ( 5 ) ! total (coriolis + metric) 654 DO jj = 1, jpjm1 655 DO ji = 1, fs_jpim1 ! vector opt. 656 zwz(ji,jj) = ( ff (ji,jj) & 657 & + ( ( vn(ji+1,jj ,jk) + vn (ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 658 & - ( 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) 661 END DO 662 END DO 663 CALL lbc_lnk( zwz, 'F', 1. ) 686 DO jj = 1, jpjm1 687 DO ji = 1, fs_jpim1 ! vector opt. 688 zwz(ji,jj) = ( ff(ji,jj) & 689 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 690 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 691 & * 0.5 * r1_e12f(ji,jj) ) * ze3f(ji,jj) 692 END DO 693 END DO 664 694 END SELECT 665 666 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 667 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 695 ! 696 CALL lbc_lnk( zwz, 'F', 1. ) 697 ! 698 ! !== horizontal fluxes ==! 699 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * pun(:,:,jk) 700 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * pvn(:,:,jk) 668 701 669 702 ! Compute and add the vorticity term trend
Note: See TracChangeset
for help on using the changeset viewer.