Skip to content
Snippets Groups Projects
MpiBodyComm.hpp 1.46 KiB
Newer Older
#ifndef COMM_BUFFER_HPP
#define COMM_BUFFER_HPP

#include <mpi.h>
#include <vector>
#include "../datastructures/Body.hpp"

namespace nbody {
	using namespace std;

	class MpiBodyComm {
	protected:
		int blocklengths[3];
		MPI::Datatype datatypes[3];
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		MPI::Request request;
		vector<Body> buffer;
		MPI::Datatype sendBodyType;
		MPI::Datatype recvBodyType;
		MPI::Datatype commBodyType;
		MPI::Datatype datatypes[3];
		int blocklengths[3];
		MPI::Aint displacements[3];
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		MPI::Status status;
		MPI::Request request;
		vector<Body> buffer;
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void setupDatatype(vector<Body> bodies);
		virtual int getReceivedNumberBodies(int source);
		*/
	public:
		MpiBodyComm();
		virtual ~MpiBodyComm();
		virtual void testing(vector<Body>& data, int myRank);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void sendBlocking(int target, vector<Body> bodies);
		virtual void recvBlocking(int source, vector<Body>& bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual bool sendUnblocking(int target, vector<Body> bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual bool sendBlocking(int target, vector<Body> bodies);
		virtual bool sendUnblocking(int target, vector<Body> bodies);
Paul Heinzlreiter's avatar
Paul Heinzlreiter committed
		virtual void recvBlocking(int source, vector<Body>& bodies);
		virtual bool recvUnblocking(int source, vector<Body>& bodies);
		virtual void recvBlockingAnySource(int& source, vector<Body>& bodies);
		virtual bool recvUnblockingAnySource(int& source, vector<Body>& bodies);
		virtual bool sendReady();
		virtual bool recvReady(int source);
		virtual void testing(vector<Body>& data, int myRank);