]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
make DOFINFO a template argument of MeshWorker::loop
authorkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Sun, 28 Mar 2010 19:49:36 +0000 (19:49 +0000)
committerkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Sun, 28 Mar 2010 19:49:36 +0000 (19:49 +0000)
git-svn-id: https://svn.dealii.org/trunk@20904 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/include/numerics/mesh_worker_info.h
deal.II/deal.II/include/numerics/mesh_worker_loop.h
deal.II/deal.II/source/numerics/mesh_worker_info.cc

index 5ccd0a3f619a523f987ba34e04f77c8dc3ad0b0b..d141bbb210861639c9e03383eae49789bf11ee3e 100644 (file)
@@ -24,6 +24,8 @@ DEAL_II_NAMESPACE_OPEN
 
 namespace MeshWorker
 {
+  template <int dim, class DOFINFO> class DoFInfoBox;
+  
 /**
  * The class providing the scrapbook to fill with local integration
  * results. These can be values, local contributions to forms or cell
@@ -230,7 +232,7 @@ namespace MeshWorker
       std::vector<std::vector<number> > quadrature_values;
   };
 
-  template <int dim, int spacedim> class DoFInfoBox;
+  template <int dim, class DOFINFO> class DoFInfoBox;
 
 /**
  * A class containing information on geometry and degrees of freedom
@@ -271,10 +273,10 @@ namespace MeshWorker
   {
     public:
                                       /// The current cell
-      typename Triangulation<dim>::cell_iterator cell;
+      typename Triangulation<dim, spacedim>::cell_iterator cell;
 
                                       /// The current face
-      typename Triangulation<dim>::face_iterator face;
+      typename Triangulation<dim, spacedim>::face_iterator face;
 
                                       /**
                                        * The number of the current
@@ -383,7 +385,7 @@ namespace MeshWorker
                                        */
       BlockIndices aux_local_indices;
       
-      friend class DoFInfoBox<dim, spacedim>;
+      friend class DoFInfoBox<dim, DoFInfo<dim, spacedim, number> >;
   };
 
 
@@ -395,9 +397,10 @@ namespace MeshWorker
  * itself in one object, saving a bit of memory and a few operations,
  * but sacrificing some cleanliness.
  *
+ * @ingroup MeshWorker
  * @author Guido Kanschat, 2010
  */
