]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Merge branch_codim_two back into trunk
authorSebastian Pauletti <spauletti@gmail.com>
Fri, 9 Mar 2012 18:34:59 +0000 (18:34 +0000)
committerSebastian Pauletti <spauletti@gmail.com>
Fri, 9 Mar 2012 18:34:59 +0000 (18:34 +0000)
git-svn-id: https://svn.dealii.org/trunk@25229 0785d39b-7218-0410-832d-ea1e28bc413d

112 files changed:
deal.II/common/template-arguments.in
deal.II/doc/news/changes.h
deal.II/include/deal.II/base/derivative_form.h [new file with mode: 0644]
deal.II/include/deal.II/base/types.h
deal.II/include/deal.II/fe/fe_poly.templates.h
deal.II/include/deal.II/fe/fe_poly_tensor.h
deal.II/include/deal.II/fe/fe_q.h
deal.II/include/deal.II/fe/fe_values.h
deal.II/include/deal.II/fe/mapping.h
deal.II/include/deal.II/fe/mapping_cartesian.h
deal.II/include/deal.II/fe/mapping_q.h
deal.II/include/deal.II/fe/mapping_q1.h
deal.II/include/deal.II/fe/mapping_q1_eulerian.h
deal.II/include/deal.II/fe/mapping_q_eulerian.h
deal.II/include/deal.II/grid/grid_out.h
deal.II/include/deal.II/grid/grid_tools.h
deal.II/include/deal.II/grid/tria_accessor.h
deal.II/include/deal.II/grid/tria_accessor.templates.h
deal.II/include/deal.II/grid/tria_boundary.h
deal.II/include/deal.II/grid/tria_boundary_lib.h
deal.II/include/deal.II/numerics/vectors.templates.h
deal.II/source/base/data_out_base.cc
deal.II/source/distributed/tria.cc
deal.II/source/dofs/block_info.inst.in
deal.II/source/dofs/dof_accessor.inst.in
deal.II/source/dofs/dof_handler.inst.in
deal.II/source/dofs/dof_handler_policy.inst.in
deal.II/source/dofs/dof_objects.inst.in
deal.II/source/dofs/dof_renumbering.inst.in
deal.II/source/dofs/dof_tools.cc
deal.II/source/dofs/dof_tools.inst.in
deal.II/source/fe/fe.cc
deal.II/source/fe/fe.inst.in
deal.II/source/fe/fe_abf.cc
deal.II/source/fe/fe_dgp.inst.in
deal.II/source/fe/fe_dgq.inst.in
deal.II/source/fe/fe_poly.cc
deal.II/source/fe/fe_poly.inst.in
deal.II/source/fe/fe_poly_tensor.cc
deal.II/source/fe/fe_q.cc
deal.II/source/fe/fe_q.inst.in
deal.II/source/fe/fe_system.inst.in
deal.II/source/fe/fe_tools.cc
deal.II/source/fe/fe_tools.inst.in
deal.II/source/fe/fe_values.inst.in
deal.II/source/fe/mapping.cc
deal.II/source/fe/mapping.inst.in
deal.II/source/fe/mapping_cartesian.cc
deal.II/source/fe/mapping_q.cc
deal.II/source/fe/mapping_q.inst.in
deal.II/source/fe/mapping_q1.cc
deal.II/source/fe/mapping_q1.inst.in
deal.II/source/fe/mapping_q1_eulerian.cc
deal.II/source/fe/mapping_q1_eulerian.inst.in
deal.II/source/fe/mapping_q_eulerian.cc
deal.II/source/fe/mapping_q_eulerian.inst.in
deal.II/source/grid/grid_generator.inst.in
deal.II/source/grid/grid_out.cc
deal.II/source/grid/grid_out.inst.in
deal.II/source/grid/grid_tools.cc
deal.II/source/grid/grid_tools.inst.in
deal.II/source/grid/intergrid_map.cc
deal.II/source/grid/intergrid_map.inst.in
deal.II/source/grid/tria.cc
deal.II/source/grid/tria.inst.in
deal.II/source/grid/tria_accessor.cc
deal.II/source/grid/tria_accessor.inst.in
deal.II/source/grid/tria_boundary.cc
deal.II/source/grid/tria_boundary.inst.in
deal.II/source/grid/tria_boundary_lib.cc
deal.II/source/grid/tria_boundary_lib.inst.in
deal.II/source/hp/dof_handler.cc
deal.II/source/hp/dof_handler.inst.in
deal.II/source/hp/fe_collection.inst.in
deal.II/source/hp/fe_values.inst.in
deal.II/source/hp/mapping_collection.inst.in
deal.II/source/multigrid/mg_dof_accessor.inst.in
deal.II/source/multigrid/mg_dof_handler.inst.in
deal.II/source/multigrid/mg_tools.inst.in
deal.II/source/numerics/data_out.inst.in
deal.II/source/numerics/matrices.cc
deal.II/source/numerics/matrices.inst.in
deal.II/source/numerics/vectors.inst.in
tests/Makefile.paths.in
tests/Makefile.rules
tests/all-headers/Makefile
tests/bits/find_cell_5.cc
tests/bits/find_cell_5/cmp/generic
tests/bits/find_cell_alt_2.cc
tests/bits/find_cell_alt_2/cmp/generic
tests/bits/find_cell_alt_4/cmp/generic
tests/bits/find_cell_alt_5.cc
tests/bits/find_cell_alt_5/cmp/generic
tests/bits/find_cell_alt_7.cc
tests/bits/find_cell_alt_7/cmp/generic
tests/bits/point_difference_01/cmp/generic
tests/bits/point_difference_02/cmp/generic
tests/codim_one/bem_integration.cc
tests/codim_one/error_estimator_01/cmp/generic
tests/deal.II/error_estimator_01/cmp/generic
tests/deal.II/fe_values_view_09/cmp/generic
tests/deal.II/fe_values_view_10/cmp/generic
tests/deal.II/fe_values_view_10_single_01/cmp/generic
tests/deal.II/fe_values_view_10_single_03/cmp/generic
tests/deal.II/fe_values_view_15/cmp/generic
tests/deal.II/fe_values_view_16/cmp/generic
tests/deal.II/fe_values_view_18/cmp/generic
tests/fe/abf_01/cmp/generic
tests/fe/abf_projection_01/cmp/generic
tests/fe/mapping_real_to_unit.cc [new file with mode: 0644]
tests/fe/mapping_real_to_unit/cmp/generic [new file with mode: 0644]
tests/mesh_converter/Makefile

index 2e10b8c7bee4d488a21d8af72ee09f7a69d8e0b6..09d4d3354dc1b44a29147f1924540882b4d18e31 100644 (file)
@@ -44,10 +44,16 @@ DOFHANDLER_TEMPLATES := { DoFHandler;
                           hp::DoFHandler;
                          MGDoFHandler }
 
-TRIANGULATION_AND_DOFHANDLERS := { Triangulation<deal_II_dimension>;
-                                   DoFHandler<deal_II_dimension>;
-                                   hp::DoFHandler<deal_II_dimension>;
-                                  MGDoFHandler<deal_II_dimension> }
+TRIANGULATION_AND_DOFHANDLER_TEMPLATES := { Triangulation;
+                                           DoFHandler;
+                                           hp::DoFHandler;
+                                           MGDoFHandler}
+
+TRIANGULATION_AND_DOFHANDLERS := { Triangulation<deal_II_dimension, deal_II_space_dimension>;
+                                   DoFHandler<deal_II_dimension, deal_II_space_dimension>;
+                                   hp::DoFHandler<deal_II_dimension, deal_II_space_dimension>;
+                                  MGDoFHandler<deal_II_dimension, deal_II_space_dimension> }
+
 
 FEVALUES_BASES := { FEValuesBase<deal_II_dimension>;
                    FEFaceValuesBase<deal_II_dimension> }
@@ -65,3 +71,5 @@ SPARSITY_PATTERNS := { SparsityPattern;
                        @DEAL_II_EXPAND_TRILINOS_BLOCK_SPARSITY_PATTERN@; }
 
 DIMENSIONS := { 1; 2; 3 }
+
+SPACE_DIMENSIONS := { 1; 2; 3 }
index dca8d9240f3140da0b632fc06a6fc1a1c3961f33..03e8d52645ef03f7b4e06b7e3355589d100481f4 100644 (file)
@@ -45,7 +45,14 @@ used for boundary indicators.
 <a name="general"></a>
 <h3>General</h3>
 
+
 <ol>
+<li>
+New: Added support for codimension 2, i.e. for dim-dimensional objects
+embedded into spacedim=dim+2 dimensional space.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
 <li> Changed: Material and Boundary indicators have been both of the
 type unsigned char. Throughout the library, we changed their datatype
 to <code>types::material_id_t</code>
@@ -59,7 +66,7 @@ static_cast<material_id_t>(-1)</code>). With this change, it is now
 much easier to extend the range of boundary or material ids, if
 needed.
 <br>
-(Wolfgang Bangerth, Christian Goll 2012/02/27)
+(Christian Goll 2012/02/27)
 
 <li> New: Functions like FEValues::get_function_values have long been
 able to extract values from pretty much any vector kind given to it (e.g.
@@ -145,6 +152,28 @@ enabled due to a missing include file in file
 <h3>Specific improvements</h3>
 
 <ol>
+<li> Changed:
+A new method to determine an initial guess for the Newton method was coded
+in MappingQ::transform_real_to_unit_cell.
+The code in transform_real_to_unit_cell was cleaned a little bit and a new code
+for the @<2,3@> case was added.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
+<li> Changed:
+In the context of codim@>0, Mapping::transform would require different inputs
+depending on the mapping type.
+For mapping_covariant, mapping_contravariant the input is DerivativeForm<1, dim, spacedim>
+but for mapping_covariant_gradient,  mapping_contravariant_gradient the input is Tensor<2,dim>.
+<br>
+(Sebastian Pauletti,  2012/03/02)
+
+<li> New:
+A new class DerivativeForm was added.
+This class is supposed to represent the derivatives of a mapping.
+<br>
+(Sebastian Pauletti, 2012/03/02)
+
 <li> Fixed: TrilinosWrappers::Vector::all_zero() in parallel.
 <br>
 (Timo Heister, J&ouml;rg Frohne, 2012/03/06)
diff --git a/deal.II/include/deal.II/base/derivative_form.h b/deal.II/include/deal.II/base/derivative_form.h
new file mode 100644 (file)
index 0000000..6646475
--- /dev/null
@@ -0,0 +1,465 @@
+#ifndef __deal2__derivative_form_h
+#define __deal2__derivative_form_h
+
+#include <deal.II/base/tensor.h>
+
+DEAL_II_NAMESPACE_OPEN
+
+/**
+   This class represents the (tangential) derivatives of a function
+   \f f: ${\mathbb R}^{\text{dim}} \rightarrow {\mathbb R}^{\text{spacedim}}\f$.
+   Such functions are always used to map the reference dim-dimensional
+   cell into spacedim-dimensional space.
+   For such objects, the first  derivative of the function is a linear map from
+   \f${\mathbb R}^{\text{dim}}\f$  to \f${\mathbb R}^{\text{spacedim}}\f$,
+   the second derivative a bilinear map
+   from  \f${\mathbb R}^{\text{dim}} \times  {\mathbb R}^{\text{dim}}\f$
+   to \f${\mathbb R}^{\text{spacedim}}\f$ and so on.
+   
+   In deal.II we represent these derivaties using objects of
+   type DerivativeForm<1,dim,spacedim>, DerivativeForm<2,dim,spacedim> and so on.
+  
+   
+   @author Sebastian Pauletti, 2011
+
+*/
+
+template <int order, int dim, int spacedim>
+class DerivativeForm
+{
+  public:
+                                    /**
+                                     * Constructor. Initialize all entries
+                                     * to zero.
+                                     */
+    DerivativeForm ();
+
+                                    /**
+                                       Constructor from a second order tensor.
+                                    */
+    DerivativeForm (const Tensor<2,dim> &);
+
+                                    /**
+                                     * Read-Write access operator.
+                                     */
+    Tensor<order,dim> &operator [] (const unsigned int i);
+
+                                    /**
+                                     * Read-only access operator.
+                                     */
+    const Tensor<order,dim> &operator [] (const unsigned int i) const;
+
+                                    /**
+                                     *  Assignment operator.
+                                     */
+    DerivativeForm  & operator = (const DerivativeForm <order, dim, spacedim> &);
+
+
+                                    /**
+                                     *  Assignment operator.
+                                     */
+    DerivativeForm  & operator = (const Tensor<2,dim> &);
+    
+                                    /**
+                                     *  Assignment operator.
+                                     */
+    DerivativeForm  & operator = (const Tensor<1,dim> &);
+
+                                    /**
+                                       Converts a DerivativeForm <1,dim, dim>
+                                       to Tensor<2,dim>.
+                                       If the derivative is the Jacobian of F,
+                                       then Tensor[i] = grad(F^i).
+                                    */
+    operator Tensor<2,dim>() const;
+
+                                    /**
+                                       Converts a DerivativeForm <1, dim, 1>
+                                       to Tensor<1,dim>.
+                                    */
+    operator Tensor<1,dim>() const;
+
+                                    /**
+                                       Return the transpose of a rectangular DerivativeForm,
+                                       that is to say viewed as a two dimensional matrix.
+                                    */
+    DerivativeForm<1, spacedim, dim> transpose () const;
+
+
+                                    /**
+                                       Computes the volume element associated with the
+                                       jacobian of the tranformation F.
+                                       That is to say if \f$DF\f$ is square, it computes
+                                       \f$\det(DF)\f$, in case DF is not square returns
+                                       \f$\sqrt(\det(DF^{t} * DF))\f$.
+                                    */
+    double determinant () const;
+    
+        
+                                    /**
+                                       Assuming (*this) stores the jacobian of
+                                       the mapping F, it computes its covariant
+                                       matrix, namely \f$DF*G^{-1}\f$, where
+                                       \f$G = DF^{t}*DF\f$.
+                                       If $DF$ is square, covariant from
+                                       gives \f$DF^{-t}\f$.
+                                    */
+    DerivativeForm<1, dim, spacedim> covariant_form() const;
+
+    
+    
+    
+                                    /**
+                                     * Determine an estimate for the
+                                     * memory consumption (in bytes)
+                                     * of this object.
+                                     */
+    static std::size_t memory_consumption ();
+                                    
+                                     /**
+                                      * Exception.
+                                      */
+    DeclException1 (ExcInvalidTensorIndex,
+                    int,
+                   << "Invalid DerivativeForm index " << arg1);
+
+                    
+  private:
+                                    /** Auxiliary function that computes
+                                        (*this) * T^{t} */
+    DerivativeForm<1, dim, spacedim> times_T_t (Tensor<2,dim> T) const;
+
+
+  private:
+                                    /**
+                                     * Array of tensors holding the
+                                     * subelements.
+                                     */
+    Tensor<order,dim> tensor[spacedim];
+
+                                   
+};
+
+
+/*--------------------------- Inline functions -----------------------------*/
+
+#ifndef DOXYGEN
+
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim>::DerivativeForm  ()
+{
+// default constructor. not specifying an initializer list calls
+// the default constructor of the subobjects, which initialize them
+// selves. therefore, the tensor array  is set to zero this way
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim>::DerivativeForm(const Tensor<2,dim> &T)
+{
+  Assert( (dim == spacedim) && (order==1),
+         ExcMessage("Only allowed for square tensors."));
+  
+  for (unsigned int j=0; j<dim; ++j)
+    (*this)[j] = T[j];
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim> &
+DerivativeForm<order, dim, spacedim>::
+operator = (const DerivativeForm<order, dim, spacedim> &ta)
+{
+  for (unsigned int j=0; j<spacedim; ++j)
+    (*this)[j] = ta[j];
+  return *this;
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim> & DerivativeForm<order, dim, spacedim>::
+operator = (const Tensor<2,dim> &ta)
+{
+  Assert( (dim == spacedim) && (order==1),
+         ExcMessage("Only allowed for square tensors."));
+  
+  for (unsigned int j=0; j<dim; ++j)
+    (*this)[j] = ta[j];
+  return *this;
+
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim> & DerivativeForm<order, dim, spacedim>::
+operator = (const Tensor<1,dim> &T)
+{
+  Assert( (1 == spacedim) && (order==1),
+         ExcMessage("Only allowed for spacedim==1 and order==1."));
+  
+  (*this)[0] = T;
+
+  return *this;
+
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+Tensor<order,dim> & DerivativeForm<order, dim, spacedim>::
+operator[] (const unsigned int i)
+{
+  Assert (i<spacedim, ExcIndexRange(i, 0, spacedim));
+
+  return tensor[i];
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+const Tensor<order,dim> &DerivativeForm<order, dim, spacedim>::
+operator[] (const unsigned int i) const
+{
+  Assert (i<spacedim, ExcIndexRange(i, 0, spacedim));
+
+  return tensor[i];
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim>::operator Tensor<1,dim>() const
+{
+  Assert( (1 == spacedim) && (order==1),
+         ExcMessage("Only allowed for spacedim==1."));
+
+  return (*this)[0];
+       
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<order, dim, spacedim>::operator Tensor<2,dim>() const
+{
+  Assert( (dim == spacedim) && (order==1),
+         ExcMessage("Only allowed for square tensors."));
+
+  Tensor<2,dim> t;
+  
+  for (unsigned int j=0; j<dim; ++j)
+    t[j] = (*this)[j];
+  
+  return t;
+       
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<1,spacedim,dim>
+DerivativeForm<order,dim,spacedim>::
+transpose () const
+ {
+   Assert(order==1, ExcMessage("Only for rectangular DerivativeForm."));
+   DerivativeForm<1,spacedim,dim> tt;
+   
+   for (unsigned int i=0; i<spacedim; ++i)
+     for (unsigned int j=0; j<dim; ++j)
+       tt[j][i] = (*this)[i][j];
+   
+   return tt;
+ }
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<1, dim, spacedim>
+DerivativeForm<order,dim,spacedim>::times_T_t (Tensor<2,dim> T) const
+{
+  Assert( order==1, ExcMessage("Only for order == 1."));
+  DerivativeForm<1,dim, spacedim> dest;
+  for (unsigned int i=0; i<spacedim; ++i)
+    for (unsigned int j=0; j<dim; ++j)
+      dest[i][j] = (*this)[i] * T[j];
+
+  return dest;
+}
+
+
+template <int order, int dim, int spacedim>
+inline
+double
+DerivativeForm<order,dim,spacedim>::determinant () const
+{
+  Assert( order==1, ExcMessage("Only for order == 1."));
+  if (dim == spacedim)
+    {
+      Tensor<2,dim> T = (Tensor<2,dim>)( (*this) );
+      return dealii::determinant(T);
+    }
+  else
+    {
+      Assert( spacedim>dim, ExcMessage("Only for spacedim>dim."));
+      DerivativeForm<1,spacedim,dim> DF_t = this->transpose();
+      Tensor<2, dim> G; //First fundamental form
+      for (unsigned int i=0; i<dim; ++i)
+       for (unsigned int j=0; j<dim; ++j)
+         G[i][j] = DF_t[i] * DF_t[j];
+
+      return ( sqrt(dealii::determinant(G)) );
+      
+    }
+  
+}
+
+
+
+template <int order, int dim, int spacedim>
+inline
+DerivativeForm<1,dim,spacedim>
+DerivativeForm<order,dim,spacedim>::covariant_form() const
+{
+  
+  if (dim == spacedim)
+    {
+      
+      Tensor<2,dim> DF_t (dealii::transpose(invert(  (Tensor<2,dim>)(*this)   )));
+      DerivativeForm<1,dim, spacedim> result = DF_t;
+      return(result);
+    }
+  else
+    {
+      
+      DerivativeForm<1,spacedim,dim> DF_t = this->transpose();
+      Tensor<2, dim> G; //First fundamental form
+      for (unsigned int i=0; i<dim; ++i)
+       for (unsigned int j=0; j<dim; ++j)
+         G[i][j] = DF_t[i] * DF_t[j];
+
+      return (this->times_T_t(invert(G)));
+      
+    }
+  
+}
+
+
+template <int order, int dim, int spacedim>
+inline
+std::size_t
+DerivativeForm<order, dim, spacedim>::memory_consumption ()
+{
+  return sizeof(DerivativeForm<order, dim, spacedim>);
+}
+
+#endif // DOXYGEN
+
+
+
+
+
+/**
+   One of the uses of DerivativeForm is to apply it as a transformation.
+   This is what this function does.
+   
+   If @pT is DerivativeForm<1,dim,1> it computes $DF * T$,
+   if @pT is DerivativeForm<1,dim,rank> it computes $T*DF^{t}$.
+
+   @relates DerivativeForm
+   @author Sebastian Pauletti, 2011
+*/
+//rank=1
+template <int spacedim, int dim>
+inline
+Tensor<1, spacedim> 
+apply_transformation (const DerivativeForm<1,dim,spacedim> &DF,
+                     const Tensor<1,dim>               &T)
+{
+  Tensor<1, spacedim> dest;
+  for (unsigned int i=0; i<spacedim; ++i)
+    dest[i] = DF[i] * T;
+  return dest;
+  }
+
+
+
+/**
+   Similar to previous apply_transformation.
+   It computes $T*DF^{t}$
+   @relates DerivativeForm
+   @author Sebastian Pauletti, 2011
+*/
+//rank=2
+template <int spacedim, int dim>
+inline
+DerivativeForm<1, spacedim, dim> 
+apply_transformation (const DerivativeForm<1,dim,spacedim> &DF,
+                     const Tensor<2,dim>               &T)
+{
+  DerivativeForm<1, spacedim, dim> dest;
+  for (unsigned int i=0; i<dim; ++i)
+    dest[i] = apply_transformation(DF, T[i]);
+
+  return dest;
+}
+
+/**
+   Similar to previous apply_transformation.
+   It computes $DF2*DF1^{t}$
+   @relates DerivativeForm
+   @author Sebastian Pauletti, 2011
+*/
+template <int spacedim, int dim>
+inline
+Tensor<2, spacedim>
+apply_transformation (const DerivativeForm<1,dim,spacedim> &DF1,
+                     const DerivativeForm<1,dim,spacedim> &DF2)
+{
+  Tensor<2, spacedim> dest;
+  
+  for (unsigned int i=0; i<spacedim; ++i)
+    dest[i] = apply_transformation(DF1, DF2[i]);
+
+  return dest;
+}
+
+
+/**
+   Traspose of  a rectangular DerivativeForm DF,
+   mostly for compatibility reasons.
+   @relates DerivativeForm
+   @author Sebastian Pauletti, 2011
+*/
+template <int dim, int spacedim>
+inline
+DerivativeForm<1,spacedim,dim>
+transpose (const DerivativeForm<1,dim,spacedim> &DF) 
+ {
+   DerivativeForm<1,spacedim,dim> tt;
+   tt = DF.transpose();
+   return tt;
+ }
+
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
index 02331fb60d7390ff976cb5cda90703b7eadfd0e0..8836a78ff4d3b66c15271cb132bc7356e63b5a95 100644 (file)
@@ -24,6 +24,16 @@ DEAL_II_NAMESPACE_OPEN
 namespace types
 {
 
+                                  /**
+                                     Type for boundary indicators.
+                                  */
+  typedef unsigned char boundary_indicator_t;
+
+                                  /**
+                                     Type for material ids.
+                                  */
+  typedef unsigned int material_indicator_t;
+  
                                   /**
                                    * The type used to denote
                                    * subdomain_ids of cells.
index 26288815024e032c6cb757e9bc63af36d5264ce0..0b163e77103435433fb608374ad26d87f82d360d 100644 (file)
@@ -1,7 +1,7 @@
 //---------------------------------------------------------------------------
 //    $Id$
 //
-//    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -237,156 +237,6 @@ FE_Poly<POLY,dim,spacedim>::get_data (const UpdateFlags      update_flags,
 //---------------------------------------------------------------------------
 
 
-template <>
-inline
-void
-FE_Poly<TensorProductPolynomials<1>,1,2>::fill_fe_values
-  (const Mapping<1,2>                        &mapping,
-   const Triangulation<1,2>::cell_iterator   &cell,
-   const Quadrature<1>                       &quadrature,
-   Mapping<1,2>::InternalDataBase            &mapping_data,
-   Mapping<1,2>::InternalDataBase            &fedata,
-   FEValuesData<1,2>                         &data,
-   CellSimilarity::Similarity           &cell_similarity) const
-{
-                                  // convert data object to internal
-                                  // data for this class. fails with
-                                  // an exception if that is not
-                                  // possible
-  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
-  InternalData &fe_data = static_cast<InternalData &> (fedata);
-
-  const UpdateFlags flags(fe_data.current_update_flags());
-
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-    {
-      if (flags & update_values)
-       for (unsigned int i=0; i<quadrature.size(); ++i)
-         data.shape_values(k,i) = fe_data.shape_values[k][i];
-
-      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-       mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                         mapping_data, mapping_covariant);
-    }
-
-  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
-    this->compute_2nd (mapping, cell, QProjector<1>::DataSetDescriptor::cell(),
-                      mapping_data, fe_data, data);
-}
-
-
-
-template <>
-inline
-void
-FE_Poly<TensorProductPolynomials<2>,2,3>::fill_fe_values
-  (const Mapping<2,3>                      &mapping,
-   const Triangulation<2,3>::cell_iterator &cell,
-   const Quadrature<2>                     &quadrature,
-   Mapping<2,3>::InternalDataBase          &mapping_data,
-   Mapping<2,3>::InternalDataBase          &fedata,
-   FEValuesData<2,3>                       &data,
-   CellSimilarity::Similarity         &cell_similarity) const
-{
-
-                                  // assert that the following dynamics
-                                  // cast is really well-defined.
-  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
-  InternalData &fe_data = static_cast<InternalData &> (fedata);
-
-  const UpdateFlags flags(fe_data.current_update_flags());
-
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-    {
-      if (flags & update_values)
-       for (unsigned int i=0; i<quadrature.size(); ++i)
-         data.shape_values(k,i) = fe_data.shape_values[k][i];
-
-       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                          mapping_data, mapping_covariant);
-    }
-
-  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
-    this->compute_2nd (mapping, cell, QProjector<2>::DataSetDescriptor::cell(),
-                      mapping_data, fe_data, data);
-}
-
-
-template <>
-inline
-void
-FE_Poly<PolynomialSpace<1>,1,2>::fill_fe_values (
-  const Mapping<1,2>                      &mapping,
-  const Triangulation<1,2>::cell_iterator &cell,
-  const Quadrature<1>                     &quadrature,
-  Mapping<1,2>::InternalDataBase          &mapping_data,
-  Mapping<1,2>::InternalDataBase          &fedata,
-  FEValuesData<1,2>                       &data,
-  CellSimilarity::Similarity         &cell_similarity) const
-{
-                                  // convert data object to internal
-                                  // data for this class. fails with
-                                  // an exception if that is not
-                                  // possible
-
-  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
-  InternalData &fe_data = static_cast<InternalData &> (fedata);
-
-  const UpdateFlags flags(fe_data.current_update_flags());
-
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-    {
-      if (flags & update_values)
-       for (unsigned int i=0; i<quadrature.size(); ++i)
-         data.shape_values(k,i) = fe_data.shape_values[k][i];
-      
-      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-       mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                         mapping_data, mapping_covariant);
-    }
-
-  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
-    this->compute_2nd (mapping, cell, QProjector<1>::DataSetDescriptor::cell(),
-                      mapping_data, fe_data, data);
-}
-
-
-template <>
-inline
-void
-FE_Poly<PolynomialSpace<2>,2,3>::fill_fe_values
-  (const Mapping<2,3>                      &mapping,
-   const Triangulation<2,3>::cell_iterator &cell,
-   const Quadrature<2>                     &quadrature,
-   Mapping<2,3>::InternalDataBase          &mapping_data,
-   Mapping<2,3>::InternalDataBase          &fedata,
-   FEValuesData<2,3>                       &data,
-   CellSimilarity::Similarity         &cell_similarity) const
-{
-  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
-  InternalData &fe_data = static_cast<InternalData &> (fedata);
-
-  const UpdateFlags flags(fe_data.current_update_flags());
-
-  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
-    {
-      if (flags & update_values)
-       for (unsigned int i=0; i<quadrature.size(); ++i)
-         data.shape_values(k,i) = fe_data.shape_values[k][i];
-
-
-       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
-        mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
-                                     mapping_data, mapping_covariant);
-    }
-
-  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
-    this->compute_2nd (mapping, cell, QProjector<2>::DataSetDescriptor::cell(),
-                      mapping_data, fe_data, data);
-}
-
-
 template <class POLY, int dim, int spacedim>
 void
 FE_Poly<POLY,dim,spacedim>::fill_fe_values
@@ -425,24 +275,6 @@ FE_Poly<POLY,dim,spacedim>::fill_fe_values
 
 
 
-template <>
-inline
-void
-FE_Poly<TensorProductPolynomials<1>,1,2>::fill_fe_face_values
-  (const Mapping<1,2> &,
-   const Triangulation<1,2>::cell_iterator &,
-   const unsigned int,
-   const Quadrature<0> &,
-   Mapping<1,2>::InternalDataBase &,
-   Mapping<1,2>::InternalDataBase &,
-   FEValuesData<1,2> &) const
-{
-  AssertThrow(false, ExcNotImplemented());
-}
-
-
-
-
 template <class POLY, int dim, int spacedim>
 void
 FE_Poly<POLY,dim,spacedim>::
index e4cb56b4089be5d45de5d5709bc1646a17eba603..02e92ce9dd4da86e73df998198253364981ca4a3 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <deal.II/lac/full_matrix.h>
 #include <deal.II/fe/fe.h>
+#include <deal.II/base/derivative_form.h>
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -267,7 +268,7 @@ class FE_PolyTensor : public FiniteElement<dim,spacedim>
                                          * values for each quadrature
                                          * point.
                                          */      
-       std::vector<std::vector<Tensor<2,dim> > > shape_grads;
+       std::vector< std::vector< DerivativeForm<1, dim, spacedim> > > shape_grads;
     };
     
                                      /**
index 581e861c580b1a8dca78c3cbe8db26b124048e9a..6d2921f1f432bda62d1fdd6a9e4c147ba8341019 100644 (file)
@@ -606,7 +606,12 @@ template <>
 std::vector<unsigned int>
 FE_Q<1,2>::face_lexicographic_to_hierarchic_numbering (const unsigned int);
 
+template <>
+void FE_Q<1,3>::initialize_unit_face_support_points ();
 
+template <>
+std::vector<unsigned int>
+FE_Q<1,3>::face_lexicographic_to_hierarchic_numbering (const unsigned int);
 
 DEAL_II_NAMESPACE_CLOSE
 
index cdb1f571c04defaf07128d94dfbd4f41d2df28ad..276d76e3466fac3372fc771f134b9f78a1c3d5b6 100644 (file)
@@ -17,7 +17,7 @@
 #include <deal.II/base/exceptions.h>
 #include <deal.II/base/subscriptor.h>
 #include <deal.II/base/point.h>
-#include <deal.II/base/tensor.h>
+#include <deal.II/base/derivative_form.h>
 #include <deal.II/base/symmetric_tensor.h>
 #include <deal.II/base/vector_slice.h>
 #include <deal.II/base/quadrature.h>
@@ -1469,19 +1469,19 @@ class FEValuesData
                                      * Array of the Jacobian matrices at the
                                      * quadrature points.
                                      */
-    std::vector<Tensor<2,spacedim> > jacobians;
+    std::vector< DerivativeForm<1,dim,spacedim> > jacobians;
 
                                     /**
                                      * Array of the derivatives of the Jacobian
                                      * matrices at the quadrature points.
                                      */
-    std::vector<Tensor<3,spacedim> > jacobian_grads;
+    std::vector<DerivativeForm<2,dim,spacedim> >  jacobian_grads;
 
                                     /**
                                      * Array of the inverse Jacobian matrices
                                      * at the quadrature points.
                                      */
-    std::vector<Tensor<2,spacedim> > inverse_jacobians;
+    std::vector<DerivativeForm<1,spacedim,dim> > inverse_jacobians;
 
                                     /**
                                      * Array of quadrature points. This array
@@ -2720,13 +2720,13 @@ class FEValuesBase : protected FEValuesData<dim,spacedim>,
                                      * quadrature point, i.e.
                                      * $J_{ij}=dx_i/d\hat x_j$
                                      */
-    const Tensor<2,spacedim> & jacobian (const unsigned int quadrature_point) const;
+    const DerivativeForm<1,dim,spacedim> & jacobian (const unsigned int quadrature_point) const;
 
                                     /**
                                      * Pointer to the array holding
                                      * the values returned by jacobian().
                                      */
-    const std::vector<Tensor<2,spacedim> > & get_jacobians () const;
+    const std::vector<DerivativeForm<1,dim,spacedim> > & get_jacobians () const;
 
                                     /**
                                      * Return the second derivative of the
@@ -2735,14 +2735,14 @@ class FEValuesBase : protected FEValuesData<dim,spacedim>,
                                      * Jacobian, at the specified quadrature
                                      * point, i.e. $G_{ijk}=dJ_{jk}/d\hat x_i$.
                                      */
-    const Tensor<3,spacedim> & jacobian_grad (const unsigned int quadrature_point) const;
+    const DerivativeForm<2,dim,spacedim> & jacobian_grad (const unsigned int quadrature_point) const;
 
                                     /**
                                      * Pointer to the array holding
                                      * the values returned by
                                      * jacobian_grads().
                                      */
-    const std::vector<Tensor<3,spacedim> > & get_jacobian_grads () const;
+    const std::vector<DerivativeForm<2,dim,spacedim> > & get_jacobian_grads () const;
 
                                     /**
                                      * Return the inverse Jacobian of the
@@ -2750,14 +2750,14 @@ class FEValuesBase : protected FEValuesData<dim,spacedim>,
                                      * quadrature point, i.e.
                                      * $J_{ij}=d\hat x_i/dx_j$
                                      */
-    const Tensor<2,spacedim> & inverse_jacobian (const unsigned int quadrature_point) const;
+    const DerivativeForm<1,spacedim,dim> & inverse_jacobian (const unsigned int quadrature_point) const;
 
                                     /**
                                      * Pointer to the array holding
                                      * the values returned by
                                      * inverse_jacobian().
                                      */
-    const std::vector<Tensor<2,spacedim> > & get_inverse_jacobians () const;
+    const std::vector<DerivativeForm<1,spacedim,dim> > & get_inverse_jacobians () const;
                                     /**
                                      * For a face, return the outward
                                      * normal vector to the cell at
@@ -4894,7 +4894,7 @@ FEValuesBase<dim,spacedim>::get_JxW_values () const
 
 template <int dim, int spacedim>
 inline
-const std::vector<Tensor<2,spacedim> >&
+const std::vector<DerivativeForm<1,dim,spacedim> > &
 FEValuesBase<dim,spacedim>::get_jacobians () const
 {
   Assert (this->update_flags & update_jacobians, ExcAccessToUninitializedField());
@@ -4905,7 +4905,7 @@ FEValuesBase<dim,spacedim>::get_jacobians () const
 
 template <int dim, int spacedim>
 inline
-const std::vector<Tensor<3,spacedim> >&
+const std::vector<DerivativeForm<2,dim,spacedim> > &
 FEValuesBase<dim,spacedim>::get_jacobian_grads () const
 {
   Assert (this->update_flags & update_jacobian_grads, ExcAccessToUninitializedField());
@@ -4916,7 +4916,7 @@ FEValuesBase<dim,spacedim>::get_jacobian_grads () const
 
 template <int dim, int spacedim>
 inline
-const std::vector<Tensor<2,spacedim> >&
+const std::vector<DerivativeForm<1,spacedim,dim> > &
 FEValuesBase<dim,spacedim>::get_inverse_jacobians () const
 {
   Assert (this->update_flags & update_inverse_jacobians, ExcAccessToUninitializedField());
@@ -4954,7 +4954,7 @@ FEValuesBase<dim,spacedim>::JxW (const unsigned int i) const
 
 template <int dim, int spacedim>
 inline
-const Tensor<2,spacedim> &
+const DerivativeForm<1,dim,spacedim> &
 FEValuesBase<dim,spacedim>::jacobian (const unsigned int i) const
 {
   Assert (this->update_flags & update_jacobians, ExcAccessToUninitializedField());
@@ -4967,7 +4967,7 @@ FEValuesBase<dim,spacedim>::jacobian (const unsigned int i) const
 
 template <int dim, int spacedim>
 inline
-const Tensor<3,spacedim> &
+const DerivativeForm<2,dim,spacedim> &
 FEValuesBase<dim,spacedim>::jacobian_grad (const unsigned int i) const
 {
   Assert (this->update_flags & update_jacobian_grads, ExcAccessToUninitializedField());
@@ -4980,7 +4980,7 @@ FEValuesBase<dim,spacedim>::jacobian_grad (const unsigned int i) const
 
 template <int dim, int spacedim>
 inline
-const Tensor<2,spacedim> &
+const DerivativeForm<1,spacedim,dim> &
 FEValuesBase<dim,spacedim>::inverse_jacobian (const unsigned int i) const
 {
   Assert (this->update_flags & update_inverse_jacobians, ExcAccessToUninitializedField());
index d445dc3b8d4bc071df9c02295ab2bb4acb6763a6..c86d2902169d0d03b7a9f2935174d6cb08053172 100644 (file)
@@ -1,7 +1,7 @@
 //---------------------------------------------------------------------------
 //    $Id$
 //
-//    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -14,7 +14,7 @@
 
 
 #include <deal.II/base/config.h>
-#include <deal.II/base/tensor.h>
+#include <deal.II/base/derivative_form.h>
 #include <deal.II/base/vector_slice.h>
 #include <deal.II/grid/tria.h>
 #include <deal.II/dofs/dof_handler.h>
@@ -47,28 +47,21 @@ template <int dim, int spacedim> class FESubfaceValues;
                                       * the transform() functions of
                                       * inheriting classes in order to
                                       * work.
-                                     *
-                                     * Mappings are usually defined
-                                     * for vectors. If such a
-                                     * MappingType is applied to a
-                                     * rank 2 tensor, it is implied
-                                     * that the mapping is applied to
-                                     * each column.
-                                      */
+                                     */
 enum MappingType
 {
 /// No mapping
       mapping_none = 0x0000,
-/// Covariant mapping
+/// Covariant mapping (see Mapping::transform() for details)
       mapping_covariant = 0x0001,
-/// Contravariant mapping
+/// Contravariant mapping (see Mapping::transform() for details)
       mapping_contravariant = 0x0002,
-/// Mapping of the gradient of a covariant vector field
+/// Mapping of the gradient of a covariant vector field (see Mapping::transform() for details)
       mapping_covariant_gradient = 0x0003,
-/// Mapping of the gradient of a contravariant vector field
+/// Mapping of the gradient of a contravariant vector field (see Mapping::transform() for details)
       mapping_contravariant_gradient = 0x0004,
-/// The Piola transform usually used for Hdiv elements
                                       /**
+                                       * The Piola transform usually used for Hdiv elements.
                                        * Piola transform is the
                                        * standard transformation of
                                        * vector valued elements in
@@ -77,15 +70,16 @@ enum MappingType
                                        * transformation scaled by the
                                        * inverse of the volume
                                        * element.
-                                       *
-                                       * If applied to a rank 2
-                                       * tensor, the mapping class
-                                       * will apply the correct
-                                       * transformation for the
-                                       * gradient of such a vector
-                                       * field.
                                        */
       mapping_piola = 0x0100,
+                                      /**
+                                         transformation for the gradient of
+                                         for a vector field
+                                         correspoing to a mapping_piola
+                                         transformation (see Mapping::transform() for details).
+                                      */
+      
+      mapping_piola_gradient = 0x0101, 
 /// The mapping used for Nedelec elements
                                       /**
                                        * curl-conforming elements are
@@ -94,16 +88,13 @@ enum MappingType
                                        * introduce a separate mapping
                                        * type, such that we can use
                                        * the same flag for the vector
-                                       * and its gradient (the
-                                       * transformation of the
-                                       * gradient differs from the
-                                       * one used by #mapping_covariant).
+                                       * and its gradient (see Mapping::transform() for details).
                                        */
       mapping_nedelec = 0x0200,
 /// The mapping used for Raviart-Thomas elements
-      mapping_raviart_thomas = mapping_piola,
+      mapping_raviart_thomas = 0x0300,
 /// The mapping used for BDM elements
-      mapping_bdm = mapping_piola
+      mapping_bdm = mapping_raviart_thomas
 };
 
 
@@ -128,10 +119,11 @@ enum MappingType
  *
  * The mapping is a transformation $\mathbf x = \Phi(\mathbf{\hat x})$
  * which maps the reference cell [0,1]<sup>dim</sup> to the actual
- * grid cell. In order to describe the application of the mapping to
+ * grid cell in R<sup>spacedim</sup>.
+ * In order to describe the application of the mapping to
  * different objects, we introduce the notation for the Jacobian
  * $J(\mathbf{\hat x}) = \nabla\Phi(\mathbf{\hat x})$. For instance,
- * in two dimensions, we have
+ * if dim=spacedim=2, we have
  * @f[
  * J(\mathbf{\hat x}) = \begin{matrix}
  * \frac{\partial x}{\partial \hat x} & \frac{\partial x}{\partial \hat y}
@@ -175,9 +167,10 @@ enum MappingType
  *
  * @todo Add documentation on the codimension-one case
  *
- * <h4>Mapping of vector fields and tensor fields</h4>
+ * <h4>Mapping of vector fields, differential forms and gradients of vector fields</h4>
  *
- * Mappings of a vector field <b>v</b> and a tensor field <b>T</b>
+ * The tranfomation of vector fields, differential forms (gradients/jacobians) and
+ * gradients of vector fields between the reference cell and the actual grid cell
  * follows the general form
  *
  * @f[
@@ -187,9 +180,12 @@ enum MappingType
  * \mathbf T(\mathbf x) = \mathbf A(\mathbf{\hat x})
  * \mathbf{\hat T}(\mathbf{\hat x}) \mathbf B(\mathbf{\hat x}),
  * @f]
- * respectively, where the tensors <b>A</b> and <b>B</b> are
+ *
+ * where <b>v</b> is a vector field or a differential form and
+ * and <b>T</b> a tensor field of gradients.
+ * The differential forms <b>A</b> and <b>B</b> are
  * determined by the MappingType enumerator.
- * These transformations are performed through the two functions
+ * These transformations are performed through the functions
  * transform(). See the documentation there for possible
  * choices.
  *
@@ -429,7 +425,7 @@ class Mapping : public Subscriptor
     };
 
 /**
- * Transform a field of vectors or forms according to the selected
+ * Transform a field of vectors or 1-differential forms according to the selected
  * MappingType.
  *
  * @note Normally, this function is called by a finite element,
@@ -439,101 +435,148 @@ class Mapping : public Subscriptor
  *
  * The mapping types currently implemented by derived classes are:
  * <ul>
- * <li>
- * A vector field on the reference cell is mapped to the physical cell
- * by the Jacobian:
+ * <li> #mapping_contravariant: maps a vector field on the reference cell
+ * is to the physical cell through the Jacobian:
  * @f[
- * \mathbf u(\mathbf x) = J(\mathbf{\hat x})\mathbf{\hat
- * u}(\mathbf{\hat x}).
+ * \mathbf u(\mathbf x) = J(\mathbf{\hat x})\mathbf{\hat u}(\mathbf{\hat x}).
  * @f]
  * In physics, this is usually refered to as the contravariant
- * transformation, and here it is triggered by the MappingType
- * #mapping_contravariant. Mathematically, it is the push forward of a
+ * transformation. Mathematically, it is the push forward of a
  * vector field.
  *
- * <li> A field of one-forms on the reference cell is usually
- * represented as a vector field as well, but is transformed by the
- * pull back, which is selected by #mapping_covariant:
+ * <li> #mapping_covariant: maps a field of one-forms on the reference cell
+ * to a field of one-forms on the physical cell.
+ * (theoretically this would refer to a DerivativeForm<1, dim, 1> but it
+ * canonically identified with a Tensor<1,dim>).
+ * Mathematically, it is the pull back of the differential form
+ * @f[
+ * \mathbf u(\mathbf x) = J*(J^{T} J)^{-1}(\mathbf{\hat x})\mathbf{\hat
+ * u}(\mathbf{\hat x}).
+ * @f]
+ In the case when dim=spacedim the previous formula reduces to
  * @f[
  * \mathbf u(\mathbf x) = J^{-T}(\mathbf{\hat x})\mathbf{\hat
  * u}(\mathbf{\hat x}).
  * @f]
- * Gradients of differentiable functions are transformed this way.
+ * Gradients of scalar differentiable functions are transformed this way.
  *
- * <li> A field of <i>n-1</i>-forms on the reference cell is also
+ * <li> #mapping_piola: A field of <i>n-1</i>-forms on the reference cell is also
  * represented by a vector field, but again transforms differently,
- * namely by the Piola transform (#mapping_piola)
+ * namely by the Piola transform 
  * @f[
  *  \mathbf u(\mathbf x) = \frac{1}{\text{det}J(\mathbf x)}
  * J(\mathbf x) \mathbf{\hat u}(\mathbf x).
  * @f]
- *
+ * @todo What is n in mapping_piola description?
  * </ul>
  *
  */
     virtual
     void
     transform (const VectorSlice<const std::vector<Tensor<1,dim> > > input,
-               VectorSlice<std::vector<Tensor<1,spacedim> > >             output,
+               VectorSlice<std::vector<Tensor<1,spacedim> > >        output,
                const InternalDataBase &internal,
                const MappingType type) const = 0;
 
 
+    
 /**
- * Transform a field of rank two tensors according to the selected
- * MappingType.
- *
- * @note Normally, this function is called by a finite element,
- * filling FEValues objects. For this finite element, there should be
- * an alias MappingType like #mapping_bdm, #mapping_nedelec, etc. This
- * alias should be preferred to using the types below.
- *
- * This function is most of the time applied to gradients of a
- * Tensor<1,dim> object, thus in the formulas below, it is useful to
- * think of $\mathbf{T} = \nabla \mathbf u$ and $\mathbf{\hat T} =
- * \hat\nabla \mathbf{\hat u}$.
- *
- * @todo The formulas for #mapping_covariant_gradient and
- * #mapping_contravariant_gradient have been reverse engineered from
- * MappingQ1. They should be verified for consistency with
- * mathematics. The description of the Piola transform is from Hoppe's
- * lecture notes and the implementation should be verified.
- *
- * The mapping types currently implemented by derived classes are:
- * <ul>
- * <li> #mapping_contravariant_gradient, which is the consistent gradient
- * for a vector field mapped with #mapping_contravariant, namely
- * @f[
- *  \mathbf T(\mathbf x) =
- * J(\mathbf{\hat x}) \mathbf{\hat T}(\mathbf{\hat x})
- * J^{-T}(\mathbf{\hat x}).
- * @f]
- *
- * <li> Correspondingly, #mapping_covariant_gradient is the consistent
- * gradient of a one-form, namely,
- * @f[
- *  \mathbf T(\mathbf x) =
- * J^{-T}(\mathbf{\hat x}) \mathbf{\hat T}(\mathbf{\hat x})
- * J^{-T}(\mathbf{\hat x}).
- * @f]
- *
- * <li> The gradients of <i>n-1</i>-forms mapped by the Piola
- * transform are mapped by #mapping_piola, and the formul is
- * @f[
- *  \mathbf T(\mathbf x) =
- * \frac{1}{\text{det}J(\mathbf x)}
- * J(\mathbf{\hat x}) \mathbf{\hat T}(\mathbf{\hat x})
- * J^{-1}(\mathbf{\hat x}).
- * @f]
- * </ul>
- */
+   Transform a field of differential forms from the reference cell to the physical cell.
+
+   It is useful to think of $\mathbf{T} = D \mathbf u$ and
+   $\mathbf{\hat T} = \hat D \mathbf{\hat u}$, with $\mathbf u$ a vector field.
+
+   The mapping types currently implemented by derived classes are:
+   <ul>
+   <li> #mapping_covariant: maps a field of forms on the reference cell
+   to a field of forms on the physical cell.
+   Mathematically, it is the pull back of the differential form
+   @f[
+   \mathbf T(\mathbf x) = \mathbf{\hat T}(\mathbf{\hat x})
+                          J*(J^{T} J)^{-1}(\mathbf{\hat x}).
+   @f]
+   n the case when dim=spacedim the previous formula reduces to
+   @f[
+   \mathbf T(\mathbf x) = \mathbf{\hat u}(\mathbf{\hat x})
+                          J^{-1}(\mathbf{\hat x}).
+   @f]
+  Jacobians of spacedim-vector valued differentiable functions are transformed this way.
+   </ul>
+
+   @note It would have been more reasonable to make this transform a template function
+   with the rank in DerivativeForm<1, dim, rank>. Unfortunately C++ does not
+   allow templatized virtual functions. This is why we identified
+   DerivativeForm<1, dim, 1> with a Tensor<1,dim> when using  mapping_covariant
+   in the function transform above this one.
+*/
+    
     virtual
     void
-    transform (const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+    transform (const VectorSlice<const std::vector< DerivativeForm<1, dim, spacedim> > > input,
                VectorSlice<std::vector<Tensor<2,spacedim> > >             output,
                const InternalDataBase &internal,
                const MappingType type) const = 0;
 
+    
+    
+/**
+   Transform a tensor field from the reference cell to the physical cell.
+   This tensors are most of times the jacobians in the reference cell of
+   vector fields that have been pulled back from the physical cell.
+
+   The mapping types currently implemented by derived classes are:
+   <ul>
+
+   <li> #mapping_contravariant_gradient, it
+   assumes $\mathbf u(\mathbf x) = J \mathbf{\hat u}$ so that
+   @f[
+   \mathbf T(\mathbf x) =
+   J(\mathbf{\hat x}) \mathbf{\hat T}(\mathbf{\hat x})
+   J^{-1}(\mathbf{\hat x}).
+   @f]
+
+   <li> #mapping_covariant_gradient, it
+   assumes $\mathbf u(\mathbf x) = J^{-T} \mathbf{\hat u}$ so that
+   @f[
+   \mathbf T(\mathbf x) =
+   J^{-T}(\mathbf{\hat x}) \mathbf{\hat T}(\mathbf{\hat x})
+   J^{-1}(\mathbf{\hat x}).
+   @f]
+   
+   <li> #mapping_piola_gradient, it
+   assumes $\mathbf u(\mathbf x) = \frac{1}{\text{det}J(\mathbf x)}
+   J(\mathbf x) \mathbf{\hat u}(\mathbf x)$
+   so that
+   @f[
+   \mathbf T(\mathbf x) =
+   \frac{1}{\text{det}J(\mathbf x)}
+   J(\mathbf{\hat x}) \mathbf{\hat T}(\mathbf{\hat x})
+   J^{-1}(\mathbf{\hat x}).
+   @f]
+   </ul>
+   @todo The formulas for #mapping_covariant_gradient,
+   #mapping_contravariant_gradient and #mapping_piola_gradient
+   are only true as stated for linear mappings,
+   if the mapping is bilinear for example then there is a missing
+   term associated with the derivative of of J.
+   
+*/
+    virtual
+    void
+    transform (const VectorSlice<const std::vector<Tensor<2, dim> > >     input,
+               VectorSlice<std::vector<Tensor<2,spacedim> > >             output,
+               const InternalDataBase &internal,
+               const MappingType type) const = 0;
+
+
+
+
+
+
+
+
+
                                     /**
                                      * @deprecated Use transform() instead.
                                      */
@@ -547,7 +590,7 @@ class Mapping : public Subscriptor
                                      * @deprecated Use transform() instead.
                                       */
     void
-    transform_covariant (const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+    transform_covariant (const VectorSlice<const std::vector<DerivativeForm<1, dim ,spacedim> > > input,
                          const unsigned int                 offset,
                         VectorSlice<std::vector<Tensor<2,spacedim> > >      output,
                         const InternalDataBase &internal) const;
@@ -566,7 +609,7 @@ class Mapping : public Subscriptor
                                       */
 
     void
-    transform_contravariant (const VectorSlice<const std::vector<Tensor<2,dim> > > intput,
+    transform_contravariant (const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
                              const unsigned int                 offset,
                             const VectorSlice<std::vector<Tensor<2,spacedim> > > output,
                             const typename Mapping<dim,spacedim>::InternalDataBase &internal) const;
@@ -739,9 +782,9 @@ class Mapping : public Subscriptor
                    InternalDataBase                                          &internal,
                    std::vector<Point<spacedim> >                             &quadrature_points,
                    std::vector<double>                                       &JxW_values,
-                   std::vector<Tensor<2,spacedim> >                          &jacobians,
-                   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-                   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+                   std::vector<DerivativeForm<1,dim,spacedim>  >       &jacobians,
+                   std::vector<DerivativeForm<2,dim,spacedim>  >       &jacobian_grads,
+                   std::vector<DerivativeForm<1,spacedim,dim>  >       &inverse_jacobians,
                    std::vector<Point<spacedim> >                             &cell_normal_vectors,
                    CellSimilarity::Similarity                           &cell_similarity
                   ) const=0;
index cecc88ee0c899a4988140473201d9b9374bacbdd..4d50afa3233de057ada939514267f9c11c5f83d9 100644 (file)
@@ -63,10 +63,10 @@ class MappingCartesian : public Mapping<dim,spacedim>
                    typename Mapping<dim, spacedim>::InternalDataBase         &mapping_data,
                    std::vector<Point<spacedim> >                             &quadrature_points,
                    std::vector<double>                                       &JxW_values,
-                   std::vector<Tensor<2,spacedim> >                          &jacobians,
-                   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-                   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                   std::vector<Point<spacedim> >   &,
+                   std::vector<DerivativeForm<1,dim,spacedim> >      &jacobians,
+                   std::vector<DerivativeForm<2,dim,spacedim> >     &jacobian_grads,
+                   std::vector<DerivativeForm<1,spacedim,dim> >   &inverse_jacobians,
+                   std::vector<Point<spacedim> >   &,
                    CellSimilarity::Similarity                           &cell_similarity) const ;
 
 
@@ -92,16 +92,24 @@ class MappingCartesian : public Mapping<dim,spacedim>
 
     virtual void
     transform (const VectorSlice<const std::vector<Tensor<1,dim> > > input,
-               VectorSlice<std::vector<Tensor<1,spacedim> > > output,
+              VectorSlice<std::vector<Tensor<1,spacedim> > > output,
                const typename Mapping<dim,spacedim>::InternalDataBase &internal,
               const MappingType type) const;
 
     virtual void
-    transform (const VectorSlice<const std::vector<Tensor<2,dim> > > input,
-               VectorSlice<std::vector<Tensor<2,spacedim> > > output,
+    transform (const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
+              VectorSlice<std::vector<Tensor<2,spacedim> > > output,
                const typename Mapping<dim,spacedim>::InternalDataBase &internal,
               const MappingType type) const;
 
+
+    virtual
+    void
+    transform (const VectorSlice<const std::vector<Tensor<2, dim> > >     input,
+               VectorSlice<std::vector<Tensor<2,spacedim> > >             output,
+               const typename Mapping<dim,spacedim>::InternalDataBase &internal,
+               const MappingType type) const;
+    
     virtual Point<spacedim>
     transform_unit_to_real_cell (
       const typename Triangulation<dim,spacedim>::cell_iterator &cell,
index 50ffaf7eeda0faf27e9b031b4534d02b469f3721..b6898c65db6af117fe3fd1a6d5e057d59a9bc944 100644 (file)
@@ -129,8 +129,8 @@ class MappingQ : public MappingQ1<dim,spacedim>
               const MappingType type) const;
 
     virtual void
-    transform (const VectorSlice<const std::vector<Tensor<2,dim> > > input,
-               VectorSlice<std::vector<Tensor<2,spacedim> > > output,
+    transform (const VectorSlice<const std::vector<DerivativeForm<1, dim, spacedim> > >    input,
+              VectorSlice<std::vector<Tensor<2,spacedim> > > output,
                const typename Mapping<dim,spacedim>::InternalDataBase &internal,
               const MappingType type) const;
 
@@ -214,10 +214,10 @@ class MappingQ : public MappingQ1<dim,spacedim>
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
-                   std::vector<Tensor<2,spacedim> >                          &jacobians,
-                   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-                   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
-                    std::vector<Point<spacedim> >                             &cell_normal_vectors,
+                   std::vector<DerivativeForm<1,dim,spacedim> >       &jacobians,
+                   std::vector<DerivativeForm<2,dim,spacedim> >       &jacobian_grads,
+                   std::vector<DerivativeForm<1,spacedim,dim> >      &inverse_jacobians,
+                   std::vector<Point<spacedim> >                             &cell_normal_vectors,
                    CellSimilarity::Similarity                           &cell_similarity) const ;
 
                                     /**
index 065f24849c71f8a93936f09fcf67c2421f5b0e2b..e01054d786cba90114fd8fe8b76efbd655826f29 100644 (file)
@@ -1,7 +1,7 @@
 //---------------------------------------------------------------------------
 //    $Id$
 //
-//    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -13,6 +13,7 @@
 #define __deal2__mapping_q1_h
 
 
+#include <deal.II/base/derivative_form.h>
 #include <deal.II/base/config.h>
 #include <deal.II/base/table.h>
 #include <deal.II/base/qprojector.h>
@@ -90,11 +91,56 @@ class MappingQ1 : public Mapping<dim,spacedim>
               const MappingType type) const;
 
     virtual void
-    transform (const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+    transform (const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > >    input,
                VectorSlice<std::vector<Tensor<2,spacedim> > > output,
                const typename Mapping<dim,spacedim>::InternalDataBase &internal,
               const MappingType type) const;
 
+    virtual
+    void
+    transform (const VectorSlice<const std::vector<Tensor<2, dim> > >     input,
+               VectorSlice<std::vector<Tensor<2,spacedim> > >             output,
+               const typename Mapping<dim,spacedim>::InternalDataBase &internal,
+               const MappingType type) const;
+
+
+  protected:
+/**
+   This function and the next allow to generate the transform require by
+   the virtual transform() in mapping, but unfortunately in C++ one cannot
+   declare a virtual template function.
+*/
+    template < int rank >
+    void
+    transform_fields(const VectorSlice<const std::vector<Tensor<rank,dim>      > > input,
+                          VectorSlice<      std::vector<Tensor<rank,spacedim> > > output,
+                    const typename Mapping<dim,spacedim>::InternalDataBase &internal,
+                    const MappingType type) const;
+/**
+   see doc in transform_fields
+*/
+    template < int rank >
+    void
+    transform_gradients(const VectorSlice<const std::vector<Tensor<rank,dim>      > > input,
+                       VectorSlice<      std::vector<Tensor<rank,spacedim> > > output,
+                       const typename Mapping<dim,spacedim>::InternalDataBase &internal,
+                       const MappingType type) const;
+/**
+   see doc in transform_fields
+*/
+    template < int rank >
+    void
+    transform_differential_forms(
+      const VectorSlice<const std::vector<DerivativeForm<rank, dim, spacedim> > >    input,
+      VectorSlice<std::vector<DerivativeForm<rank, spacedim, spacedim> > > output,
+      const typename Mapping<dim,spacedim>::InternalDataBase &internal,
+      const MappingType type) const;
+
+  public:
+    
+
+    
+
                                      /**
                                       * Return a pointer to a copy of the
                                       * present object. The caller of this
@@ -206,6 +252,12 @@ class MappingQ1 : public Mapping<dim,spacedim>
                                          * transformation at each of
                                          * the quadrature points. The
                                          * matrix stored is the
+                                         * Jacobian * G^{-1},
+                                         * where G = Jacobian^{t} * Jacobian,
+                                         * is the first fundamental
+                                         * form of the map;
+                                         * if dim=spacedim then
+                                         * it reduces to the transpose of the
                                          * inverse of the Jacobian
                                          * matrix, which itself is
                                          * stored in the
@@ -214,7 +266,7 @@ class MappingQ1 : public Mapping<dim,spacedim>
                                          *
                                          * Computed on each cell.
                                          */
-       std::vector<Tensor<2,spacedim> > covariant;
+       std::vector<DerivativeForm<1,dim, spacedim > >  covariant;
 
                                         /**
                                          * Tensors of contravariant
@@ -226,23 +278,8 @@ class MappingQ1 : public Mapping<dim,spacedim>
                                          * i.e. $J_{ij}=dx_i/d\hat x_j$.
                                          *
                                          * Computed on each cell.
-                                         *
-                                         * @note If dim<spacedim,
-                                         * then the Jacobian matrix
-                                         * is rectangular, with
-                                         * spacedim rows and dim
-                                         * columns. We nevertheless
-                                         * store it as a square
-                                         * rank-2 tensor. The unused
-                                         * columns are internally
-                                         * used to store temporary
-                                         * data, such as the
-                                         * "missing" vectors spanning
-                                         * the full space (for
-                                         * example the cell normal
-                                         * vector).
                                          */
-       std::vector<Tensor<2,spacedim> > contravariant;
+       std::vector< DerivativeForm<1,dim,spacedim> > contravariant;
 
                                         /**
                                          * Unit tangential vectors. Used
@@ -333,9 +370,9 @@ class MappingQ1 : public Mapping<dim,spacedim>
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
-                   std::vector<Tensor<2,spacedim> >                          &jacobians,
-                   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-                   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+                   std::vector<DerivativeForm<1,dim,spacedim> >        &jacobians,
+                   std::vector<DerivativeForm<2,dim,spacedim> >       &jacobian_grads,
+                   std::vector<DerivativeForm<1,spacedim,dim> >      &inverse_jacobians,
                    std::vector<Point<spacedim> >                             &cell_normal_vectors,
                    CellSimilarity::Similarity                           &cell_similarity) const;
 
@@ -514,10 +551,17 @@ class MappingQ1 : public Mapping<dim,spacedim>
                                               InternalData &mdata,
                                               Point<dim> &p_unit) const;
 
-                                    /**
-                                     * Always returns @p true because
-                                     * MappingQ1 preserves vertex locations.
-                                     */
+
+
+
+
+
+
+
+                                      /**
+                                       * Always returns @p true because
+                                       * MappingQ1 preserves vertex locations.
+                                       */
     virtual
     bool preserves_vertex_locations () const;
 
@@ -532,6 +576,60 @@ class MappingQ1 : public Mapping<dim,spacedim>
                                      * @ingroup Exceptions
                                      */
     DeclException0(ExcTransformationFailed);
+
+    
+  protected:
+                                    /* Trick to templatize transform_real_to_unit_cell<dim, dim+1> */
+    template<int dim_>
+    void transform_real_to_unit_cell_internal_codim1
+    (const typename Triangulation<dim_,dim_+1>::cell_iterator &cell,
+     const Point<dim_+1> &p,
+     InternalData        &mdata,
+     Point<dim_>         &p_unit) const;
+
+/**
+   Compute an initial guess to pass to the Newton method in
+   transform_real_to_unit_cell.
+
+   For the initial guess we proceed in the following way:
+   <ul>
+   <li> find the least square dim-dimensional plane
+        approximating the cell vertices, i.e. we find and affine
+       map A x_hat + b from the reference cell to the real space.
+   <li> Solve the equation A x_hat + b = p for x_hat
+   <li> This x_hat is the initial solution used for the Newton Method.
+   </ul>
+
+   @note if dim<spacedim we first project p onto the plane.
+   @note if dim==1 (for any spacedim) the initial guess is the exact solution
+   and no Newton iteration is needed.
+
+
+   Some details about how we compute the least square plane.
+   We look for a  spacedim x (dim + 1) matrix  X such that
+
+   X * M = Y
+
+   where M is a (dim+1) x n_vertices  matrix and Y a spacedim x n_vertices.
+
+   And:
+   The i-th column of M is unit_vertex[i] and the last row all 1's.
+   The i-th column of Y is real_vertex[i].
+
+   If we split X=[A|b], the least square approx is A x_hat+b
+
+   Classically  X = Y * (M^t (M M^t)^{-1})
+
+   Let K = M^t * (M M^t)^{-1} = [KA Kb]
+   this can be precomputed, and that is exactely
+   what we do.
+
+   Finally A = Y*KA  and  b = Y*Kb.
+*/
+    Point<dim>
+    transform_real_to_unit_cell_initial_guess (const std::vector<Point<spacedim> > &vertex,
+                                              const Point<spacedim>                            &p) const;
+
     
   private:
                                     /**
@@ -654,6 +752,34 @@ class MappingQ1 : public Mapping<dim,spacedim>
 };
 
 
+template<>
+void
+MappingQ1<2,3>::
+transform_real_to_unit_cell_internal
+(const Triangulation<2,3>::cell_iterator &cell,
+ const Point<3>                            &p,
+ InternalData                                     &mdata,
+ Point<2>                                       &p_unit) const;
+
+/* Only used in mapping Q if degree > 1 */
+template<>
+void
+MappingQ1<1,2>::
+transform_real_to_unit_cell_internal (const Triangulation<1,2>::cell_iterator &cell,
+                                     const Point<2> &p,
+                                     InternalData   &mdata,
+                                     Point<1>       &p_unit) const;
+
+/* Only used in mapping Q if degree > 1 */
+template<>
+void
+MappingQ1<1,3>::
+transform_real_to_unit_cell_internal (const Triangulation<1,3>::cell_iterator &cell,
+                                     const Point<3> &p,
+                                     InternalData   &mdata,
+                                     Point<1>       &p_unit) const;
+
+
 /**
  * In order to avoid creation of static MappingQ1 objects at several
  * places in the library (in particular in backward compatibility
index ecfc039a04a8130783e80103b80d24bafc3a252c..20c89ff7d1e570bab0356fca997be4233e0e1bd5 100644 (file)
@@ -150,9 +150,9 @@ class MappingQ1Eulerian : public MappingQ1<dim,spacedim>
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
-                   std::vector<Tensor<2,spacedim> >                          &jacobians,
-                   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-                   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+                   std::vector<DerivativeForm<1,dim,spacedim> >       &jacobians,
+                   std::vector<DerivativeForm<2,dim,spacedim>  >       &jacobian_grads,
+                   std::vector<DerivativeForm<1,spacedim,dim>  >       &inverse_jacobians,
                    std::vector<Point<spacedim> >                             &cell_normal_vectors,
                    CellSimilarity::Similarity                           &cell_similarity) const;
 
index 0ce6c967e7ec8252ec4df8dedcff1c8242eca184..0147effa4f9771590e42f9fd91747aa6a4154189 100644 (file)
@@ -152,9 +152,9 @@ class MappingQEulerian : public MappingQ<dim, spacedim>
                    typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
                    typename std::vector<Point<spacedim> >                    &quadrature_points,
                    std::vector<double>                                       &JxW_values,
-                   std::vector<Tensor<2,spacedim> >                          &jacobians,
-                   std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-                   std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+                   std::vector<DerivativeForm<1,dim,spacedim> >      &jacobians,
+                   std::vector<DerivativeForm<2,dim,spacedim> >      &jacobian_grads,
+                   std::vector<DerivativeForm<1,spacedim,dim> >      &inverse_jacobians,
                    std::vector<Point<spacedim> >                             &cell_normal_vectors,
                    CellSimilarity::Similarity                           &cell_similarity) const;
 
index 9863ae389468042b5a36256a48313c2f117f808a..a3cdb4d61d5cfd0fa88a048256fd27df1e7a0cff 100644 (file)
@@ -1338,7 +1338,12 @@ class GridOut
     void write_msh_faces (const Triangulation<1,2> &tria,
                          const unsigned int      starting_index,
                          std::ostream           &out) const;
+    void write_msh_faces (const Triangulation<1,3> &tria,
+                         const unsigned int      starting_index,
+                         std::ostream           &out) const;
+
 
+    
                                     /**
                                      * Write the grid information about
                                      * lines to @p out. Only those lines
@@ -1390,6 +1395,9 @@ class GridOut
     void write_msh_lines (const Triangulation<1,2> &tria,
                          const unsigned int      starting_index,
                          std::ostream           &out) const;
+    void write_msh_lines (const Triangulation<1,3> &tria,
+                         const unsigned int      starting_index,
+                         std::ostream           &out) const;
                                     /**
                                      * Declaration of the specialization
                                      * of above function for 2d. Does
@@ -1455,6 +1463,9 @@ class GridOut
     void write_ucd_faces (const Triangulation<1,2> &tria,
                          const unsigned int      starting_index,
                          std::ostream           &out) const;
+    void write_ucd_faces (const Triangulation<1,3> &tria,
+                         const unsigned int      starting_index,
+                         std::ostream           &out) const;
 
 
                                     /**
@@ -1505,6 +1516,9 @@ class GridOut
     void write_ucd_lines (const Triangulation<1,2> &tria,
                          const unsigned int      starting_index,
                          std::ostream           &out) const;
+     void write_ucd_lines (const Triangulation<1,3> &tria,
+                         const unsigned int      starting_index,
+                         std::ostream           &out) const;
 
 
                                     /**
@@ -1558,7 +1572,7 @@ class GridOut
                                      * 1d, 2sd. Simply returns zero.
                                      */
     unsigned int n_boundary_faces (const Triangulation<1,2> &tria) const;
-
+    unsigned int n_boundary_faces (const Triangulation<1,3> &tria) const;
                                     /**
                                      * Return the number of lines in the
                                      * triangulation which have a boundary
@@ -1594,6 +1608,7 @@ class GridOut
                                      * 1d, 2sd. Simply returns zero.
                                      */
     unsigned int n_boundary_lines (const Triangulation<1,2> &tria) const;
+    unsigned int n_boundary_lines (const Triangulation<1,3> &tria) const;
 
                                     /**
                                      * Declaration of the specialization
index 2bcbfe3e85b760b74935331e3068dd4871aa323b..e41ae8650edc5ea75fd3a1786662f69e62e4ec17 100644 (file)
@@ -377,7 +377,7 @@ namespace GridTools
                                    * by the algorithm.
                                    */
   template <int dim, template<int, int> class Container, int spacedim>
-  std::pair<typename Container<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+  std::pair<typename Container<dim,spacedim>::active_cell_iterator, Point<dim> >
   find_active_cell_around_point (const Mapping<dim,spacedim>   &mapping,
                                 const Container<dim,spacedim> &container,
                                 const Point<spacedim>     &p);
@@ -393,7 +393,7 @@ namespace GridTools
                                    * handlers is always zero.
                                    */
   template <int dim, int spacedim>
-  std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+  std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<dim> >
   find_active_cell_around_point (const hp::MappingCollection<dim,spacedim>   &mapping,
                                 const hp::DoFHandler<dim,spacedim> &container,
                                 const Point<spacedim>     &p);
index 0c9afcfa53951abb206765f1fb4a6c25f2653107..2c2fe9d48273d646512d901c25e1b612baee63c2 100644 (file)
@@ -2831,10 +2831,14 @@ class CellAccessor :  public TriaAccessor<dim,dim,spacedim>
                                      * may be different as to whether
                                      * a point is in- or outside the
                                      * cell in real space.
+
+                                     In case of codim>0, the point is first projected
+                                     to the manifold where the cell is embedded and
+                                     then check if this projection is inside the cell. 
+                                     
                                      */
     bool point_inside (const Point<spacedim> &p) const;
 
-
                                     /**
                                      *  Set the neighbor @p i of
                                      *  this cell to the cell pointed
@@ -2905,6 +2909,17 @@ class CellAccessor :  public TriaAccessor<dim,dim,spacedim>
                                      */
     unsigned int neighbor_of_neighbor_internal (const unsigned int neighbor) const;
 
+                                    /**
+                                       As for any codim>0 we can use a similar code
+                                       and c++ does not allow partial templates.
+                                       we use this auxiliary function that is then
+                                       called from point_inside.
+                                    */
+    template<int dim_,int spacedim_ >
+    bool point_inside_codim(const Point<spacedim_> &p) const;
+    
+    
+
   private:
                                     /**
                                      * Set the orientation of this
@@ -3023,11 +3038,12 @@ CellAccessor (const TriaAccessor<structdim2,dim2,spacedim2> &)
 
 #ifndef DOXYGEN
 
-template <> bool CellAccessor<1,1>::point_inside (const Point<1> &p) const;
-template <> bool CellAccessor<2,2>::point_inside (const Point<2> &p) const;
+template <> bool CellAccessor<1,1>::point_inside (const Point<1> &) const;
+template <> bool CellAccessor<2,2>::point_inside (const Point<2> &) const;
 template <> bool CellAccessor<3,3>::point_inside (const Point<3> &) const;
-template <> bool CellAccessor<1,2>::point_inside (const Point<2> &p) const;
-template <> bool CellAccessor<2,3>::point_inside (const Point<3> &p) const;
+template <> bool CellAccessor<1,2>::point_inside (const Point<2> &) const;
+template <> bool CellAccessor<1,3>::point_inside (const Point<3> &) const;
+template <> bool CellAccessor<2,3>::point_inside (const Point<3> &) const;
 // -------------------------------------------------------------------
 
 #endif // DOXYGEN
index dcbc34982d4f4d3429b69a1e844df5e5f3e1d2b6..4ad67ab7e8bea29350db739bc74b8aab2af70974 100644 (file)
@@ -2643,6 +2643,15 @@ CellAccessor<1,2>::subface_case(const unsigned int) const
 }
 
 
+template <>
+inline
+internal::SubfaceCase<1>
+CellAccessor<1,3>::subface_case(const unsigned int) const
+{
+  return internal::SubfaceCase<1>::case_none;
+}
+
+
 template <>
 inline
 internal::SubfaceCase<2>
index 1b2871ca11bd1b0d520e4ae8169f2859c474e1e6..adfda9b0048cd449dd0de2f28c87c79a295374cd 100644 (file)
@@ -1,7 +1,7 @@
 //---------------------------------------------------------------------------
 //    $Id$
 //
-//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by the deal.II authors
+//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -643,6 +643,17 @@ get_intermediate_points_on_face (const Triangulation<1,2>::face_iterator &,
                                 std::vector<Point<2> > &) const;
 
 
+
+template <>
+Point<3>
+Boundary<1,3>::
+get_new_point_on_face (const Triangulation<1,3>::face_iterator &) const;
+
+template <>
+void
+Boundary<1,3>::
+get_intermediate_points_on_face (const Triangulation<1,3>::face_iterator &,
+                                std::vector<Point<3> > &) const;
 template <>
 void
 StraightBoundary<1,1>::
@@ -676,6 +687,13 @@ StraightBoundary<3,3>::
 get_intermediate_points_on_quad (const Triangulation<3,3>::quad_iterator &quad,
                                 std::vector<Point<3> > &points) const;
 
+template <>
+Point<3>
+StraightBoundary<1,3>::
+project_to_surface (const Triangulation<1, 3>::quad_iterator &quad,
+                   const Point<3>  &y) const;
+
+
 #endif // DOXYGEN
 
 DEAL_II_NAMESPACE_CLOSE
index dacaa2b41d1f920d4f8bd4f82ec4e56bf4dbd7f0..d34fd58fcdc0fdf096a628635ad54bbf6adbfaf5 100644 (file)
@@ -41,8 +41,8 @@ DEAL_II_NAMESPACE_OPEN
  *
  * @author Guido Kanschat, 2001, Wolfgang Bangerth, 2007
  */
-template <int dim>
-class CylinderBoundary : public StraightBoundary<dim>
+template <int dim, int spacedim = dim>
+class CylinderBoundary : public StraightBoundary<dim,spacedim>
 {
   public:
                                     /**
@@ -70,24 +70,24 @@ class CylinderBoundary : public StraightBoundary<dim>
                                      * point on the axis.
                                      */
     CylinderBoundary (const double       radius,
-                     const Point<dim>   direction,
-                     const Point<dim>   point_on_axis);
+                     const Point<spacedim>   direction,
+                     const Point<spacedim>   point_on_axis);
 
                                     /**
                                      * Refer to the general documentation of
                                      * this class and the documentation of the
                                      * base class.
                                      */
-    virtual Point<dim>
-    get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const;
+    virtual Point<spacedim>
+    get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const;
 
                                     /**
                                      * Refer to the general documentation of
                                      * this class and the documentation of the
                                      * base class.
                                      */
-    virtual Point<dim>
-    get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
+    virtual Point<spacedim>
+    get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
 
                                     /**
                                      * Refer to the general
@@ -99,8 +99,8 @@ class CylinderBoundary : public StraightBoundary<dim>
                                      * @p get_intermediate_points_between_points.
                                      */
     virtual void
-    get_intermediate_points_on_line (const typename Triangulation<dim>::line_iterator &line,
-                                    std::vector<Point<dim> > &points) const;
+    get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
+                                    std::vector<Point<spacedim> > &points) const;
 
                                     /**
                                      * Refer to the general
@@ -112,8 +112,8 @@ class CylinderBoundary : public StraightBoundary<dim>
                                      * and for <tt>points.size()==1</tt>.
                                      */
     virtual void
-    get_intermediate_points_on_quad (const typename Triangulation<dim>::quad_iterator &quad,
-                                    std::vector<Point<dim> > &points) const;
+    get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
+                                    std::vector<Point<spacedim> > &points) const;
 
                                     /**
                                      * Compute the normals to the
@@ -126,8 +126,8 @@ class CylinderBoundary : public StraightBoundary<dim>
                                      * base class.
                                      */
     virtual void
-    get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
-                            typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const;
+    get_normals_at_vertices (const typename Triangulation<dim,spacedim>::face_iterator &face,
+                            typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const;
 
                                     /**
                                      * Return the radius of the cylinder.
@@ -152,12 +152,12 @@ class CylinderBoundary : public StraightBoundary<dim>
                                     /**
                                      * The direction vector of the axis.
                                      */
-    const Point<dim> direction;
+    const Point<spacedim> direction;
 
                                     /**
                                      * An arbitrary point on the axis.
                                      */
-    const Point<dim> point_on_axis;
+    const Point<spacedim> point_on_axis;
 
   private:
 
@@ -173,15 +173,15 @@ class CylinderBoundary : public StraightBoundary<dim>
                                      * in the documentation of the
                                      * base class.
                                      */
-    void get_intermediate_points_between_points (const Point<dim> &p0, const Point<dim> &p1,
-                                                std::vector<Point<dim> > &points) const;
+    void get_intermediate_points_between_points (const Point<spacedim> &p0, const Point<spacedim> &p1,
+                                                std::vector<Point<spacedim> > &points) const;
 
                                     /**
                                      * Given a number for the axis,
                                      * return a vector that denotes
                                      * this direction.
                                      */
-    static Point<dim> get_axis_vector (const unsigned int axis);
+    static Point<spacedim> get_axis_vector (const unsigned int axis);
 };
 
 
index cebeaefb478f3b1dae0bf7911d169e833fb0ad43..df2bfefa4fc090f8a5c6e4b1ebe7770bd4f8f9c3 100644 (file)
@@ -13,6 +13,7 @@
 #ifndef _deal2__vectors_templates_h
 #define _deal2__vectors_templates_h
 
+#include <deal.II/base/derivative_form.h>
 #include <deal.II/base/function.h>
 #include <deal.II/base/quadrature.h>
 #include <deal.II/lac/vector.h>
@@ -2602,7 +2603,8 @@ namespace VectorTools
     {
       const double tol = 0.5 * cell->get_fe ().degree * 1e-13 / cell->face (face)->line (line)->diameter ();
       const unsigned int dim = 3;
-
+      const unsigned int spacedim = 3;
+      
       hp_fe_values.reinit
        (cell,
         (cell->active_fe_index () * GeometryInfo<dim>::faces_per_cell + face)
@@ -2612,7 +2614,7 @@ namespace VectorTools
                                       // objects.
       const FEValues<dim>&
        fe_values = hp_fe_values.get_present_fe_values ();
-      const std::vector<Tensor<2, dim> >&
+      const std::vector< DerivativeForm<1,dim,spacedim> > &
        jacobians = fe_values.get_jacobians ();
       const std::vector<Point<dim> >&
        quadrature_points = fe_values.get_quadrature_points ();
@@ -2814,13 +2816,14 @@ namespace VectorTools
                                             const unsigned int first_vector_component,
                                             std::vector<double>& dof_values)
     {
+      const unsigned int spacedim = dim;
       hp_fe_values.reinit (cell, cell->active_fe_index ()
                           * GeometryInfo<dim>::faces_per_cell + face);
                                       // Initialize the required
                                       // objects.
       const FEValues<dim>&
        fe_values = hp_fe_values.get_present_fe_values ();
-      const std::vector<Tensor<2, dim> >&
+      const std::vector< DerivativeForm<1,dim,spacedim> > &
        jacobians = fe_values.get_jacobians ();
 
       std::vector<Vector<double> >
@@ -3782,7 +3785,7 @@ namespace VectorTools
                                            const FEFaceValues<2>& fe_values,
                                            const unsigned int first_vector_component,
                                            const Function<2>& boundary_function,
-                                           const std::vector<Tensor<2, 2> >& jacobians,
+                                           const std::vector<DerivativeForm<1,2,2> > & jacobians,
                                            ConstraintMatrix& constraints)
     {
                                       // Compute the intergral over
@@ -3857,7 +3860,7 @@ namespace VectorTools
                                            const FEFaceValues<dim>&,
                                            const unsigned int,
                                            const Function<dim>&,
-                                           const std::vector<Tensor<2, dim> >&,
+                                           const std::vector<DerivativeForm<1,dim,dim> >&,
                                            ConstraintMatrix&)
     {
       Assert (false, ExcNotImplemented ());
@@ -3874,7 +3877,7 @@ namespace VectorTools
                                            const FEFaceValues<3>& fe_values,
                                            const unsigned int first_vector_component,
                                            const Function<3>& boundary_function,
-                                           const std::vector<Tensor<2, 3> >& jacobians,
+                                           const std::vector<DerivativeForm<1,3,3> >& jacobians,
                                            std::vector<double>& dof_values,
                                            std::vector<unsigned int>& projected_dofs)
     {
@@ -3954,7 +3957,7 @@ namespace VectorTools
                                            const FEFaceValues<dim>&,
                                            const unsigned int,
                                            const Function<dim>&,
-                                           const std::vector<Tensor<2, dim> >&,
+                                           const std::vector<DerivativeForm<1,dim,dim> > &,
                                            std::vector<double>&,
                                            std::vector<unsigned int>&)
     {
@@ -3972,6 +3975,7 @@ namespace VectorTools
                                          ConstraintMatrix& constraints,
                                          const Mapping<dim>& mapping)
   {
+    const unsigned int spacedim = dim;
                                     // Interpolate the normal components
                                     // of the boundary functions. Since
                                     // the Raviart-Thomas elements are
@@ -4034,7 +4038,7 @@ namespace VectorTools
                    fe_values.reinit (cell, face + cell->active_fe_index ()
                                      * GeometryInfo<dim>::faces_per_cell);
 
-                   const std::vector<Tensor<2, dim> >&
+                   const std::vector<DerivativeForm<1,dim,spacedim> > &
                      jacobians = fe_values.get_present_fe_values ().get_jacobians ();
 
                    fe_face_values.reinit (cell, face);
@@ -4098,7 +4102,7 @@ namespace VectorTools
                    fe_values.reinit (cell, face + cell->active_fe_index ()
                                      * GeometryInfo<dim>::faces_per_cell);
 
-                   const std::vector<Tensor<2, dim> >&
+                   const std::vector<DerivativeForm<1,dim ,spacedim> >&
                      jacobians = fe_values.get_present_fe_values ().get_jacobians ();
 
                    fe_face_values.reinit (cell, face);
@@ -4137,6 +4141,7 @@ namespace VectorTools
                                          ConstraintMatrix& constraints,
                                          const hp::MappingCollection<dim, dim>& mapping_collection)
   {
+    const unsigned int spacedim = dim;
     const hp::FECollection<dim>& fe_collection = dof_handler.get_fe ();
     hp::QCollection<dim - 1> face_quadrature_collection;
     hp::QCollection<dim> quadrature_collection;
@@ -4187,7 +4192,7 @@ namespace VectorTools
                    fe_values.reinit (cell, face + cell->active_fe_index ()
                                      * GeometryInfo<dim>::faces_per_cell);
 
-                   const std::vector<Tensor<2, dim> >&
+                   const std::vector<DerivativeForm<1,dim,spacedim> > &
                      jacobians = fe_values.get_present_fe_values ().get_jacobians ();
 
                    fe_face_values.reinit (cell, face);
@@ -4234,7 +4239,7 @@ namespace VectorTools
                    fe_values.reinit (cell, face + cell->active_fe_index ()
                                      * GeometryInfo<dim>::faces_per_cell);
 
-                   const std::vector<Tensor<2, dim> >&
+                   const std::vector<DerivativeForm<1,dim,spacedim> > &
                      jacobians = fe_values.get_present_fe_values ().get_jacobians ();
 
                    fe_face_values.reinit (cell, face);
index 52fc8725fe69ee861c1b2a178f7bb1b75a0900e4..0484766525724e8a2364e183ec8957c84dbee122 100644 (file)
@@ -6133,6 +6133,7 @@ INSTANTIATE(2,2);
 INSTANTIATE(3,3);
 INSTANTIATE(4,4);
 INSTANTIATE(1,2);
+INSTANTIATE(1,3);
 INSTANTIATE(2,3);
 INSTANTIATE(3,4);
 
index fcf56b7d5bc413443e901a3d7e7ae341678c7e2b..6afba8dc1e30d31655bd88d25a6742e58ba29923 100644 (file)
@@ -3154,6 +3154,47 @@ namespace parallel
     {
       return MPI_COMM_WORLD;
     }
+
+
+    template <>
+    Triangulation<1,3>::Triangulation (MPI_Comm)
+    {
+      Assert (false, ExcNotImplemented());
+    }
+
+
+    template <>
+    Triangulation<1,3>::~Triangulation ()
+    {
+      Assert (false, ExcNotImplemented());
+    }
+
+
+
+    template <>
+    types::subdomain_id_t
+    Triangulation<1,3>::locally_owned_subdomain () const
+    {
+      Assert (false, ExcNotImplemented());
+      return 0;
+    }
+
+
+    template <>
+    unsigned int
+    Triangulation<1,3>::n_global_active_cells () const
+    {
+      Assert (false, ExcNotImplemented());
+      return 0;
+    }
+
+
+    template <>
+    MPI_Comm
+    Triangulation<1,3>::get_communicator () const
+    {
+      return MPI_COMM_WORLD;
+    }
   }
 }
 
index 2657e3425d3d85b995150c07f83476f9409d6d0a..c3ad113ba76e4e4d670d66a65399a9854a6431cd 100644 (file)
@@ -22,5 +22,11 @@ for (deal_II_dimension : DIMENSIONS)
     template void BlockInfo::initialize(const MGDoFHandler<deal_II_dimension,deal_II_dimension+1>&, bool);
     template void BlockInfo::initialize_local(const DoFHandler<deal_II_dimension,deal_II_dimension+1>&);
 #endif
+
+#if deal_II_dimension == 3
+    template void BlockInfo::initialize(const DoFHandler<1,3>&);
+    template void BlockInfo::initialize(const MGDoFHandler<1,3>&, bool);
+    template void BlockInfo::initialize_local(const DoFHandler<1,3>&);
+#endif
   }
 
index 5392e65cc1280acf9cd1c2b73c14c9e19f4dd0e2..bff7474f460c67cb18ec1758236e11874b5eb555 100644 (file)
@@ -118,11 +118,25 @@ for (deal_II_dimension : DIMENSIONS)
       TriaActiveIterator<DoFCellAccessor<DoFHandler<deal_II_dimension,deal_II_dimension+1> > >;
 #endif
 
+
+#if deal_II_dimension == 3
+    template class DoFCellAccessor<DoFHandler<1,3> >;
+
+    template class
+      TriaRawIterator   <DoFCellAccessor<DoFHandler<1,3> > >;
+    template class
+      TriaIterator      <DoFCellAccessor<DoFHandler<1,3> > >;
+    template class
+      TriaActiveIterator<DoFCellAccessor<DoFHandler<1,3> > >;
+#endif
+
+
 // --------------------------------------------------------------------------
 // explicit instantiations (for hp::DoFHandler)
 
 #if deal_II_dimension == 1
     template class DoFAccessor<1, hp::DoFHandler<1,2> >;
+    template class DoFAccessor<1, hp::DoFHandler<1,3> >;
 #endif
 
 #if deal_II_dimension == 2
@@ -144,6 +158,18 @@ for (deal_II_dimension : DIMENSIONS)
     template class
       TriaActiveIterator<DoFCellAccessor<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> > >;
 #endif
+
+
+#if deal_II_dimension == 3
+    template class DoFCellAccessor<hp::DoFHandler<1,3> >;
+
+    template class
+      TriaRawIterator   <DoFCellAccessor<hp::DoFHandler<1,3> > >;
+    template class
+      TriaIterator      <DoFCellAccessor<hp::DoFHandler<1,3> > >;
+    template class
+      TriaActiveIterator<DoFCellAccessor<hp::DoFHandler<1,3> > >;
+#endif
   }
 
 
@@ -169,6 +195,19 @@ for (VEC : SERIAL_VECTORS; SCALAR : REAL_SCALARS; deal_II_dimension : DIMENSIONS
       DoFCellAccessor<DoFHandler<deal_II_dimension,deal_II_dimension+1> >::set_dof_values_by_interpolation
       (const Vector<SCALAR>&, VEC&) const;
 
+#endif
+
+#if deal_II_dimension == 3
+
+    template
+      void
+      DoFCellAccessor<DoFHandler<1,3> >::get_interpolated_dof_values
+      (const VEC&, Vector<SCALAR>&) const;
+    template
+      void
+      DoFCellAccessor<DoFHandler<1,3> >::set_dof_values_by_interpolation
+      (const Vector<SCALAR>&, VEC&) const;
+
 #endif
 
   }
@@ -196,6 +235,19 @@ for (VEC : SERIAL_VECTORS; SCALAR : REAL_SCALARS; deal_II_dimension : DIMENSIONS
       DoFCellAccessor<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >::set_dof_values_by_interpolation
       (const Vector<SCALAR>&, VEC&) const;
 
+#endif
+
+#if deal_II_dimension == 3
+
+    template
+      void
+      DoFCellAccessor<hp::DoFHandler<1,3> >::get_interpolated_dof_values
+      (const VEC&, Vector<SCALAR>&) const;
+    template
+      void
+      DoFCellAccessor<hp::DoFHandler<1,3> >::set_dof_values_by_interpolation
+      (const Vector<SCALAR>&, VEC&) const;
+
 #endif
   }
 
index 4553a733d4385845083254aa0dd8963aa1e63702..68d86b942362590f93c2dce37d98f5b030a48377 100644 (file)
@@ -28,5 +28,10 @@ for (deal_II_dimension : DIMENSIONS)
 #if deal_II_dimension < 3
     template class DoFHandler<deal_II_dimension,deal_II_dimension+1>;
 #endif
+
+#if deal_II_dimension == 3
+    template class DoFHandler<1,deal_II_dimension>;
+#endif
+
   }
 
index 0daab4203e73fd4c208366be3945a0650f2d3eec..dbe008f66473af6a45b9840d8b769eac74eb15dc 100644 (file)
@@ -28,6 +28,12 @@ namespace internal
       template class Sequential<deal_II_dimension,deal_II_dimension+1>;
       template class ParallelDistributed<deal_II_dimension,deal_II_dimension+1>;
 #endif
+
+#if deal_II_dimension==3
+      template class PolicyBase<1,3>;
+      template class Sequential<1,3>;
+      template class ParallelDistributed<1,3>;
+#endif
     \}
   \}
 \}
index e3fcb7f2206952752171c26d9070b11d29493d46..b2563c8dbe4dd30f3f10e2d12def6e0b887b01d7 100644 (file)
@@ -56,5 +56,26 @@ for (deal_II_dimension, structdim : DIMENSIONS)
                   const unsigned int       local_index,
                   const unsigned int       global_index);
 #endif
+
+
+#if (deal_II_dimension == 3) && (structdim < 3)
+
+    template
+    unsigned int
+    DoFObjects<structdim>::
+    get_dof_index (const dealii::DoFHandler<1,3> &dof_handler,
+                  const unsigned int       obj_index,
+                  const unsigned int       fe_index,
+                  const unsigned int       local_index) const;
+
+    template
+    void
+    DoFObjects<structdim>::
+    set_dof_index (const dealii::DoFHandler<1,3> &dof_handler,
+                  const unsigned int       obj_index,
+                  const unsigned int       fe_index,
+                  const unsigned int       local_index,
+                  const unsigned int       global_index);
+#endif
   }
 
index 1db0cd32fe56acaccf68c8fa0446f887768b3a89..dd5c1facbe1ff1ec17a95ba392fa771266070817 100644 (file)
 //
 //---------------------------------------------------------------------------
 
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension 
+    namespace DoFRenumbering
+      \{
+      namespace boost
+       \{
+//TODO[WB]: also implement the following boost for hp DoFHandlers etc.
+       \}
+
 
-for (deal_II_dimension : DIMENSIONS)
+// non-boost functions:
+       template
+         void Cuthill_McKee<DoFHandler<deal_II_dimension,deal_II_space_dimension> >
+         (DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+          const bool,
+          const bool,
+          const std::vector<unsigned int>&);
+
+       template
+         void
+         compute_Cuthill_McKee<DoFHandler<deal_II_dimension,deal_II_space_dimension> >
+         (std::vector<unsigned int>&,
+          const DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+          const bool,
+          const bool,
+          const std::vector<unsigned int>&);
+
+       template
+         void component_wise<deal_II_dimension,deal_II_space_dimension>
+         (DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+          const std::vector<unsigned int>&);
+
+       template
+         void subdomain_wise<DoFHandler<deal_II_dimension,deal_II_space_dimension> >
+         (DoFHandler<deal_II_dimension,deal_II_space_dimension> &);
+
+       \}  // namespace DoFRenumbering
+#endif
+  }
+
+//TODO[SP]: replace <deal_II_dimension> by <deal_II_dimension, deal_II_space_dimension>
+// where applicable and move to codimension cases above also when applicable
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-  namespace DoFRenumbering
+#if deal_II_dimension == deal_II_space_dimension 
+namespace DoFRenumbering
   \{
   namespace boost
-  \{
+    \{
 //TODO[WB]: also implement the following boost for hp DoFHandlers etc.
     template
     void
@@ -73,346 +116,296 @@ for (deal_II_dimension : DIMENSIONS)
     void
     compute_minimum_degree (std::vector<unsigned int> &,
                            const hp::DoFHandler<deal_II_dimension> &, bool, bool);
-  \}
+    \}
+    
+    
+// non-boost functions:
+    
+    template
+      void Cuthill_McKee<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension>&,
+       const bool,
+       const bool,
+       const std::vector<unsigned int>&);
 
+    template
+      void
+      compute_Cuthill_McKee<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const bool,
+       const bool,
+       const std::vector<unsigned int>&);
 
-// non-boost functions:
+    template
+      void Cuthill_McKee<MGDoFHandler<deal_II_dimension> >
+      (MGDoFHandler<deal_II_dimension>&,
+       const bool,
+       const bool,
+       const std::vector<unsigned int>&);
 
-  template
-  void Cuthill_McKee<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void
-  compute_Cuthill_McKee<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-
-  template
-  void Cuthill_McKee<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void
-  compute_Cuthill_McKee<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void Cuthill_McKee<MGDoFHandler<deal_II_dimension> >
-  (MGDoFHandler<deal_II_dimension>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void
-  compute_Cuthill_McKee<MGDoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const MGDoFHandler<deal_II_dimension>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void component_wise<deal_II_dimension>
-  (DoFHandler<deal_II_dimension>&,
-   const std::vector<unsigned int>&);
-
-#if deal_II_dimension < 3
-  template
-  void Cuthill_McKee<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
-  (DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void
-  compute_Cuthill_McKee<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
-  (std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-   const bool,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void component_wise<deal_II_dimension,deal_II_dimension+1>
-  (DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-   const std::vector<unsigned int>&);
-#endif
+    template
+      void
+      compute_Cuthill_McKee<MGDoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const MGDoFHandler<deal_II_dimension>&,
+       const bool,
+       const bool,
+       const std::vector<unsigned int>&);
 
-  template
-  void component_wise<deal_II_dimension>
-  (hp::DoFHandler<deal_II_dimension>&,
-   const std::vector<unsigned int>&);
+    template
+      void component_wise<deal_II_dimension>
+      (hp::DoFHandler<deal_II_dimension>&,
+       const std::vector<unsigned int>&);
 
-  template
-  void component_wise<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&,
-   unsigned int,
-   const std::vector<unsigned int>&);
+    template
+      void component_wise<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&,
+       unsigned int,
+       const std::vector<unsigned int>&);
 
-  template
-  void component_wise<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&,
-   const std::vector<unsigned int>&);
+    template
+      void component_wise<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&,
+       const std::vector<unsigned int>&);
 
-  template
-  void hierarchical<deal_II_dimension>
-  (DoFHandler<deal_II_dimension>&);
+    template
+      void hierarchical<deal_II_dimension>
+      (DoFHandler<deal_II_dimension>&);
 
 
 // DG renumbering for DoFHandler
 
-  template
-  void
-  cell_wise_dg<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension>&,
-   const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template
-  void
-  compute_cell_wise_dg<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&, std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension>&,
-   const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template
-  void
-  downstream_dg<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&);
-
-  template
-  void
-  compute_downstream_dg<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&);
-  template
-  void
-  compute_downstream_dg<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&);
-
-  template void
-  cell_wise<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension>&,
-   const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template void
-  compute_cell_wise<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&, std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension>&,
-   const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template void
-  downstream<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&,
-   const bool);
-
-  template void
-  compute_downstream<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&,
-   const bool);
-
-  template
-  void
-  clockwise_dg<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&, bool);
-
-  template
-  void
-  compute_clockwise_dg<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&, const DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&, const bool);
+    template
+      void
+      cell_wise_dg<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension>&,
+       const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template
+      void
+      compute_cell_wise_dg<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&, std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension>&,
+       const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template
+      void
+      downstream_dg<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&);
+
+    template
+      void
+      compute_downstream_dg<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&);
+    template
+      void
+      compute_downstream_dg<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&);
+
+    template void
+      cell_wise<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension>&,
+       const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template void
+      compute_cell_wise<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&, std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension>&,
+       const std::vector<DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template void
+      downstream<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&,
+       const bool);
+
+    template void
+      compute_downstream<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&,
+       const bool);
+
+    template
+      void
+      clockwise_dg<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension>&, const Point<deal_II_dimension>&, bool);
+
+    template
+      void
+      compute_clockwise_dg<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&, const DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&, const bool);
 
 // Renumbering for hp::DoFHandler
 
-  template void
-  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
-  compute_cell_wise_dg<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&, std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template void
-  cell_wise<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension>&,
-   const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template void
-  compute_cell_wise<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&, std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
-
-  template void
-  downstream_dg<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&);
-
-  template void
-  compute_downstream_dg<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&);
-  template
-  void
-  compute_downstream_dg<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&);
-
-  template void
-  downstream<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&,
-   const bool);
-
-  template void
-  compute_downstream<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&,
-   const bool);
-
-  template
-  void
-  clockwise_dg<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&, bool);
-
-  template
-  void
-  compute_clockwise_dg<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension>&,
-   const Point<deal_II_dimension>&,
-   const bool);
+    template void
+      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
+      compute_cell_wise_dg<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&, std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template void
+      cell_wise<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension>&,
+       const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template void
+      compute_cell_wise<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&, std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const std::vector<hp::DoFHandler<deal_II_dimension>::cell_iterator>&);
+
+    template void
+      downstream_dg<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&);
+
+    template void
+      compute_downstream_dg<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&);
+    template
+      void
+      compute_downstream_dg<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&);
+
+    template void
+      downstream<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&,
+       const bool);
+
+    template void
+      compute_downstream<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&,
+       const bool);
+
+    template
+      void
+      clockwise_dg<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&, bool);
+
+    template
+      void
+      compute_clockwise_dg<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const Point<deal_II_dimension>&,
+       const bool);
 
 // MG
 
-  template
-  void downstream_dg<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&, const unsigned int,
-   const Point<deal_II_dimension>&);
+    template
+      void downstream_dg<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&, const unsigned int,
+       const Point<deal_II_dimension>&);
 
-  template
-  void downstream<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&, const unsigned int,
-   const Point<deal_II_dimension>&,
-   const bool);
+    template
+      void downstream<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&, const unsigned int,
+       const Point<deal_II_dimension>&,
+       const bool);
 
-  template
-  void clockwise_dg<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&,
-   const unsigned int,
-   const Point<deal_II_dimension>&, bool);
+    template
+      void clockwise_dg<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&,
+       const unsigned int,
+       const Point<deal_II_dimension>&, bool);
 
 // Generic numbering schemes
 
-  template
-  void random<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension> &);
-
-  template
-  void
-  compute_random<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension> &);
-
-  template
-  void sort_selected_dofs_back<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension> &,
-   const std::vector<bool> &);
-
-  template
-  void
-  compute_sort_selected_dofs_back<DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const DoFHandler<deal_II_dimension> &,
-   const std::vector<bool> &);
-
-  template
-  void random<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension> &);
-
-  template
-  void
-  compute_random<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension> &);
-
-  template
-  void sort_selected_dofs_back<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension> &,
-   const std::vector<bool> &);
-
-  template
-  void
-  compute_sort_selected_dofs_back<hp::DoFHandler<deal_II_dimension> >
-  (std::vector<unsigned int>&,
-   const hp::DoFHandler<deal_II_dimension> &,
-   const std::vector<bool> &);
-
-  template
-  void subdomain_wise<DoFHandler<deal_II_dimension> >
-  (DoFHandler<deal_II_dimension> &);
-
-#if deal_II_dimension < 3
-  template
-  void subdomain_wise<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
-  (DoFHandler<deal_II_dimension,deal_II_dimension+1> &);
-#endif
+    template
+      void random<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension> &);
 
-  template
-  void subdomain_wise<hp::DoFHandler<deal_II_dimension> >
-  (hp::DoFHandler<deal_II_dimension> &);
-
-  template
-  void Cuthill_McKee<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&,
-   const unsigned int,
-   const bool,
-   const std::vector<unsigned int>&);
-
-  template
-  void cell_wise_dg<deal_II_dimension>
-  (MGDoFHandler<deal_II_dimension>&,
-   const unsigned int,
-   const std::vector<MGDoFHandler<deal_II_dimension>::cell_iterator>&);
-  template
-  void compute_cell_wise_dg<deal_II_dimension>
-  (std::vector<unsigned int>&, std::vector<unsigned int>&,
-   const MGDoFHandler<deal_II_dimension>&, const unsigned int,
-   const std::vector<MGDoFHandler<deal_II_dimension>::cell_iterator>&);
-  template
-  void compute_downstream_dg<deal_II_dimension>
-  (std::vector<unsigned int>&, std::vector<unsigned int>&,
-   const MGDoFHandler<deal_II_dimension>&, const unsigned int,
-   const Point<deal_II_dimension>&);
-
-   \}  // namespace DoFRenumbering
+    template
+      void
+      compute_random<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension> &);
+
+    template
+      void sort_selected_dofs_back<DoFHandler<deal_II_dimension> >
+      (DoFHandler<deal_II_dimension> &,
+       const std::vector<bool> &);
+
+    template
+      void
+      compute_sort_selected_dofs_back<DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const DoFHandler<deal_II_dimension> &,
+       const std::vector<bool> &);
+
+    template
+      void random<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension> &);
+
+    template
+      void
+      compute_random<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension> &);
+
+    template
+      void sort_selected_dofs_back<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension> &,
+       const std::vector<bool> &);
+
+    template
+      void
+      compute_sort_selected_dofs_back<hp::DoFHandler<deal_II_dimension> >
+      (std::vector<unsigned int>&,
+       const hp::DoFHandler<deal_II_dimension> &,
+       const std::vector<bool> &);
+
+  
+    template
+      void subdomain_wise<hp::DoFHandler<deal_II_dimension> >
+      (hp::DoFHandler<deal_II_dimension> &);
+
+    template
+      void Cuthill_McKee<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&,
+       const unsigned int,
+       const bool,
+       const std::vector<unsigned int>&);
+
+    template
+      void cell_wise_dg<deal_II_dimension>
+      (MGDoFHandler<deal_II_dimension>&,
+       const unsigned int,
+       const std::vector<MGDoFHandler<deal_II_dimension>::cell_iterator>&);
+    template
+      void compute_cell_wise_dg<deal_II_dimension>
+      (std::vector<unsigned int>&, std::vector<unsigned int>&,
+       const MGDoFHandler<deal_II_dimension>&, const unsigned int,
+       const std::vector<MGDoFHandler<deal_II_dimension>::cell_iterator>&);
+    template
+      void compute_downstream_dg<deal_II_dimension>
+      (std::vector<unsigned int>&, std::vector<unsigned int>&,
+       const MGDoFHandler<deal_II_dimension>&, const unsigned int,
+       const Point<deal_II_dimension>&);
+
+    \}  // namespace DoFRenumbering
+#endif
   }
 
+
+
+   
index 9afc362c00c87dbd33febdbf5d2d5f6c6c11594d..7760cff991d588740ab05ef3352859fda0a68e27 100644 (file)
@@ -2000,6 +2000,24 @@ namespace DoFTools
     }
 
 
+    void
+    make_hp_hanging_node_constraints (const dealii::DoFHandler<1,3> &,
+                                     ConstraintMatrix    &)
+    {
+                                      // nothing to do for regular
+                                      // dof handlers in 1d
+    }
+    
+    void
+    make_oldstyle_hanging_node_constraints (const dealii::DoFHandler<1,3> &,
+                                           ConstraintMatrix    &,
+                                           dealii::internal::int2type<1>)
+    {
+                                      // nothing to do for regular
+                                      // dof handlers in 1d
+    }
+
+    
 //   currently not used but may be in the future:
 
 //     void
index cc83666673ff1e6c13352368e51e624aef177a48..fe1259fe0389cf3b14f0238525c1d364fa462f3e 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -224,6 +224,84 @@ for (SP : SPARSITY_PATTERNS; deal_II_dimension : DIMENSIONS)
     // SP    &sparsity);
 
 #endif
+
+
+#if deal_II_dimension == 3
+
+    template void
+    DoFTools::make_sparsity_pattern<DoFHandler<1,3>, SP>
+    (const DoFHandler<1,3> &dof,
+     SP    &sparsity,
+     const ConstraintMatrix &,
+     const bool,
+     const unsigned int);
+
+    template void
+    DoFTools::make_sparsity_pattern<hp::DoFHandler<1,3>, SP>
+    (const hp::DoFHandler<1,3> &dof,
+     SP    &sparsity,
+     const ConstraintMatrix &,
+     const bool,
+     const unsigned int);
+
+    template void
+    DoFTools::make_sparsity_pattern<DoFHandler<1,3>, SP>
+    (const DoFHandler<1,3>&,
+     const Table<2,Coupling>&,
+     SP &,
+     const ConstraintMatrix &,
+     const bool,
+     const unsigned int);
+
+    template void
+    DoFTools::make_sparsity_pattern<hp::DoFHandler<1,3>, SP>
+    (const hp::DoFHandler<1,3>&,
+     const Table<2,Coupling>&,
+     SP &,
+     const ConstraintMatrix &,
+     const bool,
+     const unsigned int);
+
+    template void
+    DoFTools::make_sparsity_pattern<DoFHandler<1,3>, SP>
+    (const DoFHandler<1,3> &dof_row,
+     const DoFHandler<1,3> &dof_col,
+     SP    &sparsity);
+
+    template void
+    DoFTools::make_sparsity_pattern<hp::DoFHandler<1,3>, SP>
+    (const hp::DoFHandler<1,3> &dof_row,
+     const hp::DoFHandler<1,3> &dof_col,
+     SP    &sparsity);
+
+    template void
+    DoFTools::make_boundary_sparsity_pattern<DoFHandler<1,3>,SP>
+    (const DoFHandler<1,3>& dof,
+     const std::vector<unsigned int>  &,
+     SP    &);
+
+    //template void
+    //DoFTools::make_boundary_sparsity_pattern<hp::DoFHandler<1,3>,SP>
+    //(const hp::DoFHandler<1,3>& dof,
+    // const std::vector<unsigned int>  &,
+    // SP    &);
+
+    template void
+    DoFTools::make_boundary_sparsity_pattern<DoFHandler<1,3>,SP>
+    (const DoFHandler<1,3>& dof,
+     const FunctionMap<3>::type  &boundary_indicators,
+     const std::vector<unsigned int>  &dof_to_boundary_mapping,
+     SP    &sparsity);
+
+    //template void
+    //DoFTools::make_boundary_sparsity_pattern<hp::DoFHandler<1,3>,SP>
+    //(const hp::DoFHandler<1,3>& dof,
+    // const FunctionMap<3>::type  &boundary_indicators,
+    // const std::vector<unsigned int>  &dof_to_boundary_mapping,
+    // SP    &sparsity);
+
+#endif
+
   }
 
 
@@ -240,6 +318,12 @@ for (DH : DOFHANDLERS; deal_II_dimension : DIMENSIONS)
 
 for (deal_II_dimension : DIMENSIONS)
 {
+  template
+  Table<2,DoFTools::Coupling>
+  DoFTools::dof_couplings_from_component_couplings
+  (const FiniteElement<deal_II_dimension> &fe,
+   const Table<2,DoFTools::Coupling> &component_couplings);
+
   template
   void DoFTools::make_vertex_patches (SparsityPattern&, const MGDoFHandler<deal_II_dimension>&,
   unsigned int, bool, bool, bool, bool);
@@ -247,7 +331,7 @@ for (deal_II_dimension : DIMENSIONS)
   template
   void DoFTools::make_single_patch (SparsityPattern&, const MGDoFHandler<deal_II_dimension>&,
   unsigned int, bool);
-  
+
   template
   void DoFTools::make_child_patches(SparsityPattern&, const MGDoFHandler<deal_II_dimension>&,
   unsigned int, bool, bool);
@@ -260,6 +344,14 @@ make_hanging_node_constraints (const DoFHandler<deal_II_dimension,deal_II_dimens
                               ConstraintMatrix &constraints);
 #endif
 
+#if deal_II_dimension == 3
+template
+void
+DoFTools::
+make_hanging_node_constraints (const DoFHandler<1,3> &dof_handler,
+                              ConstraintMatrix &constraints);
+#endif
+
 
 // TODO: can cleanup a bit more to fit into the scheme used above
 
@@ -476,11 +568,24 @@ unsigned int
 DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
 (const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
  const types::subdomain_id_t);
+
 template
 IndexSet
 DoFTools::dof_indices_with_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
 (const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
  const types::subdomain_id_t);
+
+template
+void
+DoFTools::get_subdomain_association<DoFHandler<deal_II_dimension,deal_II_dimension+1> >
+(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &dof_handler,
+ std::vector<types::subdomain_id_t>           &subdomain_association);
+template
+void
+DoFTools::get_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
+(const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &dof_handler,
+ std::vector<types::subdomain_id_t>           &subdomain_association);
+
 template
 void
 DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> >
@@ -489,6 +594,63 @@ DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<deal_II_dimension
  std::vector<unsigned int> &);
 #endif
 
+#if deal_II_dimension == 3
+template
+void
+DoFTools::extract_boundary_dofs<DoFHandler<1,3> >
+  (const DoFHandler<1,3> &,
+   const std::vector<bool>                  &,
+   std::vector<bool>                        &,
+   const std::set<unsigned char> &);
+
+template
+void
+DoFTools::get_subdomain_association<DoFHandler<1,3> >
+(const DoFHandler<1,3> &dof_handler,
+ std::vector<types::subdomain_id_t>           &subdomain_association);
+template
+void
+DoFTools::get_subdomain_association<hp::DoFHandler<1,3> >
+(const hp::DoFHandler<1,3> &dof_handler,
+ std::vector<types::subdomain_id_t>           &subdomain_association);
+
+template
+unsigned int
+DoFTools::count_dofs_with_subdomain_association<DoFHandler<1,3> >
+(const DoFHandler<1,3> &,
+ const types::subdomain_id_t);
+template
+IndexSet
+DoFTools::dof_indices_with_subdomain_association<DoFHandler<1,3> >
+(const DoFHandler<1,3> &,
+ const types::subdomain_id_t);
+template
+void
+DoFTools::count_dofs_with_subdomain_association<DoFHandler<1,3> >
+(const DoFHandler<1,3> &,
+ const types::subdomain_id_t,
+ std::vector<unsigned int> &);
+
+template
+unsigned int
+DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<1,3> >
+(const hp::DoFHandler<1,3> &,
+ const types::subdomain_id_t);
+template
+IndexSet
+DoFTools::dof_indices_with_subdomain_association<hp::DoFHandler<1,3> >
+(const hp::DoFHandler<1,3> &,
+ const types::subdomain_id_t);
+template
+void
+DoFTools::count_dofs_with_subdomain_association<hp::DoFHandler<1,3> >
+(const hp::DoFHandler<1,3> &,
+ const types::subdomain_id_t,
+ std::vector<unsigned int> &);
+#endif
+
+
+
 template
 unsigned int
 DoFTools::count_dofs_with_subdomain_association<MGDoFHandler<deal_II_dimension> >
@@ -541,6 +703,29 @@ DoFTools::extract_level_dofs<deal_II_dimension, deal_II_dimension+1>
 
 #endif
 
+
+#if deal_II_dimension == 3
+template
+void
+DoFTools::count_dofs_per_component<DoFHandler<1,3> > (
+  const DoFHandler<1,3>&,
+  std::vector<unsigned int>&, bool, std::vector<unsigned int>);
+
+template
+void
+DoFTools::count_dofs_per_component<hp::DoFHandler<1,3> > (
+  const hp::DoFHandler<1,3>&,
+  std::vector<unsigned int>&, bool, std::vector<unsigned int>);
+
+template
+void
+DoFTools::extract_level_dofs<1,3>
+(const unsigned int level, const MGDoFHandler<1,3>&,
+ const std::vector<bool>&, std::vector<bool>&, bool);
+
+#endif
+
+
 template
 void
 DoFTools::count_dofs_per_block<DoFHandler<deal_II_dimension> > (
@@ -618,8 +803,8 @@ DoFTools::map_dofs_to_support_points<deal_II_dimension>
 (const Mapping<deal_II_dimension,deal_II_dimension>&,
  const DoFHandler<deal_II_dimension>&,
  std::vector<Point<deal_II_dimension> >&);
+
+
 template
 void
 DoFTools::map_dofs_to_support_points<deal_II_dimension>
@@ -635,7 +820,7 @@ DoFTools::map_dofs_to_support_points<deal_II_dimension,deal_II_dimension+1>
 (const Mapping<deal_II_dimension,deal_II_dimension+1>&,
  const DoFHandler<deal_II_dimension, deal_II_dimension+1>&,
  std::vector<Point<deal_II_dimension+1> >&);
+
 template
 void
 DoFTools::map_dofs_to_support_points<deal_II_dimension,deal_II_dimension+1>
@@ -663,6 +848,36 @@ DoFTools::count_dofs_per_block<MGDoFHandler<deal_II_dimension,deal_II_dimension+
 
 #endif
 
+
+#if deal_II_dimension == 3
+
+template
+void
+DoFTools::map_dofs_to_support_points<1,3>
+(const Mapping<1,3>&,
+ const DoFHandler<1,3>&,
+ std::vector<Point<3> >&);
+
+template
+void
+DoFTools::count_dofs_per_block<DoFHandler<1,3> > (
+  const DoFHandler<1,3>&,
+  std::vector<unsigned int>&, std::vector<unsigned int>);
+
+template
+void
+DoFTools::count_dofs_per_block<hp::DoFHandler<1,3> > (
+  const hp::DoFHandler<1,3>&,
+  std::vector<unsigned int>&, std::vector<unsigned int>);
+
+template
+void
+DoFTools::count_dofs_per_block<MGDoFHandler<1,3> > (
+  const MGDoFHandler<1,3>&,
+  std::vector<unsigned int>&, std::vector<unsigned int>);
+
+#endif
+
 template
 void
 DoFTools::convert_couplings_to_blocks (
@@ -726,4 +941,42 @@ DoFTools::extract_hanging_node_dofs
 
 #endif
 
+#if deal_II_dimension == 3
+
+template
+void
+DoFTools::map_dof_to_boundary_indices<DoFHandler<1,3> >
+(const DoFHandler<1,3> &,
+ const std::set<unsigned char> &,
+ std::vector<unsigned int> &);
+
+template
+void
+DoFTools::map_dof_to_boundary_indices<DoFHandler<1,3> >
+(const DoFHandler<1,3> &,
+ std::vector<unsigned int> &);
+
+
+template
+void
+DoFTools::extract_hanging_node_dofs
+(const DoFHandler<1,3> &dof_handler,
+ std::vector<bool>     &selected_dofs);
+
+// template
+// void
+// DoFTools::map_dof_to_boundary_indices<hp::DoFHandler<1,3> >
+// (const hp::DoFHandler<1,3> &,
+//  const std::set<unsigned char> &,
+//  std::vector<unsigned int> &);
+
+// template
+// void
+// DoFTools::map_dof_to_boundary_indices<hp::DoFHandler<1,3> >
+// (const hp::DoFHandler<1,3> &,
+//  std::vector<unsigned int> &);
+
+#endif
+
+
 }
index 1f6340aa4b77839729319a3a857fbc5ea91456f7..070ed5af11009c1b8914a00e633650b4ed5a793b 100644 (file)
@@ -927,6 +927,54 @@ FiniteElement<dim,spacedim>::memory_consumption () const
 }
 
 
+
+template<>
+void
+FiniteElement<1,2>::compute_2nd (
+  const Mapping<1,2>                   &,
+  const Triangulation<1,2>::cell_iterator &,
+  const unsigned int,
+  Mapping<1,2>::InternalDataBase &,
+  InternalDataBase                     &,
+  FEValuesData<1,2>                    &) const
+{
+
+       Assert(false, ExcNotImplemented());
+}
+
+
+template<>
+void
+FiniteElement<1,3>::compute_2nd (
+  const Mapping<1,3>                   &,
+  const Triangulation<1,3>::cell_iterator &,
+  const unsigned int,
+  Mapping<1,3>::InternalDataBase &,
+  InternalDataBase                     &,
+  FEValuesData<1,3>                    &) const
+{
+
+       Assert(false, ExcNotImplemented());
+}
+
+
+
+template<>
+void
+FiniteElement<2,3>::compute_2nd (
+  const Mapping<2,3>                   &,
+  const Triangulation<2,3>::cell_iterator &,
+  const unsigned int,
+  Mapping<2,3>::InternalDataBase &,
+  InternalDataBase                     &,
+  FEValuesData<2,3>                    &) const
+{
+
+       Assert(false, ExcNotImplemented());
+}
+
+
+
 template <int dim, int spacedim>
 void
 FiniteElement<dim,spacedim>::compute_2nd (
index 656bd44e58952fbcdc9298d17abef14d46f795b0..f9ff03fcfd3ed7061049ca8bb206f5ce4ec6bfbd 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class FiniteElement<deal_II_dimension>;
-
-#if deal_II_dimension != 3
-    template class FiniteElement<deal_II_dimension,deal_II_dimension+1>;
+#if deal_II_dimension <= deal_II_space_dimension
+    template class FiniteElement<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
index 9b9a7a29c865f81f298ea0073bb2f3d2c6aefd19..4550c56d4036700d5deb0d3b908af6fc4f609d08 100644 (file)
@@ -56,7 +56,7 @@ FE_ABF<dim>::FE_ABF (const unsigned int deg)
   Assert (dim >= 2, ExcImpossibleInDim(dim));
   const unsigned int n_dofs = this->dofs_per_cell;
 
-  this->mapping_type = mapping_piola;
+  this->mapping_type = mapping_raviart_thomas;
                                   // First, initialize the
                                   // generalized support points and
                                   // quadrature weights, since they
index 053e3a3ca19c6ae89695526c44b1acd708dc3333..e28b03e1b8451bf4fb306b6eda3cc46ac28b925d 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class FE_DGP<deal_II_dimension>;
-
-#if deal_II_dimension != 3
-    template class FE_DGP<deal_II_dimension, deal_II_dimension+1>;
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class FE_DGP<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
+
index 00c3243fae4e091af314164149519ad97394baf0..65b35cc07cd4ecf1bb5c6f1772d35da17ed216db 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class FE_DGQ<deal_II_dimension>;
-
-#if deal_II_dimension != 3
-    template class FE_DGQ<deal_II_dimension, deal_II_dimension+1>;
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class FE_DGQ<deal_II_dimension, deal_II_space_dimension>;
 #endif
+  }
 
+
+for (deal_II_dimension : DIMENSIONS)
+  {
     template class FE_DGQArbitraryNodes<deal_II_dimension>;
   }
 
index 00ab805cb08e56a4ce8c2e784e5c748ec955f463..d1e3cbae0dbc594822226671e7b3a894fe61227c 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2004, 2005, 2006 by the deal.II authors
+//    Copyright (C) 2004, 2005, 2006, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 
 DEAL_II_NAMESPACE_OPEN
 
+
+template <>
+void
+FE_Poly<TensorProductPolynomials<1>,1,2>::fill_fe_values
+(const Mapping<1,2>                        &mapping,
+ const Triangulation<1,2>::cell_iterator   &cell,
+ const Quadrature<1>                       &quadrature,
+ Mapping<1,2>::InternalDataBase            &mapping_data,
+ Mapping<1,2>::InternalDataBase            &fedata,
+ FEValuesData<1,2>                         &data,
+ CellSimilarity::Similarity           &cell_similarity) const
+{
+                                  // convert data object to internal
+                                  // data for this class. fails with
+                                  // an exception if that is not
+                                  // possible
+  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
+  InternalData &fe_data = static_cast<InternalData &> (fedata);
+
+  const UpdateFlags flags(fe_data.current_update_flags());
+
+  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+    {
+      if (flags & update_values)
+       for (unsigned int i=0; i<quadrature.size(); ++i)
+         data.shape_values(k,i) = fe_data.shape_values[k][i];
+
+      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
+       mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
+                         mapping_data, mapping_covariant);
+    }
+
+  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
+    this->compute_2nd (mapping, cell, QProjector<1>::DataSetDescriptor::cell(),
+                      mapping_data, fe_data, data);
+}
+
+
+
+template <>
+void
+FE_Poly<TensorProductPolynomials<2>,2,3>::fill_fe_values
+(const Mapping<2,3>                      &mapping,
+ const Triangulation<2,3>::cell_iterator &cell,
+ const Quadrature<2>                     &quadrature,
+ Mapping<2,3>::InternalDataBase          &mapping_data,
+ Mapping<2,3>::InternalDataBase          &fedata,
+ FEValuesData<2,3>                       &data,
+ CellSimilarity::Similarity         &cell_similarity) const
+{
+
+                                  // assert that the following dynamics
+                                  // cast is really well-defined.
+  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
+  InternalData &fe_data = static_cast<InternalData &> (fedata);
+
+  const UpdateFlags flags(fe_data.current_update_flags());
+
+  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+    {
+      if (flags & update_values)
+       for (unsigned int i=0; i<quadrature.size(); ++i)
+         data.shape_values(k,i) = fe_data.shape_values[k][i];
+
+      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
+       mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
+                         mapping_data, mapping_covariant);
+    }
+
+  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
+    this->compute_2nd (mapping, cell, QProjector<2>::DataSetDescriptor::cell(),
+                      mapping_data, fe_data, data);
+}
+
+
+template <>
+void
+FE_Poly<PolynomialSpace<1>,1,2>::fill_fe_values (
+  const Mapping<1,2>                      &mapping,
+  const Triangulation<1,2>::cell_iterator &cell,
+  const Quadrature<1>                     &quadrature,
+  Mapping<1,2>::InternalDataBase          &mapping_data,
+  Mapping<1,2>::InternalDataBase          &fedata,
+  FEValuesData<1,2>                       &data,
+  CellSimilarity::Similarity         &cell_similarity) const
+{
+                                  // convert data object to internal
+                                  // data for this class. fails with
+                                  // an exception if that is not
+                                  // possible
+
+  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
+  InternalData &fe_data = static_cast<InternalData &> (fedata);
+
+  const UpdateFlags flags(fe_data.current_update_flags());
+
+  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+    {
+      if (flags & update_values)
+       for (unsigned int i=0; i<quadrature.size(); ++i)
+         data.shape_values(k,i) = fe_data.shape_values[k][i];
+
+      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
+       mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
+                         mapping_data, mapping_covariant);
+    }
+
+  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
+    this->compute_2nd (mapping, cell, QProjector<1>::DataSetDescriptor::cell(),
+                      mapping_data, fe_data, data);
+}
+
+
+template <>
+void
+FE_Poly<PolynomialSpace<2>,2,3>::fill_fe_values
+(const Mapping<2,3>                      &mapping,
+ const Triangulation<2,3>::cell_iterator &cell,
+ const Quadrature<2>                     &quadrature,
+ Mapping<2,3>::InternalDataBase          &mapping_data,
+ Mapping<2,3>::InternalDataBase          &fedata,
+ FEValuesData<2,3>                       &data,
+ CellSimilarity::Similarity         &cell_similarity) const
+{
+  Assert (dynamic_cast<InternalData *> (&fedata) != 0, ExcInternalError());
+  InternalData &fe_data = static_cast<InternalData &> (fedata);
+
+  const UpdateFlags flags(fe_data.current_update_flags());
+
+  for (unsigned int k=0; k<this->dofs_per_cell; ++k)
+    {
+      if (flags & update_values)
+       for (unsigned int i=0; i<quadrature.size(); ++i)
+         data.shape_values(k,i) = fe_data.shape_values[k][i];
+
+
+      if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
+       mapping.transform(fe_data.shape_gradients[k], data.shape_gradients[k],
+                         mapping_data, mapping_covariant);
+    }
+
+  if (flags & update_hessians && cell_similarity != CellSimilarity::translation)
+    this->compute_2nd (mapping, cell, QProjector<2>::DataSetDescriptor::cell(),
+                      mapping_data, fe_data, data);
+}
+
+
 #include "fe_poly.inst"
 
 DEAL_II_NAMESPACE_CLOSE
index 2a384acfa0007c6d4d6ef1246e5966832d8a85ce..605b020ae475b6ffa9ed28c2c7b03796270f0ed3 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class FE_Poly<TensorProductPolynomials<deal_II_dimension>, deal_II_dimension>;
-    template class FE_Poly<PolynomialSpace<deal_II_dimension>, deal_II_dimension>;
-    template class FE_Poly<PolynomialsP<deal_II_dimension>, deal_II_dimension>;
-
-#if deal_II_dimension != 3
-
-    template class FE_Poly<TensorProductPolynomials<deal_II_dimension>, deal_II_dimension, deal_II_dimension+1>;
-    template class FE_Poly<PolynomialSpace<deal_II_dimension>, deal_II_dimension, deal_II_dimension+1>;
-    //template class FE_Poly<PolynomialsP<deal_II_dimension>, deal_II_dimension, deal_II_dimension+1>;
-
+#if deal_II_dimension <= deal_II_space_dimension               
+    template class FE_Poly<TensorProductPolynomials<deal_II_dimension>, deal_II_dimension, deal_II_space_dimension>;
+    template class FE_Poly<PolynomialSpace<deal_II_dimension>, deal_II_dimension, deal_II_space_dimension>;
+    template class FE_Poly<PolynomialsP<deal_II_dimension>, deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
index f3de047eb8decab3f7f421edba62a91caf618262..9157a7be46c0d39da18b9bf2d30ea63d682c6b68 100644 (file)
@@ -11,6 +11,7 @@
 //
 //---------------------------------------------------------------------------
 
+#include <deal.II/base/derivative_form.h>
 #include <deal.II/base/qprojector.h>
 #include <deal.II/base/polynomials_bdm.h>
 #include <deal.II/base/polynomials_raviart_thomas.h>
@@ -388,7 +389,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
                                   // concept cannot be used because of
                                   // possible sign changes from one cell to
                                   // the next.
-  if (mapping_type == mapping_piola)
+  if ( (mapping_type == mapping_piola) || (mapping_type == mapping_raviart_thomas) )
     if (cell_similarity == CellSimilarity::translation)
       cell_similarity = CellSimilarity::none;
 
@@ -420,6 +421,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
 
              break;
            }
+                                            
+         case mapping_raviart_thomas:
          case mapping_piola:
            {
              std::vector<Tensor<1,dim> > shape_values (n_q_points);
@@ -451,8 +454,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
 
       if (flags & update_gradients && cell_similarity != CellSimilarity::translation)
        {
-         std::vector<Tensor<2,dim> > shape_grads1 (n_q_points);
-         std::vector<Tensor<2,dim> > shape_grads2 (n_q_points);
+         std::vector<Tensor<2, spacedim > > shape_grads1 (n_q_points);
+                                          //std::vector<DerivativeForm<1,dim,spacedim> > shape_grads2 (n_q_points);
 
          switch (mapping_type)
            {
@@ -483,14 +486,21 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
 
                for (unsigned int k=0; k<n_q_points; ++k)
                  for (unsigned int d=0; d<dim; ++d)
-                   data.shape_gradients[first+d][k] = shape_grads2[k][d];
+                   data.shape_gradients[first+d][k] = shape_grads1[k][d];
 
                break;
              }
-             case mapping_piola:
+             case mapping_raviart_thomas:
+             case mapping_piola_gradient:
              {
-               mapping.transform(fe_data.shape_grads[i], shape_grads1,
-                                 mapping_data, mapping_piola);
+
+               
+               std::vector <Tensor<2,spacedim> > input(fe_data.shape_grads[i].size());
+               for (unsigned int k=0; k<input.size(); ++k)
+                 input[k] = fe_data.shape_grads[i][k];
+                               
+               mapping.transform(input, shape_grads1,
+                                 mapping_data, mapping_piola_gradient);
 
                for (unsigned int k=0; k<n_q_points; ++k)
                  for (unsigned int d=0; d<dim; ++d)
@@ -509,38 +519,23 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_values (
                                            // cell, then
                                            // (J^-T)Dv(J^-1) is the
                                            // value we want to have on
-                                           // the real cell. so, we
-                                           // will have to apply a
-                                           // covariant transformation
-                                           // to Dv twice. since the
-                                           // interface only allows
-                                           // multiplication with
-                                           // (J^-1) from the right,
-                                           // we have to trick a
-                                           // little in between
-
-                                           // do first transformation
-                mapping.transform (fe_data.shape_grads[i], shape_grads1,
-                  mapping_data, mapping_covariant);
-                                           // transpose matrix
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   shape_grads2[k] = transpose (shape_grads1[k]);
-                                           // do second transformation
-                mapping.transform (shape_grads2, shape_grads1,
-                  mapping_data, mapping_covariant);
-                                           // transpose back
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   shape_grads2[k] = transpose (shape_grads1[k]);
-
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   for (unsigned int d = 0; d < dim; ++d)
-                      data.shape_gradients[first + d][k] = shape_grads2[k][d];
-                                          // then copy over to target:
-                break;
+                                           // the real cell.
+               std::vector <Tensor<2,spacedim> > input(fe_data.shape_grads[i].size());
+               for (unsigned int k=0; k<input.size(); ++k)
+                 input[k] = fe_data.shape_grads[i][k];
+               mapping.transform (input,shape_grads1,
+                                  mapping_data, mapping_covariant_gradient);   
+
+               for (unsigned int k = 0; k < n_q_points; ++k)
+                 for (unsigned int d = 0; d < dim; ++d)
+                   data.shape_gradients[first + d][k] = shape_grads1[k][d];
+                                                // then copy over to target:
+               
+               break;
              }
-
+                   
              default:
-               Assert(false, ExcNotImplemented());
+                   Assert(false, ExcNotImplemented());
            }
        }
     }
@@ -627,6 +622,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
 
                break;
              }
+             case mapping_raviart_thomas:
              case mapping_piola:
              {
                std::vector<Tensor<1,dim> > shape_values (n_q_points);
@@ -659,7 +655,8 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
       if (flags & update_gradients)
        {
          std::vector<Tensor<2,dim> > shape_grads1 (n_q_points);
-         std::vector<Tensor<2,dim> > shape_grads2 (n_q_points);
+                                          //  std::vector<DerivativeForm<1,dim,spacedim> > shape_grads2 (n_q_points);
+         
 
          switch (mapping_type)
            {
@@ -694,11 +691,16 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
 
                break;
              }
-             case mapping_piola:
+             case mapping_raviart_thomas:
+             case mapping_piola_gradient:
              {
-               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                 shape_grads1, mapping_data, mapping_piola);
-
+               std::vector <Tensor<2,spacedim> > input(fe_data.shape_grads[i].size());
+               for (unsigned int k=0; k<input.size(); ++k)
+                 input[k] = fe_data.shape_grads[i][k];
+                               
+               mapping.transform(make_slice(input, offset, n_q_points), shape_grads1,
+                                 mapping_data, mapping_piola_gradient);
+               
                for (unsigned int k=0; k<n_q_points; ++k)
                  for (unsigned int d=0; d<dim; ++d)
                    data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
@@ -706,43 +708,28 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_face_values (
                break;
              }
 
-             case mapping_nedelec: {
-                                           // treat the gradients of
-                                           // this particular shape
-                                           // function at all
-                                           // q-points. if Dv is the
-                                           // gradient of the shape
-                                           // function on the unit
-                                           // cell, then
-                                           // (J^-T)Dv(J^-1) is the
-                                           // value we want to have on
-                                           // the real cell. so, we
-                                           // will have to apply a
-                                           // covariant transformation
-                                           // to Dv twice. since the
-                                           // interface only allows
-                                           // multiplication with
-                                           // (J^-1) from the right,
-                                           // we have to trick a
-                                           // little in between
-
-                                           // do first transformation
-                mapping.transform (make_slice (fe_data.shape_grads[i], offset, n_q_points),
-                  shape_grads1, mapping_data, mapping_covariant);
-                                           // transpose matrix
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   shape_grads2[k] = transpose (shape_grads1[k]);
-                                           // do second transformation
-                mapping.transform (shape_grads2, shape_grads1,
-                  mapping_data, mapping_covariant);
-                                           // transpose back
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   shape_grads2[k] = transpose (shape_grads1[k]);
-
-                for (unsigned int k = 0; k < n_q_points; ++k)
+             case mapping_nedelec:
+             {
+                                                // treat the gradients of
+                                                // this particular shape
+                                                // function at all
+                                                // q-points. if Dv is the
+                                                // gradient of the shape
+                                                // function on the unit
+                                                // cell, then
+                                                // (J^-T)Dv(J^-1) is the
+                                                // value we want to have on
+                                                // the real cell.
+               std::vector <Tensor<2,spacedim> > input(fe_data.shape_grads[i].size());
+               for (unsigned int k=0; k<input.size(); ++k)
+                 input[k] = fe_data.shape_grads[i][k];
+               mapping.transform (make_slice (input, offset, n_q_points),
+                                  shape_grads1, mapping_data, mapping_covariant_gradient);
+
+               for (unsigned int k = 0; k < n_q_points; ++k)
                    for (unsigned int d = 0; d < dim; ++d)
-                      data.shape_gradients[first + d][k] = shape_grads2[k][d];
-                                          // then copy over to target:
+                      data.shape_gradients[first + d][k] = shape_grads1[k][d];
+                                          // then copy over to target:
                 break;
              }
 
@@ -837,6 +824,7 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
 
                break;
              }
+             case mapping_raviart_thomas:
              case mapping_piola:
              {
                std::vector<Tensor<1,dim> > shape_values (n_q_points);
@@ -904,12 +892,17 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
                break;
              }
 
-             case mapping_piola:
+             case mapping_raviart_thomas:      
+             case mapping_piola_gradient:
              {
-               mapping.transform(make_slice(fe_data.shape_grads[i], offset, n_q_points),
-                                 shape_grads1,
-                                 mapping_data, mapping_piola);
 
+               std::vector <Tensor<2,spacedim> > input(fe_data.shape_grads[i].size());
+               for (unsigned int k=0; k<input.size(); ++k)
+                 input[k] = fe_data.shape_grads[i][k];
+                               
+               mapping.transform(make_slice(input, offset, n_q_points), shape_grads1,
+                                 mapping_data, mapping_piola_gradient);
+               
                for (unsigned int k=0; k<n_q_points; ++k)
                  for (unsigned int d=0; d<dim; ++d)
                    data.shape_gradients[first+d][k] = sign_change[i] * shape_grads1[k][d];
@@ -917,44 +910,30 @@ FE_PolyTensor<POLY,dim,spacedim>::fill_fe_subface_values (
                break;
              }
 
-             case mapping_nedelec: {
-                                           // treat the gradients of
-                                           // this particular shape
-                                           // function at all
-                                           // q-points. if Dv is the
-                                           // gradient of the shape
-                                           // function on the unit
-                                           // cell, then
-                                           // (J^-T)Dv(J^-1) is the
-                                           // value we want to have on
-                                           // the real cell. so, we
-                                           // will have to apply a
-                                           // covariant transformation
-                                           // to Dv twice. since the
-                                           // interface only allows
-                                           // multiplication with
-                                           // (J^-1) from the right,
-                                           // we have to trick a
-                                           // little in between
-
-                                           // do first transformation
-                mapping.transform (make_slice (fe_data.shape_grads[i], offset, n_q_points),
-                  shape_grads1, mapping_data, mapping_covariant);
-                                           // transpose matrix
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   shape_grads2[k] = transpose (shape_grads1[k]);
-                                           // do second transformation
-                mapping.transform (shape_grads2, shape_grads1,
-                  mapping_data, mapping_covariant);
-                                           // transpose back
-                for (unsigned int k = 0; k < n_q_points; ++k)
-                   shape_grads2[k] = transpose (shape_grads1[k]);
+             case mapping_nedelec:
+             {
+                                                // this particular shape
+                                                // function at all
+                                                // q-points. if Dv is the
+                                                // gradient of the shape
+                                                // function on the unit
+                                                // cell, then
+                                                // (J^-T)Dv(J^-1) is the
+                                                // value we want to have on
+                                                // the real cell. 
+               std::vector <Tensor<2,spacedim> > input(fe_data.shape_grads[i].size());
+               for (unsigned int k=0; k<input.size(); ++k)
+                 input[k] = fe_data.shape_grads[i][k];
+               
+               mapping.transform (make_slice (input, offset, n_q_points),
+                                  shape_grads1, mapping_data, mapping_covariant_gradient);             
+                                           
 
                 for (unsigned int k = 0; k < n_q_points; ++k)
                    for (unsigned int d = 0; d < dim; ++d)
-                      data.shape_gradients[first + d][k] = shape_grads2[k][d];
-                                          // then copy over to target:
-                break;
+                      data.shape_gradients[first + d][k] = shape_grads1[k][d];
+
+                break;
              }
 
              default:
@@ -992,6 +971,7 @@ FE_PolyTensor<POLY,dim,spacedim>::update_each (const UpdateFlags flags) const
 
   switch (mapping_type)
     {
+      case mapping_raviart_thomas:
       case mapping_piola:
       {
        if (flags & update_values)
@@ -1006,6 +986,21 @@ FE_PolyTensor<POLY,dim,spacedim>::update_each (const UpdateFlags flags) const
        break;
       }
 
+
+      case mapping_piola_gradient:
+      {
+       if (flags & update_values)
+         out |= update_values | update_piola;
+
+       if (flags & update_gradients)
+         out |= update_gradients | update_piola | update_covariant_transformation;
+
+       if (flags & update_hessians)
+         out |= update_hessians | update_piola | update_covariant_transformation;
+
+       break;
+      }
+
       case mapping_nedelec: {
         if (flags & update_values)
            out |= update_values | update_covariant_transformation;
index ca205683cab58ffe3e91870692bbdd8e29e8b488..c5d2c77b8d87aafebf129591e25a86add5b727ed 100644 (file)
@@ -824,6 +824,33 @@ get_subface_interpolation_matrix (const FiniteElement<1,2> &/*x_source_fe*/,
 }
 
 
+template <>
+void
+FE_Q<1,3>::
+get_face_interpolation_matrix (const FiniteElement<1,3> &/*x_source_fe*/,
+                              FullMatrix<double>     &/*interpolation_matrix*/) const
+{
+  typedef FiniteElement<1,3> FEL;
+  Assert (false,
+         FEL::
+          ExcInterpolationNotImplemented ());
+}
+
+
+template <>
+void
+FE_Q<1,3>::
+get_subface_interpolation_matrix (const FiniteElement<1,3> &/*x_source_fe*/,
+                                 const unsigned int      /*subface*/,
+                                 FullMatrix<double>     &/*interpolation_matrix*/) const
+{
+  typedef FiniteElement<1,3> FEL;
+  Assert (false,
+         FEL::
+         ExcInterpolationNotImplemented ());
+}
+
+
 
 template <int dim, int spacedim>
 void
@@ -1336,7 +1363,17 @@ void FE_Q<1,2>::initialize_unit_face_support_points (const Quadrature<1> &/*poin
                                   // no faces in 1d, so nothing to do
 }
 
+template <>
+void FE_Q<1,3>::initialize_unit_face_support_points ()
+{
+                                  // no faces in 1d, so nothing to do
+}
 
+template <>
+void FE_Q<1,3>::initialize_unit_face_support_points (const Quadrature<1> &/*points*/)
+{
+                                  // no faces in 1d, so nothing to do
+}
 
 template <int dim, int spacedim>
 void FE_Q<dim,spacedim>::initialize_unit_face_support_points ()
@@ -1525,6 +1562,13 @@ FE_Q<1,2>::face_lexicographic_to_hierarchic_numbering (const unsigned int)
 }
 
 
+template <>
+std::vector<unsigned int>
+FE_Q<1,3>::face_lexicographic_to_hierarchic_numbering (const unsigned int)
+{
+  return std::vector<unsigned int>();
+}
+
 
 template <int dim, int spacedim>
 void
@@ -1888,6 +1932,26 @@ FE_Q<1,2>::has_support_on_face (const unsigned int shape_index,
           ((shape_index == 1) && (face_index == 1)));
 }
 
+template <>
+bool
+FE_Q<1,3>::has_support_on_face (const unsigned int shape_index,
+                              const unsigned int face_index) const
+{
+  Assert (shape_index < this->dofs_per_cell,
+         ExcIndexRange (shape_index, 0, this->dofs_per_cell));
+  Assert (face_index < GeometryInfo<1>::faces_per_cell,
+         ExcIndexRange (face_index, 0, GeometryInfo<1>::faces_per_cell));
+
+
+                                  // in 1d, things are simple. since
+                                  // there is only one degree of
+                                  // freedom per vertex in this
+                                  // class, the first is on vertex 0
+                                  // (==face 0 in some sense), the
+                                  // second on face 1:
+  return (((shape_index == 0) && (face_index == 0)) ||
+          ((shape_index == 1) && (face_index == 1)));
+}
 
 
 template <int dim, int spacedim>
index d72cebf3a49ca21d76838f4be2bf2d4be69ed03d..3f1dc3589336562c765b2222c80aa8f772186b96 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class FE_Q<deal_II_dimension>;
-
-#if deal_II_dimension !=3
-    template class FE_Q<deal_II_dimension,deal_II_dimension+1>;
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class FE_Q<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
+
index 97153d86220a237c8c0016f7be242340dfb147c6..5e28b445d88cc6f5aa2a18589bf4dea99332fcd5 100644 (file)
 //
 //---------------------------------------------------------------------------
 
-
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-  template class FESystem<deal_II_dimension>;
-#if deal_II_dimension != 3
-    template class FESystem<deal_II_dimension, deal_II_dimension+1>;
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class FESystem<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
+  
 
index efd94228452f11cd2cf127d704d86a58d03ab4f5..503d7394666b08e8a9d9db7b0bc54094735a16b5 100644 (file)
@@ -659,8 +659,18 @@ namespace FETools
     Assert(false, ExcNotImplemented());
   }
 
+  
+  template<>
+  void
+  compute_embedding_matrices(const FiniteElement<1,3> &,
+                            std::vector<std::vector<FullMatrix<double> > > &,
+                            const bool)
+  {
+    Assert(false, ExcNotImplemented());
+  }
 
 
+  
   template<>
   void
   compute_embedding_matrices(const FiniteElement<2,3>&,
@@ -1071,7 +1081,14 @@ namespace FETools
     Assert(false, ExcNotImplemented());
   }
 
-
+  
+  template <>
+  void
+  compute_projection_matrices(const FiniteElement<1,3>&,
+                             std::vector<std::vector<FullMatrix<double> > >&, bool)
+  {
+    Assert(false, ExcNotImplemented());
+  }
 
   template <>
   void
index 0790b2422d41ea7a890277222d4cb81ce87f652e..f54ca54f595da18da3900511b9160065b05465e5 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-
-  namespace FETools
-  \{
-  template class FEFactoryBase<deal_II_dimension>;
-
-  template
-  void compute_node_matrix(
-    FullMatrix<double>&,
-    const FiniteElement<deal_II_dimension>&);
-
-  template
-  void compute_component_wise(
-    const FiniteElement<deal_II_dimension>& ,
-    std::vector<unsigned int>&, std::vector<std::vector<unsigned int> >&);
-  template
-  void compute_block_renumbering (
-    const FiniteElement<deal_II_dimension>& ,
-    std::vector<unsigned int>&, std::vector<unsigned int>&, bool);
-  template
-  void get_interpolation_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<double> &);
-  template
-  void get_back_interpolation_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<double> &);
-  template
-  void get_interpolation_difference_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<double> &);
-  template
-  void get_interpolation_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<float> &);
-  template
-  void get_back_interpolation_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<float> &);
-  template
-  void get_interpolation_difference_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<float> &);
-
-  template
-  void get_projection_matrix<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &,
-   const FiniteElement<deal_II_dimension> &,
-   FullMatrix<double> &);
-
-  template
-  void compute_embedding_matrices<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &, std::vector<std::vector<FullMatrix<double> > >&,bool);
-
-  template
-  void compute_face_embedding_matrices<deal_II_dimension,double>
-  (const FiniteElement<deal_II_dimension> &, FullMatrix<double> (&)[GeometryInfo<deal_II_dimension>::max_children_per_face],
-   unsigned int, unsigned int);
-
-  template
-  void compute_projection_matrices<deal_II_dimension>
-  (const FiniteElement<deal_II_dimension> &, std::vector<std::vector<FullMatrix<double> > >&, bool);
-
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, Vector<double> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<double> &);
-
-#if deal_II_dimension != 3
-  template
-  void compute_block_renumbering (
-    const FiniteElement<deal_II_dimension,deal_II_dimension+1>& ,
-    std::vector<unsigned int>&, std::vector<unsigned int>&, bool);
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, Vector<double> &);
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const ConstraintMatrix &,
-   Vector<double> &);
+    namespace FETools
+      \{
+#if deal_II_dimension <= deal_II_space_dimension
+      template
+       void compute_block_renumbering (
+         const FiniteElement<deal_II_dimension,deal_II_space_dimension>& ,
+         std::vector<unsigned int>&, std::vector<unsigned int>&, bool);
+
+      template
+       void compute_projection_matrices<deal_II_dimension, double, deal_II_space_dimension>
+       (const FiniteElement<deal_II_dimension,deal_II_space_dimension> &,
+        std::vector<std::vector<FullMatrix<double> > >&, bool);
+
+      template
+       void compute_embedding_matrices<deal_II_dimension, double, deal_II_space_dimension>
+       (const FiniteElement<deal_II_dimension,deal_II_space_dimension> &,
+        std::vector<std::vector<FullMatrix<double> > >&,bool);
+      
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const Vector<double> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, Vector<double> &);
+
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const Vector<double> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const ConstraintMatrix &,
+        Vector<double> &);
+
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const Vector<float> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, Vector<float> &);
+      template
+       
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const Vector<float> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const ConstraintMatrix &,
+        Vector<float> &);
+
+
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, BlockVector<double> &);
+      
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const ConstraintMatrix &,
+        BlockVector<double> &);
+
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, BlockVector<float> &);
+
+      template
+       void interpolate<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &, const ConstraintMatrix &,
+        BlockVector<float> &);
 #endif
+      \}
+  }
 
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const FiniteElement<deal_II_dimension> &, Vector<double> &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<double> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const FiniteElement<deal_II_dimension> &, Vector<double> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<double> &);
-  template
-  void project_dg<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, Vector<double> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, Vector<double> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<double> &);
-
-
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, Vector<float> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<float> &);
-
-#if deal_II_dimension != 3
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, Vector<float> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const ConstraintMatrix &,
-   Vector<float> &);
-#endif
 
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const FiniteElement<deal_II_dimension> &, Vector<float> &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<float> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const FiniteElement<deal_II_dimension> &, Vector<float> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<float> &);
-  template
-  void project_dg<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, Vector<float> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, Vector<float> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<float> &);
+
+//TODO[SP]: replace <deal_II_dimension> by <deal_II_dimension, deal_II_space_dimension>
+// where applicable and move to codimension cases above also when applicable
+
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+    namespace FETools
+      \{
+#if deal_II_dimension == deal_II_space_dimension
+
+      template class FEFactoryBase<deal_II_dimension>;
+
+      template
+       void compute_node_matrix(
+         FullMatrix<double>&,
+         const FiniteElement<deal_II_dimension>&);
+
+      template
+       void compute_component_wise(
+         const FiniteElement<deal_II_dimension>& ,
+         std::vector<unsigned int>&, std::vector<std::vector<unsigned int> >&);
+      template
+  
+       void get_interpolation_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<double> &);
+      template
+       void get_back_interpolation_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<double> &);
+      template
+       void get_interpolation_difference_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<double> &);
+      template
+       void get_interpolation_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<float> &);
+      template
+       void get_back_interpolation_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<float> &);
+      template
+       void get_interpolation_difference_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<float> &);
+
+      template
+       void get_projection_matrix<deal_II_dimension>
+       (const FiniteElement<deal_II_dimension> &,
+        const FiniteElement<deal_II_dimension> &,
+        FullMatrix<double> &);
+
+      
+
+      template
+       void compute_face_embedding_matrices<deal_II_dimension,double>
+       (const FiniteElement<deal_II_dimension> &, FullMatrix<double> (&)[GeometryInfo<deal_II_dimension>::max_children_per_face],
+        unsigned int, unsigned int);
+
+     template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const FiniteElement<deal_II_dimension> &, Vector<double> &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const Vector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<double> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const FiniteElement<deal_II_dimension> &, Vector<double> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const Vector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<double> &);
+      template
+       void project_dg<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const DoFHandler<deal_II_dimension> &, Vector<double> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const DoFHandler<deal_II_dimension> &, Vector<double> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<double> &);
+
+
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const FiniteElement<deal_II_dimension> &, Vector<float> &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const Vector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<float> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const FiniteElement<deal_II_dimension> &, Vector<float> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const Vector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<float> &);
+      template
+       void project_dg<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const DoFHandler<deal_II_dimension> &, Vector<float> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const DoFHandler<deal_II_dimension> &, Vector<float> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<float> &);
 
 
 #ifdef DEAL_II_USE_PETSC
 
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
-   const DoFHandler<deal_II_dimension> &,  PETScWrappers::MPI::Vector &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   PETScWrappers::MPI::Vector &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
-   const FiniteElement<deal_II_dimension> &,  PETScWrappers::MPI::Vector &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const PETScWrappers::MPI::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   PETScWrappers::MPI::Vector &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
-   const FiniteElement<deal_II_dimension> &, PETScWrappers::MPI::Vector &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const PETScWrappers::MPI::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   PETScWrappers::MPI::Vector &);
+      template
+       void interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
+        const DoFHandler<deal_II_dimension> &,  PETScWrappers::MPI::Vector &);
+      template
+       void interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        PETScWrappers::MPI::Vector &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
+        const FiniteElement<deal_II_dimension> &,  PETScWrappers::MPI::Vector &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const PETScWrappers::MPI::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        PETScWrappers::MPI::Vector &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const PETScWrappers::MPI::Vector &,
+        const FiniteElement<deal_II_dimension> &, PETScWrappers::MPI::Vector &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const PETScWrappers::MPI::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        PETScWrappers::MPI::Vector &);
 
 #endif
 
 
 #ifdef DEAL_II_USE_TRILINOS
 
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &,  TrilinosWrappers::Vector &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::Vector &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const FiniteElement<deal_II_dimension> &,  TrilinosWrappers::Vector &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::Vector &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const FiniteElement<deal_II_dimension> &, TrilinosWrappers::Vector &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::Vector &);
-  template
-  void project_dg<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &, TrilinosWrappers::Vector &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &, TrilinosWrappers::Vector &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::Vector &);
+      template
+       void interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &,  TrilinosWrappers::Vector &);
+      template
+       void interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::Vector &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const FiniteElement<deal_II_dimension> &,  TrilinosWrappers::Vector &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::Vector &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const FiniteElement<deal_II_dimension> &, TrilinosWrappers::Vector &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::Vector &);
+      template
+       void project_dg<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &, TrilinosWrappers::Vector &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &, TrilinosWrappers::Vector &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::Vector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::Vector &);
 
 #endif
 
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, BlockVector<double> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<double> &);
-
-#if deal_II_dimension != 3
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, BlockVector<double> &);
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const ConstraintMatrix &,
-   BlockVector<double> &);
-#endif
-
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const FiniteElement<deal_II_dimension> &, BlockVector<double> &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<double> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const FiniteElement<deal_II_dimension> &, BlockVector<double> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<double> &);
-  template
-  void project_dg<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, BlockVector<double> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, BlockVector<double> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<double> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, Vector<double> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<double> &);
-
-
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, BlockVector<float> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<float> &);
-
-#if deal_II_dimension != 3
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, BlockVector<float> &);
-  template
-  void interpolate<deal_II_dimension,deal_II_dimension+1>
-  (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension,deal_II_dimension+1> &, const ConstraintMatrix &,
-   BlockVector<float> &);
-#endif
-
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const FiniteElement<deal_II_dimension> &, BlockVector<float> &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<float> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const FiniteElement<deal_II_dimension> &, BlockVector<float> &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<float> &);
-  template
-  void project_dg<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, BlockVector<float> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, BlockVector<float> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   BlockVector<float> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, Vector<float> &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<float> &);
+  
+
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const FiniteElement<deal_II_dimension> &, BlockVector<double> &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        BlockVector<double> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const FiniteElement<deal_II_dimension> &, BlockVector<double> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        BlockVector<double> &);
+      template
+       void project_dg<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, BlockVector<double> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, BlockVector<double> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        BlockVector<double> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, Vector<double> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<double> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<double> &);
+
+
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const FiniteElement<deal_II_dimension> &, BlockVector<float> &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        BlockVector<float> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const FiniteElement<deal_II_dimension> &, BlockVector<float> &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        BlockVector<float> &);
+      template
+       void project_dg<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, BlockVector<float> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, BlockVector<float> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        BlockVector<float> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, Vector<float> &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const BlockVector<float> &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<float> &);
 
 
 #ifdef DEAL_II_USE_TRILINOS
 
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &,  TrilinosWrappers::BlockVector &);
-  template
-  void interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::BlockVector &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const FiniteElement<deal_II_dimension> &,  TrilinosWrappers::BlockVector &);
-  template
-  void back_interpolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::BlockVector &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const FiniteElement<deal_II_dimension> &, TrilinosWrappers::BlockVector &);
-  template
-  void interpolation_difference<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::BlockVector &);
-  template
-  void project_dg<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &, TrilinosWrappers::BlockVector &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &, TrilinosWrappers::BlockVector &);
-  template
-  void extrapolate<deal_II_dimension>
-  (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
-   const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   TrilinosWrappers::BlockVector &);
+      template
+       void interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &,  TrilinosWrappers::BlockVector &);
+      template
+       void interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::BlockVector &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const FiniteElement<deal_II_dimension> &,  TrilinosWrappers::BlockVector &);
+      template
+       void back_interpolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::BlockVector &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const FiniteElement<deal_II_dimension> &, TrilinosWrappers::BlockVector &);
+      template
+       void interpolation_difference<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::BlockVector &);
+      template
+       void project_dg<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &, TrilinosWrappers::BlockVector &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &, TrilinosWrappers::BlockVector &);
+      template
+       void extrapolate<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &, const TrilinosWrappers::BlockVector &,
+        const DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        TrilinosWrappers::BlockVector &);
 
 #endif
 
 
-  template
-  void interpolate<deal_II_dimension>
-  (const hp::DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const hp::DoFHandler<deal_II_dimension> &, Vector<double> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const hp::DoFHandler<deal_II_dimension> &, const Vector<double> &,
-   const hp::DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<double> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const hp::DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const hp::DoFHandler<deal_II_dimension> &, Vector<float> &);
-  template
-  void interpolate<deal_II_dimension>
-  (const hp::DoFHandler<deal_II_dimension> &, const Vector<float> &,
-   const hp::DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
-   Vector<float> &);
-
-
-  template FiniteElement<deal_II_dimension,deal_II_dimension> *
-  get_fe_from_name<deal_II_dimension> (const std::string &);
-
-
-  template
-  void
-  compute_projection_from_quadrature_points_matrix (const FiniteElement<deal_II_dimension> &,
-                                                   const Quadrature<deal_II_dimension>    &,
-                                                   const Quadrature<deal_II_dimension>    &,
-                                                   FullMatrix<double>       &);
-
-  template
-  void
-  compute_projection_from_quadrature_points(
-    const FullMatrix<double>                &,
-    const std::vector< Tensor<1, deal_II_dimension > >    &,
-    std::vector< Tensor<1, deal_II_dimension > >          &);
-
-  template
-  void
-  compute_projection_from_quadrature_points(
-    const FullMatrix<double>                      &,
-    const std::vector<SymmetricTensor<2, deal_II_dimension> > &,
-    std::vector<SymmetricTensor<2, deal_II_dimension> >       &);
-
-
-  template
-  void
-  compute_interpolation_to_quadrature_points_matrix (const FiniteElement<deal_II_dimension> &,
-                                                    const Quadrature<deal_II_dimension>    &,
-                                                    FullMatrix<double>       &);
+      template
+       void interpolate<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const hp::DoFHandler<deal_II_dimension> &, Vector<double> &);
+      template
+       void interpolate<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &, const Vector<double> &,
+        const hp::DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<double> &);
+      template
+       void interpolate<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const hp::DoFHandler<deal_II_dimension> &, Vector<float> &);
+      template
+       void interpolate<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &, const Vector<float> &,
+        const hp::DoFHandler<deal_II_dimension> &, const ConstraintMatrix &,
+        Vector<float> &);
+
+
+      template FiniteElement<deal_II_dimension,deal_II_dimension> *
+       get_fe_from_name<deal_II_dimension> (const std::string &);
+
+
+      template
+       void
+       compute_projection_from_quadrature_points_matrix (const FiniteElement<deal_II_dimension> &,
+                                                         const Quadrature<deal_II_dimension>    &,
+                                                         const Quadrature<deal_II_dimension>    &,
+                                                         FullMatrix<double>       &);
+
+      template
+       void
+       compute_projection_from_quadrature_points(
+         const FullMatrix<double>                &,
+         const std::vector< Tensor<1, deal_II_dimension > >    &,
+         std::vector< Tensor<1, deal_II_dimension > >          &);
+
+      template
+       void
+       compute_projection_from_quadrature_points(
+         const FullMatrix<double>                      &,
+         const std::vector<SymmetricTensor<2, deal_II_dimension> > &,
+         std::vector<SymmetricTensor<2, deal_II_dimension> >       &);
+
+
+      template
+       void
+       compute_interpolation_to_quadrature_points_matrix (const FiniteElement<deal_II_dimension> &,
+                                                          const Quadrature<deal_II_dimension>    &,
+                                                          FullMatrix<double>       &);
 
 #if deal_II_dimension != 1
-  template
-  void
-  compute_projection_from_face_quadrature_points_matrix (const FiniteElement<deal_II_dimension> &,
-                                                        const Quadrature<deal_II_dimension-1>    &,
-                                                        const Quadrature<deal_II_dimension-1>    &,
-                                                        const DoFHandler<deal_II_dimension>::active_cell_iterator & ,
-                                                        unsigned int,
-                                                        FullMatrix<double>       &);
+      template
+       void
+       compute_projection_from_face_quadrature_points_matrix (const FiniteElement<deal_II_dimension> &,
+                                                              const Quadrature<deal_II_dimension-1>    &,
+                                                              const Quadrature<deal_II_dimension-1>    &,
+                                                              const DoFHandler<deal_II_dimension>::active_cell_iterator & ,
+                                                              unsigned int,
+                                                              FullMatrix<double>       &);
 #endif
 
-  template
-  void
-  hierarchic_to_lexicographic_numbering<deal_II_dimension>
-  (const FiniteElementData<deal_II_dimension> &,
-   std::vector<unsigned int> &);
-
-  template
-  void
-  lexicographic_to_hierarchic_numbering<deal_II_dimension>
-  (const FiniteElementData<deal_II_dimension> &,
-   std::vector<unsigned int> &);
-
-  template
-  std::vector<unsigned int>
-  hierarchic_to_lexicographic_numbering<deal_II_dimension>
-  (const FiniteElementData<deal_II_dimension> &);
-
-  template
-  std::vector<unsigned int>
-  lexicographic_to_hierarchic_numbering<deal_II_dimension>
-  (const FiniteElementData<deal_II_dimension> &);
-  \}
+      template
+       void
+       hierarchic_to_lexicographic_numbering<deal_II_dimension>
+       (const FiniteElementData<deal_II_dimension> &,
+        std::vector<unsigned int> &);
+
+      template
+       void
+       lexicographic_to_hierarchic_numbering<deal_II_dimension>
+       (const FiniteElementData<deal_II_dimension> &,
+        std::vector<unsigned int> &);
+
+      template
+       std::vector<unsigned int>
+       hierarchic_to_lexicographic_numbering<deal_II_dimension>
+       (const FiniteElementData<deal_II_dimension> &);
+
+      template
+       std::vector<unsigned int>
+       lexicographic_to_hierarchic_numbering<deal_II_dimension>
+       (const FiniteElementData<deal_II_dimension> &);
+  
+#endif
+      \}
   }
 
+
+
index 56603423f44244d983ab894c8be7dc80e590962f..21c5a8a61ce108c3b20ae64e459bafd313917e54 100644 (file)
 // Instantiations of functions in FEValuesViews (explicitly write
 // dealii:: namespace in order to not confuse the compiler with
 // FEValuesViews::Vector).
-for (deal_II_dimension : DIMENSIONS)
+
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class FEValuesData<deal_II_dimension>;
-    template class FEValuesBase<deal_II_dimension>;
-    template class FEValues<deal_II_dimension>;
-    template class FEValuesBase<deal_II_dimension>::
-      CellIterator<DoFHandler<deal_II_dimension>::cell_iterator>;
-    template class FEValuesBase<deal_II_dimension>::
-      CellIterator<MGDoFHandler<deal_II_dimension>::cell_iterator>;
-
-    template class FEFaceValuesBase<deal_II_dimension>;
-    template class FEFaceValues<deal_II_dimension>;
-    template class FESubfaceValues<deal_II_dimension>;
+#if deal_II_dimension <= deal_II_space_dimension
 
-#if deal_II_dimension != 3
-    template class FEValuesData<deal_II_dimension,deal_II_dimension+1>;
-    template class FEValuesBase<deal_II_dimension,deal_II_dimension+1>;
-    template class FEValues<deal_II_dimension,deal_II_dimension+1>;
-    template class FEValuesBase<deal_II_dimension,deal_II_dimension+1>::
-      CellIterator<DoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator>;
-    template class FEValuesBase<deal_II_dimension,deal_II_dimension+1>::
-      CellIterator<MGDoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator>;
-
-    template class FEFaceValuesBase<deal_II_dimension,deal_II_dimension+1>;
-    template class FEFaceValues<deal_II_dimension,deal_II_dimension+1>;
-    template class FESubfaceValues<deal_II_dimension,deal_II_dimension+1>;
-#endif
+    template class FEValuesData<deal_II_dimension,deal_II_space_dimension>;
+    template class FEValuesBase<deal_II_dimension,deal_II_space_dimension>;
+    template class FEValues<deal_II_dimension,deal_II_space_dimension>;
+    template class FEValuesBase<deal_II_dimension,deal_II_space_dimension>::
+      CellIterator<DoFHandler<deal_II_dimension,deal_II_space_dimension>::cell_iterator>;
+    template class FEValuesBase<deal_II_dimension,deal_II_space_dimension>::
+      CellIterator<MGDoFHandler<deal_II_dimension,deal_II_space_dimension>::cell_iterator>;
+
+    template class FEFaceValuesBase<deal_II_dimension,deal_II_space_dimension>;
+    template class FEFaceValues<deal_II_dimension,deal_II_space_dimension>;
+    template class FESubfaceValues<deal_II_dimension,deal_II_space_dimension>;
 
 
     namespace FEValuesViews
       \{
-      template class Scalar<deal_II_dimension, deal_II_dimension>;
-      template class Vector<deal_II_dimension, deal_II_dimension>;
-      template class SymmetricTensor<2, deal_II_dimension, deal_II_dimension>;
-
-#if deal_II_dimension != 3
-      template class Scalar<deal_II_dimension, deal_II_dimension+1>;
-      template class Vector<deal_II_dimension, deal_II_dimension+1>;
-      template class SymmetricTensor<2, deal_II_dimension, deal_II_dimension+1>;
-#endif
+      template class Scalar<deal_II_dimension, deal_II_space_dimension>;
+      template class Vector<deal_II_dimension, deal_II_space_dimension>;
+      template class SymmetricTensor<2, deal_II_dimension, deal_II_space_dimension>;
       \}
+#endif
   }
 
-for (VEC : SERIAL_VECTORS; deal_II_dimension : DIMENSIONS)
-  {
-    template
-       void FEValuesViews::Scalar<deal_II_dimension>::get_function_values<dealii::VEC>
-       (const dealii::VEC&, std::vector<double>&) const;
-    template
-       void FEValuesViews::Scalar<deal_II_dimension>::get_function_gradients<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::Scalar<deal_II_dimension>::get_function_hessians<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<2,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::Scalar<deal_II_dimension>::get_function_laplacians<dealii::VEC>
-       (const dealii::VEC&, std::vector<double>&) const;
-
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_values<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_gradients<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<2,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_symmetric_gradients<dealii::VEC>
-       (const dealii::VEC&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_curls<dealii::VEC>
-       (const dealii::VEC&, std::vector<curl_type>&) const;
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_divergences<dealii::VEC>
-       (const dealii::VEC&, std::vector<double>&) const;
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_hessians<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<3,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::Vector<deal_II_dimension>::get_function_laplacians<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension> >&) const;
-
-    template
-       void FEValuesViews::SymmetricTensor<2,deal_II_dimension>::get_function_values<dealii::VEC>
-       (const dealii::VEC&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension> >&) const;
-    template
-       void FEValuesViews::SymmetricTensor<2,deal_II_dimension>::get_function_divergences<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension> >&) const;
 
 
-#if deal_II_dimension != 3
+for (VEC : SERIAL_VECTORS; deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
     template
-       void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_values<dealii::VEC>
-       (const dealii::VEC&, std::vector<value_type>&) const;
+      void FEValuesViews::Scalar<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_values<dealii::VEC>
+      (const dealii::VEC&, std::vector<value_type>&) const;
     template
-       void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_gradients<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Scalar<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_gradients<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<1,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_hessians<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<2,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Scalar<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_hessians<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<2,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::Scalar<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_laplacians<dealii::VEC>
-       (const dealii::VEC&, std::vector<double>&) const;
+      void FEValuesViews::Scalar<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_laplacians<dealii::VEC>
+      (const dealii::VEC&, std::vector<double>&) const;
 
     template
-       void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_values<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Vector<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_values<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<1,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_gradients<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<2,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Vector<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_gradients<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<2,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_symmetric_gradients<dealii::VEC>
-       (const dealii::VEC&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Vector<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_symmetric_gradients<dealii::VEC>
+      (const dealii::VEC&, std::vector<dealii::SymmetricTensor<2,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_divergences<dealii::VEC>
-       (const dealii::VEC&, std::vector<double>&) const;
+      void FEValuesViews::Vector<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_divergences<dealii::VEC>
+      (const dealii::VEC&, std::vector<double>&) const;
     template
-       void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_hessians<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<3,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Vector<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_hessians<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<3,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::Vector<deal_II_dimension, deal_II_dimension+1>
-       ::get_function_laplacians<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+      void FEValuesViews::Vector<deal_II_dimension, deal_II_space_dimension>
+      ::get_function_laplacians<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<1,deal_II_space_dimension> >&) const;
 
     template
-       void FEValuesViews::SymmetricTensor<2, deal_II_dimension, deal_II_dimension+1>
-        ::get_function_values<dealii::VEC>
-       (const dealii::VEC&, std::vector<dealii::SymmetricTensor<2,deal_II_dimension+1> >&) const;
+      void FEValuesViews::SymmetricTensor<2, deal_II_dimension, deal_II_space_dimension>
+      ::get_function_values<dealii::VEC>
+      (const dealii::VEC&, std::vector<dealii::SymmetricTensor<2,deal_II_space_dimension> >&) const;
     template
-       void FEValuesViews::SymmetricTensor<2, deal_II_dimension, deal_II_dimension+1>
-        ::get_function_divergences<dealii::VEC>
-       (const dealii::VEC&, std::vector<Tensor<1,deal_II_dimension+1> >&) const;
+      void FEValuesViews::SymmetricTensor<2, deal_II_dimension, deal_II_space_dimension>
+      ::get_function_divergences<dealii::VEC>
+      (const dealii::VEC&, std::vector<Tensor<1,deal_II_space_dimension> >&) const;
 
 #endif
-
   }
 
 
 
-// Instantiations of functions in FEValuesBase
-
-for (VEC : SERIAL_VECTORS; deal_II_dimension : DIMENSIONS)
+for (VEC : SERIAL_VECTORS; deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template
-       void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, std::vector<double>&) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, std::vector<float>&) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, std::vector<Vector<double> > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, std::vector<Vector<float> > &) const;
+#if deal_II_dimension <= deal_II_space_dimension
 
     template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Vector<double> > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Vector<float> > &) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       VectorSlice<std::vector<std::vector<double> > >, bool) const;
-//     template
-//       void FEValuesBase<deal_II_dimension>::get_function_values<VEC>
-//       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-//        VectorSlice<std::vector<std::vector<float> > >, bool) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_gradients<VEC>
-      (const VEC&, std::vector<Tensor<1,deal_II_dimension> > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_gradients<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Tensor<1,deal_II_dimension> > &) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_gradients<VEC>
-      (const VEC&, std::vector<std::vector<Tensor<1,deal_II_dimension> > > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_gradients<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       VectorSlice<std::vector<std::vector<Tensor<1,deal_II_dimension> > > >, bool) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_hessians<VEC>
-      (const VEC&, std::vector<Tensor<2,deal_II_dimension> > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_hessians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Tensor<2,deal_II_dimension> > &) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_hessians<VEC>
-      (const VEC&, std::vector<std::vector<Tensor<2,deal_II_dimension> > > &, bool) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_hessians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       VectorSlice<std::vector<std::vector<Tensor<2,deal_II_dimension> > > >, bool) const;
-
-    template
-       void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, std::vector<double>&) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, std::vector<float>&) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, std::vector<Vector<double> > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, std::vector<Vector<float> > &) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Vector<double> > &) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Vector<float> > &) const;
-
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<std::vector<double> > &, bool) const;
-    template
-      void FEValuesBase<deal_II_dimension>::get_function_laplacians<VEC>
-      (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<std::vector<float> > &, bool) const;
-
-
-#if deal_II_dimension != 3
-
-    template
-       void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, std::vector<double>&) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, std::vector<float>&) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, std::vector<Vector<double> > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, std::vector<Vector<float> > &) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        std::vector<Vector<double> > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        std::vector<Vector<float> > &) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        VectorSlice<std::vector<std::vector<double> > >, bool) const;
 //     template
-//       void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_values<VEC>
+//       void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_values<VEC>
 //       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
 //        VectorSlice<std::vector<std::vector<float> > >, bool) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<VEC>
-      (const VEC&, std::vector<Tensor<1,deal_II_dimension+1> > &) const;
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_gradients<VEC>
+      (const VEC&, std::vector<Tensor<1,deal_II_space_dimension> > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_gradients<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Tensor<1,deal_II_dimension+1> > &) const;
+       std::vector<Tensor<1,deal_II_space_dimension> > &) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<VEC>
-      (const VEC&, std::vector<std::vector<Tensor<1,deal_II_dimension+1> > > &) const;
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_gradients<VEC>
+      (const VEC&, std::vector<std::vector<Tensor<1,deal_II_space_dimension> > > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_gradients<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_gradients<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       VectorSlice<std::vector<std::vector<Tensor<1,deal_II_dimension+1> > > >, bool) const;
+       VectorSlice<std::vector<std::vector<Tensor<1,deal_II_space_dimension> > > >, bool) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<VEC>
-      (const VEC&, std::vector<Tensor<2,deal_II_dimension+1> > &) const;
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_hessians<VEC>
+      (const VEC&, std::vector<Tensor<2,deal_II_space_dimension> > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_hessians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       std::vector<Tensor<2,deal_II_dimension+1> > &) const;
+       std::vector<Tensor<2,deal_II_space_dimension> > &) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<VEC>
-      (const VEC&, std::vector<std::vector<Tensor<2,deal_II_dimension+1> > > &, bool) const;
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_hessians<VEC>
+      (const VEC&, std::vector<std::vector<Tensor<2,deal_II_space_dimension> > > &, bool) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_hessians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_hessians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
-       VectorSlice<std::vector<std::vector<Tensor<2,deal_II_dimension+1> > > >, bool) const;
+       VectorSlice<std::vector<std::vector<Tensor<2,deal_II_space_dimension> > > >, bool) const;
 
     template
-       void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, std::vector<double>&) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, std::vector<float>&) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<double>&) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&, std::vector<float>&) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, std::vector<Vector<double> > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, std::vector<Vector<float> > &) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        std::vector<Vector<double> > &) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        std::vector<Vector<float> > &) const;
 
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        std::vector<std::vector<double> > &, bool) const;
     template
-      void FEValuesBase<deal_II_dimension,deal_II_dimension+1>::get_function_laplacians<VEC>
+      void FEValuesBase<deal_II_dimension,deal_II_space_dimension>::get_function_laplacians<VEC>
       (const VEC&, const VectorSlice<const std::vector<unsigned int> >&,
        std::vector<std::vector<float> > &, bool) const;
 
-
 #endif
-
   }
 
 
index 76025f710a56d5e16f64a92dfd8f9453d74ca3a4..090e885a5d3fa5c3fa0e0ba7545ad471a237142f 100644 (file)
@@ -42,7 +42,7 @@ Mapping<dim,spacedim>::transform_covariant (
 template <int dim, int spacedim>
 void
 Mapping<dim, spacedim>::transform_covariant (
-    const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+    const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
     const unsigned int                 offset,
     VectorSlice<std::vector<Tensor<2,spacedim> > > output,
     const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data) const
@@ -74,7 +74,7 @@ Mapping<dim,spacedim>::transform_contravariant (
 template<int dim, int spacedim>
 void
 Mapping<dim,spacedim>::transform_contravariant (
-  const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+  const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
   const unsigned int                 offset,
   VectorSlice<std::vector<Tensor<2,spacedim> > > output,
   const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data) const
index 4417789b3fe35e74b68f0cc1bb555ef79ab86645..df9073dc3b5615079dcb85acffc78a91242b4210 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
-  {
-    template class Mapping<deal_II_dimension>;
 
-#if deal_II_dimension != 3
-    template class Mapping<deal_II_dimension,deal_II_dimension+1>;
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class Mapping<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
index 2e5d400b9e45b082845be89326c520d286e7b7fb..62e5be0e6ed2dcd74cc1cafd2da2809053b20737 100644 (file)
@@ -316,10 +316,10 @@ fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator& cell,
                typename Mapping<dim,spacedim>::InternalDataBase& mapping_data,
                 std::vector<Point<spacedim> >& quadrature_points,
                 std::vector<double>& JxW_values,
-               std::vector<Tensor<2,spacedim> >& jacobians,
-               std::vector<Tensor<3,spacedim> >& jacobian_grads,
-               std::vector<Tensor<2,spacedim> >& inverse_jacobians,
-               std::vector<Point<spacedim> >       &,
+               std::vector< DerivativeForm<1,dim,spacedim> > & jacobians,
+               std::vector<DerivativeForm<2,dim,spacedim> >      &jacobian_grads,
+               std::vector<DerivativeForm<1,spacedim,dim> >      &inverse_jacobians,
+               std::vector<Point<spacedim> >       &,
                CellSimilarity::Similarity& cell_similarity) const
 {
                                   // convert data object to internal
@@ -358,7 +358,7 @@ fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator& cell,
     if (cell_similarity != CellSimilarity::translation)
       for (unsigned int i=0; i<jacobians.size();++i)
        {
-         jacobians[i]=Tensor<2,dim>();
+         jacobians[i] =  DerivativeForm<1,dim,spacedim>();
          for (unsigned int j=0; j<dim; ++j)
            jacobians[i][j][j]=data.length[j];
        }
@@ -368,7 +368,7 @@ fill_fe_values (const typename Triangulation<dim,spacedim>::cell_iterator& cell,
   if (data.current_update_flags() & update_jacobian_grads)
     if (cell_similarity != CellSimilarity::translation)
       for (unsigned int i=0; i<jacobian_grads.size();++i)
-       jacobian_grads[i]=Tensor<3,dim>();
+       jacobian_grads[i]=DerivativeForm<2,dim,spacedim>();
                                   // "compute" inverse Jacobian at the
                                   // quadrature points, which are all
                                   // the same
@@ -578,6 +578,7 @@ MappingCartesian<dim, spacedim>::fill_fe_subface_values (
 
 
 
+
 template<int dim, int spacedim>
 void
 MappingCartesian<dim,spacedim>::transform (
@@ -636,7 +637,7 @@ MappingCartesian<dim,spacedim>::transform (
 template<int dim, int spacedim>
 void
 MappingCartesian<dim,spacedim>::transform (
-  const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+  const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
   VectorSlice<std::vector<Tensor<2,spacedim> > > output,
   const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
   const MappingType mapping_type) const
@@ -718,6 +719,45 @@ MappingCartesian<dim,spacedim>::transform (
 
 
 
+
+template<int dim, int spacedim>
+void
+MappingCartesian<dim,spacedim>::transform (
+  const VectorSlice<const std::vector<Tensor<2, dim> > >    input,
+  VectorSlice<std::vector<Tensor<2, spacedim> > > output,
+  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+  const MappingType mapping_type) const
+{
+
+  AssertDimension (input.size(), output.size());
+  Assert (dynamic_cast<const InternalData *>(&mapping_data) != 0,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData&>(mapping_data);
+
+  switch (mapping_type)
+    {
+  case mapping_piola_gradient:
+      {
+       Assert (data.update_flags & update_contravariant_transformation,
+               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+       Assert (data.update_flags & update_volume_elements,
+               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+
+       for (unsigned int i=0; i<output.size(); ++i)
+         for (unsigned int d1=0;d1<dim;++d1)
+           for (unsigned int d2=0;d2<dim;++d2)
+             output[i][d1][d2] = input[i][d1][d2] * data.length[d2]
+                                 / data.length[d1] / data.volume_element;
+       return;
+      }
+
+      default:
+           Assert(false, ExcNotImplemented());
+    }
+
+}
+
+
 template <int dim, int spacedim>
 Point<spacedim>
 MappingCartesian<dim, spacedim>::transform_unit_to_real_cell (
index 4ab65f68aed1a6ea22b9272bc022174b153dacb5..8336a05e3df5f06c1b30a96984f53ac95e534db8 100644 (file)
@@ -304,9 +304,9 @@ MappingQ<dim,spacedim>::fill_fe_values (
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
-  std::vector<Tensor<2,spacedim> >                          &jacobians,
-  std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-  std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+  std::vector<DerivativeForm<1,dim,spacedim>   >    &jacobians,
+  std::vector<DerivativeForm<2,dim,spacedim>    >   &jacobian_grads,
+  std::vector<DerivativeForm<1,spacedim,dim>    >   &inverse_jacobians,
   std::vector<Point<spacedim> >                             &normal_vectors,
   CellSimilarity::Similarity                           &cell_similarity) const
 {
@@ -353,6 +353,7 @@ MappingQ<dim,spacedim>::fill_fe_values (
                                          quadrature_points, JxW_values,
                                          jacobians, jacobian_grads, inverse_jacobians,
                                          normal_vectors, cell_similarity);
+
 }
 
 
@@ -1295,7 +1296,7 @@ MappingQ<dim,spacedim>::transform (
 template<int dim, int spacedim>
 void
 MappingQ<dim,spacedim>::transform (
-  const VectorSlice<const std::vector<Tensor<2,dim> > > input,
+  const VectorSlice<const std::vector<DerivativeForm<1, dim ,spacedim>  > >  input,
   VectorSlice<std::vector<Tensor<2,spacedim> > > output,
   const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
   const MappingType mapping_type) const
@@ -1388,12 +1389,15 @@ transform_real_to_unit_cell (const typename Triangulation<dim,spacedim>::cell_it
       use_mapping_q_on_all_cells ||
       (dim!=spacedim) )
     {
+           
       const Quadrature<dim> point_quadrature(p_unit);
+
+      UpdateFlags update_flags = update_transformation_values|update_transformation_gradients;
+      if (spacedim>dim)
+       update_flags |= update_jacobian_grads;
       std::auto_ptr<InternalData>
         mdata (dynamic_cast<InternalData *> (
-                 get_data(update_transformation_values |
-                          update_transformation_gradients,
-                          point_quadrature)));
+                 get_data(update_flags,point_quadrature)));
 
       mdata->use_mapping_q1_on_current_cell = false;
 
@@ -1432,6 +1436,7 @@ MappingQ<dim,spacedim>::clone () const
 
 
 
+
 // explicit instantiations
 #include "mapping_q.inst"
 
index d21499b4643082bf58dd6e9aaf7542473ae4ff1c..c705674d50bc39e7e6aad64a20f597acab604521 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
-  {
-    template class MappingQ<deal_II_dimension>;
 
-#if deal_II_dimension < 3
-    template class MappingQ<deal_II_dimension, deal_II_dimension+1>;
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class MappingQ<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
index d726a890c88fab770e96413568629270aa57cd04..3d323eac5887c7ec3b2cd1b6211914feb995d193 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -11,7 +11,7 @@
 //
 //---------------------------------------------------------------------------
 
-#include <deal.II/base/tensor.h>
+#include <deal.II/base/derivative_form.h>
 #include <deal.II/base/quadrature.h>
 #include <deal.II/base/qprojector.h>
 #include <deal.II/base/memory_consumption.h>
@@ -32,6 +32,8 @@ DEAL_II_NAMESPACE_OPEN
 
 
 
+
+
 template <int dim, int spacedim>
 const unsigned int MappingQ1<dim,spacedim>::n_shape_functions;
 
@@ -166,10 +168,6 @@ namespace internal
            }
          if (data.shape_second_derivatives.size()!=0)
            {
-                                              // the following may or may not
-                                              // work if dim != spacedim
-             Assert (spacedim == 2, ExcNotImplemented());
-
              Assert(data.shape_second_derivatives.size()==n_shape_functions*n_points,
                     ExcInternalError());
              data.second_derivative(k,0)[0][0] = 0;
@@ -659,9 +657,13 @@ MappingQ1<dim,spacedim>::compute_fill (const typename Triangulation<dim,spacedim
                                   // need to recompute jacobians...
       if (cell_similarity != CellSimilarity::translation)
        {
+         std::fill(data.contravariant.begin(), data.contravariant.end(),
+                   DerivativeForm<1,dim,spacedim>());
+
          Assert (data.n_shape_functions > 0, ExcInternalError());
          const Tensor<1,spacedim> *supp_pts =
            &data.mapping_support_points[0];
+
          for (unsigned int point=0; point<n_q_points; ++point)
            {
              const Tensor<1,dim> * data_derv =
@@ -695,45 +697,23 @@ MappingQ1<dim,spacedim>::compute_fill (const typename Triangulation<dim,spacedim
     {
       AssertDimension (data.covariant.size(), n_q_points);
       if (cell_similarity != CellSimilarity::translation)
-       {
-         if (dim == spacedim)
-                                   // invert contravariant for
-                                   // covariant transformation
-                                   // matrices
-           for (unsigned int point=0; point<n_q_points; ++point)
-             data.covariant[point] = invert(data.contravariant[point]);
-
-         else if (dim == spacedim - 1)
-           {
-                                   // CODIMENSION 1
-                                   // calculate left-inversion of the
-                                   // contravariant matrices to obtain
-                                   // covariant ones (auxiliary
-                                   // rectangular fullmatrices are used)
-             FullMatrix<double> contravariant_matrix(spacedim,dim);
-             FullMatrix<double> covariant_matrix(dim,spacedim);
-
-             for (unsigned int point=0; point<n_q_points; ++point)
-               {
-                 contravariant_matrix.
-                   copy_from(data.contravariant[point],0,spacedim-1,0,dim-1);
-                 covariant_matrix.
-                   left_invert(contravariant_matrix);
-                 covariant_matrix.
-                   copy_to(data.covariant[point],0,dim-1,0,spacedim-1);
-               }
-           }
-       }
+       for (unsigned int point=0; point<n_q_points; ++point)
+         {
+           data.covariant[point] = (data.contravariant[point]).covariant_form();
+         }
     }
 
   if (update_flags & update_volume_elements)
     if (cell_similarity != CellSimilarity::translation)
       for (unsigned int point=0; point<n_q_points; ++point)
-       data.volume_elements[point] = determinant(data.contravariant[point]);
+       data.volume_elements[point] = data.contravariant[point].determinant();
+
+
 }
 
 
 
+
 template<int dim, int spacedim>
 void
 MappingQ1<dim,spacedim>::compute_mapping_support_points(
@@ -756,11 +736,11 @@ MappingQ1<dim,spacedim>::fill_fe_values (
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
-  std::vector<Tensor<2,spacedim> >                          &jacobians,
-  std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-  std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+  std::vector<DerivativeForm<1,dim,spacedim>   >      &jacobians,
+  std::vector<DerivativeForm<2,dim,spacedim>    >     &jacobian_grads,
+  std::vector<DerivativeForm<1,spacedim,dim>   >      &inverse_jacobians,
   std::vector<Point<spacedim> >                             &normal_vectors,
-  CellSimilarity::Similarity                           &cell_similarity) const
+  CellSimilarity::Similarity                                &cell_similarity) const
 {
                                   // ensure that the following cast
                                   // is really correct:
@@ -778,11 +758,10 @@ MappingQ1<dim,spacedim>::fill_fe_values (
   const std::vector<double> &weights=q.get_weights();
 
                                   // Multiply quadrature weights by
-                                  // Jacobian determinants or by norm
-                                  // of the cross product of the
-                                  // columns of the Jacobian and
-                                  // store the cell normal vectors in
-                                  // the case <2,3>
+                                  // Jacobian determinants or the area
+                                  // element g=sqrt(DX^t DX) in case of
+                                  // codim > 0
+
   if (update_flags & (update_normal_vectors
                      | update_JxW_values))
     {
@@ -792,87 +771,74 @@ MappingQ1<dim,spacedim>::fill_fe_values (
              (normal_vectors.size() == n_q_points),
              ExcDimensionMismatch(normal_vectors.size(), n_q_points));
 
+
       if (cell_similarity != CellSimilarity::translation)
        for (unsigned int point=0; point<n_q_points; ++point)
          {
-           if (dim==spacedim)
-                                              // if dim==spacedim,
-                                              // then there is no
-                                              // cell normal to
-                                              // compute. since this
-                                              // is for FEValues (and
-                                              // not FEFaceValues),
-                                              // there are also no
-                                              // face normals to
-                                              // compute
-             JxW_values[point]
-               = determinant(data.contravariant[point])*weights[point];
-           else
+
+           if (dim == spacedim)
+             {
+               JxW_values[point]
+               = data.contravariant[point].determinant() * weights[point];
+             }
+                                            // if dim==spacedim,
+                                            // then there is no
+                                            // cell normal to
+                                            // compute. since this
+                                            // is for FEValues (and
+                                            // not FEFaceValues),
+                                            // there are also no
+                                            // face normals to
+                                            // compute
+           else //codim>0 case
              {
+               Tensor<1, spacedim> DX_t [dim];
+               for (unsigned int i=0; i<spacedim; ++i)
+                 for (unsigned int j=0; j<dim; ++j)
+                   DX_t[j][i] = data.contravariant[point][i][j];
+
+               Tensor<2, dim> G; //First fundamental form
+               for (unsigned int i=0; i<dim; ++i)
+                 for (unsigned int j=0; j<dim; ++j)
+                   G[i][j] = DX_t[i] * DX_t[j];
+
+               JxW_values[point]
+                 = sqrt(determinant(G)) * weights[point];
+
                if (cell_similarity == CellSimilarity::inverted_translation)
+                 {
+                                                    // we only need to flip the normal
+                   if (update_flags & update_normal_vectors)
+                     normal_vectors[point] *= -1.;
+                 }
+               else
                  {
-                                                    // we only need to flip the normal
-                   if (update_flags & update_normal_vectors)
-                     normal_vectors[point] *= -1.;
-                 }
-               else
-                 {
-                                                    // temporarily
-                                                    // transpose the
-                                                    // matrix so that
-                                                    // we can refer
-                                                    // to its columns
-                                                    // using a single
-                                                    // index
-                   data.contravariant[point] = transpose(data.contravariant[point]);
-
-                                                    // compute the normal
-                                                    // vector to this cell
-                                                    // and put it into the
-                                                    // last row of
-                                                    // data.contravariant
-                   if ( (dim==1) && (spacedim==2) )
-                     cross_product(data.contravariant[point][1],
-                                   -data.contravariant[point][0]);
-                   else if ( (dim==2) && (spacedim==3) )
-                     cross_product(data.contravariant[point][2],
-                                   data.contravariant[point][0],
-                                   data.contravariant[point][1]);
-                   else
-                     Assert (false, ExcNotImplemented());
-
-                                                    // det(J) is now the norm
-                                                    // of the cross product
-                                                    // of all the mapped unit
-                                                    // tangential vectors
-                   JxW_values[point]
-                     = data.contravariant[point][spacedim-1].norm()*weights[point];
-
-                                                    // in order to compute
-                                                    // the normal vector,
-                                                    // normalize the cross
-                                                    // product of mapped unit
-                                                    // vectors
-                   data.contravariant[point][spacedim-1]
-                     /= data.contravariant[point][spacedim-1].norm();
+                   const unsigned int codim = spacedim-dim;
 
                    if (update_flags & update_normal_vectors)
                      {
-                       normal_vectors[point]
-                         = data.contravariant[point][spacedim-1];
+                       Assert( codim==1 , ExcMessage("There is no cell normal in codim 2."));
+
+                       if (dim==1)
+                         cross_product(normal_vectors[point],
+                                       -DX_t[0]);
+                       else //dim == 2
+                         cross_product(normal_vectors[point],DX_t[0],DX_t[1]);
+
+                       normal_vectors[point] /= normal_vectors[point].norm();
 
                        if (cell->direction_flag() == false)
                          normal_vectors[point] *= -1.;
                      }
 
-                                                    // un-transpose
-                                                    // the matrix
-                                                    // again
-                   data.contravariant[point] = transpose(data.contravariant[point]);
                  }
-             }
+             } //codim>0 case
+
          }
     }
+
+
+
                                   // copy values from InternalData to
                                   // vector given by reference
   if (update_flags & update_jacobians)
@@ -882,6 +848,7 @@ MappingQ1<dim,spacedim>::fill_fe_values (
        for (unsigned int point=0; point<n_q_points; ++point)
          jacobians[point] = data.contravariant[point];
     }
+
                                   // calculate values of the
                                   // derivatives of the Jacobians. do
                                   // it here, since we only do it for
@@ -892,7 +859,14 @@ MappingQ1<dim,spacedim>::fill_fe_values (
 
       if (cell_similarity != CellSimilarity::translation)
        {
+
+         std::fill(jacobian_grads.begin(),
+                   jacobian_grads.end(),
+                   DerivativeForm<2,dim,spacedim>());
+
+
          const unsigned int data_set = DataSetDescriptor::cell();
+
          for (unsigned int point=0; point<n_q_points; ++point)
            {
              const Tensor<2,dim> * second =
@@ -929,8 +903,9 @@ MappingQ1<dim,spacedim>::fill_fe_values (
       AssertDimension (inverse_jacobians.size(), n_q_points);
       if (cell_similarity != CellSimilarity::translation)
        for (unsigned int point=0; point<n_q_points; ++point)
-         inverse_jacobians[point] = transpose(data.covariant[point]);
+         inverse_jacobians[point] = data.covariant[point].transpose();
     }
+
 }
 
 
@@ -1022,104 +997,80 @@ namespace internal
                          Assert(false, ExcNotImplemented());
                  }
            }
-         else
+         else //(dim < spacedim)
            {
                                               // in the codim-one case, the
-                                              // boundary form results from
-                                              // the cross product of all the
-                                              // face tangential vectors and
-                                              // the cell normal vector
-                                              //
-                                              // to compute the cell normal,
-                                              // use the same method used in
-                                              // fill_fe_values for cells
-                                              // above
+                                              // boundary form results from
+                                              // the cross product of all the
+                                              // face tangential vectors and
+                                              // the cell normal vector
+                                              //
+                                              // to compute the cell normal,
+                                              // use the same method used in
+                                              // fill_fe_values for cells
+                                              // above
              AssertDimension (data.contravariant.size(), n_q_points);
+
              for (unsigned int point=0; point<n_q_points; ++point)
-               {
-                 Tensor<1,spacedim> cell_normal;
-
-                                                  // temporarily
-                                                  // transpose the
-                                                  // matrix so that
-                                                  // we can refer
-                                                  // to its columns
-                                                  // using a single
-                                                  // index
-                 data.contravariant[point] = transpose(data.contravariant[point]);
-
-                                                  // compute the normal
-                                                  // vector to this cell
-                                                  // and put it into the
-                                                  // last row of
-                                                  // data.contravariant
-                 if ( (dim==1) && (spacedim==2) )
-                   cross_product(cell_normal,
-                                 -data.contravariant[point][0]);
-                 else if ( (dim==2) && (spacedim==3) )
-                   cross_product(cell_normal,
-                                 data.contravariant[point][0],
-                                 data.contravariant[point][1]);
-                 else
-                   Assert (false, ExcNotImplemented());
-
-                                                  // then compute the face
-                                                  // normal from the face
-                                                  // tangent and the cell
-                                                  // normal:
-                 if ( (dim==1) && (spacedim==2) )
+               {
+                 if (dim==1)
+                   {
+                                                      // J is a tangent vector
+                     boundary_forms[point] = data.contravariant[point].transpose()[0];
+                     boundary_forms[point] /=
+                       (face_no == 0 ? -1. : +1.) * boundary_forms[point].norm();
+
+                   }
+
+                 if (dim==2)
                    {
-                                                      // need to think how to
-                                                      // do this. the code
-                                                      // should be something
-                                                      // like the below, but
-                                                      // I can't test it
-                                                      // right now since we
-                                                      // can't use
-                                                      // FEFaceValues in 1d
-                     Assert (false, ExcNotImplemented());
+                     Tensor<1,spacedim> cell_normal;
+                     const DerivativeForm<1,spacedim,dim> DX_t =
+                       data.contravariant[point].transpose();
+                     cross_product(cell_normal,DX_t[0],DX_t[1]);
+                     cell_normal /= cell_normal.norm();
+
+                                                      // then compute the face
+                                                      // normal from the face
+                                                      // tangent and the cell
+                                                      // normal:
                      cross_product (boundary_forms[point],
-                                    (face_no == 0 ? 1. : -1.) * cell_normal);
+                                    data.aux[0][point], cell_normal);
+
                    }
-                 else if ( (dim==2) && (spacedim==3) )
-                   cross_product (boundary_forms[point],
-                                  data.aux[0][point], cell_normal);
-                 else
-                   Assert (false, ExcNotImplemented());
-
-                                                  // un-transpose
-                                                  // the matrix
-                                                  // again
-                 data.contravariant[point] = transpose(data.contravariant[point]);
+
                }
            }
 
 
-         if (update_flags & (update_normal_vectors
-                             | update_JxW_values))
-           for (unsigned int i=0;i<boundary_forms.size();++i)
-             {
-               if (update_flags & update_JxW_values)
-                 {
+
+         if (update_flags & (update_normal_vectors
+                             | update_JxW_values))
+           for (unsigned int i=0;i<boundary_forms.size();++i)
+             {
+               if (update_flags & update_JxW_values)
+                 {
                    JxW_values[i] = boundary_forms[i].norm() * weights[i];
 
-                   if (subface_no!=deal_II_numbers::invalid_unsigned_int)
-                     {
-                       const double area_ratio=GeometryInfo<dim>::subface_ratio(
-                         cell->subface_case(face_no), subface_no);
-                       JxW_values[i] *= area_ratio;
-                     }
-                 }
-
-               if (update_flags & update_normal_vectors)
-                 normal_vectors[i] = boundary_forms[i] / boundary_forms[i].norm();
-             }
+                   if (subface_no!=deal_II_numbers::invalid_unsigned_int)
+                     {
+                       const double area_ratio=GeometryInfo<dim>::subface_ratio(
+                         cell->subface_case(face_no), subface_no);
+                       JxW_values[i] *= area_ratio;
+                     }
+                 }
+
+               if (update_flags & update_normal_vectors)
+                 normal_vectors[i] = boundary_forms[i] / boundary_forms[i].norm();
+             }
        }
     }
   }
 }
 
 
+
+
 template<int dim, int spacedim>
 void
 MappingQ1<dim,spacedim>::compute_fill_face (
@@ -1223,8 +1174,67 @@ fill_fe_subface_values (const typename Triangulation<dim,spacedim>::cell_iterato
 template<int dim, int spacedim>
 void
 MappingQ1<dim,spacedim>::transform (
-  const VectorSlice<const std::vector<Tensor<1, dim> > > input,
-  VectorSlice<std::vector<Tensor<1, spacedim> > > output,
+  const VectorSlice<const std::vector<Tensor<1, dim> > >  input,
+  VectorSlice<std::vector<Tensor<1, spacedim> > >         output,
+  const typename Mapping<dim,spacedim>::InternalDataBase  &mapping_data,
+  const MappingType                                       mapping_type) const
+{
+  transform_fields(input, output, mapping_data, mapping_type);
+}
+
+
+
+template<int dim, int spacedim>
+void
+MappingQ1<dim,spacedim>::transform (
+  const VectorSlice<const std::vector<DerivativeForm<1, dim,spacedim> > > input,
+  VectorSlice<std::vector<Tensor<2, spacedim> > > output,
+  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+  const MappingType mapping_type) const
+{
+
+  std::vector<DerivativeForm<1, spacedim,spacedim> > aux_output1(output.size());
+  VectorSlice< std::vector<DerivativeForm<1, spacedim,spacedim> > >  aux_output( aux_output1);
+
+  transform_differential_forms(input, aux_output, mapping_data, mapping_type);
+
+  for (unsigned int i=0; i<output.size(); i++)
+    output[i] = aux_output[i];
+}
+
+
+
+template<int dim, int spacedim>
+void
+MappingQ1<dim,spacedim>::transform (
+  const VectorSlice<const std::vector<Tensor<2, dim> > >    input,
+        VectorSlice<std::vector<Tensor<2, spacedim> > >     output,
+  const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+  const MappingType mapping_type) const
+{
+  switch (mapping_type)
+    {
+      case mapping_contravariant:
+           transform_fields(input, output, mapping_data, mapping_type);
+           return;
+
+      case mapping_piola_gradient:
+      case mapping_contravariant_gradient:
+      case mapping_covariant_gradient:
+           transform_gradients(input, output, mapping_data, mapping_type);
+           return;
+      default:
+           Assert(false, ExcNotImplemented());
+    }
+}
+
+
+
+template<int dim, int spacedim>
+template < int rank >
+void MappingQ1<dim,spacedim>::transform_fields(
+  const VectorSlice<const std::vector<Tensor<rank,dim> > > input,
+  VectorSlice<std::vector<Tensor<rank,spacedim> > > output,
   const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
   const MappingType mapping_type) const
 {
@@ -1233,51 +1243,46 @@ MappingQ1<dim,spacedim>::transform (
          ExcInternalError());
   const InternalData &data = static_cast<const InternalData&>(mapping_data);
 
-  Tensor<1, spacedim> auxiliary;
-
   switch (mapping_type)
     {
-      case mapping_covariant:
+      case mapping_contravariant:
       {
-       Assert (data.update_flags & update_covariant_transformation,
+       Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
 
        for (unsigned int i=0; i<output.size(); ++i)
-         {
-           for (unsigned int d=0;d<dim;++d)
-             auxiliary[d] = input[i][d];
-           contract (output[i], auxiliary, data.covariant[i]);
-         }
+         output[i] = apply_transformation(data.contravariant[i], input[i]);
+
        return;
       }
 
-      case mapping_contravariant:
+      case mapping_piola:
       {
        Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-
+       Assert (data.update_flags & update_volume_elements,
+               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+       Assert (rank==1, ExcMessage("Only for rank 1"));
        for (unsigned int i=0; i<output.size(); ++i)
          {
-           for (unsigned int d=0;d<dim;++d)
-             auxiliary[d] = input[i][d];
-           contract (output[i], data.contravariant[i], auxiliary);
+           output[i] = apply_transformation(data.contravariant[i], input[i]);
+           output[i] /= data.volume_elements[i];
          }
        return;
       }
 
-      case mapping_piola:
+
+                                      //We still allow this operation as in the
+                                      //reference cell Derivatives are Tensor
+                                      //rather than DerivativeForm
+      case mapping_covariant:
       {
        Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-       Assert (data.update_flags & update_volume_elements,
-               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
 
        for (unsigned int i=0; i<output.size(); ++i)
-         {
-           for (unsigned int d=0;d<dim;++d)
-             auxiliary[d] = input[i][d] / data.volume_elements[i];
-           contract (output[i], data.contravariant[i], auxiliary);
-         }
+         output[i] = apply_transformation(data.covariant[i], input[i]);
+
        return;
       }
 
@@ -1288,10 +1293,10 @@ MappingQ1<dim,spacedim>::transform (
 
 
 template<int dim, int spacedim>
-void
-MappingQ1<dim,spacedim>::transform (
-  const VectorSlice<const std::vector<Tensor<2, dim> > > input,
-  VectorSlice<std::vector<Tensor<2, spacedim> > > output,
+template < int rank >
+void MappingQ1<dim,spacedim>::transform_gradients(
+  const VectorSlice<const std::vector<Tensor<rank,dim> > > input,
+  VectorSlice<std::vector<Tensor<rank,spacedim> > > output,
   const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
   const MappingType mapping_type) const
 {
@@ -1300,106 +1305,117 @@ MappingQ1<dim,spacedim>::transform (
          ExcInternalError());
   const InternalData &data = static_cast<const InternalData&>(mapping_data);
 
-  Tensor<2, spacedim> aux1;
-  Tensor<2, spacedim> aux2;
-
   switch (mapping_type)
     {
-      case mapping_covariant:
+      case mapping_contravariant_gradient:
       {
        Assert (data.update_flags & update_covariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-
-       for (unsigned int i=0; i<output.size(); ++i)
-         {
-           for (unsigned int d1=0;d1<dim;++d1)
-             for (unsigned int d2=0;d2<dim;++d2)
-               aux1[d1][d2] = input[i][d1][d2];
-           contract (output[i], aux1, data.covariant[i]);
-         }
-       return;
-      }
-
-      case mapping_contravariant:
-      {
        Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+       Assert (rank==2, ExcMessage("Only for rank 2"));
 
        for (unsigned int i=0; i<output.size(); ++i)
          {
-           for (unsigned int d1=0;d1<dim;++d1)
-             for (unsigned int d2=0;d2<dim;++d2)
-               aux1[d1][d2] = input[i][d1][d2];
-           contract (output[i], data.contravariant[i], aux1);
+           DerivativeForm<1,spacedim,dim> A =
+             apply_transformation(data.contravariant[i], transpose(input[i]) );
+           output[i] = apply_transformation(data.covariant[i], A.transpose() );
          }
+
        return;
       }
 
       case mapping_covariant_gradient:
       {
+       Assert (data.update_flags & update_covariant_transformation,
+               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
        Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+       Assert (rank==2, ExcMessage("Only for rank 2"));
 
        for (unsigned int i=0; i<output.size(); ++i)
          {
-           for (unsigned int d1=0;d1<dim;++d1)
-             for (unsigned int d2=0;d2<dim;++d2)
-               aux1[d1][d2] = input[i][d1][d2];
+           DerivativeForm<1,spacedim,dim> A =
+             apply_transformation(data.covariant[i], transpose(input[i]) );
+           output[i] = apply_transformation(data.covariant[i], A.transpose() );
 
-           contract(aux2, aux1, data.covariant[i]);
-           contract(output[i], data.covariant[i], aux2);
          }
 
        return;
       }
 
-      case mapping_contravariant_gradient:
+
+
+
+      case mapping_piola_gradient:
       {
        Assert (data.update_flags & update_covariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
        Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+       Assert (data.update_flags & update_volume_elements,
+               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
+       Assert (rank==2, ExcMessage("Only for rank 2"));
 
        for (unsigned int i=0; i<output.size(); ++i)
          {
-           for (unsigned int d1=0;d1<dim;++d1)
-             for (unsigned int d2=0;d2<dim;++d2)
-               aux1[d1][d2] = input[i][d1][d2];
+           DerivativeForm<1,spacedim,dim> A =
+             apply_transformation(data.covariant[i], input[i] );
+           Tensor<2,spacedim> T =
+             apply_transformation(data.contravariant[i], A.transpose() );
 
-           contract(aux2, aux1, data.covariant[i]);
-           contract(output[i], data.contravariant[i], aux2);
+           output[i] = transpose(T);
+           output[i] /= data.volume_elements[i];
          }
 
        return;
       }
 
-      case mapping_piola:
+      default:
+           Assert(false, ExcNotImplemented());
+    }
+}
+
+
+
+
+template<int dim, int spacedim>
+template < int rank >
+void MappingQ1<dim,spacedim>::transform_differential_forms(
+      const VectorSlice<const std::vector<DerivativeForm<rank, dim,spacedim> > >    input,
+      VectorSlice<std::vector<DerivativeForm<rank, spacedim,spacedim> > > output,
+      const typename Mapping<dim,spacedim>::InternalDataBase &mapping_data,
+      const MappingType mapping_type) const
+{
+
+  AssertDimension (input.size(), output.size());
+  Assert (dynamic_cast<const InternalData *>(&mapping_data) != 0,
+         ExcInternalError());
+  const InternalData &data = static_cast<const InternalData&>(mapping_data);
+
+  switch (mapping_type)
+    {
+      case mapping_covariant:
       {
-       Assert (data.update_flags & update_covariant_transformation,
-               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
        Assert (data.update_flags & update_contravariant_transformation,
                typename FEValuesBase<dim>::ExcAccessToUninitializedField());
-       Assert (data.update_flags & update_volume_elements,
-               typename FEValuesBase<dim>::ExcAccessToUninitializedField());
 
        for (unsigned int i=0; i<output.size(); ++i)
-         {
-           for (unsigned int d1=0;d1<dim;++d1)
-             for (unsigned int d2=0;d2<dim;++d2)
-               aux1[d1][d2] = input[i][d1][d2] / data.volume_elements[i];
+         output[i] = apply_transformation(data.covariant[i], input[i]);
 
-           contract (aux2, aux1, data.covariant[i]);
-           contract (output[i], data.contravariant[i], aux2);
-         }
        return;
       }
       default:
            Assert(false, ExcNotImplemented());
     }
+
 }
 
 
 
+
+
+
 template<int dim, int spacedim>
 Point<spacedim>
 MappingQ1<dim,spacedim>::transform_unit_to_real_cell (
@@ -1454,18 +1470,166 @@ transform_unit_to_real_cell_internal (const InternalData &data) const
 
 
 
+                                /* For an explanation of the  KA and Kb
+                                   arrays see the comments in the declaration of
+                                   transform_real_to_unit_cell_initial_guess */
+namespace
+{
+  template <int dim>
+  struct TransformR2UInitialGuess
+  {
+      static const double KA[GeometryInfo<dim>::vertices_per_cell][dim];
+      static const double Kb[GeometryInfo<dim>::vertices_per_cell];
+  };
+
+
+  /*
+    Octave code:
+    M=[0 1; 1 1];
+    K1 = transpose(M) * inverse (M*transpose(M));
+    printf ("{%f, %f},\n", K1' );
+  */
+  template <>
+  const double
+  TransformR2UInitialGuess<1>::
+  KA[GeometryInfo<1>::vertices_per_cell][1] =
+  {
+       {-1.000000},
+       {1.000000}
+  };
+
+  template <>
+  const double
+  TransformR2UInitialGuess<1>::
+  Kb[GeometryInfo<1>::vertices_per_cell] = {1.000000, 0.000000};
+
+
+/*
+  Octave code:
+  M=[0 1 0 1;0 0 1 1;1 1 1 1];
+  K2 = transpose(M) * inverse (M*transpose(M));
+  printf ("{%f, %f, %f},\n", K2' );
+*/
+  template <>
+  const double
+  TransformR2UInitialGuess<2>::
+  KA[GeometryInfo<2>::vertices_per_cell][2] =
+  {
+      {-0.500000, -0.500000},
+      { 0.500000, -0.500000},
+      {-0.500000,  0.500000},
+      { 0.500000,  0.500000}
+  };
+
+/*
+  Octave code:
+  M=[0 1 0 1 0 1 0 1;0 0 1 1 0 0 1 1; 0 0 0 0 1 1 1 1; 1 1 1 1 1 1 1 1];
+  K3 = transpose(M) * inverse (M*transpose(M))
+  printf ("{%f, %f, %f, %f},\n", K3' );
+*/
+  template <>
+  const double
+  TransformR2UInitialGuess<2>::
+  Kb[GeometryInfo<2>::vertices_per_cell] =
+  {0.750000,0.250000,0.250000,-0.250000 };
+
+
+  template <>
+  const double
+  TransformR2UInitialGuess<3>::
+  KA[GeometryInfo<3>::vertices_per_cell][3] =
+  {
+      {-0.250000, -0.250000, -0.250000},
+      { 0.250000, -0.250000, -0.250000},
+      {-0.250000,  0.250000, -0.250000},
+      { 0.250000,  0.250000, -0.250000},
+      {-0.250000, -0.250000,  0.250000},
+      { 0.250000, -0.250000,  0.250000},
+      {-0.250000,  0.250000,  0.250000},
+      { 0.250000,  0.250000,  0.250000}
+
+  };
+
+
+  template <>
+  const double
+  TransformR2UInitialGuess<3>::
+  Kb[GeometryInfo<3>::vertices_per_cell] =
+  {0.500000,0.250000,0.250000,0.000000,0.250000,0.000000,0.000000,-0.250000};
+
+}
+
+
+template<int dim, int spacedim>
+Point<dim>
+MappingQ1<dim,spacedim>::
+transform_real_to_unit_cell_initial_guess (const std::vector<Point<spacedim> > &vertex,
+                                          const Point<spacedim>               &p) const
+{
+
+  Point<dim> p_unit;
+
+  FullMatrix<double>  KA(GeometryInfo<dim>::vertices_per_cell, dim);
+  Vector <double>  Kb(GeometryInfo<dim>::vertices_per_cell);
+
+  KA.fill( (double*)(TransformR2UInitialGuess<dim>::KA) );
+  for (unsigned int i=0;i<GeometryInfo<dim>::vertices_per_cell;++i)
+    Kb(i)=(TransformR2UInitialGuess<dim>::Kb)[i];
+
+  FullMatrix<double> Y(spacedim, GeometryInfo<dim>::vertices_per_cell);
+  for (unsigned int v=0;v<GeometryInfo<dim>::vertices_per_cell;v++)
+    for (unsigned int i=0;i<spacedim;++i)
+      Y(i,v) = vertex[v][i];
+
+  FullMatrix<double> A(spacedim,dim);
+  Y.mmult(A,KA); // A = Y*KA
+  Vector< double > b(spacedim);
+  Y.vmult(b,Kb); // b = Y*Kb
+
+  for (unsigned int i=0;i<spacedim;++i)
+    b(i) -= p[i];
+  b*=-1;
+
+  Vector< double > dest(dim);
+
+  FullMatrix<double> A_1(dim,spacedim);
+  if (dim<spacedim)
+    A_1.left_invert(A);
+  else
+    A_1.invert(A);
+
+  A_1.vmult(dest,b); //A^{-1}*b
+
+
+  for (unsigned int i=0;i<dim;++i)
+    p_unit[i]=dest(i);
+
+
+  return p_unit;
+
+}
+
 template<int dim, int spacedim>
 Point<dim>
 MappingQ1<dim,spacedim>::
 transform_real_to_unit_cell (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
                              const Point<spacedim>                            &p) const
 {
-                                  // Let the start value of the
-                                  // newton iteration be the center
-                                  // of the unit cell
-  Point<dim> p_unit;
-  for (unsigned int i=0; i<dim; ++i)
-    p_unit(i)=0.5;
+
+
+                                  // Find the initial value for the
+                                  // Newton iteration by a normal projection
+                                  // to the least square plane determined by
+                                  // the vertices of the cell
+  std::vector<Point<spacedim> > a;
+  compute_mapping_support_points (cell,a);
+  Point<dim> p_unit =
+    transform_real_to_unit_cell_initial_guess(a,p);
+
+                                  // if dim==1 there is nothing
+                                  // else to do the initial value is the answer.
+  if (dim>1)
+    {
 
                                   // Use the get_data function to
                                   // create an InternalData with data
@@ -1473,30 +1637,35 @@ transform_real_to_unit_cell (const typename Triangulation<dim,spacedim>::cell_it
                                   // transformation shape values and
                                   // derivatives already computed at
                                   // point p_unit.
-  const Quadrature<dim> point_quadrature(p_unit);
-  std::auto_ptr<InternalData>
-    mdata(dynamic_cast<InternalData *> (
-            MappingQ1<dim,spacedim>::get_data(update_transformation_values
-                                             | update_transformation_gradients,
-                                             point_quadrature)));
-
-  compute_mapping_support_points (cell, mdata->mapping_support_points);
-                                  // The support points have to be at
-                                  // least as many as there are
-                                  // vertices.
-  Assert(mdata->mapping_support_points.size() >=
-        GeometryInfo<dim>::vertices_per_cell,
-        ExcInternalError());
-                                  // Ignore non vertex support points.
-  mdata->mapping_support_points.resize(GeometryInfo<dim>::vertices_per_cell);
-
-                                  // perform the newton iteration.
-  transform_real_to_unit_cell_internal(cell, p, *mdata, p_unit);
+      const Quadrature<dim> point_quadrature(p_unit);
+
+      UpdateFlags update_flags = update_transformation_values| update_transformation_gradients;
+      if (spacedim>dim)
+       update_flags |= update_jacobian_grads;
+
+      std::auto_ptr<InternalData>
+       mdata(dynamic_cast<InternalData *> (
+               MappingQ1<dim,spacedim>::get_data(update_flags, point_quadrature)));
+
+      compute_mapping_support_points (cell, mdata->mapping_support_points);
+                                      // The support points have to be at
+                                      // least as many as there are
+                                      // vertices.
+      Assert(mdata->mapping_support_points.size() >=
+            GeometryInfo<dim>::vertices_per_cell,
+            ExcInternalError());
+                                      // Ignore non vertex support points.
+      mdata->mapping_support_points.resize(GeometryInfo<dim>::vertices_per_cell);
+
+                                      // perform the newton iteration.
+      transform_real_to_unit_cell_internal(cell, p, *mdata, p_unit);
+    }
 
   return p_unit;
 }
 
 
+
 template<int dim, int spacedim>
 void
 MappingQ1<dim,spacedim>::
@@ -1518,29 +1687,25 @@ transform_real_to_unit_cell_internal
                                   // f(x)=p(x)-p=0
                                   // x_{n+1}=x_n-[f'(x)]^{-1}f(x)
 
-                                  // The start value is set to be the
-                                  // center of the unit cell.
+                                  // The start value was set to be the
+                                  // linear approximation to the cell
 
                                   // The shape values and derivatives
                                   // of the mapping at this point are
                                   // previously computed.
 
-                                  // In the codimension one case, the
-                                  // f' is rectangular, and it is
-                                  // augmented with the normal to the
-                                  // cell. The tranformation from
-                                  // real to unit is intented as a
-                                  // projection to the surface (or
-                                  // curve) generated by the given
-                                  // cell.
+                                  // For the <2,3>  case there is a
+                                  // template specialization.
 
                                   // f(x)
+
+  compute_shapes(std::vector<Point<dim> > (1, p_unit), mdata);
   Point<spacedim> p_real(transform_unit_to_real_cell_internal(mdata));
   Point<spacedim> f = p_real-p;
 
   const double eps = 1.e-12*cell->diameter();
   const unsigned int loop_limit = 50;
-  
+
   unsigned int loop=0;
   while (f.square()>eps*eps && loop++<loop_limit)
     {
@@ -1554,27 +1719,8 @@ transform_real_to_unit_cell_internal
          for (unsigned int i=0; i<spacedim; ++i)
            for (unsigned int j=0; j<dim; ++j)
              df[i][j]+=point[i]*grad_transform[j];
-         if(dim<spacedim)
-           {
-                                              // Temporarily
-                                              // transpose df, to
-                                              // access gradients as
-                                              // a single index, and
-                                              // put in the dimth row
-                                              // the normal to this
-                                              // cell.
-             df = transpose(df);
-             if ( (dim==1) && (spacedim==2) )
-               cross_product(df[1],-df[0]);
-             else if ( (dim==2) && (spacedim==3) )
-               cross_product(df[2], df[0], df[1]);
-             else
-               Assert (false, ExcNotImplemented());
-                                              // Transpose back
-             df = transpose(df);
-           }
        }
-      
+
                                       // Solve  [f'(x)]d=f(x)
       Tensor<1,spacedim> d;
       Tensor<2,spacedim> df_1;
@@ -1601,14 +1747,9 @@ transform_real_to_unit_cell_internal
                                       // f(x)
       p_real = transform_unit_to_real_cell_internal(mdata);
       f = p_real-p;
-                                      // In the codimension one case,
-                                      // we only project on the
-                                      // surface, i.e., we remove the
-                                      // normal component of the
-                                      // difference.
-      if(dim<spacedim)
-       f -= (transpose(df)[dim]*f)*f;
+
     }
+
                                   // Here we check that in the last
                                   // execution of while the first
                                   // condition was already wrong,
@@ -1622,6 +1763,186 @@ transform_real_to_unit_cell_internal
 
 
 
+/*
+  This function becomes a little tricky in dimension <2,3>.
+  There is a surface embbeded in R^3 and we pass a point p in R^3, that
+  is most likely not lying on the surface.
+  We then ask,
+  what point in R^2 (hopefully in the unit cell) satisfies that
+  map(x) = p.
+
+  An appropriate modification of this question is:
+  Find x in R^2 and alpha in R such that
+
+  map(x) + alpha * normal(x) = p
+
+
+ */
+
+template<>
+void MappingQ1<2,3>::
+transform_real_to_unit_cell_internal (const Triangulation<2,3>::cell_iterator &cell,
+                                     const Point<3> &p,
+                                     InternalData   &mdata,
+                                     Point<2>       &p_unit) const
+{
+  transform_real_to_unit_cell_internal_codim1(cell,p, mdata, p_unit);
+}
+
+
+
+
+template<>
+void MappingQ1<1,2>::
+transform_real_to_unit_cell_internal (const Triangulation<1,2>::cell_iterator &cell,
+                                     const Point<2> &p,
+                                     InternalData   &mdata,
+                                     Point<1>       &p_unit) const
+{
+  transform_real_to_unit_cell_internal_codim1(cell,p, mdata, p_unit);
+}
+
+template<>
+void MappingQ1<1,3>::
+transform_real_to_unit_cell_internal (const Triangulation<1,3>::cell_iterator &/*cell*/,
+                                     const Point<3> &/*p*/,
+                                     InternalData   &/*mdata*/,
+                                     Point<1>       &/*p_unit*/) const
+{
+  Assert(false, ExcNotImplemented());
+}
+
+
+
+
+template<int dim, int spacedim>
+template<int dim_>
+void MappingQ1<dim,spacedim>::
+transform_real_to_unit_cell_internal_codim1
+(const typename Triangulation<dim_,dim_ + 1>::cell_iterator &cell,
+ const Point<dim_ + 1>                                      &p,
+ MappingQ1<dim,spacedim>::InternalData                      &mdata,
+ Point<dim_ >                                               &p_unit) const
+{
+
+  const unsigned int spacedim1 = dim_+1;
+  const unsigned int dim1 = dim_;
+
+
+  const unsigned int n_shapes=mdata.shape_values.size();
+  Assert(n_shapes!=0, ExcInternalError());
+  Assert(mdata.shape_derivatives.size()==n_shapes, ExcInternalError());
+  Assert(mdata.shape_second_derivatives.size()==n_shapes, ExcInternalError());
+
+  std::vector<Point<spacedim1> > &points=mdata.mapping_support_points;
+  Assert(points.size()==n_shapes, ExcInternalError());
+
+  Point<spacedim1> p_minus_F;
+
+  Point<spacedim1>  DF[dim1];
+  Point<spacedim1>  D2F[dim1][dim1];
+
+  Point<dim1> f;
+  Tensor<2,dim1>  df;
+
+                                  //Evaluate first and second derivatives
+  compute_shapes(std::vector<Point<dim1> > (1, p_unit), mdata);
+  for (unsigned int k=0; k<mdata.n_shape_functions; ++k)
+    {
+      const Tensor<1,dim1>   &grad_phi_k = mdata.derivative(0,k);
+      const Tensor<2,dim1>   &hessian_k  = mdata.second_derivative(0,k);
+      const Point<spacedim1> &point_k = points[k];
+
+      for (unsigned int j=0; j<dim1; ++j)
+       {
+         DF[j] += grad_phi_k[j] * point_k;
+         for (unsigned int l=0; l<dim1; ++l)
+           D2F[j][l] += hessian_k[j][l] * point_k;
+       }
+    }
+
+  p_minus_F = p;
+  p_minus_F -= transform_unit_to_real_cell_internal(mdata);
+
+
+  for (unsigned int j=0; j<dim1; ++j)
+    f[j] = DF[j] * p_minus_F;
+
+  for (unsigned int j=0; j<dim1; ++j)
+    {
+      f[j] = DF[j] * p_minus_F;
+      for (unsigned int l=0; l<dim1; ++l)
+       df[j][l] = -DF[j]*DF[l] + D2F[j][l] * p_minus_F;
+    }
+
+
+  const double eps = 1.e-12*cell->diameter();
+  const unsigned int loop_limit = 10;
+
+  unsigned int loop=0;
+
+  while (f.norm()>eps && loop++<loop_limit)
+    {
+                                      // Solve  [df(x)]d=f(x)
+      Tensor<1,dim1> d;
+      Tensor<2,dim1> df_1;
+
+      df_1 = invert(df);
+      contract (d, df_1, static_cast<const Tensor<1,dim1>&>(f));
+      p_unit -= d;
+
+      for (unsigned int j=0; j<dim1; ++j)
+       {
+         DF[j].clear();
+         for (unsigned int l=0; l<dim1; ++l)
+           D2F[j][l].clear();
+       }
+
+      compute_shapes(std::vector<Point<dim1> > (1, p_unit), mdata);
+      for (unsigned int k=0; k<mdata.n_shape_functions; ++k)
+       {
+         const Tensor<1,dim1>   &grad_phi_k = mdata.derivative(0,k);
+         const Tensor<2,dim1>   &hessian_k  = mdata.second_derivative(0,k);
+         const Point<spacedim1> &point_k = points[k];
+
+         for (unsigned int j=0; j<dim1; ++j)
+           {
+             DF[j] += grad_phi_k[j] * point_k;
+             for (unsigned int l=0; l<dim1; ++l)
+               D2F[j][l] += hessian_k[j][l] * point_k;
+           }
+       }
+
+      p_minus_F = p;
+      p_minus_F -= transform_unit_to_real_cell_internal(mdata);
+
+      for (unsigned int j=0; j<dim1; ++j)
+       {
+         f[j] = DF[j] * p_minus_F;
+         for (unsigned int l=0; l<dim1; ++l)
+           df[j][l] = -DF[j]*DF[l] + D2F[j][l] * p_minus_F;
+       }
+
+    }
+
+
+                                  // Here we check that in the last
+                                  // execution of while the first
+                                  // condition was already wrong,
+                                  // meaning the residual was below
+                                  // eps. Only if the first condition
+                                  // failed, loop will have been
+                                  // increased and tested, and thus
+                                  // havereached the limit.
+  AssertThrow(loop<loop_limit, ExcTransformationFailed());
+
+
+}
+
+
+
+
+
 template<int dim, int spacedim>
 Mapping<dim,spacedim> *
 MappingQ1<dim,spacedim>::clone () const
index 04e52551ae0bc7107d1e4d3b6899f0745d7bbdb6..677eb678e7bdc3cc0e1b108c4d8924e0c3ef3dab 100644 (file)
 //
 //---------------------------------------------------------------------------
 
-
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class MappingQ1<deal_II_dimension>;
-    template struct StaticMappingQ1<deal_II_dimension>;
-
-#if deal_II_dimension != 3
-    template class MappingQ1<deal_II_dimension,deal_II_dimension+1>;
-    template struct StaticMappingQ1<deal_II_dimension,deal_II_dimension+1>;
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class MappingQ1<deal_II_dimension, deal_II_space_dimension>;
+    template class StaticMappingQ1<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
index f1d14904ca30ef27244b327c9e9c356d2e6a976e..ee20611d974d9acc4fae893eb280e8e4542fdbef 100644 (file)
@@ -121,9 +121,9 @@ MappingQ1Eulerian<dim,EulerVectorType,spacedim>::fill_fe_values (
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
-  std::vector<Tensor<2,spacedim> >                          &jacobians,
-  std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-  std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+  std::vector< DerivativeForm<1,dim,spacedim>   >              &jacobians,
+  std::vector<DerivativeForm<2,dim,spacedim>    >   &jacobian_grads,
+  std::vector<DerivativeForm<1,spacedim,dim>    >   &inverse_jacobians,
   std::vector<Point<spacedim> >                             &normal_vectors,
   CellSimilarity::Similarity                           &cell_similarity) const
 {
index 3c822d119bd5c73c23aebbb2a4189e178e2d7200..cef3b9ec3dab31d822c94f52fce46a266d7a1503 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class MappingQ1Eulerian<deal_II_dimension, Vector<double> >;
-    template class MappingQ1Eulerian<deal_II_dimension, Vector<float> >;
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class MappingQ1Eulerian<deal_II_dimension, Vector<double>,        deal_II_space_dimension>;
+    template class MappingQ1Eulerian<deal_II_dimension, Vector<float>, deal_II_space_dimension>;
 #ifdef DEAL_II_USE_PETSC
-    template class MappingQ1Eulerian<deal_II_dimension, PETScWrappers::Vector>;
+    template class MappingQ1Eulerian<deal_II_dimension, PETScWrappers::Vector, deal_II_space_dimension>;
 #endif
-
-#if deal_II_dimension != 3
-    template class MappingQ1Eulerian<deal_II_dimension, Vector<double>, deal_II_dimension+1 >;
-#      ifdef DEAL_II_USE_PETSC
-    template class MappingQ1Eulerian<deal_II_dimension, PETScWrappers::Vector, deal_II_dimension+1>;
-#      endif
 #endif
   }
-
index 16231d00d7a2c6733f8cbadc525913598d95d445..ed5625b50faddf82c33b57d0be0aa1663183fbd1 100644 (file)
@@ -190,9 +190,9 @@ MappingQEulerian<dim,EulerVectorType,spacedim>::fill_fe_values (
   typename Mapping<dim,spacedim>::InternalDataBase          &mapping_data,
   std::vector<Point<spacedim> >                             &quadrature_points,
   std::vector<double>                                       &JxW_values,
-  std::vector<Tensor<2,spacedim> >                          &jacobians,
-  std::vector<Tensor<3,spacedim> >                          &jacobian_grads,
-  std::vector<Tensor<2,spacedim> >                          &inverse_jacobians,
+  std::vector<DerivativeForm<1,dim,spacedim> >       &jacobians,
+  std::vector<DerivativeForm<2,dim,spacedim>  >     &jacobian_grads,
+  std::vector<DerivativeForm<1,spacedim,dim>  >     &inverse_jacobians,
   std::vector<Point<spacedim> >                             &normal_vectors,
   CellSimilarity::Similarity                           &cell_similarity) const
 {
index 8d6318728c158dfc39c23a62d95b19332410b59f..1bfedd75b373c2cbb696c7557b535de5963d0c43 100644 (file)
 //
 //---------------------------------------------------------------------------
 
-
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
-    template class MappingQEulerian<deal_II_dimension, Vector<double> >;
-#ifdef DEAL_II_USE_PETSC
-    template class MappingQEulerian<deal_II_dimension, PETScWrappers::Vector>;
-    template class MappingQEulerian<deal_II_dimension, PETScWrappers::MPI::Vector>;
-#endif
-
-#if deal_II_dimension != 3
-    template class MappingQEulerian<deal_II_dimension, Vector<double>,
-                                   deal_II_dimension+1>;
-
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class MappingQEulerian<deal_II_dimension, Vector<double>, deal_II_space_dimension>;
 #  ifdef DEAL_II_USE_PETSC
     template class MappingQEulerian<deal_II_dimension,
-                                   PETScWrappers::Vector, deal_II_dimension+1>;
+                                   PETScWrappers::Vector, deal_II_space_dimension>;
     template class MappingQEulerian<deal_II_dimension,
-                                   PETScWrappers::MPI::Vector, deal_II_dimension+1>;
-#  endif
-
+                                   PETScWrappers::MPI::Vector, deal_II_space_dimension>;
+#  endif   
 #endif
   }
 
+
index 0ec9986dafabbe5f6a4ccc285793859e4bb4058b..f16f7005fdd312de7d9a049bfd3361eb97b2ddc8 100644 (file)
 //
 //---------------------------------------------------------------------------
 
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
+    template void
+      GridGenerator::hyper_rectangle<deal_II_dimension, deal_II_space_dimension> (
+       Triangulation<deal_II_dimension, deal_II_space_dimension> &,
+       const Point<deal_II_space_dimension>&, const Point<deal_II_space_dimension>&,
+       const bool);
+    
+    template void
+      GridGenerator::colorize_hyper_rectangle<deal_II_dimension, deal_II_space_dimension> (
+       Triangulation<deal_II_dimension, deal_II_space_dimension> &);
+    
+    template void
+      GridGenerator::hyper_cube<deal_II_dimension, deal_II_space_dimension> (
+       Triangulation<deal_II_dimension, deal_II_space_dimension> &, const double, const double);
+    
+    template
+      void
+      GridGenerator::merge_triangulations
+      (const Triangulation<deal_II_dimension,deal_II_space_dimension> &triangulation_1,
+       const Triangulation<deal_II_dimension,deal_II_space_dimension> &triangulation_2,
+       Triangulation<deal_II_dimension,deal_II_space_dimension>       &result);
+      
+#endif
+  }
+
 
 for (deal_II_dimension : DIMENSIONS)
 {
-  template void
-    GridGenerator::hyper_rectangle<deal_II_dimension> (
-      Triangulation<deal_II_dimension> &,
-      const Point<deal_II_dimension>&, const Point<deal_II_dimension>&,
-      const bool);
-
-  template void
-    GridGenerator::colorize_hyper_rectangle<deal_II_dimension> (
-      Triangulation<deal_II_dimension> &);
-
-  template void
-    GridGenerator::hyper_cube<deal_II_dimension> (
-      Triangulation<deal_II_dimension> &, const double, const double);
-
+  
   template void
     GridGenerator::subdivided_hyper_cube<deal_II_dimension> (
       Triangulation<deal_II_dimension> &,
       const unsigned int, const double, const double);
-
+  
   template void
     GridGenerator::subdivided_hyper_rectangle<deal_II_dimension>
     (Triangulation<deal_II_dimension> &,
@@ -40,7 +54,7 @@ for (deal_II_dimension : DIMENSIONS)
      const Point<deal_II_dimension>&,
      const Point<deal_II_dimension>&,
      bool);
-
+  
   template
     void
     GridGenerator::subdivided_hyper_rectangle(
@@ -49,39 +63,17 @@ for (deal_II_dimension : DIMENSIONS)
       const Point<deal_II_dimension>                &,
       const Point<deal_II_dimension>                &,
       const bool                       );
-
-
-    template
-    void
-    GridGenerator::merge_triangulations (const Triangulation<deal_II_dimension,deal_II_dimension> &triangulation_1,
-                     const Triangulation<deal_II_dimension,deal_II_dimension> &triangulation_2,
-                     Triangulation<deal_II_dimension,deal_II_dimension>       &result);
-
-#if deal_II_dimension < 3
-    template
-    void
-    GridGenerator::merge_triangulations (const Triangulation<deal_II_dimension,deal_II_dimension+1> &triangulation_1,
-                     const Triangulation<deal_II_dimension,deal_II_dimension+1> &triangulation_2,
-                     Triangulation<deal_II_dimension,deal_II_dimension+1>       &result);
-#endif
-    
+  
+  
+  
+  
 #if deal_II_dimension > 1
   template void
     GridGenerator::
     laplace_transformation<deal_II_dimension> (Triangulation<deal_II_dimension> &,
                                               const std::map<unsigned int,Point<deal_II_dimension> > &);
 #endif
-
-#if deal_II_dimension != 3
-  template void
-    GridGenerator::hyper_cube<deal_II_dimension, deal_II_dimension+1> (
-      Triangulation<deal_II_dimension,deal_II_dimension+1> &, const double, const double);
-  template void
-    GridGenerator::hyper_rectangle<deal_II_dimension,deal_II_dimension+1> (
-      Triangulation<deal_II_dimension,deal_II_dimension+1> &,
-      const Point<deal_II_dimension+1>&, const Point<deal_II_dimension+1>&,
-      const bool);
-
-#endif
+  
+  
  }
 
index 215a5e4ad606f745c1ce7bd3594398910055583f..d1c0ce6f80d49ef4d119481cc24c4327d8f322e9 100644 (file)
@@ -1236,6 +1236,16 @@ unsigned int GridOut::n_boundary_lines (const Triangulation<1,2> &) const
   return 0;
 }
 
+unsigned int GridOut::n_boundary_faces (const Triangulation<1,3> &) const
+{
+  return 0;
+}
+
+unsigned int GridOut::n_boundary_lines (const Triangulation<1,3> &) const
+{
+  return 0;
+}
+
 unsigned int GridOut::n_boundary_lines (const Triangulation<2> &) const
 {
   return 0;
@@ -1298,6 +1308,13 @@ void GridOut::write_msh_faces (const Triangulation<1,2> &,
   return;
 }
 
+void GridOut::write_msh_faces (const Triangulation<1,3> &,
+                              const unsigned int,
+                              std::ostream &) const
+{
+  return;
+}
+
 
 void GridOut::write_msh_lines (const Triangulation<1> &,
                               const unsigned int,
@@ -1314,6 +1331,14 @@ void GridOut::write_msh_lines (const Triangulation<1,2> &,
 }
 
 
+void GridOut::write_msh_lines (const Triangulation<1,3> &,
+                              const unsigned int,
+                              std::ostream &) const
+{
+  return;
+}
+
+
 void GridOut::write_msh_lines (const Triangulation<2> &,
                               const unsigned int,
                               std::ostream &) const
@@ -1412,6 +1437,13 @@ void GridOut::write_ucd_faces (const Triangulation<1,2> &,
   return;
 }
 
+void GridOut::write_ucd_faces (const Triangulation<1,3> &,
+                              const unsigned int,
+                              std::ostream &) const
+{
+  return;
+}
+
 void GridOut::write_ucd_lines (const Triangulation<1> &,
                               const unsigned int,
                               std::ostream &) const
@@ -1427,6 +1459,14 @@ void GridOut::write_ucd_lines (const Triangulation<1,2> &,
 }
 
 
+void GridOut::write_ucd_lines (const Triangulation<1,3> &,
+                              const unsigned int,
+                              std::ostream &) const
+{
+  return;
+}
+
+
 void GridOut::write_ucd_lines (const Triangulation<2> &,
                               const unsigned int,
                               std::ostream &) const
index 250bf542452b9e62cee1185bed477e7c86a5eae7..b716edc98025d61eb79046426ba9cfd70486f12c 100644 (file)
@@ -58,10 +58,15 @@ for (deal_II_dimension : DIMENSIONS)
     template void GridOut::write_ucd
       (const Triangulation<deal_II_dimension, deal_II_dimension+1> &,
        std::ostream &) const;
-    template void GridOut::write_gnuplot
+   template void GridOut::write_gnuplot
       (const Triangulation<deal_II_dimension,deal_II_dimension+1>&,
        std::ostream&,
        const Mapping<deal_II_dimension,deal_II_dimension+1>*) const;
+#endif
+#if deal_II_dimension == 3
+   template void GridOut::write_ucd
+     (const Triangulation<1, 3> &,
+      std::ostream &) const;
 #endif
   }
 
index c0046989cccea60aa9aac671e973f08c7da60296..7dad1446939022760b1f8449b34d6cdb35d7db07 100644 (file)
@@ -779,7 +779,7 @@ namespace GridTools
 
 
   template <int dim, template <int, int> class Container, int spacedim>
-  std::pair<typename Container<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+  std::pair<typename Container<dim,spacedim>::active_cell_iterator, Point<dim> >
   find_active_cell_around_point (const Mapping<dim,spacedim>   &mapping,
                                 const Container<dim,spacedim> &container,
                                 const Point<spacedim>     &p)
@@ -792,7 +792,7 @@ namespace GridTools
                                     // max. deviation of 1e-10
     double best_distance = 1e-10;
     int    best_level = -1;
-    std::pair<cell_iterator, Point<spacedim> > best_cell;
+    std::pair<cell_iterator, Point<dim> > best_cell;
 
                                     // Find closest vertex and determine
                                     // all adjacent cells
@@ -807,27 +807,35 @@ namespace GridTools
 
     for(; cell != endc; ++cell)
       {
-       const Point<spacedim> p_cell = mapping.transform_real_to_unit_cell(*cell, p);
-
-                                        // calculate the infinity norm of
-                                        // the distance vector to the unit cell.
-       const double dist = GeometryInfo<dim>::distance_to_unit_cell(p_cell);
-
-                                        // We compare if the point is inside the
-                                        // unit cell (or at least not too far
-                                        // outside). If it is, it is also checked
-                                        // that the cell has a more refined state
-       if (dist < best_distance ||
-           (dist == best_distance && (*cell)->level() > best_level))
+       try
          {
-           best_distance = dist;
-           best_level    = (*cell)->level();
-           best_cell     = std::make_pair(*cell, p_cell);
+           const Point<dim> p_cell = mapping.transform_real_to_unit_cell(*cell, p);
+
+                                            // calculate the infinity norm of
+                                            // the distance vector to the unit cell.
+           const double dist = GeometryInfo<dim>::distance_to_unit_cell(p_cell);
+
+                                            // We compare if the point is inside the
+                                            // unit cell (or at least not too far
+                                            // outside). If it is, it is also checked
+                                            // that the cell has a more refined state
+           if (dist < best_distance ||
+               (dist == best_distance && (*cell)->level() > best_level))
+             {
+               best_distance = dist;
+               best_level    = (*cell)->level();
+               best_cell     = std::make_pair(*cell, p_cell);
+             }
          }
+       catch (typename MappingQ1<dim,spacedim>::ExcTransformationFailed &)
+         {
+//TODO: Maybe say something
+         }
+
       }
 
     Assert (best_cell.first.state() == IteratorState::valid,
-           ExcPointNotFound<dim>(p));
+           ExcPointNotFound<spacedim>(p));
 
     return best_cell;
   }
@@ -835,7 +843,7 @@ namespace GridTools
 
 
   template <int dim, int spacedim>
-  std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<spacedim> >
+  std::pair<typename hp::DoFHandler<dim,spacedim>::active_cell_iterator, Point<dim> >
   find_active_cell_around_point (const hp::MappingCollection<dim,spacedim>   &mapping,
                                 const hp::DoFHandler<dim,spacedim> &container,
                                 const Point<spacedim>     &p)
@@ -848,7 +856,7 @@ namespace GridTools
 
     typedef typename hp::DoFHandler<dim,spacedim>::active_cell_iterator cell_iterator;
 
-    std::pair<cell_iterator, Point<spacedim> > best_cell;
+    std::pair<cell_iterator, Point<dim> > best_cell;
                                     //If we have only one element in the MappingCollection,
                                     //we use find_active_cell_around_point using only one
                                     //mapping.
@@ -879,7 +887,7 @@ namespace GridTools
 
         for(; cell != endc; ++cell)
           {
-           const Point<spacedim> p_cell
+           const Point<dim> p_cell
              = mapping[(*cell)->active_fe_index()].transform_real_to_unit_cell(*cell, p);
 
                                             // calculate the infinity norm of
@@ -900,7 +908,7 @@ namespace GridTools
          }
 
        Assert (best_cell.first.state() == IteratorState::valid,
-               ExcPointNotFound<dim>(p));
+               ExcPointNotFound<spacedim>(p));
       }
     return best_cell;
   }
@@ -1771,6 +1779,17 @@ namespace GridTools
       }
 
 
+
+      void fix_up_faces (const dealii::Triangulation<1,1>::cell_iterator &,
+                        dealii::internal::int2type<1>,
+                        dealii::internal::int2type<1>)
+      {
+                                        // nothing to do for the faces of
+                                        // cells in 1d
+      }
+
+      
+      
                                       // possibly fix up the faces of
                                       // a cell by moving around its
                                       // mid-points
@@ -1830,28 +1849,14 @@ namespace GridTools
       }
 
 
-      template <int spacedim>
-      void fix_up_faces (const typename dealii::Triangulation<1,spacedim>::cell_iterator &,
-                        dealii::internal::int2type<1>,
-                        dealii::internal::int2type<spacedim>)
-      {
-                                        // nothing to do for the faces of
-                                        // cells in 1d
-      }
-
-
-      void fix_up_faces (const dealii::Triangulation<1,1>::cell_iterator &,
-                        dealii::internal::int2type<1>,
-                        dealii::internal::int2type<1>)
-      {
-                                        // nothing to do for the faces of
-                                        // cells in 1d
-      }
+      
+      
     }
   }
 
 
 
+
   template <int dim, int spacedim>
   typename Triangulation<dim,spacedim>::DistortedCellList
 
index 7f7e2b67df86c023832b275ae4a3f7c54bc1e4b9..e9da14bd40f5440bafdabd77c29d71a82122af3d 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011 by the deal.II authors
+//    Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 
 
 
-for (X : TRIANGULATION_AND_DOFHANDLERS; deal_II_dimension : DIMENSIONS)
+for (X : TRIANGULATION_AND_DOFHANDLERS; deal_II_dimension : DIMENSIONS ; deal_II_space_dimension : SPACE_DIMENSIONS)
 {
+  
+#if deal_II_dimension <= deal_II_space_dimension
   namespace GridTools \{
 
   template
     unsigned int
     find_closest_vertex (const X &,
-                                   const Point<deal_II_dimension> &);
+                        const Point<deal_II_space_dimension> &);
 
   template
     std::vector<X::active_cell_iterator>
     find_cells_adjacent_to_vertex(const X &,
-                                            const unsigned int);
-
+                                 const unsigned int);
   template
     X::active_cell_iterator
     find_active_cell_around_point (const X &,
-                                             const Point<deal_II_dimension> &p);
+                                  const Point<deal_II_space_dimension> &p);
 
   template
     std::pair<X::active_cell_iterator, Point<deal_II_dimension> >
-    find_active_cell_around_point (const Mapping<deal_II_dimension> &,
-                                             const X &,
-                                             const Point<deal_II_dimension> &);
+    find_active_cell_around_point (const Mapping<deal_II_dimension, deal_II_space_dimension> &,
+                                  const X &,
+                                  const Point<deal_II_space_dimension> &);
 
   template
     std::list<std::pair<X::cell_iterator, X::cell_iterator> >
-
     get_finest_common_cells (const X &mesh_1,
-                            const X &mesh_2);
+                            const X &mesh_2);
 
 
   template
     bool
     have_same_coarse_mesh (const X &mesh_1,
-                                     const X &mesh_2);
+                          const X &mesh_2);
 
   \}
+
+  #endif
 }
 
 
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
   {
+#if deal_II_dimension <= deal_II_space_dimension
     namespace GridTools \{
 
     template
       double
-      diameter<deal_II_dimension> (const Triangulation<deal_II_dimension> &);
-
-#if deal_II_dimension < 3
-    template
-      double
-      diameter<deal_II_dimension, deal_II_dimension+1> (const Triangulation<deal_II_dimension, deal_II_dimension+1> &);
-#endif
+      diameter
+      (const Triangulation<deal_II_dimension, deal_II_space_dimension> &);
 
     template
       double
-      volume<deal_II_dimension> (const Triangulation<deal_II_dimension> &,
-                                           const Mapping<deal_II_dimension> &);
-
-#if deal_II_dimension < 3
+      volume
+      (const Triangulation<deal_II_dimension, deal_II_space_dimension> &,
+       const Mapping<deal_II_dimension, deal_II_space_dimension> &);
+    
     template
-      double
-      volume<deal_II_dimension, deal_II_dimension+1> (const Triangulation<deal_II_dimension, deal_II_dimension+1> &,
-                                                                const Mapping<deal_II_dimension, deal_II_dimension+1> &);
-#endif
+      void delete_unused_vertices (std::vector<Point<deal_II_space_dimension> > &,
+                                  std::vector<CellData<deal_II_dimension> > &,
+                                  SubCellData &);
 
     template
-      void delete_unused_vertices (std::vector<Point<deal_II_dimension> > &,
-                                             std::vector<CellData<deal_II_dimension> > &,
-                                             SubCellData &);
+      void delete_duplicated_vertices (std::vector<Point<deal_II_space_dimension> > &,
+                                      std::vector<CellData<deal_II_dimension> > &,
+                                      SubCellData &,
+                                      std::vector<unsigned int> &,
+                                      double);
 
     template
-      void delete_duplicated_vertices (std::vector<Point<deal_II_dimension> > &,
-                                                 std::vector<CellData<deal_II_dimension> > &,
-                                                 SubCellData &,
-                                                 std::vector<unsigned int> &,
-                                                 double);
-
-    template
-      void shift<deal_II_dimension> (const Point<deal_II_dimension> &,
-                                               Triangulation<deal_II_dimension> &);
+      void shift<deal_II_dimension> (const Point<deal_II_space_dimension> &,
+                                               Triangulation<deal_II_dimension, deal_II_space_dimension> &);
 
     template
       void scale<deal_II_dimension> (const double,
-                                               Triangulation<deal_II_dimension> &);
+                                    Triangulation<deal_II_dimension, deal_II_space_dimension> &);
 
     template
-      std::pair<hp::DoFHandler<deal_II_dimension>::active_cell_iterator, Point<deal_II_dimension> >
-      find_active_cell_around_point (const hp::MappingCollection<deal_II_dimension> &,
-                                               const hp::DoFHandler<deal_II_dimension> &,
-                                               const Point<deal_II_dimension> &);
-
-    template
-      void
-
-      get_face_connectivity_of_cells (const Triangulation<deal_II_dimension> &triangulation,
-                                     SparsityPattern          &cell_connectivity);
-
-#if deal_II_dimension < 3
-    template
-      void
+      void get_face_connectivity_of_cells
+      (const Triangulation<deal_II_dimension, deal_II_space_dimension> &triangulation,
+       SparsityPattern          &cell_connectivity);
 
-      get_face_connectivity_of_cells (const Triangulation<deal_II_dimension,deal_II_dimension+1> &triangulation,
-                                     SparsityPattern          &cell_connectivity);
-#endif
 
     template
-      void
-      partition_triangulation (const unsigned int,
-                                         Triangulation<deal_II_dimension> &);
-
-    template
-      void
-      partition_triangulation (const unsigned int,
-                                         const SparsityPattern &,
-                                         Triangulation<deal_II_dimension> &);
-#if deal_II_dimension < 3
+      void partition_triangulation (const unsigned int,
+                              Triangulation<deal_II_dimension, deal_II_space_dimension> &);
+    
     template
-      void
-      partition_triangulation (const unsigned int,
-                                         Triangulation<deal_II_dimension,deal_II_dimension+1> &);
+      void partition_triangulation (const unsigned int,
+                                   const SparsityPattern &,
+                                   Triangulation<deal_II_dimension, deal_II_space_dimension> &);
 
     template
-      void
-      partition_triangulation (const unsigned int,
-                                         const SparsityPattern &,
-                                         Triangulation<deal_II_dimension,deal_II_dimension+1> &);
-#endif
+      std::pair<hp::DoFHandler<deal_II_dimension, deal_II_space_dimension>::active_cell_iterator,
+               Point<deal_II_dimension> >
+      find_active_cell_around_point
+      (const hp::MappingCollection<deal_II_dimension, deal_II_space_dimension> &,
+       const hp::DoFHandler<deal_II_dimension, deal_II_space_dimension> &,
+       const Point<deal_II_space_dimension> &);
+    
 
+    
     template
-      void
-
-      get_subdomain_association (const Triangulation<deal_II_dimension>  &,
-                                std::vector<types::subdomain_id_t> &);
+      void get_subdomain_association (const Triangulation<deal_II_dimension, deal_II_space_dimension>  &,
+                                     std::vector<types::subdomain_id_t> &);
 
     template
-      unsigned int
-
-      count_cells_with_subdomain_association (const Triangulation<deal_II_dimension> &,
-                                             const types::subdomain_id_t);
-
-
+    unsigned int count_cells_with_subdomain_association(
+      const Triangulation<deal_II_dimension, deal_II_space_dimension> &,
+      const types::subdomain_id_t);
+    
     template
       double
-      minimal_cell_diameter (const Triangulation<deal_II_dimension> &triangulation);
-
+      minimal_cell_diameter (const Triangulation<deal_II_dimension, deal_II_space_dimension> &triangulation);
+    
     template
       double
-      maximal_cell_diameter (const Triangulation<deal_II_dimension> &triangulation);
+      maximal_cell_diameter (const Triangulation<deal_II_dimension, deal_II_space_dimension> &triangulation);
 
     template
       void
-      create_union_triangulation (const Triangulation<deal_II_dimension> &triangulation_1,
-                                            const Triangulation<deal_II_dimension> &triangulation_2,
-                                            Triangulation<deal_II_dimension>       &result);
-
+      create_union_triangulation (
+       const Triangulation<deal_II_dimension, deal_II_space_dimension> &triangulation_1,
+       const Triangulation<deal_II_dimension, deal_II_space_dimension> &triangulation_2,
+       Triangulation<deal_II_dimension, deal_II_space_dimension>       &result);
+#if deal_II_dimension == deal_II_space_dimension  
     template
-      Triangulation<deal_II_dimension,deal_II_dimension>::DistortedCellList
-
-      fix_up_distorted_child_cells (const Triangulation<deal_II_dimension,deal_II_dimension>::DistortedCellList &distorted_cells,
-                                   Triangulation<deal_II_dimension,deal_II_dimension> &triangulation);
-
-
-
-#if deal_II_dimension != 3
-
-    template
-      void delete_unused_vertices (std::vector<Point<deal_II_dimension+1> > &,
-                                             std::vector<CellData<deal_II_dimension> > &,
-                                             SubCellData &);
-
-    template
-      void delete_duplicated_vertices (std::vector<Point<deal_II_dimension+1> > &,
-                                                 std::vector<CellData<deal_II_dimension> > &,
-                                                 SubCellData &,
-                                                 std::vector<unsigned int> &,
-                                                 double);
-
-    template
-      void shift<deal_II_dimension, deal_II_dimension+1> (const Point<deal_II_dimension+1> &,
-                                                                    Triangulation<deal_II_dimension, deal_II_dimension+1> &);
-
-    template
-      void scale<deal_II_dimension, deal_II_dimension+1> (const double,
-                                                                    Triangulation<deal_II_dimension, deal_II_dimension+1> &);
-
+      Triangulation<deal_II_dimension,deal_II_space_dimension>::DistortedCellList
+      fix_up_distorted_child_cells
+      (const Triangulation<deal_II_dimension,deal_II_space_dimension>::DistortedCellList &distorted_cells,
+       Triangulation<deal_II_dimension,deal_II_space_dimension> &triangulation);
 
 #endif
+    
+    \}
+#endif
 
 
+    
+  }
 
-#if deal_II_dimension < 3
-
-    template
-      std::list<std::pair<Triangulation<deal_II_dimension,deal_II_dimension+1>::cell_iterator, Triangulation<deal_II_dimension,deal_II_dimension+1>::cell_iterator> >
-
-      get_finest_common_cells (const Triangulation<deal_II_dimension,deal_II_dimension+1> &mesh_1,
-                              const Triangulation<deal_II_dimension,deal_II_dimension+1> &mesh_2);
-
-    template
-      std::list<std::pair<DoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator, DoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator> >
-
-      get_finest_common_cells (const DoFHandler<deal_II_dimension,deal_II_dimension+1> &mesh_1,
-                              const DoFHandler<deal_II_dimension,deal_II_dimension+1> &mesh_2);
-
-    template
-      std::list<std::pair<hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator, hp::DoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator> >
-
-      get_finest_common_cells (const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &mesh_1,
-                              const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &mesh_2);
 
-    template
-      std::list<std::pair<MGDoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator, MGDoFHandler<deal_II_dimension,deal_II_dimension+1>::cell_iterator> >
 
-      get_finest_common_cells (const MGDoFHandler<deal_II_dimension,deal_II_dimension+1> &mesh_1,
-                              const MGDoFHandler<deal_II_dimension,deal_II_dimension+1> &mesh_2);
-#endif
-    \}
-  }
 
-// TODO: Merge this and the next block by introducing a TRIA_AND_DOFHANDLER_TEMPLATES list.
-for (deal_II_dimension : DIMENSIONS)
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS; Container : TRIANGULATION_AND_DOFHANDLER_TEMPLATES)
   {
-  namespace GridTools \{
+#if deal_II_dimension <= deal_II_space_dimension
 #if deal_II_dimension != 1
-    template
-      std::map<  Triangulation<deal_II_dimension-1,deal_II_dimension>::cell_iterator,
-                Triangulation<deal_II_dimension>::face_iterator>
-      extract_boundary_mesh (const Triangulation<deal_II_dimension> &volume_mesh,
-                                       Triangulation<deal_II_dimension-1,deal_II_dimension>  &surface_mesh,
-                                       const std::set<types::boundary_id_t> &boundary_ids);
-#endif
-    \}
-  }
-
-for (deal_II_dimension : DIMENSIONS; Container : DOFHANDLER_TEMPLATES)
-  {
     namespace GridTools \{
 
-#if deal_II_dimension != 1
-    template
-      std::map<  Container<deal_II_dimension-1,deal_II_dimension>::cell_iterator,
-                Container<deal_II_dimension>::face_iterator>
-      extract_boundary_mesh (const Container<deal_II_dimension> &volume_mesh,
-                                       Container<deal_II_dimension-1,deal_II_dimension>  &surface_mesh,
-                                       const std::set<types::boundary_id_t> &boundary_ids);
+      template
+       std::map<  Container<deal_II_dimension-1,deal_II_space_dimension>::cell_iterator,
+                  Container<deal_II_dimension,deal_II_space_dimension>::face_iterator>
+      extract_boundary_mesh (const Container<deal_II_dimension, deal_II_space_dimension> &mesh,
+                            Container<deal_II_dimension-1,deal_II_space_dimension>  &boundary_mesh,
+                            const std::set<types::boundary_id_t> &boundary_ids);
+      \}
 #endif
-  \}
+#endif
+
   }
index 77974e7cc1ebc6e463669899c883bd05883ba32c..75ae2750a0ea32b7f04fd557fbd6ca703687c08f 100644 (file)
@@ -47,9 +47,9 @@ namespace
 
 
 // specialization for grid==tria
-  template <int dim>
+  template <int dim, int spacedim>
   unsigned int
-  get_n_levels (const Triangulation<dim> &grid)
+  get_n_levels (const Triangulation<dim, spacedim> &grid)
   {
                                     // if GridClass==Triangulation, then
                                     // we can ask directly.
index fec730fd1d86a45a5c3d0565a794976e7cabf48b..cd766fd4f47cc90141ffb09d23394b8466650090 100644 (file)
@@ -12,8 +12,9 @@
 //---------------------------------------------------------------------------
 
 
-
-for (X : TRIANGULATION_AND_DOFHANDLERS; deal_II_dimension : DIMENSIONS)
-{
-  template class InterGridMap<X>;
-}
+for (X : TRIANGULATION_AND_DOFHANDLERS; deal_II_dimension : DIMENSIONS ; deal_II_space_dimension : SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
+    template class InterGridMap<X>;
+#endif
+  }
index f7d2484ba0654c0f69211dd0d5e6ee6c3435ff7b..30573328a8312988c7688a4f8ce891e2a20c8de4 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -9402,12 +9402,6 @@ Triangulation (const MeshSmoothing smooth_grid,
                check_for_distorted_cells(check_for_distorted_cells),
                vertex_to_boundary_id_map_1d (0)
 {
-  //Set default value at types::internal_face_boundary_id.
-  //Because this value is reserved for inner faces, we
-  //will never set this one to anything else.
-  //TODO This line vanishes, if we resolve the TODO in the get_boundary function
-  boundary[types::internal_face_boundary_id] = &straight_boundary;
-
   if (dim == 1)
     vertex_to_boundary_id_map_1d
       = new std::map<unsigned int, types::boundary_id_t>();
@@ -9517,14 +9511,8 @@ Triangulation<dim, spacedim>::get_boundary (const types::boundary_id_t number) c
     {
       //if we have not found an entry
       //connected with number, we return
-      //straight_boundary, stored at types::internal_face_boundary_id
-      it = boundary.find(types::internal_face_boundary_id);
-
-      return *(it->second);
-     // TODO: This should get returned, atm there are some errors
-     // connected to Boundary<1,3>. If this issue is resolved, the TODOs in
-     // the constructor and clear_despite_subscriptions can also get resolved.
-     //return straight_boundary;
+      //straight_boundary
+         return straight_boundary;
     }
 }
 
@@ -12105,7 +12093,7 @@ unsigned int Triangulation<dim, spacedim>::n_lines () const
 }
 
 
-
+//TODO: Merge the following 6 functions somehow
 template <>
 unsigned int Triangulation<1,1>::n_raw_lines (const unsigned int level) const
 {
@@ -12139,6 +12127,21 @@ unsigned int Triangulation<1,2>::n_raw_lines () const
 }
 
 
+template <>
+unsigned int Triangulation<1,3>::n_raw_lines (const unsigned int level) const
+{
+  Assert(level < n_levels(), ExcIndexRange(level,0,n_levels()));
+  return levels[level]->cells.cells.size();
+}
+
+template <>
+unsigned int Triangulation<1,3>::n_raw_lines () const
+{
+  Assert(false, ExcNotImplemented());
+  return 0;
+}
+
+
 
 template <int dim, int spacedim>
 unsigned int Triangulation<dim, spacedim>::n_raw_lines (const unsigned int) const
@@ -12225,6 +12228,8 @@ unsigned int Triangulation<1,1>::n_active_quads () const
 }
 
 
+
+
 template <>
 unsigned int Triangulation<1,2>::n_quads () const
 {
@@ -12267,6 +12272,49 @@ unsigned int Triangulation<1,2>::n_active_quads () const
 }
 
 
+template <>
+unsigned int Triangulation<1,3>::n_quads () const
+{
+  return 0;
+}
+
+
+template <>
+unsigned int Triangulation<1,3>::n_quads (const unsigned int) const
+{
+  return 0;
+}
+
+
+template <>
+unsigned int Triangulation<1,3>::n_raw_quads (const unsigned int) const
+{
+  return 0;
+}
+
+
+template <>
+unsigned int Triangulation<1,3>::n_raw_hexs (const unsigned int) const
+{
+  return 0;
+}
+
+
+template <>
+unsigned int Triangulation<1,3>::n_active_quads (const unsigned int) const
+{
+  return 0;
+}
+
+
+template <>
+unsigned int Triangulation<1,3>::n_active_quads () const
+{
+  return 0;
+}
+
+
+
 template <int dim, int spacedim>
 unsigned int Triangulation<dim, spacedim>::n_quads () const
 {
@@ -12467,6 +12515,12 @@ unsigned int Triangulation<1,2>::max_adjacent_cells () const
 }
 
 
+template <>
+unsigned int Triangulation<1,3>::max_adjacent_cells () const
+{
+  return 2;
+}
+
 
 template <int dim, int spacedim>
 unsigned int Triangulation<dim, spacedim>::max_adjacent_cells () const
@@ -12569,9 +12623,6 @@ Triangulation<dim, spacedim>::clear_despite_subscriptions()
   vertices_used.clear ();
 
   boundary.clear();
-  //TODO: This is connected with the TODO in get_boundary and vanishes, if
-  //this TODO has been dealt with.
-  boundary[types::internal_face_boundary_id] = &straight_boundary;
 
   number_cache = internal::Triangulation::NumberCache<dim>();
 }
@@ -12963,7 +13014,7 @@ void Triangulation<dim, spacedim>::fix_coarsen_flags ()
 }
 
 
-
+//TODO: merge the following 3 functions since they are the same
 template <>
 bool Triangulation<1,1>::prepare_coarsening_and_refinement ()
 {
@@ -13004,6 +13055,27 @@ bool Triangulation<1,2>::prepare_coarsening_and_refinement ()
 }
 
 
+template <>
+bool Triangulation<1,3>::prepare_coarsening_and_refinement ()
+{
+                                  // save the flags to determine
+                                  // whether something was changed in
+                                  // the course of this function
+  std::vector<bool> flags_before;
+  save_coarsen_flags (flags_before);
+
+                                  // do nothing in 1d, except setting
+                                  // the coarsening flags correctly
+  fix_coarsen_flags ();
+
+  std::vector<bool> flags_after;
+  save_coarsen_flags (flags_after);
+
+  return (flags_before != flags_after);
+}
+
+
+
 
 namespace
 {
@@ -14657,9 +14729,9 @@ Triangulation<dim, spacedim>::remove_refinement_listener (RefinementListener &li
 // TriaAccessor<1,1,3> uses it. We could instead instantiate
 // Triangulation<1,3>, but that requires a lot more specializations of
 // functions that currently only exist for <1,1> and <1,2>
-template
-const Boundary<1,3> &
-Triangulation<1,3>::get_boundary (const types::boundary_id_t number) const;
+// template
+// const Boundary<1,3> &
+// Triangulation<1,3>::get_boundary (const types::boundary_id_t number) const;
 
 DEAL_II_NAMESPACE_CLOSE
 
index 6d33e354396f67c18e7b88c91f00d338fe2c0573..16a72fdfbe3ad93960e6ff46a6c8b89c02756e22 100644 (file)
 //---------------------------------------------------------------------------
 
 
-
-for (deal_II_dimension : DIMENSIONS)
-{
-  template class Triangulation<deal_II_dimension>;
-
-#if deal_II_dimension < 3
-  template class Triangulation<deal_II_dimension,deal_II_dimension+1>;
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
+    template class Triangulation<deal_II_dimension, deal_II_space_dimension>;
 #endif
-}
+  }
index 49bc93cc0e40a908e4d9ea5ff4c88ccd4e51f3de..a55a8dd7de8045756a854df4a3153fd11bb99586 100644 (file)
@@ -1084,13 +1084,6 @@ bool CellAccessor<1>::point_inside (const Point<1> &p) const
 
 
 
-template <>
-bool CellAccessor<1,2>::point_inside (const Point<2> &) const
-{
-  Assert (false, ExcNotImplemented());
-  return 0;
-}
-
 
 
 
@@ -1153,12 +1146,7 @@ bool CellAccessor<2>::point_inside (const Point<2> &p) const
 }
 
 
-template <>
-bool CellAccessor<2,3>::point_inside (const Point<3> &) const
-{
-  Assert (false, ExcNotImplemented());
-  return 0;
-}
+
 
 
 
@@ -1208,8 +1196,48 @@ bool CellAccessor<3>::point_inside (const Point<3> &p) const
 
 
 
+
 /*------------------------ Functions: CellAccessor<dim,spacedim> -----------------------*/
 
+                                // For codim>0 we proceed as follows:
+                                // 1) project point onto manifold and
+                                // 2) transform to the unit cell with a Q1 mapping
+                                // 3) then check if inside unit cell
+template<int dim, int spacedim>
+template<int dim_,int spacedim_ >
+bool CellAccessor<dim,spacedim>::
+point_inside_codim(const Point<spacedim_> &p) const
+{
+  const TriaRawIterator< CellAccessor<dim_,spacedim_> > cell_iterator (*this);
+  const Point< dim_ > p_unit =
+    StaticMappingQ1<dim_,spacedim_>::mapping.transform_real_to_unit_cell(cell_iterator, p);
+
+  return GeometryInfo< dim_ >::is_inside_unit_cell(p_unit);
+
+}
+
+
+
+template <>
+bool CellAccessor<1,2>::point_inside (const Point<2> &p) const
+{
+  return point_inside_codim<1,2>(p);
+}
+
+
+template <>
+bool CellAccessor<1,3>::point_inside (const Point<3> &p) const
+{
+  return point_inside_codim<1,3>(p);
+}
+
+
+template <>
+bool CellAccessor<2,3>::point_inside (const Point<3> &p) const
+{
+  return point_inside_codim<2,3>(p);
+}
+
 
 
 template <int dim, int spacedim>
index 7c4aba537f737e9cf913c9602e9a1d1cb77ff5bf..1aed96c4f72adbf572c10e9c93e046bd3ecba459 100644 (file)
@@ -54,6 +54,7 @@ for (deal_II_dimension : DIMENSIONS)
     template class TriaRawIterator<TriaAccessor<3, deal_II_dimension, deal_II_dimension> >;
     template class TriaIterator<TriaAccessor<3, deal_II_dimension, deal_II_dimension> >;
     template class TriaActiveIterator<TriaAccessor<3, deal_II_dimension, deal_II_dimension> >;
+    template class CellAccessor<1, 3>;
 #endif
 
 #if deal_II_dimension == 1
@@ -62,6 +63,8 @@ for (deal_II_dimension : DIMENSIONS)
 
     template class TriaAccessor<1,deal_II_dimension,2>;
     template class TriaAccessor<1,deal_II_dimension,3>;
+    
+
 #endif
 #if deal_II_dimension == 2
     template class TriaAccessorBase<1,deal_II_dimension,3>;
@@ -90,4 +93,4 @@ for (deal_II_dimension : DIMENSIONS)
 #endif
   }
 
-
+    
index 02617daa4e5a45565d72d7e40fd66c56b1ce4b34..a76f67f6c1e4c1847cb7aa674f1d42350c27af00 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -150,6 +150,27 @@ get_intermediate_points_on_face (const Triangulation<1,2>::face_iterator &,
 
 
 
+template <>
+Point<3>
+Boundary<1,3>::
+get_new_point_on_face (const Triangulation<1,3>::face_iterator &) const
+{
+  Assert (false, ExcImpossibleInDim(1));
+  return Point<3>();
+}
+
+
+template <>
+void
+Boundary<1,3>::
+get_intermediate_points_on_face (const Triangulation<1,3>::face_iterator &,
+                                std::vector<Point<3> > &) const
+{
+  Assert (false, ExcImpossibleInDim(1));
+}
+
+
+
 
 template <int dim, int spacedim>
 Tensor<1,spacedim>
@@ -507,6 +528,16 @@ normal_vector (const Triangulation<1,2>::face_iterator &,
 }
 
 
+template <>
+Tensor<1,3>
+StraightBoundary<1,3>::
+normal_vector (const Triangulation<1,3>::face_iterator &,
+              const Point<3> &) const
+{
+  Assert (false, ExcNotImplemented());
+  return Tensor<1,3>();
+}
+
 
 namespace internal
 {
@@ -655,6 +686,16 @@ get_normals_at_vertices (const Triangulation<1,2>::face_iterator &,
 }
 
 
+template <>
+void
+StraightBoundary<1,3>::
+get_normals_at_vertices (const Triangulation<1,3>::face_iterator &,
+                        Boundary<1,3>::FaceVertexNormals &) const
+{
+  Assert (false, ExcNotImplemented());
+}
+
+
 
 template <>
 void
@@ -868,6 +909,18 @@ namespace internal
 
 
 
+
+
+template <>
+Point<3>
+StraightBoundary<1,3>::
+project_to_surface (const Triangulation<1, 3>::quad_iterator &,
+                   const Point<3>  &y) const
+{
+  return y;
+}
+
+//TODO[SP]: This is just a horrible way out to make it compile in codim 2.
 template <int dim, int spacedim>
 Point<spacedim>
 StraightBoundary<dim, spacedim>::
index d404a8514dd13070b6877290858563f969f6de39..7d3392dd1d345441d41d30ff5f7e042d37eeb804 100644 (file)
 //
 //---------------------------------------------------------------------------
 
-for (deal_II_dimension : DIMENSIONS)
-  {
-    template class Boundary<deal_II_dimension>;
-    template class StraightBoundary<deal_II_dimension>;
 
-#if deal_II_dimension == 1 || deal_II_dimension == 2
-    template class Boundary<deal_II_dimension, deal_II_dimension+1>;
-    template class StraightBoundary<deal_II_dimension, deal_II_dimension+1>;
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension       
+    template class Boundary<deal_II_dimension, deal_II_space_dimension>;
+    template class StraightBoundary<deal_II_dimension, deal_II_space_dimension>;
 #endif
   }
 
 
+
index 35cff4ab4d84dc4258627a642c98a7eebe2c4ef8..887a0ab14f1853f4a65f26cc56aa43f15de9e7f9 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 by the deal.II authors
+//    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -25,20 +25,20 @@ DEAL_II_NAMESPACE_OPEN
 
 
 
-template <int dim>
-CylinderBoundary<dim>::CylinderBoundary (const double radius,
+template <int dim, int spacedim>
+CylinderBoundary<dim,spacedim>::CylinderBoundary (const double radius,
                                         const unsigned int axis)
                :
                radius(radius),
                direction (get_axis_vector (axis)),
-               point_on_axis (Point<dim>())
+               point_on_axis (Point<spacedim>())
 {}
 
 
-template <int dim>
-CylinderBoundary<dim>::CylinderBoundary (const double     radius,
-                                        const Point<dim> direction,
-                                        const Point<dim> point_on_axis)
+template <int dim, int spacedim>
+CylinderBoundary<dim,spacedim>::CylinderBoundary (const double     radius,
+                                        const Point<spacedim> direction,
+                                        const Point<spacedim> point_on_axis)
                :
                radius(radius),
                direction (direction / direction.norm()),
@@ -46,26 +46,26 @@ CylinderBoundary<dim>::CylinderBoundary (const double     radius,
 {}
 
 
-template <int dim>
-Point<dim>
-CylinderBoundary<dim>::get_axis_vector (const unsigned int axis)
+template <int dim, int spacedim>
+Point<spacedim>
+CylinderBoundary<dim,spacedim>::get_axis_vector (const unsigned int axis)
 {
   Assert (axis < dim, ExcIndexRange (axis, 0, dim));
 
-  Point<dim> axis_vector;
+  Point<spacedim> axis_vector;
   axis_vector[axis] = 1;
   return axis_vector;
 }
 
 
 
-template <int dim>
-Point<dim>
-CylinderBoundary<dim>::
-get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const
+template <int dim, int spacedim>
+Point<spacedim>
+CylinderBoundary<dim,spacedim>::
+get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const
 {
                                   // compute a proposed new point
-  const Point<dim> middle = StraightBoundary<dim>::get_new_point_on_line (line);
+  const Point<spacedim> middle = StraightBoundary<dim,spacedim>::get_new_point_on_line (line);
 
                                   // we then have to project this
                                   // point out to the given radius
@@ -73,7 +73,7 @@ get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) c
                                   // have to take into account the
                                   // offset point_on_axis and the
                                   // direction of the axis
-  const Point<dim> vector_from_axis = (middle-point_on_axis) -
+  const Point<spacedim> vector_from_axis = (middle-point_on_axis) -
                                      ((middle-point_on_axis) * direction) * direction;
                                   // scale it to the desired length
                                   // and put everything back
@@ -97,8 +97,9 @@ get_new_point_on_quad (const Triangulation<3>::quad_iterator &quad) const
   const Point<3> middle = StraightBoundary<3>::get_new_point_on_quad (quad);
 
                                   // same algorithm as above
-  const unsigned int dim = 3;
-  const Point<dim> vector_from_axis = (middle-point_on_axis) -
+  const unsigned int spacedim = 3;
+
+  const Point<spacedim> vector_from_axis = (middle-point_on_axis) -
                                      ((middle-point_on_axis) * direction) * direction;
   if (vector_from_axis.norm() <= 1e-10 * middle.norm())
     return middle;
@@ -108,24 +109,42 @@ get_new_point_on_quad (const Triangulation<3>::quad_iterator &quad) const
            point_on_axis);
 }
 
+template<>
+Point<3>
+CylinderBoundary<2,3>::
+get_new_point_on_quad (const Triangulation<2,3>::quad_iterator &quad) const
+{
+  const Point<3> middle = StraightBoundary<2,3>::get_new_point_on_quad (quad);
+
+                                  // same algorithm as above
+  const unsigned int spacedim = 3;
+  const Point<spacedim> vector_from_axis = (middle-point_on_axis) -
+                                     ((middle-point_on_axis) * direction) * direction;
+  if (vector_from_axis.norm() <= 1e-10 * middle.norm())
+    return middle;
+  else
+    return (vector_from_axis / vector_from_axis.norm() * radius +
+           ((middle-point_on_axis) * direction) * direction +
+           point_on_axis);
+}
 
 
-template <int dim>
-Point<dim>
-CylinderBoundary<dim>::
-get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &) const
+template <int dim, int spacedim>
+Point<spacedim>
+CylinderBoundary<dim,spacedim>::
+get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &) const
 {
   Assert (false, ExcImpossibleInDim(dim));
-  return Point<dim>();
+  return Point<spacedim>();
 }
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-CylinderBoundary<dim>::get_intermediate_points_on_line (
-  const typename Triangulation<dim>::line_iterator &line,
-  std::vector<Point<dim> > &points) const
+CylinderBoundary<dim,spacedim>::get_intermediate_points_on_line (
+  const typename Triangulation<dim,spacedim>::line_iterator &line,
+  std::vector<Point<spacedim> > &points) const
 {
   if (points.size()==1)
     points[0]=get_new_point_on_line(line);
@@ -134,12 +153,12 @@ CylinderBoundary<dim>::get_intermediate_points_on_line (
 }
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-CylinderBoundary<dim>::get_intermediate_points_between_points (
-  const Point<dim> &v0,
-  const Point<dim> &v1,
-  std::vector<Point<dim> > &points) const
+CylinderBoundary<dim,spacedim>::get_intermediate_points_between_points (
+  const Point<spacedim> &v0,
+  const Point<spacedim> &v1,
+  std::vector<Point<spacedim> > &points) const
 {
   const unsigned int n=points.size();
   Assert(n>0, ExcInternalError());
@@ -147,13 +166,13 @@ CylinderBoundary<dim>::get_intermediate_points_between_points (
                                   // Do a simple linear interpolation
                                   // followed by projection, using
                                   // the same algorithm as above
-  const Point<dim> ds = (v1-v0) / (n+1);
+  const Point<spacedim> ds = (v1-v0) / (n+1);
 
   for (unsigned int i=0; i<n; ++i)
     {
-      const Point<dim> middle = v0 + (i+1)*ds;
+      const Point<spacedim> middle = v0 + (i+1)*ds;
 
-      const Point<dim> vector_from_axis = (middle-point_on_axis) -
+      const Point<spacedim> vector_from_axis = (middle-point_on_axis) -
                                          ((middle-point_on_axis) * direction) * direction;
       if (vector_from_axis.norm() <= 1e-10 * middle.norm())
        points[i] = middle;
@@ -198,11 +217,11 @@ CylinderBoundary<3>::get_intermediate_points_on_quad (
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 void
-CylinderBoundary<dim>::get_intermediate_points_on_quad (
-  const typename Triangulation<dim>::quad_iterator &,
-  std::vector<Point<dim> > &) const
+CylinderBoundary<dim,spacedim>::get_intermediate_points_on_quad (
+  const typename Triangulation<dim,spacedim>::quad_iterator &,
+  std::vector<Point<spacedim> > &) const
 {
   Assert (false, ExcImpossibleInDim(dim));
 }
@@ -221,17 +240,18 @@ get_normals_at_vertices (const Triangulation<1>::face_iterator &,
 
 
 
-template <int dim>
+
+template <int dim, int spacedim>
 void
-CylinderBoundary<dim>::
-get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
-                        typename Boundary<dim>::FaceVertexNormals &face_vertex_normals) const
+CylinderBoundary<dim,spacedim>::
+get_normals_at_vertices (const typename Triangulation<dim,spacedim>::face_iterator &face,
+                        typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const
 {
   for (unsigned int v=0; v<GeometryInfo<dim>::vertices_per_face; ++v)
     {
-      const Point<dim> vertex = face->vertex(v);
+      const Point<spacedim> vertex = face->vertex(v);
 
-      const Point<dim> vector_from_axis = (vertex-point_on_axis) -
+      const Point<spacedim> vector_from_axis = (vertex-point_on_axis) -
                                          ((vertex-point_on_axis) * direction) * direction;
 
       face_vertex_normals[v] = (vector_from_axis / vector_from_axis.norm());
@@ -240,9 +260,9 @@ get_normals_at_vertices (const typename Triangulation<dim>::face_iterator &face,
 
 
 
-template <int dim>
+template <int dim, int spacedim>
 double
-CylinderBoundary<dim>::get_radius () const
+CylinderBoundary<dim,spacedim>::get_radius () const
 {
   return radius;
 }
index 79b58d4f2ffc2eaa54673b61c0f6945c532fa04c..e175f58d3350089336ec5f0a1a8104a58a40d303 100644 (file)
@@ -22,6 +22,9 @@ for (deal_II_dimension : DIMENSIONS)
 
 #if deal_II_dimension != 3
     template class HyperBallBoundary<deal_II_dimension,deal_II_dimension+1>;
+#endif
+#if deal_II_dimension == 3
+   template class CylinderBoundary<deal_II_dimension-1,deal_II_dimension>;
 #endif
   }
 
index f1c819d171436c9919df1ae9c0b51424a9297826..e3ba39d82807d30abfce8d3f7d2b04d071defc5d 100644 (file)
@@ -2804,6 +2804,27 @@ namespace hp
   }
 
 
+template <>
+  unsigned int DoFHandler<1,3>::n_boundary_dofs () const
+  {
+    Assert(false,ExcNotImplemented());
+    return 0;
+  }
+
+  template <>
+  unsigned int DoFHandler<1,3>::n_boundary_dofs (const FunctionMap &) const
+  {
+    Assert(false,ExcNotImplemented());
+    return 0;
+  }
+
+  template <>
+  unsigned int DoFHandler<1,3>::n_boundary_dofs (const std::set<unsigned char> &) const
+  {
+    Assert(false,ExcNotImplemented());
+    return 0;
+  }
+  
 
   template<int dim, int spacedim>
   unsigned int DoFHandler<dim,spacedim>::n_boundary_dofs () const
@@ -3091,6 +3112,11 @@ namespace hp
   compute_line_dof_identities (std::vector<unsigned int> &) const
   {}
 
+  template <>
+  void
+  DoFHandler<1,3>::
+  compute_line_dof_identities (std::vector<unsigned int> &) const
+  {}
 
 
   template<int dim, int spacedim>
@@ -3320,7 +3346,11 @@ namespace hp
   compute_quad_dof_identities (std::vector<unsigned int> &) const
   {}
 
-
+  template <>
+  void
+  DoFHandler<1,3>::
+  compute_quad_dof_identities (std::vector<unsigned int> &) const
+  {}
 
   template <>
   void
@@ -3996,7 +4026,34 @@ namespace hp
   }
 
 
+template <>
+  void DoFHandler<1,3>::pre_refinement_action ()
+  {
+    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.
+    Assert (has_children.size () == 0, ExcInternalError ());
+    for (unsigned int i=0; i<levels.size(); ++i)
+      {
+       const unsigned int lines_on_level = tria->n_raw_lines(i);
+       std::vector<bool> *has_children_level =
+          new std::vector<bool> (lines_on_level);
+
+                                         // Check for each cell, if it has children.
+       std::transform (tria->levels[i]->cells.children.begin (),
+                       tria->levels[i]->cells.children.end (),
+                       has_children_level->begin (),
+                       std::bind2nd (std::not_equal_to<int>(), -1));
+
+       has_children.push_back (has_children_level);
+      }
+  }
+
 
+  
   template<int dim, int spacedim>
   void
   DoFHandler<dim,spacedim>::post_refinement_action ()
index 3443bdff2cd076c3f7608b424b4c2ddfa2ae21fa..7759611be3c570aa77f21b987ef41fa8faeafdfa 100644 (file)
@@ -20,5 +20,9 @@ for (deal_II_dimension : DIMENSIONS)
 #if deal_II_dimension != 3
     template class DoFHandler<deal_II_dimension, deal_II_dimension+1>;
 #endif
+
+#if deal_II_dimension == 3
+   template class DoFHandler<1, 3>;
+#endif
   \}
 }
index 43909314e920001fb5f9fb8c7f0c5a83f3bf432d..d8dabcc8bd35bd506e78b6043d21a85e00f504ed 100644 (file)
@@ -19,6 +19,9 @@ for (deal_II_dimension : DIMENSIONS)
 
 #if deal_II_dimension != 3
     template class FECollection<deal_II_dimension, deal_II_dimension+1>;
+#endif
+#if deal_II_dimension == 3
+    template class FECollection<1,3>;
 #endif
   \}
 }
index 4ebc684035dda623fe312010f35243c9b4cf5cb2..224b43ca485cee5a3818d2f73927795ea540faa2 100644 (file)
@@ -57,4 +57,27 @@ namespace hp
   template class FESubfaceValues<deal_II_dimension, deal_II_dimension+1>;
 \}
 #endif
+
+#if deal_II_dimension == 3
+
+namespace internal
+\{
+  namespace hp
+  \{
+    template class FEValuesBase<1,1,
+                                dealii::FEValues<1,3> >;
+    template class FEValuesBase<1,1-1,
+                                dealii::FEFaceValues<1,3> >;
+    template class FEValuesBase<1,1-1,
+                                dealii::FESubfaceValues<1,3> >;
+  \}
+\}
+
+namespace hp
+\{
+  template class FEValues<1, 3>;
+  template class FEFaceValues<1, 3>;
+  template class FESubfaceValues<1, 3>;
+\}
+#endif
 }
index 6b76bab2d76aba61ce1d966e58539c4ec17d3321..43d2362466e2decd2d1ab41f7c5cd91259b2ea49 100644 (file)
@@ -22,5 +22,10 @@ for (deal_II_dimension : DIMENSIONS)
     template class MappingCollection<deal_II_dimension,deal_II_dimension+1>;
     template struct StaticMappingQ1<deal_II_dimension,deal_II_dimension+1>;
 #endif
+
+#if deal_II_dimension == 3
+    template class MappingCollection<1,3>;
+    template struct StaticMappingQ1<1,3>;
+#endif
   \}
 }
index c218e046b9f00b0b735306f03013c019dde2f73d..8b8e1004ad6c239db9178398219e445bb4e1d6eb 100644 (file)
@@ -84,17 +84,22 @@ for (deal_II_dimension : DIMENSIONS)
 #if deal_II_dimension == 1
   template class MGDoFAccessor<0, 1, 1>;
   template class MGDoFAccessor<0, 1, 2>;
-
+  template class MGDoFAccessor<0, 1, 3>;       
+  
   template class MGDoFAccessor<1, 1, 1>;
   template class MGDoFAccessor<1, 1, 2>;
+  template class MGDoFAccessor<1, 1, 3>;
 
   template class MGDoFCellAccessor<1>;
   template class MGDoFCellAccessor<1,2>;
+  template class MGDoFCellAccessor<1,3>;
 
   template MGDoFAccessor<0, 1, 1>::MGDoFAccessor (const MGDoFCellAccessor<1, 1> &);
   template MGDoFAccessor<0, 1, 1>::MGDoFAccessor (const InvalidAccessor<2, 1, 1> &);
   template MGDoFAccessor<0, 1, 2>::MGDoFAccessor (const MGDoFCellAccessor<1, 2> &);
   template MGDoFAccessor<0, 1, 2>::MGDoFAccessor (const InvalidAccessor<2, 1, 2> &);
+  template MGDoFAccessor<0, 1, 3>::MGDoFAccessor (const MGDoFCellAccessor<1, 3> &);
+  template MGDoFAccessor<0, 1, 3>::MGDoFAccessor (const InvalidAccessor<2, 1, 3> &);
 
   template class TriaRawIterator<MGDoFCellAccessor<1> >;
   template class TriaIterator<MGDoFCellAccessor<1> >;
index f6aad8cb83c824d3757e0b81d6ffbd01237eda84..1a3b374b431e56fb7e5a58e0fb5d4b2739b84564 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by the deal.II authors
+//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -20,6 +20,9 @@ template class MGDoFHandler<deal_II_dimension>;
 template class MGDoFHandler<deal_II_dimension,deal_II_dimension+1>;
 #endif
 
+#if deal_II_dimension==3
+template class MGDoFHandler<1,3>;
+#endif
 
 template
 unsigned int
@@ -39,6 +42,18 @@ get_dof_index<1> (const unsigned int       obj_level,
                  const unsigned int       local_index) const;
 #endif
 
+#if deal_II_dimension == 3
+template
+unsigned int
+MGDoFHandler<1,3>::
+get_dof_index<1> (const unsigned int       obj_level,
+                 const unsigned int       obj_index,
+                 const unsigned int       fe_index,
+                 const unsigned int       local_index) const;
+#endif
+
+
+
 #if deal_II_dimension >= 2
 template
 unsigned int
@@ -58,6 +73,8 @@ get_dof_index<2> (const unsigned int       obj_level,
                  const unsigned int       local_index) const;
 #endif
 
+
+
 #if deal_II_dimension >= 3
 template
 unsigned int
@@ -89,6 +106,17 @@ set_dof_index<1> (const unsigned int       obj_level,
                  const unsigned int       global_index) const;
 #endif
 
+#if deal_II_dimension == 3
+template
+void
+MGDoFHandler<1,3>::
+set_dof_index<1> (const unsigned int       obj_level,
+                 const unsigned int       obj_index,
+                 const unsigned int       fe_index,
+                 const unsigned int       local_index,
+                 const unsigned int       global_index) const;
+#endif
+
 #if deal_II_dimension >= 2
 template
 void
@@ -110,6 +138,7 @@ set_dof_index<2> (const unsigned int       obj_level,
                  const unsigned int       global_index) const;
 #endif
 
+
 #if deal_II_dimension >= 3
 template
 void
index 18b01e595850f5d713dd2506c1cbf5ea8f6e0ced..b4d74691ffdbdb655ff97181be452cc7819c9659 100644 (file)
 //---------------------------------------------------------------------------
 
 
-for (PATTERN : SPARSITY_PATTERNS; deal_II_dimension : DIMENSIONS)
-{
-  namespace MGTools
+for (PATTERN : SPARSITY_PATTERNS; deal_II_dimension : DIMENSIONS;
+     deal_II_space_dimension: SPACE_DIMENSIONS)
+  {
+    namespace MGTools
   \{
 
-    template void
-      make_sparsity_pattern<deal_II_dimension> (
-       const MGDoFHandler<deal_II_dimension> &,
-       PATTERN &,
-       const unsigned int);
-
+#if deal_II_dimension <= deal_II_space_dimension
+      template void
+       make_sparsity_pattern<deal_II_dimension, PATTERN, deal_II_space_dimension> (
+         const MGDoFHandler<deal_II_dimension, deal_II_space_dimension> &,
+         PATTERN &,
+         const unsigned int);
+#endif
+#if deal_II_dimension == deal_II_space_dimension
     template void
       make_flux_sparsity_pattern<deal_II_dimension> (
        const MGDoFHandler<deal_II_dimension> &,
@@ -51,6 +54,7 @@ for (PATTERN : SPARSITY_PATTERNS; deal_II_dimension : DIMENSIONS)
        PATTERN &,
        const unsigned int,
        const Table<2,DoFTools::Coupling>&);
+#endif
 #endif
     \}
 }
@@ -116,6 +120,12 @@ for (deal_II_dimension : DIMENSIONS)
        const MGDoFHandler<deal_II_dimension,deal_II_dimension+1>&,
        std::vector<std::vector<unsigned int> >&, std::vector<unsigned int>);
 #endif
+
+#if deal_II_dimension == 3
+      template void count_dofs_per_block<1,3> (
+       const MGDoFHandler<1,3>&,
+       std::vector<std::vector<unsigned int> >&, std::vector<unsigned int>);
+#endif
       \}
   }
 
index 4121cc77049d8b5726ef548b125edce47300c7d8..5daa01355f612e4a49b21a696b681b46d427c048 100644 (file)
@@ -99,6 +99,31 @@ for (VEC : SERIAL_VECTORS; DH : DOFHANDLER_TEMPLATES; deal_II_dimension : DIMENS
                      const DataPostprocessor<DH<deal_II_dimension,deal_II_dimension+1>::space_dimension> &);
   #endif
 
+
+
+// codim 2
+
+  #if deal_II_dimension == 3
+  template void 
+  DataOut_DoFData<DH<1,3>,1,3>::
+  add_data_vector<VEC> (const VEC            &, 
+                       const std::string   &, 
+                       const DataVectorType,  
+                    const std::vector<DataComponentInterpretation::DataComponentInterpretation> &); 
+
+  template void 
+  DataOut_DoFData<DH<1,3>,1,3>::
+  add_data_vector<VEC> (const VEC                       &, 
+                     const std::vector<std::string> &, 
+                     const DataVectorType,  
+                    const std::vector<DataComponentInterpretation::DataComponentInterpretation> &); 
+
+  template void 
+  DataOut_DoFData<DH<1,3>,1,3>::
+  add_data_vector<VEC> (const VEC                 &, 
+                     const DataPostprocessor<DH<1,3>::space_dimension> &);
+  #endif
+
 }
 
 
@@ -213,4 +238,11 @@ for (DH : DOFHANDLER_TEMPLATES; deal_II_dimension : DIMENSIONS)
   #if deal_II_dimension < 3
   template class DataOut<deal_II_dimension, DH<deal_II_dimension,deal_II_dimension+1> >;
   #endif
+  
+  #if deal_II_dimension == 3
+     template class DataOut_DoFData<DH<1>,1,3>;
+     template class DataOut_DoFData<DH<1,3>,1,3>;
+     template class DataOut<1, DH<1,3> >;
+  #endif
+
 }
index 1177ef58a81aa4f324e335a653f305ab350b84dd..8e799a65478f3593616cc86e414d693c9ebfa0f6 100644 (file)
@@ -1101,7 +1101,27 @@ namespace MatrixCreator
     {
       Assert(false,ExcNotImplemented());
     }
+
+
+    
+    template <>
+    void
+    create_boundary_mass_matrix_1<1,3> (std_cxx1x::tuple<const Mapping<1,3> &,
+                                                        const DoFHandler<1,3> &,
+                                                        const Quadrature<0> & > ,
+                                       SparseMatrix<double>  &,
+                                       const FunctionMap<3>::type &,
+                                       Vector<double> &,
+                                       std::vector<unsigned int> &,
+                                       const Function<3> * const ,
+                                       const std::vector<unsigned int> &,
+                                       const MatrixCreator::internal::IteratorRange<DoFHandler<1,3> > ,
+                                       Threads::ThreadMutex &)
+    {
+      Assert(false,ExcNotImplemented());
+    }
   }
+  
 
 
 
index c6f007188b15fac1fb9f06b9d5c3fcd390d90a1f..7ce29a90dc52d2b9277f53f684a8b55705373a39 100644 (file)
 //    further information on this license.
 //
 //---------------------------------------------------------------------------
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
 
-for (deal_II_dimension : DIMENSIONS)
-{
 // non-hp version of create_mass_matrix
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension>       &mapping,
- const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension>       &mapping,
- const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_space_dimension>
+      (const Mapping<deal_II_dimension,deal_II_space_dimension>       &mapping,
+       const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_space_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_space_dimension>
+      (const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_space_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_space_dimension>
+      (const Mapping<deal_II_dimension,deal_II_space_dimension>       &mapping,
+       const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_space_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_space_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_space_dimension>
+      (const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_space_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_space_dimension> * const coefficient);
+
+
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_space_dimension>
+      (const Mapping<deal_II_dimension,deal_II_space_dimension>       &mapping,
+       const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_space_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_space_dimension>
+      (const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_space_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_space_dimension>
+      (const Mapping<deal_II_dimension,deal_II_space_dimension>       &mapping,
+       const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_space_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_space_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_space_dimension>
+      (const DoFHandler<deal_II_dimension,deal_II_space_dimension>    &dof,
+       const Quadrature<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_space_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_space_dimension> * const coefficient);
+
+    template
+      void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension,deal_II_space_dimension>
+      (const DoFHandler<deal_II_dimension,deal_II_space_dimension>     &dof,
+       const Quadrature<deal_II_dimension-1>   &q,
+       SparseMatrix<double>      &matrix,
+       const FunctionMap<deal_II_space_dimension>::type &rhs,
+       Vector<double>            &rhs_vector,
+       std::vector<unsigned int> &dof_to_boundary_mapping,
+       const Function<deal_II_space_dimension> * const a,
+       std::vector<unsigned int>);
+
+    template
+      void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension,deal_II_space_dimension>
+      (const Mapping<deal_II_dimension,deal_II_space_dimension> &,
+       const DoFHandler<deal_II_dimension,deal_II_space_dimension>     &dof,
+       const Quadrature<deal_II_dimension-1>   &q,
+       SparseMatrix<double>      &matrix,
+       const FunctionMap<deal_II_space_dimension>::type &rhs,
+       Vector<double>            &rhs_vector,
+       std::vector<unsigned int> &dof_to_boundary_mapping,
+       const Function<deal_II_space_dimension> * const a,
+       std::vector<unsigned int>);
 
 
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension>       &mapping,
- const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension>       &mapping,
- const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-
-// hp versions of functions
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>       &mapping,
- const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>       &mapping,
- const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
 
 
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>       &mapping,
- const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>       &mapping,
- const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
+#endif
+  }
 
 
-#if deal_II_dimension != 1
+//TODO[SP]: replace <deal_II_dimension> by <deal_II_dimension, deal_II_space_dimension>
+// where applicable and move to codimension cases above also when applicable
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension == deal_II_space_dimension
 
-template
-void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>     &dof,
- const Quadrature<deal_II_dimension-1>   &q,
- SparseMatrix<double>      &matrix,
- const FunctionMap<deal_II_dimension>::type &rhs,
- Vector<double>            &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
- const Function<deal_II_dimension> * const a,
- std::vector<unsigned int>);
+// hp versions of functions
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>       &mapping,
+       const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>       &mapping,
+       const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_dimension> * const coefficient);
+
+
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>       &mapping,
+       const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>       &mapping,
+       const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_mass_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<float>     &matrix,
+       const Function<deal_II_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_dimension> * const coefficient);
 
-template
-void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension> &,
- const DoFHandler<deal_II_dimension>     &dof,
- const Quadrature<deal_II_dimension-1>   &q,
- SparseMatrix<double>      &matrix,
- const FunctionMap<deal_II_dimension>::type &rhs,
- Vector<double>            &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
- const Function<deal_II_dimension> * const a,
- std::vector<unsigned int>);
 
-template
-void
-MatrixCreator::create_boundary_mass_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>&,
- const hp::DoFHandler<deal_II_dimension>&,
- const hp::QCollection<deal_II_dimension-1>&,
- SparseMatrix<double>&,
- const FunctionMap<deal_II_dimension>::type&,
- Vector<double>&,
- std::vector<unsigned int>&,
- const Function<deal_II_dimension> * const,
- std::vector<unsigned int>);
+#if deal_II_dimension != 1
 
-template
-void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>&,
- const hp::QCollection<deal_II_dimension-1>&,
- SparseMatrix<double>&,
- const FunctionMap<deal_II_dimension>::type&,
- Vector<double>&,
- std::vector<unsigned int>&,
- const Function<deal_II_dimension> * const,
- std::vector<unsigned int>);
+    
+
+    template
+      void
+      MatrixCreator::create_boundary_mass_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>&,
+       const hp::DoFHandler<deal_II_dimension>&,
+       const hp::QCollection<deal_II_dimension-1>&,
+       SparseMatrix<double>&,
+       const FunctionMap<deal_II_dimension>::type&,
+       Vector<double>&,
+       std::vector<unsigned int>&,
+       const Function<deal_II_dimension> * const,
+       std::vector<unsigned int>);
+
+    template
+      void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>&,
+       const hp::QCollection<deal_II_dimension-1>&,
+       SparseMatrix<double>&,
+       const FunctionMap<deal_II_dimension>::type&,
+       Vector<double>&,
+       std::vector<unsigned int>&,
+       const Function<deal_II_dimension> * const,
+       std::vector<unsigned int>);
 
 #endif
-
+    
 
 // non-hp versions of create_laplace_matrix
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension>       &mapping,
- const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const Mapping<deal_II_dimension>       &mapping,
- const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const DoFHandler<deal_II_dimension>    &dof,
      const Quadrature<deal_II_dimension>    &q,
      SparseMatrix<double>     &matrix,
      const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const Mapping<deal_II_dimension>       &mapping,
      const DoFHandler<deal_II_dimension>    &dof,
      const Quadrature<deal_II_dimension>    &q,
      SparseMatrix<double>     &matrix,
      const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const Mapping<deal_II_dimension>       &mapping,
      const DoFHandler<deal_II_dimension>    &dof,
      const Quadrature<deal_II_dimension>    &q,
      SparseMatrix<double>     &matrix,
      const Function<deal_II_dimension>      &rhs,
      Vector<double>           &rhs_vector,
      const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const DoFHandler<deal_II_dimension>    &dof,
      const Quadrature<deal_II_dimension>    &q,
      SparseMatrix<double>     &matrix,
      const Function<deal_II_dimension>      &rhs,
      Vector<double>           &rhs_vector,
      const Function<deal_II_dimension> * const coefficient);
 
 // hp versions of create_laplace_matrix
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>       &mapping,
- const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>       &mapping,
- const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-template
-void MatrixCreator::create_laplace_matrix<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>    &dof,
- const hp::QCollection<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension> * const coefficient);
-
-
-
-#if deal_II_dimension != 3
-
-// non-hp version of create_mass_matrix
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_dimension+1>
-(const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension+1> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_dimension+1>
-(const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension+1> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_dimension+1>
-(const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension+1>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension+1> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,double,deal_II_dimension+1>
-(const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<double>     &matrix,
- const Function<deal_II_dimension+1>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension+1> * const coefficient);
-
-
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_dimension+1>
-(const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension+1> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_dimension+1>
-(const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension+1> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_dimension+1>
-(const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension+1>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension+1> * const coefficient);
-template
-void MatrixCreator::create_mass_matrix<deal_II_dimension,float,deal_II_dimension+1>
-(const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
- const Quadrature<deal_II_dimension>    &q,
- SparseMatrix<float>     &matrix,
- const Function<deal_II_dimension+1>      &rhs,
- Vector<double>           &rhs_vector,
- const Function<deal_II_dimension+1> * const coefficient);
-
-#if deal_II_dimension == 2
-
-template
-void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension,deal_II_dimension+1>
-(const DoFHandler<deal_II_dimension,deal_II_dimension+1>     &dof,
- const Quadrature<deal_II_dimension-1>   &q,
- SparseMatrix<double>      &matrix,
- const FunctionMap<deal_II_dimension+1>::type &rhs,
- Vector<double>            &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
- const Function<deal_II_dimension+1> * const a,
- std::vector<unsigned int>);
-
-template
-void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension,deal_II_dimension+1>
-(const Mapping<deal_II_dimension,deal_II_dimension+1> &,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1>     &dof,
- const Quadrature<deal_II_dimension-1>   &q,
- SparseMatrix<double>      &matrix,
- const FunctionMap<deal_II_dimension+1>::type &rhs,
- Vector<double>            &rhs_vector,
- std::vector<unsigned int> &dof_to_boundary_mapping,
- const Function<deal_II_dimension+1> * const a,
- std::vector<unsigned int>);
-
-#endif
-
-// #if deal_II_dimension != 1
-// template
-// void
-// MatrixCreator::create_boundary_mass_matrix<deal_II_dimension,deal_II_dimension+1>
-// (const Mapping<deal_II_dimension,deal_II_dimension+1>        &mapping,
-//  const DoFHandler<deal_II_dimension,deal_II_dimension+1>     &dof,
-//  const Quadrature<deal_II_dimension-1>   &q,
-//  SparseMatrix<double>      &matrix,
-//  const FunctionMap<deal_II_dimension+1>::type         &boundary_functions,
-//  Vector<double>            &rhs_vector,
-//  std::vector<unsigned int> &dof_to_boundary_mapping,
-//  const Function<deal_II_dimension+1> * const a,
-//  std::vector<unsigned int> &component_mapping);
-// #endif
-
-// template
-// void MatrixCreator::create_boundary_mass_matrix<deal_II_dimension,deal_II_dimension+1>
-// (const DoFHandler<deal_II_dimension,deal_II_dimension+1>     &dof,
-//  const Quadrature<deal_II_dimension-1>   &q,
-//  SparseMatrix<double>      &matrix,
-//  const FunctionMap<deal_II_dimension+1>::type &rhs,
-//  Vector<double>            &rhs_vector,
-//  std::vector<unsigned int> &dof_to_boundary_mapping,
-//  const Function<deal_II_dimension+1> * const a,
-//  std::vector<unsigned int> &component_mapping);
-
-
-// // non-hp version of create_mass_matrix
-// template
-// void MatrixCreator::create_mass_matrix
-// (const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
-//  const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<double>     &matrix,
-//  const Function<deal_II_dimension+1> * const coefficient);
-// template
-// void MatrixCreator::create_mass_matrix
-// (const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<double>     &matrix,
-//  const Function<deal_II_dimension+1> * const coefficient);
-// template
-// void MatrixCreator::create_mass_matrix
-// (const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
-//  const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<double>     &matrix,
-//  const Function<deal_II_dimension+1>      &rhs,
-//  Vector<double>           &rhs_vector,
-//  const Function<deal_II_dimension+1> * const coefficient);
-// template
-// void MatrixCreator::create_mass_matrix
-// (const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<double>     &matrix,
-//  const Function<deal_II_dimension+1>      &rhs,
-//  Vector<double>           &rhs_vector,
-//  const Function<deal_II_dimension+1> * const coefficient);
-
-
-// template
-// void MatrixCreator::create_mass_matrix
-// (const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
-//  const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<float>     &matrix,
-//  const Function<deal_II_dimension+1> * const coefficient);
-// template
-// void MatrixCreator::create_mass_matrix
-// (const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<float>     &matrix,
-//  const Function<deal_II_dimension+1> * const coefficient);
-// template
-// void MatrixCreator::create_mass_matrix
-// (const Mapping<deal_II_dimension,deal_II_dimension+1>       &mapping,
-//  const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<float>     &matrix,
-//  const Function<deal_II_dimension+1>      &rhs,
-//  Vector<double>           &rhs_vector,
-//  const Function<deal_II_dimension+1> * const coefficient);
-// template
-// void MatrixCreator::create_mass_matrix
-// (const DoFHandler<deal_II_dimension,deal_II_dimension+1>    &dof,
-//  const Quadrature<deal_II_dimension>    &q,
-//  SparseMatrix<float>     &matrix,
-//  const Function<deal_II_dimension+1>      &rhs,
-//  Vector<double>           &rhs_vector,
-//  const Function<deal_II_dimension+1> * const coefficient);
-
-
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>       &mapping,
+       const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const hp::MappingCollection<deal_II_dimension>       &mapping,
+       const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_dimension> * const coefficient);
+    template
+      void MatrixCreator::create_laplace_matrix<deal_II_dimension>
+      (const hp::DoFHandler<deal_II_dimension>    &dof,
+       const hp::QCollection<deal_II_dimension>    &q,
+       SparseMatrix<double>     &matrix,
+       const Function<deal_II_dimension>      &rhs,
+       Vector<double>           &rhs_vector,
+       const Function<deal_II_dimension> * const coefficient);
+
+
+    
 #endif
-}
+  }
 
index 23479924be86787d42dc3ec905471ff682371cec..e6b6df4cb0bbda6664527b3c81fe94b5e5b8db95 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$
 //
-//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011 by the deal.II authors
+//    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2011, 2012 by the deal.II authors
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
 //
 //---------------------------------------------------------------------------
 
-
-for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS)
-{
-  namespace VectorTools \{
-
-  template
-    void interpolate
-    (const Mapping<deal_II_dimension>&,
-     const DoFHandler<deal_II_dimension>&,
-     const Function<deal_II_dimension>&,
-     VEC&);
-   template
-     void interpolate
-      (const DoFHandler<deal_II_dimension>&,
-      const Function<deal_II_dimension>&,
-      VEC&);
-
-  template
-    void interpolate
-    (const Mapping<deal_II_dimension>&,
-     const hp::DoFHandler<deal_II_dimension>&,
-     const Function<deal_II_dimension>&,
-     VEC&);
-  template
-    void interpolate
-    (const hp::DoFHandler<deal_II_dimension>&,
-     const Function<deal_II_dimension>&,
-     VEC&);
-
-  template
-    void interpolate
-    (const Mapping<deal_II_dimension>&,
-     const MGDoFHandler<deal_II_dimension>&,
-     const Function<deal_II_dimension>&,
-     VEC&);
-  template
-    void interpolate
-    (const MGDoFHandler<deal_II_dimension>&,
-     const Function<deal_II_dimension>&,
-     VEC&);
-
-  template
-    void interpolate
-    (const DoFHandler<deal_II_dimension>&,
-     const DoFHandler<deal_II_dimension>&,
-     const FullMatrix<double>&,
-     const VEC&,
-     VEC&);
-
-  template
-    void integrate_difference<deal_II_dimension>
-    (const DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<double>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-
-#if deal_II_dimension != 3
-  template
-    void integrate_difference<deal_II_dimension, VEC, Vector<float>, deal_II_dimension+1>
-    (const DoFHandler<deal_II_dimension, deal_II_dimension+1>&,
-     const VEC&,
-     const Function<deal_II_dimension+1>&,
-     Vector<float>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension+1>*,
-     const double);
-
-  template
-    void integrate_difference<deal_II_dimension, VEC, Vector<double>, deal_II_dimension+1 >
-    (const DoFHandler<deal_II_dimension, deal_II_dimension+1>&,
-     const VEC&,
-     const Function<deal_II_dimension+1>&,
-     Vector<double>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension+1>*,
-     const double);
-
-  template
-    void integrate_difference<deal_II_dimension, VEC, Vector<float>, deal_II_dimension+1>
-    (const Mapping<deal_II_dimension, deal_II_dimension+1>&,
-     const DoFHandler<deal_II_dimension, deal_II_dimension+1>&,
-     const VEC&,
-     const Function<deal_II_dimension+1>&,
-     Vector<float>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension+1>*,
-     const double);
-
-  template
-    void integrate_difference<deal_II_dimension, VEC, Vector<double>, deal_II_dimension+1 >
-    (const Mapping<deal_II_dimension, deal_II_dimension+1>&,
-     const DoFHandler<deal_II_dimension, deal_II_dimension+1>&,
-     const VEC&,
-     const Function<deal_II_dimension+1>&,
-     Vector<double>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension+1>*,
-     const double);
+for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
+    namespace VectorTools \{
+
+
+      template
+       void integrate_difference<deal_II_dimension, VEC, Vector<float>, deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension, deal_II_space_dimension>&,
+        const VEC&,
+        const Function<deal_II_space_dimension>&,
+        Vector<float>&,
+        const Quadrature<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_space_dimension>*,
+        const double);
+
+      template
+       void integrate_difference<deal_II_dimension, VEC, Vector<double>, deal_II_space_dimension >
+       (const DoFHandler<deal_II_dimension, deal_II_space_dimension>&,
+        const VEC&,
+        const Function<deal_II_space_dimension>&,
+        Vector<double>&,
+        const Quadrature<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_space_dimension>*,
+        const double);
+
+      template
+       void integrate_difference<deal_II_dimension, VEC, Vector<float>, deal_II_space_dimension>
+       (const Mapping<deal_II_dimension, deal_II_space_dimension>&,
+        const DoFHandler<deal_II_dimension, deal_II_space_dimension>&,
+        const VEC&,
+        const Function<deal_II_space_dimension>&,
+        Vector<float>&,
+        const Quadrature<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_space_dimension>*,
+        const double);
+
+      template
+       void integrate_difference<deal_II_dimension, VEC, Vector<double>, deal_II_space_dimension >
+       (const Mapping<deal_II_dimension, deal_II_space_dimension>&,
+        const DoFHandler<deal_II_dimension, deal_II_space_dimension>&,
+        const VEC&,
+        const Function<deal_II_space_dimension>&,
+        Vector<double>&,
+        const Quadrature<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_space_dimension>*,
+        const double);
+
+
+
+      template
+       double compute_mean_value<deal_II_dimension>
+       (const Mapping<deal_II_dimension,deal_II_space_dimension>&,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+        const Quadrature<deal_II_dimension>&,
+        const VEC&,
+        const unsigned int);
+
+      template
+       double compute_mean_value<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+        const Quadrature<deal_II_dimension>&,
+        const VEC&,
+        const unsigned int);
+
+      template
+       void interpolate
+       (const Mapping<deal_II_dimension,deal_II_space_dimension>&,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+        const Function<deal_II_space_dimension>&,
+        VEC&);
+
+      template
+       void interpolate
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension>&,
+        const Function<deal_II_space_dimension>&,
+        VEC&);
+
+      template
+       void project
+       (const Mapping<deal_II_dimension,deal_II_space_dimension>      &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension>   &,
+        const ConstraintMatrix                &,
+        const Quadrature<deal_II_dimension>   &,
+        const Function<deal_II_space_dimension>     &,
+        VEC                                   &,
+        const bool,
+        const Quadrature<deal_II_dimension-1> &,
+        const bool);
+
+      template
+       void project
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension>   &,
+        const ConstraintMatrix                &,
+        const Quadrature<deal_II_dimension>   &,
+        const Function<deal_II_space_dimension>     &,
+        VEC                                   &,
+        const bool,
+        const Quadrature<deal_II_dimension-1> &,
+        const bool);
+      \}
 #endif
+  }
 
 
-  template
-    void integrate_difference<deal_II_dimension>
-    (const DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<float>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-  template
-    void integrate_difference<deal_II_dimension>
-    (const Mapping<deal_II_dimension>&,
-     const DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<double>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-  template
-    void integrate_difference<deal_II_dimension>
-    (const Mapping<deal_II_dimension>&,
-     const DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<float>&,
-     const Quadrature<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-
-  template
-    void integrate_difference<deal_II_dimension>
-    (const hp::DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<double>&,
-     const hp::QCollection<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-  template
-    void integrate_difference<deal_II_dimension>
-    (const hp::DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<float>&,
-     const hp::QCollection<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-  template
-    void integrate_difference<deal_II_dimension>
-    (const hp::MappingCollection<deal_II_dimension>&,
-     const hp::DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<double>&,
-     const hp::QCollection<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
-  template
-    void integrate_difference<deal_II_dimension>
-    (const hp::MappingCollection<deal_II_dimension>&,
-     const hp::DoFHandler<deal_II_dimension>&,
-     const VEC&,
-     const Function<deal_II_dimension>&,
-     Vector<float>&,
-     const hp::QCollection<deal_II_dimension>&,
-     const NormType&,
-     const Function<deal_II_dimension>*,
-     const double);
 
-  template
-    void point_difference<deal_II_dimension> (
-      const DoFHandler<deal_II_dimension>&,
-      const VEC&,
-      const Function<deal_II_dimension>&,
-      Vector<double>&,
-      const Point<deal_II_dimension>&);
+//TODO[SP]: replace <deal_II_dimension> by <deal_II_dimension, deal_II_space_dimension>
+// where applicable and move to codimension cases above also when applicable
+for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension == deal_II_space_dimension
 
-  template
-    void point_difference<deal_II_dimension> (
-      const Mapping<deal_II_dimension>&,
-      const DoFHandler<deal_II_dimension>&,
-      const VEC&,
-      const Function<deal_II_dimension>&,
-      Vector<double>&,
-      const Point<deal_II_dimension>&);
+    namespace VectorTools \{
 
-  template
-    void point_value<deal_II_dimension> (
-      const DoFHandler<deal_II_dimension>&,
-      const VEC&,
-      const Point<deal_II_dimension>&,
-      Vector<double>&);
-      
   template
     void point_value<deal_II_dimension> (
       const hp::DoFHandler<deal_II_dimension>&,
@@ -227,26 +136,36 @@ for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS)
       const Point<deal_II_dimension>&,
       Vector<double>&);
 
-  template
-    double point_value<deal_II_dimension> (
-      const DoFHandler<deal_II_dimension>&,
-      const VEC&,
-      const Point<deal_II_dimension>&);
-      
+      template
+       void interpolate
+       (const Mapping<deal_II_dimension>&,
+        const hp::DoFHandler<deal_II_dimension>&,
+        const Function<deal_II_dimension>&,
+        VEC&);
+      template
+       void interpolate
+       (const hp::DoFHandler<deal_II_dimension>&,
+        const Function<deal_II_dimension>&,
+        VEC&);
+
   template
     double point_value<deal_II_dimension> (
       const hp::DoFHandler<deal_II_dimension>&,
       const VEC&,
       const Point<deal_II_dimension>&);
 
-  template
-    void point_value<deal_II_dimension> (
-      const Mapping<deal_II_dimension>&,
-      const DoFHandler<deal_II_dimension>&,
-      const VEC&,
-      const Point<deal_II_dimension>&,
-      Vector<double>&);
-      
+      template
+       void interpolate
+       (const Mapping<deal_II_dimension>&,
+        const MGDoFHandler<deal_II_dimension>&,
+        const Function<deal_II_dimension>&,
+        VEC&);
+      template
+       void interpolate
+       (const MGDoFHandler<deal_II_dimension>&,
+        const Function<deal_II_dimension>&,
+        VEC&);
+
   template
     void point_value<deal_II_dimension> (
       const hp::MappingCollection<deal_II_dimension>&,
@@ -255,13 +174,14 @@ for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS)
       const Point<deal_II_dimension>&,
       Vector<double>&);
 
-  template
-    double point_value<deal_II_dimension> (
-      const Mapping<deal_II_dimension>&,
-      const DoFHandler<deal_II_dimension>&,
-      const VEC&,
-      const Point<deal_II_dimension>&);
-      
+      template
+       void interpolate
+       (const DoFHandler<deal_II_dimension>&,
+        const DoFHandler<deal_II_dimension>&,
+        const FullMatrix<double>&,
+        const VEC&,
+        VEC&);
+
   template
     double point_value<deal_II_dimension> (
       const hp::MappingCollection<deal_II_dimension>&,
@@ -269,575 +189,412 @@ for (VEC : SERIAL_VECTORS ; deal_II_dimension : DIMENSIONS)
       const VEC&,
       const Point<deal_II_dimension>&);
 
-  template
-    double compute_mean_value<deal_II_dimension>
-    (const Mapping<deal_II_dimension>&,
-     const DoFHandler<deal_II_dimension>&,
-     const Quadrature<deal_II_dimension>&,
-     const VEC&,
-     const unsigned int);
-  template
-    double compute_mean_value<deal_II_dimension>
-    (const DoFHandler<deal_II_dimension>&,
-     const Quadrature<deal_II_dimension>&,
-     const VEC&,
-     const unsigned int);
-
-#if deal_II_dimension < 3
-  template
-    double compute_mean_value<deal_II_dimension>
-    (const Mapping<deal_II_dimension,deal_II_dimension+1>&,
-     const DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-     const Quadrature<deal_II_dimension>&,
-     const VEC&,
-     const unsigned int);
-  template
-    double compute_mean_value<deal_II_dimension>
-    (const DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-     const Quadrature<deal_II_dimension>&,
-     const VEC&,
-     const unsigned int);
+      template
+       void integrate_difference<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension>&,
+        const VEC&,
+        const Function<deal_II_dimension>&,
+        Vector<double>&,
+        const hp::QCollection<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_dimension>*,
+        const double);
+      template
+       void integrate_difference<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension>&,
+        const VEC&,
+        const Function<deal_II_dimension>&,
+        Vector<float>&,
+        const hp::QCollection<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_dimension>*,
+        const double);
+      template
+       void integrate_difference<deal_II_dimension>
+       (const hp::MappingCollection<deal_II_dimension>&,
+        const hp::DoFHandler<deal_II_dimension>&,
+        const VEC&,
+        const Function<deal_II_dimension>&,
+        Vector<double>&,
+        const hp::QCollection<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_dimension>*,
+        const double);
+      template
+       void integrate_difference<deal_II_dimension>
+       (const hp::MappingCollection<deal_II_dimension>&,
+        const hp::DoFHandler<deal_II_dimension>&,
+        const VEC&,
+        const Function<deal_II_dimension>&,
+        Vector<float>&,
+        const hp::QCollection<deal_II_dimension>&,
+        const NormType&,
+        const Function<deal_II_dimension>*,
+        const double);
+
+      template
+       void point_difference<deal_II_dimension> (
+         const DoFHandler<deal_II_dimension>&,
+         const VEC&,
+         const Function<deal_II_dimension>&,
+         Vector<double>&,
+         const Point<deal_II_dimension>&);
+
+      template
+       void point_difference<deal_II_dimension> (
+         const Mapping<deal_II_dimension>&,
+         const DoFHandler<deal_II_dimension>&,
+         const VEC&,
+         const Function<deal_II_dimension>&,
+         Vector<double>&,
+         const Point<deal_II_dimension>&);
+
+      template
+       void point_value<deal_II_dimension> (
+         const DoFHandler<deal_II_dimension>&,
+         const VEC&,
+         const Point<deal_II_dimension>&,
+         Vector<double>&);
+
+      template
+       double point_value<deal_II_dimension> (
+         const DoFHandler<deal_II_dimension>&,
+         const VEC&,
+         const Point<deal_II_dimension>&);
+
+      template
+       void point_value<deal_II_dimension> (
+         const Mapping<deal_II_dimension>&,
+         const DoFHandler<deal_II_dimension>&,
+         const VEC&,
+         const Point<deal_II_dimension>&,
+         Vector<double>&);
+
+      template
+       double point_value<deal_II_dimension> (
+         const Mapping<deal_II_dimension>&,
+         const DoFHandler<deal_II_dimension>&,
+         const VEC&,
+         const Point<deal_II_dimension>&);
+
+      \}
 #endif
-
-
-  template
-    void project
-    (const Mapping<deal_II_dimension>      &,
-     const DoFHandler<deal_II_dimension>   &,
-     const ConstraintMatrix                &,
-     const Quadrature<deal_II_dimension>   &,
-     const Function<deal_II_dimension>     &,
-     VEC                                   &,
-     const bool,
-     const Quadrature<deal_II_dimension-1> &,
-     const bool);
-
-  template
-    void project
-    (const DoFHandler<deal_II_dimension>   &,
-     const ConstraintMatrix                &,
-     const Quadrature<deal_II_dimension>   &,
-     const Function<deal_II_dimension>     &,
-     VEC                                   &,
-     const bool,
-     const Quadrature<deal_II_dimension-1> &,
-     const bool);
-
-
-#if deal_II_dimension != 3
-  template
-    void interpolate
-    (const Mapping<deal_II_dimension,deal_II_dimension+1>&,
-     const DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-     const Function<deal_II_dimension+1>&,
-     VEC&);
-  template
-    void interpolate
-    (const DoFHandler<deal_II_dimension,deal_II_dimension+1>&,
-     const Function<deal_II_dimension+1>&,
-     VEC&);
-
-  template
-    void project
-    (const Mapping<deal_II_dimension,deal_II_dimension+1>      &,
-     const DoFHandler<deal_II_dimension,deal_II_dimension+1>   &,
-     const ConstraintMatrix                &,
-     const Quadrature<deal_II_dimension>   &,
-     const Function<deal_II_dimension+1>     &,
-     VEC                                   &,
-     const bool,
-     const Quadrature<deal_II_dimension-1> &,
-     const bool);
-
-  template
-    void project
-    (const DoFHandler<deal_II_dimension,deal_II_dimension+1>   &,
-     const ConstraintMatrix                &,
-     const Quadrature<deal_II_dimension>   &,
-     const Function<deal_II_dimension+1>     &,
-     VEC                                   &,
-     const bool,
-     const Quadrature<deal_II_dimension-1> &,
-     const bool);
-#endif
-  \}
-}
-
-
-for ( deal_II_dimension : DIMENSIONS )
-{
-namespace VectorTools \{
-template
-void create_right_hand_side<deal_II_dimension>
-(const Mapping<deal_II_dimension>    &,
- const DoFHandler<deal_II_dimension> &,
- const Quadrature<deal_II_dimension> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &);
-template
-void create_right_hand_side<deal_II_dimension>
-(const DoFHandler<deal_II_dimension> &,
- const Quadrature<deal_II_dimension> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &);
-
-template
-void create_right_hand_side<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>    &,
- const hp::DoFHandler<deal_II_dimension> &,
- const hp::QCollection<deal_II_dimension> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &);
-template
-void create_right_hand_side<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension> &,
- const hp::QCollection<deal_II_dimension> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &);
-
-template
-void create_point_source_vector<deal_II_dimension>
-(const Mapping<deal_II_dimension>    &,
- const DoFHandler<deal_II_dimension> &,
- const Point<deal_II_dimension>      &,
- Vector<double>                      &);
-template
-void create_point_source_vector<deal_II_dimension>
-(const DoFHandler<deal_II_dimension> &,
- const Point<deal_II_dimension>      &,
- Vector<double>                      &);
-
-template
-void create_point_source_vector<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>    &,
- const hp::DoFHandler<deal_II_dimension> &,
- const Point<deal_II_dimension>      &,
- Vector<double>                      &);
-template
-void create_point_source_vector<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension> &,
- const Point<deal_II_dimension>      &,
- Vector<double>                      &);
-
-#if deal_II_dimension > 1
-template
-void
-create_boundary_right_hand_side<deal_II_dimension>
-(const Mapping<deal_II_dimension>    &,
- const DoFHandler<deal_II_dimension> &,
- const Quadrature<deal_II_dimension-1> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &,
- const std::set<types::boundary_id_t> &);
+  }
+
+
+
+
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension <= deal_II_space_dimension
+    namespace VectorTools \{
+      template
+       void interpolate_boundary_values (
+         const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const types::boundary_id_t,
+         const Function<deal_II_space_dimension>   &,
+         std::map<unsigned int,double>       &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const hp::DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const types::boundary_id_t,
+         const Function<deal_II_space_dimension>   &,
+         std::map<unsigned int,double>       &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const MGDoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const types::boundary_id_t,
+         const Function<deal_II_space_dimension>   &,
+         std::map<unsigned int,double>       &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const types::boundary_id_t,
+         const Function<deal_II_space_dimension>   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const hp::DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const types::boundary_id_t,
+         const Function<deal_II_space_dimension>   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const MGDoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const types::boundary_id_t,
+         const Function<deal_II_space_dimension>   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const Mapping<deal_II_dimension,deal_II_space_dimension>    &,
+         const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const FunctionMap<deal_II_space_dimension>::type   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const Mapping<deal_II_dimension,deal_II_space_dimension>    &,
+         const hp::DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const FunctionMap<deal_II_space_dimension>::type   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const Mapping<deal_II_dimension,deal_II_space_dimension>    &,
+         const MGDoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const FunctionMap<deal_II_space_dimension>::type   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const FunctionMap<deal_II_space_dimension>::type   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const hp::DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const FunctionMap<deal_II_space_dimension>::type   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values (
+         const MGDoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+         const FunctionMap<deal_II_space_dimension>::type   &,
+         ConstraintMatrix                    &,
+         const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values
+       (const Mapping<deal_II_dimension,deal_II_space_dimension>    &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+        const FunctionMap<deal_II_space_dimension>::type &,
+        std::map<unsigned int,double>       &,
+        const std::vector<bool>    &);
+
+      template
+       void interpolate_boundary_values
+       (const Mapping<deal_II_dimension,deal_II_space_dimension>    &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+        const types::boundary_id_t,
+        const Function<deal_II_space_dimension>   &,
+        std::map<unsigned int,double>       &,
+        const std::vector<bool>    &);
+
+
+      template
+       void create_right_hand_side<deal_II_dimension,deal_II_space_dimension>
+       (const Mapping<deal_II_dimension,deal_II_space_dimension>    &,
+        const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+        const Quadrature<deal_II_dimension> &,
+        const Function<deal_II_space_dimension>   &,
+        Vector<double>                      &);
+
+      template
+       void create_right_hand_side<deal_II_dimension,deal_II_space_dimension>
+       (const DoFHandler<deal_II_dimension,deal_II_space_dimension> &,
+        const Quadrature<deal_II_dimension> &,
+        const Function<deal_II_space_dimension>   &,
+        Vector<double>  &);
+
+      \}
 #endif
-
-template
-void
-create_boundary_right_hand_side<deal_II_dimension>
-(const DoFHandler<deal_II_dimension> &,
- const Quadrature<deal_II_dimension-1> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &,
- const std::set<types::boundary_id_t> &);
+  }
+
+//TODO[SP]: replace <deal_II_dimension> by <deal_II_dimension, deal_II_space_dimension>
+// where applicable and move to codimension cases above also when applicable
+for (deal_II_dimension : DIMENSIONS; deal_II_space_dimension :  SPACE_DIMENSIONS)
+  {
+#if deal_II_dimension == deal_II_space_dimension
+    namespace VectorTools \{
+      template
+       void create_right_hand_side<deal_II_dimension>
+       (const hp::MappingCollection<deal_II_dimension>    &,
+        const hp::DoFHandler<deal_II_dimension> &,
+        const hp::QCollection<deal_II_dimension> &,
+        const Function<deal_II_dimension>   &,
+        Vector<double>                      &);
+
+      template
+       void create_right_hand_side<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &,
+        const hp::QCollection<deal_II_dimension> &,
+        const Function<deal_II_dimension>   &,
+        Vector<double>                      &);
+
+      template
+       void create_point_source_vector<deal_II_dimension>
+       (const Mapping<deal_II_dimension>    &,
+        const DoFHandler<deal_II_dimension> &,
+        const Point<deal_II_dimension>      &,
+        Vector<double>                      &);
+      template
+       void create_point_source_vector<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &,
+        const Point<deal_II_dimension>      &,
+        Vector<double>                      &);
+
+      template
+       void create_point_source_vector<deal_II_dimension>
+       (const hp::MappingCollection<deal_II_dimension>    &,
+        const hp::DoFHandler<deal_II_dimension> &,
+        const Point<deal_II_dimension>      &,
+        Vector<double>                      &);
+      template
+       void create_point_source_vector<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &,
+        const Point<deal_II_dimension>      &,
+        Vector<double>                      &);
 
 #if deal_II_dimension > 1
-template
-void
-create_boundary_right_hand_side<deal_II_dimension>
-(const hp::MappingCollection<deal_II_dimension>    &,
const hp::DoFHandler<deal_II_dimension> &,
const hp::QCollection<deal_II_dimension-1> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &,
- const std::set<types::boundary_id_t> &);
+      template
+       void
+       create_boundary_right_hand_side<deal_II_dimension>
+       (const Mapping<deal_II_dimension>    &,
       const DoFHandler<deal_II_dimension> &,
       const Quadrature<deal_II_dimension-1> &,
       const Function<deal_II_dimension>   &,
       Vector<double>                      &,
       const std::set<types::boundary_id_t> &);
 #endif
 
-template
-void
-create_boundary_right_hand_side<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension> &,
- const hp::QCollection<deal_II_dimension-1> &,
- const Function<deal_II_dimension>   &,
- Vector<double>                      &,
- const std::set<types::boundary_id_t> &);
-
-template
-void interpolate_boundary_values (
-  const DoFHandler<deal_II_dimension> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension>   &,
-  std::map<unsigned int,double>       &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const hp::DoFHandler<deal_II_dimension> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension>   &,
-  std::map<unsigned int,double>       &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const MGDoFHandler<deal_II_dimension> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension>   &,
-  std::map<unsigned int,double>       &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const DoFHandler<deal_II_dimension> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension>   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const hp::DoFHandler<deal_II_dimension> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension>   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const MGDoFHandler<deal_II_dimension> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension>   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const Mapping<deal_II_dimension>    &,
-  const DoFHandler<deal_II_dimension> &,
-  const FunctionMap<deal_II_dimension>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const Mapping<deal_II_dimension>    &,
-  const hp::DoFHandler<deal_II_dimension> &,
-  const FunctionMap<deal_II_dimension>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const Mapping<deal_II_dimension>    &,
-  const MGDoFHandler<deal_II_dimension> &,
-  const FunctionMap<deal_II_dimension>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const DoFHandler<deal_II_dimension> &,
-  const FunctionMap<deal_II_dimension>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const hp::DoFHandler<deal_II_dimension> &,
-  const FunctionMap<deal_II_dimension>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const MGDoFHandler<deal_II_dimension> &,
-  const FunctionMap<deal_II_dimension>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-#if deal_II_dimension < 3
-template
-void interpolate_boundary_values (
-  const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension+1>   &,
-  std::map<unsigned int,double>       &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension+1>   &,
-  std::map<unsigned int,double>       &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const MGDoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension+1>   &,
-  std::map<unsigned int,double>       &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension+1>   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension+1>   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const MGDoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const types::boundary_id_t,
-  const Function<deal_II_dimension+1>   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const Mapping<deal_II_dimension,deal_II_dimension+1>    &,
-  const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const FunctionMap<deal_II_dimension+1>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const Mapping<deal_II_dimension,deal_II_dimension+1>    &,
-  const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const FunctionMap<deal_II_dimension+1>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const Mapping<deal_II_dimension,deal_II_dimension+1>    &,
-  const MGDoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const FunctionMap<deal_II_dimension+1>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const FunctionMap<deal_II_dimension+1>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const FunctionMap<deal_II_dimension+1>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values (
-  const MGDoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-  const FunctionMap<deal_II_dimension+1>::type   &,
-  ConstraintMatrix                    &,
-  const std::vector<bool>    &);
-#endif
+      template
+       void
+       create_boundary_right_hand_side<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension> &,
+        const Quadrature<deal_II_dimension-1> &,
+        const Function<deal_II_dimension>   &,
+        Vector<double>                      &,
+        const std::set<types::boundary_id_t> &);
 
 #if deal_II_dimension > 1
-template
-void project_boundary_values<deal_II_dimension>
-(const Mapping<deal_II_dimension>     &,
- const DoFHandler<deal_II_dimension>  &,
- const FunctionMap<deal_II_dimension>::type &,
- const Quadrature<deal_II_dimension-1>&,
- std::map<unsigned int,double>&, std::vector<unsigned int>);
+      template
+       void
+       create_boundary_right_hand_side<deal_II_dimension>
+       (const hp::MappingCollection<deal_II_dimension>    &,
+        const hp::DoFHandler<deal_II_dimension> &,
+        const hp::QCollection<deal_II_dimension-1> &,
+        const Function<deal_II_dimension>   &,
+        Vector<double>                      &,
+        const std::set<types::boundary_id_t> &);
 #endif
 
-template
-void project_boundary_values<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>  &,
- const FunctionMap<deal_II_dimension>::type &,
- const Quadrature<deal_II_dimension-1>&,
- std::map<unsigned int,double>&, std::vector<unsigned int>);
+      template
+       void
+       create_boundary_right_hand_side<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension> &,
+        const hp::QCollection<deal_II_dimension-1> &,
+        const Function<deal_II_dimension>   &,
+        Vector<double>                      &,
+        const std::set<types::boundary_id_t> &);
 
 
-template
-void project_boundary_values<deal_II_dimension>
-(const Mapping<deal_II_dimension>     &,
- const DoFHandler<deal_II_dimension>  &,
- const FunctionMap<deal_II_dimension>::type &,
- const Quadrature<deal_II_dimension-1>&,
- ConstraintMatrix&, std::vector<unsigned int>);
 
-template
-void project_boundary_values<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>  &,
- const FunctionMap<deal_II_dimension>::type &,
- const Quadrature<deal_II_dimension-1>&,
- ConstraintMatrix&, std::vector<unsigned int>);
 
 
-#if deal_II_dimension != 1
-template
-void project_boundary_values_curl_conforming<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>&,
- const unsigned int,
- const Function<deal_II_dimension>&,
- const types::boundary_id_t,
- ConstraintMatrix&,
- const Mapping<deal_II_dimension>&);
-template
-void project_boundary_values_curl_conforming<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>&,
- const unsigned int,
- const Function<deal_II_dimension>&,
- const types::boundary_id_t,
- ConstraintMatrix&,
- const hp::MappingCollection<deal_II_dimension>&);
-template
-void project_boundary_values_div_conforming<deal_II_dimension>
-(const DoFHandler<deal_II_dimension>&,
- const unsigned int,
- const Function<deal_II_dimension>&,
- const types::boundary_id_t,
- ConstraintMatrix&,
- const Mapping<deal_II_dimension>&);
-template
-void project_boundary_values_div_conforming<deal_II_dimension>
-(const hp::DoFHandler<deal_II_dimension>&,
- const unsigned int,
- const Function<deal_II_dimension>&,
- const types::boundary_id_t,
- ConstraintMatrix&,
- const hp::MappingCollection<deal_II_dimension>&);
-template
-void
-compute_no_normal_flux_constraints (const DoFHandler<deal_II_dimension> &dof_handler,
-                                                const unsigned int     first_vector_component,
-                                                const std::set<types::boundary_id_t> &boundary_ids,
-                                                ConstraintMatrix      &constraints,
-                                                const Mapping<deal_II_dimension>    &mapping);
-template
-void
-compute_no_normal_flux_constraints (const hp::DoFHandler<deal_II_dimension> &dof_handler,
-                                                const unsigned int     first_vector_component,
-                                                const std::set<types::boundary_id_t> &boundary_ids,
-                                                ConstraintMatrix      &constraints,
-                                                const Mapping<deal_II_dimension>    &mapping);
+#if deal_II_dimension > 1
+      template
+       void project_boundary_values<deal_II_dimension>
+       (const Mapping<deal_II_dimension>     &,
+        const DoFHandler<deal_II_dimension>  &,
+        const FunctionMap<deal_II_dimension>::type &,
+        const Quadrature<deal_II_dimension-1>&,
+        std::map<unsigned int,double>&, std::vector<unsigned int>);
 #endif
 
+      template
+       void project_boundary_values<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension>  &,
+        const FunctionMap<deal_II_dimension>::type &,
+        const Quadrature<deal_II_dimension-1>&,
+        std::map<unsigned int,double>&, std::vector<unsigned int>);
 
 
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension>    &,
- const DoFHandler<deal_II_dimension> &,
- const FunctionMap<deal_II_dimension>::type &,
- std::map<unsigned int,double>       &,
- const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension>    &,
- const hp::DoFHandler<deal_II_dimension> &,
- const FunctionMap<deal_II_dimension>::type &,
- std::map<unsigned int,double>       &,
- const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension>    &,
- const MGDoFHandler<deal_II_dimension> &,
- const FunctionMap<deal_II_dimension>::type &,
- std::map<unsigned int,double>       &,
- const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension>    &,
- const DoFHandler<deal_II_dimension> &,
- const types::boundary_id_t,
- const Function<deal_II_dimension>   &,
- std::map<unsigned int,double>       &,
- const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension>    &,
- const hp::DoFHandler<deal_II_dimension> &,
- const types::boundary_id_t,
- const Function<deal_II_dimension>   &,
- ConstraintMatrix       &,
- const std::vector<bool>    &);
-
-#if deal_II_dimension < 3
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension,deal_II_dimension+1>    &,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const FunctionMap<deal_II_dimension+1>::type &,
- std::map<unsigned int,double>       &,
- const std::vector<bool>    &);
-
-template
-void interpolate_boundary_values
-(const Mapping<deal_II_dimension,deal_II_dimension+1>    &,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const types::boundary_id_t,
- const Function<deal_II_dimension+1>   &,
- std::map<unsigned int,double>       &,
- const std::vector<bool>    &);
-#endif
+      template
+       void project_boundary_values<deal_II_dimension>
+       (const Mapping<deal_II_dimension>     &,
+        const DoFHandler<deal_II_dimension>  &,
+        const FunctionMap<deal_II_dimension>::type &,
+        const Quadrature<deal_II_dimension-1>&,
+        ConstraintMatrix&, std::vector<unsigned int>);
 
+      template
+       void project_boundary_values<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension>  &,
+        const FunctionMap<deal_II_dimension>::type &,
+        const Quadrature<deal_II_dimension-1>&,
+        ConstraintMatrix&, std::vector<unsigned int>);
 
-template
-void
-interpolate_boundary_values
-(const DoFHandler<deal_II_dimension>         &,
- const FunctionMap<deal_II_dimension>::type &,
- std::map<unsigned int,double> &,
- const std::vector<bool>       &);
-
-
-#if deal_II_dimension != 3
-
-template
-void create_right_hand_side<deal_II_dimension,deal_II_dimension+1>
-(const Mapping<deal_II_dimension,deal_II_dimension+1>    &,
- const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const Quadrature<deal_II_dimension> &,
- const Function<deal_II_dimension+1>   &,
- Vector<double>                      &);
-template
-void create_right_hand_side<deal_II_dimension,deal_II_dimension+1>
-(const DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
- const Quadrature<deal_II_dimension> &,
- const Function<deal_II_dimension+1>   &,
- Vector<double>                      &);
-
-// template
-// void create_right_hand_side<deal_II_dimension,deal_II_dimension+1>
-// (const hp::MappingCollection<deal_II_dimension,deal_II_dimension+1>    &,
-//  const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-//  const hp::QCollection<deal_II_dimension> &,
-//  const Function<deal_II_dimension+1>   &,
-//  Vector<double>                      &);
-// template
-// void create_right_hand_side<deal_II_dimension,deal_II_dimension+1>
-// (const hp::DoFHandler<deal_II_dimension,deal_II_dimension+1> &,
-//  const hp::QCollection<deal_II_dimension> &,
-//  const Function<deal_II_dimension+1>   &,
-//  Vector<double>                      &);
 
+#if deal_II_dimension != 1
+      template
+       void project_boundary_values_curl_conforming<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension>&,
+        const unsigned int,
+        const Function<deal_II_dimension>&,
+        const types::boundary_id_t,
+        ConstraintMatrix&,
+        const Mapping<deal_II_dimension>&);
+      template
+       void project_boundary_values_curl_conforming<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension>&,
+        const unsigned int,
+        const Function<deal_II_dimension>&,
+        const types::boundary_id_t,
+        ConstraintMatrix&,
+        const hp::MappingCollection<deal_II_dimension>&);
+      template
+       void project_boundary_values_div_conforming<deal_II_dimension>
+       (const DoFHandler<deal_II_dimension>&,
+        const unsigned int,
+        const Function<deal_II_dimension>&,
+        const types::boundary_id_t,
+        ConstraintMatrix&,
+        const Mapping<deal_II_dimension>&);
+      template
+       void project_boundary_values_div_conforming<deal_II_dimension>
+       (const hp::DoFHandler<deal_II_dimension>&,
+        const unsigned int,
+        const Function<deal_II_dimension>&,
+        const types::boundary_id_t,
+        ConstraintMatrix&,
+        const hp::MappingCollection<deal_II_dimension>&);
+      template
+       void
+       compute_no_normal_flux_constraints (const DoFHandler<deal_II_dimension> &dof_handler,
+                                           const unsigned int     first_vector_component,
+                                           const std::set<types::boundary_id_t> &boundary_ids,
+                                           ConstraintMatrix      &constraints,
+                                           const Mapping<deal_II_dimension>    &mapping);
+      template
+       void
+       compute_no_normal_flux_constraints (const hp::DoFHandler<deal_II_dimension> &dof_handler,
+                                           const unsigned int     first_vector_component,
+                                           const std::set<types::boundary_id_t> &boundary_ids,
+                                           ConstraintMatrix      &constraints,
+                                           const Mapping<deal_II_dimension>    &mapping);
 #endif
-  \}
-}
+      \}
+#endif
+  }
+
 
 
 for (deal_II_dimension : DIMENSIONS)
index 281d0a08e1245e7ee56cd4deaf0b7115d1f3130a..cc9c95f70bc15877ef5612ee7d2e96817ec0e4ea 100644 (file)
@@ -4,4 +4,17 @@
 D = @DEAL2_DIR@
 
 TEST_MINUS_L = @TEST_MINUS_L@
-ULIMIT = @ULIMIT@
\ No newline at end of file
+ULIMIT = @ULIMIT@
+
+# however, also define a variable that identifies the current directory,
+# including if necessary a description of the branch we are on. we put
+# this into Makefile.paths because not all */Makefile files include
+# Makefile.rules (e.g. not the ones in all-headers or mesh-conversion)
+# but they do generally include the current file
+#
+# so get the path of the current directory so we can prefix every test
+# in the report with it. for a branch, prefix everything
+# with x-branch-name/ so that tests run from the branch will show up
+# in different folders on the webpage.
+WORKDIR = x-branch_codim_two/$(notdir $(shell pwd))
+
index e03d9fdc26882d943fdce776fd579a7c44c6bd7e..dfa47ce41d427fc89b3e00f8bbccb22dbfbf5f73 100644 (file)
@@ -1,7 +1,7 @@
 ######################################################################
 # Makefile.rules,v 1.11 2001/04/24 13:18:09 wolf Exp
 #
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, the deal.II authors
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, the deal.II authors
 #
 # Common make rules for test files. To be included by the Makefiles
 # in the subdirectories.
 
 normalize = $D/common/scripts/normalize.pl
 
-# get the path of the current directory so we can prefix every test
-# in the report with it. for a branch, prefix everything
-# with x-branch-name/ so that tests run from the branch will show up
-# in different folders on the webpage.
-WORKDIR = $(notdir $(shell pwd))
-
 verbose = off
 
 # The mail program. Override this by something like
index 44f5e5198ff950c4f373f72b2a7e0563f7ced926..82487180cf75b334936fc2378a2bc7a9e0f356ba 100644 (file)
@@ -72,11 +72,11 @@ report:
        @echo 'Date: ' `date -u +"%Y %j  %F  %U-%w"`
        @echo 'Id: ' $(ID)
        @for test in $(TESTS) ; do \
-               testname=all-headers/`echo $$test | perl -pi -e 's/.*include.//g; s/\//-/g;'` ; \
+               testname=`echo $$test | perl -pi -e 's/.*include.//g; s/\//-/g;'` ; \
                if test -f $$test ; then \
-                       echo "`date -u +"%Y-%m-%d %H:%M"`   +  $$testname" ; \
+                       echo "`date -u +"%Y-%m-%d %H:%M"`   +  $(WORKDIR)/$$testname" ; \
                else \
-                       echo "`date -u +"%Y-%m-%d %H:%M"`  0   $$testname" ; \
+                       echo "`date -u +"%Y-%m-%d %H:%M"`  0   $(WORKDIR)/$$testname" ; \
                fi ; \
        done
 
index 0d9bdee0a714af94a36c857455841ba674405a55..e40234490166c40a989ea5b3a970e4cda3d466aa 100644 (file)
@@ -40,7 +40,7 @@ void check (Triangulation<3> &tria)
     = GridTools::find_active_cell_around_point (tria, p);
 
   deallog << cell << std::endl;
-  for (unsigned int v=0; v<GeometryInfo<2>::vertices_per_cell; ++v)
+  for (unsigned int v=0; v<GeometryInfo<3>::vertices_per_cell; ++v)
     deallog << "<" << cell->vertex(v) << "> ";
   deallog << std::endl;
 
index 13b00480e420e68dc59a5e6de00151ad251a97f7..838c2657218342a1586f6317ae139e27a4957b04 100644 (file)
@@ -1,3 +1,3 @@
 
-DEAL::3.455
-DEAL::<0.625000 0.625000 0.625000> <0.750000 0.625000 0.625000> <0.625000 0.750000 0.625000> <0.750000 0.750000 0.625000> 
+DEAL::3.462
+DEAL::<0.750000 0.625000 0.625000> <0.875000 0.625000 0.625000> <0.750000 0.750000 0.625000> <0.875000 0.750000 0.625000> <0.750000 0.625000 0.750000> <0.875000 0.625000 0.750000> <0.750000 0.750000 0.750000> <0.875000 0.750000 0.750000> 
index 8393f351a737e52b4f5e87e471bacaf452740010..67d32f65c16c92b3becb1d1cd9fa25e0582fa011 100644 (file)
@@ -41,10 +41,10 @@ void check (Triangulation<3> &tria)
 
   deallog << cell.first << std::endl;
   for (unsigned int v=0; v<GeometryInfo<3>::vertices_per_cell; ++v)
-    deallog << "<" << cell.first->vertex(v) << "> ";
+    deallog << "<" << cell.first->vertex(v) << "> "<< std::endl;
   deallog << "[ " << cell.second << "] ";
 
-  deallog << std::endl;
+  deallog << std::endl << std::endl;
 
   Assert (p.distance (cell.first->center()) < cell.first->diameter()/2,
          ExcInternalError());
index 3d10eeeb702772a468f1ce2962e30f5fdac90def..e5e204bb7888a0edb11f073278b19ff67c6234c8 100644 (file)
@@ -1,5 +1,23 @@
 
-DEAL::2.17
-DEAL::<0.250000 0.500000 0.00000> <0.500000 0.500000 0.00000> <0.250000 0.750000 0.00000> <0.500000 0.750000 0.00000> <0.250000 0.500000 0.250000> <0.500000 0.500000 0.250000> <0.250000 0.750000 0.250000> <0.500000 0.750000 0.250000> [ 0.333333 -3.54987e-30 0.800000] 
+DEAL::2.3
+DEAL::<0.250000 0.250000 0.00000> 
+DEAL::<0.500000 0.250000 0.00000> 
+DEAL::<0.250000 0.500000 0.00000> 
+DEAL::<0.500000 0.500000 0.00000> 
+DEAL::<0.250000 0.250000 0.250000> 
+DEAL::<0.500000 0.250000 0.250000> 
+DEAL::<0.250000 0.500000 0.250000> 
+DEAL::<0.500000 0.500000 0.250000> 
+DEAL::[ 0.333333 1.00000 0.800000] 
+DEAL::
 DEAL::2.435
-DEAL::<0.286905 0.658777 4.33681e-19> <0.209333 0.437629 8.67362e-19> <0.562887 0.562887 8.67362e-19> <0.418667 0.418667 1.73472e-18> <0.269808 0.604598 0.269808> <0.203251 0.422066 0.203251> <0.530301 0.530301 0.245590> <0.406502 0.406502 0.197169> [ 0.494208 0.406025 0.866848] 
+DEAL::<0.286905 0.658777 4.33681e-19> 
+DEAL::<0.209333 0.437629 8.67362e-19> 
+DEAL::<0.562887 0.562887 8.67362e-19> 
+DEAL::<0.418667 0.418667 1.73472e-18> 
+DEAL::<0.269808 0.604598 0.269808> 
+DEAL::<0.203251 0.422066 0.203251> 
+DEAL::<0.530301 0.530301 0.245590> 
+DEAL::<0.406502 0.406502 0.197169> 
+DEAL::[ 0.494208 0.406025 0.866848] 
+DEAL::
index fb1b0c57a88ceec005c1518df0e230f570aa3066..26c15bddb9bf4993a2821a0d4ef2e840deaa98ab 100644 (file)
@@ -1,4 +1,4 @@
 
 DEAL::3.72
-DEAL::<0.750000 0.00000 0.00000> <0.875000 0.00000 0.00000> <0.750000 0.125000 0.00000> <0.875000 0.125000 0.00000> <0.750000 0.00000 0.125000> <0.875000 0.00000 0.125000> <0.750000 0.125000 0.125000> <0.875000 0.125000 0.125000> [ -3.33067e-16 1.11022e-16 5.55112e-17] 
+DEAL::<0.750000 0.00000 0.00000> <0.875000 0.00000 0.00000> <0.750000 0.125000 0.00000> <0.875000 0.125000 0.00000> <0.750000 0.00000 0.125000> <0.875000 0.00000 0.125000> <0.750000 0.125000 0.125000> <0.875000 0.125000 0.125000> [ 2.46519e-32 5.55112e-17 5.55112e-17] 
 DEAL::0
index 0e11f877785b00545dbfe1fbab3dc5d0327214fd..234a4d476d2e0d23247192b3e983992eb983a9c4 100644 (file)
@@ -38,7 +38,7 @@ void check (Triangulation<3> &tria)
     = GridTools::find_active_cell_around_point (map, tria, p);
 
   deallog << cell.first << std::endl;
-  for (unsigned int v=0; v<GeometryInfo<2>::vertices_per_cell; ++v)
+  for (unsigned int v=0; v<GeometryInfo<3>::vertices_per_cell; ++v)
     deallog << "<" << cell.first->vertex(v) << "> ";
   deallog << "[ " << cell.second << "] ";
   deallog << std::endl;
index 0076cf5fadd598c651cabad0355dd5936e3f2ac5..6c764788689816f4c95a87c0d0c281bfdbcd5645 100644 (file)
@@ -1,3 +1,3 @@
 
-DEAL::3.455
-DEAL::<0.625000 0.625000 0.625000> <0.750000 0.625000 0.625000> <0.625000 0.750000 0.625000> <0.750000 0.750000 0.625000> [ 1.00000 1.00000 1.00000] 
+DEAL::3.462
+DEAL::<0.750000 0.625000 0.625000> <0.875000 0.625000 0.625000> <0.750000 0.750000 0.625000> <0.875000 0.750000 0.625000> <0.750000 0.625000 0.750000> <0.875000 0.625000 0.750000> <0.750000 0.750000 0.750000> <0.875000 0.750000 0.750000> [ 0.00000 1.00000 1.00000] 
index 5b56d4157c6c68ae107f7cbeb06857e141168b2e..449ff7de25bac2090561ac3b5304e77c43dbadb8 100644 (file)
@@ -50,7 +50,7 @@ void check (Triangulation<2> &tria)
          // Now transform back and check distance
          Point<2> pp = map.transform_unit_to_real_cell(cell.first, GeometryInfo<2>::project_to_unit_cell(cell.second));
          deallog << pp.distance(p) << std::endl;
-         Assert (pp.distance(p) < 1e-13,
+         Assert (pp.distance(p) < 1.e-12,
                  ExcInternalError());
       }
   
index e5921bb95feb18a1c5f346bf17ebd76efbb62cb6..46a025e24de7d1e504e0570f4ff2d087a09b886d 100644 (file)
@@ -4,7 +4,7 @@ DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823
 DEAL::2.72
 DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 2.34859e-08 0.0800000] 0
 DEAL::2.72
-DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 3.81726e-08 0.160000] 0
+DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 3.81724e-08 0.160000] 0
 DEAL::2.72
 DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 5.00262e-08 0.240000] 0
 DEAL::2.72
@@ -20,7 +20,7 @@ DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.74855
 DEAL::2.72
 DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 5.01490e-08 0.720000] 0
 DEAL::2.72
-DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 4.42923e-08 0.800000] 0
+DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 4.42919e-08 0.800000] 0
 DEAL::2.72
 DEAL::<0.00000 1.00000> <0.00000 0.823223> <0.382683 0.923880> <0.316342 0.748551> [ 2.83602e-08 0.880000] 0
 DEAL::2.72
@@ -30,7 +30,7 @@ DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.60
 DEAL::2.74
 DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 2.88843e-08 0.120000] 0
 DEAL::2.74
-DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 4.56048e-08 0.200000] 0
+DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 4.56040e-08 0.200000] 0
 DEAL::2.74
 DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 5.21899e-08 0.280000] 0
 DEAL::2.74
@@ -46,7 +46,7 @@ DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.60
 DEAL::2.74
 DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 5.59720e-08 0.760000] 0
 DEAL::2.74
-DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 4.34624e-08 0.840000] 0
+DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 4.34612e-08 0.840000] 0
 DEAL::2.74
 DEAL::<0.382683 0.923880> <0.316342 0.748551> <0.707107 0.707107> <0.603553 0.603553> [ 2.73698e-08 0.920000] 0
 DEAL::2.53
@@ -54,7 +54,7 @@ DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.60
 DEAL::2.53
 DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.920000 2.73698e-08] 0
 DEAL::2.53
-DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.840000 4.34624e-08] 0
+DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.840000 4.34612e-08] 0
 DEAL::2.53
 DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.760000 5.59720e-08] 0
 DEAL::2.53
@@ -70,7 +70,7 @@ DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.60
 DEAL::2.53
 DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.280000 5.21899e-08] 0
 DEAL::2.53
-DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.200000 4.56048e-08] 0
+DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.200000 4.56040e-08] 0
 DEAL::2.53
 DEAL::<0.923880 0.382683> <0.707107 0.707107> <0.748551 0.316342> <0.603553 0.603553> [ 0.120000 2.88843e-08] 0
 DEAL::2.53
@@ -80,7 +80,7 @@ DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.31634
 DEAL::2.52
 DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.880000 2.83602e-08] 0
 DEAL::2.52
-DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.800000 4.42923e-08] 0
+DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.800000 4.42919e-08] 0
 DEAL::2.52
 DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.720000 5.01490e-08] 0
 DEAL::2.52
@@ -96,15 +96,15 @@ DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.31634
 DEAL::2.52
 DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.240000 5.00262e-08] 0
 DEAL::2.52
-DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.160000 3.81726e-08] 0
+DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.160000 3.81724e-08] 0
 DEAL::2.52
 DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 0.0800000 2.34859e-08] 0
 DEAL::2.52
-DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 1.55927e-16 5.65685e-08] 0
+DEAL::<1.00000 0.00000> <0.923880 0.382683> <0.823223 0.00000> <0.748551 0.316342> [ 1.60121e-16 5.65685e-08] 0
 DEAL::2.49
 DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.920000 2.34859e-08] 0
 DEAL::2.49
-DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.840000 3.81726e-08] 0
+DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.840000 3.81724e-08] 0
 DEAL::2.49
 DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.760000 5.00262e-08] 0
 DEAL::2.49
@@ -120,7 +120,7 @@ DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00
 DEAL::2.49
 DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.280000 5.01490e-08] 0
 DEAL::2.49
-DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.200000 4.42923e-08] 0
+DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.200000 4.42919e-08] 0
 DEAL::2.49
 DEAL::<0.923880 -0.382683> <1.00000 0.00000> <0.748551 -0.316342> <0.823223 0.00000> [ 0.120000 2.83602e-08] 0
 DEAL::2.49
@@ -130,7 +130,7 @@ DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -
 DEAL::2.48
 DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.880000 2.88843e-08] 0
 DEAL::2.48
-DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.800000 4.56048e-08] 0
+DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.800000 4.56040e-08] 0
 DEAL::2.48
 DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.720000 5.21899e-08] 0
 DEAL::2.48
@@ -146,7 +146,7 @@ DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -
 DEAL::2.48
 DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.240000 5.59720e-08] 0
 DEAL::2.48
-DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.160000 4.34624e-08] 0
+DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.160000 4.34612e-08] 0
 DEAL::2.48
 DEAL::<0.707107 -0.707107> <0.923880 -0.382683> <0.603553 -0.603553> <0.748551 -0.316342> [ 0.0800000 2.73698e-08] 0
 DEAL::2.5
@@ -154,7 +154,7 @@ DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -
 DEAL::2.5
 DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.920000 2.73698e-08] 0
 DEAL::2.5
-DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.840000 4.34624e-08] 0
+DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.840000 4.34612e-08] 0
 DEAL::2.5
 DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.760000 5.59720e-08] 0
 DEAL::2.5
@@ -170,7 +170,7 @@ DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -
 DEAL::2.5
 DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.280000 5.21899e-08] 0
 DEAL::2.5
-DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.200000 4.56048e-08] 0
+DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.200000 4.56040e-08] 0
 DEAL::2.5
 DEAL::<0.382683 -0.923880> <0.707107 -0.707107> <0.316342 -0.748551> <0.603553 -0.603553> [ 0.120000 2.88843e-08] 0
 DEAL::2.5
@@ -180,7 +180,7 @@ DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.7
 DEAL::2.4
 DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.880000 2.83602e-08] 0
 DEAL::2.4
-DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.800000 4.42923e-08] 0
+DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.800000 4.42919e-08] 0
 DEAL::2.4
 DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.720000 5.01490e-08] 0
 DEAL::2.4
@@ -196,7 +196,7 @@ DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.7
 DEAL::2.4
 DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.240000 5.00262e-08] 0
 DEAL::2.4
-DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.160000 3.81726e-08] 0
+DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.160000 3.81724e-08] 0
 DEAL::2.4
 DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.748551> [ 0.0800000 2.34859e-08] 0
 DEAL::2.4
@@ -204,7 +204,7 @@ DEAL::<0.00000 -1.00000> <0.382683 -0.923880> <0.00000 -0.823223> <0.316342 -0.7
 DEAL::2.1
 DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.920000 2.34859e-08] 0
 DEAL::2.1
-DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.840000 3.81726e-08] 0
+DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.840000 3.81724e-08] 0
 DEAL::2.1
 DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.760000 5.00262e-08] 0
 DEAL::2.1
@@ -220,17 +220,17 @@ DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0
 DEAL::2.1
 DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.280000 5.01490e-08] 0
 DEAL::2.1
-DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.200000 4.42923e-08] 0
+DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.200000 4.42919e-08] 0
 DEAL::2.1
 DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.120000 2.83602e-08] 0
 DEAL::2.1
 DEAL::<-0.382683 -0.923880> <0.00000 -1.00000> <-0.316342 -0.748551> <0.00000 -0.823223> [ 0.0400000 2.65247e-08] 0
 DEAL::2.0
-DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.960000 2.66998e-08] 0
+DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.960000 2.66999e-08] 0
 DEAL::2.0
 DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.880000 2.88843e-08] 0
 DEAL::2.0
-DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.800000 4.56048e-08] 0
+DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.800000 4.56040e-08] 0
 DEAL::2.0
 DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.720000 5.21899e-08] 0
 DEAL::2.0
@@ -246,15 +246,15 @@ DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.3163
 DEAL::2.0
 DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.240000 5.59720e-08] 0
 DEAL::2.0
-DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.160000 4.34624e-08] 0
+DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.160000 4.34612e-08] 0
 DEAL::2.0
 DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 0.0800000 2.73698e-08] 0
 DEAL::2.0
-DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 2.92731e-16 6.82843e-08] 0
+DEAL::<-0.707107 -0.707107> <-0.382683 -0.923880> <-0.603553 -0.603553> <-0.316342 -0.748551> [ 4.13471e-15 6.82843e-08] 0
 DEAL::2.16
 DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 2.73698e-08 0.0800000] 0
 DEAL::2.16
-DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 4.34624e-08 0.160000] 0
+DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 4.34612e-08 0.160000] 0
 DEAL::2.16
 DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 5.59720e-08 0.240000] 0
 DEAL::2.16
@@ -270,17 +270,17 @@ DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.7485
 DEAL::2.16
 DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 5.21899e-08 0.720000] 0
 DEAL::2.16
-DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 4.56048e-08 0.800000] 0
+DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 4.56040e-08 0.800000] 0
 DEAL::2.16
 DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 2.88843e-08 0.880000] 0
 DEAL::2.16
-DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 2.66999e-08 0.960000] 0
+DEAL::<-0.707107 -0.707107> <-0.603553 -0.603553> <-0.923880 -0.382683> <-0.748551 -0.316342> [ 2.66998e-08 0.960000] 0
 DEAL::2.18
 DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 2.65247e-08 0.0400000] 0
 DEAL::2.18
 DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 2.83602e-08 0.120000] 0
 DEAL::2.18
-DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 4.42923e-08 0.200000] 0
+DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 4.42919e-08 0.200000] 0
 DEAL::2.18
 DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 5.01490e-08 0.280000] 0
 DEAL::2.18
@@ -296,7 +296,7 @@ DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223
 DEAL::2.18
 DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 5.00262e-08 0.760000] 0
 DEAL::2.18
-DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 3.81726e-08 0.840000] 0
+DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 3.81724e-08 0.840000] 0
 DEAL::2.18
 DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223 0.00000> [ 2.34859e-08 0.920000] 0
 DEAL::2.18
@@ -304,7 +304,7 @@ DEAL::<-0.923880 -0.382683> <-0.748551 -0.316342> <-1.00000 0.00000> <-0.823223
 DEAL::2.24
 DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 2.34859e-08 0.0800000] 0
 DEAL::2.24
-DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 3.81726e-08 0.160000] 0
+DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 3.81724e-08 0.160000] 0
 DEAL::2.24
 DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 5.00262e-08 0.240000] 0
 DEAL::2.24
@@ -320,7 +320,7 @@ DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.3
 DEAL::2.24
 DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 5.01490e-08 0.720000] 0
 DEAL::2.24
-DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 4.42923e-08 0.800000] 0
+DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 4.42919e-08 0.800000] 0
 DEAL::2.24
 DEAL::<-1.00000 0.00000> <-0.823223 0.00000> <-0.923880 0.382683> <-0.748551 0.316342> [ 2.83602e-08 0.880000] 0
 DEAL::2.24
@@ -330,7 +330,7 @@ DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553
 DEAL::2.26
 DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 2.88843e-08 0.120000] 0
 DEAL::2.26
-DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 4.56048e-08 0.200000] 0
+DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 4.56040e-08 0.200000] 0
 DEAL::2.26
 DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 5.21899e-08 0.280000] 0
 DEAL::2.26
@@ -346,7 +346,7 @@ DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553
 DEAL::2.26
 DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 5.59720e-08 0.760000] 0
 DEAL::2.26
-DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 4.34624e-08 0.840000] 0
+DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 4.34612e-08 0.840000] 0
 DEAL::2.26
 DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553 0.603553> [ 2.73698e-08 0.920000] 0
 DEAL::2.26
@@ -354,7 +354,7 @@ DEAL::<-0.923880 0.382683> <-0.748551 0.316342> <-0.707107 0.707107> <-0.603553
 DEAL::2.64
 DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 2.73698e-08 0.0800000] 0
 DEAL::2.64
-DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 4.34624e-08 0.160000] 0
+DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 4.34612e-08 0.160000] 0
 DEAL::2.64
 DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 5.59720e-08 0.240000] 0
 DEAL::2.64
@@ -370,17 +370,17 @@ DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342
 DEAL::2.64
 DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 5.21899e-08 0.720000] 0
 DEAL::2.64
-DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 4.56048e-08 0.800000] 0
+DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 4.56040e-08 0.800000] 0
 DEAL::2.64
 DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 2.88843e-08 0.880000] 0
 DEAL::2.64
-DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 2.66998e-08 0.960000] 0
+DEAL::<-0.707107 0.707107> <-0.603553 0.603553> <-0.382683 0.923880> <-0.316342 0.748551> [ 2.66999e-08 0.960000] 0
 DEAL::2.66
 DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 2.65247e-08 0.0400000] 0
 DEAL::2.66
 DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 2.83602e-08 0.120000] 0
 DEAL::2.66
-DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 4.42923e-08 0.200000] 0
+DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 4.42919e-08 0.200000] 0
 DEAL::2.66
 DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 5.01490e-08 0.280000] 0
 DEAL::2.66
@@ -396,6 +396,6 @@ DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823
 DEAL::2.66
 DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 5.00262e-08 0.760000] 0
 DEAL::2.66
-DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 3.81726e-08 0.840000] 0
+DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 3.81724e-08 0.840000] 0
 DEAL::2.66
 DEAL::<-0.382683 0.923880> <-0.316342 0.748551> <0.00000 1.00000> <0.00000 0.823223> [ 2.34859e-08 0.920000] 0
index de571c26aa5a9d26477e833a3f98acb2170cc566..a1f67718b2c2581cb7f83563facf02489bdd242b 100644 (file)
@@ -27,14 +27,14 @@ DEAL:2d::-0.7500
 DEAL:2d::OK
 DEAL:3d::0.000
 DEAL:3d::-1.000
-DEAL:3d::-2.220e-16
+DEAL:3d::0.000
 DEAL:3d::-1.750
-DEAL:3d::-2.220e-16
+DEAL:3d::2.220e-16
 DEAL:3d::-1.333
 DEAL:3d::0.000
 DEAL:3d::-1.000
-DEAL:3d::2.220e-16
+DEAL:3d::1.110e-16
 DEAL:3d::-0.3536
-DEAL:3d::2.220e-16
+DEAL:3d::4.441e-16
 DEAL:3d::-0.6495
 DEAL:3d::OK
index de571c26aa5a9d26477e833a3f98acb2170cc566..a1f67718b2c2581cb7f83563facf02489bdd242b 100644 (file)
@@ -27,14 +27,14 @@ DEAL:2d::-0.7500
 DEAL:2d::OK
 DEAL:3d::0.000
 DEAL:3d::-1.000
-DEAL:3d::-2.220e-16
+DEAL:3d::0.000
 DEAL:3d::-1.750
-DEAL:3d::-2.220e-16
+DEAL:3d::2.220e-16
 DEAL:3d::-1.333
 DEAL:3d::0.000
 DEAL:3d::-1.000
-DEAL:3d::2.220e-16
+DEAL:3d::1.110e-16
 DEAL:3d::-0.3536
-DEAL:3d::2.220e-16
+DEAL:3d::4.441e-16
 DEAL:3d::-0.6495
 DEAL:3d::OK
index c9708b797913128bed9346ed32aea2d6c12d41eb..3c30e4e0bc1d07094bee8735c9ef728b86b53c7a 100644 (file)
@@ -2,7 +2,7 @@
 //    $Id$
 //    Version: $Name$ 
 //
-//    Copyright (C) 2005 by the deal.II authors 
+//    Copyright (C) 2005, 2012 by the deal.II authors 
 //
 //    This file is subject to QPL and may not be  distributed
 //    without copyright and license information. Please refer
@@ -97,7 +97,8 @@ LaplaceKernelIntegration<2>::LaplaceKernelIntegration()
     static Quadrature<2> quadrature(qps, ws);
     fe_values = new FEValues<2,3>(fe,quadrature,
                                  update_values | 
-                                 update_jacobians );
+                                 update_jacobians |
+                                 update_normal_vectors);
 }
 
 template <int dim>
@@ -117,19 +118,22 @@ LaplaceKernelIntegration<2>::compute_SD_integral_on_cell(vector<double> &dst,
     Assert(dst.size() == 2,
           ExcDimensionMismatch(dst.size(), 2));
     fe_values->reinit(cell);
-    vector<Tensor<2,3> > jacobians = fe_values->get_jacobians();
+    vector<DerivativeForm<1,2,3> > jacobians = fe_values->get_jacobians();
+    vector<Point<3> > normals = fe_values->get_normal_vectors();
+
     Point<3> r,a1,a2,n,r_c,n_c;
     r_c = point-cell->center();
-    n_c = jacobians[4][2];
+    n_c = normals[4];
+       
     double rn_c = r_c*n_c;
     vector<double> i_S(4);
     vector<double> i_D(4);
     for (unsigned int q_point=0; q_point < 4; ++q_point)
     {
        r = point-cell->vertex(q_point);
-       a1 = jacobians[q_point][0];
-       a2 = jacobians[q_point][1];
-       n =  jacobians[q_point][2];
+       a1 = transpose(jacobians[q_point])[0];
+       a2 = transpose(jacobians[q_point])[1];
+       n =  normals[q_point];
        i_S[q_point]=term_S(r,a1,a2,n,rn_c);
        i_D[q_point]=term_D(r,a1,a2);
     }
index 58c7714bb8574dab08f5e5f4a69d16174d35e410..5753f101d0d1abbf8cfd0726ab8a5ce7516a70a7 100644 (file)
@@ -326,116 +326,116 @@ DEAL:1d::62 0.00
 DEAL:1d::63 0.00
 DEAL:1d::OK
 DEAL:2d::Estimated error indicators:
-DEAL:2d::28892.79
-DEAL:2d::28892.79
-DEAL:2d::28.96
-DEAL:2d::81.16
-DEAL:2d::95.16
-DEAL:2d::81.55
-DEAL:2d::42751.58
-DEAL:2d::50297.00
-DEAL:2d::55.64
-DEAL:2d::50297.00
-DEAL:2d::42751.58
-DEAL:2d::62.36
-DEAL:2d::42.12
-DEAL:2d::42751.58
-DEAL:2d::40.51
-DEAL:2d::50297.00
-DEAL:2d::50297.00
-DEAL:2d::62.36
-DEAL:2d::50.43
-DEAL:2d::49.34
-DEAL:2d::50297.00
-DEAL:2d::42.12
-DEAL:2d::42751.58
-DEAL:2d::31.06
-DEAL:2d::50296.99
-DEAL:2d::42751.58
-DEAL:2d::34.50
-DEAL:2d::28892.79
-DEAL:2d::16291.30
-DEAL:2d::42751.58
-DEAL:2d::53.15
-DEAL:2d::50297.00
-DEAL:2d::62.36
-DEAL:2d::71.02
-DEAL:2d::91.23
-DEAL:2d::91.23
-DEAL:2d::107.05
-DEAL:2d::28892.79
-DEAL:2d::16291.30
-DEAL:2d::28.96
-DEAL:2d::28892.79
-DEAL:2d::91.23
-DEAL:2d::107.05
-DEAL:2d::77.76
-DEAL:2d::79.17
-DEAL:2d::28892.78
-DEAL:2d::36.32
-DEAL:2d::16291.30
-DEAL:2d::28892.79
-DEAL:2d::53.15
-DEAL:2d::54.31
-DEAL:2d::42751.58
-DEAL:2d::50296.99
-DEAL:2d::7.64
-DEAL:2d::4.24
-DEAL:2d::7.30
-DEAL:2d::2.45
-DEAL:2d::4.66
-DEAL:2d::4.66
-DEAL:2d::5.60
-DEAL:2d::2059.95
-DEAL:2d::3803.08
-DEAL:2d::3803.08
-DEAL:2d::1.71
-DEAL:2d::7.92
-DEAL:2d::5.24
-DEAL:2d::8.24
-DEAL:2d::5.45
-DEAL:2d::8.24
-DEAL:2d::5.45
-DEAL:2d::7.80
-DEAL:2d::5.24
-DEAL:2d::10.74
-DEAL:2d::7.80
-DEAL:2d::6.65
-DEAL:2d::2.66
-DEAL:2d::3.00
-DEAL:2d::4.28
-DEAL:2d::6.01
-DEAL:2d::7.67
-DEAL:2d::3.48
-DEAL:2d::3.00
-DEAL:2d::5.27
-DEAL:2d::4.28
-DEAL:2d::11362.63
-DEAL:2d::4.32
-DEAL:2d::9965.63
-DEAL:2d::3.51
-DEAL:2d::5.46
-DEAL:2d::4.84
-DEAL:2d::4.51
-DEAL:2d::4.06
-DEAL:2d::3.24
-DEAL:2d::2.06
-DEAL:2d::8189.22
-DEAL:2d::6104.74
-DEAL:2d::0.31
-DEAL:2d::0.28
-DEAL:2d::0.28
-DEAL:2d::0.25
+DEAL:2d::27634.60
+DEAL:2d::27634.60
+DEAL:2d::29.16
+DEAL:2d::80.55
+DEAL:2d::94.47
+DEAL:2d::85.83
+DEAL:2d::40889.89
+DEAL:2d::48106.73
+DEAL:2d::55.17
+DEAL:2d::48106.73
+DEAL:2d::40889.89
+DEAL:2d::59.65
+DEAL:2d::42.47
+DEAL:2d::40889.89
+DEAL:2d::44.31
+DEAL:2d::48106.73
+DEAL:2d::48106.73
+DEAL:2d::59.65
+DEAL:2d::49.53
+DEAL:2d::49.78
+DEAL:2d::48106.73
+DEAL:2d::42.47
+DEAL:2d::40889.89
+DEAL:2d::35.10
+DEAL:2d::48106.72
+DEAL:2d::40889.89
+DEAL:2d::33.86
+DEAL:2d::27634.60
+DEAL:2d::15581.87
+DEAL:2d::40889.89
+DEAL:2d::50.83
+DEAL:2d::48106.73
+DEAL:2d::59.65
+DEAL:2d::70.20
+DEAL:2d::87.26
+DEAL:2d::87.26
+DEAL:2d::102.39
+DEAL:2d::27634.60
+DEAL:2d::15581.87
+DEAL:2d::29.16
+DEAL:2d::27634.60
+DEAL:2d::87.26
+DEAL:2d::102.39
+DEAL:2d::74.37
+DEAL:2d::78.86
+DEAL:2d::27634.60
+DEAL:2d::34.73
+DEAL:2d::15581.87
+DEAL:2d::27634.60
+DEAL:2d::50.83
+DEAL:2d::54.04
+DEAL:2d::40889.89
+DEAL:2d::48106.72
+DEAL:2d::14.62
+DEAL:2d::8.11
+DEAL:2d::13.97
+DEAL:2d::4.68
+DEAL:2d::9.00
+DEAL:2d::9.00
+DEAL:2d::10.71
+DEAL:2d::3940.49
+DEAL:2d::7274.93
+DEAL:2d::7274.93
+DEAL:2d::3.28
+DEAL:2d::15.15
+DEAL:2d::10.03
+DEAL:2d::15.76
+DEAL:2d::10.43
+DEAL:2d::15.76
+DEAL:2d::10.43
+DEAL:2d::14.98
+DEAL:2d::10.03
+DEAL:2d::20.55
+DEAL:2d::14.98
+DEAL:2d::12.71
+DEAL:2d::5.08
+DEAL:2d::5.74
+DEAL:2d::8.19
+DEAL:2d::11.49
+DEAL:2d::14.67
+DEAL:2d::6.67
+DEAL:2d::5.74
+DEAL:2d::10.07
+DEAL:2d::8.19
+DEAL:2d::21735.64
+DEAL:2d::8.26
+DEAL:2d::19063.32
+DEAL:2d::6.72
+DEAL:2d::10.45
+DEAL:2d::9.25
+DEAL:2d::8.62
+DEAL:2d::7.76
+DEAL:2d::6.20
+DEAL:2d::3.93
+DEAL:2d::15665.22
+DEAL:2d::11677.80
+DEAL:2d::1.20
+DEAL:2d::1.08
+DEAL:2d::1.08
+DEAL:2d::0.96
 DEAL:2d::Subdomain id=0
-DEAL:2d::0 28892.79
-DEAL:2d::1 28892.79
-DEAL:2d::2 28.96
+DEAL:2d::0 27634.60
+DEAL:2d::1 27634.60
+DEAL:2d::2 29.16
 DEAL:2d::3 0.00
 DEAL:2d::4 0.00
 DEAL:2d::5 0.00
-DEAL:2d::6 42751.58
-DEAL:2d::7 50297.00
-DEAL:2d::8 55.64
+DEAL:2d::6 40889.89
+DEAL:2d::7 48106.73
+DEAL:2d::8 55.17
 DEAL:2d::9 0.00
 DEAL:2d::10 0.00
 DEAL:2d::11 0.00
@@ -456,14 +456,14 @@ DEAL:2d::25 0.00
 DEAL:2d::26 0.00
 DEAL:2d::27 0.00
 DEAL:2d::28 0.00
-DEAL:2d::29 42751.58
-DEAL:2d::30 53.15
-DEAL:2d::31 50297.00
-DEAL:2d::32 62.36
-DEAL:2d::33 71.02
-DEAL:2d::34 91.23
-DEAL:2d::35 91.23
-DEAL:2d::36 107.05
+DEAL:2d::29 40889.89
+DEAL:2d::30 50.83
+DEAL:2d::31 48106.73
+DEAL:2d::32 59.65
+DEAL:2d::33 70.20
+DEAL:2d::34 87.26
+DEAL:2d::35 87.26
+DEAL:2d::36 102.39
 DEAL:2d::37 0.00
 DEAL:2d::38 0.00
 DEAL:2d::39 0.00
@@ -487,10 +487,10 @@ DEAL:2d::56 0.00
 DEAL:2d::57 0.00
 DEAL:2d::58 0.00
 DEAL:2d::59 0.00
-DEAL:2d::60 2059.95
-DEAL:2d::61 3803.08
-DEAL:2d::62 3803.08
-DEAL:2d::63 1.71
+DEAL:2d::60 3940.49
+DEAL:2d::61 7274.93
+DEAL:2d::62 7274.93
+DEAL:2d::63 3.28
 DEAL:2d::64 0.00
 DEAL:2d::65 0.00
 DEAL:2d::66 0.00
@@ -503,10 +503,10 @@ DEAL:2d::72 0.00
 DEAL:2d::73 0.00
 DEAL:2d::74 0.00
 DEAL:2d::75 0.00
-DEAL:2d::76 3.00
-DEAL:2d::77 4.28
-DEAL:2d::78 6.01
-DEAL:2d::79 7.67
+DEAL:2d::76 5.74
+DEAL:2d::77 8.19
+DEAL:2d::78 11.49
+DEAL:2d::79 14.67
 DEAL:2d::80 0.00
 DEAL:2d::81 0.00
 DEAL:2d::82 0.00
@@ -531,19 +531,19 @@ DEAL:2d::Subdomain id=1
 DEAL:2d::0 0.00
 DEAL:2d::1 0.00
 DEAL:2d::2 0.00
-DEAL:2d::3 81.16
-DEAL:2d::4 95.16
+DEAL:2d::3 80.55
+DEAL:2d::4 94.47
 DEAL:2d::5 0.00
 DEAL:2d::6 0.00
 DEAL:2d::7 0.00
 DEAL:2d::8 0.00
-DEAL:2d::9 50297.00
-DEAL:2d::10 42751.58
-DEAL:2d::11 62.36
-DEAL:2d::12 42.12
-DEAL:2d::13 42751.58
-DEAL:2d::14 40.51
-DEAL:2d::15 50297.00
+DEAL:2d::9 48106.73
+DEAL:2d::10 40889.89
+DEAL:2d::11 59.65
+DEAL:2d::12 42.47
+DEAL:2d::13 40889.89
+DEAL:2d::14 44.31
+DEAL:2d::15 48106.73
 DEAL:2d::16 0.00
 DEAL:2d::17 0.00
 DEAL:2d::18 0.00
@@ -565,10 +565,10 @@ DEAL:2d::33 0.00
 DEAL:2d::34 0.00
 DEAL:2d::35 0.00
 DEAL:2d::36 0.00
-DEAL:2d::37 28892.79
-DEAL:2d::38 16291.30
-DEAL:2d::39 28.96
-DEAL:2d::40 28892.79
+DEAL:2d::37 27634.60
+DEAL:2d::38 15581.87
+DEAL:2d::39 29.16
+DEAL:2d::40 27634.60
 DEAL:2d::41 0.00
 DEAL:2d::42 0.00
 DEAL:2d::43 0.00
@@ -581,10 +581,10 @@ DEAL:2d::49 0.00
 DEAL:2d::50 0.00
 DEAL:2d::51 0.00
 DEAL:2d::52 0.00
-DEAL:2d::53 7.64
-DEAL:2d::54 4.24
-DEAL:2d::55 7.30
-DEAL:2d::56 2.45
+DEAL:2d::53 14.62
+DEAL:2d::54 8.11
+DEAL:2d::55 13.97
+DEAL:2d::56 4.68
 DEAL:2d::57 0.00
 DEAL:2d::58 0.00
 DEAL:2d::59 0.00
@@ -592,10 +592,10 @@ DEAL:2d::60 0.00
 DEAL:2d::61 0.00
 DEAL:2d::62 0.00
 DEAL:2d::63 0.00
-DEAL:2d::64 7.92
-DEAL:2d::65 5.24
-DEAL:2d::66 8.24
-DEAL:2d::67 5.45
+DEAL:2d::64 15.15
+DEAL:2d::65 10.03
+DEAL:2d::66 15.76
+DEAL:2d::67 10.43
 DEAL:2d::68 0.00
 DEAL:2d::69 0.00
 DEAL:2d::70 0.00
@@ -608,10 +608,10 @@ DEAL:2d::76 0.00
 DEAL:2d::77 0.00
 DEAL:2d::78 0.00
 DEAL:2d::79 0.00
-DEAL:2d::80 3.48
-DEAL:2d::81 3.00
-DEAL:2d::82 5.27
-DEAL:2d::83 4.28
+DEAL:2d::80 6.67
+DEAL:2d::81 5.74
+DEAL:2d::82 10.07
+DEAL:2d::83 8.19
 DEAL:2d::84 0.00
 DEAL:2d::85 0.00
 DEAL:2d::86 0.00
@@ -645,9 +645,9 @@ DEAL:2d::12 0.00
 DEAL:2d::13 0.00
 DEAL:2d::14 0.00
 DEAL:2d::15 0.00
-DEAL:2d::16 50297.00
-DEAL:2d::17 62.36
-DEAL:2d::18 50.43
+DEAL:2d::16 48106.73
+DEAL:2d::17 59.65
+DEAL:2d::18 49.53
 DEAL:2d::19 0.00
 DEAL:2d::20 0.00
 DEAL:2d::21 0.00
@@ -670,18 +670,18 @@ DEAL:2d::37 0.00
 DEAL:2d::38 0.00
 DEAL:2d::39 0.00
 DEAL:2d::40 0.00
-DEAL:2d::41 91.23
-DEAL:2d::42 107.05
-DEAL:2d::43 77.76
-DEAL:2d::44 79.17
-DEAL:2d::45 28892.78
-DEAL:2d::46 36.32
-DEAL:2d::47 16291.30
-DEAL:2d::48 28892.79
-DEAL:2d::49 53.15
-DEAL:2d::50 54.31
-DEAL:2d::51 42751.58
-DEAL:2d::52 50296.99
+DEAL:2d::41 87.26
+DEAL:2d::42 102.39
+DEAL:2d::43 74.37
+DEAL:2d::44 78.86
+DEAL:2d::45 27634.60
+DEAL:2d::46 34.73
+DEAL:2d::47 15581.87
+DEAL:2d::48 27634.60
+DEAL:2d::49 50.83
+DEAL:2d::50 54.04
+DEAL:2d::51 40889.89
+DEAL:2d::52 48106.72
 DEAL:2d::53 0.00
 DEAL:2d::54 0.00
 DEAL:2d::55 0.00
@@ -713,10 +713,10 @@ DEAL:2d::80 0.00
 DEAL:2d::81 0.00
 DEAL:2d::82 0.00
 DEAL:2d::83 0.00
-DEAL:2d::84 11362.63
-DEAL:2d::85 4.32
-DEAL:2d::86 9965.63
-DEAL:2d::87 3.51
+DEAL:2d::84 21735.64
+DEAL:2d::85 8.26
+DEAL:2d::86 19063.32
+DEAL:2d::87 6.72
 DEAL:2d::88 0.00
 DEAL:2d::89 0.00
 DEAL:2d::90 0.00
@@ -735,7 +735,7 @@ DEAL:2d::1 0.00
 DEAL:2d::2 0.00
 DEAL:2d::3 0.00
 DEAL:2d::4 0.00
-DEAL:2d::5 81.55
+DEAL:2d::5 85.83
 DEAL:2d::6 0.00
 DEAL:2d::7 0.00
 DEAL:2d::8 0.00
@@ -749,16 +749,16 @@ DEAL:2d::15 0.00
 DEAL:2d::16 0.00
 DEAL:2d::17 0.00
 DEAL:2d::18 0.00
-DEAL:2d::19 49.34
-DEAL:2d::20 50297.00
-DEAL:2d::21 42.12
-DEAL:2d::22 42751.58
-DEAL:2d::23 31.06
-DEAL:2d::24 50296.99
-DEAL:2d::25 42751.58
-DEAL:2d::26 34.50
-DEAL:2d::27 28892.79
-DEAL:2d::28 16291.30
+DEAL:2d::19 49.78
+DEAL:2d::20 48106.73
+DEAL:2d::21 42.47
+DEAL:2d::22 40889.89
+DEAL:2d::23 35.10
+DEAL:2d::24 48106.72
+DEAL:2d::25 40889.89
+DEAL:2d::26 33.86
+DEAL:2d::27 27634.60
+DEAL:2d::28 15581.87
 DEAL:2d::29 0.00
 DEAL:2d::30 0.00
 DEAL:2d::31 0.00
@@ -787,9 +787,9 @@ DEAL:2d::53 0.00
 DEAL:2d::54 0.00
 DEAL:2d::55 0.00
 DEAL:2d::56 0.00
-DEAL:2d::57 4.66
-DEAL:2d::58 4.66
-DEAL:2d::59 5.60
+DEAL:2d::57 9.00
+DEAL:2d::58 9.00
+DEAL:2d::59 10.71
 DEAL:2d::60 0.00
 DEAL:2d::61 0.00
 DEAL:2d::62 0.00
@@ -798,14 +798,14 @@ DEAL:2d::64 0.00
 DEAL:2d::65 0.00
 DEAL:2d::66 0.00
 DEAL:2d::67 0.00
-DEAL:2d::68 8.24
-DEAL:2d::69 5.45
-DEAL:2d::70 7.80
-DEAL:2d::71 5.24
-DEAL:2d::72 10.74
-DEAL:2d::73 7.80
-DEAL:2d::74 6.65
-DEAL:2d::75 2.66
+DEAL:2d::68 15.76
+DEAL:2d::69 10.43
+DEAL:2d::70 14.98
+DEAL:2d::71 10.03
+DEAL:2d::72 20.55
+DEAL:2d::73 14.98
+DEAL:2d::74 12.71
+DEAL:2d::75 5.08
 DEAL:2d::76 0.00
 DEAL:2d::77 0.00
 DEAL:2d::78 0.00
@@ -818,18 +818,18 @@ DEAL:2d::84 0.00
 DEAL:2d::85 0.00
 DEAL:2d::86 0.00
 DEAL:2d::87 0.00
-DEAL:2d::88 5.46
-DEAL:2d::89 4.84
-DEAL:2d::90 4.51
-DEAL:2d::91 4.06
-DEAL:2d::92 3.24
-DEAL:2d::93 2.06
-DEAL:2d::94 8189.22
-DEAL:2d::95 6104.74
-DEAL:2d::96 0.31
-DEAL:2d::97 0.28
-DEAL:2d::98 0.28
-DEAL:2d::99 0.25
+DEAL:2d::88 10.45
+DEAL:2d::89 9.25
+DEAL:2d::90 8.62
+DEAL:2d::91 7.76
+DEAL:2d::92 6.20
+DEAL:2d::93 3.93
+DEAL:2d::94 15665.22
+DEAL:2d::95 11677.80
+DEAL:2d::96 1.20
+DEAL:2d::97 1.08
+DEAL:2d::98 1.08
+DEAL:2d::99 0.96
 DEAL:2d::Subdomain id=4
 DEAL:2d::0 0.00
 DEAL:2d::1 0.00
index 8b137891791fe96927ad78e64b0aad7bded08bdc..7f98e92a1c48a46cc7c7678454254e5bf2377fda 100644 (file)
@@ -1 +1,17 @@
 
+DEAL:2d_2::Estimated error:
+DEAL:2d_2::38.98
+DEAL:2d_2::38.98
+DEAL:2d_2::39.00
+DEAL:2d_2::11.51
+DEAL:2d_2::17.27
+DEAL:2d_2::17.27
+DEAL:2d_2::0.80
+DEAL:2d_3::Estimated error:
+DEAL:2d_3::38.98
+DEAL:2d_3::38.98
+DEAL:2d_3::39.00
+DEAL:2d_3::11.51
+DEAL:2d_3::17.27
+DEAL:2d_3::17.27
+DEAL:2d_3::0.80
index a27ac4fed780dc88da5f8747674af7797044179e..f2292383eae8554fe6e478a97f6cd7ba08388cf4 100644 (file)
@@ -45,9 +45,9 @@ DEAL::184. 4.79e+03 -138.
 DEAL::4.80e+03 4.57e+03 4.71e+03
 DEAL::-4.38e+03 4.79e+03 4.92e+03
 DEAL::component=2
-DEAL::-275. -1.35e-12 -138.
+DEAL::-275. -8.99e-13 -138.
 DEAL::-275. -459. 4.80e+03
-DEAL::-275. 2.77e-12 -138.
+DEAL::-275. 9.52e-13 -138.
 DEAL::-275. 459. 5.02e+03
 DEAL::4.67e+03 -91.8 -138.
 DEAL::4.67e+03 3.52e+03 4.80e+03
index 6164c9440b5c959f51fdd12b566845d6c5c68d8b..ce7f7211b8c4e7ac2d3a851a5f619c8602e154b2 100644 (file)
@@ -11,10 +11,10 @@ DEAL::-50.8 -779. -889. -641.
 DEAL::-1.43e+03 2.86e+03 2.65e+03 -2.63e+03
 DEAL::-1.43e+03 -2.60e+03 -2.12e+03 -1.44e+03
 DEAL::component=2
-DEAL::3.32e-09 278. 209. -236.
-DEAL::-4.12e-09 278. 209. -247.
-DEAL::-4.38e-10 374. 46.3 -122.
-DEAL::0.00 374. 46.3 -1.16e+03
+DEAL::3.99e-09 278. 209. -236.
+DEAL::-6.72e-10 278. 209. -247.
+DEAL::-1.25e-08 374. 46.3 -122.
+DEAL::8.76e-10 374. 46.3 -1.16e+03
 DEAL::component=3
 DEAL::0.00 0.00 2.69e-10 9.43
 DEAL::0.00 0.00 8.06e-10 9.43
@@ -36,56 +36,56 @@ DEAL::0.00 5.09e-10 -2.13e-10 -3.94e-10 1.08e-09 -3.94e-10 -1.63e-09 9.52e-10 -1
 DEAL::-5.42e-10 4.92e-11 5.42e-10 1.97e-10 -8.21e-10 -3.94e-10 -2.36e-09 -7.88e-10 -5.18e-26
 DEAL::0.00 4.92e-11 4.93e-11 -3.94e-10 0.00 -1.38e-09 -7.88e-10 -7.88e-10 0.00
 DEAL::component=1
-DEAL::1.68e-06 -1.50e+03 -752. -1.50e+03 -1.01e-07 1.99e+04 -752. 1.99e+04 4.88e-07
-DEAL::3.02e-07 1.50e+03 752. 1.50e+03 8.51e-08 2.07e+04 752. 2.07e+04 4.58e-07
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 1.38e-07 1.99e+04 2.12e+04 1.99e+04 3.80e-06
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 1.56e-07 2.07e+04 -1.94e+04 2.07e+04 -4.37e-07
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.99e+04 -752. 1.99e+04 -2.58e-08
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 1.09e-06 2.07e+04 752. 2.07e+04 3.03e-13
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -9.04e-07 1.99e+04 2.12e+04 1.99e+04 -8.68e-07
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 6.72e-08 2.07e+04 -1.94e+04 2.07e+04 -8.99e-07
+DEAL::4.13e-07 -1.50e+03 -752. -1.50e+03 -5.02e-08 1.99e+04 -752. 1.99e+04 -9.53e-07
+DEAL::-1.68e-07 1.50e+03 752. 1.50e+03 1.82e-07 2.07e+04 752. 2.07e+04 -3.99e-07
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 8.52e-07 1.99e+04 2.12e+04 1.99e+04 3.27e-06
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 9.12e-07 2.07e+04 -1.94e+04 2.07e+04 -8.34e-07
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 2.73e-07 1.99e+04 -752. 1.99e+04 5.33e-07
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 9.89e-07 2.07e+04 752. 2.07e+04 3.03e-13
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -9.17e-07 1.99e+04 2.12e+04 1.99e+04 -4.73e-07
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 -3.36e-08 2.07e+04 -1.94e+04 2.07e+04 -3.80e-07
 DEAL::component=2
-DEAL::-2.48e-08 -1.88e+03 2.02e+04 -1.88e+03 3.25e-07 -376. 2.02e+04 -376. -6.30e-08
-DEAL::-3.77e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.51e-06
-DEAL::-3.62e-07 1.88e+03 2.11e+04 1.88e+03 1.43e-06 376. 2.11e+04 376. 7.73e-07
-DEAL::3.78e-07 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -1.37e-06
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. 4.62e-07
+DEAL::-6.06e-08 -1.88e+03 2.02e+04 -1.88e+03 1.25e-07 -376. 2.02e+04 -376. 5.04e-07
+DEAL::-5.05e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.26e-06
+DEAL::9.23e-08 1.88e+03 2.11e+04 1.88e+03 -7.91e-07 376. 2.11e+04 376. -1.34e-07
+DEAL::-8.41e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -5.34e-07
+DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -4.41e-07
 DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
-DEAL::-1.92e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -2.52e-08
+DEAL::-1.98e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. 4.20e-08
 DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
 DEAL::component=3
-DEAL::-2.82e-07 2.06e+04 -1.50e+03 2.06e+04 -9.88e-08 -752. -1.50e+03 -752. 7.71e-07
-DEAL::2.10e-07 2.06e+04 -1.50e+03 2.06e+04 2.58e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::2.61e-06 2.06e+04 9.89e+03 2.06e+04 -2.63e-07 -752. 9.89e+03 -752. 1.50e+03
-DEAL::-2.14e-07 2.06e+04 9.89e+03 2.06e+04 -3.18e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -5.30e-07 752. 1.50e+03 752. 2.16e-06
+DEAL::-2.60e-08 2.06e+04 -1.50e+03 2.06e+04 -4.31e-07 -752. -1.50e+03 -752. 4.48e-07
+DEAL::5.46e-08 2.06e+04 -1.50e+03 2.06e+04 1.78e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::3.66e-06 2.06e+04 9.89e+03 2.06e+04 -3.93e-07 -752. 9.89e+03 -752. 1.50e+03
+DEAL::-8.57e-07 2.06e+04 9.89e+03 2.06e+04 -2.68e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -4.94e-07 752. 1.50e+03 752. 1.88e-06
 DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 2.25e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-1.07e-06 2.15e+04 -8.16e+03 2.15e+04 -4.54e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.64e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::-1.25e-06 2.15e+04 -8.16e+03 2.15e+04 -1.00e-06 752. -8.16e+03 752. 1.50e+03
+DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.47e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
 DEAL::component=4
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 -1.58e-09 0.00 9.46e-09 3.88e-26
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 6.04e-09 -3.15e-09 1.26e-08 1.68e-08
-DEAL::0.00 0.00 0.00 5.25e-09 -2.89e-09 2.10e-09 5.25e-09 -2.13e-08 1.58e-08
-DEAL::0.00 0.00 0.00 0.00 -2.89e-09 0.00 0.00 -1.16e-08 -5.25e-09
-DEAL::0.00 0.00 0.00 -2.89e-09 1.31e-09 -1.58e-09 -4.20e-09 4.20e-09 -9.86e-32
-DEAL::0.00 0.00 0.00 0.00 2.63e-09 -2.63e-10 -4.20e-09 1.26e-08 1.38e-25
-DEAL::0.00 0.00 0.00 -3.41e-09 -1.31e-09 4.20e-09 -2.36e-09 1.08e-08 5.25e-09
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.58e-09 0.00 -1.05e-09 0.00
+DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
+DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
+DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
+DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
+DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
+DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
+DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
+DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
 DEAL::component=5
-DEAL::1.30e-09 2.63e-09 2.20e-09 -1.20e-09 -8.44e-26 -7.61e-10 1.03e-08 3.53e-25 4.35e-10
-DEAL::-2.63e-10 2.63e-09 6.41e-09 0.00 0.00 6.52e-10 -3.94e-09 2.36e-09 1.58e-08
-DEAL::4.98e-09 -3.94e-09 5.88e-09 -1.20e-09 -1.14e-25 -7.61e-10 1.93e-08 -1.05e-08 1.72e-08
-DEAL::0.00 -3.94e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
-DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 1.24e-26 -8.70e-10 -1.81e-10 -3.68e-09 -5.69e-09
-DEAL::0.00 1.58e-09 2.63e-10 0.00 0.00 0.00 5.78e-09 4.47e-09 1.68e-25
-DEAL::-1.10e-09 -1.31e-09 1.20e-09 1.74e-09 -1.42e-25 -8.70e-10 -7.06e-10 -8.93e-09 -4.35e-10
-DEAL::0.00 0.00 -1.31e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
+DEAL::2.35e-09 1.58e-09 2.20e-09 -1.20e-09 4.32e-26 -7.61e-10 1.14e-08 4.33e-25 4.35e-10
+DEAL::-1.31e-09 1.58e-09 6.15e-09 0.00 0.00 6.52e-10 -2.89e-09 0.00 1.58e-08
+DEAL::4.98e-09 -2.89e-09 6.14e-09 -1.20e-09 -7.35e-26 -7.61e-10 1.82e-08 -1.05e-08 2.14e-08
+DEAL::0.00 -2.89e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
+DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 9.45e-26 -8.70e-10 -1.81e-10 -6.81e-26 -5.69e-09
+DEAL::0.00 2.63e-09 -2.63e-10 0.00 0.00 0.00 2.36e-09 5.25e-09 1.25e-25
+DEAL::-4.52e-11 -1.31e-09 9.42e-10 1.74e-09 6.17e-26 -8.70e-10 -1.76e-09 -1.26e-08 -4.35e-10
+DEAL::0.00 0.00 -1.58e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
 DEAL::component=6
-DEAL::-1.63e-10 2.68e-09 2.13e-26 1.00e-08 -1.63e-10 3.56e-26 -7.07e-10 -4.89e-10 1.10e-25
-DEAL::-4.35e-10 2.84e-09 5.25e-09 -2.84e-09 -2.17e-10 7.88e-09 -3.70e-09 2.17e-10 6.38e-25
-DEAL::1.10e-09 -3.17e-09 3.94e-09 7.57e-09 -3.17e-09 1.58e-08 -2.17e-10 -5.98e-09 6.15e-25
-DEAL::0.00 -2.63e-09 -1.31e-09 -5.25e-10 -2.63e-09 -2.63e-09 0.00 0.00 0.00
-DEAL::-1.63e-10 1.11e-09 1.13e-27 -4.71e-10 -1.63e-10 -2.63e-09 -7.07e-10 -4.89e-10 -4.91e-27
-DEAL::-4.35e-10 1.27e-09 1.00e-26 -7.43e-10 2.41e-09 3.47e-26 -3.70e-09 2.17e-10 -5.71e-26
-DEAL::-2.84e-09 -5.44e-10 1.31e-09 2.32e-09 -3.17e-09 -5.25e-09 -2.17e-10 -5.98e-09 -1.40e-25
-DEAL::0.00 0.00 0.00 -5.25e-10 0.00 -2.63e-09 0.00 0.00 0.00
+DEAL::-1.63e-10 2.42e-09 2.38e-26 4.78e-09 -1.63e-10 1.76e-26 -7.07e-10 -4.89e-10 3.15e-26
+DEAL::-4.35e-10 2.58e-09 4.20e-09 -3.37e-09 -2.17e-10 7.88e-09 -3.70e-09 2.17e-10 6.90e-25
+DEAL::1.10e-09 -3.43e-09 3.94e-09 8.10e-09 -3.17e-09 8.41e-09 -2.17e-10 -5.98e-09 6.64e-25
+DEAL::0.00 -2.89e-09 -1.31e-09 -5.25e-10 -2.63e-09 -2.63e-09 0.00 0.00 0.00
+DEAL::-1.63e-10 1.11e-09 -2.51e-27 -4.71e-10 -1.63e-10 -2.63e-09 -7.07e-10 -4.89e-10 -5.96e-26
+DEAL::-4.35e-10 1.27e-09 1.00e-26 -7.43e-10 3.08e-10 -1.08e-26 -3.70e-09 2.17e-10 -5.71e-26
+DEAL::-1.79e-09 -8.06e-10 1.31e-09 -2.41e-09 -3.17e-09 -7.87e-26 -2.17e-10 -5.98e-09 5.87e-26
+DEAL::0.00 -2.63e-10 0.00 -5.25e-10 0.00 -2.63e-09 0.00 0.00 0.00
index 26d0e7841a1806c40233a367ac03392443146e76..332092d38321431733d4696d4ab885469a203a9f 100644 (file)
@@ -6,35 +6,35 @@ DEAL::-22.7 -530. -617. -425.
 DEAL::-949. 1.90e+03 1.76e+03 -1.73e+03
 DEAL::-949. -1.73e+03 -1.39e+03 -877.
 DEAL::component=1
-DEAL::1.97e-09 188. 147. -148.
-DEAL::-2.42e-09 188. 147. -204.
-DEAL::-2.92e-10 174. -23.5 33.7
-DEAL::0.00 174. -23.5 -967.
+DEAL::2.33e-09 188. 147. -148.
+DEAL::-3.58e-10 188. 147. -204.
+DEAL::-7.59e-09 174. -23.5 33.7
+DEAL::5.84e-10 174. -23.5 -967.
 DEAL::FE=FE_RaviartThomas<3>(1)
 DEAL::component=0
-DEAL::1.05e-06 -1.50e+03 -752. -1.50e+03 -1.01e-07 1.24e+04 -752. 1.24e+04 2.78e-07
-DEAL::4.29e-07 1.50e+03 752. 1.50e+03 1.38e-08 1.32e+04 752. 1.32e+04 2.06e-07
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 9.59e-08 1.24e+04 2.12e+04 1.24e+04 2.37e-06
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 1.13e-07 1.32e+04 -1.94e+04 1.32e+04 -2.69e-07
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.24e+04 -752. 1.24e+04 1.62e-08
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 6.40e-07 1.32e+04 752. 1.32e+04 1.80e-13
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -5.68e-07 1.24e+04 2.12e+04 1.24e+04 -5.32e-07
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.52e-08 1.32e+04 -1.94e+04 1.32e+04 -5.63e-07
+DEAL::4.13e-07 -1.50e+03 -752. -1.50e+03 -5.02e-08 1.24e+04 -752. 1.24e+04 -5.75e-07
+DEAL::2.52e-07 1.50e+03 752. 1.50e+03 6.84e-08 1.32e+04 752. 1.32e+04 -3.15e-07
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 5.58e-07 1.24e+04 2.12e+04 1.24e+04 2.05e-06
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 5.76e-07 1.32e+04 -1.94e+04 1.32e+04 -5.40e-07
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 1.89e-07 1.24e+04 -752. 1.24e+04 3.23e-07
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 6.23e-07 1.32e+04 752. 1.32e+04 1.80e-13
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -5.39e-07 1.24e+04 2.12e+04 1.24e+04 -2.63e-07
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 8.41e-09 1.32e+04 -1.94e+04 1.32e+04 -2.54e-07
 DEAL::component=1
-DEAL::-6.69e-08 -1.88e+03 1.27e+04 -1.88e+03 4.09e-07 -376. 1.27e+04 -376. -2.10e-08
-DEAL::-2.50e-07 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 2.17e-06
-DEAL::-2.23e-07 1.88e+03 1.36e+04 1.88e+03 8.38e-07 376. 1.36e+04 376. 4.79e-07
-DEAL::2.52e-07 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 -8.66e-07
-DEAL::-8.02e-09 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. 2.94e-07
+DEAL::-6.06e-08 -1.88e+03 1.27e+04 -1.88e+03 2.93e-07 -376. 1.27e+04 -376. 2.94e-07
+DEAL::-2.95e-07 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 2.08e-06
+DEAL::2.11e-08 1.88e+03 1.36e+04 1.88e+03 -3.29e-07 376. 1.36e+04 376. -9.25e-08
+DEAL::0.00 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 -3.24e-07
+DEAL::-8.02e-09 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. -2.73e-07
 DEAL::-2.14e-08 1.48e+04 1.27e+04 1.48e+04 -2.71e+04 1.63e+04 1.27e+04 1.63e+04 4.27e-13
-DEAL::-1.23e-06 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. -2.52e-08
+DEAL::-1.26e-06 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. 2.05e-13
 DEAL::0.00 -1.30e+04 1.36e+04 -1.30e+04 -2.71e+04 -1.46e+04 1.36e+04 -1.46e+04 0.00
 DEAL::component=2
-DEAL::-1.98e-07 1.31e+04 -1.50e+03 1.31e+04 -9.88e-08 -752. -1.50e+03 -752. 6.45e-07
-DEAL::1.26e-07 1.31e+04 -1.50e+03 1.31e+04 1.61e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::1.60e-06 1.31e+04 9.89e+03 1.31e+04 -1.37e-07 -752. 9.89e+03 -752. 1.50e+03
-DEAL::-1.30e-07 1.31e+04 9.89e+03 1.31e+04 -1.96e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::-1.10e-07 1.40e+04 1.50e+03 1.40e+04 -3.61e-07 752. 1.50e+03 752. 1.37e-06
-DEAL::0.00 1.40e+04 1.50e+03 1.40e+04 1.46e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-7.07e-07 1.40e+04 -8.16e+03 1.40e+04 -2.86e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 1.40e+04 -8.16e+03 1.40e+04 2.37e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::-6.80e-08 1.31e+04 -1.50e+03 1.31e+04 -3.05e-07 -752. -1.50e+03 -752. 4.90e-07
+DEAL::5.46e-08 1.31e+04 -1.50e+03 1.31e+04 1.11e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::2.24e-06 1.31e+04 9.89e+03 1.31e+04 -2.25e-07 -752. 9.89e+03 -752. 1.50e+03
+DEAL::-5.21e-07 1.31e+04 9.89e+03 1.31e+04 -1.67e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::-1.10e-07 1.40e+04 1.50e+03 1.40e+04 -3.26e-07 752. 1.50e+03 752. 1.29e-06
+DEAL::0.00 1.40e+04 1.50e+03 1.40e+04 1.45e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
+DEAL::-7.99e-07 1.40e+04 -8.16e+03 1.40e+04 -6.22e-07 752. -8.16e+03 752. 1.50e+03
+DEAL::0.00 1.40e+04 -8.16e+03 1.40e+04 2.21e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
index eef21cbf9918f072e442eed6fe681f8292a4c916..427b559a04419391ec468892cb529db160d10b92 100644 (file)
@@ -6,35 +6,35 @@ DEAL::-22.7 -530. -617. -425.
 DEAL::-949. 1.90e+03 1.76e+03 -1.73e+03
 DEAL::-949. -1.73e+03 -1.39e+03 -877.
 DEAL::component=1
-DEAL::1.97e-09 188. 147. -148.
-DEAL::-2.42e-09 188. 147. -204.
-DEAL::-2.92e-10 174. -23.5 33.7
-DEAL::0.00 174. -23.5 -967.
+DEAL::2.33e-09 188. 147. -148.
+DEAL::-3.58e-10 188. 147. -204.
+DEAL::-7.59e-09 174. -23.5 33.7
+DEAL::5.84e-10 174. -23.5 -967.
 DEAL::FE=FESystem<3>[FE_RaviartThomas<3>(1)]
 DEAL::component=0
-DEAL::1.05e-06 -1.50e+03 -752. -1.50e+03 -1.01e-07 1.24e+04 -752. 1.24e+04 2.78e-07
-DEAL::4.29e-07 1.50e+03 752. 1.50e+03 1.38e-08 1.32e+04 752. 1.32e+04 2.06e-07
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 9.59e-08 1.24e+04 2.12e+04 1.24e+04 2.37e-06
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 1.13e-07 1.32e+04 -1.94e+04 1.32e+04 -2.69e-07
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.24e+04 -752. 1.24e+04 1.62e-08
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 6.40e-07 1.32e+04 752. 1.32e+04 1.80e-13
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -5.68e-07 1.24e+04 2.12e+04 1.24e+04 -5.32e-07
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 2.52e-08 1.32e+04 -1.94e+04 1.32e+04 -5.63e-07
+DEAL::4.13e-07 -1.50e+03 -752. -1.50e+03 -5.02e-08 1.24e+04 -752. 1.24e+04 -5.75e-07
+DEAL::2.52e-07 1.50e+03 752. 1.50e+03 6.84e-08 1.32e+04 752. 1.32e+04 -3.15e-07
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 5.58e-07 1.24e+04 2.12e+04 1.24e+04 2.05e-06
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 5.76e-07 1.32e+04 -1.94e+04 1.32e+04 -5.40e-07
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 1.89e-07 1.24e+04 -752. 1.24e+04 3.23e-07
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 6.23e-07 1.32e+04 752. 1.32e+04 1.80e-13
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -5.39e-07 1.24e+04 2.12e+04 1.24e+04 -2.63e-07
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 8.41e-09 1.32e+04 -1.94e+04 1.32e+04 -2.54e-07
 DEAL::component=1
-DEAL::-6.69e-08 -1.88e+03 1.27e+04 -1.88e+03 4.09e-07 -376. 1.27e+04 -376. -2.10e-08
-DEAL::-2.50e-07 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 2.17e-06
-DEAL::-2.23e-07 1.88e+03 1.36e+04 1.88e+03 8.38e-07 376. 1.36e+04 376. 4.79e-07
-DEAL::2.52e-07 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 -8.66e-07
-DEAL::-8.02e-09 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. 2.94e-07
+DEAL::-6.06e-08 -1.88e+03 1.27e+04 -1.88e+03 2.93e-07 -376. 1.27e+04 -376. 2.94e-07
+DEAL::-2.95e-07 -1.88e+03 1.27e+04 -1.88e+03 3.76e+03 1.63e+04 1.27e+04 1.63e+04 2.08e-06
+DEAL::2.11e-08 1.88e+03 1.36e+04 1.88e+03 -3.29e-07 376. 1.36e+04 376. -9.25e-08
+DEAL::0.00 1.88e+03 1.36e+04 1.88e+03 3.76e+03 -1.46e+04 1.36e+04 -1.46e+04 -3.24e-07
+DEAL::-8.02e-09 1.48e+04 1.27e+04 1.48e+04 752. -376. 1.27e+04 -376. -2.73e-07
 DEAL::-2.14e-08 1.48e+04 1.27e+04 1.48e+04 -2.71e+04 1.63e+04 1.27e+04 1.63e+04 4.27e-13
-DEAL::-1.23e-06 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. -2.52e-08
+DEAL::-1.26e-06 -1.30e+04 1.36e+04 -1.30e+04 752. 376. 1.36e+04 376. 2.05e-13
 DEAL::0.00 -1.30e+04 1.36e+04 -1.30e+04 -2.71e+04 -1.46e+04 1.36e+04 -1.46e+04 0.00
 DEAL::component=2
-DEAL::-1.98e-07 1.31e+04 -1.50e+03 1.31e+04 -9.88e-08 -752. -1.50e+03 -752. 6.45e-07
-DEAL::1.26e-07 1.31e+04 -1.50e+03 1.31e+04 1.61e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::1.60e-06 1.31e+04 9.89e+03 1.31e+04 -1.37e-07 -752. 9.89e+03 -752. 1.50e+03
-DEAL::-1.30e-07 1.31e+04 9.89e+03 1.31e+04 -1.96e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::-1.10e-07 1.40e+04 1.50e+03 1.40e+04 -3.61e-07 752. 1.50e+03 752. 1.37e-06
-DEAL::0.00 1.40e+04 1.50e+03 1.40e+04 1.46e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-7.07e-07 1.40e+04 -8.16e+03 1.40e+04 -2.86e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 1.40e+04 -8.16e+03 1.40e+04 2.37e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::-6.80e-08 1.31e+04 -1.50e+03 1.31e+04 -3.05e-07 -752. -1.50e+03 -752. 4.90e-07
+DEAL::5.46e-08 1.31e+04 -1.50e+03 1.31e+04 1.11e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::2.24e-06 1.31e+04 9.89e+03 1.31e+04 -2.25e-07 -752. 9.89e+03 -752. 1.50e+03
+DEAL::-5.21e-07 1.31e+04 9.89e+03 1.31e+04 -1.67e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::-1.10e-07 1.40e+04 1.50e+03 1.40e+04 -3.26e-07 752. 1.50e+03 752. 1.29e-06
+DEAL::0.00 1.40e+04 1.50e+03 1.40e+04 1.45e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
+DEAL::-7.99e-07 1.40e+04 -8.16e+03 1.40e+04 -6.22e-07 752. -8.16e+03 752. 1.50e+03
+DEAL::0.00 1.40e+04 -8.16e+03 1.40e+04 2.21e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
index f7d62a8702c4aada05d8666955f34835663dfbef..dbf3621bf04780564a30cfd9a403ee1dc492dde3 100644 (file)
@@ -40,13 +40,13 @@ DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(0)]
 DEAL::component=0
 DEAL::2.37 4.73 9.46
 DEAL::-5.39e-12 -275. -138.
-DEAL::-275. -1.35e-12 -138.
+DEAL::-275. -8.99e-13 -138.
 DEAL::2.37 4.73 9.46
 DEAL::5.50e-12 -275. -138.
 DEAL::-275. -459. 4.80e+03
 DEAL::2.37 4.73 9.46
 DEAL::-367. -275. 4.71e+03
-DEAL::-275. 2.77e-12 -138.
+DEAL::-275. 9.52e-13 -138.
 DEAL::2.37 4.73 9.46
 DEAL::367. -275. 4.92e+03
 DEAL::-275. 459. 5.02e+03
@@ -64,13 +64,13 @@ DEAL::-4.38e+03 4.79e+03 4.92e+03
 DEAL::4.88e+03 -3.09e+03 5.02e+03
 DEAL::component=1
 DEAL::-5.39e-12 -275. -138.
-DEAL::-275. -1.35e-12 -138.
+DEAL::-275. -8.99e-13 -138.
 DEAL::-275. -138. -1.82e-12
 DEAL::5.50e-12 -275. -138.
 DEAL::-275. -459. 4.80e+03
 DEAL::-275. 4.90e+03 -367.
 DEAL::-367. -275. 4.71e+03
-DEAL::-275. 2.77e-12 -138.
+DEAL::-275. 9.52e-13 -138.
 DEAL::4.76e+03 -138. -184.
 DEAL::367. -275. 4.92e+03
 DEAL::-275. 459. 5.02e+03
@@ -88,13 +88,13 @@ DEAL::-4.38e+03 4.79e+03 4.92e+03
 DEAL::4.88e+03 -3.09e+03 5.02e+03
 DEAL::4.97e+03 5.11e+03 -1.81e+03
 DEAL::component=2
-DEAL::-275. -1.35e-12 -138.
+DEAL::-275. -8.99e-13 -138.
 DEAL::-275. -138. -1.82e-12
 DEAL::0.00 5.60 22.4
 DEAL::-275. -459. 4.80e+03
 DEAL::-275. 4.90e+03 -367.
 DEAL::0.00 5.60 22.4
-DEAL::-275. 2.77e-12 -138.
+DEAL::-275. 9.52e-13 -138.
 DEAL::4.76e+03 -138. -184.
 DEAL::0.00 5.60 22.4
 DEAL::-275. 459. 5.02e+03
index e31d8cc541ca3bae7cbc0e7855223e5614179107..869e6e51659aa410b3fb232c01ed64eb17a5b540 100644 (file)
@@ -11,21 +11,21 @@ DEAL::0.00 3.45 3.45 3.99
 DEAL::-1.43e+03 -2.60e+03 -2.12e+03 -1.44e+03
 DEAL::component=1
 DEAL::-50.8 877. 848. -953.
-DEAL::3.32e-09 278. 209. -236.
+DEAL::3.99e-09 278. 209. -236.
 DEAL::-50.8 -779. -889. -641.
-DEAL::-4.12e-09 278. 209. -247.
+DEAL::-6.72e-10 278. 209. -247.
 DEAL::-1.43e+03 2.86e+03 2.65e+03 -2.63e+03
-DEAL::-4.38e-10 374. 46.3 -122.
+DEAL::-1.25e-08 374. 46.3 -122.
 DEAL::-1.43e+03 -2.60e+03 -2.12e+03 -1.44e+03
-DEAL::0.00 374. 46.3 -1.16e+03
+DEAL::8.76e-10 374. 46.3 -1.16e+03
 DEAL::component=2
-DEAL::3.32e-09 278. 209. -236.
+DEAL::3.99e-09 278. 209. -236.
 DEAL::0.00 0.00 2.69e-10 9.43
-DEAL::-4.12e-09 278. 209. -247.
+DEAL::-6.72e-10 278. 209. -247.
 DEAL::0.00 0.00 8.06e-10 9.43
-DEAL::-4.38e-10 374. 46.3 -122.
+DEAL::-1.25e-08 374. 46.3 -122.
 DEAL::0.00 0.00 -8.76e-10 25.0
-DEAL::0.00 374. 46.3 -1.16e+03
+DEAL::8.76e-10 374. 46.3 -1.16e+03
 DEAL::0.00 0.00 8.76e-10 25.0
 DEAL::component=3
 DEAL::0.00 0.00 2.69e-10 9.43
@@ -39,126 +39,126 @@ DEAL::8.76e-10 25.0 50.0 57.8
 DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(0)]
 DEAL::component=0
 DEAL::0.00 9.85e-10 5.09e-10 1.54e-09 2.44e-26 5.91e-10 3.28e-10 4.60e-10 -2.17e-09
-DEAL::1.68e-06 -1.50e+03 -752. -1.50e+03 -1.01e-07 1.99e+04 -752. 1.99e+04 4.88e-07
-DEAL::-2.48e-08 -1.88e+03 2.02e+04 -1.88e+03 3.25e-07 -376. 2.02e+04 -376. -6.30e-08
+DEAL::4.13e-07 -1.50e+03 -752. -1.50e+03 -5.02e-08 1.99e+04 -752. 1.99e+04 -9.53e-07
+DEAL::-6.06e-08 -1.88e+03 2.02e+04 -1.88e+03 1.25e-07 -376. 2.02e+04 -376. 5.04e-07
 DEAL::0.00 9.85e-10 1.74e-09 -1.38e-09 0.00 2.53e-09 -1.30e-09 5.58e-10 1.64e-09
-DEAL::3.02e-07 1.50e+03 752. 1.50e+03 8.51e-08 2.07e+04 752. 2.07e+04 4.58e-07
-DEAL::-3.77e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.51e-06
+DEAL::-1.68e-07 1.50e+03 752. 1.50e+03 1.82e-07 2.07e+04 752. 2.07e+04 -3.99e-07
+DEAL::-5.05e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.26e-06
 DEAL::4.27e-10 -1.18e-09 1.26e-09 2.89e-09 -8.21e-10 2.89e-09 -8.54e-10 -7.88e-10 1.64e-09
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 1.38e-07 1.99e+04 2.12e+04 1.99e+04 3.80e-06
-DEAL::-3.62e-07 1.88e+03 2.11e+04 1.88e+03 1.43e-06 376. 2.11e+04 376. 7.73e-07
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 8.52e-07 1.99e+04 2.12e+04 1.99e+04 3.27e-06
+DEAL::9.23e-08 1.88e+03 2.11e+04 1.88e+03 -7.91e-07 376. 2.11e+04 376. -1.34e-07
 DEAL::0.00 -1.18e-09 -2.30e-10 -3.94e-10 -8.21e-10 -4.60e-10 -7.88e-10 -7.88e-10 -2.17e-09
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 1.56e-07 2.07e+04 -1.94e+04 2.07e+04 -4.37e-07
-DEAL::3.78e-07 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -1.37e-06
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 9.12e-07 2.07e+04 -1.94e+04 2.07e+04 -8.34e-07
+DEAL::-8.41e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -5.34e-07
 DEAL::0.00 5.09e-10 -1.97e-10 1.97e-10 -1.94e-26 -1.38e-09 3.28e-10 4.60e-10 3.23e-27
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.99e+04 -752. 1.99e+04 -2.58e-08
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. 4.62e-07
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 2.73e-07 1.99e+04 -752. 1.99e+04 5.33e-07
+DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -4.41e-07
 DEAL::0.00 5.09e-10 -2.13e-10 -3.94e-10 1.08e-09 -3.94e-10 -1.63e-09 9.52e-10 -1.11e-26
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 1.09e-06 2.07e+04 752. 2.07e+04 3.03e-13
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 9.89e-07 2.07e+04 752. 2.07e+04 3.03e-13
 DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
 DEAL::-5.42e-10 4.92e-11 5.42e-10 1.97e-10 -8.21e-10 -3.94e-10 -2.36e-09 -7.88e-10 -5.18e-26
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -9.04e-07 1.99e+04 2.12e+04 1.99e+04 -8.68e-07
-DEAL::-1.92e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -2.52e-08
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -9.17e-07 1.99e+04 2.12e+04 1.99e+04 -4.73e-07
+DEAL::-1.98e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. 4.20e-08
 DEAL::0.00 4.92e-11 4.93e-11 -3.94e-10 0.00 -1.38e-09 -7.88e-10 -7.88e-10 0.00
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 6.72e-08 2.07e+04 -1.94e+04 2.07e+04 -8.99e-07
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 -3.36e-08 2.07e+04 -1.94e+04 2.07e+04 -3.80e-07
 DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
 DEAL::component=1
-DEAL::1.68e-06 -1.50e+03 -752. -1.50e+03 -1.01e-07 1.99e+04 -752. 1.99e+04 4.88e-07
-DEAL::-2.48e-08 -1.88e+03 2.02e+04 -1.88e+03 3.25e-07 -376. 2.02e+04 -376. -6.30e-08
-DEAL::-2.82e-07 2.06e+04 -1.50e+03 2.06e+04 -9.88e-08 -752. -1.50e+03 -752. 7.71e-07
-DEAL::3.02e-07 1.50e+03 752. 1.50e+03 8.51e-08 2.07e+04 752. 2.07e+04 4.58e-07
-DEAL::-3.77e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.51e-06
-DEAL::2.10e-07 2.06e+04 -1.50e+03 2.06e+04 2.58e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 1.38e-07 1.99e+04 2.12e+04 1.99e+04 3.80e-06
-DEAL::-3.62e-07 1.88e+03 2.11e+04 1.88e+03 1.43e-06 376. 2.11e+04 376. 7.73e-07
-DEAL::2.61e-06 2.06e+04 9.89e+03 2.06e+04 -2.63e-07 -752. 9.89e+03 -752. 1.50e+03
-DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 1.56e-07 2.07e+04 -1.94e+04 2.07e+04 -4.37e-07
-DEAL::3.78e-07 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -1.37e-06
-DEAL::-2.14e-07 2.06e+04 9.89e+03 2.06e+04 -3.18e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 -2.08e-08 1.99e+04 -752. 1.99e+04 -2.58e-08
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. 4.62e-07
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -5.30e-07 752. 1.50e+03 752. 2.16e-06
-DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 1.09e-06 2.07e+04 752. 2.07e+04 3.03e-13
+DEAL::4.13e-07 -1.50e+03 -752. -1.50e+03 -5.02e-08 1.99e+04 -752. 1.99e+04 -9.53e-07
+DEAL::-6.06e-08 -1.88e+03 2.02e+04 -1.88e+03 1.25e-07 -376. 2.02e+04 -376. 5.04e-07
+DEAL::-2.60e-08 2.06e+04 -1.50e+03 2.06e+04 -4.31e-07 -752. -1.50e+03 -752. 4.48e-07
+DEAL::-1.68e-07 1.50e+03 752. 1.50e+03 1.82e-07 2.07e+04 752. 2.07e+04 -3.99e-07
+DEAL::-5.05e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.26e-06
+DEAL::5.46e-08 2.06e+04 -1.50e+03 2.06e+04 1.78e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::3.01e+03 -1.50e+03 2.12e+04 -1.50e+03 8.52e-07 1.99e+04 2.12e+04 1.99e+04 3.27e-06
+DEAL::9.23e-08 1.88e+03 2.11e+04 1.88e+03 -7.91e-07 376. 2.11e+04 376. -1.34e-07
+DEAL::3.66e-06 2.06e+04 9.89e+03 2.06e+04 -3.93e-07 -752. 9.89e+03 -752. 1.50e+03
+DEAL::3.01e+03 1.50e+03 -1.94e+04 1.50e+03 9.12e-07 2.07e+04 -1.94e+04 2.07e+04 -8.34e-07
+DEAL::-8.41e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -5.34e-07
+DEAL::-8.57e-07 2.06e+04 9.89e+03 2.06e+04 -2.68e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::1.50e+03 2.04e+04 -752. 2.04e+04 2.73e-07 1.99e+04 -752. 1.99e+04 5.33e-07
+DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -4.41e-07
+DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -4.94e-07 752. 1.50e+03 752. 1.88e-06
+DEAL::1.50e+03 -1.87e+04 752. -1.87e+04 9.89e-07 2.07e+04 752. 2.07e+04 3.03e-13
 DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
 DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 2.25e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -9.04e-07 1.99e+04 2.12e+04 1.99e+04 -8.68e-07
-DEAL::-1.92e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -2.52e-08
-DEAL::-1.07e-06 2.15e+04 -8.16e+03 2.15e+04 -4.54e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 6.72e-08 2.07e+04 -1.94e+04 2.07e+04 -8.99e-07
+DEAL::-3.76e+04 2.04e+04 2.12e+04 2.04e+04 -9.17e-07 1.99e+04 2.12e+04 1.99e+04 -4.73e-07
+DEAL::-1.98e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. 4.20e-08
+DEAL::-1.25e-06 2.15e+04 -8.16e+03 2.15e+04 -1.00e-06 752. -8.16e+03 752. 1.50e+03
+DEAL::-3.76e+04 -1.87e+04 -1.94e+04 -1.87e+04 -3.36e-08 2.07e+04 -1.94e+04 2.07e+04 -3.80e-07
 DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.64e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.47e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
 DEAL::component=2
-DEAL::-2.48e-08 -1.88e+03 2.02e+04 -1.88e+03 3.25e-07 -376. 2.02e+04 -376. -6.30e-08
-DEAL::-2.82e-07 2.06e+04 -1.50e+03 2.06e+04 -9.88e-08 -752. -1.50e+03 -752. 7.71e-07
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 -1.58e-09 0.00 9.46e-09 3.88e-26
-DEAL::-3.77e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.51e-06
-DEAL::2.10e-07 2.06e+04 -1.50e+03 2.06e+04 2.58e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 6.04e-09 -3.15e-09 1.26e-08 1.68e-08
-DEAL::-3.62e-07 1.88e+03 2.11e+04 1.88e+03 1.43e-06 376. 2.11e+04 376. 7.73e-07
-DEAL::2.61e-06 2.06e+04 9.89e+03 2.06e+04 -2.63e-07 -752. 9.89e+03 -752. 1.50e+03
-DEAL::0.00 0.00 0.00 5.25e-09 -2.89e-09 2.10e-09 5.25e-09 -2.13e-08 1.58e-08
-DEAL::3.78e-07 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -1.37e-06
-DEAL::-2.14e-07 2.06e+04 9.89e+03 2.06e+04 -3.18e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 -2.89e-09 0.00 0.00 -1.16e-08 -5.25e-09
-DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. 4.62e-07
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -5.30e-07 752. 1.50e+03 752. 2.16e-06
-DEAL::0.00 0.00 0.00 -2.89e-09 1.31e-09 -1.58e-09 -4.20e-09 4.20e-09 -9.86e-32
+DEAL::-6.06e-08 -1.88e+03 2.02e+04 -1.88e+03 1.25e-07 -376. 2.02e+04 -376. 5.04e-07
+DEAL::-2.60e-08 2.06e+04 -1.50e+03 2.06e+04 -4.31e-07 -752. -1.50e+03 -752. 4.48e-07
+DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
+DEAL::-5.05e-07 -1.88e+03 2.02e+04 -1.88e+03 3.76e+03 1.63e+04 2.02e+04 1.63e+04 3.26e-06
+DEAL::5.46e-08 2.06e+04 -1.50e+03 2.06e+04 1.78e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
+DEAL::9.23e-08 1.88e+03 2.11e+04 1.88e+03 -7.91e-07 376. 2.11e+04 376. -1.34e-07
+DEAL::3.66e-06 2.06e+04 9.89e+03 2.06e+04 -3.93e-07 -752. 9.89e+03 -752. 1.50e+03
+DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
+DEAL::-8.41e-08 1.88e+03 2.11e+04 1.88e+03 3.76e+03 -1.46e+04 2.11e+04 -1.46e+04 -5.34e-07
+DEAL::-8.57e-07 2.06e+04 9.89e+03 2.06e+04 -2.68e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
+DEAL::-8.02e-09 1.48e+04 2.02e+04 1.48e+04 752. -376. 2.02e+04 -376. -4.41e-07
+DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -4.94e-07 752. 1.50e+03 752. 1.88e-06
+DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
 DEAL::-2.14e-08 1.48e+04 2.02e+04 1.48e+04 -2.71e+04 1.63e+04 2.02e+04 1.63e+04 5.50e-13
 DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 2.25e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::0.00 0.00 0.00 0.00 2.63e-09 -2.63e-10 -4.20e-09 1.26e-08 1.38e-25
-DEAL::-1.92e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. -2.52e-08
-DEAL::-1.07e-06 2.15e+04 -8.16e+03 2.15e+04 -4.54e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 0.00 0.00 -3.41e-09 -1.31e-09 4.20e-09 -2.36e-09 1.08e-08 5.25e-09
+DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
+DEAL::-1.98e-06 -1.30e+04 2.11e+04 -1.30e+04 752. 376. 2.11e+04 376. 4.20e-08
+DEAL::-1.25e-06 2.15e+04 -8.16e+03 2.15e+04 -1.00e-06 752. -8.16e+03 752. 1.50e+03
+DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
 DEAL::0.00 -1.30e+04 2.11e+04 -1.30e+04 -2.71e+04 -1.46e+04 2.11e+04 -1.46e+04 0.00
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.64e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.58e-09 0.00 -1.05e-09 0.00
+DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.47e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
 DEAL::component=3
-DEAL::-2.82e-07 2.06e+04 -1.50e+03 2.06e+04 -9.88e-08 -752. -1.50e+03 -752. 7.71e-07
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 -1.58e-09 0.00 9.46e-09 3.88e-26
-DEAL::1.30e-09 2.63e-09 2.20e-09 -1.20e-09 -8.44e-26 -7.61e-10 1.03e-08 3.53e-25 4.35e-10
-DEAL::2.10e-07 2.06e+04 -1.50e+03 2.06e+04 2.58e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 6.04e-09 -3.15e-09 1.26e-08 1.68e-08
-DEAL::-2.63e-10 2.63e-09 6.41e-09 0.00 0.00 6.52e-10 -3.94e-09 2.36e-09 1.58e-08
-DEAL::2.61e-06 2.06e+04 9.89e+03 2.06e+04 -2.63e-07 -752. 9.89e+03 -752. 1.50e+03
-DEAL::0.00 0.00 0.00 5.25e-09 -2.89e-09 2.10e-09 5.25e-09 -2.13e-08 1.58e-08
-DEAL::4.98e-09 -3.94e-09 5.88e-09 -1.20e-09 -1.14e-25 -7.61e-10 1.93e-08 -1.05e-08 1.72e-08
-DEAL::-2.14e-07 2.06e+04 9.89e+03 2.06e+04 -3.18e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 -2.89e-09 0.00 0.00 -1.16e-08 -5.25e-09
-DEAL::0.00 -3.94e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
-DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -5.30e-07 752. 1.50e+03 752. 2.16e-06
-DEAL::0.00 0.00 0.00 -2.89e-09 1.31e-09 -1.58e-09 -4.20e-09 4.20e-09 -9.86e-32
-DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 1.24e-26 -8.70e-10 -1.81e-10 -3.68e-09 -5.69e-09
+DEAL::-2.60e-08 2.06e+04 -1.50e+03 2.06e+04 -4.31e-07 -752. -1.50e+03 -752. 4.48e-07
+DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
+DEAL::2.35e-09 1.58e-09 2.20e-09 -1.20e-09 4.32e-26 -7.61e-10 1.14e-08 4.33e-25 4.35e-10
+DEAL::5.46e-08 2.06e+04 -1.50e+03 2.06e+04 1.78e-06 1.06e+04 -1.50e+03 1.06e+04 3.01e+03
+DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
+DEAL::-1.31e-09 1.58e-09 6.15e-09 0.00 0.00 6.52e-10 -2.89e-09 0.00 1.58e-08
+DEAL::3.66e-06 2.06e+04 9.89e+03 2.06e+04 -3.93e-07 -752. 9.89e+03 -752. 1.50e+03
+DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
+DEAL::4.98e-09 -2.89e-09 6.14e-09 -1.20e-09 -7.35e-26 -7.61e-10 1.82e-08 -1.05e-08 2.14e-08
+DEAL::-8.57e-07 2.06e+04 9.89e+03 2.06e+04 -2.68e-06 1.06e+04 9.89e+03 1.06e+04 -1.65e+04
+DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
+DEAL::0.00 -2.89e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
+DEAL::-1.81e-07 2.15e+04 1.50e+03 2.15e+04 -4.94e-07 752. 1.50e+03 752. 1.88e-06
+DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
+DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 9.45e-26 -8.70e-10 -1.81e-10 -6.81e-26 -5.69e-09
 DEAL::0.00 2.15e+04 1.50e+03 2.15e+04 2.25e-06 -8.91e+03 1.50e+03 -8.91e+03 3.01e+03
-DEAL::0.00 0.00 0.00 0.00 2.63e-09 -2.63e-10 -4.20e-09 1.26e-08 1.38e-25
-DEAL::0.00 1.58e-09 2.63e-10 0.00 0.00 0.00 5.78e-09 4.47e-09 1.68e-25
-DEAL::-1.07e-06 2.15e+04 -8.16e+03 2.15e+04 -4.54e-07 752. -8.16e+03 752. 1.50e+03
-DEAL::0.00 0.00 0.00 -3.41e-09 -1.31e-09 4.20e-09 -2.36e-09 1.08e-08 5.25e-09
-DEAL::-1.10e-09 -1.31e-09 1.20e-09 1.74e-09 -1.42e-25 -8.70e-10 -7.06e-10 -8.93e-09 -4.35e-10
-DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.64e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.58e-09 0.00 -1.05e-09 0.00
-DEAL::0.00 0.00 -1.31e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
+DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
+DEAL::0.00 2.63e-09 -2.63e-10 0.00 0.00 0.00 2.36e-09 5.25e-09 1.25e-25
+DEAL::-1.25e-06 2.15e+04 -8.16e+03 2.15e+04 -1.00e-06 752. -8.16e+03 752. 1.50e+03
+DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
+DEAL::-4.52e-11 -1.31e-09 9.42e-10 1.74e-09 6.17e-26 -8.70e-10 -1.76e-09 -1.26e-08 -4.35e-10
+DEAL::0.00 2.15e+04 -8.16e+03 2.15e+04 3.47e-07 -8.91e+03 -8.16e+03 -8.91e+03 -1.65e+04
+DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
+DEAL::0.00 0.00 -1.58e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
 DEAL::component=4
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 -1.58e-09 0.00 9.46e-09 3.88e-26
-DEAL::1.30e-09 2.63e-09 2.20e-09 -1.20e-09 -8.44e-26 -7.61e-10 1.03e-08 3.53e-25 4.35e-10
-DEAL::-1.63e-10 2.68e-09 2.13e-26 1.00e-08 -1.63e-10 3.56e-26 -7.07e-10 -4.89e-10 1.10e-25
-DEAL::0.00 0.00 0.00 -1.31e-09 1.58e-09 6.04e-09 -3.15e-09 1.26e-08 1.68e-08
-DEAL::-2.63e-10 2.63e-09 6.41e-09 0.00 0.00 6.52e-10 -3.94e-09 2.36e-09 1.58e-08
-DEAL::-4.35e-10 2.84e-09 5.25e-09 -2.84e-09 -2.17e-10 7.88e-09 -3.70e-09 2.17e-10 6.38e-25
-DEAL::0.00 0.00 0.00 5.25e-09 -2.89e-09 2.10e-09 5.25e-09 -2.13e-08 1.58e-08
-DEAL::4.98e-09 -3.94e-09 5.88e-09 -1.20e-09 -1.14e-25 -7.61e-10 1.93e-08 -1.05e-08 1.72e-08
-DEAL::1.10e-09 -3.17e-09 3.94e-09 7.57e-09 -3.17e-09 1.58e-08 -2.17e-10 -5.98e-09 6.15e-25
-DEAL::0.00 0.00 0.00 0.00 -2.89e-09 0.00 0.00 -1.16e-08 -5.25e-09
-DEAL::0.00 -3.94e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
-DEAL::0.00 -2.63e-09 -1.31e-09 -5.25e-10 -2.63e-09 -2.63e-09 0.00 0.00 0.00
-DEAL::0.00 0.00 0.00 -2.89e-09 1.31e-09 -1.58e-09 -4.20e-09 4.20e-09 -9.86e-32
-DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 1.24e-26 -8.70e-10 -1.81e-10 -3.68e-09 -5.69e-09
-DEAL::-1.63e-10 1.11e-09 1.13e-27 -4.71e-10 -1.63e-10 -2.63e-09 -7.07e-10 -4.89e-10 -4.91e-27
-DEAL::0.00 0.00 0.00 0.00 2.63e-09 -2.63e-10 -4.20e-09 1.26e-08 1.38e-25
-DEAL::0.00 1.58e-09 2.63e-10 0.00 0.00 0.00 5.78e-09 4.47e-09 1.68e-25
-DEAL::-4.35e-10 1.27e-09 1.00e-26 -7.43e-10 2.41e-09 3.47e-26 -3.70e-09 2.17e-10 -5.71e-26
-DEAL::0.00 0.00 0.00 -3.41e-09 -1.31e-09 4.20e-09 -2.36e-09 1.08e-08 5.25e-09
-DEAL::-1.10e-09 -1.31e-09 1.20e-09 1.74e-09 -1.42e-25 -8.70e-10 -7.06e-10 -8.93e-09 -4.35e-10
-DEAL::-2.84e-09 -5.44e-10 1.31e-09 2.32e-09 -3.17e-09 -5.25e-09 -2.17e-10 -5.98e-09 -1.40e-25
-DEAL::0.00 0.00 0.00 0.00 0.00 -1.58e-09 0.00 -1.05e-09 0.00
-DEAL::0.00 0.00 -1.31e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
-DEAL::0.00 0.00 0.00 -5.25e-10 0.00 -2.63e-09 0.00 0.00 0.00
+DEAL::0.00 0.00 0.00 1.58e-09 2.63e-09 2.36e-09 0.00 1.05e-08 4.31e-26
+DEAL::2.35e-09 1.58e-09 2.20e-09 -1.20e-09 4.32e-26 -7.61e-10 1.14e-08 4.33e-25 4.35e-10
+DEAL::-1.63e-10 2.42e-09 2.38e-26 4.78e-09 -1.63e-10 1.76e-26 -7.07e-10 -4.89e-10 3.15e-26
+DEAL::0.00 0.00 0.00 -2.63e-10 2.63e-09 6.30e-09 -6.30e-09 1.37e-08 2.10e-08
+DEAL::-1.31e-09 1.58e-09 6.15e-09 0.00 0.00 6.52e-10 -2.89e-09 0.00 1.58e-08
+DEAL::-4.35e-10 2.58e-09 4.20e-09 -3.37e-09 -2.17e-10 7.88e-09 -3.70e-09 2.17e-10 6.90e-25
+DEAL::0.00 0.00 0.00 5.25e-09 -3.94e-09 6.04e-09 8.14e-09 -7.62e-09 1.58e-08
+DEAL::4.98e-09 -2.89e-09 6.14e-09 -1.20e-09 -7.35e-26 -7.61e-10 1.82e-08 -1.05e-08 2.14e-08
+DEAL::1.10e-09 -3.43e-09 3.94e-09 8.10e-09 -3.17e-09 8.41e-09 -2.17e-10 -5.98e-09 6.64e-25
+DEAL::0.00 0.00 0.00 0.00 -3.94e-09 0.00 0.00 -1.05e-08 -5.25e-09
+DEAL::0.00 -2.89e-09 1.09e-10 0.00 0.00 6.52e-10 -1.05e-09 -5.25e-09 -5.25e-09
+DEAL::0.00 -2.89e-09 -1.31e-09 -5.25e-10 -2.63e-09 -2.63e-09 0.00 0.00 0.00
+DEAL::0.00 0.00 0.00 0.00 1.31e-09 -1.58e-09 0.00 4.20e-09 1.73e-26
+DEAL::2.17e-10 1.31e-09 -1.68e-09 1.74e-09 9.45e-26 -8.70e-10 -1.81e-10 -6.81e-26 -5.69e-09
+DEAL::-1.63e-10 1.11e-09 -2.51e-27 -4.71e-10 -1.63e-10 -2.63e-09 -7.07e-10 -4.89e-10 -5.96e-26
+DEAL::0.00 0.00 0.00 0.00 1.58e-09 2.63e-10 -8.41e-09 8.41e-09 -3.94e-31
+DEAL::0.00 2.63e-09 -2.63e-10 0.00 0.00 0.00 2.36e-09 5.25e-09 1.25e-25
+DEAL::-4.35e-10 1.27e-09 1.00e-26 -7.43e-10 3.08e-10 -1.08e-26 -3.70e-09 2.17e-10 -5.71e-26
+DEAL::0.00 0.00 0.00 -1.31e-09 -1.31e-09 1.31e-09 -6.57e-09 3.94e-09 5.25e-09
+DEAL::-4.52e-11 -1.31e-09 9.42e-10 1.74e-09 6.17e-26 -8.70e-10 -1.76e-09 -1.26e-08 -4.35e-10
+DEAL::-1.79e-09 -8.06e-10 1.31e-09 -2.41e-09 -3.17e-09 -7.87e-26 -2.17e-10 -5.98e-09 5.87e-26
+DEAL::0.00 0.00 0.00 0.00 0.00 -1.31e-09 0.00 0.00 0.00
+DEAL::0.00 0.00 -1.58e-09 0.00 0.00 0.00 -1.05e-09 0.00 -5.25e-09
+DEAL::0.00 -2.63e-10 0.00 -5.25e-10 0.00 -2.63e-09 0.00 0.00 0.00
index 173f3ec587aa164236bea862751fa064b77253b8..674f93234e9f483a83dd3832b945de2e58a93f37 100644 (file)
@@ -31,9 +31,9 @@ DEAL::2.37 94.1 2.34e+03 94.1 4.79e+03 1.69e+03 2.34e+03 1.69e+03 4.80e+03
 DEAL::2.37 2.40e+03 2.44e+03 2.40e+03 4.57e+03 2.40e+03 2.44e+03 2.40e+03 -138.
 DEAL::2.37 -2.19e+03 2.44e+03 -2.19e+03 4.79e+03 916. 2.44e+03 916. 5.02e+03
 DEAL::component=1
-DEAL::-5.39e-12 -275. -206. -275. -1.35e-12 -138. -206. -138. -1.82e-12
+DEAL::-5.39e-12 -275. -206. -275. -8.99e-13 -138. -206. -138. -1.82e-12
 DEAL::5.50e-12 -275. -206. -275. -459. 4.85e+03 -206. 4.85e+03 -367.
-DEAL::-367. -275. 4.73e+03 -275. 2.77e-12 -138. 4.73e+03 -138. -184.
+DEAL::-367. -275. 4.73e+03 -275. 9.52e-13 -138. 4.73e+03 -138. -184.
 DEAL::367. -275. 4.84e+03 -275. 459. 4.96e+03 4.84e+03 4.96e+03 2.23e+03
 DEAL::-184. 4.62e+03 -206. 4.62e+03 -91.8 -138. -206. -138. 1.82e-12
 DEAL::184. 4.73e+03 -206. 4.73e+03 3.52e+03 4.96e+03 -206. 4.96e+03 367.
index e4af0b4189df9be7f281f7f871eb7d5113d199cc..03c4a69ee89f97af700c77ba6d3de2b764e24d0b 100644 (file)
@@ -19,7 +19,7 @@ DEAL::Dofs total 15
 DEAL:cg::Starting value 2.82
 DEAL:cg::Convergence step 17 value 0
 DEAL::L2-Err=0, Hdiv-Err=0
--1.000e-01 5.000e-01 1.000e+00 4.000e-01 6.092e-15 3.528e-15 6.000e-01 5.000e-01 5.000e-01 1.496e-15 8.072e-16 1.000e+00 5.000e-01 4.878e-15 2.879e-15 
+-1.000e-01 5.000e-01 1.000e+00 4.000e-01 6.849e-15 5.643e-15 6.000e-01 5.000e-01 5.000e-01 -1.007e-15 -2.071e-15 1.000e+00 5.000e-01 1.979e-15 3.430e-15 
 # This file was generated by the deal.II library.
 
 
index 3175085cb36beb455d4bcf95db6fa50b117ddaac..5b66d40eb3d929c46566429703a750f0ce13a118 100644 (file)
@@ -4,7 +4,7 @@ DEAL::Dofs total 6
 DEAL::MM created
 DEAL::RHS created
 DEAL:cg::Starting value 1.99
-DEAL:cg::Convergence step 7 value 0
+DEAL:cg::Convergence step 9 value 0
 # This file was generated by the deal.II library.
 
 
diff --git a/tests/fe/mapping_real_to_unit.cc b/tests/fe/mapping_real_to_unit.cc
new file mode 100644 (file)
index 0000000..9d664c7
--- /dev/null
@@ -0,0 +1,106 @@
+
+#include "../tests.h"
+
+#include <deal.II/base/utilities.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/fe/mapping_q1.h>
+
+
+template<int dim, int spacedim>
+void test_real_to_unit_cell()
+{
+  
+ Triangulation<dim, spacedim>   triangulation;
+  GridGenerator::hyper_cube (triangulation);
+
+
+  const unsigned int n_points = 5;
+  
+  
+  std::vector< Point<dim> > unit_points(Utilities::fixed_power<dim>(n_points));
+
+
+  switch (dim)
+    {
+
+      case 1:
+           for (unsigned int x=0; x<n_points;++x)
+             unit_points[x][0] = double(x)/double(n_points);
+           break;
+           
+      case 2:
+           for (unsigned int x=0; x<n_points;++x)
+             for (unsigned int y=0; y<n_points;++y)
+               {
+                 unit_points[y * n_points + x][0] = double(x)/double(n_points);
+                 unit_points[y * n_points + x][1] = double(y)/double(n_points);
+               }
+           break;
+
+      case 3:
+           for (unsigned int x=0; x<n_points;++x)
+             for (unsigned int y=0; y<n_points;++y)
+               for (unsigned int z=0; z<n_points;++z)
+               {
+                 unit_points[z * n_points + y * n_points + x][0] = double(x)/double(n_points);
+                 unit_points[z * n_points + y * n_points + x][1] = double(y)/double(n_points);
+                 unit_points[z * n_points + y * n_points + x][2] = double(z)/double(n_points);
+               }
+           break;
+    }
+  
+    
+  MappingQ1< dim, spacedim > map;
+
+  
+  typename Triangulation<dim, spacedim >::active_cell_iterator cell = triangulation.begin_active();
+
+                                  //Move a vertex a little bit
+  const unsigned int n_dx = 5;
+  const double dx = 0.4/n_dx;
+  Point<spacedim> direction;
+  for (unsigned int j=0; j<spacedim;++j)
+    direction[j]=dx;
+  
+  for (unsigned int j=0; j<n_dx;++j)
+    {
+      cell->vertex(0) = double(j)*direction;
+      deallog << "Vertex displacement: " << j*dx <<  std::endl <<  std::endl;
+      for (unsigned int i=0; i<Utilities::fixed_power<dim>(n_points);++i)
+       {
+         
+         Point<spacedim> p = map.transform_unit_to_real_cell(cell,unit_points[i]);
+         Point<dim> p_unit = map.transform_real_to_unit_cell(cell,p);
+         // deallog << "Orig   :" << unit_points[i] << std::endl;
+         // deallog << "p      :" << p << std::endl;
+         // deallog << "p_unit :" << p_unit <<  std::endl;
+         deallog << "Distance: " << unit_points[i].distance(p_unit) <<  std::endl <<  std::endl;
+       }
+      deallog << std::endl <<  std::endl;
+    }
+}
+
+
+int
+main()
+{
+  std::ofstream logfile ("mapping_real_to_unit/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+
+  test_real_to_unit_cell<1,1>();
+  test_real_to_unit_cell<2,2>();
+  test_real_to_unit_cell<3,3>();
+  
+  test_real_to_unit_cell<1,2>();
+                                  // test_real_to_unit_cell<1,3>();
+  test_real_to_unit_cell<2,3>();
+  
+  return 0;
+}
+
+
+
diff --git a/tests/fe/mapping_real_to_unit/cmp/generic b/tests/fe/mapping_real_to_unit/cmp/generic
new file mode 100644 (file)
index 0000000..361f825
--- /dev/null
@@ -0,0 +1,1951 @@
+
+DEAL::Vertex displacement: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.0800000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.160000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.240000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.320000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.0800000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.160000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.240000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.320000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.0800000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.160000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.240000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.320000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.0800000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.160000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.240000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.320000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.0800000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.160000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.240000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
+DEAL::Vertex displacement: 0.320000
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::Distance: 0
+DEAL::
+DEAL::
+DEAL::
index de5089beefcc4b9efc22d5041bdec24ce5966af1..c935ea726799563352a253c4a65b15691e616b25 100644 (file)
@@ -71,11 +71,11 @@ report:
        @echo 'Date: ' `date -u +"%Y %j  %F  %U-%w"`
        @echo 'Id: ' $(ID)
        @for test in $(TESTS) ; do \
-               testname=mesh-converter/`echo $$test | perl -pi -e 's/.*include.//g; s/\//-/g;'` ; \
+               testname=`echo $$test | perl -pi -e 's/.*include.//g; s/\//-/g;'` ; \
                if test -f $$test ; then \
-                       echo "`date -u +"%Y-%m-%d %H:%M"`   +  $$testname" ; \
+                       echo "`date -u +"%Y-%m-%d %H:%M"`   +  $(WORKDIR)/$$testname" ; \
                else \
-                       echo "`date -u +"%Y-%m-%d %H:%M"`  0   $$testname" ; \
+                       echo "`date -u +"%Y-%m-%d %H:%M"`  0   $(WORKDIR)/$$testname" ; \
                fi ; \
        done
 

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.