Skip to content
Snippets Groups Projects
Commit 63c80010 authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 27/10/2022: datetime: add + operator via DATETIME_TIME_ADD subroutine

parent c71972c2
No related branches found
No related tags found
No related merge requests found
!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC Copyright 2018-2022 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.
......@@ -7,6 +7,7 @@
! P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard)
! P. Wautelet 19/04/2019: use modd_precision kinds
! P. Wautelet 20/07/2021: modify DATETIME_TIME2REFERENCE and DATETIME_DISTANCE to allow correct computation with 32-bit floats
! P. Wautelet 27/10/2022: add + operator via DATETIME_TIME_ADD subroutine
!-----------------------------------------------------------------
MODULE MODE_DATETIME
!
......@@ -21,6 +22,7 @@ PRIVATE
PUBLIC :: DATETIME_DISTANCE, DATETIME_CORRECTDATE
PUBLIC :: OPERATOR(<)
PUBLIC :: OPERATOR(>=)
PUBLIC :: OPERATOR(+)
!
!Reference date (do not change it)
!To work with DATETIME_TIME2REFERENCE, we assume the year is a multiple of 400 + 1 and the date is January 1st (and time=0.)
......@@ -34,6 +36,10 @@ INTERFACE OPERATOR(>=)
MODULE PROCEDURE DATETIME_GE
END INTERFACE
!
INTERFACE OPERATOR(+)
MODULE PROCEDURE DATETIME_TIME_ADD
END INTERFACE
!
CONTAINS
!
SUBROUTINE DATETIME_TIME2REFERENCE( TPDATE, KDAYS, PSEC )
......@@ -140,7 +146,7 @@ PDIST = REAL( ( IDAYSEND - IDAYSBEG ) * (24*60*60) ) + ZSECEND - ZSECBEG
!
END SUBROUTINE DATETIME_DISTANCE
!
SUBROUTINE DATETIME_CORRECTDATE(TPDATE)
PURE SUBROUTINE DATETIME_CORRECTDATE(TPDATE)
!
! Correct the date if not in the correct interval
! Change the date if time is <0 or >=86400 s
......@@ -232,7 +238,7 @@ TPDATE%xtime = ZSEC
END SUBROUTINE DATETIME_CORRECTDATE
!
!
SUBROUTINE DATETIME_GETMONTHLGT(KYEAR,KMONTH,KLGT)
PURE SUBROUTINE DATETIME_GETMONTHLGT(KYEAR,KMONTH,KLGT)
!
INTEGER, INTENT(IN) :: KYEAR
INTEGER, INTENT(IN) :: KMONTH
......@@ -256,7 +262,7 @@ END SELECT
END SUBROUTINE DATETIME_GETMONTHLGT
!
!
FUNCTION DATETIME_LT(TPT1, TPT2) RESULT (OLT)
ELEMENTAL FUNCTION DATETIME_LT(TPT1, TPT2) RESULT (OLT)
IMPLICIT NONE
LOGICAL :: OLT
TYPE(DATE_TIME), INTENT(IN) :: TPT1, TPT2
......@@ -281,7 +287,7 @@ ENDIF
END FUNCTION DATETIME_LT
!
!
FUNCTION DATETIME_GE(TPT1, TPT2) RESULT (OLT)
ELEMENTAL FUNCTION DATETIME_GE(TPT1, TPT2) RESULT (OLT)
IMPLICIT NONE
LOGICAL :: OLT
TYPE(DATE_TIME), INTENT(IN) :: TPT1, TPT2
......@@ -291,5 +297,21 @@ TYPE(DATE_TIME), INTENT(IN) :: TPT1, TPT2
OLT = .NOT.DATETIME_LT(TPT1,TPT2)
!
END FUNCTION DATETIME_GE
!
ELEMENTAL FUNCTION DATETIME_TIME_ADD( TPIN, PTIME ) RESULT ( TPOUT )
IMPLICIT NONE
TYPE(DATE_TIME), INTENT(IN) :: TPIN ! Start date
REAL, INTENT(IN) :: PTIME ! Added time
TYPE(DATE_TIME) :: TPOUT ! End date = start date + added time
TPOUT = TPIN
TPOUT%XTIME = TPOUT%XTIME + PTIME
CALL DATETIME_CORRECTDATE( TPOUT )
END FUNCTION DATETIME_TIME_ADD
END MODULE MODE_DATETIME
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment