Index: /LMDZ5/trunk/libf/dyn3d/conf_gcm.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/conf_gcm.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/conf_gcm.F	(revision 1577)
@@ -155,4 +155,12 @@
       nday = 10
       CALL getin('nday',nday)
+
+!Config  Key  = starttime
+!Config  Desc = Heure de depart de la simulation
+!Config  Def  = 0
+!Config  Help = Heure de depart de la simulation
+!Config         en jour
+      starttime = 0
+      CALL getin('starttime',starttime)
 
 !Config  Key  = day_step
Index: /LMDZ5/trunk/libf/dyn3d/control_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/control_mod.F90	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/control_mod.F90	(revision 1577)
@@ -10,5 +10,5 @@
   IMPLICIT NONE
 
-  REAL    :: periodav
+  REAL    :: periodav, starttime
   INTEGER :: nday,day_step,iperiod,iapp_tracvl,nsplit_phys
   INTEGER :: iconser,iecri,dissip_period,iphysiq,iecrimoy
Index: /LMDZ5/trunk/libf/dyn3d/dynetat0.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/dynetat0.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/dynetat0.F	(revision 1577)
@@ -119,4 +119,5 @@
       day_ini = tab_cntrl(30)
       itau_dyn = tab_cntrl(31)
+      start_time = tab_cntrl(32)
 c   .................................................................
 c
Index: /LMDZ5/trunk/libf/dyn3d/dynredem.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/dynredem.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/dynredem.F	(revision 1577)
@@ -120,4 +120,6 @@
        tab_cntrl(30) = REAL(iday_end)
        tab_cntrl(31) = REAL(itau_dyn + itaufin)
+c start_time: start_time of simulation (not necessarily 0.)
+       tab_cntrl(32) = start_time
 c
 c    .........................................................
Index: /LMDZ5/trunk/libf/dyn3d/gcm.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/gcm.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/gcm.F	(revision 1577)
@@ -305,4 +305,15 @@
 C on remet le calendrier à zero si demande
 c
+      IF (start_time /= starttime) then
+        WRITE(lunout,*)' GCM: Attention l''heure de depart lue dans le'
+     &,' fichier restart ne correspond pas à celle lue dans le run.def'
+        IF (raz_date == 1) then
+          WRITE(lunout,*)'Je prends l''heure lue dans run.def'
+          start_time = starttime
+        ELSE
+          WRITE(lunout,*)'Je m''arrete'
+          CALL abort
+        ENDIF
+      ENDIF
       IF (raz_date == 1) THEN
         annee_ref = anneeref
Index: /LMDZ5/trunk/libf/dyn3d/leapfrog.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/leapfrog.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/leapfrog.F	(revision 1577)
@@ -224,7 +224,10 @@
    1  CONTINUE
 
