From: guido Date: Fri, 14 Jul 2000 20:20:41 +0000 (+0000) Subject: downstream renumbering for mg X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d10fec26b868573788e02bd8053fef20d03589fd;p=dealii-svn.git downstream renumbering for mg git-svn-id: https://svn.dealii.org/trunk@3161 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/numerics/dof_renumbering.h b/deal.II/deal.II/include/numerics/dof_renumbering.h index e4ad5aa13a..ec0cb6f14c 100644 --- a/deal.II/deal.II/include/numerics/dof_renumbering.h +++ b/deal.II/deal.II/include/numerics/dof_renumbering.h @@ -284,6 +284,19 @@ class DoFRenumbering const vector::cell_iterator> &cell_order); + /** + * Cell-wise renumbering on one + * level for DG elements. See the + * other function with the same + * name. + */ + template + static void + cell_wise_dg (MGDoFHandler &dof_handler, + const unsigned int level, + const vector::cell_iterator> &cell_order); + + /** * Cell-wise downstream numbering * with respect to a constant @@ -314,6 +327,19 @@ class DoFRenumbering template static void downstream_dg (DoFHandler &dof_handler, + const Point &direction); + + /** + * Cell-wise downstream numbering + * with respect to a constant + * flow direction on one + * level. See the other function + * with the same name. + */ + template + static void + downstream_dg (MGDoFHandler &dof_handler, + const unsigned int level, const Point &direction); /** diff --git a/deal.II/deal.II/source/dofs/dof_renumbering.cc b/deal.II/deal.II/source/dofs/dof_renumbering.cc index bb9ae94807..1628385fe1 100644 --- a/deal.II/deal.II/source/dofs/dof_renumbering.cc +++ b/deal.II/deal.II/source/dofs/dof_renumbering.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -242,7 +243,8 @@ template void DoFRenumbering::Cuthill_McKee (MGDoFHandler &dof_handler, const unsigned int level, const bool reversed_numbering, - const vector &starting_indices) { + const vector &starting_indices) +{ // make the connection graph SparsityPattern sparsity (dof_handler.n_dofs(level), dof_handler.max_couplings_between_dofs()); @@ -587,6 +589,62 @@ DoFRenumbering::cell_wise_dg (DoFHandler& dof, dof.renumber_dofs(reverse); } + + +template +void +DoFRenumbering::cell_wise_dg (MGDoFHandler& dof, + unsigned int level, + const vector::cell_iterator>& cells) +{ + Assert(cells.size() == dof.get_tria().n_cells(level), + ExcDimensionMismatch(cells.size(), + dof.get_tria().n_cells(level))); + switch (dim) + { + case 3: + Assert(dof.get_fe().n_dofs_per_quad()==0, + ExcNotDGFEM()); + case 2: + Assert(dof.get_fe().n_dofs_per_line()==0, + ExcNotDGFEM()); + default: + Assert(dof.get_fe().n_dofs_per_vertex()==0, + ExcNotDGFEM()); + } + + unsigned int n_global_dofs = dof.n_dofs(level); + unsigned int n_cell_dofs = dof.get_fe().n_dofs_per_cell(); + + vector new_order(n_global_dofs); + vector cell_dofs(n_cell_dofs); + + unsigned int global_index = 0; + + typename vector::cell_iterator>::const_iterator cell; + + for(cell = cells.begin(); cell != cells.end(); ++cell) + { + Assert ((*cell)->level() == (int) level, ExcInternalError()); + + (*cell)->get_mg_dof_indices(cell_dofs); + sort(cell_dofs.begin(), cell_dofs.end()); + + for (unsigned int i=0;i reverse(new_order.size()); + + for (unsigned int i=0;i& dof, +template +void +DoFRenumbering::downstream_dg (MGDoFHandler& dof, + const unsigned int level, + const Point& direction) +{ + vector::cell_iterator> + ordered_cells(dof.get_tria().n_cells(level)); + CompCells comparator(direction); + + typename MGDoFHandler::cell_iterator begin = dof.begin(level); + typename MGDoFHandler::cell_iterator end = dof.end(level); + + copy (begin, end, ordered_cells.begin()); + sort (ordered_cells.begin(), ordered_cells.end(), comparator); + + cell_wise_dg(dof, level, ordered_cells); +} + + + // explicit instantiations template void DoFRenumbering::Cuthill_McKee (DoFHandler&, @@ -659,10 +738,20 @@ template void DoFRenumbering::cell_wise_dg (DoFHandler&, const vector::cell_iterator>&); +template +void DoFRenumbering::cell_wise_dg (MGDoFHandler&, + unsigned int, + const vector::cell_iterator>&); + template void DoFRenumbering::downstream_dg (DoFHandler&, const Point&); +template +void DoFRenumbering::downstream_dg (MGDoFHandler&, + unsigned int, + const Point&); + template void DoFRenumbering::sort_selected_dofs_back (DoFHandler &, const vector &);