Reference documentation for deal.II version 8.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
tensor_function.h
1 // ---------------------------------------------------------------------
2 // @f$Id: tensor_function.h 30208 2013-08-01 20:46:25Z felix.gruber @f$
3 //
4 // Copyright (C) 1999 - 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__tensor_function_h
18 #define __deal2__tensor_function_h
19 
20 
21 #include <deal.II/base/config.h>
23 #include <deal.II/base/subscriptor.h>
24 #include <deal.II/base/smartpointer.h>
25 #include <deal.II/base/function.h>
26 #include <deal.II/base/point.h>
27 #include <deal.II/base/function_time.h>
28 
29 #include <vector>
30 
32 
59 template <int rank, int dim>
60 class TensorFunction : public FunctionTime,
61  public Subscriptor
62 {
63 public:
68 
70 
75  TensorFunction (const double initial_time = 0.0);
76 
82  virtual ~TensorFunction ();
83 
87  virtual value_type value (const Point<dim> &p) const;
88 
94  virtual void value_list (const std::vector<Point<dim> > &points,
95  std::vector<value_type> &values) const;
96 
100  virtual gradient_type gradient (const Point<dim> &p) const;
101 
107  virtual void gradient_list (const std::vector<Point<dim> > &points,
108  std::vector<gradient_type> &gradients) const;
109 
117  DeclException2 (ExcVectorHasWrongSize,
118  int, int,
119  << "The vector has size " << arg1 << " but should have "
120  << arg2 << " elements.");
121 
122 };
123 
124 
125 
133 template <int rank, int dim>
134 class ConstantTensorFunction : public TensorFunction<rank, dim>
135 {
136 public:
144  ConstantTensorFunction (const ::Tensor<rank, dim> &value,
145  const double initial_time = 0.0);
146 
147  virtual ~ConstantTensorFunction ();
148 
149  virtual typename ::TensorFunction<rank, dim>::value_type value (const Point<dim> &p) const;
150 
151  virtual void value_list (const std::vector<Point<dim> > &points,
152  std::vector<typename ::TensorFunction<rank, dim>::value_type> &values) const;
153 
154  virtual typename ::TensorFunction<rank, dim>::gradient_type gradient (const Point<dim> &p) const;
155 
156  virtual void gradient_list (const std::vector<Point<dim> > &points,
157  std::vector<typename ::TensorFunction<rank, dim>::gradient_type> &gradients) const;
158 
159 private:
160  const ::Tensor<rank, dim> _value;
161 };
162 
163 
164 
172 template <int rank, int dim>
174 {
175 public:
182  ZeroTensorFunction (const double initial_time = 0.0);
183 };
184 
185 
186 DEAL_II_NAMESPACE_CLOSE
187 
188 #endif
::ExceptionBase & ExcPureFunctionCalled()
DeclException0(ExcPureFunctionCalled)
virtual typename::TensorFunction< rank, dim >::value_type value(const Point< dim > &p) const
ZeroTensorFunction(const double initial_time=0.0)
virtual value_type value(const Point< dim > &p) const
virtual ~TensorFunction()
TensorFunction(const double initial_time=0.0)
Tensor< rank, dim > value_type
virtual gradient_type gradient(const Point< dim > &p) const
virtual typename::TensorFunction< rank, dim >::gradient_type gradient(const Point< dim > &p) const
ConstantTensorFunction(const ::Tensor< rank, dim > &value, const double initial_time=0.0)
virtual void gradient_list(const std::vector< Point< dim > > &points, std::vector< gradient_type > &gradients) const
DeclException2(ExcVectorHasWrongSize, int, int,<< "The vector has size "<< arg1<< " but should have "<< arg2<< " elements.")
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< value_type > &values) const