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 786 for branches/dev_001_GM/NEMO/OPA_SRC/TRA/traldf_iso.F90 – NEMO

Ignore:
Timestamp:
2008-01-10T18:11:23+01:00 (16 years ago)
Author:
gm
Message:

dev_001_GM - merge TRC-TRA on OPA only, trabbl & zpshde not done and trdmld not OK - compilation OK

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_001_GM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r719 r786  
    44   !! Ocean active tracers:  horizontal component of the lateral tracer mixing trend 
    55   !!====================================================================== 
    6    !! History :        !  94-08  (G. Madec, M. Imbard) 
    7    !!                  !  97-05  (G. Madec)  split into traldf and trazdf 
    8    !!             8.5  !  02-08  (G. Madec)  Free form, F90 
    9    !!             9.0  !  05-11  (G. Madec)  merge traldf and trazdf :-) 
     6   !! History :  OPA  !  1994-08  (G. Madec, M. Imbard) 
     7   !!                 !  1997-05  (G. Madec)  split into traldf and trazdf 
     8   !!            NEMO !  2002-08  (G. Madec)  Free form, F90 
     9   !!            1.0  !  2005-11  (G. Madec)  merge traldf and trazdf :-) 
     10   !!            2.4  !  2008-01  (G. Madec) Merge TRA-TRC 
    1011   !!---------------------------------------------------------------------- 
    1112#if   defined key_ldfslp   ||   defined key_esopa 
     
    2021   !!                  vector optimization, use k-j-i loops. 
    2122   !!---------------------------------------------------------------------- 
    22    USE oce             ! ocean dynamics and active tracers 
    2323   USE dom_oce         ! ocean space and time domain 
    2424   USE ldftra_oce      ! ocean active tracers: lateral physics 
    25    USE trdmod          ! ocean active tracers trends  
    26    USE trdmod_oce      ! ocean variables trends 
    2725   USE zdf_oce         ! ocean vertical physics 
    2826   USE in_out_manager  ! I/O manager 
     
    4139#  include "vectopt_loop_substitute.h90" 
    4240   !!---------------------------------------------------------------------- 
    43    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    44    !! $Header$  
     41   !! NEMO/OPA 2.4 , LOCEAN-IPSL (2008)  
     42   !! $Id:$  
    4543   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    4644   !!---------------------------------------------------------------------- 
     
    4846CONTAINS 
    4947 
    50    SUBROUTINE tra_ldf_iso( kt ) 
     48   SUBROUTINE tra_ldf_iso( kt, cdtype, ktra, pgtu, pgtv,   & 
     49      &                                      ptb , pta   ) 
    5150      !!---------------------------------------------------------------------- 
    5251      !!                  ***  ROUTINE tra_ldf_iso  *** 
     
    8988      !!            trend (except the dk[ dk[.] ] term) 
    9089      !!---------------------------------------------------------------------- 
    91       USE oce           , zftv => ua   ! use ua as workspace 
    92       USE oce           , zfsv => va   ! use va as workspace 
    93       !! 
    94       INTEGER, INTENT( in ) ::   kt    ! ocean time-step index 
     90      INTEGER         , INTENT(in   )                         ::   kt              ! ocean time-step index 
     91      CHARACTER(len=3), INTENT(in   )                         ::   cdtype          ! =TRA or TRC (tracer indicator) 
     92      INTEGER         , INTENT(in   )                         ::   ktra            ! tracer index 
     93      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj)     ::   pgtu, pgtv      ! tracer gradient at pstep levels 
     94      REAL(wp)        , INTENT(in   ), DIMENSION(jpi,jpj,jpk) ::   ptb             ! before tracer field 
     95      REAL(wp)        , INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pta             ! tracer trend  
    9596      !! 
    9697      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    9798      INTEGER  ::   iku, ikv     ! temporary integer 
    98       REAL(wp) ::   zmsku, zabe1, zcof1, zcoef3, zta   ! temporary scalars 
    99       REAL(wp) ::   zmskv, zabe2, zcof2, zcoef4, zsa   !    "         " 
     99      REAL(wp) ::   zmsku, zabe1, zcof1, zcoef3   ! temporary scalars 
     100      REAL(wp) ::   zmskv, zabe2, zcof2, zcoef4   !    "         " 
    100101      REAL(wp) ::   zcoef0, zbtr                       !    "         " 
    101102      REAL(wp), DIMENSION(jpi,jpj)     ::   zdkt , zdk1t, zftu   ! 2D workspace 
    102       REAL(wp), DIMENSION(jpi,jpj)     ::   zdks , zdk1s, zfsu   !    "           " 
    103       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, ztfw     ! 3D workspace 
    104       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdis, zdjs, zsfw     !  "      " 
     103      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, ztfw, zftv     ! 3D workspace 
    105104      !!---------------------------------------------------------------------- 
    106105 
     
    116115!!bug ajout.... why?   ( 1,jpj,:) and (jpi,1,:) should be sufficient.... 
    117116      zdit (1,:,:) = 0.e0     ;     zdit (jpi,:,:) = 0.e0 
    118       zdis (1,:,:) = 0.e0     ;     zdis (jpi,:,:) = 0.e0 
    119117      zdjt (1,:,:) = 0.e0     ;     zdjt (jpi,:,:) = 0.e0 
    120       zdjs (1,:,:) = 0.e0     ;     zdjs (jpi,:,:) = 0.e0 
    121118!!end 
    122119 
     
    125122         DO jj = 1, jpjm1 
    126123            DO ji = 1, fs_jpim1   ! vector opt. 
    127                zdit(ji,jj,jk) = ( tb(ji+1,jj  ,jk) - tb(ji,jj,jk) ) * umask(ji,jj,jk) 
    128                zdis(ji,jj,jk) = ( sb(ji+1,jj  ,jk) - sb(ji,jj,jk) ) * umask(ji,jj,jk) 
    129                zdjt(ji,jj,jk) = ( tb(ji  ,jj+1,jk) - tb(ji,jj,jk) ) * vmask(ji,jj,jk) 
    130                zdjs(ji,jj,jk) = ( sb(ji  ,jj+1,jk) - sb(ji,jj,jk) ) * vmask(ji,jj,jk) 
     124               zdit(ji,jj,jk) = ( ptb(ji+1,jj  ,jk) - ptb(ji,jj,jk) ) * umask(ji,jj,jk) 
     125               zdjt(ji,jj,jk) = ( ptb(ji  ,jj+1,jk) - ptb(ji,jj,jk) ) * vmask(ji,jj,jk) 
    131126            END DO 
    132127         END DO 
     
    138133               iku = MIN( mbathy(ji,jj), mbathy(ji+1,jj  ) ) - 1 
    139134               ikv = MIN( mbathy(ji,jj), mbathy(ji  ,jj+1) ) - 1 
    140                zdit(ji,jj,iku) = gtu(ji,jj)  
    141                zdis(ji,jj,iku) = gsu(ji,jj)                
    142                zdjt(ji,jj,ikv) = gtv(ji,jj)  
    143                zdjs(ji,jj,ikv) = gsv(ji,jj)                
     135               zdit(ji,jj,iku) = pgtu(ji,jj)  
     136               zdjt(ji,jj,ikv) = pgtv(ji,jj)  
    144137            END DO 
    145138         END DO 
     
    150143      !!---------------------------------------------------------------------- 
    151144       
    152 !CDIR PARALLEL DO PRIVATE( zdk1t, zdk1s, zftu, zfsu )  
    153 !$OMP PARALLEL DO PRIVATE( zdk1t, zdk1s, zftu, zfsu ) 
     145!CDIR PARALLEL DO PRIVATE( zdk1t, zftu )  
     146!$OMP PARALLEL DO PRIVATE( zdk1t, zftu ) 
    154147      !                                                ! =============== 
    155148      DO jk = 1, jpkm1                                 ! Horizontal slab 
     
    159152         ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 
    160153 
    161          zdk1t(:,:) = ( tb(:,:,jk) - tb(:,:,jk+1) ) * tmask(:,:,jk+1) 
    162          zdk1s(:,:) = ( sb(:,:,jk) - sb(:,:,jk+1) ) * tmask(:,:,jk+1) 
     154         zdk1t(:,:) = ( ptb(:,:,jk) - ptb(:,:,jk+1) ) * tmask(:,:,jk+1) 
    163155 
    164156         IF( jk == 1 ) THEN 
    165157            zdkt(:,:) = zdk1t(:,:) 
    166             zdks(:,:) = zdk1s(:,:) 
    167158         ELSE 
    168             zdkt(:,:) = ( tb(:,:,jk-1) - tb(:,:,jk) ) * tmask(:,:,jk) 
    169             zdks(:,:) = ( sb(:,:,jk-1) - sb(:,:,jk) ) * tmask(:,:,jk) 
     159            zdkt(:,:) = ( ptb(:,:,jk-1) - ptb(:,:,jk) ) * tmask(:,:,jk) 
    170160         ENDIF 
    171161 
     
    194184                  &              + zcof2 * (  zdkt (ji,jj+1) + zdk1t(ji,jj)      & 
    195185                  &                         + zdk1t(ji,jj+1) + zdkt (ji,jj)  )  ) * vmask(ji,jj,jk) 
    196                zfsu(ji,jj   ) = (  zabe1 * zdis(ji,jj,jk)   & 
    197                   &              + zcof1 * (  zdks (ji+1,jj) + zdk1s(ji,jj)      & 
    198                   &                         + zdk1s(ji+1,jj) + zdks (ji,jj)  )  ) * umask(ji,jj,jk) 
    199                zfsv(ji,jj,jk) = (  zabe2 * zdjs(ji,jj,jk)   & 
    200                   &              + zcof2 * (  zdks (ji,jj+1) + zdk1s(ji,jj)      & 
    201                   &                         + zdk1s(ji,jj+1) + zdks (ji,jj)  )  ) * vmask(ji,jj,jk) 
    202186            END DO 
    203187         END DO 
     
    208192         DO jj = 2 , jpjm1 
    209193            DO ji = fs_2, fs_jpim1   ! vector opt. 
    210                zbtr= 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
    211                zta = zbtr * ( zftu(ji,jj   ) - zftu(ji-1,jj   ) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  ) 
    212                zsa = zbtr * ( zfsu(ji,jj   ) - zfsu(ji-1,jj   ) + zfsv(ji,jj,jk) - zfsv(ji,jj-1,jk)  ) 
    213                ta (ji,jj,jk) = ta (ji,jj,jk) + zta 
    214                sa (ji,jj,jk) = sa (ji,jj,jk) + zsa 
     194               zbtr= 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     195               pta(ji,jj,jk) = pta(ji,jj,jk)   & 
     196                  &          + zbtr * ( zftu(ji,jj   ) - zftu(ji-1,jj   ) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  ) 
    215197            END DO 
    216198         END DO 
     
    219201      !                                             ! =============== 
    220202 
    221       IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN   ! Poleward diffusive heat and salt transports 
    222          pht_ldf(:) = ptr_vj( zftv(:,:,:) ) 
    223          pst_ldf(:) = ptr_vj( zfsv(:,:,:) ) 
     203      ! "Poleward" diffusive heat or salt transports 
     204      IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
     205         IF( ktra == jp_tem)   pht_ldf(:) = ptr_vj( zftv(:,:,:) ) 
     206         IF( ktra == jp_sal)   pst_ldf(:) = ptr_vj( zftv(:,:,:) ) 
    224207      ENDIF 
    225208 
     
    231214      ! ----------------------------- 
    232215      ztfw(1,:,:) = 0.e0     ;     ztfw(jpi,:,:) = 0.e0 
    233       zsfw(1,:,:) = 0.e0     ;     zsfw(jpi,:,:) = 0.e0 
    234216 
    235217 
     
    239221      ! Surface and bottom vertical fluxes set to zero 
    240222      ztfw(:,:, 1 ) = 0.e0      ;      ztfw(:,:,jpk) = 0.e0 
    241       zsfw(:,:, 1 ) = 0.e0      ;      zsfw(:,:,jpk) = 0.e0 
    242223 
    243224      ! interior (2=<jk=<jpk-1) 
     
    260241                  &           + zcoef4 * (   zdjt(ji  ,jj  ,jk-1) + zdjt(ji  ,jj-1,jk)      & 
    261242                  &                        + zdjt(ji  ,jj-1,jk-1) + zdjt(ji  ,jj  ,jk)  ) 
    262  
    263                zsfw(ji,jj,jk) = zcoef3 * (   zdis(ji  ,jj  ,jk-1) + zdis(ji-1,jj  ,jk)      & 
    264                   &                        + zdis(ji-1,jj  ,jk-1) + zdis(ji  ,jj  ,jk)  )   & 
    265                   &           + zcoef4 * (   zdjs(ji  ,jj  ,jk-1) + zdjs(ji  ,jj-1,jk)      & 
    266                   &                        + zdjs(ji  ,jj-1,jk-1) + zdjs(ji  ,jj  ,jk)  ) 
    267243            END DO 
    268244         END DO 
     
    276252         DO jj = 2, jpjm1 
    277253            DO ji = fs_2, fs_jpim1   ! vector opt. 
    278                zbtr =  1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
    279                zta  = (  ztfw(ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * zbtr 
    280                zsa  = (  zsfw(ji,jj,jk) - zsfw(ji,jj,jk+1)  ) * zbtr 
    281                ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
    282                sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     254               zbtr =  1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     255               pta(ji,jj,jk) = pta(ji,jj,jk) + (  ztfw(ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * zbtr 
    283256            END DO 
    284257         END DO 
Note: See TracChangeset for help on using the changeset viewer.