Index: trunk/NEMO/OPA_SRC/DOM/domain.F90
===================================================================
--- trunk/NEMO/OPA_SRC/DOM/domain.F90	(revision 1129)
+++ trunk/NEMO/OPA_SRC/DOM/domain.F90	(revision 1130)
@@ -16,5 +16,4 @@
    USE sbc_oce         ! surface boundary condition: ocean
    USE phycst          ! physical constants
-   USE daymod          ! calendar
    USE in_out_manager  ! I/O manager
    USE lib_mpp         ! distributed memory computing library
@@ -176,6 +175,4 @@
          WRITE(numout,*) '           multi file dimgout           ln_dimgnnn   = ', ln_dimgnnn
       ENDIF
-
-      ndastp = ndate0                ! Assign initial date to current date
 
       ! ... Control of output frequency
Index: trunk/NEMO/OPA_SRC/daymod.F90
===================================================================
--- trunk/NEMO/OPA_SRC/daymod.F90	(revision 1129)
+++ trunk/NEMO/OPA_SRC/daymod.F90	(revision 1130)
@@ -15,9 +15,21 @@
    !!----------------------------------------------------------------------
    !!   day        : calendar
+   !!  
+   !!           -------------------------------
+   !!           ----------- WARNING -----------
+   !!
+   !!   we suppose that the time step is deviding the number of second of in a day
+   !!             ---> MOD( rday, rdttra(1) ) == 0
+   !!
+   !!           ----------- WARNING -----------
+   !!           -------------------------------
+   !!  
    !!----------------------------------------------------------------------
    USE dom_oce         ! ocean space and time domain
    USE phycst          ! physical constants
    USE in_out_manager  ! I/O manager
+   USE iom             ! 
    USE prtctl          ! Print control
+   USE restart         ! 
 
    IMPLICIT NONE
@@ -25,21 +37,25 @@
 
    PUBLIC day        ! called by step.F90
+   PUBLIC day_init   ! called by istate.F90
 
    INTEGER , PUBLIC ::   nyear       !: current year
    INTEGER , PUBLIC ::   nmonth      !: current month
    INTEGER , PUBLIC ::   nday        !: current day of the month
+   INTEGER , PUBLIC ::   ndastp      !: time step date in yyyymmdd format
    INTEGER , PUBLIC ::   nday_year   !: current day counted from jan 1st of the current year
    REAL(wp), PUBLIC ::   rsec_year   !: current time step counted in second since 00h jan 1st of the current year
    REAL(wp), PUBLIC ::   rsec_month  !: current time step counted in second since 00h 1st day of the current month
-   REAL(wp), PUBLIC ::   rsec_day    !: current time step counted in second since 00h         of the current day
-   INTEGER , PUBLIC ::   ndastp      !: time step date in year/month/day aammjj
-
-!!gm supprimer adatrj et adatrj0 ==> remplacer par rsecday.....
+   REAL(wp), PUBLIC ::   rsec_day    !: current time step counted in second since 00h of the current day
+
    REAL(wp), PUBLIC ::   adatrj      !: number of elapsed days since the begining of the run
-   REAL(wp), PUBLIC ::   adatrj0     !: value of adatrj at nit000-1 (before the present run).
-   !                                 !  it is the accumulated duration of previous runs
-   !                                 !  that may have been run with different time steps.
-   INTEGER , PUBLIC, DIMENSION(0:13) ::   nmonth_len   !: length of the current year
-
+   !                                 !: it is the accumulated duration of previous runs
+   !                                 !: that may have been run with different time steps.
+   INTEGER , PUBLIC, DIMENSION(0:1)  ::   nyear_len    !: length in days of the previous/current year
+   INTEGER , PUBLIC, DIMENSION(0:13) ::   nmonth_len   !: length in days of the months of the current year
+   REAL(wp), PUBLIC, DIMENSION(0:13) ::   rmonth_half  !: second since the beginning of the year and the halft of the months
+   REAL(wp), PUBLIC, DIMENSION(0:13) ::   rmonth_end   !: second since the beginning of the year and the end of the months
+   REAL(wp), PUBLIC                  ::   sec1jan000   !: second since Jan. 1st 00h of nit000 year
+
+   ! this two variables are wrong DO NOT USE THEM !!!
    INTEGER, PUBLIC, DIMENSION(12) ::   nbiss = (/ 31, 29, 31, 30, 31, 30,    &  !: number of days per month
       &                                           31, 31, 30, 31, 30, 31 /)     !: (leap-year)
