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 503 for trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90 – NEMO

Ignore:
Timestamp:
2006-09-27T10:52:29+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_064 : CT : general trends update including the addition of mean windows analysis possibility in the mixed layer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r455 r503  
    44   !! Ocean dynamics:  vertical component(s) of the momentum mixing trend 
    55   !!============================================================================== 
     6   !! History :      !  90-10  (B. Blanke)  Original code 
     7   !!                !  97-05  (G. Madec)  vertical component of isopycnal 
     8   !!           8.5  !  02-08  (G. Madec)  F90: Free form and module 
     9   !!---------------------------------------------------------------------- 
    610 
    711   !!---------------------------------------------------------------------- 
     
    1115   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    1216   !! $Header$  
    13    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     17   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    1418   !!---------------------------------------------------------------------- 
    1519   !! * Modules used 
     
    2024   USE in_out_manager  ! I/O manager 
    2125   USE taumod          ! surface ocean stress 
    22    USE prtctl          ! Print control 
    2326 
    2427   IMPLICIT NONE 
     
    4043 
    4144 
    42    SUBROUTINE dyn_zdf_imp( kt ) 
     45   SUBROUTINE dyn_zdf_imp( kt, p2dt ) 
    4346      !!---------------------------------------------------------------------- 
    4447      !!                  ***  ROUTINE dyn_zdf_imp  *** 
     
    5861      !! ** Action : - Update (ua,va) arrays with the after vertical diffusive 
    5962      !!               mixing trend. 
    60       !! 
    61       !! History : 
    62       !!        !  90-10  (B. Blanke)  Original code 
    63       !!        !  97-05  (G. Madec)  vertical component of isopycnal 
    64       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    65       !!   9.0  !  04-08  (C. Talandier)  New trends organization 
    6663      !!--------------------------------------------------------------------- 
    6764      !! * Modules used 
    68       USE oce, ONLY :  zwd   => ta,   &  ! use ta as workspace 
    69                        zws   => sa       ! use sa as workspace 
     65      USE oce, ONLY :  zwd   => ta,   &                ! use ta as workspace 
     66                       zws   => sa                     ! use sa as workspace 
    7067 
    7168      !! * Arguments 
    72       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     69      INTEGER , INTENT( in ) ::   kt                   ! ocean time-step index 
     70      REAL(wp), INTENT( in ) ::  p2dt                  ! vertical profile of tracer time-step 
    7371 
    7472      !! * Local declarations 
    75       INTEGER ::   ji, jj, jk            ! dummy loop indices 
    76       REAL(wp) ::   & 
    77          zrau0r, z2dt,                &  ! temporary scalars 
    78          z2dtf, zcoef, zzws, zrhs        !    "         " 
    79       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    80          zwi                             ! temporary workspace arrays 
     73      INTEGER ::   ji, jj, jk                          ! dummy loop indices 
     74      REAL(wp) ::   zrau0r, z2dtf, zcoef, zzws, zrhs   ! temporary scalars 
     75      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zwi        ! temporary workspace arrays 
    8176      !!---------------------------------------------------------------------- 
    8277 
     
    9085      ! -------------------------------- 
    9186      zrau0r = 1. / rau0      ! inverse of the reference density 
    92       z2dt   = 2. * rdt       ! Leap-frog environnement 
    93  
    94       ! Euler time stepping when starting from rest 
    95       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    9687 
    9788      ! 1. Vertical diffusion on u 
     
    10495         DO jj = 2, jpjm1  
    10596            DO ji = fs_2, fs_jpim1   ! vector opt. 
    106                zcoef = - z2dt / fse3u(ji,jj,jk) 
     97               zcoef = - p2dt / fse3u(ji,jj,jk) 
    10798               zwi(ji,jj,jk) = zcoef * avmu(ji,jj,jk  ) / fse3uw(ji,jj,jk  ) 
    10899               zzws          = zcoef * avmu(ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 
     
    150141!!! change les resultats (derniers digit, pas significativement + rapide 1* de moins) 
    151142!!!         ua(ji,jj,1) = ub(ji,jj,1)  & 
    152 !!!                      + z2dt * ( ua(ji,jj,1) + taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) ) 
    153             z2dtf = z2dt / ( fse3u(ji,jj,1)*rau0 ) 
     143!!!                      + p2dt * ( ua(ji,jj,1) + taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) ) 
     144            z2dtf = p2dt / ( fse3u(ji,jj,1)*rau0 ) 
    154145            ua(ji,jj,1) = ub(ji,jj,1)  & 
    155                          + z2dt *  ua(ji,jj,1) + z2dtf * taux(ji,jj) 
    156          END DO 
    157       END DO 
    158       DO jk = 2, jpkm1 
    159          DO jj = 2, jpjm1    
    160             DO ji = fs_2, fs_jpim1   ! vector opt. 
    161                zrhs = ub(ji,jj,jk) + z2dt * ua(ji,jj,jk)   ! zrhs=right hand side 
     146                         + p2dt *  ua(ji,jj,1) + z2dtf * taux(ji,jj) 
     147         END DO 
     148      END DO 
     149      DO jk = 2, jpkm1 
     150         DO jj = 2, jpjm1    
     151            DO ji = fs_2, fs_jpim1   ! vector opt. 
     152               zrhs = ub(ji,jj,jk) + p2dt * ua(ji,jj,jk)   ! zrhs=right hand side 
    162153               ua(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * ua(ji,jj,jk-1) 
    163154            END DO 
     
    183174         DO jj = 2, jpjm1    
    184175            DO ji = fs_2, fs_jpim1   ! vector opt. 
    185                ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / z2dt 
     176               ua(ji,jj,jk) = ( ua(ji,jj,jk) - ub(ji,jj,jk) ) / p2dt 
    186177            END DO 
    187178         END DO 
     
    198189         DO jj = 2, jpjm1    
    199190            DO ji = fs_2, fs_jpim1   ! vector opt. 
    200                zcoef = -z2dt / fse3v(ji,jj,jk) 
     191               zcoef = -p2dt / fse3v(ji,jj,jk) 
    201192               zwi(ji,jj,jk) = zcoef * avmv(ji,jj,jk  ) / fse3vw(ji,jj,jk  ) 
    202193               zzws       = zcoef * avmv(ji,jj,jk+1) / fse3vw(ji,jj,jk+1) 
     
    245236!!! change les resultats (derniers digit, pas significativement + rapide 1* de moins) 
    246237!!!         va(ji,jj,1) = vb(ji,jj,1)  & 
    247 !!!                      + z2dt * ( va(ji,jj,1) + tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) ) 
    248             z2dtf = z2dt / ( fse3v(ji,jj,1)*rau0 ) 
     238!!!                      + p2dt * ( va(ji,jj,1) + tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) ) 
     239            z2dtf = p2dt / ( fse3v(ji,jj,1)*rau0 ) 
    249240            va(ji,jj,1) = vb(ji,jj,1)  & 
    250                          + z2dt * va(ji,jj,1) + z2dtf * tauy(ji,jj) 
     241                         + p2dt * va(ji,jj,1) + z2dtf * tauy(ji,jj) 
    251242         END DO 
    252243      END DO 
     
    254245         DO jj = 2, jpjm1 
    255246            DO ji = fs_2, fs_jpim1   ! vector opt. 
    256                zrhs = vb(ji,jj,jk) + z2dt * va(ji,jj,jk)   ! zrhs=right hand side 
     247               zrhs = vb(ji,jj,jk) + p2dt * va(ji,jj,jk)   ! zrhs=right hand side 
    257248               va(ji,jj,jk) = zrhs - zwi(ji,jj,jk) / zwd(ji,jj,jk-1) * va(ji,jj,jk-1) 
    258249            END DO 
     
    274265      END DO 
    275266 
    276 ! flux de surface doit etre calcule dans trdmod et boootom stress 
    277 ! deduit par integration verticale dans trmod pour jpdtdzdf 
    278 !RB      IF( l_trddyn )  THEN  
    279 !         ! diagnose surface and bottom momentum fluxes 
    280 !         DO jj = 2, jpjm1    
    281 !            DO ji = fs_2, fs_jpim1   ! vector opt. 
    282 !               ! save the surface forcing momentum fluxes 
    283 !               ztsy(ji,jj) = tauy(ji,jj) / ( fse3v(ji,jj,1)*rau0 ) 
    284 !               ztsx(ji,jj) = taux(ji,jj) / ( fse3u(ji,jj,1)*rau0 ) 
    285 !               ! save bottom friction momentum fluxes 
    286 !               ikbv   = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    287 !               ikbvm1 = MAX( ikbv-1, 1 ) 
    288 !               ztby(ji,jj) = - avmv(ji,jj,ikbv) * va(ji,jj,ikbvm1)   & 
    289 !                  / ( fse3v(ji,jj,ikbvm1)*fse3vw(ji,jj,ikbv) ) 
    290 !               ! subtract surface forcing and bottom friction trend from vertical 
    291 !               ! diffusive momentum trend 
    292 !               ztdva(ji,jj,1     ) = ztdva(ji,jj,1     ) - ztsy(ji,jj) 
    293 !               ztdva(ji,jj,ikbvm1) = ztdva(ji,jj,ikbvm1) - ztby(ji,jj) 
    294 !            END DO 
    295 !         END DO 
    296 !      ENDIF 
    297  
    298267      ! Normalization to obtain the general momentum trend va 
    299268      DO jk = 1, jpkm1 
    300269         DO jj = 2, jpjm1    
    301270            DO ji = fs_2, fs_jpim1   ! vector opt. 
    302                va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / z2dt 
     271               va(ji,jj,jk) = ( va(ji,jj,jk) - vb(ji,jj,jk) ) / p2dt 
    303272            END DO 
    304273         END DO 
Note: See TracChangeset for help on using the changeset viewer.