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 6060 for branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90 – NEMO

Ignore:
Timestamp:
2015-12-16T10:25:22+01:00 (8 years ago)
Author:
timgraham
Message:

Merged dev_r5836_noc2_VVL_BY_DEFAULT into branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r5836 r6060  
    1414 
    1515   !!---------------------------------------------------------------------- 
    16    !!   tra_ldf_iso  : update the tracer trend with the horizontal component of a iso-neutral laplacian operator 
    17    !!                  and with the vertical part of the isopycnal or geopotential s-coord. operator  
     16   !!   tra_ldf_iso   : update the tracer trend with the horizontal component of a iso-neutral laplacian operator 
     17   !!                   and with the vertical part of the isopycnal or geopotential s-coord. operator  
    1818   !!---------------------------------------------------------------------- 
    19    USE oce             ! ocean dynamics and active tracers 
    20    USE dom_oce         ! ocean space and time domain 
    21    USE trc_oce         ! share passive tracers/Ocean variables 
    22    USE zdf_oce         ! ocean vertical physics 
    23    USE ldftra          ! lateral diffusion: tracer eddy coefficients 
    24    USE ldfslp          ! iso-neutral slopes 
    25    USE diaptr          ! poleward transport diagnostics 
     19   USE oce            ! ocean dynamics and active tracers 
     20   USE dom_oce        ! ocean space and time domain 
     21   USE trc_oce        ! share passive tracers/Ocean variables 
     22   USE zdf_oce        ! ocean vertical physics 
     23   USE ldftra         ! lateral diffusion: tracer eddy coefficients 
     24   USE ldfslp         ! iso-neutral slopes 
     25   USE diaptr         ! poleward transport diagnostics 
    2626   ! 
    27    USE in_out_manager  ! I/O manager 
    28    USE iom             ! I/O library 
    29    USE phycst          ! physical constants 
    30    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    31    USE wrk_nemo        ! Memory Allocation 
    32    USE timing          ! Timing 
     27   USE in_out_manager ! I/O manager 
     28   USE iom            ! I/O library 
     29   USE phycst         ! physical constants 
     30   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     31   USE wrk_nemo       ! Memory Allocation 
     32   USE timing         ! Timing 
    3333 
    3434   IMPLICIT NONE 
     
    3838 
    3939   !! * Substitutions 
    40 #  include "domzgr_substitute.h90" 
    4140#  include "vectopt_loop_substitute.h90" 
    4241   !!---------------------------------------------------------------------- 
     
    127126         ah_wslp2(:,:,:) = 0._wp 
    128127      ENDIF 
    129       ! 
    130128      !                                               ! set time step size (Euler/Leapfrog) 
    131129      IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   z2dt =     rdttra(1)      ! at nit000   (Euler) 
     
    138136      ENDIF 
    139137          
    140           
    141138      !!---------------------------------------------------------------------- 
    142139      !!   0 - calculate  ah_wslp2 and akz 
     
    149146               DO ji = fs_2, fs_jpim1   ! vector opt. 
    150147                  ! 
    151                   zmsku = tmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
     148                  zmsku = wmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
    152149                     &                           + umask(ji-1,jj,jk-1) + umask(ji  ,jj,jk) , 1._wp  ) 
    153                   zmskv = tmask(ji,jj,jk) / MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)          & 
     150                  zmskv = wmask(ji,jj,jk) / MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)          & 
    154151                     &                           + vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk) , 1._wp  ) 
    155152                     ! 
     
    183180                     DO ji = 1, fs_jpim1 
    184181                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    185                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( fse3w(ji,jj,jk) * fse3w(ji,jj,jk) )  ) 
     182                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
    186183                     END DO 
    187184                  END DO 
     
    191188                  DO jj = 1, jpjm1 
    192189                     DO ji = 1, fs_jpim1 
    193                         ze3w_2 = fse3w(ji,jj,jk) * fse3w(ji,jj,jk) 
     190                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    194191                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    195192                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    242239            ENDIF 
    243240         ENDIF 
    244  
     241         ! 
    245242         !!---------------------------------------------------------------------- 
    246243         !!   II - horizontal trend  (full) 
     
    266263!         END IF 
    267264!!gm  
    268  
    269265            DO jj = 1 , jpjm1            !==  Horizontal fluxes 
    270266               DO ji = 1, fs_jpim1   ! vector opt. 
    271                   zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * fse3u_n(ji,jj,jk) 
    272                   zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * fse3v_n(ji,jj,jk) 
     267                  zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u_n(ji,jj,jk) 
     268                  zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v_n(ji,jj,jk) 
    273269                  ! 
    274270                  zmsku = 1. / MAX(  tmask(ji+1,jj,jk  ) + tmask(ji,jj,jk+1)   & 
     
    294290                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji,jj,jk) - zftu(ji-1,jj,jk)      & 
    295291                     &                                           + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )   & 
    296                      &                                        / (  e1e2t(ji,jj) * fse3t(ji,jj,jk)  ) 
     292                     &                                        * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    297293               END DO 
    298294            END DO 
    299295         END DO                                        !   End of slab   
    300296 
    301  
    302297         !!---------------------------------------------------------------------- 
    303298         !!   III - vertical trend (full) 
    304299         !!---------------------------------------------------------------------- 
    305           
     300         ! 
    306301         ztfw(1,:,:) = 0._wp     ;     ztfw(jpi,:,:) = 0._wp 
    307           
     302         ! 
    308303         ! Vertical fluxes 
    309304         ! --------------- 
    310           
    311          ! Surface and bottom vertical fluxes set to zero 
     305         !                          ! Surface and bottom vertical fluxes set to zero 
    312306         ztfw(:,:, 1 ) = 0._wp      ;      ztfw(:,:,jpk) = 0._wp 
    313307          
    314          ! interior (2=<jk=<jpk-1) 
    315          DO jk = 2, jpkm1 
     308         DO jk = 2, jpkm1           ! interior (2=<jk=<jpk-1) 
    316309            DO jj = 2, jpjm1 
    317310               DO ji = fs_2, fs_jpim1   ! vector opt. 
    318311                  ! 
    319                   zmsku = tmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
     312                  zmsku = wmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
    320313                     &                           + umask(ji-1,jj,jk-1) + umask(ji  ,jj,jk) , 1._wp  ) 
    321                   zmskv = tmask(ji,jj,jk) / MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)          & 
     314                  zmskv = wmask(ji,jj,jk) / MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)          & 
    322315                     &                           + vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk) , 1._wp  ) 
    323316                     ! 
     
    337330            END DO 
    338331         END DO 
    339          ! 
    340332         !                                !==  add the vertical 33 flux  ==! 
    341333         IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz 
     
    343335               DO jj = 1, jpjm1 
    344336                  DO ji = fs_2, fs_jpim1 
    345                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)   & 
     337                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk)   & 
    346338                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    347339                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
     
    358350                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk)    & 
    359351                           &           + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
    360                            &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) / fse3w(ji,jj,jk) 
     352                           &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk) 
    361353                     END DO 
    362354                  END DO 
     
    366358                  DO jj = 1, jpjm1 
    367359                     DO ji = fs_2, fs_jpim1 
    368                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)                      & 
     360                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w_n(ji,jj,jk) * wmask(ji,jj,jk)                      & 
    369361                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
    370362                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
     
    379371               DO ji = fs_2, fs_jpim1   ! vector opt. 
    380372                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1)  )   & 
    381                      &                                        / (  e1e2t(ji,jj) * fse3t_n(ji,jj,jk)  ) 
     373                     &                                        * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    382374               END DO 
    383375            END DO 
Note: See TracChangeset for help on using the changeset viewer.