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/dev_001_GM/NEMO/TOP_SRC/TRP – NEMO

source: branches/dev_001_GM/NEMO/TOP_SRC/TRP/trctrp.F90 @ 773

Last change on this file since 773 was 773, checked in by gm, 16 years ago

dev_001_GM - small changes : compilation OK

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 7.5 KB
RevLine 
[186]1MODULE trctrp
2   !!======================================================================
3   !!                       ***  MODULE trctrp  ***
[202]4   !! Ocean Physics    : manage the passive tracer transport
[186]5   !!======================================================================
[771]6   !! History :   1.0  !  2004-03 (C. Ethe) Original code
7   !!----------------------------------------------------------------------
[772]8#if defined key_top
[186]9   !!----------------------------------------------------------------------
[772]10   !!   'key_top'                                                TOP models
[771]11   !!----------------------------------------------------------------------
[186]12   !!   trc_trp        : passive tracer transport
13   !!----------------------------------------------------------------------
[202]14   USE oce_trc         ! ocean dynamics and active tracers variables
15   USE trc             ! ocean passive tracers variables
[771]16   USE trctrp_lec      ! passive tracers transport parameters
[773]17   USE prtctl_trc     ! Print control for debbuging
[186]18
[202]19   USE trcbbl          ! bottom boundary layer               (trc_bbl routine)
20   USE trcdmp          ! internal damping                    (trc_dmp routine)
[186]21
[202]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)
[186]27 
[202]28   USE trcnxt          ! time-stepping                       (trc_nxt routine)
[334]29   USE trcrad          ! positivity                          (trc_rad routine)
[186]30
[202]31   USE trcadv_cen2     ! 2nd order centered advection   (trc_adv_cen2 routine)
32   USE trcadv_muscl    ! MUSCL advection               (trc_adv_muscl routine)
[186]33   USE trcadv_muscl2   ! MUSCL2 advection             (trc_adv_muscl2 routine)
[202]34   USE trcadv_tvd      ! TVD advection                   (trc_adv_tvd routine)
[186]35   USE trcadv_smolar   ! SMOLAR advection             (trc_adv_smolar routine)
36
[202]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)
[186]42
[202]43   USE zpshde_trc      ! partial step: hor. derivative   (zps_hde_trc routine)
[186]44
45   IMPLICIT NONE
46   PRIVATE
47
[771]48   PUBLIC   trc_trp    ! called by trc_stp
[186]49
50   !! * Substitutions
51#  include "domzgr_substitute.h90"
52   !!----------------------------------------------------------------------
[771]53   !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)
54   !! $Id$
55   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
[186]56   !!----------------------------------------------------------------------
57
58CONTAINS
59
60   SUBROUTINE trc_trp( kt )
61      !!----------------------------------------------------------------------
62      !!                     ***  ROUTINE trc_trp  ***
63      !!                     
[771]64      !! ** Purpose :   Management of passive tracers transport
[186]65      !!
[771]66      !! ** Method  : - Compute the passive tracers trends
67      !!              - Update the passive tracers
[186]68      !!----------------------------------------------------------------------
69      INTEGER, INTENT( in ) ::  kt  ! ocean time-step index
[773]70      !!
71      CHARACTER (len=25) :: charout
[186]72      !! ---------------------------------------------------------------------
73
[202]74                               CALL trc_sbc( kt )            ! surface boundary condition
75# if defined key_trcbbc
[771]76!!gm bug : this should be control during the initialisation phase, not here!
[501]77       CALL ctl_stop( '  Bottom heat flux not yet implemented with passive tracer         ' &
78           &          '  Check in trc_trp routine ' )
[202]79# endif 
80      !                                                      ! bottom boundary condition
[771]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
[186]83
[202]84      IF( lk_trcdmp        )   CALL trc_dmp( kt )            ! internal damping trends
[261]85
[202]86      !                                                      ! horizontal & vertical advection
[771]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
[261]92
[186]93 
[501]94      IF( n_cla == 1   ) THEN
[771]95!!gm bug : this should be control during the initialisation phase, not here!
[501]96         WRITE(ctmp1,*) ' Cross Land Advection not yet implemented with passive tracer n_cla = ',n_cla
[771]97         CALL ctl_stop( ctmp1 )
[186]98      ENDIF
99
[202]100      !                                                      ! lateral mixing
[771]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
[186]106 
[202]107      !                                                      ! vertical diffusion
[771]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
[186]112
113                               CALL trc_nxt( kt )            ! tracer fields at next time step
114 
[771]115                               CALL trc_rad( kt )            ! Correct artificial negative concentrations
116      !                                                      ! especially useful when isopycnal mixing is used
[433]117      !                                                     
[186]118
[771]119      IF( ln_zps .AND. .NOT. lk_trccfg_1d )   &              ! 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
[186]129
130#else
131   !!----------------------------------------------------------------------
[771]132   !!   Dummy module :                                        No TOP models
[186]133   !!----------------------------------------------------------------------
134CONTAINS
[771]135   SUBROUTINE trc_trp( kt )              ! Empty routine
136      INTEGER, INTENT(in) ::   kt
[186]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.