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/dynkeg.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/dynkeg.F90

    r258 r503  
    44   !! Ocean dynamics:  kinetic energy gradient trend 
    55   !!====================================================================== 
     6   !! History :  1.0  !  87-09  (P. Andrich, m.-a. Foujols)  Original code 
     7   !!            7.0  !  97-05  (G. Madec)  Split dynber into dynkeg and dynhpg 
     8   !!            9.0  !  02-07  (G. Madec)  F90: Free form and module 
     9   !!---------------------------------------------------------------------- 
    610    
    711   !!---------------------------------------------------------------------- 
    812   !!   dyn_keg      : update the momentum trend with the horizontal tke 
    913   !!---------------------------------------------------------------------- 
    10    !! * Modules used 
    1114   USE oce             ! ocean dynamics and tracers 
    1215   USE dom_oce         ! ocean space and time domain 
     
    1922   PRIVATE 
    2023 
    21    !! * Accessibility 
    22    PUBLIC dyn_keg                ! routine called by step.F90 
     24   PUBLIC   dyn_keg    ! routine called by step module 
    2325    
    2426   !! * Substitutions 
    2527#  include "vectopt_loop_substitute.h90" 
    26    !!--------------------------------------------------------------------------------- 
     28   !!---------------------------------------------------------------------- 
    2729   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    2830   !! $Header$  
    29    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    30    !!--------------------------------------------------------------------------------- 
     31   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     32   !!---------------------------------------------------------------------- 
    3133 
    3234CONTAINS 
     
    4042      !!      general momentum trend. 
    4143      !! 
    42       !! ** Method  :   Compute the now horizontal kinetic energy: 
     44      !! ** Method  :   Compute the now horizontal kinetic energy  
    4345      !!         zhke = 1/2 [ mi-1( un^2 ) + mj-1( vn^2 ) ] 
    4446      !!      Take its horizontal gradient and add it to the general momentum 
     
    4850      !! 
    4951      !! ** Action : - Update the (ua, va) with the hor. ke gradient trend 
    50       !!             - Save the trends in (utrd,vtrd) ('key_trddyn') 
     52      !!             - save this trends (l_trddyn=T) for post-processing 
     53      !!---------------------------------------------------------------------- 
     54      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace    
     55      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace    
    5156      !! 
    52       !! History : 
    53       !!   1.0  !  87-09  (P. Andrich, m.-a. Foujols)  Original code 
    54       !!   7.0  !  97-05  (G. Madec)  Split dynber into dynkeg and dynhpg 
    55       !!   9.0  !  02-07  (G. Madec)  F90: Free form and module 
    56       !!    "   !  04-08  (C. Talandier) New trends organization 
    57       !!---------------------------------------------------------------------- 
    58       !! * Modules used      
    59       USE oce, ONLY :    ztdua => ta,   & ! use ta as 3D workspace    
    60                          ztdva => sa      ! use sa as 3D workspace    
    61  
    62       !! * Arguments 
    63       INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
    64  
    65       !! * Local declarations 
    66       INTEGER  ::   ji, jj, jk          ! dummy loop indices 
    67       REAL(wp) ::   zua, zva, zu, zv    ! temporary scalars 
    68       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    69          zhke                           ! temporary workspace 
     57      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     58      !! 
     59      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     60      REAL(wp) ::   zu, zv       ! temporary scalars 
     61      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhke   ! temporary 3D workspace 
    7062      !!---------------------------------------------------------------------- 
    7163 
     
    7668      ENDIF 
    7769 
    78       ! Save ua and va trends 
    79       IF( l_trddyn )   THEN 
    80          ztdua(:,:,:) = ua(:,:,:)  
    81          ztdva(:,:,:) = va(:,:,:)  
     70      IF( l_trddyn ) THEN           ! Save ua and va trends 
     71         ztrdu(:,:,:) = ua(:,:,:)  
     72         ztrdv(:,:,:) = va(:,:,:)  
    8273      ENDIF 
    8374       
     
    8576      DO jk = 1, jpkm1                                 ! Horizontal slab 
    8677         !                                             ! =============== 
    87          ! Horizontal kinetic energy at T-point 
    88          DO jj = 2, jpj 
     78         DO jj = 2, jpj         ! Horizontal kinetic energy at T-point 
    8979            DO ji = fs_2, jpi   ! vector opt. 
     80               zu = 0.25 * (  un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
     81                  &         + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)  ) 
    9082               zv = 0.25 * (  vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   & 
    91                             + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)  ) 
    92                zu = 0.25 * (  un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
    93                             + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)  ) 
     83                  &         + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)  ) 
    9484               zhke(ji,jj,jk) = zv + zu 
    9585            END DO   
    9686         END DO   
    97           
    98          ! Horizontal gradient of Horizontal kinetic energy 
    99          DO jj = 2, jpjm1 
     87         DO jj = 2, jpjm1       ! add the gradient of kinetic energy to the general momentum trends 
    10088            DO ji = fs_2, fs_jpim1   ! vector opt. 
    101                ! gradient of kinetic energy 
    102                zua = -( zhke(ji+1,jj  ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 
    103                zva = -( zhke(ji  ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 
    104                ! add to the general momentum trends 
    105                ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    106                va(ji,jj,jk) = va(ji,jj,jk) + zva 
     89               ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj  ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 
     90               va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji  ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 
    10791            END DO  
    10892         END DO 
     
    11195      !                                                ! =============== 
    11296 
    113       ! save the Kinetic Energy trends for diagnostic 
    114       ! momentum trends 
    115       IF( l_trddyn )   THEN 
    116          ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 
    117          ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 
    118  
    119          CALL trd_mod(ztdua, ztdva, jpdtdkeg, 'DYN', kt) 
     97      IF( l_trddyn ) THEN      ! save the Kinetic Energy trends for diagnostic 
     98         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
     99         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     100         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_keg, 'DYN', kt ) 
    120101      ENDIF 
    121  
    122       IF(ln_ctl) THEN         ! print sum trends (used for debugging) 
    123          CALL prt_ctl(tab3d_1=ua, clinfo1=' keg  - Ua: ', mask1=umask, & 
    124             &         tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 
    125       ENDIF 
    126  
     102      ! 
     103      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' keg  - Ua: ', mask1=umask,   & 
     104         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
     105      ! 
    127106   END SUBROUTINE dyn_keg 
    128107 
Note: See TracChangeset for help on using the changeset viewer.