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.
dynkeg.F90 in trunk/NEMO/OPA_SRC/DYN – NEMO

source: trunk/NEMO/OPA_SRC/DYN/dynkeg.F90 @ 503

Last change on this file since 503 was 503, checked in by opalod, 18 years ago

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

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 KB
RevLine 
[3]1MODULE dynkeg
2   !!======================================================================
3   !!                       ***  MODULE  dynkeg  ***
4   !! Ocean dynamics:  kinetic energy gradient trend
5   !!======================================================================
[503]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   !!----------------------------------------------------------------------
[3]10   
11   !!----------------------------------------------------------------------
12   !!   dyn_keg      : update the momentum trend with the horizontal tke
13   !!----------------------------------------------------------------------
14   USE oce             ! ocean dynamics and tracers
15   USE dom_oce         ! ocean space and time domain
16   USE in_out_manager  ! I/O manager
[216]17   USE trdmod          ! ocean dynamics trends
18   USE trdmod_oce      ! ocean variables trends
[258]19   USE prtctl          ! Print control
[3]20
21   IMPLICIT NONE
22   PRIVATE
23
[503]24   PUBLIC   dyn_keg    ! routine called by step module
[3]25   
26   !! * Substitutions
27#  include "vectopt_loop_substitute.h90"
[503]28   !!----------------------------------------------------------------------
[247]29   !!   OPA 9.0 , LOCEAN-IPSL (2005)
30   !! $Header$
[503]31   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
32   !!----------------------------------------------------------------------
[3]33
34CONTAINS
35
36   SUBROUTINE dyn_keg( kt )
37      !!----------------------------------------------------------------------
38      !!                  ***  ROUTINE dyn_keg  ***
39      !!
40      !! ** Purpose :   Compute the now momentum trend due to the horizontal
41      !!      gradient of the horizontal kinetic energy and add it to the
42      !!      general momentum trend.
43      !!
[503]44      !! ** Method  :   Compute the now horizontal kinetic energy
[3]45      !!         zhke = 1/2 [ mi-1( un^2 ) + mj-1( vn^2 ) ]
46      !!      Take its horizontal gradient and add it to the general momentum
47      !!      trend (ua,va).
48      !!         ua = ua - 1/e1u di[ zhke ]
49      !!         va = va - 1/e2v dj[ zhke ]
50      !!
51      !! ** Action : - Update the (ua, va) with the hor. ke gradient trend
[503]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   
[3]56      !!
[503]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
[3]62      !!----------------------------------------------------------------------
63
64      IF( kt == nit000 ) THEN
65         IF(lwp) WRITE(numout,*)
66         IF(lwp) WRITE(numout,*) 'dyn_keg : kinetic energy gradient trend'
67         IF(lwp) WRITE(numout,*) '~~~~~~~'
68      ENDIF
[216]69
[503]70      IF( l_trddyn ) THEN           ! Save ua and va trends
71         ztrdu(:,:,:) = ua(:,:,:) 
72         ztrdv(:,:,:) = va(:,:,:) 
[216]73      ENDIF
[3]74     
75      !                                                ! ===============
76      DO jk = 1, jpkm1                                 ! Horizontal slab
77         !                                             ! ===============
[503]78         DO jj = 2, jpj         ! Horizontal kinetic energy at T-point
[3]79            DO ji = fs_2, jpi   ! vector opt.
[503]80               zu = 0.25 * (  un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   &
81                  &         + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)  )
[3]82               zv = 0.25 * (  vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   &
[503]83                  &         + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)  )
[3]84               zhke(ji,jj,jk) = zv + zu
85            END DO 
86         END DO 
[503]87         DO jj = 2, jpjm1       ! add the gradient of kinetic energy to the general momentum trends
[3]88            DO ji = fs_2, fs_jpim1   ! vector opt.
[503]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)
[3]91            END DO
92         END DO
93         !                                             ! ===============
94      END DO                                           !   End of slab
95      !                                                ! ===============
96
[503]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 )
[216]101      ENDIF
[503]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      !
[3]106   END SUBROUTINE dyn_keg
107
108   !!======================================================================
109END MODULE dynkeg
Note: See TracBrowser for help on using the repository browser.