Пример #1
0
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);
	}
}
Пример #2
0
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;
}
Пример #3
0
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();
}
Пример #4
0
static void idle_func ( void )
{
	if ( dsim ) simulation_step( pVector, dt );
	else        {get_from_UI();remap_GUI();}

	glutSetWindow ( win_id );
	glutPostRedisplay ();
}
Пример #5
0
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();
	}
}