@@ -47,5 +63,4 @@
       &                                           31, 31, 30, 31, 30, 31 /)     !: (365 days a year)
 
-   REAL(wp), PUBLIC, DIMENSION(0:14) ::   rmonth_half(0:14)
 
    !!----------------------------------------------------------------------
@@ -57,4 +72,115 @@
 CONTAINS
 
+   SUBROUTINE day_init
+      !!----------------------------------------------------------------------
+      !!                   ***  ROUTINE day_init  ***
+      !! 
+      !! ** Purpose :   Initialization of the calendar values to their values 1 time step before nit000 
+      !!                because day will be called at the beginning of step
+      !!
+      !! ** Action  : - nyear        : current year
+      !!              - nmonth       : current month of the year nyear
+      !!              - nday         : current day of the month nmonth
+      !!              - nday_year    : current day of the year nyear
+      !!              - rsec_year    : current time step counted in second since 00h jan 1st of the current year
+      !!              - rsec_month   : current time step counted in second since 00h 1st day of the current month
+      !!              - rsec_day     : current time step counted in second since 00h of the current day
+      !!              - sec1jan000   : second since Jan. 1st 00h of nit000 year
+      !!              - nmonth_len, nyear_len, rmonth_half, rmonth_end through day_mth
+      !!----------------------------------------------------------------------
+
+      ! all calendar staff is based on the fact that MOD( rday, rdttra(1) ) == 0
+      IF( MOD( rday, rdttra(1) ) /= 0 )   CALL ctl_stop( 'the time step must devide the number of second of in a day' )
+
+      CALL day_rst( nit000, 'READ' ) 
+
+      ! set the calandar from ndastp (read in restart file and namelist)
+
+      nyear   =   ndastp / 10000
+      nmonth  = ( ndastp - (nyear * 10000) ) / 100
+      nday    =   ndastp - (nyear * 10000) - ( nmonth * 100 ) 
+
+      sec1jan000 = 0.e0
+      CALL day_mth
+      
+      IF ( nday == 0 ) THEN     !   for ex if ndastp = ndate0 - 1
+         nmonth = nmonth - 1  
+         nday = nmonth_len(nmonth)
+      ENDIF
+      IF ( nmonth == 0 ) THEN   ! go at the end of previous year
+         nmonth = 12
+         nyear = nyear - 1
+         sec1jan000 = sec1jan000 - rday * REAL( nyear_len(0), wp )
+         IF( nleapy == 1 )   CALL day_mth
+      ENDIF
+      
+      ! day since january 1st
+      nday_year = nday + SUM( nmonth_len(1:nmonth - 1) )
+      
+      ! number of seconds since the beginning of current year/month at the middle of the time-step
+      rsec_year  = REAL( nday_year, wp ) * rday - 0.5 * rdttra(1)   ! 1 time step before the middle of the first time step
+      rsec_month = REAL( nday     , wp ) * rday - 0.5 * rdttra(1)   ! because day will be called at the beginning of step
+      rsec_day   =                         rday - 0.5 * rdttra(1)
+
+      ! control print
+      IF(lwp) WRITE(numout,*)' ==============>> One time step before the start of the run DATE Y/M/D = ',   &
+           &                   nyear, '/', nmonth, '/', nday, '  rsec_day:', rsec_day
+      
+   END SUBROUTINE day_init
+
+
+   SUBROUTINE day_mth
+      !!----------------------------------------------------------------------
+      !!                   ***  ROUTINE day_init  ***
+      !! 
+      !! ** Purpose :   calendar values related to the months
+      !!
+      !! ** Action  : - nmonth_len    : length in days of the months of the current year
+      !!              - nyear_len     : length in days of the previous/current year
+      !!              - rmonth_half   : second since the beginning of the year and the halft of the months
+      !!              - rmonth_end    : second since the beginning of the year and the end of the months
+      !!----------------------------------------------------------------------
+      INTEGER  ::   jm               ! dummy loop indice
+      !!----------------------------------------------------------------------
+
+      ! length of the month of the current year (from nleapy, read in namelist)
+      IF ( nleapy < 2 ) THEN 
+         nmonth_len(:) = (/ 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 /)
+         nyear_len(:) = 365
+         IF ( nleapy == 1 ) THEN   ! we are using calandar with leap years
+            IF ( MOD(nyear-1, 4) == 0 .AND. ( MOD(nyear-1, 400) == 0 .OR. MOD(nyear-1, 100) /= 0 ) ) THEN
+               nyear_len(0) = 366
+            ENDIF
+            IF ( MOD(nyear, 4) == 0 .AND. ( MOD(nyear, 400) == 0 .OR. MOD(nyear, 100) /= 0 ) ) THEN
+               nmonth_len(2) = 29
+               nyear_len(1) = 366
+            ENDIF
+         ENDIF
+      ELSE
+         nmonth_len(:) = nleapy   ! all months with nleapy days per year
+         nyear_len(:) = 12 * nleapy
+      ENDIF
+
+      ! half month in second since the begining of the year:
+      ! time since Jan 1st   0     1     2    ...    11    12    13
+      !          ---------*--|--*--|--*--| ... |--*--|--*--|--*--|--------------------------------------
+      !                 <---> <---> <--->  ...  <---> <---> <--->        
+      ! month number      0     1     2    ...    11    12    13
+      !
+      ! rmonth_half(jm) = rday * REAL( 0.5 * nmonth_len(jm) + SUM(nmonth_len(1:jm-1)) )
+      rmonth_half(0) = - 0.5 * rday * REAL( nmonth_len(0), wp )
+      DO jm = 1, 13
+         rmonth_half(jm) = rmonth_half(jm-1) + 0.5 * rday * REAL( nmonth_len(jm-1) + nmonth_len(jm), wp )
+      END DO
+      rmonth_half(:) = rmonth_half(:) + sec1jan000
+
+      rmonth_end(0) = 0.
+      DO jm = 1, 13
+         rmonth_end(jm) = rmonth_end(jm-1) + rday * REAL( nmonth_len(jm), wp )
+      END DO
+                 
+   END SUBROUTINE 
+
+
    SUBROUTINE day( kt )
       !!----------------------------------------------------------------------
