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/ixios.F90

    r545 r549  
    33MODULE XIOS 
    44 
    5 USE icalendar, ONLY : xios(set_calendar), xios(set_timestep), xios(update_calendar) 
     5USE icalendar, ONLY : xios(define_calendar), xios(set_timestep), xios(set_start_date), xios(set_time_origin), & 
     6                      xios(get_calendar_type), xios(get_timestep), xios(get_start_date), xios(get_time_origin), & 
     7                      xios(update_calendar), xios(get_current_date), & 
     8                      xios(get_year_length_in_seconds), xios(get_day_length_in_seconds) 
    69 
    710USE icontext, ONLY : txios(context), xios(get_context_handle), xios(set_current_context),    & 
     
    2427                  xios(date_add_duration), xios(date_sub_duration), xios(date_sub), & 
    2528                  xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge), & 
     29                  xios(date_get_second_of_year), xios(date_get_day_of_year), xios(date_get_fraction_of_year), & 
     30                  xios(date_get_second_of_day), xios(date_get_fraction_of_day), & 
    2631                  OPERATOR(+), OPERATOR(-), & 
    27                   OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=) 
     32                  OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=), & 
     33                  ASSIGNMENT(=) 
    2834 
    2935USE idomain, ONLY : txios(domain), txios(domaingroup), xios(get_domain_handle),  & 
     
    200206           xios(field_is_active) 
    201207 
    202  PUBLIC :: xios(set_calendar), xios(set_timestep), xios(update_calendar) 
     208 PUBLIC :: xios(define_calendar), xios(set_timestep), xios(set_start_date), xios(set_time_origin), & 
     209           xios(get_calendar_type), xios(get_timestep), xios(get_start_date), xios(get_time_origin), & 
     210           xios(update_calendar), xios(get_current_date), & 
     211           xios(get_year_length_in_seconds), xios(get_day_length_in_seconds) 
    203212 
    204213 PUBLIC :: xios(year), xios(month), xios(day), xios(hour), xios(minute), xios(second), xios(timestep), & 
     
    208217 PUBLIC :: xios(date_convert_to_seconds), & 
    209218           xios(date_add_duration), xios(date_sub_duration), xios(date_sub), & 
    210            xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge) 
     219           xios(date_eq), xios(date_neq), xios(date_lt), xios(date_le), xios(date_gt), xios(date_ge), & 
     220           xios(date_get_second_of_year), xios(date_get_day_of_year), xios(date_get_fraction_of_year), & 
     221           xios(date_get_second_of_day), xios(date_get_fraction_of_day) 
    211222 
    212223 PUBLIC :: OPERATOR(+), OPERATOR(-), OPERATOR(*), & 
    213            OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=) 
     224           OPERATOR(==), OPERATOR(/=), OPERATOR(<), OPERATOR(<=), OPERATOR(>), OPERATOR(>=), & 
     225           ASSIGNMENT(=) 
    214226 
    215227 PUBLIC :: xios(getVar) 
Note: See TracChangeset for help on using the changeset viewer.