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
RevLine 
[268]1MODULE trclec
[945]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
[274]13   !!----------------------------------------------------------------------
[945]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   !!----------------------------------------------------------------------
[335]20   USE oce_trc
21   USE trc
22   USE trctrp_lec
[1077]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
[268]28
[335]29   IMPLICIT NONE
30   PRIVATE
[268]31
[945]32   PUBLIC trc_lec      ! called in ???
[268]33
[945]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   !!----------------------------------------------------------------------
[268]41
42CONTAINS
43
[335]44   SUBROUTINE trc_lec
45      !!---------------------------------------------------------------------
[945]46      !!                     ***  ROUTINE trc_lec  ***
[335]47      !!
[945]48      !! ** Purpose :   READ and PRINT options for the passive tracer run (namelist)
49      !!
[1077]50      !! ** Method  : - read passive tracer namelist
51      !!              - read namelist of each defined SMS model
52      !!                ( (LOBSTER, PISCES, CFC, MY_TRC )
[945]53      !!---------------------------------------------------------------------
54      INTEGER ::  jn
55      CHARACTER (len=32) ::   clname
[268]56
[1077]57      ! Definition of a tracer as a structure
[945]58      TYPE PTRACER
[1077]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
[945]64      END TYPE PTRACER
[268]65
[1077]66      TYPE(PTRACER) , DIMENSION(jptra) :: tracer
67
[945]68#if defined key_trc_diaadd
[1077]69      ! definition of additional diagnostic as a structure
[945]70      TYPE DIAG
[1077]71         CHARACTER(len = 20)  :: snamedia   !: short name
72         CHARACTER(len = 80 ) :: lnamedia   !: long name
73         CHARACTER(len = 20 ) :: unitdia    !: unit
[945]74      END TYPE DIAG
[268]75
[945]76      TYPE(DIAG) , DIMENSION(jpdia2d) :: diag2d
77      TYPE(DIAG) , DIMENSION(jpdia3d) :: diag3d
78#endif
[268]79
[945]80      !!
81      NAMELIST/nattrc/ nwritetrc, lrsttr, nrsttr, tracer
82      NAMELIST/natnum/ rsc, rtrn, ncortrc, ndttrc, crosster
[268]83#if defined key_trc_diatrd
[945]84      NAMELIST/natrtd/ luttrd, nwritetrd                                             ! dynamical trends
[268]85#endif
86#if defined key_trc_diaadd
[945]87      NAMELIST/natdia/nwritedia, diag3d, diag2d     ! additional diagnostics
[268]88#endif
[945]89      !!---------------------------------------------------------------------
[268]90
[945]91      IF(lwp) WRITE(numout,*) 'trc_lec : read the passive tracer namelists'
92      IF(lwp) WRITE(numout,*) '~~~~~~~'
[268]93
[945]94      clname = 'namelist.passivetrc'
[625]95      CALL ctlopn( numnat, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL',   &
96         &         1, numout, .FALSE., 1 )
[268]97
[625]98
[945]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
[268]111
[945]112      REWIND( numnat )               ! read nattrc
113      READ  ( numnat, nattrc )
[268]114
[945]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
[268]121      END DO
122
123
124
[945]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)
[268]138            WRITE(numout,*) ' '
[335]139         END DO
[268]140      ENDIF
141
142#if defined key_trc_diatrd
143
[945]144      ! Namelist natrtd (transport trends)
145      ! ----------------------------------------------
146      nwritetrd = 10                 ! default values (no dynamical trend recording)
147      DO jn = 1, jptra
148         luttrd(jn) = .FALSE.
[335]149      END DO
[268]150
[945]151      REWIND( numnat )               ! read natrtd
152      READ  ( numnat, natrtd )
[268]153
[433]154      nkeep=0
155      ikeep(:)=0
[945]156      DO jn = 1, jptra
157         IF( luttrd(jn) ) THEN
158             nkeep    = nkeep + 1
159             ikeep(jn)=nkeep
[433]160         END IF
161      END DO
[945]162      IF( nkeep > 0 ) THEN 
163        IF(.NOT. ALLOCATED( trtrd ) )   ALLOCATE( trtrd(jpi,jpj,jpk,nkeep,jpdiatrc) ) 
164        trtrd(:,:,:,:,:) = 0.e0
[433]165      ENDIF
[945]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)
[335]173         END DO
[945]174         WRITE(numout,*) '    total = ', nkeep, ' tracers dyn trends saved'
175         WRITE(numout,*) '    size of trtrd = ', jpi*jpj*jpk*nkeep*jpdiatrc
[268]176      ENDIF
177#endif
178
179#if defined key_trc_diaadd
180
[945]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
[335]195      END DO
[268]196
[945]197      REWIND( numnat )               ! read natrtd
198      READ  ( numnat, natdia )
[268]199
[945]200      DO jn = 1, jpdia2d
201         ctrc2d(jn) = diag2d(jn)%snamedia
202         ctrc2l(jn) = diag2d(jn)%lnamedia
203         ctrc2u(jn) = diag2d(jn)%unitdia
[335]204      END DO
[268]205
[945]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
[268]211
[945]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,*) ' '
[335]222         END DO
[945]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,*) ' '
[335]230         END DO
[268]231      ENDIF
232#endif
233
[945]234      !! Namelist natnum :
235      !! -----------------
236      rsc      = 1.                 ! default values
237      rtrn     = 1.e-15
238      ncortrc  = 1
239      ndttrc   = 4
240      crosster = .FALSE.
[268]241
[945]242      REWIND( numnat )              ! read natnum
243      READ  ( numnat, natnum )
[268]244
[945]245      !!Chris  computes the first time step of tracer model
[268]246      nittrc000 = nit000 + ndttrc - 1
247
[945]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
[268]258      ENDIF
259
[945]260      ! namelist of transport
261      ! ---------------------
[268]262      CALL trc_trp_lec
263
[945]264      ! namelist of SMS
265      ! ---------------     
[1077]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
[945]281      !
[335]282   END SUBROUTINE trc_lec
[268]283
284#else
[945]285   !!----------------------------------------------------------------------
286   !!  Dummy module :                                     No passive tracer
287   !!----------------------------------------------------------------------
[335]288CONTAINS
[945]289   SUBROUTINE trc_lec                      ! Empty routine   
[335]290   END SUBROUTINE trc_lec
[268]291#endif
292
[945]293   !!======================================================================
[268]294END MODULE  trclec
Note: See TracBrowser for help on using the repository browser.