-      jD_cur = jD_ref + day_ini - day_ref + int (itau * dtvr / daysec) 
-      jH_cur = jH_ref +                                                 &
+      jD_cur = jD_ref + day_ini - day_ref +                             &
+     &          int (itau * dtvr / daysec) 
+      jH_cur = jH_ref + start_time +                                    &
      &          (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
+      jD_cur = jD_cur + int(jH_cur)
+      jH_cur = jH_cur - int(jH_cur)
 
 
@@ -372,8 +375,14 @@
 !           rdaym_ini  = itau * dtvr / daysec
 !           rdayvrai   = rdaym_ini  + day_ini
-           jD_cur = jD_ref + day_ini - day_ref
-     $        + int (itau * dtvr / daysec) 
-           jH_cur = jH_ref +                                            &
-     &              (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
+!           jD_cur = jD_ref + day_ini - day_ref
+!     $        + int (itau * dtvr / daysec) 
+!           jH_cur = jH_ref +                                            &
+!     &              (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
+           jD_cur = jD_ref + day_ini - day_ref +                        &
+     &          int (itau * dtvr / daysec) 
+           jH_cur = jH_ref + start_time +                               &
+     &          (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
+           jD_cur = jD_cur + int(jH_cur)
+           jH_cur = jH_cur - int(jH_cur)
 !         write(lunout,*)'itau, jD_cur = ', itau, jD_cur, jH_cur
 !         call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes)
@@ -652,5 +661,5 @@
 !              if (planet_type.eq."earth") then
 ! Write an Earth-format restart file
-                CALL dynredem1("restart.nc",0.0,
+                CALL dynredem1("restart.nc",start_time,
      &                         vcov,ucov,teta,q,masse,ps)
 !              endif ! of if (planet_type.eq."earth")
@@ -763,5 +772,5 @@
               IF(itau.EQ.itaufin) THEN
 !                if (planet_type.eq."earth") then
-                  CALL dynredem1("restart.nc",0.0,
+                  CALL dynredem1("restart.nc",start_time,
      &                           vcov,ucov,teta,q,masse,ps)
 !                endif ! of if (planet_type.eq."earth")
Index: /LMDZ5/trunk/libf/dyn3d/temps.h
===================================================================
--- /LMDZ5/trunk/libf/dyn3d/temps.h	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3d/temps.h	(revision 1577)
@@ -14,10 +14,12 @@
 
       COMMON/temps/itaufin, dt, day_ini, day_end, annee_ref, day_ref,   &
-     &             itau_dyn, itau_phy, jD_ref, jH_ref, calend
+     &             itau_dyn, itau_phy, jD_ref, jH_ref, calend,          &
+     &             start_time
+
 
       INTEGER   itaufin
       INTEGER itau_dyn, itau_phy
       INTEGER day_ini, day_end, annee_ref, day_ref
-      REAL      dt, jD_ref, jH_ref
+      REAL      dt, jD_ref, jH_ref, start_time
       CHARACTER (len=10) :: calend
 
Index: /LMDZ5/trunk/libf/dyn3dpar/conf_gcm.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/conf_gcm.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/conf_gcm.F	(revision 1577)
@@ -167,4 +167,12 @@
       nday = 10
       CALL getin('nday',nday)
+
+!Config  Key  = starttime
+!Config  Desc = Heure de depart de la simulation
+!Config  Def  = 0
+!Config  Help = Heure de depart de la simulation
+!Config         en jour
+      starttime = 0
+      CALL getin('starttime',starttime)
 
 !Config  Key  = day_step
Index: /LMDZ5/trunk/libf/dyn3dpar/control_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/control_mod.F90	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/control_mod.F90	(revision 1577)
@@ -10,5 +10,5 @@
   IMPLICIT NONE
 
-  REAL    :: periodav
+  REAL    :: periodav, starttime
   INTEGER :: nday,day_step,iperiod,iapp_tracvl,nsplit_phys
   INTEGER :: iconser,iecri,dissip_period,iphysiq,iecrimoy
Index: /LMDZ5/trunk/libf/dyn3dpar/dynetat0.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/dynetat0.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/dynetat0.F	(revision 1577)
@@ -119,4 +119,5 @@
       day_ini = tab_cntrl(30)
       itau_dyn = tab_cntrl(31)
+      start_time = tab_cntrl(32)
 c   .................................................................
 c
Index: /LMDZ5/trunk/libf/dyn3dpar/dynredem.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/dynredem.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/dynredem.F	(revision 1577)
@@ -120,4 +120,6 @@
        tab_cntrl(30) = REAL(iday_end)
        tab_cntrl(31) = REAL(itau_dyn + itaufin)
+c start_time: start_time of simulation (not necessarily 0.)
+       tab_cntrl(32) = start_time
 c
 c    .........................................................
Index: /LMDZ5/trunk/libf/dyn3dpar/dynredem_p.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/dynredem_p.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/dynredem_p.F	(revision 1577)
@@ -120,4 +120,6 @@
        tab_cntrl(30) =  REAL(iday_end)
        tab_cntrl(31) =  REAL(itau_dyn + itaufin)
+c start_time: start_time of simulation (not necessarily 0.)
+       tab_cntrl(32) = start_time
 c
 c    .........................................................
Index: /LMDZ5/trunk/libf/dyn3dpar/gcm.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/gcm.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/gcm.F	(revision 1577)
@@ -323,4 +323,15 @@
 C on remet le calendrier à zero si demande
 c
+      IF (start_time /= starttime) then
+        WRITE(lunout,*)' GCM: Attention l''heure de depart lue dans le'
+     &,' fichier restart ne correspond pas à celle lue dans le run.def'
+        IF (raz_date == 1) then
+          WRITE(lunout,*)'Je prends l''heure lue dans run.def'
+          start_time = starttime
+        ELSE
+          WRITE(lunout,*)'Je m''arrete'
+          CALL abort
+        ENDIF
+      ENDIF
       IF (raz_date == 1) THEN
         annee_ref = anneeref
Index: /LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/leapfrog_p.F	(revision 1577)
@@ -247,7 +247,12 @@
    1  CONTINUE
 
-      jD_cur = jD_ref + day_ini - day_ref + int (itau * dtvr / daysec) 
-      jH_cur = jH_ref +                                                 &
+      jD_cur = jD_ref + day_ini - day_ref +                             &
+     &          int (itau * dtvr / daysec) 
+      jH_cur = jH_ref + start_time +                                    &
      &          (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
+      if (jH_cur > 1.0 ) then
+        jD_cur = jD_cur +1.
+        jH_cur = jH_cur -1.
+      endif
 
 
@@ -701,7 +706,11 @@
            jD_cur = jD_ref + day_ini - day_ref
      $        + int (itau * dtvr / daysec) 
-           jH_cur = jH_ref +                                            &
+           jH_cur = jH_ref + start_time +                                &
      &              (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
 !         call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes)
+           if (jH_cur > 1.0 ) then
+             jD_cur = jD_cur +1.
+             jH_cur = jH_cur -1.
+           endif
 
 c rajout debug
Index: /LMDZ5/trunk/libf/dyn3dpar/temps.h
===================================================================
--- /LMDZ5/trunk/libf/dyn3dpar/temps.h	(revision 1576)
+++ /LMDZ5/trunk/libf/dyn3dpar/temps.h	(revision 1577)
@@ -14,10 +14,12 @@
 
       COMMON/temps/itaufin, dt, day_ini, day_end, annee_ref, day_ref,   &
-     &             itau_dyn, itau_phy, jD_ref, jH_ref, calend
+     &             itau_dyn, itau_phy, jD_ref, jH_ref, calend,          &
+     &             start_time
+
 
       INTEGER   itaufin
       INTEGER itau_dyn, itau_phy
       INTEGER day_ini, day_end, annee_ref, day_ref
-      REAL      dt, jD_ref, jH_ref
+      REAL      dt, jD_ref, jH_ref, start_time
       CHARACTER (len=10) :: calend
 
Index: /LMDZ5/trunk/libf/phylmd/cpl_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/cpl_mod.F90	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/cpl_mod.F90	(revision 1577)
@@ -345,5 +345,5 @@
        IF (is_sequential) THEN
           ndexcs(:) = 0
-          itau_w = itau_phy + itime
+          itau_w = itau_phy + itime + start_time * day_step / iphysiq
           DO i = 1, maxrecv
             IF (inforecv(i)%action) THEN
@@ -1232,5 +1232,5 @@
     IF (is_sequential) THEN
        ndexct(:) = 0
-       itau_w = itau_phy + itime
+       itau_w = itau_phy + itime + start_time * day_step / iphysiq
        CALL histwrite(nidct,'tauxe',itau_w,tmp_taux,iim*(jjm+1),ndexct)
        CALL histwrite(nidct,'tauyn',itau_w,tmp_tauy,iim*(jjm+1),ndexct)
Index: /LMDZ5/trunk/libf/phylmd/limit_read_mod.F90
===================================================================
--- /LMDZ5/trunk/libf/phylmd/limit_read_mod.F90	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/limit_read_mod.F90	(revision 1577)
@@ -150,4 +150,5 @@
     
     INCLUDE "indicesol.h"
+    INCLUDE "iniprint.h"
 
 ! In- and ouput arguments
@@ -165,5 +166,7 @@
 !$OMP THREADPRIVATE(lmt_pas) 
     LOGICAL, SAVE                             :: first_call=.TRUE.
-!$OMP THREADPRIVATE(first_call)    
+!$OMP THREADPRIVATE(first_call)  
+    INTEGER, SAVE                             :: jour_lu = -1
+!$OMP THREADPRIVATE(jour_lu)  
 ! Locals variables
 !****************************************************************************************
@@ -209,5 +212,6 @@
 
     is_modified = .FALSE.
-    IF (MOD(itime-1, lmt_pas) == 0) THEN   ! time to read
+    IF (MOD(itime-1, lmt_pas) == 0 .OR. jour_lu /= jour ) THEN   ! time to read
+       jour_lu = jour
        is_modified = .TRUE.
 !$OMP MASTER  ! Only master thread
Index: /LMDZ5/trunk/libf/phylmd/phys_output_write.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/phys_output_write.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/phys_output_write.h	(revision 1577)
@@ -1,3 +1,3 @@
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 
       DO iff=1,nfiles
Index: /LMDZ5/trunk/libf/phylmd/write_bilKP_ave.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_bilKP_ave.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_bilKP_ave.h	(revision 1577)
@@ -9,5 +9,5 @@
 c Champs 2D:
 c
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
 cym      CALL gr_fi_ecrit(klev, klon,iim,jjmp1, ue_lay,zx_tmp_3d)
Index: /LMDZ5/trunk/libf/phylmd/write_bilKP_ins.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_bilKP_ins.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_bilKP_ins.h	(revision 1577)
@@ -7,5 +7,5 @@
       ndex3d = 0
 c
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
 c Champs 3D:
Index: /LMDZ5/trunk/libf/phylmd/write_histISCCP.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histISCCP.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histISCCP.h	(revision 1577)
@@ -9,5 +9,5 @@
        ndex3d = 0
 c
-       itau_w = itau_phy + itap
+       itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
        IF(type_run.EQ."ENSP".OR.type_run.EQ."CLIM") THEN
Index: /LMDZ5/trunk/libf/phylmd/write_histREGDYN.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histREGDYN.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histREGDYN.h	(revision 1577)
@@ -8,5 +8,5 @@
 
       ndex3d = 0
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
        CALL histwrite(nid_regdyn,"hw1",itau_w,histoW(:,:,:,1),
Index: /LMDZ5/trunk/libf/phylmd/write_histdayNMC.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histdayNMC.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histdayNMC.h	(revision 1577)
@@ -5,5 +5,5 @@
 c
        ndex3d = 0
-       itau_w = itau_phy + itap
+       itau_w = itau_phy + itap + start_time * day_step / iphysiq
 ccc
 c  Champs interpolles sur des niveaux de pression du NMC
Index: /LMDZ5/trunk/libf/phylmd/write_histday_seri.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histday_seri.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histday_seri.h	(revision 1577)
@@ -7,5 +7,5 @@
 c
       ndex2d = 0
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
 c Champs 2D:
Index: /LMDZ5/trunk/libf/phylmd/write_histhf3d.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histhf3d.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histhf3d.h	(revision 1577)
@@ -7,5 +7,5 @@
       ndex3d = 0
 c
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
 c Champs 3D:
Index: /LMDZ5/trunk/libf/phylmd/write_histhfNMC.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histhfNMC.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histhfNMC.h	(revision 1577)
@@ -5,5 +5,5 @@
 c
        ndex3d = 0
-       itau_w = itau_phy + itap
+       itau_w = itau_phy + itap + start_time * day_step / iphysiq
 ccc
 c  Champs interpolles sur des niveaux de pression du NMC
Index: /LMDZ5/trunk/libf/phylmd/write_histmthNMC.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histmthNMC.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histmthNMC.h	(revision 1577)
@@ -5,5 +5,5 @@
 c
        ndex3d = 0
-       itau_w = itau_phy + itap
+       itau_w = itau_phy + itap + start_time * day_step / iphysiq
 ccc
 c  Champs interpolles sur des niveaux de pression du NMC
Index: /LMDZ5/trunk/libf/phylmd/write_histrac.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_histrac.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_histrac.h	(revision 1577)
@@ -5,5 +5,5 @@
   IF (ecrit_tra > 0.) THEN
      
-     itau_w = itau_phy + nstep
+     itau_w = itau_phy + nstep + start_time * day_step / iphysiq
      
      CALL histwrite_phy(nid_tra,.FALSE.,"phis",itau_w,pphis)
Index: /LMDZ5/trunk/libf/phylmd/write_paramLMDZ_phy.h
===================================================================
--- /LMDZ5/trunk/libf/phylmd/write_paramLMDZ_phy.h	(revision 1576)
+++ /LMDZ5/trunk/libf/phylmd/write_paramLMDZ_phy.h	(revision 1577)
@@ -27,5 +27,5 @@
 c
       ndex2d = 0
-      itau_w = itau_phy + itap
+      itau_w = itau_phy + itap + start_time * day_step / iphysiq
 c
 c Variables globales
