diff options
author | swhite <swhite@e5a5a894-0e4f-0410-be11-d22c8b0a171a> | 2006-04-27 15:20:42 +0000 |
---|---|---|
committer | swhite <swhite@e5a5a894-0e4f-0410-be11-d22c8b0a171a> | 2006-04-27 15:20:42 +0000 |
commit | 50ac02734e80dc84326274e2a77bb03bf626e03a (patch) | |
tree | a9cfcd52021b1d3da8dcf7d4cf74307a4f39f4a7 /src | |
parent | d69c71d3983cee0cfd3793734a5c9fa8b1391b21 (diff) |
Made it work.
git-svn-id: http://svn.aei.mpg.de/numrel/AEIThorns/ManualTermination/trunk@3 e5a5a894-0e4f-0410-be11-d22c8b0a171a
Diffstat (limited to 'src')
-rw-r--r-- | src/ManualTermination.c | 80 | ||||
-rw-r--r-- | src/ManualTermination.h | 8 | ||||
-rw-r--r-- | src/ManualTerminationFile.c | 89 |
3 files changed, 96 insertions, 81 deletions
diff --git a/src/ManualTermination.c b/src/ManualTermination.c index 0dce2fe..e0e32c4 100644 --- a/src/ManualTermination.c +++ b/src/ManualTermination.c @@ -1,39 +1,12 @@ -#include <stdio.h> #include <stdlib.h> #include <string.h> -#include <errno.h> #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" #include "cctk_Termination.h" #include "cctk_Timers.h" -#include "ManualTermination.h" -enum{ BUFLEN = 128 }; - -/* On first call, pass parameter terminate_filename. - If it is null will construct file name in /tmp based on PBS_JOBID. - Subsequent calls ignore the argument, and return a static buffer. -*/ -const char * MT_get_terminate_filename( CCTK_STRING terminate_filename ) -{ - static char buf[BUFLEN]; - - if( strlen( buf ) != 0 ) - return buf; - - if( strlen( terminate_filename ) == 0 ) - { - const char * pbs_jobid = getenv("PBS_JOBID"); - snprintf( buf, BUFLEN, "/tmp/cactus_terminate.%s", pbs_jobid ); - } - else - { - snprintf( buf, BUFLEN, "%s", terminate_filename ); - } - return buf; -} int ManualTermination_StartTimer (CCTK_ARGUMENTS) { @@ -50,9 +23,9 @@ int ManualTermination_StartTimer (CCTK_ARGUMENTS) return (0); } /* Create timer */ - TimerIndex = CCTK_TimerCreate("WatchWalltime"); + TimerIndex = CCTK_TimerCreate ("WatchWalltime"); /* Start timer */ - ierr = CCTK_TimerStart("WatchWalltime"); + ierr = CCTK_TimerStart ("WatchWalltime"); *watchminutes = output_remtime_every_minutes*1.0e0; @@ -60,22 +33,6 @@ int ManualTermination_StartTimer (CCTK_ARGUMENTS) CCTK_VInfo (CCTK_THORNSTRING, "Reminding you every %d " "minutes about remaining walltime.", output_remtime_every_minutes); - - if( termination_from_file ) - { - FILE *termfile = fopen( MT_get_terminate_filename(termination_file), "w" ); - if( termfile != NULL ) - { - fprintf( termfile, "%d", 0 ); - fclose( termfile ); - } - else - { - CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, "ManualTermination", - "Could not open termination file '%s'. Error: %d", - MT_get_terminate_filename(NULL), strerror(errno)); - } - } return (retval); } @@ -94,7 +51,7 @@ int ManualTermination_CheckWalltime (CCTK_ARGUMENTS) DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; - int retval,ierr; + int retval = 0,ierr; cTimerData *info; const cTimerVal *walltime; CCTK_REAL time; @@ -104,37 +61,38 @@ int ManualTermination_CheckWalltime (CCTK_ARGUMENTS) { return (0); } + if (on_remaining_walltime <= 0) + return retval; - info = CCTK_TimerCreateData(); - ierr = CCTK_Timer("WatchWalltime",info); - + info = CCTK_TimerCreateData (); + ierr = CCTK_Timer ("WatchWalltime",info); /* stop timer */ - ierr = CCTK_TimerStop("WatchWalltime"); + ierr = CCTK_TimerStop ("WatchWalltime"); /* get walltime */ - walltime = CCTK_GetClockValue("gettimeofday",info); - time = CCTK_TimerClockSeconds(walltime); - CCTK_TimerDestroyData(info); - /* Start timer */ - ierr = CCTK_TimerStart("WatchWalltime"); + 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) + if ((time/60.0e0 > *watchminutes) && *watchminutes != 0) { *watchminutes = (*watchminutes)+output_remtime_every_minutes*1.0e0; - CCTK_INFO ("***********************************************************"); + 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 ("***********************************************************"); + 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); } - retval = 0; - - return (retval); + return retval; } diff --git a/src/ManualTermination.h b/src/ManualTermination.h deleted file mode 100644 index bca3f3c..0000000 --- a/src/ManualTermination.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef MANUALTERMINATION_H -#define MANUALTERMINATION_H - -#include "cctk.h" - -const char * MT_get_terminate_filename( CCTK_STRING ); - -#endif diff --git a/src/ManualTerminationFile.c b/src/ManualTerminationFile.c index 342ac3f..7e10a38 100644 --- a/src/ManualTerminationFile.c +++ b/src/ManualTerminationFile.c @@ -1,14 +1,68 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" #include "cctk_Termination.h" -#include "cctk_Timers.h" -#include "ManualTermination.h" +enum{ BUFLEN = 128 }; +/* On first call, pass parameter terminate_filename. + If it is null will construct file name in /tmp based on PBS_JOBID. + Subsequent calls ignore the argument, and return a static buffer. +*/ +const char * MT_get_terminate_filename (CCTK_STRING terminate_filename) +{ + static char buf[BUFLEN]; + + if (strlen (buf) != 0) + return buf; + + if (strlen (terminate_filename) == 0) + { + const char * pbs_jobid = getenv ("MANUAL_TERMINATION_JOB_ID"); + if (pbs_jobid == NULL) + pbs_jobid = getenv ("PBS_JOBID"); + + if (pbs_jobid == NULL) + CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, "ManualTermination", + "Could not find environment variable " + "'MANUAL_TERMINATION_JOB_ID' or 'PBS_JOBID'" + ); + else + snprintf (buf, BUFLEN, "/tmp/cactus_terminate.%s", pbs_jobid); + } + else + { + snprintf (buf, BUFLEN, "%s", terminate_filename); + } + return buf; +} + +int ManualTermination_Init (CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + if (termination_from_file) + { + FILE *termfile = fopen (MT_get_terminate_filename (termination_file), "w"); + if (termfile != NULL) + { + fprintf (termfile, "%d", 0); + fclose (termfile); + } + else + { + CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, "ManualTermination", + "Could not open termination file '%s'. Error: %d", + MT_get_terminate_filename (NULL), strerror (errno)); + } + } + return 0; +} int ManualTerminationFile (CCTK_ARGUMENTS) { @@ -20,29 +74,40 @@ int ManualTerminationFile (CCTK_ARGUMENTS) /* only one processor needs to query the elapsed runtime */ if (CCTK_MyProc (cctkGH) != 0) { - return (0); + return 0; } - if ( ((cctkGH->cctk_iteration-1) % check_file_every*1.0e0) != 0) + if (((cctkGH->cctk_iteration- 1) % check_file_every * 1.0e0) != 0) { - return(0); + return 0; } - terminationfile = fopen(MT_get_terminate_filename(NULL),"r"); + terminationfile = fopen (MT_get_terminate_filename (NULL), "r"); - if(terminationfile!=NULL) + if (terminationfile != NULL) { - terminate=0; - fscanf(terminationfile,"%d",&terminate); - fclose(terminationfile); + terminate = 0; + fscanf (terminationfile, "%d", &terminate); + fclose (terminationfile); - if (terminate==1) + if (terminate == 1) { + CCTK_INFO ("------------------------------------------------------"); CCTK_VInfo (CCTK_THORNSTRING, "OH MY GOD! Found termination signal " "in termination file! TERMINATION NOW!!!!"); + CCTK_INFO ("------------------------------------------------------"); CCTK_TerminateNext (cctkGH); } } - return (retval); + return retval; +} + +int ManualTermination_Cleanup (CCTK_ARGUMENTS) +{ + DECLARE_CCTK_PARAMETERS; + + if (termination_from_file && MT_get_terminate_filename (NULL)) + remove (MT_get_terminate_filename (NULL)); + return 0; } |