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.
trcrst.F90 in trunk/NEMO/TOP_SRC – NEMO

source: trunk/NEMO/TOP_SRC/trcrst.F90 @ 1796

Last change on this file since 1796 was 1655, checked in by cetlod, 15 years ago

Call to write restart in TOP not properly done, see ticket:43

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 21.2 KB
Line 
1MODULE trcrst
2   !!======================================================================
3   !!                       ***  MODULE trcrst  ***
4   !! TOP :   create, write, read the restart files for passive tracers
5   !!======================================================================
6   !! History :   1.0  !  2007-02 (C. Ethe) adaptation from the ocean
7   !!----------------------------------------------------------------------
8#if defined key_top
9   !!----------------------------------------------------------------------
10   !!   'key_top'                                                TOP models
11   !!----------------------------------------------------------------------
12   !!   trc_rst_opn    : open  restart file
13   !!   trc_rst_read   : read  restart file
14   !!   trc_rst_wri    : write restart file
15   !!----------------------------------------------------------------------
16   USE oce_trc
17   USE trc
18   USE sms_lobster         ! LOBSTER variables
19   USE sms_pisces          ! PISCES variables
20   USE trcsms_cfc          ! CFC variables
21   USE trcsms_c14b         ! C14 variables
22   USE trcsms_my_trc       ! MY_TRC variables
23   USE trctrp_lec   
24   USE lib_mpp
25   USE iom
26   
27   IMPLICIT NONE
28   PRIVATE
29   
30   PUBLIC   trc_rst_opn       ! called by ???
31   PUBLIC   trc_rst_read      ! called by ???
32   PUBLIC   trc_rst_wri       ! called by ???
33   
34   INTEGER, PUBLIC ::   numrtr, numrtw   !: logical unit for trc restart (read and write)
35
36
37   !! * Substitutions
38#  include "top_substitute.h90"
39   !!----------------------------------------------------------------------
40   !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005)
41   !! $Id$
42   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
43   !!----------------------------------------------------------------------
44   
45CONTAINS
46   
47   SUBROUTINE trc_rst_opn( kt )
48      !!----------------------------------------------------------------------
49      !!                    ***  trc_rst_opn  ***
50      !!
51      !! ** purpose  :   output of sea-trc variable in a netcdf file
52      !!----------------------------------------------------------------------
53      INTEGER, INTENT(in) ::   kt       ! number of iteration
54      !
55      CHARACTER(LEN=20)   ::   clkt     ! ocean time-step define as a character
56      CHARACTER(LEN=50)   ::   clname   ! trc output restart file name
57      !!----------------------------------------------------------------------
58      !
59# if ! defined key_off_tra
60      IF( kt == nit000 ) lrst_trc = .FALSE. 
61# else
62      IF( kt == nit000 ) THEN
63        lrst_trc = .FALSE. 
64        nitrst = nitend 
65      ENDIF
66
67      IF( MOD( kt - 1, nstock ) == 0 ) THEN
68         ! we use kt - 1 and not kt - nit000 to keep the same periodicity from the beginning of the experiment
69         nitrst = kt + nstock - 1                  ! define the next value of nitrst for restart writing
70         IF( nitrst > nitend )   nitrst = nitend   ! make sure we write a restart at the end of the run
71      ENDIF
72# endif
73     ! to get better performances with NetCDF format:
74     ! we open and define the tracer restart file one tracer time step before writing the data (-> at nitrst - 2*ndttrc + 1)
75     ! except if we write tracer restart files every tracer time step or if a tracer restart file was writen at nitend - 2*ndttrc + 1
76     IF( kt == nitrst - 2*ndttrc + 1 .OR. nstock == ndttrc .OR. ( kt == nitend - ndttrc + 1 .AND. .NOT. lrst_trc ) ) THEN
77         ! beware of the format used to write kt (default is i8.8, that should be large enough)
78         IF( nitrst > 1.0e9 ) THEN   ;   WRITE(clkt,*       ) nitrst
79         ELSE                        ;   WRITE(clkt,'(i8.8)') nitrst
80         ENDIF
81         ! create the file
82         IF(lwp) WRITE(numout,*)
83         clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_"//TRIM(cn_trcrst_out)
84         IF(lwp) WRITE(numout,*) '             open trc restart.output NetCDF file: '//clname
85         CALL iom_open( clname, numrtw, ldwrt = .TRUE., kiolib = jprstlib )
86         lrst_trc = .TRUE.
87      ENDIF
88      !
89   END SUBROUTINE trc_rst_opn
90
91
92   SUBROUTINE trc_rst_read 
93      !!----------------------------------------------------------------------
94      !!                    ***  trc_rst_opn  ***
95      !!
96      !! ** purpose  :   read passive tracer fields in restart files
97      !!----------------------------------------------------------------------
98      INTEGER  ::  jn 
99      INTEGER  ::  iarak0
100      REAL(wp) ::  zarak0
101      INTEGER  ::  jlibalt = jprstlib
102      LOGICAL  ::  llok
103#if defined key_pisces 
104      INTEGER  ::  ji, jj, jk
105      REAL(wp) ::  zcaralk, zbicarb, zco3
106      REAL(wp) ::  ztmas, ztmas1
107#endif
108
109      !!----------------------------------------------------------------------
110
111      IF(lwp) WRITE(numout,*)
112      IF(lwp) WRITE(numout,*) 'trc_rst_read : read the TOP restart file'
113      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~'
114
115      IF ( jprstlib == jprstdimg ) THEN
116        ! eventually read netcdf file (monobloc)  for restarting on different number of processors
117        ! if {cn_trcrst_in}.nc exists, then set jlibalt to jpnf90
118        INQUIRE( FILE = TRIM(cn_trcrst_in)//'.nc', EXIST = llok )
119        IF ( llok ) THEN ; jlibalt = jpnf90  ; ELSE ; jlibalt = jprstlib ; ENDIF
120      ENDIF
121     
122      CALL iom_open( cn_trcrst_in, numrtr, kiolib = jlibalt )
123
124      ! Time domain : restart
125      ! ---------------------
126      CALL trc_rst_cal( nittrc000, 'READ' )   ! calendar
127
128      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN   ;   iarak0 = 1
129      ELSE                                           ;   iarak0 = 0
130      ENDIF
131      CALL iom_get( numrtr, 'arak0', zarak0 )
132
133      IF( iarak0 /= NINT( zarak0 ) )   &                           ! Control of the scheme
134         & CALL ctl_stop( ' ===>>>> : problem with advection scheme', &
135         & ' it must be the same type for both restart and previous run', &
136         & ' centered or euler '  )
137      IF(lwp) WRITE(numout,*)
138
139      IF(lwp) WRITE(numout,*) '    arakawa option      : ', NINT( zarak0 )
140
141
142      ! READ prognostic variables and computes diagnostic variable
143      DO jn = 1, jptra
144         CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 
145      END DO
146
147      DO jn = 1, jptra
148         CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 
149      END DO
150
151#if defined key_lobster
152      CALL iom_get( numrtr, jpdom_autoglo, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 
153      CALL iom_get( numrtr, jpdom_autoglo, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 
154#endif
155#if defined key_pisces
156      !
157      IF( ln_pisdmp ) CALL pis_dmp_ini  ! relaxation of some tracers
158      !
159      IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN
160         CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  )
161      ELSE
162         ! Set PH from  total alkalinity, borat (???), akb3 (???) and ak23 (???)
163         ! --------------------------------------------------------
164         DO jk = 1, jpk
165            DO jj = 1, jpj
166               DO ji = 1, jpi
167                  ztmas   = tmask(ji,jj,jk)
168                  ztmas1  = 1. - tmask(ji,jj,jk)
169                  zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  )
170                  zco3    = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1
171                  zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk )
172                  hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1
173               END DO
174            END DO
175         END DO
176      ENDIF
177      CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 
178      IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN
179         CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax' , xksimax(:,:)  )
180      ELSE
181         xksimax(:,:) = xksi(:,:)
182      ENDIF
183#endif
184#if defined key_cfc
185      DO jn = jp_cfc0, jp_cfc1
186         CALL iom_get( numrtr, jpdom_autoglo, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jn) ) 
187      END DO
188#endif
189#if defined key_c14b
190      CALL iom_get( numrtr, jpdom_autoglo, 'qint_'//ctrcnm(jn) , qint_c14(:,:) ) 
191#endif
192#if defined key_my_trc
193#endif
194     
195      CALL iom_close( numrtr )
196      !
197   END SUBROUTINE trc_rst_read
198
199
200   SUBROUTINE trc_rst_wri( kt )
201      !!----------------------------------------------------------------------
202      !!                    ***  trc_rst_wri  ***
203      !!
204      !! ** purpose  :   write passive tracer fields in restart files
205      !!----------------------------------------------------------------------
206      INTEGER, INTENT( in ) ::   kt    ! ocean time-step index
207      !!
208      INTEGER  :: jn
209      REAL(wp) :: zarak0
210      !!----------------------------------------------------------------------
211
212
213      CALL trc_rst_cal( kt, 'WRITE' )   ! calendar
214
215      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN   ;   zarak0 = 1.
216      ELSE                                           ;   zarak0 = 0.
217      ENDIF
218      CALL iom_rstput( kt, nitrst, numrtw, 'arak0', zarak0 )
219
220      ! prognostic variables
221      ! --------------------
222      DO jn = 1, jptra
223         CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) )
224      END DO
225
226      DO jn = 1, jptra
227         CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) )
228      END DO
229
230#if defined key_lobster
231         CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) )
232         CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) )
233#endif
234#if defined key_pisces 
235         CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) )
236         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) )
237         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) )
238#endif
239#if defined key_cfc
240         DO jn = jp_cfc0, jp_cfc1
241            CALL iom_rstput( kt, nitrst, numrtw, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jn) )
242         END DO
243#endif
244#if defined key_c14b
245         CALL iom_rstput( kt, nitrst, numrtw, 'qint_'//ctrcnm(jn), qint_c14(:,:) )
246#endif
247#if defined key_my_trc
248#endif
249     
250      IF( kt == nitrst ) THEN
251          CALL trc_rst_stat            ! statistics
252          CALL iom_close( numrtw )     ! close the restart file (only at last time step)
253#if ! defined key_trdmld_trc
254          lrst_trc = .FALSE.
255#endif
256      ENDIF
257      !
258   END SUBROUTINE trc_rst_wri
259
260   SUBROUTINE trc_rst_cal( kt, cdrw )
261      !!---------------------------------------------------------------------
262      !!                   ***  ROUTINE trc_rst_cal  ***
263      !!
264      !!  ** Purpose : Read or write calendar in restart file:
265      !!
266      !!  WRITE(READ) mode:
267      !!       kt        : number of time step since the begining of the experiment at the
268      !!                   end of the current(previous) run
269      !!       adatrj(0) : number of elapsed days since the begining of the experiment at the
270      !!                   end of the current(previous) run (REAL -> keep fractions of day)
271      !!       ndastp    : date at the end of the current(previous) run (coded as yyyymmdd integer)
272      !!
273      !!   According to namelist parameter nrstdt,
274      !!       nrsttr = 0  no control on the date (nittrc000 is  arbitrary).
275      !!       nrsttr = 1  we verify that nit000 is equal to the last
276      !!                   time step of previous run + 1.
277      !!       In both those options, the  exact duration of the experiment
278      !!       since the beginning (cumulated duration of all previous restart runs)
279      !!       is not stored in the restart and is assumed to be (nit000-1)*rdt.
280      !!       This is valid is the time step has remained constant.
281      !!
282      !!       nrsttr = 2  the duration of the experiment in days (adatrj)
283      !!                    has been stored in the restart file.
284      !!----------------------------------------------------------------------
285      INTEGER         , INTENT(in) ::   kt         ! ocean time-step
286      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag
287      !
288      REAL(wp) ::  zkt
289#if defined key_off_tra
290      REAL(wp) ::  zndastp
291#endif
292
293      ! Time domain : restart
294      ! ---------------------
295
296      IF( TRIM(cdrw) == 'READ' ) THEN
297         CALL iom_get ( numrtr, 'kt', zkt )   ! last time-step of previous run
298         IF(lwp) THEN
299            WRITE(numout,*) ' *** Info read in restart : '
300            WRITE(numout,*) '   previous time-step                               : ', NINT( zkt )
301            WRITE(numout,*) ' *** restart option'
302            SELECT CASE ( nrsttr )
303            CASE ( 0 )   ;   WRITE(numout,*) ' nrsttr = 0 : no control of nittrc000'
304            CASE ( 1 )   ;   WRITE(numout,*) ' nrsttr = 1 : no control the date at nit000 (use ndate0 read in the namelist)'
305            CASE ( 2 )   ;   WRITE(numout,*) ' nrsttr = 2 : calendar parameters read in restart'
306            END SELECT
307            WRITE(numout,*)
308         ENDIF
309         ! Control of date
310         IF( nittrc000  - NINT( zkt ) /= 1 .AND.  nrsttr /= 0 )                                  &
311            &   CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart',                 &
312            &                  ' verify the restart file or rerun with nrsttr = 0 (namelist)' )
313#if defined key_off_tra
314         ! define ndastp and adatrj
315         IF ( nrsttr == 2 ) THEN
316            CALL iom_get( numrtr, 'ndastp', zndastp ) 
317            ndastp = NINT( zndastp )
318            CALL iom_get( numrtr, 'adatrj', adatrj  )
319         ELSE
320            ndastp = ndate0 - 1     ! ndate0 read in the namelist in dom_nam
321            adatrj = ( REAL( nittrc000-1, wp ) * rdttra(1) ) / rday
322            ! note this is wrong if time step has changed during run
323         ENDIF
324         !
325         IF(lwp) THEN
326           WRITE(numout,*) ' *** Info used values : '
327           WRITE(numout,*) '   date ndastp                                      : ', ndastp
328           WRITE(numout,*) '   number of elapsed days since the begining of run : ', adatrj
329           WRITE(numout,*)
330         ENDIF
331#endif
332
333      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN
334         !
335         IF(  kt == nitrst ) THEN
336            IF(lwp) WRITE(numout,*)
337            IF(lwp) WRITE(numout,*) 'trc_wri : write the TOP restart file (NetCDF) at it= ', kt, ' date= ', ndastp
338            IF(lwp) WRITE(numout,*) '~~~~~~~'
339         ENDIF
340         ! calendar control
341         CALL iom_rstput( kt, nitrst, numrtw, 'kt'     , REAL( kt    , wp) )   ! time-step
342         CALL iom_rstput( kt, nitrst, numrtw, 'ndastp' , REAL( ndastp, wp) )   ! date
343         CALL iom_rstput( kt, nitrst, numrtw, 'adatrj' , adatrj            )   ! number of elapsed days since
344         !                                                                     ! the begining of the run [s]
345      ENDIF
346
347   END SUBROUTINE trc_rst_cal
348
349# if defined key_pisces 
350
351   SUBROUTINE pis_dmp_ini 
352      !!----------------------------------------------------------------------
353      !!                    ***  pis_dmp_ini  ***
354      !!
355      !! ** purpose  : Relaxation of some tracers
356      !!----------------------------------------------------------------------
357      INTEGER  :: ji, jj, jk 
358      REAL(wp) ::  &
359         alkmean = 2426. ,  & ! mean value of alkalinity ( Glodap ; for Goyet 2391. )
360         po4mean = 2.165 ,  & ! mean value of phosphates
361         no3mean = 30.90 ,  & ! mean value of nitrate
362         siomean = 91.51      ! mean value of silicate
363     
364      REAL(wp) ::   zvol, ztrasum
365
366
367      IF(lwp)  WRITE(numout,*)
368
369      IF( cp_cfg == "orca" .AND. .NOT. lk_trc_c1d ) THEN      ! ORCA condiguration (not 1D) !
370         !                                                    ! --------------------------- !
371         ! set total alkalinity, phosphate, NO3 & silicate
372
373         ! total alkalinity
374         ztrasum = 0.e0             
375         DO jk = 1, jpk
376            DO jj = 1, jpj
377               DO ji = 1, jpi
378                  zvol = cvol(ji,jj,jk)
379#  if defined key_off_degrad
380                  zvol = zvol * facvol(ji,jj,jk)
381#  endif
382                  ztrasum = ztrasum + trn(ji,jj,jk,jptal) * zvol
383               END DO
384            END DO
385         END DO
386         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain 
387         
388         ztrasum = ztrasum / areatot * 1.e6
389         IF(lwp) WRITE(numout,*) '       TALK mean : ', ztrasum
390         trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / ztrasum
391           
392         ! phosphate
393         ztrasum = 0.e0
394         DO jk = 1, jpk
395            DO jj = 1, jpj
396               DO ji = 1, jpi
397                  zvol = cvol(ji,jj,jk)
398#  if defined key_off_degrad
399                  zvol = zvol * facvol(ji,jj,jk)
400#  endif
401                  ztrasum = ztrasum + trn(ji,jj,jk,jppo4) * zvol
402               END DO
403            END DO
404         END DO
405         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain 
406         
407         ztrasum = ztrasum / areatot * 1.e6 / 122.
408         IF(lwp) WRITE(numout,*) '       PO4  mean : ', ztrasum
409         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / ztrasum
410       
411         ! Nitrates         
412         ztrasum = 0.e0
413         DO jk = 1, jpk
414            DO jj = 1, jpj
415               DO ji = 1, jpi
416                  zvol = cvol(ji,jj,jk)
417#  if defined key_off_degrad
418                  zvol = zvol * facvol(ji,jj,jk)
419#  endif
420                  ztrasum = ztrasum + trn(ji,jj,jk,jpno3) * zvol
421               END DO
422            END DO
423         END DO
424         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain 
425         
426         ztrasum = ztrasum / areatot * 1.e6 / 7.6
427         IF(lwp) WRITE(numout,*) '       NO3  mean : ', ztrasum
428         trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / ztrasum
429         
430         ! Silicate
431         ztrasum = 0.e0
432         DO jk = 1, jpk
433            DO jj = 1, jpj
434               DO ji = 1, jpi
435                  zvol = cvol(ji,jj,jk)
436#  if defined key_off_degrad
437                  zvol = zvol * facvol(ji,jj,jk)
438#  endif
439                  ztrasum = ztrasum + trn(ji,jj,jk,jpsil) * zvol
440               END DO
441            END DO
442         END DO
443         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain 
444         ztrasum = ztrasum / areatot * 1.e6
445         IF(lwp) WRITE(numout,*) '       SiO3 mean : ', ztrasum
446         trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * siomean / ztrasum ) 
447         !
448      ENDIF
449
450!#if defined key_kriest
451!     !! Initialize number of particles from a standart restart file
452!     !! The name of big organic particles jpgoc has been only change
453!     !! and replace by jpnum but the values here are concentration
454!     trn(:,:,:,jppoc) = trn(:,:,:,jppoc) + trn(:,:,:,jpnum)
455!     trn(:,:,:,jpnum) = trn(:,:,:,jppoc) / ( 6. * xkr_massp )
456!#endif
457
458   END SUBROUTINE pis_dmp_ini
459
460#endif
461      !!----------------------------------------------------------------------
462
463   SUBROUTINE trc_rst_stat
464      !!----------------------------------------------------------------------
465      !!                    ***  trc_rst_stat  ***
466      !!
467      !! ** purpose  :   Compute tracers statistics
468      !!----------------------------------------------------------------------
469
470      INTEGER  :: ji, jj, jk, jn
471      REAL(wp) :: zdiag_var, zdiag_varmin, zdiag_varmax, zdiag_tot
472      REAL(wp) :: zder, zvol
473      !!----------------------------------------------------------------------
474
475
476      IF( lwp ) THEN
477         WRITE(numout,*) 
478         WRITE(numout,*) '           ----TRACER STAT----             '
479         WRITE(numout,*) 
480      ENDIF
481     
482      zdiag_tot = 0.e0
483      DO jn = 1, jptra
484         zdiag_var    = 0.e0
485         zdiag_varmin = 0.e0
486         zdiag_varmax = 0.e0
487         DO jk = 1, jpk
488            DO jj = 1, jpj
489               DO ji = 1, jpi
490                  zvol = cvol(ji,jj,jk)
491#  if defined key_off_degrad
492                  zvol = zvol * facvol(ji,jj,jk)
493#  endif
494                  zdiag_var = zdiag_var + trn(ji,jj,jk,jn) * zvol
495               END DO
496            END DO
497         END DO
498         
499         zdiag_varmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) )
500         zdiag_varmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) )
501         IF( lk_mpp ) THEN
502            CALL mpp_min( zdiag_varmin )      ! min over the global domain
503            CALL mpp_max( zdiag_varmax )      ! max over the global domain
504            CALL mpp_sum( zdiag_var    )      ! sum over the global domain
505         END IF
506         zdiag_tot = zdiag_tot + zdiag_var
507         zdiag_var = zdiag_var / areatot
508         IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   &
509            &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax
510      END DO
511     
512      zder = ( ( zdiag_tot - trai ) / ( trai + 1.e-12 )  ) * 100._wp
513      IF(lwp) WRITE(numout,*) '   Integral of all tracers over the full domain  = ', zdiag_tot
514      IF(lwp) WRITE(numout,*) '   Drift of the sum of all tracers =', zder, ' %'
515     
516   END SUBROUTINE trc_rst_stat
517
518#else
519   !!----------------------------------------------------------------------
520   !!  Dummy module :                                     No passive tracer
521   !!----------------------------------------------------------------------
522CONTAINS
523   SUBROUTINE trc_rst_read                      ! Empty routines
524   END SUBROUTINE trc_rst_read
525   SUBROUTINE trc_rst_wri( kt )
526      INTEGER, INTENT ( in ) :: kt
527      WRITE(*,*) 'trc_rst_wri: You should not have seen this print! error?', kt
528   END SUBROUTINE trc_rst_wri   
529#endif
530
531   !!======================================================================
532END MODULE trcrst
Note: See TracBrowser for help on using the repository browser.