void simulation_run(Simulation *sim, void (*visualize)(Simulation *)) { /* Continously run the simulation until no more infected cells exist */ if(!sim->quiet) visualize(sim); while(sim->statistic.total.infected) { if(sim->interactive) { if(getchar() == 'q') return; } else { if(sim->delay) usleep(sim->delay); } sim->statistic.last_step.infected = 0; sim->statistic.last_step.dead = 0; sim->statistic.last_step.cured = 0; simulation_step(sim); sim->statistic.total.infected += sim->statistic.last_step.infected - sim->statistic.last_step.cured - sim->statistic.last_step.dead; sim->statistic.total.dead += sim->statistic.last_step.dead; sim->statistic.total.immune += sim->statistic.last_step.cured; if(!sim->quiet) visualize(sim); } }
struct SimulationResult* run_simulation() { int rank = get_rank(); int num_processes = get_num_processes(); struct SimulationResult *result = 0; struct StepResult *last_result = 0; // only the master process collects the simulation results if(rank == 0) { result = malloc(sizeof(struct SimulationResult)); result->operations = 0; // set start time gettimeofday(&result->start_time, NULL); } init_map(); MPI_Barrier(MPI_COMM_WORLD); int i = 0; int died = 0; if(rank == 0) { printf("Start Population\n"); } died = get_stats(i, &last_result, result); while(i < MAX_SIMULATION_STEPS && !died) { i++; if(rank == 0) printf("Simulation Step %d\n", i); simulation_step(i); died = get_stats(i, &last_result, result); if(num_processes == 1) { print_bitmap(i); } } MPI_Barrier(MPI_COMM_WORLD); if(rank == 0) { gettimeofday(&result->finish_time, NULL); calc_runtime(result); } return result; }
void display() { simulation_step(&ocl); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLUquadricObj *quadric = gluNewQuadric(); gluQuadricNormals(quadric, GLU_SMOOTH); gluQuadricOrientation(quadric, GLU_OUTSIDE); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -2000.0); // render particles for(int j=0; j<N; j++) { glPushMatrix(); glTranslatef(B[j].pos.s[0], B[j].pos.s[1], B[j].pos.s[2]); gluSphere(quadric, B[j].m, 16, 16); glPopMatrix(); } gluDeleteQuadric(quadric); glutSwapBuffers(); glutPostRedisplay(); }
static void idle_func ( void ) { if ( dsim ) simulation_step( pVector, dt ); else {get_from_UI();remap_GUI();} glutSetWindow ( win_id ); glutPostRedisplay (); }
static void idle_func ( void ) { if (!pause) { get_from_UI( PrevDensityField, PrevVelocityField ); VelocityField->TimeStep( VelocityField, PrevVelocityField, bodies); DensityField->TimeStep( DensityField, PrevDensityField, VelocityField ); simulation_step(pVector, fVector, dt, fConstraint, VelocityField); glutSetWindow(win_id); glutPostRedisplay(); } }