From ac54312f658cad0a28f192a0e63f00bfdbf5fca8 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 28 Mar 2018 14:35:29 +0200
Subject: [PATCH] Philippe 28/03/2018: replace TEMPORAL_DIST by
 DATETIME_DISTANCE and ADD_FORECAST_TO_DATE and SUBTRACT_TO_DATE by
 DATETIME_CORRECTDATE

---
 src/LIB/SURCOUCHE/src/mode_netcdf.f90 |  14 +-
 src/MNH/add_forecast_to_date.f90      | 143 ---------------
 src/MNH/adv_forcingn.f90              |  17 +-
 src/MNH/aircraft_balloon_evol.f90     |  30 +--
 src/MNH/diag.f90                      |  19 +-
 src/MNH/eddyUV_fluxn.f90              |   1 -
 src/MNH/forcing.f90                   |  15 +-
 src/MNH/ground_paramn.f90             |   9 +-
 src/MNH/ini_cpl.f90                   |  21 +--
 src/MNH/ini_modeln.f90                |   4 +-
 src/MNH/ini_spectren.f90              |   1 -
 src/MNH/init_ground_paramn.f90        |  22 ++-
 src/MNH/mnh2lpdm_ini.f90              |  12 +-
 src/MNH/mode_les_diachro.f90          |  38 ++--
 src/MNH/modeln.f90                    |  11 +-
 src/MNH/paspol.f90                    |  28 +--
 src/MNH/phys_paramn.f90               |  21 +--
 src/MNH/profilern.f90                 |   8 +-
 src/MNH/read_all_data_grib_case.f90   |   8 +-
 src/MNH/rel_forcingn.f90              |  17 +-
 src/MNH/seriesn.f90                   |   9 +-
 src/MNH/setlb_lg.f90                  |   9 +-
 src/MNH/stationn.f90                  |   7 +-
 src/MNH/subtract_to_date.f90          | 136 --------------
 src/MNH/temporal_dist.f90             | 251 --------------------------
 src/MNH/write_budget.f90              |  13 +-
 src/MNH/write_ts1d.f90                |  10 +-
 27 files changed, 129 insertions(+), 745 deletions(-)
 delete mode 100644 src/MNH/add_forecast_to_date.f90
 delete mode 100644 src/MNH/subtract_to_date.f90
 delete mode 100644 src/MNH/temporal_dist.f90

diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 03aa2bfce..12b8ab3fb 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -522,12 +522,12 @@ END SUBROUTINE WRITE_VER_COORD
 
 SUBROUTINE WRITE_TIME_COORD(TDIM)
   USE MODD_TIME_n,     ONLY: TDTMOD, TDTCUR
+  USE MODD_TYPE_DATE
 
+  USE MODE_DATETIME
   USE MODE_FIELD,      ONLY: TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
   USE MODE_GRIDPROJ
 
-  USE MODI_TEMPORAL_DIST
-
   TYPE(DIMCDF), POINTER, INTENT(IN) :: TDIM
 
   REAL                         :: ZDELTATIME
@@ -536,6 +536,7 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
   INTEGER(KIND=IDCDF_KIND)     :: IVARID
   INTEGER(KIND=IDCDF_KIND)     :: IVDIM
   INTEGER(KIND=IDCDF_KIND)     :: STATUS
+  TYPE(DATE_TIME)              :: TZREF
 
 
   IF (ASSOCIATED(TDTCUR) .AND. ASSOCIATED(TDTMOD)) THEN
@@ -565,10 +566,13 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
     STATUS = NF90_PUT_ATT(INCID, IVARID,'calendar','standard')
     IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]')
 
+    ! Model beginning date (TDTMOD%TDATE) is used as the reference date
+    ! Reference time is set to 0.
+    TZREF = TDTMOD
+    TZREF%TIME = 0.
+    ! Compute the temporal distance from reference
+    CALL DATETIME_DISTANCE(TZREF,TDTCUR,ZDELTATIME)
     ! Write the data
-    CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, &
-                       TDTMOD%TDATE%YEAR, TDTMOD%TDATE%MONTH, TDTMOD%TDATE%DAY, 0.,          &
-                       ZDELTATIME                                                            )
     STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME)
     IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME))
   END IF
diff --git a/src/MNH/add_forecast_to_date.f90 b/src/MNH/add_forecast_to_date.f90
deleted file mode 100644
index c5161d6e7..000000000
--- a/src/MNH/add_forecast_to_date.f90
+++ /dev/null
@@ -1,143 +0,0 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 prep_real 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ################################
-      MODULE MODI_ADD_FORECAST_TO_DATE
-!     ################################
-INTERFACE
-      SUBROUTINE ADD_FORECAST_TO_DATE(KYEAR,KMONTH,KDAY,PSEC)
-!
-INTEGER, INTENT(INOUT) :: KYEAR  ! year of date
-INTEGER, INTENT(INOUT) :: KMONTH ! month of date
-INTEGER, INTENT(INOUT) :: KDAY   ! day of date
-REAL,    INTENT(INOUT) :: PSEC   ! number of seconds since date at 00 UTC
-!
-END SUBROUTINE ADD_FORECAST_TO_DATE
-END INTERFACE
-END MODULE MODI_ADD_FORECAST_TO_DATE
-!
-!     #######################################################
-      SUBROUTINE ADD_FORECAST_TO_DATE(KYEAR,KMONTH,KDAY,PSEC)
-!     #######################################################
-!
-!!****  *ADD_FORECAST_TO_DATE* - finds the current date and hour of a forecast
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!                                WARNING
-!!
-!!      -----> Only correct for dates between 19900301 and 21000228   <-----
-!!
-!!  The correct test should be:
-!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN
-!!
-!!**  METHOD
-!!    ------
-!!
-!!      A recursive method is used, adding one day ofter the other.
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    Book 2
-!!
-!!    AUTHOR
-!!    ------
-!!	
-!     V.Masson  Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    01/09/95
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-IMPLICIT NONE
-!
-!*       0.1   Declaration of arguments
-!              ------------------------
-INTEGER, INTENT(INOUT) :: KYEAR  ! year of date
-INTEGER, INTENT(INOUT) :: KMONTH ! month of date
-INTEGER, INTENT(INOUT) :: KDAY   ! day of date
-REAL,    INTENT(INOUT) :: PSEC   ! number of seconds since date at 00 UTC
-!
-!*       0.2   Declaration of local variables
-!              ------------------------------
-!
-INTEGER :: IDAYS ! number of days in KMONTH
-!-------------------------------------------------------------------------------
-!
-!*       1.    Return condition: less than one day to add
-!              ------------------------------------------
-!
-DO 
-  IF (86400.-PSEC > 1.E-6) EXIT
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.    Adding one day
-!              --------------
-!
-  PSEC=PSEC-86400.
-!
-!*       2.1   Number of days in a month
-!              -------------------------
-!
-  SELECT CASE (KMONTH)
-    CASE(4,6,9,11)
-      IDAYS=30
-    CASE(1,3,5,7:8,10,12)
-      IDAYS=31
-    CASE(2)
-      IF (MOD(KYEAR,4)==0) THEN 
-        IDAYS=29
-      ELSE
-        IDAYS=28
-      ENDIF
-  END SELECT
-!
-!*       2.2   Last day of the month
-!              ---------------------
-!
-  IF (KDAY==IDAYS) THEN
-    IF (KMONTH==12) THEN
-      KDAY=1
-      KMONTH=1
-      KYEAR=KYEAR+1
-    ELSE
-      KDAY=1   
-      KMONTH=KMONTH+1
-    ENDIF
-! 
-!*       2.3   Other days
-!              ----------
-  ELSE
-    KDAY=KDAY+1
-  ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-!*       3.    Recursive call
-!              --------------
-!
-ENDDO
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE ADD_FORECAST_TO_DATE
diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90
index 7693be14b..bccca3ad6 100644
--- a/src/MNH/adv_forcingn.f90
+++ b/src/MNH/adv_forcingn.f90
@@ -90,13 +90,15 @@ END MODULE MODI_ADV_FORCING_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    08/11/10 
+!!      Original    08/11/10
+!!     28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODE_DATETIME
 USE MODE_FM
 USE MODE_IO_ll
 !
@@ -107,7 +109,6 @@ USE MODD_TIME
 USE MODD_BUDGET
 !
 USE MODI_TEMPORAL_LT
-USE MODI_TEMPORAL_DIST 
 USE MODI_BUDGET
 !
 USE MODD_ADVFRC_n     ! Modules for time evolving advfrc
