source: branches/2017/dev_merge_2017/NEMOGCM/NEMO/OCE_SRC/ZDF/zdfswm.F90 @ 9570

Last change on this file since 9570 was 9570, checked in by nicolasmartin, 3 years ago

Global renaming for core routines (./NEMO)

  • Folders
    • LIM_SRC_3 → ICE_SRC
    • OPA_SRC → OCE_SRC
  • CPP key: key_lim3 → key_si3
  • Modules, (sub)routines and variables names
    • MPI: mpi_comm_opa → mpi_comm_oce, MPI_COMM_OPA → MPI_COMM_OCE, mpi_init_opa → mpi_init_oce
    • AGRIF: agrif_opa_* → agrif_oce_*, agrif_lim3_* → agrif_si3_* and few more
    • TOP-PISCES: p.zlim → p.zice, namp.zlim → namp.zice
  • Comments
    • NEMO/OPA → NEMO/OCE
    • ESIM|LIM3 → SI3
File size: 4.2 KB
Line 
1MODULE zdfswm
2   !!======================================================================
3   !!                       ***  MODULE  zdfswm  ***
4   !! vertical physics :   surface wave-induced mixing
5   !!======================================================================
6   !! History :  3.6  !  2014-10  (E. Clementi)  Original code
7   !!            4.0  !  2017-04  (G. Madec)  debug + simplifications
8   !!----------------------------------------------------------------------
9
10   !!----------------------------------------------------------------------
11   !!   zdf_swm      : update Kz due to surface wave-induced mixing
12   !!   zdf_swm_init : initilisation
13   !!----------------------------------------------------------------------
14   USE dom_oce        ! ocean domain variable
15   USE zdf_oce        ! vertical physics: mixing coefficients
16   USE sbc_oce        ! Surface boundary condition: ocean fields
17   USE sbcwave        ! wave module
18   !
19   USE in_out_manager ! I/O manager
20   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
21   USE lib_mpp        ! distribued memory computing library
22   
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC zdf_swm         ! routine called in zdp_phy
27   PUBLIC zdf_swm_init    ! routine called in zdf_phy_init
28
29   !!----------------------------------------------------------------------
30   !! NEMO/OCE 4.0 , NEMO Consortium (2017)
31   !! $Id:$
32   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
33   !!----------------------------------------------------------------------
34CONTAINS
35
36   SUBROUTINE zdf_swm( kt, p_avm, p_avt, p_avs )
37      !!---------------------------------------------------------------------
38      !!                     ***  ROUTINE zdf_swm ***
39      !!
40      !! ** Purpose :Compute the swm term (qbv) to be added to
41      !!             vertical viscosity and diffusivity coeffs. 
42      !!
43      !! ** Method  :   Compute the swm term Bv (zqb) and added it to
44      !!               vertical viscosity and diffusivity coefficients
45      !!                   zqb = alpha * A * Us(0) * exp (3 * k * z)
46      !!               where alpha is set here to 1
47      !!             
48      !! ** action  :    avt, avs, avm updated by the surface wave-induced mixing
49      !!                               (inner domain only)
50      !!               
51      !! reference : Qiao et al. GRL, 2004
52      !!---------------------------------------------------------------------
53      INTEGER                    , INTENT(in   ) ::   kt             ! ocean time step
54      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avm          ! momentum Kz (w-points)
55      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avt, p_avs   ! tracer   Kz (w-points)
56      !
57      INTEGER ::   ji, jj, jk   ! dummy loop indices
58      REAL(wp)::   zcoef, zqb   ! local scalar
59      !!---------------------------------------------------------------------
60      !
61      zcoef = 1._wp * 0.353553_wp
62      DO jk = 2, jpkm1
63         DO jj = 2, jpjm1
64            DO ji = 2, jpim1
65               zqb = zcoef * hsw(ji,jj) * tsd2d(ji,jj) * EXP( -3. * wnum(ji,jj) * gdepw_n(ji,jj,jk) ) * wmask(ji,jj,jk)
66               !
67               p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zqb
68               p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zqb
69               p_avm(ji,jj,jk) = p_avm(ji,jj,jk) + zqb
70            END DO
71         END DO
72      END DO
73      !
74   END SUBROUTINE zdf_swm
75   
76   
77   SUBROUTINE zdf_swm_init
78      !!---------------------------------------------------------------------
79      !!                     ***  ROUTINE zdf_swm_init ***
80      !!
81      !! ** Purpose :   surface wave-induced mixing initialisation 
82      !!
83      !! ** Method  :   check the availability of surface wave fields
84      !!---------------------------------------------------------------------
85      !
86      IF(lwp) THEN                  ! Control print
87         WRITE(numout,*)
88         WRITE(numout,*) 'zdf_swm_init : surface wave-driven mixing'
89         WRITE(numout,*) '~~~~~~~~~~~~'
90      ENDIF
91      IF(  .NOT.ln_wave .OR.   &
92         & .NOT.ln_sdw    )   CALL ctl_stop ( 'zdf_swm_init: ln_zdfswm=T but ln_wave and ln_sdw /= T')
93      !
94   END SUBROUTINE zdf_swm_init
95
96   !!======================================================================
97END MODULE zdfswm
Note: See TracBrowser for help on using the repository browser.