From 70dde352cc90f93b43a395827aa9e0350630637e Mon Sep 17 00:00:00 2001 From: Ralf Hartmann Date: Fri, 15 Dec 2000 07:02:41 +0000 Subject: [PATCH] Testcase for new classes Polynomial and LagrangeEquidistant. git-svn-id: https://svn.dealii.org/trunk@3535 0785d39b-7218-0410-832d-ea1e28bc413d --- tests/base/Makefile.in | 19 +++++ tests/base/polynomial_test.cc | 118 +++++++++++++++++++++++++++++ tests/base/polynomial_test.checked | 87 +++++++++++++++++++++ 3 files changed, 224 insertions(+) create mode 100644 tests/base/polynomial_test.cc create mode 100644 tests/base/polynomial_test.checked diff --git a/tests/base/Makefile.in b/tests/base/Makefile.in index 4de80563b9..d0c0a946a8 100644 --- a/tests/base/Makefile.in +++ b/tests/base/Makefile.in @@ -137,6 +137,8 @@ quadrature_test.testcase: $(quadrature_test-o-files) $(libraries) @$(CXX) $(flags) -o $@ $^ +############################################################ + timer-cc-files = timer.cc @@ -150,6 +152,23 @@ timer.testcase: $(timer-o-files) $(libraries) @echo =====linking======= $< @$(CXX) $(flags) -o $@ $^ + +############################################################ + + +polynomial_test-cc-files = polynomial_test.cc + +ifeq ($(debug-mode),on) +polynomial_test-o-files = $(polynomial_test-cc-files:.cc=.go) +else +polynomial_test-o-files = $(polynomial_test-cc-files:.cc=.o) +endif + +polynomial_test.testcase: $(polynomial_test-o-files) $(libraries) + @echo =====linking======= $< + @$(CXX) $(flags) -o $@ $^ + + ############################################################ # Continue with other targets if needed ############################################################ diff --git a/tests/base/polynomial_test.cc b/tests/base/polynomial_test.cc new file mode 100644 index 0000000000..49f65590b1 --- /dev/null +++ b/tests/base/polynomial_test.cc @@ -0,0 +1,118 @@ +//---------------------------- polynomial_test.cc --------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 1998, 1999, 2000 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------- polynomial_test.cc --------------------------- + +#include +#include + +#include +#include + + + +bool equals_delta_ij(double value, unsigned int i, unsigned int j) +{ + double eps=1e-14; + if ((i==j && fabs(value-1) values(1); + deallog << "LagrangeEquidistant polynoms:" << endl; + for (unsigned int order=1; order<=4; ++order) + { + deallog << "Polynomial p of order " << order << endl; + for (unsigned int s_point=0; s_point<=order; ++s_point) + { + LagrangeEquidistant polynom(order, s_point); + + // support points in vertices + if (order>0) + for (unsigned int i=0; i<=1; ++i) + { + double x=i; + polynom.value(x, values); + deallog << " p_" << s_point << "(" << x << ")"; +// deallog << "=" << values[0]; + if (equals_delta_ij(values[0], s_point, i)) + deallog << " ok"; + else + deallog << " false"; + deallog << endl; + } + // support points on line + if (order>1) + for (unsigned int i=1; i(i)/order; + polynom.value(x, values); + deallog << " p_" << s_point << "(" << x << ")"; +// deallog << "=" << values[0]; + if (equals_delta_ij(values[0], s_point, i+1)) + deallog << " ok"; + else + deallog << " false"; + deallog << endl; + } + deallog << endl; + } + } + + deallog << endl << "Test derivatives computed by the Horner scheme:" << endl; + LagrangeEquidistant pol(4, 3); + vector v_horner(6); + for (unsigned int i=0; i<=10; ++i) + { + double xi=i*0.1; + deallog << "x=" << xi << ", all derivatives: "; + vector v_exact(6); + + v_exact[0]=64.0*xi*xi*xi*xi-128.0*xi*xi*xi+76.0*xi*xi-12.0*xi; + v_exact[1]=256.0*xi*xi*xi-384.0*xi*xi+152.0*xi-12.0; + v_exact[2]=768.0*xi*xi-768.0*xi+152.0; + v_exact[3]=1536*xi-768; + v_exact[4]=1536; + v_exact[5]=0; + + pol.value(xi, v_horner); + + bool ok=true; + for (unsigned int i=0; i