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/node/context.hpp

    r511 r549  
    55#include "xmlioserver_spl.hpp" 
    66//#include "node_type.hpp" 
    7 #include "calendar.hpp" 
     7#include "calendar_wrapper.hpp" 
    88 
    99#include "declare_group.hpp" 
     
    1616 
    1717namespace xios { 
    18    class CContextClient ; 
    19    class CContextServer ; 
     18   class CContextClient; 
     19   class CContextServer; 
    2020 
    2121 
     
    5151           EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE, 
    5252           EVENT_ID_POST_PROCESS 
    53          } ; 
     53         }; 
    5454 
    5555         /// typedef /// 
     
    8787      public : 
    8888         // Initialize server or client 
    89          void initServer(MPI_Comm intraComm, MPI_Comm interComm) ; 
    90          void initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer=0) ; 
    91          bool isInitialized(void) ; 
     89         void initServer(MPI_Comm intraComm, MPI_Comm interComm); 
     90         void initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer=0); 
     91         bool isInitialized(void); 
    9292 
    9393         // Put sever or client into loop state 
    94          bool eventLoop(void) ; 
    95          bool serverLoop(void) ; 
    96          void clientLoop(void) ; 
    97  
    98          // Process all information of calendar 
    99          void solveCalendar(void); 
     94         bool eventLoop(void); 
     95         bool serverLoop(void); 
     96         void clientLoop(void); 
    10097 
    10198         // Finalize a context 
    102          void finalize(void) ; 
    103          void closeDefinition(void) ; 
     99         void finalize(void); 
     100         void closeDefinition(void); 
    104101 
    105102         // Some functions to process context 
    106103         void findAllEnabledFields(void); 
    107          void processEnabledFiles(void) ; 
    108          void solveAllInheritance(bool apply=true) ; 
     104         void processEnabledFiles(void); 
     105         void solveAllInheritance(bool apply=true); 
    109106         void findEnabledFiles(void); 
    110          void closeAllFile(void) ; 
    111          void updateCalendar(int step) ; 
    112          void createFileHeader(void ) ; 
     107         void closeAllFile(void); 
     108         void updateCalendar(int step); 
     109         void createFileHeader(void ); 
    113110         void solveAllRefOfEnabledFields(bool sendToServer); 
    114111         void buildAllExpressionOfEnabledFields(); 
     
    119116 
    120117         // Send context close definition 
    121          void sendCloseDefinition(void) ; 
     118         void sendCloseDefinition(void); 
    122119         // There are something to send on closing context defintion 
    123          void sendUpdateCalendar(int step) ; 
    124          void sendCreateFileHeader(void) ; 
     120         void sendUpdateCalendar(int step); 
     121         void sendCreateFileHeader(void); 
    125122         void sendEnabledFiles(); 
    126123         void sendEnabledFields(); 
     
    132129 
    133130         // Client side: Receive and process messages 
    134          static void recvUpdateCalendar(CEventServer& event) ; 
    135          void recvUpdateCalendar(CBufferIn& buffer) ; 
    136          static void recvCloseDefinition(CEventServer& event) ; 
    137          static void recvCreateFileHeader(CEventServer& event) ; 
    138          void recvCreateFileHeader(CBufferIn& buffer) ; 
     131         static void recvUpdateCalendar(CEventServer& event); 
     132         void recvUpdateCalendar(CBufferIn& buffer); 
     133         static void recvCloseDefinition(CEventServer& event); 
     134         static void recvCreateFileHeader(CEventServer& event); 
     135         void recvCreateFileHeader(CBufferIn& buffer); 
    139136         static void recvSolveInheritanceContext(CEventServer& event); 
    140137         void recvSolveInheritanceContext(CBufferIn& buffer); 
     
    143140 
    144141         // dispatch event 
    145          static bool dispatchEvent(CEventServer& event) ; 
     142         static bool dispatchEvent(CEventServer& event); 
    146143 
    147144      public: 
     
    191188 
    192189         // Context root 
    193          static shared_ptr<CContextGroup> root ; 
     190         static shared_ptr<CContextGroup> root; 
    194191 
    195192         // Determine context on client or not 
    196          bool hasClient ; 
     193         bool hasClient; 
    197194 
    198195         // Determine context on server or not 
    199          bool hasServer ; 
     196         bool hasServer; 
    200197 
    201198         // Concrete context server 
    202          CContextServer* server ; 
     199         CContextServer* server; 
    203200 
    204201         // Concrete contex client 
    205          CContextClient* client ; 
     202         CContextClient* client; 
    206203 
    207204      private: 
Note: See TracChangeset for help on using the changeset viewer.