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/NEMOGCM/NEMO/TOP_SRC/TRP – NEMO

source: trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90 @ 3294

Last change on this file since 3294 was 3294, checked in by rblod, 12 years ago

Merge of 3.4beta into the trunk

  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
1MODULE trctrp
2   !!======================================================================
3   !!                       ***  MODULE trctrp  ***
4   !! Ocean Physics    : manage the passive tracer transport
5   !!======================================================================
6   !! History :   1.0  !  2004-03 (C. Ethe) Original code
7   !!             3.3  !  2010-07 (C. Ethe) Merge TRA-TRC
8   !!----------------------------------------------------------------------
9#if defined key_top
10   !!----------------------------------------------------------------------
11   !!   'key_top'                                                TOP models
12   !!----------------------------------------------------------------------
13   !!   trc_trp        : passive tracer transport
14   !!----------------------------------------------------------------------
15   USE oce_trc         ! ocean dynamics and active tracers variables
16   USE trc             ! ocean passive tracers variables
17   USE trcnam_trp      ! passive tracers transport namelist variables
18   USE trabbl          ! bottom boundary layer               (trc_bbl routine)
19   USE trcbbl          ! bottom boundary layer               (trc_bbl routine)
20   USE zdfkpp          ! KPP non-local tracer fluxes         (trc_kpp routine)
21   USE trcdmp          ! internal damping                    (trc_dmp routine)
22   USE trcldf          ! lateral mixing                      (trc_ldf routine)
23   USE trcadv          ! advection                           (trc_adv routine)
24   USE trczdf          ! vertical diffusion                  (trc_zdf routine)
25   USE trcnxt          ! time-stepping                       (trc_nxt routine)
26   USE trcrad          ! positivity                          (trc_rad routine)
27   USE trcsbc          ! surface boundary condition          (trc_sbc routine)
28   USE zpshde          ! partial step: hor. derivative       (zps_hde routine)
29
30#if defined key_agrif
31   USE agrif_top_sponge ! Momemtum and tracers sponges
32#endif
33
34   IMPLICIT NONE
35   PRIVATE
36
37   PUBLIC   trc_trp    ! called by trc_stp
38
39   !! * Substitutions
40#  include "top_substitute.h90"
41   !!----------------------------------------------------------------------
42   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
43   !! $Id$
44   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
45   !!----------------------------------------------------------------------
46
47CONTAINS
48
49   SUBROUTINE trc_trp( kstp )
50      !!----------------------------------------------------------------------
51      !!                     ***  ROUTINE trc_trp  ***
52      !!                     
53      !! ** Purpose :   Management of passive tracers transport
54      !!
55      !! ** Method  : - Compute the passive tracers trends
56      !!              - Update the passive tracers
57      !!----------------------------------------------------------------------
58      INTEGER, INTENT( in ) ::  kstp  ! ocean time-step index
59      !! ---------------------------------------------------------------------
60      !
61      IF( nn_timing == 1 )   CALL timing_start('trc_trp')
62      !
63      IF( .NOT. lk_c1d ) THEN
64         !
65                                CALL trc_sbc( kstp )            ! surface boundary condition
66         IF( lk_trabbl )        CALL trc_bbl( kstp )            ! advective (and/or diffusive) bottom boundary layer scheme
67         IF( lk_trcdmp )        CALL trc_dmp( kstp )            ! internal damping trends
68                                CALL trc_adv( kstp )            ! horizontal & vertical advection
69                                CALL trc_ldf( kstp )            ! lateral mixing
70         IF( .NOT. lk_offline .AND. lk_zdfkpp )    &
71            &                   CALL trc_kpp( kstp )            ! KPP non-local tracer fluxes
72#if defined key_agrif
73         IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc           ! tracers sponge
74#endif
75                                CALL trc_zdf( kstp )            ! vertical mixing and after tracer fields
76                                CALL trc_nxt( kstp )            ! tracer fields at next time step     
77         IF( ln_trcrad )        CALL trc_rad( kstp )            ! Correct artificial negative concentrations
78         IF( ln_zps    )        CALL zps_hde( kstp, jptra, trn, gtru, gtrv )  ! Partial steps: now horizontal gradient of passive
79                                                                ! tracers at the bottom ocean level
80         !
81      ELSE                                               ! 1D vertical configuration
82                                CALL trc_sbc( kstp )            ! surface boundary condition
83         IF( .NOT. lk_offline .AND. lk_zdfkpp )    &
84            &                   CALL trc_kpp( kstp )            ! KPP non-local tracer fluxes
85                                CALL trc_zdf( kstp )            ! vertical mixing and after tracer fields
86                                CALL trc_nxt( kstp )            ! tracer fields at next time step     
87          IF( ln_trcrad )       CALL trc_rad( kstp )            ! Correct artificial negative concentrations
88         !
89      END IF
90      !
91      IF( nn_timing == 1 )   CALL timing_stop('trc_trp')
92      !
93   END SUBROUTINE trc_trp
94
95#else
96   !!----------------------------------------------------------------------
97   !!   Dummy module :                                        No TOP models
98   !!----------------------------------------------------------------------
99CONTAINS
100   SUBROUTINE trc_trp( kt )              ! Empty routine
101      INTEGER, INTENT(in) ::   kt
102      WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kt
103   END SUBROUTINE trc_trp
104#endif
105   
106   !!======================================================================
107END MODULE trctrp
Note: See TracBrowser for help on using the repository browser.