*/
boost::signals2::signal<void()> pre_distributed_refinement;
+ /**
+ * This signal is triggered during execution of the
+ * parallel::distributed::Triangulation::execute_coarsening_and_refinement()
+ * function. At the time this signal is triggered, the p4est oracle has been
+ * refined and the cell relations have been updated. The triangulation is
+ * unchanged otherwise, and the p4est oracle has not yet been repartitioned.
+ */
+ boost::signals2::signal<void()> post_p4est_refinement;
+
/**
* This signal is triggered at the end of execution of the
* parallel::distributed::Triangulation::execute_coarsening_and_refinement()
// has happened, we need to update the quadrant cell relations
update_cell_relations();
+ // signals that parallel_forest has been refined and cell relations have
+ // been updated
+ this->signals.post_p4est_refinement();
+
// before repartitioning the mesh, save a copy of the current positions of
// quadrants
// only if data needs to be transferred later
#include <deal.II/base/mpi.templates.h>
#include <deal.II/distributed/cell_data_transfer.templates.h>
+#include <deal.II/distributed/fully_distributed_tria.h>
#include <deal.II/distributed/shared_tria.h>
#include <deal.II/distributed/tria.h>
// attach corresponding callback functions dealing with the transfer of
// active FE indices depending on the type of triangulation
if (dynamic_cast<
- const dealii::parallel::DistributedTriangulationBase<dim, spacedim> *>(
- &this->get_triangulation()))
+ const dealii::parallel::fullydistributed::Triangulation<dim, spacedim>
+ *>(&this->get_triangulation()))
+ {
+ // no transfer of active FE indices for this class
+ }
+ else if (dynamic_cast<
+ const dealii::parallel::distributed::Triangulation<dim, spacedim>
+ *>(&this->get_triangulation()))
{
// repartitioning signals
this->tria_listeners_for_transfer.push_back(
// refinement signals
this->tria_listeners_for_transfer.push_back(
- this->tria->signals.pre_distributed_refinement.connect(
+ this->tria->signals.post_p4est_refinement.connect(
[this]() { this->pre_distributed_transfer_action(); }));
this->tria_listeners_for_transfer.push_back(
this->tria->signals.post_distributed_refinement.connect(