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

Last change on this file since 202 was 202, checked in by opalod, 19 years ago

CT : UPDATE142 : Check the consistency between passive tracers transport modules (in TRP directory) and those used for the active tracers

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