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 @ 10946

Last change on this file since 10946 was 10946, checked in by acc, 5 years ago

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert STO, TRD and USR modules and all knock on effects of these conversions. Note change to USR module may have implications for the TEST CASES (not tested yet). Standard SETTE tested only

  • 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, Kmm )
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.