Index: LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/calfis_p.F
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/calfis_p.F	(revision 1200)
+++ LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/calfis_p.F	(revision 1201)
@@ -1,9 +1,9 @@
 !
-! $Header$
+! $Id$
 !
 C
 C
       SUBROUTINE calfis_p(lafin,
-     $                  rdayvrai,
+     $                  jD_cur, jH_cur,
      $                  heure,
      $                  pucov,
@@ -209,5 +209,5 @@
       SAVE firstcal,debut
 c$OMP THREADPRIVATE(firstcal,debut)
-      REAL rdayvrai
+      REAL :: jD_cur, jH_cur
       
       REAL,SAVE,dimension(1:iim,1:llm):: du_send,du_recv,dv_send,dv_recv
@@ -334,5 +334,5 @@
 c   ---------------
 c
-
+n
       DO iq=1,nqtot
          iiq=niadv(iq)
@@ -665,6 +665,6 @@
      .             debut,
      .             lafin,
-     .             rdayvrai,
-     .             heure,
+     .             jD_cur,
+     .             jH_cur,
      .             dtphys,
      .             zplev_omp,
Index: LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/conf_gcm.F
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/conf_gcm.F	(revision 1200)
+++ LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/conf_gcm.F	(revision 1201)
@@ -44,4 +44,5 @@
 !#include "clesphys.h"
 #include "iniprint.h"
+#include "temps.h"
 #include "comconst.h"
 
@@ -122,4 +123,12 @@
       CALL getin('planet_type',planet_type)
 
+!Config  Key  = calend
+!Config  Desc = type de calendrier utilise
+!Config  Def  = earth_360d
+!Config  Help = valeur possible: earth_360d, earth_365d, earth_366d
+!Config         
+      calend = 'earth_360d'
+      CALL getin('calend', calend)
+
 !Config  Key  = dayref
 !Config  Desc = Jour de l'etat initial
@@ -588,4 +597,5 @@
       write(lunout,*)' Configuration des parametres du gcm: '
       write(lunout,*)' planet_type = ', planet_type
+      write(lunout,*)' calend = ', calend
       write(lunout,*)' dayref = ', dayref
       write(lunout,*)' anneeref = ', anneeref
@@ -812,4 +822,5 @@
       write(lunout,*)' Configuration des parametres du gcm: '
       write(lunout,*)' planet_type = ', planet_type
+      write(lunout,*)' calend = ', calend
       write(lunout,*)' dayref = ', dayref
       write(lunout,*)' anneeref = ', anneeref
Index: LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/gcm.F
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/gcm.F	(revision 1200)
+++ LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/gcm.F	(revision 1201)
@@ -1,4 +1,4 @@
 !
-! $Header$
+! $Id$
 !
 c
@@ -113,6 +113,4 @@
       real time_step, t_wrt, t_ops
 
-c      REAL rdayvrai,rdaym_ini,rday_ecri
-c      LOGICAL first
 
       LOGICAL call_iniphys
@@ -133,10 +131,10 @@
 
       character (len=80) :: dynhist_file, dynhistave_file
-      character (len=20) ::modname
-      character (len=80) ::abort_message
-
-C Calendrier
-      LOGICAL true_calendar
-      PARAMETER (true_calendar = .false.)
+      character (len=20) :: modname
+      character (len=80) :: abort_message
+! locales pour gestion du temps
+      INTEGER :: an, mois, jour
+      REAL :: heure
+
 
 c-----------------------------------------------------------------------
@@ -165,15 +163,5 @@
 
 
-c-----------------------------------------------------------------------
-c   Choix du calendrier
-c   -------------------
-
-#ifdef CPP_IOIPSL
-      if (true_calendar) then
-        call ioconf_calendar('gregorian')
-      else
-        call ioconf_calendar('360d')
-      endif
-#endif
+
 c----------------------------------------------------------------------
 c  lecture des fichiers gcm.def ou run.def
@@ -221,4 +209,26 @@
 #endif
       endif ! of if (planet_type.eq."earth")
+
+c-----------------------------------------------------------------------
+c   Choix du calendrier
+c   -------------------
+
+c      calend = 'earth_365d'
+
+#ifdef CPP_IOIPSL
+      if (calend == 'earth_360d') then
+        call ioconf_calendar('360d')
+        write(lunout,*)'CALENDRIER CHOISI: Terrestre a 360 jours/an'
+      else if (calend == 'earth_365d') then
+        call ioconf_calendar('noleap')
+        write(lunout,*)'CALENDRIER CHOISI: Terrestre a 365 jours/an'
+      else if (calend == 'earth_366d') then
+        call ioconf_calendar('gregorian')
+        write(lunout,*)'CALENDRIER CHOISI: Terrestre bissextile'
+      else
+        abort_message = 'Mauvais choix de calendrier'
+        call abort_gcm(modname,abort_message,1)
+      endif
+#endif
 
       IF (config_inca /= 'none') THEN
@@ -306,5 +316,5 @@
       if (annee_ref .ne. anneeref .or. day_ref .ne. dayref) then
         write(lunout,*)
-     .  ' Attention les dates initiales lues dans le fichier'
+     .  'GCM: Attention les dates initiales lues dans le fichier'
         write(lunout,*)
      .  ' restart ne correspondent pas a celles lues dans '
@@ -312,14 +322,14 @@
         if (raz_date .ne. 1) then
           write(lunout,*)
-     .    ' On garde les dates du fichier restart'
+     .    'GCM: On garde les dates du fichier restart'
         else
           annee_ref = anneeref
           day_ref = dayref
-          day_ini = dayref
+          day_ini = 1
           itau_dyn = 0
           itau_phy = 0
           time_0 = 0.
           write(lunout,*)
-     .   ' On reinitialise a la date lue dans gcm.def'
+     .   'GCM: On reinitialise a la date lue dans gcm.def'
         endif
       ELSE
@@ -327,7 +337,20 @@
       endif
 
-#ifdef CPP_IOIPSL 
-      call ioconf_startdate(annee_ref,0,day_ref,0.) 
-#endif 
+      mois = 1
+      heure = 0.
+      call ymds2ju(annee_ref, mois, day_ref, heure, jD_ref)
+      jH_ref = jD_ref - int(jD_ref)
+      jD_ref = int(jD_ref)
+
+#ifdef CPP_IOIPSL
+      call ioconf_startdate(annee_ref,0,day_ref, 0.)
+#endif
+
+      write(lunout,*)'DEBUG'
+      write(lunout,*)'annee_ref, mois, day_ref, heure, jD_ref'
+      write(lunout,*)annee_ref, mois, day_ref, heure, jD_ref
+      call ju2ymds(jD_ref+jH_ref,an, mois, jour, heure)
+      write(lunout,*)'jD_ref+jH_ref,an, mois, jour, heure'
+      write(lunout,*)jD_ref+jH_ref,an, mois, jour, heure
 
 c  nombre d'etats dans les fichiers demarrage et histoire
@@ -413,4 +436,10 @@
       WRITE(lunout,300)day_ini,day_end
  300  FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//)
+      call ju2ymds(jD_ref+day_ini-1,an, mois, jour, heure)
+      write (lunout,301)jour, mois, an
+      call ju2ymds(jD_ref+day_end-1,an, mois, jour, heure)
+      write (lunout,302)jour, mois, an
+ 301  FORMAT('1'/,15x,'run du ', i2,'/',i2,'/',i4)
+ 302  FORMAT('1'/,15x,'    au ', i2,'/',i2,'/',i4)
 
 !#ifdef CPP_IOIPSL
Index: LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F	(revision 1200)
+++ LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F	(revision 1201)
@@ -1,4 +1,4 @@
 ! 
-! $Header$
+! $Id$
 !
 c
@@ -120,6 +120,6 @@
 c
       INTEGER itau,itaufinp1,iav
-      INTEGER*4  iday ! jour julien
-      REAL       time ! Heure de la journee en fraction d'1 jour
+!      INTEGER  iday ! jour julien
+      REAL       time 
 
       REAL  SSUM
@@ -134,5 +134,10 @@
       real time_step, t_wrt, t_ops
 
-      REAL rdayvrai,rdaym_ini
+! jD_cur: jour julien courant
+! jH_cur: heure julienne courante
+      REAL :: jD_cur, jH_cur
+      INTEGER :: an, mois, jour
+      REAL :: secondes
+
       LOGICAL first,callinigrads
 
@@ -162,7 +167,4 @@
       character*80 abort_message
 
-C Calendrier
-      LOGICAL true_calendar
-      PARAMETER (true_calendar = .false.)
 
       logical,PARAMETER :: dissip_conservative=.TRUE.
@@ -207,10 +209,10 @@
 
       itau = 0
-      iday = day_ini+itau/day_step
-      time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
-         IF(time.GT.1.) THEN
-          time = time-1.
-          iday = iday+1
-         ENDIF
+c$$$      iday = day_ini+itau/day_step
+c$$$      time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
+c$$$         IF(time.GT.1.) THEN
+c$$$          time = time-1.
+c$$$          iday = iday+1
+c$$$         ENDIF
 
 c Allocate variables depending on dynamic variable nqtot
@@ -241,10 +243,7 @@
    1  CONTINUE
 
-c$OMP MASTER
-
-      CALL barrier
-      
-c$OMP END MASTER
-c$OMP BARRIER
+      jD_cur = jD_ref + (day_ini - 1) + int (itau * dtvr / daysec) 
+      jH_cur = jH_ref +                                                 &
+     &          (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
 
 
@@ -551,7 +550,8 @@
 c$OMP BARRIER
 !      CALL FTRACE_REGION_BEGIN("caldyn")
+      time = jD_cur + jH_cur 
       CALL caldyn_p 
      $  ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
-     $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini )
+     $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time )
 
 !      CALL FTRACE_REGION_END("caldyn")