@@ -202,18 +203,10 @@ ELSE
     JXP= JSX_ADV +1
     WRITE(UNIT=ILUOUT0,FMT='(" THE ADV FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX_ADV,JXP
-    CALL TEMPORAL_DIST ( TDTADVFRC(JXP)%TDATE%YEAR,TDTADVFRC(JXP)%TDATE%MONTH,   &
-                         TDTADVFRC(JXP)%TDATE%DAY ,TDTADVFRC(JXP)%TIME,          &
-                         TDTADVFRC(JSX_ADV)%TDATE%YEAR ,TDTADVFRC(JSX_ADV)%TDATE%MONTH,  &
-                         TDTADVFRC(JSX_ADV)%TDATE%DAY  ,TDTADVFRC(JSX_ADV)%TIME,         &
-                         ZSDTJX                                            )
+    CALL DATETIME_DISTANCE(TDTADVFRC(JSX_ADV),TDTADVFRC(JXP),ZSDTJX)
   END IF
 !
-  CALL TEMPORAL_DIST ( TPDTCUR%TDATE%YEAR   ,TPDTCUR%TDATE%MONTH,      &
-                       TPDTCUR%TDATE%DAY    ,TPDTCUR%TIME,             &
-                       TDTADVFRC(JSX_ADV)%TDATE%YEAR,TDTADVFRC(JSX_ADV)%TDATE%MONTH, &
-                       TDTADVFRC(JSX_ADV)%TDATE%DAY ,TDTADVFRC(JSX_ADV)%TIME,        &
-                       ZDT                                             )
+  CALL DATETIME_DISTANCE(TDTADVFRC(JSX_ADV),TPDTCUR,ZDT)
 !
   ZALPHA = ZDT / ZSDTJX
 !
diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90
index 358909760..556ce677d 100644
--- a/src/MNH/aircraft_balloon_evol.f90
+++ b/src/MNH/aircraft_balloon_evol.f90
@@ -131,6 +131,7 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL
 !!     July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for
 !!                                      aircraft, ballon and profiler
 !!      October, 2016 (G.DELAUTIER) LIMA
+!!     March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -174,6 +175,7 @@ USE MODD_TIME
 USE MODD_TURB_FLUX_AIRCRAFT_BALLOON
 USE MODD_TYPE_DATE
 !
+USE MODE_DATETIME
 USE MODE_FGAU,             ONLY: GAULAG
 USE MODE_FSCATTER,         ONLY: QEPSW,QEPSI,BHMIE,MOMG,MG
 USE MODE_GRIDPROJ
@@ -182,7 +184,6 @@ USE MODE_ll
 USE MODE_MSG
 !
 USE MODI_GAMMA,            ONLY: GAMMA
-USE MODI_TEMPORAL_DIST
 USE MODI_WATER_SUM
 !
 IMPLICIT NONE
@@ -402,15 +403,7 @@ ZYHATM(  IJU  )=1.5*PYHAT(  IJU  )-0.5*PYHAT(  IJU-1)
 !*      2.3  Compute time until launch by comparison of dates and times
 !            ----------------------------------------------------------
 !
-CALL TEMPORAL_DIST( TPDTCUR%TDATE%YEAR        , &
-                    TPDTCUR%TDATE%MONTH       , &
-                    TPDTCUR%TDATE%DAY         , &
-                    TPDTCUR%TIME              , &
-                    TPFLYER%LAUNCH%TDATE%YEAR , &
-                    TPFLYER%LAUNCH%TDATE%MONTH, &
-                    TPFLYER%LAUNCH%TDATE%DAY  , &
-                    TPFLYER%LAUNCH%TIME - .001, &
-                    ZTDIST                      )
+CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST)
 !
 !*      3.   LAUNCH
 !            ------
@@ -424,21 +417,12 @@ IF (.NOT. TPFLYER%FLY) THEN
 !*      3.1  comparison of dates and times
 !            -----------------------------
 !
-!  CALL TEMPORAL_DIST( TPDTCUR%TDATE%YEAR        , &
-!                     TPDTCUR%TDATE%MONTH       , &
-!                     TPDTCUR%TDATE%DAY         , &
-!                     TPDTCUR%TIME              , &
-!                     TPFLYER%LAUNCH%TDATE%YEAR , &
-!                     TPFLYER%LAUNCH%TDATE%MONTH, &
-!                     TPFLYER%LAUNCH%TDATE%DAY  , &
-!                     TPFLYER%LAUNCH%TIME - .001, &
-!                     ZTDIST                      )
-!
+!  CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST)
 !
 !*      3.2  launch/takeoff is effective
 !            ---------------------------
 !
-  IF (ZTDIST >= - PTSTEP .AND. ZTDIST /= XUNDEF ) THEN
+  IF (ZTDIST >= - PTSTEP ) THEN
     IF (TPFLYER%TYPE=='AIRCRA') THEN
 !
 !*     3.2.1 Determination of flight segment
@@ -523,9 +507,7 @@ END IF
 !
 IF (GSTORE) THEN
   IN = TPFLYER%N_CUR
-  CALL TEMPORAL_DIST(TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,TDTSEG%TDATE%DAY, &
-         TDTSEG%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY, &
-         TDTEXP%TIME,ZTIMEEXP)
+  CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP)
   !
   TPFLYER%TIME(IN) = (IN-1) * TPFLYER%STEP + ZTIMEEXP
   TPFLYER%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 73128f792..a3e7484c5 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -84,6 +84,8 @@
 !!  01/2018     (J.-P. Chaboureau) Add altitude interpolation
 !!  01/2018     (J.-P. Chaboureau) Add coarse graining
 !!  01/2018      (G.Delautier) SURFEX 8.1
+!!  03/2018     (P.Wautelet)   replace SUBTRACT_TO_DATE and ADD_FORECAST_TO_DATE
+!!                             by DATETIME_CORRECTDATE
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -130,6 +132,7 @@ USE MODD_TIME_n
 USE MODD_TURB_n
 USE MODD_VAR_ll
 !
+USE MODE_DATETIME
 USE MODE_FM
 USE MODE_FMREAD
 USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
@@ -519,14 +522,11 @@ IF ( LAIRCRAFT_BALLOON ) THEN
   WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE'
   WRITE(ILUOUT0,*) ' '
 !
-  TXDTBAL%TDATE%YEAR = TDTCUR%TDATE%YEAR
+  TXDTBAL%TDATE%YEAR  = TDTCUR%TDATE%YEAR
   TXDTBAL%TDATE%MONTH = TDTCUR%TDATE%MONTH
-  TXDTBAL%TDATE%DAY = TDTCUR%TDATE%DAY
-  TXDTBAL%TIME = TDTCUR%TIME - NTIME_AIRCRAFT_BALLOON/2.
-  CALL SUBTRACT_TO_DATE(TXDTBAL%TDATE%YEAR, &
-                          TXDTBAL%TDATE%MONTH,&
-                          TXDTBAL%TDATE%DAY,  &
-                          TXDTBAL%TIME        )
+  TXDTBAL%TDATE%DAY   = TDTCUR%TDATE%DAY
+  TXDTBAL%TIME        = TDTCUR%TIME - NTIME_AIRCRAFT_BALLOON/2.
+  CALL DATETIME_CORRECTDATE(TXDTBAL)
 !
   ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
   ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
@@ -545,10 +545,7 @@ IF ( LAIRCRAFT_BALLOON ) THEN
 !-----------------------------
 !
     TXDTBAL%TIME=TXDTBAL%TIME + XSTEP_AIRCRAFT_BALLOON
-    CALL ADD_FORECAST_TO_DATE(TXDTBAL%TDATE%YEAR, &
-                          TXDTBAL%TDATE%MONTH,&
-                          TXDTBAL%TDATE%DAY,  &
-                          TXDTBAL%TIME        )
+    CALL DATETIME_CORRECTDATE(TXDTBAL)
   ENDDO
   CALL IO_WRITE_HEADER(TZDIACFILE)
   CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE)
diff --git a/src/MNH/eddyUV_fluxn.f90 b/src/MNH/eddyUV_fluxn.f90
index 5ee01d390..2abed9300 100644
--- a/src/MNH/eddyUV_fluxn.f90
+++ b/src/MNH/eddyUV_fluxn.f90
@@ -99,7 +99,6 @@ USE MODI_SHUMAN
 USE MODE_GRIDPROJ
 USE MODI_MEAN_Z
 USE MODD_LUNIT_n
-USE MODI_TEMPORAL_DIST
 USE MODD_LATZ_EDFLX
 !
 USE MODE_MSG
diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90
index c7ebd7981..24df53fe4 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -148,11 +148,13 @@ END MODULE MODI_FORCING
 !!      06/2012  V. Masson            Adds tendency of geostrophic wind itself to wind tendency
 !!      01/2014  J. escobar           correction for // initialisation geostrophic ZUF,ZVF,ZWF 
 !!      09/2017 Q.Rodier add LTEND_UV_FRC
+!!      28/03/2018 P. Wautelet        Replace TEMPORAL_DIST by DATETIME_DISTANCE
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODE_DATETIME
 USE MODE_FM
 USE MODE_IO_ll
 USE MODE_MSG
@@ -169,7 +171,6 @@ USE MODD_CST
 USE MODI_SHUMAN
 USE MODI_UPSTREAM_Z
 USE MODI_TEMPORAL_LT
-USE MODI_TEMPORAL_DIST 
 USE MODI_BUDGET
 !
 USE MODI_GET_HALO
