コード例 #1
0
ファイル: main.c プロジェクト: auag92/Masters-Project
int main(int argc, char *argv[]){

  MPI_Init(&argc,&argv);
  MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
  numworkers = numtasks - 1;
  MPI_Comm_rank(MPI_COMM_WORLD,&taskid);

  if(taskid == MASTER){ // This code fragment runs in the master porcesses
    // clock_t start_t, end_t, total_t;
    allocate_memory();
    phi_initialize();
    fluid_initialize();
    gs_allocate();
    // start_t = clock();
    // printf("Starting of the program, start_t = %ld\n", start_t);
    for ( t = 0; t < phi_timesteps; t++ ) {
    #ifdef growth
      neuman_boundary(phi_old, MESHX);
      neuman_boundary(mu_old, MESHX);
      concentration(phi_old, mu_old, conc, MESHX);
      neuman_boundary(conc, MESHX);
      laplacian(phi_old, lap_phi, MESHX);
      laplacian(mu_old,  lap_mu,  MESHX);
      anisotropic_solverloop();
      update(phi_old, phi_new, MESHX);
      update(mu_old, mu_new, MESHX);
      if((t%save_phi) == 0) {
       write2file_phi(t, MESHX,phi_old);
      }
    #endif
    #ifdef FLUID
      if (t>SMOOTH) {
        fluid_solver();
        if((t%save_fluid) ==0) {
             write2file_fluid (t,u_old,v_old,MESHX);
        }
      }
    #endif
      printf("t=%d\n",t);
    }
    free_memory();

    // end_t = clock();
    // printf("End of the big loop, end_t = %ld\n", end_t);
    // total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
    // printf("Total time taken by CPU: %f\n", total_t  );
    printf("Exiting of the program...\n");

  } else { // This code fragment runs in the worker processes
    gs_allocate();
    for ( t = 0; t < phi_timesteps; t++ ) {
      if ( t > SMOOTH ) {
        gs_mpi();
      }
    }
    free(P);
    free(rhs_fn);
    free(a_x);
    free(a_y);
  }
  MPI_Finalize();
  return(0);
}
コード例 #2
0
ファイル: main.cpp プロジェクト: Christoopher/FLIP3D
void
runFluidSim()
{
	Fluid_Solver fluid_solver(dimx,dimy,dimz,gridh,1.0f/30.0f,9.82f,1.0f,Nparticles);
	fluid_solver.init_box();

	OpenGl_initViewer(600, 600, dimx, dimy, dimz, gridh);
	OpenGl_initParticles(&fluid_solver.particles.pos[0], &fluid_solver.particles.vel[0], sizeof(vec3f)*fluid_solver.particles.currnp, fluid_solver.particles.currnp);	
	
	int Nvoxels = dimx*dimy*dimz;
	Array3f voxelFlags(dimx,dimy,dimz);	
	float * voxelPositions  = new float[3*dimx*dimy*dimz];	
	initVoxels(voxelPositions,dimx,dimy,dimz);

	OpenGl_initWireframeCube(voxelPositions,voxelFlags.data,Nvoxels);
	update_voxel_flags(fluid_solver.grid,voxelFlags);

	
	while(running) {

		
		if(reset)
			fluid_solver.reset();
		reset = false;

		if(showgrid)
		{		
			update_voxel_flags(fluid_solver.grid,voxelFlags);
			OpenGl_updateVoxels(voxelPositions, voxelFlags, Nvoxels);
		}

		OpenGl_drawAndUpdate(running);

		if(step || play)
		{
			
//			stopwatch.startTimer();
			fluid_solver.step_frame();
// 			stopwatch.stopTimer();
// 			std::cout << std::scientific;
// 			std::cout << stopwatch.getElapsedTime() << "\n";
// 			if(numframes >= 6)
// 				avgtime += stopwatch.getElapsedTime();
// 			numframes++;
			
			write_paricle_pos_binary(fluid_solver.particles);

			//fluid_solver.createSurface();
			//openGl_setMesh(fluid_solver.tri,fluid_solver.nrofTriangles);
		}

		OpenGl_updateParticles(fluid_solver.particles);
	}
	

	TerminateViewer();
// 	std::cout << std::scientific;
// 	std::cout << "Avg. time" << avgtime/(numframes-6) << "\n";
// 	std::cout << "Press any key to quit...\n";
//	std::cin.get();
}