From d7a73e310d578792391e703c07d19aa9ccfdfc92 Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Thu, 27 Sep 2012 09:04:15 +0000 Subject: [PATCH] use the logic in Triangulation instead of copying it git-svn-id: https://svn.dealii.org/trunk@26778 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/include/deal.II/dofs/dof_handler.h | 75 ++- deal.II/source/dofs/dof_handler.cc | 700 ++++++--------------- 2 files changed, 239 insertions(+), 536 deletions(-) diff --git a/deal.II/include/deal.II/dofs/dof_handler.h b/deal.II/include/deal.II/dofs/dof_handler.h index 68fdcc45d8..4083a4c94b 100644 --- a/deal.II/include/deal.II/dofs/dof_handler.h +++ b/deal.II/include/deal.II/dofs/dof_handler.h @@ -478,11 +478,8 @@ class DoFHandler : public Subscriptor * or not, on level @p level. If a level * has no cells, a past-the-end iterator * is returned. - * - * This function calls @p begin_raw_line - * in 1D and @p begin_raw_quad in 2D. */ - raw_cell_iterator begin_raw (const unsigned int level = 0) const; + raw_cell_iterator begin_raw (const unsigned int level = 0) const DEAL_II_DEPRECATED; /** * Iterator to the first used cell @@ -540,20 +537,14 @@ class DoFHandler : public Subscriptor /** * Return an iterator pointing to the * last cell, used or not. - * - * This function calls @p last_raw_line - * in 1D and @p last_raw_quad in 2D. */ - raw_cell_iterator last_raw () const; + raw_cell_iterator last_raw () const DEAL_II_DEPRECATED; /** * Return an iterator pointing to the last * cell of the level @p level, used or not. - * - * This function calls @p last_raw_line - * in 1D and @p last_raw_quad in 2D. */ - raw_cell_iterator last_raw (const unsigned int level) const; + raw_cell_iterator last_raw (const unsigned int level) const DEAL_II_DEPRECATED; /** * Return an iterator pointing to the last @@ -603,11 +594,8 @@ class DoFHandler : public Subscriptor * or not, on level @p level. If a level * has no faces, a past-the-end iterator * is returned. - * - * This function calls @p begin_raw_line - * in 2D and @p begin_raw_quad in 3D. */ - raw_face_iterator begin_raw_face () const; + raw_face_iterator begin_raw_face () const DEAL_II_DEPRECATED; /** * Iterator to the first used face @@ -644,7 +632,7 @@ class DoFHandler : public Subscriptor * the last level, then this returns * end(). */ - raw_face_iterator end_raw_face () const; + raw_face_iterator end_raw_face () const DEAL_II_DEPRECATED; /** * Return an active iterator which is the @@ -657,11 +645,8 @@ class DoFHandler : public Subscriptor /** * Return an iterator pointing to the * last face, used or not. - * - * This function calls @p last_raw_line - * in 2D and @p last_raw_quad in 3D. */ - raw_face_iterator last_raw_face () const; + raw_face_iterator last_raw_face () const DEAL_II_DEPRECATED; /** * Return an iterator pointing to the last @@ -700,6 +685,9 @@ class DoFHandler : public Subscriptor */ /*@{*/ /** + * @deprecated Raw iterators + * should not be used. + * * Iterator to the first line, used * or not, on level @p level. If a level * has no lines, a past-the-end iterator @@ -736,12 +724,15 @@ class DoFHandler : public Subscriptor line_iterator end_line (const unsigned int level) const; /** + * @deprecated Raw iterators + * should not be used. + * * Return a raw iterator which is the first * iterator not on level. If @p level is * the last level, then this returns * end(). */ - raw_line_iterator end_raw_line (const unsigned int level) const; + raw_line_iterator end_raw_line (const unsigned int level) const DEAL_II_DEPRECATED; /** * Return an active iterator which is the @@ -759,9 +750,11 @@ class DoFHandler : public Subscriptor raw_line_iterator last_raw_line () const; /** + * @deprecated Raw iterators + * should not be used. + * * Return an iterator pointing to the last * line of the level @p level, used or not. - */ raw_line_iterator last_raw_line (const unsigned int level) const; @@ -797,6 +790,9 @@ class DoFHandler : public Subscriptor /*@{ */ /** + * @deprecated Raw iterators + * should not be used. + * * Iterator to the first quad, used * or not, on level @p level. If a level * has no quads, a past-the-end iterator @@ -833,6 +829,9 @@ class DoFHandler : public Subscriptor quad_iterator end_quad (const unsigned int level) const; /** + * @deprecated Raw iterators + * should not be used. + * * Return a raw iterator which is the first * iterator not on level. If @p level is * the last level, then this returns @@ -850,15 +849,20 @@ class DoFHandler : public Subscriptor /** + * @deprecated Raw iterators + * should not be used. + * * Return an iterator pointing to the * last quad, used or not. */ raw_quad_iterator last_raw_quad () const; /** + * @deprecated Raw iterators + * should not be used. + * * Return an iterator pointing to the last * quad of the level @p level, used or not. - */ raw_quad_iterator last_raw_quad (const unsigned int level) const; @@ -894,13 +898,16 @@ class DoFHandler : public Subscriptor /*@{ */ /** + * @deprecated Raw iterators + * should not be used. + * * Iterator to the first hex, used * or not, on level @p level. If a level * has no hexs, a past-the-end iterator * is returned. */ raw_hex_iterator - begin_raw_hex (const unsigned int level = 0) const; + begin_raw_hex (const unsigned int level = 0) const DEAL_II_DEPRECATED; /** * Iterator to the first used hex @@ -922,8 +929,7 @@ class DoFHandler : public Subscriptor * iterators with past-the-end or * before-the-beginning states. */ - raw_hex_iterator - end_hex () const; + raw_hex_iterator end_hex () const; /** * Return an iterator which is the first @@ -934,12 +940,15 @@ class DoFHandler : public Subscriptor hex_iterator end_hex (const unsigned int level) const; /** + * @deprecated Raw iterators + * should not be used. + * * Return a raw iterator which is the first * iterator not on level. If @p level is * the last level, then this returns * end(). */ - raw_hex_iterator end_raw_hex (const unsigned int level) const; + raw_hex_iterator end_raw_hex (const unsigned int level) const DEAL_II_DEPRECATED; /** * Return an active iterator which is the @@ -953,16 +962,16 @@ class DoFHandler : public Subscriptor * Return an iterator pointing to the * last hex, used or not. */ - raw_hex_iterator - last_raw_hex () const; + raw_hex_iterator last_raw_hex () const DEAL_II_DEPRECATED; /** + * @deprecated Raw iterators + * should not be used. + * * Return an iterator pointing to the last * hex of the level @p level, used or not. - */ - raw_hex_iterator - last_raw_hex (const unsigned int level) const; + raw_hex_iterator last_raw_hex (const unsigned int level) const DEAL_II_DEPRECATED; /** * Return an iterator pointing to the last diff --git a/deal.II/source/dofs/dof_handler.cc b/deal.II/source/dofs/dof_handler.cc index b0ae632789..1d4cacf434 100644 --- a/deal.II/source/dofs/dof_handler.cc +++ b/deal.II/source/dofs/dof_handler.cc @@ -423,38 +423,19 @@ template typename DoFHandler::raw_cell_iterator DoFHandler::begin_raw (const unsigned int level) const { - switch (dim) - { - case 1: - return begin_raw_line (level); - case 2: - return begin_raw_quad (level); - case 3: - return begin_raw_hex (level); - default: - Assert (false, ExcNotImplemented()); - return raw_cell_iterator(); - } + typename Triangulation::raw_cell_iterator ti = tria->begin_raw(level); + typename DoFHandler::raw_cell_iterator ri(*ti, this); + return ri; } - template typename DoFHandler::cell_iterator DoFHandler::begin (const unsigned int level) const { - switch (dim) - { - case 1: - return begin_line (level); - case 2: - return begin_quad (level); - case 3: - return begin_hex (level); - default: - Assert (false, ExcImpossibleInDim(dim)); - return cell_iterator(); - } + typename Triangulation::cell_iterator ti = tria->begin(level); + typename DoFHandler::cell_iterator ri(*ti, this); + return ri; } @@ -463,18 +444,9 @@ template typename DoFHandler::active_cell_iterator DoFHandler::begin_active (const unsigned int level) const { - switch (dim) - { - case 1: - return begin_active_line (level); - case 2: - return begin_active_quad (level); - case 3: - return begin_active_hex (level); - default: - Assert (false, ExcNotImplemented()); - return active_cell_iterator(); - } + typename Triangulation::active_cell_iterator ti = tria->begin_active(level); + typename DoFHandler::active_cell_iterator ri(*ti, this); + return ri; } @@ -483,18 +455,9 @@ template typename DoFHandler::raw_cell_iterator DoFHandler::last_raw () const { - switch (dim) - { - case 1: - return last_raw_line (); - case 2: - return last_raw_quad (); - case 3: - return last_raw_hex (); - default: - Assert (false, ExcNotImplemented()); - return raw_cell_iterator(); - } + typename Triangulation::raw_cell_iterator ti = tria->last_raw(); + typename DoFHandler::raw_cell_iterator ri(*ti, this); + return ri; } @@ -503,18 +466,9 @@ template typename DoFHandler::raw_cell_iterator DoFHandler::last_raw (const unsigned int level) const { - switch (dim) - { - case 1: - return last_raw_line (level); - case 2: - return last_raw_quad (level); - case 3: - return last_raw_hex (level); - default: - Assert (false, ExcNotImplemented()); - return raw_cell_iterator(); - } + typename Triangulation::raw_cell_iterator ti = tria->last_raw(level); + typename DoFHandler::raw_cell_iterator ri(*ti, this); + return ri; } @@ -523,18 +477,9 @@ template typename DoFHandler::cell_iterator DoFHandler::last () const { - switch (dim) - { - case 1: - return last_line (); - case 2: - return last_quad (); - case 3: - return last_hex (); - default: - Assert (false, ExcNotImplemented()); - return cell_iterator(); - } + typename Triangulation::cell_iterator ti = tria->last(); + typename DoFHandler::cell_iterator ri(*ti, this); + return ri; } @@ -543,18 +488,9 @@ template typename DoFHandler::cell_iterator DoFHandler::last (const unsigned int level) const { - switch (dim) - { - case 1: - return last_line (level); - case 2: - return last_quad (level); - case 3: - return last_hex (level); - default: - Assert (false, ExcNotImplemented()); - return cell_iterator(); - } + typename Triangulation::cell_iterator ti = tria->last(level); + typename DoFHandler::cell_iterator ri(*ti, this); + return ri; } @@ -563,18 +499,9 @@ template typename DoFHandler::active_cell_iterator DoFHandler::last_active () const { - switch (dim) - { - case 1: - return last_active_line (); - case 2: - return last_active_quad (); - case 3: - return last_active_hex (); - default: - Assert (false, ExcNotImplemented()); - return active_cell_iterator(); - } + typename Triangulation::active_cell_iterator ti = tria->last_active(); + typename DoFHandler::active_cell_iterator ri(*ti, this); + return ri; } @@ -583,37 +510,20 @@ template typename DoFHandler::active_cell_iterator DoFHandler::last_active (const unsigned int level) const { - switch (dim) - { - case 1: - return last_active_line (level); - case 2: - return last_active_quad (level); - case 3: - return last_active_hex (level); - default: - Assert (false, ExcNotImplemented()); - return active_cell_iterator(); - } + typename Triangulation::active_cell_iterator ti = tria->last_active(level); + typename DoFHandler::active_cell_iterator ri(ti.access_any(), this); + return ri; } +//TODO: Check if return type should really be raw template typename DoFHandler::raw_cell_iterator DoFHandler::end () const { - switch (dim) - { - case 1: - return end_line(); - case 2: - return end_quad(); - case 3: - return end_hex(); - default: - Assert (false, ExcImpossibleInDim(dim)); - return raw_cell_iterator(); - } + typename Triangulation::raw_cell_iterator ti = tria->end(); + typename DoFHandler::raw_cell_iterator ri(ti.access_any(), this); + return ri; } @@ -622,10 +532,9 @@ template typename DoFHandler::raw_cell_iterator DoFHandler::end_raw (const unsigned int level) const { - Assert(tria != 0, ExcNotInitialized()); - return (level == tria->n_levels()-1 ? - end() : - begin_raw (level+1)); + typename Triangulation::raw_cell_iterator ti = tria->end_raw(level); + typename DoFHandler::raw_cell_iterator ri(ti.access_any(), this); + return ri; } @@ -633,10 +542,9 @@ template typename DoFHandler::cell_iterator DoFHandler::end (const unsigned int level) const { - Assert(tria != 0, ExcNotInitialized()); - return (level == tria->n_levels()-1 ? - cell_iterator(end()) : - begin (level+1)); + typename Triangulation::cell_iterator ti = tria->end(level); + typename DoFHandler::cell_iterator ri(ti.access_any(), this); + return ri; } @@ -644,10 +552,9 @@ template typename DoFHandler::active_cell_iterator DoFHandler::end_active (const unsigned int level) const { - Assert(tria != 0, ExcNotInitialized()); - return (level == tria->n_levels()-1 ? - active_cell_iterator(end()) : - begin_active (level+1)); + typename Triangulation::active_cell_iterator ti = tria->end_active(level); + typename DoFHandler::active_cell_iterator ri(ti.access_any(), this); + return ri; } @@ -815,71 +722,73 @@ DoFHandler::last_active_face () const return last_active_quad (); default: Assert (false, ExcNotImplemented()); - return raw_face_iterator (); + return face_iterator (); } } /*------------------------ Line iterator functions ------------------------*/ +template +typename DoFHandler::raw_line_iterator +DoFHandler::begin_raw_line (const unsigned int level) const +{ + typename Triangulation::raw_line_iterator ti = tria->begin_raw_line(level); + typename DoFHandler::raw_line_iterator ri(*ti, this); + return ri; +} + template -typename DoFHandler::raw_line_iterator -DoFHandler::begin_raw_line (const unsigned int level) const +typename DoFHandler::line_iterator +DoFHandler::begin_line (const unsigned int level) const { - Assert(tria != 0, ExcNotInitialized()); - switch (dim) - { - case 1: - Assert (leveln_levels(), ExcInvalidLevel(level)); + typename Triangulation::line_iterator ti = tria->begin_line(level); + typename DoFHandler::line_iterator ri(*ti, this); + return ri; +} - if (tria->n_raw_lines(level) == 0) - return end_line (); - return raw_line_iterator (tria, - level, - 0, - this); - default: - Assert (level == 0, ExcFacesHaveNoLevel()); - return raw_line_iterator (tria, - 0, - 0, - this); - } +template +typename DoFHandler::active_line_iterator +DoFHandler::begin_active_line (const unsigned int level) const +{ + typename Triangulation::active_line_iterator ti = tria->begin_active_line(level); + typename DoFHandler::active_line_iterator ri(*ti, this); + return ri; } + template -typename DoFHandler::line_iterator -DoFHandler::begin_line (const unsigned int level) const -{ - // level is checked in begin_raw - raw_line_iterator ri = begin_raw_line (level); - if (ri.state() != IteratorState::valid) - return ri; - while (ri->used() == false) - if ((++ri).state() != IteratorState::valid) - return ri; +typename DoFHandler::raw_line_iterator +DoFHandler::end_raw_line (const unsigned int level) const +{ + typename Triangulation::raw_line_iterator ti = tria->end_raw_line(level); + typename DoFHandler::raw_line_iterator ri(ti.access_any(), this); return ri; } +template +typename DoFHandler::line_iterator +DoFHandler::end_line (const unsigned int level) const +{ + typename Triangulation::line_iterator ti = tria->end_line(level); + typename DoFHandler::line_iterator ri(ti.access_any(), this); + return ri; +} + template typename DoFHandler::active_line_iterator -DoFHandler::begin_active_line (const unsigned int level) const +DoFHandler::end_active_line (const unsigned int level) const { - // level is checked in begin_raw - line_iterator i = begin_line (level); - if (i.state() != IteratorState::valid) - return i; - while (i->has_children()) - if ((++i).state() != IteratorState::valid) - return i; - return i; + typename Triangulation::active_line_iterator ti = tria->end_active_line(level); + typename DoFHandler::active_line_iterator ri(ti.access_any(), this); + return ri; } @@ -888,10 +797,9 @@ template typename DoFHandler::raw_line_iterator DoFHandler::end_line () const { - return raw_line_iterator (tria, - -1, - -1, - this); + typename Triangulation::raw_line_iterator ti = tria->end_line(); + typename DoFHandler::raw_line_iterator ri(ti.access_any(), this); + return ri; } @@ -900,26 +808,9 @@ template typename DoFHandler::raw_line_iterator DoFHandler::last_raw_line (const unsigned int level) const { - Assert(tria != 0, ExcNotInitialized()); - switch (dim) - { - case 1: - Assert (leveln_levels(), ExcInvalidLevel(level)); - Assert (tria->n_raw_lines(level) != 0, - ExcEmptyLevel (level)); - - return raw_line_iterator (tria, - level, - tria->n_raw_lines(level)-1, - this); - - default: - Assert (level == 0, ExcFacesHaveNoLevel()); - return raw_line_iterator (tria, - 0, - tria->n_raw_lines()-1, - this); - } + typename Triangulation::raw_line_iterator ti = tria->last_raw_line(level); + typename DoFHandler::raw_line_iterator ri(*ti, this); + return ri; } @@ -928,148 +819,64 @@ template typename DoFHandler::raw_line_iterator DoFHandler::last_raw_line () const { - if (dim == 1) - return last_raw_line (tria->n_levels()-1); - else - return last_raw_line (0); + typename Triangulation::raw_line_iterator ti = tria->last_raw_line(); + typename DoFHandler::raw_line_iterator ri(*ti, this); + return ri; } + template typename DoFHandler::line_iterator DoFHandler::last_line (const unsigned int level) const { - // level is checked in last_raw - raw_line_iterator ri = last_raw_line(level); - if (ri->used()==true) - return ri; - while ((--ri).state() == IteratorState::valid) - if (ri->used()==true) - return ri; + typename Triangulation::line_iterator ti = tria->last_line(level); + typename DoFHandler::line_iterator ri(*ti, this); return ri; } + template typename DoFHandler::line_iterator DoFHandler::last_line () const { - if (dim == 1) - return last_line (tria->n_levels()-1); - else - return last_line (0); + typename Triangulation::line_iterator ti = tria->last_line(); + typename DoFHandler::line_iterator ri(*ti, this); + return ri; } -template -typename DoFHandler::active_line_iterator -DoFHandler::last_active_line (const unsigned int level) const -{ - // level is checked in last_raw - line_iterator i = last_line(level); - if (i->has_children()==false) - return i; - while ((--i).state() == IteratorState::valid) - if (i->has_children()==false) - return i; - return i; -} - template typename DoFHandler::active_line_iterator -DoFHandler::last_active_line () const -{ - if (dim == 1) - return last_active_line (tria->n_levels()-1); - else - return last_active_line (0); -} - - -template -typename DoFHandler::raw_line_iterator -DoFHandler::end_raw_line (const unsigned int level) const +DoFHandler::last_active_line (const unsigned int level) const { - Assert (dim == 1 || level == 0, ExcFacesHaveNoLevel()); - if (dim == 1) - return (level == tria->n_levels()-1 ? - end_line() : - begin_raw_line (level+1)); - else - return end_line(); + typename Triangulation::active_line_iterator ti = tria->last_active_line(level); + typename DoFHandler::active_line_iterator ri(ti.access_any(), this); + return ri; } -template -typename DoFHandler::line_iterator -DoFHandler::end_line (const unsigned int level) const -{ - Assert (dim == 1 || level == 0, ExcFacesHaveNoLevel()); - if (dim == 1) - return (level == tria->n_levels()-1 ? - line_iterator(end_line()) : - begin_line (level+1)); - else - return line_iterator(end_line()); -} - template typename DoFHandler::active_line_iterator -DoFHandler::end_active_line (const unsigned int level) const +DoFHandler::last_active_line () const { - Assert (dim == 1 || level == 0, ExcFacesHaveNoLevel()); - if (dim == 1) - return (level == tria->n_levels()-1 ? - active_line_iterator(end_line()) : - begin_active_line (level+1)); - else - return active_line_iterator(end_line()); + typename Triangulation::active_line_iterator ti = tria->last_active_line(); + typename DoFHandler::active_line_iterator ri(*ti, this); + return ri; } - - /*------------------------ Quad iterator functions ------------------------*/ - template typename DoFHandler::raw_quad_iterator DoFHandler::begin_raw_quad (const unsigned int level) const { - switch (dim) - { - case 1: - Assert (false, ExcImpossibleInDim(1)); - return raw_hex_iterator(); - case 2: - { - Assert (leveln_levels(), ExcInvalidLevel(level)); - - if (tria->n_raw_quads(level) == 0) - return end_quad(); - - return raw_quad_iterator (tria, - level, - 0, - this); - } - - case 3: - { - Assert (level == 0, ExcFacesHaveNoLevel()); - - return raw_quad_iterator (tria, - 0, - 0, - this); - } - - - default: - Assert (false, ExcNotImplemented()); - return raw_hex_iterator(); - } + typename Triangulation::raw_quad_iterator ti = tria->begin_raw_quad(level); + typename DoFHandler::raw_quad_iterator ri(*ti, this); + return ri; } @@ -1078,30 +885,20 @@ template typename DoFHandler::quad_iterator DoFHandler::begin_quad (const unsigned int level) const { - // level is checked in begin_raw - raw_quad_iterator ri = begin_raw_quad (level); - if (ri.state() != IteratorState::valid) - return ri; - while (ri->used() == false) - if ((++ri).state() != IteratorState::valid) - return ri; + typename Triangulation::quad_iterator ti = tria->begin_quad(level); + typename DoFHandler::quad_iterator ri(*ti, this); return ri; } template -typename DoFHandler::active_quad_iterator -DoFHandler::begin_active_quad (const unsigned int level) const +typename DoFHandler::active_quad_iterator +DoFHandler::begin_active_quad (const unsigned int level) const { - // level is checked in begin_raw - quad_iterator i = begin_quad (level); - if (i.state() != IteratorState::valid) - return i; - while (i->has_children()) - if ((++i).state() != IteratorState::valid) - return i; - return i; + typename Triangulation::active_quad_iterator ti = tria->begin_active_quad(level); + typename DoFHandler::active_quad_iterator ri(*ti, this); + return ri; } @@ -1110,28 +907,19 @@ template typename DoFHandler::raw_quad_iterator DoFHandler::end_raw_quad (const unsigned int level) const { - Assert (dim == 2 || level == 0, ExcFacesHaveNoLevel()); - if (dim == 2) - return (level == tria->n_levels()-1 ? - end_quad() : - begin_raw_quad (level+1)); - else - return end_quad(); + typename Triangulation::raw_quad_iterator ti = tria->end_raw_quad(level); + typename DoFHandler::raw_quad_iterator ri(ti.access_any(), this); + return ri; } - template typename DoFHandler::quad_iterator DoFHandler::end_quad (const unsigned int level) const { - Assert (dim == 2 || level == 0, ExcFacesHaveNoLevel()); - if (dim == 2) - return (level == tria->n_levels()-1 ? - quad_iterator(end_quad()) : - begin_quad (level+1)); - else - return quad_iterator(end_quad()); + typename Triangulation::quad_iterator ti = tria->end_quad(level); + typename DoFHandler::quad_iterator ri(ti.access_any(), this); + return ri; } @@ -1139,129 +927,88 @@ template typename DoFHandler::active_quad_iterator DoFHandler::end_active_quad (const unsigned int level) const { - Assert(dim == 2 || level == 0, ExcFacesHaveNoLevel()); - if (dim == 2) - return (level == tria->n_levels()-1 ? - active_quad_iterator(end_quad()) : - begin_active_quad (level+1)); - else - return active_quad_iterator(end_quad()); + typename Triangulation::active_quad_iterator ti = tria->end_active_quad(level); + typename DoFHandler::active_quad_iterator ri(ti.access_any(), this); + return ri; } template -typename DoFHandler::raw_quad_iterator -DoFHandler::end_quad () const +typename DoFHandler::raw_quad_iterator +DoFHandler::end_quad () const { - return raw_quad_iterator (tria, - -1, - -1, - this); + typename Triangulation::raw_quad_iterator ti = tria->end_quad(); + typename DoFHandler::raw_quad_iterator ri(ti.access_any(), this); + return ri; } template -typename DoFHandler::raw_quad_iterator -DoFHandler::last_raw_quad (const unsigned int level) const +typename DoFHandler::raw_quad_iterator +DoFHandler::last_raw_quad (const unsigned int level) const { - Assert(tria != 0, ExcNotInitialized()); - switch (dim) - { - case 1: - Assert (false, ExcImpossibleInDim(1)); - return raw_quad_iterator(); - case 2: - Assert (leveln_levels(), - ExcInvalidLevel(level)); - Assert (tria->n_raw_quads(level) != 0, - ExcEmptyLevel (level)); - return raw_quad_iterator (tria, - level, - tria->n_raw_quads(level)-1, - this); - case 3: - Assert (level == 0, ExcFacesHaveNoLevel()); - return raw_quad_iterator (tria, - 0, - tria->n_raw_quads()-1, - this); - default: - Assert (false, ExcNotImplemented()); - return raw_quad_iterator(); - } + typename Triangulation::raw_quad_iterator ti = tria->last_raw_quad(level); + typename DoFHandler::raw_quad_iterator ri(*ti, this); + return ri; } template -typename DoFHandler::raw_quad_iterator -DoFHandler::last_raw_quad () const +typename DoFHandler::raw_quad_iterator +DoFHandler::last_raw_quad () const { - if (dim == 2) - return last_raw_quad (tria->n_levels()-1); - else - return last_raw_quad (0); + typename Triangulation::raw_quad_iterator ti = tria->last_raw_quad(); + typename DoFHandler::raw_quad_iterator ri(*ti, this); + return ri; } template -typename DoFHandler::quad_iterator -DoFHandler::last_quad (const unsigned int level) const -{ - // level is checked in last_raw - raw_quad_iterator ri = last_raw_quad(level); - if (ri->used()==true) - return ri; - while ((--ri).state() == IteratorState::valid) - if (ri->used()==true) - return ri; +typename DoFHandler::quad_iterator +DoFHandler::last_quad (const unsigned int level) const +{ + typename Triangulation::quad_iterator ti = tria->last_quad(level); + typename DoFHandler::quad_iterator ri(*ti, this); return ri; } template -typename DoFHandler::quad_iterator -DoFHandler::last_quad () const +typename DoFHandler::quad_iterator +DoFHandler::last_quad () const { - if (dim == 2) - return last_quad (tria->n_levels()-1); - else - return last_quad (0); + typename Triangulation::quad_iterator ti = tria->last_quad(); + typename DoFHandler::quad_iterator ri(*ti, this); + return ri; } template -typename DoFHandler::active_quad_iterator -DoFHandler::last_active_quad (const unsigned int level) const +typename DoFHandler::active_quad_iterator +DoFHandler::last_active_quad (const unsigned int level) const { - // level is checked in last_raw - quad_iterator i = last_quad(level); - if (i->has_children()==false) - return i; - while ((--i).state() == IteratorState::valid) - if (i->has_children()==false) - return i; - return i; + typename Triangulation::active_quad_iterator ti = tria->last_active_quad(level); + typename DoFHandler::active_quad_iterator ri(ti.access_any(), this); + return ri; } template -typename DoFHandler::active_quad_iterator -DoFHandler::last_active_quad () const +typename DoFHandler::active_quad_iterator +DoFHandler::last_active_quad () const { - if (dim == 2) - return last_active_quad (tria->n_levels()-1); - else - return last_active_quad (0); + typename Triangulation::active_quad_iterator ti = tria->last_active_quad(); + typename DoFHandler::active_quad_iterator ri(*ti, this); + return ri; } - /*------------------------ Hex iterator functions ------------------------*/ @@ -1269,29 +1016,9 @@ template typename DoFHandler::raw_hex_iterator DoFHandler::begin_raw_hex (const unsigned int level) const { - switch (dim) - { - case 1: - case 2: - Assert (false, ExcImpossibleInDim(1)); - return raw_hex_iterator(); - case 3: - { - Assert (leveln_levels(), ExcInvalidLevel(level)); - - if (tria->n_raw_hexs(level) == 0) - return end_hex(); - - return raw_hex_iterator (tria, - level, - 0, - this); - } - - default: - Assert (false, ExcNotImplemented()); - return raw_hex_iterator(); - } + typename Triangulation::raw_hex_iterator ti = tria->begin_raw_hex(level); + typename DoFHandler::raw_hex_iterator ri(*ti, this); + return ri; } @@ -1300,13 +1027,8 @@ template typename DoFHandler::hex_iterator DoFHandler::begin_hex (const unsigned int level) const { - // level is checked in begin_raw - raw_hex_iterator ri = begin_raw_hex (level); - if (ri.state() != IteratorState::valid) - return ri; - while (ri->used() == false) - if ((++ri).state() != IteratorState::valid) - return ri; + typename Triangulation::hex_iterator ti = tria->begin_hex(level); + typename DoFHandler::hex_iterator ri(*ti, this); return ri; } @@ -1316,14 +1038,9 @@ template typename DoFHandler::active_hex_iterator DoFHandler::begin_active_hex (const unsigned int level) const { - // level is checked in begin_raw - hex_iterator i = begin_hex (level); - if (i.state() != IteratorState::valid) - return i; - while (i->has_children()) - if ((++i).state() != IteratorState::valid) - return i; - return i; + typename Triangulation::active_hex_iterator ti = tria->begin_active_hex(level); + typename DoFHandler::active_hex_iterator ri(*ti, this); + return ri; } @@ -1332,9 +1049,9 @@ template typename DoFHandler::raw_hex_iterator DoFHandler::end_raw_hex (const unsigned int level) const { - return (level == tria->n_levels()-1 ? - end_hex() : - begin_raw_hex (level+1)); + typename Triangulation::raw_hex_iterator ti = tria->end_raw_hex(level); + typename DoFHandler::raw_hex_iterator ri(ti.access_any(), this); + return ri; } @@ -1342,9 +1059,9 @@ template typename DoFHandler::hex_iterator DoFHandler::end_hex (const unsigned int level) const { - return (level == tria->n_levels()-1 ? - hex_iterator(end_hex()) : - begin_hex (level+1)); + typename Triangulation::hex_iterator ti = tria->end_hex(level); + typename DoFHandler::hex_iterator ri(ti.access_any(), this); + return ri; } @@ -1352,9 +1069,9 @@ template typename DoFHandler::active_hex_iterator DoFHandler::end_active_hex (const unsigned int level) const { - return (level == tria->n_levels()-1 ? - active_hex_iterator(end_hex()) : - begin_active_hex (level+1)); + typename Triangulation::active_hex_iterator ti = tria->end_active_hex(level); + typename DoFHandler::active_hex_iterator ri(ti.access_any(), this); + return ri; } @@ -1363,10 +1080,9 @@ template typename DoFHandler::raw_hex_iterator DoFHandler::end_hex () const { - return raw_hex_iterator (tria, - -1, - -1, - this); + typename Triangulation::raw_hex_iterator ti = tria->end_hex(); + typename DoFHandler::raw_hex_iterator ri(ti.access_any(), this); + return ri; } @@ -1375,27 +1091,9 @@ template typename DoFHandler::raw_hex_iterator DoFHandler::last_raw_hex (const unsigned int level) const { - switch (dim) - { - case 1: - case 2: - Assert (false, ExcImpossibleInDim(dim)); - return raw_hex_iterator(); - - case 3: - Assert (leveln_levels(), - ExcInvalidLevel(level)); - Assert (tria->n_raw_hexs(level) != 0, - ExcEmptyLevel (level)); - - return raw_hex_iterator (tria, - level, - tria->n_raw_hexs(level)-1, - this); - default: - Assert (false, ExcNotImplemented()); - return raw_hex_iterator(); - } + typename Triangulation::raw_hex_iterator ti = tria->last_raw_hex(level); + typename DoFHandler::raw_hex_iterator ri(*ti, this); + return ri; } @@ -1404,7 +1102,9 @@ template typename DoFHandler::raw_hex_iterator DoFHandler::last_raw_hex () const { - return last_raw_hex (tria->n_levels()-1); + typename Triangulation::raw_hex_iterator ti = tria->last_raw_hex(); + typename DoFHandler::raw_hex_iterator ri(*ti, this); + return ri; } @@ -1413,13 +1113,8 @@ template typename DoFHandler::hex_iterator DoFHandler::last_hex (const unsigned int level) const { - // level is checked in last_raw - raw_hex_iterator ri = last_raw_hex(level); - if (ri->used()==true) - return ri; - while ((--ri).state() == IteratorState::valid) - if (ri->used()==true) - return ri; + typename Triangulation::hex_iterator ti = tria->last_hex(level); + typename DoFHandler::hex_iterator ri(*ti, this); return ri; } @@ -1429,7 +1124,9 @@ template typename DoFHandler::hex_iterator DoFHandler::last_hex () const { - return last_hex (tria->n_levels()-1); + typename Triangulation::hex_iterator ti = tria->last_hex(); + typename DoFHandler::hex_iterator ri(*ti, this); + return ri; } @@ -1438,14 +1135,9 @@ template typename DoFHandler::active_hex_iterator DoFHandler::last_active_hex (const unsigned int level) const { - // level is checked in last_raw - hex_iterator i = last_hex(level); - if (i->has_children()==false) - return i; - while ((--i).state() == IteratorState::valid) - if (i->has_children()==false) - return i; - return i; + typename Triangulation::active_hex_iterator ti = tria->last_active_hex(level); + typename DoFHandler::active_hex_iterator ri(ti.access_any(), this); + return ri; } @@ -1454,7 +1146,9 @@ template typename DoFHandler::active_hex_iterator DoFHandler::last_active_hex () const { - return last_active_hex (tria->n_levels()-1); + typename Triangulation::active_hex_iterator ti = tria->last_active_hex(); + typename DoFHandler::active_hex_iterator ri(*ti, this); + return ri; } -- 2.39.5