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/calendar.hpp

    r532 r549  
    3333            /// Constructeurs /// 
    3434            CCalendar(void); 
    35             CCalendar(const StdString& id) ; 
     35            CCalendar(const StdString& id); 
    3636            CCalendar(const StdString& id, 
    3737                      int yr, int mth, int d, 
     
    4949            /// Autres /// 
    5050            virtual StdString toString(void) const; 
    51             virtual void fromString(const StdString & str); 
     51            virtual void fromString(const StdString& str); 
    5252 
    5353            /// Mutateur /// 
    54             void setTimeStep(const CDuration & duration); 
     54            void setTimeStep(const CDuration& timestep); 
     55            void setInitDate(const CDate& initDate); 
     56            void setTimeOrigin(const CDate& timeOrigin); 
    5557 
    5658            /// Traitemants /// 
    57             CDate & update(int step); 
     59            CDate& update(int step); 
    5860 
    5961            /// Accesseurs /// 
    60             const CDuration & getTimeStep(void) const; 
    61             const CDate & getInitDate(void) const; 
    62             const CDate & getTimeOrigin(void) const; 
    63              CDate & getCurrentDate(void); 
    64              
     62            const CDuration& getTimeStep(void) const; 
     63            const CDate& getInitDate(void) const; 
     64            const CDate& getTimeOrigin(void) const; 
     65            CDate& getCurrentDate(void); 
     66 
    6567         public : 
    66           
     68 
    6769            //------------------------------------------------------------ 
    68             virtual int getMonthLength(const CDate & date) const ; 
     70            virtual int getMonthLength(const CDate& date) const; 
    6971 
    7072            virtual StdString getType(void) const; 
    7173 
    72             virtual int getYearTotalLength(const CDate & date) const ; // Retourne la durée d'une année en seconde. 
     74            virtual int getYearTotalLength(const CDate& date) const; // Retourne la durée d'une année en seconde. 
    7375 
    7476            virtual int getYearLength  (void) const; // Retourne la durée d'une année en mois. 
     
    7678            virtual int getHourLength  (void) const; // Retourne la durée d'une heure en minute. 
    7779            virtual int getMinuteLength(void) const; // Retourne la durée d'une minute en secondes. 
     80            //!< Returns the day length expressed in seconds 
     81            virtual int getDayLengthInSeconds(void) const; 
    7882 
    79             virtual int getNbSecond(const CDate & date) const; 
    8083            virtual StdString getMonthName(int month_id) const; 
    8184 
    8285            virtual const StdString getMonthShortName(int month_id) const; 
    83             void initializeDate(int yr, int mth, int d, int hr = 0, int min = 0, int sec = 0) ; 
    84             void initializeDate(const StdString & dateStr); 
    85             void initializeDate(const StdString & dateStr, const StdString & timeOrigin); 
     86            void initializeDate(int yr, int mth, int d, int hr = 0, int min = 0, int sec = 0); 
     87            void initializeDate(const StdString& dateStr); 
     88            void initializeDate(const StdString& dateStr, const StdString& timeOrigin); 
    8689 
    8790            //------------------------------------------------------------ 
    8891 
    8992         protected: 
    90              
     93 
    9194            //!< Associate the dates to the calendar and check their validity 
    9295            void initializeDate(); 
Note: See TracChangeset for help on using the changeset viewer.