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

    r537 r549  
    1212   
    1313  SUBROUTINE xios(set_context_attr)  & 
    14     ( context_id, calendar_type, output_dir, start_date, time_origin, timestep ) 
     14    ( context_id, output_dir ) 
    1515     
    1616    IMPLICIT NONE 
    1717      TYPE(txios(context))  :: context_hdl 
    1818      CHARACTER(LEN=*), INTENT(IN) ::context_id 
    19       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: calendar_type 
    2019      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir 
    21       TYPE(txios(date))  , OPTIONAL, INTENT(IN) :: start_date 
    22       TYPE(txios(date))  , OPTIONAL, INTENT(IN) :: time_origin 
    23       TYPE(txios(duration))  , OPTIONAL, INTENT(IN) :: timestep 
    2420       
    2521      CALL xios(get_context_handle)(context_id,context_hdl) 
    2622      CALL xios(set_context_attr_hdl_)   & 
    27       ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     23      ( context_hdl, output_dir ) 
    2824     
    2925  END SUBROUTINE xios(set_context_attr) 
    3026   
    3127  SUBROUTINE xios(set_context_attr_hdl)  & 
    32     ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     28    ( context_hdl, output_dir ) 
    3329     
    3430    IMPLICIT NONE 
    3531      TYPE(txios(context)) , INTENT(IN) :: context_hdl 
    36       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: calendar_type 
    3732      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir 
    38       TYPE(txios(date))  , OPTIONAL, INTENT(IN) :: start_date 
    39       TYPE(txios(date))  , OPTIONAL, INTENT(IN) :: time_origin 
    40       TYPE(txios(duration))  , OPTIONAL, INTENT(IN) :: timestep 
    4133       
    4234      CALL xios(set_context_attr_hdl_)  & 
    43       ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     35      ( context_hdl, output_dir ) 
    4436     
    4537  END SUBROUTINE xios(set_context_attr_hdl) 
    4638   
    4739  SUBROUTINE xios(set_context_attr_hdl_)   & 
    48     ( context_hdl, calendar_type_, output_dir_, start_date_, time_origin_, timestep_ ) 
     40    ( context_hdl, output_dir_ ) 
    4941     
    5042    IMPLICIT NONE 
    5143      TYPE(txios(context)) , INTENT(IN) :: context_hdl 
    52       CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: calendar_type_ 
    5344      CHARACTER(len = *) , OPTIONAL, INTENT(IN) :: output_dir_ 
    54       TYPE(txios(date))  , OPTIONAL, INTENT(IN) :: start_date_ 
    55       TYPE(txios(date))  , OPTIONAL, INTENT(IN) :: time_origin_ 
    56       TYPE(txios(duration))  , OPTIONAL, INTENT(IN) :: timestep_ 
    57        
    58       IF (PRESENT(calendar_type_)) THEN 
    59         CALL cxios_set_context_calendar_type(context_hdl%daddr, calendar_type_, len(calendar_type_)) 
    60       ENDIF 
    6145       
    6246      IF (PRESENT(output_dir_)) THEN 
    6347        CALL cxios_set_context_output_dir(context_hdl%daddr, output_dir_, len(output_dir_)) 
    64       ENDIF 
    65        
    66       IF (PRESENT(start_date_)) THEN 
    67         CALL cxios_set_context_start_date(context_hdl%daddr, start_date_) 
    68       ENDIF 
    69        
    70       IF (PRESENT(time_origin_)) THEN 
    71         CALL cxios_set_context_time_origin(context_hdl%daddr, time_origin_) 
    72       ENDIF 
    73        
    74       IF (PRESENT(timestep_)) THEN 
    75         CALL cxios_set_context_timestep(context_hdl%daddr, timestep_) 
    7648      ENDIF 
    7749       
     
    8153   
    8254  SUBROUTINE xios(get_context_attr)  & 
    83     ( context_id, calendar_type, output_dir, start_date, time_origin, timestep ) 
     55    ( context_id, output_dir ) 
    8456     
    8557    IMPLICIT NONE 
    8658      TYPE(txios(context))  :: context_hdl 
    8759      CHARACTER(LEN=*), INTENT(IN) ::context_id 
    88       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: calendar_type 
    8960      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir 
    90       TYPE(txios(date))  , OPTIONAL, INTENT(OUT) :: start_date 
    91       TYPE(txios(date))  , OPTIONAL, INTENT(OUT) :: time_origin 
    92       TYPE(txios(duration))  , OPTIONAL, INTENT(OUT) :: timestep 
    9361       
    9462      CALL xios(get_context_handle)(context_id,context_hdl) 
    9563      CALL xios(get_context_attr_hdl_)   & 
    96       ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     64      ( context_hdl, output_dir ) 
    9765     
    9866  END SUBROUTINE xios(get_context_attr) 
    9967   
    10068  SUBROUTINE xios(get_context_attr_hdl)  & 
    101     ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     69    ( context_hdl, output_dir ) 
    10270     
    10371    IMPLICIT NONE 
    10472      TYPE(txios(context)) , INTENT(IN) :: context_hdl 
    105       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: calendar_type 
    10673      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir 
    107       TYPE(txios(date))  , OPTIONAL, INTENT(OUT) :: start_date 
    108       TYPE(txios(date))  , OPTIONAL, INTENT(OUT) :: time_origin 
    109       TYPE(txios(duration))  , OPTIONAL, INTENT(OUT) :: timestep 
    11074       
    11175      CALL xios(get_context_attr_hdl_)  & 
    112       ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     76      ( context_hdl, output_dir ) 
    11377     
    11478  END SUBROUTINE xios(get_context_attr_hdl) 
    11579   
    11680  SUBROUTINE xios(get_context_attr_hdl_)   & 
    117     ( context_hdl, calendar_type_, output_dir_, start_date_, time_origin_, timestep_ ) 
     81    ( context_hdl, output_dir_ ) 
    11882     
    11983    IMPLICIT NONE 
    12084      TYPE(txios(context)) , INTENT(IN) :: context_hdl 
    121       CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: calendar_type_ 
    12285      CHARACTER(len = *) , OPTIONAL, INTENT(OUT) :: output_dir_ 
    123       TYPE(txios(date))  , OPTIONAL, INTENT(OUT) :: start_date_ 
    124       TYPE(txios(date))  , OPTIONAL, INTENT(OUT) :: time_origin_ 
    125       TYPE(txios(duration))  , OPTIONAL, INTENT(OUT) :: timestep_ 
    126        
    127       IF (PRESENT(calendar_type_)) THEN 
    128         CALL cxios_get_context_calendar_type(context_hdl%daddr, calendar_type_, len(calendar_type_)) 
    129       ENDIF 
    13086       
    13187      IF (PRESENT(output_dir_)) THEN 
    13288        CALL cxios_get_context_output_dir(context_hdl%daddr, output_dir_, len(output_dir_)) 
    133       ENDIF 
    134        
    135       IF (PRESENT(start_date_)) THEN 
    136         CALL cxios_get_context_start_date(context_hdl%daddr, start_date_) 
    137       ENDIF 
    138        
    139       IF (PRESENT(time_origin_)) THEN 
    140         CALL cxios_get_context_time_origin(context_hdl%daddr, time_origin_) 
    141       ENDIF 
    142        
    143       IF (PRESENT(timestep_)) THEN 
    144         CALL cxios_get_context_timestep(context_hdl%daddr, timestep_) 
    14589      ENDIF 
    14690       
     
    15094   
    15195  SUBROUTINE xios(is_defined_context_attr)  & 
    152     ( context_id, calendar_type, output_dir, start_date, time_origin, timestep ) 
     96    ( context_id, output_dir ) 
    15397     
    15498    IMPLICIT NONE 
    15599      TYPE(txios(context))  :: context_hdl 
    156100      CHARACTER(LEN=*), INTENT(IN) ::context_id 
    157       LOGICAL, OPTIONAL, INTENT(OUT) :: calendar_type 
    158       LOGICAL(KIND=C_BOOL) :: calendar_type_tmp 
    159101      LOGICAL, OPTIONAL, INTENT(OUT) :: output_dir 
    160102      LOGICAL(KIND=C_BOOL) :: output_dir_tmp 
    161       LOGICAL, OPTIONAL, INTENT(OUT) :: start_date 
    162       LOGICAL(KIND=C_BOOL) :: start_date_tmp 
    163       LOGICAL, OPTIONAL, INTENT(OUT) :: time_origin 
    164       LOGICAL(KIND=C_BOOL) :: time_origin_tmp 
    165       LOGICAL, OPTIONAL, INTENT(OUT) :: timestep 
    166       LOGICAL(KIND=C_BOOL) :: timestep_tmp 
    167103       
    168104      CALL xios(get_context_handle)(context_id,context_hdl) 
    169105      CALL xios(is_defined_context_attr_hdl_)   & 
    170       ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     106      ( context_hdl, output_dir ) 
    171107     
    172108  END SUBROUTINE xios(is_defined_context_attr) 
    173109   
    174110  SUBROUTINE xios(is_defined_context_attr_hdl)  & 
    175     ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     111    ( context_hdl, output_dir ) 
    176112     
    177113    IMPLICIT NONE 
    178114      TYPE(txios(context)) , INTENT(IN) :: context_hdl 
    179       LOGICAL, OPTIONAL, INTENT(OUT) :: calendar_type 
    180       LOGICAL(KIND=C_BOOL) :: calendar_type_tmp 
    181115      LOGICAL, OPTIONAL, INTENT(OUT) :: output_dir 
    182116      LOGICAL(KIND=C_BOOL) :: output_dir_tmp 
    183       LOGICAL, OPTIONAL, INTENT(OUT) :: start_date 
    184       LOGICAL(KIND=C_BOOL) :: start_date_tmp 
    185       LOGICAL, OPTIONAL, INTENT(OUT) :: time_origin 
    186       LOGICAL(KIND=C_BOOL) :: time_origin_tmp 
    187       LOGICAL, OPTIONAL, INTENT(OUT) :: timestep 
    188       LOGICAL(KIND=C_BOOL) :: timestep_tmp 
    189117       
    190118      CALL xios(is_defined_context_attr_hdl_)  & 
    191       ( context_hdl, calendar_type, output_dir, start_date, time_origin, timestep ) 
     119      ( context_hdl, output_dir ) 
    192120     
    193121  END SUBROUTINE xios(is_defined_context_attr_hdl) 
    194122   
    195123  SUBROUTINE xios(is_defined_context_attr_hdl_)   & 
    196     ( context_hdl, calendar_type_, output_dir_, start_date_, time_origin_, timestep_ ) 
     124    ( context_hdl, output_dir_ ) 
    197125     
    198126    IMPLICIT NONE 
    199127      TYPE(txios(context)) , INTENT(IN) :: context_hdl 
    200       LOGICAL, OPTIONAL, INTENT(OUT) :: calendar_type_ 
    201       LOGICAL(KIND=C_BOOL) :: calendar_type__tmp 
    202128      LOGICAL, OPTIONAL, INTENT(OUT) :: output_dir_ 
    203129      LOGICAL(KIND=C_BOOL) :: output_dir__tmp 
    204       LOGICAL, OPTIONAL, INTENT(OUT) :: start_date_ 
    205       LOGICAL(KIND=C_BOOL) :: start_date__tmp 
    206       LOGICAL, OPTIONAL, INTENT(OUT) :: time_origin_ 
    207       LOGICAL(KIND=C_BOOL) :: time_origin__tmp 
    208       LOGICAL, OPTIONAL, INTENT(OUT) :: timestep_ 
    209       LOGICAL(KIND=C_BOOL) :: timestep__tmp 
    210        
    211       IF (PRESENT(calendar_type_)) THEN 
    212         calendar_type__tmp=cxios_is_defined_context_calendar_type(context_hdl%daddr) 
    213         calendar_type_=calendar_type__tmp 
    214       ENDIF 
    215130       
    216131      IF (PRESENT(output_dir_)) THEN 
    217132        output_dir__tmp=cxios_is_defined_context_output_dir(context_hdl%daddr) 
    218133        output_dir_=output_dir__tmp 
    219       ENDIF 
    220        
    221       IF (PRESENT(start_date_)) THEN 
    222         start_date__tmp=cxios_is_defined_context_start_date(context_hdl%daddr) 
    223         start_date_=start_date__tmp 
    224       ENDIF 
    225        
    226       IF (PRESENT(time_origin_)) THEN 
    227         time_origin__tmp=cxios_is_defined_context_time_origin(context_hdl%daddr) 
    228         time_origin_=time_origin__tmp 
    229       ENDIF 
    230        
    231       IF (PRESENT(timestep_)) THEN 
    232         timestep__tmp=cxios_is_defined_context_timestep(context_hdl%daddr) 
    233         timestep_=timestep__tmp 
    234134      ENDIF 
    235135       
Note: See TracChangeset for help on using the changeset viewer.