aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorswhite <swhite@e5a5a894-0e4f-0410-be11-d22c8b0a171a>2006-04-27 15:20:42 +0000
committerswhite <swhite@e5a5a894-0e4f-0410-be11-d22c8b0a171a>2006-04-27 15:20:42 +0000
commit50ac02734e80dc84326274e2a77bb03bf626e03a (patch)
treea9cfcd52021b1d3da8dcf7d4cf74307a4f39f4a7 /src
parentd69c71d3983cee0cfd3793734a5c9fa8b1391b21 (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.c80
-rw-r--r--src/ManualTermination.h8
-rw-r--r--src/ManualTerminationFile.c89
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;
}