Reference documentation for deal.II version 8.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
function.h
1 // ---------------------------------------------------------------------
2 // @f$Id: function.h 30036 2013-07-18 16:55:32Z maier @f$
3 //
4 // Copyright (C) 1998 - 2013 by the deal.II authors
5 //
6 // This file is part of the deal.II library.
7 //
8 // The deal.II library is free software; you can use it, redistribute
9 // it, and/or modify it under the terms of the GNU Lesser General
10 // Public License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 // The full text of the license can be found in the file LICENSE at
13 // the top level of the deal.II distribution.
14 //
15 // ---------------------------------------------------------------------
16 
17 #ifndef __deal2__function_h
18 #define __deal2__function_h
19 
20 
21 #include <deal.II/base/config.h>
23 #include <deal.II/base/function_time.h>
24 #include <deal.II/base/subscriptor.h>
25 #include <deal.II/base/tensor.h>
26 #include <deal.II/base/point.h>
27 #include <deal.II/base/std_cxx1x/function.h>
28 
29 #include <vector>
30 
32 
33 
34 template <typename number> class Vector;
35 template <int rank, int dim> class TensorFunction;
36 
116 template <int dim>
117 class Function : public FunctionTime,
118  public Subscriptor
119 {
120 public:
125  static const unsigned int dimension = dim;
126 
130  const unsigned int n_components;
131 
137  Function (const unsigned int n_components = 1,
138  const double initial_time = 0.0);
139 
162  virtual ~Function () = 0;
163 
170  Function &operator= (const Function &f);
171 
178  virtual double value (const Point<dim> &p,
179  const unsigned int component = 0) const;
180 
187  virtual void vector_value (const Point<dim> &p,
188  Vector<double> &values) const;
189 
199  virtual void value_list (const std::vector<Point<dim> > &points,
200  std::vector<double> &values,
201  const unsigned int component = 0) const;
202 
213  virtual void vector_value_list (const std::vector<Point<dim> > &points,
214  std::vector<Vector<double> > &values) const;
215 
224  virtual void vector_values (const std::vector<Point<dim> > &points,
225  std::vector<std::vector<double> > &values) const;
226 
231  virtual Tensor<1,dim> gradient (const Point<dim> &p,
232  const unsigned int component = 0) const;
233 
238  virtual void vector_gradient (const Point<dim> &p,
239  std::vector<Tensor<1,dim> > &gradients) const;
240 
247  virtual void gradient_list (const std::vector<Point<dim> > &points,
248  std::vector<Tensor<1,dim> > &gradients,
249  const unsigned int component = 0) const;
250 
259  virtual void vector_gradients (const std::vector<Point<dim> > &points,
260  std::vector<std::vector<Tensor<1,dim> > > &gradients) const;
261 
271  virtual void vector_gradient_list (const std::vector<Point<dim> > &points,
272  std::vector<std::vector<Tensor<1,dim> > > &gradients) const;
273 
277  virtual double laplacian (const Point<dim> &p,
278  const unsigned int component = 0) const;
279 
284  virtual void vector_laplacian (const Point<dim> &p,
285  Vector<double> &values) const;
286 
290  virtual void laplacian_list (const std::vector<Point<dim> > &points,
291  std::vector<double> &values,
292  const unsigned int component = 0) const;
293 
297  virtual void vector_laplacian_list (const std::vector<Point<dim> > &points,
298  std::vector<Vector<double> > &values) const;
299 
307  std::size_t memory_consumption () const;
308 };
309 
310 
311 
325 template <int dim>
326 class ZeroFunction : public Function<dim>
327 {
328 public:
332  ZeroFunction (const unsigned int n_components = 1);
333 
338  virtual ~ZeroFunction ();
339 
340  virtual double value (const Point<dim> &p,
341  const unsigned int component) const;
342 
343  virtual void vector_value (const Point<dim> &p,
344  Vector<double> &return_value) const;
345 
346  virtual void value_list (const std::vector<Point<dim> > &points,
347  std::vector<double> &values,
348  const unsigned int component = 0) const;
349 
350  virtual void vector_value_list (const std::vector<Point<dim> > &points,
351  std::vector<Vector<double> > &values) const;
352 
353  virtual Tensor<1,dim> gradient (const Point<dim> &p,
354  const unsigned int component = 0) const;
355 
356  virtual void vector_gradient (const Point<dim> &p,
357  std::vector<Tensor<1,dim> > &gradients) const;
358 
359  virtual void gradient_list (const std::vector<Point<dim> > &points,
360  std::vector<Tensor<1,dim> > &gradients,
361  const unsigned int component = 0) const;
362 
363  virtual void vector_gradient_list (const std::vector<Point<dim> > &points,
364  std::vector<std::vector<Tensor<1,dim> > > &gradients) const;
365 };
366 
367 
368 
392 template <int dim>
393 class ConstantFunction : public ZeroFunction<dim>
394 {
395 public:
400  ConstantFunction (const double value,
401  const unsigned int n_components = 1);
402 
406  virtual ~ConstantFunction ();
407 
408  virtual double value (const Point<dim> &p,
409  const unsigned int component) const;
410 
411  virtual void vector_value (const Point<dim> &p,
412  Vector<double> &return_value) const;
413 
414  virtual void value_list (const std::vector<Point<dim> > &points,
415  std::vector<double> &values,
416  const unsigned int component = 0) const;
417 
418  virtual void vector_value_list (const std::vector<Point<dim> > &points,
419  std::vector<Vector<double> > &values) const;
420 
421  std::size_t memory_consumption () const;
422 
423 protected:
427  const double function_value;
428 };
429 
430 
431 
446 template <int dim>
448 {
449 public:
455  ComponentSelectFunction (const unsigned int selected,
456  const double value,
457  const unsigned int n_components);
458 
463  ComponentSelectFunction (const unsigned int selected,
464  const unsigned int n_components);
465 
473  ComponentSelectFunction (const std::pair<unsigned int, unsigned int> &selected,
474  const unsigned int n_components);
475 
480  virtual void vector_value (const Point<dim> &p,
481  Vector<double> &return_value) const;
482 
489  virtual void vector_value_list (const std::vector<Point<dim> > &points,
490  std::vector<Vector<double> > &values) const;
491 
499  std::size_t memory_consumption () const;
500 
501 protected:
505  const std::pair<unsigned int,unsigned int> selected_components;
506 };
507 
508 
509 
586 template <int dim>
588 {
589 public:
594  ScalarFunctionFromFunctionObject (const std_cxx1x::function<double (const Point<dim> &)> &function_object);
595 
600  virtual double value (const Point<dim> &p,
601  const unsigned int component = 0) const;
602 
603 private:
608  const std_cxx1x::function<double (const Point<dim> &)> function_object;
609 };
610 
611 
612 
647 template <int dim>
649 {
650 public:
663  VectorFunctionFromScalarFunctionObject (const std_cxx1x::function<double (const Point<dim> &)> &function_object,
664  const unsigned int selected_component,
665  const unsigned int n_components);
666 
671  virtual double value (const Point<dim> &p,
672  const unsigned int component = 0) const;
673 
680  virtual void vector_value (const Point<dim> &p,
681  Vector<double> &values) const;
682 
683 private:
688  const std_cxx1x::function<double (const Point<dim> &)> function_object;
689 
694  const unsigned int selected_component;
695 };
696 
697 
732 template <int dim>
734 {
735 public:
754  const unsigned int selected_component=0,
755  const unsigned int n_components=dim);
756 
762 
767  virtual double value (const Point<dim> &p,
768  const unsigned int component = 0) const;
769 
776  virtual void vector_value (const Point<dim> &p,
777  Vector<double> &values) const;
778 
786  virtual void vector_value_list (const std::vector<Point<dim> > &points,
787  std::vector<Vector<double> > &value_list) const;
788 
789 private:
795 
802  const unsigned int selected_component;
803 };
804 
805 
806 DEAL_II_NAMESPACE_CLOSE
807 
808 #endif
virtual ~ConstantFunction()
virtual void vector_gradients(const std::vector< Point< dim > > &points, std::vector< std::vector< Tensor< 1, dim > > > &gradients) const
virtual void vector_gradient_list(const std::vector< Point< dim > > &points, std::vector< std::vector< Tensor< 1, dim > > > &gradients) const
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
ZeroFunction(const unsigned int n_components=1)
const TensorFunction< 1, dim > & tensor_function
Definition: function.h:794
const unsigned int selected_component
Definition: function.h:694
virtual void vector_gradient(const Point< dim > &p, std::vector< Tensor< 1, dim > > &gradients) const
ScalarFunctionFromFunctionObject(const std_cxx1x::function< double(const Point< dim > &)> &function_object)
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
virtual void vector_values(const std::vector< Point< dim > > &points, std::vector< std::vector< double > > &values) const
const std::pair< unsigned int, unsigned int > selected_components
Definition: function.h:505
const unsigned int selected_component
Definition: function.h:802
virtual double value(const Point< dim > &p, const unsigned int component) const
Function & operator=(const Function &f)
std::size_t memory_consumption() const
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
VectorFunctionFromScalarFunctionObject(const std_cxx1x::function< double(const Point< dim > &)> &function_object, const unsigned int selected_component, const unsigned int n_components)
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
Function(const unsigned int n_components=1, const double initial_time=0.0)
std::size_t memory_consumption() const
virtual double value(const Point< dim > &p, const unsigned int component) const
virtual void gradient_list(const std::vector< Point< dim > > &points, std::vector< Tensor< 1, dim > > &gradients, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
ConstantFunction(const double value, const unsigned int n_components=1)
virtual void vector_gradient(const Point< dim > &p, std::vector< Tensor< 1, dim > > &gradients) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
virtual void gradient_list(const std::vector< Point< dim > > &points, std::vector< Tensor< 1, dim > > &gradients, const unsigned int component=0) const
virtual void vector_gradient_list(const std::vector< Point< dim > > &points, std::vector< std::vector< Tensor< 1, dim > > > &gradients) const
virtual void vector_laplacian(const Point< dim > &p, Vector< double > &values) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
static const unsigned int dimension
Definition: function.h:125
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const
const std_cxx1x::function< double(const Point< dim > &)> function_object
Definition: function.h:608
ComponentSelectFunction(const unsigned int selected, const double value, const unsigned int n_components)
const unsigned int n_components
Definition: function.h:130
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const
const std_cxx1x::function< double(const Point< dim > &)> function_object
Definition: function.h:688
virtual void vector_value(const Point< dim > &p, Vector< double > &return_value) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual void vector_value(const Point< dim > &p, Vector< double > &return_value) const
virtual ~Function()=0
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &value_list) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
const double function_value
Definition: function.h:427
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
VectorFunctionFromTensorFunction(const TensorFunction< 1, dim > &tensor_function, const unsigned int selected_component=0, const unsigned int n_components=dim)
virtual void vector_laplacian_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
virtual ~ZeroFunction()
virtual void vector_value(const Point< dim > &p, Vector< double > &return_value) const