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 @ 1177

Last change on this file since 1177 was 1177, checked in by cetlod, 16 years ago

update modules to take into account new trends organization, see ticket:248

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