Skip to content
Snippets Groups Projects
MpiSimulation.hpp 1.14 KiB
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 <BarnesHutTree.hpp>
#include <vector>
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed

namespace nbody {
	using namespace std;

Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	typedef struct _SendStore {
		Body* bodies;
		MPI_Request request;
		int size;
	} SendStore;

Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
	class MpiSimulation : public Simulation {
	protected:
		MPI_Datatype bodyType;
		MPI_Datatype boxType;
		Box overallDomain;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		vector<SendStore> sendStores;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual SendStore* availableSendStore(int numElems);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void send(vector<Body> bodies, int target);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void recv(vector<Body>& bodies);
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();
		virtual void distributeBodies();
		virtual void distributeDomains(vector<Body> localBodies);
		virtual void distributeDomains(Box localDomain);
		virtual void distributeDomains();
		virtual void distributeLETs();
		virtual void rebuildTree();
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void buildTree();
		virtual void runStep();
		virtual MPI_Datatype* getDatatype();