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.
zdfswm.F90 in branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

source: branches/2017/wrk_OMP_test_for_Silvia/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfswm.F90 @ 8055

Last change on this file since 8055 was 8055, checked in by gm, 7 years ago

wrk_OMP: 2nd step: add OMP processor distribution in ZDF package

File size: 4.4 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   !! * Substitutions
30#  include "domain_substitute.h90"   
31   !!----------------------------------------------------------------------
32   !! NEMO/OPA 4.0 , NEMO Consortium (2017)
33   !! $Id:$
34   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
35   !!----------------------------------------------------------------------
36CONTAINS
37
38   SUBROUTINE zdf_swm( ARG_2D, kt, p_avm, p_avt, p_avs )
39      !!---------------------------------------------------------------------
40      !!                     ***  ROUTINE zdf_swm ***
41      !!
42      !! ** Purpose :Compute the swm term (qbv) to be added to
43      !!             vertical viscosity and diffusivity coeffs. 
44      !!
45      !! ** Method  :   Compute the swm term Bv (zqb) and added it to
46      !!               vertical viscosity and diffusivity coefficients
47      !!                   zqb = alpha * A * Us(0) * exp (3 * k * z)
48      !!               where alpha is set here to 1
49      !!             
50      !! ** action  :    avt, avs, avm updated by the surface wave-induced mixing
51      !!                               (inner domain only)
52      !!               
53      !! reference : Qiao et al. GRL, 2004
54      !!---------------------------------------------------------------------
55      INTEGER                    , INTENT(in   ) ::   ARG_2D         ! inner domain start-end i-indices
56      INTEGER                    , INTENT(in   ) ::   kt             ! ocean time step
57      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avm          ! momentum Kz (w-points)
58      REAL(wp), DIMENSION(:,:,:) , INTENT(inout) ::   p_avt, p_avs   ! tracer   Kz (w-points)
59      !
60      INTEGER ::   ji, jj, jk   ! dummy loop indices
61      REAL(wp)::   zcoef, zqb   ! local scalar
62      !!---------------------------------------------------------------------
63      !
64      zcoef = 1._wp * 0.353553_wp
65      DO jk = 2, jpkm1
66         DO jj = k_Jstr, k_Jend
67            DO ji = k_Istr, k_Iend
68               zqb = zcoef * hsw(ji,jj) * tsd2d(ji,jj) * EXP( -3. * wnum(ji,jj) * gdepw_n(ji,jj,jk) ) * wmask(ji,jj,jk)
69               !
70               p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zqb
71               p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zqb
72               p_avm(ji,jj,jk) = p_avm(ji,jj,jk) + zqb
73            END DO
74         END DO
75      END DO
76      !
77   END SUBROUTINE zdf_swm
78   
79   
80   SUBROUTINE zdf_swm_init
81      !!---------------------------------------------------------------------
82      !!                     ***  ROUTINE zdf_swm_init ***
83      !!
84      !! ** Purpose :   surface wave-induced mixing initialisation 
85      !!
86      !! ** Method  :   check the availability of surface wave fields
87      !!---------------------------------------------------------------------
88      !
89      IF(lwp) THEN                  ! Control print
90         WRITE(numout,*)
91         WRITE(numout,*) 'zdf_swm_init : surface wave-driven mixing'
92         WRITE(numout,*) '~~~~~~~~~~~~'
93      ENDIF
94      IF(  .NOT.ln_wave .OR.   &
95         & .NOT.ln_sdw    )   CALL ctl_stop ( 'zdf_swm_init: ln_zdfswm=T but ln_wave and ln_sdw /= T')
96      !
97   END SUBROUTINE zdf_swm_init
98
99   !!======================================================================
100END MODULE zdfswm
Note: See TracBrowser for help on using the repository browser.