Skip to content
Snippets Groups Projects

[uggrid] Support for transferring element data during load balancing

Merged Ansgar Burchardt requested to merge feature/uggrid-element-data into master
1 file
+ 10
9
Compare changes
  • Side-by-side
  • Inline
@@ -65,16 +65,17 @@ namespace Dune {
LBMessageBuffer lbMessageBuffer;
dataHandle.gather(lbMessageBuffer, entity);
char*& buffer = gridView.grid().getRealImplementation(entity).getTarget()->message_buffer;
assert(not buffer);
auto ugEntity = gridView.grid().getRealImplementation(entity).getTarget();
assert(not ugEntity->message_buffer());
typedef typename DataHandle::DataType DataType;
buffer = (char*)malloc(sizeof(int) + numberOfParams*sizeof(DataType));
*((int*)buffer) = numberOfParams*sizeof(DataType); // Size of the actual payload
std::size_t buffer_size = numberOfParams * sizeof(DataType);
char* buffer = static_cast<char*>(std::malloc(buffer_size));
ugEntity->message_buffer(buffer, buffer_size);
for (int paramIdx = 0; paramIdx < numberOfParams; paramIdx++)
{
DataType *dataPointer = (DataType*)(buffer + sizeof(int) + paramIdx*sizeof(DataType));
DataType *dataPointer = (DataType*)(buffer + paramIdx*sizeof(DataType));
lbMessageBuffer.read(*dataPointer);
}
}
@@ -100,7 +101,8 @@ namespace Dune {
continue;
// get data from UG message buffer and write to DUNE message buffer
char*& buffer = gridView.grid().getRealImplementation(entity).getTarget()->message_buffer;
auto ugEntity = gridView.grid().getRealImplementation(entity).getTarget();
auto buffer = ugEntity->message_buffer();
assert(buffer);
LBMessageBuffer lbMessageBuffer;
@@ -108,7 +110,7 @@ namespace Dune {
for(int paramIdx = 0; paramIdx < numberOfParams; paramIdx++)
{
typedef typename DataHandle::DataType DataType;
DataType *dataPointer = (DataType*)(buffer + sizeof(int) + paramIdx*sizeof(DataType));
DataType *dataPointer = (DataType*)(buffer + paramIdx*sizeof(DataType));
lbMessageBuffer.write(*dataPointer);
}
@@ -116,8 +118,7 @@ namespace Dune {
dataHandle.scatter(lbMessageBuffer, entity, numberOfParams);
// free object's local message buffer
free (buffer);
buffer = nullptr;
ugEntity->message_buffer_free();
}
}
};
Loading