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.
traadv_ctl.F90 in trunk/NEMO/OPA_SRC/TRA – NEMO

source: trunk/NEMO/OPA_SRC/TRA/traadv_ctl.F90 @ 3

Last change on this file since 3 was 3, checked in by opalod, 20 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.4 KB
Line 
1MODULE traadv_ctl
2   !!==============================================================================
3   !!                       ***  MODULE  traadv_ctl  ***
4   !! Ocean active tracers:  advection scheme control
5   !!==============================================================================
6
7   !!----------------------------------------------------------------------
8   !!   tra_adv_ctl  : control the different options of advection scheme
9   !!----------------------------------------------------------------------
10   !! * Modules used
11   USE oce             ! ocean dynamics and active tracers
12   USE dom_oce         ! ocean space and time domain
13   USE in_out_manager  ! I/O manager
14
15   IMPLICIT NONE
16   PRIVATE
17
18   !! * Accessibility
19   PUBLIC tra_adv_ctl     ! routine called by step module
20 
21   !! * Share module variables
22   LOGICAL, PUBLIC ::   &
23      ln_traadv_cen2   = .TRUE.  ,   &  ! 2nd order centered scheme flag
24      ln_traadv_tvd    = .FALSE. ,   &  ! TVD scheme flag
25      ln_traadv_muscl  = .FALSE. ,   &  ! MUSCL scheme flag
26      ln_traadv_muscl2 = .FALSE.        ! MUSCL2 scheme flag
27
28   !! * Substitutions
29#   include "domzgr_substitute.h90"
30#   include "vectopt_loop_substitute.h90"
31   !!----------------------------------------------------------------------
32   !!   OPA 9.0 , LODYC-IPSL (2003)
33   !!----------------------------------------------------------------------
34
35CONTAINS
36
37   SUBROUTINE tra_adv_ctl
38      !!---------------------------------------------------------------------
39      !!                  ***  ROUTINE tra_adv_ctl  ***
40      !!               
41      !! ** Purpose :   Control the consistency between cpp options for
42      !!      tracer advection schemes
43      !!
44      !! History :
45      !!   8.5  !  02-11  (G. Madec)  Original code
46      !!----------------------------------------------------------------------
47      !! * Modules used
48      USE traadv_tvd
49      USE traadv_muscl
50      USE traadv_muscl2
51      USE in_out_manager  ! I/O manager
52
53      !! * Local declarations
54      INTEGER ::   ioptio
55
56      NAMELIST/nam_traadv/ ln_traadv_cen2 , ln_traadv_tvd,   &
57         &                 ln_traadv_muscl, ln_traadv_muscl2
58      !!----------------------------------------------------------------------
59
60      ! Read Namelist nam_traadv : tracer advection scheme
61      ! -------------------------
62      REWIND ( numnam )
63      READ   ( numnam, nam_traadv )
64
65      ! Parameter control and print
66      ! ---------------------------
67      ! Control print
68      IF(lwp) THEN
69         WRITE(numout,*)
70         WRITE(numout,*) 'tra_adv_ctl : choice/control of the tracer advection scheme'
71         WRITE(numout,*) '~~~~~~~~~~~'
72         WRITE(numout,*) '          Namelist nam_tra_adv : chose a advection scheme for tracers'
73         WRITE(numout,*)
74         WRITE(numout,*) '             2nd order advection scheme     ln_traadv_cen2   = ', ln_traadv_cen2
75         WRITE(numout,*) '             TVD advection scheme           ln_traadv_tvd    = ', ln_traadv_tvd
76         WRITE(numout,*) '             MUSCL  advection scheme        ln_traadv_muscl  = ', ln_traadv_muscl
77         WRITE(numout,*) '             MUSCL2 advection scheme        ln_traadv_muscl2 = ', ln_traadv_muscl2
78      ENDIF
79
80      ! Control of Advection scheme options
81      ! -----------------------------------
82      ioptio = 0
83      IF( ln_traadv_cen2   )   ioptio = ioptio + 1
84      IF( ln_traadv_tvd    )   ioptio = ioptio + 1
85      IF( ln_traadv_muscl  )   ioptio = ioptio + 1
86      IF( ln_traadv_muscl2 )   ioptio = ioptio + 1
87
88      IF( lk_esopa ) THEN
89         IF(lwp) WRITE(numout,*) ' esopa control : the use of all scheme is forced'
90         ln_traadv_cen2   = .TRUE.
91         ln_traadv_tvd    = .TRUE.
92         ln_traadv_muscl  = .TRUE.
93         ln_traadv_muscl2 = .TRUE.
94      ELSEIF( ioptio > 1 .OR. ioptio == 0 ) THEN
95         IF(lwp) WRITE(numout,cform_err)
96         IF(lwp) WRITE(numout,*) ' Choose one advection scheme in namelist nam_traadv'
97         IF(lwp) WRITE(numout,*) '        ***                              ***********'
98         nstop = nstop + 1
99      ENDIF
100
101      IF( n_cla == 1 .AND. .NOT. ln_traadv_cen2 ) THEN
102         IF(lwp) WRITE(numout,cform_err)
103         IF(lwp) WRITE(numout,*) '     cross-land advection only with 2nd order advection scheme'
104         nstop = nstop + 1
105      ENDIF
106
107   END SUBROUTINE tra_adv_ctl
108
109  !!======================================================================
110END MODULE traadv_ctl
Note: See TracBrowser for help on using the repository browser.