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 12667 for NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/dynvor.F90 – NEMO

Ignore:
Timestamp:
2020-04-03T16:22:29+02:00 (4 years ago)
Author:
gm
Message:

Shallow Water Eq. update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r12527_Gurvan_ShallowWater/src/SWE/dynvor.F90

    r12614 r12667  
    2121   !!             -   ! 2018-03  (G. Madec)  add two new schemes (ln_dynvor_enT and ln_dynvor_eet) 
    2222   !!             -   ! 2018-04  (G. Madec)  add pre-computed gradient for metric term calculation 
     23   !!            4.x  ! 2020-03  (G. Madec, A. Nasser)  make ln_dynvor_msk truly efficient on relative vorticity 
    2324   !!---------------------------------------------------------------------- 
    2425 
     
    226227      ! 
    227228      ! 
    228       SELECT CASE( kvor )                 !==  volume weighted vorticity considered  ==! 
    229       CASE ( np_RVO )                           !* relative vorticity 
    230          DO jk = 1, jpkm1                                 ! Horizontal slab 
     229      SELECT CASE( kvor )                 !== relative vorticity considered  ==! 
     230      CASE ( np_RVO , np_CRV )                  !* relative vorticity at f-point is used 
     231         DO jk = 1, jpkm1                                ! Horizontal slab 
    231232            DO_2D_10_10 
    232233               zwz(ji,jj,jk) = (  e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    233234                  &             - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    234235            END_2D 
    235             IF( ln_dynvor_msk ) THEN                     ! mask/unmask relative vorticity  
     236            IF( ln_dynvor_msk ) THEN                     ! mask relative vorticity  
    236237               DO_2D_10_10 
    237238                  zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
     
    239240            ENDIF 
    240241         END DO 
    241  
    242242         CALL lbc_lnk( 'dynvor', zwz, 'F', 1. ) 
    243  
    244       CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    245          DO jk = 1, jpkm1                                 ! Horizontal slab 
    246             DO_2D_10_10 
    247                zwz(ji,jj,jk) = (   e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)   & 
    248                   &              - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)   ) * r1_e1e2f(ji,jj) 
    249             END_2D 
    250             IF( ln_dynvor_msk ) THEN                     ! mask/unmask relative vorticity  
    251                DO_2D_10_10 
    252                   zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    253                END_2D 
    254             ENDIF 
    255          END DO 
    256  
    257          CALL lbc_lnk( 'dynvor', zwz, 'F', 1. ) 
    258  
     243         ! 
    259244      END SELECT 
    260245 
    261246      !                                                ! =============== 
    262247      DO jk = 1, jpkm1                                 ! Horizontal slab 
    263       !                                                ! =============== 
    264  
     248         !                                             ! =============== 
     249         ! 
    265250         SELECT CASE( kvor )                 !==  volume weighted vorticity considered  ==! 
     251         ! 
    266252         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    267253            zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t(:,:,jk,Kmm) 
     
    356342                  &          - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    357343            END_2D 
     344            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity 
     345               DO_2D_10_10 
     346                  zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
     347               END_2D 
     348            ENDIF 
    358349         CASE ( np_MET )                           !* metric term 
    359350            DO_2D_10_10 
     
    366357                  &                        - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    367358            END_2D 
     359            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity (NOT the Coriolis term) 
     360               DO_2D_10_10 
     361                  zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 
     362               END_2D 
     363            ENDIF 
    368364         CASE ( np_CME )                           !* Coriolis + metric 
    369365            DO_2D_10_10 
     
    375371         END SELECT 
    376372         ! 
    377          IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    378             DO_2D_10_10 
    379                zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    380             END_2D 
    381          ENDIF 
    382  
    383          IF( ln_sco ) THEN 
    384             zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 
    385             zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 
    386             zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 
    387          ELSE 
    388             zwx(:,:) = e2u(:,:) * pu(:,:,jk) 
    389             zwy(:,:) = e1v(:,:) * pv(:,:,jk) 
    390          ENDIF 
     373         !                                   !==  horizontal fluxes and potential vorticity ==! 
     374         zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 
     375         zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 
     376         zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 
     377         ! 
    391378         !                                   !==  compute and add the vorticity term trend  =! 
    392379         DO_2D_00_00 
     
    452439                  &          - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    453440            END_2D 
     441            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity 
     442               DO_2D_10_10 
     443                  zwz(ji,jj) = ff_f(ji,jj) * fmask(ji,jj,jk) 
     444               END_2D 
     445            ENDIF 
    454446         CASE ( np_MET )                           !* metric term 
    455447            DO_2D_10_10 
     
    461453               zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    462454                  &                        - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    463 !!an                  &                        * fmask(ji,jj,jk) 
    464             END_2D 
     455            END_2D 
     456            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity (NOT the Coriolis term) 
     457               DO_2D_10_10 
     458                  zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 
     459               END_2D 
     460            ENDIF 
    465461         CASE ( np_CME )                           !* Coriolis + metric 
    466462            DO_2D_10_10 
     
    472468         END SELECT 
    473469         ! 
    474          IF( ln_dynvor_msk ) THEN           !==  mask/unmask vorticity ==! 
    475             DO_2D_10_10 
    476                zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    477             END_2D 
    478          ENDIF 
    479          ! 
    480          IF( ln_sco ) THEN                   !==  horizontal fluxes  ==! 
    481             zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 
    482             zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 
    483             zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 
    484          ELSE 
    485             zwx(:,:) = e2u(:,:) * pu(:,:,jk) 
    486             zwy(:,:) = e1v(:,:) * pv(:,:,jk) 
    487          ENDIF 
     470         ! 
     471         !                                   !==  horizontal fluxes and potential vorticity ==! 
     472         zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 
     473         zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 
     474         zwz(:,:) = zwz(:,:) / e3f(:,:,jk) 
     475         ! 
    488476         !                                   !==  compute and add the vorticity term trend  =! 
    489477         DO_2D_00_00 
     
    725713      ! 
    726714      DO jk = 1, jpkm1                                 ! Horizontal slab 
    727  
    728       !                                   !==  horizontal fluxes  ==! 
     715         ! 
     716         !                                   !==  horizontal fluxes  ==! 
    729717         zwx(:,:) = e2u(:,:) * e3u(:,:,jk,Kmm) * pu(:,:,jk) 
    730718         zwy(:,:) = e1v(:,:) * e3v(:,:,jk,Kmm) * pv(:,:,jk) 
     
    801789      ENDIF 
    802790 
    803       IF( ln_dynvor_msk )   CALL ctl_stop( 'dyn_vor_init:   masked vorticity is not currently not available') 
     791!!an      IF( ln_dynvor_msk )   CALL ctl_stop( 'dyn_vor_init:   masked vorticity is not currently not available') 
    804792 
    805793!!gm  this should be removed when choosing a unique strategy for fmask at the coast 
Note: See TracChangeset for help on using the changeset viewer.