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.
dynbfr.F90 in branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN – NEMO

source: branches/DEV_r2106_LOCEAN2010/NEMO/OPA_SRC/DYN/dynbfr.F90 @ 2236

Last change on this file since 2236 was 2236, checked in by cetlod, 13 years ago

First guess of NEMO_v3.3

File size: 4.3 KB
Line 
1MODULE dynbfr
2   !!==============================================================================
3   !!                 ***  MODULE  dynbfr  ***
4   !! Ocean dynamics :  bottom friction component of the momentum mixing trend
5   !!==============================================================================
6   !! History :  9.0  !  2008-11  (A. C. Coward)  Original code
7   !!----------------------------------------------------------------------
8
9   !!----------------------------------------------------------------------
10   !!   dyn_bfr      : Update the momentum trend with the bottom friction contribution
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 variables
15   USE zdfbfr          ! bottom friction
16
17   USE trdmod          ! ocean active dynamics and tracers trends
18   USE trdmod_oce      ! ocean variables trends
19   USE in_out_manager  ! I/O manager
20   USE prtctl          ! Print control
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC   dyn_bfr    !  routine called by step.F90
26
27   !! * Substitutions
28#  include "domzgr_substitute.h90"
29#  include "zdfddm_substitute.h90"
30#  include "vectopt_loop_substitute.h90"
31   !!----------------------------------------------------------------------
32   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)
33   !! $Id: dynzdf.F90 1152 2008-06-26 14:11:13Z rblod $
34   !! Software governed by the CeCILL licence  (NEMOGCM/License_CeCILL.txt)
35   !!----------------------------------------------------------------------
36
37CONTAINS
38   
39   SUBROUTINE dyn_bfr( kt )
40      !!----------------------------------------------------------------------
41      !!                  ***  ROUTINE dyn_bfr  ***
42      !!
43      !! ** Purpose :   compute the bottom friction ocean dynamics physics.
44      !!
45      !! ** Action  :   (ua,va)   momentum trend increased by bottom friction trend
46      !!---------------------------------------------------------------------
47      USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace
48      USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace
49      !!
50      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
51      !!
52      INTEGER  ::   ji, jj          ! dummy loop indexes
53      INTEGER  ::   ikbu  , ikbv    ! temporary integers
54      INTEGER  ::   ikbum1, ikbvm1  !    -          -
55      REAL(wp) ::   zinv, zbfru, zbfrv   ! temporary scalar
56      !!---------------------------------------------------------------------
57      !
58      zinv = -1. / ( 2.*rdt )
59
60      IF( l_trddyn )   THEN                      ! temporary save of ua and va trends
61         ztrdu(:,:,:) = ua(:,:,:)
62         ztrdv(:,:,:) = va(:,:,:)
63      ENDIF
64
65# if defined key_vectopt_loop
66      DO jj = 1, 1
67         DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling)
68# else
69      DO jj = 2, jpjm1
70         DO ji = 2, jpim1
71# endif
72            ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) )
73            ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) )
74            ikbum1 = MAX( ikbu-1, 1 )
75            ikbvm1 = MAX( ikbv-1, 1 )
76            !
77            ! Apply stability criteria on absolute value  : Min abs(bfr) => Max (bfr)
78            zbfru = MAX( bfrua(ji,jj), fse3u(ji,jj,ikbu)*zinv )
79            zbfrv = MAX( bfrva(ji,jj), fse3v(ji,jj,ikbv)*zinv )
80            !
81            ua(ji,jj,ikbum1) = ua(ji,jj,ikbum1) + zbfru * ub(ji,jj,ikbum1) / fse3u(ji,jj,ikbu)
82            va(ji,jj,ikbvm1) = va(ji,jj,ikbvm1) + zbfrv * vb(ji,jj,ikbvm1) / fse3v(ji,jj,ikbv)
83            !
84         END DO
85      END DO
86
87      !
88      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics
89         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:)
90         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:)
91         CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_bfr, 'DYN', kt )
92      ENDIF
93      !                                          ! print mean trends (used for debugging)
94      IF(ln_ctl)   CALL prt_ctl( tab3d_1=ua, clinfo1=' bfr  - Ua: ', mask1=umask,               &
95         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' )
96      !
97   END SUBROUTINE dyn_bfr
98
99   !!==============================================================================
100END MODULE dynbfr
Note: See TracBrowser for help on using the repository browser.