Mesh communication API cleanup
The current communications API makes assumptions about the parallelisation which limits development. In general the mesh need not be divided regularly into an NXPE by NYPE grid so these should be replaced:
virtual int getNXPE() = 0; virtual int getNYPE() = 0;
virtual int getXProcIndex() = 0; virtual int getYProcIndex() = 0;
int NXPE, PE_XIND;
The branch cuts should also be handled in a more general way, so these shouldn't be in Mesh:
virtual int UpXSplitIndex() = 0; virtual int DownXSplitIndex() = 0; virtual int sendYOutIndest(BoutReal *buffer, int size, int tag) = 0; virtual int sendYOutOutdest(BoutReal *buffer, int size, int tag) = 0; virtual int sendYInIndest(BoutReal *buffer, int size, int tag) = 0; virtual int sendYInOutdest(BoutReal *buffer, int size, int tag) = 0; virtual comm_handle irecvYOutIndest(BoutReal *buffer, int size, int tag) = 0; virtual comm_handle irecvYOutOutdest(BoutReal *buffer, int size, int tag) = 0; virtual comm_handle irecvYInIndest(BoutReal *buffer, int size, int tag) = 0; virtual comm_handle irecvYInOutdest(BoutReal *buffer, int size, int tag) = 0;
[only used in non-local ]
I guess this is basically the "mesh generalisation" project.