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 11949 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/TRD/trdvor.F90 – NEMO

Ignore:
Timestamp:
2019-11-22T15:29:17+01:00 (4 years ago)
Author:
acc
Message:

Merge in changes from 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. This just creates a fresh copy of this branch to use as the merge base. See ticket #2341

Location:
NEMO/branches/2019/dev_r11943_MERGE_2019/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src

    • Property svn:mergeinfo deleted
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/TRD/trdvor.F90

    r11536 r11949  
    7878 
    7979 
    80    SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt ) 
     80   SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt, Kmm ) 
    8181      !!---------------------------------------------------------------------- 
    8282      !!                  ***  ROUTINE trd_vor  *** 
     
    8888      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    8989      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     90      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    9091      ! 
    9192      INTEGER ::   ji, jj   ! dummy loop indices 
     
    9495 
    9596      SELECT CASE( ktrd )  
    96       CASE( jpdyn_hpg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_prg )   ! Hydrostatique Pressure Gradient  
    97       CASE( jpdyn_keg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_keg )   ! KE Gradient  
    98       CASE( jpdyn_rvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo )   ! Relative Vorticity  
    99       CASE( jpdyn_pvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo )   ! Planetary Vorticity Term  
    100       CASE( jpdyn_ldf )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf )   ! Horizontal Diffusion  
    101       CASE( jpdyn_zad )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_zad )   ! Vertical Advection  
    102       CASE( jpdyn_spg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_spg )   ! Surface Pressure Grad.  
     97      CASE( jpdyn_hpg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_prg, Kmm )   ! Hydrostatique Pressure Gradient  
     98      CASE( jpdyn_keg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_keg, Kmm )   ! KE Gradient  
     99      CASE( jpdyn_rvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo, Kmm )   ! Relative Vorticity  
     100      CASE( jpdyn_pvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo, Kmm )   ! Planetary Vorticity Term  
     101      CASE( jpdyn_ldf )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf, Kmm )   ! Horizontal Diffusion  
     102      CASE( jpdyn_zad )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_zad, Kmm )   ! Vertical Advection  
     103      CASE( jpdyn_spg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_spg, Kmm )   ! Surface Pressure Grad.  
    103104      CASE( jpdyn_zdf )                                                      ! Vertical Diffusion  
    104105         ztswu(:,:) = 0.e0   ;   ztswv(:,:) = 0.e0 
    105106         DO jj = 2, jpjm1                                                             ! wind stress trends 
    106107            DO ji = fs_2, fs_jpim1   ! vector opt. 
    107                ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u_n(ji,jj,1) * rau0 ) 
    108                ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v_n(ji,jj,1) * rau0 ) 
     108               ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rau0 ) 
     109               ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rau0 ) 
    109110            END DO 
    110111         END DO 
    111112         ! 
    112          CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf )                             ! zdf trend including surf./bot. stresses  
    113          CALL trd_vor_zint( ztswu, ztswv, jpvor_swf )                             ! surface wind stress  
     113         CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf, Kmm )                             ! zdf trend including surf./bot. stresses  
     114         CALL trd_vor_zint( ztswu, ztswv, jpvor_swf, Kmm )                             ! surface wind stress  
    114115      CASE( jpdyn_bfr ) 
    115          CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr )                             ! Bottom stress 
     116         CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr, Kmm )                             ! Bottom stress 
    116117         ! 
    117118      CASE( jpdyn_atf )       ! last trends: perform the output of 2D vorticity trends 
    118          CALL trd_vor_iom( kt ) 
     119         CALL trd_vor_iom( kt, Kmm ) 
    119120      END SELECT 
    120121      ! 
     
    122123 
    123124 
    124    SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd ) 
     125   SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd, Kmm ) 
    125126      !!---------------------------------------------------------------------------- 
    126127      !!                  ***  ROUTINE trd_vor_zint  *** 
     
    150151      !!---------------------------------------------------------------------- 
    151152      INTEGER                     , INTENT(in   ) ::   ktrd       ! ocean trend index 
     153      INTEGER                     , INTENT(in   ) ::   Kmm        ! time level index 
    152154      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   putrdvor   ! u vorticity trend  
    153155      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pvtrdvor   ! v vorticity trend 
     
    175177               ikbu = mbkv(ji,jj) 
    176178               ikbv = mbkv(ji,jj)             
    177                zudpvor(ji,jj) = putrdvor(ji,jj) * e3u_n(ji,jj,ikbu) * e1u(ji,jj) * umask(ji,jj,ikbu) 
    178                zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v_n(ji,jj,ikbv) * e2v(ji,jj) * vmask(ji,jj,ikbv) 
     179               zudpvor(ji,jj) = putrdvor(ji,jj) * e3u(ji,jj,ikbu,Kmm) * e1u(ji,jj) * umask(ji,jj,ikbu) 
     180               zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v(ji,jj,ikbv,Kmm) * e2v(ji,jj) * vmask(ji,jj,ikbv) 
    179181            END DO 
    180182         END DO 
    181183         ! 
    182184      CASE( jpvor_swf )        ! wind stress 
    183          zudpvor(:,:) = putrdvor(:,:) * e3u_n(:,:,1) * e1u(:,:) * umask(:,:,1) 
    184          zvdpvor(:,:) = pvtrdvor(:,:) * e3v_n(:,:,1) * e2v(:,:) * vmask(:,:,1) 
     185         zudpvor(:,:) = putrdvor(:,:) * e3u(:,:,1,Kmm) * e1u(:,:) * umask(:,:,1) 
     186         zvdpvor(:,:) = pvtrdvor(:,:) * e3v(:,:,1,Kmm) * e2v(:,:) * vmask(:,:,1) 
    185187         ! 
    186188      END SELECT 
    187189 
    188190      ! Average except for Beta.V 
    189       zudpvor(:,:) = zudpvor(:,:) * r1_hu_n(:,:) 
    190       zvdpvor(:,:) = zvdpvor(:,:) * r1_hv_n(:,:) 
     191      zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 
     192      zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 
    191193    
    192194      ! Curl 
     
    207209 
    208210 
    209    SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd ) 
     211   SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd , Kmm ) 
    210212      !!---------------------------------------------------------------------------- 
    211213      !!                  ***  ROUTINE trd_vor_zint  *** 
     
    236238      ! 
    237239      INTEGER                         , INTENT(in   ) ::   ktrd       ! ocean trend index 
     240      INTEGER                         , INTENT(in   ) ::   Kmm        ! time level index 
    238241      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   putrdvor   ! u vorticity trend  
    239242      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pvtrdvor   ! v vorticity trend 
     
    257260      ! putrdvor and pvtrdvor terms 
    258261      DO jk = 1,jpk 
    259         zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u_n(:,:,jk) * e1u(:,:) * umask(:,:,jk) 
    260         zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v_n(:,:,jk) * e2v(:,:) * vmask(:,:,jk) 
     262        zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u(:,:,jk,Kmm) * e1u(:,:) * umask(:,:,jk) 
     263        zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v(:,:,jk,Kmm) * e2v(:,:) * vmask(:,:,jk) 
    261264      END DO 
    262265 
     
    273276         END DO 
    274277         ! Average of the Curl and Surface mask 
    275          vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu_n(:,:) * fmask(:,:,1) 
     278         vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu(:,:,Kmm) * fmask(:,:,1) 
    276279      ENDIF 
    277280      ! 
    278281      ! Average  
    279       zudpvor(:,:) = zudpvor(:,:) * r1_hu_n(:,:) 
    280       zvdpvor(:,:) = zvdpvor(:,:) * r1_hv_n(:,:) 
     282      zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 
     283      zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 
    281284      ! 
    282285      ! Curl 
     
    298301 
    299302 
    300    SUBROUTINE trd_vor_iom( kt ) 
     303   SUBROUTINE trd_vor_iom( kt , Kmm ) 
    301304      !!---------------------------------------------------------------------- 
    302305      !!                  ***  ROUTINE trd_vor  *** 
     
    306309      !!---------------------------------------------------------------------- 
    307310      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     311      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    308312      ! 
    309313      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    310314      INTEGER  ::   it, itmod        ! local integers 
    311315      REAL(wp) ::   zmean            ! local scalars 
    312       REAL(wp), DIMENSION(jpi,jpj) :: zun, zvn 
     316      REAL(wp), DIMENSION(jpi,jpj) :: zuu, zvv 
    313317      !!---------------------------------------------------------------------- 
    314318 
     
    327331 
    328332      vor_avr   (:,:) = 0._wp 
    329       zun       (:,:) = 0._wp 
    330       zvn       (:,:) = 0._wp 
     333      zuu       (:,:) = 0._wp 
     334      zvv       (:,:) = 0._wp 
    331335      vor_avrtot(:,:) = 0._wp 
    332336      vor_avrres(:,:) = 0._wp 
     
    334338      ! Vertically averaged velocity 
    335339      DO jk = 1, jpk - 1 
    336          zun(:,:) = zun(:,:) + e1u(:,:) * un(:,:,jk) * e3u_n(:,:,jk) 
    337          zvn(:,:) = zvn(:,:) + e2v(:,:) * vn(:,:,jk) * e3v_n(:,:,jk) 
     340         zuu(:,:) = zuu(:,:) + e1u(:,:) * uu(:,:,jk,Kmm) * e3u(:,:,jk,Kmm) 
     341         zvv(:,:) = zvv(:,:) + e2v(:,:) * vv(:,:,jk,Kmm) * e3v(:,:,jk,Kmm) 
    338342      END DO 
    339343  
    340       zun(:,:) = zun(:,:) * r1_hu_n(:,:) 
    341       zvn(:,:) = zvn(:,:) * r1_hv_n(:,:) 
     344      zuu(:,:) = zuu(:,:) * r1_hu(:,:,Kmm) 
     345      zvv(:,:) = zvv(:,:) * r1_hv(:,:,Kmm) 
    342346 
    343347      ! Curl 
    344348      DO ji = 1, jpim1 
    345349         DO jj = 1, jpjm1 
    346             vor_avr(ji,jj) = (  ( zvn(ji+1,jj) - zvn(ji,jj) )    & 
    347                &              - ( zun(ji,jj+1) - zun(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 
     350            vor_avr(ji,jj) = (  ( zvv(ji+1,jj) - zvv(ji,jj) )    & 
     351               &              - ( zuu(ji,jj+1) - zuu(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 
    348352         END DO 
    349353      END DO 
Note: See TracChangeset for help on using the changeset viewer.