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

Last change on this file since 8356 was 8356, checked in by davestorkey, 7 years ago

UKMO/dev_r5518_GO6_package branch: merge in changes from rev 6917 to 6959 of the 3.6_stable branch.

File size: 6.8 KB
RevLine 
[941]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
[2528]7   !!             3.3  !  2010-07 (C. Ethe) Merge TRA-TRC
[941]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
[2528]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)
[941]19   USE trcbbl          ! bottom boundary layer               (trc_bbl routine)
[2528]20   USE zdfkpp          ! KPP non-local tracer fluxes         (trc_kpp routine)
[941]21   USE trcdmp          ! internal damping                    (trc_dmp routine)
[2528]22   USE trcldf          ! lateral mixing                      (trc_ldf routine)
23   USE trcadv          ! advection                           (trc_adv routine)
24   USE trczdf          ! vertical diffusion                  (trc_zdf routine)
[941]25   USE trcnxt          ! time-stepping                       (trc_nxt routine)
26   USE trcrad          ! positivity                          (trc_rad routine)
27   USE trcsbc          ! surface boundary condition          (trc_sbc routine)
[2528]28   USE zpshde          ! partial step: hor. derivative       (zps_hde routine)
[8280]29# if defined key_debug_medusa
30   USE trcrst
31# endif
[941]32
[8280]33
[1271]34#if defined key_agrif
[3680]35   USE agrif_top_sponge ! tracers sponges
36   USE agrif_top_update ! tracers updates
[1271]37#endif
38
[941]39   IMPLICIT NONE
40   PRIVATE
41
42   PUBLIC   trc_trp    ! called by trc_stp
43
44   !! * Substitutions
[1800]45#  include "top_substitute.h90"
[941]46   !!----------------------------------------------------------------------
[2528]47   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
[6486]48   !! $Id$
[2528]49   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[941]50   !!----------------------------------------------------------------------
51
52CONTAINS
53
[2528]54   SUBROUTINE trc_trp( kstp )
[941]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      !!----------------------------------------------------------------------
[2528]63      INTEGER, INTENT( in ) ::  kstp  ! ocean time-step index
[941]64      !! ---------------------------------------------------------------------
[3294]65      !
66      IF( nn_timing == 1 )   CALL timing_start('trc_trp')
67      !
[2528]68      IF( .NOT. lk_c1d ) THEN
69         !
70                                CALL trc_sbc( kstp )            ! surface boundary condition
[8280]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
[2528]76         IF( lk_trabbl )        CALL trc_bbl( kstp )            ! advective (and/or diffusive) bottom boundary layer scheme
[4148]77         IF( ln_trcdmp )        CALL trc_dmp( kstp )            ! internal damping trends
[2528]78                                CALL trc_adv( kstp )            ! horizontal & vertical advection
[8280]79# if defined key_debug_medusa
80         IF(lwp) WRITE(numout,*) ' MEDUSA trc_trp after trc_adv at kt =', kstp
81         CALL trc_rst_tra_stat
82         CALL flush(numout)
83# endif
[8356]84
85         IF( ln_zps ) THEN
86           IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kstp, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom
87           ELSE                 ; CALL zps_hde    ( kstp, jptra, trb, gtru, gtrv )                                      !  only bottom
88           ENDIF
89         ENDIF
[2528]90                                CALL trc_ldf( kstp )            ! lateral mixing
91         IF( .NOT. lk_offline .AND. lk_zdfkpp )    &
92            &                   CALL trc_kpp( kstp )            ! KPP non-local tracer fluxes
[1271]93#if defined key_agrif
[2528]94         IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc           ! tracers sponge
[1271]95#endif
[2528]96                                CALL trc_zdf( kstp )            ! vertical mixing and after tracer fields
[8280]97# if defined key_debug_medusa
98         IF(lwp) WRITE(numout,*) ' MEDUSA trc_trp after trc_zdf at kt =', kstp
99         CALL trc_rst_tra_stat
100         CALL flush(numout)
101# endif
[2528]102                                CALL trc_nxt( kstp )            ! tracer fields at next time step     
[8280]103# if defined key_debug_medusa
104         IF(lwp) WRITE(numout,*) ' MEDUSA trc_trp after trc_nxt at kt =', kstp
105         CALL trc_rst_tra_stat
106         CALL flush(numout)
107# endif
[2528]108         IF( ln_trcrad )        CALL trc_rad( kstp )            ! Correct artificial negative concentrations
[6498]109         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kstp )        ! internal damping trends on closed seas only
[3680]110
111#if defined key_agrif
112      IF( .NOT. Agrif_Root())   CALL Agrif_Update_Trc( kstp )   ! Update tracer at AGRIF zoom boundaries : children only
113#endif
[5120]114
[2528]115      ELSE                                               ! 1D vertical configuration
116                                CALL trc_sbc( kstp )            ! surface boundary condition
117         IF( .NOT. lk_offline .AND. lk_zdfkpp )    &
118            &                   CALL trc_kpp( kstp )            ! KPP non-local tracer fluxes
119                                CALL trc_zdf( kstp )            ! vertical mixing and after tracer fields
120                                CALL trc_nxt( kstp )            ! tracer fields at next time step     
121          IF( ln_trcrad )       CALL trc_rad( kstp )            ! Correct artificial negative concentrations
122         !
123      END IF
[941]124      !
[3294]125      IF( nn_timing == 1 )   CALL timing_stop('trc_trp')
126      !
[8356]1279400  FORMAT(a25,i4,D23.16)
128      !
[941]129   END SUBROUTINE trc_trp
130
131#else
132   !!----------------------------------------------------------------------
133   !!   Dummy module :                                        No TOP models
134   !!----------------------------------------------------------------------
135CONTAINS
[3680]136   SUBROUTINE trc_trp( kstp )              ! Empty routine
137      INTEGER, INTENT(in) ::   kstp
138      WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kstp
[941]139   END SUBROUTINE trc_trp
140#endif
141   
142   !!======================================================================
143END MODULE trctrp
Note: See TracBrowser for help on using the repository browser.