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_muscl.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_muscl.F90

    r132 r216  
    1212   USE oce             ! ocean dynamics and active tracers 
    1313   USE dom_oce         ! ocean space and time domain 
    14    USE trdtra_oce      ! ocean active tracer trends 
     14   USE trdmod          ! ocean active tracers trends  
     15   USE trdmod_oce      ! ocean variables trends 
    1516   USE in_out_manager  ! I/O manager 
    1617   USE dynspg_fsc      ! surface pressure gradient  
    1718   USE dynspg_fsc_atsk ! autotasked surface pressure gradient 
    1819   USE trabbl          ! tracers: bottom boundary layer 
    19    USE lib_mpp 
     20   USE lib_mpp         ! distribued memory computing 
    2021   USE lbclnk          ! ocean lateral boundary condition (or mpp link)  
    2122   USE diaptr          ! poleward transport diagnostics 
     
    3940      !!---------------------------------------------------------------------- 
    4041      !!                    ***  ROUTINE tra_adv_muscl  *** 
    41       !!           
     42      !! 
    4243      !! ** Purpose :   Compute the now trend due to total advection of T and  
    4344      !!      S using a MUSCL scheme (Monotone Upstream-centered Scheme for 
    4445      !!      Conservation Laws) and add it to the general tracer trend. 
    4546      !! 
    46       !! ** Method  : 
     47      !! ** Method  : MUSCL scheme plus centered scheme at ocean boundaries 
    4748      !! 
    4849      !! ** Action  : - update (ta,sa) with the now advective tracer trends 
    49       !!              - save trends in (ttrdh,ttrd,strdh,strd) ('key_trdtra') 
     50      !!              - save trends in (ztdta,ztdsa) ('key_trdtra') 
    5051      !! 
    5152      !! References :                 
     
    5758      !!        !  01-08  (E.Durand G.Madec)  adapted for T & S 
    5859      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module 
     60      !!   9.0  !  04-08  (C. Talandier) New trends organization 
    5961      !!---------------------------------------------------------------------- 
    6062      !! * modules used 
     
    7476      !! * Local declarations 
    7577      INTEGER ::   ji, jj, jk               ! dummy loop indices 
     78      REAL(wp) ::   & 
     79         zu, zv, zw, zeu, zev,           &   
     80         zew, zbtr, zstep,               & 
     81         z0u, z0v, z0w,                  & 
     82         zzt1, zzt2, zalpha,             & 
     83         zzs1, zzs2, z2,                 & 
     84         zta, zsa                           
    7685      REAL(wp), DIMENSION (jpi,jpj,jpk) ::   & 
    77          zt1, zt2, ztp1, ztp2,   & 
    78          zs1, zs2, zsp1, zsp2 
    79       REAL(wp) ::   zu, zv, zw, zeu, zev, zew, zbtr, zstep, zta, zsa 
    80       REAL(wp) ::   z0u, z0v, z0w 
    81       REAL(wp) ::   zzt1, zzt2, zalpha 
    82       REAL(wp) ::   zzs1, zzs2 
    83       REAL(wp) ::   z2 
    84 #if defined key_trdtra || defined key_trdmld 
    85       REAL(wp) ::   ztai, ztaj, zsai, zsaj 
    86       REAL(wp) ::   zfui, zfvj 
    87 #endif 
     86         zt1, zt2, ztp1, ztp2,               & 
     87         zs1, zs2, zsp1, zsp2,               & 
     88         ztdta, ztdsa 
    8889      !!---------------------------------------------------------------------- 
    8990 
     
    100101      ENDIF 
    101102 
     103      ! Save ta and sa trends 
     104      IF( l_trdtra )   THEN 
     105         ztdta(:,:,:) = ta(:,:,:)  
     106         ztdsa(:,:,:) = sa(:,:,:)  
     107         l_adv = 'mus' 
     108      ENDIF 
     109 
    102110#if defined key_trabbl_adv 
    103  
    104111      ! Advective bottom boundary layer 
    105112      ! ------------------------------- 
     
    216223 
    217224      ! lateral boundary conditions on zt1, zt2 ; zs1, zs2   (changed sign) 
    218       CALL lbc_lnk( zt1, 'U', -1. )   ;   CALL lbc_lnk( zs1, 'U', -1. )   
     225      CALL lbc_lnk( zt1, 'U', -1. )   ;   CALL lbc_lnk( zs1, 'U', -1. )  
    219226      CALL lbc_lnk( zt2, 'V', -1. )   ;   CALL lbc_lnk( zs2, 'V', -1. ) 
     227 
     228      ! Save MUSCL fluxes to compute i- & j- horizontal  
     229      ! advection trends in the MLD 
     230      IF( l_trdtra )   THEN 
     231         ! save i- terms 
     232         tladi(:,:,:) = zt1(:,:,:)  
     233         sladi(:,:,:) = zs1(:,:,:)  
     234         ! save j- terms 
     235         tladj(:,:,:) = zt2(:,:,:)  
     236         sladj(:,:,:) = zs2(:,:,:)  
     237      ENDIF 
    220238 
    221239      ! Compute & add the horizontal advective trend 
     
    237255               ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
    238256               sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
    239 #if defined key_trdtra || defined key_trdmld 
    240                ! save the horizontal advective trend of tracer 
    241                ttrd(ji,jj,jk,1) = zta + tn(ji,jj,jk) * hdivn(ji,jj,jk) 
    242                strd(ji,jj,jk,1) = zsa + sn(ji,jj,jk) * hdivn(ji,jj,jk) 
    243                ! recompute the trends in i- and j-direction as Uh gradh(T) 
    244 #   if defined key_s_coord || defined key_partial_steps 
    245                zfui =  e2u(ji  ,jj) * fse3u(ji,  jj,jk) * un(ji,  jj,jk)   & 
    246                   & -  e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * un(ji-1,jj,jk) 
    247                zfvj =  e1v(ji,jj  ) * fse3v(ji,jj  ,jk) * vn(ji,jj  ,jk)   & 
    248                   & -  e1v(ji,jj-1) * fse3v(ji,jj-1,jk) * vn(ji,jj-1,jk) 
    249 #   else 
    250                zfui = e2u(ji  ,jj) * un(ji,  jj,jk)   & 
    251                   & - e2u(ji-1,jj) * un(ji-1,jj,jk) 
    252                zfvj = e1v(ji,jj  ) * vn(ji,jj  ,jk)   & 
    253                   & - e1v(ji,jj-1) * vn(ji,jj-1,jk) 
    254 #   endif 
    255                ztai =-zbtr * (  zt1(ji,jj,jk) - zt1(ji-1,jj  ,jk) - tn(ji,jj,jk) * zfui  ) 
    256                ztaj =-zbtr * (  zt2(ji,jj,jk) - zt2(ji  ,jj-1,jk) - tn(ji,jj,jk) * zfvj  ) 
    257                zsai =-zbtr * (  zs1(ji,jj,jk) - zs1(ji-1,jj  ,jk) - sn(ji,jj,jk) * zfui  ) 
    258                zsaj =-zbtr * (  zs2(ji,jj,jk) - zs2(ji  ,jj-1,jk) - sn(ji,jj,jk) * zfvj  ) 
    259                ! save i- and j- advective trends computed as Uh gradh(T) 
    260                ttrdh(ji,jj,jk,1) = ztai 
    261                ttrdh(ji,jj,jk,2) = ztaj 
    262                strdh(ji,jj,jk,1) = zsai 
    263                strdh(ji,jj,jk,2) = zsaj 
    264 #endif 
    265257            END DO 
    266258        END DO 
    267259      END DO         
     260 
     261      ! Save the horizontal advective trends for diagnostic 
     262 
     263      IF( l_trdtra )   THEN 
     264         ! Recompute the horizontal advection zta & zsa trends computed  
     265         ! at the step 2. above in making the difference between the new  
     266         ! trends and the previous one ta()/sa - ztdta()/ztdsa() and add 
     267         ! the term tn()/sn()*hdivn() to recover the Uh gradh(T/S) trends 
     268         ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) + tn(:,:,:) * hdivn(:,:,:)  
     269         ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) + sn(:,:,:) * hdivn(:,:,:) 
     270 
     271         CALL trd_mod(ztdta, ztdsa, jpttdlad, 'TRA', kt) 
     272 
     273         ! Save the new ta and sa trends 
     274         ztdta(:,:,:) = ta(:,:,:)  
     275         ztdsa(:,:,:) = sa(:,:,:)  
     276 
     277      ENDIF 
    268278 
    269279      IF(l_ctl) THEN 
     
    274284      ENDIF 
    275285 
    276       ! "zonal" mean advective heat and salt transport  
     286      ! "zonal" mean advective heat and salt transport 
    277287      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
    278288# if defined key_s_coord || defined key_partial_steps 
     
    361371         zt1(:,:, 1 ) = zwn(:,:,1) * tb(:,:,1) 
    362372         zs1(:,:, 1 ) = zwn(:,:,1) * sb(:,:,1) 
    363       ELSE                                  ! rigid lid : flux set to zero 
     373      ELSE                                              ! rigid lid : flux set to zero 
    364374         zt1(:,:, 1 ) = 0.e0 
    365375         zs1(:,:, 1 ) = 0.e0 
    366376      ENDIF 
     377 
    367378      ! bottom values 
    368379      zt1(:,:,jpk) = 0.e0 
     
    382393               ta(ji,jj,jk) =  ta(ji,jj,jk) + zta 
    383394               sa(ji,jj,jk) =  sa(ji,jj,jk) + zsa 
    384 #if defined key_trdtra || defined key_trdmld 
    385                ! save the vertical advective trends computed as w gradz(T) 
    386                ttrd(ji,jj,jk,2) = zta - tn(ji,jj,jk) * hdivn(ji,jj,jk) 
    387                strd(ji,jj,jk,2) = zsa - sn(ji,jj,jk) * hdivn(ji,jj,jk) 
    388 #endif 
    389             END DO 
    390          END DO 
    391       END DO 
     395            END DO 
     396         END DO 
     397      END DO 
     398 
     399      ! Save the vertical advective trends for diagnostic 
     400 
     401      IF( l_trdtra )   THEN 
     402         ! Recompute the vertical advection zta & zsa trends computed  
     403         ! at the step 2. above in making the difference between the new  
     404         ! trends and the previous one: ta()/sa - ztdta()/ztdsa() and substract 
     405         ! the term tn()/sn()*hdivn() to recover the W gradz(T/S) trends 
     406         ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) - tn(:,:,:) * hdivn(:,:,:)  
     407         ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) - sn(:,:,:) * hdivn(:,:,:) 
     408 
     409         CALL trd_mod(ztdta, ztdsa, jpttdzad, 'TRA', kt) 
     410      ENDIF 
    392411 
    393412      IF(l_ctl) THEN 
Note: See TracChangeset for help on using the changeset viewer.