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.
zdfevd.F90 in trunk/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: trunk/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90 @ 3116

Last change on this file since 3116 was 2715, checked in by rblod, 13 years ago

First attempt to put dynamic allocation on the trunk

  • Property svn:keywords set to Id
File size: 6.0 KB
RevLine 
[3]1MODULE zdfevd
2   !!======================================================================
3   !!                       ***  MODULE  zdfevd  ***
4   !! Ocean physics: parameterization of convection through an enhancement
5   !!                of vertical eddy mixing coefficient
6   !!======================================================================
[1438]7   !! History :  OPA  !  1997-06  (G. Madec, A. Lazar)  Original code
8   !!   NEMO     1.0  !  2002-06  (G. Madec)  F90: Free form and module
9   !!             -   !  2005-06  (C. Ethe) KPP parameterization
10   !!            3.2  !  2009-03  (M. Leclair, G. Madec, R. Benshila) test on both before & after
11   !!----------------------------------------------------------------------
[3]12
13   !!----------------------------------------------------------------------
[1438]14   !!   zdf_evd      : increase the momentum and tracer Kz at the location of
15   !!                  statically unstable portion of the water column (ln_zdfevd=T)
[3]16   !!----------------------------------------------------------------------
17   USE oce             ! ocean dynamics and tracers variables
18   USE dom_oce         ! ocean space and time domain variables
19   USE zdf_oce         ! ocean vertical physics variables
[255]20   USE zdfkpp          ! KPP vertical mixing
[3]21   USE in_out_manager  ! I/O manager
[1482]22   USE iom             ! for iom_put
[3]23   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
24
25   IMPLICIT NONE
26   PRIVATE
27
[1438]28   PUBLIC   zdf_evd    ! called by step.F90
[3]29
[255]30   !! * Substitutions
31#  include "domzgr_substitute.h90"
[3]32   !!----------------------------------------------------------------------
[2715]33   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
[1438]34   !! $Id$
[2715]35   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
[3]36   !!----------------------------------------------------------------------
37CONTAINS
38
39   SUBROUTINE zdf_evd( kt )
40      !!----------------------------------------------------------------------
41      !!                  ***  ROUTINE zdf_evd  ***
42      !!                   
43      !! ** Purpose :   Local increased the vertical eddy viscosity and diffu-
44      !!      sivity coefficients when a static instability is encountered.
45      !!
[1546]46      !! ** Method  :   avt, avm, and the 4 neighbouring avmu, avmv coefficients
[3]47      !!      are set to avevd (namelist parameter) if the water column is
48      !!      statically unstable (i.e. if rn2 < -1.e-12 )
49      !!
[1546]50      !! ** Action  :   avt, avm, avmu, avmv updted in static instability cases
51      !!
[1438]52      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997
[3]53      !!----------------------------------------------------------------------
[2715]54      USE oce,   zavt_evd => ua , zavm_evd => va  ! (ua,va) used ua workspace
55      !
56      INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step
57      !
58      INTEGER ::   ji, jj, jk   ! dummy loop indices
[3]59      !!----------------------------------------------------------------------
60
61      IF( kt == nit000 ) THEN
62         IF(lwp) WRITE(numout,*)
63         IF(lwp) WRITE(numout,*) 'zdf_evd : Enhanced Vertical Diffusion (evd)'
64         IF(lwp) WRITE(numout,*) '~~~~~~~ '
65         IF(lwp) WRITE(numout,*)
66      ENDIF
67
[1681]68      zavt_evd(:,:,:) = avt(:,:,:)           ! set avt prior to evd application
[255]69
[1537]70      SELECT CASE ( nn_evdm )
[2715]71      !
[3]72      CASE ( 1 )           ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12)
[2715]73         !
[1681]74         zavm_evd(:,:,:) = avm(:,:,:)           ! set avm prior to evd application
75         !
[1546]76         DO jk = 1, jpkm1 
[1438]77#if defined key_vectopt_loop
78            DO jj = 1, 1                     ! big loop forced
79               DO ji = jpi+2, jpij   
80#else
[3]81            DO jj = 2, jpj             ! no vector opt.
82               DO ji = 2, jpi
[1438]83#endif
84#if defined key_zdfkpp
[1546]85                  ! no evd mixing in the boundary layer with KPP
[2715]86                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  ) THEN
[1438]87#else
[2715]88                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) THEN
[1438]89#endif
[1537]90                     avt (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
91                     avm (ji  ,jj  ,jk) = rn_avevd * tmask(ji  ,jj  ,jk)
92                     avmu(ji  ,jj  ,jk) = rn_avevd * umask(ji  ,jj  ,jk)
93                     avmu(ji-1,jj  ,jk) = rn_avevd * umask(ji-1,jj  ,jk)
94                     avmv(ji  ,jj  ,jk) = rn_avevd * vmask(ji  ,jj  ,jk)
95                     avmv(ji  ,jj-1,jk) = rn_avevd * vmask(ji  ,jj-1,jk)
[3]96                  ENDIF
97               END DO
98            END DO
[1546]99         END DO
[2715]100         CALL lbc_lnk( avt , 'W', 1. )   ;   CALL lbc_lnk( avm , 'W', 1. )   ! Lateral boundary conditions
[1546]101         CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )
102         !
[1681]103         zavm_evd(:,:,:) = avm(:,:,:) - zavm_evd(:,:,:)   ! change in avm due to evd
104         CALL iom_put( "avm_evd", zavm_evd )              ! output this change
105         !
[3]106      CASE DEFAULT         ! enhance vertical eddy diffusivity only (if rn2<-1.e-12)
[1546]107         DO jk = 1, jpkm1
108!!!         WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd   ! agissant sur T SEUL!
[1438]109#if defined key_vectopt_loop
110            DO jj = 1, 1                     ! big loop forced
111               DO ji = 1, jpij   
112#else
[3]113            DO jj = 1, jpj             ! loop over the whole domain (no lbc_lnk call)
114               DO ji = 1, jpi
[1438]115#endif
116#if defined key_zdfkpp
[1546]117                  ! no evd mixing in the boundary layer with KPP
[2715]118                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12  .AND.  fsdepw(ji,jj,jk) > hkpp(ji,jj)  )   &         
[1438]119#else
[2715]120                  IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 )   &
[1438]121#endif
[1537]122                     avt(ji,jj,jk) = rn_avevd * tmask(ji,jj,jk)
[3]123               END DO
124            END DO
[1546]125         END DO
126         !
[3]127      END SELECT
128
[1681]129      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd
130      CALL iom_put( "avt_evd", zavt_evd )              ! output this change
[1546]131      !
[3]132   END SUBROUTINE zdf_evd
133
134   !!======================================================================
135END MODULE zdfevd
Note: See TracBrowser for help on using the repository browser.