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

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

update modules, see ticket:190

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.3 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 trctrp_lec
23   USE trclsm_lobster    ! LOBSTER namelist
24   USE trclsm_pisces     ! PISCES namelist
25   USE trclsm_cfc        ! CFC SMS namelist
26   USE trclsm_my_trc     ! MY_TRC SMS namelist
27   USE in_out_manager    ! I/O manager
28
29   IMPLICIT NONE
30   PRIVATE
31
32   PUBLIC trc_lec      ! called in ???
33
34   !! * Substitutions
35#  include "top_substitute.h90"
36   !!----------------------------------------------------------------------
37   !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)
38   !! $Header:$
39   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
40   !!----------------------------------------------------------------------
41
42CONTAINS
43
44   SUBROUTINE trc_lec
45      !!---------------------------------------------------------------------
46      !!                     ***  ROUTINE trc_lec  ***
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      !!                ( (LOBSTER, PISCES, CFC, MY_TRC )
53      !!---------------------------------------------------------------------
54      INTEGER ::  jn
55      CHARACTER (len=32) ::   clname
56
57      ! Definition of a tracer as a structure
58      TYPE PTRACER
59         CHARACTER(len = 20)  :: sname  !: short name
60         CHARACTER(len = 80 ) :: lname  !: long name
61         CHARACTER(len = 20 ) :: unit   !: unit
62         LOGICAL              :: lini   !: read in a file or not
63         LOGICAL              :: lsav   !: ouput the tracer or not
64      END TYPE PTRACER
65
66      TYPE(PTRACER) , DIMENSION(jptra) :: tracer
67
68#if defined key_trc_diaadd
69      ! definition of additional diagnostic as a structure
70      TYPE DIAG
71         CHARACTER(len = 20)  :: snamedia   !: short name
72         CHARACTER(len = 80 ) :: lnamedia   !: long name
73         CHARACTER(len = 20 ) :: unitdia    !: unit
74      END TYPE DIAG
75
76      TYPE(DIAG) , DIMENSION(jpdia2d) :: diag2d
77      TYPE(DIAG) , DIMENSION(jpdia3d) :: diag3d
78#endif
79
80      !!
81      NAMELIST/nattrc/ nwritetrc, lrsttr, nrsttr, tracer
82      NAMELIST/natnum/ rsc, rtrn, ncortrc, ndttrc, crosster
83#if defined key_trc_diatrd
84      NAMELIST/natrtd/ luttrd, nwritetrd                                             ! dynamical trends
85#endif
86#if defined key_trc_diaadd
87      NAMELIST/natdia/nwritedia, diag3d, diag2d     ! additional diagnostics
88#endif
89      !!---------------------------------------------------------------------
90
91      IF(lwp) WRITE(numout,*) 'trc_lec : read the passive tracer namelists'
92      IF(lwp) WRITE(numout,*) '~~~~~~~'
93
94      clname = 'namelist.passivetrc'
95      CALL ctlopn( numnat, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL',   &
96         &         1, numout, .FALSE., 1 )
97
98
99      ! Namelist nattrc (files)
100      ! ----------------------------------------------
101      nwritetrc = 10                 ! default values
102      lrsttr    = .FALSE.
103      nrsttr    =  0
104      DO jn = 1, jptra
105         WRITE(ctrcnm(jn),'("TR_",I1)'           ) jn
106         WRITE(ctrcnl(jn),'("TRACER NUMBER ",I1)') jn
107         ctrcun(jn) = 'mmole/m3'
108         lutini(jn) = .FALSE. 
109         lutsav(jn) = .TRUE.
110      END DO
111
112      REWIND( numnat )               ! read nattrc
113      READ  ( numnat, nattrc )
114
115      DO jn = 1, jptra
116         ctrcnm(jn) = tracer(jn)%sname
117         ctrcnl(jn) = tracer(jn)%lname
118         ctrcun(jn) = tracer(jn)%unit
119         lutini(jn) = tracer(jn)%lini
120         lutsav(jn) = tracer(jn)%lsav
121      END DO
122
123
124
125      IF(lwp) THEN                   ! control print
126         WRITE(numout,*)
127         WRITE(numout,*) ' Namelist : nattrc'
128         WRITE(numout,*) '    frequency of outputs for passive tracers nwritetrc = ', nwritetrc 
129         WRITE(numout,*) '    restart LOGICAL for passive tr. lrsttr = ', lrsttr
130         WRITE(numout,*) '    control of time step for p. tr. nrsttr = ', nrsttr
131         DO jn = 1, jptra
132            WRITE(numout,*) '   tracer nb             : ', jn 
133            WRITE(numout,*) '   short name            : ', TRIM(ctrcnm(jn))
134            WRITE(numout,*) '   long name             : ', TRIM(ctrcnl(jn))
135            WRITE(numout,*) '   unit                  : ', TRIM(ctrcun(jn))
136            WRITE(numout,*) '   initial value in FILE : ', lutini(jn) 
137            WRITE(numout,*) '   output of tracer      : ', lutsav(jn)
138            WRITE(numout,*) ' '
139         END DO
140      ENDIF
141
142#if defined key_trc_diatrd
143
144      ! Namelist natrtd (transport trends)
145      ! ----------------------------------------------
146      nwritetrd = 10                 ! default values (no dynamical trend recording)
147      DO jn = 1, jptra
148         luttrd(jn) = .FALSE.
149      END DO
150
151      REWIND( numnat )               ! read natrtd
152      READ  ( numnat, natrtd )
153
154      nkeep=0
155      ikeep(:)=0
156      DO jn = 1, jptra
157         IF( luttrd(jn) ) THEN
158             nkeep    = nkeep + 1
159             ikeep(jn)=nkeep
160         END IF
161      END DO
162      IF( nkeep > 0 ) THEN 
163        IF(.NOT. ALLOCATED( trtrd ) )   ALLOCATE( trtrd(jpi,jpj,jpk,nkeep,jpdiatrc) ) 
164        trtrd(:,:,:,:,:) = 0.e0
165      ENDIF
166
167      IF(lwp) THEN                   ! control print
168         WRITE(numout,*)
169         WRITE(numout,*) ' Namelist : natrtd'
170         WRITE(numout,*) '    frequency of outputs for dynamical trends nwritetrd = ', nwritetrd
171         DO jn = 1, jptra
172            WRITE(numout,*) '    keep dynamical trends for tracer number :', jn, luttrd(jn), ikeep(jn)
173         END DO
174         WRITE(numout,*) '    total = ', nkeep, ' tracers dyn trends saved'
175         WRITE(numout,*) '    size of trtrd = ', jpi*jpj*jpk*nkeep*jpdiatrc
176      ENDIF
177#endif
178
179#if defined key_trc_diaadd
180
181      ! Namelist natrtd (transport trends)
182      ! ----------------------------------------------
183      nwritedia = 10                 ! default values
184      !                                 ! 2D output arrays
185      DO jn = 1, jpdia2d
186         WRITE(ctrc2d(jn),'("2D_",I1)') jn                      ! short name
187         WRITE(ctrc2l(jn),'("2D DIAGNOSTIC NUMBER ",I2)') jn    ! long name
188         ctrc2u(jn) = ' '                                       ! units
189      END DO
190      !                                 ! 3D output arrays
191      DO jn = 1, jpdia3d
192         WRITE(ctrc3d(jn),'("3D_",I1)') jn                     ! short name
193         WRITE(ctrc3l(jn),'("3D DIAGNOSTIC NUMBER ",I2)') jn    ! long name
194         ctrc3u(jn) = ' '                                       ! units
195      END DO
196
197      REWIND( numnat )               ! read natrtd
198      READ  ( numnat, natdia )
199
200      DO jn = 1, jpdia2d
201         ctrc2d(jn) = diag2d(jn)%snamedia
202         ctrc2l(jn) = diag2d(jn)%lnamedia
203         ctrc2u(jn) = diag2d(jn)%unitdia
204      END DO
205
206      DO jn = 1, jpdia3d
207         ctrc3d(jn) = diag3d(jn)%snamedia
208         ctrc3l(jn) = diag3d(jn)%lnamedia
209         ctrc3u(jn) = diag3d(jn)%unitdia
210      END DO
211
212      IF(lwp) THEN                   ! control print
213         WRITE(numout,*)
214         WRITE(numout,*) ' Namelist : natadd'
215         WRITE(numout,*) '    frequency of outputs for additional arrays nwritedia = ', nwritedia
216         DO jn = 1, jpdia3d
217            WRITE(numout,*) '   3d output field No : ',jn
218            WRITE(numout,*) '   short name         : ', TRIM(ctrc3d(jn))
219            WRITE(numout,*) '   long name          : ', TRIM(ctrc3l(jn))
220            WRITE(numout,*) '   unit               : ', TRIM(ctrc3u(jn))
221            WRITE(numout,*) ' '
222         END DO
223
224         DO jn = 1, jpdia2d
225            WRITE(numout,*) '   2d output field No : ',jn
226            WRITE(numout,*) '   short name         : ', TRIM(ctrc2d(jn))
227            WRITE(numout,*) '   long name          : ', TRIM(ctrc2l(jn))
228            WRITE(numout,*) '   unit               : ', TRIM(ctrc2u(jn))
229            WRITE(numout,*) ' '
230         END DO
231      ENDIF
232#endif
233
234      !! Namelist natnum :
235      !! -----------------
236      rsc      = 1.                 ! default values
237      rtrn     = 1.e-15
238      ncortrc  = 1
239      ndttrc   = 4
240      crosster = .FALSE.
241
242      REWIND( numnat )              ! read natnum
243      READ  ( numnat, natnum )
244
245      !!Chris  computes the first time step of tracer model
246      nittrc000 = nit000 + ndttrc - 1
247
248      IF(lwp) THEN                  ! control print
249         WRITE(numout,*)
250         WRITE(numout,*) ' Namelist : natnum'
251         WRITE(numout,*)
252         WRITE(numout,*) ' tuning coefficient              rsc     = ', rsc
253         WRITE(numout,*) ' truncation value                rtrn    = ', rtrn
254         WRITE(numout,*) ' number of corrective phase      ncortrc = ', ncortrc
255         WRITE(numout,*) ' time step freq. for pass. trac. ndttrc  = ', ndttrc
256         WRITE(numout,*) ' 1st time step for pass. trac. nittrc000 = ', nittrc000
257         WRITE(numout,*) ' computes or not crossterms    crosster  = ', crosster
258      ENDIF
259
260      ! namelist of transport
261      ! ---------------------
262      CALL trc_trp_lec
263
264      ! namelist of SMS
265      ! ---------------     
266      IF( lk_lobster ) THEN   ;   CALL trc_lsm_lobster      ! LOBSTER bio-model
267      ELSE                    ;   IF(lwp) WRITE(numout,*) '          LOBSTER not used'
268      ENDIF
269
270      IF( lk_pisces  ) THEN   ;   CALL trc_lsm_pisces      ! PISCES  bio-model
271      ELSE                    ;   IF(lwp) WRITE(numout,*) '          PISCES not used'
272      ENDIF
273
274      IF( lk_cfc     ) THEN   ;   CALL trc_lsm_cfc         ! CFC     tracers
275      ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used'
276      ENDIF
277
278      IF( lk_my_trc  ) THEN   ;   CALL trc_lsm_my_trc      ! MY_TRC  tracers
279      ELSE                    ;   IF(lwp) WRITE(numout,*) '          MY_TRC not used'
280      ENDIF
281      !
282   END SUBROUTINE trc_lec
283
284#else
285   !!----------------------------------------------------------------------
286   !!  Dummy module :                                     No passive tracer
287   !!----------------------------------------------------------------------
288CONTAINS
289   SUBROUTINE trc_lec                      ! Empty routine   
290   END SUBROUTINE trc_lec
291#endif
292
293   !!======================================================================
294END MODULE  trclec
Note: See TracBrowser for help on using the repository browser.