While there, also make the function 'const', which requires a bit of surgery in a variety
of places where we did not accurately propagate constness.
template <int dim, int spacedim>
struct FindGhosts
{
- typename dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation;
- sc_array_t *subids;
- std::map<unsigned int, std::set<dealii::types::subdomain_id> > *vertices_with_ghost_neighbors;
+ const typename dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation;
+ sc_array_t *subids;
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> > *vertices_with_ghost_neighbors;
};
get_cell_weights();
/**
- * Fills a map that, for each vertex, lists all the processors whose
+ * Return a map that, for each vertex, lists all the processors whose
* subdomains are adjacent to that vertex. Used by
* DoFHandler::Policy::ParallelDistributed.
*/
- void
- fill_vertices_with_ghost_neighbors
- (std::map<unsigned int, std::set<dealii::types::subdomain_id> >
- &vertices_with_ghost_neighbors);
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> >
+ compute_vertices_with_ghost_neighbors () const;
/**
* Fills a map that, for each vertex, lists all the processors whose
* Like above, this method, which is only implemented for dim = 2 or 3,
* needs a stub because it is used in dof_handler_policy.cc
*/
- void
- fill_vertices_with_ghost_neighbors
- (std::map<unsigned int, std::set<dealii::types::subdomain_id> >
- &vertices_with_ghost_neighbors);
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> >
+ compute_vertices_with_ghost_neighbors () const;
/**
* Like above, this method, which is only implemented for dim = 2 or 3,
template <int dim, int spacedim>
typename dealii::Triangulation<dim,spacedim>::cell_iterator
cell_from_quad
- (typename dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation,
- typename dealii::internal::p4est::types<dim>::topidx treeidx,
- typename dealii::internal::p4est::types<dim>::quadrant &quad)
+ (const dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation,
+ const typename dealii::internal::p4est::types<dim>::topidx treeidx,
+ const typename dealii::internal::p4est::types<dim>::quadrant &quad)
{
int i, l = quad.level;
dealii::types::global_dof_index dealii_index =
(info->sides.array);
FindGhosts<dim,spacedim> *fg = static_cast<FindGhosts<dim,spacedim> *>(user_data);
sc_array_t *subids = fg->subids;
- typename dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation = fg->triangulation;
+ const dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation = fg->triangulation;
int nsubs;
dealii::types::subdomain_id *subdomain_ids;
std::map<unsigned int, std::set<dealii::types::subdomain_id> >
(info->sides.array);
FindGhosts<dim,spacedim> *fg = static_cast<FindGhosts<dim,spacedim> *>(user_data);
sc_array_t *subids = fg->subids;
- typename dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation = fg->triangulation;
+ const dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation = fg->triangulation;
int nsubs;
dealii::types::subdomain_id *subdomain_ids;
std::map<unsigned int, std::set<dealii::types::subdomain_id> >
(info->sides.array);
FindGhosts<dim,spacedim> *fg = static_cast<FindGhosts<dim,spacedim> *>(user_data);
sc_array_t *subids = fg->subids;
- typename dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation = fg->triangulation;
+ const dealii::parallel::distributed::Triangulation<dim,spacedim> *triangulation = fg->triangulation;
int nsubs;
dealii::types::subdomain_id *subdomain_ids;
std::map<unsigned int, std::set<dealii::types::subdomain_id> >
* This is achieved via the p4est_iterate/p8est_iterate tool
*/
template <int dim, int spacedim>
- void
- Triangulation<dim,spacedim>::
- fill_vertices_with_ghost_neighbors
- (std::map<unsigned int, std::set<dealii::types::subdomain_id> >
- &vertices_with_ghost_neighbors)
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> >
+ Triangulation<dim,spacedim>::compute_vertices_with_ghost_neighbors () const
{
Assert (dim>1, ExcNotImplemented());
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> > vertices_with_ghost_neighbors;
+
dealii::internal::p4est::FindGhosts<dim,spacedim> fg;
fg.subids = sc_array_new (sizeof (dealii::types::subdomain_id));
fg.triangulation = this;
static_cast<void *>(&fg));
sc_array_destroy (fg.subids);
+
+ return vertices_with_ghost_neighbors;
}
}
template <int spacedim>
- void
+ std::map<unsigned int, std::set<dealii::types::subdomain_id> >
Triangulation<1,spacedim>::
- fill_vertices_with_ghost_neighbors
- (std::map<unsigned int, std::set<dealii::types::subdomain_id> >
- &/*vertices_with_ghost_neighbors*/)
+ compute_vertices_with_ghost_neighbors () const
{
Assert (false, ExcNotImplemented());
+ return std::map<unsigned int, std::set<dealii::types::subdomain_id> >();
}
template <int spacedim>
// add each ghostcell's subdomain to the vertex and keep track
// of interesting neighbors
- std::map<unsigned int, std::set<dealii::types::subdomain_id> >
- vertices_with_ghost_neighbors;
-
- triangulation->fill_vertices_with_ghost_neighbors (vertices_with_ghost_neighbors);
+ const std::map<unsigned int, std::set<dealii::types::subdomain_id> >
+ vertices_with_ghost_neighbors
+ = triangulation->compute_vertices_with_ghost_neighbors ();
// Send and receive cells. After this, only the local cells
// add each ghostcells' subdomain to the vertex and keep track of
// interesting neighbors
- std::map<unsigned int, std::set<dealii::types::subdomain_id> >
- vertices_with_ghost_neighbors;
-
- tr->fill_vertices_with_ghost_neighbors (vertices_with_ghost_neighbors);
+ const std::map<unsigned int, std::set<dealii::types::subdomain_id> >
+ vertices_with_ghost_neighbors
+ = tr->compute_vertices_with_ghost_neighbors ();
// Send and receive cells. After this, only the local cells are
// marked, that received new data. This has to be communicated in a