14#define SECONDS_PER_DAY 86400
56 char const * delta_model_time,
57 char const * delta_coupling_time,
64 getCalendarType() != CALENDAR_NOT_SET,
65 "ERROR(yac_event_add): no calendar has been defined")
67 "ERROR(yac_event_add): event is already initialised.");
71 char PTstring[MAX_TIMEDELTA_STR_LEN];
79 event->dummy_time_step = newTimeDelta(getPTStringFromMS(0, PTstring));
82 event->model_time_step = newTimeDelta(delta_model_time);
83 event->coupling_time_step = newTimeDelta(delta_coupling_time);
87 "ERROR(yac_event_add): failed to generate model timestep from \"%s\" "
88 "(has to be in ISO 8601 format)", delta_model_time)
91 "ERROR(yac_event_add): failed to generate model timestep from \"%s\""
92 "(has to be in ISO 8601 format)", delta_coupling_time)
101 calendarType set_calender = getCalendarType ();
104 set_calender != CALENDAR_NOT_SET,
"ERROR: Calendar is not set.")
106 event->startdate = newDateTime(
startdate);
109 event->currentdate = newDateTime(
startdate);
112 event->stopdate = newDateTime(
stopdate);
115 char timedelta_str[MAX_TIMEDELTA_STR_LEN];
124#ifdef YAC_VERBOSE_EVENT
125 char datetime_str[MAX_DATETIME_STR_LEN];
126 printf (
"event add for event ID %d \n", event_id );
127 printf (
"- start date: %s\n",
129 printf (
"- current date: %s\n",
131 printf (
"- stop date: %s\n",
133 printf (
"- model time step: %s\n",
135 printf (
"- coupling time step: %s\n",
145 for (
int i = 0; i <
event->lag; ++i )
147 addTimeDeltaToDateTime (
149#ifdef YAC_VERBOSE_EVENT
150 printf (
"- model time lag: %d\n",
event->
lag );
151 printf (
"- new current date: %s\n",
162 "ERROR(yac_event_update): event has not yet been initialised");
165 addTimeDeltaToDateTime(
185#ifdef YAC_VERBOSE_EVENT
186 char datetime_str[MAX_DATETIME_STR_LEN];
187 printf (
"- current date: %s\n",
189 printf (
"- stop date: %s\n",
193 compare_return_val check_stopdate =
197 (check_stopdate == less_than) ||
198 (check_stopdate == equal_to) ||
199 (check_stopdate == greater_than),
200 "ERROR(yac_event_check): compareDatetime(currentdate,stopdate) failed")
205 if (check_stopdate == greater_than) {
207#ifdef YAC_VERBOSE_EVENT
208 printf (
"event check for event ID %d delivers OUT_OF_BOUND\n", event_id );
214 compare_return_val check_startdate =
217 check_startdate != less_than,
218 "ERROR(yac_event_check): compareDatetime(currentdate,startdate) failed; "
219 "current date is before start date")
221 (check_startdate == equal_to) ||
222 (check_startdate == greater_than),
223 "ERROR(yac_event_check): compareDatetime(currentdate,startdate) failed")
232 if (check_stopdate == equal_to) {
234#ifdef YAC_VERBOSE_EVENT
235 printf (
"event check for event ID %d delivers RESTART\n", event_id );
241#ifdef YAC_VERBOSE_EVENT
242 printf (
"event check for event ID %d delivers COUPLING\n", event_id );
286 return event->time_operation;
292 struct event *
event,
char * timedelta_str ) {
294 memset(timedelta_str,
'\0',MAX_TIMEDELTA_STR_LEN);
298 return timedelta_str;
305 struct event *
event,
char * timedelta_str ) {
307 memset(timedelta_str,
'\0',MAX_TIMEDELTA_STR_LEN);
311 return timedelta_str;
323 int64_t time_int64_t = (int64_t)strtol(time, &endptr, 10);
325 *endptr ==
'\0',
"ERROR(str2int64): invalid time string '%s'", time)
338 "ERROR(yac_time_to_ISO): unsupported time unit")
341 getCalendarType() != CALENDAR_NOT_SET,
342 "ERROR(yac_time_to_ISO): calendar has not yet been set")
344 static char PT_String_buffer[MAX_TIMEDELTA_STR_LEN];
350 getPTStringFromMS(
str2int64(time), PT_String_buffer);
353 getPTStringFromSeconds(
str2int64(time), PT_String_buffer);
356 getPTStringFromMinutes(
str2int64(time), PT_String_buffer);
359 getPTStringFromHours(
str2int64(time), PT_String_buffer);
362 strncpy(PT_String_buffer, time, MAX_TIMEDELTA_STR_LEN-1);
366 return PT_String_buffer;
char * yac_get_event_model_timestep(struct event *event, char *timedelta_str)
char * yac_get_event_coupling_timestep(struct event *event, char *timedelta_str)
int yac_get_event_lag(struct event *event)
void yac_event_delete(struct event *event)
char * yac_get_event_current_datetime(struct event *event, char *datetime_str)
static int64_t str2int64(char const *time)
struct event * yac_event_new()
char const * yac_time_to_ISO(char const *time, enum yac_time_unit_type time_unit)
int yac_get_event_time_operation(struct event *event)
void yac_event_add(struct event *event, char const *delta_model_time, char const *delta_coupling_time, int lag, enum yac_reduction_type time_operation, const char *startdate, const char *stopdate)
enum yac_action_type yac_event_check(struct event *event)
void yac_event_update(struct event *event)
enum yac_time_unit_type time_unit
enum yac_reduction_type time_operation
struct _datetime * stopdate
struct _datetime * startdate
enum yac_action_type action
struct _datetime * offset
struct _timedelta * model_time_step
struct _datetime * currentdate
struct _timedelta * dummy_time_step
struct _timedelta * coupling_time_step
#define YAC_ASSERT_F(exp, format,...)
#define YAC_ASSERT(exp, msg)