Skip to content
Snippets Groups Projects
MpiSimulation.hpp 942 B
Newer Older
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
#ifndef MPI_SIMULATION_HPP
#define MPI_SIMULATION_HPP

Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
#include <mpi.h>
#include "Simulation.hpp"
#include "MpiBodyComm.hpp"
#include "../datastructures/BarnesHutTree.hpp"
#include <vector>
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed

namespace nbody {
	using namespace std;

Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	class MpiSimulation : public Simulation {
		friend class MpiBodyComm;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	protected:
		int mpiSize;
		int mpiRank;
		MPI_Datatype bodyType;
		MPI_Datatype boxType;
		vector<MpiBodyComm> comms;
		int correctState;
		vector<Body> bodies;
		BarnesHutTree tree;
		Box* domains;

Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	public:
		MpiSimulation(int& argc, char**& argv);
		virtual ~MpiSimulation();
		virtual void cleanup();
		virtual int getNumberOfProcesses();
		virtual int getProcessId();
		virtual bool stateCorrect();
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual bool readInputData(string filename);
		virtual void distributeBodies();
		virtual void distributeDomains();
		virtual void distributeLETs();
		virtual void runStep();
		virtual MPI_Datatype* getDatatype();