source: XIOS/trunk/src/interface/fortran/date_interface.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
File size: 2.7 KB
Line 
1#include "../fortran/xios_fortran_prefix.hpp"
2
3MODULE DATE_INTERFACE
4   USE, INTRINSIC :: ISO_C_BINDING
5
6   TYPE, BIND(C) :: txios(date)
7      INTEGER(kind = C_INT) :: year, month, day, hour, minute, second
8   END TYPE txios(date)
9     
10   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
11
12      INTEGER(kind = C_LONG_LONG) FUNCTION cxios_date_convert_to_seconds(date) BIND(C)
13         USE ISO_C_BINDING
14         IMPORT :: txios(date)
15         TYPE(txios(date)), VALUE :: date
16      END FUNCTION cxios_date_convert_to_seconds
17
18      TYPE(txios(date)) FUNCTION cxios_date_add_duration(date, dur) BIND(C)
19         USE ISO_C_BINDING
20         USE IDURATION, only : txios(duration)
21         IMPORT :: txios(date)
22         TYPE(txios(date)), VALUE :: date
23         TYPE(txios(duration)), VALUE :: dur
24      END FUNCTION cxios_date_add_duration
25
26      TYPE(txios(date)) FUNCTION cxios_date_sub_duration(date, dur) BIND(C)
27         USE ISO_C_BINDING
28         USE IDURATION, only : txios(duration)
29         IMPORT :: txios(date)
30         TYPE(txios(date)), VALUE :: date
31         TYPE(txios(duration)), VALUE :: dur
32      END FUNCTION cxios_date_sub_duration
33
34      TYPE(txios(duration)) FUNCTION cxios_date_sub(date1, date2) BIND(C)
35         USE ISO_C_BINDING
36         USE IDURATION, only : txios(duration)
37         IMPORT :: txios(date)
38         TYPE(txios(date)), VALUE :: date1, date2
39      END FUNCTION cxios_date_sub
40
41      LOGICAL(kind = C_BOOL) FUNCTION cxios_date_eq(date1, date2) BIND(C)
42         USE ISO_C_BINDING
43         IMPORT :: txios(date)
44         TYPE(txios(date)), VALUE :: date1, date2
45      END FUNCTION cxios_date_eq
46
47      LOGICAL(kind = C_BOOL) FUNCTION cxios_date_neq(date1, date2) BIND(C)
48         USE ISO_C_BINDING
49         IMPORT :: txios(date)
50         TYPE(txios(date)), VALUE :: date1, date2
51      END FUNCTION cxios_date_neq
52
53      LOGICAL(kind = C_BOOL) FUNCTION cxios_date_lt(date1, date2) BIND(C)
54         USE ISO_C_BINDING
55         IMPORT :: txios(date)
56         TYPE(txios(date)), VALUE :: date1, date2
57      END FUNCTION cxios_date_lt
58
59      LOGICAL(kind = C_BOOL) FUNCTION cxios_date_le(date1, date2) BIND(C)
60         USE ISO_C_BINDING
61         IMPORT :: txios(date)
62         TYPE(txios(date)), VALUE :: date1, date2
63      END FUNCTION cxios_date_le
64
65      LOGICAL(kind = C_BOOL) FUNCTION cxios_date_gt(date1, date2) BIND(C)
66         USE ISO_C_BINDING
67         IMPORT :: txios(date)
68         TYPE(txios(date)), VALUE :: date1, date2
69      END FUNCTION cxios_date_gt
70
71      LOGICAL(kind = C_BOOL) FUNCTION cxios_date_ge(date1, date2) BIND(C)
72         USE ISO_C_BINDING
73         IMPORT :: txios(date)
74         TYPE(txios(date)), VALUE :: date1, date2
75      END FUNCTION cxios_date_ge
76
77   END INTERFACE
78     
79END MODULE DATE_INTERFACE
Note: See TracBrowser for help on using the repository browser.