From: wolf Date: Tue, 10 Aug 1999 12:40:55 +0000 (+0000) Subject: Further clean-up of the Accessor hierarchy. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=032a1b76f63f6c8034b26e3d2cc4663cc7ad92fa;p=dealii-svn.git Further clean-up of the Accessor hierarchy. git-svn-id: https://svn.dealii.org/trunk@1657 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/dofs/mg_dof_accessor.h b/deal.II/deal.II/include/dofs/mg_dof_accessor.h index d4b538b923..6059b05f5c 100644 --- a/deal.II/deal.II/include/dofs/mg_dof_accessor.h +++ b/deal.II/deal.II/include/dofs/mg_dof_accessor.h @@ -67,6 +67,11 @@ class MGDoFAccessor { mg_dof_handler = dh; }; + /** + * Exception for child classes + */ + DeclException0 (ExcInvalidObject); + /** * Copy operator. */ @@ -84,25 +89,99 @@ class MGDoFAccessor { }; -template +/* -------------------------------------------------------------------------- */ + +/** + * This is a switch class which only declares a #typdef#. It is meant to + * determine which class a #MGDoFObjectAccessor# class is to be derived + * from. By default, #MGDoFObjectAccessor# derives from + * the #typedef# in the general #MGDoFObjectAccessor_Inheritance# + * class, which is #DoFObjectAccessor#, + * but if #celldim==dim#, then the specialization #MGDoFObjectAccessor_Inheritance# + * is used which declares its local type to be #DoFCellAccessor#. Therefore, + * the inheritance is automatically chosen to be from #DoFCellAccessor# if the + * object under consideration has full dimension, i.e. constitutes a cell. + * + * @author Wolfgang Bangerth, 1999 + */ +template +class MGDoFObjectAccessor_Inheritance +{ + /** + * Declaration of the #typedef#. + * See the full documentation for + * more information. + */ + typedef DoFObjectAccessor BaseClass; +}; + + + +/** + * This is a switch class which only declares a #typdef#. It is meant to + * determine which class a #DoFObjectAccessor# class is to be derived + * from. By default, #DoFObjectAccessor# derives from + * the #typedef# in the general #DoFObjectAccessor_Inheritance# + * class, which is #TriaObjectAccessor#, + * but if #celldim==dim#, then the specialization #TriaObjectAccessor# + * is used which declares its local type to be #CellAccessor#. Therefore, + * the inheritance is automatically chosen to be from #CellAccessor# if the + * object under consideration has full dimension, i.e. constitutes a cell. + * + * @author Wolfgang Bangerth, 1999 + */ +template +class MGDoFObjectAccessor_Inheritance +{ + /** + * Declaration of the #typedef#. + * See the full documentation for + * more information. + */ + typedef DoFCellAccessor BaseClass; +}; + + + + +/* -------------------------------------------------------------------------- */ + + + +/** + * Common template for line, quad, hex. + * + * Internal: inheritance is necessary for the general template due to + * a compiler error. + * @author Guido Kanschat, 1999 + */ +template class MGDoFObjectAccessor : public MGDoFAccessor, - public DoFObjectAccessor + public MGDoFObjectAccessor_Inheritance::BaseClass {}; + /** * Closure class. */ -template -class MGDoFObjectAccessor<0, dim, BaseClass> +template +class MGDoFObjectAccessor<0, dim> { public: - typedef void* AccessorData; + typedef void AccessorData; + + /** + * Constructor. Should never be called + * and thus throws an error. + */ MGDoFObjectAccessor (Triangulation *, - const int, - const int, - const AccessorData *) - {} + const int, + const int, + const AccessorData *) + { + Assert (false, ExcInternalError()); + } }; @@ -128,37 +207,17 @@ class MGDoFObjectAccessor<0, dim, BaseClass> * * \subsection{Notes about the class hierarchy structure} * - * The class hierarchy seems to be a bit confused here. The reason for this is - * that we would really like to derive a #DoFLineAccessor# from a #LineAccessor#. - * Unfortunately, we would run into problems, if we wanted a #DoFLineAccessor# - * in one spatial dimension, in which case a line is also a cell. The traditional - * solution would be to declare a #DoFCellAccessor<1># which is derived from - * #DoFObjectAccessor<1, 1># and #CellAccessor<1># (the #DoFObjectAccessor<1, dim># cannot - * itself be derived from #CellAccessor# since a line is not a cell - * unless in one space dimension), but since a #DoFLineAccessor# and a - * #CellAccessor# are both derived from #TriaAccessor#, we would have to make - * the last derivation virtual. - * - * Since we want to avoid virtual inheritance since this involves another - * indirection in every member variable access, we chose another way: we - * pass a second template parameter to a #DoFLineAccessor# which tells it - * which class to be derived from: if we are in one spatial dimension, the - * base class is to be #CellAccessor<1>#, in two or more dimensions it - * is a #TriaObjectAccessor<1, dim>#, i.e. am accessor to lines without the missing - * functionality needed for cells (neighbors, etc.). - * - * This way we can declare a #DoFCellAccessor# in one dimension by deriving - * from #DoFObjectAccessor<1, 1,CellAccessor<1> >#, thus getting the cell - * functionality through the #DoFLineAccessor# instead of through a virtual - * multiple inheritance of #DoFLineAccessor# and #CellAccessor<1>#. - * - * The same concept is used with #DoFObjectAccessor<2, dim># classes etc. + * Inheritance from #MGDoFObjectAccessor_Inheritance<1,dim>::BaseClass# yields + * inheritance from #DoFCellAccessor<1># if #dim==1# and from + * #TriaObjectAccessor<1,dim># for all other #dim# values. Thus, an object + * of this class shares all features of cells in one dimension, but behaves + * like an ordinary line in all other cases. * * @author Wolfgang Bangerth, 1998 */ -template -class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, - public DoFObjectAccessor<1, dim> +template +class MGDoFObjectAccessor<1, dim> : public MGDoFAccessor, + public MGDoFObjectAccessor_Inheritance<1, dim>::BaseClass { public: /** @@ -180,9 +239,9 @@ class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, * to a #MGDoFHandler# object. */ MGDoFObjectAccessor (Triangulation *tria, - const int level, - const int index, - const AccessorData *local_data); + const int level, + const int index, + const AccessorData *local_data); /** * Return the index of the #i#th degree @@ -235,13 +294,13 @@ class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, * class returns a line accessor without * access to the MG data. */ - TriaIterator > child (const unsigned int) const; + TriaIterator > child (const unsigned int) const; /** * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const MGDoFObjectAccessor<1, dim,BaseClass> &a); + void copy_from (const MGDoFObjectAccessor<1, dim> &a); }; @@ -254,9 +313,10 @@ class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, * * @see DoFLineAccessor */ -template -class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, - public DoFObjectAccessor<2, dim> { +template +class MGDoFObjectAccessor<2, dim> : public MGDoFAccessor, + public MGDoFObjectAccessor_Inheritance<2, dim>::BaseClass +{ public: /** * Declare the data type that this accessor @@ -330,7 +390,7 @@ class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, * Return a pointer to the #i#th line * bounding this #Quad#. */ - TriaIterator > > + TriaIterator > line (const unsigned int i) const; /** @@ -340,13 +400,14 @@ class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, * class returns a quad accessor without * access to the DoF data. */ - TriaIterator > child (const unsigned int) const; + TriaIterator > + child (const unsigned int) const; /** * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const MGDoFObjectAccessor<2, dim,BaseClass> &a); + void copy_from (const MGDoFObjectAccessor<2, dim> &a); }; @@ -357,9 +418,9 @@ class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, * * @see DoFLineAccessor */ -template -class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, - public DoFObjectAccessor<3, dim> +template +class MGDoFObjectAccessor<3, dim> : public MGDoFAccessor, + public MGDoFObjectAccessor_Inheritance<3, dim>::BaseClass { public: /** @@ -434,14 +495,14 @@ class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, * Return a pointer to the #i#th line * bounding this #Hex#. */ - TriaIterator > > + TriaIterator > line (const unsigned int i) const; /** * Return a pointer to the #i#th quad * bounding this #Hex#. */ - TriaIterator > > + TriaIterator > quad (const unsigned int i) const; /** @@ -451,13 +512,13 @@ class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, * class returns a hex accessor without * access to the DoF data. */ - TriaIterator > child (const unsigned int) const; + TriaIterator > child (const unsigned int) const; /** * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const MGDoFObjectAccessor<3, dim,BaseClass> &a); + void copy_from (const MGDoFObjectAccessor<3, dim> &a); }; @@ -476,22 +537,20 @@ class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, * @author Wolfgang Bangerth, 1998 */ template -class MGDoFCellAccessor : public MGDoFObjectAccessor > { +class MGDoFCellAccessor : public MGDoFObjectAccessor { public: /** * Type of faces. */ typedef - TriaIterator > > + TriaIterator > face_iterator; /** * Declare the data type that this accessor * class expects to get passed from the * iterator classes. */ - typedef typename - MGDoFObjectAccessor >::AccessorData - AccessorData; + typedef typename MGDoFObjectAccessor::AccessorData AccessorData; /** * Constructor @@ -500,7 +559,7 @@ class MGDoFCellAccessor : public MGDoFObjectAccessor > (tria,level,index,local_data) {}; + MGDoFObjectAccessor (tria,level,index,local_data) {}; /** * Return the #i#th neighbor as a MGDoF cell diff --git a/deal.II/deal.II/include/dofs/mg_dof_handler.h b/deal.II/deal.II/include/dofs/mg_dof_handler.h index 4b15d63172..1e9cc35e69 100644 --- a/deal.II/deal.II/include/dofs/mg_dof_handler.h +++ b/deal.II/deal.II/include/dofs/mg_dof_handler.h @@ -64,13 +64,13 @@ class MGDoFDimensionInfo<1> { */ class MGDoFDimensionInfo<2> { public: - typedef TriaRawIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > > raw_line_iterator; - typedef TriaIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > > line_iterator; - typedef TriaActiveIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > > active_line_iterator; + typedef TriaRawIterator<2,MGDoFObjectAccessor<1, 2> > raw_line_iterator; + typedef TriaIterator<2,MGDoFObjectAccessor<1, 2> > line_iterator; + typedef TriaActiveIterator<2,MGDoFObjectAccessor<1, 2> > active_line_iterator; - typedef TriaRawIterator<2,MGDoFCellAccessor<2> > raw_quad_iterator; - typedef TriaIterator<2,MGDoFCellAccessor<2> > quad_iterator; - typedef TriaActiveIterator<2,MGDoFCellAccessor<2> > active_quad_iterator; + typedef TriaRawIterator<2,MGDoFCellAccessor<2> > raw_quad_iterator; + typedef TriaIterator<2,MGDoFCellAccessor<2> > quad_iterator; + typedef TriaActiveIterator<2,MGDoFCellAccessor<2> > active_quad_iterator; typedef void * raw_hex_iterator; typedef void * hex_iterator; @@ -95,13 +95,13 @@ class MGDoFDimensionInfo<2> { */ class MGDoFDimensionInfo<3> { public: - typedef TriaRawIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > > raw_line_iterator; - typedef TriaIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > > line_iterator; - typedef TriaActiveIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > > active_line_iterator; + typedef TriaRawIterator<3,MGDoFObjectAccessor<1, 3> > raw_line_iterator; + typedef TriaIterator<3,MGDoFObjectAccessor<1, 3> > line_iterator; + typedef TriaActiveIterator<3,MGDoFObjectAccessor<1, 3> > active_line_iterator; - typedef TriaRawIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > > raw_quad_iterator; - typedef TriaIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > > quad_iterator; - typedef TriaActiveIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > > active_quad_iterator; + typedef TriaRawIterator<3,MGDoFObjectAccessor<2, 3> > raw_quad_iterator; + typedef TriaIterator<3,MGDoFObjectAccessor<2, 3> > quad_iterator; + typedef TriaActiveIterator<3,MGDoFObjectAccessor<2, 3> > active_quad_iterator; typedef TriaRawIterator<3,MGDoFCellAccessor<3> > raw_hex_iterator; typedef TriaIterator<3,MGDoFCellAccessor<3> > hex_iterator; @@ -958,12 +958,9 @@ class MGDoFHandler */ vector mg_used_dofs; - friend class MGDoFObjectAccessor<1, dim, TriaObjectAccessor<1, dim> >; - friend class MGDoFObjectAccessor<1, dim, CellAccessor >; - friend class MGDoFObjectAccessor<2, dim, TriaObjectAccessor<2, dim> >; - friend class MGDoFObjectAccessor<2, dim, CellAccessor >; - friend class MGDoFObjectAccessor<3, dim, TriaObjectAccessor<3, dim> >; - friend class MGDoFObjectAccessor<3, dim, CellAccessor >; + friend class MGDoFObjectAccessor<1, dim>; + friend class MGDoFObjectAccessor<2, dim>; + friend class MGDoFObjectAccessor<3, dim>; }; diff --git a/deal.II/deal.II/include/multigrid/mg_dof_accessor.h b/deal.II/deal.II/include/multigrid/mg_dof_accessor.h index d4b538b923..6059b05f5c 100644 --- a/deal.II/deal.II/include/multigrid/mg_dof_accessor.h +++ b/deal.II/deal.II/include/multigrid/mg_dof_accessor.h @@ -67,6 +67,11 @@ class MGDoFAccessor { mg_dof_handler = dh; }; + /** + * Exception for child classes + */ + DeclException0 (ExcInvalidObject); + /** * Copy operator. */ @@ -84,25 +89,99 @@ class MGDoFAccessor { }; -template +/* -------------------------------------------------------------------------- */ + +/** + * This is a switch class which only declares a #typdef#. It is meant to + * determine which class a #MGDoFObjectAccessor# class is to be derived + * from. By default, #MGDoFObjectAccessor# derives from + * the #typedef# in the general #MGDoFObjectAccessor_Inheritance# + * class, which is #DoFObjectAccessor#, + * but if #celldim==dim#, then the specialization #MGDoFObjectAccessor_Inheritance# + * is used which declares its local type to be #DoFCellAccessor#. Therefore, + * the inheritance is automatically chosen to be from #DoFCellAccessor# if the + * object under consideration has full dimension, i.e. constitutes a cell. + * + * @author Wolfgang Bangerth, 1999 + */ +template +class MGDoFObjectAccessor_Inheritance +{ + /** + * Declaration of the #typedef#. + * See the full documentation for + * more information. + */ + typedef DoFObjectAccessor BaseClass; +}; + + + +/** + * This is a switch class which only declares a #typdef#. It is meant to + * determine which class a #DoFObjectAccessor# class is to be derived + * from. By default, #DoFObjectAccessor# derives from + * the #typedef# in the general #DoFObjectAccessor_Inheritance# + * class, which is #TriaObjectAccessor#, + * but if #celldim==dim#, then the specialization #TriaObjectAccessor# + * is used which declares its local type to be #CellAccessor#. Therefore, + * the inheritance is automatically chosen to be from #CellAccessor# if the + * object under consideration has full dimension, i.e. constitutes a cell. + * + * @author Wolfgang Bangerth, 1999 + */ +template +class MGDoFObjectAccessor_Inheritance +{ + /** + * Declaration of the #typedef#. + * See the full documentation for + * more information. + */ + typedef DoFCellAccessor BaseClass; +}; + + + + +/* -------------------------------------------------------------------------- */ + + + +/** + * Common template for line, quad, hex. + * + * Internal: inheritance is necessary for the general template due to + * a compiler error. + * @author Guido Kanschat, 1999 + */ +template class MGDoFObjectAccessor : public MGDoFAccessor, - public DoFObjectAccessor + public MGDoFObjectAccessor_Inheritance::BaseClass {}; + /** * Closure class. */ -template -class MGDoFObjectAccessor<0, dim, BaseClass> +template +class MGDoFObjectAccessor<0, dim> { public: - typedef void* AccessorData; + typedef void AccessorData; + + /** + * Constructor. Should never be called + * and thus throws an error. + */ MGDoFObjectAccessor (Triangulation *, - const int, - const int, - const AccessorData *) - {} + const int, + const int, + const AccessorData *) + { + Assert (false, ExcInternalError()); + } }; @@ -128,37 +207,17 @@ class MGDoFObjectAccessor<0, dim, BaseClass> * * \subsection{Notes about the class hierarchy structure} * - * The class hierarchy seems to be a bit confused here. The reason for this is - * that we would really like to derive a #DoFLineAccessor# from a #LineAccessor#. - * Unfortunately, we would run into problems, if we wanted a #DoFLineAccessor# - * in one spatial dimension, in which case a line is also a cell. The traditional - * solution would be to declare a #DoFCellAccessor<1># which is derived from - * #DoFObjectAccessor<1, 1># and #CellAccessor<1># (the #DoFObjectAccessor<1, dim># cannot - * itself be derived from #CellAccessor# since a line is not a cell - * unless in one space dimension), but since a #DoFLineAccessor# and a - * #CellAccessor# are both derived from #TriaAccessor#, we would have to make - * the last derivation virtual. - * - * Since we want to avoid virtual inheritance since this involves another - * indirection in every member variable access, we chose another way: we - * pass a second template parameter to a #DoFLineAccessor# which tells it - * which class to be derived from: if we are in one spatial dimension, the - * base class is to be #CellAccessor<1>#, in two or more dimensions it - * is a #TriaObjectAccessor<1, dim>#, i.e. am accessor to lines without the missing - * functionality needed for cells (neighbors, etc.). - * - * This way we can declare a #DoFCellAccessor# in one dimension by deriving - * from #DoFObjectAccessor<1, 1,CellAccessor<1> >#, thus getting the cell - * functionality through the #DoFLineAccessor# instead of through a virtual - * multiple inheritance of #DoFLineAccessor# and #CellAccessor<1>#. - * - * The same concept is used with #DoFObjectAccessor<2, dim># classes etc. + * Inheritance from #MGDoFObjectAccessor_Inheritance<1,dim>::BaseClass# yields + * inheritance from #DoFCellAccessor<1># if #dim==1# and from + * #TriaObjectAccessor<1,dim># for all other #dim# values. Thus, an object + * of this class shares all features of cells in one dimension, but behaves + * like an ordinary line in all other cases. * * @author Wolfgang Bangerth, 1998 */ -template -class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, - public DoFObjectAccessor<1, dim> +template +class MGDoFObjectAccessor<1, dim> : public MGDoFAccessor, + public MGDoFObjectAccessor_Inheritance<1, dim>::BaseClass { public: /** @@ -180,9 +239,9 @@ class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, * to a #MGDoFHandler# object. */ MGDoFObjectAccessor (Triangulation *tria, - const int level, - const int index, - const AccessorData *local_data); + const int level, + const int index, + const AccessorData *local_data); /** * Return the index of the #i#th degree @@ -235,13 +294,13 @@ class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, * class returns a line accessor without * access to the MG data. */ - TriaIterator > child (const unsigned int) const; + TriaIterator > child (const unsigned int) const; /** * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const MGDoFObjectAccessor<1, dim,BaseClass> &a); + void copy_from (const MGDoFObjectAccessor<1, dim> &a); }; @@ -254,9 +313,10 @@ class MGDoFObjectAccessor<1, dim, BaseClass> : public MGDoFAccessor, * * @see DoFLineAccessor */ -template -class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, - public DoFObjectAccessor<2, dim> { +template +class MGDoFObjectAccessor<2, dim> : public MGDoFAccessor, + public MGDoFObjectAccessor_Inheritance<2, dim>::BaseClass +{ public: /** * Declare the data type that this accessor @@ -330,7 +390,7 @@ class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, * Return a pointer to the #i#th line * bounding this #Quad#. */ - TriaIterator > > + TriaIterator > line (const unsigned int i) const; /** @@ -340,13 +400,14 @@ class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, * class returns a quad accessor without * access to the DoF data. */ - TriaIterator > child (const unsigned int) const; + TriaIterator > + child (const unsigned int) const; /** * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const MGDoFObjectAccessor<2, dim,BaseClass> &a); + void copy_from (const MGDoFObjectAccessor<2, dim> &a); }; @@ -357,9 +418,9 @@ class MGDoFObjectAccessor<2, dim, BaseClass> : public MGDoFAccessor, * * @see DoFLineAccessor */ -template -class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, - public DoFObjectAccessor<3, dim> +template +class MGDoFObjectAccessor<3, dim> : public MGDoFAccessor, + public MGDoFObjectAccessor_Inheritance<3, dim>::BaseClass { public: /** @@ -434,14 +495,14 @@ class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, * Return a pointer to the #i#th line * bounding this #Hex#. */ - TriaIterator > > + TriaIterator > line (const unsigned int i) const; /** * Return a pointer to the #i#th quad * bounding this #Hex#. */ - TriaIterator > > + TriaIterator > quad (const unsigned int i) const; /** @@ -451,13 +512,13 @@ class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, * class returns a hex accessor without * access to the DoF data. */ - TriaIterator > child (const unsigned int) const; + TriaIterator > child (const unsigned int) const; /** * Implement the copy operator needed * for the iterator classes. */ - void copy_from (const MGDoFObjectAccessor<3, dim,BaseClass> &a); + void copy_from (const MGDoFObjectAccessor<3, dim> &a); }; @@ -476,22 +537,20 @@ class MGDoFObjectAccessor<3, dim, BaseClass> : public MGDoFAccessor, * @author Wolfgang Bangerth, 1998 */ template -class MGDoFCellAccessor : public MGDoFObjectAccessor > { +class MGDoFCellAccessor : public MGDoFObjectAccessor { public: /** * Type of faces. */ typedef - TriaIterator > > + TriaIterator > face_iterator; /** * Declare the data type that this accessor * class expects to get passed from the * iterator classes. */ - typedef typename - MGDoFObjectAccessor >::AccessorData - AccessorData; + typedef typename MGDoFObjectAccessor::AccessorData AccessorData; /** * Constructor @@ -500,7 +559,7 @@ class MGDoFCellAccessor : public MGDoFObjectAccessor > (tria,level,index,local_data) {}; + MGDoFObjectAccessor (tria,level,index,local_data) {}; /** * Return the #i#th neighbor as a MGDoF cell diff --git a/deal.II/deal.II/include/multigrid/mg_dof_handler.h b/deal.II/deal.II/include/multigrid/mg_dof_handler.h index 4b15d63172..1e9cc35e69 100644 --- a/deal.II/deal.II/include/multigrid/mg_dof_handler.h +++ b/deal.II/deal.II/include/multigrid/mg_dof_handler.h @@ -64,13 +64,13 @@ class MGDoFDimensionInfo<1> { */ class MGDoFDimensionInfo<2> { public: - typedef TriaRawIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > > raw_line_iterator; - typedef TriaIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > > line_iterator; - typedef TriaActiveIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > > active_line_iterator; + typedef TriaRawIterator<2,MGDoFObjectAccessor<1, 2> > raw_line_iterator; + typedef TriaIterator<2,MGDoFObjectAccessor<1, 2> > line_iterator; + typedef TriaActiveIterator<2,MGDoFObjectAccessor<1, 2> > active_line_iterator; - typedef TriaRawIterator<2,MGDoFCellAccessor<2> > raw_quad_iterator; - typedef TriaIterator<2,MGDoFCellAccessor<2> > quad_iterator; - typedef TriaActiveIterator<2,MGDoFCellAccessor<2> > active_quad_iterator; + typedef TriaRawIterator<2,MGDoFCellAccessor<2> > raw_quad_iterator; + typedef TriaIterator<2,MGDoFCellAccessor<2> > quad_iterator; + typedef TriaActiveIterator<2,MGDoFCellAccessor<2> > active_quad_iterator; typedef void * raw_hex_iterator; typedef void * hex_iterator; @@ -95,13 +95,13 @@ class MGDoFDimensionInfo<2> { */ class MGDoFDimensionInfo<3> { public: - typedef TriaRawIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > > raw_line_iterator; - typedef TriaIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > > line_iterator; - typedef TriaActiveIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > > active_line_iterator; + typedef TriaRawIterator<3,MGDoFObjectAccessor<1, 3> > raw_line_iterator; + typedef TriaIterator<3,MGDoFObjectAccessor<1, 3> > line_iterator; + typedef TriaActiveIterator<3,MGDoFObjectAccessor<1, 3> > active_line_iterator; - typedef TriaRawIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > > raw_quad_iterator; - typedef TriaIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > > quad_iterator; - typedef TriaActiveIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > > active_quad_iterator; + typedef TriaRawIterator<3,MGDoFObjectAccessor<2, 3> > raw_quad_iterator; + typedef TriaIterator<3,MGDoFObjectAccessor<2, 3> > quad_iterator; + typedef TriaActiveIterator<3,MGDoFObjectAccessor<2, 3> > active_quad_iterator; typedef TriaRawIterator<3,MGDoFCellAccessor<3> > raw_hex_iterator; typedef TriaIterator<3,MGDoFCellAccessor<3> > hex_iterator; @@ -958,12 +958,9 @@ class MGDoFHandler */ vector mg_used_dofs; - friend class MGDoFObjectAccessor<1, dim, TriaObjectAccessor<1, dim> >; - friend class MGDoFObjectAccessor<1, dim, CellAccessor >; - friend class MGDoFObjectAccessor<2, dim, TriaObjectAccessor<2, dim> >; - friend class MGDoFObjectAccessor<2, dim, CellAccessor >; - friend class MGDoFObjectAccessor<3, dim, TriaObjectAccessor<3, dim> >; - friend class MGDoFObjectAccessor<3, dim, CellAccessor >; + friend class MGDoFObjectAccessor<1, dim>; + friend class MGDoFObjectAccessor<2, dim>; + friend class MGDoFObjectAccessor<3, dim>; }; diff --git a/deal.II/deal.II/source/dofs/mg_dof_accessor.cc b/deal.II/deal.II/source/dofs/mg_dof_accessor.cc index ff405751bc..5b00e6f657 100644 --- a/deal.II/deal.II/source/dofs/mg_dof_accessor.cc +++ b/deal.II/deal.II/source/dofs/mg_dof_accessor.cc @@ -21,18 +21,18 @@ /* ------------------------ MGDoFLineAccessor --------------------------- */ -template -MGDoFObjectAccessor<1, dim,BaseClass>::MGDoFObjectAccessor (Triangulation *tria, +template +MGDoFObjectAccessor<1, dim>::MGDoFObjectAccessor (Triangulation *tria, const int level, const int index, const AccessorData *local_data) : MGDoFAccessor (local_data), - DoFObjectAccessor<1, dim>(tria,level,index,local_data) {}; + MGDoFObjectAccessor_Inheritance<1,dim>::BaseClass(tria,level,index,local_data) {}; -template -int MGDoFObjectAccessor<1, dim,BaseClass>::mg_dof_index (const unsigned int i) const { +template +int MGDoFObjectAccessor<1, dim>::mg_dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -49,8 +49,8 @@ int MGDoFObjectAccessor<1, dim,BaseClass>::mg_dof_index (const unsigned int i) c -template -void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_dof_index (const unsigned int i, +template +void MGDoFObjectAccessor<1, dim>::set_mg_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -67,8 +67,8 @@ void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_dof_index (const unsigned int -template -int MGDoFObjectAccessor<1, dim,BaseClass>::mg_vertex_dof_index (const unsigned int vertex, +template +int MGDoFObjectAccessor<1, dim>::mg_vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -83,8 +83,8 @@ int MGDoFObjectAccessor<1, dim,BaseClass>::mg_vertex_dof_index (const unsigned i -template -void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_vertex_dof_index (const unsigned int vertex, +template +void MGDoFObjectAccessor<1, dim>::set_mg_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -100,15 +100,15 @@ void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_vertex_dof_index (const unsig -template +template void -MGDoFObjectAccessor<1, dim,BaseClass>::get_mg_dof_indices (vector &dof_indices) const { +MGDoFObjectAccessor<1, dim>::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (dof_indices.size() == (2*dof_handler->get_fe().dofs_per_vertex + dof_handler->get_fe().dofs_per_line), - ExcVectorDoesNotMatch()); + DoFAccessor::ExcVectorDoesNotMatch()); const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, dofs_per_line = dof_handler->get_fe().dofs_per_line; @@ -122,10 +122,10 @@ MGDoFObjectAccessor<1, dim,BaseClass>::get_mg_dof_indices (vector &dof_indi -template -TriaIterator > -MGDoFObjectAccessor<1, dim,BaseClass>::child (const unsigned int i) const { - TriaIterator > q (tria, +template +TriaIterator > +MGDoFObjectAccessor<1, dim>::child (const unsigned int i) const { + TriaIterator > q (tria, present_level+1, child_index (i), mg_dof_handler); @@ -139,9 +139,9 @@ MGDoFObjectAccessor<1, dim,BaseClass>::child (const unsigned int i) const { -template +template void -MGDoFObjectAccessor<1, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<1, dim,BaseClass> &a) +MGDoFObjectAccessor<1, dim>::copy_from (const MGDoFObjectAccessor<1, dim> &a) { DoFObjectAccessor<1, dim>::copy_from (a); set_mg_dof_handler (a.mg_dof_handler); @@ -152,20 +152,20 @@ MGDoFObjectAccessor<1, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<1, d /* ------------------------ MGDoFQuadAccessor --------------------------- */ -template -MGDoFObjectAccessor<2, dim,BaseClass>::MGDoFObjectAccessor (Triangulation *tria, - const int level, - const int index, - const AccessorData *local_data) : +template +MGDoFObjectAccessor<2, dim>::MGDoFObjectAccessor (Triangulation *tria, + const int level, + const int index, + const AccessorData *local_data) : MGDoFAccessor (local_data), - DoFObjectAccessor<2, dim>(tria,level,index,local_data) + MGDoFObjectAccessor_Inheritance<2,dim>::BaseClass(tria,level,index,local_data) {}; -template +template inline -int MGDoFObjectAccessor<2, dim,BaseClass>::mg_dof_index (const unsigned int i) const { +int MGDoFObjectAccessor<2, dim>::mg_dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -180,8 +180,8 @@ int MGDoFObjectAccessor<2, dim,BaseClass>::mg_dof_index (const unsigned int i) c -template -void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_dof_index (const unsigned int i, +template +void MGDoFObjectAccessor<2, dim>::set_mg_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -197,9 +197,9 @@ void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_dof_index (const unsigned int -template +template inline -int MGDoFObjectAccessor<2, dim,BaseClass>::mg_vertex_dof_index (const unsigned int vertex, +int MGDoFObjectAccessor<2, dim>::mg_vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -214,8 +214,8 @@ int MGDoFObjectAccessor<2, dim,BaseClass>::mg_vertex_dof_index (const unsigned i -template -void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_vertex_dof_index (const unsigned int vertex, +template +void MGDoFObjectAccessor<2, dim>::set_mg_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -231,16 +231,16 @@ void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_vertex_dof_index (const unsig -template +template void -MGDoFObjectAccessor<2, dim,BaseClass>::get_mg_dof_indices (vector &dof_indices) const { +MGDoFObjectAccessor<2, dim>::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (dof_indices.size() == (4*dof_handler->get_fe().dofs_per_vertex + 4*dof_handler->get_fe().dofs_per_line + dof_handler->get_fe().dofs_per_quad), - ExcVectorDoesNotMatch()); + DoFAccessor<2>::ExcVectorDoesNotMatch()); const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, dofs_per_line = dof_handler->get_fe().dofs_per_line, @@ -258,12 +258,12 @@ MGDoFObjectAccessor<2, dim,BaseClass>::get_mg_dof_indices (vector &dof_indi -template -TriaIterator > > -MGDoFObjectAccessor<2, dim,BaseClass>::line (const unsigned int i) const { +template +TriaIterator > +MGDoFObjectAccessor<2, dim>::line (const unsigned int i) const { Assert (i<4, ExcIndexRange (i, 0, 4)); - return TriaIterator > > + return TriaIterator > ( tria, present_level, @@ -274,10 +274,10 @@ MGDoFObjectAccessor<2, dim,BaseClass>::line (const unsigned int i) const { -template -TriaIterator > -MGDoFObjectAccessor<2, dim,BaseClass>::child (const unsigned int i) const { - TriaIterator > q (tria, +template +TriaIterator > +MGDoFObjectAccessor<2, dim>::child (const unsigned int i) const { + TriaIterator > q (tria, present_level+1, child_index (i), mg_dof_handler); @@ -291,9 +291,9 @@ MGDoFObjectAccessor<2, dim,BaseClass>::child (const unsigned int i) const { -template +template void -MGDoFObjectAccessor<2, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<2, dim,BaseClass> &a) { +MGDoFObjectAccessor<2, dim>::copy_from (const MGDoFObjectAccessor<2, dim> &a) { DoFObjectAccessor<2, dim>::copy_from (a); set_mg_dof_handler (a.mg_dof_handler); }; @@ -303,19 +303,19 @@ MGDoFObjectAccessor<2, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<2, d /* ------------------------ MGDoFHexAccessor --------------------------- */ -template -MGDoFObjectAccessor<3, dim,BaseClass>::MGDoFObjectAccessor (Triangulation *tria, +template +MGDoFObjectAccessor<3, dim>::MGDoFObjectAccessor (Triangulation *tria, const int level, const int index, const AccessorData *local_data) : MGDoFAccessor (local_data), - DoFObjectAccessor<3, dim>(tria,level,index,local_data) {}; + MGDoFObjectAccessor_Inheritance<2,dim>::BaseClass(tria,level,index,local_data) {}; -template +template inline -int MGDoFObjectAccessor<3, dim,BaseClass>::mg_dof_index (const unsigned int i) const { +int MGDoFObjectAccessor<3, dim>::mg_dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -330,8 +330,8 @@ int MGDoFObjectAccessor<3, dim,BaseClass>::mg_dof_index (const unsigned int i) c -template -void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_dof_index (const unsigned int i, +template +void MGDoFObjectAccessor<3, dim>::set_mg_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -347,9 +347,9 @@ void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_dof_index (const unsigned int -template +template inline -int MGDoFObjectAccessor<3, dim,BaseClass>::mg_vertex_dof_index (const unsigned int vertex, +int MGDoFObjectAccessor<3, dim>::mg_vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -364,8 +364,8 @@ int MGDoFObjectAccessor<3, dim,BaseClass>::mg_vertex_dof_index (const unsigned i -template -void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_vertex_dof_index (const unsigned int vertex, +template +void MGDoFObjectAccessor<3, dim>::set_mg_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -381,9 +381,9 @@ void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_vertex_dof_index (const unsig -template +template void -MGDoFObjectAccessor<3, dim,BaseClass>::get_mg_dof_indices (vector &dof_indices) const { +MGDoFObjectAccessor<3, dim>::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); @@ -413,12 +413,12 @@ MGDoFObjectAccessor<3, dim,BaseClass>::get_mg_dof_indices (vector &dof_indi -template -TriaIterator > > -MGDoFObjectAccessor<3, dim,BaseClass>::line (const unsigned int i) const { +template +TriaIterator > +MGDoFObjectAccessor<3, dim>::line (const unsigned int i) const { Assert (i<12, ExcIndexRange (i, 0, 12)); - return TriaIterator > > + return TriaIterator > ( tria, present_level, @@ -429,12 +429,12 @@ MGDoFObjectAccessor<3, dim,BaseClass>::line (const unsigned int i) const { -template -TriaIterator > > -MGDoFObjectAccessor<3, dim,BaseClass>::quad (const unsigned int i) const { +template +TriaIterator > +MGDoFObjectAccessor<3, dim>::quad (const unsigned int i) const { Assert (i<12, ExcIndexRange (i, 0, 6)); - return TriaIterator > > + return TriaIterator > ( tria, present_level, @@ -445,13 +445,13 @@ MGDoFObjectAccessor<3, dim,BaseClass>::quad (const unsigned int i) const { -template -TriaIterator > -MGDoFObjectAccessor<3, dim,BaseClass>::child (const unsigned int i) const { - TriaIterator > q (tria, - present_level+1, - child_index (i), - mg_dof_handler); +template +TriaIterator > +MGDoFObjectAccessor<3, dim>::child (const unsigned int i) const { + TriaIterator > q (tria, + present_level+1, + child_index (i), + mg_dof_handler); #ifdef DEBUG if (q.state() != past_the_end) @@ -462,9 +462,9 @@ MGDoFObjectAccessor<3, dim,BaseClass>::child (const unsigned int i) const { -template +template void -MGDoFObjectAccessor<3, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<3, dim,BaseClass> &a) { +MGDoFObjectAccessor<3, dim>::copy_from (const MGDoFObjectAccessor<3, dim> &a) { DoFObjectAccessor<3, dim>::copy_from (a); set_mg_dof_handler (a.mg_dof_handler); }; @@ -562,13 +562,13 @@ template <> void MGDoFCellAccessor<2>::get_mg_dof_values (const Vector &values, Vector &dof_values) const { - Assert (dof_handler != 0, ExcInvalidObject()); - Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_handler != 0, DoFAccessor<2>::ExcInvalidObject()); + Assert (mg_dof_handler != 0, DoFAccessor<2>::ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, DoFAccessor<2>::ExcInvalidObject()); Assert (dof_values.size() == dof_handler->get_fe().total_dofs, - ExcVectorDoesNotMatch()); + DoFAccessor<2>::ExcVectorDoesNotMatch()); Assert (values.size() == mg_dof_handler->n_dofs(present_level), - ExcVectorDoesNotMatch()); + DoFAccessor<2>::ExcVectorDoesNotMatch()); const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, dofs_per_line = dof_handler->get_fe().dofs_per_line, @@ -592,7 +592,7 @@ MGDoFCellAccessor<2>::get_mg_dof_values (const Vector &values, // explicit instantiations #if deal_II_dimension == 1 -template class MGDoFObjectAccessor<1, 1,CellAccessor<1> >; +template class MGDoFObjectAccessor<1, 1>; template class MGDoFCellAccessor<1>; template class TriaRawIterator<1,MGDoFCellAccessor<1> >; @@ -601,36 +601,36 @@ template class TriaActiveIterator<1,MGDoFCellAccessor<1> >; #endif #if deal_II_dimension == 2 -template class MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> >; -template class MGDoFObjectAccessor<2, 2,TriaObjectAccessor<2, 2> >; -template class MGDoFObjectAccessor<2, 2,CellAccessor<2> >; +template class MGDoFObjectAccessor<1, 2>; +template class MGDoFObjectAccessor<2, 2>; template class MGDoFCellAccessor<2>; -template class TriaRawIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > >; -template class TriaRawIterator<2,MGDoFCellAccessor<2> >; -template class TriaIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > >; -template class TriaIterator<2,MGDoFCellAccessor<2> >; -template class TriaActiveIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > >; +template class TriaRawIterator <2,MGDoFObjectAccessor<1, 2> >; +template class TriaIterator <2,MGDoFObjectAccessor<1, 2> >; +template class TriaActiveIterator<2,MGDoFObjectAccessor<1, 2> >; + +template class TriaRawIterator <2,MGDoFCellAccessor<2> >; +template class TriaIterator <2,MGDoFCellAccessor<2> >; template class TriaActiveIterator<2,MGDoFCellAccessor<2> >; #endif #if deal_II_dimension == 3 -template class MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> >; -template class MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> >; -template class MGDoFObjectAccessor<3, 3,TriaObjectAccessor<3, 3> >; -template class MGDoFObjectAccessor<3, 3,CellAccessor<3> >; +template class MGDoFObjectAccessor<1, 3>; +template class MGDoFObjectAccessor<2, 3>; +template class MGDoFObjectAccessor<3, 3>; template class MGDoFCellAccessor<3>; -template class TriaRawIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > >; -template class TriaRawIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > >; -template class TriaRawIterator<3,MGDoFObjectAccessor<3, 3,TriaObjectAccessor<3, 3> > >; -template class TriaRawIterator<3,MGDoFCellAccessor<3> >; -template class TriaIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > >; -template class TriaIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > >; -template class TriaIterator<3,MGDoFCellAccessor<3> >; -template class TriaActiveIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > >; -template class TriaActiveIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > >; +template class TriaRawIterator <3,MGDoFObjectAccessor<1, 3> >; +template class TriaIterator <3,MGDoFObjectAccessor<1, 3> >; +template class TriaActiveIterator<3,MGDoFObjectAccessor<1, 3> >; + +template class TriaRawIterator <3,MGDoFObjectAccessor<2, 3> >; +template class TriaIterator <3,MGDoFObjectAccessor<2, 3> >; +template class TriaActiveIterator<3,MGDoFObjectAccessor<2, 3> >; + +template class TriaRawIterator <3,MGDoFCellAccessor<3> >; +template class TriaIterator <3,MGDoFCellAccessor<3> >; template class TriaActiveIterator<3,MGDoFCellAccessor<3> >; #endif diff --git a/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc b/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc index ff405751bc..5b00e6f657 100644 --- a/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc +++ b/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc @@ -21,18 +21,18 @@ /* ------------------------ MGDoFLineAccessor --------------------------- */ -template -MGDoFObjectAccessor<1, dim,BaseClass>::MGDoFObjectAccessor (Triangulation *tria, +template +MGDoFObjectAccessor<1, dim>::MGDoFObjectAccessor (Triangulation *tria, const int level, const int index, const AccessorData *local_data) : MGDoFAccessor (local_data), - DoFObjectAccessor<1, dim>(tria,level,index,local_data) {}; + MGDoFObjectAccessor_Inheritance<1,dim>::BaseClass(tria,level,index,local_data) {}; -template -int MGDoFObjectAccessor<1, dim,BaseClass>::mg_dof_index (const unsigned int i) const { +template +int MGDoFObjectAccessor<1, dim>::mg_dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -49,8 +49,8 @@ int MGDoFObjectAccessor<1, dim,BaseClass>::mg_dof_index (const unsigned int i) c -template -void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_dof_index (const unsigned int i, +template +void MGDoFObjectAccessor<1, dim>::set_mg_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -67,8 +67,8 @@ void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_dof_index (const unsigned int -template -int MGDoFObjectAccessor<1, dim,BaseClass>::mg_vertex_dof_index (const unsigned int vertex, +template +int MGDoFObjectAccessor<1, dim>::mg_vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -83,8 +83,8 @@ int MGDoFObjectAccessor<1, dim,BaseClass>::mg_vertex_dof_index (const unsigned i -template -void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_vertex_dof_index (const unsigned int vertex, +template +void MGDoFObjectAccessor<1, dim>::set_mg_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -100,15 +100,15 @@ void MGDoFObjectAccessor<1, dim,BaseClass>::set_mg_vertex_dof_index (const unsig -template +template void -MGDoFObjectAccessor<1, dim,BaseClass>::get_mg_dof_indices (vector &dof_indices) const { +MGDoFObjectAccessor<1, dim>::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (dof_indices.size() == (2*dof_handler->get_fe().dofs_per_vertex + dof_handler->get_fe().dofs_per_line), - ExcVectorDoesNotMatch()); + DoFAccessor::ExcVectorDoesNotMatch()); const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, dofs_per_line = dof_handler->get_fe().dofs_per_line; @@ -122,10 +122,10 @@ MGDoFObjectAccessor<1, dim,BaseClass>::get_mg_dof_indices (vector &dof_indi -template -TriaIterator > -MGDoFObjectAccessor<1, dim,BaseClass>::child (const unsigned int i) const { - TriaIterator > q (tria, +template +TriaIterator > +MGDoFObjectAccessor<1, dim>::child (const unsigned int i) const { + TriaIterator > q (tria, present_level+1, child_index (i), mg_dof_handler); @@ -139,9 +139,9 @@ MGDoFObjectAccessor<1, dim,BaseClass>::child (const unsigned int i) const { -template +template void -MGDoFObjectAccessor<1, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<1, dim,BaseClass> &a) +MGDoFObjectAccessor<1, dim>::copy_from (const MGDoFObjectAccessor<1, dim> &a) { DoFObjectAccessor<1, dim>::copy_from (a); set_mg_dof_handler (a.mg_dof_handler); @@ -152,20 +152,20 @@ MGDoFObjectAccessor<1, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<1, d /* ------------------------ MGDoFQuadAccessor --------------------------- */ -template -MGDoFObjectAccessor<2, dim,BaseClass>::MGDoFObjectAccessor (Triangulation *tria, - const int level, - const int index, - const AccessorData *local_data) : +template +MGDoFObjectAccessor<2, dim>::MGDoFObjectAccessor (Triangulation *tria, + const int level, + const int index, + const AccessorData *local_data) : MGDoFAccessor (local_data), - DoFObjectAccessor<2, dim>(tria,level,index,local_data) + MGDoFObjectAccessor_Inheritance<2,dim>::BaseClass(tria,level,index,local_data) {}; -template +template inline -int MGDoFObjectAccessor<2, dim,BaseClass>::mg_dof_index (const unsigned int i) const { +int MGDoFObjectAccessor<2, dim>::mg_dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -180,8 +180,8 @@ int MGDoFObjectAccessor<2, dim,BaseClass>::mg_dof_index (const unsigned int i) c -template -void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_dof_index (const unsigned int i, +template +void MGDoFObjectAccessor<2, dim>::set_mg_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -197,9 +197,9 @@ void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_dof_index (const unsigned int -template +template inline -int MGDoFObjectAccessor<2, dim,BaseClass>::mg_vertex_dof_index (const unsigned int vertex, +int MGDoFObjectAccessor<2, dim>::mg_vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -214,8 +214,8 @@ int MGDoFObjectAccessor<2, dim,BaseClass>::mg_vertex_dof_index (const unsigned i -template -void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_vertex_dof_index (const unsigned int vertex, +template +void MGDoFObjectAccessor<2, dim>::set_mg_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -231,16 +231,16 @@ void MGDoFObjectAccessor<2, dim,BaseClass>::set_mg_vertex_dof_index (const unsig -template +template void -MGDoFObjectAccessor<2, dim,BaseClass>::get_mg_dof_indices (vector &dof_indices) const { +MGDoFObjectAccessor<2, dim>::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (dof_indices.size() == (4*dof_handler->get_fe().dofs_per_vertex + 4*dof_handler->get_fe().dofs_per_line + dof_handler->get_fe().dofs_per_quad), - ExcVectorDoesNotMatch()); + DoFAccessor<2>::ExcVectorDoesNotMatch()); const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, dofs_per_line = dof_handler->get_fe().dofs_per_line, @@ -258,12 +258,12 @@ MGDoFObjectAccessor<2, dim,BaseClass>::get_mg_dof_indices (vector &dof_indi -template -TriaIterator > > -MGDoFObjectAccessor<2, dim,BaseClass>::line (const unsigned int i) const { +template +TriaIterator > +MGDoFObjectAccessor<2, dim>::line (const unsigned int i) const { Assert (i<4, ExcIndexRange (i, 0, 4)); - return TriaIterator > > + return TriaIterator > ( tria, present_level, @@ -274,10 +274,10 @@ MGDoFObjectAccessor<2, dim,BaseClass>::line (const unsigned int i) const { -template -TriaIterator > -MGDoFObjectAccessor<2, dim,BaseClass>::child (const unsigned int i) const { - TriaIterator > q (tria, +template +TriaIterator > +MGDoFObjectAccessor<2, dim>::child (const unsigned int i) const { + TriaIterator > q (tria, present_level+1, child_index (i), mg_dof_handler); @@ -291,9 +291,9 @@ MGDoFObjectAccessor<2, dim,BaseClass>::child (const unsigned int i) const { -template +template void -MGDoFObjectAccessor<2, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<2, dim,BaseClass> &a) { +MGDoFObjectAccessor<2, dim>::copy_from (const MGDoFObjectAccessor<2, dim> &a) { DoFObjectAccessor<2, dim>::copy_from (a); set_mg_dof_handler (a.mg_dof_handler); }; @@ -303,19 +303,19 @@ MGDoFObjectAccessor<2, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<2, d /* ------------------------ MGDoFHexAccessor --------------------------- */ -template -MGDoFObjectAccessor<3, dim,BaseClass>::MGDoFObjectAccessor (Triangulation *tria, +template +MGDoFObjectAccessor<3, dim>::MGDoFObjectAccessor (Triangulation *tria, const int level, const int index, const AccessorData *local_data) : MGDoFAccessor (local_data), - DoFObjectAccessor<3, dim>(tria,level,index,local_data) {}; + MGDoFObjectAccessor_Inheritance<2,dim>::BaseClass(tria,level,index,local_data) {}; -template +template inline -int MGDoFObjectAccessor<3, dim,BaseClass>::mg_dof_index (const unsigned int i) const { +int MGDoFObjectAccessor<3, dim>::mg_dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -330,8 +330,8 @@ int MGDoFObjectAccessor<3, dim,BaseClass>::mg_dof_index (const unsigned int i) c -template -void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_dof_index (const unsigned int i, +template +void MGDoFObjectAccessor<3, dim>::set_mg_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -347,9 +347,9 @@ void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_dof_index (const unsigned int -template +template inline -int MGDoFObjectAccessor<3, dim,BaseClass>::mg_vertex_dof_index (const unsigned int vertex, +int MGDoFObjectAccessor<3, dim>::mg_vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); @@ -364,8 +364,8 @@ int MGDoFObjectAccessor<3, dim,BaseClass>::mg_vertex_dof_index (const unsigned i -template -void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_vertex_dof_index (const unsigned int vertex, +template +void MGDoFObjectAccessor<3, dim>::set_mg_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -381,9 +381,9 @@ void MGDoFObjectAccessor<3, dim,BaseClass>::set_mg_vertex_dof_index (const unsig -template +template void -MGDoFObjectAccessor<3, dim,BaseClass>::get_mg_dof_indices (vector &dof_indices) const { +MGDoFObjectAccessor<3, dim>::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); @@ -413,12 +413,12 @@ MGDoFObjectAccessor<3, dim,BaseClass>::get_mg_dof_indices (vector &dof_indi -template -TriaIterator > > -MGDoFObjectAccessor<3, dim,BaseClass>::line (const unsigned int i) const { +template +TriaIterator > +MGDoFObjectAccessor<3, dim>::line (const unsigned int i) const { Assert (i<12, ExcIndexRange (i, 0, 12)); - return TriaIterator > > + return TriaIterator > ( tria, present_level, @@ -429,12 +429,12 @@ MGDoFObjectAccessor<3, dim,BaseClass>::line (const unsigned int i) const { -template -TriaIterator > > -MGDoFObjectAccessor<3, dim,BaseClass>::quad (const unsigned int i) const { +template +TriaIterator > +MGDoFObjectAccessor<3, dim>::quad (const unsigned int i) const { Assert (i<12, ExcIndexRange (i, 0, 6)); - return TriaIterator > > + return TriaIterator > ( tria, present_level, @@ -445,13 +445,13 @@ MGDoFObjectAccessor<3, dim,BaseClass>::quad (const unsigned int i) const { -template -TriaIterator > -MGDoFObjectAccessor<3, dim,BaseClass>::child (const unsigned int i) const { - TriaIterator > q (tria, - present_level+1, - child_index (i), - mg_dof_handler); +template +TriaIterator > +MGDoFObjectAccessor<3, dim>::child (const unsigned int i) const { + TriaIterator > q (tria, + present_level+1, + child_index (i), + mg_dof_handler); #ifdef DEBUG if (q.state() != past_the_end) @@ -462,9 +462,9 @@ MGDoFObjectAccessor<3, dim,BaseClass>::child (const unsigned int i) const { -template +template void -MGDoFObjectAccessor<3, dim,BaseClass>::copy_from (const MGDoFObjectAccessor<3, dim,BaseClass> &a) { +MGDoFObjectAccessor<3, dim>::copy_from (const MGDoFObjectAccessor<3, dim> &a) { DoFObjectAccessor<3, dim>::copy_from (a); set_mg_dof_handler (a.mg_dof_handler); }; @@ -562,13 +562,13 @@ template <> void MGDoFCellAccessor<2>::get_mg_dof_values (const Vector &values, Vector &dof_values) const { - Assert (dof_handler != 0, ExcInvalidObject()); - Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_handler != 0, DoFAccessor<2>::ExcInvalidObject()); + Assert (mg_dof_handler != 0, DoFAccessor<2>::ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, DoFAccessor<2>::ExcInvalidObject()); Assert (dof_values.size() == dof_handler->get_fe().total_dofs, - ExcVectorDoesNotMatch()); + DoFAccessor<2>::ExcVectorDoesNotMatch()); Assert (values.size() == mg_dof_handler->n_dofs(present_level), - ExcVectorDoesNotMatch()); + DoFAccessor<2>::ExcVectorDoesNotMatch()); const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, dofs_per_line = dof_handler->get_fe().dofs_per_line, @@ -592,7 +592,7 @@ MGDoFCellAccessor<2>::get_mg_dof_values (const Vector &values, // explicit instantiations #if deal_II_dimension == 1 -template class MGDoFObjectAccessor<1, 1,CellAccessor<1> >; +template class MGDoFObjectAccessor<1, 1>; template class MGDoFCellAccessor<1>; template class TriaRawIterator<1,MGDoFCellAccessor<1> >; @@ -601,36 +601,36 @@ template class TriaActiveIterator<1,MGDoFCellAccessor<1> >; #endif #if deal_II_dimension == 2 -template class MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> >; -template class MGDoFObjectAccessor<2, 2,TriaObjectAccessor<2, 2> >; -template class MGDoFObjectAccessor<2, 2,CellAccessor<2> >; +template class MGDoFObjectAccessor<1, 2>; +template class MGDoFObjectAccessor<2, 2>; template class MGDoFCellAccessor<2>; -template class TriaRawIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > >; -template class TriaRawIterator<2,MGDoFCellAccessor<2> >; -template class TriaIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > >; -template class TriaIterator<2,MGDoFCellAccessor<2> >; -template class TriaActiveIterator<2,MGDoFObjectAccessor<1, 2,TriaObjectAccessor<1, 2> > >; +template class TriaRawIterator <2,MGDoFObjectAccessor<1, 2> >; +template class TriaIterator <2,MGDoFObjectAccessor<1, 2> >; +template class TriaActiveIterator<2,MGDoFObjectAccessor<1, 2> >; + +template class TriaRawIterator <2,MGDoFCellAccessor<2> >; +template class TriaIterator <2,MGDoFCellAccessor<2> >; template class TriaActiveIterator<2,MGDoFCellAccessor<2> >; #endif #if deal_II_dimension == 3 -template class MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> >; -template class MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> >; -template class MGDoFObjectAccessor<3, 3,TriaObjectAccessor<3, 3> >; -template class MGDoFObjectAccessor<3, 3,CellAccessor<3> >; +template class MGDoFObjectAccessor<1, 3>; +template class MGDoFObjectAccessor<2, 3>; +template class MGDoFObjectAccessor<3, 3>; template class MGDoFCellAccessor<3>; -template class TriaRawIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > >; -template class TriaRawIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > >; -template class TriaRawIterator<3,MGDoFObjectAccessor<3, 3,TriaObjectAccessor<3, 3> > >; -template class TriaRawIterator<3,MGDoFCellAccessor<3> >; -template class TriaIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > >; -template class TriaIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > >; -template class TriaIterator<3,MGDoFCellAccessor<3> >; -template class TriaActiveIterator<3,MGDoFObjectAccessor<1, 3,TriaObjectAccessor<1, 3> > >; -template class TriaActiveIterator<3,MGDoFObjectAccessor<2, 3,TriaObjectAccessor<2, 3> > >; +template class TriaRawIterator <3,MGDoFObjectAccessor<1, 3> >; +template class TriaIterator <3,MGDoFObjectAccessor<1, 3> >; +template class TriaActiveIterator<3,MGDoFObjectAccessor<1, 3> >; + +template class TriaRawIterator <3,MGDoFObjectAccessor<2, 3> >; +template class TriaIterator <3,MGDoFObjectAccessor<2, 3> >; +template class TriaActiveIterator<3,MGDoFObjectAccessor<2, 3> >; + +template class TriaRawIterator <3,MGDoFCellAccessor<3> >; +template class TriaIterator <3,MGDoFCellAccessor<3> >; template class TriaActiveIterator<3,MGDoFCellAccessor<3> >; #endif