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.
trctrp.F90 in trunk/NEMO/TOP_SRC/TRP – NEMO

source: trunk/NEMO/TOP_SRC/TRP/trctrp.F90 @ 197

Last change on this file since 197 was 186, checked in by opalod, 20 years ago

CL + CE : NEMO TRC_SRC start

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1MODULE trctrp
2   !!======================================================================
3   !!                       ***  MODULE trctrp  ***
4   !! Ocean Physics    : manage of passive tracer transport
5   !!======================================================================
6#if defined key_passivetrc
7   !!----------------------------------------------------------------------
8   !!   trc_trp        : passive tracer transport
9   !!----------------------------------------------------------------------
10   !! * Modules used
11   USE oce_trc     ! ocean dynamics variables
12   USE trc         ! passive tracers variables
13   USE lbclnk
14
15   USE trctrp_lec
16
17   USE trcbbl          ! bottom boundary layer        (trc_bbl routine)
18   USE trcdmp          ! internal damping             (trc_dmp routine)
19
20   USE trcldf_bilapg   ! lateral mixing        (trc_ldf_bilapg routine)
21   USE trcldf_bilap    ! lateral mixing         (trc_ldf_bilap routine)
22   USE trcldf_iso      ! lateral mixing           (trc_ldf_iso routine)
23   USE trcldf_iso_zps  ! lateral mixing       (trc_ldf_iso_zps routine)
24   USE trcldf_lap      ! lateral mixing           (trc_ldf_lap routine)
25 
26   USE trcnxt          ! time-stepping                (trc_nxt routine)
27   USE trcrad          ! positivity                   (trc_rad routine)
28
29   USE trcadv_cen2     ! 2nd order centered advection (trc_adv_cen2 routine)
30   USE trcadv_muscl    ! MUSCL advection              (trc_adv_muscl routine)
31   USE trcadv_muscl2   ! MUSCL2 advection             (trc_adv_muscl2 routine)
32   USE trcadv_tvd      ! TVD advection                (trc_adv_tvd routine)
33   USE trcadv_smolar   ! SMOLAR advection             (trc_adv_smolar routine)
34
35   USE trczdf_exp      ! vertical diffusion       (trc_zdf_exp routine)
36   USE trczdf_imp      ! vertical diffusion       (trc_zdf_exp routine)
37   USE trczdf_iso      ! vertical diffusion       (trc_zdf_exp routine)
38   USE trczdf_iso_vopt ! vertical diffusion       (trc_zdf_exp routine)
39   USE trcsbc          ! surface boundary condition   (trc_sbc routine)
40
41   USE zpshde_trc      ! partial step: hor. derivative (zps_hde_trc routine)
42
43
44   IMPLICIT NONE
45   PRIVATE
46
47   !! * Routine accessibility
48   PUBLIC trc_trp            ! called by trc_stp
49
50   !! * Substitutions
51#  include "domzgr_substitute.h90"
52   !!----------------------------------------------------------------------
53   !!   OPA 9.0 , LODYC-IPSL (2003)
54   !!----------------------------------------------------------------------
55
56CONTAINS
57
58   SUBROUTINE trc_trp( kt )
59      !!----------------------------------------------------------------------
60      !!                     ***  ROUTINE trc_trp  ***
61      !!                     
62      !! ** Purpose : Management of passive tracers transport
63      !!
64      !! ** Method  :
65      !!              Compute the passive tracers trends
66      !!              Update the passive tracers
67      !!
68      !! History :
69      !!   9.0  !  04-03  (C. Ethe)  Original
70      !!----------------------------------------------------------------------
71      !! * Arguments
72      INTEGER, INTENT( in ) ::  kt  ! ocean time-step index
73
74
75      !! ---------------------------------------------------------------------
76
77
78      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
79      ! Passitive tracers
80      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
81      !-----------------------------------------------------------------------
82
83 
84                                CALL trc_sbc( kt )             ! surface boundary condition
85 
86 
87#if defined key_trabbc
88????????Passive tracers and key_obc not yet implemented
89????????Forced compiled error
90#endif
91
92      IF( lk_trcbbl_dif    )   CALL trc_bbl_dif( kt )           ! diffusive bottom boundary layer scheme
93      IF( lk_trcbbl_adv    )   CALL trc_bbl_adv( kt )           ! advective (and/or diffusive) bottom boundary layer scheme
94
95
96      IF( lk_trcdmp        )   CALL trc_dmp( kt )             ! internal damping trends
97 
98      !                                                             ! horizontal & vertical advection
99      IF( ln_trcadv_cen2   )  CALL trc_adv_cen2  ( kt )             ! 2nd order centered scheme
100      IF( ln_trcadv_muscl  )  CALL trc_adv_muscl ( kt )             ! MUSCL scheme
101      IF( ln_trcadv_muscl2 )  CALL trc_adv_muscl2( kt )             ! MUSCL2 scheme
102      IF( ln_trcadv_tvd    )  CALL trc_adv_tvd   ( kt )             ! TVD scheme
103      IF( ln_trcadv_smolar )  CALL trc_adv_smolar( kt )
104   
105 
106      IF( n_cla == 1   )   THEN
107         WRITE(numout,*) ' Cross Land Advection not yet implemented'
108         WRITE(numout,*) ' With Passive tracers. STOPPPPPP !!!!'
109         STOP
110      ENDIF
111
112      !   
113                                                  ! lateral mixing
114      IF( l_trcldf_bilapg  )   CALL trc_ldf_bilapg ( kt )           ! s-coord. horizontal bilaplacian
115      IF( l_trcldf_bilap   )   CALL trc_ldf_bilap  ( kt )           ! iso-level bilaplacian
116      IF( l_trcldf_iso     )   CALL trc_ldf_iso    ( kt )           ! iso-neutral laplacian
117      IF( l_trcldf_iso_zps )   CALL trc_ldf_iso_zps( kt )           ! partial step iso-neutral laplacian
118      IF( l_trcldf_lap     )   CALL trc_ldf_lap    ( kt )           ! iso-level laplacian
119 
120      !                                                     ! vertical diffusion
121      IF( l_trczdf_exp     )   CALL trc_zdf_exp( kt )               ! explicit time stepping (time splitting scheme)
122      IF( l_trczdf_imp     )   CALL trc_zdf_imp( kt )               ! implicit time stepping (euler backward)
123      IF( l_trczdf_iso     )   CALL trc_zdf_iso( kt )               ! isopycnal
124      IF( l_trczdf_iso_vo  )   CALL trc_zdf_iso_vopt( kt )          ! vector opt. isopycnal
125
126                               CALL trc_nxt( kt )            ! tracer fields at next time step
127 
128                               CALL trc_rad( kt )            ! Correct artificial negative concentrations
129      !                                                      ! for isopycnal scheme
130
131      IF( lk_zps           )   CALL zps_hde_trc( kt, trb, gtru, gtrv )  ! Partial steps: now horizontal gradient
132      !                                                                 ! of passive tracers at the bottom ocean level
133
134
135    END SUBROUTINE trc_trp
136
137#else
138   !!----------------------------------------------------------------------
139   !!   Dummy module :                      Rigid-lid case
140   !!----------------------------------------------------------------------
141CONTAINS
142   SUBROUTINE trc_trp (kt )              ! Empty routine
143      INTEGER, INTENT(in) :: kt
144      WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kt
145   END SUBROUTINE trc_trp
146#endif
147   
148   !!======================================================================
149END MODULE trctrp
Note: See TracBrowser for help on using the repository browser.