@@ -419,18 +420,10 @@ ELSE
     JXP= JSX +1
     WRITE(UNIT=ILUOUT0,FMT='(" THE FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX,JXP
-    CALL TEMPORAL_DIST ( TDTFRC(JXP)%TDATE%YEAR,TDTFRC(JXP)%TDATE%MONTH,   &
-                         TDTFRC(JXP)%TDATE%DAY ,TDTFRC(JXP)%TIME,          &
-                         TDTFRC(JSX)%TDATE%YEAR ,TDTFRC(JSX)%TDATE%MONTH,  &
-                         TDTFRC(JSX)%TDATE%DAY  ,TDTFRC(JSX)%TIME,         &
-                         ZSDTJX                                            )
+    CALL DATETIME_DISTANCE(TDTFRC(JSX),TDTFRC(JXP),ZSDTJX)
   END IF
 !
-  CALL TEMPORAL_DIST ( TPDTCUR%TDATE%YEAR   ,TPDTCUR%TDATE%MONTH,      &
-                       TPDTCUR%TDATE%DAY    ,TPDTCUR%TIME,             &
-                       TDTFRC(JSX)%TDATE%YEAR,TDTFRC(JSX)%TDATE%MONTH, &
-                       TDTFRC(JSX)%TDATE%DAY ,TDTFRC(JSX)%TIME,        &
-                       ZDT                                             )
+  CALL DATETIME_DISTANCE(TDTFRC(JSX),TPDTCUR,ZDT)
 !
   ZALPHA = ZDT / ZSDTJX
 !
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index ead62f435..032174db1 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -109,6 +109,7 @@ END MODULE MODI_GROUND_PARAM_n
 !!      (M.Leriche)            24/03/16 remove flag for chemical surface fluxes
 !!      (M.Leriche)           01/07/2017 Add DIAG chimical surface fluxes
 !!  01/2018      (G.Delautier) SURFEX 8.1
+!!     (P.Wautelet) 28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -154,6 +155,7 @@ USE MODI_COUPLING_SURF_ATM_n
 USE MODI_DIAG_SURF_ATM_n
 USE MODD_MNH_SURFEX_n
 !
+USE MODE_DATETIME
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 #ifdef MNH_FOREFIRE
@@ -165,7 +167,6 @@ USE MODI_COUPLING_FOREFIRE_n
 !
 USE MODD_TIME_n
 USE MODD_TIME
-USE MODI_TEMPORAL_DIST
 !
 USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC
 !
@@ -509,11 +510,7 @@ CALL RESHAPE_SURF(IDIM1D)
 !
 ! call to have the cumulated time since beginning of simulation
 !
-CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
-                       TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
-                       TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,               &
-                       TDTSEG%TDATE%DAY, TDTSEG%TIME,        &
-                       ZTIMEC)
+CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC)
 !
 ! Call to surface schemes
 !                       
diff --git a/src/MNH/ini_cpl.f90 b/src/MNH/ini_cpl.f90
index cd7d1cc67..16d9d956a 100644
--- a/src/MNH/ini_cpl.f90
+++ b/src/MNH/ini_cpl.f90
@@ -149,7 +149,7 @@ END MODULE MODI_INI_CPL
 !!      IO_FILE_CLOSE_ll : to close a FM-file
 !!      INI_LS      : to initialize larger scale fields
 !!      INI_LB      : to initialize "2D" surfacic LB fields 
-!!      TEMPORAL_DIST : compute the temporal distance in secunds between 2 dates
+!!      DATETIME_DISTANCE : compute the temporal distance in seconds between 2 dates
 !!
 !!      Module MODE_TIME : contains SM_PRINT_TIME routine
 !!                         and uses module MODD_TIME (for definition
@@ -212,6 +212,7 @@ END MODULE MODI_INI_CPL
 !!      Modification             05/2006  Remove KEPS
 !!                     (Escobar) 2/2014 add Forefire
 !!                     (J.Escobar) 26/03/2014 bug in init of NSV_USER on RESTA case
+!!                     (P.Wautelet)28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -230,6 +231,7 @@ USE MODD_TIME_n
 ! USE MODD_FOREFIRE_n
 ! #endif
 !
+USE MODE_DATETIME
 USE MODE_FM, ONLY: IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
 USE MODE_FMREAD
 USE MODE_IO_ll
@@ -240,7 +242,6 @@ USE MODE_TIME
 !
 USE MODI_INI_LS
 USE MODI_INI_LB
-USE MODI_TEMPORAL_DIST
 !
 IMPLICIT NONE
 !
@@ -358,13 +359,9 @@ DO JCI=1,NCPL_NBR
 !
 !*       2.2   Check chronological order
 !
-  CALL TEMPORAL_DIST(TDTCPL(JCI)%TDATE%YEAR,TDTCPL(JCI)%TDATE%MONTH,    &
-                     TDTCPL(JCI)%TDATE%DAY ,TDTCPL(JCI)%TIME,           &
-                     TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,              &
-                     TDTCUR%TDATE%DAY ,TDTCUR%TIME,                     &
-                     ZDIST                                              )
+  CALL DATETIME_DISTANCE(TDTCUR,TDTCPL(JCI),ZDIST)
   !
-  IF ( ZDIST == XUNDEF .OR. ZDIST ==0. ) THEN
+  IF ( ZDIST <=0. ) THEN
     WRITE(ILUOUT,FMT=9002) 1
     WRITE(ILUOUT,*) 'YOUR COUPLING FILE ',JCI,' IS PREVIOUS TO THE DATE &
                & CORRESPONDING TO THE BEGINNING OF THE SEGMENT. IT WILL &
@@ -379,13 +376,9 @@ DO JCI=1,NCPL_NBR
   END IF
   !
   IF (JCI > 1) THEN
-    CALL TEMPORAL_DIST(TDTCPL(JCI)%TDATE%YEAR,TDTCPL(JCI)%TDATE%MONTH,      &
-                       TDTCPL(JCI)%TDATE%DAY ,TDTCPL(JCI)%TIME,             &
-                       TDTCPL(JCI-1)%TDATE%YEAR,TDTCPL(JCI-1)%TDATE%MONTH,  &
-                       TDTCPL(JCI-1)%TDATE%DAY ,TDTCPL(JCI-1)%TIME,         &
-                       ZDIST                                                )
+    CALL DATETIME_DISTANCE(TDTCPL(JCI-1),TDTCPL(JCI),ZDIST)
     !
-    IF ( ZDIST == XUNDEF ) THEN
+    IF ( ZDIST < 0. ) THEN
       WRITE(ILUOUT,FMT=9003) 1
       WRITE(ILUOUT,*) 'YOU MUST SPECIFY THE COUPLING FILES IN A CHRONOLOGICAL &
                        & ORDER'
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index df8192de1..18161ac06 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -394,9 +394,7 @@ USE MODI_CH_AER_MOD_INIT
 USE MODD_PARAM_n
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll
-
-USE MODI_TEMPORAL_DIST
-
+!
 USE MODI_INI_AEROSET1
 USE MODI_INI_AEROSET2
 USE MODI_INI_AEROSET3
diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90
index ba1dab2cd..d823d9efa 100644
--- a/src/MNH/ini_spectren.f90
+++ b/src/MNH/ini_spectren.f90
@@ -125,7 +125,6 @@ USE MODI_GET_SIZEY_LB
 USE MODI_SET_GRID
 USE MODI_METRICS
 USE MODI_SET_REF
-USE MODI_TEMPORAL_DIST
 USE MODI_UPDATE_METRICS
 USE MODI_UPDATE_NSV
 !
diff --git a/src/MNH/init_ground_paramn.f90 b/src/MNH/init_ground_paramn.f90
index d69587347..4aad8bbd0 100644
--- a/src/MNH/init_ground_paramn.f90
+++ b/src/MNH/init_ground_paramn.f90
@@ -69,14 +69,16 @@ END MODULE MODI_INIT_GROUND_PARAM_n
 !!      Nov.  2010  (J.Escobar) PGI BUG , add SIZE(CSV) to interface
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  01/2018      (G.Delautier) SURFEX 8.1
+!!  03/2018     (P.Wautelet)   replace ADD_FORECAST_TO_DATE_SURF by DATETIME_CORRECTDATE
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
+USE MODE_DATETIME
 USE MODE_IO_ll
 USE MODE_FIELD
+USE MODE_ll
 !
 USE MODD_DYN_n,      ONLY : NSTOP, XTSTEP
 USE MODD_REF_n,      ONLY : XRHODREF
@@ -87,11 +89,10 @@ USE MODD_SALT,       ONLY : CSALTNAMES
 USE MODD_CH_AEROSOL, ONLY : CAERONAMES
 USE MODD_TYPE_DATE,  ONLY : DATE_TIME
 !
-USE MODD_TYPE_DATE_SURF, ONLY : DATE
+USE MODD_TYPE_DATE_SURF, ONLY : DATE_SURF=>DATE
 !
 USE MODD_PARAMETERS, ONLY : XUNDEF, JPVEXT
 !
-USE MODI_ADD_FORECAST_TO_DATE_SURF
 USE MODI_INIT_SURF_ATM_N
 !
 USE MODD_MNH_SURFEX_n 
@@ -127,7 +128,7 @@ REAL, DIMENSION(:),    ALLOCATABLE :: ZEMIS     ! emissivity
 REAL, DIMENSION(:),    ALLOCATABLE :: ZTSRAD    ! radiative temperature
 REAL, DIMENSION(:),    ALLOCATABLE :: ZTSURF
 !
-TYPE(DATE) :: TDATE_END
+TYPE(DATE_SURF) :: TDATE_END
 !
 REAL :: ZDURATION
 !
@@ -143,6 +144,7 @@ INTEGER :: JLAYER! loop index
 INTEGER :: ISV
 INTEGER :: IID,IRESP
 TYPE (DATE_TIME), POINTER :: TZTCUR=>NULL()
+TYPE (DATE_TIME)          :: TZDATE
 !
 !-------------------------------------------------------------------------------
 !
@@ -185,11 +187,13 @@ END DO
 CALL FIND_FIELD_ID_FROM_MNHNAME('DTCUR',IID,IRESP)
 TZTCUR=>TFIELDLIST(IID)%TFIELD_T0D(1)%DATA
 !
-TDATE_END%YEAR  = TZTCUR%TDATE%YEAR
-TDATE_END%MONTH = TZTCUR%TDATE%MONTH
-TDATE_END%DAY   = TZTCUR%TDATE%DAY
-ZDURATION = NSTOP * XTSTEP + TZTCUR%TIME
- CALL ADD_FORECAST_TO_DATE_SURF(TDATE_END%YEAR, TDATE_END%MONTH, TDATE_END%DAY, ZDURATION)
+TZDATE = TZTCUR
+TZDATE%TIME = TZDATE%TIME + NSTOP * XTSTEP
+CALL DATETIME_CORRECTDATE(TZDATE)
+!Done field by field because TYPE(DATE) different in MesoNH and SURFEX
+TDATE_END%YEAR  = TZDATE%TDATE%YEAR
+TDATE_END%MONTH = TZDATE%TDATE%MONTH
+TDATE_END%DAY   = TZDATE%TDATE%DAY
 !
 ISV = SIZE(HSV)
 CALL INIT_SURF_ATM_n(YSURF_CUR,'MESONH',HINIT,.FALSE.,                  &
diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90
index 9852c2aa2..e39b0fde5 100644
--- a/src/MNH/mnh2lpdm_ini.f90
+++ b/src/MNH/mnh2lpdm_ini.f90
@@ -38,16 +38,16 @@ USE MODD_PARAMETERS
 USE MODD_TIME
 USE MODD_TIME_n
 !
+USE MODE_DATETIME
 USE MODE_FM
 USE MODE_FMREAD
 USE MODE_GRIDPROJ
 USE MODE_IO_ll
 USE MODE_MODELN_HANDLER
-USE MODI_XYTOLATLON
 !
 USE MODI_INI_CST
 USE MODI_READ_HGRID
-USE MODI_TEMPORAL_DIST
+USE MODI_XYTOLATLON
 !
 !*	0.2 Arguments.
 !
@@ -108,12 +108,8 @@ CALL IO_READ_FIELD(TPFILE1,'DTEXP',TZDTEXP1)
 CALL IO_READ_FIELD(TPFILE1,'DTCUR',TZDTCUR1)
 CALL IO_READ_FIELD(TPFILE2,'DTCUR',TZDTCUR2)
 !
-CALL TEMPORAL_DIST(TZDTCUR1%TDATE%YEAR,TZDTCUR1%TDATE%MONTH,TZDTCUR1%TDATE%DAY,TZDTCUR1%TIME, &
-                   TZDTEXP1%TDATE%YEAR,TZDTEXP1%TDATE%MONTH,TZDTEXP1%TDATE%DAY,TZDTEXP1%TIME, &
-                   ZECHEANCE1)
-CALL TEMPORAL_DIST(TZDTCUR2%TDATE%YEAR,TZDTCUR2%TDATE%MONTH,TZDTCUR2%TDATE%DAY,TZDTCUR2%TIME, &
-                   TZDTEXP1%TDATE%YEAR,TZDTEXP1%TDATE%MONTH,TZDTEXP1%TDATE%DAY,TZDTEXP1%TIME, &
-                   ZECHEANCE2)
+CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR1,ZECHEANCE1)
+CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR2,ZECHEANCE2)
 !
 IHHMDL=INT(TZDTEXP1%TIME/3600)
 IMNMDL=INT((TZDTEXP1%TIME-IHHMDL*3600)/60)
diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index cf635b445..3bc56607d 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -605,8 +605,13 @@ SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG)
 !
 ! this routine computes time averaging
 !
+! Modifications:
+!  03/2018     (P.Wautelet)   replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE
+!
 USE MODD_LES
-USE MODI_ADD_FORECAST_TO_DATE
+USE MODD_TYPE_DATE
+!
+USE MODE_DATETIME
 !
 IMPLICIT NONE
 !
@@ -628,10 +633,7 @@ INTEGER :: JSV                           ! scalar loop counter
 INTEGER :: JX                            ! first  spatial or spectral coordinate loop counter
 INTEGER :: JY                            ! second spatial or spectral coordinate loop counter
 REAL, DIMENSION(16)  :: ZDATIME_SAVE ! date
-INTEGER :: IYEAR,IMONTH,IDAY
-REAL :: ZTIME,ZTIME2
-INTEGER :: JDAY
-INTEGER :: JJ
+TYPE(DATE_TIME) :: TZDATE
 !------------------------------------------------------------------------------
 !
 IF (     XLES_TEMP_MEAN_END==XUNDEF   &
@@ -703,23 +705,15 @@ DO JAVG=1,IAVG
     END DO
   END DO
   PTRAJT(JAVG,1)=(ZLES_TEMP_MEAN_START+ZLES_TEMP_MEAN_END)/2.
-  IYEAR=PDATIME_AVG(5,JAVG)
-  IMONTH=PDATIME_AVG(6,JAVG)
-  IDAY=PDATIME_AVG(7,JAVG)
-  ZTIME=PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1)
-  JDAY=NINT(ZTIME/86400.)
-  IF (JDAY .GT. 0) THEN
-    DO JJ=1,JDAY 
-      ZTIME2=86400.
-      CALL ADD_FORECAST_TO_DATE(IYEAR,IMONTH,IDAY,ZTIME2)
-      ZTIME=ZTIME-ZTIME2
-    ENDDO
-  ENDIF
-  CALL ADD_FORECAST_TO_DATE(IYEAR,IMONTH,IDAY,ZTIME)
-  PDATIME_AVG(13,JAVG)=IYEAR
-  PDATIME_AVG(14,JAVG)=IMONTH
-  PDATIME_AVG(15,JAVG)=IDAY
-  PDATIME_AVG(16,JAVG)=ZTIME
+  TZDATE%TDATE%YEAR  = PDATIME_AVG(5,JAVG)
+  TZDATE%TDATE%MONTH = PDATIME_AVG(6,JAVG)
+  TZDATE%TDATE%DAY   = PDATIME_AVG(7,JAVG)
+  TZDATE%TIME        = PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1)
+  CALL DATETIME_CORRECTDATE(TZDATE)
+  PDATIME_AVG(13,JAVG) = TZDATE%TDATE%YEAR
+  PDATIME_AVG(14,JAVG) = TZDATE%TDATE%MONTH
+  PDATIME_AVG(15,JAVG) = TZDATE%TDATE%DAY
+  PDATIME_AVG(16,JAVG) = TZDATE%TIME
 END DO
 !
 DEALLOCATE(PWORK6)
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index b5abff18f..0217a48ea 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -93,7 +93,7 @@ END MODULE MODI_MODEL_n
 !!                                 couple Model_n with outer informations.
 !!      Subroutine ENDSTEP_BUDGET: writes the budget informations.
 !!      Subroutine IO_FILE_CLOSE_ll: closes a file
-!!      Subroutine ADD_FORECAST_TO_DATE : transform the current time in GMT
+!!      Subroutine DATETIME_CORRECTDATE: transform the current time in GMT
 !!      Subroutine FORCING : computes forcing terms
 !!      Subroutine ADD3DFIELD_ll : add a field to 3D-list
 !!
@@ -249,6 +249,7 @@ END MODULE MODI_MODEL_n
 !!                   10/2017 (C.Lac) Necessity to have chemistry processes as
 !!                            the las process modifying XRSVS
 !!  01/2018      (G.Delautier) SURFEX 8.1
+!!  03/2018     (P.Wautelet)   replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -328,6 +329,7 @@ USE MODD_TIMEZ
 USE MODD_TURB_CLOUD,     ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI
 USE MODD_TURB_n
 !
+USE MODE_DATETIME
 USE MODE_ELEC_ll
 USE MODE_FM
 USE MODE_GRIDCART         
@@ -340,7 +342,6 @@ USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
 USE MODE_NETCDF
 !
-USE MODI_ADD_FORECAST_TO_DATE
 USE MODI_ADVECTION_METSV
 USE MODI_ADVECTION_UVW     
 USE MODI_ADVECTION_UVW_CEN 
@@ -393,7 +394,6 @@ USE MODI_SET_MASK
 USE MODI_SHUMAN
 USE MODI_SPAWN_LS_n
 USE MODI_STATION_n
-USE MODI_TEMPORAL_DIST
 USE MODI_TURB_CLOUD_INDEX
 USE MODI_TWO_WAY
 USE MODI_UPDATE_NSV
