New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 7481 for branches/UKMO/r6232_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/DYN – NEMO

Ignore:
Timestamp:
2016-12-08T19:33:38+01:00 (8 years ago)
Author:
jcastill
Message:

Changes as in branches/2016/dev_INGV_UKMO_2016@7451

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  
    1111   !!             3.5  ! 2013-07  (J. Chanut) Switch to Forward-backward time stepping 
    1212   !!             3.6  ! 2013-11  (A. Coward) Update for z-tilde compatibility 
     13   !!              -   ! 2016-12  (G. Madec, E. Clementi) update for Stoke-Drift divergence 
    1314   !!--------------------------------------------------------------------- 
    1415#if defined key_dynspg_ts   ||   defined key_esopa 
     
    3132   USE sbctide         ! tides 
    3233   USE updtide         ! tide potential 
     34   USE sbcwave         ! surface wave 
     35   ! 
     36   USE sbcwave         ! surface wave 
    3337   USE lib_mpp         ! distributed memory computing library 
    3438   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     
    459463                &                        + fwfisf(:,:) + fwfisf_b(:,:)                     ) 
    460464      ENDIF 
     465      !  
     466      IF( ln_sdw ) THEN                         ! Stokes drift divergence added if necessary  
     467         zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:)  
     468      ENDIF  
     469      !  
    461470#if defined key_asminc 
    462471      !                                         ! Include the IAU weighted SSH increment 
  • branches/UKMO/r6232_INGV1_WAVE-coupling/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r7470 r7481  
    3232   USE trd_oce        ! trends: ocean variables 
    3333   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   !  
    3437   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    3538   USE prtctl         ! Print control 
     
    9194      ! 
    9295      CASE ( -1 )                                      ! esopa: test all possibility with control print 
    93          CALL vor_ene( kt, ntot, ua, va ) 
     96         CALL vor_ene( kt, ntot, un, vn, ua, va ) 
    9497         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor0 - Ua: ', mask1=umask, & 
    9598            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    96          CALL vor_ens( kt, ntot, ua, va ) 
     99         CALL vor_ens( kt, ntot, un, vn, ua, va ) 
    97100         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor1 - Ua: ', mask1=umask, & 
    98101            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     
    100103         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor2 - Ua: ', mask1=umask, & 
    101104            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    102          CALL vor_een( kt, ntot, ua, va ) 
     105         CALL vor_een( kt, ntot, un, vn, ua, va ) 
    103106         CALL prt_ctl( tab3d_1=ua, clinfo1=' vor3 - Ua: ', mask1=umask, & 
    104107            &          tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     
    108111            ztrdu(:,:,:) = ua(:,:,:) 
    109112            ztrdv(:,:,:) = va(:,:,:) 
    110             CALL vor_ene( kt, nrvm, ua, va )                ! relative vorticity or metric trend 
     113            CALL vor_ene( kt, nrvm, un, vn, ua, va )        ! relative vorticity or metric trend 
    111114            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    112115            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    114117            ztrdu(:,:,:) = ua(:,:,:) 
    115118            ztrdv(:,:,:) = va(:,:,:) 
    116             CALL vor_ene( kt, ncor, ua, va )                ! planetary vorticity trend 
     119            CALL vor_ene( kt, ncor, un, vn, ua, va )        ! planetary vorticity trend 
    117120            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    118121            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    119122            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    120123         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 
    122126         ENDIF 
    123127         ! 
     
    126130            ztrdu(:,:,:) = ua(:,:,:) 
    127131            ztrdv(:,:,:) = va(:,:,:) 
    128             CALL vor_ens( kt, nrvm, ua, va )                ! relative vorticity or metric trend 
     132            CALL vor_ens( kt, nrvm, un, vn, ua, va )        ! relative vorticity or metric trend 
    129133            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    130134            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    132136            ztrdu(:,:,:) = ua(:,:,:) 
    133137            ztrdv(:,:,:) = va(:,:,:) 
    134             CALL vor_ens( kt, ncor, ua, va )                ! planetary vorticity trend 
     138            CALL vor_ens( kt, ncor, un, vn, ua, va )        ! planetary vorticity trend 
    135139            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    136140            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    137141            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    138142         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 
    140145         ENDIF 
    141146         ! 
     
    144149            ztrdu(:,:,:) = ua(:,:,:) 
    145150            ztrdv(:,:,:) = va(:,:,:) 
    146             CALL vor_ens( kt, nrvm, ua, va )                ! relative vorticity or metric trend (ens) 
     151            CALL vor_ens( kt, nrvm, un, vn, ua, va )         ! relative vorticity or metric trend (ens) 
    147152            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    148153            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    150155            ztrdu(:,:,:) = ua(:,:,:) 
    151156            ztrdv(:,:,:) = va(:,:,:) 
    152             CALL vor_ene( kt, ncor, ua, va )                ! planetary vorticity trend (ene) 
     157            CALL vor_ene( kt, ncor, un, vn, ua, va )         ! planetary vorticity trend (ene) 
    153158            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    154159            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    155160            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    156161         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 
    158165         ENDIF 
    159166         ! 
     
    162169            ztrdu(:,:,:) = ua(:,:,:) 
    163170            ztrdv(:,:,:) = va(:,:,:) 
    164             CALL vor_een( kt, nrvm, ua, va )                ! relative vorticity or metric trend 
     171            CALL vor_een( kt, nrvm, un, vn, ua, va )        ! relative vorticity or metric trend 
    165172            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    166173            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     
    168175            ztrdu(:,:,:) = ua(:,:,:) 
    169176            ztrdv(:,:,:) = va(:,:,:) 
    170             CALL vor_een( kt, ncor, ua, va )                ! planetary vorticity trend 
     177            CALL vor_een( kt, ncor, un, vn, ua, va )        ! planetary vorticity trend 
    171178            ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    172179            ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    173180            CALL trd_dyn( ztrdu, ztrdv, jpdyn_pvo, kt ) 
    174181         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 
    176184         ENDIF 
    177185         ! 
     
    189197 
    190198 
    191    SUBROUTINE vor_ene( kt, kvor, pua, pva ) 
     199   SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 
    192200      !!---------------------------------------------------------------------- 
    193201      !!                  ***  ROUTINE vor_ene  *** 
     
    219227      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    220228      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 
    221230      ! 
    222231      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    246255         SELECT CASE( kvor )      ! vorticity considered 
    247256         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  
    249264         CASE ( 3 )                                                ! metric term 
    250265            DO jj = 1, jpjm1 
    251266               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) 
    255270               END DO 
    256271            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 
    258280         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  
    267288            END DO 
    268289         END SELECT 
    269290 
    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)  
    278294 
    279295         ! Compute and add the vorticity term trend 
     
    418434 
    419435 
    420    SUBROUTINE vor_ens( kt, kvor, pua, pva ) 
     436   SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 
    421437      !!---------------------------------------------------------------------- 
    422438      !!                ***  ROUTINE vor_ens  *** 
     
    448464      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    449465      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 
    450467      ! 
    451468      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
     
    475492         SELECT CASE( kvor )      ! vorticity considered 
    476493         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 
    478501         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 
    487517         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  
    496525            END DO 
    497526         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         !  
    516532         ! Compute and add the vorticity term trend 
    517533         ! ---------------------------------------- 
     
    536552 
    537553 
    538    SUBROUTINE vor_een( kt, kvor, pua, pva ) 
     554   SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 
    539555      !!---------------------------------------------------------------------- 
    540556      !!                ***  ROUTINE vor_een  *** 
     
    559575      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    560576      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 
    561578      !! 
    562579      INTEGER  ::   ji, jj, jk                                    ! dummy loop indices 
     
    604621                     ze3  = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk)   & 
    605622                        &   + 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 
    607626                  END DO 
    608627               END DO 
     
    616635                     zmsk = (                   tmask(ji,jj+1,jk) +                     tmask(ji+1,jj+1,jk)   & 
    617636                        &                     + 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 
    619640                  END DO 
    620641               END DO 
     
    639660            zwz(:,:) = ff(:,:)      * ze3f(:,:,jk) 
    640661         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 
    651677        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 
    653685         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  
    664694         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) 
    668701 
    669702         ! Compute and add the vorticity term trend 
Note: See TracChangeset for help on using the changeset viewer.