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

Ignore:
Timestamp:
2009-05-11T16:34:47+02:00 (15 years ago)
Author:
rblod
Message:

Merge VVL branch with the trunk (act II), see ticket #429

File:
1 edited

Legend:

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

    r1156 r1438  
    11MODULE trazdf_imp 
    2    !!============================================================================== 
     2   !!====================================================================== 
    33   !!                 ***  MODULE  trazdf_imp  *** 
    44   !! Ocean active tracers:  vertical component of the tracer mixing trend 
    5    !!============================================================================== 
    6    !! History : 
    7    !!   6.0  !  90-10  (B. Blanke)  Original code 
    8    !!   7.0  !  91-11 (G. Madec) 
    9    !!        !  92-06 (M. Imbard) correction on tracer trend loops 
    10    !!        !  96-01 (G. Madec) statement function for e3 
    11    !!        !  97-05 (G. Madec) vertical component of isopycnal 
    12    !!        !  97-07 (G. Madec) geopotential diffusion in s-coord 
    13    !!        !  00-08 (G. Madec) double diffusive mixing 
    14    !!   8.5  !  02-08 (G. Madec)  F90: Free form and module 
    15    !!   9.0  !  06-11 (G. Madec)  New step reorganisation 
     5   !!====================================================================== 
     6   !! History :  OPA  !  1990-10  (B. Blanke)  Original code 
     7   !!            7.0  !  1991-11  (G. Madec) 
     8   !!                 !  1992-06  (M. Imbard) correction on tracer trend loops 
     9   !!                 !  1996-01  (G. Madec) statement function for e3 
     10   !!                 !  1997-05  (G. Madec) vertical component of isopycnal 
     11   !!                 !  1997-07  (G. Madec) geopotential diffusion in s-coord 
     12   !!                 !  2000-08  (G. Madec) double diffusive mixing 
     13   !!   NEMO     1.0  !  2002-08  (G. Madec) F90: Free form and module 
     14   !!            2.0  !  2006-11  (G. Madec) New step reorganisation 
     15   !!            3.2  !  2009-03  (G. Madec)  heat and salt content trends 
     16   !!---------------------------------------------------------------------- 
     17   
    1618   !!---------------------------------------------------------------------- 
    1719   !!   tra_zdf_imp : Update the tracer trend with the diagonal vertical   
    1820   !!                 part of the mixing tensor. 
    1921   !!---------------------------------------------------------------------- 
    20    !! * Modules used 
    2122   USE oce             ! ocean dynamics and tracers variables 
    2223   USE dom_oce         ! ocean space and time domain variables  
     
    3637   PRIVATE 
    3738 
    38    !! * Routine accessibility 
    39    PUBLIC tra_zdf_imp   !  routine called by step.F90 
     39   PUBLIC   tra_zdf_imp   !  routine called by step.F90 
    4040 
    4141   !! * Substitutions 
     
    4545#  include "vectopt_loop_substitute.h90" 
    4646   !!---------------------------------------------------------------------- 
    47    !!---------------------------------------------------------------------- 
    48    !!  OPA 9.0 , LOCEAN-IPSL (2005)  
     47   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)  
    4948   !! $Id$ 
    5049   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     
    9089      !! 
    9190      !!--------------------------------------------------------------------- 
    92       !! * Modules used 
    93       USE oce    , ONLY :   zwd   => ua,  &  ! ua used as workspace 
    94                             zws   => va      ! va   "          " 
    95       !! * Arguments 
    96       INTEGER, INTENT( in ) ::   kt          ! ocean time-step index 
    97       REAL(wp), DIMENSION(jpk), INTENT( in ) ::   & 
    98          p2dt                                ! vertical profile of tracer time-step 
    99  
    100       !! * Local declarations 
    101       INTEGER  ::   ji, jj, jk               ! dummy loop indices 
    102       REAL(wp) ::   zavi, zrhs, znvvl,     & ! temporary scalars 
    103          ze3tb, ze3tn, ze3ta, zvsfvvl        ! variable vertical scale factors 
    104       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    105          zwi, zwt, zavsi                     ! workspace arrays 
     91      USE oce    , ONLY :   zwd   => ua   ! ua used as workspace 
     92      USE oce    , ONLY :   zws   => va   ! va  -          - 
     93      !! 
     94      INTEGER                 , INTENT(in) ::   kt     ! ocean time-step index 
     95      REAL(wp), DIMENSION(jpk), INTENT(in) ::   p2dt   ! vertical profile of tracer time-step 
     96      !! 
     97      INTEGER  ::   ji, jj, jk            ! dummy loop indices 
     98      REAL(wp) ::   zavi, zrhs, znvvl     ! temporary scalars 
     99      REAL(wp) ::   ze3tb, ze3tn, ze3ta   ! variable vertical scale factors 
     100      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwi, zwt, zavsi   ! workspace arrays 
    106101      !!--------------------------------------------------------------------- 
    107102 
     
    169164         DO jj = 2, jpjm1 
    170165            DO ji = fs_2, fs_jpim1   ! vector opt. 
    171                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) ) 
    172                ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                ! after scale factor at T-point 
    173                ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl                        ! now   scale factor at T-point 
     166               ze3ta =  ( 1. - znvvl )   &                            ! after scale factor at T-point 
     167                  &   +        znvvl    * fse3t_a(ji,jj,jk)  
     168               ze3tn =    znvvl          &                            ! now   scale factor at T-point 
     169                  &   + ( 1. - znvvl ) * fse3t_n(ji,jj,jk) 
    174170               zwi(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk  ) / ( ze3tn * fse3w(ji,jj,jk  ) ) 
    175171               zws(ji,jj,jk) = - p2dt(jk) * zwt(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 
     
    182178      DO jj = 2, jpjm1 
    183179         DO ji = fs_2, fs_jpim1   ! vector opt. 
    184             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) ) 
    185             ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                   ! after scale factor at T-point 
     180            ze3ta = ( 1. - znvvl )        &                           ! after scale factor at T-point 
     181               &   +       znvvl      * fse3t_a(ji,jj,1)  
    186182            zwi(ji,jj,1) = 0.e0 
    187183            zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 
     
    227223      DO jj = 2, jpjm1 
    228224         DO ji = fs_2, fs_jpim1 
    229             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) ) 
    230             ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl 
    231             ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,1) 
     225            ze3tb = ( 1. - znvvl ) + znvvl * fse3t_b(ji,jj,1) 
     226            ze3tn = ( 1. - znvvl ) + znvvl * fse3t(ji,jj,1) 
    232227            ta(ji,jj,1) = ze3tb * tb(ji,jj,1) + p2dt(1) * ze3tn * ta(ji,jj,1) 
    233228         END DO 
     
    236231         DO jj = 2, jpjm1 
    237232            DO ji = fs_2, fs_jpim1 
    238                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) ) 
    239                ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl 
    240                ze3tn = ( 1. - znvvl ) + znvvl*fse3t (ji,jj,jk) 
     233               ze3tb = ( 1. - znvvl ) + znvvl * fse3t_b(ji,jj,jk) 
     234               ze3tn = ( 1. - znvvl ) + znvvl * fse3t  (ji,jj,jk) 
    241235               zrhs = ze3tb * tb(ji,jj,jk) + p2dt(jk) * ze3tn * ta(ji,jj,jk)   ! zrhs=right hand side  
    242                ta(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *ta(ji,jj,jk-1) 
     236               ta(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * ta(ji,jj,jk-1) 
    243237            END DO 
    244238         END DO 
     
    271265         DO jj = 2, jpjm1 
    272266            DO ji = fs_2, fs_jpim1   ! vector opt. 
    273                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + ssha(ji,jj) * mut(ji,jj,jk) ) 
    274                ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                      ! after scale factor at T-point 
    275                ze3tn = ( 1. - znvvl )*fse3t(ji,jj,jk) + znvvl                              ! now   scale factor at T-point 
     267               ze3ta =  ( 1. - znvvl )                        &         ! after scale factor at T-point 
     268                  &   +        znvvl   * fse3t_a(ji,jj,jk)            
     269               ze3tn =    znvvl                               &         ! now   scale factor at T-point 
     270                  &   + ( 1. - znvvl ) * fse3t_n(ji,jj,jk) 
    276271               zwi(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk  ) / ( ze3tn * fse3w(ji,jj,jk  ) ) 
    277272               zws(ji,jj,jk) = - p2dt(jk) * zavsi(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 
     
    284279      DO jj = 2, jpjm1 
    285280         DO ji = fs_2, fs_jpim1   ! vector opt. 
    286             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + ssha(ji,jj) * mut(ji,jj,1) ) 
    287             ze3ta = ( 1. - znvvl ) + znvvl*zvsfvvl                                          ! after scale factor at T-point 
     281            ze3ta = ( 1. - znvvl ) + znvvl * fse3t_a(ji,jj,1) 
    288282            zwi(ji,jj,1) = 0.e0 
    289283            zwd(ji,jj,1) = ze3ta - zws(ji,jj,1) 
     
    328322      DO jj = 2, jpjm1 
    329323         DO ji = fs_2, fs_jpim1 
    330             zvsfvvl = fsve3t(ji,jj,1) * ( 1 + sshb(ji,jj) * mut(ji,jj,1) ) 
    331             ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl                               ! before scale factor at T-point 
    332             ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,1)                        ! now    scale factor at T-point 
     324            ze3tb = ( 1. - znvvl )   &                                           ! before scale factor at T-point 
     325               &   +  znvvl       * fse3t_b(ji,jj,1) 
     326            ze3tn = ( 1. - znvvl ) + znvvl * fse3t  (ji,jj,1)                    ! now    scale factor at T-point 
    333327            sa(ji,jj,1) = ze3tb * sb(ji,jj,1) + p2dt(1) * ze3tn * sa(ji,jj,1) 
    334328         END DO 
     
    337331         DO jj = 2, jpjm1 
    338332            DO ji = fs_2, fs_jpim1 
    339                zvsfvvl = fsve3t(ji,jj,jk) * ( 1 + sshb(ji,jj) * mut(ji,jj,jk) ) 
    340                ze3tb = ( 1. - znvvl ) + znvvl*zvsfvvl                            ! before scale factor at T-point 
    341                ze3tn = ( 1. - znvvl ) + znvvl*fse3t(ji,jj,jk)                    ! now    scale factor at T-point 
     333               ze3tb = ( 1. - znvvl )   &                                        ! before scale factor at T-point 
     334                  &   +  znvvl       * fse3t_b(ji,jj,jk) 
     335               ze3tn = ( 1. - znvvl ) + znvvl * fse3t  (ji,jj,jk)                ! now    scale factor at T-point 
    342336               zrhs = ze3tb * sb(ji,jj,jk) + p2dt(jk) * ze3tn * sa(ji,jj,jk)     ! zrhs=right hand side 
    343337               sa(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *sa(ji,jj,jk-1) 
     
    361355         END DO 
    362356      END DO 
    363  
     357      ! 
    364358   END SUBROUTINE tra_zdf_imp 
    365359 
Note: See TracChangeset for help on using the changeset viewer.