-  template <int dim, int spacedim=dim>
+  template <int dim, class DOFINFO>
   class DoFInfoBox
   {
     public:
@@ -405,14 +408,14 @@ namespace MeshWorker
                                        * Constructor copying the seed
                                        * into all other objects.
                                        */
-      DoFInfoBox(const DoFInfo<dim, spacedim>& seed);
+      DoFInfoBox(const DOFINFO& seed);
 
                                       /**
                                        * Copy constructor, taking
                                        * #cell and using it as a seed
                                        * in the other constructor.
                                        */
-      DoFInfoBox(const DoFInfoBox<dim, spacedim>&);
+      DoFInfoBox(const DoFInfoBox<dim, DOFINFO>&);
       
                                       /**
                                        * Reset all the availability flags.
@@ -435,15 +438,15 @@ namespace MeshWorker
                                       /**
                                        * The data for the cell.
                                        */
-      DoFInfo<dim> cell;
+      DOFINFO cell;
                                       /**
                                        * The data for the faces from inside.
                                        */
-      DoFInfo<dim> interior[GeometryInfo<dim>::faces_per_cell];
+      DOFINFO interior[GeometryInfo<dim>::faces_per_cell];
                                       /**
                                        * The data for the faces from outside.
                                        */
-      DoFInfo<dim> exterior[GeometryInfo<dim>::faces_per_cell];
+      DOFINFO exterior[GeometryInfo<dim>::faces_per_cell];
 
                                       /**
                                        * A set of flags, indicating
@@ -1080,9 +1083,9 @@ namespace MeshWorker
 
 //----------------------------------------------------------------------//
   
-  template < int dim, int spacedim>
+  template <int dim, class DOFINFO>
   inline
-  DoFInfoBox<dim, spacedim>::DoFInfoBox(const DoFInfo<dim, spacedim>& seed)
+  DoFInfoBox<dim, DOFINFO>::DoFInfoBox(const DOFINFO& seed)
                  :
                  cell(seed)
   {
@@ -1096,9 +1099,9 @@ namespace MeshWorker
   }
 
 
-  template < int dim, int spacedim>
+  template <int dim, class DOFINFO>
   inline
-  DoFInfoBox<dim, spacedim>::DoFInfoBox(const DoFInfoBox<dim, spacedim>& other)
+  DoFInfoBox<dim, DOFINFO>::DoFInfoBox(const DoFInfoBox<dim, DOFINFO>& other)
                  :
                  cell(other.cell)
   {
@@ -1112,9 +1115,9 @@ namespace MeshWorker
   }
 
 
-  template < int dim, int spacedim>
+  template <int dim, class DOFINFO>
   inline void
-  DoFInfoBox<dim, spacedim>::reset ()
+  DoFInfoBox<dim, DOFINFO>::reset ()
   {
     for (unsigned int i=0;i<GeometryInfo<dim>::faces_per_cell;++i)
       {
@@ -1124,10 +1127,10 @@ namespace MeshWorker
   }
 
   
-  template < int dim, int spacedim>
+  template <int dim, class DOFINFO>
   template <class ASSEMBLER>
   inline void
-  DoFInfoBox<dim, spacedim>::assemble (ASSEMBLER& assembler) const
+  DoFInfoBox<dim, DOFINFO>::assemble (ASSEMBLER& assembler) const
   {
     assembler.assemble(cell);
     for (unsigned int i=0;i<GeometryInfo<dim>::faces_per_cell;++i)
index a423fc2af627ee6f7af142b5b34ceb48063461cd..24f60454eeb82f45b6266eb67d989eef0725458a 100644 (file)
@@ -42,8 +42,8 @@ namespace internal
     return true;
   }
 
-  template<int dim, int sdim, class A>
-  void assemble(const MeshWorker::DoFInfoBox<dim, sdim>& dinfo, A& assembler)
+  template<int dim, class DOFINFO, class A>
+  void assemble(const MeshWorker::DoFInfoBox<dim, DOFINFO>& dinfo, A& assembler)
   {
     dinfo.assemble(assembler);
   }
@@ -85,10 +85,10 @@ namespace MeshWorker
  *
  * @author Guido Kanschat, 2010
  */
-  template<class INFOBOX, int dim, int spacedim, class ITERATOR>
+  template<class INFOBOX, class DOFINFO, int dim, int spacedim, class ITERATOR>
   void cell_action(
     ITERATOR cell,
-    DoFInfoBox<dim, spacedim>& dof_info,
+    DoFInfoBox<dim, DOFINFO>& dof_info,
     INFOBOX& info,
     const std_cxx1x::function<void (DoFInfo<dim, spacedim>&, typename INFOBOX::CellInfo &)> &cell_worker,
     const std_cxx1x::function<void (DoFInfo<dim, spacedim>&, typename INFOBOX::FaceInfo &)> &boundary_worker,
@@ -230,10 +230,10 @@ namespace MeshWorker
  * @ingroup MeshWorker
  * @author Guido Kanschat, 2009
  */
-  template<class INFOBOX, int dim, int spacedim, typename ASSEMBLER, class ITERATOR>
+  template<class DOFINFO, class INFOBOX, int dim, int spacedim, typename ASSEMBLER, class ITERATOR>
   void loop(ITERATOR begin,
            typename identity<ITERATOR>::type end,
-           DoFInfo<dim, spacedim> dinfo,
+           DOFINFO& dinfo,
            INFOBOX& info,
            const std_cxx1x::function<void (DoFInfo<dim, spacedim>&, typename INFOBOX::CellInfo &)> &cell_worker,
            const std_cxx1x::function<void (DoFInfo<dim, spacedim>&, typename INFOBOX::FaceInfo &)> &boundary_worker,
@@ -243,7 +243,7 @@ namespace MeshWorker
            ASSEMBLER &assembler,
            bool cells_first = true)
   {
-    DoFInfoBox<dim, spacedim> dof_info(dinfo);
+    DoFInfoBox<dim, DOFINFO> dof_info(dinfo);
     
     assembler.initialize_info(dof_info.cell, false);
     for (unsigned int i=0;i<GeometryInfo<dim>::faces_per_cell;++i)
@@ -272,10 +272,10 @@ namespace MeshWorker
  * @ingroup MeshWorker
  * @author Guido Kanschat, 2009
  */
-  template<class CELLINFO, class FACEINFO, int dim, class ITERATOR, typename ASSEMBLER>
+  template<class CELLINFO, class FACEINFO, class DOFINFO, int dim, class ITERATOR, typename ASSEMBLER>
   void integration_loop(ITERATOR begin,
                        typename identity<ITERATOR>::type end,
-                       DoFInfo<dim>& dof_info,
+                       DOFINFO& dof_info,
                        IntegrationInfoBox<dim, dim>& box,
                        const std_cxx1x::function<void (DoFInfo<dim>&, CELLINFO &)> &cell_worker,
                        const std_cxx1x::function<void (DoFInfo<dim>&, FACEINFO &)> &boundary_worker,
@@ -283,7 +283,7 @@ namespace MeshWorker
                        ASSEMBLER &assembler,
                        bool cells_first = true)
   {
-    loop<DoFInfo<dim>,IntegrationInfoBox<dim, dim> >
+    loop<DoFInfo<dim>, IntegrationInfoBox<dim, dim> >
       (begin, end,
        dof_info,
        box,
index 83c742746fc8b4d7be92445d70d10bcf442a4a88..c70e915fe4b61789f7ee518a89ffbc0854765a01 100644 (file)
@@ -30,11 +30,17 @@ namespace MeshWorker
   
   template class LocalResults<float>;
   template class DoFInfo<deal_II_dimension,deal_II_dimension,float>;
+  template class DoFInfoBox<deal_II_dimension,
+                           DoFInfo<deal_II_dimension,deal_II_dimension,float> >;
+  
   template void IntegrationInfo<deal_II_dimension>::fill_local_data(
     const DoFInfo<deal_II_dimension, deal_II_dimension, float>&, bool);
   
   template class LocalResults<double>;
   template class DoFInfo<deal_II_dimension,deal_II_dimension,double>;
+  template class DoFInfoBox<deal_II_dimension,
+                           DoFInfo<deal_II_dimension,deal_II_dimension,double> >;
+  
   template void IntegrationInfo<deal_II_dimension>::fill_local_data(
     const DoFInfo<deal_II_dimension, deal_II_dimension, double>&, bool);
   

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.