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

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

nemo_v1_update_023 : CE + RB + CT : new evolution of modules

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