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.
dynldf.F90 in NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN – NEMO

source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/DYN/dynldf.F90 @ 10928

Last change on this file since 10928 was 10928, checked in by davestorkey, 5 years ago

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Finish converting DYN module, including some updates to previously processed modules, but excluding dynnxt.F90 (which needs to be completely rewritten) and wet_dry.F90 - I need to talk to Enda about this.

  • Property svn:keywords set to Id
File size: 5.9 KB
Line 
1MODULE dynldf
2   !!======================================================================
3   !!                       ***  MODULE  dynldf  ***
4   !! Ocean physics:  lateral diffusivity trends
5   !!=====================================================================
6   !! History :  2.0  ! 2005-11  (G. Madec)  Original code (new step architecture)
7   !!            3.7  ! 2014-01  (F. Lemarie, G. Madec)  restructuration/simplification of ahm specification,
8   !!                 !                                  add velocity dependent coefficient and optional read in file
9   !!----------------------------------------------------------------------
10
11   !!----------------------------------------------------------------------
12   !!   dyn_ldf      : update the dynamics trend with the lateral diffusion
13   !!   dyn_ldf_init : initialization, namelist read, and parameters control
14   !!----------------------------------------------------------------------
15   USE oce            ! ocean dynamics and tracers
16   USE dom_oce        ! ocean space and time domain
17   USE phycst         ! physical constants
18   USE ldfdyn         ! lateral diffusion: eddy viscosity coef.
19   USE dynldf_lap_blp ! lateral mixing   (dyn_ldf_lap & dyn_ldf_blp routines)
20   USE dynldf_iso     ! lateral mixing                 (dyn_ldf_iso routine )
21   USE trd_oce        ! trends: ocean variables
22   USE trddyn         ! trend manager: dynamics   (trd_dyn      routine)
23   !
24   USE prtctl         ! Print control
25   USE in_out_manager ! I/O manager
26   USE lib_mpp        ! distribued memory computing library
27   USE lbclnk         ! ocean lateral boundary conditions (or mpp link)
28   USE timing         ! Timing
29
30   IMPLICIT NONE
31   PRIVATE
32
33   PUBLIC   dyn_ldf       ! called by step module
34   PUBLIC   dyn_ldf_init  ! called by opa  module
35
36   !! * Substitutions
37#  include "vectopt_loop_substitute.h90"
38   !!----------------------------------------------------------------------
39   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
40   !! $Id$
41   !! Software governed by the CeCILL license (see ./LICENSE)
42   !!----------------------------------------------------------------------
43CONTAINS
44
45   SUBROUTINE dyn_ldf( kt, Kbb, Kmm, puu, pvv, Krhs )
46      !!----------------------------------------------------------------------
47      !!                  ***  ROUTINE dyn_ldf  ***
48      !!
49      !! ** Purpose :   compute the lateral ocean dynamics physics.
50      !!----------------------------------------------------------------------
51      INTEGER                             , INTENT( in )  ::  kt               ! ocean time-step index
52      INTEGER                             , INTENT( in )  ::  Kbb, Kmm, Krhs   ! ocean time level indices
53      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) ::  puu, pvv         ! ocean velocities and RHS of momentum equation
54      !
55      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdu, ztrdv
56      !!----------------------------------------------------------------------
57      !
58      IF( ln_timing )   CALL timing_start('dyn_ldf')
59      !
60      IF( l_trddyn )   THEN                      ! temporary save of momentum trends
61         ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) )
62         ztrdu(:,:,:) = puu(:,:,:,Krhs) 
63         ztrdv(:,:,:) = pvv(:,:,:,Krhs) 
64      ENDIF
65
66      SELECT CASE ( nldf_dyn )                   ! compute lateral mixing trend and add it to the general trend
67      !
68      CASE ( np_lap   ) 
69         CALL dyn_ldf_lap( kt, Kbb, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs), 1 ) ! iso-level    laplacian
70      CASE ( np_lap_i ) 
71         CALL dyn_ldf_iso( kt, Kbb, Kmm, puu, pvv, Krhs    )                                                   ! rotated      laplacian
72      CASE ( np_blp   ) 
73         CALL dyn_ldf_blp( kt, Kbb, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs)    ) ! iso-level bi-laplacian
74      !
75      END SELECT
76
77      IF( l_trddyn ) THEN                        ! save the horizontal diffusive trends for further diagnostics
78         ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:)
79         ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:)
80         CALL trd_dyn( ztrdu, ztrdv, jpdyn_ldf, kt )
81         DEALLOCATE ( ztrdu , ztrdv )
82      ENDIF
83      !                                          ! print sum trends (used for debugging)
84      IF(ln_ctl)   CALL prt_ctl( tab3d_1=puu(:,:,:,Krhs), clinfo1=' ldf  - Ua: ', mask1=umask,   &
85         &                       tab3d_2=pvv(:,:,:,Krhs), clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' )
86      !
87      IF( ln_timing )   CALL timing_stop('dyn_ldf')
88      !
89   END SUBROUTINE dyn_ldf
90
91
92   SUBROUTINE dyn_ldf_init
93      !!----------------------------------------------------------------------
94      !!                  ***  ROUTINE dyn_ldf_init  ***
95      !!
96      !! ** Purpose :   initializations of the horizontal ocean dynamics physics
97      !!----------------------------------------------------------------------
98      !
99      IF(lwp) THEN                     !==  Namelist print  ==!
100         WRITE(numout,*)
101         WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics'
102         WRITE(numout,*) '~~~~~~~~~~~~'
103         WRITE(numout,*) '   Namelist namdyn_ldf: already read in ldfdyn module'
104         WRITE(numout,*) '      see ldf_dyn_init report for lateral mixing parameters'
105         WRITE(numout,*)
106         !
107         SELECT CASE( nldf_dyn )             ! print the choice of operator
108         CASE( np_no_ldf )   ;   WRITE(numout,*) '   ==>>>   NO lateral viscosity'
109         CASE( np_lap    )   ;   WRITE(numout,*) '   ==>>>   iso-level laplacian operator'
110         CASE( np_lap_i  )   ;   WRITE(numout,*) '   ==>>>   rotated laplacian operator with iso-level background'
111         CASE( np_blp    )   ;   WRITE(numout,*) '   ==>>>   iso-level bi-laplacian operator'
112         END SELECT
113      ENDIF
114      !
115   END SUBROUTINE dyn_ldf_init
116
117   !!======================================================================
118END MODULE dynldf
Note: See TracBrowser for help on using the repository browser.