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

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90 @ 8442

Last change on this file since 8442 was 8442, checked in by frrh, 7 years ago

Commit changes relating to Met Office GMED ticket 340 for the
tidying of MEDUSA related code and debugging statements in the TOP code.

Only code introduced at revision 8434 of branch
http://fcm3/projects/NEMO.xm/log/branches/NERC/dev_r5518_GO6_split_trcbiomedusa
is included here, all previous revisions of that branch having been dealt with
under GMED ticket 339.

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