@@ -684,7 +684,8 @@
          CALL exner_hyb_p(  ip1jmp1, ps, p,alpha,beta,pks, pk, pkf )
 c$OMP BARRIER
-           rdaym_ini  = itau * dtvr / daysec
-           rdayvrai   = rdaym_ini  + day_ini
-
+           jD_cur = jD_ref + (day_ini -1) + int (itau * dtvr / daysec) 
+           jH_cur = jH_ref +                                            &
+     &              (itau * dtvr / daysec - int(itau * dtvr / daysec)) 
+         call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes)
 
 c rajout debug
@@ -773,5 +774,5 @@
 cc$OMP BARRIER
 !        CALL FTRACE_REGION_BEGIN("calfis")
-        CALL calfis_p(lafin ,rdayvrai,time  ,
+        CALL calfis_p(lafin ,jD_cur, jH_cur,
      $               ucov,vcov,teta,q,masse,ps,p,pk,phis,phi ,
      $               du,dv,dteta,dq,
@@ -1274,10 +1275,10 @@
             IF(forward. OR. leapf) THEN
               itau= itau + 1
-              iday= day_ini+itau/day_step
-              time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
-                IF(time.GT.1.) THEN
-                  time = time-1.
-                  iday = iday+1
-                ENDIF
+c$$$              iday= day_ini+itau/day_step
+c$$$              time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
+c$$$                IF(time.GT.1.) THEN
+c$$$                  time = time-1.
+c$$$                  iday = iday+1
+c$$$                ENDIF
             ENDIF
 
@@ -1444,11 +1445,11 @@
 
              itau =  itau + 1
-             iday = day_ini+itau/day_step
-             time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
-
-                  IF(time.GT.1.) THEN
-                   time = time-1.
-                   iday = iday+1
-                  ENDIF
+c$$$             iday = day_ini+itau/day_step
+c$$$             time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0
+c$$$
+c$$$                  IF(time.GT.1.) THEN
+c$$$                   time = time-1.
+c$$$                   iday = iday+1
+c$$$                  ENDIF
 
                forward =  .FALSE.
Index: LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/sortvarc.F
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/sortvarc.F	(revision 1200)
+++ LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/sortvarc.F	(revision 1201)
@@ -129,6 +129,7 @@
       ang   = SSUM(     llm,  angl, 1 )
 
-      rday = FLOAT(INT ( day_ini + time ))
+c      rday = FLOAT(INT ( day_ini + time ))
 c
+       rday = FLOAT(INT(time-jD_ref-jH_ref))
       IF(ptot0.eq.0.)  THEN
          PRINT 3500, itau, rday, heure,time
@@ -156,6 +157,6 @@
       RETURN
 
-3500   FORMAT('0'10(1h*),4x,'pas'i7,5x,'jour'f5.0,'heure'f5.1,4x 
-     *   ,'date',f10.5,4x,10(1h*))
+3500   FORMAT('0'10(1h*),4x,'pas'i7,5x,'jour'f9.0,'heure'f5.1,4x 
+     *   ,'date',f14.4,4x,10(1h*))
 4000   FORMAT(10x,'masse',4x,'rmsdpdt',7x,'energie',2x,'enstrophie'
      * ,2x,'entropie',3x,'rmsv',4x,'mt.ang',/,'GLOB  '
Index: LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/temps.h
===================================================================
--- LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/temps.h	(revision 1200)
+++ LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/temps.h	(revision 1201)
@@ -1,4 +1,4 @@
 !
-! $Header$
+! $Id$
 !
 !  ATTENTION!!!!: ce fichier include est compatible format fixe/format libre
@@ -8,13 +8,17 @@
 !
 !
+! jD_ref = jour julien de la date de reference (lancement de l'experience)
+! hD_ref = "heure" julienne de la date de reference
 !-----------------------------------------------------------------------
 ! INCLUDE 'temps.h'
 
       COMMON/temps/itaufin, dt, day_ini, day_end, annee_ref, day_ref,   &
-     &             itau_dyn, itau_phy
+     &             itau_dyn, itau_phy, jD_ref, jH_ref, calend
 
       INTEGER   itaufin
-      INTEGER(kind=4) itau_dyn, itau_phy
-      INTEGER(kind=4) day_ini, day_end, annee_ref, day_ref
-      REAL      dt
-!$OMP THREADPRIVATE(/temps/)
+      INTEGER itau_dyn, itau_phy
+      INTEGER day_ini, day_end, annee_ref, day_ref
+      REAL      dt, jD_ref, jH_ref
+      CHARACTER (len=10) :: calend
+
+!-----------------------------------------------------------------------
