include/deal.II/numerics/vectors.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: vectors.h 25497 2012-05-06 10:03:52Z buerg @f$
00003 //
00004 //    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
00010 //
00011 //---------------------------------------------------------------------------
00012 #ifndef __deal2__vectors_h
00013 #define __deal2__vectors_h
00014 
00015 
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/exceptions.h>
00018 #include <deal.II/base/quadrature_lib.h>
00019 #include <deal.II/base/point.h>
00020 #include <deal.II/dofs/function_map.h>
00021 #include <deal.II/fe/mapping_q.h>
00022 #include <deal.II/hp/mapping_collection.h>
00023 
00024 #include <map>
00025 #include <vector>
00026 #include <set>
00027 
00028 DEAL_II_NAMESPACE_OPEN
00029 
00030 template <int dim> class Function;
00031 template <int dim> struct FunctionMap;
00032 template <int dim> class Quadrature;
00033 template <int dim> class QGauss;
00034 
00035 template <typename number> class Vector;
00036 template <typename number> class FullMatrix;
00037 template <int dim, int spacedim> class Mapping;
00038 template <int dim, int spacedim> class DoFHandler;
00039 template <typename gridtype> class InterGridMap;
00040 namespace hp
00041 {
00042   template <int dim, int spacedim> class DoFHandler;
00043   template <int dim, int spacedim> class MappingCollection;
00044   template <int dim> class QCollection;
00045 }
00046 class ConstraintMatrix;
00047 
00048 
00049 //TODO: Move documentation of functions to the functions!
00050 
00333 namespace VectorTools
00334 {
00343   enum NormType
00344   {
00351         mean,
00357         L1_norm,
00365         L2_norm,
00376         Lp_norm,
00381         Linfty_norm,
00385         H1_seminorm,
00392         H1_norm,
00396         W1p_seminorm,
00401         W1p_norm,
00405         W1infty_seminorm,
00410         W1infty_norm
00411 
00412   };
00449   template <class VECTOR, class DH>
00450   void interpolate (const Mapping<DH::dimension,DH::space_dimension>    &mapping,
00451                     const DH              &dof,
00452                     const Function<DH::space_dimension>   &function,
00453                     VECTOR                &vec);
00454 
00460   template <class VECTOR, class DH>
00461   void interpolate (const DH              &dof,
00462                     const Function<DH::space_dimension>   &function,
00463                     VECTOR                &vec);
00464 
00493   template <int dim, class InVector, class OutVector, int spacedim>
00494   void interpolate (const DoFHandler<dim,spacedim>    &dof_1,
00495                     const DoFHandler<dim,spacedim>    &dof_2,
00496                     const FullMatrix<double> &transfer,
00497                     const InVector           &data_1,
00498                     OutVector                &data_2);
00499 
00536   template <int dim, int spacedim,
00537             template <int,int> class DH,
00538             class VECTOR>
00539   void
00540   interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
00541                                  const VECTOR            &u1,
00542                                  const DH<dim, spacedim> &dof2,
00543                                  VECTOR                  &u2);
00544 
00570   template <int dim, int spacedim,
00571             template <int,int> class DH,
00572             class VECTOR>
00573   void
00574   interpolate_to_different_mesh (const DH<dim, spacedim> &dof1,
00575                                  const VECTOR            &u1,
00576                                  const DH<dim, spacedim> &dof2,
00577                                  const ConstraintMatrix  &constraints,
00578                                  VECTOR                  &u2);
00579 
00580 
00594   template <int dim, int spacedim,
00595             template <int,int> class DH,
00596             class VECTOR>
00597   void
00598   interpolate_to_different_mesh (const InterGridMap<DH<dim, spacedim> > &intergridmap,
00599                                  const VECTOR                           &u1,
00600                                  const ConstraintMatrix                 &constraints,
00601                                  VECTOR                                 &u2);
00602 
00641   template <int dim, class VECTOR, int spacedim>
00642   void project (const Mapping<dim, spacedim>       &mapping,
00643                 const DoFHandler<dim,spacedim>    &dof,
00644                 const ConstraintMatrix   &constraints,
00645                 const Quadrature<dim>    &quadrature,
00646                 const Function<spacedim>      &function,
00647                 VECTOR                   &vec,
00648                 const bool                enforce_zero_boundary = false,
00649                 const Quadrature<dim-1>  &q_boundary = (dim > 1 ?
00650                                                         QGauss<dim-1>(2) :
00651                                                         Quadrature<dim-1>(0)),
00652                 const bool                project_to_boundary_first = false);
00653 
00659   template <int dim, class VECTOR, int spacedim>
00660   void project (const DoFHandler<dim,spacedim>    &dof,
00661                 const ConstraintMatrix   &constraints,
00662                 const Quadrature<dim>    &quadrature,
00663                 const Function<spacedim>      &function,
00664                 VECTOR                   &vec,
00665                 const bool                enforce_zero_boundary = false,
00666                 const Quadrature<dim-1>  &q_boundary = (dim > 1 ?
00667                                                         QGauss<dim-1>(2) :
00668                                                         Quadrature<dim-1>(0)),
00669                 const bool                project_to_boundary_first = false);
00670 
00739   template <class DH>
00740 
00741   void
00742   interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension>            &mapping,
00743                                const DH                 &dof,
00744                                const typename FunctionMap<DH::space_dimension>::type &function_map,
00745                                std::map<unsigned int,double> &boundary_values,
00746                                const std::vector<bool>       &component_mask = std::vector<bool>());
00747 
00761   template <class DH>
00762 
00763   void
00764   interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension>            &mapping,
00765                                const DH                 &dof,
00766                                const types::boundary_id_t            boundary_component,
00767                                const Function<DH::space_dimension>           &boundary_function,
00768                                std::map<unsigned int,double> &boundary_values,
00769                                const std::vector<bool>       &component_mask = std::vector<bool>());
00770 
00777   template <class DH>
00778 
00779   void
00780   interpolate_boundary_values (const DH        &dof,
00781                                const types::boundary_id_t            boundary_component,
00782                                const Function<DH::space_dimension>           &boundary_function,
00783                                std::map<unsigned int,double> &boundary_values,
00784                                const std::vector<bool>       &component_mask = std::vector<bool>());
00785 
00786 
00793   template <class DH>
00794 
00795   void
00796   interpolate_boundary_values (const DH                &dof,
00797                                const typename FunctionMap<DH::space_dimension>::type &function_map,
00798                                std::map<unsigned int,double>         &boundary_values,
00799                                const std::vector<bool>               &component_mask = std::vector<bool>());
00800 
00801 
00884   template <class DH>
00885 
00886   void
00887   interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension>            &mapping,
00888                                const DH                 &dof,
00889                                const typename FunctionMap<DH::space_dimension>::type &function_map,
00890                                ConstraintMatrix              &constraints,
00891                                const std::vector<bool>       &component_mask = std::vector<bool>());
00892 
00905   template <class DH>
00906 
00907   void
00908   interpolate_boundary_values (const Mapping<DH::dimension,DH::space_dimension> &mapping,
00909                                const DH                            &dof,
00910                                const types::boundary_id_t                  boundary_component,
00911                                const Function<DH::space_dimension> &boundary_function,
00912                                ConstraintMatrix                    &constraints,
00913                                const std::vector<bool>             &component_mask = std::vector<bool>());
00914 
00923   template <class DH>
00924 
00925   void
00926   interpolate_boundary_values (const DH                            &dof,
00927                                const types::boundary_id_t                  boundary_component,
00928                                const Function<DH::space_dimension> &boundary_function,
00929                                ConstraintMatrix                    &constraints,
00930                                const std::vector<bool>             &component_mask = std::vector<bool>());
00931 
00932 
00941   template <class DH>
00942 
00943   void
00944   interpolate_boundary_values (const DH                &dof,
00945                                const typename FunctionMap<DH::space_dimension>::type &function_map,
00946                                ConstraintMatrix        &constraints,
00947                                const std::vector<bool> &component_mask = std::vector<bool>());
00948 
00949 
00994   template <int dim, int spacedim>
00995   void project_boundary_values (const Mapping<dim, spacedim>       &mapping,
00996                                 const DoFHandler<dim,spacedim>    &dof,
00997                                 const typename FunctionMap<spacedim>::type &boundary_functions,
00998                                 const Quadrature<dim-1>  &q,
00999                                 std::map<unsigned int,double> &boundary_values,
01000                                 std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
01001 
01007   template <int dim, int spacedim>
01008   void project_boundary_values (const DoFHandler<dim,spacedim>    &dof,
01009                                 const typename FunctionMap<spacedim>::type &boundary_function,
01010                                 const Quadrature<dim-1>  &q,
01011                                 std::map<unsigned int,double> &boundary_values,
01012                                 std::vector<unsigned int> component_mapping = std::vector<unsigned int>());
01013 
01077   template <int dim, int spacedim>
01078   void project_boundary_values (const Mapping<dim, spacedim>   &mapping,
01079                                 const DoFHandler<dim,spacedim> &dof,
01080                                 const typename FunctionMap<spacedim>::type &boundary_functions,
01081                                 const Quadrature<dim-1>        &q,
01082                                 ConstraintMatrix               &constraints,
01083                                 std::vector<unsigned int>       component_mapping = std::vector<unsigned int>());
01084 
01092   template <int dim, int spacedim>
01093   void project_boundary_values (const DoFHandler<dim,spacedim> &dof,
01094                                 const typename FunctionMap<spacedim>::type &boundary_function,
01095                                 const Quadrature<dim-1>        &q,
01096                                 ConstraintMatrix               &constraints,
01097                                 std::vector<unsigned int>       component_mapping = std::vector<unsigned int>());
01098 
01099 
01179   template <int dim>
01180   void project_boundary_values_curl_conforming (const DoFHandler<dim>& dof_handler,
01181                                                 const unsigned int first_vector_component,
01182                                                 const Function<dim>& boundary_function,
01183                                                 const types::boundary_id_t boundary_component,
01184                                                 ConstraintMatrix& constraints,
01185                                                 const Mapping<dim>& mapping = StaticMappingQ1<dim>::mapping);
01186 
01192   template <int dim>
01193   void project_boundary_values_curl_conforming (const hp::DoFHandler<dim>& dof_handler,
01194                                                 const unsigned int first_vector_component,
01195                                                 const Function<dim>& boundary_function,
01196                                                 const types::boundary_id_t boundary_component,
01197                                                 ConstraintMatrix& constraints,
01198                                                 const hp::MappingCollection<dim, dim>& mapping_collection = hp::StaticMappingQ1<dim>::mapping_collection);
01199 
01200 
01265   template<int dim>
01266   void project_boundary_values_div_conforming (const DoFHandler<dim>& dof_handler,
01267                                                const unsigned int first_vector_component,
01268                                                const Function<dim>& boundary_function,
01269                                                const types::boundary_id_t boundary_component,
01270                                                ConstraintMatrix& constraints,
01271                                                const Mapping<dim>& mapping = StaticMappingQ1<dim>::mapping);
01272 
01278   template<int dim>
01279   void project_boundary_values_div_conforming (const hp::DoFHandler<dim>& dof_handler,
01280                                                const unsigned int first_vector_component,
01281                                                const Function<dim>& boundary_function,
01282                                                const types::boundary_id_t boundary_component,
01283                                                ConstraintMatrix& constraints,
01284                                                const hp::MappingCollection<dim, dim>& mapping_collection = hp::StaticMappingQ1<dim>::mapping_collection);
01285 
01286 
01602   template <int dim, template <int, int> class DH, int spacedim>
01603 
01604   void
01605   compute_no_normal_flux_constraints (const DH<dim,spacedim>         &dof_handler,
01606                                       const unsigned int     first_vector_component,
01607                                       const std::set<types::boundary_id_t> &boundary_ids,
01608                                       ConstraintMatrix      &constraints,
01609                                       const Mapping<dim, spacedim>    &mapping = StaticMappingQ1<dim>::mapping);
01610 
01611 
01613 
01617 
01627   template <int dim, int spacedim>
01628   void create_right_hand_side (const Mapping<dim, spacedim>    &mapping,
01629                                const DoFHandler<dim,spacedim> &dof,
01630                                const Quadrature<dim> &q,
01631                                const Function<spacedim>   &rhs,
01632                                Vector<double>        &rhs_vector);
01633 
01639   template <int dim, int spacedim>
01640   void create_right_hand_side (const DoFHandler<dim,spacedim> &dof,
01641                                const Quadrature<dim> &q,
01642                                const Function<spacedim>   &rhs,
01643                                Vector<double>        &rhs_vector);
01644 
01649   template <int dim, int spacedim>
01650   void create_right_hand_side (const hp::MappingCollection<dim,spacedim>    &mapping,
01651                                const hp::DoFHandler<dim,spacedim> &dof,
01652                                const hp::QCollection<dim> &q,
01653                                const Function<spacedim>   &rhs,
01654                                Vector<double>        &rhs_vector);
01655 
01660   template <int dim, int spacedim>
01661   void create_right_hand_side (const hp::DoFHandler<dim,spacedim> &dof,
01662                                const hp::QCollection<dim> &q,
01663                                const Function<spacedim>   &rhs,
01664                                Vector<double>        &rhs_vector);
01665 
01676   template <int dim, int spacedim>
01677   void create_point_source_vector(const Mapping<dim,spacedim>    &mapping,
01678                                   const DoFHandler<dim,spacedim> &dof,
01679                                   const Point<spacedim>      &p,
01680                                   Vector<double>        &rhs_vector);
01681 
01687   template <int dim, int spacedim>
01688   void create_point_source_vector(const DoFHandler<dim,spacedim> &dof,
01689                                   const Point<spacedim>      &p,
01690                                   Vector<double>        &rhs_vector);
01691 
01696   template <int dim, int spacedim>
01697   void create_point_source_vector(const hp::MappingCollection<dim,spacedim>    &mapping,
01698                                   const hp::DoFHandler<dim,spacedim> &dof,
01699                                   const Point<spacedim>      &p,
01700                                   Vector<double>        &rhs_vector);
01701 
01712   template <int dim, int spacedim>
01713   void create_point_source_vector(const hp::DoFHandler<dim,spacedim> &dof,
01714                                   const Point<spacedim>      &p,
01715                                   Vector<double>        &rhs_vector);
01716 
01728   template <int dim, int spacedim>
01729   void create_point_source_vector(const Mapping<dim,spacedim>    &mapping,
01730                                   const DoFHandler<dim,spacedim> &dof,
01731                                   const Point<spacedim>          &p,
01732                                   const Point<dim>               &orientation,
01733                                   Vector<double>                 &rhs_vector);
01734 
01741   template <int dim, int spacedim>
01742   void create_point_source_vector(const DoFHandler<dim,spacedim> &dof,
01743                                   const Point<spacedim>          &p,
01744                                   const Point<dim>               &orientation,
01745                                   Vector<double>                 &rhs_vector);
01746 
01751   template <int dim, int spacedim>
01752   void create_point_source_vector(const hp::MappingCollection<dim,spacedim> &mapping,
01753                                   const hp::DoFHandler<dim,spacedim>        &dof,
01754                                   const Point<spacedim>                     &p,
01755                                   const Point<dim>                          &orientation,
01756                                   Vector<double>                            &rhs_vector);
01757 
01768   template <int dim, int spacedim>
01769   void create_point_source_vector(const hp::DoFHandler<dim,spacedim> &dof,
01770                                   const Point<spacedim>              &p,
01771                                   const Point<dim>                   &orientation,
01772                                   Vector<double>                     &rhs_vector);
01773 
01784   template <int dim, int spacedim>
01785   void create_boundary_right_hand_side (const Mapping<dim,spacedim>      &mapping,
01786                                         const DoFHandler<dim,spacedim>   &dof,
01787                                         const Quadrature<dim-1> &q,
01788                                         const Function<spacedim>     &rhs,
01789                                         Vector<double>          &rhs_vector,
01790                                         const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
01791 
01798   template <int dim, int spacedim>
01799   void create_boundary_right_hand_side (const DoFHandler<dim,spacedim>   &dof,
01800                                         const Quadrature<dim-1> &q,
01801                                         const Function<spacedim>     &rhs,
01802                                         Vector<double>          &rhs_vector,
01803                                         const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
01804 
01809   template <int dim, int spacedim>
01810   void create_boundary_right_hand_side (const hp::MappingCollection<dim,spacedim>      &mapping,
01811                                         const hp::DoFHandler<dim,spacedim>   &dof,
01812                                         const hp::QCollection<dim-1> &q,
01813                                         const Function<spacedim>     &rhs,
01814                                         Vector<double>          &rhs_vector,
01815                                         const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
01816 
01827   template <int dim, int spacedim>
01828   void create_boundary_right_hand_side (const hp::DoFHandler<dim,spacedim>   &dof,
01829                                         const hp::QCollection<dim-1> &q,
01830                                         const Function<spacedim>     &rhs,
01831                                         Vector<double>          &rhs_vector,
01832                                         const std::set<types::boundary_id_t> &boundary_indicators = std::set<types::boundary_id_t>());
01833 
01835 
01840 
01920   template <int dim, class InVector, class OutVector, int spacedim>
01921   void integrate_difference (const Mapping<dim,spacedim>    &mapping,
01922                              const DoFHandler<dim,spacedim> &dof,
01923                              const InVector        &fe_function,
01924                              const Function<spacedim>   &exact_solution,
01925                              OutVector             &difference,
01926                              const Quadrature<dim> &q,
01927                              const NormType        &norm,
01928                              const Function<spacedim>   *weight=0,
01929                              const double exponent = 2.);
01930 
01936   template <int dim, class InVector, class OutVector, int spacedim>
01937   void integrate_difference (const DoFHandler<dim,spacedim> &dof,
01938                              const InVector        &fe_function,
01939                              const Function<spacedim>   &exact_solution,
01940                              OutVector             &difference,
01941                              const Quadrature<dim> &q,
01942                              const NormType        &norm,
01943                              const Function<spacedim>   *weight=0,
01944                              const double exponent = 2.);
01945 
01946   template <int dim, class InVector, class OutVector, int spacedim>
01947   void integrate_difference (const hp::MappingCollection<dim,spacedim>    &mapping,
01948                              const hp::DoFHandler<dim,spacedim> &dof,
01949                              const InVector        &fe_function,
01950                              const Function<spacedim>   &exact_solution,
01951                              OutVector             &difference,
01952                              const hp::QCollection<dim> &q,
01953                              const NormType        &norm,
01954                              const Function<spacedim>   *weight=0,
01955                              const double exponent = 2.);
01956 
01962   template <int dim, class InVector, class OutVector, int spacedim>
01963   void integrate_difference (const hp::DoFHandler<dim,spacedim> &dof,
01964                              const InVector        &fe_function,
01965                              const Function<spacedim>   &exact_solution,
01966                              OutVector             &difference,
01967                              const hp::QCollection<dim> &q,
01968                              const NormType        &norm,
01969                              const Function<spacedim>   *weight=0,
01970                              const double exponent = 2.);
01971 
01988   template <int dim, class InVector, int spacedim>
01989   void point_difference (const DoFHandler<dim,spacedim>& dof,
01990                          const InVector&        fe_function,
01991                          const Function<spacedim>&   exact_solution,
01992                          Vector<double>&        difference,
01993                          const Point<spacedim>&      point);
01994 
02012   template <int dim, class InVector, int spacedim>
02013   void point_difference (const Mapping<dim, spacedim>    &mapping,
02014                          const DoFHandler<dim,spacedim>& dof,
02015                          const InVector&        fe_function,
02016                          const Function<spacedim>&   exact_solution,
02017                          Vector<double>&        difference,
02018                          const Point<spacedim>&      point);
02019 
02035   template <int dim, class InVector, int spacedim>
02036   void
02037   point_value (const DoFHandler<dim,spacedim> &dof,
02038                const InVector        &fe_function,
02039                const Point<spacedim>      &point,
02040                Vector<double>        &value);
02041 
02046   template <int dim, class InVector, int spacedim>
02047   void
02048   point_value (const hp::DoFHandler<dim,spacedim> &dof,
02049          const InVector        &fe_function,
02050          const Point<spacedim>      &point,
02051          Vector<double>        &value);
02052 
02053 
02072   template <int dim, class InVector, int spacedim>
02073   double
02074   point_value (const DoFHandler<dim,spacedim> &dof,
02075                const InVector        &fe_function,
02076                const Point<spacedim>      &point);
02077 
02082   template <int dim, class InVector, int spacedim>
02083   double
02084   point_value (const hp::DoFHandler<dim,spacedim> &dof,
02085          const InVector        &fe_function,
02086          const Point<spacedim>      &point);
02087 
02103   template <int dim, class InVector, int spacedim>
02104   void
02105   point_value (const Mapping<dim, spacedim>    &mapping,
02106                const DoFHandler<dim,spacedim> &dof,
02107                const InVector        &fe_function,
02108                const Point<spacedim>      &point,
02109                Vector<double>        &value);
02110 
02115   template <int dim, class InVector, int spacedim>
02116   void
02117   point_value (const hp::MappingCollection<dim, spacedim>    &mapping,
02118          const hp::DoFHandler<dim,spacedim> &dof,
02119          const InVector        &fe_function,
02120          const Point<spacedim>      &point,
02121          Vector<double>        &value);
02122 
02136   template <int dim, class InVector, int spacedim>
02137   double
02138   point_value (const Mapping<dim,spacedim>    &mapping,
02139                const DoFHandler<dim,spacedim> &dof,
02140                const InVector        &fe_function,
02141                const Point<spacedim>      &point);
02142 
02147   template <int dim, class InVector, int spacedim>
02148   double
02149   point_value (const hp::MappingCollection<dim,spacedim>    &mapping,
02150          const hp::DoFHandler<dim,spacedim> &dof,
02151          const InVector        &fe_function,
02152          const Point<spacedim>      &point);
02153 
02155 
02159 
02224   void subtract_mean_value(Vector<double>          &v,
02225                            const std::vector<bool> &p_select);
02226 
02266   template <int dim, class InVector, int spacedim>
02267   double compute_mean_value (const Mapping<dim, spacedim>    &mapping,
02268                              const DoFHandler<dim,spacedim> &dof,
02269                              const Quadrature<dim> &quadrature,
02270                              const InVector        &v,
02271                              const unsigned int     component);
02272 
02278   template <int dim, class InVector, int spacedim>
02279   double compute_mean_value (const DoFHandler<dim,spacedim> &dof,
02280                              const Quadrature<dim> &quadrature,
02281                              const InVector        &v,
02282                              const unsigned int     component);
02284 
02288   DeclException0 (ExcInvalidBoundaryIndicator);
02292   DeclException0 (ExcNonInterpolatingFE);
02296   DeclException0 (ExcNoComponentSelected);
02297 }
02298 
02299 
02300 DEAL_II_NAMESPACE_CLOSE
02301 
02302 #endif
02303 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Tue May 22 2012 12:06:02 by doxygen 1.7.3