@@ -2010,10 +2010,7 @@ END IF
 !               --------------------
 !
 TDTCUR%TIME=TDTCUR%TIME + XTSTEP
-CALL ADD_FORECAST_TO_DATE(TDTCUR%TDATE%YEAR, &
-                          TDTCUR%TDATE%MONTH,&
-                          TDTCUR%TDATE%DAY,  &
-                          TDTCUR%TIME        )
+CALL DATETIME_CORRECTDATE(TDTCUR)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90
index 1943911dd..35d02ea58 100644
--- a/src/MNH/paspol.f90
+++ b/src/MNH/paspol.f90
@@ -57,6 +57,7 @@ END MODULE MODI_PASPOL
 !!                            GET_INDICE_ll replaced by GET_PHYSICAL_ll +
 !!                            remove the diffusion at the release 
 !!    C.Lac 11/11 Remove instant M
+!!    P.Wautelet 28/03/2018 Replace TEMPORAL_DIST by DATETIME_DISTANCE
 !! --------------------------------------------------------------------------
 !       
 !!    EXTERNAL
@@ -88,7 +89,9 @@ USE MODD_PASPOL_n
 USE MODD_GRID_n
 USE MODD_TIME_n
 USE MODD_SUB_PASPOL_n
+USE MODD_TYPE_DATE
 !
+USE MODE_DATETIME
 USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
 !
 !*      0. DECLARATIONS
@@ -114,12 +117,12 @@ INTEGER :: IIB,IIE,IJB,IJE             !intersection of the physical global doma
 INTEGER :: IKB, IKE
 INTEGER :: IIU, IJU, IKU               ! dimensional indexes
 INTEGER :: JK ! Loop indice
-INTEGER :: IYYCUR,IMMCUR,IDDCUR,JSV,IBOT,ITOP,II,IJ,IP
+INTEGER :: JSV,IBOT,ITOP,II,IJ,IP
 REAL    :: ZSRCX,ZSRCY,ZSRCI,ZSRCJ,ZTOP,ZGROUND,ZX,ZY,ZSOMME
 INTEGER :: I1YY,I1MM,I1DD,I1HH,I1MN,I1SS,I2YY,I2MM,I2DD,I2HH,I2MN,I2SS
 INTEGER :: I3YY,I3MM,I3DD,I3HH,I3MN,I3SS,I4YY,I4MM,I4DD,I4HH,I4MN,I4SS
 REAL    :: Z1SEC,Z2SEC,Z3SEC,Z4SEC,ZT1,ZT2,ZT3,ZT4
-REAL    :: ZCBOT,ZCTOP,ZEPAIS,ZENBAS,ZENHAUT,ZSSCUR,ZDEPUIS,ZRATE
+REAL    :: ZCBOT,ZCTOP,ZEPAIS,ZENBAS,ZENHAUT,ZDEPUIS,ZRATE
 !
 REAL    :: ZSURF  ! Surface of a grid box            
 !
@@ -139,6 +142,7 @@ REAL    :: ZP, ZTH, ZT, ZRHO, ZMASAIR
 REAL,  DIMENSION(:,:,:), ALLOCATABLE :: ZRHOM  ! 
 REAL,  DIMENSION(:,:,:), ALLOCATABLE :: ZTEMPO, ZSVT ! Work arrays
 !
+TYPE(DATE_TIME)   :: TZDATE1,TZDATE2,TZDATE3,TZDATE4,TZDATE
 TYPE(TFIELDDATA)  :: TZFIELD
 !
 !
@@ -318,9 +322,13 @@ IF (GPPFIRSTCALL) THEN
          ! Chrono relative au debut du rejet en secondes.
          !
          ZT1=0.
-         CALL TEMPORAL_DIST(I2YY,I2MM,I2DD,Z2SEC,I1YY,I1MM,I1DD,Z1SEC,ZT2)
-         CALL TEMPORAL_DIST(I3YY,I3MM,I3DD,Z3SEC,I1YY,I1MM,I1DD,Z1SEC,ZT3)
-         CALL TEMPORAL_DIST(I4YY,I4MM,I4DD,Z4SEC,I1YY,I1MM,I1DD,Z1SEC,ZT4)
+         TZDATE1%TDATE%YEAR=I1YY;TZDATE1%TDATE%MONTH=I1MM;TZDATE1%TDATE%DAY=I1DD;TZDATE1%TIME=Z1SEC
+         TZDATE2%TDATE%YEAR=I2YY;TZDATE2%TDATE%MONTH=I2MM;TZDATE2%TDATE%DAY=I2DD;TZDATE2%TIME=Z2SEC
+         TZDATE3%TDATE%YEAR=I3YY;TZDATE3%TDATE%MONTH=I3MM;TZDATE3%TDATE%DAY=I3DD;TZDATE3%TIME=Z3SEC
+         TZDATE4%TDATE%YEAR=I4YY;TZDATE4%TDATE%MONTH=I4MM;TZDATE4%TDATE%DAY=I4DD;TZDATE4%TIME=Z4SEC
+         CALL DATETIME_DISTANCE(TZDATE1,TZDATE2,ZT2)
+         CALL DATETIME_DISTANCE(TZDATE1,TZDATE3,ZT3)
+         CALL DATETIME_DISTANCE(TZDATE1,TZDATE4,ZT4)
          !
          ! On met de cote le debut du rejet sous forme pratique ainsi
          ! que la chronologie relative.
@@ -444,12 +452,6 @@ ENDIF
 !
 !*	2.1 Date-heure courante sous forme plus pratique.
 !
-IYYCUR=TDTCUR%TDATE%YEAR
-IMMCUR=TDTCUR%TDATE%MONTH
-IDDCUR=TDTCUR%TDATE%DAY
-ZSSCUR=TDTCUR%TIME
-!
-!
 WHERE (XSVT(:,:,:,NSV_PPBEG:NSV_PPEND) <0.0) &
         XSVT(:,:,:,NSV_PPBEG:NSV_PPEND)=0.0
 !
@@ -465,8 +467,8 @@ DO JSV=1,NSV_PP
       !
       !*	2.2 Distance temporelle DEPUIS le debut de rejet.
       !
-      CALL TEMPORAL_DIST(IYYCUR,IMMCUR,IDDCUR,ZSSCUR, &
-           IDEBYY(JSV),IDEBMM(JSV),IDEBDD(JSV),ZDEBSS(JSV),ZDEPUIS)
+      TZDATE%TDATE%YEAR=IDEBYY(JSV);TZDATE%TDATE%MONTH=IDEBMM(JSV);TZDATE%TDATE%DAY=IDEBDD(JSV);TZDATE%TIME=ZDEBSS(JSV)
+      CALL DATETIME_DISTANCE(TZDATE,TDTCUR,ZDEPUIS)
       !
       !
       !* 2.3 Si la source emet.
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 400f590f7..781dddfee 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -229,11 +229,13 @@ END MODULE MODI_PHYS_PARAM_n
 !!      M. Leriche 02/2017 Avoid negative fluxes if sv=0 outside the physics domain
 !!      C.Lac  10/2017 : ch_monitor and aer_monitor extracted from phys_param
 !!                       to be called directly by modeln as the last process 
+!!     28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
 !    
+USE MODE_DATETIME
 USE MODE_ll
 USE MODE_FM
 USE MODE_FMWRIT
@@ -296,7 +298,6 @@ USE MODI_TURB
 USE MODI_SUNPOS_n
 USE MODI_RADIATIONS
 USE MODI_CONVECTION
-USE MODI_TEMPORAL_DIST
 USE MODI_BUDGET
 USE MODI_PASPOL
 USE MODI_CONDSAMP
@@ -588,11 +589,7 @@ IF (CRAD /='NONE') THEN
 !  test to see if the partial radiations for cloudy must be called
 !
   IF (CRAD =='ECMW') THEN
-    CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
-                       TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
-                       TDTRAD_CLONLY%TDATE%YEAR,TDTRAD_CLONLY%TDATE%MONTH, &
-                       TDTRAD_CLONLY%TDATE%DAY, TDTRAD_CLONLY%TIME,        &
-                       ZTEMP_DIST)
+    CALL DATETIME_DISTANCE(TDTRAD_CLONLY,TDTCUR,ZTEMP_DIST)
     IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD_CLONLY/XTSTEP))==0 ) THEN
       TDTRAD_CLONLY = TDTCUR
       GRAD = .TRUE.
@@ -602,11 +599,7 @@ IF (CRAD /='NONE') THEN
 !   
 ! test to see if the full radiations must be called
 !   
-  CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
-                     TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
-                     TDTRAD_FULL%TDATE%YEAR,TDTRAD_FULL%TDATE%MONTH,     &
-                     TDTRAD_FULL%TDATE%DAY, TDTRAD_FULL%TIME,            &
-                     ZTEMP_DIST)
+  CALL DATETIME_DISTANCE(TDTCUR,TDTRAD_FULL,ZTEMP_DIST)
   IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD/XTSTEP))==0 ) THEN
     TDTRAD_FULL = TDTCUR
     GRAD = .TRUE.
