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 10874 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_triad.F90 – NEMO

Ignore:
Timestamp:
2019-04-15T15:57:37+02:00 (5 years ago)
Author:
davestorkey
Message:

branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Revert all changes so far in preparation for implementation of new design.

File:
1 edited

Legend:

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

    r10806 r10874  
    4848CONTAINS 
    4949 
    50   SUBROUTINE tra_ldf_triad( kt, kit000, ktlev, kt2lev, cdtype, pahu, pahv, pgu , pgv ,   & 
     50  SUBROUTINE tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,   & 
    5151      &                                                     pgui, pgvi,   & 
    52       &                                         pt , pt_lev0, pt_rhs , kjpt, kpass ) 
     52      &                                         ptb , ptbb, pta , kjpt, kpass ) 
    5353      !!---------------------------------------------------------------------- 
    5454      !!                  ***  ROUTINE tra_ldf_triad  *** 
     
    6666      !!      see documentation for the desciption 
    6767      !! 
    68       !! ** Action :   pt_rhs   updated with the before rotated diffusion 
     68      !! ** Action :   pta   updated with the before rotated diffusion 
    6969      !!               ah_wslp2 .... 
    7070      !!               akz   stabilizing vertical diffusivity coefficient (used in trazdf_imp) 
     
    7272      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    7373      INTEGER                              , INTENT(in   ) ::   kit000     ! first time step index 
    74       INTEGER                              , INTENT(in   ) ::   ktlev      ! time level index for e3t 
    75       INTEGER                              , INTENT(in   ) ::   kt2lev     ! time level index for 2-time-level thicknesses 
    7674      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
    7775      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers 
     
    8078      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu , pgv  ! tracer gradient at pstep levels 
    8179      REAL(wp), DIMENSION(jpi,jpj,    kjpt), INTENT(in   ) ::   pgui, pgvi ! tracer gradient at top   levels 
    82       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt        ! tracer (kpass=1) or laplacian of tracer (kpass=2) 
    83       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   pt_lev0       ! tracer (only used in kpass=2) 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pt_rhs        ! tracer trend 
     80      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! tracer (kpass=1) or laplacian of tracer (kpass=2) 
     81      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptbb       ! tracer (only used in kpass=2) 
     82      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend 
    8583      ! 
    8684      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
     
    144142                  DO jj = 1, jpjm1 
    145143                     DO ji = 1, fs_jpim1 
    146                         ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,kt2lev) 
    147                         zbu   = e1e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
     144                        ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
     145                        zbu   = e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    148146                        zah   = 0.25_wp * pahu(ji,jj,jk) 
    149147                        zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    150148                        ! Subtract s-coordinate slope at t-points to give slope rel to s-surfaces (do this by *adding* gradient of depth) 
    151                         zslope2 = zslope_skew + ( gdept(ji+1,jj,jk,kt2lev) - gdept(ji,jj,jk,kt2lev) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
     149                        zslope2 = zslope_skew + ( gdept_n(ji+1,jj,jk) - gdept_n(ji,jj,jk) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
    152150                        zslope2 = zslope2 *zslope2 
    153151                        ah_wslp2(ji+ip,jj,jk+kp) = ah_wslp2(ji+ip,jj,jk+kp) + zah * zbu * ze3wr * r1_e1e2t(ji+ip,jj) * zslope2 
     
    168166                  DO jj = 1, jpjm1 
    169167                     DO ji = 1, fs_jpim1 
    170                         ze3wr = 1.0_wp / e3w(ji,jj+jp,jk+kp,kt2lev) 
    171                         zbv   = e1e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     168                        ze3wr = 1.0_wp / e3w_n(ji,jj+jp,jk+kp) 
     169                        zbv   = e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    172170                        zah   = 0.25_wp * pahv(ji,jj,jk) 
    173171                        zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    174172                        ! Subtract s-coordinate slope at t-points to give slope rel to s surfaces 
    175173                        !    (do this by *adding* gradient of depth) 
    176                         zslope2 = zslope_skew + ( gdept(ji,jj+1,jk,kt2lev) - gdept(ji,jj,jk,kt2lev) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
     174                        zslope2 = zslope_skew + ( gdept_n(ji,jj+1,jk) - gdept_n(ji,jj,jk) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
    177175                        zslope2 = zslope2 * zslope2 
    178176                        ah_wslp2(ji,jj+jp,jk+kp) = ah_wslp2(ji,jj+jp,jk+kp) + zah * zbv * ze3wr * r1_e1e2t(ji,jj+jp) * zslope2 
     
    195193                     DO ji = 1, fs_jpim1 
    196194                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    197                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,kt2lev) * e3w(ji,jj,jk,kt2lev) )  ) 
     195                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
    198196                     END DO 
    199197                  END DO 
     
    203201                  DO jj = 1, jpjm1 
    204202                     DO ji = 1, fs_jpim1 
    205                         ze3w_2 = e3w(ji,jj,jk,kt2lev) * e3w(ji,jj,jk,kt2lev) 
     203                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    206204                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    207205                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    231229            DO jj = 1, jpjm1 
    232230               DO ji = 1, fs_jpim1   ! vector opt. 
    233                   zdit(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    234                   zdjt(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
     231                  zdit(ji,jj,jk) = ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
     232                  zdjt(ji,jj,jk) = ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    235233               END DO 
    236234            END DO 
     
    259257         DO jk = 1, jpkm1 
    260258            !                    !==  Vertical tracer gradient at level jk and jk+1 
    261             zdkt3d(:,:,1) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 
     259            zdkt3d(:,:,1) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 
    262260            ! 
    263261            !                    ! surface boundary condition: zdkt3d(jk=0)=zdkt3d(jk=1) 
    264262            IF( jk == 1 ) THEN   ;   zdkt3d(:,:,0) = zdkt3d(:,:,1) 
    265             ELSE                 ;   zdkt3d(:,:,0) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * tmask(:,:,jk) 
     263            ELSE                 ;   zdkt3d(:,:,0) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * tmask(:,:,jk) 
    266264            ENDIF 
    267265            ! 
     
    275273                           ze1ur = r1_e1u(ji,jj) 
    276274                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    277                            ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,kt2lev) 
     275                           ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    278276                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    279277                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    280278                           zslope_iso  = triadi  (ji+ip,jj,jk,1-ip,kp) 
    281279                           ! 
    282                            zbu = 0.25_wp * e1e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
     280                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    283281                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????   ahu is masked.... 
    284282                           zah = pahu(ji,jj,jk) 
     
    298296                           ze2vr = r1_e2v(ji,jj) 
    299297                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    300                            ze3wr = 1._wp / e3w(ji,jj+jp,jk+kp,kt2lev) 
     298                           ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
    301299                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    302300                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    303301                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    304                            zbv = 0.25_wp * e1e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     302                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    305303                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????  ahv is masked... 
    306304                           zah = pahv(ji,jj,jk) 
     
    322320                           ze1ur = r1_e1u(ji,jj) 
    323321                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    324                            ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,kt2lev) 
     322                           ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    325323                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    326324                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    327325                           zslope_iso  = triadi(ji+ip,jj,jk,1-ip,kp) 
    328326                           ! 
    329                            zbu = 0.25_wp * e1e2u(ji,jj) * e3u(ji,jj,jk,ktlev) 
     327                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    330328                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    331329                           zah = pahu(ji,jj,jk) * umask(ji,jj,jk+kp)         ! pahu(ji+ip,jj,jk)   ===>>  ???? 
     
    345343                           ze2vr = r1_e2v(ji,jj) 
    346344                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    347                            ze3wr = 1._wp / e3w(ji,jj+jp,jk+kp,kt2lev) 
     345                           ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
    348346                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    349347                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    350348                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    351                            zbv = 0.25_wp * e1e2v(ji,jj) * e3v(ji,jj,jk,ktlev) 
     349                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    352350                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    353351                           zah = pahv(ji,jj,jk) * vmask(ji,jj,jk+kp)         ! pahv(ji,jj+jp,jk)  ???? 
     
    364362            DO jj = 2 , jpjm1 
    365363               DO ji = fs_2, fs_jpim1  ! vector opt. 
    366                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
     364                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
    367365                     &                                           + zftv(ji,jj-1,jk) - zftv(ji,jj,jk)   )   & 
    368                      &                                        / (  e1e2t(ji,jj) * e3t(ji,jj,jk,ktlev)  ) 
     366                     &                                        / (  e1e2t(ji,jj) * e3t_n(ji,jj,jk)  ) 
    369367               END DO 
    370368            END DO 
     
    377375               DO jj = 1, jpjm1 
    378376                  DO ji = fs_2, fs_jpim1 
    379                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * tmask(ji,jj,jk)   & 
     377                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)   & 
    380378                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    381                         &                            * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 
     379                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    382380                  END DO 
    383381               END DO 
     
    389387                  DO jj = 1, jpjm1 
    390388                     DO ji = fs_2, fs_jpim1 
    391                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * tmask(ji,jj,jk)             & 
    392                            &                            * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 
     389                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)             & 
     390                           &                            * ah_wslp2(ji,jj,jk) * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    393391                     END DO 
    394392                  END DO 
    395393               END DO  
    396             CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt_lev0 gradients, resp. 
     394            CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on ptb  and ptbb gradients, resp. 
    397395               DO jk = 2, jpkm1  
    398396                  DO jj = 1, jpjm1 
    399397                     DO ji = fs_2, fs_jpim1 
    400                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,kt2lev) * tmask(ji,jj,jk)                      & 
    401                            &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   & 
    402                            &                               + akz     (ji,jj,jk) * ( pt_lev0(ji,jj,jk-1,jn) - pt_lev0(ji,jj,jk,jn) )   ) 
     398                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)                      & 
     399                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
     400                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
    403401                     END DO 
    404402                  END DO 
     
    407405         ENDIF 
    408406         ! 
    409          DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pt_rhs  ==! 
     407         DO jk = 1, jpkm1                 !==  Divergence of vertical fluxes added to pta  ==! 
    410408            DO jj = 2, jpjm1 
    411409               DO ji = fs_2, fs_jpim1  ! vector opt. 
    412                   pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
    413                      &                                        / ( e1e2t(ji,jj) * e3t(ji,jj,jk,ktlev) ) 
     410                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
     411                     &                                        / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
    414412               END DO 
    415413            END DO 
Note: See TracChangeset for help on using the changeset viewer.