]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Add test to check finite difference approximations of derivatives.
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 6 Apr 2001 13:08:25 +0000 (13:08 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 6 Apr 2001 13:08:25 +0000 (13:08 +0000)
git-svn-id: https://svn.dealii.org/trunk@4392 0785d39b-7218-0410-832d-ea1e28bc413d

tests/deal.II/Makefile.in
tests/deal.II/derivative_approximation.cc [new file with mode: 0644]
tests/deal.II/derivative_approximation.checked [new file with mode: 0644]

index 624cab761b23586658338a16c3f4429c352f5f32..14cd8eea2c16097e323d3fb211332ca8e99fb8a3 100644 (file)
@@ -68,6 +68,7 @@ all: grid_test.check dof_test.check data_out.check \
      derivatives.check gradients.check \
      constraints.check mg.check mglocal.check \
      block_matrices.check second_derivatives.check \
+     derivative_approximation.check \
      intergrid_constraints.check intergrid_map.check wave-test-3.check
 
 exe: $(all:.check=.testcase) benchmark
@@ -161,6 +162,20 @@ derivatives.testcase: $(derivatives-o-files) $(libdeal1d) $(libdeal3d) $(librari
 
 ############################################################
 
+derivative_approximation-cc-files = derivative_approximation.cc 
+
+ifeq ($(debug-mode),on)
+derivative_approximation-o-files = $(derivative_approximation-cc-files:.cc=.go)
+else
+derivative_approximation-o-files = $(derivative_approximation-cc-files:.cc=.o)
+endif
+
+derivative_approximation.testcase: $(derivative_approximation-o-files) $(libdeal1d) $(libdeal3d) $(libraries)
+       @echo =====linking======= $<
+       @$(CXX) $(LDFLAGS) -g  -o $@ $^ $(LIBS)
+
+############################################################
+
 gradients-cc-files = gradients.cc 
 
 ifeq ($(debug-mode),on)
diff --git a/tests/deal.II/derivative_approximation.cc b/tests/deal.II/derivative_approximation.cc
new file mode 100644 (file)
index 0000000..8ed90c9
--- /dev/null
@@ -0,0 +1,94 @@
+//----------------------------  derivative_approximation.cc  ---------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 2000, 2001 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.
+//
+//----------------------------  derivative_approximation.cc  ---------------------------
+
+
+/* Author: Wolfgang Bangerth, University of Heidelberg, 2001 */
+
+
+
+#include <base/logstream.h>
+#include <base/function_lib.h>
+#include <lac/vector.h>
+#include <grid/tria.h>
+#include <grid/tria_iterator.h>
+#include <grid/tria_accessor.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <numerics/vectors.h>
+#include <numerics/derivative_approximation.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void
+check ()
+{
+  CosineFunction<dim> cosine;
+  
+  Triangulation<dim> tr;  
+  if (dim==2)
+    GridGenerator::hyper_ball(tr);
+  else
+    GridGenerator::hyper_cube(tr, -1,1);
+  tr.refine_global (1);
+  tr.begin_active()->set_refine_flag ();
+  tr.execute_coarsening_and_refinement ();
+  if (dim==1)
+    tr.refine_global(2);
+  
+  FE_Q<dim> element(3);
+  DoFHandler<dim> dof(tr);
+  dof.distribute_dofs(element);
+
+  Vector<double> v (dof.n_dofs());
+  VectorTools::interpolate (dof, cosine, v);
+
+  Vector<float> gradient (tr.n_active_cells());
+  Vector<float> second (tr.n_active_cells());
+
+  DerivativeApproximation::
+    approximate_gradient (dof, v, gradient);
+  DerivativeApproximation::
+    approximate_second_derivative (dof, v, second);
+  
+  deallog << "Approximated gradient:" << std::endl;
+  for (unsigned int i=0; i<gradient.size(); ++i)
+    deallog << gradient(i)*100 << std::endl;
+  
+  deallog << "Approximated second derivative:" << std::endl;
+  for (unsigned int i=0; i<gradient.size(); ++i)
+    deallog << second(i)*100 << std::endl;
+}
+
+
+int main ()
+{
+  ofstream logfile ("derivative_approximation.output");
+  logfile.precision (2);
+  logfile.setf(ios::fixed);  
+  deallog.attach(logfile);
+  deallog.depth_console (0);
+
+  deallog.push ("1d");
+  check<1> ();
+  deallog.pop ();
+  deallog.push ("2d");
+  check<2> ();
+  deallog.pop ();
+//    deallog.push ("3d");
+//    check<3> ();
+//    deallog.pop ();
+}
diff --git a/tests/deal.II/derivative_approximation.checked b/tests/deal.II/derivative_approximation.checked
new file mode 100644 (file)
index 0000000..7588d0a
--- /dev/null
@@ -0,0 +1,75 @@
+
+DEAL:1d::Approximated gradient:
+DEAL:1d::33.70
+DEAL:1d::85.04
+DEAL:1d::127.27
+DEAL:1d::144.19
+DEAL:1d::153.81
+DEAL:1d::149.35
+DEAL:1d::137.64
+DEAL:1d::120.65
+DEAL:1d::99.01
+DEAL:1d::73.57
+DEAL:1d::45.31
+DEAL:1d::11.46
+DEAL:1d::Approximated second derivative:
+DEAL:1d::236.02
+DEAL:1d::199.92
+DEAL:1d::133.59
+DEAL:1d::93.82
+DEAL:1d::48.06
+DEAL:1d::71.17
+DEAL:1d::115.57
+DEAL:1d::155.53
+DEAL:1d::189.51
+DEAL:1d::216.21
+DEAL:1d::234.60
+DEAL:1d::243.58
+DEAL:2d::Approximated gradient:
+DEAL:2d::83.95
+DEAL:2d::78.64
+DEAL:2d::84.25
+DEAL:2d::91.43
+DEAL:2d::78.64
+DEAL:2d::78.64
+DEAL:2d::85.03
+DEAL:2d::47.74
+DEAL:2d::47.74
+DEAL:2d::47.74
+DEAL:2d::47.74
+DEAL:2d::85.03
+DEAL:2d::85.03
+DEAL:2d::78.64
+DEAL:2d::78.64
+DEAL:2d::85.03
+DEAL:2d::78.64
+DEAL:2d::78.64
+DEAL:2d::85.03
+DEAL:2d::94.21
+DEAL:2d::123.42
+DEAL:2d::115.45
+DEAL:2d::97.15
+DEAL:2d::Approximated second derivative:
+DEAL:2d::192.62
+DEAL:2d::236.14
+DEAL:2d::229.11
+DEAL:2d::269.15
+DEAL:2d::225.54
+DEAL:2d::225.54
+DEAL:2d::215.57
+DEAL:2d::239.92
+DEAL:2d::239.92
+DEAL:2d::239.92
+DEAL:2d::239.92
+DEAL:2d::215.57
+DEAL:2d::215.57
+DEAL:2d::225.54
+DEAL:2d::225.54
+DEAL:2d::201.62
+DEAL:2d::236.14
+DEAL:2d::236.14
+DEAL:2d::201.62
+DEAL:2d::233.72
+DEAL:2d::168.05
+DEAL:2d::185.42
+DEAL:2d::215.27

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.