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 1175 for trunk/NEMO/TOP_SRC/TRP/trcadv_tvd.F90 – NEMO

Ignore:
Timestamp:
2008-09-11T18:26:34+02:00 (16 years ago)
Author:
cetlod
Message:

update transport modules to take into account new trends organization, see ticket:248

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/TRP/trcadv_tvd.F90

    r1152 r1175  
    11MODULE trcadv_tvd 
    2    !!============================================================================== 
     2   !!====================================================================== 
    33   !!                       ***  MODULE  trcadv_tvd  *** 
    44   !! Ocean passive tracers:  horizontal & vertical advective trend 
    5    !!============================================================================== 
     5   !!====================================================================== 
     6   !! History :       !  95-12  (L. Mortier)  Original code 
     7   !!                 !  00-01  (H. Loukos)  adapted to ORCA  
     8   !!                 !  00-10  (MA Foujols E.Kestenare)  include file not routine 
     9   !!                 !  00-12  (E. Kestenare M. Levy)  fix bug in trtrd indexes 
     10   !!                 !  01-07  (E. Durand G. Madec)  adaptation to ORCA config 
     11   !!            9.0  !  02-06  (C. Ethe, G. Madec)  F90: Free form and module 
     12   !!                 !  07-02  (C. Deltel) Diagnose ML trends for passive tracers 
     13   !!---------------------------------------------------------------------- 
    614#if defined key_top 
    7    !!---------------------------------------------------------------------- 
    8    !!   'key_top'                                                TOP models 
    915   !!---------------------------------------------------------------------- 
    1016   !!   trc_adv_tvd  : update the passive tracer trend with the horizontal 
     
    1420   !!---------------------------------------------------------------------- 
    1521   USE oce_trc             ! ocean dynamics and active tracers variables 
    16    USE trp_trc                 ! ocean passive tracers variables 
     22   USE trc                 ! ocean passive tracers variables 
    1723   USE lbclnk              ! ocean lateral boundary conditions (or mpp link) 
    1824   USE trcbbl              ! advective passive tracers in the BBL 
    1925   USE prtctl_trc      ! Print control for debbuging 
     26   USE trdmld_trc 
     27   USE trdmld_trc_oce      
    2028 
    2129   IMPLICIT NONE 
    2230   PRIVATE 
    2331 
    24    !! * Accessibility 
    2532   PUBLIC trc_adv_tvd    ! routine called by trcstp.F90 
    2633 
     
    2936   !!---------------------------------------------------------------------- 
    3037   !!   TOP 1.0 , LOCEAN-IPSL (2005)  
    31    !! $Id$  
    32    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     38   !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/TRP/trcadv_tvd.F90,v 1.12 2006/04/10 15:38:54 opalod Exp $  
     39   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    3340   !!---------------------------------------------------------------------- 
    3441 
     
    4754      !! 
    4855      !! ** Action : - update tra with the now advective tracer trends 
    49       !!             - save the trends in trtrd ('key_trc_diatrd) 
    50       !! 
    51       !! History : 
    52       !!        !  95-12  (L. Mortier)  Original code 
    53       !!        !  00-01  (H. Loukos)  adapted to ORCA  
    54       !!        !  00-10  (MA Foujols E.Kestenare)  include file not routine 
    55       !!        !  00-12  (E. Kestenare M. Levy)  fix bug in trtrd indexes 
    56       !!        !  01-07  (E. Durand G. Madec)  adaptation to ORCA config 
    57       !!   9.0  !  02-06  (C. Ethe, G. Madec)  F90: Free form and module 
     56      !!             - save the trends ('key_trdmld_trc) 
    5857      !!---------------------------------------------------------------------- 
    59       !! * Modules used 
    6058#if defined key_trcbbl_adv 
    6159      USE oce_trc            , zun => ua,  &  ! use ua as workspace 
    62                             zvn => va      ! use va as workspace 
     60           &                   zvn => va      ! use va as workspace 
    6361      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zwn 
    6462#else 
    6563      USE oce_trc            , zun => un,  &  ! When no bbl, zun == un 
    66                                zvn => vn,  &  !             zvn == vn 
    67                                zwn => wn      !             zwn == wn 
     64           &                   zvn => vn,  &  !             zvn == vn 
     65           &                   zwn => wn      !             zwn == wn 
    6866#endif 
    69       !! * Arguments 
    70       INTEGER, INTENT( in ) ::   kt         ! ocean time-step 
    71  
    72       !! * Local declarations 
    73       INTEGER  ::   ji, jj, jk,jn           ! dummy loop indices 
    74  
    75       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    76          zti, ztu, ztv, ztw                ! temporary workspace 
    77  
    78       REAL(wp) ::   & 
    79          z2dtt, zbtr, zeu, zev, zew, z2, &  ! temporary scalar 
    80          zfp_ui, zfp_vj, zfp_wk,         &  !    "         " 
    81          zfm_ui, zfm_vj, zfm_wk             !    "         " 
    82  
    83 #if defined key_trc_diatrd 
    84        REAL(wp) :: & 
    85           zgm, zgz 
    86 #endif 
    87  
     67      INTEGER, INTENT( in ) ::   kt                        ! ocean time-step 
     68      INTEGER  ::   ji, jj, jk, jn                         ! dummy loop indices 
     69      !! 
     70      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   ztu, ztv 
     71      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zti, ztw 
     72      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrtrd  ! trends 
     73      !! 
     74      REAL(wp) ::   z_hdivn_x, z_hdivn_y                   ! temporary scalars 
     75      REAL(wp) ::   z2dtt, zbtr, zeu, zev, zew, z2 
     76      REAL(wp) ::   zfp_ui, zfp_vj, zfp_wk 
     77      REAL(wp) ::   zfm_ui, zfm_vj, zfm_wk 
     78      REAL(wp) ::   zgm, zgz 
    8879      CHARACTER (len=22) :: charout 
    8980      !!---------------------------------------------------------------------- 
     
    9687         WRITE(numout,*) '~~~~~~~~~~~' 
    9788      ENDIF 
     89 
     90      IF( l_trdtrc ) ALLOCATE( ztrtrd(jpi,jpj,jpk) ) 
    9891 
    9992      IF( neuler == 0 .AND. kt == nittrc000 ) THEN 
     
    111104#endif 
    112105 
    113       DO jn = 1, jptra 
     106      !                                                          ! =========== 
     107      DO jn = 1, jptra                                           ! tracer loop 
     108         !                                                       ! =========== 
     109 
     110         ! ============================================================ 
     111         ! I.              Intermediate advective trends 
     112         ! ============================================================ 
    114113 
    115114         ! 1. Bottom value : flux set to zero 
    116          ! --------------- 
    117          ztu(:,:,jpk) = 0.e0 
    118          ztv(:,:,jpk) = 0.e0 
    119          ztw(:,:,jpk) = 0.e0 
    120          zti(:,:,jpk) = 0.e0 
    121  
    122  
    123          ! 2. upstream advection with initial mass fluxes & intermediate update 
     115         ! ---------------------------------- 
     116         ztu(:,:,jpk) = 0.e0    ;    ztv(:,:,jpk) = 0.e0 
     117         ztw(:,:,jpk) = 0.e0    ;    zti(:,:,jpk) = 0.e0 
     118 
     119 
     120         ! 2. Upstream advection with initial mass fluxes & intermediate update 
    124121         ! -------------------------------------------------------------------- 
    125          ! upstream tracer flux in the i and j direction 
     122 
     123         ! ... Upstream tracer flux in the i and j direction 
    126124         DO jk = 1, jpkm1 
    127125            DO jj = 1, jpjm1 
    128126               DO ji = 1, fs_jpim1   ! vector opt. 
     127               !??? CD DO ji = fs_2, fs_jpim1    ! Vector opt. 
    129128                  zeu = 0.5 * e2u(ji,jj) * fse3u(ji,jj,jk) * zun(ji,jj,jk) 
    130129                  zev = 0.5 * e1v(ji,jj) * fse3v(ji,jj,jk) * zvn(ji,jj,jk) 
    131                   ! upstream scheme 
    132                   zfp_ui = zeu + ABS( zeu ) 
     130                  zfp_ui = zeu + ABS( zeu )   ! upstream scheme 
    133131                  zfm_ui = zeu - ABS( zeu ) 
    134132                  zfp_vj = zev + ABS( zev ) 
     
    140138         END DO 
    141139 
    142          ! upstream tracer flux in the k direction 
     140         ! ... Upstream tracer flux in the k direction 
    143141         ! Surface value 
    144142         IF( lk_dynspg_rl ) THEN   ! rigid lid : flux set to zero 
     
    156154         DO jk = 2, jpkm1 
    157155            DO jj = 1, jpj 
    158                DO ji = 1, jpi 
     156               DO ji = 1, jpi   ! CD ??? Vector opt.  
    159157                  zew = 0.5 * e1t(ji,jj) * e2t(ji,jj) * zwn(ji,jj,jk) 
    160158                  zfp_wk = zew + ABS( zew ) 
     
    165163         END DO 
    166164 
    167          ! total advective trend 
     165         ! ... Total intermediate advective trend (flux divergence) 
    168166         DO jk = 1, jpkm1 
    169167            DO jj = 2, jpjm1 
     
    173171                     &              + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  )   & 
    174172                     &              + ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
    175  
    176173#if defined key_trc_diatrd 
    177174                  IF ( luttrd(jn) ) & 
    178175                     trtrd(ji,jj,jk,ikeep(jn),1) = trtrd(ji,jj,jk,ikeep(jn),1) -  & 
    179                         &                          zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) )                      
     176                        &                          zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) ) 
    180177                  IF ( luttrd(jn) ) & 
    181178                     trtrd(ji,jj,jk,ikeep(jn),2) = trtrd(ji,jj,jk,ikeep(jn),2) -  & 
    182                         &                          zbtr * ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) )                      
     179                        &                          zbtr * ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) 
    183180                  IF ( luttrd(jn) ) & 
    184181                     trtrd(ji,jj,jk,ikeep(jn),3) = trtrd(ji,jj,jk,ikeep(jn),3) -  & 
     
    188185            END DO 
    189186         END DO 
    190  
    191  
    192          ! update and guess with monotonic sheme 
     187          
     188         ! 3. Save the intermediate i / j / k advective trends for diagnostics 
     189         ! ------------------------------------------------------------------- 
     190 
     191!CDIR BEGIN COLLAPSE 
     192         IF( l_trdtrc ) THEN 
     193 
     194            ! 3.1) Passive tracer ZONAL advection trends 
     195            ztrtrd(:,:,:) = 0.e0 
     196 
     197            DO jk = 1, jpkm1 
     198               DO jj = 2, jpjm1 
     199                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     200 
     201                     !-- Compute zonal divergence by splitting hdivn (see divcur.F90) 
     202                     !   N.B. This computation is not valid along OBCs (if any) 
     203                     zbtr = 1./ ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     204                     z_hdivn_x = (  e2u(ji  ,jj) * fse3u(ji  ,jj,jk) * un(ji  ,jj,jk)          & 
     205                          &       - e2u(ji-1,jj) * fse3u(ji-1,jj,jk) * un(ji-1,jj,jk) ) * zbtr 
     206 
     207                     !-- Compute zonal advection trends 
     208                     ztrtrd(ji,jj,jk) = - ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) ) * zbtr & 
     209                          &             + trb(ji,jj,jk,jn) * z_hdivn_x 
     210                  END DO 
     211               END DO 
     212            END DO 
     213 
     214            IF (luttrd(jn)) CALL trd_mod_trc(ztrtrd, jn, jptrc_trd_xad, kt)    ! save the trends 
     215 
     216            ! 3.2) Passive tracer MERIDIONAL advection trends 
     217            ztrtrd(:,:,:) = 0.e0 
     218  
     219            DO jk = 1, jpkm1 
     220               DO jj = 2, jpjm1 
     221                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     222 
     223                     !-- Compute merid. divergence by splitting hdivn (see divcur.F90) 
     224                     !   N.B. This computation is not valid along OBCs (if any) 
     225                     zbtr      = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     226                     z_hdivn_y = (  e1v(ji,  jj) * fse3v(ji,jj  ,jk) * vn(ji,jj  ,jk)          & 
     227                          &       - e1v(ji,jj-1) * fse3v(ji,jj-1,jk) * vn(ji,jj-1,jk) ) * zbtr 
     228 
     229                     !-- Compute merid. advection trends 
     230                     ztrtrd(ji,jj,jk) = - ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) * zbtr & 
     231                          &             + trb(ji,jj,jk,jn) * z_hdivn_y 
     232                  END DO 
     233               END DO 
     234            END DO 
     235 
     236            IF (luttrd(jn)) CALL trd_mod_trc(ztrtrd, jn, jptrc_trd_yad, kt)     ! save the trends 
     237 
     238            ! 3.3) Passive tracer VERTICAL advection trends 
     239            ztrtrd(:,:,:) = 0.e0 
     240            DO jk = 1, jpkm1 
     241               DO jj = 2, jpjm1 
     242                  DO ji = fs_2, fs_jpim1   ! Vector opt. 
     243                     zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     244                     ztrtrd(ji,jj,jk) = - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr   & 
     245                          &             - trb(ji,jj,jk,jn) * hdivn(ji,jj,jk) 
     246                  END DO 
     247               END DO 
     248            END DO 
     249 
     250            IF (luttrd(jn)) CALL trd_mod_trc(ztrtrd, jn, jptrc_trd_zad, kt)     ! save the trends 
     251 
     252         ENDIF 
     253!CDIR END 
     254 
     255         ! 4. Update and guess with monotonic sheme 
     256         ! ---------------------------------------- 
    193257         DO jk = 1, jpkm1 
    194258            z2dtt = z2 * rdttra(jk) * FLOAT(ndttrc) 
     
    201265         END DO 
    202266 
    203          ! Lateral boundary conditions on zti, zsi   (unchanged sign) 
     267         ! 5. Lateral boundary conditions on zti, zsi (unchanged sign) 
     268         ! ----------------------------------------------------------- 
    204269         CALL lbc_lnk( zti, 'T', 1. ) 
    205270 
    206          ! 3. antidiffusive flux : high order minus low order 
     271 
     272         ! ============================================================ 
     273         ! II.              Corrected advective trends 
     274         ! ============================================================ 
     275 
     276         ! 1. Antidiffusive flux : high order minus low order 
    207277         ! -------------------------------------------------- 
    208          ! antidiffusive flux on i and j 
     278         ! Antidiffusive flux on i and j 
    209279         DO jk = 1, jpkm1 
    210280            DO jj = 1, jpjm1 
     
    218288         END DO 
    219289 
    220          ! antidiffusive flux on k 
    221          ! Surface value 
    222          ztw(:,:,1) = 0. 
    223  
    224          ! Interior value 
    225          DO jk = 2, jpkm1 
     290         ! Antidiffusive flux on k 
     291         ztw(:,:,1) = 0.e0    ! surface value 
     292         DO jk = 2, jpkm1     ! interior value 
    226293            DO jj = 1, jpj 
    227294               DO ji = 1, jpi 
     
    237304         CALL lbc_lnk( ztw, 'W',  1. ) 
    238305 
    239          ! 4. monotonicity algorithm 
     306         ! 2. Monotonicity algorithm 
    240307         ! ------------------------- 
    241308         CALL nonosc( trb(:,:,:,jn), ztu, ztv, ztw, zti, z2 ) 
    242309 
    243310 
    244          ! 5. final trend with corrected fluxes 
     311         ! 3. Final trend with corrected fluxes 
    245312         ! ------------------------------------ 
    246313         DO jk = 1, jpkm1 
     
    248315               DO ji = fs_2, fs_jpim1   ! vector opt. 
    249316                  zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     317                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn)   & 
     318                     &         - ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk  )   & 
     319                     &           + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  )   & 
     320                     &           + ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
    250321#if defined key_trc_diatrd 
    251322                  IF ( luttrd(jn) ) & 
    252323                     trtrd(ji,jj,jk,ikeep(jn),1) = trtrd(ji,jj,jk,ikeep(jn),1) -  & 
    253                         &                          zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) )                      
     324                        &                          zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) ) 
    254325                  IF ( luttrd(jn) ) & 
    255326                     trtrd(ji,jj,jk,ikeep(jn),2) = trtrd(ji,jj,jk,ikeep(jn),2) -  & 
    256                         &                          zbtr * ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) )                      
     327                        &                          zbtr * ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) 
    257328                  IF ( luttrd(jn) ) & 
    258329                     trtrd(ji,jj,jk,ikeep(jn),3) = trtrd(ji,jj,jk,ikeep(jn),3) -  & 
    259330                        &                          zbtr * ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) 
    260331#endif 
    261                   tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn)   & 
    262                      &         - ( ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk  )   & 
    263                      &           + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk  )   & 
    264                      &           + ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) * zbtr 
    265                END DO 
    266             END DO 
    267          END DO 
    268          ! 6.0 convert the transport trend into advection trend 
    269          ! ---------------------------------------------------- 
    270           
     332 
     333               END DO 
     334            END DO 
     335         END DO 
     336 
    271337#if defined key_trc_diatrd 
    272338         DO jk = 1,jpk 
     
    277343                     &         (  zun(ji  ,jj,jk) * e2u(ji  ,jj) * fse3u(ji  ,jj,jk)    & 
    278344                     &          - zun(ji-1,jj,jk) * e2u(ji-1,jj) * fse3u(ji-1,jj,jk) ) 
    279                    
     345 
    280346                  zgz = zbtr * trn(ji,jj,jk,jn) *     & 
    281347                     &         (  zvn(ji,jj  ,jk) * e1v(ji,jj  ) * fse3v(ji,jj  ,jk)    & 
    282348                     &          - zvn(ji,jj-1,jk) * e1v(ji,jj-1) * fse3v(ji,jj-1,jk) ) 
    283                    
     349 
    284350                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),1) = trtrd(ji,jj,jk,ikeep(jn),1) + zgm 
    285351                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),2) = trtrd(ji,jj,jk,ikeep(jn),2) + zgz 
     
    289355            END DO 
    290356         END DO 
    291           
     357 
    292358         ! Lateral boundary conditions on trtrd: 
    293           
     359 
    294360         IF (luttrd(jn)) CALL lbc_lnk( trtrd(:,:,:,ikeep(jn),1), 'T', 1. ) 
    295361         IF (luttrd(jn)) CALL lbc_lnk( trtrd(:,:,:,ikeep(jn),2), 'T', 1. ) 
     
    297363#endif 
    298364 
     365         ! 4. Save the advective trends for diagnostics 
     366         ! -------------------------------------------- 
     367         ! Warning : mass fluxes should probably be converted into advection  
     368         ! terms in the computations below ??? 
     369 
     370!CDIR BEGIN COLLAPSE 
     371         IF( l_trdtrc ) THEN 
     372             
     373            ! 4.1) Passive tracer ZONAL advection trends 
     374            ztrtrd(:,:,:) = 0.e0 
     375            DO jk = 1, jpkm1 
     376               DO jj = 2, jpjm1 
     377                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     378                     zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     379                     ztrtrd(ji,jj,jk) = - ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) ) * zbtr 
     380                  END DO 
     381               END DO 
     382            END DO 
     383             
     384            IF (luttrd(jn)) CALL trd_mod_trc(ztrtrd, jn, jptrc_trd_xad, kt)   ! <<< ADD TO PREVIOUSLY COMPUTED 
     385 
     386            ! 4.2) Passive tracer MERIDIONAL advection trends 
     387            ztrtrd(:,:,:) = 0.e0 
     388            DO jk = 1, jpkm1 
     389               DO jj = 2, jpjm1 
     390                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     391                     zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     392                     ztrtrd(ji,jj,jk) = - ( ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) * zbtr  
     393                  END DO 
     394               END DO 
     395            END DO 
     396             
     397            IF (luttrd(jn)) CALL trd_mod_trc(ztrtrd, jn, jptrc_trd_yad, kt)   ! <<< ADD TO PREVIOUSLY COMPUTED 
     398             
     399            ! 4.3) Passive tracer VERTICAL advection trends 
     400            ztrtrd(:,:,:) = 0.e0 
     401            DO jk = 1, jpkm1 
     402               DO jj = 2, jpjm1 
     403                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     404                     zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 
     405                     ztrtrd(ji,jj,jk) = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * zbtr 
     406                  END DO 
     407               END DO 
     408            END DO 
     409             
     410            IF (luttrd(jn)) CALL trd_mod_trc(ztrtrd, jn, jptrc_trd_zad, kt)   ! <<< ADD TO PREVIOUSLY COMPUTED 
     411             
     412         ENDIF 
     413!CDIR END 
     414 
     415 
    299416      END DO 
     417 
     418      IF( l_trdtrc ) DEALLOCATE( ztrtrd ) 
    300419 
    301420      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    325444      !!        !  00-02  (H. Loukos)  rewritting for opa8 
    326445      !!        !  00-10  (M.A Foujols, E. Kestenare)  lateral b.c. 
     446      !!        !  01-03  (E. Kestenare)  add key_passivetrc 
    327447      !!        !  01-07  (E. Durand G. Madec)  adapted for T & S 
    328448      !!   8.5  !  02-06  (G. Madec)  F90: Free form and module 
     
    342462      INTEGER ::   ikm1 
    343463      REAL(wp), DIMENSION (jpi,jpj,jpk) ::   zbetup, zbetdo 
    344       REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, z2dtt 
     464      REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt 
    345465      !!---------------------------------------------------------------------- 
    346466 
    347467      zbig = 1.e+40 
     468      zrtrn = 1.e-15 
    348469      zbetup(:,:,:) = 0.e0   ;   zbetdo(:,:,:) = 0.e0 
    349470 
     
    409530               ! up & down beta terms 
    410531               zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) / z2dtt 
    411                zbetup(ji,jj,jk) = ( zbetup(ji,jj,jk) - paft(ji,jj,jk) ) / (zpos+rtrn) * zbt 
    412                zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zbetdo(ji,jj,jk) ) / (zneg+rtrn) * zbt 
     532               zbetup(ji,jj,jk) = ( zbetup(ji,jj,jk) - paft(ji,jj,jk) ) / (zpos+zrtrn) * zbt 
     533               zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zbetdo(ji,jj,jk) ) / (zneg+zrtrn) * zbt 
    413534            END DO 
    414535         END DO 
Note: See TracChangeset for help on using the changeset viewer.