@@ -818,11 +811,7 @@ IF( CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' ) THEN
 !
   GDCONV = .FALSE.
 !
-  CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,         &
-                     TDTCUR%TDATE%DAY, TDTCUR%TIME,                &
-                     TDTDCONV%TDATE%YEAR,TDTDCONV%TDATE%MONTH,     &
-                     TDTDCONV%TDATE%DAY, TDTDCONV%TIME,            &
-                     ZTEMP_DIST)
+  CALL DATETIME_DISTANCE(TDTDCONV,TDTCUR,ZTEMP_DIST)
   IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTCONV/XTSTEP))==0 ) THEN
     TDTDCONV = TDTCUR
     GDCONV   = .TRUE.
diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90
index 041e1f2a1..f5c90341b 100644
--- a/src/MNH/profilern.f90
+++ b/src/MNH/profilern.f90
@@ -93,7 +93,7 @@ END MODULE MODI_PROFILER_n
 !!     March 2013 : C.Lac : Corrections for 1D + new fields (RARE,THV,DD,FF)
 !!     April 2014 : C.Lac : Call RADAR only if ICE3   
 !!     C.Lac 10/2016  Add visibility diagnostic
-!!
+!!     March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -111,10 +111,10 @@ USE MODD_DIAG_IN_RUN
 USE MODD_CONF
 USE MODD_NSV
 !
+USE MODE_DATETIME
 USE MODE_ll
 !
 USE MODI_WATER_SUM
-USE MODI_TEMPORAL_DIST
 USE MODI_RADAR_RAIN_ICE
 USE MODI_LIDAR
 USE MODI_WATER_SUM
@@ -261,9 +261,7 @@ IF ( TPROFILER%T_CUR == XUNDEF ) TPROFILER%T_CUR = TPROFILER%STEP - PTSTEP
 !
 TPROFILER%T_CUR = TPROFILER%T_CUR + PTSTEP
 !
-CALL TEMPORAL_DIST(TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,TDTSEG%TDATE%DAY, &
-         TDTSEG%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY,&
-         TDTEXP%TIME,ZTIMEEXP)
+CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP)
 IF ( TPROFILER%T_CUR >= TPROFILER%STEP - 1.E-10 ) THEN
   GSTORE = .TRUE.
   TPROFILER%T_CUR = TPROFILER%T_CUR - TPROFILER%STEP
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 70a16b2c2..e3d2c0340 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -129,18 +129,19 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !!                  08/06/2010 (G. Tanguy) replace GRIBEX by GRIB_API : change
 !!                                         of all the subroutine
 !!                  05/12/2016 (G.Delautier) length of HGRID for grib_api > 1.14
+!!                  08/03/2018 (P.Wautelet)  replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !------------
 !
+USE MODE_DATETIME
 USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
 USE MODE_IO_ll, ONLY: UPCASE
 USE MODE_MSG
 USE MODE_TIME
 USE MODE_THERMO
 !
-USE MODI_ADD_FORECAST_TO_DATE
 USE MODI_READ_HGRID_n
 USE MODI_READ_VER_GRID
 USE MODI_XYTOLATLON
@@ -1386,10 +1387,7 @@ SELECT CASE (CSTEPUNIT)       ! Time unit indicator
    CASE DEFAULT
     WRITE (ILUOUT0,'(A,A,A)') ' | error CSTEPUNIT=',CSTEPUNIT, ' is different of s,m or h'
 END SELECT
-CALL ADD_FORECAST_TO_DATE(TPTCUR%TDATE%YEAR, &
-                          TPTCUR%TDATE%MONTH,&
-                          TPTCUR%TDATE%DAY,  &
-                          TPTCUR%TIME        )
+CALL DATETIME_CORRECTDATE(TPTCUR)
 IF (HFILE(1:3)=='ATM') THEN
   CALL SM_PRINT_TIME(TPTCUR,TLUOUT0,'MESONH current date')
   TDTCUR = TPTCUR
diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90
index b63eb705e..7685fc3c6 100644
--- a/src/MNH/rel_forcingn.f90
+++ b/src/MNH/rel_forcingn.f90
@@ -89,7 +89,8 @@ END MODULE MODI_REL_FORCING_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    08/11/10 
+!!      Original    08/11/10
+!!     28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!
 !-------------------------------------------------------------------------------
 !
@@ -104,11 +105,11 @@ USE MODD_PARAMETERS
 USE MODD_RELFRC_n     ! Modules for time evolving advfrc
 USE MODD_TIME
 !
+USE MODE_DATETIME
 USE MODE_IO_ll
 !
 USE MODI_BUDGET
 USE MODI_SHUMAN
-USE MODI_TEMPORAL_DIST 
 USE MODI_TEMPORAL_LT
 !
 IMPLICIT NONE
@@ -204,18 +205,10 @@ ELSE
     ILUOUT0 = TLUOUT0%NLU
     WRITE(UNIT=ILUOUT0,FMT='(" THE REL FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX_REL,JXP
-    CALL TEMPORAL_DIST ( TDTRELFRC(JXP)%TDATE%YEAR,TDTRELFRC(JXP)%TDATE%MONTH,   &
-                         TDTRELFRC(JXP)%TDATE%DAY ,TDTRELFRC(JXP)%TIME,          &
-                         TDTRELFRC(JSX_REL)%TDATE%YEAR ,TDTRELFRC(JSX_REL)%TDATE%MONTH,  &
-                         TDTRELFRC(JSX_REL)%TDATE%DAY  ,TDTRELFRC(JSX_REL)%TIME,         &
-                         ZSDTJX                                            )
+    CALL DATETIME_DISTANCE(TDTRELFRC(JSX_REL),TDTRELFRC(JXP),ZSDTJX)
   END IF
 !
-  CALL TEMPORAL_DIST ( TPDTCUR%TDATE%YEAR   ,TPDTCUR%TDATE%MONTH,      &
-                       TPDTCUR%TDATE%DAY    ,TPDTCUR%TIME,             &
-                       TDTRELFRC(JSX_REL)%TDATE%YEAR,TDTRELFRC(JSX_REL)%TDATE%MONTH, &
-                       TDTRELFRC(JSX_REL)%TDATE%DAY ,TDTRELFRC(JSX_REL)%TIME,        &
-                       ZDT                                             )
+  CALL DATETIME_DISTANCE(TDTRELFRC(JSX_REL),TPDTCUR,ZDT)
 !
   ZALPHA = ZDT / ZSDTJX
 !
diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90
index 8a672ef38..455cb1c7c 100644
--- a/src/MNH/seriesn.f90
+++ b/src/MNH/seriesn.f90
@@ -43,6 +43,7 @@
 !!         Oct. 2011 : (P.Le Moigne) Surface series
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  01/2018      (G.Delautier) SURFEX 8.1
+!!  03/2018     (P.Wautelet)   replace TEMPORAL_DIST by DATETIME_DISTANCE
 !-------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -65,11 +66,11 @@ USE MODD_TIME_n, ONLY: TDTCUR
 ! SURFACE FIELDS
 USE MODI_GET_SURF_VAR_n
 !
-USE MODE_ll
+USE MODE_DATETIME
 USE MODE_IO_ll
+USE MODE_ll
 USE MODE_MSG
 !
-USE MODI_TEMPORAL_DIST
 USE MODD_MNH_SURFEX_n
 !
 IMPLICIT NONE
@@ -174,9 +175,7 @@ NSCOUNTD=NSCOUNTD+1
 !
 TZDTCUR=TDTCUR
 !
-CALL TEMPORAL_DIST(TZDTCUR%TDATE%YEAR,TZDTCUR%TDATE%MONTH,TZDTCUR%TDATE%DAY, &
-       TZDTCUR%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY, &
-       TDTEXP%TIME,XSTRAJT(NSCOUNTD,1))
+CALL DATETIME_DISTANCE(TDTEXP,TZDTCUR,XSTRAJT(NSCOUNTD,1))
 XSDATIME(13,NSCOUNTD)= TZDTCUR%TDATE%YEAR
 XSDATIME(14,NSCOUNTD)= TZDTCUR%TDATE%MONTH
 XSDATIME(15,NSCOUNTD)= TZDTCUR%TDATE%DAY
diff --git a/src/MNH/setlb_lg.f90 b/src/MNH/setlb_lg.f90
index d5a8f0f0f..1227d7518 100644
--- a/src/MNH/setlb_lg.f90
+++ b/src/MNH/setlb_lg.f90
@@ -48,6 +48,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original        22/06/01
+!!     28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -62,8 +63,8 @@ USE MODD_GRID_n
 USE MODD_LG
 USE MODD_NSV,         ONLY : NSV_LGBEG,NSV_LGEND
 !
+USE MODE_DATETIME
 USE MODE_ll
-USE MODI_TEMPORAL_DIST
 !
 IMPLICIT NONE
 !
@@ -81,11 +82,7 @@ REAL         :: ZTEMP_DIST  ! time from the begining of simulation
 CALL GET_DIM_EXT_ll('B',IIU,IJU)
 IKU=SIZE(XZZ,3)
 !
-CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,               &
-                   TDTCUR%TDATE%DAY, TDTCUR%TIME,                      &
-                   TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,               &
-                   TDTEXP%TDATE%DAY, TDTEXP%TIME,                      &
-                   ZTEMP_DIST)
+CALL DATETIME_DISTANCE(TDTEXP,TDTCUR,ZTEMP_DIST)
 !
 IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN
   DO JK=1,IKU
diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90
index 27b5a9645..2c7d26fd4 100644
--- a/src/MNH/stationn.f90
+++ b/src/MNH/stationn.f90
@@ -89,6 +89,7 @@ END MODULE MODI_STATION_n
 !!     P.Aumond 01/07/2011 : Add model levels
 !!     C.Lac       04/2013 : Correction on the vertical levels
 !!     C.Lac       04/2013 : Add I/J positioning                   
+!!     P.Wautelet 28/03/2018 : Replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -105,10 +106,10 @@ USE MODD_GRID
 USE MODD_TIME
 USE MODD_CONF
 !
+USE MODE_DATETIME
 USE MODE_ll
 !
 USE MODI_WATER_SUM
-USE MODI_TEMPORAL_DIST
 !
 !
 !
@@ -202,9 +203,7 @@ IF ( TSTATION%T_CUR == XUNDEF ) TSTATION%T_CUR = TSTATION%STEP - PTSTEP
 !
 TSTATION%T_CUR = TSTATION%T_CUR + PTSTEP
 !
-CALL TEMPORAL_DIST(TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,TDTSEG%TDATE%DAY,  &
-     TDTSEG%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY,&
-         TDTEXP%TIME,ZTIMEEXP)
+CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP)
 IF ( TSTATION%T_CUR >= TSTATION%STEP - 1.E-10 ) THEN
      GSTORE = .TRUE.
      TSTATION%T_CUR = TSTATION%T_CUR - TSTATION%STEP
diff --git a/src/MNH/subtract_to_date.f90 b/src/MNH/subtract_to_date.f90
deleted file mode 100644
index 736c1e592..000000000
--- a/src/MNH/subtract_to_date.f90
+++ /dev/null
@@ -1,136 +0,0 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 balloon 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ################################
-      MODULE MODI_SUBTRACT_TO_DATE
-!     ################################
-INTERFACE
-      SUBROUTINE SUBTRACT_TO_DATE(KYEAR,KMONTH,KDAY,PSEC)
-!
-INTEGER, INTENT(INOUT) :: KYEAR  ! year of date
-INTEGER, INTENT(INOUT) :: KMONTH ! month of date
-INTEGER, INTENT(INOUT) :: KDAY   ! day of date
-REAL,    INTENT(INOUT) :: PSEC   ! number of seconds since date at 00 UTC
-                                 ! negative or positive
-!
-END SUBROUTINE SUBTRACT_TO_DATE
-END INTERFACE
-END MODULE MODI_SUBTRACT_TO_DATE
-!
-!     #######################################################
-      SUBROUTINE SUBTRACT_TO_DATE(KYEAR,KMONTH,KDAY,PSEC)
-!     #######################################################
-!
-!!****  *SUBTRACT_TO_DATE* - finds the current date and hour from a date
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!                                WARNING
-!!
-!!      -----> Only correct for dates between 19900301 and 21000228   <-----
-!!
-!!  The correct test should be:
-!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN
-!!
-!!**  METHOD
-!!    ------
-!!
-!!      A recursive method is used, removing one day ofter the other.
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    Book 2 (add_forecast_to_date)
-!!
-!!    AUTHOR
-!!    ------
-!!	
-!     G.Jaubert Meteo-France (from add_forecast_to_date)
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    23/07/01
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-IMPLICIT NONE
-!
-!*       0.1   Declaration of arguments
-!              ------------------------
-INTEGER, INTENT(INOUT) :: KYEAR  ! year of date
-INTEGER, INTENT(INOUT) :: KMONTH ! month of date
-INTEGER, INTENT(INOUT) :: KDAY   ! day of date
-REAL,    INTENT(INOUT) :: PSEC   ! number of seconds since date at 00 UTC
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.    Return condition: PSEC >0
-!              -------------------------
-!
-DO 
-  IF (PSEC >= 0.) EXIT
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.    remove one day
-!              --------------
-!
-  PSEC=PSEC+86400.
-!
-!
-!*       2.1   first day of the month
-!              ---------------------
-!
-  IF (KDAY==1) THEN
-    IF (KMONTH==1) THEN
-      KDAY=31
-      KMONTH=12
-      KYEAR=KYEAR-1
-    ELSE
-      KMONTH=KMONTH-1
-      SELECT CASE (KMONTH)
-        CASE(4,6,9,11)
-          KDAY=30
-        CASE(1,3,5,7:8,10,12)
-          KDAY=31
-        CASE(2)
-          IF (MOD(KYEAR,4)==0) THEN 
-            KDAY=29
-          ELSE
-            KDAY=28
-          ENDIF
-      END SELECT
-    ENDIF
-! 
-!*       2.2   Other days
-!              ----------
-  ELSE
-    KDAY=KDAY-1
-  ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-!*       3.    Recursive call
-!              --------------
-!
-ENDDO
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE SUBTRACT_TO_DATE
diff --git a/src/MNH/temporal_dist.f90 b/src/MNH/temporal_dist.f90
deleted file mode 100644
index 1061dadf4..000000000
--- a/src/MNH/temporal_dist.f90
+++ /dev/null
@@ -1,251 +0,0 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 operators 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     #########################
-      MODULE MODI_TEMPORAL_DIST
-!     #########################
-INTERFACE
-      SUBROUTINE TEMPORAL_DIST(KYEARF, KMONTHF, KDAYF, PSECF,     &
-                               KYEARI, KMONTHI, KDAYI, PSECI,     &
-                               PDIST                              )
-!
-INTEGER, INTENT(IN) :: KYEARF  ! year of Final date
-INTEGER, INTENT(IN) :: KMONTHF ! month of Final date
-INTEGER, INTENT(IN) :: KDAYF   ! day of Final date
-REAL,    INTENT(IN) :: PSECF   ! number of seconds since date at 00 UTC
-                               ! of Final date
-INTEGER, INTENT(IN) :: KYEARI  ! year of Initial date
-INTEGER, INTENT(IN) :: KMONTHI ! month of Initial date
-INTEGER, INTENT(IN) :: KDAYI   ! day of Initial date
-REAL,    INTENT(IN) :: PSECI   ! number of seconds since date at 00 UTC
-                               ! of Initial date
-REAL,    INTENT(OUT):: PDIST   ! temporal distance in secunds between the final 
-                               ! and initial date
-!
-END SUBROUTINE TEMPORAL_DIST 
-!
-END INTERFACE
-! 
-END MODULE MODI_TEMPORAL_DIST
-!
-!     #############################################################
-      SUBROUTINE TEMPORAL_DIST(KYEARF, KMONTHF, KDAYF, PSECF,     &
-                               KYEARI, KMONTHI, KDAYI, PSECI,     &
-                               PDIST                              )
-!     #############################################################
-!
-!!****  *TEMPORAL_DIST* - finds the number of secunds between 2 dates
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!                                WARNING
-!!
-!!      -----> Only correct for dates between 19900301 and 21000228   <-----
-!!
-!!  The correct test should be:
-!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN
-!!
-!!**  METHOD
-!!    ------
-!!
-!!      A comparison term by term of the elements of the 2 dates is performed.
-!!    and the temporal distance between the 2 dates is then deduced.
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    Book 2
-!!
-!!    AUTHOR
-!!    ------
-!!	
-!     J.Stein  Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!     06/08  P.Peyrille:  Add case for differents years and
-!!                         same month needed for more-than-1year simulations
-!!      Original    02/01/96
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS
-!
-IMPLICIT NONE
-!
-!*       0.1   Declaration of arguments
-!              ------------------------
-INTEGER, INTENT(IN) :: KYEARF  ! year of Final date
-INTEGER, INTENT(IN) :: KMONTHF ! month of Final date
-INTEGER, INTENT(IN) :: KDAYF   ! day of Final date
-REAL,    INTENT(IN) :: PSECF   ! number of seconds since date at 00 UTC
-                               ! of Final date
-INTEGER, INTENT(IN) :: KYEARI  ! year of Initial date
-INTEGER, INTENT(IN) :: KMONTHI ! month of Initial date
-INTEGER, INTENT(IN) :: KDAYI   ! day of Initial date
-REAL,    INTENT(IN) :: PSECI   ! number of seconds since date at 00 UTC
-                               ! of Initial date
-REAL,    INTENT(OUT):: PDIST   ! temporal distance in secunds between the final 
-                               ! and initial date
-!
-!*       0.2   Declaration of local variables
-!              ------------------------------
-!
-INTEGER :: IDAYS  ! number of days between the two dates
-INTEGER :: JMONTH,JYEAR ! loop index on months or years 
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.    SAME YEARS AND SAME MONTHS
-!              --------------------------
-!
-IF ( (KYEARF==KYEARI) .AND. (KMONTHF==KMONTHI) ) THEN
-  PDIST = ( KDAYF-KDAYI) * 86400. + PSECF - PSECI
-  ! check chronological order
-  IF (PDIST < 0.) PDIST=XUNDEF
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.    SAME YEARS AND DIFFERENT MONTHS
-!              -------------------------------
-!
-IF ( (KYEARF==KYEARI) .AND. (KMONTHF/=KMONTHI) ) THEN
-  ! check chronological order
-  IF ( KMONTHF < KMONTHI ) THEN
-    PDIST=XUNDEF
-    RETURN
-  END IF
-  !
-  ! cumulate the number of days for the months in between KMONTHF-1 and 
-  ! KMONTHI
-  IDAYS = 0
-  DO JMONTH = KMONTHI, KMONTHF-1
-    SELECT CASE (JMONTH)
-      CASE(4,6,9,11)
-        IDAYS=IDAYS+30
-      CASE(1,3,5,7:8,10,12)
-        IDAYS=IDAYS+31
-      CASE(2)
-        IF (MOD(KYEARI,4)==0) THEN 
-          IDAYS=IDAYS+29
-        ELSE
-          IDAYS=IDAYS+28
-        ENDIF
-    END SELECT
-  END DO  
-  !
-  ! compute the temporal distance
-  PDIST = ( IDAYS + KDAYF - KDAYI) * 86400. + PSECF - PSECI
-  !
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*       3.    DIFFERENT YEARS AND DIFFERENT MONTHS
-!              ------------------------------------
-!
-IF ( (KYEARF/=KYEARI) .AND. (KMONTHF/=KMONTHI) ) THEN
-  ! check chronological order
-  IF ( KYEARF < KYEARI ) THEN
-    PDIST=XUNDEF
-    RETURN
-  END IF
-  !
-  ! cumulate the number of days for the months in between KMONTHI and 
-  ! December
-  IDAYS = 0
-  DO JMONTH = KMONTHI, 12
-    SELECT CASE (JMONTH)
-      CASE(4,6,9,11)
-        IDAYS=IDAYS+30
-      CASE(1,3,5,7:8,10,12)
-        IDAYS=IDAYS+31
-      CASE(2)
-        IF (MOD(KYEARI,4)==0) THEN 
-          IDAYS=IDAYS+29
-        ELSE
-          IDAYS=IDAYS+28
-        ENDIF
-    END SELECT
-  END DO  
-  DO JMONTH = 1,KMONTHF-1
-    SELECT CASE (JMONTH)
-      CASE(4,6,9,11)
-        IDAYS=IDAYS+30
-      CASE(1,3,5,7:8,10,12)
-        IDAYS=IDAYS+31
-      CASE(2)
-        IF (MOD(KYEARF,4)==0) THEN 
-          IDAYS=IDAYS+29
-        ELSE
-          IDAYS=IDAYS+28
-        ENDIF
-    END SELECT
-  END DO  
-  ! add the number of days corresponding to full years between the two dates
-  DO JYEAR=KYEARI+1, KYEARF-1
-    IF (MOD(JYEAR,4)==0) THEN 
-      IDAYS=IDAYS+366
-    ELSE
-      IDAYS=IDAYS+365
-    END IF
-  END DO
-  !
-  ! compute the temporal distance
-  PDIST = ( IDAYS + KDAYF - KDAYI) * 86400. + PSECF - PSECI
-  !
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!            4.  DIFFERENT YEARS AND SAME MONTH 
-!           ------------------------------------------------------------
-IF ( (KYEARF/=KYEARI) .AND. (KMONTHF==KMONTHI) ) THEN
-  ! check chronological order
-  IF ( KYEARF < KYEARI ) THEN
-    PDIST=XUNDEF
-    RETURN
-  END IF
-  !
-  ! cumulate the number of days for the months in between KMONTHI and 
-  ! December => IDAYS = 0 here
-  IDAYS = 0
-  ! add the number of days corresponding to full years between the two dates
-  DO JYEAR=KYEARI+1, KYEARF-1
-    IF (MOD(JYEAR,4)==0) THEN 
-      IDAYS=IDAYS+366
-    ELSE
-      IDAYS=IDAYS+365
-    END IF
-  END DO
-  !
-  ! compute the temporal distance
-  PDIST = ( IDAYS + KDAYF - KDAYI) * 86400. + PSECF - PSECI
-  !
-END IF
-
-!
-!
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE TEMPORAL_DIST
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index da1a269b3..9fa235897 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -129,6 +129,7 @@ END MODULE MODI_WRITE_BUDGET
 !!                                              change of YCOMMENT
 !!      24/03/2014  (J.Escobar ) miss placed deallocate in RSV budget
 !!      11/09/2015  (C.Lac)    Correction due to FIT temporal scheme
