From 736f4b04b2a5d1f434d24305c8fe207e3da69611 Mon Sep 17 00:00:00 2001 From: kanschat Date: Fri, 24 Sep 2010 14:26:41 +0000 Subject: [PATCH] add missing implementations git-svn-id: https://svn.dealii.org/trunk@22142 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/base/include/base/function_lib.h | 29 ++++-------------------- deal.II/base/source/function.cc | 18 ++++++++++----- deal.II/base/source/function_lib.cc | 29 ++++++++++++++++++++---- 3 files changed, 42 insertions(+), 34 deletions(-) diff --git a/deal.II/base/include/base/function_lib.h b/deal.II/base/include/base/function_lib.h index e873f1d4dd..045809c60a 100644 --- a/deal.II/base/include/base/function_lib.h +++ b/deal.II/base/include/base/function_lib.h @@ -46,41 +46,22 @@ namespace Functions class SquareFunction : public Function { public: - /** - * Function value at one point. - */ virtual double value (const Point &p, - const unsigned int component = 0) const; - - /** - * Function values at multiple points. - */ + const unsigned int component = 0) const; + virtual void vector_value (const Point &p, + Vector &values) const; virtual void value_list (const std::vector > &points, std::vector &values, const unsigned int component = 0) const; - - /** - * Gradient at one point. - */ virtual Tensor<1,dim> gradient (const Point &p, const unsigned int component = 0) const; - - /** - Gradients at multiple points. - */ + virtual void vector_gradient (const Point &p, + std::vector > &gradient) const; virtual void gradient_list (const std::vector > &points, std::vector > &gradients, const unsigned int component = 0) const; - - /** - * Laplacian of the function at one point. - */ virtual double laplacian (const Point &p, const unsigned int component = 0) const; - - /** - * Laplacian of the function at multiple points. - */ virtual void laplacian_list (const std::vector > &points, std::vector &values, const unsigned int component = 0) const; diff --git a/deal.II/base/source/function.cc b/deal.II/base/source/function.cc index d8b029ed38..ac2a5faef8 100644 --- a/deal.II/base/source/function.cc +++ b/deal.II/base/source/function.cc @@ -66,10 +66,13 @@ double Function::value (const Point &, template -void Function::vector_value (const Point &, - Vector &) const +void Function::vector_value ( + const Point& p, + Vector& v) const { - Assert (false, ExcPureFunctionCalled()); + AssertDimension(v.size(), this->n_components); + for (unsigned int i=0;in_components;++i) + v(i) = value(p, i); } @@ -114,10 +117,13 @@ Tensor<1,dim> Function::gradient (const Point &, template -void Function::vector_gradient (const Point &, - std::vector > &) const +void Function::vector_gradient ( + const Point& p, + std::vector >& v) const { - Assert (false, ExcPureFunctionCalled()); + AssertDimension(v.size(), this->n_components); + for (unsigned int i=0;in_components;++i) + v[i] = gradient(p, i); } diff --git a/deal.II/base/source/function_lib.cc b/deal.II/base/source/function_lib.cc index 67fe4af5ec..11248ef035 100644 --- a/deal.II/base/source/function_lib.cc +++ b/deal.II/base/source/function_lib.cc @@ -44,8 +44,18 @@ namespace Functions { return p.square(); } + - + template + void + SquareFunction::vector_value (const Point &p, + Vector &values) const + { + AssertDimension(values.size(), 1); + values(0) = p.square(); + } + + template void SquareFunction::value_list (const std::vector > &points, @@ -92,11 +102,22 @@ namespace Functions SquareFunction::gradient (const Point &p, const unsigned int) const { - return p*2; + return p*2.; } - + template + void + SquareFunction::vector_gradient ( + const Point& p, + std::vector >& values) const + { + AssertDimension(values.size(), 1); + values[0] = p*2.; + } + + + template void SquareFunction::gradient_list (const std::vector > &points, @@ -918,7 +939,7 @@ namespace Functions Tensor<1,2> LSingularityFunction::gradient (const Point<2> &p, - const unsigned int d) const + const unsigned int) const { double x = p(0); double y = p(1); -- 2.39.5