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

Last change on this file since 1627 was 1473, checked in by smasson, 15 years ago

for dimgout: allow changing the number of proc for restart, see ticket:442

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