source: branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90 @ 7041

Last change on this file since 7041 was 7041, checked in by cetlod, 4 years ago

ROBUST5_CNRS : implementation of part I of new TOP interface - 1st step -, see ticket #1782

  • Property svn:keywords set to Id
File size: 16.7 KB
Line 
1MODULE trcnam
2   !!======================================================================
3   !!                       ***  MODULE trcnam  ***
4   !! TOP :   Read and print options for the passive tracer run (namelist)
5   !!======================================================================
6   !! History :    -   !  1996-11  (M.A. Foujols, M. Levy)  original code
7   !!              -   !  1998-04  (M.A Foujols, L. Bopp) ahtrb0 for isopycnal mixing
8   !!              -   !  1999-10  (M.A. Foujols, M. Levy) separation of sms
9   !!              -   !  2000-07  (A. Estublier) add TVD and MUSCL : Tests on ndttrc
10   !!              -   !  2000-11  (M.A Foujols, E Kestenare) trcrat, ahtrc0 and aeivtr0
11   !!              -   !  2001-01 (E Kestenare) suppress ndttrc=1 for CEN2 and TVD schemes
12   !!             1.0  !  2005-03 (O. Aumont, A. El Moussaoui) F90
13   !!----------------------------------------------------------------------
14#if defined key_top
15   !!----------------------------------------------------------------------
16   !!   'key_top'                                                TOP models
17   !!----------------------------------------------------------------------
18   !!   trc_nam    :  Read and print options for the passive tracer run (namelist)
19   !!----------------------------------------------------------------------
20   USE oce_trc           ! shared variables between ocean and passive tracers
21   USE trc               ! passive tracers common variables
22   USE trcnam_pisces     ! PISCES namelist
23   USE trcnam_cfc        ! CFC SMS namelist
24   USE trcnam_c14        ! C14 SMS namelist
25   USE trcnam_age        ! AGE SMS namelist
26   USE trcnam_my_trc     ! MY_TRC SMS namelist
27   USE trd_oce       
28   USE trdtrc_oce
29   USE iom               ! I/O manager
30
31   IMPLICIT NONE
32   PRIVATE
33
34   PUBLIC trc_nam_run  ! called in trcini
35   PUBLIC trc_nam      ! called in trcini
36
37   !!----------------------------------------------------------------------
38   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
39   !! $Id$
40   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
41   !!----------------------------------------------------------------------
42CONTAINS
43
44   SUBROUTINE trc_nam
45      !!---------------------------------------------------------------------
46      !!                     ***  ROUTINE trc_nam  ***
47      !!
48      !! ** Purpose :   READ and PRINT options for the passive tracer run (namelist)
49      !!
50      !! ** Method  : - read passive tracer namelist
51      !!              - read namelist of each defined SMS model
52      !!                ( (PISCES, CFC, MY_TRC )
53      !!---------------------------------------------------------------------
54      INTEGER  ::   jn                  ! dummy loop indice
55      !                                 
56      !               
57      CALL trc_nam_trc     ! passive tracer informations
58      !                                       
59      !
60      IF( ln_rsttr                     )   ln_trcdta     = .FALSE.   ! restart : no need of clim data
61      !
62      IF( ln_trcdmp .OR. ln_trcdmp_clo )   ln_trcdta     = .TRUE.   ! damping : need to have clim data
63      !
64      IF( .NOT.ln_trcdta               )   ln_trc_ini(:) = .FALSE.
65
66      IF(lwp) THEN                   ! control print
67         IF( ln_rsttr ) THEN
68            WRITE(numout,*)
69            WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )
70            WRITE(numout,*)
71         ENDIF
72         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN
73            WRITE(numout,*)
74            WRITE(numout,*) '  Some of the passive tracers are initialised from climatologies '
75            WRITE(numout,*)
76         ENDIF
77         IF( .NOT.ln_trcdta ) THEN
78            WRITE(numout,*)
79            WRITE(numout,*) '  All the passive tracers are initialised with constant values '
80            WRITE(numout,*)
81         ENDIF
82      ENDIF
83
84     
85      rdttrc = rdt * FLOAT( nn_dttrc )   ! passive tracer time-step
86 
87      IF(lwp) THEN                   ! control print
88        WRITE(numout,*) 
89        WRITE(numout,*) '    Passive Tracer  time step    rdttrc  = ', rdttrc
90        WRITE(numout,*) 
91      ENDIF
92
93
94      IF( l_trdtrc )        CALL trc_nam_trd    ! Passive tracer trends
95
96                             
97                            CALL trc_nam_ice  ! ice module for tracerd
98
99      ! namelist of SMS
100      ! ---------------     
101      IF( ln_age     ) THEN   ;   CALL trc_nam_age         ! AGE     tracer
102      ELSE                    ;   IF(lwp) WRITE(numout,*) '          AGE not used'
103      ENDIF
104
105      IF( ll_cfc     ) THEN   ;   CALL trc_nam_cfc         ! CFC     tracers
106      ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used'
107      ENDIF
108
109      IF( ln_c14     ) THEN   ;   CALL trc_nam_c14         ! C14     tracers
110      ELSE                    ;   IF(lwp) WRITE(numout,*) '          C14 not used'
111      ENDIF
112
113      IF( lk_pisces  ) THEN   ;   CALL trc_nam_pisces      ! PISCES  bio-model
114      ELSE                    ;   IF(lwp) WRITE(numout,*) '          PISCES not used'
115      ENDIF
116
117
118      IF( lk_my_trc  ) THEN   ;   CALL trc_nam_my_trc      ! MY_TRC  tracers
119      ELSE                    ;   IF(lwp) WRITE(numout,*) '          MY_TRC not used'
120      ENDIF
121      !
122   END SUBROUTINE trc_nam
123
124
125   SUBROUTINE trc_nam_run
126      !!---------------------------------------------------------------------
127      !!                     ***  ROUTINE trc_nam  ***
128      !!
129      !! ** Purpose :   read options for the passive tracer run (namelist)
130      !!
131      !!---------------------------------------------------------------------
132      NAMELIST/namtrc_run/ jptra, nn_dttrc, ln_rsttr, nn_rsttr, ln_top_euler, &
133        &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out
134      !
135      INTEGER  ::   ios                 ! Local integer output status for namelist read
136      !!---------------------------------------------------------------------
137      !
138      IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists'
139      IF(lwp) WRITE(numout,*) '~~~~~~~'
140
141      CALL ctl_opn( numnat_ref, 'namelist_top_ref'   , 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
142      CALL ctl_opn( numnat_cfg, 'namelist_top_cfg'   , 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
143      IF(lwm) CALL ctl_opn( numont, 'output.namelist.top', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., 1 )
144
145      REWIND( numnat_ref )              ! Namelist namtrc in reference namelist : Passive tracer variables
146      READ  ( numnat_ref, namtrc_run, IOSTAT = ios, ERR = 901)
147901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in reference namelist', lwp )
148
149      REWIND( numnat_cfg )              ! Namelist namtrc in configuration namelist : Passive tracer variables
150      READ  ( numnat_cfg, namtrc_run, IOSTAT = ios, ERR = 902 )
151902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in configuration namelist', lwp )
152      IF(lwm) WRITE ( numont, namtrc_run )
153
154      !  computes the first time step of tracer model
155      nittrc000 = nit000 + nn_dttrc - 1
156
157      IF(lwp) THEN                   ! control print
158         WRITE(numout,*)
159         WRITE(numout,*) ' Namelist : namtrc_run'
160         WRITE(numout,*) '   Total number of passive tracers              jptra         = ', jptra
161         WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc
162         WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr
163         WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr
164         WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000
165         WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler
166         WRITE(numout,*) ' '
167      ENDIF
168      !
169    END SUBROUTINE trc_nam_run
170
171   SUBROUTINE trc_nam_trc
172      !!---------------------------------------------------------------------
173      !!                     ***  ROUTINE trc_nam  ***
174      !!
175      !! ** Purpose :   read options for the passive tracer run (namelist)
176      !!
177      !!---------------------------------------------------------------------
178      INTEGER  ::   ios, ierr                 ! Local integer output status for namelist read
179      INTEGER  ::   jn                    ! dummy loop indice
180      !
181      TYPE(PTRACER), DIMENSION(jptra_max) :: sn_tracer  ! type of tracer for saving if not key_iomput
182      !!
183      NAMELIST/namtrc/ln_age, ln_cfc11, ln_cfc12, ln_c14, sn_tracer, ln_trcdta, ln_trcdmp, ln_trcdmp_clo
184      !!---------------------------------------------------------------------
185      IF(lwp) WRITE(numout,*)
186      IF(lwp) WRITE(numout,*) 'trc_nam_trc : read the passive tracer namelists'
187      IF(lwp) WRITE(numout,*) '~~~~~~~'
188
189
190      REWIND( numnat_ref )              ! Namelist namtrc in reference namelist : Passive tracer variables
191      READ  ( numnat_ref, namtrc, IOSTAT = ios, ERR = 901)
192901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in reference namelist', lwp )
193
194      REWIND( numnat_cfg )              ! Namelist namtrc in configuration namelist : Passive tracer variables
195      READ  ( numnat_cfg, namtrc, IOSTAT = ios, ERR = 902 )
196902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in configuration namelist', lwp )
197      IF(lwm) WRITE ( numont, namtrc )
198
199
200      DO jn = 1, jptra
201         ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname )
202         ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname )
203         ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  )
204         ln_trc_ini(jn) =       sn_tracer(jn)%llinit
205#if defined key_my_trc
206         ln_trc_sbc(jn) =       sn_tracer(jn)%llsbc
207         ln_trc_cbc(jn) =       sn_tracer(jn)%llcbc
208         ln_trc_obc(jn) =       sn_tracer(jn)%llobc
209#endif
210      END DO
211      !
212      ll_cfc = ln_cfc11 .OR. ln_cfc12
213      !
214      IF(lwp) THEN                   ! control print
215         WRITE(numout,*)
216         WRITE(numout,*) ' Namelist : namtrc'
217         WRITE(numout,*) '   Simulating water mass age                    ln_age        = ', ln_age
218         WRITE(numout,*) '   Simulating CFC11 passive tracer              ln_cfc11      = ', ln_cfc11
219         WRITE(numout,*) '   Simulating CFC12 passive tracer              ln_cfc12      = ', ln_cfc12
220         WRITE(numout,*) '   Simulating C14   passive tracer              ln_c14        = ', ln_c14
221         WRITE(numout,*) '   Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta
222         WRITE(numout,*) '   Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp
223         WRITE(numout,*) '   Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo
224         WRITE(numout,*) ' '
225         DO jn = 1, jptra
226            WRITE(numout,*) '  tracer nb : ', jn, '    short name : ', ctrcnm(jn)
227         END DO
228         WRITE(numout,*) ' '
229      ENDIF
230      !
231      IF( ln_age .OR. ll_cfc .OR. ln_c14 ) THEN
232        !                             ! Open namelist files
233        CALL ctl_opn( numtrc_ref, 'namelist_trc_ref'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
234        CALL ctl_opn( numtrc_cfg, 'namelist_trc_cfg'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
235        IF(lwm) CALL ctl_opn( numonr, 'output.namelist.trc', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
236        !
237      ENDIF
238
239   END SUBROUTINE trc_nam_trc
240
241
242   SUBROUTINE trc_nam_ice
243      !!---------------------------------------------------------------------
244      !!                     ***  ROUTINE trc_nam_ice ***
245      !!
246      !! ** Purpose :   Read the namelist for the ice effect on tracers
247      !!
248      !! ** Method  : -
249      !!
250      !!---------------------------------------------------------------------
251      INTEGER :: jn      ! dummy loop indices
252      INTEGER :: ios, ierr     ! Local integer output status for namelist read
253      !
254      TYPE(TRC_I_NML), ALLOCATABLE, DIMENSION(:) :: sn_tri_tracer  ! type of tracer for saving if not key_iomput
255      !!
256      NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer
257      !!---------------------------------------------------------------------
258      !
259      IF(lwp) THEN
260         WRITE(numout,*)
261         WRITE(numout,*) 'trc_nam_ice : Read the namelist for trc_ice'
262         WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
263      ENDIF
264
265      IF( nn_timing == 1 )  CALL timing_start('trc_nam_ice')
266
267      ALLOCATE( sn_tri_tracer(jptra),  STAT = ierr )
268      !
269      REWIND( numnat_ref )              ! Namelist namtrc_ice in reference namelist : Passive tracer input data
270      READ  ( numnat_ref, namtrc_ice, IOSTAT = ios, ERR = 901)
271 901  IF( ios /= 0 ) CALL ctl_nam ( ios , ' namtrc_ice in reference namelist ', lwp )
272
273      REWIND( numnat_cfg )              ! Namelist namtrc_ice in configuration namelist : Pisces external sources of nutrients
274      READ  ( numnat_cfg, namtrc_ice, IOSTAT = ios, ERR = 902 )
275 902  IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ice in configuration namelist', lwp )
276
277      IF( lwp ) THEN
278         WRITE(numout,*) ' '
279         WRITE(numout,*) ' Sea ice tracers option (nn_ice_tr) : ', nn_ice_tr
280         WRITE(numout,*) ' '
281      ENDIF
282
283      ! Assign namelist stuff
284      DO jn = 1, jptra
285         trc_ice_ratio(jn)  = sn_tri_tracer(jn)%trc_ratio
286         trc_ice_prescr(jn) = sn_tri_tracer(jn)%trc_prescr
287         cn_trc_o      (jn) = sn_tri_tracer(jn)%ctrc_o
288      END DO
289
290      IF( nn_timing == 1 )   CALL timing_stop('trc_nam_ice')
291      !
292   END SUBROUTINE trc_nam_ice
293
294
295
296   SUBROUTINE trc_nam_trd
297      !!---------------------------------------------------------------------
298      !!                     ***  ROUTINE trc_nam_dia  ***
299      !!
300      !! ** Purpose :   read options for the passive tracer diagnostics
301      !!
302      !! ** Method  : - read passive tracer namelist
303      !!              - read namelist of each defined SMS model
304      !!                ( (PISCES, CFC, MY_TRC )
305      !!---------------------------------------------------------------------
306
307#if defined key_trdmxl_trc  || defined key_trdtrc
308      INTEGER  ::   ios                 ! Local integer output status for namelist read
309      INTEGER ::  ierr
310      !!
311      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, &
312         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, &
313         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc
314      !!---------------------------------------------------------------------
315
316      IF(lwp) WRITE(numout,*)
317      IF(lwp) WRITE(numout,*) 'trc_nam_trd : read the passive tracer diagnostics options'
318      IF(lwp) WRITE(numout,*) '~~~~~~~'
319
320      !
321      ALLOCATE( ln_trdtrc(jptra) ) 
322      !
323      REWIND( numnat_ref )              ! Namelist namtrc_trd in reference namelist : Passive tracer trends
324      READ  ( numnat_ref, namtrc_trd, IOSTAT = ios, ERR = 905)
325905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_trd in reference namelist', lwp )
326
327      REWIND( numnat_cfg )              ! Namelist namtrc_trd in configuration namelist : Passive tracer trends
328      READ  ( numnat_cfg, namtrc_trd, IOSTAT = ios, ERR = 906 )
329906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_trd in configuration namelist', lwp )
330      IF(lwm) WRITE ( numont, namtrc_trd )
331
332      IF(lwp) THEN
333         WRITE(numout,*)
334         WRITE(numout,*) ' trd_mxl_trc_init : read namelist namtrc_trd                    '
335         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~                                               '
336         WRITE(numout,*) '   * frequency of trends diagnostics   nn_trd_trc             = ', nn_trd_trc
337         WRITE(numout,*) '   * control surface type              nn_ctls_trc            = ', nn_ctls_trc
338         WRITE(numout,*) '   * restart for ML diagnostics        ln_trdmxl_trc_restart  = ', ln_trdmxl_trc_restart
339         WRITE(numout,*) '   * flag to diagnose trends of                                 '
340         WRITE(numout,*) '     instantantaneous or mean ML T/S   ln_trdmxl_trc_instant  = ', ln_trdmxl_trc_instant
341         WRITE(numout,*) '   * unit conversion factor            rn_ucf_trc             = ', rn_ucf_trc
342         DO jn = 1, jptra
343            IF( ln_trdtrc(jn) ) WRITE(numout,*) '    compute ML trends for tracer number :', jn
344         END DO
345      ENDIF
346#endif
347      !
348   END SUBROUTINE trc_nam_trd
349
350#else
351   !!----------------------------------------------------------------------
352   !!  Dummy module :                                     No passive tracer
353   !!----------------------------------------------------------------------
354CONTAINS
355   SUBROUTINE trc_nam                      ! Empty routine   
356   END SUBROUTINE trc_nam
357   SUBROUTINE trc_nam_run                      ! Empty routine   
358   END SUBROUTINE trc_nam_run
359#endif
360
361   !!----------------------------------------------------------------------
362   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
363   !! $Id$
364   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
365   !!======================================================================
366END MODULE trcnam
Note: See TracBrowser for help on using the repository browser.