#include <BarnesHutTree.hpp> #include <MpiSimulation.hpp> #include <iostream> #include <mpi.h> #include <cstdlib> #include <Tree.hpp> using namespace nbody; using namespace std; int main(int argc, char* argv[]) { MPI_Init(&argc, &argv); //MpiSimulation simulation(argc, argv); Body data[4]; int mysize, myrank; Body b[2]; int bodyBlocklengths[8] = {1, 1, 3, 3, 3, 1, 1, 1}; MPI_Datatype bodyDatatypes[8] = {MPI_LB, MPI_UNSIGNED_LONG, MPI_DOUBLE, MPI_DOUBLE, MPI_DOUBLE, MPI_DOUBLE, MPI_INT, MPI_UB}; MPI_Aint bodyDisplacements[8]; MPI_Aint baseAdress; MPI_Datatype mpi_body; MPI_Get_address(&(b[0]), &baseAdress); bodyDisplacements[0] = baseAdress - baseAdress; MPI_Get_address(&(b[0].id), &bodyDisplacements[1]); bodyDisplacements[1] -= baseAdress; MPI_Get_address(&(b[0].position[0]), &bodyDisplacements[2]); bodyDisplacements[2] -= baseAdress; MPI_Get_address(&(b[0].velocity[0]), &bodyDisplacements[3]); bodyDisplacements[3] -= baseAdress; MPI_Get_address(&(b[0].acceleration[0]), &bodyDisplacements[4]); bodyDisplacements[4] -= baseAdress; MPI_Get_address(&(b[0].mass), &bodyDisplacements[5]); bodyDisplacements[5] -= baseAdress; MPI_Get_address(&(b[0].refinement), &bodyDisplacements[6]); bodyDisplacements[6] -= baseAdress; MPI_Get_address(&(b[7]), &bodyDisplacements[7]); bodyDisplacements[7] -= baseAdress; MPI_Type_create_struct(8, bodyBlocklengths, bodyDisplacements, bodyDatatypes, &mpi_body); MPI_Type_commit(&mpi_body); MPI_Comm_size(MPI_COMM_WORLD, &mysize); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); if (myrank == 0) { srandom(42); for (int i = 0; i < 4; i++) { Body b(random() / random(), random() / random(), random() / random(), random() / random(), random() / random(), random() / random(), random() / random()); b.setId(i); data[i] = b; } MPI_Send(&data[0], 4, mpi_body, 1, 0, MPI_COMM_WORLD); } else if (myrank == 1) { MPI_Status status; MPI_Recv(&data[0], 4, mpi_body, 0, 0, MPI_COMM_WORLD, &status); } MPI_Finalize(); /* if (myrank == 0) { srandom(42); for (int i = 0; i < 4; i++) { Body b(random() / random(), random() / random(), random() / random(), random() / random(), random() / random(), random() / random(), random() / random()); b.setId(i); data[i] = b; } //MPI_Send(&data[0], 4, *simulation.getDatatype(), 1, 0, MPI_COMM_WORLD); } else if (myrank == 1) { MPI_Status status; //MPI_Recv(&data[0], 4, *simulation.getDatatype(), 0, 0, MPI_COMM_WORLD, &status); } */ //simulation.distributeBodies(); //simulation.distributeDomains(); //simulation.buildTree(); /* for (int i = 0; i < 1; i++) { //local tree is built and correct domains are distributed simulation.runStep(); } */ //simulation.cleanup(); //MPI_Finalize(); return 0; }