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

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

nemo_v1_update_05:RB+OA: Update and rewritting of part of the TOP component

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.0 KB
Line 
1MODULE trcrst
2   !!===========================================================================================
3   !!
4   !!                       *** MODULE trcrst ***
5   !!
6   !!   Read the restart files for passive tracers
7   !!
8   !!===========================================================================================
9      !!----------------------------------------------------------------------
10      !! * Modules used
11      !! ==============
12      USE oce_trc
13      USE trc
14      USE sms
15      USE trctrp_lec   
16                                                                                                                           
17      IMPLICIT NONE
18      PRIVATE
19
20   !! * Accessibility
21   PUBLIC trc_rst
22   PUBLIC trc_wri
23
24   !! * Module variables
25   CHARACTER (len=48) ::   &
26      trestart = 'initial.trc.nc'   ! restart file name
27
28CONTAINS
29
30#if defined key_fdir
31   !!----------------------------------------------------------------------
32   !!   'key_fdir'                                       direct access file
33   !!----------------------------------------------------------------------
34#include "trcrst_fdir.h90"
35
36#else
37    !!  USE ioipsl
38#if defined key_passivetrc   
39
40SUBROUTINE trc_rst 
41   !!===========================================================================================
42   !!
43   !!                       ROUTINE trc_rst
44   !!                     *******************
45   !!
46   !!  PURPOSE :
47   !!  ---------
48   !!     READ files for restart for passive tracer
49   !!
50   !!   METHOD :
51   !!   -------
52   !!      READ the previous fields on the FILE nutrst
53   !!      the first record indicates previous characterics
54   !!      after control with the present run, we READ :
55   !!      - prognostic variables on the second and more record
56   !!
57   !!   History:
58   !!   --------
59   !!  original  : 96-11
60   !!  00-05 (A. Estublier) TVD Limiter Scheme key_trc_tvd
61   !!  00-12 (O. Aumont, E. Kestenare) read restart file for sediments
62   !!  01-05 (O. Aumont, E. Kestenare) read restart file for calcite and silicate sediments
63   !!  05-03 (O. Aumont and A. El Moussaoui) F90           
64   !!------------------------------------------------------------------------
65   !! * Modules used
66      USE ioipsl
67
68
69   !! local declarations
70   !! ==================
71    LOGICAL ::  llog       !!!
72    CHARACTER (len=32) :: clname1,clname2
73    CHARACTER (len=32) :: clname = 'restart.trc'
74    CHARACTER (len=12) :: clvnames(80) 
75
76    INTEGER :: ino1,jn,iarak0,iarak1,          &
77               ji, jj, jk,                   &
78               itime, ibvar
79    REAL(wp) :: caralk,bicarb,zdt,        &     
80                zdate0
81    REAL(wp) ::   zdept(jpk), zlamt(jpi,jpj), zphit(jpi,jpj)
82
83    REAL(wp), DIMENSION(3) :: zinfo
84
85    !!---------------------------------------------------------------------
86    !!  OPA.9 03-2005 
87    !!---------------------------------------------------------------------
88    !! 0. initialisations
89    !!------------------
90
91
92      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
93          iarak0 = 1
94      ELSE
95          iarak0=0
96      ENDIF
97
98
99      IF(lwp) WRITE(numout,*) ' '
100      IF(lwp) WRITE(numout,*) ' *** trc_rst beginning of restart for'
101      IF(lwp) WRITE(numout,*) ' passive tracer'
102      IF(lwp) WRITE(numout,*) ' the present run :'
103      IF(lwp) WRITE(numout,*) '   number job is  : ',no
104      IF(lwp) WRITE(numout,*) '   with the time nit000 : ',nit000
105      IF(lwp) THEN
106          IF(iarak0.eq.1) then
107              WRITE(numout,*) '   and before fields for Arakawa sheme '
108          ENDIF
109          WRITE(numout,*) ' '
110      ENDIF
111
112      ! Time domain : restart
113      ! -------------------------
114
115      IF(lwp) WRITE(numout,*)
116      IF(lwp) WRITE(numout,*)
117      IF(lwp) WRITE(numout,*) ' *** passive tracer restart option'
118      SELECT CASE ( nrsttr )
119      CASE ( 0 )
120         IF(lwp) WRITE(numout,*) ' nrsttr = 0 no control of nit000'
121      CASE ( 1 )
122         IF(lwp) WRITE(numout,*) ' nrsttr = 1 we control the date of nit000'
123      CASE ( 2 )
124         IF(lwp) WRITE(numout,*) ' nrsttr = 2 the date adatrj is read in restart file'
125      CASE DEFAULT
126         IF(lwp) WRITE(numout,*) '  ===>>>> nrsttr not equal 0, 1 or 2 : no control of the date'
127         IF(lwp) WRITE(numout,*) ' =======                   ========='
128      END SELECT
129
130
131    !! 1. READ nutrst
132    !! --------------
133    !! ... first information
134    !! ---------------------
135      itime=0
136      llog=.false.           !!!
137      zlamt(:,:) = 0.e0
138      zphit(:,:) = 0.e0
139      zdept(:)   = 0.e0
140      CALL restini(clname,jpi,jpj,zlamt,zphit,jpk,zdept,clname         & 
141       &           ,itime,zdate0,zdt,nutrst)
142
143      CALL ioget_vname(nutrst, ibvar, clvnames)
144      CALL restget(nutrst,'info',1,1,3,0,llog,zinfo)
145      ino1  = nint(zinfo(1))
146      iarak1 = nint(zinfo(3))
147
148      IF(lwp) WRITE(numout,*) ' '
149      IF(lwp) WRITE(numout,*) ' READ nutrst with '
150      IF(lwp) WRITE(numout,*) '   number job is  : ',ino1
151      IF(lwp) WRITE(numout,*) '   with the time it : ',nint(zinfo(2))
152      IF(lwp) THEN
153          IF(iarak1.eq.1) then
154              WRITE(numout,*) '   and before fields for Arakawa sheme '
155          ENDIF
156      ENDIF
157      IF(lwp) WRITE(numout,*) '   number of variables   : ', ibvar
158      IF(lwp) WRITE(numout,*) '   NetCDF variables      : '
159      IF(lwp) WRITE(numout,*) ' ',clvnames (:ibvar)
160      IF(lwp) WRITE(numout,*) ' '
161
162   !! 1.2 control of date
163   !! -------------------
164
165      IF( nit000- NINT( zinfo(2) ) /= 1 .AND. nrsttr /= 0 ) THEN
166          IF(lwp) THEN
167              WRITE(numout,*) ' ===>>>> : problem with nit000 for the',    & 
168                  ' passive tracer restart'
169              WRITE(numout,*) ' =======                              ',    &   
170                  ' ======================'
171              WRITE(numout,*) ' we stop. verify the FILE'
172              WRITE(numout,*) ' or rerun with the value  0 for the'
173              WRITE(numout,*) ' control of time PARAMETER   nrstdt'
174              WRITE(numout,*) ' '
175          ENDIF
176          STOP 'trc_rst'       !!
177      ENDIF
178
179    !! 1.3 Control of the sheme
180    !! ------------------------
181
182      IF(iarak0.ne.iarak1) THEN
183          IF(lwp) THEN
184              WRITE(numout,*) ' ===>>>> : problem with the',       &   
185                 ' passive tracer restart file'
186              WRITE(numout,*) ' =======                              ',        & 
187                  ' ==========================='
188              WRITE(numout,*) ' we stop. verify the FILE'
189              WRITE(numout,*) ' before field required IF 1=',iarak0
190              WRITE(numout,*) ' before field present in file IF 1=',           & 
191                 iarak1
192              WRITE(numout,*) ' '
193          ENDIF
194          STOP 'trc_rst'       !!!!!    AVERIFIER AU NIV F90'
195      ENDIF
196
197
198    !! ... READ prognostic variables and computes diagnostic variable
199    !! ---------------------------------------------------------------
200
201       DO jn=1,jptra
202         clname='TRN'//ctrcnm(jn)
203         CALL restget(nutrst,clname,jpi,jpj,jpk,0,llog,trn(:,:,:,jn))
204       END DO
205
206       DO jn=1,jptra
207         clname='TRB'//ctrcnm(jn)
208         CALL restget(nutrst,clname,jpi,jpj,jpk,0,llog,trb(:,:,:,jn))
209       END DO
210
211#if defined key_trc_hamocc3
212         clname='SED'//ctrcnm(jppoc)
213         clname1='SED'//ctrcnm(jpcal)
214         clname2='SED'//ctrcnm(jpsil)
215         CALL restget(nutrst,clname1,jpi,jpj,1,0,llog,sedcal(:,:))
216         CALL restget(nutrst,clname2,jpi,jpj,1,0,llog,sedsil(:,:))
217         CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpoc(:,:))
218#elif defined key_trc_npzd || defined key_trc_lobster1
219         clname='SED'//ctrcnm(jpdet)
220         CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpoc(:,:))
221#elif defined key_trc_pisces
222
223         clname='Silicalim'
224         CALL restget(nutrst,clname,jpi,jpj,1,0,llog,xksi)
225         xksimax=xksi
226
227         clname='SED'//ctrcnm(jppoc)
228         clname1='SED'//ctrcnm(jpcal)
229         clname2='SED'//ctrcnm(jpsil)
230         CALL restget(nutrst,clname1,jpi,jpj,1,0,llog,sedcal(:,:))
231         CALL restget(nutrst,clname2,jpi,jpj,1,0,llog,sedsil(:,:))
232         CALL restget(nutrst,clname,jpi,jpj,1,0,llog,sedpoc(:,:))
233#endif
234
235#if defined key_trc_hamocc3 || defined key_trc_pisces 
236
237
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
257END SUBROUTINE trc_rst
258
259SUBROUTINE 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 defined key_trc_cen2 || defined key_trc_tvd
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#if defined key_trc_hamocc3
433             clname='SED'//ctrcnm(jppoc)
434             clname1='SED'//ctrcnm(jpcal)
435             clname2='SED'//ctrcnm(jpsil)
436             CALL restput(nutwrs,clname1,jpi,jpj,1,0,sedcal(:,:))
437             CALL restput(nutwrs,clname2,jpi,jpj,1,0,sedsil(:,:))
438             CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpoc(:,:))
439#elif defined key_trc_npzd || defined key_trc_lobster1
440             clname='SED'//ctrcnm(jpdet)
441             CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpoc(:,:))
442#elif defined key_trc_pisces
443             clname='SED'//ctrcnm(jppoc)
444             clname1='SED'//ctrcnm(jpcal)
445             clname2='SED'//ctrcnm(jpsil)
446             CALL restput(nutwrs,clname1,jpi,jpj,1,0,sedcal(:,:))
447             CALL restput(nutwrs,clname2,jpi,jpj,1,0,sedsil(:,:))
448             CALL restput(nutwrs,clname,jpi,jpj,1,0,sedpoc(:,:))
449
450             clname='Silicalim'
451             CALL restput(nutwrs,clname,jpi,jpj,1,0,xksi(:,:))
452#endif
453
454          CALL restclo(nutwrs)
455
456      ENDIF
457
458END SUBROUTINE trc_wri
459
460#else
461
462SUBROUTINE trc_rst
463   !! no passive tracers
464END SUBROUTINE trc_rst
465
466SUBROUTINE trc_wri(kt)
467     !!! no passive tracers
468     INTEGER, INTENT ( in ) :: kt
469      WRITE(*,*) 'trc_wri: You should not have seen this print! error?', kt
470END SUBROUTINE trc_wri
471
472#endif 
473
474#endif
475
476
477END MODULE trcrst 
Note: See TracBrowser for help on using the repository browser.