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

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

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert TOP routines in TOP/TRP directory and all knock on effects of these conversions. SETTE tested (GYRE_PISCES only)

  • Property svn:keywords set to Id
File size: 6.0 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         !
[10966]63                                CALL trc_sbc    ( kt,      Kmm, Krhs )      ! surface boundary condition
64         IF( ln_trabbl )        CALL trc_bbl    ( kt, Kbb, Kmm, Krhs )      ! advective (and/or diffusive) bottom boundary layer scheme
65         IF( ln_trcdmp )        CALL trc_dmp    ( kt, Kbb, Kmm, Krhs )      ! internal damping trends
66         IF( ln_bdy )           CALL trc_bdy_dmp( kt, Kbb,      Krhs )      ! BDY damping trends
67                                CALL trc_adv    ( kt, Kbb, Kmm, tr, Krhs )  ! horizontal & vertical advection
68         !                                                             ! Partial top/bottom cell: GRADh( tr(Kbb) ) 
[5836]69         IF( ln_zps ) THEN
[10966]70           IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, Kmm, jptra, tr(:,:,:,:,Kbb), pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom
71           ELSE                 ; CALL zps_hde    ( kt, Kmm, jptra, tr(:,:,:,:,Kbb), gtru, gtrv )                                      !  only bottom
[5836]72           ENDIF
73         ENDIF
74         !                                                     
[10966]75                                CALL trc_ldf    ( kt, Kbb, 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
[10966]79                                CALL trc_zdf    ( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer   ==> after
80                                CALL trc_nxt    ( kt, Kbb, Kmm, Krhs )            ! tracer fields at next time step     
81         IF( ln_trcrad )        CALL trc_rad    ( kt, Kbb, Kmm, Krhs )            ! Correct artificial negative concentrations
82         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kt, Kbb, Kmm )                  ! internal damping trends on closed seas only
[3680]83
[2528]84         !
85      ELSE                                               ! 1D vertical configuration
[10966]86                                CALL trc_sbc( kt,      Kmm, Krhs )            ! surface boundary condition
87         IF( ln_trcdmp )        CALL trc_dmp( kt, Kbb, Kmm, Krhs )            ! internal damping trends
[10884]88                                CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after
[10966]89                                CALL trc_nxt( kt, Kbb, Kmm, Krhs )            ! tracer fields at next time step     
90          IF( ln_trcrad )       CALL trc_rad( kt, Kbb, 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.