/* * Initialize Nbody problem */ void InitLoc() { int k; Color color[3]; color[0] = Color(1.0,1.0,1.0); color[1] = Color(1.0,0.9,0.5); color[2] = Color(0.5,0.9,1.0); // Allocate room for twice as many bodies to facilitate ping-pong pos[0] = (float3*)malloc(N*sizeof(float3)); if (!pos[0]) Fatal("Error allocating memory for %d stars\n",N); pos[1] = (float3*)malloc(N*sizeof(float3)); if (!pos[1]) Fatal("Error allocating memory for %d stars\n",N); vel = (float3*)malloc(N*sizeof(float3)); if (!vel) Fatal("Error allocating memory for %d stars\n",N); M = (float*)malloc(N*sizeof(float)); if (!M) Fatal("Error allocating memory for %d stars\n",N); col = (Color*)malloc(N*sizeof(Color)); if (!col) Fatal("Error allocating memory for %d stars\n",N); // Assign random locations for (k=0;k<N;k++) { pos[0][k] = rand3(dim/2); vel[k] = rand3(spd); col[k] = color[k%3]; M[k] = rand1(mass); } // Initialize src src = 0; }
double RandomNum::rangau(double avg, double stddev, int * iseed) { double rangau, fac, rsq, v1, v2, gasdev; static int iset; static double gset; if(*iseed<0){ iset=0; } if(iset==0) { rsq=10; while((rsq>1)||rsq==0){ v1=2*rand3(iseed)-1; v2=2*rand3(iseed)-1; rsq=v1*v1+v2*v2; } fac=sqrt(-2*log(rsq)/rsq); gset=v1*fac; gasdev=v2*fac; iset=1; } else { gasdev=gset; iset=0; } rangau = avg + stddev*gasdev; return rangau; }