source: XIOS/trunk/src/interface/fortran/calendar_wrapper_interface.F90 @ 932

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

Revised calendar functionalities:

  • the calendar is now configured from a specific calendar child node of the context in the XML configuration file. Example: <calendar type="Gregorian" start_date="2012-03-01 15:00:00" time_origin="2012-02-29 15:00:00" timestep="1h" />
  • the calendar type should now be configured when defining the start time and/or the time origin.
  • the start time and the time origin are now optional, 0000-01-01 00:00:00 will be used by default. It is also possible to define them partially. For example, 2015 and 2014-12 are valid dates corresponding respectively to 2015-01-01 00:00:00 and 2014-12-01 00:00:00.
  • an optional duration offset can be added to the start date and time origin. For example, it's possible to define the date 2015-01-12 12:00:00 as 2015-01-11 + 36h or 2015-01-11 12:00:00 + 1d. The duration format is the same as the time step. Being that the date is optional, it is possible to only use a duration (for example + 42s is the same as 0000-01-01 00:00:00 + 42s). An error will be raised if a duration based on the time step is used before the time step was configured. For example, the following would cause an error: <calendar type="Gregorian" start_date="+ 1ts" /> but <calendar type="Gregorian" start_date="+ 1ts" timestep="0.5h" /> would not.
  • new Fortran interface to define the calendar:
    • xios_define_calendar(type[, timestep, start_date, time_origin]) will create a calendar when none had previously been defined. Only the type argument is mandatory, the rest is optional. Calendar operations on dates and durations are possible as soon as the calendar is created (either using this procedure or directly from the XML configuration file).
    • the following getter and setter procedures are available: xios_set_timestep, xios_set_start_date, xios_set_time_origin, xios_get_calendar_type, xios_get_timestep, xios_get_start_date, xios_get_time_origin.
  • new Fortran interface to interact with the calendar: xios_update_calendar, xios_get_current_date, xios_get_year_length_in_seconds, xios_get_day_length_in_seconds.
  • new Fortran interface for date conversion: xios_date_get_second_of_year, xios_date_get_day_of_year, xios_date_get_fraction_of_year, xios_date_get_second_of_day, xios_date_get_fraction_of_day.
  • two new placeholders are available to format the file name when splitting the output (split_freq_format attribute):
    • %S the number of seconds since the time origin
    • %D the integral number of days since the time origin
File size: 2.7 KB
Line 
1#include "../fortran/xios_fortran_prefix.hpp"
2
3MODULE CALENDAR_WRAPPER_INTERFACE
4   USE, INTRINSIC :: ISO_C_BINDING
5
6   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99
7
8      SUBROUTINE cxios_calendar_wrapper_handle_create(ret, idt, idt_size) BIND(C)
9         USE ISO_C_BINDING
10         INTEGER  (kind = C_INTPTR_T)               :: ret
11         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
12         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
13      END SUBROUTINE cxios_calendar_wrapper_handle_create
14
15      SUBROUTINE cxios_get_current_calendar_wrapper(ret) BIND(C)
16         USE ISO_C_BINDING
17         INTEGER  (kind = C_INTPTR_T)               :: ret
18      END SUBROUTINE cxios_get_current_calendar_wrapper
19
20      SUBROUTINE cxios_calendar_wrapper_valid_id(ret, idt, idt_size) BIND(C)
21         USE ISO_C_BINDING
22         LOGICAL  (kind = C_BOOL)                   :: ret
23         CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: idt
24         INTEGER  (kind = C_INT)     , VALUE        :: idt_size
25      END SUBROUTINE cxios_calendar_wrapper_valid_id
26
27      SUBROUTINE cxios_create_calendar(hdl) BIND(C)
28         USE ISO_C_BINDING
29         INTEGER  (kind = C_INTPTR_T), VALUE        :: hdl
30      END SUBROUTINE cxios_create_calendar
31
32      SUBROUTINE cxios_update_calendar_timestep(hdl) BIND(C)
33         USE ISO_C_BINDING
34         INTEGER  (kind = C_INTPTR_T), VALUE        :: hdl
35      END SUBROUTINE cxios_update_calendar_timestep
36
37      SUBROUTINE cxios_set_calendar_wrapper_date_start_date(hdl, start_date) BIND(C)
38         USE ISO_C_BINDING
39         USE IDATE
40         INTEGER (kind = C_INTPTR_T), VALUE :: hdl
41         TYPE(txios(date)), VALUE           :: start_date
42      END SUBROUTINE cxios_set_calendar_wrapper_date_start_date
43
44      SUBROUTINE cxios_get_calendar_wrapper_date_start_date(hdl, start_date) BIND(C)
45         USE ISO_C_BINDING
46         USE IDATE
47         INTEGER (kind = C_INTPTR_T), VALUE :: hdl
48         TYPE(txios(date))                  :: start_date
49      END SUBROUTINE cxios_get_calendar_wrapper_date_start_date
50
51      SUBROUTINE cxios_set_calendar_wrapper_date_time_origin(hdl, time_origin) BIND(C)
52         USE ISO_C_BINDING
53         USE IDATE
54         INTEGER (kind = C_INTPTR_T), VALUE :: hdl
55         TYPE(txios(date)), VALUE           :: time_origin
56      END SUBROUTINE cxios_set_calendar_wrapper_date_time_origin
57
58      SUBROUTINE cxios_get_calendar_wrapper_date_time_origin(hdl, time_origin) BIND(C)
59         USE ISO_C_BINDING
60         USE IDATE
61         INTEGER (kind = C_INTPTR_T), VALUE :: hdl
62         TYPE(txios(date))                  :: time_origin
63      END SUBROUTINE cxios_get_calendar_wrapper_date_time_origin
64
65   END INTERFACE
66
67END MODULE CALENDAR_WRAPPER_INTERFACE
Note: See TracBrowser for help on using the repository browser.