@@ -69,5 +195,5 @@
       !!              - nday      : current day of the month nmonth
       !!              - nday_year : current day of the year nyear
-      !!              - ndastp    : =nyear*10000+nmonth*100+nday
+      !!              - ndastp    : = nyear*10000 + nmonth*100 + nday
       !!              - adatrj    : date in days since the beginning of the run
       !!              - rsec_year : current time of the year (in second since 00h, jan 1st)
@@ -75,126 +201,139 @@
       INTEGER, INTENT(in) ::   kt        ! ocean time-step indices
       !
-      INTEGER  ::   js, jm               ! dummy loop indice
       CHARACTER (len=25) ::   charout
       !!----------------------------------------------------------------------
 
-      ! 0.  initialization of adatrj0 and nday, nmonth,nyear, nday_year.
-      !     ndastp has been initialized in domain.F90 or restart.F90
-      !-----------------------------------------------------------------
-
-      !                        ! ---------------- !
-      IF( kt == -1 ) THEN      !  Initialisation  !
-         !                     ! ---------------- !
-         !
-         IF( .NOT.ln_rstart )   adatrj0 = 0.e0      ! adatrj0 initialized in rst_read when restart 
-
-         ! set the calandar from adatrj0 and ndastp (read in restart file and namelist)
-         adatrj  =   adatrj0      !???? bug.... toujours rest   !!gm
-         nyear   =   ndastp / 10000
-         nmonth  = ( ndastp - (nyear * 10000) ) / 100
-         nday    =   ndastp - (nyear * 10000) - ( nmonth * 100 ) 
-
-         ! length of the month of the current year (from nleapy, read in namelist)
-         nmonth_len(0) = nbiss(12)   ;   nmonth_len(13) = nbiss(1)
-         SELECT CASE( nleapy )
-         CASE( 1  )   
-            IF( MOD( nyear, 4 ) == 0 ) THEN
-               ;          nmonth_len(1:12) = nbiss(:)      ! 366 days per year (leap year)
-            ELSE
-               ;          nmonth_len(1:12) = nobis(:)      ! 365 days per year
-            ENDIF
-         CASE( 0  )   ;   nmonth_len(1:12) = nobis(:)      ! 365 days per year
-         CASE( 2: )   ;   nmonth_len(1:13) = nleapy        ! 12*nleapy days per year
-         END SELECT
-
-         ! half month in second since the bigining of the year
-         rmonth_half(0) = - 0.5 * rday * REAL( nmonth_len( 0 ) )
-         DO jm = 1, 12
-            rmonth_half(jm) = rmonth_half(jm-1) + 0.5 * rday * REAL( nmonth_len(jm-1) + nmonth_len(jm) )
-         END DO
-         rmonth_half(13) = rmonth_half( 1 ) + 365. * rday
-         rmonth_half(14) = rmonth_half( 2 ) + 365. * rday
-
-         ! day since january 1st (useful to read  daily forcing fields)
-         nday_year =  nday
-         DO js = 1, nmonth - 1             ! accumulates days of previous months of this year
-            nday_year = nday_year + nmonth_len(js)
-         END DO
-
-         ! number of seconds since...
-         IF( ln_rstart )   THEN
-            rsec_year  = REAL( nday_year ) * rday     - rdttra(1)      ! 00h 1st day of the current year
-            rsec_month = REAL( nday      ) * rday     - rdttra(1)      ! 00h 1st day of the current month
-            rsec_day   = REAL( nday      ) * rday     - rdttra(1)      ! 00h         of the current day
+      !                                                 ! New time-step
+      rsec_year  = rsec_year  + rdttra(1) 
+      rsec_month = rsec_month + rdttra(1)                 
+      rsec_day   = rsec_day   + rdttra(1)                 
+      adatrj = adatrj + rdttra(1) / rday
+      
+      IF( rsec_day > rday ) THEN                        ! NEW day
+         !
+         nday      = nday + 1
+         nday_year = nday_year + 1
+         rsec_day  = 0.5 * rdttra(1)                 
+         !
+         IF( nday == nmonth_len(nmonth) + 1 ) THEN      ! NEW month
+            nday   = 1
+            nmonth = nmonth + 1
+            rsec_month = 0.5 * rdttra(1)
+            IF( nmonth == 13 ) THEN                     ! NEW year
+               nyear     = nyear + 1
+               nmonth    = 1
+               nday_year = 1
+               rsec_year = 0.5 * rdttra(1)
+               sec1jan000 = sec1jan000 + rday * REAL( nyear_len(1), wp )
+               IF( nleapy == 1 )   CALL day_mth
+            ENDIF
+         ENDIF
+         !
+         ndastp = nyear * 10000 + nmonth * 100 + nday   ! NEW date
+         !
+         IF(lwp) WRITE(numout,'(a,i8,a,i4,a,i2,a,i2,a,i3)') '======>> time-step =', kt,   &
+              &   '      New day, DATE Y/M/D = ', nyear, '/', nmonth, '/', nday, '      nday_year = ', nday_year
+         IF(lwp) WRITE(numout,'(a,F9.0,a,F9.0,a,F9.0)') '         rsec_year = ', rsec_year,   &
+              &   '   rsec_month = ', rsec_month, '   rsec_day = ', rsec_day
+      ENDIF
+      
+      IF(ln_ctl) THEN
+         WRITE(charout,FMT="('kt =', I4,'  d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear
+         CALL prt_ctl_info(charout)
+      ENDIF
+
+      IF( lrst_oce )   CALL day_rst( kt, 'WRITE' )
+      !
+   END SUBROUTINE day
+
+
+   SUBROUTINE day_rst( kt, cdrw )
+      !!---------------------------------------------------------------------
+      !!                   ***  ROUTINE ts_rst  ***
+      !! 
+      !!  ** Purpose : Read or write calendar in restart file:
+      !! 
+      !!  WRITE(READ) mode:
+      !!       kt        : number of time step since the begining of the experiment at the 
+      !!                   end of the current(previous) run
+      !!       adatrj(0) : number of elapsed days since the begining of the experiment at the 
+      !!                   end of the current(previous) run (REAL -> keep fractions of day)
+      !!       ndastp    : date at the end of the current(previous) run (coded as yyyymmdd integer)
+      !! 
+      !!   According to namelist parameter nrstdt,
+      !!       nrstdt = 0  no control on the date (nit000 is  arbitrary).
+      !!       nrstdt = 1  we verify that nit000 is equal to the last
+      !!                   time step of previous run + 1.
+      !!       In both those options, the  exact duration of the experiment
+      !!       since the beginning (cumulated duration of all previous restart runs)
+      !!       is not stored in the restart and is assumed to be (nit000-1)*rdt.
+      !!       This is valid is the time step has remained constant.
+      !!
+      !!       nrstdt = 2  the duration of the experiment in days (adatrj)
+      !!                    has been stored in the restart file.
+      !!----------------------------------------------------------------------
+      INTEGER         , INTENT(in) ::   kt         ! ocean time-step
+      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag
+      !
+      REAL(wp) ::   zkt, zndastp
+      !!----------------------------------------------------------------------
+      
+      IF( TRIM(cdrw) == 'READ' ) THEN
+
+         IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN
+            ! Get Calendar informations
+            CALL iom_get( numror, 'kt', zkt )   ! last time-step of previous run
+            IF(lwp) THEN
+               WRITE(numout,*) ' *** Info read in restart : '
+               WRITE(numout,*) '   previous time-step                               : ', NINT( zkt )
+               WRITE(numout,*) ' *** restart option'
+               SELECT CASE ( nrstdt )
+               CASE ( 0 )   ;   WRITE(numout,*) ' nrstdt = 0 : no control of nit000'
+               CASE ( 1 )   ;   WRITE(numout,*) ' nrstdt = 1 : no control the date at nit000 (use ndate0 read in the namelist)'
+               CASE ( 2 )   ;   WRITE(numout,*) ' nrstdt = 2 : calendar parameters read in restart'
+               END SELECT
+               WRITE(numout,*)
+            ENDIF
+            ! Control of date 
+            IF( nit000 - NINT( zkt ) /= 1 .AND. nrstdt /= 0 )                                         & 
+                 &   CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart',                 & 
+                 &                  ' verify the restart file or rerun with nrstdt = 0 (namelist)' )
+            ! define ndastp and adatrj
+            IF ( nrstdt == 2 ) THEN 
+               CALL iom_get( numror, 'ndastp', zndastp )
+               ndastp = NINT( zndastp )
+               CALL iom_get( numror, 'adatrj', adatrj  )
+            ELSE 
+               ndastp = ndate0 - 1     ! ndate0 read in the namelist in dom_nam
+               adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 
+               ! note this is wrong if time step has changed during run 
+            ENDIF
          ELSE
