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

Last change on this file since 489 was 439, checked in by opalod, 18 years ago

nemo_v1_update_045 : CT : modifications to be able to run 1D on-line & off-line passive tracers configurations

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 7.4 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   !!   TOP 1.0 , LOCEAN-IPSL (2005)
53   !! $Header$
54   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
55   !!----------------------------------------------------------------------
56
57CONTAINS
58
59   SUBROUTINE trc_trp( kt )
60      !!----------------------------------------------------------------------
61      !!                     ***  ROUTINE trc_trp  ***
62      !!                     
63      !! ** Purpose : Management of passive tracers transport
64      !!
65      !! ** Method  :
66      !!              Compute the passive tracers trends
67      !!              Update the passive tracers
68      !!
69      !! History :
70      !!   9.0  !  04-03  (C. Ethe)  Original
71      !!----------------------------------------------------------------------
72      !! * Arguments
73      INTEGER, INTENT( in ) ::  kt  ! ocean time-step index
74      !! ---------------------------------------------------------------------
75
76      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
77      ! Passitive tracers
78      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
79      !-----------------------------------------------------------------------
80
81 
82                               CALL trc_sbc( kt )            ! surface boundary condition
83# if defined key_trcbbc
84      IF(lwp) WRITE(numout,cform_err)
85      IF(lwp) WRITE(numout,*) ' Bottom heat flux not yet implemented'
86      IF(lwp) WRITE(numout,*) ' With passive tracers. '
87      IF(lwp) WRITE(numout,*) ' Check trc_trp routine'
88      nstop = nstop + 1
89# endif 
90      !                                                      ! bottom boundary condition
91      IF( lk_trcbbl_dif    )   CALL trc_bbl_dif( kt )                ! diffusive bottom boundary layer scheme
92      IF( lk_trcbbl_adv    )   CALL trc_bbl_adv( kt )                ! advective (and/or diffusive) bottom boundary layer scheme
93
94      IF( lk_trcdmp        )   CALL trc_dmp( kt )            ! internal damping trends
95
96      !                                                      ! horizontal & vertical advection
97      IF( ln_trcadv_cen2   )   CALL trc_adv_cen2  ( kt )             ! 2nd order centered scheme
98      IF( ln_trcadv_muscl  )   CALL trc_adv_muscl ( kt )             ! MUSCL scheme
99      IF( ln_trcadv_muscl2 )   CALL trc_adv_muscl2( kt )             ! MUSCL2 scheme
100      IF( ln_trcadv_tvd    )   CALL trc_adv_tvd   ( kt )             ! TVD scheme
101      IF( ln_trcadv_smolar )   CALL trc_adv_smolar( kt )             ! SMOLARKIEWICZ scheme
102
103 
104      IF( n_cla == 1   )   THEN
105         IF(lwp) WRITE(numout,cform_err)
106         IF(lwp) WRITE(numout,*) '          Cross Land Advection not yet implemented'
107         IF(lwp) WRITE(numout,*) '          With Passive tracers. n_cla = ', n_cla
108         IF(lwp) WRITE(numout,*) '          Check trc_trp routine'
109         nstop = nstop + 1
110      ENDIF
111
112      !                                                      ! lateral mixing
113      IF( l_trcldf_bilapg  )   CALL trc_ldf_bilapg ( kt )            ! s-coord. horizontal bilaplacian
114      IF( l_trcldf_bilap   )   CALL trc_ldf_bilap  ( kt )            ! iso-level bilaplacian
115      IF( l_trcldf_iso     )   CALL trc_ldf_iso    ( kt )            ! iso-neutral laplacian
116      IF( l_trcldf_iso_zps )   CALL trc_ldf_iso_zps( kt )            ! partial step iso-neutral laplacian
117      IF( l_trcldf_lap     )   CALL trc_ldf_lap    ( kt )            ! iso-level laplacian
118 
119      !                                                      ! vertical diffusion
120      IF( l_trczdf_exp     )   CALL trc_zdf_exp( kt )                ! explicit time stepping (time splitting scheme)
121      IF( l_trczdf_imp     )   CALL trc_zdf_imp( kt )                ! implicit time stepping (euler backward)
122      IF( l_trczdf_iso     )   CALL trc_zdf_iso( kt )                ! isopycnal
123      IF( l_trczdf_iso_vo  )   CALL trc_zdf_iso_vopt( kt )           ! vector opt. isopycnal
124
125                               CALL trc_nxt( kt )            ! tracer fields at next time step
126 
127                               CALL trc_rad( kt )            ! Correct artificial negative concentrations for isopycnal scheme
128      !                                                     
129
130      IF( lk_zps .AND. .NOT. lk_trccfg_1d ) &
131         &                     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 :                      NO passive tracers
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.