.. _program_listing_file_include_dataset.h: Program Listing for File dataset.h ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/dataset.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef dataset_h #define dataset_h #include "exafmm_t.h" namespace exafmm_t { template Bodies cube(int numBodies, int seed) { Bodies bodies(numBodies); srand48(seed); for (int b=0; b Bodies sphere(int numBodies, int seed) { Bodies bodies(numBodies); srand48(seed); for (int b=0; b Bodies plummer(int numBodies, int seed) { Bodies bodies(numBodies); srand48(seed); int i = 0; int Xmax = 0; while (i < numBodies) { real_t X1 = drand48(); real_t X2 = drand48(); real_t X3 = drand48(); real_t R = 1.0 / sqrt( (pow(X1, -2.0 / 3.0) - 1.0) ); if (R < 100) { real_t Z = (1.0 - 2.0 * X2) * R; real_t X = sqrt(R * R - Z * Z) * std::cos(2.0 * PI * X3); real_t Y = sqrt(R * R - Z * Z) * std::sin(2.0 * PI * X3); bodies[i].X[0] = X; bodies[i].X[1] = Y; bodies[i].X[2] = Z; for (int d=0; d<3; d++) { Xmax = Xmax > fabs(bodies[i].X[d]) ? Xmax : fabs(bodies[i].X[d]); } i++; } } real_t scale = 0.5 / (Xmax + 1); for (i=0; i Bodies init_targets(int numBodies, const char* distribution, int seed) { Bodies bodies; switch (distribution[0]) { case 'c': bodies = cube(numBodies, seed); break; case 'p': bodies = plummer(numBodies, seed); break; case 's': bodies = sphere(numBodies, seed); break; default: fprintf(stderr, "Unknown data distribution %s\n", distribution); } for (int i=0; i Bodies init_sources(int numBodies, const char* distribution, int seed) { Bodies bodies = init_targets(numBodies, distribution, seed); for (int b=0; b Bodies init_sources(int numBodies, const char* distribution, int seed) { Bodies bodies = init_targets(numBodies, distribution, seed); for (int b=0; b