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

source: branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90 @ 4292

Last change on this file since 4292 was 4148, checked in by cetlod, 10 years ago

merge in trunk changes between r3853 and r3940 and commit the changes, see ticket #1169

  • Property svn:keywords set to Id
File size: 5.9 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 ! tracers sponges
32   USE agrif_top_update ! tracers updates
33#endif
34
35   IMPLICIT NONE
36   PRIVATE
37
38   PUBLIC   trc_trp    ! called by trc_stp
39
40   !! * Substitutions
41#  include "top_substitute.h90"
42   !!----------------------------------------------------------------------
43   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
44   !! $Id$
45   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
46   !!----------------------------------------------------------------------
47
48CONTAINS
49
50   SUBROUTINE trc_trp( kstp )
51      !!----------------------------------------------------------------------
52      !!                     ***  ROUTINE trc_trp  ***
53      !!                     
54      !! ** Purpose :   Management of passive tracers transport
55      !!
56      !! ** Method  : - Compute the passive tracers trends
57      !!              - Update the passive tracers
58      !!----------------------------------------------------------------------
59      INTEGER, INTENT( in ) ::  kstp  ! ocean time-step index
60      !! ---------------------------------------------------------------------
61      !
62      IF( nn_timing == 1 )   CALL timing_start('trc_trp')
63      !
64      IF( .NOT. lk_c1d ) THEN
65         !
66                                CALL trc_sbc( kstp )            ! surface boundary condition
67         IF( lk_trabbl )        CALL trc_bbl( kstp )            ! advective (and/or diffusive) bottom boundary layer scheme
68         IF( ln_trcdmp )        CALL trc_dmp( kstp )            ! internal damping trends
69         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kstp )        ! internal damping trends on closed seas only
70                                CALL trc_adv( kstp )            ! horizontal & vertical advection
71                                CALL trc_ldf( kstp )            ! lateral mixing
72         IF( .NOT. lk_offline .AND. lk_zdfkpp )    &
73            &                   CALL trc_kpp( kstp )            ! KPP non-local tracer fluxes
74#if defined key_agrif
75         IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc           ! tracers sponge
76#endif
77                                CALL trc_zdf( kstp )            ! vertical mixing and after tracer fields
78                                CALL trc_nxt( kstp )            ! tracer fields at next time step     
79         IF( ln_trcrad )        CALL trc_rad( kstp )            ! Correct artificial negative concentrations
80
81#if defined key_agrif
82      IF( .NOT. Agrif_Root())   CALL Agrif_Update_Trc( kstp )   ! Update tracer at AGRIF zoom boundaries : children only
83#endif
84         IF( ln_zps    )        CALL zps_hde( kstp, jptra, trn, gtru, gtrv )  ! Partial steps: now horizontal gradient of passive
85                                                                ! tracers at the bottom ocean level
86         !
87      ELSE                                               ! 1D vertical configuration
88                                CALL trc_sbc( kstp )            ! surface boundary condition
89         IF( .NOT. lk_offline .AND. lk_zdfkpp )    &
90            &                   CALL trc_kpp( kstp )            ! KPP non-local tracer fluxes
91                                CALL trc_zdf( kstp )            ! vertical mixing and after tracer fields
92                                CALL trc_nxt( kstp )            ! tracer fields at next time step     
93          IF( ln_trcrad )       CALL trc_rad( kstp )            ! Correct artificial negative concentrations
94         !
95      END IF
96      !
97      IF( nn_timing == 1 )   CALL timing_stop('trc_trp')
98      !
99   END SUBROUTINE trc_trp
100
101#else
102   !!----------------------------------------------------------------------
103   !!   Dummy module :                                        No TOP models
104   !!----------------------------------------------------------------------
105CONTAINS
106   SUBROUTINE trc_trp( kstp )              ! Empty routine
107      INTEGER, INTENT(in) ::   kstp
108      WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kstp
109   END SUBROUTINE trc_trp
110#endif
111   
112   !!======================================================================
113END MODULE trctrp
Note: See TracBrowser for help on using the repository browser.