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 12377 for NEMO/trunk/src/OCE/TRD/trdvor.F90 – NEMO

Ignore:
Timestamp:
2020-02-12T15:39:06+01:00 (4 years ago)
Author:
acc
Message:

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

Location:
NEMO/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
  • NEMO/trunk/src/OCE/TRD/trdvor.F90

    r11536 r12377  
    5656 
    5757   !! * Substitutions 
    58 #  include "vectopt_loop_substitute.h90" 
     58#  include "do_loop_substitute.h90" 
    5959   !!---------------------------------------------------------------------- 
    6060   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    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 
    105          DO jj = 2, jpjm1                                                             ! wind stress trends 
    106             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 ) 
    109             END DO 
    110          END DO 
    111          ! 
    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  
     106         DO_2D_00_00 
     107            ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rau0 ) 
     108            ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rau0 ) 
     109         END_2D 
     110         ! 
     111         CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf, Kmm )                             ! zdf trend including surf./bot. stresses  
     112         CALL trd_vor_zint( ztswu, ztswv, jpvor_swf, Kmm )                             ! surface wind stress  
    114113      CASE( jpdyn_bfr ) 
    115          CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr )                             ! Bottom stress 
     114         CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr, Kmm )                             ! Bottom stress 
    116115         ! 
    117116      CASE( jpdyn_atf )       ! last trends: perform the output of 2D vorticity trends 
    118          CALL trd_vor_iom( kt ) 
     117         CALL trd_vor_iom( kt, Kmm ) 
    119118      END SELECT 
    120119      ! 
     
    122121 
    123122 
    124    SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd ) 
     123   SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd, Kmm ) 
    125124      !!---------------------------------------------------------------------------- 
    126125      !!                  ***  ROUTINE trd_vor_zint  *** 
     
    150149      !!---------------------------------------------------------------------- 
    151150      INTEGER                     , INTENT(in   ) ::   ktrd       ! ocean trend index 
     151      INTEGER                     , INTENT(in   ) ::   Kmm        ! time level index 
    152152      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   putrdvor   ! u vorticity trend  
    153153      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pvtrdvor   ! v vorticity trend 
     
    171171      ! 
    172172      CASE( jpvor_bfr )        ! bottom friction 
    173          DO jj = 2, jpjm1 
    174             DO ji = fs_2, fs_jpim1  
    175                ikbu = mbkv(ji,jj) 
    176                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             END DO 
    180          END DO 
     173         DO_2D_00_00 
     174            ikbu = mbkv(ji,jj) 
     175            ikbv = mbkv(ji,jj)             
     176            zudpvor(ji,jj) = putrdvor(ji,jj) * e3u(ji,jj,ikbu,Kmm) * e1u(ji,jj) * umask(ji,jj,ikbu) 
     177            zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v(ji,jj,ikbv,Kmm) * e2v(ji,jj) * vmask(ji,jj,ikbv) 
     178         END_2D 
    181179         ! 
    182180      CASE( jpvor_swf )        ! wind stress 
    183          zudpvor(:,:) = putrdvor(:,:) * e3u_n(:,:,1) * e1u(:,:) * umask(:,:,1) 
    184          zvdpvor(:,:) = pvtrdvor(:,:) * e3v_n(:,:,1) * e2v(:,:) * vmask(:,:,1) 
     181         zudpvor(:,:) = putrdvor(:,:) * e3u(:,:,1,Kmm) * e1u(:,:) * umask(:,:,1) 
     182         zvdpvor(:,:) = pvtrdvor(:,:) * e3v(:,:,1,Kmm) * e2v(:,:) * vmask(:,:,1) 
    185183         ! 
    186184      END SELECT 
    187185 
    188186      ! Average except for Beta.V 
    189       zudpvor(:,:) = zudpvor(:,:) * r1_hu_n(:,:) 
    190       zvdpvor(:,:) = zvdpvor(:,:) * r1_hv_n(:,:) 
     187      zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 
     188      zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 
    191189    
    192190      ! Curl 
     
    207205 
    208206 
    209    SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd ) 
     207   SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd , Kmm ) 
    210208      !!---------------------------------------------------------------------------- 
    211209      !!                  ***  ROUTINE trd_vor_zint  *** 
     
    236234      ! 
    237235      INTEGER                         , INTENT(in   ) ::   ktrd       ! ocean trend index 
     236      INTEGER                         , INTENT(in   ) ::   Kmm        ! time level index 
    238237      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   putrdvor   ! u vorticity trend  
    239238      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pvtrdvor   ! v vorticity trend 
     
    257256      ! putrdvor and pvtrdvor terms 
    258257      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) 
     258        zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u(:,:,jk,Kmm) * e1u(:,:) * umask(:,:,jk) 
     259        zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v(:,:,jk,Kmm) * e2v(:,:) * vmask(:,:,jk) 
    261260      END DO 
    262261 
     
    273272         END DO 
    274273         ! Average of the Curl and Surface mask 
    275          vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu_n(:,:) * fmask(:,:,1) 
     274         vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu(:,:,Kmm) * fmask(:,:,1) 
    276275      ENDIF 
    277276      ! 
    278277      ! Average  
    279       zudpvor(:,:) = zudpvor(:,:) * r1_hu_n(:,:) 
    280       zvdpvor(:,:) = zvdpvor(:,:) * r1_hv_n(:,:) 
     278      zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 
     279      zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 
    281280      ! 
    282281      ! Curl 
     
    298297 
    299298 
    300    SUBROUTINE trd_vor_iom( kt ) 
     299   SUBROUTINE trd_vor_iom( kt , Kmm ) 
    301300      !!---------------------------------------------------------------------- 
    302301      !!                  ***  ROUTINE trd_vor  *** 
     
    306305      !!---------------------------------------------------------------------- 
    307306      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     307      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    308308      ! 
    309309      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    310310      INTEGER  ::   it, itmod        ! local integers 
    311311      REAL(wp) ::   zmean            ! local scalars 
    312       REAL(wp), DIMENSION(jpi,jpj) :: zun, zvn 
     312      REAL(wp), DIMENSION(jpi,jpj) :: zuu, zvv 
    313313      !!---------------------------------------------------------------------- 
    314314 
     
    327327 
    328328      vor_avr   (:,:) = 0._wp 
    329       zun       (:,:) = 0._wp 
    330       zvn       (:,:) = 0._wp 
     329      zuu       (:,:) = 0._wp 
     330      zvv       (:,:) = 0._wp 
    331331      vor_avrtot(:,:) = 0._wp 
    332332      vor_avrres(:,:) = 0._wp 
     
    334334      ! Vertically averaged velocity 
    335335      DO jk = 1, jpk - 1 
    336          zun(:,:) = zun(:,:) + e1u(:,:) * un(:,:,jk) * e3u_n(:,:,jk) 
    337          zvn(:,:) = zvn(:,:) + e2v(:,:) * vn(:,:,jk) * e3v_n(:,:,jk) 
     336         zuu(:,:) = zuu(:,:) + e1u(:,:) * uu(:,:,jk,Kmm) * e3u(:,:,jk,Kmm) 
     337         zvv(:,:) = zvv(:,:) + e2v(:,:) * vv(:,:,jk,Kmm) * e3v(:,:,jk,Kmm) 
    338338      END DO 
    339339  
    340       zun(:,:) = zun(:,:) * r1_hu_n(:,:) 
    341       zvn(:,:) = zvn(:,:) * r1_hv_n(:,:) 
     340      zuu(:,:) = zuu(:,:) * r1_hu(:,:,Kmm) 
     341      zvv(:,:) = zvv(:,:) * r1_hv(:,:,Kmm) 
    342342 
    343343      ! Curl 
    344344      DO ji = 1, jpim1 
    345345         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) 
     346            vor_avr(ji,jj) = (  ( zvv(ji+1,jj) - zvv(ji,jj) )    & 
     347               &              - ( zuu(ji,jj+1) - zuu(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 
    348348         END DO 
    349349      END DO 
Note: See TracChangeset for help on using the changeset viewer.