Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
libmtime
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
icon-libraries
libmtime
Commits
335b01ec
Commit
335b01ec
authored
6 years ago
by
Luis Kornblueh
Browse files
Options
Downloads
Patches
Plain Diff
Added more Fortran functions
parent
81da659b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/trigger.f90
+89
-145
89 additions, 145 deletions
src/trigger.f90
with
89 additions
and
145 deletions
src/trigger.f90
+
89
−
145
View file @
335b01ec
!> 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
! }
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment