template <typename number> class Vector;
template <int dim> class DoFHandler;
-template <int dim> class hpDoFHandler;
+template <int dim> class hp::DoFHandler;
template <int dim> class FiniteElement;
template <int celldim, int dim, template <int> class DH> class DoFObjectAccessor;
template <>
const FiniteElement<1> &
-DoFObjectAccessor<1,1,hpDoFHandler>::get_fe () const;
+DoFObjectAccessor<1,1,hp::DoFHandler>::get_fe () const;
template <>
const FiniteElement<2> &
-DoFObjectAccessor<1,2,hpDoFHandler>::get_fe () const;
+DoFObjectAccessor<1,2,hp::DoFHandler>::get_fe () const;
template <>
const FiniteElement<3> &
-DoFObjectAccessor<1,3,hpDoFHandler>::get_fe () const;
+DoFObjectAccessor<1,3,hp::DoFHandler>::get_fe () const;
template <>
const FiniteElement<2> &
-DoFObjectAccessor<2,2,hpDoFHandler>::get_fe () const;
+DoFObjectAccessor<2,2,hp::DoFHandler>::get_fe () const;
template <>
const FiniteElement<3> &
-DoFObjectAccessor<2,3,hpDoFHandler>::get_fe () const;
+DoFObjectAccessor<2,3,hp::DoFHandler>::get_fe () const;
template <>
const FiniteElement<3> &
-DoFObjectAccessor<3,3,hpDoFHandler>::get_fe () const;
+DoFObjectAccessor<3,3,hp::DoFHandler>::get_fe () const;
template <>
-void DoFObjectAccessor<1,1,hpDoFHandler>::set_dof_index (const unsigned int,
+void DoFObjectAccessor<1,1,hp::DoFHandler>::set_dof_index (const unsigned int,
const unsigned int) const;
template <>
-void DoFObjectAccessor<1,2,hpDoFHandler>::set_dof_index (const unsigned int,
+void DoFObjectAccessor<1,2,hp::DoFHandler>::set_dof_index (const unsigned int,
const unsigned int) const;
template <>
-void DoFObjectAccessor<1,3,hpDoFHandler>::set_dof_index (const unsigned int,
+void DoFObjectAccessor<1,3,hp::DoFHandler>::set_dof_index (const unsigned int,
const unsigned int) const;
template <>
-void DoFObjectAccessor<2,2,hpDoFHandler>::set_dof_index (const unsigned int,
+void DoFObjectAccessor<2,2,hp::DoFHandler>::set_dof_index (const unsigned int,
const unsigned int) const;
template <>
-void DoFObjectAccessor<2,3,hpDoFHandler>::set_dof_index (const unsigned int,
+void DoFObjectAccessor<2,3,hp::DoFHandler>::set_dof_index (const unsigned int,
const unsigned int) const;
template <>
-void DoFObjectAccessor<3,3,hpDoFHandler>::set_dof_index (const unsigned int,
+void DoFObjectAccessor<3,3,hp::DoFHandler>::set_dof_index (const unsigned int,
const unsigned int) const;
template <>
unsigned int
-DoFObjectAccessor<1,1,hpDoFHandler>::active_fe_index () const;
+DoFObjectAccessor<1,1,hp::DoFHandler>::active_fe_index () const;
template <>
unsigned int
-DoFObjectAccessor<1,2,hpDoFHandler>::active_fe_index () const;
+DoFObjectAccessor<1,2,hp::DoFHandler>::active_fe_index () const;
template <>
unsigned int
-DoFObjectAccessor<1,3,hpDoFHandler>::active_fe_index () const;
+DoFObjectAccessor<1,3,hp::DoFHandler>::active_fe_index () const;
template <>
unsigned int
-DoFObjectAccessor<2,2,hpDoFHandler>::active_fe_index () const;
+DoFObjectAccessor<2,2,hp::DoFHandler>::active_fe_index () const;
template <>
unsigned int
-DoFObjectAccessor<2,3,hpDoFHandler>::active_fe_index () const;
+DoFObjectAccessor<2,3,hp::DoFHandler>::active_fe_index () const;
template <>
unsigned int
-DoFObjectAccessor<3,3,hpDoFHandler>::active_fe_index () const;
+DoFObjectAccessor<3,3,hp::DoFHandler>::active_fe_index () const;
template <>
void
-DoFObjectAccessor<1,1,hpDoFHandler>::set_active_fe_index (const unsigned int i);
+DoFObjectAccessor<1,1,hp::DoFHandler>::set_active_fe_index (const unsigned int i);
template <>
void
-DoFObjectAccessor<1,2,hpDoFHandler>::set_active_fe_index (const unsigned int i);
+DoFObjectAccessor<1,2,hp::DoFHandler>::set_active_fe_index (const unsigned int i);
template <>
void
-DoFObjectAccessor<1,3,hpDoFHandler>::set_active_fe_index (const unsigned int i);
+DoFObjectAccessor<1,3,hp::DoFHandler>::set_active_fe_index (const unsigned int i);
template <>
void
-DoFObjectAccessor<2,2,hpDoFHandler>::set_active_fe_index (const unsigned int i);
+DoFObjectAccessor<2,2,hp::DoFHandler>::set_active_fe_index (const unsigned int i);
template <>
void
-DoFObjectAccessor<2,3,hpDoFHandler>::set_active_fe_index (const unsigned int i);
+DoFObjectAccessor<2,3,hp::DoFHandler>::set_active_fe_index (const unsigned int i);
template <>
void
-DoFObjectAccessor<3,3,hpDoFHandler>::set_active_fe_index (const unsigned int i);
+DoFObjectAccessor<3,3,hp::DoFHandler>::set_active_fe_index (const unsigned int i);
// include more templates
}
-/*--------------- Functions: DoFObjectAccessor<1,dim,hpDoFHandler> -----------*/
+/*--------------- Functions: DoFObjectAccessor<1,dim,hp::DoFHandler> -----------*/
template <>
inline
unsigned int
-DoFObjectAccessor<1,1,hpDoFHandler>::dof_index (const unsigned int i) const
+DoFObjectAccessor<1,1,hp::DoFHandler>::dof_index (const unsigned int i) const
{
// since the exception classes are
// from a template dependent base
// non-template dependent name and
// use that to specify the
// qualified exception names
- typedef DoFAccessor<1, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<1, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0, BaseClass::ExcInvalidObject());
// make sure a FE has been selected
template <>
inline
unsigned int
-DoFObjectAccessor<1,2,hpDoFHandler>::dof_index (const unsigned int i) const
+DoFObjectAccessor<1,2,hp::DoFHandler>::dof_index (const unsigned int i) const
{
// since the exception classes are
// from a template dependent base
// non-template dependent name and
// use that to specify the
// qualified exception names
- typedef DoFAccessor<2, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<2, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0, BaseClass::ExcInvalidObject());
// make sure a FE has been selected
template <>
inline
unsigned int
-DoFObjectAccessor<1,3,hpDoFHandler>::dof_index (const unsigned int i) const
+DoFObjectAccessor<1,3,hp::DoFHandler>::dof_index (const unsigned int i) const
{
// since the exception classes are
// from a template dependent base
// non-template dependent name and
// use that to specify the
// qualified exception names
- typedef DoFAccessor<3, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<3, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0, BaseClass::ExcInvalidObject());
// make sure a FE has been selected
template <>
inline
void
-DoFObjectAccessor<1, 1, hpDoFHandler>::set_dof_index (const unsigned int i,
+DoFObjectAccessor<1, 1, hp::DoFHandler>::set_dof_index (const unsigned int i,
const unsigned int index) const
{
- typedef DoFAccessor<1, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<1, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
void
-DoFObjectAccessor<1, 2, hpDoFHandler>::set_dof_index (const unsigned int i,
+DoFObjectAccessor<1, 2, hp::DoFHandler>::set_dof_index (const unsigned int i,
const unsigned int index) const
{
- typedef DoFAccessor<2, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<2, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
void
-DoFObjectAccessor<1, 3, hpDoFHandler>::set_dof_index (const unsigned int i,
+DoFObjectAccessor<1, 3, hp::DoFHandler>::set_dof_index (const unsigned int i,
const unsigned int index) const
{
- typedef DoFAccessor<3, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<3, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
const FiniteElement<1> &
-DoFObjectAccessor<1,1,hpDoFHandler>::get_fe () const
+DoFObjectAccessor<1,1,hp::DoFHandler>::get_fe () const
{
return dof_handler->finite_elements->get_fe(active_fe_index ());
}
template <>
inline
const FiniteElement<2> &
-DoFObjectAccessor<1,2,hpDoFHandler>::get_fe () const
+DoFObjectAccessor<1,2,hp::DoFHandler>::get_fe () const
{
return dof_handler->finite_elements->get_fe(active_fe_index ());
}
template <>
inline
const FiniteElement<3> &
-DoFObjectAccessor<1,3,hpDoFHandler>::get_fe () const
+DoFObjectAccessor<1,3,hp::DoFHandler>::get_fe () const
{
return dof_handler->finite_elements->get_fe(active_fe_index ());
}
template <>
inline
unsigned int
-DoFObjectAccessor<1,1,hpDoFHandler>::active_fe_index () const
+DoFObjectAccessor<1,1,hp::DoFHandler>::active_fe_index () const
{
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
dof_handler->levels[this->present_level]->active_fe_indices.size (),
template <>
inline
unsigned int
-DoFObjectAccessor<1,2,hpDoFHandler>::active_fe_index () const
+DoFObjectAccessor<1,2,hp::DoFHandler>::active_fe_index () const
{
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
dof_handler->levels[this->present_level]->active_fe_indices.size (),
template <>
inline
unsigned int
-DoFObjectAccessor<1,3,hpDoFHandler>::active_fe_index () const
+DoFObjectAccessor<1,3,hp::DoFHandler>::active_fe_index () const
{
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
dof_handler->levels[this->present_level]->active_fe_indices.size (),
template <>
inline
void
-DoFObjectAccessor<1,1,hpDoFHandler>::set_active_fe_index (const unsigned int i)
+DoFObjectAccessor<1,1,hp::DoFHandler>::set_active_fe_index (const unsigned int i)
{
Assert (dof_handler != 0, ExcInvalidObject());
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
template <>
inline
void
-DoFObjectAccessor<1,2,hpDoFHandler>::set_active_fe_index (const unsigned int i)
+DoFObjectAccessor<1,2,hp::DoFHandler>::set_active_fe_index (const unsigned int i)
{
Assert (dof_handler != 0, ExcInvalidObject());
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
template <>
inline
void
-DoFObjectAccessor<1,3,hpDoFHandler>::set_active_fe_index (const unsigned int i)
+DoFObjectAccessor<1,3,hp::DoFHandler>::set_active_fe_index (const unsigned int i)
{
Assert (dof_handler != 0, ExcInvalidObject());
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
}
-/*------------- Functions: DoFObjectAccessor<2,dim,hpDoFHandler> -------------*/
+/*------------- Functions: DoFObjectAccessor<2,dim,hp::DoFHandler> -------------*/
template <>
inline
-unsigned int DoFObjectAccessor<2,2,hpDoFHandler>::dof_index (const unsigned int i) const
+unsigned int DoFObjectAccessor<2,2,hp::DoFHandler>::dof_index (const unsigned int i) const
{
- typedef DoFAccessor<2, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<2, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
-unsigned int DoFObjectAccessor<2,3,hpDoFHandler>::dof_index (const unsigned int i) const
+unsigned int DoFObjectAccessor<2,3,hp::DoFHandler>::dof_index (const unsigned int i) const
{
- typedef DoFAccessor<3, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<3, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
void
-DoFObjectAccessor<2, 2, hpDoFHandler>::set_dof_index (const unsigned int i,
+DoFObjectAccessor<2, 2, hp::DoFHandler>::set_dof_index (const unsigned int i,
const unsigned int index) const
{
- typedef DoFAccessor<2, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<2, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
void
-DoFObjectAccessor<2, 3, hpDoFHandler>::set_dof_index (const unsigned int i,
+DoFObjectAccessor<2, 3, hp::DoFHandler>::set_dof_index (const unsigned int i,
const unsigned int index) const
{
- typedef DoFAccessor<3, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<3, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
const FiniteElement<2> &
-DoFObjectAccessor<2,2,hpDoFHandler>::get_fe () const
+DoFObjectAccessor<2,2,hp::DoFHandler>::get_fe () const
{
return dof_handler->finite_elements->get_fe(active_fe_index ());
}
template <>
inline
const FiniteElement<3> &
-DoFObjectAccessor<2,3,hpDoFHandler>::get_fe () const
+DoFObjectAccessor<2,3,hp::DoFHandler>::get_fe () const
{
return dof_handler->finite_elements->get_fe(active_fe_index ());
}
template <>
inline
unsigned int
-DoFObjectAccessor<2,2,hpDoFHandler>::active_fe_index () const
+DoFObjectAccessor<2,2,hp::DoFHandler>::active_fe_index () const
{
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
dof_handler->levels[this->present_level]->active_fe_indices.size (),
template <>
inline
unsigned int
-DoFObjectAccessor<2,3,hpDoFHandler>::active_fe_index () const
+DoFObjectAccessor<2,3,hp::DoFHandler>::active_fe_index () const
{
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
dof_handler->levels[this->present_level]->active_fe_indices.size (),
template <>
inline
void
-DoFObjectAccessor<2,2,hpDoFHandler>::set_active_fe_index (const unsigned int i)
+DoFObjectAccessor<2,2,hp::DoFHandler>::set_active_fe_index (const unsigned int i)
{
Assert (dof_handler != 0, ExcInvalidObject());
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
template <>
inline
void
-DoFObjectAccessor<2,3,hpDoFHandler>::set_active_fe_index (const unsigned int i)
+DoFObjectAccessor<2,3,hp::DoFHandler>::set_active_fe_index (const unsigned int i)
{
Assert (dof_handler != 0, ExcInvalidObject());
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
}
-/*------------- Functions: DoFObjectAccessor<3,dim,hpDoFHandler> -------------*/
+/*------------- Functions: DoFObjectAccessor<3,dim,hp::DoFHandler> -------------*/
template <>
inline
unsigned int
-DoFObjectAccessor<3,3,hpDoFHandler>::dof_index (const unsigned int i) const
+DoFObjectAccessor<3,3,hp::DoFHandler>::dof_index (const unsigned int i) const
{
- typedef DoFAccessor<3, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<3, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
void
-DoFObjectAccessor<3, 3, hpDoFHandler>::set_dof_index (const unsigned int i,
+DoFObjectAccessor<3, 3, hp::DoFHandler>::set_dof_index (const unsigned int i,
const unsigned int index) const
{
- typedef DoFAccessor<3, hpDoFHandler> BaseClass;
+ typedef DoFAccessor<3, hp::DoFHandler> BaseClass;
Assert (this->dof_handler != 0,
BaseClass::ExcInvalidObject());
template <>
inline
const FiniteElement<3> &
-DoFObjectAccessor<3,3,hpDoFHandler>::get_fe () const
+DoFObjectAccessor<3,3,hp::DoFHandler>::get_fe () const
{
return dof_handler->finite_elements->get_fe(active_fe_index ());
}
template <>
inline
unsigned int
-DoFObjectAccessor<3,3,hpDoFHandler>::active_fe_index () const
+DoFObjectAccessor<3,3,hp::DoFHandler>::active_fe_index () const
{
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
dof_handler->levels[this->present_level]->active_fe_indices.size (),
template <>
inline
void
-DoFObjectAccessor<3,3,hpDoFHandler>::set_active_fe_index (const unsigned int i)
+DoFObjectAccessor<3,3,hp::DoFHandler>::set_active_fe_index (const unsigned int i)
{
Assert (dof_handler != 0, ExcInvalidObject());
Assert (static_cast<std::vector<unsigned int>::size_type>(this->present_index) <
template <>
inline
-TriaIterator<1, DoFObjectAccessor<0,1,hpDoFHandler> >
-DoFCellAccessor<1,hpDoFHandler>::face (const unsigned int) const
+TriaIterator<1, DoFObjectAccessor<0,1,hp::DoFHandler> >
+DoFCellAccessor<1,hp::DoFHandler>::face (const unsigned int) const
{
Assert (false, ExcImpossibleInDim(1));
- return TriaIterator<1, DoFObjectAccessor<0,1, hpDoFHandler> >();
+ return TriaIterator<1, DoFObjectAccessor<0,1, hp::DoFHandler> >();
}
template <>
inline
-TriaIterator<2, DoFObjectAccessor<1,2,hpDoFHandler> >
-DoFCellAccessor<2,hpDoFHandler>::face (const unsigned int i) const
+TriaIterator<2, DoFObjectAccessor<1,2,hp::DoFHandler> >
+DoFCellAccessor<2,hp::DoFHandler>::face (const unsigned int i) const
{
return this->line(i);
}
template <>
inline
-TriaIterator<3, DoFObjectAccessor<2, 3, hpDoFHandler> >
-DoFCellAccessor<3,hpDoFHandler>::face (const unsigned int i) const
+TriaIterator<3, DoFObjectAccessor<2, 3, hp::DoFHandler> >
+DoFCellAccessor<3,hp::DoFHandler>::face (const unsigned int i) const
{
return this->quad(i);
}
template <int dim> class Point;
template <int dim> class FiniteElement;
template <int dim> class DoFHandler;
-template <int dim> class hpDoFHandler;
+template <int dim> class hp::DoFHandler;
template <int dim> class MGDoFHandler;
class ConstraintMatrix;
template <template <int> class GridClass, int dim> class InterGridMap;
/**
* Declaration of same function
- * for hpDoFHandler
+ * for hp::DoFHandler
*/
static void
- make_hanging_node_constraints (const hpDoFHandler<1> &dof_handler,
+ make_hanging_node_constraints (const hp::DoFHandler<1> &dof_handler,
ConstraintMatrix &constraints);
/**
* for different space dimension.
*/
static void
- make_hanging_node_constraints (const hpDoFHandler<2> &dof_handler,
+ make_hanging_node_constraints (const hp::DoFHandler<2> &dof_handler,
ConstraintMatrix &constraints);
/**
* for different space dimension.
*/
static void
- make_hanging_node_constraints (const hpDoFHandler<3> &dof_handler,
+ make_hanging_node_constraints (const hp::DoFHandler<3> &dof_handler,
ConstraintMatrix &constraints);
//@}
// $Id$
// Version: $Name$
//
-// Copyright (C) 2005 by the deal.II authors
+// Copyright (C) 2005, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include <map>
#include <set>
-template <int> class hpDoFLevel;
+
+/**
+ * A namespace that holds all the classes that have to do with hp finite
+ * elements.
+ */
+namespace hp
+{
+
+ template <int> class DoFLevel;
/**
* hp-FEM algorithms.
*
* @ingroup dofs
-*/
-template <int dim>
-class hpDoFHandler : public Subscriptor,
+ */
+ template <int dim>
+ class DoFHandler : public Subscriptor,
protected Triangulation<dim>::RefinementListener
-{
- typedef internal::DoFIteratorSelector<hpDoFHandler<dim> > IteratorSelector;
- public:
- typedef typename IteratorSelector::raw_line_iterator raw_line_iterator;
- typedef typename IteratorSelector::line_iterator line_iterator;
- typedef typename IteratorSelector::active_line_iterator active_line_iterator;
-
- typedef typename IteratorSelector::raw_quad_iterator raw_quad_iterator;
- typedef typename IteratorSelector::quad_iterator quad_iterator;
- typedef typename IteratorSelector::active_quad_iterator active_quad_iterator;
-
- typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator;
- typedef typename IteratorSelector::hex_iterator hex_iterator;
- typedef typename IteratorSelector::active_hex_iterator active_hex_iterator;
-
- typedef typename IteratorSelector::raw_cell_iterator raw_cell_iterator;
- typedef typename IteratorSelector::cell_iterator cell_iterator;
- typedef typename IteratorSelector::active_cell_iterator active_cell_iterator;
-
- typedef typename IteratorSelector::raw_face_iterator raw_face_iterator;
- typedef typename IteratorSelector::face_iterator face_iterator;
- typedef typename IteratorSelector::active_face_iterator active_face_iterator;
-
- /**
- * Alias the @p FunctionMap type
- * declared elsewhere.
- */
- typedef typename FunctionMap<dim>::type FunctionMap;
+ {
+ typedef internal::DoFIteratorSelector<DoFHandler<dim> > IteratorSelector;
+ public:
+ typedef typename IteratorSelector::raw_line_iterator raw_line_iterator;
+ typedef typename IteratorSelector::line_iterator line_iterator;
+ typedef typename IteratorSelector::active_line_iterator active_line_iterator;
+
+ typedef typename IteratorSelector::raw_quad_iterator raw_quad_iterator;
+ typedef typename IteratorSelector::quad_iterator quad_iterator;
+ typedef typename IteratorSelector::active_quad_iterator active_quad_iterator;
+
+ typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator;
+ typedef typename IteratorSelector::hex_iterator hex_iterator;
+ typedef typename IteratorSelector::active_hex_iterator active_hex_iterator;
+
+ typedef typename IteratorSelector::raw_cell_iterator raw_cell_iterator;
+ typedef typename IteratorSelector::cell_iterator cell_iterator;
+ typedef typename IteratorSelector::active_cell_iterator active_cell_iterator;
+
+ typedef typename IteratorSelector::raw_face_iterator raw_face_iterator;
+ typedef typename IteratorSelector::face_iterator face_iterator;
+ typedef typename IteratorSelector::active_face_iterator active_face_iterator;
+
+ /**
+ * Alias the @p FunctionMap type
+ * declared elsewhere.
+ */
+ typedef typename FunctionMap<dim>::type FunctionMap;
- /**
- * Make the dimension available
- * in function templates.
- */
- static const unsigned int dimension = dim;
+ /**
+ * Make the dimension available
+ * in function templates.
+ */
+ static const unsigned int dimension = dim;
- /**
- * When the arrays holding the
- * DoF indices are set up, but
- * before they are filled with
- * actual values, they are set to
- * an invalid value, in order to
- * monitor possible
- * problems. This invalid value
- * is the constant defined here.
- *
- * Please note that you should
- * not rely on it having a
- * certain value, but rather take
- * its symbolic name.
- */
- static const unsigned int invalid_dof_index = static_cast<unsigned int>(-1);
+ /**
+ * When the arrays holding the
+ * DoF indices are set up, but
+ * before they are filled with
+ * actual values, they are set to
+ * an invalid value, in order to
+ * monitor possible
+ * problems. This invalid value
+ * is the constant defined here.
+ *
+ * Please note that you should
+ * not rely on it having a
+ * certain value, but rather take
+ * its symbolic name.
+ */
+ static const unsigned int invalid_dof_index = static_cast<unsigned int>(-1);
- /**
- * Constructor. Take @p tria as the
- * triangulation to work on.
- */
- hpDoFHandler (const Triangulation<dim> &tria);
+ /**
+ * Constructor. Take @p tria as the
+ * triangulation to work on.
+ */
+ DoFHandler (const Triangulation<dim> &tria);
- /**
- * Destructor.
- */
- virtual ~hpDoFHandler ();
+ /**
+ * Destructor.
+ */
+ virtual ~DoFHandler ();
- /**
- * Go through the triangulation and
- * distribute the degrees of freedoms
- * needed for the given finite element
- * according to the given distribution
- * method.
- *
- * A pointer of the transferred
- * finite element is
- * stored. Therefore, the
- * lifetime of the finite element
- * object shall be longer than
- * that of this object. If you
- * don't want this behaviour, you
- * may want to call the @p clear
- * member function which also
- * releases the lock of this
- * object to the finite element.
- */
- virtual void distribute_dofs (const FECollection<dim> &fe);
-
- /**
- * Clear all data of this object and
- * especially delete the lock this object
- * has to the finite element used the last
- * time when @p distribute_dofs was called.
- */
- virtual void clear ();
+ /**
+ * Go through the triangulation and
+ * distribute the degrees of freedoms
+ * needed for the given finite element
+ * according to the given distribution
+ * method.
+ *
+ * A pointer of the transferred
+ * finite element is
+ * stored. Therefore, the
+ * lifetime of the finite element
+ * object shall be longer than
+ * that of this object. If you
+ * don't want this behaviour, you
+ * may want to call the @p clear
+ * member function which also
+ * releases the lock of this
+ * object to the finite element.
+ */
+ virtual void distribute_dofs (const FECollection<dim> &fe);
+
+ /**
+ * Clear all data of this object and
+ * especially delete the lock this object
+ * has to the finite element used the last
+ * time when @p distribute_dofs was called.
+ */
+ virtual void clear ();
- /**
- * Actually do the renumbering based on
- * a list of new dof numbers for all the
- * dofs.
- *
- * @p new_numbers is an array of integers
- * with size equal to the number of dofs
- * on the present grid. It stores the new
- * indices after renumbering in the
- * order of the old indices.
- *
- * This function is called by the
- * @p renumber_dofs function after computing
- * the ordering of the degrees of freedom.
- * However, you can call this function
- * yourself, which is necessary if a user
- * wants to implement an ordering scheme
- * herself, for example downwind numbering.
- */
- void renumber_dofs (const std::vector<unsigned int> &new_numbers);
-
- /**
- * Return the maximum number of
- * degrees of freedom a degree of freedom
- * in the given triangulation with the
- * given finite element may couple with.
- * This is the maximum number of entries
- * per line in the system matrix; this
- * information can therefore be used upon
- * construction of the SparsityPattern
- * object.
- *
- * The returned number is not really the
- * maximum number but an estimate based
- * on the finite element and the maximum
- * number of cells meeting at a vertex.
- * The number holds for the constrained
- * matrix also.
- *
- * The determination of the number of
- * couplings can be done by simple
- * picture drawing. An example can be
- * found in the implementation of this
- * function.
- */
- unsigned int max_couplings_between_dofs () const;
-
- /**
- * Return the number of degrees of freedom
- * located on the boundary another dof on
- * the boundary can couple with.
- *
- * The number is the same as for
- * @p max_coupling_between_dofs in one
- * dimension less.
- */
- unsigned int max_couplings_between_boundary_dofs () const;
-
- /**
- * @name Cell iterator functions
- */
- /*@{*/
- /**
- * Iterator to the first cell, used
- * 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;
-
- /**
- * Iterator to the first used cell
- * on level @p level.
- *
- * This function calls @p begin_line
- * in 1D and @p begin_quad in 2D.
- */
- cell_iterator begin (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first active
- * cell on level @p level.
- *
- * This function calls @p begin_active_line
- * in 1D and @p begin_active_quad in 2D.
- */
- active_cell_iterator begin_active(const unsigned int level = 0) const;
-
- /**
- * Iterator past the end; this
- * iterator serves for comparisons of
- * iterators with past-the-end or
- * before-the-beginning states.
- *
- * This function calls @p end_line
- * in 1D and @p end_quad in 2D.
- */
- raw_cell_iterator end () const;
-
- /**
- * Return an iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- cell_iterator end (const unsigned int level) const;
+ /**
+ * Actually do the renumbering based on
+ * a list of new dof numbers for all the
+ * dofs.
+ *
+ * @p new_numbers is an array of integers
+ * with size equal to the number of dofs
+ * on the present grid. It stores the new
+ * indices after renumbering in the
+ * order of the old indices.
+ *
+ * This function is called by the
+ * @p renumber_dofs function after computing
+ * the ordering of the degrees of freedom.
+ * However, you can call this function
+ * yourself, which is necessary if a user
+ * wants to implement an ordering scheme
+ * herself, for example downwind numbering.
+ */
+ void renumber_dofs (const std::vector<unsigned int> &new_numbers);
+
+ /**
+ * Return the maximum number of
+ * degrees of freedom a degree of freedom
+ * in the given triangulation with the
+ * given finite element may couple with.
+ * This is the maximum number of entries
+ * per line in the system matrix; this
+ * information can therefore be used upon
+ * construction of the SparsityPattern
+ * object.
+ *
+ * The returned number is not really the
+ * maximum number but an estimate based
+ * on the finite element and the maximum
+ * number of cells meeting at a vertex.
+ * The number holds for the constrained
+ * matrix also.
+ *
+ * The determination of the number of
+ * couplings can be done by simple
+ * picture drawing. An example can be
+ * found in the implementation of this
+ * function.
+ */
+ unsigned int max_couplings_between_dofs () const;
+
+ /**
+ * Return the number of degrees of freedom
+ * located on the boundary another dof on
+ * the boundary can couple with.
+ *
+ * The number is the same as for
+ * @p max_coupling_between_dofs in one
+ * dimension less.
+ */
+ unsigned int max_couplings_between_boundary_dofs () const;
+
+ /**
+ * @name Cell iterator functions
+ */
+ /*@{*/
+ /**
+ * Iterator to the first cell, used
+ * 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;
+
+ /**
+ * Iterator to the first used cell
+ * on level @p level.
+ *
+ * This function calls @p begin_line
+ * in 1D and @p begin_quad in 2D.
+ */
+ cell_iterator begin (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first active
+ * cell on level @p level.
+ *
+ * This function calls @p begin_active_line
+ * in 1D and @p begin_active_quad in 2D.
+ */
+ active_cell_iterator begin_active(const unsigned int level = 0) const;
+
+ /**
+ * Iterator past the end; this
+ * iterator serves for comparisons of
+ * iterators with past-the-end or
+ * before-the-beginning states.
+ *
+ * This function calls @p end_line
+ * in 1D and @p end_quad in 2D.
+ */
+ raw_cell_iterator end () const;
+
+ /**
+ * Return an iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ cell_iterator end (const unsigned int level) const;
- /**
- * Return a raw iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- raw_cell_iterator end_raw (const unsigned int level) const;
-
- /**
- * Return an active iterator which is the
- * first iterator not on level. If @p level
- * is the last level, then this returns
- * <tt>end()</tt>.
- */
- active_cell_iterator end_active (const unsigned int level) const;
-
- /**
- * 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;
-
- /**
- * 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;
-
- /**
- * Return an iterator pointing to the last
- * used cell.
- *
- * This function calls @p last_line
- * in 1D and @p last_quad in 2D.
- */
- cell_iterator last () const;
-
- /**
- * Return an iterator pointing to the last
- * used cell on level @p level.
- *
- * This function calls @p last_line
- * in 1D and @p last_quad in 2D.
- */
- cell_iterator last (const unsigned int level) const;
-
- /**
- * Return an iterator pointing to the last
- * active cell.
- *
- * This function calls @p last_active_line
- * in 1D and @p last_active_quad in 2D.
- */
- active_cell_iterator last_active () const;
-
- /**
- * Return an iterator pointing to the last
- * active cell on level @p level.
- *
- * This function calls @p last_active_line
- * in 1D and @p last_active_quad in 2D.
- */
- active_cell_iterator last_active (const unsigned int level) const;
- //@}
-
- /*---------------------------------------*/
-
- /**
- * @name Face iterator functions
- */
- /*@{*/
- /**
- * Iterator to the first face, used
- * 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 unsigned int level = 0) const;
-
- /**
- * Iterator to the first used face
- * on level @p level.
- *
- * This function calls @p begin_line
- * in 2D and @p begin_quad in 3D.
- */
- face_iterator begin_face (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first active
- * face on level @p level.
- *
- * This function calls @p begin_active_line
- * in 2D and @p begin_active_quad in 3D.
- */
- active_face_iterator begin_active_face(const unsigned int level = 0) const;
-
- /**
- * Iterator past the end; this
- * iterator serves for comparisons of
- * iterators with past-the-end or
- * before-the-beginning states.
- *
- * This function calls @p end_line
- * in 2D and @p end_quad in 3D.
- */
- raw_face_iterator end_face () const;
-
- /**
- * Return an iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- face_iterator end_face (const unsigned int level) const;
+ /**
+ * Return a raw iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ raw_cell_iterator end_raw (const unsigned int level) const;
+
+ /**
+ * Return an active iterator which is the
+ * first iterator not on level. If @p level
+ * is the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ active_cell_iterator end_active (const unsigned int level) const;
+
+ /**
+ * 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;
+
+ /**
+ * 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;
+
+ /**
+ * Return an iterator pointing to the last
+ * used cell.
+ *
+ * This function calls @p last_line
+ * in 1D and @p last_quad in 2D.
+ */
+ cell_iterator last () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * used cell on level @p level.
+ *
+ * This function calls @p last_line
+ * in 1D and @p last_quad in 2D.
+ */
+ cell_iterator last (const unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active cell.
+ *
+ * This function calls @p last_active_line
+ * in 1D and @p last_active_quad in 2D.
+ */
+ active_cell_iterator last_active () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active cell on level @p level.
+ *
+ * This function calls @p last_active_line
+ * in 1D and @p last_active_quad in 2D.
+ */
+ active_cell_iterator last_active (const unsigned int level) const;
+ //@}
+
+ /*---------------------------------------*/
+
+ /**
+ * @name Face iterator functions
+ */
+ /*@{*/
+ /**
+ * Iterator to the first face, used
+ * 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 unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first used face
+ * on level @p level.
+ *
+ * This function calls @p begin_line
+ * in 2D and @p begin_quad in 3D.
+ */
+ face_iterator begin_face (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first active
+ * face on level @p level.
+ *
+ * This function calls @p begin_active_line
+ * in 2D and @p begin_active_quad in 3D.
+ */
+ active_face_iterator begin_active_face(const unsigned int level = 0) const;
+
+ /**
+ * Iterator past the end; this
+ * iterator serves for comparisons of
+ * iterators with past-the-end or
+ * before-the-beginning states.
+ *
+ * This function calls @p end_line
+ * in 2D and @p end_quad in 3D.
+ */
+ raw_face_iterator end_face () const;
+
+ /**
+ * Return an iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ face_iterator end_face (const unsigned int level) const;
- /**
- * Return a raw iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- raw_face_iterator end_raw_face (const unsigned int level) const;
-
- /**
- * Return an active iterator which is the
- * first iterator not on level. If @p level
- * is the last level, then this returns
- * <tt>end()</tt>.
- */
- active_face_iterator end_active_face (const unsigned int level) const;
-
- /**
- * 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;
-
- /**
- * Return an iterator pointing to the last
- * face of the level @p level, 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 unsigned int level) const;
-
- /**
- * Return an iterator pointing to the last
- * used face.
- *
- * This function calls @p last_line
- * in 2D and @p last_quad in 3D.
- */
- face_iterator last_face () const;
-
- /**
- * Return an iterator pointing to the last
- * used face on level @p level.
- *
- * This function calls @p last_line
- * in 2D and @p last_quad in 3D.
- */
- face_iterator last_face (const unsigned int level) const;
-
- /**
- * Return an iterator pointing to the last
- * active face.
- *
- * This function calls @p last_active_line
- * in 2D and @p last_active_quad in 3D.
- */
- active_face_iterator last_active_face () const;
-
- /**
- * Return an iterator pointing to the last
- * active face on level @p level.
- *
- * This function calls @p last_active_line
- * in 2D and @p last_active_quad in 3D.
- */
- active_face_iterator last_active_face (const unsigned int level) const;
- //@}
-
-
- /*---------------------------------------*/
-
- /**
- * @name Line iterator functions
- */
- /*@{*/
- /**
- * Iterator to the first line, used
- * or not, on level @p level. If a level
- * has no lines, a past-the-end iterator
- * is returned.
- */
- raw_line_iterator begin_raw_line (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first used line
- * on level @p level.
- */
- line_iterator begin_line (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first active
- * line on level @p level.
- */
- active_line_iterator begin_active_line(const unsigned int level = 0) const;
-
- /**
- * Iterator past the end; this
- * iterator serves for comparisons of
- * iterators with past-the-end or
- * before-the-beginning states.
- */
- raw_line_iterator end_line () const;
-
- /**
- * Return an iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- line_iterator end_line (const unsigned int level) const;
+ /**
+ * Return a raw iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ raw_face_iterator end_raw_face (const unsigned int level) const;
+
+ /**
+ * Return an active iterator which is the
+ * first iterator not on level. If @p level
+ * is the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ active_face_iterator end_active_face (const unsigned int level) const;
+
+ /**
+ * 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;
+
+ /**
+ * Return an iterator pointing to the last
+ * face of the level @p level, 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 unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the last
+ * used face.
+ *
+ * This function calls @p last_line
+ * in 2D and @p last_quad in 3D.
+ */
+ face_iterator last_face () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * used face on level @p level.
+ *
+ * This function calls @p last_line
+ * in 2D and @p last_quad in 3D.
+ */
+ face_iterator last_face (const unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active face.
+ *
+ * This function calls @p last_active_line
+ * in 2D and @p last_active_quad in 3D.
+ */
+ active_face_iterator last_active_face () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active face on level @p level.
+ *
+ * This function calls @p last_active_line
+ * in 2D and @p last_active_quad in 3D.
+ */
+ active_face_iterator last_active_face (const unsigned int level) const;
+ //@}
+
+
+ /*---------------------------------------*/
+
+ /**
+ * @name Line iterator functions
+ */
+ /*@{*/
+ /**
+ * Iterator to the first line, used
+ * or not, on level @p level. If a level
+ * has no lines, a past-the-end iterator
+ * is returned.
+ */
+ raw_line_iterator begin_raw_line (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first used line
+ * on level @p level.
+ */
+ line_iterator begin_line (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first active
+ * line on level @p level.
+ */
+ active_line_iterator begin_active_line(const unsigned int level = 0) const;
+
+ /**
+ * Iterator past the end; this
+ * iterator serves for comparisons of
+ * iterators with past-the-end or
+ * before-the-beginning states.
+ */
+ raw_line_iterator end_line () const;
+
+ /**
+ * Return an iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ line_iterator end_line (const unsigned int level) const;
- /**
- * Return a raw iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- raw_line_iterator end_raw_line (const unsigned int level) const;
-
- /**
- * Return an active iterator which is the
- * first iterator not on level. If @p level
- * is the last level, then this returns
- * <tt>end()</tt>.
- */
- active_line_iterator end_active_line (const unsigned int level) const;
-
-
- /**
- * Return an iterator pointing to the
- * last line, used or not.
- */
- raw_line_iterator last_raw_line () const;
-
- /**
- * 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;
-
- /**
- * Return an iterator pointing to the last
- * used line.
- */
- line_iterator last_line () const;
-
- /**
- * Return an iterator pointing to the last
- * used line on level @p level.
- */
- line_iterator last_line (const unsigned int level) const;
-
- /**
- * Return an iterator pointing to the last
- * active line.
- */
- active_line_iterator last_active_line () const;
-
- /**
- * Return an iterator pointing to the last
- * active line on level @p level.
- */
- active_line_iterator last_active_line (const unsigned int level) const;
- /*@}*/
-
- /*---------------------------------------*/
-
- /**
- * @name Quad iterator functions*/
- /*@{
- */
- /**
- * Iterator to the first quad, used
- * or not, on level @p level. If a level
- * has no quads, a past-the-end iterator
- * is returned.
- */
- raw_quad_iterator begin_raw_quad (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first used quad
- * on level @p level.
- */
- quad_iterator begin_quad (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first active
- * quad on level @p level.
- */
- active_quad_iterator begin_active_quad(const unsigned int level = 0) const;
-
- /**
- * Iterator past the end; this
- * iterator serves for comparisons of
- * iterators with past-the-end or
- * before-the-beginning states.
- */
- raw_quad_iterator end_quad () const;
-
- /**
- * Return an iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- quad_iterator end_quad (const unsigned int level) const;
+ /**
+ * Return a raw iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ raw_line_iterator end_raw_line (const unsigned int level) const;
+
+ /**
+ * Return an active iterator which is the
+ * first iterator not on level. If @p level
+ * is the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ active_line_iterator end_active_line (const unsigned int level) const;
+
+
+ /**
+ * Return an iterator pointing to the
+ * last line, used or not.
+ */
+ raw_line_iterator last_raw_line () const;
+
+ /**
+ * 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;
+
+ /**
+ * Return an iterator pointing to the last
+ * used line.
+ */
+ line_iterator last_line () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * used line on level @p level.
+ */
+ line_iterator last_line (const unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active line.
+ */
+ active_line_iterator last_active_line () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active line on level @p level.
+ */
+ active_line_iterator last_active_line (const unsigned int level) const;
+ /*@}*/
+
+ /*---------------------------------------*/
+
+ /**
+ * @name Quad iterator functions*/
+ /*@{
+ */
+ /**
+ * Iterator to the first quad, used
+ * or not, on level @p level. If a level
+ * has no quads, a past-the-end iterator
+ * is returned.
+ */
+ raw_quad_iterator begin_raw_quad (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first used quad
+ * on level @p level.
+ */
+ quad_iterator begin_quad (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first active
+ * quad on level @p level.
+ */
+ active_quad_iterator begin_active_quad(const unsigned int level = 0) const;
+
+ /**
+ * Iterator past the end; this
+ * iterator serves for comparisons of
+ * iterators with past-the-end or
+ * before-the-beginning states.
+ */
+ raw_quad_iterator end_quad () const;
+
+ /**
+ * Return an iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ quad_iterator end_quad (const unsigned int level) const;
- /**
- * Return a raw iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- raw_quad_iterator end_raw_quad (const unsigned int level) const;
-
- /**
- * Return an active iterator which is the
- * first iterator not on level. If @p level
- * is the last level, then this returns
- * <tt>end()</tt>.
- */
- active_quad_iterator end_active_quad (const unsigned int level) const;
-
-
- /**
- * Return an iterator pointing to the
- * last quad, used or not.
- */
- raw_quad_iterator last_raw_quad () const;
-
- /**
- * 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;
-
- /**
- * Return an iterator pointing to the last
- * used quad.
- */
- quad_iterator last_quad () const;
-
- /**
- * Return an iterator pointing to the last
- * used quad on level @p level.
- */
- quad_iterator last_quad (const unsigned int level) const;
-
- /**
- * Return an iterator pointing to the last
- * active quad.
- */
- active_quad_iterator last_active_quad () const;
-
- /**
- * Return an iterator pointing to the last
- * active quad on level @p level.
- */
- active_quad_iterator last_active_quad (const unsigned int level) const;
- /*@}*/
-
- /*---------------------------------------*/
-
- /**
- * @name Hex iterator functions*/
- /*@{
- */
- /**
- * 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;
-
- /**
- * Iterator to the first used hex
- * on level @p level.
- */
- hex_iterator
- begin_hex (const unsigned int level = 0) const;
-
- /**
- * Iterator to the first active
- * hex on level @p level.
- */
- active_hex_iterator
- begin_active_hex(const unsigned int level = 0) const;
-
- /**
- * Iterator past the end; this
- * iterator serves for comparisons of
- * iterators with past-the-end or
- * before-the-beginning states.
- */
- raw_hex_iterator
- end_hex () const;
-
- /**
- * Return an iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- hex_iterator end_hex (const unsigned int level) const;
+ /**
+ * Return a raw iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ raw_quad_iterator end_raw_quad (const unsigned int level) const;
+
+ /**
+ * Return an active iterator which is the
+ * first iterator not on level. If @p level
+ * is the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ active_quad_iterator end_active_quad (const unsigned int level) const;
+
+
+ /**
+ * Return an iterator pointing to the
+ * last quad, used or not.
+ */
+ raw_quad_iterator last_raw_quad () const;
+
+ /**
+ * 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;
+
+ /**
+ * Return an iterator pointing to the last
+ * used quad.
+ */
+ quad_iterator last_quad () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * used quad on level @p level.
+ */
+ quad_iterator last_quad (const unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active quad.
+ */
+ active_quad_iterator last_active_quad () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active quad on level @p level.
+ */
+ active_quad_iterator last_active_quad (const unsigned int level) const;
+ /*@}*/
+
+ /*---------------------------------------*/
+
+ /**
+ * @name Hex iterator functions*/
+ /*@{
+ */
+ /**
+ * 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;
+
+ /**
+ * Iterator to the first used hex
+ * on level @p level.
+ */
+ hex_iterator
+ begin_hex (const unsigned int level = 0) const;
+
+ /**
+ * Iterator to the first active
+ * hex on level @p level.
+ */
+ active_hex_iterator
+ begin_active_hex(const unsigned int level = 0) const;
+
+ /**
+ * Iterator past the end; this
+ * iterator serves for comparisons of
+ * iterators with past-the-end or
+ * before-the-beginning states.
+ */
+ raw_hex_iterator
+ end_hex () const;
+
+ /**
+ * Return an iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ hex_iterator end_hex (const unsigned int level) const;
- /**
- * Return a raw iterator which is the first
- * iterator not on level. If @p level is
- * the last level, then this returns
- * <tt>end()</tt>.
- */
- raw_hex_iterator end_raw_hex (const unsigned int level) const;
-
- /**
- * Return an active iterator which is the
- * first iterator not on level. If @p level
- * is the last level, then this returns
- * <tt>end()</tt>.
- */
- active_hex_iterator end_active_hex (const unsigned int level) const;
-
- /**
- * Return an iterator pointing to the
- * last hex, used or not.
- */
- raw_hex_iterator
- last_raw_hex () const;
-
- /**
- * 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;
-
- /**
- * Return an iterator pointing to the last
- * used hex.
- */
- hex_iterator
- last_hex () const;
-
- /**
- * Return an iterator pointing to the last
- * used hex on level @p level.
- */
- hex_iterator
- last_hex (const unsigned int level) const;
-
- /**
- * Return an iterator pointing to the last
- * active hex.
- */
- active_hex_iterator
- last_active_hex () const;
-
- /**
- * Return an iterator pointing to the last
- * active hex on level @p level.
- */
- active_hex_iterator
- last_active_hex (const unsigned int level) const;
- /*@}*/
-
- /*---------------------------------------*/
-
-
- /**
- * Return number of degrees of freedom.
- * Included in this number are those
- * DoFs which are constrained by
- * hanging nodes.
- */
- unsigned int n_dofs () const;
-
- /**
- * Return the number of degrees of freedom
- * located on the boundary.
- */
- unsigned int n_boundary_dofs () const;
-
- /**
- * Return the number of degrees
- * of freedom located on those
- * parts of the boundary which
- * have a boundary indicator
- * listed in the given set. The
- * reason that a @p map rather
- * than a @p set is used is the
- * same as descibed in the
- * section on the
- * @p make_boundary_sparsity_pattern
- * function.
- */
- unsigned int
- n_boundary_dofs (const FunctionMap &boundary_indicators) const;
-
- /**
- * Same function, but with
- * different data type of the
- * argument, which is here simply
- * a list of the boundary
- * indicators under
- * consideration.
- */
- unsigned int
- n_boundary_dofs (const std::set<unsigned char> &boundary_indicators) const;
-
- /**
- * Return a constant reference to
- * the set of finite element
- * objects that are used by this
- * @p hpDoFHandler.
- */
- const FECollection<dim> & get_fe () const;
-
- /**
- * Return a constant reference to the
- * triangulation underlying this object.
- */
- const Triangulation<dim> & get_tria () const;
+ /**
+ * Return a raw iterator which is the first
+ * iterator not on level. If @p level is
+ * the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ raw_hex_iterator end_raw_hex (const unsigned int level) const;
+
+ /**
+ * Return an active iterator which is the
+ * first iterator not on level. If @p level
+ * is the last level, then this returns
+ * <tt>end()</tt>.
+ */
+ active_hex_iterator end_active_hex (const unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the
+ * last hex, used or not.
+ */
+ raw_hex_iterator
+ last_raw_hex () const;
+
+ /**
+ * 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;
+
+ /**
+ * Return an iterator pointing to the last
+ * used hex.
+ */
+ hex_iterator
+ last_hex () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * used hex on level @p level.
+ */
+ hex_iterator
+ last_hex (const unsigned int level) const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active hex.
+ */
+ active_hex_iterator
+ last_active_hex () const;
+
+ /**
+ * Return an iterator pointing to the last
+ * active hex on level @p level.
+ */
+ active_hex_iterator
+ last_active_hex (const unsigned int level) const;
+ /*@}*/
+
+ /*---------------------------------------*/
+
+
+ /**
+ * Return number of degrees of freedom.
+ * Included in this number are those
+ * DoFs which are constrained by
+ * hanging nodes.
+ */
+ unsigned int n_dofs () const;
+
+ /**
+ * Return the number of degrees of freedom
+ * located on the boundary.
+ */
+ unsigned int n_boundary_dofs () const;
+
+ /**
+ * Return the number of degrees
+ * of freedom located on those
+ * parts of the boundary which
+ * have a boundary indicator
+ * listed in the given set. The
+ * reason that a @p map rather
+ * than a @p set is used is the
+ * same as descibed in the
+ * section on the
+ * @p make_boundary_sparsity_pattern
+ * function.
+ */
+ unsigned int
+ n_boundary_dofs (const FunctionMap &boundary_indicators) const;
+
+ /**
+ * Same function, but with
+ * different data type of the
+ * argument, which is here simply
+ * a list of the boundary
+ * indicators under
+ * consideration.
+ */
+ unsigned int
+ n_boundary_dofs (const std::set<unsigned char> &boundary_indicators) const;
+
+ /**
+ * Return a constant reference to
+ * the set of finite element
+ * objects that are used by this
+ * @p DoFHandler.
+ */
+ const FECollection<dim> & get_fe () const;
+
+ /**
+ * Return a constant reference to the
+ * triangulation underlying this object.
+ */
+ const Triangulation<dim> & get_tria () const;
- /**
- * Determine an estimate for the
- * memory consumption (in bytes)
- * of this object.
- *
- * This function is made virtual,
- * since a dof handler object
- * might be accessed through a
- * pointers to thisr base class,
- * although the actual object
- * might be a derived class.
- */
- virtual unsigned int memory_consumption () const;
-
- /**
- * Exception
- */
- DeclException0 (ExcInvalidTriangulation);
- /**
- * Exception
- */
- DeclException0 (ExcNoFESelected);
- /**
- * Exception
- */
- DeclException0 (ExcRenumberingIncomplete);
- /**
- * Exception
- */
- DeclException0 (ExcGridsDoNotMatch);
- /**
- * Exception
- */
- DeclException0 (ExcInvalidBoundaryIndicator);
- /**
- * Exception
- */
- DeclException1 (ExcMatrixHasWrongSize,
- int,
- << "The matrix has the wrong dimension " << arg1);
- /**
- * Exception
- */
- DeclException0 (ExcFunctionNotUseful);
- /**
- * Exception
- */
- DeclException1 (ExcNewNumbersNotConsecutive,
- int,
- << "The given list of new dof indices is not consecutive: "
- << "the index " << arg1 << " does not exist.");
-
- protected:
+ /**
+ * Determine an estimate for the
+ * memory consumption (in bytes)
+ * of this object.
+ *
+ * This function is made virtual,
+ * since a dof handler object
+ * might be accessed through a
+ * pointers to thisr base class,
+ * although the actual object
+ * might be a derived class.
+ */
+ virtual unsigned int memory_consumption () const;
+
+ /**
+ * Exception
+ */
+ DeclException0 (ExcInvalidTriangulation);
+ /**
+ * Exception
+ */
+ DeclException0 (ExcNoFESelected);
+ /**
+ * Exception
+ */
+ DeclException0 (ExcRenumberingIncomplete);
+ /**
+ * Exception
+ */
+ DeclException0 (ExcGridsDoNotMatch);
+ /**
+ * Exception
+ */
+ DeclException0 (ExcInvalidBoundaryIndicator);
+ /**
+ * Exception
+ */
+ DeclException1 (ExcMatrixHasWrongSize,
+ int,
+ << "The matrix has the wrong dimension " << arg1);
+ /**
+ * Exception
+ */
+ DeclException0 (ExcFunctionNotUseful);
+ /**
+ * Exception
+ */
+ DeclException1 (ExcNewNumbersNotConsecutive,
+ int,
+ << "The given list of new dof indices is not consecutive: "
+ << "the index " << arg1 << " does not exist.");
+
+ protected:
- /**
- * Address of the triangulation to
- * work on.
- */
- SmartPointer<const Triangulation<dim> > tria;
-
- /**
- * Store a pointer to the finite
- * element set given latest for
- * the distribution of dofs. In
- * order to avoid destruction of
- * the object before the lifetime
- * of the DoF handler, we
- * subscribe to the finite
- * element object. To unlock the
- * FE before the end of the
- * lifetime of this DoF handler,
- * use the <tt>clear()</tt> function
- * (this clears all data of this
- * object as well, though).
- */
- SmartPointer<const FECollection<dim> > finite_elements;
-
- private:
-
- /**
- * Copy constructor. I can see no reason
- * why someone might want to use it, so
- * I don't provide it. Since this class
- * has pointer members, making it private
- * prevents the compiler to provide it's
- * own, incorrect one if anyone chose to
- * copy such an object.
- */
- hpDoFHandler (const hpDoFHandler &);
-
- /**
- * Copy operator. I can see no reason
- * why someone might want to use it, so
- * I don't provide it. Since this class
- * has pointer members, making it private
- * prevents the compiler to provide it's
- * own, incorrect one if anyone chose to
- * copy such an object.
- */
- hpDoFHandler & operator = (const hpDoFHandler &);
-
- /**
- * Reserve enough space in the
- * <tt>levels[]</tt> objects to store the
- * numbers of the degrees of freedom
- * needed for the given element. The
- * given element is that one which
- * was selected when calling
- * @p distribute_dofs the last time.
- */
- void reserve_space ();
-
- /**
- * Free all used memory.
- */
- void clear_space ();
+ /**
+ * Address of the triangulation to
+ * work on.
+ */
+ SmartPointer<const Triangulation<dim> > tria;
+
+ /**
+ * Store a pointer to the finite
+ * element set given latest for
+ * the distribution of dofs. In
+ * order to avoid destruction of
+ * the object before the lifetime
+ * of the DoF handler, we
+ * subscribe to the finite
+ * element object. To unlock the
+ * FE before the end of the
+ * lifetime of this DoF handler,
+ * use the <tt>clear()</tt> function
+ * (this clears all data of this
+ * object as well, though).
+ */
+ SmartPointer<const FECollection<dim> > finite_elements;
+
+ private:
+
+ /**
+ * Copy constructor. I can see no reason
+ * why someone might want to use it, so
+ * I don't provide it. Since this class
+ * has pointer members, making it private
+ * prevents the compiler to provide it's
+ * own, incorrect one if anyone chose to
+ * copy such an object.
+ */
+ DoFHandler (const DoFHandler &);
+
+ /**
+ * Copy operator. I can see no reason
+ * why someone might want to use it, so
+ * I don't provide it. Since this class
+ * has pointer members, making it private
+ * prevents the compiler to provide it's
+ * own, incorrect one if anyone chose to
+ * copy such an object.
+ */
+ DoFHandler & operator = (const DoFHandler &);
+
+ /**
+ * Reserve enough space in the
+ * <tt>levels[]</tt> objects to store the
+ * numbers of the degrees of freedom
+ * needed for the given element. The
+ * given element is that one which
+ * was selected when calling
+ * @p distribute_dofs the last time.
+ */
+ void reserve_space ();
+
+ /**
+ * Free all used memory.
+ */
+ void clear_space ();
- /**
- * Distribute dofs on the given cell,
- * with new dofs starting with index
- * @p next_free_dof. Return the next
- * unused index number. The finite
- * element used is the one given to
- * @p distribute_dofs, which is copied
- * to @p selected_fe.
- *
- * This function is excluded from the
- * @p distribute_dofs function since
- * it can not be implemented dimension
- * independent.
- */
- unsigned int distribute_dofs_on_cell (active_cell_iterator &cell,
- unsigned int next_free_dof);
-
-
- /**
- * Create default tables for the
- * active_fe_indices in the
- * hpDoFLevel()s. They are
- * initialized with the base fe.
- * This method is called before
- * refinement and before distribute_dofs
- * is called. It ensures each cell has
- * a valid active_fe_index.
- */
-
- void create_active_fe_table ();
-
- /**
- * Methods of the RefinementListener
- * coming from the Triangulation.
- * Here they are used to administrate the
- * the active_fe_fields during the spatial
- * refinement.
- */
-
- virtual void pre_refinement_notification (const Triangulation<dim> &tria);
- virtual void post_refinement_notification (const Triangulation<dim> &tria);
-
-
- /**
- * Space to store the DoF numbers for the
- * different levels. Analogous to the
- * <tt>levels[]</tt> tree of the Triangulation
- * objects.
- */
- std::vector<hpDoFLevel<dim>*> levels;
-
- /**
- * Store the number of dofs created last
- * time.
- */
- unsigned int used_dofs;
-
- /**
- * Array to store the indices for degrees
- * of freedom located at vertices.
- */
- std::vector<unsigned int> vertex_dofs;
-
- /**
- * Array to store the information, if a
- * cell on some level has children or
- * not. It is used by the refinement
- * listeners as a persistent buffer during
- * the refinement.
- */
- std::vector<std::vector<bool> *> has_children;
+ /**
+ * Distribute dofs on the given cell,
+ * with new dofs starting with index
+ * @p next_free_dof. Return the next
+ * unused index number. The finite
+ * element used is the one given to
+ * @p distribute_dofs, which is copied
+ * to @p selected_fe.
+ *
+ * This function is excluded from the
+ * @p distribute_dofs function since
+ * it can not be implemented dimension
+ * independent.
+ */
+ unsigned int distribute_dofs_on_cell (active_cell_iterator &cell,
+ unsigned int next_free_dof);
+
+
+ /**
+ * Create default tables for the
+ * active_fe_indices in the
+ * hp::DoFLevels. They are
+ * initialized with the base fe.
+ * This method is called before
+ * refinement and before distribute_dofs
+ * is called. It ensures each cell has
+ * a valid active_fe_index.
+ */
+
+ void create_active_fe_table ();
+
+ /**
+ * Methods of the RefinementListener
+ * coming from the Triangulation.
+ * Here they are used to administrate the
+ * the active_fe_fields during the spatial
+ * refinement.
+ */
+
+ virtual void pre_refinement_notification (const Triangulation<dim> &tria);
+ virtual void post_refinement_notification (const Triangulation<dim> &tria);
+
+
+ /**
+ * Space to store the DoF numbers for the
+ * different levels. Analogous to the
+ * <tt>levels[]</tt> tree of the Triangulation
+ * objects.
+ */
+ std::vector<hp::DoFLevel<dim>*> levels;
+
+ /**
+ * Store the number of dofs created last
+ * time.
+ */
+ unsigned int used_dofs;
+
+ /**
+ * Array to store the indices for degrees
+ * of freedom located at vertices.
+ */
+ std::vector<unsigned int> vertex_dofs;
+
+ /**
+ * Array to store the information, if a
+ * cell on some level has children or
+ * not. It is used by the refinement
+ * listeners as a persistent buffer during
+ * the refinement.
+ */
+ std::vector<std::vector<bool> *> has_children;
- /**
- * Make accessor objects friends.
- */
- template <int dim1, template <int> class DH> friend class DoFAccessor;
-
- /**
- * Make accessor objects friends.
- */
- template <int dim1, int dim2, template <int> class DH> friend class DoFObjectAccessor;
-
- /**
- * Make Triangulation friend.
- */
+ /**
+ * Make accessor objects friends.
+ */
+ template <int dim1, template <int> class DH> friend class DoFAccessor;
+
+ /**
+ * Make accessor objects friends.
+ */
+ template <int dim1, int dim2, template <int> class DH> friend class DoFObjectAccessor;
+
+ /**
+ * Make Triangulation friend.
+ */
// friend class Triangulation<dim>;
-};
+ };
#ifndef DOXYGEN
-template <> unsigned int hpDoFHandler<1>::n_boundary_dofs () const;
-template <> unsigned int hpDoFHandler<1>::n_boundary_dofs (const FunctionMap &) const;
-template <> unsigned int hpDoFHandler<1>::n_boundary_dofs (const std::set<unsigned char> &) const;
-template <> unsigned int hpDoFHandler<1>::max_couplings_between_dofs () const;
-template <> unsigned int hpDoFHandler<1>::max_couplings_between_boundary_dofs () const;
-template <> unsigned int hpDoFHandler<2>::max_couplings_between_dofs () const;
-template <> unsigned int hpDoFHandler<2>::max_couplings_between_boundary_dofs () const;
-template <> unsigned int hpDoFHandler<3>::max_couplings_between_dofs () const;
-template <> unsigned int hpDoFHandler<3>::max_couplings_between_boundary_dofs () const;
-
-template <> hpDoFHandler<1>::raw_cell_iterator hpDoFHandler<1>::begin_raw (const unsigned int level) const;
-template <> hpDoFHandler<1>::cell_iterator hpDoFHandler<1>::begin (const unsigned int level) const;
-template <> hpDoFHandler<1>::active_cell_iterator hpDoFHandler<1>::begin_active (const unsigned int level) const;
-template <> hpDoFHandler<1>::raw_cell_iterator hpDoFHandler<1>::end () const;
-template <> hpDoFHandler<1>::raw_cell_iterator hpDoFHandler<1>::last_raw () const;
-template <> hpDoFHandler<1>::raw_cell_iterator hpDoFHandler<1>::last_raw (const unsigned int level) const;
-template <> hpDoFHandler<1>::cell_iterator hpDoFHandler<1>::last () const;
-template <> hpDoFHandler<1>::cell_iterator hpDoFHandler<1>::last (const unsigned int level) const;
-template <> hpDoFHandler<1>::active_cell_iterator hpDoFHandler<1>::last_active () const;
-template <> hpDoFHandler<1>::active_cell_iterator hpDoFHandler<1>::last_active (const unsigned int level) const;
-template <> hpDoFHandler<1>::raw_face_iterator hpDoFHandler<1>::begin_raw_face (const unsigned int) const;
-template <> hpDoFHandler<1>::face_iterator hpDoFHandler<1>::begin_face (const unsigned int) const;
-template <> hpDoFHandler<1>::active_face_iterator hpDoFHandler<1>::begin_active_face (const unsigned int) const;
-template <> hpDoFHandler<1>::raw_face_iterator hpDoFHandler<1>::end_face () const;
-template <> hpDoFHandler<1>::raw_face_iterator hpDoFHandler<1>::last_raw_face () const;
-template <> hpDoFHandler<1>::raw_face_iterator hpDoFHandler<1>::last_raw_face (const unsigned int) const;
-template <> hpDoFHandler<1>::face_iterator hpDoFHandler<1>::last_face () const;
-template <> hpDoFHandler<1>::face_iterator hpDoFHandler<1>::last_face (const unsigned int) const;
-template <> hpDoFHandler<1>::active_face_iterator hpDoFHandler<1>::last_active_face () const;
-template <> hpDoFHandler<1>::active_face_iterator hpDoFHandler<1>::last_active_face (const unsigned int) const;
-template <> hpDoFHandler<1>::raw_quad_iterator hpDoFHandler<1>::begin_raw_quad (const unsigned int) const;
-template <> hpDoFHandler<1>::quad_iterator hpDoFHandler<1>::begin_quad (const unsigned int) const;
-template <> hpDoFHandler<1>::active_quad_iterator hpDoFHandler<1>::begin_active_quad (const unsigned int) const;
-template <> hpDoFHandler<1>::raw_quad_iterator hpDoFHandler<1>::end_quad () const;
-template <> hpDoFHandler<1>::raw_quad_iterator hpDoFHandler<1>::last_raw_quad (const unsigned int) const;
-template <> hpDoFHandler<1>::quad_iterator hpDoFHandler<1>::last_quad (const unsigned int) const;
-template <> hpDoFHandler<1>::active_quad_iterator hpDoFHandler<1>::last_active_quad (const unsigned int) const;
-template <> hpDoFHandler<1>::raw_quad_iterator hpDoFHandler<1>::last_raw_quad () const;
-template <> hpDoFHandler<1>::quad_iterator hpDoFHandler<1>::last_quad () const;
-template <> hpDoFHandler<1>::active_quad_iterator hpDoFHandler<1>::last_active_quad () const;
-template <> hpDoFHandler<1>::raw_hex_iterator hpDoFHandler<1>::begin_raw_hex (const unsigned int) const;
-template <> hpDoFHandler<1>::hex_iterator hpDoFHandler<1>::begin_hex (const unsigned int) const;
-template <> hpDoFHandler<1>::active_hex_iterator hpDoFHandler<1>::begin_active_hex (const unsigned int) const;
-template <> hpDoFHandler<1>::raw_hex_iterator hpDoFHandler<1>::end_hex () const;
-template <> hpDoFHandler<1>::raw_hex_iterator hpDoFHandler<1>::last_raw_hex (const unsigned int) const;
-template <> hpDoFHandler<1>::raw_hex_iterator hpDoFHandler<1>::last_raw_hex () const;
-template <> hpDoFHandler<1>::hex_iterator hpDoFHandler<1>::last_hex (const unsigned int) const;
-template <> hpDoFHandler<1>::hex_iterator hpDoFHandler<1>::last_hex () const;
-template <> hpDoFHandler<1>::active_hex_iterator hpDoFHandler<1>::last_active_hex (const unsigned int) const;
-template <> hpDoFHandler<1>::active_hex_iterator hpDoFHandler<1>::last_active_hex () const;
-template <> hpDoFHandler<2>::raw_cell_iterator hpDoFHandler<2>::begin_raw (const unsigned int level) const;
-template <> hpDoFHandler<2>::cell_iterator hpDoFHandler<2>::begin (const unsigned int level) const;
-template <> hpDoFHandler<2>::active_cell_iterator hpDoFHandler<2>::begin_active (const unsigned int level) const;
-template <> hpDoFHandler<2>::raw_cell_iterator hpDoFHandler<2>::end () const;
-template <> hpDoFHandler<2>::raw_cell_iterator hpDoFHandler<2>::last_raw () const;
-template <> hpDoFHandler<2>::raw_cell_iterator hpDoFHandler<2>::last_raw (const unsigned int level) const;
-template <> hpDoFHandler<2>::cell_iterator hpDoFHandler<2>::last () const;
-template <> hpDoFHandler<2>::cell_iterator hpDoFHandler<2>::last (const unsigned int level) const;
-template <> hpDoFHandler<2>::active_cell_iterator hpDoFHandler<2>::last_active () const;
-template <> hpDoFHandler<2>::active_cell_iterator hpDoFHandler<2>::last_active (const unsigned int level) const;
-template <> hpDoFHandler<2>::raw_face_iterator hpDoFHandler<2>::begin_raw_face (const unsigned int level) const;
-template <> hpDoFHandler<2>::face_iterator hpDoFHandler<2>::begin_face (const unsigned int level) const;
-template <> hpDoFHandler<2>::active_face_iterator hpDoFHandler<2>::begin_active_face (const unsigned int level) const;
-template <> hpDoFHandler<2>::raw_face_iterator hpDoFHandler<2>::end_face () const;
-template <> hpDoFHandler<2>::raw_face_iterator hpDoFHandler<2>::last_raw_face () const;
-template <> hpDoFHandler<2>::raw_face_iterator hpDoFHandler<2>::last_raw_face (const unsigned int level) const;
-template <> hpDoFHandler<2>::face_iterator hpDoFHandler<2>::last_face () const;
-template <> hpDoFHandler<2>::face_iterator hpDoFHandler<2>::last_face (const unsigned int level) const;
-template <> hpDoFHandler<2>::active_face_iterator hpDoFHandler<2>::last_active_face () const;
-template <> hpDoFHandler<2>::active_face_iterator hpDoFHandler<2>::last_active_face (const unsigned int level) const;
-template <> hpDoFHandler<2>::raw_hex_iterator hpDoFHandler<2>::begin_raw_hex (const unsigned int) const;
-template <> hpDoFHandler<2>::hex_iterator hpDoFHandler<2>::begin_hex (const unsigned int) const;
-template <> hpDoFHandler<2>::active_hex_iterator hpDoFHandler<2>::begin_active_hex (const unsigned int) const;
-template <> hpDoFHandler<2>::raw_hex_iterator hpDoFHandler<2>::end_hex () const;
-template <> hpDoFHandler<2>::raw_hex_iterator hpDoFHandler<2>::last_raw_hex (const unsigned int) const;
-template <> hpDoFHandler<2>::raw_hex_iterator hpDoFHandler<2>::last_raw_hex () const;
-template <> hpDoFHandler<2>::hex_iterator hpDoFHandler<2>::last_hex (const unsigned int) const;
-template <> hpDoFHandler<2>::hex_iterator hpDoFHandler<2>::last_hex () const;
-template <> hpDoFHandler<2>::active_hex_iterator hpDoFHandler<2>::last_active_hex (const unsigned int) const;
-template <> hpDoFHandler<2>::active_hex_iterator hpDoFHandler<2>::last_active_hex () const;
-template <> hpDoFHandler<3>::raw_cell_iterator hpDoFHandler<3>::begin_raw (const unsigned int level) const;
-template <> hpDoFHandler<3>::cell_iterator hpDoFHandler<3>::begin (const unsigned int level) const;
-template <> hpDoFHandler<3>::active_cell_iterator hpDoFHandler<3>::begin_active (const unsigned int level) const;
-template <> hpDoFHandler<3>::raw_cell_iterator hpDoFHandler<3>::end () const;
-template <> hpDoFHandler<3>::raw_cell_iterator hpDoFHandler<3>::last_raw () const;
-template <> hpDoFHandler<3>::raw_cell_iterator hpDoFHandler<3>::last_raw (const unsigned int level) const;
-template <> hpDoFHandler<3>::cell_iterator hpDoFHandler<3>::last () const;
-template <> hpDoFHandler<3>::cell_iterator hpDoFHandler<3>::last (const unsigned int level) const;
-template <> hpDoFHandler<3>::active_cell_iterator hpDoFHandler<3>::last_active () const;
-template <> hpDoFHandler<3>::active_cell_iterator hpDoFHandler<3>::last_active (const unsigned int level) const;
-template <> hpDoFHandler<3>::raw_face_iterator hpDoFHandler<3>::begin_raw_face (const unsigned int level) const;
-template <> hpDoFHandler<3>::face_iterator hpDoFHandler<3>::begin_face (const unsigned int level) const;
-template <> hpDoFHandler<3>::active_face_iterator hpDoFHandler<3>::begin_active_face (const unsigned int level) const;
-template <> hpDoFHandler<3>::raw_face_iterator hpDoFHandler<3>::end_face () const;
-template <> hpDoFHandler<3>::raw_face_iterator hpDoFHandler<3>::last_raw_face () const;
-template <> hpDoFHandler<3>::raw_face_iterator hpDoFHandler<3>::last_raw_face (const unsigned int level) const;
-template <> hpDoFHandler<3>::face_iterator hpDoFHandler<3>::last_face () const;
-template <> hpDoFHandler<3>::face_iterator hpDoFHandler<3>::last_face (const unsigned int level) const;
-template <> hpDoFHandler<3>::active_face_iterator hpDoFHandler<3>::last_active_face () const;
-template <> hpDoFHandler<3>::active_face_iterator hpDoFHandler<3>::last_active_face (const unsigned int level) const;
-
-template <>
-unsigned int hpDoFHandler<1>::distribute_dofs_on_cell (active_cell_iterator &cell,
- unsigned int next_free_dof);
-template <>
-unsigned int hpDoFHandler<2>::distribute_dofs_on_cell (active_cell_iterator &cell,
- unsigned int next_free_dof);
-template <>
-unsigned int hpDoFHandler<3>::distribute_dofs_on_cell (active_cell_iterator &cell,
- unsigned int next_free_dof);
-template <> void hpDoFHandler<1>::renumber_dofs (const std::vector<unsigned int> &new_numbers);
-template <> void hpDoFHandler<2>::renumber_dofs (const std::vector<unsigned int> &new_numbers);
-template <> void hpDoFHandler<3>::renumber_dofs (const std::vector<unsigned int> &new_numbers);
-template <> void hpDoFHandler<1>::reserve_space ();
-template <> void hpDoFHandler<2>::reserve_space ();
-template <> void hpDoFHandler<3>::reserve_space ();
+ template <> unsigned int DoFHandler<1>::n_boundary_dofs () const;
+ template <> unsigned int DoFHandler<1>::n_boundary_dofs (const FunctionMap &) const;
+ template <> unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<unsigned char> &) const;
+ template <> unsigned int DoFHandler<1>::max_couplings_between_dofs () const;
+ template <> unsigned int DoFHandler<1>::max_couplings_between_boundary_dofs () const;
+ template <> unsigned int DoFHandler<2>::max_couplings_between_dofs () const;
+ template <> unsigned int DoFHandler<2>::max_couplings_between_boundary_dofs () const;
+ template <> unsigned int DoFHandler<3>::max_couplings_between_dofs () const;
+ template <> unsigned int DoFHandler<3>::max_couplings_between_boundary_dofs () const;
+
+ template <> DoFHandler<1>::raw_cell_iterator DoFHandler<1>::begin_raw (const unsigned int level) const;
+ template <> DoFHandler<1>::cell_iterator DoFHandler<1>::begin (const unsigned int level) const;
+ template <> DoFHandler<1>::active_cell_iterator DoFHandler<1>::begin_active (const unsigned int level) const;
+ template <> DoFHandler<1>::raw_cell_iterator DoFHandler<1>::end () const;
+ template <> DoFHandler<1>::raw_cell_iterator DoFHandler<1>::last_raw () const;
+ template <> DoFHandler<1>::raw_cell_iterator DoFHandler<1>::last_raw (const unsigned int level) const;
+ template <> DoFHandler<1>::cell_iterator DoFHandler<1>::last () const;
+ template <> DoFHandler<1>::cell_iterator DoFHandler<1>::last (const unsigned int level) const;
+ template <> DoFHandler<1>::active_cell_iterator DoFHandler<1>::last_active () const;
+ template <> DoFHandler<1>::active_cell_iterator DoFHandler<1>::last_active (const unsigned int level) const;
+ template <> DoFHandler<1>::raw_face_iterator DoFHandler<1>::begin_raw_face (const unsigned int) const;
+ template <> DoFHandler<1>::face_iterator DoFHandler<1>::begin_face (const unsigned int) const;
+ template <> DoFHandler<1>::active_face_iterator DoFHandler<1>::begin_active_face (const unsigned int) const;
+ template <> DoFHandler<1>::raw_face_iterator DoFHandler<1>::end_face () const;
+ template <> DoFHandler<1>::raw_face_iterator DoFHandler<1>::last_raw_face () const;
+ template <> DoFHandler<1>::raw_face_iterator DoFHandler<1>::last_raw_face (const unsigned int) const;
+ template <> DoFHandler<1>::face_iterator DoFHandler<1>::last_face () const;
+ template <> DoFHandler<1>::face_iterator DoFHandler<1>::last_face (const unsigned int) const;
+ template <> DoFHandler<1>::active_face_iterator DoFHandler<1>::last_active_face () const;
+ template <> DoFHandler<1>::active_face_iterator DoFHandler<1>::last_active_face (const unsigned int) const;
+ template <> DoFHandler<1>::raw_quad_iterator DoFHandler<1>::begin_raw_quad (const unsigned int) const;
+ template <> DoFHandler<1>::quad_iterator DoFHandler<1>::begin_quad (const unsigned int) const;
+ template <> DoFHandler<1>::active_quad_iterator DoFHandler<1>::begin_active_quad (const unsigned int) const;
+ template <> DoFHandler<1>::raw_quad_iterator DoFHandler<1>::end_quad () const;
+ template <> DoFHandler<1>::raw_quad_iterator DoFHandler<1>::last_raw_quad (const unsigned int) const;
+ template <> DoFHandler<1>::quad_iterator DoFHandler<1>::last_quad (const unsigned int) const;
+ template <> DoFHandler<1>::active_quad_iterator DoFHandler<1>::last_active_quad (const unsigned int) const;
+ template <> DoFHandler<1>::raw_quad_iterator DoFHandler<1>::last_raw_quad () const;
+ template <> DoFHandler<1>::quad_iterator DoFHandler<1>::last_quad () const;
+ template <> DoFHandler<1>::active_quad_iterator DoFHandler<1>::last_active_quad () const;
+ template <> DoFHandler<1>::raw_hex_iterator DoFHandler<1>::begin_raw_hex (const unsigned int) const;
+ template <> DoFHandler<1>::hex_iterator DoFHandler<1>::begin_hex (const unsigned int) const;
+ template <> DoFHandler<1>::active_hex_iterator DoFHandler<1>::begin_active_hex (const unsigned int) const;
+ template <> DoFHandler<1>::raw_hex_iterator DoFHandler<1>::end_hex () const;
+ template <> DoFHandler<1>::raw_hex_iterator DoFHandler<1>::last_raw_hex (const unsigned int) const;
+ template <> DoFHandler<1>::raw_hex_iterator DoFHandler<1>::last_raw_hex () const;
+ template <> DoFHandler<1>::hex_iterator DoFHandler<1>::last_hex (const unsigned int) const;
+ template <> DoFHandler<1>::hex_iterator DoFHandler<1>::last_hex () const;
+ template <> DoFHandler<1>::active_hex_iterator DoFHandler<1>::last_active_hex (const unsigned int) const;
+ template <> DoFHandler<1>::active_hex_iterator DoFHandler<1>::last_active_hex () const;
+ template <> DoFHandler<2>::raw_cell_iterator DoFHandler<2>::begin_raw (const unsigned int level) const;
+ template <> DoFHandler<2>::cell_iterator DoFHandler<2>::begin (const unsigned int level) const;
+ template <> DoFHandler<2>::active_cell_iterator DoFHandler<2>::begin_active (const unsigned int level) const;
+ template <> DoFHandler<2>::raw_cell_iterator DoFHandler<2>::end () const;
+ template <> DoFHandler<2>::raw_cell_iterator DoFHandler<2>::last_raw () const;
+ template <> DoFHandler<2>::raw_cell_iterator DoFHandler<2>::last_raw (const unsigned int level) const;
+ template <> DoFHandler<2>::cell_iterator DoFHandler<2>::last () const;
+ template <> DoFHandler<2>::cell_iterator DoFHandler<2>::last (const unsigned int level) const;
+ template <> DoFHandler<2>::active_cell_iterator DoFHandler<2>::last_active () const;
+ template <> DoFHandler<2>::active_cell_iterator DoFHandler<2>::last_active (const unsigned int level) const;
+ template <> DoFHandler<2>::raw_face_iterator DoFHandler<2>::begin_raw_face (const unsigned int level) const;
+ template <> DoFHandler<2>::face_iterator DoFHandler<2>::begin_face (const unsigned int level) const;
+ template <> DoFHandler<2>::active_face_iterator DoFHandler<2>::begin_active_face (const unsigned int level) const;
+ template <> DoFHandler<2>::raw_face_iterator DoFHandler<2>::end_face () const;
+ template <> DoFHandler<2>::raw_face_iterator DoFHandler<2>::last_raw_face () const;
+ template <> DoFHandler<2>::raw_face_iterator DoFHandler<2>::last_raw_face (const unsigned int level) const;
+ template <> DoFHandler<2>::face_iterator DoFHandler<2>::last_face () const;
+ template <> DoFHandler<2>::face_iterator DoFHandler<2>::last_face (const unsigned int level) const;
+ template <> DoFHandler<2>::active_face_iterator DoFHandler<2>::last_active_face () const;
+ template <> DoFHandler<2>::active_face_iterator DoFHandler<2>::last_active_face (const unsigned int level) const;
+ template <> DoFHandler<2>::raw_hex_iterator DoFHandler<2>::begin_raw_hex (const unsigned int) const;
+ template <> DoFHandler<2>::hex_iterator DoFHandler<2>::begin_hex (const unsigned int) const;
+ template <> DoFHandler<2>::active_hex_iterator DoFHandler<2>::begin_active_hex (const unsigned int) const;
+ template <> DoFHandler<2>::raw_hex_iterator DoFHandler<2>::end_hex () const;
+ template <> DoFHandler<2>::raw_hex_iterator DoFHandler<2>::last_raw_hex (const unsigned int) const;
+ template <> DoFHandler<2>::raw_hex_iterator DoFHandler<2>::last_raw_hex () const;
+ template <> DoFHandler<2>::hex_iterator DoFHandler<2>::last_hex (const unsigned int) const;
+ template <> DoFHandler<2>::hex_iterator DoFHandler<2>::last_hex () const;
+ template <> DoFHandler<2>::active_hex_iterator DoFHandler<2>::last_active_hex (const unsigned int) const;
+ template <> DoFHandler<2>::active_hex_iterator DoFHandler<2>::last_active_hex () const;
+ template <> DoFHandler<3>::raw_cell_iterator DoFHandler<3>::begin_raw (const unsigned int level) const;
+ template <> DoFHandler<3>::cell_iterator DoFHandler<3>::begin (const unsigned int level) const;
+ template <> DoFHandler<3>::active_cell_iterator DoFHandler<3>::begin_active (const unsigned int level) const;
+ template <> DoFHandler<3>::raw_cell_iterator DoFHandler<3>::end () const;
+ template <> DoFHandler<3>::raw_cell_iterator DoFHandler<3>::last_raw () const;
+ template <> DoFHandler<3>::raw_cell_iterator DoFHandler<3>::last_raw (const unsigned int level) const;
+ template <> DoFHandler<3>::cell_iterator DoFHandler<3>::last () const;
+ template <> DoFHandler<3>::cell_iterator DoFHandler<3>::last (const unsigned int level) const;
+ template <> DoFHandler<3>::active_cell_iterator DoFHandler<3>::last_active () const;
+ template <> DoFHandler<3>::active_cell_iterator DoFHandler<3>::last_active (const unsigned int level) const;
+ template <> DoFHandler<3>::raw_face_iterator DoFHandler<3>::begin_raw_face (const unsigned int level) const;
+ template <> DoFHandler<3>::face_iterator DoFHandler<3>::begin_face (const unsigned int level) const;
+ template <> DoFHandler<3>::active_face_iterator DoFHandler<3>::begin_active_face (const unsigned int level) const;
+ template <> DoFHandler<3>::raw_face_iterator DoFHandler<3>::end_face () const;
+ template <> DoFHandler<3>::raw_face_iterator DoFHandler<3>::last_raw_face () const;
+ template <> DoFHandler<3>::raw_face_iterator DoFHandler<3>::last_raw_face (const unsigned int level) const;
+ template <> DoFHandler<3>::face_iterator DoFHandler<3>::last_face () const;
+ template <> DoFHandler<3>::face_iterator DoFHandler<3>::last_face (const unsigned int level) const;
+ template <> DoFHandler<3>::active_face_iterator DoFHandler<3>::last_active_face () const;
+ template <> DoFHandler<3>::active_face_iterator DoFHandler<3>::last_active_face (const unsigned int level) const;
+
+ template <>
+ unsigned int DoFHandler<1>::distribute_dofs_on_cell (active_cell_iterator &cell,
+ unsigned int next_free_dof);
+ template <>
+ unsigned int DoFHandler<2>::distribute_dofs_on_cell (active_cell_iterator &cell,
+ unsigned int next_free_dof);
+ template <>
+ unsigned int DoFHandler<3>::distribute_dofs_on_cell (active_cell_iterator &cell,
+ unsigned int next_free_dof);
+ template <> void DoFHandler<1>::renumber_dofs (const std::vector<unsigned int> &new_numbers);
+ template <> void DoFHandler<2>::renumber_dofs (const std::vector<unsigned int> &new_numbers);
+ template <> void DoFHandler<3>::renumber_dofs (const std::vector<unsigned int> &new_numbers);
+ template <> void DoFHandler<1>::reserve_space ();
+ template <> void DoFHandler<2>::reserve_space ();
+ template <> void DoFHandler<3>::reserve_space ();
/* ----------------------- Inline functions ---------------------------------- */
-template <int dim>
-inline
-unsigned int
-hpDoFHandler<dim>::n_dofs () const
-{
- return used_dofs;
-}
-
-
-
-template <int dim>
-inline
-const FECollection<dim> &
-hpDoFHandler<dim>::get_fe () const
-{
- return *finite_elements;
-}
-
-
-template <int dim>
-inline
-const Triangulation<dim> &
-hpDoFHandler<dim>::get_tria () const
-{
- return *tria;
+ template <int dim>
+ inline
+ unsigned int
+ DoFHandler<dim>::n_dofs () const
+ {
+ return used_dofs;
+ }
+
+
+
+ template <int dim>
+ inline
+ const FECollection<dim> &
+ DoFHandler<dim>::get_fe () const
+ {
+ return *finite_elements;
+ }
+
+
+ template <int dim>
+ inline
+ const Triangulation<dim> &
+ DoFHandler<dim>::get_tria () const
+ {
+ return *tria;
+ }
+
}
#endif
+
#include <vector>
+namespace hp
+{
+
/**
* Store the indices of the degrees of freedom which are located on
* objects of dimension @p N. Declare this general template
*
* @author Wolfgang Bangerth, 1998, Oliver Kayser-Herold 2003.
*/
-template <int N>
-class hpDoFLevel
-{
- private:
+ template <int N>
+ class DoFLevel
+ {
+ private:
/**
* Make the constructor private
* to avoid that someone uses
* this class.
*/
- hpDoFLevel ();
-};
+ DoFLevel ();
+ };
/**
* Store all information which belongs to one level of the multilevel
* hierarchy.
*
- * In @ref{hpDoFLevel<0>} all data is stored which is not dependent on the
+ * In @ref{DoFLevel<0>} all data is stored which is not dependent on the
* dimension, e.g. a field to store the index referring to the FECollection
* class. The data therefore corresponds to cells, rather than vertices,
* lines, quads, etc.
*/
-template <>
-class hpDoFLevel<0>
-{
- public:
- /**
- * Indices specifying the finite element
- * of FECollection to use for the
- * different cells. The meaning
- * what a cell is, is dimension specific,
- * therefore also the length of this
- * vector depends on the dimension: in
- * one dimension, the length of this
- * vector equals the length of the
- * @p lines vector, in two dimensions
- * that of the @p quads vector, etc.
- */
-
- std::vector<unsigned int> active_fe_indices;
-};
+ template <>
+ class DoFLevel<0>
+ {
+ public:
+ /**
+ * Indices specifying the finite element
+ * of FECollection to use for the
+ * different cells. The meaning
+ * what a cell is, is dimension specific,
+ * therefore also the length of this
+ * vector depends on the dimension: in
+ * one dimension, the length of this
+ * vector equals the length of the
+ * @p lines vector, in two dimensions
+ * that of the @p quads vector, etc.
+ */
+
+ std::vector<unsigned int> active_fe_indices;
+ };
/**
* Store the indices of the degrees of freedom which are located on
* the lines.
*
- * @sect3{Information for all hpDoFLevel() classes}
+ * @sect3{Information for all DoFLevel() classes}
*
- * The hpDoFLevel()<tt><N></tt> classes
+ * The DoFLevel()<tt><N></tt> classes
* store the global indices of the degrees of freedom for each cell on a
* certain level. The index or number of a degree of freedom is the zero-based
* index of the according value in the solution vector and the row and column
* The storage format of the degrees of freedom indices (short: DoF
* indices) is somewhat like a mirror of the data structures of the
* triangulation classes. There is a hierarchy of
- * hpDoFLevel()<tt><dim></tt> classes for the different dimensions which
+ * DoFLevel()<tt><dim></tt> classes for the different dimensions which
* have objects named @p line_dofs, @p quad_dofs and so on, in which
* the indices of DoFs located on lines and quads, respectively, are
* stored. The indices are stored levelwise.
*
* @author Wolfgang Bangerth, 1998, Oliver Kayser-Herold 2003.
*/
-template <>
-class hpDoFLevel<1> : public hpDoFLevel<0>
-{
- public:
+ template <>
+ class DoFLevel<1> : public DoFLevel<0>
+ {
+ public:
/**
* Store the start index for
* the degrees of freedom of each
* line in the @p line_dofs array.
*/
- std::vector<unsigned int> dof_line_index_offset;
+ std::vector<unsigned int> dof_line_index_offset;
/**
* Store the global indices of
* the degrees of freedom. See
- * hpDoFLevel() for detailed
+ * DoFLevel() for detailed
* information.
*/
- std::vector<unsigned int> line_dofs;
+ std::vector<unsigned int> line_dofs;
/**
* Determine an estimate for the
* memory consumption (in bytes)
* of this object.
*/
- unsigned int memory_consumption () const;
-};
+ unsigned int memory_consumption () const;
+ };
/**
* Store the indices of the degrees of freedom which are located on
- * quads. See @ref{hpDoFLevel<1>} for more information.
+ * quads. See @ref{DoFLevel<1>} for more information.
*
* @author Wolfgang Bangerth, 1998, Oliver Kayser-Herold 2003.
*/
-template <>
-class hpDoFLevel<2> : public hpDoFLevel<1>
-{
- public:
+ template <>
+ class DoFLevel<2> : public DoFLevel<1>
+ {
+ public:
/**
* Store the start index for
* the degrees of freedom of each
* quad in the @p quad_dofs array.
*/
- std::vector<unsigned int> dof_quad_index_offset;
+ std::vector<unsigned int> dof_quad_index_offset;
/**
* Store the global indices of
* the degrees of freedom. See
- * hpDoFLevel() for detailed
+ * DoFLevel() for detailed
* information.
*/
- std::vector<unsigned int> quad_dofs;
+ std::vector<unsigned int> quad_dofs;
/**
* Determine an estimate for the
* memory consumption (in bytes)
* of this object.
*/
- unsigned int memory_consumption () const;
-};
+ unsigned int memory_consumption () const;
+ };
/**
* Store the indices of the degrees of freedom which are located on
- * hexhedra. See @ref{hpDoFLevel<1>} for more information.
+ * hexhedra. See @ref{DoFLevel<1>} for more information.
*
* @author Wolfgang Bangerth, 1998, Oliver Kayser-Herold 2003.
*/
-template <>
-class hpDoFLevel<3> : public hpDoFLevel<2>
-{
- public:
+ template <>
+ class DoFLevel<3> : public DoFLevel<2>
+ {
+ public:
/**
* Store the start index for
* the degrees of freedom of each
* hex in the @p hex_dofs array.
*/
- std::vector<unsigned int> dof_hex_index_offset;
+ std::vector<unsigned int> dof_hex_index_offset;
/**
* Store the global indices of
* the degrees of freedom. See
- * hpDoFLevel() for detailed
+ * DoFLevel() for detailed
* information.
*/
- std::vector<unsigned int> hex_dofs;
+ std::vector<unsigned int> hex_dofs;
/**
* Determine an estimate for the
* memory consumption (in bytes)
* of this object.
*/
- unsigned int memory_consumption () const;
-};
-
+ unsigned int memory_consumption () const;
+ };
+
+} // namespace hp
#endif
/**
* This class acts as a collection of finite element objects used in the
- * hpDoFHandler(). It is thus to a hpDoFHandler() what a
+ * hp::DoFHandler(). It is thus to a hp::DoFHandler() what a
* FiniteElement is to a DoFHandler. This collection stores copies
* of the original elements added to it, and is therefore handling its memory
* manegement itself.
template <int dim> class Quadrature;
template <int dim> class FiniteElement;
template <int dim> class DoFHandler;
-template <int dim> class hpDoFHandler;
+template <int dim> class hp::DoFHandler;
template <int dim> class FiniteElementData;
class ConstraintMatrix;
* Same as last function, except
* that one or both of the dof
* handler objects might be of
- * type @p hpDoFHandler.
+ * type @p hp::DoFHandler.
*/
template <int dim,
template <int> class DH1,
* Same as last function, except
* that the dof handler objects
* might be of type
- * @p hpDoFHandler.
+ * @p hp::DoFHandler.
*/
template <int dim,
template <int> class DH,
* Reinitialize the gradients,
* Jacobi determinants, etc for
* the given cell of type
- * "iterator into a hpDoFHandler
+ * "iterator into a hp::DoFHandler
* object", and the finite
* element associated with this
* object. It is assumed that the
* used by this @p FEValues
* object.
*/
- void reinit (const typename hpDoFHandler<dim>::cell_iterator &cell);
+ void reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell);
/**
* Reinitialize the gradients,
* Reinitialize the gradients,
* Jacobi determinants, etc for
* the given cell of type
- * "iterator into a hpDoFHandler
+ * "iterator into a hp::DoFHandler
* object", and the finite
* element associated with this
* object. It is assumed that the
* used by this FEValues
* object.
*/
- void reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+ void reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no);
/**
* Reinitialize the gradients,
* Jacobi determinants, etc for
* the given cell of type
- * "iterator into a hpDoFHandler
+ * "iterator into a hp::DoFHandler
* object", and the finite
* element associated with this
* object. It is assumed that the
* used by this FEValues
* object.
*/
- void reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+ void reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no,
const unsigned int subface_no);
// $Id$
// Version: $Name$
//
-// Copyright (C) 2003, 2004 by the deal.II authors
+// Copyright (C) 2003, 2004, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
template <int dim> class FiniteElement;
-namespace internal
+namespace hp
{
+
+ namespace internal
+ {
/**
* Map between finite element objects and @p FEValues (the second
* template parameter, which might be <tt>FEValues<dim></tt>,
* use this to hold an <tt>FE*Values</tt> object for each finite element
* that is used in the triangulation that it integrates on.
*/
- template <int dim, class FEValues>
- class FEValuesMap
- {
- public:
- /**
- * Make destructor virtual,
- * since we have virtual
- * functions in this class.
- */
- virtual ~FEValuesMap ();
+ template <int dim, class FEValues>
+ class FEValuesMap
+ {
+ public:
+ /**
+ * Make destructor virtual,
+ * since we have virtual
+ * functions in this class.
+ */
+ virtual ~FEValuesMap ();
- /**
- * Return a reference to the
- * @p FEValues object selected
- * by the last call to
- * @p select_fe_values. The
- * returned value is a constant
- * reference since the only
- * non-const function in the
- * underlying class would be
- * @p reinit, which you must
- * not call directly any way;
- * rather, use the @p reinit
- * function of the
- * <tt>hpFE*Values</tt> class.
- */
- const FEValues & get_present_fe_values () const;
-
- protected:
- /**
- * Create an object of type
- * @p FEValues for this
- * particular finite
- * element. Since the type of
- * @p FEValues is not known
- * here, we have to leave this
- * to derived classes.
- */
- virtual
- FEValues * create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const = 0;
+ /**
+ * Return a reference to the
+ * @p FEValues object selected
+ * by the last call to
+ * @p select_fe_values. The
+ * returned value is a constant
+ * reference since the only
+ * non-const function in the
+ * underlying class would be
+ * @p reinit, which you must
+ * not call directly any way;
+ * rather, use the @p reinit
+ * function of the
+ * <tt>hpFE*Values</tt> class.
+ */
+ const FEValues & get_present_fe_values () const;
+
+ protected:
+ /**
+ * Create an object of type
+ * @p FEValues for this
+ * particular finite
+ * element. Since the type of
+ * @p FEValues is not known
+ * here, we have to leave this
+ * to derived classes.
+ */
+ virtual
+ FEValues *
+ create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const = 0;
- /**
- * Select the @p FEValues
- * object corresponding to the
- * finite element object given
- * as argument. If there is no
- * such @p FEValues object
- * yet, then one is created by
- * calling @p create_fe_values
- * with this finite element
- * object.
- *
- * A non-const reference to
- * this object is returned.
- */
- FEValues &
- select_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index);
-
-
- /**
- * This field remembers the
- * @p{active_fe_index} of the
- * cell, which was used for
- * the last call to @p{reinit}.
- */
- unsigned int present_fe_index;
-
- private:
- /**
- * Have a map from pointers to
- * finite elements to objects
- * of type @p FEValues.
- *
- * Note that the shared pointer
- * will make sure that the
- * memory previously allocated
- * is released when the
- * destructor of this class is
- * run.
- */
- std::map<std::pair<SmartPointer<const FiniteElement<dim> >, unsigned int>,
- boost::shared_ptr<FEValues> > fe_to_fe_values_map;
-
- /**
- * Pointer to the @p FEValues
- * object that is used for the
- * present cell. This always
- * points to one of the objects
- * in the map above, and to
- * which one is determined by
- * the last call to
- * @p select_fe_values.
- */
- boost::shared_ptr<FEValues> present_fe_values;
-
- };
+ /**
+ * Select the @p FEValues
+ * object corresponding to the
+ * finite element object given
+ * as argument. If there is no
+ * such @p FEValues object
+ * yet, then one is created by
+ * calling @p create_fe_values
+ * with this finite element
+ * object.
+ *
+ * A non-const reference to
+ * this object is returned.
+ */
+ FEValues &
+ select_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index);
+
+
+ /**
+ * This field remembers the
+ * @p{active_fe_index} of the
+ * cell, which was used for
+ * the last call to @p{reinit}.
+ */
+ unsigned int present_fe_index;
+
+ private:
+ /**
+ * Have a map from pointers to
+ * finite elements to objects
+ * of type @p FEValues.
+ *
+ * Note that the shared pointer
+ * will make sure that the
+ * memory previously allocated
+ * is released when the
+ * destructor of this class is
+ * run.
+ */
+ std::map<std::pair<SmartPointer<const FiniteElement<dim> >, unsigned int>,
+ boost::shared_ptr<FEValues> > fe_to_fe_values_map;
+
+ /**
+ * Pointer to the @p FEValues
+ * object that is used for the
+ * present cell. This always
+ * points to one of the objects
+ * in the map above, and to
+ * which one is determined by
+ * the last call to
+ * @p select_fe_values.
+ */
+ boost::shared_ptr<FEValues> present_fe_values;
+
+ };
/**
- * Base class for the <tt>hpFE*Values</tt> classes, storing the data that
+ * Base class for the <tt>hp::FE*Values</tt> classes, storing the data that
* is common to them. The first template parameter denotes the space
* dimension we are in, the second the dimensionality of the object
- * that we integrate on, i.e. for usual @p hpFEValues it is equal to
+ * that we integrate on, i.e. for usual @p hp::FEValues it is equal to
* the first one, while for face integration it is one less.
*
* @author Wolfgang Bangerth, 2003
*/
- template <int dim, int q_dim>
- class hpFEValuesBase
- {
- private:
- /**
- * Default mapping, in case
- * none was provided through
- * the call to the constructor.
- */
- static const MappingQ1<dim> default_mapping;
-
- public:
- /**
- * Constructor. Set the fields
- * of this class to the values
- * indicated by the parameters
- * to the constructor.
- */
- hpFEValuesBase (const MappingCollection<dim> &mapping_collection,
+ template <int dim, int q_dim>
+ class FEValuesBase
+ {
+ private:
+ /**
+ * Default mapping, in case
+ * none was provided through
+ * the call to the constructor.
+ */
+ static const MappingQ1<dim> default_mapping;
+
+ public:
+ /**
+ * Constructor. Set the fields
+ * of this class to the values
+ * indicated by the parameters
+ * to the constructor.
+ */
+ FEValuesBase (const MappingCollection<dim> &mapping_collection,
const QCollection<q_dim> &qcollection,
const UpdateFlags update_flags);
- /**
- * Constructor. Set the fields
- * of this class to the values
- * indicated by the parameters
- * to the constructor, and
- * choose a @p MappingQ1
- * object for the mapping
- * object.
- */
- hpFEValuesBase (const QCollection<q_dim> &qcollection,
+ /**
+ * Constructor. Set the fields
+ * of this class to the values
+ * indicated by the parameters
+ * to the constructor, and
+ * choose a @p MappingQ1
+ * object for the mapping
+ * object.
+ */
+ FEValuesBase (const QCollection<q_dim> &qcollection,
const UpdateFlags update_flags);
- protected:
- /**
- * A copy of the MappingCollection
- * object, which was specified
- * upon construction of the
- * object.
- */
- const MappingCollection<dim> mapping_collection;
+ protected:
+ /**
+ * A copy of the MappingCollection
+ * object, which was specified
+ * upon construction of the
+ * object.
+ */
+ const MappingCollection<dim> mapping_collection;
- /**
- * Copy of the quadrature
- * collection object
- * provided to the
- * constructor.
- */
- const QCollection<q_dim> qcollection;
-
- /**
- * Values of the update flags as
- * given to the constructor.
- */
- const UpdateFlags update_flags;
- };
-}
+ /**
+ * Copy of the quadrature
+ * collection object
+ * provided to the
+ * constructor.
+ */
+ const QCollection<q_dim> qcollection;
+
+ /**
+ * Values of the update flags as
+ * given to the constructor.
+ */
+ const UpdateFlags update_flags;
+ };
+ }
-template <int dim>
-class hpFEValues : public internal::FEValuesMap<dim,FEValues<dim> >,
- protected internal::hpFEValuesBase<dim,dim>
-{
- public:
- /**
- * Constructor. Initialize this
- * object with the given
- * parameters.
- *
- * The finite element
- * collection parameter is
- * actually ignored, but is in
- * the signature of this
- * function to make it
- * compatible with the
- * signature of the respective
- * constructor of the usual
- * FEValues object, with
- * the respective parameter in
- * that function also being the
- * return value of the
- * DoFHandler<tt>::get_fe()</tt>
- * function.
- */
- hpFEValues (const MappingCollection<dim> &mapping_collection,
+ template <int dim>
+ class FEValues : public hp::internal::FEValuesMap<dim,::FEValues<dim> >,
+ protected hp::internal::FEValuesBase<dim,dim>
+ {
+ public:
+ /**
+ * Constructor. Initialize this
+ * object with the given
+ * parameters.
+ *
+ * The finite element
+ * collection parameter is
+ * actually ignored, but is in
+ * the signature of this
+ * function to make it
+ * compatible with the
+ * signature of the respective
+ * constructor of the usual
+ * FEValues object, with
+ * the respective parameter in
+ * that function also being the
+ * return value of the
+ * DoFHandler<tt>::get_fe()</tt>
+ * function.
+ */
+ FEValues (const MappingCollection<dim> &mapping_collection,
const FECollection<dim> &fe_collection,
const QCollection<dim> &qcollection,
const UpdateFlags update_flags);
- /**
- * Constructor. Initialize this
- * object with the given
- * parameters, and choose a
- * @p MappingQ1 object for the
- * mapping object.
- *
- * The finite element
- * collection parameter is
- * actually ignored, but is in
- * the signature of this
- * function to make it
- * compatible with the
- * signature of the respective
- * constructor of the usual
- * FEValues object, with
- * the respective parameter in
- * that function also being the
- * return value of the
- * DoFHandler<tt>::get_fe()</tt>
- * function.
- */
- hpFEValues (const FECollection<dim> &fe_collection,
+ /**
+ * Constructor. Initialize this
+ * object with the given
+ * parameters, and choose a
+ * @p MappingQ1 object for the
+ * mapping object.
+ *
+ * The finite element
+ * collection parameter is
+ * actually ignored, but is in
+ * the signature of this
+ * function to make it
+ * compatible with the
+ * signature of the respective
+ * constructor of the usual
+ * FEValues object, with
+ * the respective parameter in
+ * that function also being the
+ * return value of the
+ * DoFHandler<tt>::get_fe()</tt>
+ * function.
+ */
+ FEValues (const FECollection<dim> &fe_collection,
const QCollection<dim> &qcollection,
const UpdateFlags update_flags);
- /**
- * Reinitialize the object for
- * the given cell. This selects
- * the right @p FEValues object
- * for the finite element in use
- * by the cell given, and calling
- * the @p reinit function on
- * this object.
- */
- void
- reinit (const typename hpDoFHandler<dim>::cell_iterator &cell);
-
- protected:
- /**
- * Create an object of type
- * @p FEValues for this
- * particular finite element.
- */
- virtual
- FEValues<dim> *
- create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const;
-};
-
-
-
-template <int dim>
-class hpFEFaceValues : public internal::FEValuesMap<dim,FEFaceValues<dim> >,
- protected internal::hpFEValuesBase<dim,dim-1>
-{
- public:
- /**
- * Constructor. Initialize this
- * object with the given
- * parameters.
- *
- * The finite element
- * collection parameter is
- * actually ignored, but is in
- * the signature of this
- * function to make it
- * compatible with the
- * signature of the respective
- * constructor of the usual
- * FEValues object, with
- * the respective parameter in
- * that function also being the
- * return value of the
- * DoFHandler<tt>::get_fe()</tt>
- * function.
- */
- hpFEFaceValues (const MappingCollection<dim> &mapping_collection,
+ /**
+ * Reinitialize the object for
+ * the given cell. This selects
+ * the right @p FEValues object
+ * for the finite element in use
+ * by the cell given, and calling
+ * the @p reinit function on
+ * this object.
+ */
+ void
+ reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell);
+
+ protected:
+ /**
+ * Create an object of type
+ * @p FEValues for this
+ * particular finite element.
+ */
+ virtual
+ ::FEValues<dim> *
+ create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const;
+ };
+
+
+
+ template <int dim>
+ class FEFaceValues : public hp::internal::FEValuesMap<dim,::FEFaceValues<dim> >,
+ protected hp::internal::FEValuesBase<dim,dim-1>
+ {
+ public:
+ /**
+ * Constructor. Initialize this
+ * object with the given
+ * parameters.
+ *
+ * The finite element
+ * collection parameter is
+ * actually ignored, but is in
+ * the signature of this
+ * function to make it
+ * compatible with the
+ * signature of the respective
+ * constructor of the usual
+ * FEValues object, with
+ * the respective parameter in
+ * that function also being the
+ * return value of the
+ * DoFHandler<tt>::get_fe()</tt>
+ * function.
+ */
+ FEFaceValues (const MappingCollection<dim> &mapping_collection,
const FECollection<dim> &fe_collection,
const QCollection<dim-1> &qcollection,
const UpdateFlags update_flags);
- /**
- * Constructor. Initialize this
- * object with the given
- * parameters, and choose a
- * @p MappingQ1 object for the
- * mapping object.
- *
- * The finite element
- * collection parameter is
- * actually ignored, but is in
- * the signature of this
- * function to make it
- * compatible with the
- * signature of the respective
- * constructor of the usual
- * FEValues object, with
- * the respective parameter in
- * that function also being the
- * return value of the
- * DoFHandler<tt>::get_fe()</tt>
- * function.
- */
- hpFEFaceValues (const FECollection<dim> &fe_collection,
+ /**
+ * Constructor. Initialize this
+ * object with the given
+ * parameters, and choose a
+ * @p MappingQ1 object for the
+ * mapping object.
+ *
+ * The finite element
+ * collection parameter is
+ * actually ignored, but is in
+ * the signature of this
+ * function to make it
+ * compatible with the
+ * signature of the respective
+ * constructor of the usual
+ * FEValues object, with
+ * the respective parameter in
+ * that function also being the
+ * return value of the
+ * DoFHandler<tt>::get_fe()</tt>
+ * function.
+ */
+ FEFaceValues (const FECollection<dim> &fe_collection,
const QCollection<dim-1> &qcollection,
const UpdateFlags update_flags);
- /**
- * Reinitialize the object for
- * the given cell. This selects
- * the right @p FEValues object
- * for the finite element in use
- * by the cell given, and calling
- * the @p reinit function on
- * this object.
- */
- void
- reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
- const unsigned int face_no);
-
-
- /**
- * Reinitialize the object for
- * the given cell. In this
- * method, the user can specify
- * which active_fe_index
- * should be used to initialise
- * the underlying FEValues
- * object. This functionality
- * is required, if the face terms
- * between two cells with different
- * polynomial degree should be
- * assembled. In this case the
- * values on the face of the
- * lower order element have to
- * be evaluated at the quadratrure
- * points of the higher order
- * element.
- */
- void
- reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
- const unsigned int face_no,
- const unsigned int active_fe_index);
-
- protected:
- /**
- * Create an object of type
- * @p FEValues for this
- * particular finite element.
- */
- virtual
- FEFaceValues<dim> *
- create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const;
-};
-
-
-
-template <int dim>
-class hpFESubfaceValues : public internal::FEValuesMap<dim,FESubfaceValues<dim> >,
- protected internal::hpFEValuesBase<dim,dim-1>
-{
- public:
- /**
- * Constructor. Initialize this
- * object with the given
- * parameters.
- *
- * The finite element
- * collection parameter is
- * actually ignored, but is in
- * the signature of this
- * function to make it
- * compatible with the
- * signature of the respective
- * constructor of the usual
- * FEValues object, with
- * the respective parameter in
- * that function also being the
- * return value of the
- * DoFHandler<tt>::get_fe()</tt>
- * function.
- */
- hpFESubfaceValues (const MappingCollection<dim> &mapping_collection,
+ /**
+ * Reinitialize the object for
+ * the given cell. This selects
+ * the right @p FEValues object
+ * for the finite element in use
+ * by the cell given, and calling
+ * the @p reinit function on
+ * this object.
+ */
+ void
+ reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
+ const unsigned int face_no);
+
+
+ /**
+ * Reinitialize the object for
+ * the given cell. In this
+ * method, the user can specify
+ * which active_fe_index
+ * should be used to initialise
+ * the underlying FEValues
+ * object. This functionality
+ * is required, if the face terms
+ * between two cells with different
+ * polynomial degree should be
+ * assembled. In this case the
+ * values on the face of the
+ * lower order element have to
+ * be evaluated at the quadratrure
+ * points of the higher order
+ * element.
+ */
+ void
+ reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
+ const unsigned int face_no,
+ const unsigned int active_fe_index);
+
+ protected:
+ /**
+ * Create an object of type
+ * @p FEValues for this
+ * particular finite element.
+ */
+ virtual
+ ::FEFaceValues<dim> *
+ create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const;
+ };
+
+
+
+ template <int dim>
+ class FESubfaceValues : public hp::internal::FEValuesMap<dim,::FESubfaceValues<dim> >,
+ protected hp::internal::FEValuesBase<dim,dim-1>
+ {
+ public:
+ /**
+ * Constructor. Initialize this
+ * object with the given
+ * parameters.
+ *
+ * The finite element
+ * collection parameter is
+ * actually ignored, but is in
+ * the signature of this
+ * function to make it
+ * compatible with the
+ * signature of the respective
+ * constructor of the usual
+ * FEValues object, with
+ * the respective parameter in
+ * that function also being the
+ * return value of the
+ * DoFHandler<tt>::get_fe()</tt>
+ * function.
+ */
+ FESubfaceValues (const MappingCollection<dim> &mapping_collection,
const FECollection<dim> &fe_collection,
const QCollection<dim-1> &qcollection,
const UpdateFlags update_flags);
- /**
- * Constructor. Initialize this
- * object with the given
- * parameters, and choose a
- * @p MappingQ1 object for the
- * mapping object.
- *
- * The finite element
- * collection parameter is
- * actually ignored, but is in
- * the signature of this
- * function to make it
- * compatible with the
- * signature of the respective
- * constructor of the usual
- * FEValues object, with
- * the respective parameter in
- * that function also being the
- * return value of the
- * DoFHandler<tt>::get_fe()</tt>
- * function.
- */
- hpFESubfaceValues (const FECollection<dim> &fe_collection,
+ /**
+ * Constructor. Initialize this
+ * object with the given
+ * parameters, and choose a
+ * @p MappingQ1 object for the
+ * mapping object.
+ *
+ * The finite element
+ * collection parameter is
+ * actually ignored, but is in
+ * the signature of this
+ * function to make it
+ * compatible with the
+ * signature of the respective
+ * constructor of the usual
+ * FEValues object, with
+ * the respective parameter in
+ * that function also being the
+ * return value of the
+ * DoFHandler<tt>::get_fe()</tt>
+ * function.
+ */
+ FESubfaceValues (const FECollection<dim> &fe_collection,
const QCollection<dim-1> &qcollection,
const UpdateFlags update_flags);
- /**
- * Reinitialize the object for
- * the given cell. This selects
- * the right @p FEValues object
- * for the finite element in use
- * by the cell given, and calling
- * the @p reinit function on
- * this object.
- */
- void
- reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
- const unsigned int face_no,
- const unsigned int subface_no);
-
-
- /**
- * Reinitialize the object for
- * the given cell. In this
- * method, the user can specify
- * which active_fe_index
- * should be used to initialise
- * the underlying FEValues
- * object. This functionality
- * is required, if the face terms
- * between two cells with different
- * polynomial degree should be
- * assembled. In this case the
- * values on the face of the
- * lower order element have to
- * be evaluated at the quadratrure
- * points of the higher order
- * element.
- */
- void
- reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
- const unsigned int face_no,
- const unsigned int subface_no,
- const unsigned int active_fe_index);
-
-
- protected:
- /**
- * Create an object of type
- * @p FEValues for this
- * particular finite element.
- */
- virtual
- FESubfaceValues<dim> *
- create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const;
-};
+ /**
+ * Reinitialize the object for
+ * the given cell. This selects
+ * the right @p FEValues object
+ * for the finite element in use
+ * by the cell given, and calling
+ * the @p reinit function on
+ * this object.
+ */
+ void
+ reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
+ const unsigned int face_no,
+ const unsigned int subface_no);
+
+
+ /**
+ * Reinitialize the object for
+ * the given cell. In this
+ * method, the user can specify
+ * which active_fe_index
+ * should be used to initialise
+ * the underlying FEValues
+ * object. This functionality
+ * is required, if the face terms
+ * between two cells with different
+ * polynomial degree should be
+ * assembled. In this case the
+ * values on the face of the
+ * lower order element have to
+ * be evaluated at the quadratrure
+ * points of the higher order
+ * element.
+ */
+ void
+ reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
+ const unsigned int face_no,
+ const unsigned int subface_no,
+ const unsigned int active_fe_index);
+
+
+ protected:
+ /**
+ * Create an object of type
+ * @p FEValues for this
+ * particular finite element.
+ */
+ virtual
+ ::FESubfaceValues<dim> *
+ create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const;
+ };
// -------------- inline and template functions --------------
-namespace internal
-{
- template <int dim, class FEValues>
- inline
- const FEValues &
- FEValuesMap<dim,FEValues>::get_present_fe_values () const
+ namespace internal
{
- return *present_fe_values;
+ template <int dim, class FEValues>
+ inline
+ const FEValues &
+ FEValuesMap<dim,FEValues>::get_present_fe_values () const
+ {
+ return *present_fe_values;
+ }
}
+
}
-
-
#endif
/**
* This class implements a collection of mapping objects used in the
- * hpDoFHandler(). It is thus to a hpDoFHandler() what a Mapping is to a
+ * hp::DoFHandler(). It is thus to a hp::DoFHandler() what a Mapping is to a
* DoFHandler. This collection stores pointers to the original mapping
* objects added to it. Hence the handling of the memory consumed by
* the mapping objects must be done by the user of the class.
/**
* This class implements a collection of quadrature objects used in the
- * hpDoFHandler(). It is thus to a hpDoFHandler() what a Quadrature is to a
+ * hp::DoFHandler(). It is thus to a hp::DoFHandler() what a Quadrature is to a
* DoFHandler. This collection stores pointers to the original quadrature
* elements added to it. Hence the handling of the memory consumed by
* the quadrature objects must be done by the user of the class.
// $Id$
// Version: $Name$
//
-// Copyright (C) 2003 by the deal.II authors
+// Copyright (C) 2003, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include <base/config.h>
template <int> class DoFHandler;
-template <int> class hpDoFHandler;
+template <int> class hp::DoFHandler;
template <int> class FEValues;
template <int> class FEFaceValues;
template <int> class FESubfaceValues;
-template <int> class hpFEValues;
-template <int> class hpFEFaceValues;
-template <int> class hpFESubfaceValues;
+namespace hp
+{
+ template <int> class FEValues;
+ template <int> class FEFaceValues;
+ template <int> class FESubfaceValues;
+}
};
-template <int dim> struct SelectFEValues<hpDoFHandler<dim> >
+template <int dim> struct SelectFEValues<hp::DoFHandler<dim> >
{
- typedef hpFEValues<dim> FEValues;
- typedef hpFEFaceValues<dim> FEFaceValues;
- typedef hpFESubfaceValues<dim> FESubfaceValues;
+ typedef hp::FEValues<dim> FEValues;
+ typedef hp::FEFaceValues<dim> FEFaceValues;
+ typedef hp::FESubfaceValues<dim> FESubfaceValues;
};
// $Id$
// Version: $Name$
//
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 by the deal.II authors
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
template <int dim> class StraightBoundary;
template <int dim> class TriangulationLevel;
template <int dim> class DoFHandler;
-template <int dim> class hpDoFHandler;
+namespace hp
+{
+ template <int dim> class DoFHandler;
+}
template <int dim> class MGDoFHandler;
/*------------------------------------------------------------------------*/
* post_refinement_notification().
* Both methods are called in the method
* execute_coarsening_and_refinement().
- * For an example see hpDoFHandler().
+ * For an example see hp::DoFHandler().
*/
class RefinementListener
{
friend class TriaRawIterator<3,CellAccessor<3> >;
friend class DoFHandler<dim>;
- friend class hpDoFHandler<dim>;
+ friend class hp::DoFHandler<dim>;
friend class MGDoFHandler<dim>;
};
#include <utility>
template <int dim> class DoFHandler;
-template <int dim> class hpDoFHandler;
+template <int dim> class hp::DoFHandler;
// $Id$
// Version: $Name$
//
-// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 by the deal.II authors
+// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
template <typename number> class FullMatrix;
template <int dim> class Mapping;
template <int dim> class DoFHandler;
-template <int dim> class hpDoFHandler;
+namespace hp
+{
+ template <int dim> class DoFHandler;
+}
class ConstraintMatrix;
/**
* Declaration of specialization
* of the previous function for
- * 1d and a hpDoFHandler().
+ * 1d and a hp::DoFHandler().
*/
static
void
interpolate_boundary_values (const Mapping<1> &mapping,
- const hpDoFHandler<1> &dof,
+ const hp::DoFHandler<1> &dof,
const FunctionMap<1>::type &function_map,
std::map<unsigned int,double> &boundary_values,
const std::vector<bool> &component_mask = std::vector<bool>());
#if deal_II_dimension == 1
//TODO[?] Actually the Mapping object should be a MappingCollection object for the
-// hpDoFHandler.
+// hp::DoFHandler.
template <template <int> class DH>
void
VectorTools::interpolate_boundary_values (const Mapping<1> &,
//TODO[?] Actually the Mapping object should be a MappingCollection object for the
-// hpDoFHandler.
+// hp::DoFHandler.
void
VectorTools::interpolate_boundary_values (const Mapping<1> &mapping,
const DoFHandler<1> &dof,
//TODO[?] Actually the Mapping object should be a MappingCollection object for the
-// hpDoFHandler.
+// hp::DoFHandler.
void
VectorTools::interpolate_boundary_values (const Mapping<1> &mapping,
- const hpDoFHandler<1> &dof,
+ const hp::DoFHandler<1> &dof,
const FunctionMap<1>::type &function_map,
std::map<unsigned int,double> &boundary_values,
const std::vector<bool> &component_mask)
-//TODO[?] Change for real hpDoFHandler
-// This function might not work anymore if the real hpDoFHandler is available.
+//TODO[?] Change for real hp::DoFHandler
+// This function might not work anymore if the real hp::DoFHandler is available.
template <int dim, template <int> class DH>
void
VectorTools::interpolate_boundary_values (const DH<dim> &dof,
-//TODO[?] Change for real hpDoFHandler
-// This function might not work anymore if the real hpDoFHandler is available.
+//TODO[?] Change for real hp::DoFHandler
+// This function might not work anymore if the real hp::DoFHandler is available.
template <int dim, template <int> class DH>
void
VectorTools::interpolate_boundary_values (const DH<dim> &dof,
// --------------------------------------------------------------------------
-// explicit instantiations (for hpDoFHandler)
+// explicit instantiations (for hp::DoFHandler)
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<double>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<double>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<double>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<double>,float>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<float>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<float>,double>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<float>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<float>,double>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<double>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<double>,float>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<float>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<float>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
// for block vector
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<double>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<double>,double>
(const BlockVector<double> &, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<double>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<double>,double>
(const Vector<double>&, BlockVector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<double>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<double>,float>
(const BlockVector<double> &, Vector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<float>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<float>,double>
(const Vector<double>&, BlockVector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<float>,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<float>,double>
(const BlockVector<float> &, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<double>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<double>,float>
(const Vector<float>&, BlockVector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<float>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<float>,float>
(const BlockVector<float>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<float>,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<float>,float>
(const Vector<float>&, BlockVector<float>&) const;
// for Petsc vectors
#if DEAL_II_USE_PETSC
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::Vector,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::Vector,double>
(const PETScWrappers::Vector &, Vector<double>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::Vector,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::Vector,float>
(const PETScWrappers::Vector &, Vector<float>&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::Vector,double>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::Vector,double>
(const Vector<double> &, PETScWrappers::Vector&) const;
template
void
-DoFObjectAccessor<1,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::Vector,float>
+DoFObjectAccessor<1,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::Vector,float>
(const Vector<float>&, PETScWrappers::Vector&) const;
#endif
#if deal_II_dimension >= 2
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<double>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<double>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<double>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<double>,float>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<float>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<float>,double>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<float>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<float>,double>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<double>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<double>,float>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<float>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<float>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
// for block vector
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<double>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<double>,double>
(const BlockVector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<double>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<double>,double>
(const Vector<double>&, BlockVector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<double>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<double>,float>
(const BlockVector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<float>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<float>,double>
(const Vector<double>&, BlockVector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<float>,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<float>,double>
(const BlockVector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<double>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<double>,float>
(const Vector<float>&, BlockVector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<float>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<float>,float>
(const BlockVector<float>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<float>,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<float>,float>
(const Vector<float>&, BlockVector<float>&) const;
// for Petsc vectors
#if DEAL_II_USE_PETSC
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::Vector,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::Vector,double>
(const PETScWrappers::Vector &, Vector<double>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::Vector,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::Vector,float>
(const PETScWrappers::Vector &, Vector<float>&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::Vector,double>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::Vector,double>
(const Vector<double> &, PETScWrappers::Vector&) const;
template
void
-DoFObjectAccessor<2,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::Vector,float>
+DoFObjectAccessor<2,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::Vector,float>
(const Vector<float>&, PETScWrappers::Vector&) const;
#endif
// for double
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<double>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<double>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<double>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<double>,float>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<float>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<float>,double>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<float>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<float>,double>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<double>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<double>,float>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<Vector<float>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<Vector<float>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
// for block vector
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<double>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<double>,double>
(const BlockVector<double>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<double>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<double>,double>
(const Vector<double>&, BlockVector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<double>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<double>,float>
(const BlockVector<double>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<float>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<float>,double>
(const Vector<double>&, BlockVector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<float>,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<float>,double>
(const BlockVector<float>&, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<double>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<double>,float>
(const Vector<float>&, BlockVector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<BlockVector<float>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<BlockVector<float>,float>
(const BlockVector<float>&, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<BlockVector<float>,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<BlockVector<float>,float>
(const Vector<float>&, BlockVector<float>&) const;
#ifdef DEAL_II_USE_PETSC
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::Vector,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::Vector,double>
(const PETScWrappers::Vector &, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::Vector,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::Vector,float>
(const PETScWrappers::Vector &, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::Vector,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::Vector,double>
(const Vector<double> &, PETScWrappers::Vector&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::Vector,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::Vector,float>
(const Vector<float>&, PETScWrappers::Vector&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::BlockVector,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::BlockVector,double>
(const PETScWrappers::BlockVector &, Vector<double>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::get_dof_values<PETScWrappers::BlockVector,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::get_dof_values<PETScWrappers::BlockVector,float>
(const PETScWrappers::BlockVector &, Vector<float>&) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::BlockVector,double>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::BlockVector,double>
(const Vector<double>&, PETScWrappers::BlockVector &) const;
template
void
-DoFObjectAccessor<3,deal_II_dimension,hpDoFHandler>::set_dof_values<PETScWrappers::BlockVector,float>
+DoFObjectAccessor<3,deal_II_dimension,hp::DoFHandler>::set_dof_values<PETScWrappers::BlockVector,float>
(const Vector<float>&, PETScWrappers::BlockVector&) const;
#endif
#endif
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<Vector<double>,double>
(const Vector<double>&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<Vector<double>,float>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<Vector<float>,double>
(const Vector<double>&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<Vector<float>,double>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<Vector<double>,float>
(const Vector<float>&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<Vector<float>,float>
(const Vector<float>&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<BlockVector<double>,double>
(const BlockVector<double>&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<BlockVector<double>,double>
(const Vector<double>&, BlockVector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<BlockVector<double>,float>
(const BlockVector<double>&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<BlockVector<float>,double>
(const Vector<double>&, BlockVector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<BlockVector<float>,double>
(const BlockVector<float>&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<BlockVector<double>,float>
(const Vector<float>&, BlockVector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<BlockVector<float>,float>
(const BlockVector<float>&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<BlockVector<float>,float>
(const Vector<float>&, BlockVector<float>&) const;
#ifdef DEAL_II_USE_PETSC
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<PETScWrappers::Vector,double>
(const PETScWrappers::Vector&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<PETScWrappers::Vector,double>
(const Vector<double>&, PETScWrappers::Vector&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<PETScWrappers::Vector,float>
(const PETScWrappers::Vector&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<PETScWrappers::Vector,float>
(const Vector<float>&, PETScWrappers::Vector&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<PETScWrappers::BlockVector,double>
(const PETScWrappers::BlockVector&, Vector<double>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<PETScWrappers::BlockVector,double>
(const Vector<double>&, PETScWrappers::BlockVector&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
get_interpolated_dof_values<PETScWrappers::BlockVector,float>
(const PETScWrappers::BlockVector&, Vector<float>&) const;
template
void
-DoFCellAccessor<deal_II_dimension,hpDoFHandler>::
+DoFCellAccessor<deal_II_dimension,hp::DoFHandler>::
set_dof_values_by_interpolation<PETScWrappers::BlockVector,float>
(const Vector<float>&, PETScWrappers::BlockVector&) const;
#endif
-template class DoFAccessor<deal_II_dimension, hpDoFHandler>;
+template class DoFAccessor<deal_II_dimension, hp::DoFHandler>;
#if deal_II_dimension == 1
-template class DoFObjectAccessor<1, 1, hpDoFHandler>;
+template class DoFObjectAccessor<1, 1, hp::DoFHandler>;
#endif
#if deal_II_dimension == 2
-template class DoFObjectAccessor<1, 2, hpDoFHandler>;
-template class DoFObjectAccessor<2, 2, hpDoFHandler>;
+template class DoFObjectAccessor<1, 2, hp::DoFHandler>;
+template class DoFObjectAccessor<2, 2, hp::DoFHandler>;
-template class TriaRawIterator <2,DoFObjectAccessor<1, 2, hpDoFHandler> >;
-template class TriaIterator <2,DoFObjectAccessor<1, 2, hpDoFHandler> >;
-template class TriaActiveIterator<2,DoFObjectAccessor<1, 2, hpDoFHandler> >;
+template class TriaRawIterator <2,DoFObjectAccessor<1, 2, hp::DoFHandler> >;
+template class TriaIterator <2,DoFObjectAccessor<1, 2, hp::DoFHandler> >;
+template class TriaActiveIterator<2,DoFObjectAccessor<1, 2, hp::DoFHandler> >;
#endif
#if deal_II_dimension == 3
-template class DoFObjectAccessor<1, 3, hpDoFHandler>;
-template class DoFObjectAccessor<2, 3, hpDoFHandler>;
-template class DoFObjectAccessor<3, 3, hpDoFHandler>;
-
-template class TriaRawIterator <3,DoFObjectAccessor<1, 3, hpDoFHandler> >;
-template class TriaIterator <3,DoFObjectAccessor<1, 3, hpDoFHandler> >;
-template class TriaActiveIterator<3,DoFObjectAccessor<1, 3, hpDoFHandler> >;
-template class TriaRawIterator <3,DoFObjectAccessor<2, 3, hpDoFHandler> >;
-template class TriaIterator <3,DoFObjectAccessor<2, 3, hpDoFHandler> >;
-template class TriaActiveIterator<3,DoFObjectAccessor<2, 3, hpDoFHandler> >;
+template class DoFObjectAccessor<1, 3, hp::DoFHandler>;
+template class DoFObjectAccessor<2, 3, hp::DoFHandler>;
+template class DoFObjectAccessor<3, 3, hp::DoFHandler>;
+
+template class TriaRawIterator <3,DoFObjectAccessor<1, 3, hp::DoFHandler> >;
+template class TriaIterator <3,DoFObjectAccessor<1, 3, hp::DoFHandler> >;
+template class TriaActiveIterator<3,DoFObjectAccessor<1, 3, hp::DoFHandler> >;
+template class TriaRawIterator <3,DoFObjectAccessor<2, 3, hp::DoFHandler> >;
+template class TriaIterator <3,DoFObjectAccessor<2, 3, hp::DoFHandler> >;
+template class TriaActiveIterator<3,DoFObjectAccessor<2, 3, hp::DoFHandler> >;
#endif
-template class DoFCellAccessor<deal_II_dimension, hpDoFHandler>;
+template class DoFCellAccessor<deal_II_dimension, hp::DoFHandler>;
-template class TriaRawIterator <deal_II_dimension,DoFCellAccessor<deal_II_dimension, hpDoFHandler> >;
-template class TriaIterator <deal_II_dimension,DoFCellAccessor<deal_II_dimension, hpDoFHandler> >;
-template class TriaActiveIterator<deal_II_dimension,DoFCellAccessor<deal_II_dimension, hpDoFHandler> >;
+template class TriaRawIterator <deal_II_dimension,DoFCellAccessor<deal_II_dimension, hp::DoFHandler> >;
+template class TriaIterator <deal_II_dimension,DoFCellAccessor<deal_II_dimension, hp::DoFHandler> >;
+template class TriaActiveIterator<deal_II_dimension,DoFCellAccessor<deal_II_dimension, hp::DoFHandler> >;
template
-void DoFRenumbering::Cuthill_McKee<hpDoFHandler<deal_II_dimension> >
-(hpDoFHandler<deal_II_dimension>&,
+void DoFRenumbering::Cuthill_McKee<hp::DoFHandler<deal_II_dimension> >
+(hp::DoFHandler<deal_II_dimension>&,
const bool,
const bool,
const std::vector<unsigned int>&);
template
void
-DoFRenumbering::compute_Cuthill_McKee<hpDoFHandler<deal_II_dimension> >
+DoFRenumbering::compute_Cuthill_McKee<hp::DoFHandler<deal_II_dimension> >
(std::vector<unsigned int>&,
- const hpDoFHandler<deal_II_dimension>&,
+ const hp::DoFHandler<deal_II_dimension>&,
const bool,
const bool,
const std::vector<unsigned int>&);
const Point<deal_II_dimension>&,
const bool);
-// DG renumbering for hpDoFHandler
+// DG renumbering for hp::DoFHandler
template
void
-DoFRenumbering::cell_wise_dg<hpDoFHandler<deal_II_dimension> >
-(hpDoFHandler<deal_II_dimension>&,
- const std::vector<hpDoFHandler<deal_II_dimension>::cell_iterator>&);
+DoFRenumbering::cell_wise_dg<hp::DoFHandler<deal_II_dimension> >
+(hp::DoFHandler<deal_II_dimension>&,
+ const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
template
void
-DoFRenumbering::compute_cell_wise_dg<hpDoFHandler<deal_II_dimension> >
+DoFRenumbering::compute_cell_wise_dg<hp::DoFHandler<deal_II_dimension> >
(std::vector<unsigned int>&,
- const hpDoFHandler<deal_II_dimension>&,
- const std::vector<hpDoFHandler<deal_II_dimension>::cell_iterator>&);
+ const hp::DoFHandler<deal_II_dimension>&,
+ const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
template
void
-DoFRenumbering::downstream_dg<hpDoFHandler<deal_II_dimension> >
-(hpDoFHandler<deal_II_dimension>&,
+DoFRenumbering::downstream_dg<hp::DoFHandler<deal_II_dimension> >
+(hp::DoFHandler<deal_II_dimension>&,
const Point<deal_II_dimension>&);
template
void
-DoFRenumbering::compute_downstream_dg<hpDoFHandler<deal_II_dimension> >
+DoFRenumbering::compute_downstream_dg<hp::DoFHandler<deal_II_dimension> >
(std::vector<unsigned int>&,
- const hpDoFHandler<deal_II_dimension>&,
+ const hp::DoFHandler<deal_II_dimension>&,
const Point<deal_II_dimension>&);
template
void
-DoFRenumbering::clockwise_dg<hpDoFHandler<deal_II_dimension> >
-(hpDoFHandler<deal_II_dimension>&,
+DoFRenumbering::clockwise_dg<hp::DoFHandler<deal_II_dimension> >
+(hp::DoFHandler<deal_II_dimension>&,
const Point<deal_II_dimension>&, bool);
template
void
-DoFRenumbering::compute_clockwise_dg<hpDoFHandler<deal_II_dimension> >
+DoFRenumbering::compute_clockwise_dg<hp::DoFHandler<deal_II_dimension> >
(std::vector<unsigned int>&,
- const hpDoFHandler<deal_II_dimension>&,
+ const hp::DoFHandler<deal_II_dimension>&,
const Point<deal_II_dimension>&,
const bool);
template
void DoFRenumbering::random
-(hpDoFHandler<deal_II_dimension> &);
+(hp::DoFHandler<deal_II_dimension> &);
template
void
DoFRenumbering::compute_random
(std::vector<unsigned int>&,
- const hpDoFHandler<deal_II_dimension> &);
+ const hp::DoFHandler<deal_II_dimension> &);
template
void DoFRenumbering::sort_selected_dofs_back
-(hpDoFHandler<deal_II_dimension> &,
+(hp::DoFHandler<deal_II_dimension> &,
const std::vector<bool> &);
template
void
DoFRenumbering::compute_sort_selected_dofs_back
(std::vector<unsigned int>&,
- const hpDoFHandler<deal_II_dimension> &,
+ const hp::DoFHandler<deal_II_dimension> &,
const std::vector<bool> &);
template
return dh.get_fe().is_primitive();
}
- // Functions for the hpDoFHandler
+ // Functions for the hp::DoFHandler
template <int dim>
unsigned int
- max_dofs_per_cell (const hpDoFHandler<dim> &dh)
+ max_dofs_per_cell (const hp::DoFHandler<dim> &dh)
{
return dh.get_fe().max_dofs_per_cell ();
}
template <int dim>
unsigned int
- max_dofs_per_face (const hpDoFHandler<dim> &dh)
+ max_dofs_per_face (const hp::DoFHandler<dim> &dh)
{
return dh.get_fe().max_dofs_per_face ();
}
template <int dim>
unsigned int
- max_dofs_per_vertex (const hpDoFHandler<dim> &dh)
+ max_dofs_per_vertex (const hp::DoFHandler<dim> &dh)
{
return dh.get_fe().max_dofs_per_vertex ();
}
template <int dim>
unsigned int
- n_components (const hpDoFHandler<dim> &dh)
+ n_components (const hp::DoFHandler<dim> &dh)
{
//TODO:[?] Verify that this is really correct
return dh.get_fe().get_fe(0).n_components();
template <int dim>
unsigned int
- fe_is_primitive (const hpDoFHandler<dim> &dh)
+ fe_is_primitive (const hp::DoFHandler<dim> &dh)
{
//TODO:[?] Verify that this is really correct
return dh.get_fe().get_fe(0).is_primitive();
void DoFTools::make_hanging_node_constraints (
- const hpDoFHandler<1> &,
+ const hp::DoFHandler<1> &,
ConstraintMatrix &)
{
// nothing to be done here
void DoFTools::make_hanging_node_constraints (
- const hpDoFHandler<2> &/*dof_handler*/,
+ const hp::DoFHandler<2> &/*dof_handler*/,
ConstraintMatrix &/*constraints*/)
{
//TODO[?]: Implement (required for continuous elements)
void DoFTools::make_hanging_node_constraints (
- const hpDoFHandler<3> &/*dof_handler*/,
+ const hp::DoFHandler<3> &/*dof_handler*/,
ConstraintMatrix &/*constraints*/)
{
//TODO:[?] Implement (required for continuous elements)
template void
DoFTools::compute_row_length_vector(
- const hpDoFHandler<deal_II_dimension>& dofs, std::vector<unsigned int>& row_lengths,
+ const hp::DoFHandler<deal_II_dimension>& dofs, std::vector<unsigned int>& row_lengths,
const Coupling flux_coupling);
template void
template void
DoFTools::compute_row_length_vector(
- const hpDoFHandler<deal_II_dimension>& dofs, std::vector<unsigned int>& row_lengths,
+ const hp::DoFHandler<deal_II_dimension>& dofs, std::vector<unsigned int>& row_lengths,
const Table<2,Coupling>& couplings, const Table<2,Coupling>& flux_couplings);
template void
(const DoFHandler<deal_II_dimension> &dof,
SparsityPattern &sparsity);
template void
-DoFTools::make_sparsity_pattern<deal_II_dimension,SparsityPattern,hpDoFHandler>
-(const hpDoFHandler<deal_II_dimension> &dof,
+DoFTools::make_sparsity_pattern<deal_II_dimension,SparsityPattern,hp::DoFHandler>
+(const hp::DoFHandler<deal_II_dimension> &dof,
SparsityPattern &sparsity);
template void
(const DoFHandler<deal_II_dimension> &dof,
CompressedSparsityPattern &sparsity);
template void
-DoFTools::make_sparsity_pattern<deal_II_dimension,CompressedSparsityPattern,hpDoFHandler>
-(const hpDoFHandler<deal_II_dimension> &dof,
+DoFTools::make_sparsity_pattern<deal_II_dimension,CompressedSparsityPattern,hp::DoFHandler>
+(const hp::DoFHandler<deal_II_dimension> &dof,
CompressedSparsityPattern &sparsity);
template void
(const DoFHandler<deal_II_dimension> &dof,
BlockSparsityPattern &sparsity);
template void
-DoFTools::make_sparsity_pattern<deal_II_dimension,BlockSparsityPattern,hpDoFHandler>
-(const hpDoFHandler<deal_II_dimension> &dof,
+DoFTools::make_sparsity_pattern<deal_II_dimension,BlockSparsityPattern,hp::DoFHandler>
+(const hp::DoFHandler<deal_II_dimension> &dof,
BlockSparsityPattern &sparsity);
template void
(const DoFHandler<deal_II_dimension> &dof,
CompressedBlockSparsityPattern &sparsity);
template void
-DoFTools::make_sparsity_pattern<deal_II_dimension,CompressedBlockSparsityPattern,hpDoFHandler>
-(const hpDoFHandler<deal_II_dimension> &dof,
+DoFTools::make_sparsity_pattern<deal_II_dimension,CompressedBlockSparsityPattern,hp::DoFHandler>
+(const hp::DoFHandler<deal_II_dimension> &dof,
CompressedBlockSparsityPattern &sparsity);
SparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,SparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
SparsityPattern &);
template void
CompressedSparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,CompressedSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
CompressedSparsityPattern &);
template void
BlockSparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,BlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
BlockSparsityPattern &);
template void
CompressedBlockSparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,CompressedBlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
CompressedBlockSparsityPattern &);
SparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,SparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
SparsityPattern &sparsity);
CompressedSparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,CompressedSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
CompressedSparsityPattern &sparsity);
BlockSparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,BlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
BlockSparsityPattern &sparsity);
CompressedBlockSparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<deal_II_dimension,CompressedBlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
CompressedBlockSparsityPattern &sparsity);
SparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<SparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
SparsityPattern &);
template void
CompressedSparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<CompressedSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
CompressedSparsityPattern &);
template void
BlockSparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<BlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
BlockSparsityPattern &);
template void
CompressedBlockSparsityPattern &);
template void
DoFTools::make_boundary_sparsity_pattern<CompressedBlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const std::vector<unsigned int> &,
CompressedBlockSparsityPattern &);
SparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<SparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
SparsityPattern &sparsity);
CompressedSparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<CompressedSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
CompressedSparsityPattern &sparsity);
BlockSparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<BlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
BlockSparsityPattern &sparsity);
CompressedBlockSparsityPattern &sparsity);
template void
DoFTools::make_boundary_sparsity_pattern<CompressedBlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
const FunctionMap<deal_II_dimension>::type &boundary_indicators,
const std::vector<unsigned int> &dof_to_boundary_mapping,
CompressedBlockSparsityPattern &sparsity);
SparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,SparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
SparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,CompressedSparsityPattern>
CompressedSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,CompressedSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
CompressedSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,BlockSparsityPattern>
BlockSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,BlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
BlockSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,CompressedBlockSparsityPattern>
CompressedBlockSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<deal_II_dimension,CompressedBlockSparsityPattern>
-(const hpDoFHandler<deal_II_dimension>& dof,
+(const hp::DoFHandler<deal_II_dimension>& dof,
CompressedBlockSparsityPattern &sparsity);
#else
template void
SparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<SparsityPattern>
-(const hpDoFHandler<1>& dof,
+(const hp::DoFHandler<1>& dof,
SparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<CompressedSparsityPattern>
CompressedSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<CompressedSparsityPattern>
-(const hpDoFHandler<1>& dof,
+(const hp::DoFHandler<1>& dof,
CompressedSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<BlockSparsityPattern>
BlockSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<BlockSparsityPattern>
-(const hpDoFHandler<1>& dof,
+(const hp::DoFHandler<1>& dof,
BlockSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<CompressedBlockSparsityPattern>
CompressedBlockSparsityPattern &sparsity);
template void
DoFTools::make_flux_sparsity_pattern<CompressedBlockSparsityPattern>
-(const hpDoFHandler<1>& dof,
+(const hp::DoFHandler<1>& dof,
CompressedBlockSparsityPattern &sparsity);
#endif
template
void
-DoFTools::extract_subdomain_dofs<deal_II_dimension, hpDoFHandler>
-(const hpDoFHandler<deal_II_dimension> &dof_handler,
+DoFTools::extract_subdomain_dofs<deal_II_dimension, hp::DoFHandler>
+(const hp::DoFHandler<deal_II_dimension> &dof_handler,
const unsigned int subdomain_id,
std::vector<bool> &selected_dofs);
// $Id$
// Version: $Name$
//
-// Copyright (C) 2003, 2004 by the deal.II authors
+// Copyright (C) 2003, 2004, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include <functional>
+namespace hp
+{
+
-template <int dim>
-const unsigned int hpDoFHandler<dim>::invalid_dof_index;
+ template <int dim>
+ const unsigned int DoFHandler<dim>::invalid_dof_index;
-template <int dim>
-hpDoFHandler<dim>::hpDoFHandler (const Triangulation<dim> &tria)
- :
- tria(&tria),
- used_dofs (0)
-{
- tria.add_refinement_listener (*this);
-}
+ template <int dim>
+ DoFHandler<dim>::DoFHandler (const Triangulation<dim> &tria)
+ :
+ tria(&tria),
+ used_dofs (0)
+ {
+ tria.add_refinement_listener (*this);
+ }
-template <int dim>
-hpDoFHandler<dim>::~hpDoFHandler ()
-{
- // unsubscribe as a listener to refinement
- // of the underlying triangulation
- tria->remove_refinement_listener (*this);
+ template <int dim>
+ DoFHandler<dim>::~DoFHandler ()
+ {
+ // unsubscribe as a listener to refinement
+ // of the underlying triangulation
+ tria->remove_refinement_listener (*this);
- // ...and release allocated memory
- clear ();
-}
+ // ...and release allocated memory
+ clear ();
+ }
#if deal_II_dimension == 1
-template <>
-hpDoFHandler<1>::raw_cell_iterator
-hpDoFHandler<1>::begin_raw (const unsigned int level) const {
- return begin_raw_line (level);
-}
+ template <>
+ DoFHandler<1>::raw_cell_iterator
+ DoFHandler<1>::begin_raw (const unsigned int level) const {
+ return begin_raw_line (level);
+ }
-template <>
-hpDoFHandler<1>::cell_iterator
-hpDoFHandler<1>::begin (const unsigned int level) const {
- return begin_line (level);
-}
+ template <>
+ DoFHandler<1>::cell_iterator
+ DoFHandler<1>::begin (const unsigned int level) const {
+ return begin_line (level);
+ }
-template <>
-hpDoFHandler<1>::active_cell_iterator
-hpDoFHandler<1>::begin_active (const unsigned int level) const {
- return begin_active_line (level);
-}
+ template <>
+ DoFHandler<1>::active_cell_iterator
+ DoFHandler<1>::begin_active (const unsigned int level) const {
+ return begin_active_line (level);
+ }
-template <>
-hpDoFHandler<1>::raw_cell_iterator
-hpDoFHandler<1>::end () const {
- return end_line ();
-}
+ template <>
+ DoFHandler<1>::raw_cell_iterator
+ DoFHandler<1>::end () const {
+ return end_line ();
+ }
-template <>
-hpDoFHandler<1>::raw_cell_iterator
-hpDoFHandler<1>::last_raw () const {
- return last_raw_line ();
-}
+ template <>
+ DoFHandler<1>::raw_cell_iterator
+ DoFHandler<1>::last_raw () const {
+ return last_raw_line ();
+ }
-template <>
-hpDoFHandler<1>::raw_cell_iterator
-hpDoFHandler<1>::last_raw (const unsigned int level) const {
- return last_raw_line (level);
-}
+ template <>
+ DoFHandler<1>::raw_cell_iterator
+ DoFHandler<1>::last_raw (const unsigned int level) const {
+ return last_raw_line (level);
+ }
-template <>
-hpDoFHandler<1>::cell_iterator
-hpDoFHandler<1>::last () const {
- return last_line ();
-}
+ template <>
+ DoFHandler<1>::cell_iterator
+ DoFHandler<1>::last () const {
+ return last_line ();
+ }
-template <>
-hpDoFHandler<1>::cell_iterator
-hpDoFHandler<1>::last (const unsigned int level) const {
- return last_line (level);
-}
+ template <>
+ DoFHandler<1>::cell_iterator
+ DoFHandler<1>::last (const unsigned int level) const {
+ return last_line (level);
+ }
-template <>
-hpDoFHandler<1>::active_cell_iterator
-hpDoFHandler<1>::last_active () const {
- return last_active_line ();
-}
+ template <>
+ DoFHandler<1>::active_cell_iterator
+ DoFHandler<1>::last_active () const {
+ return last_active_line ();
+ }
-template <>
-hpDoFHandler<1>::active_cell_iterator
-hpDoFHandler<1>::last_active (const unsigned int level) const {
- return last_active_line (level);
-}
+ template <>
+ DoFHandler<1>::active_cell_iterator
+ DoFHandler<1>::last_active (const unsigned int level) const {
+ return last_active_line (level);
+ }
-template <>
-hpDoFHandler<1>::raw_face_iterator
-hpDoFHandler<1>::begin_raw_face (const unsigned int) const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_face_iterator
+ DoFHandler<1>::begin_raw_face (const unsigned int) const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::face_iterator
-hpDoFHandler<1>::begin_face (const unsigned int) const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::face_iterator
+ DoFHandler<1>::begin_face (const unsigned int) const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_face_iterator
-hpDoFHandler<1>::begin_active_face (const unsigned int) const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_face_iterator
+ DoFHandler<1>::begin_active_face (const unsigned int) const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_face_iterator
-hpDoFHandler<1>::end_face () const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_face_iterator
+ DoFHandler<1>::end_face () const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_face_iterator
-hpDoFHandler<1>::last_raw_face () const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_face_iterator
+ DoFHandler<1>::last_raw_face () const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_face_iterator
-hpDoFHandler<1>::last_raw_face (const unsigned int) const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_face_iterator
+ DoFHandler<1>::last_raw_face (const unsigned int) const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::face_iterator
-hpDoFHandler<1>::last_face () const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::face_iterator
+ DoFHandler<1>::last_face () const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::face_iterator
-hpDoFHandler<1>::last_face (const unsigned int) const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::face_iterator
+ DoFHandler<1>::last_face (const unsigned int) const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_face_iterator
-hpDoFHandler<1>::last_active_face () const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_face_iterator
+ DoFHandler<1>::last_active_face () const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_face_iterator
-hpDoFHandler<1>::last_active_face (const unsigned int) const {
- Assert (false, ExcFunctionNotUseful());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_face_iterator
+ DoFHandler<1>::last_active_face (const unsigned int) const {
+ Assert (false, ExcFunctionNotUseful());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_quad_iterator
-hpDoFHandler<1>::begin_raw_quad (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_quad_iterator
+ DoFHandler<1>::begin_raw_quad (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::quad_iterator
-hpDoFHandler<1>::begin_quad (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::quad_iterator
+ DoFHandler<1>::begin_quad (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_quad_iterator
-hpDoFHandler<1>::begin_active_quad (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_quad_iterator
+ DoFHandler<1>::begin_active_quad (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_quad_iterator
-hpDoFHandler<1>::end_quad () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_quad_iterator
+ DoFHandler<1>::end_quad () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_quad_iterator
-hpDoFHandler<1>::last_raw_quad (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_quad_iterator
+ DoFHandler<1>::last_raw_quad (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::quad_iterator
-hpDoFHandler<1>::last_quad (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::quad_iterator
+ DoFHandler<1>::last_quad (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_quad_iterator
-hpDoFHandler<1>::last_active_quad (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_quad_iterator
+ DoFHandler<1>::last_active_quad (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_quad_iterator
-hpDoFHandler<1>::last_raw_quad () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_quad_iterator
+ DoFHandler<1>::last_raw_quad () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::quad_iterator
-hpDoFHandler<1>::last_quad () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::quad_iterator
+ DoFHandler<1>::last_quad () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_quad_iterator
-hpDoFHandler<1>::last_active_quad () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_quad_iterator
+ DoFHandler<1>::last_active_quad () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_hex_iterator
-hpDoFHandler<1>::begin_raw_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_hex_iterator
+ DoFHandler<1>::begin_raw_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::hex_iterator
-hpDoFHandler<1>::begin_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::hex_iterator
+ DoFHandler<1>::begin_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_hex_iterator
-hpDoFHandler<1>::begin_active_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_hex_iterator
+ DoFHandler<1>::begin_active_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_hex_iterator
-hpDoFHandler<1>::end_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_hex_iterator
+ DoFHandler<1>::end_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_hex_iterator
-hpDoFHandler<1>::last_raw_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_hex_iterator
+ DoFHandler<1>::last_raw_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::raw_hex_iterator
-hpDoFHandler<1>::last_raw_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::raw_hex_iterator
+ DoFHandler<1>::last_raw_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::hex_iterator
-hpDoFHandler<1>::last_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::hex_iterator
+ DoFHandler<1>::last_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::hex_iterator
-hpDoFHandler<1>::last_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::hex_iterator
+ DoFHandler<1>::last_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_hex_iterator
-hpDoFHandler<1>::last_active_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_hex_iterator
+ DoFHandler<1>::last_active_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<1>::active_hex_iterator
-hpDoFHandler<1>::last_active_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<1>::active_hex_iterator
+ DoFHandler<1>::last_active_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
#endif
#if deal_II_dimension == 2
-template <>
-hpDoFHandler<2>::raw_cell_iterator
-hpDoFHandler<2>::begin_raw (const unsigned int level) const {
- return begin_raw_quad (level);
-}
+ template <>
+ DoFHandler<2>::raw_cell_iterator
+ DoFHandler<2>::begin_raw (const unsigned int level) const {
+ return begin_raw_quad (level);
+ }
-template <>
-hpDoFHandler<2>::cell_iterator
-hpDoFHandler<2>::begin (const unsigned int level) const {
- return begin_quad (level);
-}
+ template <>
+ DoFHandler<2>::cell_iterator
+ DoFHandler<2>::begin (const unsigned int level) const {
+ return begin_quad (level);
+ }
-template <>
-hpDoFHandler<2>::active_cell_iterator
-hpDoFHandler<2>::begin_active (const unsigned int level) const {
- return begin_active_quad (level);
-}
+ template <>
+ DoFHandler<2>::active_cell_iterator
+ DoFHandler<2>::begin_active (const unsigned int level) const {
+ return begin_active_quad (level);
+ }
-template <>
-hpDoFHandler<2>::raw_cell_iterator
-hpDoFHandler<2>::end () const {
- return end_quad ();
-}
+ template <>
+ DoFHandler<2>::raw_cell_iterator
+ DoFHandler<2>::end () const {
+ return end_quad ();
+ }
-template <>
-hpDoFHandler<2>::raw_cell_iterator
-hpDoFHandler<2>::last_raw () const {
- return last_raw_quad ();
-}
+ template <>
+ DoFHandler<2>::raw_cell_iterator
+ DoFHandler<2>::last_raw () const {
+ return last_raw_quad ();
+ }
-template <>
-hpDoFHandler<2>::raw_cell_iterator
-hpDoFHandler<2>::last_raw (const unsigned int level) const {
- return last_raw_quad (level);
-}
+ template <>
+ DoFHandler<2>::raw_cell_iterator
+ DoFHandler<2>::last_raw (const unsigned int level) const {
+ return last_raw_quad (level);
+ }
-template <>
-hpDoFHandler<2>::cell_iterator
-hpDoFHandler<2>::last () const {
- return last_quad ();
-}
+ template <>
+ DoFHandler<2>::cell_iterator
+ DoFHandler<2>::last () const {
+ return last_quad ();
+ }
-template <>
-hpDoFHandler<2>::cell_iterator
-hpDoFHandler<2>::last (const unsigned int level) const {
- return last_quad (level);
-}
+ template <>
+ DoFHandler<2>::cell_iterator
+ DoFHandler<2>::last (const unsigned int level) const {
+ return last_quad (level);
+ }
-template <>
-hpDoFHandler<2>::active_cell_iterator
-hpDoFHandler<2>::last_active () const {
- return last_active_quad ();
-}
+ template <>
+ DoFHandler<2>::active_cell_iterator
+ DoFHandler<2>::last_active () const {
+ return last_active_quad ();
+ }
-template <>
-hpDoFHandler<2>::active_cell_iterator
-hpDoFHandler<2>::last_active (const unsigned int level) const {
- return last_active_quad (level);
-}
+ template <>
+ DoFHandler<2>::active_cell_iterator
+ DoFHandler<2>::last_active (const unsigned int level) const {
+ return last_active_quad (level);
+ }
-template <>
-hpDoFHandler<2>::raw_face_iterator
-hpDoFHandler<2>::begin_raw_face (const unsigned int level) const {
- return begin_raw_line (level);
-}
+ template <>
+ DoFHandler<2>::raw_face_iterator
+ DoFHandler<2>::begin_raw_face (const unsigned int level) const {
+ return begin_raw_line (level);
+ }
-template <>
-hpDoFHandler<2>::face_iterator
-hpDoFHandler<2>::begin_face (const unsigned int level) const {
- return begin_line (level);
-}
+ template <>
+ DoFHandler<2>::face_iterator
+ DoFHandler<2>::begin_face (const unsigned int level) const {
+ return begin_line (level);
+ }
-template <>
-hpDoFHandler<2>::active_face_iterator
-hpDoFHandler<2>::begin_active_face (const unsigned int level) const {
- return begin_active_line (level);
-}
+ template <>
+ DoFHandler<2>::active_face_iterator
+ DoFHandler<2>::begin_active_face (const unsigned int level) const {
+ return begin_active_line (level);
+ }
-template <>
-hpDoFHandler<2>::raw_face_iterator
-hpDoFHandler<2>::end_face () const {
- return end_line ();
-}
+ template <>
+ DoFHandler<2>::raw_face_iterator
+ DoFHandler<2>::end_face () const {
+ return end_line ();
+ }
-template <>
-hpDoFHandler<2>::raw_face_iterator
-hpDoFHandler<2>::last_raw_face () const {
- return last_raw_line ();
-}
+ template <>
+ DoFHandler<2>::raw_face_iterator
+ DoFHandler<2>::last_raw_face () const {
+ return last_raw_line ();
+ }
-template <>
-hpDoFHandler<2>::raw_face_iterator
-hpDoFHandler<2>::last_raw_face (const unsigned int level) const {
- return last_raw_line (level);
-}
+ template <>
+ DoFHandler<2>::raw_face_iterator
+ DoFHandler<2>::last_raw_face (const unsigned int level) const {
+ return last_raw_line (level);
+ }
-template <>
-hpDoFHandler<2>::face_iterator
-hpDoFHandler<2>::last_face () const {
- return last_line ();
-}
+ template <>
+ DoFHandler<2>::face_iterator
+ DoFHandler<2>::last_face () const {
+ return last_line ();
+ }
-template <>
-hpDoFHandler<2>::face_iterator
-hpDoFHandler<2>::last_face (const unsigned int level) const {
- return last_line (level);
-}
+ template <>
+ DoFHandler<2>::face_iterator
+ DoFHandler<2>::last_face (const unsigned int level) const {
+ return last_line (level);
+ }
-template <>
-hpDoFHandler<2>::active_face_iterator
-hpDoFHandler<2>::last_active_face () const {
- return last_active_line ();
-}
+ template <>
+ DoFHandler<2>::active_face_iterator
+ DoFHandler<2>::last_active_face () const {
+ return last_active_line ();
+ }
-template <>
-hpDoFHandler<2>::active_face_iterator
-hpDoFHandler<2>::last_active_face (const unsigned int level) const {
- return last_active_line (level);
-}
+ template <>
+ DoFHandler<2>::active_face_iterator
+ DoFHandler<2>::last_active_face (const unsigned int level) const {
+ return last_active_line (level);
+ }
-template <>
-hpDoFHandler<2>::raw_hex_iterator
-hpDoFHandler<2>::begin_raw_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::raw_hex_iterator
+ DoFHandler<2>::begin_raw_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::hex_iterator
-hpDoFHandler<2>::begin_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::hex_iterator
+ DoFHandler<2>::begin_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::active_hex_iterator
-hpDoFHandler<2>::begin_active_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::active_hex_iterator
+ DoFHandler<2>::begin_active_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::raw_hex_iterator
-hpDoFHandler<2>::end_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::raw_hex_iterator
+ DoFHandler<2>::end_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::raw_hex_iterator
-hpDoFHandler<2>::last_raw_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::raw_hex_iterator
+ DoFHandler<2>::last_raw_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::raw_hex_iterator
-hpDoFHandler<2>::last_raw_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::raw_hex_iterator
+ DoFHandler<2>::last_raw_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::hex_iterator
-hpDoFHandler<2>::last_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::hex_iterator
+ DoFHandler<2>::last_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::hex_iterator
-hpDoFHandler<2>::last_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::hex_iterator
+ DoFHandler<2>::last_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::active_hex_iterator
-hpDoFHandler<2>::last_active_hex (const unsigned int) const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::active_hex_iterator
+ DoFHandler<2>::last_active_hex (const unsigned int) const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
-template <>
-hpDoFHandler<2>::active_hex_iterator
-hpDoFHandler<2>::last_active_hex () const {
- Assert (false, ExcNotImplemented());
- return 0;
-}
+ template <>
+ DoFHandler<2>::active_hex_iterator
+ DoFHandler<2>::last_active_hex () const {
+ Assert (false, ExcNotImplemented());
+ return 0;
+ }
#endif
#if deal_II_dimension == 3
-template <>
-hpDoFHandler<3>::raw_cell_iterator
-hpDoFHandler<3>::begin_raw (const unsigned int level) const {
- return begin_raw_hex (level);
-}
+ template <>
+ DoFHandler<3>::raw_cell_iterator
+ DoFHandler<3>::begin_raw (const unsigned int level) const {
+ return begin_raw_hex (level);
+ }
-template <>
-hpDoFHandler<3>::cell_iterator
-hpDoFHandler<3>::begin (const unsigned int level) const {
- return begin_hex (level);
-}
+ template <>
+ DoFHandler<3>::cell_iterator
+ DoFHandler<3>::begin (const unsigned int level) const {
+ return begin_hex (level);
+ }
-template <>
-hpDoFHandler<3>::active_cell_iterator
-hpDoFHandler<3>::begin_active (const unsigned int level) const {
- return begin_active_hex (level);
-}
+ template <>
+ DoFHandler<3>::active_cell_iterator
+ DoFHandler<3>::begin_active (const unsigned int level) const {
+ return begin_active_hex (level);
+ }
-template <>
-hpDoFHandler<3>::raw_cell_iterator
-hpDoFHandler<3>::end () const {
- return end_hex ();
-}
+ template <>
+ DoFHandler<3>::raw_cell_iterator
+ DoFHandler<3>::end () const {
+ return end_hex ();
+ }
-template <>
-hpDoFHandler<3>::raw_cell_iterator
-hpDoFHandler<3>::last_raw () const {
- return last_raw_hex ();
-}
+ template <>
+ DoFHandler<3>::raw_cell_iterator
+ DoFHandler<3>::last_raw () const {
+ return last_raw_hex ();
+ }
-template <>
-hpDoFHandler<3>::raw_cell_iterator
-hpDoFHandler<3>::last_raw (const unsigned int level) const {
- return last_raw_hex (level);
-}
+ template <>
+ DoFHandler<3>::raw_cell_iterator
+ DoFHandler<3>::last_raw (const unsigned int level) const {
+ return last_raw_hex (level);
+ }
-template <>
-hpDoFHandler<3>::cell_iterator
-hpDoFHandler<3>::last () const {
- return last_hex ();
-}
+ template <>
+ DoFHandler<3>::cell_iterator
+ DoFHandler<3>::last () const {
+ return last_hex ();
+ }
-template <>
-hpDoFHandler<3>::cell_iterator
-hpDoFHandler<3>::last (const unsigned int level) const {
- return last_hex (level);
-}
+ template <>
+ DoFHandler<3>::cell_iterator
+ DoFHandler<3>::last (const unsigned int level) const {
+ return last_hex (level);
+ }
-template <>
-hpDoFHandler<3>::active_cell_iterator
-hpDoFHandler<3>::last_active () const {
- return last_active_hex ();
-}
+ template <>
+ DoFHandler<3>::active_cell_iterator
+ DoFHandler<3>::last_active () const {
+ return last_active_hex ();
+ }
-template <>
-hpDoFHandler<3>::active_cell_iterator
-hpDoFHandler<3>::last_active (const unsigned int level) const {
- return last_active_hex (level);
-}
+ template <>
+ DoFHandler<3>::active_cell_iterator
+ DoFHandler<3>::last_active (const unsigned int level) const {
+ return last_active_hex (level);
+ }
-template <>
-hpDoFHandler<3>::raw_face_iterator
-hpDoFHandler<3>::begin_raw_face (const unsigned int level) const {
- return begin_raw_quad (level);
-}
+ template <>
+ DoFHandler<3>::raw_face_iterator
+ DoFHandler<3>::begin_raw_face (const unsigned int level) const {
+ return begin_raw_quad (level);
+ }
-template <>
-hpDoFHandler<3>::face_iterator
-hpDoFHandler<3>::begin_face (const unsigned int level) const {
- return begin_quad (level);
-}
+ template <>
+ DoFHandler<3>::face_iterator
+ DoFHandler<3>::begin_face (const unsigned int level) const {
+ return begin_quad (level);
+ }
-template <>
-hpDoFHandler<3>::active_face_iterator
-hpDoFHandler<3>::begin_active_face (const unsigned int level) const {
- return begin_active_quad (level);
-}
+ template <>
+ DoFHandler<3>::active_face_iterator
+ DoFHandler<3>::begin_active_face (const unsigned int level) const {
+ return begin_active_quad (level);
+ }
-template <>
-hpDoFHandler<3>::raw_face_iterator
-hpDoFHandler<3>::end_face () const {
- return end_quad ();
-}
+ template <>
+ DoFHandler<3>::raw_face_iterator
+ DoFHandler<3>::end_face () const {
+ return end_quad ();
+ }
-template <>
-hpDoFHandler<3>::raw_face_iterator
-hpDoFHandler<3>::last_raw_face () const {
- return last_raw_quad ();
-}
+ template <>
+ DoFHandler<3>::raw_face_iterator
+ DoFHandler<3>::last_raw_face () const {
+ return last_raw_quad ();
+ }
-template <>
-hpDoFHandler<3>::raw_face_iterator
-hpDoFHandler<3>::last_raw_face (const unsigned int level) const {
- return last_raw_quad (level);
-}
+ template <>
+ DoFHandler<3>::raw_face_iterator
+ DoFHandler<3>::last_raw_face (const unsigned int level) const {
+ return last_raw_quad (level);
+ }
-template <>
-hpDoFHandler<3>::face_iterator
-hpDoFHandler<3>::last_face () const {
- return last_quad ();
-}
+ template <>
+ DoFHandler<3>::face_iterator
+ DoFHandler<3>::last_face () const {
+ return last_quad ();
+ }
-template <>
-hpDoFHandler<3>::face_iterator
-hpDoFHandler<3>::last_face (const unsigned int level) const {
- return last_quad (level);
-}
+ template <>
+ DoFHandler<3>::face_iterator
+ DoFHandler<3>::last_face (const unsigned int level) const {
+ return last_quad (level);
+ }
-template <>
-hpDoFHandler<3>::active_face_iterator
-hpDoFHandler<3>::last_active_face () const {
- return last_active_quad ();
-}
+ template <>
+ DoFHandler<3>::active_face_iterator
+ DoFHandler<3>::last_active_face () const {
+ return last_active_quad ();
+ }
-template <>
-hpDoFHandler<3>::active_face_iterator
-hpDoFHandler<3>::last_active_face (const unsigned int level) const {
- return last_active_quad (level);
-}
+ template <>
+ DoFHandler<3>::active_face_iterator
+ DoFHandler<3>::last_active_face (const unsigned int level) const {
+ return last_active_quad (level);
+ }
#endif
-template <int dim>
-typename hpDoFHandler<dim>::raw_line_iterator
-hpDoFHandler<dim>::begin_raw_line (const unsigned int level) const {
- return raw_line_iterator (tria,
- tria->begin_raw_line(level)->level(),
- tria->begin_raw_line(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_line_iterator
+ DoFHandler<dim>::begin_raw_line (const unsigned int level) const {
+ return raw_line_iterator (tria,
+ tria->begin_raw_line(level)->level(),
+ tria->begin_raw_line(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::line_iterator
-hpDoFHandler<dim>::begin_line (const unsigned int level) const {
- return line_iterator (tria,
- tria->begin_line(level)->level(),
- tria->begin_line(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::line_iterator
+ DoFHandler<dim>::begin_line (const unsigned int level) const {
+ return line_iterator (tria,
+ tria->begin_line(level)->level(),
+ tria->begin_line(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_line_iterator
-hpDoFHandler<dim>::begin_active_line (const unsigned int level) const {
- return active_line_iterator (tria,
- tria->begin_active_line(level)->level(),
- tria->begin_active_line(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_line_iterator
+ DoFHandler<dim>::begin_active_line (const unsigned int level) const {
+ return active_line_iterator (tria,
+ tria->begin_active_line(level)->level(),
+ tria->begin_active_line(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_quad_iterator
-hpDoFHandler<dim>::begin_raw_quad (const unsigned int level) const {
- return raw_quad_iterator (tria,
- tria->begin_raw_quad(level)->level(),
- tria->begin_raw_quad(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_quad_iterator
+ DoFHandler<dim>::begin_raw_quad (const unsigned int level) const {
+ return raw_quad_iterator (tria,
+ tria->begin_raw_quad(level)->level(),
+ tria->begin_raw_quad(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::quad_iterator
-hpDoFHandler<dim>::begin_quad (const unsigned int level) const {
- return quad_iterator (tria,
- tria->begin_quad(level)->level(),
- tria->begin_quad(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::quad_iterator
+ DoFHandler<dim>::begin_quad (const unsigned int level) const {
+ return quad_iterator (tria,
+ tria->begin_quad(level)->level(),
+ tria->begin_quad(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_quad_iterator
-hpDoFHandler<dim>::begin_active_quad (const unsigned int level) const {
- return active_quad_iterator (tria,
- tria->begin_active_quad(level)->level(),
- tria->begin_active_quad(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_quad_iterator
+ DoFHandler<dim>::begin_active_quad (const unsigned int level) const {
+ return active_quad_iterator (tria,
+ tria->begin_active_quad(level)->level(),
+ tria->begin_active_quad(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_hex_iterator
-hpDoFHandler<dim>::begin_raw_hex (const unsigned int level) const {
- return raw_hex_iterator (tria,
- tria->begin_raw_hex(level)->level(),
- tria->begin_raw_hex(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_hex_iterator
+ DoFHandler<dim>::begin_raw_hex (const unsigned int level) const {
+ return raw_hex_iterator (tria,
+ tria->begin_raw_hex(level)->level(),
+ tria->begin_raw_hex(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::hex_iterator
-hpDoFHandler<dim>::begin_hex (const unsigned int level) const {
- return hex_iterator (tria,
- tria->begin_hex(level)->level(),
- tria->begin_hex(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::hex_iterator
+ DoFHandler<dim>::begin_hex (const unsigned int level) const {
+ return hex_iterator (tria,
+ tria->begin_hex(level)->level(),
+ tria->begin_hex(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_hex_iterator
-hpDoFHandler<dim>::begin_active_hex (const unsigned int level) const {
- return active_hex_iterator (tria,
- tria->begin_active_hex(level)->level(),
- tria->begin_active_hex(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_hex_iterator
+ DoFHandler<dim>::begin_active_hex (const unsigned int level) const {
+ return active_hex_iterator (tria,
+ tria->begin_active_hex(level)->level(),
+ tria->begin_active_hex(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_line_iterator
-hpDoFHandler<dim>::end_line () const {
- return raw_line_iterator (tria, -1, -1, this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_line_iterator
+ DoFHandler<dim>::end_line () const {
+ return raw_line_iterator (tria, -1, -1, this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_quad_iterator
-hpDoFHandler<dim>::end_quad () const {
- return raw_quad_iterator (tria, -1, -1, this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_quad_iterator
+ DoFHandler<dim>::end_quad () const {
+ return raw_quad_iterator (tria, -1, -1, this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_hex_iterator
-hpDoFHandler<dim>::end_hex () const {
- return raw_hex_iterator (tria, -1, -1, this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_hex_iterator
+ DoFHandler<dim>::end_hex () const {
+ return raw_hex_iterator (tria, -1, -1, this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_cell_iterator
-hpDoFHandler<dim>::end_raw (const unsigned int level) const {
- return (level == levels.size()-1 ?
- end() :
- begin_raw (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_cell_iterator
+ DoFHandler<dim>::end_raw (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ end() :
+ begin_raw (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::cell_iterator
-hpDoFHandler<dim>::end (const unsigned int level) const {
- return (level == levels.size()-1 ?
- cell_iterator(end()) :
- begin (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::cell_iterator
+ DoFHandler<dim>::end (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ cell_iterator(end()) :
+ begin (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_cell_iterator
-hpDoFHandler<dim>::end_active (const unsigned int level) const {
- return (level == levels.size()-1 ?
- active_cell_iterator(end()) :
- begin_active (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_cell_iterator
+ DoFHandler<dim>::end_active (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ active_cell_iterator(end()) :
+ begin_active (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_face_iterator
-hpDoFHandler<dim>::end_raw_face (const unsigned int level) const {
- return (level == levels.size()-1 ?
- end_face() :
- begin_raw_face (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_face_iterator
+ DoFHandler<dim>::end_raw_face (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ end_face() :
+ begin_raw_face (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::face_iterator
-hpDoFHandler<dim>::end_face (const unsigned int level) const {
- return (level == levels.size()-1 ?
- face_iterator(end_face()) :
- begin_face (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::face_iterator
+ DoFHandler<dim>::end_face (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ face_iterator(end_face()) :
+ begin_face (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_face_iterator
-hpDoFHandler<dim>::end_active_face (const unsigned int level) const {
- return (level == levels.size()-1 ?
- active_face_iterator(end_face()) :
- begin_active_face (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_face_iterator
+ DoFHandler<dim>::end_active_face (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ active_face_iterator(end_face()) :
+ begin_active_face (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_line_iterator
-hpDoFHandler<dim>::end_raw_line (const unsigned int level) const {
- return (level == levels.size()-1 ?
- end_line() :
- begin_raw_line (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_line_iterator
+ DoFHandler<dim>::end_raw_line (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ end_line() :
+ begin_raw_line (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::line_iterator
-hpDoFHandler<dim>::end_line (const unsigned int level) const {
- return (level == levels.size()-1 ?
- line_iterator(end_line()) :
- begin_line (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::line_iterator
+ DoFHandler<dim>::end_line (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ line_iterator(end_line()) :
+ begin_line (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_line_iterator
-hpDoFHandler<dim>::end_active_line (const unsigned int level) const {
- return (level == levels.size()-1 ?
- active_line_iterator(end_line()) :
- begin_active_line (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_line_iterator
+ DoFHandler<dim>::end_active_line (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ active_line_iterator(end_line()) :
+ begin_active_line (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_quad_iterator
-hpDoFHandler<dim>::end_raw_quad (const unsigned int level) const {
- return (level == levels.size()-1 ?
- end_quad() :
- begin_raw_quad (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_quad_iterator
+ DoFHandler<dim>::end_raw_quad (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ end_quad() :
+ begin_raw_quad (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::quad_iterator
-hpDoFHandler<dim>::end_quad (const unsigned int level) const {
- return (level == levels.size()-1 ?
- quad_iterator(end_quad()) :
- begin_quad (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::quad_iterator
+ DoFHandler<dim>::end_quad (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ quad_iterator(end_quad()) :
+ begin_quad (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_quad_iterator
-hpDoFHandler<dim>::end_active_quad (const unsigned int level) const {
- return (level == levels.size()-1 ?
- active_quad_iterator(end_quad()) :
- begin_active_quad (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_quad_iterator
+ DoFHandler<dim>::end_active_quad (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ active_quad_iterator(end_quad()) :
+ begin_active_quad (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_hex_iterator
-hpDoFHandler<dim>::end_raw_hex (const unsigned int level) const {
- return (level == levels.size()-1 ?
- end_hex() :
- begin_raw_hex (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_hex_iterator
+ DoFHandler<dim>::end_raw_hex (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ end_hex() :
+ begin_raw_hex (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::hex_iterator
-hpDoFHandler<dim>::end_hex (const unsigned int level) const {
- return (level == levels.size()-1 ?
- hex_iterator(end_hex()) :
- begin_hex (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::hex_iterator
+ DoFHandler<dim>::end_hex (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ hex_iterator(end_hex()) :
+ begin_hex (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_hex_iterator
-hpDoFHandler<dim>::end_active_hex (const unsigned int level) const {
- return (level == levels.size()-1 ?
- active_hex_iterator(end_hex()) :
- begin_active_hex (level+1));
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_hex_iterator
+ DoFHandler<dim>::end_active_hex (const unsigned int level) const {
+ return (level == levels.size()-1 ?
+ active_hex_iterator(end_hex()) :
+ begin_active_hex (level+1));
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_line_iterator
-hpDoFHandler<dim>::last_raw_line (const unsigned int level) const {
- return raw_line_iterator (tria,
- tria->last_raw_line(level)->level(),
- tria->last_raw_line(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_line_iterator
+ DoFHandler<dim>::last_raw_line (const unsigned int level) const {
+ return raw_line_iterator (tria,
+ tria->last_raw_line(level)->level(),
+ tria->last_raw_line(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::line_iterator
-hpDoFHandler<dim>::last_line (const unsigned int level) const {
- return line_iterator (tria,
- tria->last_line(level)->level(),
- tria->last_line(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::line_iterator
+ DoFHandler<dim>::last_line (const unsigned int level) const {
+ return line_iterator (tria,
+ tria->last_line(level)->level(),
+ tria->last_line(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_line_iterator
-hpDoFHandler<dim>::last_active_line (const unsigned int level) const {
- return active_line_iterator (tria,
- tria->last_active_line(level)->level(),
- tria->last_active_line(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_line_iterator
+ DoFHandler<dim>::last_active_line (const unsigned int level) const {
+ return active_line_iterator (tria,
+ tria->last_active_line(level)->level(),
+ tria->last_active_line(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_quad_iterator
-hpDoFHandler<dim>::last_raw_quad (const unsigned int level) const {
- return raw_quad_iterator (tria,
- tria->last_raw_quad(level)->level(),
- tria->last_raw_quad(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_quad_iterator
+ DoFHandler<dim>::last_raw_quad (const unsigned int level) const {
+ return raw_quad_iterator (tria,
+ tria->last_raw_quad(level)->level(),
+ tria->last_raw_quad(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::quad_iterator
-hpDoFHandler<dim>::last_quad (const unsigned int level) const {
- return quad_iterator (tria,
- tria->last_quad(level)->level(),
- tria->last_quad(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::quad_iterator
+ DoFHandler<dim>::last_quad (const unsigned int level) const {
+ return quad_iterator (tria,
+ tria->last_quad(level)->level(),
+ tria->last_quad(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_quad_iterator
-hpDoFHandler<dim>::last_active_quad (const unsigned int level) const {
- return active_quad_iterator (tria,
- tria->last_active_quad(level)->level(),
- tria->last_active_quad(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_quad_iterator
+ DoFHandler<dim>::last_active_quad (const unsigned int level) const {
+ return active_quad_iterator (tria,
+ tria->last_active_quad(level)->level(),
+ tria->last_active_quad(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_hex_iterator
-hpDoFHandler<dim>::last_raw_hex (const unsigned int level) const {
- return raw_hex_iterator (tria,
- tria->last_raw_hex(level)->level(),
- tria->last_raw_hex(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_hex_iterator
+ DoFHandler<dim>::last_raw_hex (const unsigned int level) const {
+ return raw_hex_iterator (tria,
+ tria->last_raw_hex(level)->level(),
+ tria->last_raw_hex(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::hex_iterator
-hpDoFHandler<dim>::last_hex (const unsigned int level) const {
- return hex_iterator (tria,
- tria->last_hex(level)->level(),
- tria->last_hex(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::hex_iterator
+ DoFHandler<dim>::last_hex (const unsigned int level) const {
+ return hex_iterator (tria,
+ tria->last_hex(level)->level(),
+ tria->last_hex(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_hex_iterator
-hpDoFHandler<dim>::last_active_hex (const unsigned int level) const {
- return active_hex_iterator (tria,
- tria->last_active_hex(level)->level(),
- tria->last_active_hex(level)->index(),
- this);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_hex_iterator
+ DoFHandler<dim>::last_active_hex (const unsigned int level) const {
+ return active_hex_iterator (tria,
+ tria->last_active_hex(level)->level(),
+ tria->last_active_hex(level)->index(),
+ this);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_line_iterator
-hpDoFHandler<dim>::last_raw_line () const {
- return last_raw_line (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_line_iterator
+ DoFHandler<dim>::last_raw_line () const {
+ return last_raw_line (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_quad_iterator
-hpDoFHandler<dim>::last_raw_quad () const {
- return last_raw_quad (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_quad_iterator
+ DoFHandler<dim>::last_raw_quad () const {
+ return last_raw_quad (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::raw_hex_iterator
-hpDoFHandler<dim>::last_raw_hex () const {
- return last_raw_hex (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::raw_hex_iterator
+ DoFHandler<dim>::last_raw_hex () const {
+ return last_raw_hex (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::line_iterator
-hpDoFHandler<dim>::last_line () const {
- return last_line (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::line_iterator
+ DoFHandler<dim>::last_line () const {
+ return last_line (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::quad_iterator
-hpDoFHandler<dim>::last_quad () const {
- return last_quad (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::quad_iterator
+ DoFHandler<dim>::last_quad () const {
+ return last_quad (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::hex_iterator
-hpDoFHandler<dim>::last_hex () const {
- return last_hex (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::hex_iterator
+ DoFHandler<dim>::last_hex () const {
+ return last_hex (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_line_iterator
-hpDoFHandler<dim>::last_active_line () const {
- return last_active_line (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_line_iterator
+ DoFHandler<dim>::last_active_line () const {
+ return last_active_line (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_quad_iterator
-hpDoFHandler<dim>::last_active_quad () const {
- return last_active_quad (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_quad_iterator
+ DoFHandler<dim>::last_active_quad () const {
+ return last_active_quad (levels.size()-1);
+ }
-template <int dim>
-typename hpDoFHandler<dim>::active_hex_iterator
-hpDoFHandler<dim>::last_active_hex () const {
- return last_active_hex (levels.size()-1);
-}
+ template <int dim>
+ typename DoFHandler<dim>::active_hex_iterator
+ DoFHandler<dim>::last_active_hex () const {
+ return last_active_hex (levels.size()-1);
+ }
//------------------------------------------------------------------
#if deal_II_dimension == 1
-template <>
-unsigned int hpDoFHandler<1>::n_boundary_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
+ template <>
+ unsigned int DoFHandler<1>::n_boundary_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
- hpDoFHandler<1>::cell_iterator cell;
- unsigned int n = 0;
+ DoFHandler<1>::cell_iterator cell;
+ unsigned int n = 0;
- // search left-most cell
- cell = this->begin_active();
- while (!cell->at_boundary(0))
- cell = cell->neighbor(0);
- n += cell->get_fe().dofs_per_vertex;
+ // search left-most cell
+ cell = this->begin_active();
+ while (!cell->at_boundary(0))
+ cell = cell->neighbor(0);
+ n += cell->get_fe().dofs_per_vertex;
- // same with right-most cell
- cell = this->begin_active();
- while (!cell->at_boundary(1))
- cell = cell->neighbor(1);
- n += cell->get_fe().dofs_per_vertex;
+ // same with right-most cell
+ cell = this->begin_active();
+ while (!cell->at_boundary(1))
+ cell = cell->neighbor(1);
+ n += cell->get_fe().dofs_per_vertex;
- return n;
-}
+ return n;
+ }
-template <>
-unsigned int hpDoFHandler<1>::n_boundary_dofs (const FunctionMap &boundary_indicators) const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
-
- // check that only boundary
- // indicators 0 and 1 are allowed
- // in 1d
- for (FunctionMap::const_iterator i=boundary_indicators.begin();
- i!=boundary_indicators.end(); ++i)
- Assert ((i->first == 0) || (i->first == 1),
- ExcInvalidBoundaryIndicator());
+ template <>
+ unsigned int DoFHandler<1>::n_boundary_dofs (const FunctionMap &boundary_indicators) const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+
+ // check that only boundary
+ // indicators 0 and 1 are allowed
+ // in 1d
+ for (FunctionMap::const_iterator i=boundary_indicators.begin();
+ i!=boundary_indicators.end(); ++i)
+ Assert ((i->first == 0) || (i->first == 1),
+ ExcInvalidBoundaryIndicator());
- hpDoFHandler<1>::active_cell_iterator cell;
- unsigned int n = 0;
+ DoFHandler<1>::active_cell_iterator cell;
+ unsigned int n = 0;
- // search left-most cell
- if (boundary_indicators.find (0) != boundary_indicators.end())
- {
- cell = this->begin_active();
- while (!cell->at_boundary(0))
- cell = cell->neighbor(0);
- n += cell->get_fe().dofs_per_vertex;
- }
+ // search left-most cell
+ if (boundary_indicators.find (0) != boundary_indicators.end())
+ {
+ cell = this->begin_active();
+ while (!cell->at_boundary(0))
+ cell = cell->neighbor(0);
+ n += cell->get_fe().dofs_per_vertex;
+ }
- // same with right-most cell
- if (boundary_indicators.find (1) != boundary_indicators.end())
- {
- cell = this->begin_active();
- while (!cell->at_boundary(1))
- cell = cell->neighbor(1);
- n += cell->get_fe().dofs_per_vertex;
- }
+ // same with right-most cell
+ if (boundary_indicators.find (1) != boundary_indicators.end())
+ {
+ cell = this->begin_active();
+ while (!cell->at_boundary(1))
+ cell = cell->neighbor(1);
+ n += cell->get_fe().dofs_per_vertex;
+ }
- return n;
-}
+ return n;
+ }
-template <>
-unsigned int hpDoFHandler<1>::n_boundary_dofs (const std::set<unsigned char> &boundary_indicators) const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
-
- // check that only boundary
- // indicators 0 and 1 are allowed
- // in 1d
- for (std::set<unsigned char>::const_iterator i=boundary_indicators.begin();
- i!=boundary_indicators.end(); ++i)
- Assert ((*i == 0) || (*i == 1),
- ExcInvalidBoundaryIndicator());
+ template <>
+ unsigned int DoFHandler<1>::n_boundary_dofs (const std::set<unsigned char> &boundary_indicators) const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+
+ // check that only boundary
+ // indicators 0 and 1 are allowed
+ // in 1d
+ for (std::set<unsigned char>::const_iterator i=boundary_indicators.begin();
+ i!=boundary_indicators.end(); ++i)
+ Assert ((*i == 0) || (*i == 1),
+ ExcInvalidBoundaryIndicator());
- hpDoFHandler<1>::active_cell_iterator cell;
- unsigned int n = 0;
+ DoFHandler<1>::active_cell_iterator cell;
+ unsigned int n = 0;
- // search left-most cell
- if (boundary_indicators.find (0) != boundary_indicators.end())
- {
- cell = this->begin_active();
- while (!cell->at_boundary(0))
- cell = cell->neighbor(0);
- n += cell->get_fe().dofs_per_vertex;
- }
+ // search left-most cell
+ if (boundary_indicators.find (0) != boundary_indicators.end())
+ {
+ cell = this->begin_active();
+ while (!cell->at_boundary(0))
+ cell = cell->neighbor(0);
+ n += cell->get_fe().dofs_per_vertex;
+ }
- // same with right-most cell
- if (boundary_indicators.find (1) != boundary_indicators.end())
- {
- cell = this->begin_active();
- while (!cell->at_boundary(1))
- cell = cell->neighbor(1);
- n += cell->get_fe().dofs_per_vertex;
- }
+ // same with right-most cell
+ if (boundary_indicators.find (1) != boundary_indicators.end())
+ {
+ cell = this->begin_active();
+ while (!cell->at_boundary(1))
+ cell = cell->neighbor(1);
+ n += cell->get_fe().dofs_per_vertex;
+ }
- return n;
-}
+ return n;
+ }
#endif
-template <int dim>
-unsigned int hpDoFHandler<dim>::n_boundary_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
-
- std::set<int> boundary_dofs;
- std::vector<unsigned int> dofs_on_face;
- dofs_on_face.reserve (this->get_fe ().max_dofs_per_face());
-
- // loop over all faces to check
- // whether they are at a
- // boundary. note that we need not
- // take special care of single
- // lines in 3d (using
- // @p{cell->has_boundary_lines}),
- // since we do not support
- // boundaries of dimension dim-2,
- // and so every boundary line is
- // also part of a boundary face.
- typename hpDoFHandler<dim>::active_cell_iterator cell = this->begin_active (),
+ template <int dim>
+ unsigned int DoFHandler<dim>::n_boundary_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+
+ std::set<int> boundary_dofs;
+ std::vector<unsigned int> dofs_on_face;
+ dofs_on_face.reserve (this->get_fe ().max_dofs_per_face());
+
+ // loop over all faces to check
+ // whether they are at a
+ // boundary. note that we need not
+ // take special care of single
+ // lines in 3d (using
+ // @p{cell->has_boundary_lines}),
+ // since we do not support
+ // boundaries of dimension dim-2,
+ // and so every boundary line is
+ // also part of a boundary face.
+ typename DoFHandler<dim>::active_cell_iterator cell = this->begin_active (),
endc = this->end();
- for (; cell!=endc; ++cell)
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- if (cell->at_boundary(f))
- {
- const unsigned int dofs_per_face = cell->get_fe().dofs_per_face;
- dofs_on_face.resize (dofs_per_face);
+ for (; cell!=endc; ++cell)
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ const unsigned int dofs_per_face = cell->get_fe().dofs_per_face;
+ dofs_on_face.resize (dofs_per_face);
- cell->face(f)->get_dof_indices (dofs_on_face);
- for (unsigned int i=0; i<dofs_per_face; ++i)
- boundary_dofs.insert(dofs_on_face[i]);
- };
- return boundary_dofs.size();
-}
+ cell->face(f)->get_dof_indices (dofs_on_face);
+ for (unsigned int i=0; i<dofs_per_face; ++i)
+ boundary_dofs.insert(dofs_on_face[i]);
+ };
+ return boundary_dofs.size();
+ }
-template <int dim>
-unsigned int
-hpDoFHandler<dim>::n_boundary_dofs (const FunctionMap &boundary_indicators) const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
- Assert (boundary_indicators.find(255) == boundary_indicators.end(),
- ExcInvalidBoundaryIndicator());
+ template <int dim>
+ unsigned int
+ DoFHandler<dim>::n_boundary_dofs (const FunctionMap &boundary_indicators) const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+ Assert (boundary_indicators.find(255) == boundary_indicators.end(),
+ ExcInvalidBoundaryIndicator());
- // same as above, but with
- // additional checks for set of
- // boundary indicators
- std::set<int> boundary_dofs;
- std::vector<unsigned int> dofs_on_face;
- dofs_on_face.reserve (this->get_fe ().max_dofs_per_face());
-
- typename hpDoFHandler<dim>::active_cell_iterator cell = this->begin_active (),
+ // same as above, but with
+ // additional checks for set of
+ // boundary indicators
+ std::set<int> boundary_dofs;
+ std::vector<unsigned int> dofs_on_face;
+ dofs_on_face.reserve (this->get_fe ().max_dofs_per_face());
+
+ typename DoFHandler<dim>::active_cell_iterator cell = this->begin_active (),
endc = this->end();
- for (; cell!=endc; ++cell)
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- if (cell->at_boundary(f) &&
- (boundary_indicators.find(cell->face(f)->boundary_indicator()) !=
- boundary_indicators.end()))
- {
- const unsigned int dofs_per_face = cell->get_fe().dofs_per_face;
- dofs_on_face.resize (dofs_per_face);
+ for (; cell!=endc; ++cell)
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f) &&
+ (boundary_indicators.find(cell->face(f)->boundary_indicator()) !=
+ boundary_indicators.end()))
+ {
+ const unsigned int dofs_per_face = cell->get_fe().dofs_per_face;
+ dofs_on_face.resize (dofs_per_face);
- cell->face(f)->get_dof_indices (dofs_on_face);
- for (unsigned int i=0; i<dofs_per_face; ++i)
- boundary_dofs.insert(dofs_on_face[i]);
- };
- return boundary_dofs.size();
-}
+ cell->face(f)->get_dof_indices (dofs_on_face);
+ for (unsigned int i=0; i<dofs_per_face; ++i)
+ boundary_dofs.insert(dofs_on_face[i]);
+ };
+ return boundary_dofs.size();
+ }
-template <int dim>
-unsigned int
-hpDoFHandler<dim>::n_boundary_dofs (const std::set<unsigned char> &boundary_indicators) const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
- Assert (boundary_indicators.find (255) == boundary_indicators.end(),
- ExcInvalidBoundaryIndicator());
-
- // same as above, but with
- // additional checks for set of
- // boundary indicators
- std::set<int> boundary_dofs;
- std::vector<unsigned int> dofs_on_face;
- dofs_on_face.reserve (this->get_fe ().max_dofs_per_face());
-
- typename hpDoFHandler<dim>::active_cell_iterator cell = this->begin_active (),
+ template <int dim>
+ unsigned int
+ DoFHandler<dim>::n_boundary_dofs (const std::set<unsigned char> &boundary_indicators) const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+ Assert (boundary_indicators.find (255) == boundary_indicators.end(),
+ ExcInvalidBoundaryIndicator());
+
+ // same as above, but with
+ // additional checks for set of
+ // boundary indicators
+ std::set<int> boundary_dofs;
+ std::vector<unsigned int> dofs_on_face;
+ dofs_on_face.reserve (this->get_fe ().max_dofs_per_face());
+
+ typename DoFHandler<dim>::active_cell_iterator cell = this->begin_active (),
endc = this->end();
- for (; cell!=endc; ++cell)
- for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
- if (cell->at_boundary(f) &&
- (boundary_indicators.find(cell->face(f)->boundary_indicator()) !=
- boundary_indicators.end()))
- {
- const unsigned int dofs_per_face = cell->get_fe().dofs_per_face;
- dofs_on_face.resize (dofs_per_face);
+ for (; cell!=endc; ++cell)
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f) &&
+ (boundary_indicators.find(cell->face(f)->boundary_indicator()) !=
+ boundary_indicators.end()))
+ {
+ const unsigned int dofs_per_face = cell->get_fe().dofs_per_face;
+ dofs_on_face.resize (dofs_per_face);
- cell->face(f)->get_dof_indices (dofs_on_face);
- for (unsigned int i=0; i<dofs_per_face; ++i)
- boundary_dofs.insert(dofs_on_face[i]);
- };
- return boundary_dofs.size();
-}
+ cell->face(f)->get_dof_indices (dofs_on_face);
+ for (unsigned int i=0; i<dofs_per_face; ++i)
+ boundary_dofs.insert(dofs_on_face[i]);
+ };
+ return boundary_dofs.size();
+ }
-template <int dim>
-unsigned int
-hpDoFHandler<dim>::memory_consumption () const
-{
- unsigned int mem = (MemoryConsumption::memory_consumption (tria) +
- MemoryConsumption::memory_consumption (finite_elements) +
- MemoryConsumption::memory_consumption (tria) +
- MemoryConsumption::memory_consumption (levels) +
- MemoryConsumption::memory_consumption (used_dofs) +
- MemoryConsumption::memory_consumption (vertex_dofs));
- for (unsigned int i=0; i<levels.size(); ++i)
- mem += MemoryConsumption::memory_consumption (*levels[i]);
+ template <int dim>
+ unsigned int
+ DoFHandler<dim>::memory_consumption () const
+ {
+ unsigned int mem = (MemoryConsumption::memory_consumption (tria) +
+ MemoryConsumption::memory_consumption (finite_elements) +
+ MemoryConsumption::memory_consumption (tria) +
+ MemoryConsumption::memory_consumption (levels) +
+ MemoryConsumption::memory_consumption (used_dofs) +
+ MemoryConsumption::memory_consumption (vertex_dofs));
+ for (unsigned int i=0; i<levels.size(); ++i)
+ mem += MemoryConsumption::memory_consumption (*levels[i]);
- return mem;
-}
+ return mem;
+ }
-template <int dim>
-void hpDoFHandler<dim>::distribute_dofs (const FECollection<dim> &ff)
-{
- Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
+ template <int dim>
+ void DoFHandler<dim>::distribute_dofs (const FECollection<dim> &ff)
+ {
+ Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
- finite_elements = &ff;
+ finite_elements = &ff;
- // This call ensures, the active_fe_indices
- // vectors are initialized correctly.
- create_active_fe_table ();
-
- reserve_space ();
-
- // Clear user flags because we will
- // need them. But first we save
- // them and make sure that we
- // restore them later such that at
- // the end of this function the
- // Triangulation will be in the
- // same state as it was at the
- // beginning of this function.
- std::vector<bool> user_flags;
- tria->save_user_flags(user_flags);
- const_cast<Triangulation<dim> &>(*tria).clear_user_flags ();
+ // This call ensures, the active_fe_indices
+ // vectors are initialized correctly.
+ create_active_fe_table ();
+
+ reserve_space ();
+
+ // Clear user flags because we will
+ // need them. But first we save
+ // them and make sure that we
+ // restore them later such that at
+ // the end of this function the
+ // Triangulation will be in the
+ // same state as it was at the
+ // beginning of this function.
+ std::vector<bool> user_flags;
+ tria->save_user_flags(user_flags);
+ const_cast<Triangulation<dim> &>(*tria).clear_user_flags ();
- unsigned int next_free_dof = 0;
- active_cell_iterator cell = begin_active(),
- endc = end();
+ unsigned int next_free_dof = 0;
+ active_cell_iterator cell = begin_active(),
+ endc = end();
- for (; cell != endc; ++cell)
- next_free_dof = distribute_dofs_on_cell (cell, next_free_dof);
+ for (; cell != endc; ++cell)
+ next_free_dof = distribute_dofs_on_cell (cell, next_free_dof);
- used_dofs = next_free_dof;
+ used_dofs = next_free_dof;
- // finally restore the user flags
- const_cast<Triangulation<dim> &>(*tria).load_user_flags(user_flags);
-}
+ // finally restore the user flags
+ const_cast<Triangulation<dim> &>(*tria).load_user_flags(user_flags);
+ }
-template <int dim>
-void hpDoFHandler<dim>::clear ()
-{
- // release lock to old fe
- finite_elements = 0;
+ template <int dim>
+ void DoFHandler<dim>::clear ()
+ {
+ // release lock to old fe
+ finite_elements = 0;
- // release memory
- clear_space ();
-}
+ // release memory
+ clear_space ();
+ }
#if deal_II_dimension == 1
-template <>
-unsigned int
-hpDoFHandler<1>::distribute_dofs_on_cell (active_cell_iterator &cell,
+ template <>
+ unsigned int
+ DoFHandler<1>::distribute_dofs_on_cell (active_cell_iterator &cell,
unsigned int next_free_dof)
-{
- // get the fe for this cell
- const FiniteElement<1> &fe = cell->get_fe();
-
- // distribute dofs of vertices
- for (unsigned int v=0; v<GeometryInfo<1>::vertices_per_cell; ++v)
- {
- cell_iterator neighbor = cell->neighbor(v);
-
- if (neighbor.state() == IteratorState::valid)
- {
- // find true neighbor; may be its
- // a child of @p{neighbor}
- while (neighbor->has_children())
- neighbor = neighbor->child(v==0 ? 1 : 0);
-
- // has neighbor already been processed?
- if (neighbor->user_flag_set())
- // copy dofs
- {
- if (v==0)
- for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
- cell->set_vertex_dof_index (0, d,
- neighbor->vertex_dof_index (1, d));
- else
- for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
- cell->set_vertex_dof_index (1, d,
- neighbor->vertex_dof_index (0, d));
-
- // next neighbor
- continue;
- };
- };
+ {
+ // get the fe for this cell
+ const FiniteElement<1> &fe = cell->get_fe();
+
+ // distribute dofs of vertices
+ for (unsigned int v=0; v<GeometryInfo<1>::vertices_per_cell; ++v)
+ {
+ cell_iterator neighbor = cell->neighbor(v);
+
+ if (neighbor.state() == IteratorState::valid)
+ {
+ // find true neighbor; may be its
+ // a child of @p{neighbor}
+ while (neighbor->has_children())
+ neighbor = neighbor->child(v==0 ? 1 : 0);
+
+ // has neighbor already been processed?
+ if (neighbor->user_flag_set())
+ // copy dofs
+ {
+ if (v==0)
+ for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
+ cell->set_vertex_dof_index (0, d,
+ neighbor->vertex_dof_index (1, d));
+ else
+ for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
+ cell->set_vertex_dof_index (1, d,
+ neighbor->vertex_dof_index (0, d));
+
+ // next neighbor
+ continue;
+ };
+ };
- // otherwise: create dofs newly
- for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
- cell->set_vertex_dof_index (v, d, next_free_dof++);
- };
+ // otherwise: create dofs newly
+ for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
+ cell->set_vertex_dof_index (v, d, next_free_dof++);
+ };
- // dofs of line
- for (unsigned int d=0; d<fe.dofs_per_line; ++d)
- cell->set_dof_index (d, next_free_dof++);
+ // dofs of line
+ for (unsigned int d=0; d<fe.dofs_per_line; ++d)
+ cell->set_dof_index (d, next_free_dof++);
- // note that this cell has been processed
- cell->set_user_flag ();
+ // note that this cell has been processed
+ cell->set_user_flag ();
- return next_free_dof;
-}
+ return next_free_dof;
+ }
#endif
#if deal_II_dimension == 2
-template <>
-unsigned int
-hpDoFHandler<2>::distribute_dofs_on_cell (active_cell_iterator &cell,
+ template <>
+ unsigned int
+ DoFHandler<2>::distribute_dofs_on_cell (active_cell_iterator &cell,
unsigned int next_free_dof)
-{
- // get the fe for this cell
- const FiniteElement<2> &fe = cell->get_fe();
-
- if (fe.dofs_per_vertex > 0)
- // number dofs on vertices
- for (unsigned int vertex=0; vertex<GeometryInfo<2>::vertices_per_cell; ++vertex)
- // check whether dofs for this
- // vertex have been distributed
- // (only check the first dof)
- if (cell->vertex_dof_index(vertex, 0) == invalid_dof_index)
- for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
- cell->set_vertex_dof_index (vertex, d, next_free_dof++);
+ {
+ // get the fe for this cell
+ const FiniteElement<2> &fe = cell->get_fe();
+
+ if (fe.dofs_per_vertex > 0)
+ // number dofs on vertices
+ for (unsigned int vertex=0; vertex<GeometryInfo<2>::vertices_per_cell; ++vertex)
+ // check whether dofs for this
+ // vertex have been distributed
+ // (only check the first dof)
+ if (cell->vertex_dof_index(vertex, 0) == invalid_dof_index)
+ for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
+ cell->set_vertex_dof_index (vertex, d, next_free_dof++);
- // for the four sides
+ // for the four sides
//TODO[?] Does not work for continuous FEs
- if (fe.dofs_per_line > 0)
- for (unsigned int side=0; side<GeometryInfo<2>::faces_per_cell; ++side)
- {
- line_iterator line = cell->line(side);
-
- // distribute dofs if necessary:
- // check whether line dof is already
- // numbered (check only first dof)
- if (line->dof_index(0) == invalid_dof_index)
- // if not: distribute dofs
- for (unsigned int d=0; d<fe.dofs_per_line; ++d)
- line->set_dof_index (d, next_free_dof++);
- };
+ if (fe.dofs_per_line > 0)
+ for (unsigned int side=0; side<GeometryInfo<2>::faces_per_cell; ++side)
+ {
+ line_iterator line = cell->line(side);
+
+ // distribute dofs if necessary:
+ // check whether line dof is already
+ // numbered (check only first dof)
+ if (line->dof_index(0) == invalid_dof_index)
+ // if not: distribute dofs
+ for (unsigned int d=0; d<fe.dofs_per_line; ++d)
+ line->set_dof_index (d, next_free_dof++);
+ };
- // dofs of quad
- if (fe.dofs_per_quad > 0)
- for (unsigned int d=0; d<fe.dofs_per_quad; ++d)
- cell->set_dof_index (d, next_free_dof++);
+ // dofs of quad
+ if (fe.dofs_per_quad > 0)
+ for (unsigned int d=0; d<fe.dofs_per_quad; ++d)
+ cell->set_dof_index (d, next_free_dof++);
- // note that this cell has been processed
- cell->set_user_flag ();
+ // note that this cell has been processed
+ cell->set_user_flag ();
- return next_free_dof;
-}
+ return next_free_dof;
+ }
#endif
#if deal_II_dimension == 3
-template <>
-unsigned int
-hpDoFHandler<3>::distribute_dofs_on_cell (active_cell_iterator &cell,
+ template <>
+ unsigned int
+ DoFHandler<3>::distribute_dofs_on_cell (active_cell_iterator &cell,
unsigned int next_free_dof)
-{
- // get the fe for this cell
- const FiniteElement<3> &fe = cell->get_fe();
-
- if (fe.dofs_per_vertex > 0)
- // number dofs on vertices
- for (unsigned int vertex=0; vertex<GeometryInfo<3>::vertices_per_cell; ++vertex)
- // check whether dofs for this
- // vertex have been distributed
- // (only check the first dof)
- if (cell->vertex_dof_index(vertex, 0) == invalid_dof_index)
- for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
- cell->set_vertex_dof_index (vertex, d, next_free_dof++);
+ {
+ // get the fe for this cell
+ const FiniteElement<3> &fe = cell->get_fe();
+
+ if (fe.dofs_per_vertex > 0)
+ // number dofs on vertices
+ for (unsigned int vertex=0; vertex<GeometryInfo<3>::vertices_per_cell; ++vertex)
+ // check whether dofs for this
+ // vertex have been distributed
+ // (only check the first dof)
+ if (cell->vertex_dof_index(vertex, 0) == invalid_dof_index)
+ for (unsigned int d=0; d<fe.dofs_per_vertex; ++d)
+ cell->set_vertex_dof_index (vertex, d, next_free_dof++);
- // for the lines
- if (fe.dofs_per_line > 0)
- for (unsigned int l=0; l<GeometryInfo<3>::lines_per_cell; ++l)
- {
- line_iterator line = cell->line(l);
+ // for the lines
+ if (fe.dofs_per_line > 0)
+ for (unsigned int l=0; l<GeometryInfo<3>::lines_per_cell; ++l)
+ {
+ line_iterator line = cell->line(l);
- // distribute dofs if necessary:
- // check whether line dof is already
- // numbered (check only first dof)
- if (line->dof_index(0) == invalid_dof_index)
- // if not: distribute dofs
- for (unsigned int d=0; d<fe.dofs_per_line; ++d)
- line->set_dof_index (d, next_free_dof++);
- };
+ // distribute dofs if necessary:
+ // check whether line dof is already
+ // numbered (check only first dof)
+ if (line->dof_index(0) == invalid_dof_index)
+ // if not: distribute dofs
+ for (unsigned int d=0; d<fe.dofs_per_line; ++d)
+ line->set_dof_index (d, next_free_dof++);
+ };
- // for the quads
- if (fe.dofs_per_quad > 0)
- for (unsigned int q=0; q<GeometryInfo<3>::quads_per_cell; ++q)
- {
- quad_iterator quad = cell->quad(q);
+ // for the quads
+ if (fe.dofs_per_quad > 0)
+ for (unsigned int q=0; q<GeometryInfo<3>::quads_per_cell; ++q)
+ {
+ quad_iterator quad = cell->quad(q);
- // distribute dofs if necessary:
- // check whether quad dof is already
- // numbered (check only first dof)
- if (quad->dof_index(0) == invalid_dof_index)
- // if not: distribute dofs
- for (unsigned int d=0; d<fe.dofs_per_quad; ++d)
- quad->set_dof_index (d, next_free_dof++);
- };
+ // distribute dofs if necessary:
+ // check whether quad dof is already
+ // numbered (check only first dof)
+ if (quad->dof_index(0) == invalid_dof_index)
+ // if not: distribute dofs
+ for (unsigned int d=0; d<fe.dofs_per_quad; ++d)
+ quad->set_dof_index (d, next_free_dof++);
+ };
- // dofs of hex
- if (fe.dofs_per_hex > 0)
- for (unsigned int d=0; d<fe.dofs_per_hex; ++d)
- cell->set_dof_index (d, next_free_dof++);
+ // dofs of hex
+ if (fe.dofs_per_hex > 0)
+ for (unsigned int d=0; d<fe.dofs_per_hex; ++d)
+ cell->set_dof_index (d, next_free_dof++);
- // note that this cell has been processed
- cell->set_user_flag ();
+ // note that this cell has been processed
+ cell->set_user_flag ();
- return next_free_dof;
-}
+ return next_free_dof;
+ }
#endif
#if deal_II_dimension == 1
-template <>
-void hpDoFHandler<1>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
-{
- Assert (new_numbers.size() == n_dofs(), ExcRenumberingIncomplete());
+ template <>
+ void DoFHandler<1>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
+ {
+ Assert (new_numbers.size() == n_dofs(), ExcRenumberingIncomplete());
#ifdef DEBUG
- // assert that the new indices are
- // consecutively numbered
- if (true)
- {
- std::vector<unsigned int> tmp(new_numbers);
- std::sort (tmp.begin(), tmp.end());
- std::vector<unsigned int>::const_iterator p = tmp.begin();
- unsigned int i = 0;
- for (; p!=tmp.end(); ++p, ++i)
- Assert (*p == i, ExcNewNumbersNotConsecutive(i));
- };
+ // assert that the new indices are
+ // consecutively numbered
+ if (true)
+ {
+ std::vector<unsigned int> tmp(new_numbers);
+ std::sort (tmp.begin(), tmp.end());
+ std::vector<unsigned int>::const_iterator p = tmp.begin();
+ unsigned int i = 0;
+ for (; p!=tmp.end(); ++p, ++i)
+ Assert (*p == i, ExcNewNumbersNotConsecutive(i));
+ };
#endif
- // note that we can not use cell iterators
- // in this function since then we would
- // renumber the dofs on the interface of
- // two cells more than once. Anyway, this
- // way it's not only more correct but also
- // faster; note, however, that dof numbers
- // may be invalid_dof_index, namely when the appropriate
- // vertex/line/etc is unused
- for (std::vector<unsigned int>::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
-
- for (unsigned int level=0; level<levels.size(); ++level)
- for (std::vector<unsigned int>::iterator i=levels[level]->line_dofs.begin();
- i!=levels[level]->line_dofs.end(); ++i)
+ // note that we can not use cell iterators
+ // in this function since then we would
+ // renumber the dofs on the interface of
+ // two cells more than once. Anyway, this
+ // way it's not only more correct but also
+ // faster; note, however, that dof numbers
+ // may be invalid_dof_index, namely when the appropriate
+ // vertex/line/etc is unused
+ for (std::vector<unsigned int>::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i)
if (*i != invalid_dof_index)
- *i = new_numbers[*i];
-}
+ *i = new_numbers[*i];
+
+ for (unsigned int level=0; level<levels.size(); ++level)
+ for (std::vector<unsigned int>::iterator i=levels[level]->line_dofs.begin();
+ i!=levels[level]->line_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
+ }
#endif
#if deal_II_dimension == 2
-template <>
-void hpDoFHandler<2>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
-{
- Assert (new_numbers.size() == n_dofs(), ExcRenumberingIncomplete());
+ template <>
+ void DoFHandler<2>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
+ {
+ Assert (new_numbers.size() == n_dofs(), ExcRenumberingIncomplete());
#ifdef DEBUG
- // assert that the new indices are
- // consecutively numbered
- if (true)
- {
- std::vector<unsigned int> tmp(new_numbers);
- std::sort (tmp.begin(), tmp.end());
- std::vector<unsigned int>::const_iterator p = tmp.begin();
- unsigned int i = 0;
- for (; p!=tmp.end(); ++p, ++i)
- Assert (*p == i, ExcNewNumbersNotConsecutive(i));
- };
+ // assert that the new indices are
+ // consecutively numbered
+ if (true)
+ {
+ std::vector<unsigned int> tmp(new_numbers);
+ std::sort (tmp.begin(), tmp.end());
+ std::vector<unsigned int>::const_iterator p = tmp.begin();
+ unsigned int i = 0;
+ for (; p!=tmp.end(); ++p, ++i)
+ Assert (*p == i, ExcNewNumbersNotConsecutive(i));
+ };
#endif
- // note that we can not use cell iterators
- // in this function since then we would
- // renumber the dofs on the interface of
- // two cells more than once. Anyway, this
- // way it's not only more correct but also
- // faster; note, however, that dof numbers
- // may be invalid_dof_index, namely when the appropriate
- // vertex/line/etc is unused
- for (std::vector<unsigned int>::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
+ // note that we can not use cell iterators
+ // in this function since then we would
+ // renumber the dofs on the interface of
+ // two cells more than once. Anyway, this
+ // way it's not only more correct but also
+ // faster; note, however, that dof numbers
+ // may be invalid_dof_index, namely when the appropriate
+ // vertex/line/etc is unused
+ for (std::vector<unsigned int>::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
- for (unsigned int level=0; level<levels.size(); ++level)
- {
- for (std::vector<unsigned int>::iterator i=levels[level]->line_dofs.begin();
- i!=levels[level]->line_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
- for (std::vector<unsigned int>::iterator i=levels[level]->quad_dofs.begin();
- i!=levels[level]->quad_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
- };
-}
+ for (unsigned int level=0; level<levels.size(); ++level)
+ {
+ for (std::vector<unsigned int>::iterator i=levels[level]->line_dofs.begin();
+ i!=levels[level]->line_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
+ for (std::vector<unsigned int>::iterator i=levels[level]->quad_dofs.begin();
+ i!=levels[level]->quad_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
+ };
+ }
#endif
#if deal_II_dimension == 3
-template <>
-void hpDoFHandler<3>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
-{
- Assert (new_numbers.size() == n_dofs(), ExcRenumberingIncomplete());
+ template <>
+ void DoFHandler<3>::renumber_dofs (const std::vector<unsigned int> &new_numbers)
+ {
+ Assert (new_numbers.size() == n_dofs(), ExcRenumberingIncomplete());
#ifdef DEBUG
- // assert that the new indices are
- // consecutively numbered
- if (true)
- {
- std::vector<unsigned int> tmp(new_numbers);
- std::sort (tmp.begin(), tmp.end());
- std::vector<unsigned int>::const_iterator p = tmp.begin();
- unsigned int i = 0;
- for (; p!=tmp.end(); ++p, ++i)
- Assert (*p == i, ExcNewNumbersNotConsecutive(i));
- };
+ // assert that the new indices are
+ // consecutively numbered
+ if (true)
+ {
+ std::vector<unsigned int> tmp(new_numbers);
+ std::sort (tmp.begin(), tmp.end());
+ std::vector<unsigned int>::const_iterator p = tmp.begin();
+ unsigned int i = 0;
+ for (; p!=tmp.end(); ++p, ++i)
+ Assert (*p == i, ExcNewNumbersNotConsecutive(i));
+ };
#endif
- // note that we can not use cell iterators
- // in this function since then we would
- // renumber the dofs on the interface of
- // two cells more than once. Anyway, this
- // way it's not only more correct but also
- // faster; note, however, that dof numbers
- // may be invalid_dof_index, namely when the appropriate
- // vertex/line/etc is unused
- for (std::vector<unsigned int>::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
+ // note that we can not use cell iterators
+ // in this function since then we would
+ // renumber the dofs on the interface of
+ // two cells more than once. Anyway, this
+ // way it's not only more correct but also
+ // faster; note, however, that dof numbers
+ // may be invalid_dof_index, namely when the appropriate
+ // vertex/line/etc is unused
+ for (std::vector<unsigned int>::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
- for (unsigned int level=0; level<levels.size(); ++level)
- {
- for (std::vector<unsigned int>::iterator i=levels[level]->line_dofs.begin();
- i!=levels[level]->line_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
- for (std::vector<unsigned int>::iterator i=levels[level]->quad_dofs.begin();
- i!=levels[level]->quad_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
- for (std::vector<unsigned int>::iterator i=levels[level]->hex_dofs.begin();
- i!=levels[level]->hex_dofs.end(); ++i)
- if (*i != invalid_dof_index)
- *i = new_numbers[*i];
- };
-}
+ for (unsigned int level=0; level<levels.size(); ++level)
+ {
+ for (std::vector<unsigned int>::iterator i=levels[level]->line_dofs.begin();
+ i!=levels[level]->line_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
+ for (std::vector<unsigned int>::iterator i=levels[level]->quad_dofs.begin();
+ i!=levels[level]->quad_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
+ for (std::vector<unsigned int>::iterator i=levels[level]->hex_dofs.begin();
+ i!=levels[level]->hex_dofs.end(); ++i)
+ if (*i != invalid_dof_index)
+ *i = new_numbers[*i];
+ };
+ }
#endif
#if deal_II_dimension == 1
-template <>
-unsigned int
-hpDoFHandler<1>::max_couplings_between_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
- return std::min(3*finite_elements->max_dofs_per_vertex() +
- 2*finite_elements->max_dofs_per_line(), n_dofs());
-}
+ template <>
+ unsigned int
+ DoFHandler<1>::max_couplings_between_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+ return std::min(3*finite_elements->max_dofs_per_vertex() +
+ 2*finite_elements->max_dofs_per_line(), n_dofs());
+ }
-template <>
-unsigned int
-hpDoFHandler<1>::max_couplings_between_boundary_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
- return finite_elements->max_dofs_per_vertex();
-}
+ template <>
+ unsigned int
+ DoFHandler<1>::max_couplings_between_boundary_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+ return finite_elements->max_dofs_per_vertex();
+ }
#endif
#if deal_II_dimension == 2
-template <>
-unsigned int
-hpDoFHandler<2>::max_couplings_between_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
-
- // get these numbers by drawing pictures
- // and counting...
- // example:
- // | | |
- // --x-----x--x--X--
- // | | | |
- // | x--x--x
- // | | | |
- // --x--x--*--x--x--
- // | | | |
- // x--x--x |
- // | | | |
- // --X--x--x-----x--
- // | | |
- // x = vertices connected with center vertex *;
- // = total of 19
- // (the X vertices are connected with * if
- // the vertices adjacent to X are hanging
- // nodes)
- // count lines -> 28 (don't forget to count
- // mother and children separately!)
- unsigned int max_couplings;
- switch (tria->max_adjacent_cells())
- {
- case 4:
- max_couplings=19*finite_elements->max_dofs_per_vertex() +
- 28*finite_elements->max_dofs_per_line() +
- 8*finite_elements->max_dofs_per_quad();
- break;
- case 5:
- max_couplings=21*finite_elements->max_dofs_per_vertex() +
- 31*finite_elements->max_dofs_per_line() +
- 9*finite_elements->max_dofs_per_quad();
- break;
- case 6:
- max_couplings=28*finite_elements->max_dofs_per_vertex() +
- 42*finite_elements->max_dofs_per_line() +
- 12*finite_elements->max_dofs_per_quad();
- break;
- case 7:
- max_couplings=30*finite_elements->max_dofs_per_vertex() +
- 45*finite_elements->max_dofs_per_line() +
- 13*finite_elements->max_dofs_per_quad();
- break;
- case 8:
- max_couplings=37*finite_elements->max_dofs_per_vertex() +
- 56*finite_elements->max_dofs_per_line() +
- 16*finite_elements->max_dofs_per_quad();
- break;
- default:
- Assert (false, ExcNotImplemented());
- max_couplings=0;
- };
- return std::min(max_couplings,n_dofs());
-}
+ template <>
+ unsigned int
+ DoFHandler<2>::max_couplings_between_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+
+ // get these numbers by drawing pictures
+ // and counting...
+ // example:
+ // | | |
+ // --x-----x--x--X--
+ // | | | |
+ // | x--x--x
+ // | | | |
+ // --x--x--*--x--x--
+ // | | | |
+ // x--x--x |
+ // | | | |
+ // --X--x--x-----x--
+ // | | |
+ // x = vertices connected with center vertex *;
+ // = total of 19
+ // (the X vertices are connected with * if
+ // the vertices adjacent to X are hanging
+ // nodes)
+ // count lines -> 28 (don't forget to count
+ // mother and children separately!)
+ unsigned int max_couplings;
+ switch (tria->max_adjacent_cells())
+ {
+ case 4:
+ max_couplings=19*finite_elements->max_dofs_per_vertex() +
+ 28*finite_elements->max_dofs_per_line() +
+ 8*finite_elements->max_dofs_per_quad();
+ break;
+ case 5:
+ max_couplings=21*finite_elements->max_dofs_per_vertex() +
+ 31*finite_elements->max_dofs_per_line() +
+ 9*finite_elements->max_dofs_per_quad();
+ break;
+ case 6:
+ max_couplings=28*finite_elements->max_dofs_per_vertex() +
+ 42*finite_elements->max_dofs_per_line() +
+ 12*finite_elements->max_dofs_per_quad();
+ break;
+ case 7:
+ max_couplings=30*finite_elements->max_dofs_per_vertex() +
+ 45*finite_elements->max_dofs_per_line() +
+ 13*finite_elements->max_dofs_per_quad();
+ break;
+ case 8:
+ max_couplings=37*finite_elements->max_dofs_per_vertex() +
+ 56*finite_elements->max_dofs_per_line() +
+ 16*finite_elements->max_dofs_per_quad();
+ break;
+ default:
+ Assert (false, ExcNotImplemented());
+ max_couplings=0;
+ };
+ return std::min(max_couplings,n_dofs());
+ }
-template <>
-unsigned int
-hpDoFHandler<2>::max_couplings_between_boundary_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
- return (3*finite_elements->max_dofs_per_vertex()
- +
- 2*finite_elements->max_dofs_per_line());
-}
+ template <>
+ unsigned int
+ DoFHandler<2>::max_couplings_between_boundary_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+ return (3*finite_elements->max_dofs_per_vertex()
+ +
+ 2*finite_elements->max_dofs_per_line());
+ }
#endif
#if deal_II_dimension == 3
-template <>
-unsigned int
-hpDoFHandler<3>::max_couplings_between_dofs () const
-{
+ template <>
+ unsigned int
+ DoFHandler<3>::max_couplings_between_dofs () const
+ {
//TODO:[?] Invent significantly better estimates than the ones in this function
- Assert (finite_elements != 0, ExcNoFESelected());
-
- // doing the same thing here is a rather
- // complicated thing, compared to the 2d
- // case, since it is hard to draw pictures
- // with several refined hexahedra :-) so I
- // presently only give a coarse estimate
- // for the case that at most 8 hexes meet
- // at each vertex
- //
- // can anyone give better estimate here?
- const unsigned int max_adjacent_cells = tria->max_adjacent_cells();
-
- unsigned int max_couplings;
- if (max_adjacent_cells <= 8)
- max_couplings=7*7*7*finite_elements->max_dofs_per_vertex() +
- 7*6*7*3*finite_elements->max_dofs_per_line() +
- 9*4*7*3*finite_elements->max_dofs_per_quad() +
- 27*finite_elements->max_dofs_per_hex();
- else
- {
- Assert (false, ExcNotImplemented());
- max_couplings=0;
- }
+ Assert (finite_elements != 0, ExcNoFESelected());
+
+ // doing the same thing here is a rather
+ // complicated thing, compared to the 2d
+ // case, since it is hard to draw pictures
+ // with several refined hexahedra :-) so I
+ // presently only give a coarse estimate
+ // for the case that at most 8 hexes meet
+ // at each vertex
+ //
+ // can anyone give better estimate here?
+ const unsigned int max_adjacent_cells = tria->max_adjacent_cells();
+
+ unsigned int max_couplings;
+ if (max_adjacent_cells <= 8)
+ max_couplings=7*7*7*finite_elements->max_dofs_per_vertex() +
+ 7*6*7*3*finite_elements->max_dofs_per_line() +
+ 9*4*7*3*finite_elements->max_dofs_per_quad() +
+ 27*finite_elements->max_dofs_per_hex();
+ else
+ {
+ Assert (false, ExcNotImplemented());
+ max_couplings=0;
+ }
- return std::min(max_couplings,n_dofs());
-}
+ return std::min(max_couplings,n_dofs());
+ }
-template <>
-unsigned int
-hpDoFHandler<3>::max_couplings_between_boundary_dofs () const
-{
- Assert (finite_elements != 0, ExcNoFESelected());
- // we need to take refinement of
- // one boundary face into consideration
- // here; in fact, this function returns
- // what #max_coupling_between_dofs<2>
- // returns
- //
- // we assume here, that only four faces
- // meet at the boundary; this assumption
- // is not justified and needs to be
- // fixed some time. fortunately, ommitting
- // it for now does no harm since the
- // matrix will cry foul if its requirements
- // are not satisfied
- return (19*finite_elements->max_dofs_per_vertex() +
- 28*finite_elements->max_dofs_per_line() +
- 8*finite_elements->max_dofs_per_quad());
-}
+ template <>
+ unsigned int
+ DoFHandler<3>::max_couplings_between_boundary_dofs () const
+ {
+ Assert (finite_elements != 0, ExcNoFESelected());
+ // we need to take refinement of
+ // one boundary face into consideration
+ // here; in fact, this function returns
+ // what #max_coupling_between_dofs<2>
+ // returns
+ //
+ // we assume here, that only four faces
+ // meet at the boundary; this assumption
+ // is not justified and needs to be
+ // fixed some time. fortunately, ommitting
+ // it for now does no harm since the
+ // matrix will cry foul if its requirements
+ // are not satisfied
+ return (19*finite_elements->max_dofs_per_vertex() +
+ 28*finite_elements->max_dofs_per_line() +
+ 8*finite_elements->max_dofs_per_quad());
+ }
#endif
#if deal_II_dimension == 1
-template <>
-void hpDoFHandler<1>::reserve_space ()
-{
+ template <>
+ void DoFHandler<1>::reserve_space ()
+ {
//TODO: This presently works only on the first FE of the FECollection. Fix this
- Assert (finite_elements != 0, ExcNoFESelected());
- Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
- Assert (tria->n_levels() == levels.size (), ExcInternalError ());
+ Assert (finite_elements != 0, ExcNoFESelected());
+ Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
+ Assert (tria->n_levels() == levels.size (), ExcInternalError ());
- // Backup the active_fe_indices vectors.
- // The user might have put something
- // important in them.
- std::vector<std::vector<unsigned int> > active_fe_backup(levels.size ());
- for (unsigned int i = 0; i < levels.size (); ++i)
+ // Backup the active_fe_indices vectors.
+ // The user might have put something
+ // important in them.
+ std::vector<std::vector<unsigned int> > active_fe_backup(levels.size ());
+ for (unsigned int i = 0; i < levels.size (); ++i)
std::swap (levels[i]->active_fe_indices, active_fe_backup[i]);
- // delete all levels and set them up
- // newly, since vectors are
- // troublesome if you want to change
- // their size
- clear_space ();
-
- vertex_dofs.resize(tria->vertices.size()*finite_elements->get_fe(0).dofs_per_vertex,
- invalid_dof_index);
+ // delete all levels and set them up
+ // newly, since vectors are
+ // troublesome if you want to change
+ // their size
+ clear_space ();
- for (unsigned int i=0; i<tria->n_levels(); ++i)
- {
- levels.push_back (new hpDoFLevel<1>);
- std::swap (active_fe_backup[i], levels.back()->active_fe_indices);
+ vertex_dofs.resize(tria->vertices.size()*finite_elements->get_fe(0).dofs_per_vertex,
+ invalid_dof_index);
- levels.back()->dof_line_index_offset = std::vector<unsigned int>
- (tria->levels[i]->lines.lines.size (),static_cast<unsigned int>(-1));
- unsigned int dofs_for_lines = 0;
- for (unsigned int j = 0; j < tria->levels[i]->lines.lines.size(); ++j)
+ for (unsigned int i=0; i<tria->n_levels(); ++i)
{
- levels.back()->dof_line_index_offset[j] = dofs_for_lines;
- dofs_for_lines += finite_elements->
- get_fe (levels.back ()->active_fe_indices[j]).dofs_per_line;
- }
-
- levels.back()->line_dofs = std::vector<unsigned int>(dofs_for_lines,
- invalid_dof_index);
- };
-}
+ levels.push_back (new hp::DoFLevel<1>);
+ std::swap (active_fe_backup[i], levels.back()->active_fe_indices);
+
+ levels.back()->dof_line_index_offset = std::vector<unsigned int>
+ (tria->levels[i]->lines.lines.size (),static_cast<unsigned int>(-1));
+ unsigned int dofs_for_lines = 0;
+ for (unsigned int j = 0; j < tria->levels[i]->lines.lines.size(); ++j)
+ {
+ levels.back()->dof_line_index_offset[j] = dofs_for_lines;
+ dofs_for_lines += finite_elements->
+ get_fe (levels.back ()->active_fe_indices[j]).dofs_per_line;
+ }
+
+ levels.back()->line_dofs = std::vector<unsigned int>(dofs_for_lines,
+ invalid_dof_index);
+ };
+ }
#endif
#if deal_II_dimension == 2
-template <>
-void hpDoFHandler<2>::reserve_space ()
-{
+ template <>
+ void DoFHandler<2>::reserve_space ()
+ {
//TODO: This presently works only on the first FE of the FECollection. Fix this
- Assert (finite_elements != 0, ExcNoFESelected());
- Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
- Assert (tria->n_levels() == levels.size (), ExcInternalError ());
+ Assert (finite_elements != 0, ExcNoFESelected());
+ Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
+ Assert (tria->n_levels() == levels.size (), ExcInternalError ());
- // Backup the active_fe_indices vectors.
- // The user might have put something
- // important in them.
- std::vector<std::vector<unsigned int> > active_fe_backup(levels.size ());
- for (unsigned int i = 0; i < levels.size (); ++i)
+ // Backup the active_fe_indices vectors.
+ // The user might have put something
+ // important in them.
+ std::vector<std::vector<unsigned int> > active_fe_backup(levels.size ());
+ for (unsigned int i = 0; i < levels.size (); ++i)
std::swap (levels[i]->active_fe_indices, active_fe_backup[i]);
- // delete all levels and set them up
- // newly, since vectors are
- // troublesome if you want to change
- // their size
- clear_space ();
+ // delete all levels and set them up
+ // newly, since vectors are
+ // troublesome if you want to change
+ // their size
+ clear_space ();
- vertex_dofs.resize(tria->vertices.size()*finite_elements->get_fe(0).dofs_per_vertex,
- invalid_dof_index);
+ vertex_dofs.resize(tria->vertices.size()*finite_elements->get_fe(0).dofs_per_vertex,
+ invalid_dof_index);
//TODO[?] Does not work for continuous FEs. Problem is at faces, which might have a different
// number of DoFs due to the different active_fe_index of the adjacent cells.
- for (unsigned int i=0; i<tria->n_levels(); ++i)
- {
- levels.push_back (new hpDoFLevel<2>);
- std::swap (active_fe_backup[i], levels.back()->active_fe_indices);
-
- levels.back()->dof_line_index_offset = std::vector<unsigned int>
- (tria->levels[i]->lines.lines.size (),static_cast<unsigned int>(-1));
- levels.back()->dof_quad_index_offset = std::vector<unsigned int>
- (tria->levels[i]->quads.quads.size (),static_cast<unsigned int>(-1));
-
- // Create table of active_fe_levels of cells
- // adjacent to the lines.
- std::vector<unsigned int> line_active_fe_indices
+ for (unsigned int i=0; i<tria->n_levels(); ++i)
+ {
+ levels.push_back (new hp::DoFLevel<2>);
+ std::swap (active_fe_backup[i], levels.back()->active_fe_indices);
+
+ levels.back()->dof_line_index_offset = std::vector<unsigned int>
+ (tria->levels[i]->lines.lines.size (),static_cast<unsigned int>(-1));
+ levels.back()->dof_quad_index_offset = std::vector<unsigned int>
+ (tria->levels[i]->quads.quads.size (),static_cast<unsigned int>(-1));
+
+ // Create table of active_fe_levels of cells
+ // adjacent to the lines.
+ std::vector<unsigned int> line_active_fe_indices
(tria->levels[i]->lines.lines.size () * 2,
static_cast<unsigned int>(-1));
- for (unsigned int j = 0; j < tria->levels[i]->quads.quads.size (); ++j)
- {
- const unsigned int cell_fe_index = levels.back ()->active_fe_indices[j];
-
- // Referring to the following diagram from
- // documentation of the triangulation class,
- // it can be seen where the indices in the
- // following lines of code come from.
- // 2
- // 3--->---2
- // | |
- // 3^ ^1
- // | |
- // 0--->---1
- // 0
- // Face 0 and 1 have the cell to the left,
- // while Face 2 and 3 have the cell to
- // the right (if the line points upward).
- line_active_fe_indices[tria->levels[i]->
- quads.quads[j].line(0) * 2] = cell_fe_index;
- line_active_fe_indices[tria->levels[i]->
- quads.quads[j].line(1) * 2] = cell_fe_index;
- line_active_fe_indices[tria->levels[i]->
- quads.quads[j].line(2) * 2 + 1] = cell_fe_index;
- line_active_fe_indices[tria->levels[i]->
- quads.quads[j].line(3) * 2 + 1] = cell_fe_index;
- }
-
- unsigned int dofs_for_lines = 0;
- for (unsigned int j = 0; j < tria->levels[i]->lines.lines.size (); ++j)
- {
- levels.back()->dof_line_index_offset[j] = dofs_for_lines;
-
- // The "line_dofs" field in the hpDoFLevel class for 2D gets a
- // slightly different meaning in 2D. Actually in 2D one line can have
- // two different active_fe_indices. Therefore it is not sufficient to
- // reserve some space for the DoFs on one active_fe_index. Instead
- // the DoF indices for both active_fe_indices will be stored in the
- // "line_dofs" field. To differentiate between these field later,
- // a simple linked list based will be maintained to allow access to
- // the correct DoFs:
- // 0: active_fe_index of line, to which the following DoFs belong.
- // 1: index of next active_fe_index for this line. Value: (x + 1)
- // 2-x: DoFs (will be filled out by distribute_dofs_on_cell
- // x+1: active_fe_index of line, to which the following DoFs belong.
- // x+2: index to next active_fe_index for this line. Value: (y + 1)
- // ...
- // In 3D, the same datastructure is used but can have up to 4 different
- // active_fe_indices on one line.
- unsigned int active_fe1 = line_active_fe_indices[j*2],
- active_fe2 = line_active_fe_indices[j*2+1];
-
- // Check for boundary lines, where clearly one of the line indices
- // is missing.
- if (active_fe1 == static_cast<unsigned int>(-1))
+ for (unsigned int j = 0; j < tria->levels[i]->quads.quads.size (); ++j)
+ {
+ const unsigned int cell_fe_index = levels.back ()->active_fe_indices[j];
+
+ // Referring to the following diagram from
+ // documentation of the triangulation class,
+ // it can be seen where the indices in the
+ // following lines of code come from.
+ // 2
+ // 3--->---2
+ // | |
+ // 3^ ^1
+ // | |
+ // 0--->---1
+ // 0
+ // Face 0 and 1 have the cell to the left,
+ // while Face 2 and 3 have the cell to
+ // the right (if the line points upward).
+ line_active_fe_indices[tria->levels[i]->
+ quads.quads[j].line(0) * 2] = cell_fe_index;
+ line_active_fe_indices[tria->levels[i]->
+ quads.quads[j].line(1) * 2] = cell_fe_index;
+ line_active_fe_indices[tria->levels[i]->
+ quads.quads[j].line(2) * 2 + 1] = cell_fe_index;
+ line_active_fe_indices[tria->levels[i]->
+ quads.quads[j].line(3) * 2 + 1] = cell_fe_index;
+ }
+
+ unsigned int dofs_for_lines = 0;
+ for (unsigned int j = 0; j < tria->levels[i]->lines.lines.size (); ++j)
+ {
+ levels.back()->dof_line_index_offset[j] = dofs_for_lines;
+
+// The "line_dofs" field in the hpDoFLevel class for 2D gets a
+// slightly different meaning in 2D. Actually in 2D one line can have
+// two different active_fe_indices. Therefore it is not sufficient to
+// reserve some space for the DoFs on one active_fe_index. Instead
+// the DoF indices for both active_fe_indices will be stored in the
+// "line_dofs" field. To differentiate between these field later,
+// a simple linked list based will be maintained to allow access to
+// the correct DoFs:
+// 0: active_fe_index of line, to which the following DoFs belong.
+// 1: index of next active_fe_index for this line. Value: (x + 1)
+// 2-x: DoFs (will be filled out by distribute_dofs_on_cell
+// x+1: active_fe_index of line, to which the following DoFs belong.
+// x+2: index to next active_fe_index for this line. Value: (y + 1)
+// ...
+// In 3D, the same datastructure is used but can have up to 4 different
+// active_fe_indices on one line.
+ unsigned int active_fe1 = line_active_fe_indices[j*2],
+ active_fe2 = line_active_fe_indices[j*2+1];
+
+ // Check for boundary lines, where clearly one of the line indices
+ // is missing.
+ if (active_fe1 == static_cast<unsigned int>(-1))
active_fe1 = active_fe2;
- if (active_fe2 == static_cast<unsigned int>(-1))
+ if (active_fe2 == static_cast<unsigned int>(-1))
active_fe2 = active_fe1;
- if (active_fe1 == active_fe2)
+ if (active_fe1 == active_fe2)
dofs_for_lines += finite_elements->get_fe (active_fe1).dofs_per_line + 2;
- else
+ else
dofs_for_lines += finite_elements->get_fe (active_fe1).dofs_per_line +
- finite_elements->get_fe (active_fe2).dofs_per_line + 4;
- }
-
- unsigned int dofs_for_quads = 0;
- for (unsigned int j = 0; j < tria->levels[i]->quads.quads.size (); ++j)
- {
- levels.back()->dof_quad_index_offset[j] = dofs_for_quads;
- dofs_for_quads += finite_elements->
- get_fe (levels.back ()->active_fe_indices[j]).dofs_per_quad;
- }
-
- levels.back()->line_dofs = std::vector<unsigned int> (dofs_for_lines,
- invalid_dof_index);
- levels.back()->quad_dofs = std::vector<unsigned int> (dofs_for_quads,
- invalid_dof_index);
-
- // As we already have the active_fe_indices for the lines, it is probably
- // a good idea to directly use those to create the linked list structure
- // within the line_dofs field.
- for (unsigned int j = 0; j < tria->levels[i]->lines.lines.size (); ++j)
- {
- dofs_for_lines = levels.back()->dof_line_index_offset[j];
-
- levels.back()->dof_line_index_offset[j] = dofs_for_lines;
- unsigned int active_fe1 = line_active_fe_indices[j*2],
- active_fe2 = line_active_fe_indices[j*2+1];
-
- // Check for boundary lines, where clearly one of the line indices
- // is missing.
- if (active_fe1 == static_cast<unsigned int>(-1))
+ finite_elements->get_fe (active_fe2).dofs_per_line + 4;
+ }
+
+ unsigned int dofs_for_quads = 0;
+ for (unsigned int j = 0; j < tria->levels[i]->quads.quads.size (); ++j)
+ {
+ levels.back()->dof_quad_index_offset[j] = dofs_for_quads;
+ dofs_for_quads += finite_elements->
+ get_fe (levels.back ()->active_fe_indices[j]).dofs_per_quad;
+ }
+
+ levels.back()->line_dofs = std::vector<unsigned int> (dofs_for_lines,
+ invalid_dof_index);
+ levels.back()->quad_dofs = std::vector<unsigned int> (dofs_for_quads,
+ invalid_dof_index);
+
+ // As we already have the active_fe_indices for the lines, it is probably
+ // a good idea to directly use those to create the linked list structure
+ // within the line_dofs field.
+ for (unsigned int j = 0; j < tria->levels[i]->lines.lines.size (); ++j)
+ {
+ dofs_for_lines = levels.back()->dof_line_index_offset[j];
+
+ levels.back()->dof_line_index_offset[j] = dofs_for_lines;
+ unsigned int active_fe1 = line_active_fe_indices[j*2],
+ active_fe2 = line_active_fe_indices[j*2+1];
+
+ // Check for boundary lines, where clearly one of the line indices
+ // is missing.
+ if (active_fe1 == static_cast<unsigned int>(-1))
active_fe1 = active_fe2;
- if (active_fe2 == static_cast<unsigned int>(-1))
+ if (active_fe2 == static_cast<unsigned int>(-1))
active_fe2 = active_fe1;
- // Now create prepare linked list, with either 1 or two entries.
- levels.back()->line_dofs[dofs_for_lines] = active_fe1;
- if (active_fe1 == active_fe2)
+ // Now create prepare linked list, with either 1 or two entries.
+ levels.back()->line_dofs[dofs_for_lines] = active_fe1;
+ if (active_fe1 == active_fe2)
levels.back()->line_dofs[dofs_for_lines + 1] =
- static_cast<unsigned int>(-1);
- else
- {
- unsigned int start_next_fe = dofs_for_lines +
- finite_elements->get_fe (active_fe1).dofs_per_line + 2;
+ static_cast<unsigned int>(-1);
+ else
+ {
+ unsigned int start_next_fe = dofs_for_lines +
+ finite_elements->get_fe (active_fe1).dofs_per_line + 2;
- levels.back()->line_dofs[dofs_for_lines + 1] = start_next_fe;
+ levels.back()->line_dofs[dofs_for_lines + 1] = start_next_fe;
- levels.back()->line_dofs[start_next_fe] = active_fe2;
- levels.back()->line_dofs[start_next_fe + 1] =
+ levels.back()->line_dofs[start_next_fe] = active_fe2;
+ levels.back()->line_dofs[start_next_fe + 1] =
static_cast<unsigned int>(-1);
- }
- }
- };
-}
+ }
+ }
+ };
+ }
#endif
#if deal_II_dimension == 3
-template <>
-void hpDoFHandler<3>::reserve_space ()
-{
+ template <>
+ void DoFHandler<3>::reserve_space ()
+ {
//TODO: This presently works only on the first FE of the FECollection. Fix this
- Assert (finite_elements != 0, ExcNoFESelected());
- Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
- Assert (tria->n_levels() == levels.size (), ExcInternalError ());
+ Assert (finite_elements != 0, ExcNoFESelected());
+ Assert (tria->n_levels() > 0, ExcInvalidTriangulation());
+ Assert (tria->n_levels() == levels.size (), ExcInternalError ());
- // Backup the active_fe_indices vectors.
- // The user might have put something
- // important in them.
- std::vector<std::vector<unsigned int> > active_fe_backup(levels.size ());
- for (unsigned int i = 0; i < levels.size (); ++i)
+ // Backup the active_fe_indices vectors.
+ // The user might have put something
+ // important in them.
+ std::vector<std::vector<unsigned int> > active_fe_backup(levels.size ());
+ for (unsigned int i = 0; i < levels.size (); ++i)
std::swap (levels[i]->active_fe_indices, active_fe_backup[i]);
- // delete all levels and set them up
- // newly, since vectors are
- // troublesome if you want to change
- // their size
- clear_space ();
+ // delete all levels and set them up
+ // newly, since vectors are
+ // troublesome if you want to change
+ // their size
+ clear_space ();
- vertex_dofs.resize(tria->vertices.size()*finite_elements->get_fe(0).dofs_per_vertex,
- invalid_dof_index);
+ vertex_dofs.resize(tria->vertices.size()*finite_elements->get_fe(0).dofs_per_vertex,
+ invalid_dof_index);
//TODO[?] Does not work for continuous FEs. Problem is at faces, which might have a different
// number of DoFs due to the different active_fe_index of the adjacent cells.
- for (unsigned int i=0; i<tria->n_levels(); ++i)
- {
- levels.push_back (new hpDoFLevel<3>);
- std::swap (active_fe_backup[i], levels.back()->active_fe_indices);
-
- levels.back()->dof_line_index_offset = std::vector<unsigned int>
- (tria->levels[i]->lines.lines.size (),static_cast<unsigned int>(-1));
- levels.back()->dof_quad_index_offset = std::vector<unsigned int>
- (tria->levels[i]->quads.quads.size (),static_cast<unsigned int>(-1));
- levels.back()->dof_hex_index_offset = std::vector<unsigned int>
- (tria->levels[i]->hexes.hexes.size (),static_cast<unsigned int>(-1));
-
- unsigned int dofs_for_lines = 0;
+ for (unsigned int i=0; i<tria->n_levels(); ++i)
+ {
+ levels.push_back (new hp::DoFLevel<3>);
+ std::swap (active_fe_backup[i], levels.back()->active_fe_indices);
+
+ levels.back()->dof_line_index_offset = std::vector<unsigned int>
+ (tria->levels[i]->lines.lines.size (),static_cast<unsigned int>(-1));
+ levels.back()->dof_quad_index_offset = std::vector<unsigned int>
+ (tria->levels[i]->quads.quads.size (),static_cast<unsigned int>(-1));
+ levels.back()->dof_hex_index_offset = std::vector<unsigned int>
+ (tria->levels[i]->hexes.hexes.size (),static_cast<unsigned int>(-1));
+
+ unsigned int dofs_for_lines = 0;
/* Uncommented as we actually need some information about how many DoFs should be reserved
for the lines, which could have different active_fe_indices. For DG there should be no
DoFs on lines or quads anyway.
- for (unsigned int j=0; j<tria->levels[i]->lines.lines.size(); ++j)
- {
- levels.back()->dof_line_index_offset[j] = dofs_for_lines;
- dofs_for_lines += finite_elements->
- get_fe (levels.back ()->active_fe_indices[j]).dofs_per_line;
- }
+ for (unsigned int j=0; j<tria->levels[i]->lines.lines.size(); ++j)
+ {
+ levels.back()->dof_line_index_offset[j] = dofs_for_lines;
+ dofs_for_lines += finite_elements->
+ get_fe (levels.back ()->active_fe_indices[j]).dofs_per_line;
+ }
*/
- unsigned int dofs_for_quads = 0;
+ unsigned int dofs_for_quads = 0;
/*
- for (unsigned int j=0; j<tria->levels[i]->quads.quads.size(); ++j)
- {
- levels.back()->dof_quad_index_offset[j] = dofs_for_quads;
- dofs_for_quads += finite_elements->
- get_fe (levels.back ()->active_fe_indices[j]).dofs_per_quad;
- }
+ for (unsigned int j=0; j<tria->levels[i]->quads.quads.size(); ++j)
+ {
+ levels.back()->dof_quad_index_offset[j] = dofs_for_quads;
+ dofs_for_quads += finite_elements->
+ get_fe (levels.back ()->active_fe_indices[j]).dofs_per_quad;
+ }
*/
- unsigned int dofs_for_hexes = 0;
- for (unsigned int j=0; j<tria->levels[i]->hexes.hexes.size(); ++j)
- {
- levels.back()->dof_hex_index_offset[j] = dofs_for_hexes;
- dofs_for_hexes += finite_elements->
- get_fe (levels.back ()->active_fe_indices[j]).dofs_per_hex;
- }
-
- levels.back()->line_dofs = std::vector<unsigned int> (dofs_for_lines,
- invalid_dof_index);
- levels.back()->quad_dofs = std::vector<unsigned int> (dofs_for_quads,
- invalid_dof_index);
- levels.back()->hex_dofs = std::vector<unsigned int> (dofs_for_hexes,
- invalid_dof_index);
- };
-}
+ unsigned int dofs_for_hexes = 0;
+ for (unsigned int j=0; j<tria->levels[i]->hexes.hexes.size(); ++j)
+ {
+ levels.back()->dof_hex_index_offset[j] = dofs_for_hexes;
+ dofs_for_hexes += finite_elements->
+ get_fe (levels.back ()->active_fe_indices[j]).dofs_per_hex;
+ }
+
+ levels.back()->line_dofs = std::vector<unsigned int> (dofs_for_lines,
+ invalid_dof_index);
+ levels.back()->quad_dofs = std::vector<unsigned int> (dofs_for_quads,
+ invalid_dof_index);
+ levels.back()->hex_dofs = std::vector<unsigned int> (dofs_for_hexes,
+ invalid_dof_index);
+ };
+ }
#endif
// where an incorrect active_fe table can cause some trouble.
//
-template <int dim>
-void hpDoFHandler<dim>::create_active_fe_table ()
-{
- // Create sufficiently many hpDoFLevels.
- while (levels.size () < tria->n_levels ())
- levels.push_back (new hpDoFLevel<dim>);
-
- for (unsigned int i=0; i<levels.size(); ++i)
+ template <int dim>
+ void DoFHandler<dim>::create_active_fe_table ()
{
- if (levels[i]->active_fe_indices.size () == 0)
- {
- // The size of "refine_flags" serves as
- // the number of cells available on that
- // level. The alternative would be to
- // implement this method for each dimension.
- levels[i]->active_fe_indices.reserve (tria->levels[i]->refine_flags.size ());
- std::fill (levels[i]->active_fe_indices.begin (),
- levels[i]->active_fe_indices.end (),
- 0);
- }
- else
+ // Create sufficiently many hpDoFLevels.
+ while (levels.size () < tria->n_levels ())
+ levels.push_back (new hp::DoFLevel<dim>);
+
+ for (unsigned int i=0; i<levels.size(); ++i)
{
- // Either the active_fe_indices have size
- // zero, or the correct size. Other sizes
- // indicate that something went wrong.
- Assert (levels[i]->active_fe_indices.size () ==
- tria->levels[i]->refine_flags.size (), ExcInternalError ());
+ if (levels[i]->active_fe_indices.size () == 0)
+ {
+// The size of "refine_flags" serves as
+// the number of cells available on that
+// level. The alternative would be to
+// implement this method for each dimension.
+ levels[i]->active_fe_indices.reserve (tria->levels[i]->refine_flags.size ());
+ std::fill (levels[i]->active_fe_indices.begin (),
+ levels[i]->active_fe_indices.end (),
+ 0);
+ }
+ else
+ {
+ // Either the active_fe_indices have size
+ // zero, or the correct size. Other sizes
+ // indicate that something went wrong.
+ Assert (levels[i]->active_fe_indices.size () ==
+ tria->levels[i]->refine_flags.size (), ExcInternalError ());
+ }
}
}
-}
-template <int dim>
-void hpDoFHandler<dim>::pre_refinement_notification (const Triangulation<dim> &)
-{
+ template <int dim>
+ void DoFHandler<dim>::pre_refinement_notification (const Triangulation<dim> &)
+ {
create_active_fe_table ();
-}
+ }
#if deal_II_dimension == 1
-template <>
-void hpDoFHandler<1>::pre_refinement_notification (const Triangulation<1> &tria)
-{
+ template <>
+ void DoFHandler<1>::pre_refinement_notification (const Triangulation<1> &tria)
+ {
create_active_fe_table ();
- // Remember if the cells have already
- // children. That will make the transfer
- // of the active_fe_index to the finer
- // levels easier.
+ // Remember if the cells have already
+ // children. That will make the transfer
+ // of the active_fe_index to the finer
+ // levels easier.
Assert (has_children.size () == 0, ExcInternalError ());
for (unsigned int i=0; i<levels.size(); ++i)
- {
+ {
const unsigned int lines_on_level = tria.levels[i]->lines.lines.size ();
std::vector<bool> *has_children_level =
- new std::vector<bool> (lines_on_level);
+ new std::vector<bool> (lines_on_level);
- // Check for each cell, if it has children.
+ // Check for each cell, if it has children.
transform (tria.levels[i]->lines.children.begin (),
tria.levels[i]->lines.children.end (),
has_children_level->begin (),
std::bind2nd (std::not_equal_to<int>(), -1));
has_children.push_back (has_children_level);
- }
-}
+ }
+ }
#endif
#if deal_II_dimension == 2
-template <>
-void hpDoFHandler<2>::pre_refinement_notification (const Triangulation<2> &tria)
-{
+ template <>
+ void DoFHandler<2>::pre_refinement_notification (const Triangulation<2> &tria)
+ {
create_active_fe_table ();
- // Remember if the cells have already
- // children. That will make the transfer
- // of the active_fe_index to the finer
- // levels easier.
+ // Remember if the cells have already
+ // children. That will make the transfer
+ // of the active_fe_index to the finer
+ // levels easier.
Assert (has_children.size () == 0, ExcInternalError ());
for (unsigned int i=0; i<levels.size(); ++i)
- {
+ {
const unsigned int quads_on_level = tria.levels[i]->quads.quads.size ();
std::vector<bool> *has_children_level =
- new std::vector<bool> (quads_on_level);
+ new std::vector<bool> (quads_on_level);
- // Check for each cell, if it has children.
+ // Check for each cell, if it has children.
transform (tria.levels[i]->quads.children.begin (),
tria.levels[i]->quads.children.end (),
has_children_level->begin (),
std::bind2nd (std::not_equal_to<int>(), -1));
has_children.push_back (has_children_level);
- }
-}
+ }
+ }
#endif
#if deal_II_dimension == 3
-template <>
-void hpDoFHandler<3>::pre_refinement_notification (const Triangulation<3> &tria)
-{
+ template <>
+ void DoFHandler<3>::pre_refinement_notification (const Triangulation<3> &tria)
+ {
create_active_fe_table ();
- // Remember if the cells have already
- // children. That will make the transfer
- // of the active_fe_index to the finer
- // levels easier.
+ // Remember if the cells have already
+ // children. That will make the transfer
+ // of the active_fe_index to the finer
+ // levels easier.
Assert (has_children.size () == 0, ExcInternalError ());
for (unsigned int i=0; i<levels.size(); ++i)
- {
+ {
const unsigned int hexes_on_level = tria.levels[i]->hexes.hexes.size ();
std::vector<bool> *has_children_level =
- new std::vector<bool> (hexes_on_level);
+ new std::vector<bool> (hexes_on_level);
- // Check for each cell, if it has children.
+ // Check for each cell, if it has children.
transform (tria.levels[i]->hexes.children.begin (),
tria.levels[i]->hexes.children.end (),
has_children_level->begin (),
std::bind2nd (std::not_equal_to<int>(), -1));
has_children.push_back (has_children_level);
- }
-}
+ }
+ }
#endif
-template <int dim>
-void hpDoFHandler<dim>::post_refinement_notification (const Triangulation<dim> &tria)
-{
+ template <int dim>
+ void DoFHandler<dim>::post_refinement_notification (const Triangulation<dim> &tria)
+ {
Assert (has_children.size () == levels.size (), ExcInternalError ());
- // In each refinement at most one new
- // new level may appear. If that happened
- // it is appended to the hpDoFHandler
- // levels.
+ // In each refinement at most one new
+ // new level may appear. If that happened
+ // it is appended to the DoFHandler
+ // levels.
if (levels.size () < tria.n_levels ())
- levels.push_back (new hpDoFLevel<dim>);
+ levels.push_back (new hp::DoFLevel<dim>);
- // Coarsening can lead to the loss
- // of levels. Hence remove them.
+ // Coarsening can lead to the loss
+ // of levels. Hence remove them.
while (levels.size () > tria.n_levels ())
{
delete levels[levels.size ()-1];
levels.pop_back ();
}
- // Resize active_fe_indices vectors
+ // Resize active_fe_indices vectors
for (unsigned int i=0; i<levels.size(); ++i)
- levels[i]->active_fe_indices.resize (tria.levels[i]->refine_flags.size ());
+ levels[i]->active_fe_indices.resize (tria.levels[i]->refine_flags.size ());
cell_iterator cell = begin(),
- endc = end ();
+ endc = end ();
for (; cell != endc; ++cell)
- {
- // Look if the cell got children during
- // refinement
- // Note: Although one level is added to
- // the hpDoFHandler levels, when the
- // triangulation got one, for the buffer
- // has_children this new level is not
- // required, because the cells on the
- // finest level never have children. Hence
- // cell->has_children () will always return
- // false on that level, which would cause
- // shortcut evaluation of the following
- // expression. Thus an index error in
- // has_children should never occur.
+ {
+ // Look if the cell got children during
+ // refinement
+ // Note: Although one level is added to
+ // the DoFHandler levels, when the
+ // triangulation got one, for the buffer
+ // has_children this new level is not
+ // required, because the cells on the
+ // finest level never have children. Hence
+ // cell->has_children () will always return
+ // false on that level, which would cause
+ // shortcut evaluation of the following
+ // expression. Thus an index error in
+ // has_children should never occur.
if (cell->has_children () &&
!(*has_children [cell->level ()])[cell->index ()])
- {
- // Set active_fe_index in children to the
- // same value as in the parent cell.
+ {
+ // Set active_fe_index in children to the
+ // same value as in the parent cell.
for (unsigned int i = 0; i < GeometryInfo<dim>::children_per_cell; ++i)
- cell->child (i)->set_active_fe_index (cell->active_fe_index ());
- }
- }
+ cell->child (i)->set_active_fe_index (cell->active_fe_index ());
+ }
+ }
- // Free buffer objects
+ // Free buffer objects
std::vector<std::vector<bool> *>::iterator children_level;
for (children_level = has_children.begin ();
children_level != has_children.end ();
++children_level)
- delete (*children_level);
- /*
- for_each (has_children.begin (),
- has_children.end (),
- delete());
- */
+ delete (*children_level);
+ /*
+ for_each (has_children.begin (),
+ has_children.end (),
+ delete());
+ */
has_children.clear ();
-}
+ }
-template <int dim>
-void hpDoFHandler<dim>::clear_space () {
- for (unsigned int i=0; i<levels.size(); ++i)
- delete levels[i];
- levels.resize (0);
+ template <int dim>
+ void DoFHandler<dim>::clear_space () {
+ for (unsigned int i=0; i<levels.size(); ++i)
+ delete levels[i];
+ levels.resize (0);
- std::vector<unsigned int> tmp;
- std::swap (vertex_dofs, tmp);
-}
+ std::vector<unsigned int> tmp;
+ std::swap (vertex_dofs, tmp);
+ }
/*-------------- Explicit Instantiations -------------------------------*/
-template class hpDoFHandler<deal_II_dimension>;
+ template class DoFHandler<deal_II_dimension>;
+}
// $Id$
// Version: $Name$
//
-// Copyright (C) 2003 by the deal.II authors
+// Copyright (C) 2003, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
#include <dofs/hp_dof_levels.h>
-unsigned int
-hpDoFLevel<1>::memory_consumption () const
+namespace hp
{
- return (MemoryConsumption::memory_consumption (line_dofs) +
- MemoryConsumption::memory_consumption (dof_line_index_offset));
-}
+ unsigned int
+ DoFLevel<1>::memory_consumption () const
+ {
+ return (MemoryConsumption::memory_consumption (line_dofs) +
+ MemoryConsumption::memory_consumption (dof_line_index_offset));
+ }
-unsigned int
-hpDoFLevel<2>::memory_consumption () const
-{
- return (hpDoFLevel<1>::memory_consumption () +
- MemoryConsumption::memory_consumption (quad_dofs) +
- MemoryConsumption::memory_consumption (dof_quad_index_offset));
-}
+ unsigned int
+ DoFLevel<2>::memory_consumption () const
+ {
+ return (hp::DoFLevel<1>::memory_consumption () +
+ MemoryConsumption::memory_consumption (quad_dofs) +
+ MemoryConsumption::memory_consumption (dof_quad_index_offset));
+ }
-unsigned int
-hpDoFLevel<3>::memory_consumption () const
-{
- return (hpDoFLevel<2>::memory_consumption () +
- MemoryConsumption::memory_consumption (hex_dofs) +
- MemoryConsumption::memory_consumption (dof_hex_index_offset));
+ unsigned int
+ DoFLevel<3>::memory_consumption () const
+ {
+ return (hp::DoFLevel<2>::memory_consumption () +
+ MemoryConsumption::memory_consumption (hex_dofs) +
+ MemoryConsumption::memory_consumption (dof_hex_index_offset));
+ }
}
template <int dim>
void
-FEValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell)
+FEValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell)
{
// assert that the finite elements
// passed to the constructor and
// destruction of this class
this->present_cell.reset
(new typename FEValuesBase<dim>::template
- CellIterator<typename hpDoFHandler<dim>::cell_iterator> (cell));
+ CellIterator<typename hp::DoFHandler<dim>::cell_iterator> (cell));
// this was the part of the work
// that is dependent on the actual
-//TODO:[?] Change for real hpDoFHandler
-// Probably the first assertion has to be changed, when the real hpDoFHandler
+//TODO:[?] Change for real hp::DoFHandler
+// Probably the first assertion has to be changed, when the real hp::DoFHandler
// is available.
template <int dim>
-void FEFaceValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+void FEFaceValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no)
{
// assert that the finite elements
// destruction of this class
this->present_cell.reset
(new typename FEValuesBase<dim>::template
- CellIterator<typename hpDoFHandler<dim>::cell_iterator> (cell));
+ CellIterator<typename hp::DoFHandler<dim>::cell_iterator> (cell));
// this was the part of the work
// that is dependent on the actual
}
-//TODO:[?] Change for real hpDoFHandler
-// Probably the first assertion has to be changed, when the real hpDoFHandler
+//TODO:[?] Change for real hp::DoFHandler
+// Probably the first assertion has to be changed, when the real hp::DoFHandler
// is available.
template <int dim>
-void FESubfaceValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+void FESubfaceValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no,
const unsigned int subface_no)
{
// assert that the finite elements
// passed to the constructor and
- // used by the hpDoFHandler used by
+ // used by the hp::DoFHandler used by
// this cell, are the same
Assert (static_cast<const FiniteElementData<dim>&>(*this->fe) ==
static_cast<const FiniteElementData<dim>&>(cell->get_dof_handler().get_fe().get_fe (cell->active_fe_index ())),
// destruction of this class
this->present_cell.reset
(new typename FEValuesBase<dim>::template
- CellIterator<typename hpDoFHandler<dim>::cell_iterator> (cell));
+ CellIterator<typename hp::DoFHandler<dim>::cell_iterator> (cell));
// this was the part of the work
// that is dependent on the actual
// $Id$
// Version: $Name$
//
-// Copyright (C) 2003 by the deal.II authors
+// Copyright (C) 2003, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
// -------------------------- FEValuesMap -------------------------
-namespace internal
+namespace hp
{
- template <int dim, class FEValues>
- FEValuesMap<dim,FEValues>::~FEValuesMap ()
- {}
-
- template <int dim, class FEValues>
- FEValues &
- FEValuesMap<dim,FEValues>::select_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index)
+ namespace internal
{
- // check if the finite element
- // does not exist as a key in the
- // map
- if (fe_to_fe_values_map.find (std::make_pair(&fe, active_fe_index)) ==
- fe_to_fe_values_map.end())
- // a-ha! doesn't yet, so let's
- // make it up
- fe_to_fe_values_map[std::make_pair(&fe, active_fe_index)]
- = boost::shared_ptr<FEValues> (create_fe_values (fe, active_fe_index));
+ template <int dim, class FEValues>
+ FEValuesMap<dim,FEValues>::~FEValuesMap ()
+ {}
+
+
+ template <int dim, class FEValues>
+ FEValues &
+ FEValuesMap<dim,FEValues>::select_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index)
+ {
+ // check if the finite element
+ // does not exist as a key in the
+ // map
+ if (fe_to_fe_values_map.find (std::make_pair(&fe, active_fe_index)) ==
+ fe_to_fe_values_map.end())
+ // a-ha! doesn't yet, so let's
+ // make it up
+ fe_to_fe_values_map[std::make_pair(&fe, active_fe_index)]
+ = boost::shared_ptr<FEValues> (create_fe_values (fe, active_fe_index));
- // now there definitely is one!
- present_fe_values = fe_to_fe_values_map[std::make_pair (&fe, active_fe_index)];
+ // now there definitely is one!
+ present_fe_values = fe_to_fe_values_map[std::make_pair (&fe, active_fe_index)];
- return *present_fe_values;
- }
+ return *present_fe_values;
+ }
-// -------------------------- hpFEValuesBase -------------------------
+// -------------------------- FEValuesBase -------------------------
- template <int dim, int q_dim>
- const MappingQ1<dim>
- hpFEValuesBase<dim,q_dim>::default_mapping;
+ template <int dim, int q_dim>
+ const MappingQ1<dim>
+ FEValuesBase<dim,q_dim>::default_mapping;
- template <int dim, int q_dim>
- hpFEValuesBase<dim,q_dim>::hpFEValuesBase (
+ template <int dim, int q_dim>
+ FEValuesBase<dim,q_dim>::FEValuesBase (
const MappingCollection<dim> &mapping_collection,
const QCollection<q_dim> &qcollection,
const UpdateFlags update_flags)
- :
- mapping_collection (mapping_collection),
- qcollection (qcollection),
- update_flags (update_flags)
- {}
+ :
+ mapping_collection (mapping_collection),
+ qcollection (qcollection),
+ update_flags (update_flags)
+ {}
- template <int dim, int q_dim>
- hpFEValuesBase<dim,q_dim>::hpFEValuesBase (const QCollection<q_dim> &qcollection,
- const UpdateFlags update_flags)
- :
- mapping_collection (default_mapping),
- qcollection (qcollection),
- update_flags (update_flags)
- {}
+ template <int dim, int q_dim>
+ FEValuesBase<dim,q_dim>::FEValuesBase (const QCollection<q_dim> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ mapping_collection (default_mapping),
+ qcollection (qcollection),
+ update_flags (update_flags)
+ {}
-}
+ }
-// -------------------------- hpFEValues -------------------------
+// -------------------------- FEValues -------------------------
-template <int dim>
-hpFEValues<dim>::hpFEValues (const MappingCollection<dim> &mapping,
- const FECollection<dim> &/*fe_collection*/,
- const QCollection<dim> &qcollection,
- const UpdateFlags update_flags)
- :
- internal::hpFEValuesBase<dim,dim> (mapping,
+ template <int dim>
+ FEValues<dim>::FEValues (const MappingCollection<dim> &mapping,
+ const FECollection<dim> &/*fe_collection*/,
+ const QCollection<dim> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ internal::FEValuesBase<dim,dim> (mapping,
qcollection,
update_flags)
-{}
+ {}
-template <int dim>
-hpFEValues<dim>::hpFEValues (const FECollection<dim> &/*fe_collection*/,
- const QCollection<dim> &qcollection,
- const UpdateFlags update_flags)
- :
- internal::hpFEValuesBase<dim,dim> (qcollection,
+ template <int dim>
+ FEValues<dim>::FEValues (const FECollection<dim> &/*fe_collection*/,
+ const QCollection<dim> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ internal::FEValuesBase<dim,dim> (qcollection,
update_flags)
-{}
+ {}
-template <int dim>
-void
-hpFEValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell)
-{
- this->present_fe_index = cell->active_fe_index ();
- this->select_fe_values (cell->get_fe(), this->present_fe_index).reinit (cell);
-}
+ template <int dim>
+ void
+ FEValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell)
+ {
+ this->present_fe_index = cell->active_fe_index ();
+ this->select_fe_values (cell->get_fe(), this->present_fe_index).reinit (cell);
+ }
-template <int dim>
-FEValues<dim> *
-hpFEValues<dim>::create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const
-{
- return new FEValues<dim> (
+ template <int dim>
+ ::FEValues<dim> *
+ FEValues<dim>::create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const
+ {
+ return new ::FEValues<dim> (
this->mapping_collection.get_mapping (active_fe_index), fe,
this->qcollection.get_quadrature (active_fe_index),
this->update_flags);
-}
+ }
-// -------------------------- hpFEFaceValues -------------------------
+// -------------------------- FEFaceValues -------------------------
-template <int dim>
-hpFEFaceValues<dim>::hpFEFaceValues (const MappingCollection<dim> &mapping,
- const FECollection<dim> &/*fe_collection*/,
- const QCollection<dim-1> &qcollection,
- const UpdateFlags update_flags)
- :
- internal::hpFEValuesBase<dim,dim-1> (mapping,
+ template <int dim>
+ FEFaceValues<dim>::FEFaceValues (const MappingCollection<dim> &mapping,
+ const FECollection<dim> &/*fe_collection*/,
+ const QCollection<dim-1> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ internal::FEValuesBase<dim,dim-1> (mapping,
qcollection,
update_flags)
-{}
+ {}
-template <int dim>
-hpFEFaceValues<dim>::hpFEFaceValues (const FECollection<dim> &/*fe_collection*/,
- const QCollection<dim-1> &qcollection,
- const UpdateFlags update_flags)
- :
- internal::hpFEValuesBase<dim,dim-1> (qcollection,
+ template <int dim>
+ FEFaceValues<dim>::FEFaceValues (const FECollection<dim> &/*fe_collection*/,
+ const QCollection<dim-1> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ internal::FEValuesBase<dim,dim-1> (qcollection,
update_flags)
-{}
+ {}
-template <int dim>
-void
-hpFEFaceValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+ template <int dim>
+ void
+ FEFaceValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no)
-{
- this->present_fe_index = cell->active_fe_index ();
- this->select_fe_values (cell->get_fe(), this->present_fe_index).reinit (cell, face_no);
-}
+ {
+ this->present_fe_index = cell->active_fe_index ();
+ this->select_fe_values (cell->get_fe(), this->present_fe_index).reinit (cell, face_no);
+ }
-template <int dim>
-void
-hpFEFaceValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
- const unsigned int face_no,
- const unsigned int active_fe_index)
-{
- this->present_fe_index = active_fe_index;
- this->select_fe_values (cell->get_fe(), active_fe_index).reinit (cell, face_no);
-}
+ template <int dim>
+ void
+ FEFaceValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
+ const unsigned int face_no,
+ const unsigned int active_fe_index)
+ {
+ this->present_fe_index = active_fe_index;
+ this->select_fe_values (cell->get_fe(), active_fe_index).reinit (cell, face_no);
+ }
-template <int dim>
-FEFaceValues<dim> *
-hpFEFaceValues<dim>::create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const
-{
- return new FEFaceValues<dim> (
+ template <int dim>
+ ::FEFaceValues<dim> *
+ FEFaceValues<dim>::create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const
+ {
+ return new ::FEFaceValues<dim> (
this->mapping_collection.get_mapping (active_fe_index), fe,
this->qcollection.get_quadrature (active_fe_index),
this->update_flags);
-}
+ }
-// -------------------------- hpFESubfaceValues -------------------------
+// -------------------------- FESubfaceValues -------------------------
-template <int dim>
-hpFESubfaceValues<dim>::hpFESubfaceValues (const MappingCollection<dim> &mapping,
- const FECollection<dim> &/*fe_collection*/,
- const QCollection<dim-1> &qcollection,
- const UpdateFlags update_flags)
- :
- internal::hpFEValuesBase<dim,dim-1> (mapping,
+ template <int dim>
+ FESubfaceValues<dim>::FESubfaceValues (const MappingCollection<dim> &mapping,
+ const FECollection<dim> &/*fe_collection*/,
+ const QCollection<dim-1> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ internal::FEValuesBase<dim,dim-1> (mapping,
qcollection,
update_flags)
-{}
+ {}
-template <int dim>
-hpFESubfaceValues<dim>::hpFESubfaceValues (const FECollection<dim> &/*fe_collection*/,
- const QCollection<dim-1> &qcollection,
- const UpdateFlags update_flags)
- :
- internal::hpFEValuesBase<dim,dim-1> (qcollection,
+ template <int dim>
+ FESubfaceValues<dim>::FESubfaceValues (const FECollection<dim> &/*fe_collection*/,
+ const QCollection<dim-1> &qcollection,
+ const UpdateFlags update_flags)
+ :
+ internal::FEValuesBase<dim,dim-1> (qcollection,
update_flags)
-{}
+ {}
-template <int dim>
-void
-hpFESubfaceValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+ template <int dim>
+ void
+ FESubfaceValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no,
const unsigned int subface_no)
-{
- this->present_fe_index = cell->active_fe_index ();
- this->select_fe_values (cell->get_fe(), this->present_fe_index).reinit (cell, face_no, subface_no);
-}
+ {
+ this->present_fe_index = cell->active_fe_index ();
+ this->select_fe_values (cell->get_fe(), this->present_fe_index).reinit (cell, face_no, subface_no);
+ }
-template <int dim>
-void
-hpFESubfaceValues<dim>::reinit (const typename hpDoFHandler<dim>::cell_iterator &cell,
+ template <int dim>
+ void
+ FESubfaceValues<dim>::reinit (const typename hp::DoFHandler<dim>::cell_iterator &cell,
const unsigned int face_no,
const unsigned int subface_no,
- const unsigned int active_fe_index)
-{
- this->present_fe_index = active_fe_index;
- this->select_fe_values (cell->get_fe(), active_fe_index).reinit (cell, face_no, subface_no);
-}
+ const unsigned int active_fe_index)
+ {
+ this->present_fe_index = active_fe_index;
+ this->select_fe_values (cell->get_fe(), active_fe_index).reinit (cell, face_no, subface_no);
+ }
-template <int dim>
-FESubfaceValues<dim> *
-hpFESubfaceValues<dim>::create_fe_values (const FiniteElement<dim> &fe,
- const unsigned int active_fe_index) const
-{
- return new FESubfaceValues<dim> (
+ template <int dim>
+ ::FESubfaceValues<dim> *
+ FESubfaceValues<dim>::create_fe_values (const FiniteElement<dim> &fe,
+ const unsigned int active_fe_index) const
+ {
+ return new ::FESubfaceValues<dim> (
this->mapping_collection.get_mapping (active_fe_index), fe,
this->qcollection.get_quadrature (active_fe_index),
this->update_flags);
-}
+ }
// explicit instantiations
-namespace internal
-{
- template class FEValuesMap<deal_II_dimension,FEValues<deal_II_dimension> >;
- template class FEValuesMap<deal_II_dimension,FEFaceValues<deal_II_dimension> >;
- template class FEValuesMap<deal_II_dimension,FESubfaceValues<deal_II_dimension> >;
+ namespace internal
+ {
+ template class FEValuesMap<deal_II_dimension,FEValues<deal_II_dimension> >;
+ template class FEValuesMap<deal_II_dimension,FEFaceValues<deal_II_dimension> >;
+ template class FEValuesMap<deal_II_dimension,FESubfaceValues<deal_II_dimension> >;
- template class hpFEValuesBase<deal_II_dimension,deal_II_dimension>;
+ template class FEValuesBase<deal_II_dimension,deal_II_dimension>;
#if deal_II_dimension >= 2
- template class hpFEValuesBase<deal_II_dimension,deal_II_dimension-1>;
+ template class FEValuesBase<deal_II_dimension,deal_II_dimension-1>;
#endif
-}
+ }
-template class hpFEValues<deal_II_dimension>;
+ template class FEValues<deal_II_dimension>;
#if deal_II_dimension >= 2
-template class hpFEFaceValues<deal_II_dimension>;
-template class hpFESubfaceValues<deal_II_dimension>;
+ template class FEFaceValues<deal_II_dimension>;
+ template class FESubfaceValues<deal_II_dimension>;
#endif
-
+
+}
template class DataOut<deal_II_dimension,DoFHandler>;
-// ...and now for hpDoFHandler
-template class DataOut_DoFData<deal_II_dimension,hpDoFHandler,deal_II_dimension>;
-template class DataOut_DoFData<deal_II_dimension,hpDoFHandler,deal_II_dimension+1>;
-INSTANTIATE_VECTORS(deal_II_dimension,hpDoFHandler,deal_II_dimension,deal_II_dimension);
-INSTANTIATE_VECTORS(deal_II_dimension,hpDoFHandler,deal_II_dimension+1,deal_II_dimension+1);
+// ...and now for hp::DoFHandler
+template class DataOut_DoFData<deal_II_dimension,hp::DoFHandler,deal_II_dimension>;
+template class DataOut_DoFData<deal_II_dimension,hp::DoFHandler,deal_II_dimension+1>;
+INSTANTIATE_VECTORS(deal_II_dimension,hp::DoFHandler,deal_II_dimension,deal_II_dimension);
+INSTANTIATE_VECTORS(deal_II_dimension,hp::DoFHandler,deal_II_dimension+1,deal_II_dimension+1);
#if deal_II_dimension >= 2
-template class DataOut_DoFData<deal_II_dimension,hpDoFHandler,
+template class DataOut_DoFData<deal_II_dimension,hp::DoFHandler,
deal_II_dimension-1,deal_II_dimension>;
-INSTANTIATE_VECTORS(deal_II_dimension,hpDoFHandler,deal_II_dimension-1,deal_II_dimension);
+INSTANTIATE_VECTORS(deal_II_dimension,hp::DoFHandler,deal_II_dimension-1,deal_II_dimension);
#endif
-template class DataOut<deal_II_dimension,hpDoFHandler>;
+template class DataOut<deal_II_dimension,hp::DoFHandler>;
// don't instantiate anything for the 1d and 2d cases
#if deal_II_dimension >=2
template class DataOutFaces<deal_II_dimension,DoFHandler>;
-template class DataOutFaces<deal_II_dimension,hpDoFHandler>;
+template class DataOutFaces<deal_II_dimension,hp::DoFHandler>;
#endif
add_data_vector<float> (const Vector<float> &vec,
const std::string &name);
-template class DataOutStack<deal_II_dimension,hpDoFHandler>;
-template void DataOutStack<deal_II_dimension,hpDoFHandler>::
+template class DataOutStack<deal_II_dimension,hp::DoFHandler>;
+template void DataOutStack<deal_II_dimension,hp::DoFHandler>::
add_data_vector<double> (const Vector<double> &vec,
const std::string &name);
-template void DataOutStack<deal_II_dimension,hpDoFHandler>::
+template void DataOutStack<deal_II_dimension,hp::DoFHandler>::
add_data_vector<float> (const Vector<float> &vec,
const std::string &name);
};
template <template <int> class DH> const bool IsHP<DH>::value;
- template <> struct IsHP<hpDoFHandler>
+ template <> struct IsHP<hp::DoFHandler>
{
static const bool value = true;
};
- const bool IsHP<hpDoFHandler>::value;
+ const bool IsHP<hp::DoFHandler>::value;
}
#ifdef DEAL_II_FUNPTR_TEMPLATE_TEMPLATE_BUG
const FunPtr fun_ptr
= (WorkAround::IsHP<DH>::value ?
- &DerivativeApproximation::template approximate<DerivativeDescription,dim,hpDoFHandler,InputVector> :
+ &DerivativeApproximation::template approximate<DerivativeDescription,dim,hp::DoFHandler,InputVector> :
&DerivativeApproximation::template approximate<DerivativeDescription,dim,DoFHandler,InputVector>);
#else
const FunPtr fun_ptr
INSTANTIATE(BlockVector<double>, DoFHandler);
INSTANTIATE(BlockVector<float>, DoFHandler);
-INSTANTIATE(Vector<double>, hpDoFHandler);
-INSTANTIATE(Vector<float>, hpDoFHandler);
-INSTANTIATE(BlockVector<double>, hpDoFHandler);
-INSTANTIATE(BlockVector<float>, hpDoFHandler);
+INSTANTIATE(Vector<double>, hp::DoFHandler);
+INSTANTIATE(Vector<float>, hp::DoFHandler);
+INSTANTIATE(BlockVector<double>, hp::DoFHandler);
+INSTANTIATE(BlockVector<float>, hp::DoFHandler);
#ifdef DEAL_II_USE_PETSC
INSTANTIATE(PETScWrappers::Vector, DoFHandler);
INSTANTIATE(PETScWrappers::BlockVector, DoFHandler);
-INSTANTIATE(PETScWrappers::Vector, hpDoFHandler);
-INSTANTIATE(PETScWrappers::BlockVector, hpDoFHandler);
+INSTANTIATE(PETScWrappers::Vector, hp::DoFHandler);
+INSTANTIATE(PETScWrappers::BlockVector, hp::DoFHandler);
#endif
}
- // Functions for the hpDoFHandler
+ // Functions for the hp::DoFHandler
template <int dim>
unsigned int
- max_dofs_per_cell (const hpDoFHandler<dim> &dh)
+ max_dofs_per_cell (const hp::DoFHandler<dim> &dh)
{
return dh.get_fe().max_dofs_per_cell ();
}
template <int dim>
unsigned int
- max_dofs_per_face (const hpDoFHandler<dim> &dh)
+ max_dofs_per_face (const hp::DoFHandler<dim> &dh)
{
return dh.get_fe().max_dofs_per_face ();
}
template <int dim>
unsigned int
- get_n_components (const hpDoFHandler<dim> &dh)
+ get_n_components (const hp::DoFHandler<dim> &dh)
{
return dh.get_fe().n_components();
}
for (unsigned int q_point=0; q_point<n_q_points;
++q_point)
{
+//TODO investigate really small values here
cell_matrix(i,j)
+=
(
# run-time checking of parameters and internal states is performed, so
# you should set this value to `on' while you develop your program,
# and to `off' when running production computations.
-debug-mode = off
+debug-mode = on
# As third field, we need to give the path to the top-level deal.II
# run-time checking of parameters and internal states is performed, so
# you should set this value to `on' while you develop your program,
# and to `off' when running production computations.
-debug-mode = on
+debug-mode = off
# As third field, we need to give the path to the top-level deal.II
#include <grid/tria_iterator.h>
#include <fe/fe_values.h>
// Instead of the usual DoFHandler
- // the hpDoFHandler class has to be
+ // the hp::DoFHandler class has to be
// used to gain access to the
// hp-Functionality. The hpDoFHandler
// provides essentially the same
#include <fe/q_collection.h>
// The first of the following
- // two files provides the hpFEValues
+ // two files provides the hp::FEValues
// class, which implements the same
// functionality as the FEValues class
// with the difference that it takes
// As already mentioned, the
// standard DoFHandler has to be
- // replaced by a hpDoFHandler.
- hpDoFHandler<dim> dof_handler;
+ // replaced by a hp::DoFHandler.
+ hp::DoFHandler<dim> dof_handler;
SparsityPattern sparsity;
SparseMatrix<double> system_matrix;
// assumes a ``MappingQ1'' mapping)
// and makes it easier to change
// the mapping object later.
- hpFEValues<dim> fe_v_x (mapping, fe_collection, *quadrature, update_flags);
+ hp::FEValues<dim> fe_v_x (mapping, fe_collection, *quadrature, update_flags);
// Similarly we create the
// ``FEFaceValues'' and
// they will be reinited to the
// current cell and the face (and
// subface) number.
- hpFEFaceValues<dim> fe_v_face_x (
+ hp::FEFaceValues<dim> fe_v_face_x (
mapping, fe_collection, *face_quadrature, face_update_flags);
- hpFESubfaceValues<dim> fe_v_subface_x (
+ hp::FESubfaceValues<dim> fe_v_subface_x (
mapping, fe_collection, *face_quadrature, face_update_flags);
- hpFEFaceValues<dim> fe_v_face_neighbor_x (
+ hp::FEFaceValues<dim> fe_v_face_neighbor_x (
mapping, fe_collection, *face_quadrature, neighbor_face_update_flags);
- hpFESubfaceValues<dim> fe_v_subface_neighbor_x (
+ hp::FESubfaceValues<dim> fe_v_subface_neighbor_x (
mapping, fe_collection, *face_quadrature, neighbor_face_update_flags);
// Now we create the cell matrices
// Furthermore we need some cell
// iterators.
- typename hpDoFHandler<dim>::active_cell_iterator
+ typename hp::DoFHandler<dim>::active_cell_iterator
cell = dof_handler.begin_active(),
endc = dof_handler.end();
{
// First we set the face
// iterator
- typename hpDoFHandler<dim>::face_iterator face=cell->face(face_no);
+ typename hp::DoFHandler<dim>::face_iterator face=cell->face(face_no);
// and clear the
// ``un_v_matrix'' on each
// domain, therefore
// there must exist a
// neighboring cell.
- typename hpDoFHandler<dim>::cell_iterator neighbor=
+ typename hp::DoFHandler<dim>::cell_iterator neighbor=
cell->neighbor(face_no);
// We proceed with the
// `behind' the
// current
// subface.
- typename hpDoFHandler<dim>::active_cell_iterator neighbor_child=
+ typename hp::DoFHandler<dim>::active_cell_iterator neighbor_child=
neighbor->child(GeometryInfo<dim>::
child_cell_on_face(neighbor2,subface_no));
// Here we do not need
// ``fe_v_face_neighbor'' as case 4
// does not occur.
- hpFEValues<dim> fe_v_x (
+ hp::FEValues<dim> fe_v_x (
mapping, fe_collection, *quadrature, update_flags);
- hpFEFaceValues<dim> fe_v_face_x (
+ hp::FEFaceValues<dim> fe_v_face_x (
mapping, fe_collection, *face_quadrature, face_update_flags);
- hpFESubfaceValues<dim> fe_v_subface_x (
+ hp::FESubfaceValues<dim> fe_v_subface_x (
mapping, fe_collection, *face_quadrature, face_update_flags);
- hpFEFaceValues<dim> fe_v_face_neighbor_x (
+ hp::FEFaceValues<dim> fe_v_face_neighbor_x (
mapping, fe_collection, *face_quadrature, neighbor_face_update_flags);
const unsigned int max_dofs_per_cell = fe_collection.max_dofs_per_cell ();
// The following lines are roughly
// the same as in the previous
// function.
- typename hpDoFHandler<dim>::active_cell_iterator
+ typename hp::DoFHandler<dim>::active_cell_iterator
cell = dof_handler.begin_active(),
endc = dof_handler.end();
for (;cell!=endc; ++cell)
for (unsigned int face_no=0; face_no<GeometryInfo<dim>::faces_per_cell; ++face_no)
{
- typename hpDoFHandler<dim>::face_iterator face=
+ typename hp::DoFHandler<dim>::face_iterator face=
cell->face(face_no);
// Case 1:
{
Assert (cell->neighbor(face_no).state() == IteratorState::valid,
ExcInternalError());
- typename hpDoFHandler<dim>::cell_iterator neighbor=
+ typename hp::DoFHandler<dim>::cell_iterator neighbor=
cell->neighbor(face_no);
const unsigned int dofs_on_neighbor = neighbor->get_fe().dofs_per_cell;
subface_no<GeometryInfo<dim>::subfaces_per_face;
++subface_no)
{
- typename hpDoFHandler<dim>::cell_iterator neighbor_child=
+ typename hp::DoFHandler<dim>::cell_iterator neighbor_child=
neighbor->child(GeometryInfo<dim>::child_cell_on_face(
neighbor2,subface_no));
const unsigned int dofs_on_neighbor_child = neighbor_child->get_fe().dofs_per_cell;
// and they are cell-wise scaled by
// the factor $h^{1+d/2}$
- typename hpDoFHandler<dim>::active_cell_iterator
+ typename hp::DoFHandler<dim>::active_cell_iterator
cell = dof_handler.begin_active(),
endc = dof_handler.end();
<< std::endl << std::endl;
std::ofstream gnuplot_output (filename.c_str());
- DataOut<dim, hpDoFHandler> data_out;
+ DataOut<dim, hp::DoFHandler> data_out;
data_out.attach_dof_handler (dof_handler);
data_out.add_data_vector (solution2, "u");
// $Id$
// Version: $Name$
//
-// Copyright (C) 2005 by the deal.II authors
+// Copyright (C) 2005, 2006 by the deal.II authors
//
// This file is subject to QPL and may not be distributed
// without copyright and license information. Please refer
/* Author: Ralf Hartmann, 2005, O. Kayser-Herold, simply modified
- the mg_dof_handler.cc test for the hpDoFHandler. */
+ the mg_dof_handler.cc test for the hp::DoFHandler. */
#include <base/logstream.h>
#include <grid/tria.h>
FECollection<dim> fe_collection;
fe_collection.add_fe (FE_DGQ<dim> (1));
- hpDoFHandler<dim> dof_handler(tria);
+ hp::DoFHandler<dim> dof_handler(tria);
tria.begin_active()->set_refine_flag();
tria.execute_coarsening_and_refinement();