#include #include #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" #include "cctk_Termination.h" #include "cctk_Timers.h" int ManualTermination_StartTimer (CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; int retval = 0; int ierr; int TimerIndex; /* only one processor needs to query the elapsed runtime */ if (CCTK_MyProc (cctkGH) != 0) { return (0); } /* Create timer */ TimerIndex = CCTK_TimerCreate ("WatchWalltime"); /* Start timer */ ierr = CCTK_TimerStart ("WatchWalltime"); *watchminutes = output_remtime_every_minutes*1.0e0; CCTK_VInfo (CCTK_THORNSTRING, "Started Timer"); CCTK_VInfo (CCTK_THORNSTRING, "Reminding you every %d " "minutes about remaining walltime.", output_remtime_every_minutes); return (retval); } int ManualTermination_ResetMinutes (CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; *watchminutes = output_remtime_every_minutes*1.0e0; return 0; } int ManualTermination_CheckWalltime (CCTK_ARGUMENTS) { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; int retval = 0,ierr; cTimerData *info; const cTimerVal *walltime; CCTK_REAL time; /* only one processor needs to query the elapsed runtime */ if (CCTK_MyProc (cctkGH) != 0) { return (0); } if (on_remaining_walltime <= 0) return retval; info = CCTK_TimerCreateData (); ierr = CCTK_Timer ("WatchWalltime",info); /* stop timer */ ierr = CCTK_TimerStop ("WatchWalltime"); /* get walltime */ walltime = CCTK_GetClockValue ("gettimeofday",info); time = CCTK_TimerClockSeconds (walltime); CCTK_TimerDestroyData (info); /* start timer */ ierr = CCTK_TimerStart ("WatchWalltime"); if ((time/60.0e0 > *watchminutes) && *watchminutes != 0) { *watchminutes = (*watchminutes)+output_remtime_every_minutes*1.0e0; CCTK_INFO ("------------------------------------------------------"); CCTK_VInfo (CCTK_THORNSTRING, "Remaining wallclock time for your job " "is %1.2f minutes. :-)", (max_walltime*60.0-time/60.0)); CCTK_INFO ("------------------------------------------------------"); } if (time/60.0e0 >= (max_walltime*60.0e0 - on_remaining_walltime*1.0e0)) { CCTK_INFO ("------------------------------------------------------"); CCTK_VInfo (CCTK_THORNSTRING, "Remaining wallclock time for your job " "is %1.2f minutes. Triggering termination ...", (max_walltime*60.0-time/60.0)); CCTK_INFO ("------------------------------------------------------"); CCTK_TerminateNext (cctkGH); } return retval; }