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 7351 for branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_triad.F90 – NEMO

Ignore:
Timestamp:
2016-11-28T17:04:10+01:00 (7 years ago)
Author:
emanuelaclementi
Message:

ticket #1805 step 3: /2016/dev_INGV_UKMO_2016 aligned to the trunk at revision 7161

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_triad.F90

    r5836 r7351  
    1111   !!   tra_ldf_triad : update the tracer trend with the iso-neutral laplacian triad-operator 
    1212   !!---------------------------------------------------------------------- 
    13    USE oce             ! ocean dynamics and active tracers 
    14    USE dom_oce         ! ocean space and time domain 
    15    USE phycst          ! physical constants 
    16    USE trc_oce         ! share passive tracers/Ocean variables 
    17    USE zdf_oce         ! ocean vertical physics 
    18    USE ldftra          ! lateral physics: eddy diffusivity 
    19    USE ldfslp          ! lateral physics: iso-neutral slopes 
    20    USE traldf_iso      ! lateral diffusion (Madec operator)         (tra_ldf_iso routine) 
    21    USE diaptr          ! poleward transport diagnostics 
    22    USE zpshde          ! partial step: hor. derivative     (zps_hde routine) 
     13   USE oce            ! ocean dynamics and active tracers 
     14   USE dom_oce        ! ocean space and time domain 
     15   USE phycst         ! physical constants 
     16   USE trc_oce        ! share passive tracers/Ocean variables 
     17   USE zdf_oce        ! ocean vertical physics 
     18   USE ldftra         ! lateral physics: eddy diffusivity 
     19   USE ldfslp         ! lateral physics: iso-neutral slopes 
     20   USE traldf_iso     ! lateral diffusion (Madec operator)         (tra_ldf_iso routine) 
     21   USE diaptr         ! poleward transport diagnostics 
     22   USE zpshde         ! partial step: hor. derivative     (zps_hde routine) 
    2323   ! 
    24    USE in_out_manager  ! I/O manager 
    25    USE iom             ! I/O library 
    26    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    27    USE lib_mpp         ! MPP library 
    28    USE wrk_nemo        ! Memory Allocation 
    29    USE timing          ! Timing 
     24   USE in_out_manager ! I/O manager 
     25   USE iom            ! I/O library 
     26   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     27   USE lib_mpp        ! MPP library 
     28   USE wrk_nemo       ! Memory Allocation 
     29   USE timing         ! Timing 
    3030 
    3131   IMPLICIT NONE 
     
    3737 
    3838   !! * Substitutions 
    39 #  include "domzgr_substitute.h90" 
    4039#  include "vectopt_loop_substitute.h90" 
    4140   !!---------------------------------------------------------------------- 
     
    113112         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~' 
    114113      ENDIF 
    115       ! 
    116114      !                                               ! set time step size (Euler/Leapfrog) 
    117       IF( neuler == 0 .AND. kt == kit000 ) THEN   ;   z2dt =     rdttra(1)      ! at nit000   (Euler) 
    118       ELSE                                        ;   z2dt = 2.* rdttra(1)      !             (Leapfrog) 
     115      IF( neuler == 0 .AND. kt == kit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
     116      ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
    119117      ENDIF 
    120118      z1_2dt = 1._wp / z2dt 
     
    123121      ELSE                    ;   zsign = -1._wp 
    124122      ENDIF 
    125                    
     123      !     
    126124      !!---------------------------------------------------------------------- 
    127125      !!   0 - calculate  ah_wslp2, akz, and optionally zpsi_uw, zpsi_vw 
     
    142140                  DO jj = 1, jpjm1 
    143141                     DO ji = 1, fs_jpim1 
    144                         ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp) 
    145                         zbu   = e1e2u(ji,jj) * fse3u(ji,jj,jk) 
     142                        ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
     143                        zbu   = e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    146144                        zah   = 0.25_wp * pahu(ji,jj,jk) 
    147145                        zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    148146                        ! Subtract s-coordinate slope at t-points to give slope rel to s-surfaces (do this by *adding* gradient of depth) 
    149                         zslope2 = zslope_skew + ( fsdept(ji+1,jj,jk) - fsdept(ji,jj,jk) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
     147                        zslope2 = zslope_skew + ( gdept_n(ji+1,jj,jk) - gdept_n(ji,jj,jk) ) * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
    150148                        zslope2 = zslope2 *zslope2 
    151149                        ah_wslp2(ji+ip,jj,jk+kp) = ah_wslp2(ji+ip,jj,jk+kp) + zah * zbu * ze3wr * r1_e1e2t(ji+ip,jj) * zslope2 
    152150                        akz     (ji+ip,jj,jk+kp) = akz     (ji+ip,jj,jk+kp) + zah * r1_e1u(ji,jj)       & 
    153151                           &                                                      * r1_e1u(ji,jj) * umask(ji,jj,jk+kp) 
    154                         ! 
     152                           ! 
    155153                       IF( ln_ldfeiv_dia )   zpsi_uw(ji,jj,jk+kp) = zpsi_uw(ji,jj,jk+kp)   & 
    156154                           &                                       + 0.25_wp * aeiu(ji,jj,jk) * e2u(ji,jj) * zslope_skew 
     
    166164                  DO jj = 1, jpjm1 
    167165                     DO ji = 1, fs_jpim1 
    168                         ze3wr = 1.0_wp / fse3w(ji,jj+jp,jk+kp) 
    169                         zbv   = e1e2v(ji,jj) * fse3v(ji,jj,jk) 
     166                        ze3wr = 1.0_wp / e3w_n(ji,jj+jp,jk+kp) 
     167                        zbv   = e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    170168                        zah   = 0.25_wp * pahv(ji,jj,jk) 
    171169                        zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    172170                        ! Subtract s-coordinate slope at t-points to give slope rel to s surfaces 
    173171                        !    (do this by *adding* gradient of depth) 
    174                         zslope2 = zslope_skew + ( fsdept(ji,jj+1,jk) - fsdept(ji,jj,jk) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
     172                        zslope2 = zslope_skew + ( gdept_n(ji,jj+1,jk) - gdept_n(ji,jj,jk) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk+kp) 
    175173                        zslope2 = zslope2 * zslope2 
    176174                        ah_wslp2(ji,jj+jp,jk+kp) = ah_wslp2(ji,jj+jp,jk+kp) + zah * zbv * ze3wr * r1_e1e2t(ji,jj+jp) * zslope2 
     
    193191                     DO ji = 1, fs_jpim1 
    194192                        akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    195                            &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( fse3w(ji,jj,jk) * fse3w(ji,jj,jk) )  ) 
     193                           &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) )  ) 
    196194                     END DO 
    197195                  END DO 
     
    201199                  DO jj = 1, jpjm1 
    202200                     DO ji = 1, fs_jpim1 
    203                         ze3w_2 = fse3w(ji,jj,jk) * fse3w(ji,jj,jk) 
     201                        ze3w_2 = e3w_n(ji,jj,jk) * e3w_n(ji,jj,jk) 
    204202                        zcoef0 = z2dt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
    205203                        akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt 
     
    250248            ENDIF 
    251249         ENDIF 
    252  
     250         ! 
    253251         !!---------------------------------------------------------------------- 
    254252         !!   II - horizontal trend  (full) 
     
    256254         ! 
    257255         DO jk = 1, jpkm1 
    258             ! 
    259256            !                    !==  Vertical tracer gradient at level jk and jk+1 
    260257            zdkt3d(:,:,1) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 
     
    274271                           ze1ur = r1_e1u(ji,jj) 
    275272                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    276                            ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp) 
     273                           ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    277274                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    278275                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    279276                           zslope_iso  = triadi  (ji+ip,jj,jk,1-ip,kp) 
    280  
    281                            zbu = 0.25_wp * e1e2u(ji,jj) * fse3u(ji,jj,jk) 
     277                           ! 
     278                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    282279                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????   ahu is masked.... 
    283280                           zah = pahu(ji,jj,jk) 
     
    290287                  END DO 
    291288               END DO 
    292  
     289               ! 
    293290               DO jp = 0, 1 
    294291                  DO kp = 0, 1 
     
    297294                           ze2vr = r1_e2v(ji,jj) 
    298295                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    299                            ze3wr = 1._wp / fse3w(ji,jj+jp,jk+kp) 
     296                           ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
    300297                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    301298                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    302299                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    303                            zbv = 0.25_wp * e1e2v(ji,jj) * fse3v(ji,jj,jk) 
     300                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    304301                           ! ln_botmix_triad is .T. don't mask zah for bottom half cells    !!gm ?????  ahv is masked... 
    305302                           zah = pahv(ji,jj,jk) 
     
    312309                  END DO 
    313310               END DO 
    314  
     311               ! 
    315312            ELSE 
    316  
     313               ! 
    317314               DO ip = 0, 1               !==  Horizontal & vertical fluxes 
    318315                  DO kp = 0, 1 
     
    321318                           ze1ur = r1_e1u(ji,jj) 
    322319                           zdxt  = zdit(ji,jj,jk) * ze1ur 
    323                            ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp) 
     320                           ze3wr = 1._wp / e3w_n(ji+ip,jj,jk+kp) 
    324321                           zdzt  = zdkt3d(ji+ip,jj,kp) * ze3wr 
    325322                           zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp) 
    326323                           zslope_iso  = triadi(ji+ip,jj,jk,1-ip,kp) 
    327  
    328                            zbu = 0.25_wp * e1e2u(ji,jj) * fse3u(ji,jj,jk) 
     324                           ! 
     325                           zbu = 0.25_wp * e1e2u(ji,jj) * e3u_n(ji,jj,jk) 
    329326                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    330327                           zah = pahu(ji,jj,jk) * umask(ji,jj,jk+kp)         ! pahu(ji+ip,jj,jk)   ===>>  ???? 
    331328                           zah_slp  = zah * zslope_iso 
    332                            IF( ln_ldfeiv )   zaei_slp = aeiu(ji,jj,jk) * zslope_skew        ! fsaeit(ji+ip,jj,jk)*zslope_skew 
     329                           IF( ln_ldfeiv )   zaei_slp = aeiu(ji,jj,jk) * zslope_skew        ! aeit(ji+ip,jj,jk)*zslope_skew 
    333330                           zftu(ji   ,jj,jk   ) = zftu(ji   ,jj,jk   ) - ( zah * zdxt + (zah_slp - zaei_slp) * zdzt ) * zbu * ze1ur 
    334331                           ztfw(ji+ip,jj,jk+kp) = ztfw(ji+ip,jj,jk+kp) - (zah_slp + zaei_slp) * zdxt * zbu * ze3wr 
     
    337334                  END DO 
    338335               END DO 
    339  
     336               ! 
    340337               DO jp = 0, 1 
    341338                  DO kp = 0, 1 
     
    344341                           ze2vr = r1_e2v(ji,jj) 
    345342                           zdyt  = zdjt(ji,jj,jk) * ze2vr 
    346                            ze3wr = 1._wp / fse3w(ji,jj+jp,jk+kp) 
     343                           ze3wr = 1._wp / e3w_n(ji,jj+jp,jk+kp) 
    347344                           zdzt  = zdkt3d(ji,jj+jp,kp) * ze3wr 
    348345                           zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp) 
    349346                           zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp) 
    350                            zbv = 0.25_wp * e1e2v(ji,jj) * fse3v(ji,jj,jk) 
     347                           zbv = 0.25_wp * e1e2v(ji,jj) * e3v_n(ji,jj,jk) 
    351348                           ! ln_botmix_triad is .F. mask zah for bottom half cells 
    352349                           zah = pahv(ji,jj,jk) * vmask(ji,jj,jk+kp)         ! pahv(ji,jj+jp,jk)  ???? 
    353350                           zah_slp = zah * zslope_iso 
    354                            IF( ln_ldfeiv )   zaei_slp = aeiv(ji,jj,jk) * zslope_skew        ! fsaeit(ji,jj+jp,jk)*zslope_skew 
     351                           IF( ln_ldfeiv )   zaei_slp = aeiv(ji,jj,jk) * zslope_skew        ! aeit(ji,jj+jp,jk)*zslope_skew 
    355352                           zftv(ji,jj,jk) = zftv(ji,jj,jk) - ( zah * zdyt + (zah_slp - zaei_slp) * zdzt ) * zbv * ze2vr 
    356353                           ztfw(ji,jj+jp,jk+kp) = ztfw(ji,jj+jp,jk+kp) - (zah_slp + zaei_slp) * zdyt * zbv * ze3wr 
     
    365362                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
    366363                     &                                           + zftv(ji,jj-1,jk) - zftv(ji,jj,jk)   )   & 
    367                      &                                        / (  e1e2t(ji,jj) * fse3t(ji,jj,jk)  ) 
     364                     &                                        / (  e1e2t(ji,jj) * e3t_n(ji,jj,jk)  ) 
    368365               END DO 
    369366            END DO 
     
    376373               DO jj = 1, jpjm1 
    377374                  DO ji = fs_2, fs_jpim1 
    378                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)   & 
     375                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)   & 
    379376                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    380377                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
     
    388385                  DO jj = 1, jpjm1 
    389386                     DO ji = fs_2, fs_jpim1 
    390                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)             & 
     387                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)             & 
    391388                           &                            * ah_wslp2(ji,jj,jk) * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
    392389                     END DO 
     
    397394                  DO jj = 1, jpjm1 
    398395                     DO ji = fs_2, fs_jpim1 
    399                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)                      & 
     396                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w_n(ji,jj,jk) * tmask(ji,jj,jk)                      & 
    400397                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
    401398                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
     
    410407               DO ji = fs_2, fs_jpim1  ! vector opt. 
    411408                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
    412                      &                                        / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     409                     &                                        / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
    413410               END DO 
    414411            END DO 
Note: See TracChangeset for help on using the changeset viewer.