]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
add VectorInfo class
authorkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 26 Oct 2012 10:07:46 +0000 (10:07 +0000)
committerkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 26 Oct 2012 10:07:46 +0000 (10:07 +0000)
git-svn-id: https://svn.dealii.org/trunk@27202 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/meshworker/vector_info.h [new file with mode: 0644]

diff --git a/deal.II/include/deal.II/meshworker/vector_info.h b/deal.II/include/deal.II/meshworker/vector_info.h
new file mode 100644 (file)
index 0000000..e768b7a
--- /dev/null
@@ -0,0 +1,121 @@
+//---------------------------------------------------------------------------
+//    $Id: mesh_worker_info.h 23936 2011-07-09 17:02:27Z kanschat $
+//
+//    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//---------------------------------------------------------------------------
+
+#ifndef __deal2__mesh_worker_vector_info_h
+#define __deal2__mesh_worker_vector_info_h
+
+#include <deal.II/base/named_data.h>
+#include <deal.II/lac/block_indices.h>
+#include <deal.II/numerics/mesh_worker_info.h>
+
+using namespace dealii;
+
+class VectorInfo
+{
+  public:
+                                    /**
+                                     * Initialize the data
+                                     * vector and cache the
+                                     * selector.
+                                     */
+    void initialize_data(const NamedData<BlockVector<double>*>&data);
+    
+    template<int dim, int spacedim>
+    void reinit(const MeshWorker::DoFInfo<dim, spacedim>& i);
+
+    BlockVector<double>& operator() (unsigned int i);
+    
+  private:
+    std::vector<BlockVector<double> > local_data;
+                                      /**
+                                       * The global data vector
+                                       * used to compute function
+                                       * values in quadrature
+                                       * points.
+                                       */
+    SmartPointer<const NamedData<BlockVector<double>*> > global_data;    
+};
+
+
+class VectorInfoBox
+ {
+   public:
+     typedef VectorInfo CellInfo;
+     
+     void initialize_data(const NamedData<BlockVector<double>*>&data);
+     
+     template <int dim, class DOFINFO>
+     void post_cell(const MeshWorker::DoFInfoBox<dim, DOFINFO>&)
+       {}
+
+     template <int dim, class DOFINFO>
+     void post_faces(const MeshWorker::DoFInfoBox<dim, DOFINFO>&)
+       {}
+     
+     VectorInfo cell;
+     VectorInfo boundary;
+     VectorInfo face;
+     VectorInfo subface;
+     VectorInfo neighbor;
+ };
+
+
+inline
+void
+VectorInfo::initialize_data(const NamedData<BlockVector<double>*>&data)
+{
+  global_data = &data;
+  local_data.resize(global_data->size());
+}
+
+
+template<int dim, int spacedim>
+inline
+void
+VectorInfo::reinit(const MeshWorker::DoFInfo<dim, spacedim>& i)
+{
+  const NamedData<BlockVector<double>*>& gd = *global_data;
+  
+  for (unsigned int k=0;k<local_data.size();++k)
+    {
+      const BlockVector<double>& v = *gd(k);
+      
+      local_data[k].reinit(i.block_info->local());
+      for (unsigned int j=0;j<local_data[k].size();++j)
+       local_data[k](j) = v(i.indices[j]);
+    }
+}
+
+
+inline
+BlockVector<double>&
+VectorInfo::operator() (unsigned int i)
+{
+  AssertIndexRange(i, local_data.size());
+  return local_data[i];
+}
+
+
+inline
+void
+VectorInfoBox::initialize_data(const NamedData<BlockVector<double>*>&data)
+{
+  cell.initialize_data(data);
+  boundary.initialize_data(data);
+  face.initialize_data(data);
+  subface.initialize_data(data);
+  neighbor.initialize_data(data);
+}
+
+
+
+#endif

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.