source: branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/TRP/trcnam_trp.F90 @ 4148

Last change on this file since 4148 was 4148, checked in by cetlod, 8 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.