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 10946 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdvor.F90 – NEMO

Ignore:
Timestamp:
2019-05-08T10:56:14+02:00 (5 years ago)
Author:
acc
Message:

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert STO, TRD and USR modules and all knock on effects of these conversions. Note change to USR module may have implications for the TEST CASES (not tested yet). Standard SETTE tested only

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdvor.F90

    r10425 r10946  
    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 
     
    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 
     
    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_n(:,:) 
     345      zvv(:,:) = zvv(:,:) * r1_hv_n(:,:) 
    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.