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

Last change on this file since 274 was 274, checked in by opalod, 19 years ago

nemo_v1_update_005:RB: update headers for the TOP component.

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