Skip to content
Snippets Groups Projects

Add attach function with callback to GridTransfer

Merged Praetorius, Simon requested to merge feature/gridtransfer_attach into master
2 files
+ 27
6
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 20
4
@@ -86,16 +86,21 @@ namespace AMDiS
REQUIRES(Concepts::UpdateData<Data>)>
void attach(Data& data)
{
auto it = updateCallbacks_.emplace(Key(&data), UpdateCallback{
[&data]() -> void { data.update(data.gridView()); }});
attach(data, [&data]() -> void { data.update(data.gridView()); });
}
/// Register callback to GridTransfer
template <class Data, class Callback>
void attach(Data const& data, Callback&& callback)
{
auto it = updateCallbacks_.emplace(Key(&data), UpdateCallback{FWD(callback)});
it.first->second.count++;
}
/// Unregister data from GridTransfer. Data is identified by its address.
template <class Data,
REQUIRES(Concepts::InterpolateData<Data>)>
void detach(Data& data)
void detach(Data const& data)
{
eraseCallback(interpolateCallbacks_, Key(&data));
}
@@ -103,7 +108,7 @@ namespace AMDiS
/// Unregister data from GridTransfer. Data is identified by its address.
template <class Data,
REQUIRES(Concepts::UpdateData<Data>)>
void detach(Data& data)
void detach(Data const& data)
{
eraseCallback(updateCallbacks_, Key(&data));
}
@@ -113,9 +118,14 @@ namespace AMDiS
bool preAdapt() override
{
assert(bound());
Dune::Timer t;
mightCoarsen_ = grid_->preAdapt();
Dune::MPIHelper::getCollectiveCommunication().max(&mightCoarsen_, 1);
for (auto&& data : interpolateCallbacks_)
data.second.preAdapt(mightCoarsen_);
info(2,"preAdapt needed {} seconds", t.elapsed());
return mightCoarsen_;
}
@@ -124,7 +134,11 @@ namespace AMDiS
bool adapt() override
{
assert(bound());
Dune::Timer t;
refined_ = grid_->adapt();
Dune::MPIHelper::getCollectiveCommunication().max(&refined_, 1);
info(2,"adapt needed {} seconds", t.elapsed());
return refined_;
}
@@ -133,6 +147,7 @@ namespace AMDiS
void postAdapt() override
{
assert(bound());
Dune::Timer t;
if (mightCoarsen_ || refined_) {
for (auto&& data : updateCallbacks_)
data.second.update();
@@ -142,6 +157,7 @@ namespace AMDiS
grid_->postAdapt();
changeIndex_++;
info(2,"postAdapt needed {} seconds", t.elapsed());
}
/// Returns the grid change index, see \ref changeIndex.
Loading