-            rsec_year  = REAL( nday_year - 1 ) * rday - rdttra(1)      ! 00h 1st day of the current year
-            rsec_month = REAL( nday      - 1 ) * rday - rdttra(1)      ! 00h 1st day of the current month
-            rsec_day   =                              - rdttra(1)      ! 00h         of the current day
-         ENDIF
-
-         ! control print
-         IF(lwp) WRITE(numout,*)' ==============>> time-step =', kt, ' Initial DATE Y/M/D = ',   &
-               &                   nyear, '/', nmonth, '/', nday, '  rsec_day:', rsec_day
-
-         !                     ! -------------------------------- ! 
-      ELSE                     !  Model calendar at time-step kt  !
-         !                     ! -------------------------------- ! 
-
-         rsec_year  = rsec_year  + rdttra(1)                 ! New time-step
-         rsec_month = rsec_month + rdttra(1)                 ! New time-step
-         rsec_day   = rsec_day   + rdttra(1)                 ! New time-step
-
-         adatrj    = adatrj0 + ( kt - nit000 + 1 ) * rdttra(1) / rday
-
-         IF( rsec_day >= rday ) THEN
-            !
-            rsec_day  = 0.e0                               ! NEW day
-            nday      = nday + 1
-            nday_year = nday_year + 1
-            !
-            IF( nday == nmonth_len(nmonth) + 1 ) THEN      ! NEW month
-               nday  = 1
-               rsec_month = 0.e0   
-               nmonth = nmonth + 1
-               IF( nmonth == 13 ) THEN                     ! NEW year
-                  nyear     = nyear + 1
-                  nmonth    = 1
-                  nday_year = 1
-                  rsec_year = 0.e0
-                  !                                        ! update the length of the month
-                  IF( nleapy == 1 ) THEN                   ! of the current year (if necessary)
-                     IF( MOD( nyear, 4 ) == 0 ) THEN
-                        nmonth_len(1:12) = nbiss(:)              ! 366 days per year (leap year)
-                     ELSE
-                        nmonth_len(1:12) = nobis(:)              ! 365 days per year
-                     ENDIF
-                     ! half month in second since the bigining of the year
-                     rmonth_half(0) = - 0.5 * rday * REAL( nmonth_len( 0 ) )
-                     DO jm = 1, 12
-                        rmonth_half(jm) = rmonth_half(jm-1) + 0.5 * rday * REAL( nmonth_len(jm-1) + nmonth_len(jm) )
-                     END DO
-                     rmonth_half(13) = rmonth_half( 1 ) + 365. * rday
-                     rmonth_half(14) = rmonth_half( 2 ) + 365. * rday
-                  ENDIF
-               ENDIF
-            ENDIF
-
-            !
-            ndastp = nyear * 10000 + nmonth * 100 + nday   ! NEW date
-            !
-           IF(lwp) WRITE(numout,'(a,i8,a,i4,a,i2,a,i2,a,i3)') '======>> time-step =', kt,   &
-              &   '      New day, DATE Y/M/D = ', nyear, '/', nmonth, '/', nday, '      nday_year = ', nday_year
-           IF(lwp) WRITE(numout,'(a,F9.0,a,F9.0,a,F9.0)') '         rsec_year = ', rsec_year,   &
-              &   '   rsec_month = ', rsec_month, '   rsec_day = ', rsec_day
-         ENDIF
-
-         IF(ln_ctl) THEN
-            WRITE(charout,FMT="('kt =', I4,'  d/m/y =',I2,I2,I4)") kt, nday, nmonth, nyear
-            CALL prt_ctl_info(charout)
-         ENDIF
-         !
-      ENDIF
-
-   END SUBROUTINE day
+            ndastp = ndate0 - 1        ! ndate0 read in the namelist in dom_nam
+            adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday 
+         ENDIF
+         !
+         IF(lwp) THEN
+            WRITE(numout,*) ' *** Info used values : '
+            WRITE(numout,*) '   date ndastp                                      : ', ndastp
+            WRITE(numout,*) '   number of elapsed days since the begining of run : ', adatrj
+            WRITE(numout,*)
+         ENDIF
+         !
+      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN
+         !
+         IF( kt == nitrst ) THEN
+            IF(lwp) WRITE(numout,*)
+            IF(lwp) WRITE(numout,*) 'rst_write : write oce restart file  kt =', kt
+            IF(lwp) WRITE(numout,*) '~~~~~~~'         
+         ENDIF
+         ! calendar control
+         CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp) )   ! time-step 
+         CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) )   ! date
+         CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj            )   ! number of elapsed days since
+         !                                                                     ! the begining of the run [s]
+      ENDIF
+      !
+   END SUBROUTINE day_rst
 
    !!======================================================================
