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/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/TRP – NEMO

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/TRP/trcnam_trp.F90 @ 11738

Last change on this file since 11738 was 11738, checked in by marc, 5 years ago

The Dr Hook changes from my perl code.

File size: 12.1 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 trc                 ! passive tracers variables
16   USE in_out_manager      ! ocean dynamics and active tracers variables
17   USE lib_mpp           ! distributed memory computing library
18
19   USE yomhook, ONLY: lhook, dr_hook
20   USE parkind1, ONLY: jprb, jpim
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC   trc_nam_trp    ! routine called by step module
26 
27   !                                        !!: ** Advection (namtrc_adv) **
28   LOGICAL , PUBLIC ::   ln_trcadv_cen2      ! 2nd order centered scheme flag
29   LOGICAL , PUBLIC ::   ln_trcadv_tvd       ! TVD scheme flag
30   LOGICAL , PUBLIC ::   ln_trcadv_muscl     ! MUSCL scheme flag
31   LOGICAL , PUBLIC ::   ln_trcadv_muscl2    ! MUSCL2 scheme flag
32   LOGICAL , PUBLIC ::   ln_trcadv_ubs       ! UBS scheme flag
33   LOGICAL , PUBLIC ::   ln_trcadv_qck       ! QUICKEST scheme flag
34   LOGICAL , PUBLIC ::   ln_trcadv_msc_ups   ! use upstream scheme within muscl
35
36
37   !                                        !!: ** lateral mixing namelist (nam_trcldf) **
38   LOGICAL , PUBLIC ::   ln_trcldf_lap       !: laplacian operator
39   LOGICAL , PUBLIC ::   ln_trcldf_bilap     !: bilaplacian operator
40   LOGICAL , PUBLIC ::   ln_trcldf_level     !: iso-level direction
41   LOGICAL , PUBLIC ::   ln_trcldf_hor       !: horizontal (geopotential) direction
42   LOGICAL , PUBLIC ::   ln_trcldf_iso       !: iso-neutral direction
43   REAL(wp), PUBLIC ::   rn_ahtrc_0          !: diffusivity coefficient for passive tracer (m2/s)
44   REAL(wp), PUBLIC ::   rn_ahtrb_0          !: background diffusivity coefficient for passive tracer (m2/s)
45   REAL(wp), PUBLIC ::   rn_fact_lap         !: Enhanced zonal diffusivity coefficent in the equatorial domain
46
47   !                                        !!: ** Treatment of Negative concentrations ( nam_trcrad )
48   LOGICAL , PUBLIC ::   ln_trcrad           !: flag to artificially correct negative concentrations
49
50   !                                        !!: ** Vertical diffusion (nam_trczdf) **
51   LOGICAL , PUBLIC ::   ln_trczdf_exp       !: explicit vertical diffusion scheme flag
52   INTEGER , PUBLIC ::   nn_trczdf_exp       !: number of sub-time step (explicit time stepping)
53
54   !                                                 !!: ** newtonian damping namelist (nam_trcdmp) **
55   !                          !!* Namelist namtrc_dmp : passive tracer newtonian damping *
56   INTEGER , PUBLIC ::   nn_zdmp_tr    ! = 0/1/2 flag for damping in the mixed layer
57   CHARACTER(LEN=200) , PUBLIC :: cn_resto_tr    !File containing restoration coefficient
58
59   !!----------------------------------------------------------------------
60   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
61   !! $Id$
62   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
63   !!----------------------------------------------------------------------
64
65CONTAINS
66
67   SUBROUTINE trc_nam_trp
68      !!----------------------------------------------------------------------
69      !!                  ***  ROUTINE trc_nam_trp  ***
70      !!               
71      !! ** Purpose :   Read Namelist for tracer transport option
72      !!----------------------------------------------------------------------
73      INTEGER ::  ios                 ! Local integer output status for namelist read
74      NAMELIST/namtrc_adv/ ln_trcadv_cen2 , ln_trcadv_tvd   ,    &
75         &                 ln_trcadv_muscl, ln_trcadv_muscl2,    &
76         &                 ln_trcadv_ubs  , ln_trcadv_qck, ln_trcadv_msc_ups
77
78      NAMELIST/namtrc_ldf/ ln_trcldf_lap  ,     &
79         &                 ln_trcldf_bilap, ln_trcldf_level,     &
80         &                 ln_trcldf_hor  , ln_trcldf_iso  , rn_ahtrc_0, rn_ahtrb_0,   &
81         &                 rn_fact_lap
82
83      NAMELIST/namtrc_zdf/ ln_trczdf_exp  , nn_trczdf_exp
84      NAMELIST/namtrc_rad/ ln_trcrad
85      NAMELIST/namtrc_dmp/ nn_zdmp_tr , cn_resto_tr
86      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
87      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
88      REAL(KIND=jprb)               :: zhook_handle
89
90      CHARACTER(LEN=*), PARAMETER :: RoutineName='TRC_NAM_TRP'
91
92      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
93
94      !!----------------------------------------------------------------------
95
96      IF(lwp) WRITE(numout,*)
97      IF(lwp) WRITE(numout,*) ' trc_nam_trp: read namelist for tracer transport'
98      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~'
99
100      REWIND( numnat_ref )              ! Namelist namtrc_adv in reference namelist : Tracer advection scheme
101      READ  ( numnat_ref, namtrc_adv, IOSTAT = ios, ERR = 901)
102901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in reference namelist', lwp )
103
104      REWIND( numnat_cfg )              ! Namelist namtrc_adv in configuration namelist : Tracer advection scheme
105      READ  ( numnat_cfg, namtrc_adv, IOSTAT = ios, ERR = 902 )
106902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in configuration namelist', lwp )
107      IF(lwm) WRITE ( numont, namtrc_adv )
108
109      IF(lwp) THEN                    ! Namelist print
110         WRITE(numout,*)
111         WRITE(numout,*) 'trc_adv_ctl : choice/control of the tracer advection scheme'
112         WRITE(numout,*) '~~~~~~~~~~~'
113         WRITE(numout,*) '   Namelist namtrc_adv : chose a advection scheme for tracers'
114         WRITE(numout,*) '      2nd order advection scheme     ln_trcadv_cen2   = ', ln_trcadv_cen2
115         WRITE(numout,*) '      TVD advection scheme           ln_trcadv_tvd    = ', ln_trcadv_tvd
116         WRITE(numout,*) '      MUSCL  advection scheme        ln_trcadv_muscl  = ', ln_trcadv_muscl
117         WRITE(numout,*) '      MUSCL2 advection scheme        ln_trcadv_muscl2 = ', ln_trcadv_muscl2
118         WRITE(numout,*) '      UBS    advection scheme        ln_trcadv_ubs    = ', ln_trcadv_ubs
119         WRITE(numout,*) '      QUICKEST advection scheme      ln_trcadv_qck    = ', ln_trcadv_qck
120      ENDIF
121      !
122      REWIND( numnat_ref )              ! Namelist namtrc_ldf in reference namelist : Tracer lateral diffusive operator
123      READ  ( numnat_ref, namtrc_ldf, IOSTAT = ios, ERR = 903)
124903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ldf in reference namelist', lwp )
125
126      REWIND( numnat_cfg )              ! Namelist namtrc_ldf in configuration namelist : Tracer lateral diffusive operator
127      READ  ( numnat_cfg, namtrc_ldf, IOSTAT = ios, ERR = 904 )
128904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ldf in configuration namelist', lwp )
129      IF(lwm) WRITE ( numont, namtrc_ldf )
130
131      IF(lwp) THEN                    ! Namelist print
132         WRITE(numout,*)
133         WRITE(numout,*) 'trc:ldf_ctl : lateral tracer diffusive operator'
134         WRITE(numout,*) '~~~~~~~~~~~'
135         WRITE(numout,*) '   Namelist namtrc_ldf : set lateral mixing parameters (type, direction, coefficients)'
136         WRITE(numout,*) '      laplacian operator                                 ln_trcldf_lap   = ', ln_trcldf_lap
137         WRITE(numout,*) '      bilaplacian operator                               ln_trcldf_bilap = ', ln_trcldf_bilap
138         WRITE(numout,*) '      iso-level                                          ln_trcldf_level = ', ln_trcldf_level
139         WRITE(numout,*) '      horizontal (geopotential)                          ln_trcldf_hor   = ', ln_trcldf_hor
140         WRITE(numout,*) '      iso-neutral                                        ln_trcldf_iso   = ', ln_trcldf_iso
141         WRITE(numout,*) '      diffusivity coefficient                                 rn_ahtrc_0 = ', rn_ahtrc_0
142         WRITE(numout,*) '      background hor. diffusivity                             rn_ahtrb_0 = ', rn_ahtrb_0
143         WRITE(numout,*) '      enhanced zonal diffusivity                             rn_fact_lap = ', rn_fact_lap
144      ENDIF
145
146      !                                ! Vertical mixing
147      REWIND( numnat_ref )              ! Namelist namtrc_zdf in reference namelist : Tracer vertical mixing
148      READ  ( numnat_ref, namtrc_zdf, IOSTAT = ios, ERR = 905)
149905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in reference namelist', lwp )
150
151      REWIND( numnat_cfg )              ! Namelist namtrc_zdf in configuration namelist : Tracer vertical mixing
152      READ  ( numnat_cfg, namtrc_zdf, IOSTAT = ios, ERR = 906 )
153906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in configuration namelist', lwp )
154      IF(lwm) WRITE ( numont, namtrc_zdf )
155
156      IF(lwp) THEN                     !   ! Control print
157         WRITE(numout,*)
158         WRITE(numout,*) '   Namelist namtrc_zdf : set vertical diffusion parameters'
159         WRITE(numout,*) '      time splitting / backward scheme ln_trczdf_exp = ', ln_trczdf_exp
160         WRITE(numout,*) '      number of time step              nn_trczdf_exp = ', nn_trczdf_exp
161      ENDIF
162
163      !
164      REWIND( numnat_ref )              ! Namelist namtrc_rad in reference namelist : Tracer negative concentrations
165      READ  ( numnat_ref, namtrc_rad, IOSTAT = ios, ERR = 907)
166907   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_rad in reference namelist', lwp )
167
168      REWIND( numnat_cfg )              ! Namelist namtrc_rad in configuration namelist : Tracer negative concentrations
169      READ  ( numnat_cfg, namtrc_rad, IOSTAT = ios, ERR = 908 )
170908   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_rad in configuration namelist', lwp )
171      IF(lwm) WRITE ( numont, namtrc_rad )
172
173      IF(lwp) THEN                     !   ! Control print
174         WRITE(numout,*)
175         WRITE(numout,*) '   Namelist namtrc_rad : treatment of negative concentrations'
176         WRITE(numout,*) '      correct artificially negative concen. or not ln_trcrad = ', ln_trcrad
177      ENDIF
178
179
180      REWIND( numnat_ref )              ! Namelist namtrc_dmp in reference namelist : Passive tracers newtonian damping
181      READ  ( numnat_ref, namtrc_dmp, IOSTAT = ios, ERR = 909)
182909   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in reference namelist', lwp )
183
184      REWIND( numnat_cfg )              ! Namelist namtrc_dmp in configuration namelist : Passive tracers newtonian damping
185      READ  ( numnat_cfg, namtrc_dmp, IOSTAT = ios, ERR = 910)
186910   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in configuration namelist', lwp )
187      IF(lwm) WRITE ( numont, namtrc_dmp )
188
189      IF(lwp) THEN                       ! Namelist print
190         WRITE(numout,*)
191         WRITE(numout,*) 'trc_dmp : Passive tracers newtonian damping'
192         WRITE(numout,*) '~~~~~~~'
193         WRITE(numout,*) '   Namelist namtrc_dmp : set damping parameter'
194         WRITE(numout,*) '      mixed layer damping option     nn_zdmp_tr = ', nn_zdmp_tr, '(zoom: forced to 0)'
195         WRITE(numout,*) '      Restoration coeff file    cn_resto_tr = ', cn_resto_tr
196      ENDIF
197      !
198      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
199   END SUBROUTINE trc_nam_trp
200   
201#else
202   !!----------------------------------------------------------------------
203   !!   Dummy module :                                         No TOP model
204   !!----------------------------------------------------------------------
205CONTAINS
206   SUBROUTINE trc_nam_trp              ! Empty routine
207   INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
208   INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
209   REAL(KIND=jprb)               :: zhook_handle
210
211   CHARACTER(LEN=*), PARAMETER :: RoutineName='TRC_NAM_TRP'
212
213   IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
214
215   IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
216   END SUBROUTINE trc_nam_trp
217#endif
218
219  !!======================================================================
220END MODULE trcnam_trp
Note: See TracBrowser for help on using the repository browser.