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

Last change on this file since 340 was 340, checked in by opalod, 18 years ago

nemo_v1_update_028 : CT : add missing headers

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.3 KB
Line 
1MODULE trcrst
2   !!======================================================================
3   !!
4   !!                       *** MODULE trcrst ***
5   !!
6   !!   Read the restart files for passive tracers
7   !!
8   !!======================================================================
9   !!  TOP 1.0,  LOCEAN-IPSL (2005)
10   !! $Header$
11   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
12   !!----------------------------------------------------------------------
13#if defined key_passivetrc   
14   !!----------------------------------------------------------------------
15   !! * Modules used
16   !! ==============
17   USE oce_trc
18   USE trc
19   USE sms
20   USE trctrp_lec   
21   
22   IMPLICIT NONE
23   PRIVATE
24   
25   !! * Accessibility
26   PUBLIC trc_rst
27   PUBLIC trc_wri
28   
29   !! * Module variables
30   CHARACTER (len=48) ::   &
31      trestart = 'initial.trc.nc'   ! restart file name
32   
33CONTAINS
34
35#if defined key_fdir
36   !!----------------------------------------------------------------------
37   !!   'key_fdir'                                       direct access file
38   !!----------------------------------------------------------------------
39#include "trcrst_fdir.h90"
40   
41#else
42
43   SUBROUTINE trc_rst 
44      !!===========================================================================================
45      !!
46      !!                       ROUTINE trc_rst
47      !!                     *******************
48      !!
49      !!  PURPOSE :
50      !!  ---------
51      !!     READ files for restart for passive tracer
52      !!
53      !!   METHOD :
54      !!   -------
55      !!      READ the previous fields on the FILE nutrst
56      !!      the first record indicates previous characterics
57      !!      after control with the present run, we READ :
58      !!      - prognostic variables on the second and more record
59      !!
60      !!   History:
61      !!   --------
62      !!  original  : 96-11
63      !!  00-05 (A. Estublier) TVD Limiter Scheme key_trc_tvd
64      !!  00-12 (O. Aumont, E. Kestenare) read restart file for sediments
65      !!  01-05 (O. Aumont, E. Kestenare) read restart file for calcite and silicate sediments
66      !!  05-03 (O. Aumont and A. El Moussaoui) F90           
67      !!------------------------------------------------------------------------
68      !! * Modules used
69      USE ioipsl
70
71
72      !! local declarations
73      !! ==================
74      LOGICAL ::  llog       !!!
75      CHARACTER (len=32) :: clname1,clname2
76      CHARACTER (len=32) :: clname = 'restart.trc'
77      CHARACTER (len=12) :: clvnames(80) 
78
79      INTEGER :: ino1,jn,iarak0,iarak1,          &
80         ji, jj, jk,                   &
81         itime, ibvar
82      REAL(wp) :: caralk,bicarb,zdt,        &     
83         zdate0
84      REAL(wp) ::   zdept(jpk), zlamt(jpi,jpj), zphit(jpi,jpj)
85
86      REAL(wp), DIMENSION(3) :: zinfo
87
88      !!---------------------------------------------------------------------
89      !!  OPA.9 03-2005 
90      !!---------------------------------------------------------------------
91      !! 0. initialisations
92      !!------------------
93
94
95      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
96         iarak0 = 1
97      ELSE
98         iarak0=0
99      ENDIF
100
101
102      IF(lwp) WRITE(numout,*) ' '
103      IF(lwp) WRITE(numout,*) ' *** trc_rst beginning of restart for'
104      IF(lwp) WRITE(numout,*) ' passive tracer'
105      IF(lwp) WRITE(numout,*) ' the present run :'
106      IF(lwp) WRITE(numout,*) '   number job is  : ',no
107      IF(lwp) WRITE(numout,*) '   with the time nit000 : ',nit000
108      IF(lwp) THEN
109         IF(iarak0.eq.1) then
110            WRITE(numout,*) '   and before fields for Arakawa sheme '
111         ENDIF
112         WRITE(numout,*) ' '
113      ENDIF
114
115      ! Time domain : restart
116      ! -------------------------
117
118      IF(lwp) WRITE(numout,*)
119      IF(lwp) WRITE(numout,*)
120      IF(lwp) WRITE(numout,*) ' *** passive tracer restart option'
121      SELECT CASE ( nrsttr )
122      CASE ( 0 )
123         IF(lwp) WRITE(numout,*) ' nrsttr = 0 no control of nit000'
124      CASE ( 1 )
125         IF(lwp) WRITE(numout,*) ' nrsttr = 1 we control the date of nit000'
126      CASE ( 2 )
127         IF(lwp) WRITE(numout,*) ' nrsttr = 2 the date adatrj is read in restart file'
128      CASE DEFAULT
129         IF(lwp) WRITE(numout,*) '  ===>>>> nrsttr not equal 0, 1 or 2 : no control of the date'
130         IF(lwp) WRITE(numout,*) ' =======                   ========='
131      END SELECT
132
133
134      !! 1. READ nutrst
135      !! --------------
136      !! ... first information
137      !! ---------------------
138      itime=0
139      llog=.false.           !!!
140      zlamt(:,:) = 0.e0
141      zphit(:,:) = 0.e0
142      zdept(:)   = 0.e0
143      CALL restini(clname,jpi,jpj,zlamt,zphit,jpk,zdept,clname         & 
144         &           ,itime,zdate0,zdt,nutrst)
145
146      CALL ioget_vname(nutrst, ibvar, clvnames)
147      CALL restget(nutrst,'info',1,1,3,0,llog,zinfo)
148      ino1  = nint(zinfo(1))
149      iarak1 = nint(zinfo(3))
150
151      IF(lwp) WRITE(numout,*) ' '
152      IF(lwp) WRITE(numout,*) ' READ nutrst with '
153      IF(lwp) WRITE(numout,*) '   number job is  : ',ino1
154      IF(lwp) WRITE(numout,*) '   with the time it : ',nint(zinfo(2))
155      IF(lwp) THEN
156         IF(iarak1.eq.1) then
157            WRITE(numout,*) '   and before fields for Arakawa sheme '
158         ENDIF
159      ENDIF
160      IF(lwp) WRITE(numout,*) '   number of variables   : ', ibvar
161      IF(lwp) WRITE(numout,*) '   NetCDF variables      : '
162      IF(lwp) WRITE(numout,*) ' ',clvnames (:ibvar)
163      IF(lwp) WRITE(numout,*) ' '
164
165      !! 1.2 control of date
166      !! -------------------
167
168      IF( nit000- NINT( zinfo(2) ) /= 1 .AND. nrsttr /= 0 ) THEN
169         IF(lwp) THEN
170            WRITE(numout,*) ' ===>>>> : problem with nit000 for the',    & 
171               ' passive tracer restart'
172            WRITE(numout,*) ' =======                              ',    &   
173               ' ======================'
174            WRITE(numout,*) ' we stop. verify the FILE'
175            WRITE(numout,*) ' or rerun with the value  0 for the'
176            WRITE(numout,*) ' control of time PARAMETER   nrstdt'
177            WRITE(numout,*) ' '
178         ENDIF
179         STOP 'trc_rst'       !!
180      ENDIF
181
182      !! 1.3 Control of the sheme
183      !! ------------------------
184
185      IF(iarak0.ne.iarak1) THEN
186         IF(lwp) THEN
187            WRITE(numout,*) ' ===>>>> : problem with the',       &   
188               ' passive tracer restart file'
189            WRITE(numout,*) ' =======                              ',        & 
190               ' ==========================='
191            WRITE(numout,*) ' we stop. verify the FILE'
192            WRITE(numout,*) ' before field required IF 1=',iarak0
193            WRITE(numout,*) ' before field present in file IF 1=',           & 
194               iarak1
195            WRITE(numout,*) ' '
196         ENDIF
197         STOP 'trc_rst'       !!!!!    AVERIFIER AU NIV F90'
198      ENDIF
199
200
201      !! ... READ prognostic variables and computes diagnostic variable
202      !! ---------------------------------------------------------------
203
204      DO jn=1,jptra
205         clname='TRN'//ctrcnm(jn)
206         CALL restget(nutrst,clname,jpi,jpj,jpk,0,llog,trn(:,:,:,jn))
207      END DO
208
209      DO jn=1,jptra
210         clname='TRB'//ctrcnm(jn)
211         CALL restget(nutrst,clname,jpi,jpj,jpk,0,llog,trb(:,:,:,jn))
212      END DO
213
214
215#if defined key_trc_lobster1
216      clname='SEDB'//ctrcnm(jpdet)
217      clname1='SEDN'//ctrcnm(jpdet)
218      CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpocb(:,:))
219      CALL restget(nutrst,clname1,jpi,jpj,1,0,llog,sedpocn(:,:))
220#elif defined key_trc_pisces
221      clname='Silicalim'
222      CALL restget(nutrst,clname,jpi,jpj,1,0,llog,xksi)
223      xksimax=xksi
224
225      clname='SED'//ctrcnm(jppoc)
226      clname1='SED'//ctrcnm(jpcal)
227      clname2='SED'//ctrcnm(jpsil)
228      CALL restget(nutrst,clname1,jpi,jpj,1,0,llog,sedcal(:,:))
229      CALL restget(nutrst,clname2,jpi,jpj,1,0,llog,sedsil(:,:))
230      CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpoc(:,:))
231
232#elif defined key_cfc
233      clname='qint'
234      CALL restget(nutrst,clname,jpi,jpj,jptra,0,llog,qint(:,:,:))
235      clname1='qtr'
236      CALL restget(nutrst,clname1,jpi,jpj,jptra,0,llog,qtr(:,:,:))         
237#endif
238
239#if defined key_trc_pisces 
240      !!  Initialization of chemical variables of the carbon cycle
241      !!  --------------------------------------------------------
242
243      DO jk = 1,jpk
244         DO jj = 1,jpj
245            DO ji = 1,jpi
246               caralk = trn(ji,jj,jk,jptal)-       &
247                  &        borat(ji,jj,jk)/(1.+1.E-8/(rtrn+akb3(ji,jj,jk)))
248               co3(ji,jj,jk)=(caralk-trn(ji,jj,jk,jpdic))*tmask(ji,jj,jk)   &
249                  &        +(1.-tmask(ji,jj,jk))*.5e-3
250               bicarb = (2.*trn(ji,jj,jk,jpdic)-caralk)
251               hi(ji,jj,jk) = (ak23(ji,jj,jk)*bicarb/co3(ji,jj,jk))     &
252                  &  *tmask(ji,jj,jk)+(1.-tmask(ji,jj,jk))*1.e-9
253               h2co3(ji,jj) = 1.e-5
254            ENDDO
255         ENDDO
256      ENDDO
257#endif
258
259   END SUBROUTINE trc_rst
260
261   SUBROUTINE trc_wri(kt)
262      !! ==================================================================================
263      !!
264      !!                       ROUTINE trc_wri
265      !!                     ******************
266      !!
267      !!  PURPOSE :
268      !!  ---------
269      !!     WRITE restart fields in nutwrs
270      !!   METHOD :
271      !!   -------
272      !!
273      !!   nutwrs FILE:
274      !!   each nstock time step , SAVE fields which are necessary for
275      !!   passive tracer restart
276      !!
277      !!
278      !!   INPUT :
279      !!   -----
280      !!      argument
281      !!              kt              : time step
282      !!      COMMON
283      !!            /cottrc/          : passive tracers fields (before,now
284      !!                                  ,after)
285      !!
286      !!   OUTPUT :
287      !!   ------
288      !!      FILE
289      !!           nutwrs          : standard restart fields OUTPUT
290      !!
291      !!   WORKSPACE :
292      !!   ---------
293      !!      ji,jj,jk,jl,ino0,it0,iarak0
294      !!
295      !!   History:
296      !!   --------
297      !!      original : 96-12
298      !!      addition : 99-12 (M.-A. Foujols) NetCDF FORMAT with ioipsl
299      !!      additions : 00-05 (A. Estublier)
300      !!                  TVD Limiter Scheme : key_trc_tvd
301      !!      additions : 01-01 (M.A Foujols, E. Kestenare) bug fix: restclo
302      !!      additions : 01-01 (O. Aumont, E. Kestenare)
303      !!                  write restart file for sediments
304      !!      additions : 01-05 (O. Aumont, E. Kestenare)
305      !!                  write restart file for calcite and silicate sediments
306      !!   05-03 (O. Aumont and A. El Moussaoui) F90
307      !!========================================================================================!
308      !! * Modules used
309      USE ioipsl
310
311      !! * Arguments
312      !! -----------
313      INTEGER, INTENT( in ) :: kt
314
315      !! * local declarations
316      !! ====================
317
318      LOGICAL :: clbon         !!!
319      CHARACTER (len=50) :: clname,clname1,clname2,cln
320
321      INTEGER :: jn,   &
322         ino0,it0,iarak0,     &
323         ic,jc,ji,jj,jk,      &
324         itime
325
326      REAL(wp) :: zdate0, zinfo(3),zdiag_var,    &
327         zdiag_varmin, zdiag_varmax
328
329
330      !! 1. OUTPUT of restart fields (nutwrs)
331      !! ---------------------------
332
333      IF( kt == nit000 ) THEN
334         IF(lwp) WRITE(numout,*)
335         IF(lwp) WRITE(numout,*) 'trc_wri : write passive tracers restart.output NetCDF file'
336         IF(lwp) WRITE(numout,*) '~~~~~~~'
337      ENDIF
338
339
340      IF( MOD(kt,nstock) == 0 .OR. kt == nitend ) THEN
341
342         !! 0. initialisations
343         !! ------------------
344
345         IF(lwp) WRITE(numout,*) ' '
346         IF(lwp) WRITE(numout,*) 'trc_wri : write the passive tracer restart file in NetCDF format ',   &
347            'at it= ',kt,' date= ',ndastp
348         IF(lwp) WRITE(numout,*) '~~~~~~~~~'
349
350
351         ino0 =no
352         it0  =kt
353         IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
354            iarak0 = 1
355         ELSE
356            iarak0=0
357         ENDIF
358
359         zinfo(1)=FLOAT(ino0)
360         zinfo(2)=FLOAT(it0)
361         zinfo(3)=FLOAT(iarak0)
362
363         !! 1. WRITE in nutwrs
364         !! ------------------
365         !!... first information
366
367         INQUIRE (FILE=trestart,EXIST=clbon)
368         IF(clbon) THEN
369            OPEN(UNIT=nutwrs,FILE=trestart,STATUS='old')
370            CLOSE(nutwrs,STATUS='delete')
371         ENDIF
372
373         ic=1
374         DO jc=1,16
375            IF(cexper(jc:jc) /= ' ') ic = jc
376         END DO
377         WRITE(cln,'("_",i2.2,i2.2,i2.2,"_restart.trc")') nyear, nmonth, nday
378         clname=cexper(1:ic)//cln
379         ic=1
380         DO jc=1,48
381            IF(clname(jc:jc) /= ' ') ic=jc
382         END DO
383         trestart=clname(1:ic)//".nc"
384         itime=0
385         CALL ymds2ju(nyear,nmonth,nday,0.0,zdate0)
386         CALL restini('NONE',jpi,jpj,glamt,gphit,jpk,gdept,clname           &
387            &        ,itime,zdate0,rdt*nstock,nutwrs)
388
389         CALL restput(nutwrs,'info',1,1,3,0,zinfo)
390
391         ! prognostic variables
392         ! --------------------
393
394         DO jn=1,jptra
395            clname='TRN'//ctrcnm(jn)
396            CALL restput(nutwrs,clname,jpi,jpj,jpk,0,trn(:,:,:,jn))
397
398            zdiag_var=0.
399            zdiag_varmin=0.
400            zdiag_varmax=0.
401            IF (lwp) WRITE(numout,*) '----TRACER STAT----'
402
403            DO ji=1,jpi
404               DO jj=1,jpj
405                  DO jk=1,jpk
406
407                     zdiag_var=zdiag_var+tmask(ji,jj,jk)*trn(ji,jj,jk,jn)
408
409                     IF (tmask(ji,jj,jk).EQ.1.) THEN
410                        IF (zdiag_varmin.GT.trn(ji,jj,jk,jn))        &
411                           zdiag_varmin =  trn(ji,jj,jk,jn)
412                        IF (zdiag_varmax.LT.trn(ji,jj,jk,jn))        &
413                           zdiag_varmax =  trn(ji,jj,jk,jn)
414
415                     ENDIF
416
417                  END DO
418               END DO
419            END DO
420
421
422            zdiag_var=zdiag_var/(jpi*jpj*jpk)
423
424            IF(lwp) WRITE(numout,*) 'MEAN NO ',jn,' =',zdiag_var,'MIN= '  &
425               ,zdiag_varmin,'MAX= ',zdiag_varmax
426
427         END DO
428
429         DO jn=1,jptra
430            clname='TRB'//ctrcnm(jn)
431            CALL restput(nutwrs,clname,jpi,jpj,jpk,0,trb(:,:,:,jn))
432         END DO
433
434
435#if defined key_trc_lobster1
436         clname='SEDB'//ctrcnm(jpdet)
437         clname1='SEDN'//ctrcnm(jpdet)
438         CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpocb(:,:))
439         CALL restput(nutwrs,clname1,jpi,jpj,1,0,sedpocn(:,:))
440#elif defined key_trc_pisces
441         clname='SED'//ctrcnm(jppoc)
442         clname1='SED'//ctrcnm(jpcal)
443         clname2='SED'//ctrcnm(jpsil)
444         CALL restput(nutwrs,clname1,jpi,jpj,1,0,sedcal(:,:))
445         CALL restput(nutwrs,clname2,jpi,jpj,1,0,sedsil(:,:))
446         CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpoc(:,:))
447
448         clname='Silicalim'
449         CALL restput(nutwrs,clname,jpi,jpj,1,0,xksi(:,:))
450#elif defined key_cfc
451         clname='qint'
452         CALL restput(nutwrs,clname,jpi,jpj,jptra,0,qint(:,:,:))
453         clname1='qtr'
454         CALL restput(nutwrs,clname1,jpi,jpj,jptra,0,qtr(:,:,:))
455#endif
456
457
458         CALL restclo(nutwrs)
459
460      ENDIF
461
462   END SUBROUTINE trc_wri
463
464#endif
465
466#else
467   !!======================================================================
468   !!  Empty module : No passive tracer
469   !!======================================================================
470CONTAINS
471
472   SUBROUTINE trc_rst
473      !! no passive tracers
474   END SUBROUTINE trc_rst
475
476   SUBROUTINE trc_wri(kt)
477      !! no passive tracers
478      INTEGER, INTENT ( in ) :: kt
479      WRITE(*,*) 'trc_wri: You should not have seen this print! error?', kt
480   END SUBROUTINE trc_wri
481   
482#endif
483   
484END MODULE trcrst
Note: See TracBrowser for help on using the repository browser.