#include #include #include #include void Psitions(double **Positions,double sigma2, int N); void Vtesses(double **Vitesses,int N); void allocdouble2(double ***array,int xsize,int ysize); void allocdouble(double **array,long xsize); double distance2(double **Positions,int i, int j); void allocdouble2(double ***array,int xsize,int ysize) /* dynamically allocates a two dimensional (*array)[xize][ysize] with datasize bytes per element */ { int i; *array=(double **) malloc(xsize*sizeof(double *)); /* if (*array == NULL) */ /* {fprintf(stderr," memory allocation problems\n"); */ /* exit(-1);} */ for(i=0;i\n"); exit (1); } /*Nombre de particules et alpha sont les parametres qui varient entre deux simulations*/ /* on les mets dans un fichier pour éviter de recompiler le programme*/ { FILE *debut; if ((debut = fopen (argv[1],"r")) == NULL) { fprintf(stderr,"Probleme d'ouverture de %s\n",argv[1]); exit (1); } fscanf(debut,"%d%*[^\n]", &N); fscanf(debut,"%le%*[^\n]", &alpha); } allocdouble2(&Positions,2,N); allocdouble2(&Positionst,2,N); allocdouble2(&Vitesses,2,N); /*Diamètre de collision*/ const double sigma=1; /* on stoppe la simulation quand on quitte le free cooling state */ double tmax=1/(1-alpha*alpha); /*Pour changer de nombre aléatoire à chaque fois*/ //srand48(time(NULL)); //Positions et vitesses pour t=0 printf("initialisation!\n"); Psitions(Positions,sigma,N); Vtesses(Vitesses,N); printf("on démarre!\n"); /*Définit les compteurs*/ int i, j; for (i=0; i= 0) { if (a>0) { temps=(-b-sqrt(Delta))/(2*a); } else { temps=(-b+sqrt(Delta))/(2*a); } } if (temps0) { tempscol[i]=temps; col[i]=j; } if (temps0) { tempscol[j]=temps; col[j]=i; } } } } for (i=0; i= 0) { if (a>0) temps=(-b-sqrt(Delta))/(2*a); else temps=(-b+sqrt(Delta))/(2*a); } if (temps0) { tempscol[i]=temps; col[i]=un; } if (temps0) { tempscol[un]=temps; col[un]=i; } } if (i != un) { temps=1e8; double a = powf(Vitesses[0][i]-Vitesses[0][deux],2)+powf(Vitesses[1][i]-Vitesses[1][deux],2); double b = 2*((Positionst[0][i]-Positionst[0][deux])*(Vitesses[0][i]-Vitesses[0][deux])+(Positionst[1][i]-Positionst[1][deux])*(Vitesses[1][i]-Vitesses[1][deux])); double c = powf(Positionst[0][i]-Positionst[0][deux],2)+powf(Positionst[1][i]-Positionst[1][deux],2)-sigma*sigma; Delta = b*b-4*a*c; if (Delta >= 0) { if (a>0) temps=(-b-sqrt(Delta))/(2*a); else temps=(-b+sqrt(Delta))/(2*a); } if (temps0) { tempscol[i]=temps; col[i]=un; } if (temps0) { tempscol[deux]=temps; col[deux]=i; } } } for (i=0; i