@@ -19,6 +19,7 @@ module mapl3g_Cap
1919 character (len=* ), parameter :: KEY_RESTART = ' restart'
2020 character (len=* ), parameter :: KEY_CLOCK = ' clock'
2121 character (len=* ), parameter :: KEY_CURRTIME = ' currTime'
22+ character (len=* ), parameter :: KEY_REPEATCOUNT = ' repeatCount'
2223
2324 type CheckpointOptions
2425 logical :: is_enabled = .false.
@@ -59,7 +60,7 @@ subroutine mapl_run_driver(hconfig, is_model_pet, unusable, servers, rc)
5960 call mapl_DriverInitializePhases(driver, phases= GENERIC_INIT_PHASE_SEQUENCE, _RC)
6061 call integrate(driver, hconfig, options% checkpointing, options% lgr, _RC)
6162 call driver% finalize(_RC)
62- call update_restart_currTime (hconfig, clock, _RC)
63+ call update_restart (hconfig, clock, _RC)
6364
6465 _RETURN(_SUCCESS)
6566 _UNUSED_DUMMY(unusable)
@@ -341,15 +342,21 @@ function make_clock(hconfig, lgr, rc) result(clock)
341342 type (ESMF_Time) :: end_of_segment
342343 type (ESMF_TimeInterval) :: timeStep, segment_duration
343344 type (ESMF_TimeInterval), allocatable :: repeatDuration
344- logical :: has_repeatDuration
345+ logical :: has_repeatDuration, has_repeatCount
345346 character (:), allocatable :: cap_restart_file
346347 character (ESMF_MAXSTR) :: iso_time
348+ integer (kind= ESMF_KIND_I8) :: repeatCount
347349
350+ repeatCount = 0
348351 cap_restart_file = esmf_HConfigAsString(hconfig, keyString= KEY_RESTART, _RC)
349352 restart_cfg = esmf_HConfigCreate(filename= cap_restart_file, _RC)
350353 currTime = mapl_HConfigAsTime(restart_cfg, keyString= ' currTime' , _RC)
351354 iso_time = esmf_HConfigAsString(restart_cfg, keystring= ' currTime' , _RC)
352355 call lgr% info(' current time: %a' , trim (iso_time))
356+ has_repeatCount = ESMF_HConfigIsDefined(restart_cfg, keyString= KEY_REPEATCOUNT, _RC)
357+ if (has_repeatCount) then
358+ repeatCount = ESMF_HConfigAsI8(restart_cfg, keyString= KEY_REPEATCOUNT, _RC)
359+ end if
353360 call esmf_HConfigDestroy(restart_cfg, _RC)
354361
355362 clock_cfg = esmf_HConfigCreateAt(hconfig, keystring= KEY_CLOCK, _RC)
@@ -381,6 +388,8 @@ function make_clock(hconfig, lgr, rc) result(clock)
381388 call lgr% info(' repeat duration: %a' , trim (iso_time))
382389 end if
383390
391+ ! Currently, repeatCount is not an argument for ESMF_ClockCreate or ESMF_ClockSet.
392+ ! Once it is added, it should be included in the create/set below.
384393 clock = esmf_ClockCreate(timeStep= timeStep, &
385394 startTime= startTime, stopTime= end_of_segment, &
386395 refTime= startTime, &
@@ -598,32 +607,31 @@ subroutine make_symlink(checkpointing_path, target_name, rc)
598607 _RETURN(_SUCCESS)
599608 end subroutine make_symlink
600609
601- subroutine update_restart_currTime (hconfig , clock , rc )
610+ subroutine update_restart (hconfig , clock , rc )
602611 type (ESMF_HConfig), intent (in ) :: hconfig
603612 type (ESMF_Clock), intent (inout ) :: clock
604613 integer , optional , intent (out ) :: rc
605614 integer :: status
606- character (len= :), allocatable :: currTimeString
607615 type (ESMF_Time) :: currTime
616+ integer (kind= ESMF_KIND_I8) :: repeatCount
608617 logical :: restart_is_defined
609618 character (:), allocatable :: cap_restart_file
610619 type (ESMF_HConfig) :: restart_cfg
611- integer , parameter :: ISOSTRING_LENGTH= 20
620+ integer , parameter :: ISOSTRING_LENGTH = 20
612621 character (len= ISOSTRING_LENGTH) :: timeString
613622
614-
615- call ESMF_ClockGet(clock, currTime= currTime, _RC)
623+ call ESMF_ClockGet(clock, currTime= currTime, repeatCount= repeatCount, _RC)
616624 call ESMF_TimeGet(currTime, timeString= timeString, _RC)
617- currTimeString = trim (timeString)
618625 restart_is_defined = ESMF_HConfigIsDefined(hconfig, keyString= KEY_RESTART, _RC)
619626 _ASSERT(restart_is_defined, ' Unable to get restart filename' )
620627 cap_restart_file = ESMF_HConfigAsString(hconfig, keyString= KEY_RESTART, _RC)
621- restart_cfg = ESMF_HConfigCreate(filename= cap_restart_file, _RC)
622- call ESMF_HConfigSet(restart_cfg, content= timeString, keyString= KEY_CURRTIME, _RC)
628+ restart_cfg = ESMF_HConfigCreate(_RC)
629+ call ESMF_HConfigAdd(restart_cfg, content= timeString, addKeyString= KEY_CURRTIME, _RC)
630+ call ESMF_HConfigAdd(restart_cfg, content= repeatCount, addKeyString= KEY_REPEATCOUNT, _RC)
623631 call ESMF_HConfigFileSave(restart_cfg, cap_restart_file, _RC)
624632 call ESMF_HConfigDestroy(restart_cfg, _RC)
625633 _RETURN(_SUCCESS)
626634
627- end subroutine update_restart_currTime
635+ end subroutine update_restart
628636
629637end module mapl3g_Cap
0 commit comments