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.
daymod.F90 in NEMO/trunk/src/OCE/DOM – NEMO

source: NEMO/trunk/src/OCE/DOM/daymod.F90

Last change on this file was 14072, checked in by laurent, 3 years ago

Merging branch "2020/dev_r13648_ASINTER-04_laurent_bulk_ice", ticket #2369

  • Property svn:keywords set to Id
File size: 20.5 KB
RevLine 
[3]1MODULE daymod
2   !!======================================================================
3   !!                       ***  MODULE  daymod  ***
[7646]4   !! Ocean :   management of the model calendar
[3]5   !!=====================================================================
[1559]6   !! History :  OPA  ! 1994-09  (M. Pontaud M. Imbard)  Original code
7   !!                 ! 1997-03  (O. Marti)
[3764]8   !!                 ! 1997-05  (G. Madec)
[1559]9   !!                 ! 1997-08  (M. Imbard)
10   !!   NEMO     1.0  ! 2003-09  (G. Madec)  F90 + nyear, nmonth, nday
11   !!                 ! 2004-01  (A.M. Treguier) new calculation based on adatrj
12   !!                 ! 2006-08  (G. Madec)  surface module major update
[6140]13   !!                 ! 2015-11  (D. Lea) Allow non-zero initial time of day
[3764]14   !!----------------------------------------------------------------------
[3]15
16   !!----------------------------------------------------------------------
17   !!   day        : calendar
18   !!----------------------------------------------------------------------
[7646]19   !!                    ----------- WARNING -----------
20   !!                    -------------------------------
[14072]21   !!   sbcmod assume that the time step is dividing the number of second of
22   !!   in a day, i.e. ===> MOD( rday, rn_Dt ) == 0
[7646]23   !!   except when user defined forcing is used (see sbcmod.F90)
24   !!----------------------------------------------------------------------
[6140]25   USE dom_oce        ! ocean space and time domain
26   USE phycst         ! physical constants
[7646]27   USE ioipsl  , ONLY :   ymds2ju      ! for calendar
28   USE trc_oce , ONLY :   l_offline   ! offline flag
29   !
[6140]30   USE in_out_manager ! I/O manager
[7646]31   USE prtctl         ! Print control
[6140]32   USE iom            !
33   USE timing         ! Timing
34   USE restart        ! restart
[3]35
36   IMPLICIT NONE
37   PRIVATE
38
[1559]39   PUBLIC   day        ! called by step.F90
40   PUBLIC   day_init   ! called by istate.F90
[3764]41   PUBLIC   day_mth    ! Needed by TAM
[3]42
[6140]43   INTEGER, PUBLIC ::   nsecd, nsecd05, ndt, ndt05   !: (PUBLIC for TAM)
[1730]44
[3]45   !!----------------------------------------------------------------------
[9598]46   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
[888]47   !! $Id$
[10068]48   !! Software governed by the CeCILL license (see ./LICENSE)
[15]49   !!----------------------------------------------------------------------
[3]50CONTAINS
51
[1130]52   SUBROUTINE day_init
53      !!----------------------------------------------------------------------
54      !!                   ***  ROUTINE day_init  ***
[3764]55      !!
56      !! ** Purpose :   Initialization of the calendar values to their values 1 time step before nit000
[1130]57      !!                because day will be called at the beginning of step
58      !!
59      !! ** Action  : - nyear        : current year
[12377]60      !!              - nmonth       : current month of the current nyear
61      !!              - nday         : current   day of the current nmonth
62      !!              - nday_year    : current   day of the current nyear
63      !!              - nsec_year    : seconds between 00h jan 1st of the current  year and half of the current time step
64      !!              - nsec_month   : seconds between 00h 1st day of the current month and half of the current time step
65      !!              - nsec_monday  : seconds between 00h         of the   last Monday and half of the current time step
66      !!              - nsec_day     : seconds between 00h         of the current   day and half of the current time step
67      !!              - nsec1jan000  : seconds between Jan. 1st 00h of nit000 year and Jan. 1st 00h of the current year
68      !!              - nmonth_len, nyear_len, nmonth_beg through day_mth
[1130]69      !!----------------------------------------------------------------------
[12377]70      INTEGER  ::   inbday, imonday, isecrst   ! local integers
[7646]71      REAL(wp) ::   zjul             ! local scalar
[2528]72      !!----------------------------------------------------------------------
[3294]73      !
[5563]74      ! max number of seconds between each restart
[12489]75      IF( REAL( nitend - nit000 + 1 ) * rn_Dt > REAL( HUGE( nsec1jan000 ) ) ) THEN
[5563]76         CALL ctl_stop( 'The number of seconds between each restart exceeds the integer 4 max value: 2^31-1. ',   &
77            &           'You must do a restart at higher frequency (or remove this stop and recompile the code in I8)' )
78      ENDIF
[12377]79      nsecd   = NINT(       rday )
[7646]80      nsecd05 = NINT( 0.5 * rday )
[12489]81      ndt     = NINT(       rn_Dt  )
82      ndt05   = NINT( 0.5 * rn_Dt  )
[1130]83
[13558]84      lrst_oce = .NOT. l_offline   ! force definition of offline
85      IF( lrst_oce )   CALL day_rst( nit000, 'READ' )
[14072]86
[1130]87      ! set the calandar from ndastp (read in restart file and namelist)
88      nyear   =   ndastp / 10000
89      nmonth  = ( ndastp - (nyear * 10000) ) / 100
[3764]90      nday    =   ndastp - (nyear * 10000) - ( nmonth * 100 )
[1130]91
[6140]92      nhour   =   nn_time0 / 100
93      nminute = ( nn_time0 - nhour * 100 )
[12377]94      isecrst = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss)
[6140]95
[14072]96      CALL ymds2ju( nyear, nmonth, nday, REAL(isecrst,wp), fjulday )
[1730]97      IF( ABS(fjulday - REAL(NINT(fjulday),wp)) < 0.1 / rday )   fjulday = REAL(NINT(fjulday),wp)   ! avoid truncation error
[12377]98      IF( nhour*NINT(rhhmm*rmmss) + nminute*NINT(rmmss) - ndt05 .LT. 0 ) fjulday = fjulday+1.       ! move back to the day at nit000 (and not at nit000 - 1)
99
[1730]100      nsec1jan000 = 0
[1130]101      CALL day_mth
[3764]102
[1130]103      IF ( nday == 0 ) THEN     !   for ex if ndastp = ndate0 - 1
[3764]104         nmonth = nmonth - 1
[1130]105         nday = nmonth_len(nmonth)
106      ENDIF
107      IF ( nmonth == 0 ) THEN   ! go at the end of previous year
108         nmonth = 12
109         nyear = nyear - 1
[1730]110         nsec1jan000 = nsec1jan000 - nsecd * nyear_len(0)
[1130]111         IF( nleapy == 1 )   CALL day_mth
112      ENDIF
[3764]113
[1130]114      ! day since january 1st
115      nday_year = nday + SUM( nmonth_len(1:nmonth - 1) )
[2528]116
[12377]117      !compute number of days between last Monday and today
[13226]118      CALL ymds2ju( 1900, 01, 01, 0.0_wp, zjul )     ! compute julian day value of 01.01.1900 (our reference that was a Monday)
[12377]119      inbday = FLOOR(fjulday - zjul)              ! compute nb day between  01.01.1900 and start of current day
120      imonday = MOD(inbday, 7)                    ! compute nb day between last monday and current day
121      IF (imonday .LT. 0) imonday = imonday + 7   ! Avoid negative values for dates before 01.01.1900
[2528]122
123      ! number of seconds since the beginning of current year/month/week/day at the middle of the time-step
[12377]124      IF( isecrst - ndt05 .GT. 0 ) THEN
[6140]125         ! 1 timestep before current middle of first time step is still the same day
[14072]126         nsec_year  = (nday_year-1) * nsecd + isecrst - ndt05
127         nsec_month = (nday-1)      * nsecd + isecrst - ndt05
[6140]128      ELSE
[14072]129         ! 1 time step before the middle of the first time step is the previous day
130         nsec_year  = nday_year     * nsecd + isecrst - ndt05
131         nsec_month = nday          * nsecd + isecrst - ndt05
[6140]132      ENDIF
[12377]133      nsec_monday   = imonday       * nsecd + isecrst - ndt05
[14072]134      nsec_day      =                         isecrst - ndt05
[12377]135      IF( nsec_day    .LT. 0 ) nsec_day    = nsec_day    + nsecd
136      IF( nsec_monday .LT. 0 ) nsec_monday = nsec_monday + nsecd*7
[1130]137
138      ! control print
[8329]139      IF(lwp) WRITE(numout,'(a,i6,a,i2,a,i2,a,i8,a,i8,a,i8,a,i8)')   &
140           &                   ' =======>> 1/2 time step before the start of the run DATE Y/M/D = ',   &
[12377]141           &                   nyear, '/', nmonth, '/', nday, '  nsec_day:', nsec_day, '  nsec_monday:', nsec_monday, '  &
[6140]142           &                   nsec_month:', nsec_month , '  nsec_year:' , nsec_year
[1725]143
[12377]144      nsec000_1jan000 = nsec1jan000 + nsec_year + ndt05
145      nsecend_1jan000 = nsec000_1jan000 + ndt * ( nitend - nit000 + 1 )
[14072]146
[1725]147      ! Up to now, calendar parameters are related to the end of previous run (nit000-1)
148      ! call day to set the calendar parameters at the begining of the current simulaton. needed by iom_init
149      CALL day( nit000 )
[3294]150      !
[1130]151   END SUBROUTINE day_init
152
153
154   SUBROUTINE day_mth
155      !!----------------------------------------------------------------------
156      !!                   ***  ROUTINE day_init  ***
[3764]157      !!
[1130]158      !! ** Purpose :   calendar values related to the months
159      !!
[12377]160      !! ** Action  : - nyear_len     : length in days of the previous/current year
161      !!              - nmonth_len    : length in days of the months of the current year
162      !!              - nmonth_half   : second since the beginning of the current year and the halft of the months
163      !!              - nmonth_end    : second since the beginning of the current year and the end of the months
[1130]164      !!----------------------------------------------------------------------
[12377]165      INTEGER  ::   jm ,jy                   ! dummy loop indice
166      INTEGER, DIMENSION(12) ::   idaymt     ! length in days of the 12 months for non-leap year
[1130]167      !!----------------------------------------------------------------------
168
169      ! length of the month of the current year (from nleapy, read in namelist)
[3764]170      IF ( nleapy < 2 ) THEN
[12377]171         ! default values
172         idaymt(1:12) = (/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /)
173         nmonth_len(-11: 25) = (/ idaymt(1:12), idaymt(1:12), idaymt(1:12), idaymt(1) /)
[1130]174         nyear_len(:) = 365
[12377]175         !
[1130]176         IF ( nleapy == 1 ) THEN   ! we are using calandar with leap years
[12377]177            DO jy = -1,1
178               IF ( MOD(nyear+jy, 4) == 0 .AND. ( MOD(nyear+jy, 400) == 0 .OR. MOD(nyear+jy, 100) /= 0 ) ) THEN
179                  nmonth_len(2 + 12*jy) = 29
180                  nyear_len( 1 +    jy) = 366
181               ENDIF
182            ENDDO
[1130]183         ENDIF
184      ELSE
185         nmonth_len(:) = nleapy   ! all months with nleapy days per year
186         nyear_len(:) = 12 * nleapy
187      ENDIF
188
189      ! time since Jan 1st   0     1     2    ...    11    12    13
190      !          ---------*--|--*--|--*--| ... |--*--|--*--|--*--|--------------------------------------
[3764]191      !                 <---> <---> <--->  ...  <---> <---> <--->
[1130]192      ! month number      0     1     2    ...    11    12    13
[12377]193      nmonth_beg(1) = 0
194      DO jm = 2, 25
195         nmonth_beg(jm) = nmonth_beg(jm-1) + nsecd * nmonth_len(jm-1)
[1130]196      END DO
[12377]197      DO jm = 0,-11,-1
198         nmonth_beg(jm) = nmonth_beg(jm+1) - nsecd * nmonth_len(jm)
[1130]199      END DO
[3764]200      !
201   END SUBROUTINE
[1130]202
203
[15]204   SUBROUTINE day( kt )
[3]205      !!----------------------------------------------------------------------
[15]206      !!                      ***  ROUTINE day  ***
[3764]207      !!
[3]208      !! ** Purpose :   Compute the date with a day iteration IF necessary.
209      !!
210      !! ** Method  : - ???
211      !!
212      !! ** Action  : - nyear     : current year
213      !!              - nmonth    : current month of the year nyear
214      !!              - nday      : current day of the month nmonth
215      !!              - nday_year : current day of the year nyear
[1130]216      !!              - ndastp    : = nyear*10000 + nmonth*100 + nday
[15]217      !!              - adatrj    : date in days since the beginning of the run
[1730]218      !!              - nsec_year : current time of the year (in second since 00h, jan 1st)
[3764]219      !!----------------------------------------------------------------------
[888]220      INTEGER, INTENT(in) ::   kt        ! ocean time-step indices
221      !
222      CHARACTER (len=25) ::   charout
[1730]223      REAL(wp)           ::   zprec      ! fraction of day corresponding to 0.1 second
[3]224      !!----------------------------------------------------------------------
[3294]225      !
[9019]226      IF( ln_timing )   CALL timing_start('day')
[3294]227      !
[1730]228      zprec = 0.1 / rday
[1130]229      !                                                 ! New time-step
[12377]230      nsec_year    = nsec_year    + ndt
231      nsec_month   = nsec_month   + ndt
232      nsec_monday  = nsec_monday  + ndt
[3764]233      nsec_day   = nsec_day   + ndt
[12489]234      adatrj  = adatrj  + rn_Dt / rday
235      fjulday = fjulday + rn_Dt / rday
[1730]236      IF( ABS(fjulday - REAL(NINT(fjulday),wp)) < zprec )   fjulday = REAL(NINT(fjulday),wp)   ! avoid truncation error
237      IF( ABS(adatrj  - REAL(NINT(adatrj ),wp)) < zprec )   adatrj  = REAL(NINT(adatrj ),wp)   ! avoid truncation error
[3764]238
[2528]239      IF( nsec_day > nsecd ) THEN                       ! New day
[888]240         !
[1130]241         nday      = nday + 1
242         nday_year = nday_year + 1
[1730]243         nsec_day  = ndt05
[1130]244         !
[2528]245         IF( nday == nmonth_len(nmonth) + 1 ) THEN      ! New month
[1130]246            nday   = 1
247            nmonth = nmonth + 1
[1730]248            nsec_month = ndt05
[2528]249            IF( nmonth == 13 ) THEN                     ! New year
[1130]250               nyear     = nyear + 1
251               nmonth    = 1
252               nday_year = 1
[1730]253               nsec_year = ndt05
254               nsec1jan000 = nsec1jan000 + nsecd * nyear_len(1)
[1130]255               IF( nleapy == 1 )   CALL day_mth
[3]256            ENDIF
[888]257         ENDIF
[1130]258         !
[2528]259         ndastp = nyear * 10000 + nmonth * 100 + nday   ! New date
[1130]260         !
[2528]261         !compute first day of the year in julian days
[13226]262         CALL ymds2ju( nyear, 01, 01, 0.0_wp, fjulstartyear )
[2528]263         !
[1191]264         IF(lwp) WRITE(numout,'(a,i8,a,i4.4,a,i2.2,a,i2.2,a,i3.3)') '======>> time-step =', kt,   &
[1130]265              &   '      New day, DATE Y/M/D = ', nyear, '/', nmonth, '/', nday, '      nday_year = ', nday_year
[1730]266         IF(lwp) WRITE(numout,'(a,i8,a,i7,a,i5)') '         nsec_year = ', nsec_year,   &
[12377]267              &   '   nsec_month = ', nsec_month, '   nsec_day = ', nsec_day, '   nsec_monday = ', nsec_monday
[1130]268      ENDIF
[2528]269
[12377]270      IF( nsec_monday > 7*nsecd )   nsec_monday = ndt05     ! New week
[3764]271
[12377]272      IF(sn_cfctl%l_prtctl) THEN
[1130]273         WRITE(charout,FMT="('kt =', I4,'  d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear
[13286]274         CALL prt_ctl_info( charout )
[1130]275      ENDIF
[3]276
[7646]277      IF( .NOT. l_offline ) CALL rst_opn( kt )               ! Open the restart file if needed and control lrst_oce
[2528]278      IF( lrst_oce         ) CALL day_rst( kt, 'WRITE' )      ! write day restart information
[1130]279      !
[9019]280      IF( ln_timing )   CALL timing_stop('day')
[3294]281      !
[1130]282   END SUBROUTINE day
[3]283
284
[1130]285   SUBROUTINE day_rst( kt, cdrw )
286      !!---------------------------------------------------------------------
[9124]287      !!                   ***  ROUTINE day_rst  ***
[3764]288      !!
[1130]289      !!  ** Purpose : Read or write calendar in restart file:
[3764]290      !!
[1130]291      !!  WRITE(READ) mode:
[3764]292      !!       kt        : number of time step since the begining of the experiment at the
[1130]293      !!                   end of the current(previous) run
[3764]294      !!       adatrj(0) : number of elapsed days since the begining of the experiment at the
[1130]295      !!                   end of the current(previous) run (REAL -> keep fractions of day)
296      !!       ndastp    : date at the end of the current(previous) run (coded as yyyymmdd integer)
[3764]297      !!
[1130]298      !!   According to namelist parameter nrstdt,
299      !!       nrstdt = 0  no control on the date (nit000 is  arbitrary).
300      !!       nrstdt = 1  we verify that nit000 is equal to the last
301      !!                   time step of previous run + 1.
302      !!       In both those options, the  exact duration of the experiment
303      !!       since the beginning (cumulated duration of all previous restart runs)
[12489]304      !!       is not stored in the restart and is assumed to be (nit000-1)*rn_Dt.
[1130]305      !!       This is valid is the time step has remained constant.
306      !!
307      !!       nrstdt = 2  the duration of the experiment in days (adatrj)
308      !!                    has been stored in the restart file.
309      !!----------------------------------------------------------------------
310      INTEGER         , INTENT(in) ::   kt         ! ocean time-step
311      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag
312      !
[6140]313      REAL(wp) ::   zkt, zndastp, zdayfrac, ksecs, ktime
[12377]314      INTEGER  ::   ihour, iminute, isecond
[1130]315      !!----------------------------------------------------------------------
[3764]316
[1130]317      IF( TRIM(cdrw) == 'READ' ) THEN
318         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN
319            ! Get Calendar informations
[13970]320            CALL iom_get( numror, 'kt', zkt )   ! last time-step of previous run
[1130]321            IF(lwp) THEN
322               WRITE(numout,*) ' *** Info read in restart : '
323               WRITE(numout,*) '   previous time-step                               : ', NINT( zkt )
324               WRITE(numout,*) ' *** restart option'
325               SELECT CASE ( nrstdt )
326               CASE ( 0 )   ;   WRITE(numout,*) ' nrstdt = 0 : no control of nit000'
327               CASE ( 1 )   ;   WRITE(numout,*) ' nrstdt = 1 : no control the date at nit000 (use ndate0 read in the namelist)'
328               CASE ( 2 )   ;   WRITE(numout,*) ' nrstdt = 2 : calendar parameters read in restart'
329               END SELECT
330               WRITE(numout,*)
[888]331            ENDIF
[3764]332            ! Control of date
333            IF( nit000 - NINT( zkt ) /= 1 .AND. nrstdt /= 0 )                                         &
334                 &   CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart',                 &
[1130]335                 &                  ' verify the restart file or rerun with nrstdt = 0 (namelist)' )
336            ! define ndastp and adatrj
[3764]337            IF ( nrstdt == 2 ) THEN
[6140]338               ! read the parameters corresponding to nit000 - 1 (last time step of previous run)
[13970]339               CALL iom_get( numror, 'ndastp', zndastp )
[1130]340               ndastp = NINT( zndastp )
[13970]341               CALL iom_get( numror, 'adatrj', adatrj  )
342          CALL iom_get( numror, 'ntime' , ktime   )
[12377]343               nn_time0 = NINT(ktime)
[6140]344               ! calculate start time in hours and minutes
[12377]345               zdayfrac = adatrj - REAL(INT(adatrj), wp)
[14072]346          ksecs = NINT(zdayfrac * rday)          ! Nearest second to catch rounding errors in adatrj
[12377]347               ihour = ksecs / NINT( rhhmm*rmmss )
348          iminute = ksecs / NINT(rmmss) - ihour*NINT(rhhmm)
[14072]349
[6140]350               ! Add to nn_time0
351               nhour   =   nn_time0 / 100
352               nminute = ( nn_time0 - nhour * 100 )
[12377]353          nminute = nminute + iminute
[14072]354
[12377]355               IF( nminute >= NINT(rhhmm) ) THEN
356             nminute = nminute - NINT(rhhmm)
357        nhour = nhour+1
[6140]358          ENDIF
359          nhour=nhour+ihour
[12377]360          IF( nhour >= NINT(rjjhh) ) THEN
361        nhour = nhour - NINT(rjjhh)
362             adatrj = adatrj + 1.
[14072]363          ENDIF
[6140]364          nn_time0 = nhour * 100 + nminute
[14072]365               adatrj = REAL(INT(adatrj), wp)                    ! adatrj set to integer as nn_time0 updated
[3764]366            ELSE
[6140]367               ! parameters corresponding to nit000 - 1 (as we start the step loop with a call to day)
368               ndastp = ndate0        ! ndate0 read in the namelist in dom_nam
369               nhour   =   nn_time0 / 100
370               nminute = ( nn_time0 - nhour * 100 )
[12377]371               isecond = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss)
372               IF( isecond - ndt05 .lt. 0 )   ndastp = ndastp - 1      ! Start hour is specified in the namelist (default 0)
[12489]373               adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday
[3764]374               ! note this is wrong if time step has changed during run
[1130]375            ENDIF
376         ELSE
[6140]377            ! parameters corresponding to nit000 - 1 (as we start the step loop with a call to day)
378            ndastp = ndate0           ! ndate0 read in the namelist in dom_nam
379            nhour   =   nn_time0 / 100
380       nminute = ( nn_time0 - nhour * 100 )
[12377]381            isecond = ( nhour * NINT(rhhmm) + nminute ) * NINT(rmmss)
382            IF( isecond - ndt05 .LT. 0 )   ndastp = ndastp - 1         ! Start hour is specified in the namelist (default 0)
[12489]383            adatrj = ( REAL( nit000-1, wp ) * rn_Dt ) / rday
[3]384         ENDIF
[1730]385         IF( ABS(adatrj  - REAL(NINT(adatrj),wp)) < 0.1 / rday )   adatrj = REAL(NINT(adatrj),wp)   ! avoid truncation error
[1130]386         !
387         IF(lwp) THEN
388            WRITE(numout,*) ' *** Info used values : '
389            WRITE(numout,*) '   date ndastp                                      : ', ndastp
390            WRITE(numout,*) '   number of elapsed days since the begining of run : ', adatrj
[6140]391       WRITE(numout,*) '   nn_time0                                         : ',nn_time0
[1130]392            WRITE(numout,*)
[719]393         ENDIF
[888]394         !
[1130]395      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN
396         !
397         IF( kt == nitrst ) THEN
398            IF(lwp) WRITE(numout,*)
399            IF(lwp) WRITE(numout,*) 'rst_write : write oce restart file  kt =', kt
[3764]400            IF(lwp) WRITE(numout,*) '~~~~~~~'
[1130]401         ENDIF
402         ! calendar control
[13970]403         CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp)   )   ! time-step
404         CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp)   )   ! date
405         CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj              )   ! number of elapsed days since
[9367]406         !                                                                                                   ! the begining of the run [s]
[13970]407         CALL iom_rstput( kt, nitrst, numrow, 'ntime'  , REAL( nn_time0, wp) ) ! time
[3]408      ENDIF
[1130]409      !
410   END SUBROUTINE day_rst
[3]411
412   !!======================================================================
413END MODULE daymod
Note: See TracBrowser for help on using the repository browser.