Ignore:
Timestamp:
01/26/15 14:39:26 (9 years ago)
Author:
rlacroix
Message:

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:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/interface/fortran_attr/context_interface_attr.F90

    r545 r549  
    88   
    99  INTERFACE ! Do not call directly / interface FORTRAN 2003 <-> C99 
    10      
    11      
    12     SUBROUTINE cxios_set_context_calendar_type(context_hdl, calendar_type, calendar_type_size) BIND(C) 
    13       USE ISO_C_BINDING 
    14       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    15       CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: calendar_type 
    16       INTEGER  (kind = C_INT)     , VALUE        :: calendar_type_size 
    17     END SUBROUTINE cxios_set_context_calendar_type 
    18      
    19     SUBROUTINE cxios_get_context_calendar_type(context_hdl, calendar_type, calendar_type_size) BIND(C) 
    20       USE ISO_C_BINDING 
    21       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    22       CHARACTER(kind = C_CHAR)    , DIMENSION(*) :: calendar_type 
    23       INTEGER  (kind = C_INT)     , VALUE        :: calendar_type_size 
    24     END SUBROUTINE cxios_get_context_calendar_type 
    25      
    26     FUNCTION cxios_is_defined_context_calendar_type(context_hdl ) BIND(C) 
    27       USE ISO_C_BINDING 
    28       LOGICAL(kind=C_BOOL) :: cxios_is_defined_context_calendar_type 
    29       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    30     END FUNCTION cxios_is_defined_context_calendar_type 
    3110     
    3211     
     
    5231     
    5332     
    54     SUBROUTINE cxios_set_context_start_date(context_hdl, start_date) BIND(C) 
    55       USE ISO_C_BINDING 
    56       USE IDATE 
    57       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    58       TYPE(txios(date)), VALUE :: start_date 
    59     END SUBROUTINE cxios_set_context_start_date 
    60      
    61     SUBROUTINE cxios_get_context_start_date(context_hdl, start_date) BIND(C) 
    62       USE ISO_C_BINDING 
    63       USE IDATE 
    64       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    65       TYPE(txios(date)) :: start_date 
    66     END SUBROUTINE cxios_get_context_start_date 
    67      
    68     FUNCTION cxios_is_defined_context_start_date(context_hdl ) BIND(C) 
    69       USE ISO_C_BINDING 
    70       LOGICAL(kind=C_BOOL) :: cxios_is_defined_context_start_date 
    71       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    72     END FUNCTION cxios_is_defined_context_start_date 
    73      
    74      
    75     SUBROUTINE cxios_set_context_time_origin(context_hdl, time_origin) BIND(C) 
    76       USE ISO_C_BINDING 
    77       USE IDATE 
    78       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    79       TYPE(txios(date)), VALUE :: time_origin 
    80     END SUBROUTINE cxios_set_context_time_origin 
    81      
    82     SUBROUTINE cxios_get_context_time_origin(context_hdl, time_origin) BIND(C) 
    83       USE ISO_C_BINDING 
    84       USE IDATE 
    85       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    86       TYPE(txios(date)) :: time_origin 
    87     END SUBROUTINE cxios_get_context_time_origin 
    88      
    89     FUNCTION cxios_is_defined_context_time_origin(context_hdl ) BIND(C) 
    90       USE ISO_C_BINDING 
    91       LOGICAL(kind=C_BOOL) :: cxios_is_defined_context_time_origin 
    92       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    93     END FUNCTION cxios_is_defined_context_time_origin 
    94      
    95      
    96     SUBROUTINE cxios_set_context_timestep(context_hdl, timestep) BIND(C) 
    97       USE ISO_C_BINDING 
    98       USE IDURATION 
    99       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    100       TYPE(txios(duration)), VALUE :: timestep 
    101     END SUBROUTINE cxios_set_context_timestep 
    102      
    103     SUBROUTINE cxios_get_context_timestep(context_hdl, timestep) BIND(C) 
    104       USE ISO_C_BINDING 
    105       USE IDURATION 
    106       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    107       TYPE(txios(duration)) :: timestep 
    108     END SUBROUTINE cxios_get_context_timestep 
    109      
    110     FUNCTION cxios_is_defined_context_timestep(context_hdl ) BIND(C) 
    111       USE ISO_C_BINDING 
    112       LOGICAL(kind=C_BOOL) :: cxios_is_defined_context_timestep 
    113       INTEGER (kind = C_INTPTR_T), VALUE :: context_hdl 
    114     END FUNCTION cxios_is_defined_context_timestep 
    115      
    116      
    11733    END INTERFACE 
    11834   
Note: See TracChangeset for help on using the changeset viewer.