Index: trunk/NEMO/OPA_SRC/istate.F90
===================================================================
--- trunk/NEMO/OPA_SRC/istate.F90	(revision 1129)
+++ trunk/NEMO/OPA_SRC/istate.F90	(revision 1130)
@@ -81,12 +81,11 @@
          neuler = 1                              ! Set time-step indicator at nit000 (leap-frog)
          CALL rst_read                           ! Read the restart file
-         CALL day( -1 )                          ! model calendar (using both namelist and restart infos)
+         CALL day_init                           ! model calendar (using both namelist and restart infos)
       ELSE
          !                                    ! Start from rest
          !                                    ! ---------------
+         numror = 0                              ! define numror = 0 -> no restart file to read
          neuler = 0                              ! Set time-step indicator at nit000 (euler forward)
-         adatrj = 0._wp
-         CALL day( -1 )                          ! model calendar (using namelist infos)
-         numror = 0                              ! define numror = 0 -> no restart file to read
+         CALL day_init                           ! model calendar (using both namelist and restart infos)
          !                                       ! Initialization of ocean to zero
          !     before fields       !       now fields          
Index: trunk/NEMO/OPA_SRC/restart.F90
===================================================================
--- trunk/NEMO/OPA_SRC/restart.F90	(revision 1129)
+++ trunk/NEMO/OPA_SRC/restart.F90	(revision 1130)
@@ -18,5 +18,4 @@
    USE oce             ! ocean dynamics and tracers 
    USE phycst          ! physical constants
