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.F90 in branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC – NEMO

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, 8 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
RevLine 
[2038]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   !!----------------------------------------------------------------------
[3294]20   USE oce_trc           ! shared variables between ocean and passive tracers
21   USE trc               ! passive tracers common variables
[2038]22   USE trcnam_pisces     ! PISCES namelist
23   USE trcnam_cfc        ! CFC SMS namelist
[7041]24   USE trcnam_c14        ! C14 SMS namelist
25   USE trcnam_age        ! AGE SMS namelist
[2038]26   USE trcnam_my_trc     ! MY_TRC SMS namelist
[4990]27   USE trd_oce       
28   USE trdtrc_oce
[3294]29   USE iom               ! I/O manager
[2038]30
31   IMPLICIT NONE
32   PRIVATE
33
[4152]34   PUBLIC trc_nam_run  ! called in trcini
[2038]35   PUBLIC trc_nam      ! called in trcini
36
37   !!----------------------------------------------------------------------
[2287]38   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
[5341]39   !! $Id$
[2287]40   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[2038]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
[3680]52      !!                ( (PISCES, CFC, MY_TRC )
[2038]53      !!---------------------------------------------------------------------
[4154]54      INTEGER  ::   jn                  ! dummy loop indice
[5836]55      !                                 
56      !               
[7041]57      CALL trc_nam_trc     ! passive tracer informations
[5836]58      !                                       
[4152]59      !
[5836]60      IF( ln_rsttr                     )   ln_trcdta     = .FALSE.   ! restart : no need of clim data
[4152]61      !
[5836]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.
[2038]65
[5836]66      IF(lwp) THEN                   ! control print
[3294]67         IF( ln_rsttr ) THEN
68            WRITE(numout,*)
[4148]69            WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )
[3294]70            WRITE(numout,*)
71         ENDIF
[4148]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
[3294]82      ENDIF
83
[4152]84     
[6140]85      rdttrc = rdt * FLOAT( nn_dttrc )   ! passive tracer time-step
[4152]86 
87      IF(lwp) THEN                   ! control print
88        WRITE(numout,*) 
[6140]89        WRITE(numout,*) '    Passive Tracer  time step    rdttrc  = ', rdttrc
[4152]90        WRITE(numout,*) 
91      ENDIF
[3294]92
[4152]93
[7041]94      IF( l_trdtrc )        CALL trc_nam_trd    ! Passive tracer trends
[3294]95
[7041]96                             
97                            CALL trc_nam_ice  ! ice module for tracerd
[3294]98
[2038]99      ! namelist of SMS
100      ! ---------------     
[7041]101      IF( ln_age     ) THEN   ;   CALL trc_nam_age         ! AGE     tracer
102      ELSE                    ;   IF(lwp) WRITE(numout,*) '          AGE not used'
[2038]103      ENDIF
104
[7041]105      IF( ll_cfc     ) THEN   ;   CALL trc_nam_cfc         ! CFC     tracers
[2038]106      ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used'
107      ENDIF
108
[7041]109      IF( ln_c14     ) THEN   ;   CALL trc_nam_c14         ! C14     tracers
[2038]110      ELSE                    ;   IF(lwp) WRITE(numout,*) '          C14 not used'
111      ENDIF
112
[7041]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
[2038]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
[5836]124
[4152]125   SUBROUTINE trc_nam_run
126      !!---------------------------------------------------------------------
127      !!                     ***  ROUTINE trc_nam  ***
128      !!
129      !! ** Purpose :   read options for the passive tracer run (namelist)
130      !!
131      !!---------------------------------------------------------------------
[7041]132      NAMELIST/namtrc_run/ jptra, nn_dttrc, ln_rsttr, nn_rsttr, ln_top_euler, &
[5341]133        &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out
[5836]134      !
[4154]135      INTEGER  ::   ios                 ! Local integer output status for namelist read
[4152]136      !!---------------------------------------------------------------------
[5836]137      !
[6140]138      IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists'
[4152]139      IF(lwp) WRITE(numout,*) '~~~~~~~'
140
[4290]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. )
[4624]143      IF(lwm) CALL ctl_opn( numont, 'output.namelist.top', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., 1 )
[4152]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 )
[4624]152      IF(lwm) WRITE ( numont, namtrc_run )
[4152]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,*)
[4159]159         WRITE(numout,*) ' Namelist : namtrc_run'
[7041]160         WRITE(numout,*) '   Total number of passive tracers              jptra         = ', jptra
[4152]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
[4159]165         WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler
[4152]166         WRITE(numout,*) ' '
167      ENDIF
168      !
169    END SUBROUTINE trc_nam_run
170
[7041]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,*) '~~~~~~~'
[5836]188
[7041]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
[5385]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
[7041]252      INTEGER :: ios, ierr     ! Local integer output status for namelist read
[5836]253      !
[7041]254      TYPE(TRC_I_NML), ALLOCATABLE, DIMENSION(:) :: sn_tri_tracer  ! type of tracer for saving if not key_iomput
[5836]255      !!
[5385]256      NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer
[5836]257      !!---------------------------------------------------------------------
258      !
[5385]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
[7041]267      ALLOCATE( sn_tri_tracer(jptra),  STAT = ierr )
[5385]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
[5411]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
[5385]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
[5836]294
[4152]295
[7041]296   SUBROUTINE trc_nam_trd
[4152]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      !!---------------------------------------------------------------------
[7041]306
307#if defined key_trdmxl_trc  || defined key_trdtrc
[5836]308      INTEGER  ::   ios                 ! Local integer output status for namelist read
[4152]309      INTEGER ::  ierr
[5836]310      !!
[4152]311      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, &
[4990]312         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, &
[4152]313         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc
314      !!---------------------------------------------------------------------
315
316      IF(lwp) WRITE(numout,*)
[7041]317      IF(lwp) WRITE(numout,*) 'trc_nam_trd : read the passive tracer diagnostics options'
[4152]318      IF(lwp) WRITE(numout,*) '~~~~~~~'
319
[7041]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 )
[4152]326
[7041]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 )
[4152]331
332      IF(lwp) THEN
333         WRITE(numout,*)
[7041]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
[4152]345      ENDIF
[7041]346#endif
[4152]347      !
[7041]348   END SUBROUTINE trc_nam_trd
[4152]349
[2038]350#else
351   !!----------------------------------------------------------------------
352   !!  Dummy module :                                     No passive tracer
353   !!----------------------------------------------------------------------
354CONTAINS
355   SUBROUTINE trc_nam                      ! Empty routine   
356   END SUBROUTINE trc_nam
[4152]357   SUBROUTINE trc_nam_run                      ! Empty routine   
358   END SUBROUTINE trc_nam_run
[2038]359#endif
360
[2104]361   !!----------------------------------------------------------------------
[2287]362   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
[5341]363   !! $Id$
[2287]364   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[2038]365   !!======================================================================
[5656]366END MODULE trcnam
Note: See TracBrowser for help on using the repository browser.