+!!      28/03/2018  (P.Wautelet) Replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!                             
 !!
 !-------------------------------------------------------------------------------
@@ -139,6 +140,7 @@ USE MODD_BUDGET
 USE MODD_IO_ll,   ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 !
+USE MODE_DATETIME
 USE MODE_FIELD,   ONLY: TFIELDDATA,TYPEREAL
 USE MODE_FMWRIT
 USE MODE_TIME
@@ -146,7 +148,6 @@ USE MODE_TIME
 USE MODI_END_CART_COMPRESS
 USE MODI_END_MASK_COMPRESS
 USE MODI_MENU_DIACHRO
-USE MODI_TEMPORAL_DIST
 USE MODI_WRITE_DIACHRO
 !
 !
@@ -252,10 +253,7 @@ SELECT CASE (CBUTYPE)
     ZWORKDATIME(11,1)=TPDTMOD%TDATE%DAY
     ZWORKDATIME(12,1)=TPDTMOD%TIME
 !
-    CALL TEMPORAL_DIST(TPDTCUR%TDATE%YEAR,TPDTCUR%TDATE%MONTH,       &
-                       TPDTCUR%TDATE%DAY, TPDTCUR%TIME,              &
-		       TDTEXP%TDATE%YEAR, TDTEXP%TDATE%MONTH,        &
-		       TDTEXP%TDATE%DAY,  TDTEXP%TIME, ZWORKTEMP(1,1))
+    CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1,1))
 !
     ZWORKTEMP(1,1)=ZWORKTEMP(1,1)+(1.-NBUSTEP*0.5)*PTSTEP
 !
@@ -1011,10 +1009,7 @@ SELECT CASE (CBUTYPE)
     ZWORKDATIME(11,:)=TPDTMOD%TDATE%DAY
     ZWORKDATIME(12,:)=TPDTMOD%TIME
 !
-    CALL TEMPORAL_DIST(TPDTCUR%TDATE%YEAR,TPDTCUR%TDATE%MONTH,             &
-                       TPDTCUR%TDATE%DAY, TPDTCUR%TIME,                    &
-                       TDTEXP%TDATE%YEAR, TDTEXP%TDATE%MONTH,              &
-                       TDTEXP%TDATE%DAY,  TDTEXP%TIME, ZWORKTEMP(NBUWRNB,1))
+    CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(NBUWRNB,1))
 !
     ZWORKTEMP(NBUWRNB,1)=ZWORKTEMP(NBUWRNB,1)+(1.-NBUSTEP*0.5)*PTSTEP
 !
diff --git a/src/MNH/write_ts1d.f90 b/src/MNH/write_ts1d.f90
index 4bf731346..246d82af1 100644
--- a/src/MNH/write_ts1d.f90
+++ b/src/MNH/write_ts1d.f90
@@ -70,6 +70,7 @@
 !!                      XCHEMLON could gives some profiles if specified in
 !!                      namelist DIAG1.nam. Otherwise treatment is active only in
 !!                      1D case
+!!     28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!
 !!    EXTERNAL
 !!    --------
@@ -79,11 +80,13 @@
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
 
+USE MODE_DATETIME
 USE MODE_FM,              ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
 USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST
 USE MODE_IO_ll
 USE MODE_GRIDPROJ
 USE MODE_ll
+!
 USE MODD_LUNIT_n,         ONLY: CINIFILE
 USE MODD_NSV,             ONLY: NSV,NSV_CHEMBEG,NSV_CHEMEND,  &
                                 NSV_AERBEG,NSV_AEREND
@@ -122,7 +125,6 @@ USE MODD_CH_JVALUES_n,    ONLY: XJVALUES   ! Jvalues and
 USE MODD_CH_INIT_JVALUES, ONLY:JPJVMAX ! their number
 USE MODD_PARAMETERS,      ONLY: XUNDEF
 USE MODD_DIAG_FLAG,       ONLY: LCHEMDIAG, XCHEMLAT, XCHEMLON
-USE MODI_TEMPORAL_DIST
 USE MODI_TRANSFER_FILE
 
 IMPLICIT NONE
@@ -165,11 +167,7 @@ CHARACTER*5  :: YCTIME  ! current time
 TZFILE => NULL()
 NBPROF = 0
 
-CALL TEMPORAL_DIST (   TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH,              &
-                       TDTCUR%TDATE%DAY ,TDTCUR%TIME,                     &
-                       TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,              &
-                       TDTEXP%TDATE%DAY ,TDTEXP%TIME,                     &
-                       ZTIME                                              )
+CALL DATETIME_DISTANCE(TDTEXP,TDTCUR,ZTIME)
 ZTIME = ZTIME + TDTEXP%TIME
 CALL GET_DIM_EXT_ll ('B',IIU,IJU)
 
-- 
GitLab