-   USE daymod          ! calendar
    USE cpl_oce, ONLY : lk_cpl              !
    USE in_out_manager  ! I/O manager
@@ -89,6 +88,6 @@
             CASE DEFAULT         ;   WRITE(numout,*) '             open ocean restart NetCDF file: '//clname
             END SELECT
-            IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt,' date= ', ndastp
-            ELSE                          ;   WRITE(numout,*) '             kt = '             , kt,' date= ', ndastp
+            IF( kt == nitrst - 1 ) THEN   ;   WRITE(numout,*) '             kt = nitrst - 1 = ', kt
+            ELSE                          ;   WRITE(numout,*) '             kt = '             , kt
             ENDIF
          ENDIF
@@ -112,15 +111,4 @@
       INTEGER, INTENT(in) ::   kt   ! ocean time-step
       !!----------------------------------------------------------------------
-
-      IF( kt == nitrst ) THEN
-         IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) 'rst_write : write oce restart file  kt =', kt
-         IF(lwp) WRITE(numout,*) '~~~~~~~'         
-      ENDIF
-
-      ! calendar control
-      CALL iom_rstput( kt, nitrst, numrow, 'kt'     , REAL( kt    , wp) )   ! time-step 
-      CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) )   ! date
-      CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj            )   ! number of elapsed days since
       !                                                                     ! the begining of the run [s]
       CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt               )   ! dynamics time step
