14#define SECONDS_PER_DAY 86400
56 char const * delta_model_time,
57 char const * delta_coupling_time,
64 getCalendarType() != CALENDAR_NOT_SET,
"no calendar has been defined")
69 char PTstring[MAX_TIMEDELTA_STR_LEN];
77 event->dummy_time_step = newTimeDelta(getPTStringFromMS(0, PTstring));
80 event->model_time_step = newTimeDelta(delta_model_time);
81 event->coupling_time_step = newTimeDelta(delta_coupling_time);
85 "failed to generate model timestep from \"%s\" "
86 "(has to be in ISO 8601 format)", delta_model_time)
89 "(has to be in ISO 8601 format)", delta_coupling_time)
91 compare_return_val compare_timestep =
94 compare_timestep != greater_than,
95 "model timestep is bigger than coupling timestep (\"%s\" > \"%s\")",
96 delta_model_time, delta_coupling_time)
100 if (compare_timestep == equal_to)
event->time_operation =
TIME_NONE;
102 calendarType set_calender = getCalendarType ();
105 set_calender != CALENDAR_NOT_SET,
"Calendar is not set.")
107 event->startdate = newDateTime(
startdate);
119 event->
stopdate != NULL,
"Failed to parse stopdate (\"%s\")",
124 event->model_time_step->sign=
'-';
127 for (
int i = 0; i <
lag; ++i)
129 addTimeDeltaToDateTime (
135 event->coupling_time_step->sign =
'-';
138 addTimeDeltaToDateTime (
140 event->coupling_time_step->sign =
'+';
142 event->model_time_step->sign=
'+';
144 char timedelta_str[MAX_TIMEDELTA_STR_LEN];
145 char datetime_str[MAX_DATETIME_STR_LEN];
149 "Coupling", (
char *) datetime_str, (
char *) datetime_str,
155#ifdef YAC_VERBOSE_EVENT
156 printf (
"event added\n" );
157 printf (
"- start date: %s\n",
159 printf (
"- current date: %s\n",
161 printf (
"- stop date: %s\n",
163 printf (
"- model time step: %s\n",
165 printf (
"- coupling time step: %s\n",
177 addTimeDeltaToDateTime(
198#ifdef YAC_VERBOSE_EVENT
199 char datetime_str[MAX_DATETIME_STR_LEN];
200 printf (
"- current date: %s\n",
202 printf (
"- stop date: %s\n",
206 compare_return_val check_stopdate =
210 (check_stopdate == less_than) ||
211 (check_stopdate == equal_to) ||
212 (check_stopdate == greater_than),
213 "compareDatetime(currentdate,stopdate) failed")
218 if (check_stopdate == greater_than) {
220#ifdef YAC_VERBOSE_EVENT
221 printf (
"event check delivers OUT_OF_BOUND\n");
234 if (check_stopdate == equal_to) {
236#ifdef YAC_VERBOSE_EVENT
237 printf (
"event check delivers RESTART\n" );
243#ifdef YAC_VERBOSE_EVENT
244 printf (
"event check delivers COUPLING\n" );
293 return event->time_operation;
299 struct event *
event,
char * timedelta_str ) {
301 memset(timedelta_str,
'\0',MAX_TIMEDELTA_STR_LEN);
305 return timedelta_str;
312 struct event *
event,
char * timedelta_str ) {
314 memset(timedelta_str,
'\0',MAX_TIMEDELTA_STR_LEN);
318 return timedelta_str;
332 struct _timedelta back = *(
event->model_time_step);
335 struct _datetime previousdate;
336 struct _datetime * result =
339 result,
"could not determine the previous datetime of the event");
341 datetimeToString(&previousdate, datetime_str);
348 int64_t time_int64_t = (int64_t)strtol(time, &endptr, 10);
349 YAC_ASSERT_F(*endptr ==
'\0',
"invalid time string '%s'", time)
365 getCalendarType() != CALENDAR_NOT_SET,
"calendar has not yet been set")
367 static char PT_String_buffer[MAX_TIMEDELTA_STR_LEN];
373 getPTStringFromMS(
str2int64(time), PT_String_buffer);
376 getPTStringFromSeconds(
str2int64(time), PT_String_buffer);
379 getPTStringFromMinutes(
str2int64(time), PT_String_buffer);
382 getPTStringFromHours(
str2int64(time), PT_String_buffer);
385 strncpy(PT_String_buffer, time, MAX_TIMEDELTA_STR_LEN-1);
389 return PT_String_buffer;
#define YAC_ASSERT(exp, msg)
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 * yac_get_event_previous_datetime(struct event *event, char *datetime_str)
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,...)