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.
trclec.F90 in trunk/NEMO/TOP_SRC – NEMO

source: trunk/NEMO/TOP_SRC/trclec.F90 @ 1271

Last change on this file since 1271 was 1254, checked in by cetlod, 15 years ago

update parameter files to take into account the new C14 bomb tracer model, see ticket:298

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 9.4 KB
Line 
1MODULE trclec
2   !!======================================================================
3   !!                       ***  MODULE trclec  ***
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_lec    :  Read and print options for the passive tracer run (namelist)
19   !!----------------------------------------------------------------------
20   USE oce_trc
21   USE trc
22   USE trp_trc
23   USE trctrp_lec
24   USE trclsm_lobster    ! LOBSTER namelist
25   USE trclsm_pisces     ! PISCES namelist
26   USE trclsm_cfc        ! CFC SMS namelist
27   USE trclsm_c14b       ! C14 SMS namelist
28   USE trclsm_my_trc     ! MY_TRC SMS namelist
29   USE in_out_manager    ! I/O manager
30   USE trdmld_trc_oce
31
32   IMPLICIT NONE
33   PRIVATE
34
35   PUBLIC trc_lec      ! called in ???
36
37   !! * Substitutions
38#  include "top_substitute.h90"
39   !!----------------------------------------------------------------------
40   !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)
41   !! $Id$
42   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
43   !!----------------------------------------------------------------------
44
45CONTAINS
46
47   SUBROUTINE trc_lec
48      !!---------------------------------------------------------------------
49      !!                     ***  ROUTINE trc_lec  ***
50      !!
51      !! ** Purpose :   READ and PRINT options for the passive tracer run (namelist)
52      !!
53      !! ** Method  : - read passive tracer namelist
54      !!              - read namelist of each defined SMS model
55      !!                ( (LOBSTER, PISCES, CFC, MY_TRC )
56      !!---------------------------------------------------------------------
57      INTEGER ::  jn
58      CHARACTER (len=32) ::   clname
59
60      ! Definition of a tracer as a structure
61      TYPE PTRACER
62         CHARACTER(len = 20)  :: sname  !: short name
63         CHARACTER(len = 80 ) :: lname  !: long name
64         CHARACTER(len = 20 ) :: unit   !: unit
65         LOGICAL              :: lini   !: read in a file or not
66         LOGICAL              :: lsav   !: ouput the tracer or not
67      END TYPE PTRACER
68
69      TYPE(PTRACER) , DIMENSION(jptra) :: tracer
70
71      !!
72      NAMELIST/namtoptrc/ ndttrc, nwritetrc, lrsttr, nrsttr, &
73                          cn_trcrst_in, cn_trcrst_out, tracer
74#if defined key_trdmld_trc || defined key_trc_diatrd
75      NAMELIST/namtoptrd/ ntrd_trc, nctls_trc, ucf_trc, &
76                         ln_trdmld_trc_restart, ln_trdmld_trc_instant, &
77                         luttrd
78#endif
79
80      !!---------------------------------------------------------------------
81
82      IF(lwp) WRITE(numout,*) 'trc_lec : read the passive tracer namelists'
83      IF(lwp) WRITE(numout,*) '~~~~~~~'
84
85      clname = 'namelist_top'
86      CALL ctlopn( numnat, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL', 1, numout, .FALSE., 1 )
87
88      ! Namelist nattrc (files)
89      ! ----------------------------------------------
90      ndttrc    = 1                 ! default values
91      nwritetrc = 10     
92      lrsttr    = .FALSE.
93      nrsttr    =  0
94      cn_trcrst_in  = 'restart_trc'
95      cn_trcrst_out = 'restart_trc'
96      DO jn = 1, jptra
97         WRITE(ctrcnm(jn),'("TR_",I1)'           ) jn
98         WRITE(ctrcnl(jn),'("TRACER NUMBER ",I1)') jn
99         ctrcun(jn) = 'mmole/m3'
100         lutini(jn) = .FALSE. 
101         lutsav(jn) = .TRUE.
102      END DO
103
104      REWIND( numnat )               ! read nattrc
105      READ  ( numnat, namtoptrc )
106
107      !!Chris  computes the first time step of tracer model
108      nittrc000 = nit000 + ndttrc - 1
109
110      DO jn = 1, jptra
111         ctrcnm(jn) = tracer(jn)%sname
112         ctrcnl(jn) = tracer(jn)%lname
113         ctrcun(jn) = tracer(jn)%unit
114         lutini(jn) = tracer(jn)%lini
115         lutsav(jn) = tracer(jn)%lsav
116      END DO
117
118
119      IF(lwp) THEN                   ! control print
120         WRITE(numout,*)
121         WRITE(numout,*) ' Namelist : namtoptrc'
122         WRITE(numout,*) '    time step freq. for pass. trac. ndttrc             = ', ndttrc
123         WRITE(numout,*) '    1st time step for pass. trac. nittrc000            = ', nittrc000
124         WRITE(numout,*) '    frequency of outputs for passive tracers nwritetrc = ', nwritetrc 
125         WRITE(numout,*) '    restart LOGICAL for passive tr. lrsttr             = ', lrsttr
126         WRITE(numout,*) '    control of time step for p. tr. nrsttr             = ', nrsttr
127         WRITE(numout,*) ' '
128         DO jn = 1, jptra
129            WRITE(numout,*) '   tracer nb             : ', jn 
130            WRITE(numout,*) '   short name            : ', TRIM(ctrcnm(jn))
131            WRITE(numout,*) '   long name             : ', TRIM(ctrcnl(jn))
132            WRITE(numout,*) '   unit                  : ', TRIM(ctrcun(jn))
133            WRITE(numout,*) '   initial value in FILE : ', lutini(jn) 
134            WRITE(numout,*) '   output of tracer      : ', lutsav(jn)
135            WRITE(numout,*) ' '
136         END DO
137      ENDIF
138
139#if defined key_trdmld_trc || defined key_trc_diatrd
140
141      ! Namelist natrtd (transport trends)
142      ! ----------------------------------------------
143      ntrd_trc  = 20
144      nctls_trc =  6
145      ucf_trc   =  1.
146      ln_trdmld_trc_instant = .TRUE.
147      ln_trdmld_trc_restart =.FALSE.
148      DO jn = 1, jptra
149         luttrd(jn) = .FALSE.
150      END DO
151
152      REWIND( numnat )               !  namelist namtoptrd : passive tracer trends diagnostic
153      READ  ( numnat, namtoptrd )
154
155#if defined key_trc_diatrd
156      nkeep    = 0
157      ikeep(:) = 0
158      DO jn = 1, jptra
159         IF( luttrd(jn) ) THEN
160             nkeep     = nkeep + 1
161             ikeep(jn) = nkeep
162         END IF
163      END DO
164      IF( nkeep > 0 ) THEN 
165        IF(.NOT. ALLOCATED( trtrd ) )   ALLOCATE( trtrd(jpi,jpj,jpk,nkeep,jpdiatrc) ) 
166        trtrd(:,:,:,:,:) = 0.e0
167      ENDIF
168
169      nwritetrd = ntrd_trc
170#endif
171
172     IF(lwp) THEN
173         WRITE(numout,*)
174         WRITE(numout,*) ' trd_mld_trc_init : read namelist namtoptrd                        '
175         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~                                               '
176         WRITE(numout,*) '   * frequency of trends diagnostics   ntrd_trc               = ', ntrd_trc
177         WRITE(numout,*) '   * control surface type              nctls_trc              = ', nctls_trc
178         WRITE(numout,*) '   * restart for ML diagnostics        ln_trdmld_trc_restart  = ', ln_trdmld_trc_restart
179         WRITE(numout,*) '   * flag to diagnose trends of                                 '
180         WRITE(numout,*) '     instantantaneous or mean ML T/S   ln_trdmld_trc_instant  = ', ln_trdmld_trc_instant
181         WRITE(numout,*) '   * unit conversion factor            ucf_trc                = ', ucf_trc
182#if defined key_trdmld_trc
183         DO jn = 1, jptra
184            WRITE(numout,*) '    keep dynamical trends for tracer number :', jn, luttrd(jn)
185         END DO
186#else
187         DO jn = 1, jptra
188            WRITE(numout,*) '    keep dynamical trends for tracer number :', jn, luttrd(jn), ikeep(jn)
189         END DO
190
191         WRITE(numout,*)
192         WRITE(numout,*) '    total = ', nkeep, ' tracers dyn trends saved'
193         WRITE(numout,*) '    size of trtrd = ', jpi*jpj*jpk*nkeep*jpdiatrc
194#endif
195      ENDIF
196
197#endif
198
199
200      ! namelist of transport
201      ! ---------------------
202      CALL trc_trp_lec
203
204      ! namelist of SMS
205      ! ---------------     
206      IF( lk_lobster ) THEN   ;   CALL trc_lsm_lobster      ! LOBSTER bio-model
207      ELSE                    ;   IF(lwp) WRITE(numout,*) '          LOBSTER not used'
208      ENDIF
209
210      IF( lk_pisces  ) THEN   ;   CALL trc_lsm_pisces      ! PISCES  bio-model
211      ELSE                    ;   IF(lwp) WRITE(numout,*) '          PISCES not used'
212      ENDIF
213
214      IF( lk_cfc     ) THEN   ;   CALL trc_lsm_cfc         ! CFC     tracers
215      ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used'
216      ENDIF
217
218      IF( lk_c14b     ) THEN   ;   CALL trc_lsm_c14b         ! C14 bomb     tracers
219      ELSE                    ;   IF(lwp) WRITE(numout,*) '          C14 not used'
220      ENDIF
221
222      IF( lk_my_trc  ) THEN   ;   CALL trc_lsm_my_trc      ! MY_TRC  tracers
223      ELSE                    ;   IF(lwp) WRITE(numout,*) '          MY_TRC not used'
224      ENDIF
225      !
226   END SUBROUTINE trc_lec
227
228#else
229   !!----------------------------------------------------------------------
230   !!  Dummy module :                                     No passive tracer
231   !!----------------------------------------------------------------------
232CONTAINS
233   SUBROUTINE trc_lec                      ! Empty routine   
234   END SUBROUTINE trc_lec
235#endif
236
237   !!======================================================================
238END MODULE  trclec
Note: See TracBrowser for help on using the repository browser.