Changeset 11277 for branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
- Timestamp:
- 2019-07-17T15:29:15+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/AMM15_v3_6_STABLE_package_collate/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r8058 r11277 16 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 17 !! 3.7 ! 2014-04 (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity 18 !! - ! 2016-12 (G. Madec, E. Clementi) add Stokes-Coriolis trends (ln_stcor=T) 18 19 !!---------------------------------------------------------------------- 19 20 … … 32 33 USE trd_oce ! trends: ocean variables 33 34 USE trddyn ! trend manager: dynamics 35 USE sbcwave ! Surface Waves (add Stokes-Coriolis force) 36 USE sbc_oce , ONLY : ln_stcor ! use Stoke-Coriolis force 37 ! 34 38 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 35 39 USE prtctl ! Print control … … 91 95 ! 92 96 CASE ( -1 ) ! esopa: test all possibility with control print 93 CALL vor_ene( kt, ntot, u a, va )97 CALL vor_ene( kt, ntot, un, vn, ua, va ) 94 98 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 95 99 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 96 CALL vor_ens( kt, ntot, u a, va )100 CALL vor_ens( kt, ntot, un, vn, ua, va ) 97 101 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 98 102 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) … … 100 104 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 101 105 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 102 CALL vor_een( kt, ntot, u a, va )106 CALL vor_een( kt, ntot, un, vn, ua, va ) 103 107 CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 104 108 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) … … 108 112 ztrdu(:,:,:) = ua(:,:,:) 109 113 ztrdv(:,:,:) = va(:,:,:) 110 CALL vor_ene( kt, nrvm, u a, va )! relative vorticity or metric trend114 CALL vor_ene( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 111 115 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 112 116 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 114 118 ztrdu(:,:,:) = ua(:,:,:) 115 119 ztrdv(:,:,:) = va(:,:,:) 116 CALL vor_ene( kt, ncor, u a, va )! planetary vorticity trend120 CALL vor_ene( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 117 121 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 118 122 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 119 123 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 120 124 ELSE 121 CALL vor_ene( kt, ntot, ua, va ) ! total vorticity 125 CALL vor_ene( kt, ntot, un, vn, ua, va ) ! total vorticity trend 126 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 122 127 ENDIF 123 128 ! … … 126 131 ztrdu(:,:,:) = ua(:,:,:) 127 132 ztrdv(:,:,:) = va(:,:,:) 128 CALL vor_ens( kt, nrvm, u a, va )! relative vorticity or metric trend133 CALL vor_ens( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 129 134 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 130 135 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 132 137 ztrdu(:,:,:) = ua(:,:,:) 133 138 ztrdv(:,:,:) = va(:,:,:) 134 CALL vor_ens( kt, ncor, u a, va )! planetary vorticity trend139 CALL vor_ens( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 135 140 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 136 141 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 137 142 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 138 143 ELSE 139 CALL vor_ens( kt, ntot, ua, va ) ! total vorticity 144 CALL vor_ens( kt, ntot, un, vn, ua, va ) ! total vorticity 145 IF( ln_stcor ) CALL vor_ens( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 140 146 ENDIF 141 147 ! … … 144 150 ztrdu(:,:,:) = ua(:,:,:) 145 151 ztrdv(:,:,:) = va(:,:,:) 146 CALL vor_ens( kt, nrvm, u a, va )! relative vorticity or metric trend (ens)152 CALL vor_ens( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend (ens) 147 153 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 148 154 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 150 156 ztrdu(:,:,:) = ua(:,:,:) 151 157 ztrdv(:,:,:) = va(:,:,:) 152 CALL vor_ene( kt, ncor, u a, va )! planetary vorticity trend (ene)158 CALL vor_ene( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend (ene) 153 159 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 154 160 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 155 161 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 156 162 ELSE 157 CALL vor_mix( kt ) ! total vorticity (mix=ens-ene) 163 CALL vor_ens( kt, nrvm, un , vn , ua, va ) ! relative vorticity or metric trend (ens) 164 CALL vor_ene( kt, ncor, un , vn , ua, va ) ! planetary vorticity trend (ene) 165 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 158 166 ENDIF 159 167 ! … … 162 170 ztrdu(:,:,:) = ua(:,:,:) 163 171 ztrdv(:,:,:) = va(:,:,:) 164 CALL vor_een( kt, nrvm, u a, va )! relative vorticity or metric trend172 CALL vor_een( kt, nrvm, un, vn, ua, va ) ! relative vorticity or metric trend 165 173 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 166 174 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 168 176 ztrdu(:,:,:) = ua(:,:,:) 169 177 ztrdv(:,:,:) = va(:,:,:) 170 CALL vor_een( kt, ncor, u a, va )! planetary vorticity trend178 CALL vor_een( kt, ncor, un, vn, ua, va ) ! planetary vorticity trend 171 179 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 172 180 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 173 181 CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 174 182 ELSE 175 CALL vor_een( kt, ntot, ua, va ) ! total vorticity 183 CALL vor_een( kt, ntot, un, vn, ua, va ) ! total vorticity 184 IF( ln_stcor ) CALL vor_een( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 176 185 ENDIF 177 186 ! … … 189 198 190 199 191 SUBROUTINE vor_ene( kt, kvor, pu a, pva )200 SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 192 201 !!---------------------------------------------------------------------- 193 202 !! *** ROUTINE vor_ene *** … … 214 223 !!---------------------------------------------------------------------- 215 224 ! 216 INTEGER , INTENT(in ) :: kt ! ocean time-step index 217 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 218 ! ! =nrvm (relative vorticity or metric) 219 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 220 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 225 INTEGER , INTENT(in ) :: kt ! ocean time-step index 226 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 227 ! ! =nrvm (relative vorticity or metric) 228 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 229 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 230 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 221 231 ! 222 232 INTEGER :: ji, jj, jk ! dummy loop indices … … 250 260 DO jj = 1, jpjm1 251 261 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) ) ) &262 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 263 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 254 264 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) 255 265 END DO … … 260 270 DO ji = 1, fs_jpim1 ! vector opt. 261 271 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) ) ) &272 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 273 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 264 274 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 265 275 & ) … … 270 280 IF( ln_sco ) THEN 271 281 zwz(:,:) = zwz(:,:) / fse3f(:,:,jk) 272 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)273 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)282 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * pun(:,:,jk) 283 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * pvn(:,:,jk) 274 284 ELSE 275 zwx(:,:) = e2u(:,:) * un(:,:,jk)276 zwy(:,:) = e1v(:,:) * vn(:,:,jk)285 zwx(:,:) = e2u(:,:) * pun(:,:,jk) 286 zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 277 287 ENDIF 278 288 … … 418 428 419 429 420 SUBROUTINE vor_ens( kt, kvor, pu a, pva )430 SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 421 431 !!---------------------------------------------------------------------- 422 432 !! *** ROUTINE vor_ens *** … … 443 453 !!---------------------------------------------------------------------- 444 454 ! 445 INTEGER , INTENT(in ) :: kt ! ocean time-step index 446 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 447 ! ! =nrvm (relative vorticity or metric) 448 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 449 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 455 INTEGER , INTENT(in ) :: kt ! ocean time-step index 456 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 457 ! ! =nrvm (relative vorticity or metric) 458 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 459 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 460 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 450 461 ! 451 462 INTEGER :: ji, jj, jk ! dummy loop indices … … 479 490 DO jj = 1, jpjm1 480 491 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) ) ) &492 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 493 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 483 494 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) 484 495 END DO … … 489 500 DO ji = 1, fs_jpim1 ! vector opt. 490 501 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) ) ) &502 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 503 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 493 504 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 494 505 & ) … … 501 512 DO ji = 1, jpi ! it causes optimization problems on NEC in auto-tasking 502 513 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)514 zwx(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) * pun(ji,jj,jk) 515 zwy(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) * pvn(ji,jj,jk) 505 516 END DO 506 517 END DO … … 508 519 DO jj = 1, jpj ! caution: don't use (:,:) for this loop 509 520 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)521 zwx(ji,jj) = e2u(ji,jj) * pun(ji,jj,jk) 522 zwy(ji,jj) = e1v(ji,jj) * pvn(ji,jj,jk) 512 523 END DO 513 524 END DO … … 536 547 537 548 538 SUBROUTINE vor_een( kt, kvor, pu a, pva )549 SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 539 550 !!---------------------------------------------------------------------- 540 551 !! *** ROUTINE vor_een *** … … 554 565 !!---------------------------------------------------------------------- 555 566 ! 556 INTEGER , INTENT(in ) :: kt ! ocean time-step index 557 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 558 ! ! =nrvm (relative vorticity or metric) 559 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 560 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 567 INTEGER , INTENT(in ) :: kt ! ocean time-step index 568 INTEGER , INTENT(in ) :: kvor ! =ncor (planetary) ; =ntot (total) ; 569 ! ! =nrvm (relative vorticity or metric) 570 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pua ! total u-trend 571 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pva ! total v-trend 572 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn ! now velocities 561 573 !! 562 574 INTEGER :: ji, jj, jk ! dummy loop indices … … 604 616 ze3 = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 605 617 & + 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 618 IF( ze3 /= 0._wp ) THEN ; ze3f(ji,jj,jk) = 4.0_wp / ze3 619 ELSE ; ze3f(ji,jj,jk) = 0._wp 620 ENDIF 607 621 END DO 608 622 END DO … … 616 630 zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 617 631 & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) 618 IF( ze3 /= 0._wp ) ze3f(ji,jj,jk) = zmsk / ze3 632 IF( ze3 /= 0._wp ) THEN ; ze3f(ji,jj,jk) = zmsk / ze3 633 ELSE ; ze3f(ji,jj,jk) = 0._wp 634 ENDIF 619 635 END DO 620 636 END DO … … 643 659 DO jj = 1, jpjm1 644 660 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) ) ) &661 zwz(ji,jj) = ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 662 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 647 663 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) * ze3f(ji,jj,jk) 648 664 END DO … … 655 671 DO ji = 1, fs_jpim1 ! vector opt. 656 672 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) ) ) &673 & + ( ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * ( e2v(ji+1,jj ) - e2v(ji,jj) ) & 674 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * ( e1u(ji ,jj+1) - e1u(ji,jj) ) ) & 659 675 & * 0.5 / ( e1f(ji,jj) * e2f(ji,jj) ) & 660 676 & ) * ze3f(ji,jj,jk) … … 664 680 END SELECT 665 681 666 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)667 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)682 zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * pun(:,:,jk) 683 zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * pvn(:,:,jk) 668 684 669 685 ! Compute and add the vorticity term trend
Note: See TracChangeset
for help on using the changeset viewer.