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.
trcnam.F90 in NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP – NEMO

source: NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/TOP/trcnam.F90 @ 12460

Last change on this file since 12460 was 12377, checked in by acc, 4 years ago

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

  • Property svn:keywords set to Id
File size: 13.6 KB
Line 
1MODULE trcnam
2   !!======================================================================
3   !!                       ***  MODULE trcnam  ***
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_nam    :  Read and print options for the passive tracer run (namelist)
19   !!----------------------------------------------------------------------
20   USE oce_trc     ! shared variables between ocean and passive tracers
21   USE trc         ! passive tracers common variables
22   USE trd_oce     !       
23   USE trdtrc_oce  !
24   USE iom         ! I/O manager
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   trc_nam_run  ! called in trcini
30   PUBLIC   trc_nam      ! called in trcini
31
32   TYPE(PTRACER), DIMENSION(jpmaxtrc), PUBLIC  :: sn_tracer  !: type of tracer for saving if not key_iomput
33
34   !!----------------------------------------------------------------------
35   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
36   !! $Id$
37   !! Software governed by the CeCILL license (see ./LICENSE)
38   !!----------------------------------------------------------------------
39CONTAINS
40
41   SUBROUTINE trc_nam
42      !!---------------------------------------------------------------------
43      !!                     ***  ROUTINE trc_nam  ***
44      !!
45      !! ** Purpose :   READ and PRINT options for the passive tracer run (namelist)
46      !!
47      !! ** Method  : - read passive tracer namelist
48      !!              - read namelist of each defined SMS model
49      !!                ( (PISCES, CFC, MY_TRC )
50      !!---------------------------------------------------------------------
51      INTEGER  ::   jn   ! dummy loop indice
52      !!---------------------------------------------------------------------
53      !
54      IF( .NOT.l_offline )   CALL trc_nam_run     ! Parameters of the run                                 
55      !               
56      CALL trc_nam_trc                            ! passive tracer informations
57      !                                       
58      IF( ln_rsttr                     )   ln_trcdta = .FALSE.   ! restart : no need of clim data
59      !
60      IF( ln_trcdmp .OR. ln_trcdmp_clo )   ln_trcdta = .TRUE.    ! damping : need to have clim data
61      !
62      !
63      IF(lwp) THEN                   ! control print
64         IF( ln_rsttr ) THEN
65            WRITE(numout,*)
66            WRITE(numout,*) '   ==>>>   Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )
67         ENDIF
68         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN
69            WRITE(numout,*)
70            WRITE(numout,*) '   ==>>>   Some of the passive tracers are initialised from climatologies '
71         ENDIF
72         IF( .NOT.ln_trcdta ) THEN
73            WRITE(numout,*)
74            WRITE(numout,*) '   ==>>>   All the passive tracers are initialised with constant values '
75         ENDIF
76      ENDIF
77      !
78      rdttrc = rdt                              ! passive tracer time-step     
79      !
80      IF(lwp) THEN                              ! control print
81        WRITE(numout,*) 
82        WRITE(numout,*) '   ==>>>   Passive Tracer  time step    rdttrc = rdt = ', rdttrc
83      ENDIF
84      !
85      IF( l_trdtrc )        CALL trc_nam_trd    ! Passive tracer trends
86      !
87   END SUBROUTINE trc_nam
88
89
90   SUBROUTINE trc_nam_run
91      !!---------------------------------------------------------------------
92      !!                     ***  ROUTINE trc_nam  ***
93      !!
94      !! ** Purpose :   read options for the passive tracer run (namelist)
95      !!
96      !!---------------------------------------------------------------------
97      INTEGER  ::   ios   ! Local integer
98      !!
99      NAMELIST/namtrc_run/ ln_rsttr, nn_rsttr, ln_top_euler, &
100        &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out
101      !!---------------------------------------------------------------------
102      !
103      IF(lwp) WRITE(numout,*)
104      IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists'
105      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
106      !
107      CALL load_nml( numnat_ref, 'namelist_top_ref' , numout, lwm )
108      CALL load_nml( numnat_cfg, 'namelist_top_cfg' , numout, lwm )
109      IF(lwm) CALL ctl_opn( numont, 'output.namelist.top', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., 1 )
110      !
111      READ  ( numnat_ref, namtrc_run, IOSTAT = ios, ERR = 901)
112901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc in reference namelist' )
113      READ  ( numnat_cfg, namtrc_run, IOSTAT = ios, ERR = 902 )
114902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc in configuration namelist' )
115      IF(lwm) WRITE( numont, namtrc_run )
116
117      nittrc000 = nit000             ! first time step of tracer model
118
119      IF(lwp) THEN                   ! control print
120         WRITE(numout,*) '   Namelist : namtrc_run'
121         WRITE(numout,*) '      restart  for passive tracer                  ln_rsttr      = ', ln_rsttr
122         WRITE(numout,*) '      control of time step for passive tracer      nn_rsttr      = ', nn_rsttr
123         WRITE(numout,*) '      first time step for pass. trac.              nittrc000     = ', nittrc000
124         WRITE(numout,*) '      Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler
125      ENDIF
126      !
127   END SUBROUTINE trc_nam_run
128
129
130   SUBROUTINE trc_nam_trc
131      !!---------------------------------------------------------------------
132      !!                     ***  ROUTINE trc_nam  ***
133      !!
134      !! ** Purpose :   read options for the passive tracer run (namelist)
135      !!
136      !!---------------------------------------------------------------------
137      INTEGER ::   ios, ierr, icfc       ! Local integer
138      !!
139      NAMELIST/namtrc/jp_bgc, ln_pisces, ln_my_trc, ln_age, ln_cfc11, ln_cfc12, ln_sf6, ln_c14, &
140         &            sn_tracer, ln_trcdta, ln_trcbc, ln_trcdmp, ln_trcdmp_clo, jp_dia3d, jp_dia2d
141      !!---------------------------------------------------------------------
142      ! Dummy settings to fill tracers data structure
143      !                  !   name   !   title   !   unit   !   init  !   sbc   !   cbc   !   obc  !
144      sn_tracer = PTRACER( 'NONAME' , 'NOTITLE' , 'NOUNIT' , .false. , .false. , .false. , .false.)
145      !
146      IF(lwp) WRITE(numout,*)
147      IF(lwp) WRITE(numout,*) 'trc_nam_trc : read the passive tracer namelists'
148      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
149
150      READ  ( numnat_ref, namtrc, IOSTAT = ios, ERR = 901)
151901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc in reference namelist' )
152      READ  ( numnat_cfg, namtrc, IOSTAT = ios, ERR = 902 )
153902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc in configuration namelist' )
154      IF(lwm) WRITE( numont, namtrc )
155
156      ! Control settings
157      IF( ln_pisces .AND. ln_my_trc )   CALL ctl_stop( 'Choose only ONE BGC model - PISCES or MY_TRC' )
158      IF( .NOT. ln_pisces .AND. .NOT. ln_my_trc )   jp_bgc = 0
159      ll_cfc = ln_cfc11 .OR. ln_cfc12 .OR. ln_sf6
160      !
161      jptra       =  0
162      jp_pisces   =  0    ;   jp_pcs0  =  0    ;   jp_pcs1  = 0
163      jp_my_trc   =  0    ;   jp_myt0  =  0    ;   jp_myt1  = 0
164      jp_cfc      =  0    ;   jp_cfc0  =  0    ;   jp_cfc1  = 0
165      jp_age      =  0    ;   jp_c14   =  0
166      !
167      IF( ln_pisces )  THEN
168         jp_pisces = jp_bgc
169         jp_pcs0   = 1
170         jp_pcs1   = jp_pisces
171      ENDIF
172      IF( ln_my_trc )  THEN
173          jp_my_trc = jp_bgc
174          jp_myt0   = 1
175          jp_myt1   = jp_my_trc
176      ENDIF
177      !
178      jptra  = jp_bgc
179      !
180      IF( ln_age )    THEN
181         jptra     = jptra + 1
182         jp_age    = jptra
183      ENDIF
184      IF( ln_cfc11 )  jp_cfc = jp_cfc + 1
185      IF( ln_cfc12 )  jp_cfc = jp_cfc + 1
186      IF( ln_sf6   )  jp_cfc = jp_cfc + 1
187      IF( ll_cfc )    THEN
188          jptra     = jptra + jp_cfc
189          jp_cfc0   = jptra - jp_cfc + 1
190          jp_cfc1   = jptra
191      ENDIF
192      IF( ln_c14 )    THEN
193           jptra     = jptra + 1
194           jp_c14    = jptra
195      ENDIF
196      !
197      IF( jptra == 0 )   CALL ctl_stop( 'All TOP tracers disabled: change namtrc setting or check if key_top is active' )
198      !
199      IF(lwp) THEN                   ! control print
200         WRITE(numout,*) '   Namelist : namtrc'
201         WRITE(numout,*) '      Total number of passive tracers              jptra         = ', jptra
202         WRITE(numout,*) '      Total number of BGC tracers                  jp_bgc        = ', jp_bgc
203         WRITE(numout,*) '      Simulating PISCES model                      ln_pisces     = ', ln_pisces
204         WRITE(numout,*) '      Simulating MY_TRC  model                     ln_my_trc     = ', ln_my_trc
205         WRITE(numout,*) '      Simulating water mass age                    ln_age        = ', ln_age
206         WRITE(numout,*) '      Simulating CFC11 passive tracer              ln_cfc11      = ', ln_cfc11
207         WRITE(numout,*) '      Simulating CFC12 passive tracer              ln_cfc12      = ', ln_cfc12
208         WRITE(numout,*) '      Simulating SF6 passive tracer                ln_sf6        = ', ln_sf6
209         WRITE(numout,*) '      Total number of CFCs tracers                 jp_cfc        = ', jp_cfc
210         WRITE(numout,*) '      Simulating C14   passive tracer              ln_c14        = ', ln_c14
211         WRITE(numout,*) '      Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta
212         WRITE(numout,*) '      Enable surface, lateral or open boundaries conditions (y/n)  ln_trcbc  = ', ln_trcbc
213         WRITE(numout,*) '      Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp
214         WRITE(numout,*) '      Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo
215      ENDIF
216      !
217      IF( ll_cfc .OR. ln_c14 ) THEN
218        !                             ! Open namelist files
219        CALL load_nml( numtrc_ref, 'namelist_trc_ref' , numout, lwm )
220        CALL load_nml( numtrc_cfg, 'namelist_trc_cfg' , numout, lwm )
221        IF(lwm) CALL ctl_opn( numonr, 'output.namelist.trc', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
222        !
223      ENDIF
224      !
225   END SUBROUTINE trc_nam_trc
226
227
228   SUBROUTINE trc_nam_trd
229      !!---------------------------------------------------------------------
230      !!                     ***  ROUTINE trc_nam_dia  ***
231      !!
232      !! ** Purpose :   read options for the passive tracer diagnostics
233      !!
234      !! ** Method  : - read passive tracer namelist
235      !!              - read namelist of each defined SMS model
236      !!                ( (PISCES, CFC, MY_TRC )
237      !!---------------------------------------------------------------------
238#if defined key_trdmxl_trc  || defined key_trdtrc
239      INTEGER  ::   ios, ierr                 ! Local integer
240      !!
241      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, &
242         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, &
243         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc
244      !!---------------------------------------------------------------------
245      !
246      IF(lwp) WRITE(numout,*)
247      IF(lwp) WRITE(numout,*) 'trc_nam_trd : read the passive tracer diagnostics options'
248      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
249      !
250      ALLOCATE( ln_trdtrc(jptra) ) 
251      !
252      READ  ( numnat_ref, namtrc_trd, IOSTAT = ios, ERR = 905)
253905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc_trd in reference namelist' )
254      READ  ( numnat_cfg, namtrc_trd, IOSTAT = ios, ERR = 906 )
255906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc_trd in configuration namelist' )
256      IF(lwm) WRITE( numont, namtrc_trd )
257
258      IF(lwp) THEN
259         WRITE(numout,*) '   Namelist : namtrc_trd                    '
260         WRITE(numout,*) '      frequency of trends diagnostics   nn_trd_trc             = ', nn_trd_trc
261         WRITE(numout,*) '      control surface type              nn_ctls_trc            = ', nn_ctls_trc
262         WRITE(numout,*) '      restart for ML diagnostics        ln_trdmxl_trc_restart  = ', ln_trdmxl_trc_restart
263         WRITE(numout,*) '      instantantaneous or mean trends   ln_trdmxl_trc_instant  = ', ln_trdmxl_trc_instant
264         WRITE(numout,*) '      unit conversion factor            rn_ucf_trc             = ', rn_ucf_trc
265         DO jn = 1, jptra
266            IF( ln_trdtrc(jn) ) WRITE(numout,*) '      compute ML trends for tracer number :', jn
267         END DO
268      ENDIF
269#endif
270      !
271   END SUBROUTINE trc_nam_trd
272
273#else
274   !!----------------------------------------------------------------------
275   !!  Dummy module :                                     No passive tracer
276   !!----------------------------------------------------------------------
277CONTAINS
278   SUBROUTINE trc_nam                      ! Empty routine   
279   END SUBROUTINE trc_nam
280   SUBROUTINE trc_nam_run                      ! Empty routine   
281   END SUBROUTINE trc_nam_run
282#endif
283
284   !!======================================================================
285END MODULE trcnam
Note: See TracBrowser for help on using the repository browser.