Skip to content
Snippets Groups Projects
Commit 963e8545 authored by Ansgar Burchardt's avatar Ansgar Burchardt
Browse files

Generalize gather/scatter functions for the `message_buffer` used by dune-grid

parent bcb4bd8c
No related branches found
No related tags found
1 merge request!55Support for transferring element data during load balancing
......@@ -812,29 +812,31 @@ static void BVertexGather (DDD_OBJ obj, int cnt, DDD_TYPE type_id, void *Data)
* The first sizeof(int) bytes of the message_buffer is the length of
* the message (without the size of the int).
*/
static void DuneNodeGather (DDD_OBJ obj, int cnt, DDD_TYPE type_id, void *Data)
template<typename Entity>
static void DuneEntityGather (DDD_OBJ obj, int cnt, DDD_TYPE type_id, void *Data)
{
char* data = static_cast<char*>(Data);
const NODE* node = reinterpret_cast<NODE*>(obj);
const auto sizeOfSize = sizeof node->message_buffer_size;
const Entity* entity = reinterpret_cast<Entity*>(obj);
const auto sizeOfSize = sizeof entity->message_buffer_size;
std::memcpy(data, &node->message_buffer_size, sizeOfSize);
std::memcpy(data, &entity->message_buffer_size, sizeOfSize);
data += sizeOfSize;
std::memcpy(data, node->message_buffer, node->message_buffer_size);
std::memcpy(data, entity->message_buffer, entity->message_buffer_size);
}
static void DuneNodeScatter (DDD_OBJ obj, int cnt, DDD_TYPE type_id, void *Data, int newness)
template<typename Entity>
static void DuneEntityScatter (DDD_OBJ obj, int cnt, DDD_TYPE type_id, void *Data, int newness)
{
const char* data = static_cast<const char*>(Data);
NODE* node = reinterpret_cast<NODE*>(obj);
const auto sizeOfSize = sizeof node->message_buffer_size;
Entity* entity = reinterpret_cast<Entity*>(obj);
const auto sizeOfSize = sizeof entity->message_buffer_size;
std::memcpy(&node->message_buffer_size, data, sizeOfSize);
std::memcpy(&entity->message_buffer_size, data, sizeOfSize);
data += sizeOfSize;
node->message_buffer = static_cast<char*>(std::malloc(node->message_buffer_size));
std::memcpy(node->message_buffer, data, node->message_buffer_size);
entity->message_buffer = static_cast<char*>(std::malloc(entity->message_buffer_size));
std::memcpy(entity->message_buffer, data, entity->message_buffer_size);
}
static void BVertexScatter (DDD_OBJ obj, int cnt, DDD_TYPE type_id, void *Data, int newness)
......@@ -2207,8 +2209,8 @@ void NS_DIM_PREFIX ddd_HandlerInit (INT handlerSet)
DDD_SetHandlerXFERSCATTER (TypeBVertex, BVertexScatter);
DDD_SetHandlerSETPRIORITY (TypeBVertex, VertexPriorityUpdate);
DDD_SetHandlerXFERGATHER (TypeNode, DuneNodeGather);
DDD_SetHandlerXFERSCATTER (TypeNode, DuneNodeScatter);
DDD_SetHandlerXFERGATHER (TypeNode, DuneEntityGather<NODE>);
DDD_SetHandlerXFERSCATTER (TypeNode, DuneEntityScatter<NODE>);
DDD_SetHandlerLDATACONSTRUCTOR (TypeNode, NodeObjInit);
DDD_SetHandlerDESTRUCTOR (TypeNode, NodeDestructor);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment