Skip to content

Commit 612799b

Browse files
committed
Provide consistency in setting of prevRingTime for alarms when changing ref time
This commit aims to provide consistency in the ringing behavior of alarms after a call to mpas_adjust_alarm_to_reference_time to alter the reference time for a recurring alarm. For simplicity of discussion, consider only a clock that is running forward in time. The objective of the mpas_adjust_alarm_to_reference_time routine is to set the prevRingTime (previous ring time) of a recurring alarm to (1) a time that differs from the specified reference time by an integer multiple of the alarm interval; and (2) the latest such time that is not after the current time on the clock. Prior to this commit, the logic in the mpas_adjust_alarm_to_reference_time routine resulted in one of two outcomes: (1) If the difference between the reference time and the current time is divisible by the alarm interval, the prevRingTime becomes the current time, as illustrated below. ring ring ring ring v v v v ----------------------------------------------------------- ^ now prevRingTime (2) Otherwise, the prevRingTime becomes the latest time before the current time that lies on an integer multiple of the alarm interval away from the reference time, as illustrated below. ring ring ring ring v v v v ----------------------------------------------------------- ^ ^ prevRingTime now To determine whether a recurring alarm is ringing, the alarm's interval is added to the alarm's prevRingTime. If the result is on or before the current time, the alarm is ringing; otherwise, if the result is later than the current time, the alarm is not ringing. As a consequence, outcome (1) from the mpas_adjust_alarm_to_reference_time leads to an alarm that is ringing after the call to the routine, while outcome(2) leads to an alarm that is not yet ringing. In order to rectify the inconsistency in whether an alarm is ringing depending on where its reference time is set relative to the current time, the prevRingTime for an alarm is always set to be at least one full alarm interval before the current time. Whether the difference between the current time and the reference time is evenly divisible by the alarm's ring interval or not, a query of the alarm's status immediately following the call to mpas_adjust_alarm_to_reference_time will always show that it is ringing. This commit makes changes to the logic for both a forward and a backward running clock in the mpas_adjust_alarm_to_reference_time routine, although it appears that no code actually makes use of a backward running clock at present.
1 parent 1d6ec7c commit 612799b

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/framework/mpas_timekeeping.F

+2-2
Original file line numberDiff line numberDiff line change
@@ -1023,7 +1023,7 @@ subroutine mpas_adjust_alarm_to_reference_time(clock, alarmID, referenceTime, ie
10231023
if (now > referenceTime) then
10241024
searchInterval = now - referenceTime
10251025
call mpas_interval_division(referenceTime, searchInterval, alarmPtr % ringTimeInterval, nDivs, searchRemainder)
1026-
alarmPtr % prevRingTime = now - searchRemainder
1026+
alarmPtr % prevRingTime = now - (alarmPtr % ringTimeInterval + searchRemainder)
10271027
else
10281028
searchInterval = referenceTime - now
10291029
call mpas_interval_division(referenceTime, searchInterval, alarmPtr % ringTimeInterval, nDivs, searchRemainder)
@@ -1033,7 +1033,7 @@ subroutine mpas_adjust_alarm_to_reference_time(clock, alarmID, referenceTime, ie
10331033
if (now < referenceTime) then
10341034
searchInterval = now - referenceTime
10351035
call mpas_interval_division(referenceTime, searchInterval, alarmPtr % ringTimeInterval, nDivs, searchRemainder)
1036-
alarmPtr % prevRingTime = now - searchRemainder
1036+
alarmPtr % prevRingTime = now - (alarmPtr % ringTimeInterval + searchRemainder)
10371037
else
10381038
searchInterval = referenceTime - now
10391039
call mpas_interval_division(referenceTime, searchInterval, alarmPtr % ringTimeInterval, nDivs, searchRemainder)

0 commit comments

Comments
 (0)