void SetupCallbacks(simulation_data *sim) { VisItSetCommandCallback(SimControlCommandCallback, (void*)sim); VisItSetSlaveProcessCallback2(SimSlaveProcessCallback, (void*)sim); VisItSetGetMetaData(SimGetMetaData, (void*)sim); VisItSetGetMesh(SimGetMesh, (void*)sim); VisItSetGetVariable(SimGetVariable, (void*)sim); VisItSetGetDomainList(SimGetDomainList, (void*)sim); }
void mainloop(simulation_data *sim) { int blocking, visitstate, err = 0; /* If we're not running by default then simulate once there's something * once VisIt connects. */ if(sim->runMode == SIM_STOPPED) simulate_one_timestep(sim); if (sim->par_rank == 0) { fprintf(stderr, "command> "); fflush(stderr); } do { blocking = (sim->runMode == SIM_RUNNING) ? 0 : 1; /* Get input from VisIt or timeout so the simulation can run. */ if(sim->par_rank == 0) { visitstate = VisItDetectInput(blocking, fileno(stdin)); } #ifdef PARALLEL /* Broadcast the return value of VisItDetectInput to all procs. */ MPI_Bcast(&visitstate, 1, MPI_INT, 0, sim->par_comm); #endif /* Do different things depending on the output from VisItDetectInput. */ switch(visitstate) { case 0: /* There was no input from VisIt, return control to sim. */ simulate_one_timestep(sim); break; case 1: /* VisIt is trying to connect to sim. */ if(VisItAttemptToCompleteConnection() == VISIT_OKAY) { fprintf(stderr, "VisIt connected\n"); VisItSetCommandCallback(ControlCommandCallback, (void*)sim); VisItSetSlaveProcessCallback2(SlaveProcessCallback, (void*)sim); VisItSetGetMetaData(SimGetMetaData, (void*)sim); VisItSetGetMesh(SimGetMesh, (void*)sim); VisItSetGetVariable(SimGetVariable, (void*)sim); VisItSetGetDomainList(SimGetDomainList, (void*)sim); } else { /* Print the error message */ char *err = VisItGetLastError(); fprintf(stderr, "VisIt did not connect: %s\n", err); free(err); } break; case 2: /* VisIt wants to tell the engine something. */ if(!ProcessVisItCommand(sim)) { /* Disconnect on an error or closed connection. */ VisItDisconnect(); /* Start running again if VisIt closes. */ /*sim->runMode = SIM_RUNNING;*/ } break; case 3: /* VisItDetectInput detected console input - do something with it. * NOTE: you can't get here unless you pass a file descriptor to * VisItDetectInput instead of -1. */ ProcessConsoleCommand(sim); if (sim->par_rank == 0) { fprintf(stderr, "command> "); fflush(stderr); } break; default: fprintf(stderr, "Can't recover from error %d!\n", visitstate); err = 1; break; } } while(!sim->done && err == 0); }
void mainloop(simulation_data *sim) { int blocking, visitstate, err = 0; char Filename[256]; #ifdef VISIT_INSITU if(sim->runMode == SIM_STOPPED) simulate_one_timestep(sim); do { blocking = (sim->runMode == SIM_RUNNING) ? 0 : 1; // Get input from VisIt or timeout so the simulation can run. if(sim->par_rank == 0) visitstate = VisItDetectInput(blocking, -1); MPI_Bcast(&visitstate, 1, MPI_INT, 0, sim->comm_cart); // Do different things depending on the output from VisItDetectInput switch(visitstate) { case 0: // There was no input from VisIt, return control to sim simulate_one_timestep(sim); break; case 1: // VisIt is trying to connect to sim. if(VisItAttemptToCompleteConnection() == VISIT_OKAY) { //fprintf(stderr, "VisIt connected\n"); VisItSetCommandCallback(ControlCommandCallback, (void*)sim); VisItSetSlaveProcessCallback2(SlaveProcessCallback, (void*)sim); VisItSetGetMetaData(SimGetMetaData, (void*)sim); VisItSetGetMesh(SimGetMesh, (void*)sim); VisItSetGetVariable(SimGetVariable, (void*)sim); VisItSetGetDomainList(SimGetDomainList, (void*)sim); } else { char *err = VisItGetLastError(); fprintf(stderr, "VisIt did not connect: %s\n", err); free(err); } break; case 2: // VisIt wants to tell the engine something if(!ProcessVisItCommand(sim)) { // Disconnect on an error or closed connection. VisItDisconnect(); // Start running again if VisIt closes. sim->runMode = SIM_RUNNING; } break; default: fprintf(stderr, "Can't recover from error %d!\n", visitstate); err = 1; break; } } while(!sim->done && err == 0); #else do { simulate_one_timestep(sim); char postfix[4]; #ifdef ADIOS strcpy(postfix, "bp"); DumpData(sim, sim->filename, sim->saveCounter++, postfix); #elif NETCDF4 #ifdef PARIO strcpy(postfix, "p.nc"); DumpData(sim, sim->filename, sim->saveCounter++, postfix); #else strcpy(postfix, "s.nc"); DumpData(sim, sim->filename, sim->saveCounter++, postfix); #endif #elif HDF5 strcpy(postfix, "h5"); DumpData(sim, sim->filename, sim->saveCounter++, postfix); #elif BOV strcpy(postfix, "bof"); char name[512]; char cmd[512]; int l0 = strlen(strrchr(sim->filename, '/')); int l = 1+strlen(sim->filename) - l0; strncpy(name, sim->filename, l); sprintf(&name[l], "%05d/", sim->saveCounter); sprintf(cmd, "mkdir %s", &name[0]); if(!sim->par_rank){ system(cmd); } MPI_Barrier(sim->comm_cart); strncpy(&name[l+6], &sim->filename[l], l0); //fprintf(stderr, "creating a subdirectory %s %d\n",name, l0); //fprintf(stderr, "creating a subdirectory %s %d\n",sim->filename, sim->saveCounter); DumpData(sim, name, sim->saveCounter++, postfix); #else strcpy(postfix, "bin"); DumpData(sim, sim->filename, sim->saveCounter++, postfix); #endif //if(sim->par_rank == 0) printf("Saved file %s\n", Filename); if(sim->cycle == NUMBER_OF_ITERATIONS) { sim->done = 1; } } while(!sim->done && err == 0); #endif }