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 457 for trunk/NEMO/OPA_SRC/TRA/traldf_iso.F90 – NEMO

Ignore:
Timestamp:
2006-05-10T19:01:19+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_049:RB: reorganization of tracers part, remove traadv_cen2_atsk.h90 traldf_iso_zps.F90 trazdf_iso.F90 trazdf_iso_vopt.F90, change atsk routines to jki

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r410 r457  
    11MODULE traldf_iso 
    22   !!============================================================================== 
    3    !!                    ***  MODULE  traldf_iso  *** 
     3   !!                   ***  MODULE  traldf_iso  *** 
    44   !! Ocean active tracers:  horizontal component of the lateral tracer mixing trend 
    55   !!============================================================================== 
    6 #if defined key_ldfslp   ||   defined key_esopa 
    7    !!---------------------------------------------------------------------- 
    8    !!   'key_ldfslp'                  rotation of the lateral mixing tensor 
    9    !!---------------------------------------------------------------------- 
    10    !!   tra_ldf_iso : update the tracer trend with the horizontal component 
    11    !!                 of iso neutral laplacian operator or horizontal  
    12    !!                 laplacian operator in s-coordinate 
     6#if   defined key_ldfslp   ||   defined key_esopa 
     7   !!---------------------------------------------------------------------- 
     8   !!   'key_ldfslp'               slope of the lateral diffusive direction 
     9   !!---------------------------------------------------------------------- 
     10   !!   tra_ldf_iso  : update the tracer trend with the horizontal  
     11   !!                  component of a iso-neutral laplacian operator 
     12   !!                  and with the vertical part of 
     13   !!                  the isopycnal or geopotential s-coord. operator  
     14   !!                  vector optimization, use k-j-i loops. 
    1315   !!---------------------------------------------------------------------- 
    1416   !! * Modules used 
    15    USE oce             ! ocean dynamics and tracers variables 
    16    USE dom_oce         ! ocean space and time domain variables 
     17   USE oce             ! ocean dynamics and active tracers 
     18   USE dom_oce         ! ocean space and time domain 
    1719   USE ldftra_oce      ! ocean active tracers: lateral physics 
    1820   USE trdmod          ! ocean active tracers trends  
    1921   USE trdmod_oce      ! ocean variables trends 
     22   USE zdf_oce         ! ocean vertical physics 
    2023   USE in_out_manager  ! I/O manager 
    2124   USE ldfslp          ! iso-neutral slopes 
     
    2326   USE prtctl          ! Print control 
    2427 
     28 
    2529   IMPLICIT NONE 
    2630   PRIVATE 
    2731 
    28    !! * Routine accessibility 
    29    PUBLIC tra_ldf_iso  ! routine called by step.F90 
     32   !! * Accessibility 
     33   PUBLIC tra_ldf_iso   ! routine called by step.F90 
    3034 
    3135   !! * Substitutions 
    3236#  include "domzgr_substitute.h90" 
    3337#  include "ldftra_substitute.h90" 
    34 #  include "ldfeiv_substitute.h90" 
    3538#  include "vectopt_loop_substitute.h90" 
    3639   !!---------------------------------------------------------------------- 
    37    !!---------------------------------------------------------------------- 
    38    !!  OPA 9.0 , LOCEAN-IPSL (2005)  
    39    !! $Header$  
    40    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    41    !!---------------------------------------------------------------------- 
     40   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     41   !!---------------------------------------------------------------------- 
     42 
    4243CONTAINS 
    4344 
     
    4546      !!---------------------------------------------------------------------- 
    4647      !!                  ***  ROUTINE tra_ldf_iso  *** 
    47       !!  
     48      !! 
    4849      !! ** Purpose :   Compute the before horizontal tracer (t & s) diffusive  
    49       !!      trend and add it to the general trend of tracer equation. 
     50      !!      trend for a laplacian tensor (ezxcept the dz[ dz[.] ] term) and  
     51      !!      add it to the general trend of tracer equation. 
    5052      !! 
    5153      !! ** Method  :   The horizontal component of the lateral diffusive trends  
     
    5557      !!      nal or geopotential slopes computed in routine ldfslp. 
    5658      !! 
    57       !!      horizontal fluxes associated with the rotated lateral mixing: 
     59      !!      1st part :  masked horizontal derivative of T & S ( di[ t ] ) 
     60      !!      ========    with partial cell update if ln_zps=T. 
     61      !! 
     62      !!      2nd part :  horizontal fluxes of the lateral mixing operator 
     63      !!      ========     
    5864      !!         zftu = (aht+ahtb0) e2u*e3u/e1u di[ tb ] 
    5965      !!               - aht       e2u*uslp    dk[ mi(mk(tb)) ] 
    6066      !!         zftv = (aht+ahtb0) e1v*e3v/e2v dj[ tb ] 
    6167      !!               - aht       e2u*vslp    dk[ mj(mk(tb)) ] 
    62       !!      add horizontal Eddy Induced advective fluxes (lk_traldf_eiv=T): 
    63       !!         zftu = zftu - dk-1[ aht e2u mi(wslpi) ] mi( tb )  
    64       !!         zftv = zftv - dk-1[ aht e1v mj(wslpj) ] mj( tb )  
    6568      !!      take the horizontal divergence of the fluxes: 
    6669      !!         difft = 1/(e1t*e2t*e3t) {  di-1[ zftu ] +  dj-1[ zftv ]  } 
     
    6871      !!         ta = ta + difft 
    6972      !! 
    70       !! ** Action  : - Update (ta,sa) arrays with the before isopycnal or 
    71       !!                geopotential s-coord harmonic mixing trend. 
    72       !!              - Save the trends in (ztdta,ztdsa) ('key_trdtra') 
     73      !!      3rd part: vertical trends of the lateral mixing operator 
     74      !!      ========  (excluding the vertical flux proportional to dk[t] ) 
     75      !!      vertical fluxes associated with the rotated lateral mixing: 
     76      !!         zftw =-aht {  e2t*wslpi di[ mi(mk(tb)) ] 
     77      !!                     + e1t*wslpj dj[ mj(mk(tb)) ]  } 
     78      !!      take the horizontal divergence of the fluxes: 
     79      !!         difft = 1/(e1t*e2t*e3t) dk[ zftw ] 
     80      !!      Add this trend to the general trend (ta,sa): 
     81      !!         ta = ta + difft 
     82      !! 
     83      !! ** Action : 
     84      !!         Update (ta,sa) arrays with the before rotated diffusion trend 
     85      !!            (except the dk[ dk[.] ] term) 
    7386      !! 
    7487      !! History : 
     
    7790      !!   8.5  !  02-08  (G. Madec)  Free form, F90 
    7891      !!   9.0  !  04-08  (C. Talandier) New trends organization 
     92      !!        !  05-11  (G. Madec)  merge traldf and trazdf :-) 
    7993      !!---------------------------------------------------------------------- 
    8094      !! * Modules used 
    81       USE oce           , zftu => ua,  &  ! use ua as workspace 
    82          &                zfsu => va      ! use va as workspace 
     95      USE oce           , zftv => ua,   &  ! use ua as workspace 
     96         &                zfsv => va       ! use va as workspace 
    8397 
    8498      !! * Arguments 
    85       INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
     99      INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
    86100 
    87101      !! * Local declarations 
    88       INTEGER ::   ji, jj, jk             ! dummy loop indices 
     102      INTEGER ::   ji, jj, jk              ! dummy loop indices 
     103      INTEGER ::   iku, ikv                ! temporary integer 
    89104      REAL(wp) ::   & 
    90          zabe1, zabe2, zcof1, zcof2,   &  ! temporary scalars 
    91 #if defined key_traldf_eiv 
    92          zcg1, zcg2, zuwk, zvwk,       & 
    93          zuwk1, zvwk1,                 & 
    94 #endif 
    95          zmsku, zmskv, zbtr, zta, zsa 
    96       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    97          zdkt, zdk1t,      &  ! workspace 
    98          zdks, zdk1s 
    99 #if defined key_traldf_eiv 
    100       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    101          zftug, zftvg,                  & 
    102          zfsug, zfsvg 
    103 #endif 
    104       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    105          zftv, zfsv,                        &  ! workspace 
    106          ztdta, ztdsa 
     105         zabe1, zabe2, zcof1, zcof2,    &  ! temporary scalars 
     106         zmsku, zta,                    &  !    "           " 
     107         zmskv, zsa, zbtr,              &  !    "           " 
     108         zcoef0, zcoef3, zcoef4            !    "         " 
     109      REAL(wp), DIMENSION(jpi,jpj) ::   &  ! temporary workspace 
     110         zdkt , zdk1t, zftu,            &  !    "           " 
     111         zdks , zdk1s, zfsu                !    "           " 
     112      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &  
     113         zdit, zdjt, ztfw,              &  ! temporary workspace 
     114         zdis, zdjs, zsfw                  !    "           " 
    107115      !!---------------------------------------------------------------------- 
    108116 
    109117      IF( kt == nit000 ) THEN 
    110118         IF(lwp) WRITE(numout,*) 
    111          IF(lwp) WRITE(numout,*) 'tra_ldf_iso : iso neutral lateral diffusion or' 
    112          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   horizontal laplacian diffusion in s-coordinate' 
    113 #if defined key_diaeiv 
    114          u_eiv(:,:,:) = 0.e0 
    115          v_eiv(:,:,:) = 0.e0 
    116 #endif 
     119         IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator' 
     120         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    117121      ENDIF 
    118122 
    119       ! Save ta and sa trends 
    120       IF( l_trdtra )   THEN 
    121          ztdta(:,:,:) = ta(:,:,:)  
    122          ztdsa(:,:,:) = sa(:,:,:)  
     123      !!---------------------------------------------------------------------- 
     124      !!   I - masked horizontal derivative of T & S 
     125      !!---------------------------------------------------------------------- 
     126!!bug ajout.... why?   ( 1,jpj,:) and (jpi,1,:) should be sufficient.... 
     127      zdit (1,:,:) = 0.e0     ;     zdit (jpi,:,:) = 0.e0 
     128      zdis (1,:,:) = 0.e0     ;     zdis (jpi,:,:) = 0.e0 
     129      zdjt (1,:,:) = 0.e0     ;     zdjt (jpi,:,:) = 0.e0 
     130      zdjs (1,:,:) = 0.e0     ;     zdjs (jpi,:,:) = 0.e0 
     131!!end 
     132 
     133 
     134      ! Horizontal temperature and salinity gradient  
     135      DO jk = 1, jpkm1 
     136         DO jj = 1, jpjm1 
     137            DO ji = 1, fs_jpim1   ! vector opt. 
     138               zdit(ji,jj,jk) = ( tb(ji+1,jj  ,jk) - tb(ji,jj,jk) ) * umask(ji,jj,jk) 
     139               zdis(ji,jj,jk) = ( sb(ji+1,jj  ,jk) - sb(ji,jj,jk) ) * umask(ji,jj,jk) 
     140               zdjt(ji,jj,jk) = ( tb(ji  ,jj+1,jk) - tb(ji,jj,jk) ) * vmask(ji,jj,jk) 
     141               zdjs(ji,jj,jk) = ( sb(ji  ,jj+1,jk) - sb(ji,jj,jk) ) * vmask(ji,jj,jk) 
     142            END DO 
     143         END DO 
     144      END DO 
     145      IF( ln_zps ) THEN      ! partial steps correction at the last level  
     146         DO jj = 1, jpjm1 
     147            DO ji = 1, fs_jpim1   ! vector opt. 
     148               ! last level 
     149               iku = MIN( mbathy(ji,jj), mbathy(ji+1,jj  ) ) - 1 
     150               ikv = MIN( mbathy(ji,jj), mbathy(ji  ,jj+1) ) - 1 
     151               zdit(ji,jj,iku) = gtu(ji,jj)  
     152               zdis(ji,jj,iku) = gsu(ji,jj)                
     153               zdjt(ji,jj,ikv) = gtv(ji,jj)  
     154               zdjs(ji,jj,ikv) = gsv(ji,jj)                
     155            END DO 
     156         END DO 
    123157      ENDIF 
    124158 
     159      !!---------------------------------------------------------------------- 
     160      !!   II - horizontal trend of T & S (full) 
     161      !!---------------------------------------------------------------------- 
     162       
     163!CDIR PARALLEL DO PRIVATE( zdk1t, zdk1s, zftu, zfsu )  
     164!$OMP PARALLEL DO PRIVATE( zdk1t, zdk1s, zftu, zfsu ) 
    125165      !                                                ! =============== 
    126166      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    150190               zabe2 = ( fsahtv(ji,jj,jk) + ahtb0 ) * e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) 
    151191 
    152                zmsku = 1. / MAX(   tmask(ji+1,jj,jk  ) + tmask(ji,jj,jk+1)   & 
    153                                  + tmask(ji+1,jj,jk+1) + tmask(ji,jj,jk  ), 1. ) 
    154  
    155                zmskv = 1. / MAX(   tmask(ji,jj+1,jk  ) + tmask(ji,jj,jk+1)   & 
    156                                  + tmask(ji,jj+1,jk+1) + tmask(ji,jj,jk  ), 1. ) 
     192               zmsku = 1. / MAX(  tmask(ji+1,jj,jk  ) + tmask(ji,jj,jk+1)   & 
     193                  &             + tmask(ji+1,jj,jk+1) + tmask(ji,jj,jk  ), 1. ) 
     194 
     195               zmskv = 1. / MAX(  tmask(ji,jj+1,jk  ) + tmask(ji,jj,jk+1)   & 
     196                  &             + tmask(ji,jj+1,jk+1) + tmask(ji,jj,jk  ), 1. ) 
    157197 
    158198               zcof1 = -fsahtu(ji,jj,jk) * e2u(ji,jj) * uslp(ji,jj,jk) * zmsku 
    159199               zcof2 = -fsahtv(ji,jj,jk) * e1v(ji,jj) * vslp(ji,jj,jk) * zmskv 
    160200 
    161                zftu(ji,jj,jk) = umask(ji,jj,jk) * (   zabe1 * (   tb(ji+1,jj,jk) - tb(ji,jj,jk)  )   & 
    162                   &                              + zcof1 * (   zdkt (ji+1,jj) + zdk1t(ji,jj)      & 
    163                   &                                          + zdk1t(ji+1,jj) + zdkt (ji,jj)  )  ) 
    164  
    165                zftv(ji,jj,jk) = vmask(ji,jj,jk) * (   zabe2 * (   tb(ji,jj+1,jk) - tb(ji,jj,jk)  )   & 
    166                   &                              + zcof2 * (   zdkt (ji,jj+1) + zdk1t(ji,jj)      & 
    167                   &                                          + zdk1t(ji,jj+1) + zdkt (ji,jj)  )  ) 
    168  
    169                zfsu(ji,jj,jk) = umask(ji,jj,jk) * (   zabe1 * (   sb(ji+1,jj,jk) - sb(ji,jj,jk)  )   & 
    170                   &                              + zcof1 * (   zdks (ji+1,jj) + zdk1s(ji,jj)      & 
    171                   &                              + zdk1s(ji+1,jj) + zdks (ji,jj)  )  ) 
    172  
    173                zfsv(ji,jj,jk) = vmask(ji,jj,jk) * (   zabe2 * (   sb(ji,jj+1,jk) - sb(ji,jj,jk)  )   & 
    174                   &                              + zcof2 * (   zdks (ji,jj+1) + zdk1s(ji,jj)      & 
    175                   &                              + zdk1s(ji,jj+1) + zdks (ji,jj)  )  ) 
    176             END DO 
    177          END DO 
    178  
    179 #   if defined key_traldf_eiv 
    180          !                              ! ---------------------------------------! 
    181          !                              ! Eddy induced vertical advective fluxes ! 
    182          !                              ! ---------------------------------------! 
    183             DO jj = 1, jpjm1 
    184                DO ji = 1, fs_jpim1   ! vector opt. 
    185                   zuwk = ( wslpi(ji,jj,jk  ) + wslpi(ji+1,jj,jk  ) ) * fsaeiu(ji,jj,jk  ) * umask(ji,jj,jk  ) 
    186                   zuwk1= ( wslpi(ji,jj,jk+1) + wslpi(ji+1,jj,jk+1) ) * fsaeiu(ji,jj,jk+1) * umask(ji,jj,jk+1) 
    187                   zvwk = ( wslpj(ji,jj,jk  ) + wslpj(ji,jj+1,jk  ) ) * fsaeiv(ji,jj,jk  ) * vmask(ji,jj,jk  ) 
    188                   zvwk1= ( wslpj(ji,jj,jk+1) + wslpj(ji,jj+1,jk+1) ) * fsaeiv(ji,jj,jk+1) * vmask(ji,jj,jk+1) 
    189     
    190                   zcg1= -0.25 * e2u(ji,jj) * umask(ji,jj,jk) * ( zuwk-zuwk1 ) 
    191                   zcg2= -0.25 * e1v(ji,jj) * vmask(ji,jj,jk) * ( zvwk-zvwk1 ) 
    192     
    193                   zftug(ji,jj) = zcg1 * ( tb(ji+1,jj,jk) + tb(ji,jj,jk) ) 
    194                   zftvg(ji,jj) = zcg2 * ( tb(ji,jj+1,jk) + tb(ji,jj,jk) ) 
    195                   zfsug(ji,jj) = zcg1 * ( sb(ji+1,jj,jk) + sb(ji,jj,jk) ) 
    196                   zfsvg(ji,jj) = zcg2 * ( sb(ji,jj+1,jk) + sb(ji,jj,jk) ) 
    197     
    198                   zftu(ji,jj,jk) = zftu(ji,jj,jk) + zftug(ji,jj) 
    199                   zftv(ji,jj,jk) = zftv(ji,jj,jk) + zftvg(ji,jj) 
    200                   zfsu(ji,jj,jk) = zfsu(ji,jj,jk) + zfsug(ji,jj) 
    201                   zfsv(ji,jj,jk) = zfsv(ji,jj,jk) + zfsvg(ji,jj) 
    202 #   if defined key_diaeiv 
    203                   u_eiv(ji,jj,jk) = -2. * zcg1 / ( e2u(ji,jj) * fse3u(ji,jj,jk) ) 
    204                   v_eiv(ji,jj,jk) = -2. * zcg2 / ( e1v(ji,jj) * fse3v(ji,jj,jk) ) 
    205 #   endif 
    206                END DO 
    207             END DO 
    208 #   endif 
     201               zftu(ji,jj   ) = (  zabe1 * zdit(ji,jj,jk)   & 
     202                  &              + zcof1 * (  zdkt (ji+1,jj) + zdk1t(ji,jj)      & 
     203                  &                         + zdk1t(ji+1,jj) + zdkt (ji,jj)  )  ) * umask(ji,jj,jk) 
     204               zftv(ji,jj,jk) = (  zabe2 * zdjt(ji,jj,jk)   & 
     205                  &              + zcof2 * (  zdkt (ji,jj+1) + zdk1t(ji,jj)      & 
     206                  &                         + zdk1t(ji,jj+1) + zdkt (ji,jj)  )  ) * vmask(ji,jj,jk) 
     207               zfsu(ji,jj   ) = (  zabe1 * zdis(ji,jj,jk)   & 
     208                  &              + zcof1 * (  zdks (ji+1,jj) + zdk1s(ji,jj)      & 
     209                  &                         + zdk1s(ji+1,jj) + zdks (ji,jj)  )  ) * umask(ji,jj,jk) 
     210               zfsv(ji,jj,jk) = (  zabe2 * zdjs(ji,jj,jk)   & 
     211                  &              + zcof2 * (  zdks (ji,jj+1) + zdk1s(ji,jj)      & 
     212                  &                         + zdk1s(ji,jj+1) + zdks (ji,jj)  )  ) * vmask(ji,jj,jk) 
     213            END DO 
     214         END DO 
     215 
    209216 
    210217         ! II.4 Second derivative (divergence) and add to the general trend 
     
    214221            DO ji = fs_2, fs_jpim1   ! vector opt. 
    215222               zbtr= 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
    216                zta = zbtr * (  zftu(ji,jj,jk) - zftu(ji-1,jj  ,jk)   & 
    217                   &          + zftv(ji,jj,jk) - zftv(ji  ,jj-1,jk)  ) 
    218                zsa = zbtr * (  zfsu(ji,jj,jk) - zfsu(ji-1,jj  ,jk)   & 
    219                   &          + zfsv(ji,jj,jk) - zfsv(ji  ,jj-1,jk)  ) 
     223               zta = zbtr * ( zftu(ji,jj   ) - zftu(ji-1,jj   ) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  ) 
     224               zsa = zbtr * ( zfsu(ji,jj   ) - zfsu(ji-1,jj   ) + zfsv(ji,jj,jk) - zfsv(ji,jj-1,jk)  ) 
    220225               ta (ji,jj,jk) = ta (ji,jj,jk) + zta 
    221226               sa (ji,jj,jk) = sa (ji,jj,jk) + zsa 
     
    226231      !                                             ! =============== 
    227232 
    228       ! save the trends for diagnostic 
    229       ! save the horizontal diffusive trends 
    230       IF( l_trdtra )   THEN 
    231 #   if defined key_traldf_eiv 
    232          DO jk = 1 , jpkm1 
    233             DO jj = 2 , jpjm1 
    234                DO ji = fs_2, fs_jpim1   ! vector opt. 
    235                   zbtr= 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
    236                   tladi(ji,jj,jk) = ( zftug(ji,jj) - zftug(ji-1,jj  ) ) * zbtr 
    237                   tladj(ji,jj,jk) = ( zftvg(ji,jj) - zftvg(ji  ,jj-1) ) * zbtr 
    238                   sladi(ji,jj,jk) = ( zfsug(ji,jj) - zfsug(ji-1,jj  ) ) * zbtr 
    239                   sladj(ji,jj,jk) = ( zfsvg(ji,jj) - zfsvg(ji  ,jj-1) ) * zbtr 
    240                END DO 
    241             END DO 
    242          END DO 
    243 #   else 
    244          tladi(:,:,:) = 0.e0 
    245          tladj(:,:,:) = 0.e0 
    246          sladi(:,:,:) = 0.e0 
    247          sladj(:,:,:) = 0.e0 
    248 #   endif 
    249          
    250          ! Substract the eddy induced velocity for T/S 
    251          ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) - tladi(:,:,:) - tladj(:,:,:)  
    252          ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) - sladi(:,:,:) - sladj(:,:,:)  
    253  
    254          CALL trd_mod(ztdta, ztdsa, jpttdldf, 'TRA', kt) 
    255       ENDIF 
    256  
    257       IF(ln_ctl) THEN         ! print mean trends (used for debugging) 
    258          CALL prt_ctl(tab3d_1=ta, clinfo1=' ldf  - Ta: ', mask1=tmask, & 
    259             &         tab3d_2=sa, clinfo2=' Sa: ', mask2=tmask, clinfo3='tra') 
    260       ENDIF 
    261  
    262       !!bug  no separation of diff iso and eiv 
    263233      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
    264234         ! "zonal" mean lateral diffusive heat and salt transports 
    265235         pht_ldf(:) = ptr_vj( zftv(:,:,:) ) 
    266236         pst_ldf(:) = ptr_vj( zfsv(:,:,:) ) 
    267          ! "zonal" mean lateral eddy induced velocity heat and salt transports 
    268 #if defined key_diaeiv 
    269          pht_eiv(:) = ptr_vj( zftv(:,:,:) ) 
    270          pst_eiv(:) = ptr_vj( zfsv(:,:,:) ) 
    271 #endif 
    272237      ENDIF 
    273238 
     239      !!---------------------------------------------------------------------- 
     240      !!   III - vertical trend of T & S (extra diagonal terms only) 
     241      !!---------------------------------------------------------------------- 
     242 
     243      ! Local constant initialization 
     244      ! ----------------------------- 
     245      ztfw(1,:,:) = 0.e0     ;     ztfw(jpi,:,:) = 0.e0 
     246      zsfw(1,:,:) = 0.e0     ;     zsfw(jpi,:,:) = 0.e0 
     247 
     248 
     249      ! Vertical fluxes 
     250      ! --------------- 
     251 
     252      ! Surface and bottom vertical fluxes set to zero 
     253      ztfw(:,:, 1 ) = 0.e0      ;      ztfw(:,:,jpk) = 0.e0 
     254      zsfw(:,:, 1 ) = 0.e0      ;      zsfw(:,:,jpk) = 0.e0 
     255 
     256      ! interior (2=<jk=<jpk-1) 
     257      DO jk = 2, jpkm1 
     258         DO jj = 2, jpjm1 
     259            DO ji = fs_2, fs_jpim1   ! vector opt. 
     260               zcoef0 = - fsahtw(ji,jj,jk) * tmask(ji,jj,jk) 
     261 
     262               zmsku = 1./MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)      & 
     263                  &            + umask(ji-1,jj,jk-1) + umask(ji  ,jj,jk), 1.  ) 
     264 
     265               zmskv = 1./MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)      & 
     266                  &            + vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk), 1.  ) 
     267 
     268               zcoef3 = zcoef0 * e2t(ji,jj) * zmsku * wslpi (ji,jj,jk) 
     269               zcoef4 = zcoef0 * e1t(ji,jj) * zmskv * wslpj (ji,jj,jk) 
     270 
     271               ztfw(ji,jj,jk) = zcoef3 * (   zdit(ji  ,jj  ,jk-1) + zdit(ji-1,jj  ,jk)      & 
     272                  &                        + zdit(ji-1,jj  ,jk-1) + zdit(ji  ,jj  ,jk)  )   & 
     273                  &           + zcoef4 * (   zdjt(ji  ,jj  ,jk-1) + zdjt(ji  ,jj-1,jk)      & 
     274                  &                        + zdjt(ji  ,jj-1,jk-1) + zdjt(ji  ,jj  ,jk)  ) 
     275 
     276               zsfw(ji,jj,jk) = zcoef3 * (   zdis(ji  ,jj  ,jk-1) + zdis(ji-1,jj  ,jk)      & 
     277                  &                        + zdis(ji-1,jj  ,jk-1) + zdis(ji  ,jj  ,jk)  )   & 
     278                  &           + zcoef4 * (   zdjs(ji  ,jj  ,jk-1) + zdjs(ji  ,jj-1,jk)      & 
     279                  &                        + zdjs(ji  ,jj-1,jk-1) + zdjs(ji  ,jj  ,jk)  ) 
     280            END DO 
     281         END DO 
     282      END DO 
     283 
     284 
     285      ! I.5 Divergence of vertical fluxes added to the general tracer trend 
     286      ! ------------------------------------------------------------------- 
     287 
     288      DO jk = 1, jpkm1 
     289         DO jj = 2, jpjm1 
     290            DO ji = fs_2, fs_jpim1   ! vector opt. 
     291               zbtr =  1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
     292               zta  = (  ztfw(ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * zbtr 
     293               zsa  = (  zsfw(ji,jj,jk) - zsfw(ji,jj,jk+1)  ) * zbtr 
     294               ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     295               sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     296            END DO 
     297         END DO 
     298      END DO 
     299 
    274300   END SUBROUTINE tra_ldf_iso 
    275301 
    276302#else 
    277303   !!---------------------------------------------------------------------- 
    278    !!   Dummy module :             No rotation of the lateral mixing tensor 
     304   !!   default option :   Dummy code   NO rotation of the diffusive tensor 
    279305   !!---------------------------------------------------------------------- 
    280306CONTAINS 
    281307   SUBROUTINE tra_ldf_iso( kt )               ! Empty routine 
     308      INTEGER :: kt 
    282309      WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt 
    283310   END SUBROUTINE tra_ldf_iso 
Note: See TracChangeset for help on using the changeset viewer.