Skip to content
Snippets Groups Projects
mpitest.cpp 986 B
Newer Older
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
#include <mpi.h>
#include <vector>
#include "datastructures/Body.hpp"

int main(int argc, char** argv) {
	using namespace nbody;
	using namespace std;

	/*
	MPI::Datatype Btype;
	MPI::Datatype type[3] = {MPI::DOUBLE, MPI::DOUBLE, MPI::DOUBLE};
	int blocks[3] = {3, 3, 1};
	MPI::Aint disp[3];
	//Body data[16];
	vector<Body> data;

	MPI::Init(argc, argv);
	if (MPI::COMM_WORLD.Get_rank() == 0) {
		for (int i = 0; i < 16; i++) {
			Body b;

			data.push_back(b);
		}

	} else {
		data.reserve(16);
	}
	*/

	MPI::Init(argc, argv);
	MPI::Datatype Btype;
	MPI::Datatype type[3] = {MPI::DOUBLE, MPI::DOUBLE, MPI::DOUBLE};
	int blocks[3] = {3, 3, 1};
	MPI::Aint disp[3];
	Body data[16];
	disp[0] = MPI::Get_address(data[0].position);
	disp[1] = MPI::Get_address(data[0].velocity);
	disp[2] = MPI::Get_address(&data[0].mass);
	Btype = Btype.Create_struct(3, blocks, disp, type);
	Btype.Commit();
	MPI::COMM_WORLD.Bcast(MPI::BOTTOM, 16, Btype, 0);
	Btype.Free();
	MPI::Finalize();
	return 0;
}