Skip to content
Snippets Groups Projects
Commit 335b01ec authored by Luis Kornblueh's avatar Luis Kornblueh
Browse files

Added more Fortran functions

parent 81da659b
No related branches found
No related tags found
No related merge requests found
!> TODO: we need undefs for a lot of datatypes
FUNCTION triggerEvent(this, current_dt, plus_slack, minus_slack) RESULT(res) FUNCTION triggerEvent(this, current_dt, plus_slack, minus_slack) RESULT(res)
CLASS(t_event) :: this CLASS(t_event) :: this
TYPE(t_datetime), INTENT(in) :: current_dt TYPE(t_datetime), INTENT(in) :: current_dt
...@@ -344,156 +346,98 @@ FUNCTION getEventFirstTriggerDateTime(start_dt, timestep, offset, ref_dt) RESULT ...@@ -344,156 +346,98 @@ FUNCTION getEventFirstTriggerDateTime(start_dt, timestep, offset, ref_dt) RESULT
END FUNCTION getEventFirstTriggerDateTime END FUNCTION getEventFirstTriggerDateTime
function getTriggerNextEventAtDateTime(e, current_dt) result(dt_return) FUNCTION getTriggerNextEventAtDateTime(e, current_dt) RESULT(dt_return)
type(t_datetime) :: dt_return TYPE(t_datetime) :: dt_return
type(t_event), intent(in) :: e TYPE(t_event), INTENT(in) :: e
type(t_datetime), intent(in) :: current_dt TYPE(t_datetime), INTENT(in) :: current_dt
type(t_timedelta) :: modulo_td TYPE(t_timedelta) :: modulo_td
if (e%eventLastDateTime && (compareDatetime(current_dt,e%eventLastDateTime) == greater_than)) IF (e%eventLastDateTime .and. (current_dt > e%eventLastDateTime)) then
return NULL RETURN
ENDIF
if (e%nextEventIsFirst) .and. (current_dt > e%triggerNextEventDateTime)) then IF (e%nextEventIsFirst .AND. (current_dt > e%triggerNextEventDateTime)) THEN
struct _timedelta* modulo_td = newTimeDelta("PT00.000S") moduloTimeDeltaFromDateTime(e%triggerNextEventDateTime, e%eventInterval, current_dt, modulo_td)
// Get the first trigger time and return (WARNING: Do not update e%triggerNextEventDateTime here!). dt_return = current_dt + modulo_td
moduloTimeDeltaFromDateTime(e%triggerNextEventDateTime, e%eventInterval, current_dt, modulo_td) ELSE
addTimeDeltaToDateTime(current_dt,modulo_td,dt_return) dt_return = e%triggerNextEventDateTime
// Cleanup. ENDIF
deallocateTimeDelta(modulo_td)
return dt_return END FUNCTION getTriggerNextEventAtDateTime
}
// else ...
dt_return = replaceDatetime(e%triggerNextEventDateTime, dt_return)
return dt_return
end function getTriggerNextEventAtDateTime
! /**
! * @brief Get the Datetime when 'this' event was triggered last.
! *
! * @param e
! * A pointer to struct _event. This is the event being queried.
! *
! * @param dt_return
! * A pointer to struct _datetime. The last trigger datetime is copied here.
! *
! * @return dt_return
! * A pointer to DT with previous-trigger datetime.
! */
! /* NOTE: If the event was never tiggered, default value of 0-01-01T00:00:00.000 is returned. */
! struct _datetime*
! getTriggeredPreviousEventAtDateTime(struct _event* e, struct _datetime* dt_return)
! {
! if ((e /= NULL )&& (dt_return /= NULL) )
! {
! /* No trigger ever happened? */ ! /* No trigger ever happened? */
! if (e%nextEventIsFirst) ! if (e%nextEventIsFirst)
! return NULL ! return NULL
FUNCTION getTriggeredPreviousEventAtDateTime(e) result(dt_return)
type(t_datetime) :: dt_return
type(t_event) :: e
dt_return = e%triggeredPreviousEventDateTime
end FUNCTION getTriggeredPreviousEventAtDateTime
! replaceDatetime(e%triggeredPreviousEventDateTime, dt_return) function getEventReferenceDateTime(e) result(dt_return)
! return dt_return type(t_datetime) :: dt_return
! } type(t_event) :: e
! else dt_return ? e%eventReferenceDateTime
! return NULL end function getEventReferenceDateTime
! }
function getEventFirstDateTime(e) result(dt_return)
type(t_datetime) :: dt_return
! struct _datetime* type(t_event) :: e
! getEventReferenceDateTime(struct _event* e) dt_return = e%eventFirstDateTime
! { end function getEventFirstDateTime
! if (e /= NULL)
! return e%eventReferenceDateTime function getEventLastDateTime(e) result(dt_return)
! else type(t_datetime) :: dt_return
! return NULL type(t_event) :: e
! } dt_return = e%eventLastDateTime
end function getEventLastDateTime
! struct _datetime*
! getEventFirstDateTime(struct _event* e) function getEventInterval(e) result(td_return)
! { type(t_timedelta) :: td_return
! if (e /= NULL) type(t_event) :: e
! return e%eventFirstDateTime dt_return = e%eventInterval
! else end function getEventInterval
! return NULL
! } function getNextEventIsFirst(e) result(is)
logical :: is
! struct _datetime* type(t_event) :: e
! getEventLastDateTime(struct _event* e) is = e%nextEventIsFirst
! { end function getNextEventIsFirst
! if (e /= NULL)
! return e%eventLastDateTime function getEventisFirstInDay(e) result(is)
! else logical :: is
! return NULL type(t_event) :: e
! } is = e%eventisFirstInDay
end function getEventisFirstInDay
! struct _timedelta*
! getEventInterval(struct _event* e) function getEventisFirstInMonth(e) result(is)
! { logical :: is
! if (e /= NULL) type(t_event) :: e
! return e%eventInterval is = e%eventisFirstInMonth
! else end function getEventisFirstInMonth
! return NULL
! } function getEventisFirstInYear(e) result(is)
logical :: is
! bool type(t_event) :: e
! getNextEventIsFirst(struct _event* e) is = e%eventisFirstInYear
! { end function getEventisFirstInYear
! if (e /= NULL)
! return e%nextEventIsFirst function getEventisLastInDay(e) result(is)
! else logical :: is
! return false type(t_event) :: e
! } is = e%eventisLastInDay
end function getEventisLastInDay
! bool
! getEventisFirstInDay(struct _event* e) function getEventisLastInMonth(e) result(is)
! { logical :: is
! if (e /= NULL) type(t_event) :: e
! return e%eventisFirstInDay is = e%eventisLastInMonth
! else end function getEventisLastInMonth
! return false
! } function getEventisLastInYear(e) result(is)
logical :: is
! bool type(t_event) :: e
! getEventisFirstInMonth(struct _event* e) is = e%eventisLastInYear
! { end function getEventisLastInYear
! if (e /= NULL)
! return e%eventisFirstInMonth
! else
! return false
! }
! bool
! getEventisFirstInYear(struct _event* e)
! {
! if (e /= NULL)
! return e%eventisFirstInYear
! else
! return false
! }
! bool
! getEventisLastInDay(struct _event* e)
! {
! if (e /= NULL)
! return e%eventisLastInDay
! else
! return false
! }
! bool
! getEventisLastInMonth(struct _event* e)
! {
! if (e /= NULL)
! return e%eventisLastInMonth
! else
! return false
! }
! bool
! getEventisLastInYear(struct _event* e)
! {
! if (e /= NULL)
! return e%eventisLastInYear
! else
! return false
! }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment