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

Last change on this file since 1465 was 1457, checked in by cetlod, 15 years ago

distribution of iom_put in TOP routines, see ticket:437

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