source: branches/2013/dev_r3858_CNRS3_Ediag/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90 @ 3876

Last change on this file since 3876 was 3876, checked in by gm, 8 years ago

dev_r3858_CNRS3_Ediag: #927 phasing with 2011/dev_r3309_LOCEAN12_Ediag branche + mxl diag update

  • Property svn:keywords set to Id
File size: 6.2 KB
Line 
1MODULE zdfmxl
2   !!======================================================================
3   !!                       ***  MODULE  zdfmxl  ***
4   !! Ocean physics: mixed layer depth
5   !!======================================================================
6   !! History :  1.0  ! 2003-08  (G. Madec)  original code
7   !!            3.2  ! 2009-07  (S. Masson, G. Madec)  IOM + merge of DO-loop
8   !!            3.5  ! 2012-03  (G. Madec)  make public the density criteria for trdmxl
9   !!----------------------------------------------------------------------
10   !!   zdf_mxl      : Compute the turbocline and mixed layer depths.
11   !!----------------------------------------------------------------------
12   USE oce             ! ocean dynamics and tracers variables
13   USE dom_oce         ! ocean space and time domain variables
14   USE zdf_oce         ! ocean vertical physics
15   USE in_out_manager  ! I/O manager
16   USE prtctl          ! Print control
17   USE iom             ! I/O library
18   USE lib_mpp         ! MPP library
19   USE wrk_nemo        ! work arrays
20   USE timing          ! Timing
21   USE trc_oce, ONLY : lk_offline ! offline flag
22
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC   zdf_mxl       ! called by step.F90
27
28   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   nmln    !: number of level in the mixed layer (used by TOP)
29   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmld    !: mixing layer depth (turbocline)      [m]
30   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmlp    !: mixed layer depth  (rho=rho0+zdcrit) [m]
31   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmlpt   !: mixed layer depth at t-points        [m]
32
33   REAL(wp), PUBLIC ::   rho_c = 0.01_wp    !: density criterion for mixed layer depth
34   REAL(wp)         ::   avt_c = 5.e-4_wp   ! Kz criterion for the turbocline depth
35
36   !! * Substitutions
37#  include "domzgr_substitute.h90"
38   !!----------------------------------------------------------------------
39   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
40   !! $Id$
41   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
42   !!----------------------------------------------------------------------
43CONTAINS
44
45   INTEGER FUNCTION zdf_mxl_alloc()
46      !!----------------------------------------------------------------------
47      !!               ***  FUNCTION zdf_mxl_alloc  ***
48      !!----------------------------------------------------------------------
49      zdf_mxl_alloc = 0      ! set to zero if no array to be allocated
50      IF( .NOT. ALLOCATED( nmln ) ) THEN
51         ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT= zdf_mxl_alloc )
52         !
53         IF( lk_mpp             )   CALL mpp_sum ( zdf_mxl_alloc )
54         IF( zdf_mxl_alloc /= 0 )   CALL ctl_warn('zdf_mxl_alloc: failed to allocate arrays.')
55         !
56      ENDIF
57   END FUNCTION zdf_mxl_alloc
58
59
60   SUBROUTINE zdf_mxl( kt )
61      !!----------------------------------------------------------------------
62      !!                  ***  ROUTINE zdfmxl  ***
63      !!                   
64      !! ** Purpose :   Compute the turbocline depth and the mixed layer depth
65      !!              with density criteria.
66      !!
67      !! ** Method  :   The mixed layer depth is the shallowest W depth with
68      !!      the density of the corresponding T point (just bellow) bellow a
69      !!      given value defined locally as rho(10m) + rho_c
70      !!               The turbocline depth is the depth at which the vertical
71      !!      eddy diffusivity coefficient (resulting from the vertical physics
72      !!      alone, not the isopycnal part, see trazdf.F) fall below a given
73      !!      value defined locally (avt_c here taken equal to 5 cm/s2 by default)
74      !!
75      !! ** Action  :   nmln, hmld, hmlp, hmlpt
76      !!----------------------------------------------------------------------
77      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
78      !!
79      INTEGER  ::   ji, jj, jk          ! dummy loop indices
80      INTEGER  ::   iikn, iiki          ! temporary integer within a do loop
81      INTEGER, POINTER, DIMENSION(:,:) ::   imld                ! temporary workspace
82      !!----------------------------------------------------------------------
83      !
84      IF( nn_timing == 1 )  CALL timing_start('zdf_mxl')
85      !
86      CALL wrk_alloc( jpi,jpj, imld )
87
88      IF( kt == nit000 ) THEN
89         IF(lwp) WRITE(numout,*)
90         IF(lwp) WRITE(numout,*) 'zdf_mxl : mixed layer depth'
91         IF(lwp) WRITE(numout,*) '~~~~~~~ '
92         !                             ! allocate zdfmxl arrays
93         IF( zdf_mxl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_mxl : unable to allocate arrays' )
94      ENDIF
95
96      ! w-level of the mixing and mixed layers
97      nmln(:,:) = mbkt(:,:) + 1        ! Initialization to the number of w ocean point
98      imld(:,:) = mbkt(:,:) + 1
99      DO jk = jpkm1, nlb10, -1         ! from the bottom to nlb10
100         DO jj = 1, jpj
101            DO ji = 1, jpi
102               IF( rhop(ji,jj,jk) > rhop(ji,jj,nla10) + rho_c )   nmln(ji,jj) = jk      ! Mixed layer
103               IF( avt (ji,jj,jk) < avt_c                     )   imld(ji,jj) = jk      ! Turbocline
104            END DO
105         END DO
106      END DO
107      ! depth of the mixing and mixed layers
108      DO jj = 1, jpj
109         DO ji = 1, jpi
110            iiki = imld(ji,jj)
111            iikn = nmln(ji,jj)
112            hmld (ji,jj) = fsdepw(ji,jj,iiki  ) * tmask(ji,jj,1)    ! Turbocline depth
113            hmlp (ji,jj) = fsdepw(ji,jj,iikn  ) * tmask(ji,jj,1)    ! Mixed layer depth
114            hmlpt(ji,jj) = fsdept(ji,jj,iikn-1)                     ! depth of the last T-point inside the mixed layer
115         END DO
116      END DO
117      IF( .NOT.lk_offline ) THEN            ! no need to output in offline mode
118         CALL iom_put( "mldr10_1", hmlp )   ! mixed layer depth
119         CALL iom_put( "mldkz5"  , hmld )   ! turbocline depth
120      ENDIF
121     
122      IF(ln_ctl)   CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmlp, clinfo2=' hmlp : ', ovlap=1 )
123      !
124      CALL wrk_dealloc( jpi,jpj, imld )
125      !
126      IF( nn_timing == 1 )  CALL timing_stop('zdf_mxl')
127      !
128   END SUBROUTINE zdf_mxl
129
130   !!======================================================================
131END MODULE zdfmxl
Note: See TracBrowser for help on using the repository browser.