include/deal.II/base/function.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: function.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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__function_h
00013 #define __deal2__function_h
00014 
00015 
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/exceptions.h>
00018 #include <deal.II/base/function_time.h>
00019 #include <deal.II/base/subscriptor.h>
00020 #include <deal.II/base/tensor.h>
00021 #include <deal.II/base/point.h>
00022 #include <deal.II/base/std_cxx1x/function.h>
00023 
00024 #include <vector>
00025 
00026 DEAL_II_NAMESPACE_OPEN
00027 template <typename number> class Vector;
00028 
00100 template <int dim>
00101 class Function : public FunctionTime,
00102                  public Subscriptor
00103 {
00104   public:
00112     static const unsigned int dimension = dim;
00113 
00117     const unsigned int n_components;
00118 
00128     Function (const unsigned int n_components = 1,
00129               const double       initial_time = 0.0);
00130 
00167     virtual ~Function ()
00168 #ifndef DEAL_II_IMPLEMENTED_PURE_FUNCTION_BUG
00169       = 0
00170 #endif
00171     ;
00172 
00185     Function & operator= (const Function &f);
00186 
00198     virtual double value (const Point<dim>   &p,
00199                           const unsigned int  component = 0) const;
00200 
00210     virtual void vector_value (const Point<dim>   &p,
00211                                Vector<double>     &values) const;
00212 
00227     virtual void value_list (const std::vector<Point<dim> > &points,
00228                              std::vector<double>            &values,
00229                              const unsigned int              component = 0) const;
00230 
00247     virtual void vector_value_list (const std::vector<Point<dim> > &points,
00248                                     std::vector<Vector<double> >   &values) const;
00249 
00263     virtual void vector_values (const std::vector<Point<dim> >& points,
00264                                 std::vector<std::vector<double> >& values) const;
00265 
00271     virtual Tensor<1,dim> gradient (const Point<dim>   &p,
00272                                     const unsigned int  component = 0) const;
00273 
00279     virtual void vector_gradient (const Point<dim>            &p,
00280                                   std::vector<Tensor<1,dim> > &gradients) const;
00281 
00291     virtual void gradient_list (const std::vector<Point<dim> > &points,
00292                                 std::vector<Tensor<1,dim> >    &gradients,
00293                                 const unsigned int              component = 0) const;
00294 
00308     virtual void vector_gradients (const std::vector<Point<dim> >            &points,
00309                                    std::vector<std::vector<Tensor<1,dim> > > &gradients) const;
00310 
00325     virtual void vector_gradient_list (const std::vector<Point<dim> >            &points,
00326                                        std::vector<std::vector<Tensor<1,dim> > > &gradients) const;
00327 
00332     virtual double laplacian (const Point<dim>   &p,
00333                               const unsigned int  component = 0) const;
00334 
00340     virtual void vector_laplacian (const Point<dim>   &p,
00341                                    Vector<double>     &values) const;
00342 
00347     virtual void laplacian_list (const std::vector<Point<dim> > &points,
00348                                  std::vector<double>            &values,
00349                                  const unsigned int              component = 0) const;
00350 
00355     virtual void vector_laplacian_list (const std::vector<Point<dim> > &points,
00356                                         std::vector<Vector<double> >   &values) const;
00357 
00374     std::size_t memory_consumption () const;
00375 };
00376 
00377 
00391 template <int dim>
00392 class ZeroFunction : public Function<dim>
00393 {
00394   public:
00399     ZeroFunction (const unsigned int n_components = 1);
00400 
00405     virtual ~ZeroFunction ();
00406 
00412     virtual double value (const Point<dim>   &p,
00413                           const unsigned int  component) const;
00414 
00420     virtual void vector_value (const Point<dim> &p,
00421                                Vector<double>   &return_value) const;
00422 
00432     virtual void value_list (const std::vector<Point<dim> > &points,
00433                              std::vector<double>            &values,
00434                              const unsigned int              component = 0) const;
00435 
00445     virtual void vector_value_list (const std::vector<Point<dim> > &points,
00446                                     std::vector<Vector<double> >   &values) const;
00447 
00453     virtual Tensor<1,dim> gradient (const Point<dim> &p,
00454                                     const unsigned int component = 0) const;
00455 
00462     virtual void vector_gradient (const Point<dim>            &p,
00463                                   std::vector<Tensor<1,dim> > &gradients) const;
00464 
00473     virtual void gradient_list (const std::vector<Point<dim> > &points,
00474                                 std::vector<Tensor<1,dim> >    &gradients,
00475                                 const unsigned int              component = 0) const;
00476 
00491     virtual void vector_gradient_list (const std::vector<Point<dim> >            &points,
00492                                        std::vector<std::vector<Tensor<1,dim> > > &gradients) const;
00493 };
00494 
00495 
00520 template <int dim>
00521 class ConstantFunction : public ZeroFunction<dim>
00522 {
00523   public:
00529     ConstantFunction (const double       value,
00530                       const unsigned int n_components = 1);
00531 
00536     virtual ~ConstantFunction ();
00537 
00543     virtual double value (const Point<dim>   &p,
00544                           const unsigned int  component) const;
00545 
00551     virtual void   vector_value (const Point<dim> &p,
00552                                  Vector<double>   &return_value) const;
00553 
00563     virtual void value_list (const std::vector<Point<dim> > &points,
00564                              std::vector<double>            &values,
00565                              const unsigned int              component = 0) const;
00566 
00576     virtual void vector_value_list (const std::vector<Point<dim> > &points,
00577                                     std::vector<Vector<double> >   &values) const;
00578 
00595     std::size_t memory_consumption () const;
00596 
00597   protected:
00601     const double function_value;
00602 };
00603 
00604 
00605 
00618 template <int dim>
00619 class ComponentSelectFunction : public ConstantFunction<dim>
00620 {
00621   public:
00631     ComponentSelectFunction (const unsigned int selected,
00632                              const double       value,
00633                              const unsigned int n_components);
00634 
00642     ComponentSelectFunction (const unsigned int selected,
00643                              const unsigned int n_components);
00644 
00659     ComponentSelectFunction (const std::pair<unsigned int, unsigned int> &selected,
00660                              const unsigned int n_components);
00661 
00667     virtual void   vector_value (const Point<dim> &p,
00668                                  Vector<double>   &return_value) const;
00669 
00679     virtual void vector_value_list (const std::vector<Point<dim> > &points,
00680                                     std::vector<Vector<double> >   &values) const;
00681 
00698     std::size_t memory_consumption () const;
00699 
00700   protected:
00706     const std::pair<unsigned int,unsigned int> selected_components;
00707 };
00708 
00709 
00786 template <int dim>
00787 class ScalarFunctionFromFunctionObject : public Function<dim>
00788 {
00789 public:
00795   ScalarFunctionFromFunctionObject (const std_cxx1x::function<double (const Point<dim> &)> &function_object);
00796 
00804   virtual double value (const Point<dim>   &p,
00805                         const unsigned int  component = 0) const;
00806 
00807 private:
00812   const std_cxx1x::function<double (const Point<dim> &)> function_object;
00813 };
00814 
00815 
00850 template <int dim>
00851 class VectorFunctionFromScalarFunctionObject : public Function<dim>
00852 {
00853 public:
00866   VectorFunctionFromScalarFunctionObject (const std_cxx1x::function<double (const Point<dim> &)> &function_object,
00867                                           const unsigned int selected_component,
00868                                           const unsigned int n_components);
00869 
00877   virtual double value (const Point<dim>   &p,
00878                         const unsigned int  component = 0) const;
00879 
00889   virtual void vector_value (const Point<dim>   &p,
00890                              Vector<double>     &values) const;
00891 
00892 private:
00897   const std_cxx1x::function<double (const Point<dim> &)> function_object;
00898 
00903   const unsigned int selected_component;
00904 };
00905 
00906 
00907 DEAL_II_NAMESPACE_CLOSE
00908 
00909 #endif
00910 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

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