From: wolf Date: Fri, 19 Nov 1999 16:17:38 +0000 (+0000) Subject: Next round of clean-up. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f351199ec413c92cc05f80813519ce422d369ec;p=dealii-svn.git Next round of clean-up. git-svn-id: https://svn.dealii.org/trunk@1904 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/multigrid/multigrid.templates.h b/deal.II/deal.II/include/multigrid/multigrid.templates.h index f63dc58d73..f05d47842b 100644 --- a/deal.II/deal.II/include/multigrid/multigrid.templates.h +++ b/deal.II/deal.II/include/multigrid/multigrid.templates.h @@ -21,27 +21,43 @@ MG::copy_to_mg(const Vector& src) defect.clear(); // constraints->condense(src); - vector index(fe_dofs); - vector mgindex(fe_dofs); - vector mgfaceindex(face_dofs); - + vector global_dof_indices (fe_dofs); + vector level_dof_indices (fe_dofs); + vector level_face_indices (face_dofs); + + // traverse the grid top-down + // (i.e. starting with the most + // refined grid). this way, we can + // always get that part of one + // level of the output vector which + // corresponds to a region which is + // more refined, by restriction of + // the respective vector on the + // next finer level, which we then + // already have built. for (int level=maxlevel; level>=static_cast(minlevel); --level) { DoFHandler::active_cell_iterator - dc = mg_dof_handler->DoFHandler::begin_active(level); + global_cell = mg_dof_handler->DoFHandler::begin_active(level); MGDoFHandler::active_cell_iterator level_cell = mg_dof_handler->begin_active(level); const MGDoFHandler::active_cell_iterator level_end = mg_dof_handler->end_active(level); - -//TODO: Document on difference between #end# and #end_level# - for (; level_cell!=level_end; ++level_cell, ++dc) + for (; level_cell!=level_end; ++level_cell, ++global_cell) { - dc->get_dof_indices(index); - level_cell->get_mg_dof_indices (mgindex); + // get the dof numbers of + // this cell for the global + // and the level-wise + // numbering + global_cell->get_dof_indices(global_dof_indices); + level_cell->get_mg_dof_indices (level_dof_indices); + + // transfer the global + // defect in the vector + // into the level-wise one for (unsigned int i=0; i::copy_to_mg(const Vector& src) const MGDoFHandler::face_iterator face = level_cell->face(face_n); if (face->has_children()) { - face->get_mg_dof_indices(mgfaceindex); + face->get_mg_dof_indices(level_face_indices); for (unsigned int i=0; i::copy_to_mg(const Vector& src) template template void -MG::copy_from_mg(Vector& dst) const +MG::copy_from_mg(Vector &dst) const { const unsigned int fe_dofs = mg_dof_handler->get_fe().total_dofs; - vector index(fe_dofs); - vector mgindex(fe_dofs); + vector global_dof_indices (fe_dofs); + vector level_dof_indices (fe_dofs); -// for (unsigned int i=minlevel; i<= maxlevel; ++i) -// { -// char name[10]; -// sprintf(name,"CF%d",i); -// ofstream of(name); -// write_gnuplot(*dofs, s[i], i, of); -// } + DoFHandler::active_cell_iterator + global_cell = mg_dof_handler->DoFHandler::begin_active(); + MGDoFHandler::active_cell_iterator + level_cell = mg_dof_handler->begin_active(); + const MGDoFHandler::active_cell_iterator + endc = mg_dof_handler->end(); - DoFHandler::active_cell_iterator dc = mg_dof_handler->DoFHandler::begin_active(); - for (MGDoFHandler::active_cell_iterator c = mg_dof_handler->begin_active(); - c != mg_dof_handler->end(); ++c, ++dc) + // traverse all cells and copy the + // data appropriately to the output + // vector + for (; level_cell != endc; ++level_cell, ++global_cell) { - dc->get_dof_indices(index); - c->get_mg_dof_indices(mgindex); - for (unsigned int i=0;ilevel()](mgindex[i]); - } + const unsigned int level = level_cell->level(); + + // get the dof numbers of + // this cell for the global + // and the level-wise + // numbering + global_cell->get_dof_indices (global_dof_indices); + level_cell->get_mg_dof_indices(level_dof_indices); + + // copy level-wise data to + // global vector + for (unsigned int i=0; iset_zero(dst); -// { -// ofstream of("CF"); -// DataOut<2> out; -// out.attach_dof_handler(*dofs); -// out.add_data_vector(dst,"solution"); -// out.write_gnuplot(of,1); -// } } diff --git a/deal.II/deal.II/include/numerics/multigrid.templates.h b/deal.II/deal.II/include/numerics/multigrid.templates.h index f63dc58d73..f05d47842b 100644 --- a/deal.II/deal.II/include/numerics/multigrid.templates.h +++ b/deal.II/deal.II/include/numerics/multigrid.templates.h @@ -21,27 +21,43 @@ MG::copy_to_mg(const Vector& src) defect.clear(); // constraints->condense(src); - vector index(fe_dofs); - vector mgindex(fe_dofs); - vector mgfaceindex(face_dofs); - + vector global_dof_indices (fe_dofs); + vector level_dof_indices (fe_dofs); + vector level_face_indices (face_dofs); + + // traverse the grid top-down + // (i.e. starting with the most + // refined grid). this way, we can + // always get that part of one + // level of the output vector which + // corresponds to a region which is + // more refined, by restriction of + // the respective vector on the + // next finer level, which we then + // already have built. for (int level=maxlevel; level>=static_cast(minlevel); --level) { DoFHandler::active_cell_iterator - dc = mg_dof_handler->DoFHandler::begin_active(level); + global_cell = mg_dof_handler->DoFHandler::begin_active(level); MGDoFHandler::active_cell_iterator level_cell = mg_dof_handler->begin_active(level); const MGDoFHandler::active_cell_iterator level_end = mg_dof_handler->end_active(level); - -//TODO: Document on difference between #end# and #end_level# - for (; level_cell!=level_end; ++level_cell, ++dc) + for (; level_cell!=level_end; ++level_cell, ++global_cell) { - dc->get_dof_indices(index); - level_cell->get_mg_dof_indices (mgindex); + // get the dof numbers of + // this cell for the global + // and the level-wise + // numbering + global_cell->get_dof_indices(global_dof_indices); + level_cell->get_mg_dof_indices (level_dof_indices); + + // transfer the global + // defect in the vector + // into the level-wise one for (unsigned int i=0; i::copy_to_mg(const Vector& src) const MGDoFHandler::face_iterator face = level_cell->face(face_n); if (face->has_children()) { - face->get_mg_dof_indices(mgfaceindex); + face->get_mg_dof_indices(level_face_indices); for (unsigned int i=0; i::copy_to_mg(const Vector& src) template template void -MG::copy_from_mg(Vector& dst) const +MG::copy_from_mg(Vector &dst) const { const unsigned int fe_dofs = mg_dof_handler->get_fe().total_dofs; - vector index(fe_dofs); - vector mgindex(fe_dofs); + vector global_dof_indices (fe_dofs); + vector level_dof_indices (fe_dofs); -// for (unsigned int i=minlevel; i<= maxlevel; ++i) -// { -// char name[10]; -// sprintf(name,"CF%d",i); -// ofstream of(name); -// write_gnuplot(*dofs, s[i], i, of); -// } + DoFHandler::active_cell_iterator + global_cell = mg_dof_handler->DoFHandler::begin_active(); + MGDoFHandler::active_cell_iterator + level_cell = mg_dof_handler->begin_active(); + const MGDoFHandler::active_cell_iterator + endc = mg_dof_handler->end(); - DoFHandler::active_cell_iterator dc = mg_dof_handler->DoFHandler::begin_active(); - for (MGDoFHandler::active_cell_iterator c = mg_dof_handler->begin_active(); - c != mg_dof_handler->end(); ++c, ++dc) + // traverse all cells and copy the + // data appropriately to the output + // vector + for (; level_cell != endc; ++level_cell, ++global_cell) { - dc->get_dof_indices(index); - c->get_mg_dof_indices(mgindex); - for (unsigned int i=0;ilevel()](mgindex[i]); - } + const unsigned int level = level_cell->level(); + + // get the dof numbers of + // this cell for the global + // and the level-wise + // numbering + global_cell->get_dof_indices (global_dof_indices); + level_cell->get_mg_dof_indices(level_dof_indices); + + // copy level-wise data to + // global vector + for (unsigned int i=0; iset_zero(dst); -// { -// ofstream of("CF"); -// DataOut<2> out; -// out.attach_dof_handler(*dofs); -// out.add_data_vector(dst,"solution"); -// out.write_gnuplot(of,1); -// } }