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

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

Update modules for new version of TOP model, see ticket 144

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