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

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

Fortran interface: Add functions to convert date and duration to string.

  • 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.1 KB
RevLine 
[325]1#include "xios_fortran_prefix.hpp"
2MODULE IDATE
3   USE, INTRINSIC :: ISO_C_BINDING
[545]4   USE DATE_INTERFACE
[325]5
[545]6   INTERFACE OPERATOR(+)
7      MODULE PROCEDURE xios(date_add_duration)
8   END INTERFACE
[325]9
[545]10   INTERFACE OPERATOR(-)
11      MODULE PROCEDURE xios(date_sub_duration)
12      MODULE PROCEDURE xios(date_sub)
13   END INTERFACE
[325]14
[545]15   INTERFACE OPERATOR(==)
16      MODULE PROCEDURE xios(date_eq)
17   END INTERFACE
[325]18
[545]19   INTERFACE OPERATOR(/=)
20      MODULE PROCEDURE xios(date_neq)
21   END INTERFACE
[325]22
[545]23   INTERFACE OPERATOR(<)
24      MODULE PROCEDURE xios(date_lt)
25   END INTERFACE
[537]26
[545]27   INTERFACE OPERATOR(<=)
28      MODULE PROCEDURE xios(date_le)
[325]29   END INTERFACE
[545]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
[549]39   INTERFACE ASSIGNMENT(=)
40      MODULE PROCEDURE xios(date_assign_duration)
41   END INTERFACE
42
[325]43   CONTAINS ! Fonctions disponibles pour les utilisateurs.
44
[794]45   ! Conversion functions
46
[545]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
[325]52
[545]53      res = cxios_date_convert_to_seconds(date)
54   END FUNCTION xios(date_convert_to_seconds)
55
[794]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
[545]65   ! Addition: date + duration = date
66
67   FUNCTION xios(date_add_duration)(date, dur) RESULT(res)
68      USE DATE_INTERFACE, only : txios(date)
69      USE IDURATION, only : txios(duration)
70      IMPLICIT NONE
71      TYPE(txios(date)), INTENT(IN) :: date
72      TYPE(txios(duration)), INTENT(IN) :: dur
73      TYPE(txios(date)) :: res
74
75      res = cxios_date_add_duration(date, dur)
76   END FUNCTION xios(date_add_duration)
77
78   ! Subtraction: date - duration = date
79
80   FUNCTION xios(date_sub_duration)(date, dur) RESULT(res)
81      USE DATE_INTERFACE, only : txios(date)
82      USE IDURATION, only : txios(duration)
83      IMPLICIT NONE
84      TYPE(txios(date)), INTENT(IN) :: date
85      TYPE(txios(duration)), INTENT(IN) :: dur
86      TYPE(txios(date)) :: res
87
88      res = cxios_date_sub_duration(date, dur)
89   END FUNCTION xios(date_sub_duration)
90
91   ! Subtraction: date - date = duration
92
93   FUNCTION xios(date_sub)(date1, date2) RESULT(res)
94      USE DATE_INTERFACE, only : txios(date)
95      USE IDURATION, only : txios(duration)
96      IMPLICIT NONE
97      TYPE(txios(date)), INTENT(IN) :: date1, date2
98      TYPE(txios(duration)) :: res
99
100      res = cxios_date_sub(date1, date2)
101   END FUNCTION xios(date_sub)
102
103   FUNCTION xios(date_eq)(date1, date2) RESULT(res)
104      USE DATE_INTERFACE, only : txios(date)
105      IMPLICIT NONE
106      TYPE(txios(date)), INTENT(IN) :: date1, date2
107      LOGICAL :: res
108
109      res = cxios_date_eq(date1, date2)
110   END FUNCTION xios(date_eq)
111
112   FUNCTION xios(date_neq)(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_neq(date1, date2)
119   END FUNCTION xios(date_neq)
120
121   FUNCTION xios(date_lt)(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_lt(date1, date2)
128   END FUNCTION xios(date_lt)
129
130   FUNCTION xios(date_le)(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_le(date1, date2)
137   END FUNCTION xios(date_le)
138
139   FUNCTION xios(date_gt)(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_gt(date1, date2)
146   END FUNCTION xios(date_gt)
147
148   FUNCTION xios(date_ge)(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_ge(date1, date2)
155   END FUNCTION xios(date_ge)
156
[549]157   SUBROUTINE xios(date_assign_duration)(date, dur)
158      USE DATE_INTERFACE, only : txios(date)
159      USE IDURATION, only : txios(duration)
160      IMPLICIT NONE
161      TYPE(txios(date)), INTENT(OUT) :: date
162      TYPE(txios(duration)), INTENT(IN) :: dur
163
164      date = txios(date)(0, 1, 1, 0, 0, 0) + dur
165   END SUBROUTINE xios(date_assign_duration)
166
167   FUNCTION xios(date_get_second_of_year)(date) RESULT(res)
168      USE DATE_INTERFACE, only : txios(date)
169      IMPLICIT NONE
[558]170      TYPE(txios(date)), INTENT(IN) :: date
[549]171      INTEGER(kind = C_INT) :: res
172
173      res = cxios_date_get_second_of_year(date)
174   END FUNCTION xios(date_get_second_of_year)
175
176   FUNCTION xios(date_get_day_of_year)(date) RESULT(res)
177      USE DATE_INTERFACE, only : txios(date)
178      IMPLICIT NONE
[558]179      TYPE(txios(date)), INTENT(IN) :: date
[549]180      REAL(kind = C_DOUBLE) :: res
181
182      res = cxios_date_get_day_of_year(date)
183   END FUNCTION xios(date_get_day_of_year)
184
185   FUNCTION xios(date_get_fraction_of_year)(date) RESULT(res)
186      USE DATE_INTERFACE, only : txios(date)
187      IMPLICIT NONE
[558]188      TYPE(txios(date)), INTENT(IN) :: date
[549]189      REAL(kind = C_DOUBLE) :: res
190
191      res = cxios_date_get_fraction_of_year(date)
192   END FUNCTION xios(date_get_fraction_of_year)
193
194   FUNCTION xios(date_get_second_of_day)(date) RESULT(res)
195      USE DATE_INTERFACE, only : txios(date)
196      IMPLICIT NONE
[558]197      TYPE(txios(date)), INTENT(IN) :: date
[549]198      INTEGER(kind = C_INT) :: res
199
200      res = cxios_date_get_second_of_day(date)
201   END FUNCTION xios(date_get_second_of_day)
202
203   FUNCTION xios(date_get_fraction_of_day)(date) RESULT(res)
204      USE DATE_INTERFACE, only : txios(date)
205      IMPLICIT NONE
[558]206      TYPE(txios(date)), INTENT(IN) :: date
[549]207      REAL(kind = C_DOUBLE) :: res
208
209      res = cxios_date_get_fraction_of_day(date)
210   END FUNCTION xios(date_get_fraction_of_day)
211
[325]212END MODULE IDATE
Note: See TracBrowser for help on using the repository browser.