@@ -179,18 +167,6 @@
       !!      for this last three records,  the previous characteristics 
       !!      could be different with those used in the present run. 
-      !!
-      !!   According to namelist parameter nrstdt,
-      !!       nrstdt = 0  no control on the date (nit000 is  arbitrary).
-      !!       nrstdt = 1  we verify that nit000 is equal to the last
-      !!                   time step of previous run + 1.
-      !!       In both those options, the  exact duration of the experiment
-      !!       since the beginning (cumulated duration of all previous restart runs)
-      !!       is not stored in the restart and is assumed to be (nit000-1)*rdt.
-      !!       This is valid is the time step has remained constant.
-      !!
-      !!       nrstdt = 2  the duration of the experiment in days (adatrj)
-      !!                    has been stored in the restart file.
-      !!----------------------------------------------------------------------
-      REAL(wp) ::   zkt, zrdt, zrdttra1, zndastp
+      !!----------------------------------------------------------------------
+      REAL(wp) ::   zrdt, zrdttra1
       !!----------------------------------------------------------------------
 
@@ -198,55 +174,12 @@
          WRITE(numout,*)
          SELECT CASE ( jprstlib )
-         CASE ( jpnf90 )
-            WRITE(numout,*) 'rst_read : read oce NetCDF restart file'
-         CASE ( jprstdimg )
-            WRITE(numout,*) 'rst_read : read oce binary restart file'
+         CASE ( jpnf90    )   ;   WRITE(numout,*) 'rst_read : read oce NetCDF restart file'
+         CASE ( jprstdimg )   ;   WRITE(numout,*) 'rst_read : read oce binary restart file'
          END SELECT
          WRITE(numout,*) '~~~~~~~~'
-
-         WRITE(numout,*) ' *** Info on the present job : '
-         WRITE(numout,*) '   time-step           : ', nit000
-         WRITE(numout,*) '   date ndastp         : ', ndastp
-         WRITE(numout,*)
-         WRITE(numout,*) ' *** restart option'
-         SELECT CASE ( nrstdt )
-         CASE ( 0 ) 
-            WRITE(numout,*) ' nrstdt = 0 no control of nit000'
-         CASE ( 1 ) 
-            WRITE(numout,*) ' nrstdt = 1 we control the date of nit000'
-         CASE ( 2 )
-            WRITE(numout,*) ' nrstdt = 2 the date adatrj is read in restart file'
-         CASE DEFAULT
-            WRITE(numout,*) '  ===>>>> nrstdt not equal 0, 1 or 2 : no control of the date'
-            WRITE(numout,*) '  =======                  ========='
-         END SELECT
-         WRITE(numout,*)
       ENDIF
 
       CALL iom_open( 'restart', numror, kiolib = jprstlib )
 
-      ! Calendar informations
-      CALL iom_get( numror, 'kt'     , zkt      )   ! time-step 
-      CALL iom_get( numror, 'ndastp' , zndastp  )   ! date
-      IF(lwp) THEN
-         WRITE(numout,*)
-         WRITE(numout,*) ' *** Info on the restart file read : '
-         WRITE(numout,*) '   time-step           : ', NINT( zkt )
-         WRITE(numout,*) '   date ndastp         : ', NINT( zndastp )
-         WRITE(numout,*)
-      ENDIF
-      ! Control of date
-      IF( nit000 - NINT( zkt )  /= 1 .AND. nrstdt /= 0 ) &
-           & CALL ctl_stop( ' ===>>>> : problem with nit000 for the restart', &
-           & ' verify the restart file or rerun with nrstdt = 0 (namelist)' )
-      ! re-initialisation of  adatrj0
-      adatrj0 = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday
-      IF ( nrstdt == 2 ) THEN
-         ! by default ndatsp has been set to ndate0 in dom_nam
-         ! ndate0 has been read in the namelist (standard OPA 8)
-         ! here when nrstdt=2 we keep the  final date of previous run
-         ndastp = NINT( zndastp )
-         CALL iom_get( numror, 'adatrj', adatrj )   ! number of elapsed days since the begining of last run
-      ENDIF
       ! Check dynamics and tracer time-step consistency and force Euler restart if changed
       IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN
@@ -258,5 +191,4 @@
          IF( zrdttra1 /= rdttra(1) )   neuler = 0
       ENDIF
-      !
       !                                                       ! Read prognostic variables
       CALL iom_get( numror, jpdom_autoglo, 'ub'   , ub    )        ! before i-component velocity
