/* * Start of the ssl client * There is a main thread and a receive thread * Main: * * Recv: */ main() { int status; pthread_t recvThread; pthread_t fsmThread; sslStruct *sslC; // For now this is just a function where we set all variables // Ultimately this should be read from a resource file initCfg(); // Connect to Unit under Test (UT) initConnectionToServer(); // Ctrl-Z to give stats initSignals(); status = pthread_create(&recvThread, NULL, &recvFunction, (void*)NULL); if (status != 0) { perror("Start Thread Error:"); return -1; } status = pthread_create(&fsmThread, NULL, &fsmFunction, (void*)NULL); if (status != 0) { perror("Start Thread Error:"); return -1; } fflush(stdout); // For now just create 1 Client to test Server sslC = createClient(); if (sslC == NULL) return -1; sendHello(sslC); while(1); }
int main(int argc, char **argv) { model M; int k,i,j; double dX,dY,dZ; /* distance */ double oldAccX,oldAccY,oldAccZ; /* old acceleration */ double dist,dist3; /* force, integrated value */ double ticks; /* used for time-measurement */ cfg *conf; if(argc!=2) { usage(argv[0]); return 0; } /* Read config */ if((conf=initCfg(argv[1]))==NULL) { fprintf(stderr,"Could not parse config\n"); return 0; } getCfgKeyInt(conf,"bodies",&M.bodies); getCfgKeyInt(conf,"steps",&M.steps); getCfgKeyInt(conf,"scale",&M.scale); getCfgKeyInt(conf,"width",&M.width); getCfgKeyInt(conf,"height",&M.height); getCfgKeyDouble(conf,"gravity",&M.G); getCfgKeyDouble(conf,"timestep",&M.timestep); freeConfig(conf); printModelInfo(M); ticks=omp_get_wtime(); /* start time-measurement */ if((M.b=init(M.bodies,M.scale))==NULL) { fprintf(stderr, "Error: Could not allocate memory for bodies.\n"); return 0; } if(initX11Out()==-1) { fprintf(stderr,"Could not initalize X11 output.\n"); return 0; } for(k=0;k<M.steps;++k) { /* printf("* Step %02d started...",k+1); */ //#pragma omp parallel for private(j,f,invr,invr3,aX,aY,aZ,dX,dY,dZ) for(i=0;i<M.bodies;++i) { /* Save old acceleration */ oldAccX=M.b[i].acc[X]; oldAccY=M.b[i].acc[Y]; oldAccZ=M.b[i].acc[Z]; M.b[i].acc[X]=M.b[i].acc[Y]=M.b[i].acc[Z]=0.0; /**** Accelerate ****/ for(j=0;j<M.bodies;++j) { if(i==j) continue; /* Vector */ dX=M.b[j].pos[X]-M.b[i].pos[X]; dY=M.b[j].pos[Y]-M.b[i].pos[Y]; dZ=M.b[j].pos[Z]-M.b[i].pos[Z]; /* Distance */ dist=sqrt(dX*dX+dY*dY+dZ*dZ); dist3=dist*dist*dist; /* Beschleunigung aktualisieren */ if(dist>1.0) { M.b[j].acc[X]-=(M.b[i].mass/dist3)*dX; M.b[j].acc[Y]-=(M.b[i].mass/dist3)*dY; M.b[j].acc[Z]-=(M.b[i].mass/dist3)*dZ; M.b[i].acc[X]+=(M.b[j].mass/dist3)*dX; M.b[i].acc[Y]+=(M.b[j].mass/dist3)*dY; M.b[i].acc[Z]+=(M.b[j].mass/dist3)*dZ; } } } /* Positionen aktualisieren */ for(i=0;i<M.bodies;++i) { M.b[i].pos[X] += M.b[i].vel[X] * M.timestep + 0.5 * M.timestep + M.timestep * M.timestep * M.b[i].acc[X]; M.b[i].pos[Y] += M.b[i].vel[Y] *M.timestep + 0.5 * M.timestep + M.timestep * M.timestep * M.b[i].acc[Y]; M.b[i].pos[Z] += M.b[i].vel[Z] *M.timestep + 0.5 * M.timestep + M.timestep * M.timestep * M.b[i].acc[Z]; } /* Advance Velocities */ for(i=0;i<M.bodies;++i) { M.b[i].vel[X] -= 0.5*(M.b[i].acc[X]*oldAccX)*M.timestep; M.b[i].vel[Y] -= 0.5*(M.b[i].acc[Y]*oldAccY)*M.timestep; M.b[i].vel[Z] -= 0.5*(M.b[i].acc[Z]*oldAccZ)*M.timestep; } updateAndDisplay(M.b,M.bodies); /* writeToFile(OUTPATH,b,bodies,k);*/ /* printf(" finished\n"); */ } printf("Time elapsed: %0.3f seconds.\n", omp_get_wtime()-ticks); cleanUp(M.b); return 0; }