From: Daniel Arndt Date: Sun, 6 Nov 2016 23:47:14 +0000 (+0100) Subject: Ignore subdomain_id in MatrixFree::resolve_cell X-Git-Tag: v8.5.0-rc1~435^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7f2f17ddee9a9e7b004465487fab4f99941e157;p=dealii.git Ignore subdomain_id in MatrixFree::resolve_cell --- diff --git a/include/deal.II/matrix_free/matrix_free.templates.h b/include/deal.II/matrix_free/matrix_free.templates.h index dd4d8857f2..72de138444 100644 --- a/include/deal.II/matrix_free/matrix_free.templates.h +++ b/include/deal.II/matrix_free/matrix_free.templates.h @@ -366,7 +366,8 @@ namespace internal for (unsigned int child=0; childn_children(); ++child) resolve_cell (cell->child(child), cell_its, subdomain_id); - else if (cell->subdomain_id() == subdomain_id) + else if (subdomain_id == numbers::invalid_subdomain_id + || cell->subdomain_id() == subdomain_id) { Assert (cell->active(), ExcInternalError()); cell_its.push_back (std::pair @@ -391,7 +392,7 @@ initialize_dof_handlers (const std::vector*> &dof_handler, dof_info.resize (dof_handlers.n_dof_handlers); - // go through cells on zeroth level and then successively step down into + // Go through cells on zeroth level and then successively step down into // children. This gives a z-ordering of the cells, which is beneficial when // setting up neighboring relations between cells for thread parallelization const unsigned int n_mpi_procs = size_info.n_procs; @@ -404,8 +405,16 @@ initialize_dof_handlers (const std::vector*> &dof_handler, cell_level_index.reserve (tria.n_active_cells()); typename Triangulation::cell_iterator cell = tria.begin(0), end_cell = tria.end(0); + // For serial Triangulations always take all cells + const unsigned int subdomain_id + = (dynamic_cast *> + (&dof_handler[0]->get_triangulation())!=0) + ? my_pid : numbers::invalid_subdomain_id; for ( ; cell != end_cell; ++cell) - internal::resolve_cell (cell, cell_level_index, my_pid); + internal::resolve_cell (cell, cell_level_index, subdomain_id); + + Assert(n_mpi_procs>1 || cell_level_index.size()==tria.n_active_cells(), + ExcInternalError()); } else { @@ -454,9 +463,17 @@ initialize_dof_handlers (const std::vector*> &dof_hand } typename hp::DoFHandler::cell_iterator cell = dof_handler[0]->begin(0), end_cell = dof_handler[0]->end(0); + // For serial Triangulations always take all cells + const unsigned int subdomain_id + = (dynamic_cast *> + (&dof_handler[0]->get_triangulation())!=0) + ? my_pid : numbers::invalid_subdomain_id; for ( ; cell != end_cell; ++cell) internal::resolve_cell (cell, cell_level_index, - my_pid); + subdomain_id); + + Assert(n_mpi_procs>1 || cell_level_index.size()==tria.n_active_cells(), + ExcInternalError()); }