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.
trcnam_trp.F90 in branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/TOP_SRC/TRP – NEMO

source: branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/TOP_SRC/TRP/trcnam_trp.F90 @ 4292

Last change on this file since 4292 was 4148, checked in by cetlod, 11 years ago

merge in trunk changes between r3853 and r3940 and commit the changes, see ticket #1169

  • Property svn:keywords set to Id
File size: 12.2 KB
Line 
1MODULE trcnam_trp
2   !!======================================================================
3   !!                       ***  MODULE  trcnam_trp  ***
4   !! TOP :   namelist read options for transport
5   !!======================================================================
6   !! History :   1.0  !  2004-03  (C. Ethe)  Original code
7   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  revised architecture
8   !!----------------------------------------------------------------------
9#if defined key_top
10   !!----------------------------------------------------------------------
11   !!   'key_top'                                                TOP models
12   !!----------------------------------------------------------------------
13   !!   trc_nam_trp  : read the passive tracer namelist for transport
14   !!----------------------------------------------------------------------
15   USE oce_trc              ! shared ocean passive tracers variables
16   USE trc                 ! passive tracers variables
17   USE in_out_manager      ! ocean dynamics and active tracers variables
18   USE lib_mpp           ! distributed memory computing library
19
20   IMPLICIT NONE
21   PRIVATE
22
23   PUBLIC   trc_nam_trp    ! routine called by step module
24 
25   !                                        !!: ** Advection (namtrc_adv) **
26   LOGICAL , PUBLIC ::   ln_trcadv_cen2      ! 2nd order centered scheme flag
27   LOGICAL , PUBLIC ::   ln_trcadv_tvd       ! TVD scheme flag
28   LOGICAL , PUBLIC ::   ln_trcadv_muscl     ! MUSCL scheme flag
29   LOGICAL , PUBLIC ::   ln_trcadv_muscl2    ! MUSCL2 scheme flag
30   LOGICAL , PUBLIC ::   ln_trcadv_ubs       ! UBS scheme flag
31   LOGICAL , PUBLIC ::   ln_trcadv_qck       ! QUICKEST scheme flag
32   LOGICAL , PUBLIC ::   ln_trcadv_msc_ups   ! use upstream scheme within muscl
33
34
35   !                                        !!: ** lateral mixing namelist (nam_trcldf) **
36   LOGICAL , PUBLIC ::   ln_trcldf_diff      !: flag of perform or not the lateral diff.
37   LOGICAL , PUBLIC ::   ln_trcldf_lap       !: laplacian operator
38   LOGICAL , PUBLIC ::   ln_trcldf_bilap     !: bilaplacian operator
39   LOGICAL , PUBLIC ::   ln_trcldf_level     !: iso-level direction
40   LOGICAL , PUBLIC ::   ln_trcldf_hor       !: horizontal (geopotential) direction
41   LOGICAL , PUBLIC ::   ln_trcldf_iso       !: iso-neutral direction
42   REAL(wp), PUBLIC ::   rn_ahtrc_0          !: diffusivity coefficient for passive tracer (m2/s)
43   REAL(wp), PUBLIC ::   rn_ahtrb_0          !: background diffusivity coefficient for passive tracer (m2/s)
44
45   !                                        !!: ** Treatment of Negative concentrations ( nam_trcrad )
46   LOGICAL , PUBLIC ::   ln_trcrad           !: flag to artificially correct negative concentrations
47
48   !                                        !!: ** Vertical diffusion (nam_trczdf) **
49   LOGICAL , PUBLIC ::   ln_trczdf_exp       !: explicit vertical diffusion scheme flag
50   INTEGER , PUBLIC ::   nn_trczdf_exp       !: number of sub-time step (explicit time stepping)
51
52   !                                                 !!: ** newtonian damping namelist (nam_trcdmp) **
53   !                          !!* Namelist namtrc_dmp : passive tracer newtonian damping *
54   INTEGER , PUBLIC ::   nn_hdmp_tr    ! = 0/-1/'latitude' for damping over passive tracer
55   INTEGER , PUBLIC ::   nn_zdmp_tr    ! = 0/1/2 flag for damping in the mixed layer
56   REAL(wp), PUBLIC ::   rn_surf_tr    ! surface time scale for internal damping        [days]
57   REAL(wp), PUBLIC ::   rn_bot_tr     ! bottom time scale for internal damping         [days]
58   REAL(wp), PUBLIC ::   rn_dep_tr     ! depth of transition between rn_surf and rn_bot [meters]
59   INTEGER , PUBLIC ::   nn_file_tr    ! = 1 create a damping.coeff NetCDF file
60
61   !!----------------------------------------------------------------------
62   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
63   !! $Id$
64   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
65   !!----------------------------------------------------------------------
66
67CONTAINS
68
69   SUBROUTINE trc_nam_trp
70      !!----------------------------------------------------------------------
71      !!                  ***  ROUTINE trc_nam_trp  ***
72      !!               
73      !! ** Purpose :   Read Namelist for tracer transport option
74      !!----------------------------------------------------------------------
75      INTEGER ::  ios                 ! Local integer output status for namelist read
76      NAMELIST/namtrc_adv/ ln_trcadv_cen2 , ln_trcadv_tvd   ,    &
77         &                 ln_trcadv_muscl, ln_trcadv_muscl2,    &
78         &                 ln_trcadv_ubs  , ln_trcadv_qck, ln_trcadv_msc_ups
79
80      NAMELIST/namtrc_ldf/ ln_trcldf_diff , ln_trcldf_lap  ,     &
81         &                 ln_trcldf_bilap, ln_trcldf_level,     &
82         &                 ln_trcldf_hor  , ln_trcldf_iso  , rn_ahtrc_0, rn_ahtrb_0
83      NAMELIST/namtrc_zdf/ ln_trczdf_exp  , nn_trczdf_exp
84      NAMELIST/namtrc_rad/ ln_trcrad
85      NAMELIST/namtrc_dmp/ nn_hdmp_tr, nn_zdmp_tr, rn_surf_tr, &
86        &                  rn_bot_tr , rn_dep_tr , nn_file_tr
87      !!----------------------------------------------------------------------
88
89      IF(lwp) WRITE(numout,*)
90      IF(lwp) WRITE(numout,*) ' trc_nam_trp: read namelist for tracer transport'
91      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~'
92
93      REWIND( numnat_ref )              ! Namelist namtrc_adv in reference namelist : Tracer advection scheme
94      READ  ( numnat_ref, namtrc_adv, IOSTAT = ios, ERR = 901)
95901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in reference namelist', lwp )
96
97      REWIND( numnat_cfg )              ! Namelist namtrc_adv in configuration namelist : Tracer advection scheme
98      READ  ( numnat_cfg, namtrc_adv, IOSTAT = ios, ERR = 902 )
99902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in configuration namelist', lwp )
100      WRITE ( numont, namtrc_adv )
101
102      IF(lwp) THEN                    ! Namelist print
103         WRITE(numout,*)
104         WRITE(numout,*) 'trc_adv_ctl : choice/control of the tracer advection scheme'
105         WRITE(numout,*) '~~~~~~~~~~~'
106         WRITE(numout,*) '   Namelist namtrc_adv : chose a advection scheme for tracers'
107         WRITE(numout,*) '      2nd order advection scheme     ln_trcadv_cen2   = ', ln_trcadv_cen2
108         WRITE(numout,*) '      TVD advection scheme           ln_trcadv_tvd    = ', ln_trcadv_tvd
109         WRITE(numout,*) '      MUSCL  advection scheme        ln_trcadv_muscl  = ', ln_trcadv_muscl
110         WRITE(numout,*) '      MUSCL2 advection scheme        ln_trcadv_muscl2 = ', ln_trcadv_muscl2
111         WRITE(numout,*) '      UBS    advection scheme        ln_trcadv_ubs    = ', ln_trcadv_ubs
112         WRITE(numout,*) '      QUICKEST advection scheme      ln_trcadv_qck    = ', ln_trcadv_qck
113      ENDIF
114      !
115      REWIND( numnat_ref )              ! Namelist namtrc_ldf in reference namelist : Tracer lateral diffusive operator
116      READ  ( numnat_ref, namtrc_ldf, IOSTAT = ios, ERR = 903)
117903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ldf in reference namelist', lwp )
118
119      REWIND( numnat_cfg )              ! Namelist namtrc_ldf in configuration namelist : Tracer lateral diffusive operator
120      READ  ( numnat_cfg, namtrc_ldf, IOSTAT = ios, ERR = 904 )
121904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ldf in configuration namelist', lwp )
122      WRITE ( numont, namtrc_ldf )
123
124      IF(lwp) THEN                    ! Namelist print
125         WRITE(numout,*)
126         WRITE(numout,*) 'trc:ldf_ctl : lateral tracer diffusive operator'
127         WRITE(numout,*) '~~~~~~~~~~~'
128         WRITE(numout,*) '   Namelist namtrc_ldf : set lateral mixing parameters (type, direction, coefficients)'
129         WRITE(numout,*) '      perform lateral diffusion or not                   ln_trcldf_diff  = ', ln_trcldf_diff
130         WRITE(numout,*) '      laplacian operator                                 ln_trcldf_lap   = ', ln_trcldf_lap
131         WRITE(numout,*) '      bilaplacian operator                               ln_trcldf_bilap = ', ln_trcldf_bilap
132         WRITE(numout,*) '      iso-level                                          ln_trcldf_level = ', ln_trcldf_level
133         WRITE(numout,*) '      horizontal (geopotential)                          ln_trcldf_hor   = ', ln_trcldf_hor
134         WRITE(numout,*) '      iso-neutral                                        ln_trcldf_iso   = ', ln_trcldf_iso
135         WRITE(numout,*) '      diffusivity coefficient                                 rn_ahtrc_0 = ', rn_ahtrc_0
136         WRITE(numout,*) '      background hor. diffusivity                             rn_ahtrb_0 = ', rn_ahtrb_0
137      ENDIF
138
139      !                                ! Vertical mixing
140      REWIND( numnat_ref )              ! Namelist namtrc_zdf in reference namelist : Tracer vertical mixing
141      READ  ( numnat_ref, namtrc_zdf, IOSTAT = ios, ERR = 905)
142905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in reference namelist', lwp )
143
144      REWIND( numnat_cfg )              ! Namelist namtrc_zdf in configuration namelist : Tracer vertical mixing
145      READ  ( numnat_cfg, namtrc_zdf, IOSTAT = ios, ERR = 906 )
146906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in configuration namelist', lwp )
147      WRITE ( numont, namtrc_zdf )
148
149      IF(lwp) THEN                     !   ! Control print
150         WRITE(numout,*)
151         WRITE(numout,*) '   Namelist namtrc_zdf : set vertical diffusion parameters'
152         WRITE(numout,*) '      time splitting / backward scheme ln_trczdf_exp = ', ln_trczdf_exp
153         WRITE(numout,*) '      number of time step              nn_trczdf_exp = ', nn_trczdf_exp
154      ENDIF
155
156      !
157      REWIND( numnat_ref )              ! Namelist namtrc_rad in reference namelist : Tracer negative concentrations
158      READ  ( numnat_ref, namtrc_rad, IOSTAT = ios, ERR = 907)
159907   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_rad in reference namelist', lwp )
160
161      REWIND( numnat_cfg )              ! Namelist namtrc_rad in configuration namelist : Tracer negative concentrations
162      READ  ( numnat_cfg, namtrc_rad, IOSTAT = ios, ERR = 908 )
163908   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_rad in configuration namelist', lwp )
164      WRITE ( numont, namtrc_rad )
165
166      IF(lwp) THEN                     !   ! Control print
167         WRITE(numout,*)
168         WRITE(numout,*) '   Namelist namtrc_rad : treatment of negative concentrations'
169         WRITE(numout,*) '      correct artificially negative concen. or not ln_trcrad = ', ln_trcrad
170      ENDIF
171
172
173      REWIND( numnat_ref )              ! Namelist namtrc_dmp in reference namelist : Passive tracers newtonian damping
174      READ  ( numnat_ref, namtrc_dmp, IOSTAT = ios, ERR = 909)
175909   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in reference namelist', lwp )
176
177      REWIND( numnat_cfg )              ! Namelist namtrc_dmp in configuration namelist : Passive tracers newtonian damping
178      READ  ( numnat_cfg, namtrc_dmp, IOSTAT = ios, ERR = 910)
179910   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in configuration namelist', lwp )
180      WRITE ( numont, namtrc_dmp )
181
182      IF( lzoom )   nn_zdmp_tr = 0           ! restoring to climatology at closed north or south boundaries
183
184      IF(lwp) THEN                       ! Namelist print
185         WRITE(numout,*)
186         WRITE(numout,*) 'trc_dmp : Passive tracers newtonian damping'
187         WRITE(numout,*) '~~~~~~~'
188         WRITE(numout,*) '   Namelist namtrc_dmp : set damping parameter'
189         WRITE(numout,*) '      tracer damping option          nn_hdmp_tr = ', nn_hdmp_tr
190         WRITE(numout,*) '      mixed layer damping option     nn_zdmp_tr = ', nn_zdmp_tr, '(zoom: forced to 0)'
191         WRITE(numout,*) '      surface time scale (days)      rn_surf_tr = ', rn_surf_tr
192         WRITE(numout,*) '      bottom time scale (days)       rn_bot_tr  = ', rn_bot_tr
193         WRITE(numout,*) '      depth of transition (meters)   rn_dep_tr  = ', rn_dep_tr
194         WRITE(numout,*) '      create a damping.coeff file    nn_file_tr = ', nn_file_tr
195      ENDIF
196      !
197   END SUBROUTINE trc_nam_trp
198   
199#else
200   !!----------------------------------------------------------------------
201   !!   Dummy module :                                         No TOP model
202   !!----------------------------------------------------------------------
203CONTAINS
204   SUBROUTINE trc_nam_trp              ! Empty routine
205   END SUBROUTINE trc_nam_trp
206#endif
207
208  !!======================================================================
209END MODULE trcnam_trp
Note: See TracBrowser for help on using the repository browser.