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 NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP – NEMO

source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trctrp.F90 @ 10946

Last change on this file since 10946 was 10946, checked in by acc, 5 years ago

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert STO, TRD and USR modules and all knock on effects of these conversions. Note change to USR module may have implications for the TEST CASES (not tested yet). Standard SETTE tested only

  • Property svn:keywords set to Id
File size: 5.9 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
[941]17   USE trcbbl          ! bottom boundary layer               (trc_bbl routine)
18   USE trcdmp          ! internal damping                    (trc_dmp routine)
[2528]19   USE trcldf          ! lateral mixing                      (trc_ldf routine)
20   USE trcadv          ! advection                           (trc_adv routine)
21   USE trczdf          ! vertical diffusion                  (trc_zdf routine)
[941]22   USE trcnxt          ! time-stepping                       (trc_nxt routine)
23   USE trcrad          ! positivity                          (trc_rad routine)
24   USE trcsbc          ! surface boundary condition          (trc_sbc routine)
[2528]25   USE zpshde          ! partial step: hor. derivative       (zps_hde routine)
[7646]26   USE bdy_oce   , ONLY: ln_bdy
[6140]27   USE trcbdy          ! BDY open boundaries
[941]28
[1271]29#if defined key_agrif
[3680]30   USE agrif_top_sponge ! tracers sponges
[1271]31#endif
32
[941]33   IMPLICIT NONE
34   PRIVATE
35
36   PUBLIC   trc_trp    ! called by trc_stp
37
38   !!----------------------------------------------------------------------
[10067]39   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
[1146]40   !! $Id$
[10068]41   !! Software governed by the CeCILL license (see ./LICENSE)
[941]42   !!----------------------------------------------------------------------
43
44CONTAINS
45
[10880]46   SUBROUTINE trc_trp( kt, Kbb, Kmm, Krhs, Kaa )
[941]47      !!----------------------------------------------------------------------
48      !!                     ***  ROUTINE trc_trp  ***
49      !!                     
50      !! ** Purpose :   Management of passive tracers transport
51      !!
52      !! ** Method  : - Compute the passive tracers trends
53      !!              - Update the passive tracers
54      !!----------------------------------------------------------------------
[10880]55      INTEGER, INTENT( in ) :: kt                  ! ocean time-step index
56      INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs, Kaa ! time level indices
[941]57      !! ---------------------------------------------------------------------
[3294]58      !
[9124]59      IF( ln_timing )   CALL timing_start('trc_trp')
[3294]60      !
[2528]61      IF( .NOT. lk_c1d ) THEN
62         !
[10946]63                                CALL trc_sbc    ( kt, Kmm, Krhs )      ! surface boundary condition
64         IF( ln_trabbl )        CALL trc_bbl    ( kt, Kmm, Krhs )      ! advective (and/or diffusive) bottom boundary layer scheme
65         IF( ln_trcdmp )        CALL trc_dmp    ( kt, Kmm, Krhs )      ! internal damping trends
66         IF( ln_bdy )           CALL trc_bdy_dmp( kt )                 ! BDY damping trends
[10880]67                                CALL trc_adv    ( kt, Kbb, Kmm, tr, Krhs )      ! horizontal & vertical advection
[10946]68         !                                                             ! Partial top/bottom cell: GRADh( trb ) 
[5836]69         IF( ln_zps ) THEN
70           IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom
71           ELSE                 ; CALL zps_hde    ( kt, jptra, trb, gtru, gtrv )                                      !  only bottom
72           ENDIF
73         ENDIF
74         !                                                     
[10946]75                                CALL trc_ldf    ( kt, Kmm, Krhs ) ! lateral mixing
[1271]76#if defined key_agrif
[5836]77         IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc       ! tracers sponge
[1271]78#endif
[10884]79                                CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after
[10946]80                                CALL trc_nxt    ( kt, Kmm, Krhs )        ! tracer fields at next time step     
81         IF( ln_trcrad )        CALL trc_rad    ( kt, Kmm, Krhs )        ! Correct artificial negative concentrations
82         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kt )                   ! internal damping trends on closed seas only
[3680]83
[2528]84         !
85      ELSE                                               ! 1D vertical configuration
[10946]86                                CALL trc_sbc( kt, Kmm, Krhs )            ! surface boundary condition
87         IF( ln_trcdmp )        CALL trc_dmp( kt, Kmm, Krhs )            ! internal damping trends
[10884]88                                CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after
[10946]89                                CALL trc_nxt( kt, Kmm, Krhs )            ! tracer fields at next time step     
90          IF( ln_trcrad )       CALL trc_rad( kt, Kmm, Krhs )            ! Correct artificial negative concentrations
[2528]91         !
92      END IF
[941]93      !
[9124]94      IF( ln_timing )   CALL timing_stop('trc_trp')
[3294]95      !
[941]96   END SUBROUTINE trc_trp
97
98#else
99   !!----------------------------------------------------------------------
100   !!   Dummy module :                                        No TOP models
101   !!----------------------------------------------------------------------
102CONTAINS
[5836]103   SUBROUTINE trc_trp( kt )              ! Empty routine
104      INTEGER, INTENT(in) ::   kt
105      WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kt
[941]106   END SUBROUTINE trc_trp
107#endif
108   
109   !!======================================================================
110END MODULE trctrp
Note: See TracBrowser for help on using the repository browser.