aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--param.ccl8
-rw-r--r--src/IsoSurfacer.c10
-rw-r--r--src/IsoSurfacerGH.h11
-rw-r--r--src/Sockets.c56
4 files changed, 64 insertions, 21 deletions
diff --git a/param.ccl b/param.ccl
index 377df62..558eb1b 100644
--- a/param.ccl
+++ b/param.ccl
@@ -28,11 +28,6 @@ INT output_start "First iteration to start drawing isosurfaces. Default=1" STEER
.* :: "Some positive integer"
} 1
-INT outer_boundary_cutoff "Number of voxels to cut off the outer boundaries" STEERABLE = ALWAYS
-{
- 0:* :: "Zero or any positive number"
-} 0
-
STRING format_str "If the precision specified in the default format string is less than what you need, then insert your own format for floating point numbers here"
{
.* :: A regex which matches everything
@@ -47,9 +42,6 @@ STRING outdir "Output directory for isosurface data files"
.* :: A regex which matches everything
} "."
-BOOLEAN nusurfacer "Enable the new isosurfacer routines to be used rather than the originals ?"
-{
-} "yes"
#############################################################################
### import IOUtil parameters
diff --git a/src/IsoSurfacer.c b/src/IsoSurfacer.c
index d761ada..b81edfc 100644
--- a/src/IsoSurfacer.c
+++ b/src/IsoSurfacer.c
@@ -58,6 +58,7 @@ static void WriteHDF5(cGH *GH, polypatch *totals, isosurfacerGH *myGH,
/***************************************************************************/
static int IsoSurfacerHandleCommands(cGH *GH)
{
+ IsoCommand command;
isosurfacerGH *myGH = (isosurfacerGH *) GH->extensions [CCTK_GHExtensionHandle ("IsoSurfacer")];
/* Grab all events that are waiting in queue */
@@ -108,6 +109,15 @@ static int IsoSurfacerHandleCommands(cGH *GH)
/* puts("Nuthin to do (yet)"); */
/* Here it just needs to read from the control socket
and then change the isosurface appropriately */
+ IsoCommand *Iso_PollCommand(cGH *cctkGH,IsoCommand *cmd);
+
+ if(Iso_PollCommand(GH,&command)){
+#ifdef VERBOSE
+ printf("+++++++++Process Command [%s] [%s] [%s]\n",
+ command.cmd.object,command.cmd.target,command.cmd.value);
+#endif
+ myGH->isovalue=atof(command.cmd.value); /* steer it. */
+ }
return 0;
}
diff --git a/src/IsoSurfacerGH.h b/src/IsoSurfacerGH.h
index ac299e7..943cf7c 100644
--- a/src/IsoSurfacerGH.h
+++ b/src/IsoSurfacerGH.h
@@ -14,6 +14,17 @@
surfacer to run without output for
benchmarking purposes */
+typedef struct CmdSet {
+ char object[64];
+ char target[64];
+ char value[64];
+} CmdSet;
+
+typedef union IsoCommand {
+ char buffer[64+64+64];
+ CmdSet cmd;
+} IsoCommand;
+
typedef struct polypatch
{
CCTK_REAL4 *verts;
diff --git a/src/Sockets.c b/src/Sockets.c
index fea3c92..322b628 100644
--- a/src/Sockets.c
+++ b/src/Sockets.c
@@ -71,6 +71,7 @@ CCTK_FILEVERSION(DevThorns_isosurfacer_Socket_c)
#define MSG_NOSIGNAL 0
#endif
+
typedef enum {closed, open} isoSocketState;
typedef struct ISOSocket
@@ -85,6 +86,7 @@ typedef struct ISOSocket
********************* Local Routine Prototypes *********************
********************************************************************/
+IsoCommand *Iso_PollCommand(cGH *cctkGH,IsoCommand *cmd);
int Iso_Write(isoSocket *connection, const char *buffer, size_t count);
static SOCKET Iso_MakeSocket (unsigned long port, int *hunt);
@@ -95,7 +97,7 @@ static void SocketClose(isoSocket *this);
static int InitialiseTCP(void);
-static int Iso_ReadFromClient(cGH *cctkGH, isoSocket *this);
+static int Iso_ReadFromClient(cGH *cctkGH, isoSocket *this,IsoCommand *cmd);
/********************************************************************
********************* Other Routine Prototypes *********************
@@ -342,22 +344,46 @@ int Iso_Poll(cGH *cctkGH, long sec, long usec)
SocketCreate(new, &controlsocklist);
}
+
+ return 0;
+}
+
+IsoCommand *Iso_PollCommand(cGH *cctkGH,IsoCommand *cmd){
+#ifdef HAVE_SOCKLEN_T
+ socklen_t size;
+#else
+ int size;
+#endif
+ fd_set read_fd_set;
+ struct sockaddr_in clientname;
+ struct timeval timeout;
+ struct timeval *real_timeout;
+
+ isoSocket *this;
+ isoSocket *next;
+ /* always a timeout of 0 */
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 0;
+ real_timeout = &timeout;
- for(this = controlsocklist; this; this = next)
- {
- next = this->next;
- if(FD_ISSET (this->filedes, &read_fd_set))
- {
+ /* Check if any input is available on one or more active sockets. */
+ read_fd_set = active_fd_set;
+
+ if (ERROR_CHECK(select (FD_SETSIZE, &read_fd_set, NULL, NULL, real_timeout))){
+ perror ("select");
+ CCTK_Abort(cctkGH, EXIT_FAILURE);
+ }
+ /* get next command on the control socket list */
+ for(this = controlsocklist; this; this = this->next){
+ if(FD_ISSET (this->filedes, &read_fd_set)){
/* Data arriving on an already-connected socket. */
- if (Iso_ReadFromClient (cctkGH, this) < 0)
- {
- SocketDestroy(this, &controlsocklist);
+ if (Iso_Read (this, cmd->buffer,64+64+64) <= 0){
+ SocketDestroy(this, &controlsocklist);
}
+ else return cmd; /* return immediately with the new command (first available) */
}
}
-
-
- return 0;
+ return NULL;
}
int IsoWriteDataToClients(const char *metadata,
@@ -801,8 +827,12 @@ static void SocketClose(isoSocket *this)
@endhistory
@@*/
-static int Iso_ReadFromClient(cGH *cctkGH, isoSocket *this)
+static int Iso_ReadFromClient(cGH *cctkGH, isoSocket *this,IsoCommand *command)
{
+ /* Need to have 64+64+64 buffer here (datastruct)
+ put the buffer in a union.
+ */
+
return -1;
}