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

Ignore:
Timestamp:
2005-03-17T15:02:38+01:00 (19 years ago)
Author:
opalod
Message:

CT : UPDATE151 : New trends organization

File:
1 edited

Legend:

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

    r132 r216  
    1414   USE oce             ! ocean dynamics and active tracers 
    1515   USE dom_oce         ! ocean space and time domain 
    16    USE trdtra_oce     ! ocean active tracer trends 
     16   USE trdmod          ! ocean active tracers trends  
     17   USE trdmod_oce      ! ocean variables trends 
    1718   USE in_out_manager  ! I/O manager 
    1819   USE dynspg_fsc      ! surface pressure gradient  
     
    6162      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module 
    6263      !!   9.0  !  04-01  (A. de Miranda, G. Madec, J.M. Molines ): advective bbl 
     64      !!   9.0  !  08-04  (S. Cravatte) add the i-, j- & k- trends computation 
    6365      !!---------------------------------------------------------------------- 
    6466      !! * Modules used 
     
    7274                               zwn => wn      !             zwn == wn 
    7375#endif 
     76      USE trdmod_oce         , ztay => tladj,  &  ! use tladj latter 
     77         &                     zsay => sladj,  &  ! use sladj latter 
     78         &                     ztaz => tladi,  &  ! use ua as workspace 
     79         &                     zsaz => sladi      ! use ua as workspace 
     80 
    7481      !! * Arguments 
    7582      INTEGER, INTENT( in ) ::   kt         ! ocean time-step 
     
    7784      !! * Local declarations 
    7885      INTEGER  ::   ji, jj, jk              ! dummy loop indices 
    79       REAL(wp) ::   zta, zsa                ! temporary scalar 
     86      REAL(wp) ::   zta, zsa,            &  ! temporary scalar 
     87         ztai, ztaj, ztak,               &  !    "         "    
     88         zsai, zsaj, zsak                   !    "         "    
    8089      REAL(wp), DIMENSION (jpi,jpj,jpk) ::   & 
    8190         zti, ztu, ztv, ztw,             &  ! temporary workspace 
    82          zsi, zsu, zsv, zsw                 !    "           " 
     91         zsi, zsu, zsv, zsw,             &  !    "           " 
     92         ztdta, ztdsa                       !    "           " 
    8393      REAL(wp) ::   & 
    8494         z2dtt, zbtr, zeu, zev, zew, z2, &  ! temporary scalar 
     
    99109      ENDIF 
    100110 
     111      ! Save ta and sa trends 
     112      IF( l_trdtra )   THEN 
     113         ztdta(:,:,:) = ta(:,:,:)  
     114         ztdsa(:,:,:) = sa(:,:,:)  
     115         l_adv = 'tvd' 
     116      ENDIF 
     117 
    101118#if defined key_trabbl_adv 
    102  
    103119      ! Advective Bottom boundary layer: add the velocity 
    104120      ! ------------------------------------------------- 
     
    147163            END DO 
    148164         END DO 
    149       ELSE                                      ! rigid lid : flux set to zero 
     165      ELSE                                              ! rigid lid : flux set to zero 
    150166         ztw(:,:,1) = 0.e0 
    151167         zsw(:,:,1) = 0.e0 
     
    170186            DO ji = fs_2, fs_jpim1   ! vector opt. 
    171187               zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    172                zti(ji,jj,jk) = - ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk  )   & 
    173                   &              + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  )   & 
    174                   &              + ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
    175                zsi(ji,jj,jk) = - ( zsu(ji,jj,jk) - zsu(ji-1,jj  ,jk  )   & 
    176                   &              + zsv(ji,jj,jk) - zsv(ji  ,jj-1,jk  )   & 
    177                   &              + zsw(ji,jj,jk) - zsw(ji  ,jj  ,jk+1) ) * zbtr 
    178             END DO 
    179          END DO 
    180       END DO 
    181        
     188 
     189               ! i- j- horizontal & k- vertical advective trends 
     190               ztai = - ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk  ) ) * zbtr 
     191               ztaj = - ( ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  ) ) * zbtr 
     192               ztak = - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
     193               zsai = - ( zsu(ji,jj,jk) - zsu(ji-1,jj  ,jk  ) ) * zbtr 
     194               zsaj = - ( zsv(ji,jj,jk) - zsv(ji  ,jj-1,jk  ) ) * zbtr 
     195               zsak = - ( zsw(ji,jj,jk) - zsw(ji  ,jj  ,jk+1) ) * zbtr 
     196 
     197               ! total intermediate advective trends 
     198               zti(ji,jj,jk) = ztai + ztaj + ztak 
     199               zsi(ji,jj,jk) = zsai + zsaj + zsak 
     200            END DO 
     201         END DO 
     202      END DO 
     203 
     204     ! Save the intermediate vertical & j- horizontal advection trends 
     205     IF( l_trdtra )   THEN 
     206         DO jk = 1, jpkm1 
     207            DO jj = 2, jpjm1 
     208               DO ji = fs_2, fs_jpim1   ! vector opt. 
     209                  zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     210                  ztay(ji,jj,jk) = - ( ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  ) ) * zbtr 
     211                  zsay(ji,jj,jk) = - ( zsv(ji,jj,jk) - zsv(ji  ,jj-1,jk  ) ) * zbtr 
     212                  ztaz(ji,jj,jk) = - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
     213                  zsaz(ji,jj,jk) = - ( zsw(ji,jj,jk) - zsw(ji  ,jj  ,jk+1) ) * zbtr 
     214               END DO 
     215            END DO 
     216         END DO 
     217      ENDIF 
    182218 
    183219      ! update and guess with monotonic sheme 
     
    246282      DO jk = 1, jpkm1 
    247283         DO jj = 2, jpjm1 
    248             DO ji = fs_2, fs_jpim1   ! vector opt. 
     284            DO ji = fs_2, fs_jpim1   ! vector opt.   
    249285               zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
    250                ta(ji,jj,jk) = ta(ji,jj,jk)   & 
    251                   &         - ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk  )   & 
    252                   &           + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  )   & 
    253                   &           + ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
    254                sa(ji,jj,jk) = sa(ji,jj,jk)   & 
    255                   &         - ( zsu(ji,jj,jk) - zsu(ji-1,jj  ,jk  )   & 
    256                   &           + zsv(ji,jj,jk) - zsv(ji  ,jj-1,jk  )   & 
    257                   &           + zsw(ji,jj,jk) - zsw(ji  ,jj  ,jk+1) ) * zbtr 
    258             END DO 
    259          END DO 
    260       END DO 
     286               ! i- j- horizontal & k- vertical advective trends 
     287               ztai = - ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk  )) * zbtr 
     288               ztaj = - ( ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  )) * zbtr 
     289               ztak = - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1)) * zbtr 
     290               zsai = - ( zsu(ji,jj,jk) - zsu(ji-1,jj  ,jk  )) * zbtr 
     291               zsaj = - ( zsv(ji,jj,jk) - zsv(ji  ,jj-1,jk  )) * zbtr 
     292               zsak = - ( zsw(ji,jj,jk) - zsw(ji  ,jj  ,jk+1)) * zbtr 
     293 
     294               ! add them to the general tracer trends 
     295               ta(ji,jj,jk) = ta(ji,jj,jk) + ztai + ztaj + ztak 
     296               sa(ji,jj,jk) = sa(ji,jj,jk) + zsai + zsaj + zsak 
     297            END DO 
     298         END DO 
     299      END DO 
     300 
     301      ! save the advective trends for diagnostic 
     302      ! tracers trends 
     303      IF( l_trdtra )   THEN 
     304         ! Compute the final vertical & j- horizontal advection trends 
     305         DO jk = 1, jpkm1 
     306            DO jj = 2, jpjm1 
     307               DO ji = fs_2, fs_jpim1   ! vector opt. 
     308                  zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     309                  ztay(ji,jj,jk) = - ( ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  ) ) * zbtr   & 
     310                     &             + ztay(ji,jj,jk)  
     311                  zsay(ji,jj,jk) = - ( zsv(ji,jj,jk) - zsv(ji  ,jj-1,jk  ) ) * zbtr   & 
     312                     &             + zsay(ji,jj,jk)  
     313                  ztaz(ji,jj,jk) = - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr   & 
     314                     &             + ztaz(ji,jj,jk)  
     315                  zsaz(ji,jj,jk) = - ( zsw(ji,jj,jk) - zsw(ji  ,jj  ,jk+1) ) * zbtr   & 
     316                     &             + zsaz(ji,jj,jk)  
     317               END DO 
     318            END DO 
     319         END DO 
     320 
     321         ! horizontal advection:  
     322         ! make the difference between the new trends ta()/sa() and the  
     323         ! previous one ztdta()/ztdsa() to have the total advection trends  
     324         ! to which we substract the vertical trends ztaz()/zsaz() 
     325         ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) - ztaz(:,:,:) 
     326         ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) - zsaz(:,:,:) 
     327 
     328         ! Add the term tn()/sn()*hdivn() to recover the Uh gradh(T/S) trends 
     329         ztdta(:,:,:) = ztdta(:,:,:) + tn(:,:,:) * hdivn(:,:,:) 
     330         ztdsa(:,:,:) = ztdsa(:,:,:) + sn(:,:,:) * hdivn(:,:,:) 
     331 
     332         CALL trd_mod(ztdta, ztdsa, jpttdlad, 'TRA', kt) 
     333 
     334         ! vertical advection:  
     335         ! Substract the term tn()/sn()*hdivn() to recover the W gradz(T/S) trends 
     336         ztaz(:,:,:) = ztaz(:,:,:) - tn(:,:,:) * hdivn(:,:,:) 
     337         zsaz(:,:,:) = zsaz(:,:,:) - sn(:,:,:) * hdivn(:,:,:) 
     338 
     339         CALL trd_mod(ztaz, zsaz, jpttdzad, 'TRA', kt) 
     340 
     341      ENDIF 
    261342 
    262343      IF(l_ctl) THEN 
Note: See TracChangeset for help on using the changeset viewer.