source: XIOS/trunk/src/interface/fortran/idate.F90 @ 545

Last change on this file since 545 was 545, checked in by rlacroix, 9 years ago

Expose the calendar operations through the Fortran interface.

  • Add arithmetic operations on the xios_duration and xios_date types:
    • xios_duration + xios_duration = xios_duration
    • xios_duration - xios_duration = xios_duration
    • scalar * xios_duration = xios_duration * scalar = xios_duration
    • - xios_duration = xios_duration
    • xios_date + xios_duration = xios_date
    • xios_date - xios_duration = xios_date
    • xios_date - xios_date = xios_duration
  • Add comparison operations on the xios_duration and xios_date types:
    • xios_duration: ==, /=
    • xios_date: ==, /=, <, <=, >, >=
  • Add a new function "xios_date_convert_to_seconds" to convert a date into the number of seconds since the time origin of the calendar
  • Define some constant durations "xios_second", "xios_minute", "xios_hour", "xios_day", "xios_month", "xios_year" et "xios_timestep" to ease the definition of new durations (for example, 10h is just 10 * xios_hour)
  • Add a new function "xios_set_calendar" so that one can manually create the calendar attached to the current context and thus use the calendar operations before calling "xios_close_context_definition". This function can accept optional parameters so that the calendar attributes (calendar_type, start_date, time_origin and timestep) can be easily overwritten. Note that you cannot define a new calendar after one was already created (either because "xios_set_calendar" or "xios_close_context_definition" was used)
  • Readd the function "xios_set_timestep" as a simplified alias of "xios_set_context_attr(context, timestep)" for the current context
  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 3.9 KB
Line 
1#include "xios_fortran_prefix.hpp"
2MODULE IDATE
3   USE, INTRINSIC :: ISO_C_BINDING
4   USE DATE_INTERFACE
5
6   INTERFACE OPERATOR(+)
7      MODULE PROCEDURE xios(date_add_duration)
8   END INTERFACE
9
10   INTERFACE OPERATOR(-)
11      MODULE PROCEDURE xios(date_sub_duration)
12      MODULE PROCEDURE xios(date_sub)
13   END INTERFACE
14
15   INTERFACE OPERATOR(==)
16      MODULE PROCEDURE xios(date_eq)
17   END INTERFACE
18
19   INTERFACE OPERATOR(/=)
20      MODULE PROCEDURE xios(date_neq)
21   END INTERFACE
22
23   INTERFACE OPERATOR(<)
24      MODULE PROCEDURE xios(date_lt)
25   END INTERFACE
26
27   INTERFACE OPERATOR(<=)
28      MODULE PROCEDURE xios(date_le)
29   END INTERFACE
30
31   INTERFACE OPERATOR(>)
32      MODULE PROCEDURE xios(date_gt)
33   END INTERFACE
34
35   INTERFACE OPERATOR(>=)
36      MODULE PROCEDURE xios(date_ge)
37   END INTERFACE
38
39   CONTAINS ! Fonctions disponibles pour les utilisateurs.
40
41   FUNCTION xios(date_convert_to_seconds)(date) RESULT(res)
42      USE DATE_INTERFACE, only : txios(date)
43      IMPLICIT NONE
44      TYPE(txios(date)), INTENT(IN) :: date
45      INTEGER(kind = C_LONG_LONG) :: res
46
47      res = cxios_date_convert_to_seconds(date)
48   END FUNCTION xios(date_convert_to_seconds)
49
50   ! Addition: date + duration = date
51
52   FUNCTION xios(date_add_duration)(date, dur) RESULT(res)
53      USE DATE_INTERFACE, only : txios(date)
54      USE IDURATION, only : txios(duration)
55      IMPLICIT NONE
56      TYPE(txios(date)), INTENT(IN) :: date
57      TYPE(txios(duration)), INTENT(IN) :: dur
58      TYPE(txios(date)) :: res
59
60      res = cxios_date_add_duration(date, dur)
61   END FUNCTION xios(date_add_duration)
62
63   ! Subtraction: date - duration = date
64
65   FUNCTION xios(date_sub_duration)(date, dur) RESULT(res)
66      USE DATE_INTERFACE, only : txios(date)
67      USE IDURATION, only : txios(duration)
68      IMPLICIT NONE
69      TYPE(txios(date)), INTENT(IN) :: date
70      TYPE(txios(duration)), INTENT(IN) :: dur
71      TYPE(txios(date)) :: res
72
73      res = cxios_date_sub_duration(date, dur)
74   END FUNCTION xios(date_sub_duration)
75
76   ! Subtraction: date - date = duration
77
78   FUNCTION xios(date_sub)(date1, date2) RESULT(res)
79      USE DATE_INTERFACE, only : txios(date)
80      USE IDURATION, only : txios(duration)
81      IMPLICIT NONE
82      TYPE(txios(date)), INTENT(IN) :: date1, date2
83      TYPE(txios(duration)) :: res
84
85      res = cxios_date_sub(date1, date2)
86   END FUNCTION xios(date_sub)
87
88   FUNCTION xios(date_eq)(date1, date2) RESULT(res)
89      USE DATE_INTERFACE, only : txios(date)
90      IMPLICIT NONE
91      TYPE(txios(date)), INTENT(IN) :: date1, date2
92      LOGICAL :: res
93
94      res = cxios_date_eq(date1, date2)
95   END FUNCTION xios(date_eq)
96
97   FUNCTION xios(date_neq)(date1, date2) RESULT(res)
98      USE DATE_INTERFACE, only : txios(date)
99      IMPLICIT NONE
100      TYPE(txios(date)), INTENT(IN) :: date1, date2
101      LOGICAL :: res
102
103      res = cxios_date_neq(date1, date2)
104   END FUNCTION xios(date_neq)
105
106   FUNCTION xios(date_lt)(date1, date2) RESULT(res)
107      USE DATE_INTERFACE, only : txios(date)
108      IMPLICIT NONE
109      TYPE(txios(date)), INTENT(IN) :: date1, date2
110      LOGICAL :: res
111
112      res = cxios_date_lt(date1, date2)
113   END FUNCTION xios(date_lt)
114
115   FUNCTION xios(date_le)(date1, date2) RESULT(res)
116      USE DATE_INTERFACE, only : txios(date)
117      IMPLICIT NONE
118      TYPE(txios(date)), INTENT(IN) :: date1, date2
119      LOGICAL :: res
120
121      res = cxios_date_le(date1, date2)
122   END FUNCTION xios(date_le)
123
124   FUNCTION xios(date_gt)(date1, date2) RESULT(res)
125      USE DATE_INTERFACE, only : txios(date)
126      IMPLICIT NONE
127      TYPE(txios(date)), INTENT(IN) :: date1, date2
128      LOGICAL :: res
129
130      res = cxios_date_gt(date1, date2)
131   END FUNCTION xios(date_gt)
132
133   FUNCTION xios(date_ge)(date1, date2) RESULT(res)
134      USE DATE_INTERFACE, only : txios(date)
135      IMPLICIT NONE
136      TYPE(txios(date)), INTENT(IN) :: date1, date2
137      LOGICAL :: res
138
139      res = cxios_date_ge(date1, date2)
140   END FUNCTION xios(date_ge)
141
142END MODULE IDATE
Note: See TracBrowser for help on using the repository browser.