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

Last change on this file since 801 was 801, checked in by rlacroix, 8 years ago

Fortran interface: Add functions to convert a string to a date or a duration.

  • 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: 6.4 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   INTERFACE ASSIGNMENT(=)
40      MODULE PROCEDURE xios(date_assign_duration)
41   END INTERFACE
42
43   CONTAINS ! Fonctions disponibles pour les utilisateurs.
44
45   ! Conversion functions
46
47   FUNCTION xios(date_convert_to_seconds)(date) RESULT(res)
48      USE DATE_INTERFACE, only : txios(date)
49      IMPLICIT NONE
50      TYPE(txios(date)), INTENT(IN) :: date
51      INTEGER(kind = C_LONG_LONG) :: res
52
53      res = cxios_date_convert_to_seconds(date)
54   END FUNCTION xios(date_convert_to_seconds)
55
56   SUBROUTINE xios(date_convert_to_string)(date, str)
57      USE DATE_INTERFACE, only : txios(date)
58      IMPLICIT NONE
59      TYPE(txios(date)), INTENT(IN) :: date
60      CHARACTER(len = *), INTENT(OUT) :: str
61
62      CALL cxios_date_convert_to_string(date, str, len(str))
63   END SUBROUTINE xios(date_convert_to_string)
64
65   FUNCTION xios(date_convert_from_string)(str) RESULT(res)
66      USE DATE_INTERFACE, only : txios(date)
67      IMPLICIT NONE
68      CHARACTER(len = *), INTENT(IN) :: str
69      TYPE(txios(date)) :: res
70
71      res = cxios_date_convert_from_string(str, len(str))
72   END FUNCTION xios(date_convert_from_string)
73
74   ! Addition: date + duration = date
75
76   FUNCTION xios(date_add_duration)(date, dur) RESULT(res)
77      USE DATE_INTERFACE, only : txios(date)
78      USE IDURATION, only : txios(duration)
79      IMPLICIT NONE
80      TYPE(txios(date)), INTENT(IN) :: date
81      TYPE(txios(duration)), INTENT(IN) :: dur
82      TYPE(txios(date)) :: res
83
84      res = cxios_date_add_duration(date, dur)
85   END FUNCTION xios(date_add_duration)
86
87   ! Subtraction: date - duration = date
88
89   FUNCTION xios(date_sub_duration)(date, dur) RESULT(res)
90      USE DATE_INTERFACE, only : txios(date)
91      USE IDURATION, only : txios(duration)
92      IMPLICIT NONE
93      TYPE(txios(date)), INTENT(IN) :: date
94      TYPE(txios(duration)), INTENT(IN) :: dur
95      TYPE(txios(date)) :: res
96
97      res = cxios_date_sub_duration(date, dur)
98   END FUNCTION xios(date_sub_duration)
99
100   ! Subtraction: date - date = duration
101
102   FUNCTION xios(date_sub)(date1, date2) RESULT(res)
103      USE DATE_INTERFACE, only : txios(date)
104      USE IDURATION, only : txios(duration)
105      IMPLICIT NONE
106      TYPE(txios(date)), INTENT(IN) :: date1, date2
107      TYPE(txios(duration)) :: res
108
109      res = cxios_date_sub(date1, date2)
110   END FUNCTION xios(date_sub)
111
112   FUNCTION xios(date_eq)(date1, date2) RESULT(res)
113      USE DATE_INTERFACE, only : txios(date)
114      IMPLICIT NONE
115      TYPE(txios(date)), INTENT(IN) :: date1, date2
116      LOGICAL :: res
117
118      res = cxios_date_eq(date1, date2)
119   END FUNCTION xios(date_eq)
120
121   FUNCTION xios(date_neq)(date1, date2) RESULT(res)
122      USE DATE_INTERFACE, only : txios(date)
123      IMPLICIT NONE
124      TYPE(txios(date)), INTENT(IN) :: date1, date2
125      LOGICAL :: res
126
127      res = cxios_date_neq(date1, date2)
128   END FUNCTION xios(date_neq)
129
130   FUNCTION xios(date_lt)(date1, date2) RESULT(res)
131      USE DATE_INTERFACE, only : txios(date)
132      IMPLICIT NONE
133      TYPE(txios(date)), INTENT(IN) :: date1, date2
134      LOGICAL :: res
135
136      res = cxios_date_lt(date1, date2)
137   END FUNCTION xios(date_lt)
138
139   FUNCTION xios(date_le)(date1, date2) RESULT(res)
140      USE DATE_INTERFACE, only : txios(date)
141      IMPLICIT NONE
142      TYPE(txios(date)), INTENT(IN) :: date1, date2
143      LOGICAL :: res
144
145      res = cxios_date_le(date1, date2)
146   END FUNCTION xios(date_le)
147
148   FUNCTION xios(date_gt)(date1, date2) RESULT(res)
149      USE DATE_INTERFACE, only : txios(date)
150      IMPLICIT NONE
151      TYPE(txios(date)), INTENT(IN) :: date1, date2
152      LOGICAL :: res
153
154      res = cxios_date_gt(date1, date2)
155   END FUNCTION xios(date_gt)
156
157   FUNCTION xios(date_ge)(date1, date2) RESULT(res)
158      USE DATE_INTERFACE, only : txios(date)
159      IMPLICIT NONE
160      TYPE(txios(date)), INTENT(IN) :: date1, date2
161      LOGICAL :: res
162
163      res = cxios_date_ge(date1, date2)
164   END FUNCTION xios(date_ge)
165
166   SUBROUTINE xios(date_assign_duration)(date, dur)
167      USE DATE_INTERFACE, only : txios(date)
168      USE IDURATION, only : txios(duration)
169      IMPLICIT NONE
170      TYPE(txios(date)), INTENT(OUT) :: date
171      TYPE(txios(duration)), INTENT(IN) :: dur
172
173      date = txios(date)(0, 1, 1, 0, 0, 0) + dur
174   END SUBROUTINE xios(date_assign_duration)
175
176   FUNCTION xios(date_get_second_of_year)(date) RESULT(res)
177      USE DATE_INTERFACE, only : txios(date)
178      IMPLICIT NONE
179      TYPE(txios(date)), INTENT(IN) :: date
180      INTEGER(kind = C_INT) :: res
181
182      res = cxios_date_get_second_of_year(date)
183   END FUNCTION xios(date_get_second_of_year)
184
185   FUNCTION xios(date_get_day_of_year)(date) RESULT(res)
186      USE DATE_INTERFACE, only : txios(date)
187      IMPLICIT NONE
188      TYPE(txios(date)), INTENT(IN) :: date
189      REAL(kind = C_DOUBLE) :: res
190
191      res = cxios_date_get_day_of_year(date)
192   END FUNCTION xios(date_get_day_of_year)
193
194   FUNCTION xios(date_get_fraction_of_year)(date) RESULT(res)
195      USE DATE_INTERFACE, only : txios(date)
196      IMPLICIT NONE
197      TYPE(txios(date)), INTENT(IN) :: date
198      REAL(kind = C_DOUBLE) :: res
199
200      res = cxios_date_get_fraction_of_year(date)
201   END FUNCTION xios(date_get_fraction_of_year)
202
203   FUNCTION xios(date_get_second_of_day)(date) RESULT(res)
204      USE DATE_INTERFACE, only : txios(date)
205      IMPLICIT NONE
206      TYPE(txios(date)), INTENT(IN) :: date
207      INTEGER(kind = C_INT) :: res
208
209      res = cxios_date_get_second_of_day(date)
210   END FUNCTION xios(date_get_second_of_day)
211
212   FUNCTION xios(date_get_fraction_of_day)(date) RESULT(res)
213      USE DATE_INTERFACE, only : txios(date)
214      IMPLICIT NONE
215      TYPE(txios(date)), INTENT(IN) :: date
216      REAL(kind = C_DOUBLE) :: res
217
218      res = cxios_date_get_fraction_of_day(date)
219   END FUNCTION xios(date_get_fraction_of_day)
220
221END MODULE IDATE
Note: See TracBrowser for help on using the repository browser.