Skip to content
Snippets Groups Projects
MpiSimulation.cpp 1.17 KiB
Newer Older
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
#include <iostream>
#include "../datastructures/Body.hpp"
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
#include "MpiSimulation.hpp"
#include "../datastructures/Tree.hpp"
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed

namespace nbody {
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	using namespace std;

Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	MpiSimulation::MpiSimulation(int& argc, char**& argv) {
		MPI::Init(argc, argv);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		this->mpiSize = MPI::COMM_WORLD.Get_size();
		this->mpiRank = MPI::COMM_WORLD.Get_rank();
		this->correctState = true;

		if (this->mpiRank == 0) {
			if (argc != 2) {
				this->correctState = false;
			} else {
				this->bodies = Tree::dubinskiParse(string(argv[1]));
				if (bodies.empty()) {
					this->correctState = false;
				}
			}
		}
		MPI::COMM_WORLD.Bcast(&this->correctState, 1, MPI::BOOL, 0);
		MpiBodyComm comm;

		//comm.testing(this->bodies, this->mpiRank);

		if (this->mpiRank == 0) {
			comm.sendBlocking(1, this->bodies);
		} else if (this->mpiRank == 1) {
			comm.recvBlocking(0, this->bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
			cout << "recveded " << this->bodies.size() << endl;
	}

	bool MpiSimulation::stateCorrect() {
		return this->correctState;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	}

	MpiSimulation::~MpiSimulation() {
		MPI::Finalize();
	}

	int MpiSimulation::getNumberOfProcesses() {
		return this->mpiSize;
	}

	int MpiSimulation::getProcessId() {
		return this->mpiRank;
	}
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
}