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

Last change on this file since 941 was 941, checked in by cetlod, 16 years ago

phasing the passive tracer transport module to the new version of NEMO, see ticket 143

  • Property svn:executable set to *
File size: 7.5 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   !!----------------------------------------------------------------------
8#if defined key_top
9   !!----------------------------------------------------------------------
10   !!   'key_top'                                                TOP models
11   !!----------------------------------------------------------------------
12   !!   trc_trp        : passive tracer transport
13   !!----------------------------------------------------------------------
14   USE oce_trc         ! ocean dynamics and active tracers variables
15   USE trc             ! ocean passive tracers variables
16   USE trctrp_lec      ! passive tracers transport parameters
17   USE prtctl_trc     ! Print control for debbuging
18
19   USE trcbbl          ! bottom boundary layer               (trc_bbl routine)
20   USE trcdmp          ! internal damping                    (trc_dmp routine)
21
22   USE trcldf_bilapg   ! lateral mixing               (trc_ldf_bilapg routine)
23   USE trcldf_bilap    ! lateral mixing                (trc_ldf_bilap routine)
24   USE trcldf_iso      ! lateral mixing                  (trc_ldf_iso routine)
25   USE trcldf_iso_zps  ! lateral mixing              (trc_ldf_iso_zps routine)
26   USE trcldf_lap      ! lateral mixing                  (trc_ldf_lap routine)
27 
28   USE trcnxt          ! time-stepping                       (trc_nxt routine)
29   USE trcrad          ! positivity                          (trc_rad routine)
30
31   USE trcadv_cen2     ! 2nd order centered advection   (trc_adv_cen2 routine)
32   USE trcadv_muscl    ! MUSCL advection               (trc_adv_muscl routine)
33   USE trcadv_muscl2   ! MUSCL2 advection             (trc_adv_muscl2 routine)
34   USE trcadv_tvd      ! TVD advection                   (trc_adv_tvd routine)
35   USE trcadv_smolar   ! SMOLAR advection             (trc_adv_smolar routine)
36
37   USE trczdf_exp      ! vertical diffusion              (trc_zdf_exp routine)
38   USE trczdf_imp      ! vertical diffusion              (trc_zdf_exp routine)
39   USE trczdf_iso      ! vertical diffusion              (trc_zdf_exp routine)
40   USE trczdf_iso_vopt ! vertical diffusion              (trc_zdf_exp routine)
41   USE trcsbc          ! surface boundary condition          (trc_sbc routine)
42
43   USE zpshde_trc      ! partial step: hor. derivative   (zps_hde_trc routine)
44
45   IMPLICIT NONE
46   PRIVATE
47
48   PUBLIC   trc_trp    ! called by trc_stp
49
50   !! * Substitutions
51#  include "domzgr_substitute.h90"
52   !!----------------------------------------------------------------------
53   !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)
54   !! $Id: trctrp.F90 773 2007-12-17 16:55:32Z gm $
55   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
56   !!----------------------------------------------------------------------
57
58CONTAINS
59
60   SUBROUTINE trc_trp( kt )
61      !!----------------------------------------------------------------------
62      !!                     ***  ROUTINE trc_trp  ***
63      !!                     
64      !! ** Purpose :   Management of passive tracers transport
65      !!
66      !! ** Method  : - Compute the passive tracers trends
67      !!              - Update the passive tracers
68      !!----------------------------------------------------------------------
69      INTEGER, INTENT( in ) ::  kt  ! ocean time-step index
70      !!
71      CHARACTER (len=25) :: charout
72      !! ---------------------------------------------------------------------
73
74                               CALL trc_sbc( kt )            ! surface boundary condition
75# if defined key_trcbbc
76!!gm bug : this should be control during the initialisation phase, not here!
77       CALL ctl_stop( '  Bottom heat flux not yet implemented with passive tracer         ' &
78           &          '  Check in trc_trp routine ' )
79# endif 
80      !                                                      ! bottom boundary condition
81      IF( lk_trcbbl_dif    )   CALL trc_bbl_dif( kt )            ! diffusive bottom boundary layer scheme
82      IF( lk_trcbbl_adv    )   CALL trc_bbl_adv( kt )            ! advective (and/or diffusive) bottom boundary layer scheme
83
84      IF( lk_trcdmp        )   CALL trc_dmp( kt )            ! internal damping trends
85
86      !                                                      ! horizontal & vertical advection
87      IF( ln_trcadv_cen2   )   CALL trc_adv_cen2  ( kt )         ! 2nd order centered scheme
88      IF( ln_trcadv_muscl  )   CALL trc_adv_muscl ( kt )         ! MUSCL scheme
89      IF( ln_trcadv_muscl2 )   CALL trc_adv_muscl2( kt )         ! MUSCL2 scheme
90      IF( ln_trcadv_tvd    )   CALL trc_adv_tvd   ( kt )         ! TVD scheme
91      IF( ln_trcadv_smolar )   CALL trc_adv_smolar( kt )         ! SMOLARKIEWICZ scheme
92
93 
94      IF( n_cla == 1   ) THEN
95!!gm bug : this should be control during the initialisation phase, not here!
96         WRITE(ctmp1,*) ' Cross Land Advection not yet implemented with passive tracer n_cla = ',n_cla
97         CALL ctl_stop( ctmp1 )
98      ENDIF
99
100      !                                                      ! lateral mixing
101      IF( l_trcldf_bilapg  )   CALL trc_ldf_bilapg ( kt )        ! s-coord. horizontal bilaplacian
102      IF( l_trcldf_bilap   )   CALL trc_ldf_bilap  ( kt )        ! iso-level bilaplacian
103      IF( l_trcldf_iso     )   CALL trc_ldf_iso    ( kt )        ! iso-neutral laplacian
104      IF( l_trcldf_iso_zps )   CALL trc_ldf_iso_zps( kt )        ! partial step iso-neutral laplacian
105      IF( l_trcldf_lap     )   CALL trc_ldf_lap    ( kt )        ! iso-level laplacian
106 
107      !                                                      ! vertical diffusion
108      IF( l_trczdf_exp     )   CALL trc_zdf_exp     ( kt )       ! explicit time stepping (time splitting scheme)
109      IF( l_trczdf_imp     )   CALL trc_zdf_imp     ( kt )       ! implicit time stepping (euler backward)
110      IF( l_trczdf_iso     )   CALL trc_zdf_iso     ( kt )       ! isopycnal
111      IF( l_trczdf_iso_vo  )   CALL trc_zdf_iso_vopt( kt )       ! vector opt. isopycnal
112
113                               CALL trc_nxt( kt )            ! tracer fields at next time step
114 
115                               CALL trc_rad( kt )            ! Correct artificial negative concentrations
116      !                                                      ! especially useful when isopycnal mixing is used
117      !                                                     
118
119      IF( ln_zps .AND. .NOT. lk_trc_c1d )   &              ! Partial steps: now horizontal gradient of passive
120         &                     CALL zps_hde_trc( kt, trb, gtru, gtrv )       ! tracers at the bottom ocean level
121      !
122      IF(ln_ctl) THEN      ! print mean trends (used for debugging)
123         WRITE(charout, FMT="('TRP')")
124         CALL prt_ctl_trc_info( charout )
125         CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm )
126      ENDIF
127      !
128   END SUBROUTINE trc_trp
129
130#else
131   !!----------------------------------------------------------------------
132   !!   Dummy module :                                        No TOP models
133   !!----------------------------------------------------------------------
134CONTAINS
135   SUBROUTINE trc_trp( kt )              ! Empty routine
136      INTEGER, INTENT(in) ::   kt
137      WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kt
138   END SUBROUTINE trc_trp
139#endif
140   
141   !!======================================================================
142END MODULE trctrp
Note: See TracBrowser for help on using the repository browser.