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/trunk/src/TOP – NEMO

source: NEMO/trunk/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
RevLine 
[2038]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   !!----------------------------------------------------------------------
[9169]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
[2038]25
26   IMPLICIT NONE
27   PRIVATE
28
[9169]29   PUBLIC   trc_nam_run  ! called in trcini
30   PUBLIC   trc_nam      ! called in trcini
[2038]31
[9169]32   TYPE(PTRACER), DIMENSION(jpmaxtrc), PUBLIC  :: sn_tracer  !: type of tracer for saving if not key_iomput
[7646]33
[2038]34   !!----------------------------------------------------------------------
[10067]35   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
[5341]36   !! $Id$
[10068]37   !! Software governed by the CeCILL license (see ./LICENSE)
[2038]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
[3680]49      !!                ( (PISCES, CFC, MY_TRC )
[2038]50      !!---------------------------------------------------------------------
[9169]51      INTEGER  ::   jn   ! dummy loop indice
52      !!---------------------------------------------------------------------
[7646]53      !
54      IF( .NOT.l_offline )   CALL trc_nam_run     ! Parameters of the run                                 
[5836]55      !               
[9169]56      CALL trc_nam_trc                            ! passive tracer informations
[5836]57      !                                       
[9169]58      IF( ln_rsttr                     )   ln_trcdta = .FALSE.   ! restart : no need of clim data
[4152]59      !
[9169]60      IF( ln_trcdmp .OR. ln_trcdmp_clo )   ln_trcdta = .TRUE.    ! damping : need to have clim data
[5836]61      !
[9169]62      !
[5836]63      IF(lwp) THEN                   ! control print
[3294]64         IF( ln_rsttr ) THEN
65            WRITE(numout,*)
[9169]66            WRITE(numout,*) '   ==>>>   Read a restart file for passive tracer : ', TRIM( cn_trcrst_in )
[3294]67         ENDIF
[4148]68         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN
69            WRITE(numout,*)
[9169]70            WRITE(numout,*) '   ==>>>   Some of the passive tracers are initialised from climatologies '
[4148]71         ENDIF
72         IF( .NOT.ln_trcdta ) THEN
73            WRITE(numout,*)
[9169]74            WRITE(numout,*) '   ==>>>   All the passive tracers are initialised with constant values '
[4148]75         ENDIF
[3294]76      ENDIF
[7646]77      !
[12377]78      rdttrc = rdt                              ! passive tracer time-step     
[7646]79      !
80      IF(lwp) THEN                              ! control print
[4152]81        WRITE(numout,*) 
[12377]82        WRITE(numout,*) '   ==>>>   Passive Tracer  time step    rdttrc = rdt = ', rdttrc
[4152]83      ENDIF
[2038]84      !
[7646]85      IF( l_trdtrc )        CALL trc_nam_trd    ! Passive tracer trends
86      !
[2038]87   END SUBROUTINE trc_nam
88
[5836]89
[4152]90   SUBROUTINE trc_nam_run
91      !!---------------------------------------------------------------------
92      !!                     ***  ROUTINE trc_nam  ***
93      !!
94      !! ** Purpose :   read options for the passive tracer run (namelist)
95      !!
96      !!---------------------------------------------------------------------
[9169]97      INTEGER  ::   ios   ! Local integer
98      !!
[12377]99      NAMELIST/namtrc_run/ ln_rsttr, nn_rsttr, ln_top_euler, &
[5341]100        &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out
[4152]101      !!---------------------------------------------------------------------
[5836]102      !
[9169]103      IF(lwp) WRITE(numout,*)
[6140]104      IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists'
[9169]105      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
106      !
[12377]107      CALL load_nml( numnat_ref, 'namelist_top_ref' , numout, lwm )
108      CALL load_nml( numnat_cfg, 'namelist_top_cfg' , numout, lwm )
[4624]109      IF(lwm) CALL ctl_opn( numont, 'output.namelist.top', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., 1 )
[9169]110      !
[4152]111      READ  ( numnat_ref, namtrc_run, IOSTAT = ios, ERR = 901)
[11536]112901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc in reference namelist' )
[4152]113      READ  ( numnat_cfg, namtrc_run, IOSTAT = ios, ERR = 902 )
[11536]114902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc in configuration namelist' )
[9169]115      IF(lwm) WRITE( numont, namtrc_run )
[4152]116
[12377]117      nittrc000 = nit000             ! first time step of tracer model
[4152]118
119      IF(lwp) THEN                   ! control print
[9169]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
[4152]125      ENDIF
126      !
[10425]127   END SUBROUTINE trc_nam_run
[4152]128
[9169]129
[4152]130   SUBROUTINE trc_nam_trc
131      !!---------------------------------------------------------------------
132      !!                     ***  ROUTINE trc_nam  ***
133      !!
134      !! ** Purpose :   read options for the passive tracer run (namelist)
135      !!
136      !!---------------------------------------------------------------------
[9169]137      INTEGER ::   ios, ierr, icfc       ! Local integer
[4152]138      !!
[7646]139      NAMELIST/namtrc/jp_bgc, ln_pisces, ln_my_trc, ln_age, ln_cfc11, ln_cfc12, ln_sf6, ln_c14, &
[12377]140         &            sn_tracer, ln_trcdta, ln_trcbc, ln_trcdmp, ln_trcdmp_clo, jp_dia3d, jp_dia2d
[4152]141      !!---------------------------------------------------------------------
[7646]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      !
[4152]146      IF(lwp) WRITE(numout,*)
[6140]147      IF(lwp) WRITE(numout,*) 'trc_nam_trc : read the passive tracer namelists'
[9169]148      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
[4152]149
150      READ  ( numnat_ref, namtrc, IOSTAT = ios, ERR = 901)
[11536]151901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc in reference namelist' )
[4152]152      READ  ( numnat_cfg, namtrc, IOSTAT = ios, ERR = 902 )
[11536]153902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc in configuration namelist' )
[9169]154      IF(lwm) WRITE( numont, namtrc )
[4152]155
[7646]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
[5836]160      !
[7646]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
[9169]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
[12377]212         WRITE(numout,*) '      Enable surface, lateral or open boundaries conditions (y/n)  ln_trcbc  = ', ln_trcbc
[9169]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
[7646]215      ENDIF
216      !
217      IF( ll_cfc .OR. ln_c14 ) THEN
218        !                             ! Open namelist files
[12377]219        CALL load_nml( numtrc_ref, 'namelist_trc_ref' , numout, lwm )
220        CALL load_nml( numtrc_cfg, 'namelist_trc_cfg' , numout, lwm )
[7646]221        IF(lwm) CALL ctl_opn( numonr, 'output.namelist.trc', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )
222        !
223      ENDIF
[9169]224      !
[5836]225   END SUBROUTINE trc_nam_trc
[4152]226
[9169]227
[7646]228   SUBROUTINE trc_nam_trd
[4152]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      !!---------------------------------------------------------------------
[7646]238#if defined key_trdmxl_trc  || defined key_trdtrc
[9169]239      INTEGER  ::   ios, ierr                 ! Local integer
[5836]240      !!
[4152]241      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, &
[4990]242         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, &
[4152]243         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc
244      !!---------------------------------------------------------------------
[9169]245      !
[4152]246      IF(lwp) WRITE(numout,*)
[7646]247      IF(lwp) WRITE(numout,*) 'trc_nam_trd : read the passive tracer diagnostics options'
[9169]248      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
[7646]249      !
250      ALLOCATE( ln_trdtrc(jptra) ) 
251      !
252      READ  ( numnat_ref, namtrc_trd, IOSTAT = ios, ERR = 905)
[11536]253905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc_trd in reference namelist' )
[7646]254      READ  ( numnat_cfg, namtrc_trd, IOSTAT = ios, ERR = 906 )
[11536]255906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc_trd in configuration namelist' )
[9169]256      IF(lwm) WRITE( numont, namtrc_trd )
[4152]257
258      IF(lwp) THEN
[9169]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
[7646]265         DO jn = 1, jptra
[9169]266            IF( ln_trdtrc(jn) ) WRITE(numout,*) '      compute ML trends for tracer number :', jn
[7646]267         END DO
[4152]268      ENDIF
[7646]269#endif
[4152]270      !
[7646]271   END SUBROUTINE trc_nam_trd
[4152]272
[2038]273#else
274   !!----------------------------------------------------------------------
275   !!  Dummy module :                                     No passive tracer
276   !!----------------------------------------------------------------------
277CONTAINS
278   SUBROUTINE trc_nam                      ! Empty routine   
279   END SUBROUTINE trc_nam
[4152]280   SUBROUTINE trc_nam_run                      ! Empty routine   
281   END SUBROUTINE trc_nam_run
[2038]282#endif
283
284   !!======================================================================
[5656]285END MODULE trcnam
Note: See TracBrowser for help on using the repository browser.