]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Same test, but for DGQ
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 10 Aug 2006 19:16:23 +0000 (19:16 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 10 Aug 2006 19:16:23 +0000 (19:16 +0000)
git-svn-id: https://svn.dealii.org/trunk@13636 0785d39b-7218-0410-832d-ea1e28bc413d

tests/deal.II/interpolate_dgq_01.cc [new file with mode: 0644]
tests/deal.II/interpolate_dgq_01/cmp/generic [new file with mode: 0644]
tests/deal.II/interpolate_q_01.cc

diff --git a/tests/deal.II/interpolate_dgq_01.cc b/tests/deal.II/interpolate_dgq_01.cc
new file mode 100644 (file)
index 0000000..1d7c6b6
--- /dev/null
@@ -0,0 +1,117 @@
+//----------------------------  interpolate_dgq_01.cc  ---------------------------
+//    $Id: interpolate_dgq_01.cc 12732 2006-03-28 23:15:45Z wolf $
+//    Version: $Name$ 
+//
+//    Copyright (C) 2006 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.
+//
+//----------------------------  interpolate_dgq_01.cc  ---------------------------
+
+
+// check that VectorTools::interpolate works for FE_Q(p) elements correctly on
+// a uniformly refined mesh for functions of degree q
+
+#include "../tests.h"
+#include <base/function.h>
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <lac/vector.h>
+
+#include <grid/tria.h>
+#include <dofs/dof_handler.h>
+#include <grid/grid_generator.h>
+#include <grid/grid_refinement.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/tria_boundary_lib.h>
+#include <dofs/dof_accessor.h>
+#include <dofs/dof_tools.h>
+#include <numerics/vectors.h>
+#include <fe/fe_dgq.h>
+
+#include <fstream>
+#include <vector>
+
+
+template <int dim>
+class F :  public Function<dim>
+{
+  public:
+    F (const unsigned int q) : q(q) {}
+    
+    virtual double value (const Point<dim> &p,
+                         const unsigned int) const
+      {
+       double v=0;
+       for (unsigned int d=0; d<dim; ++d)
+         for (unsigned int i=0; i<=q; ++i)
+           v += (d+1)*(i+1)*std::pow (p[d], 1.*i);
+       return v;
+      }
+
+  private:
+    const unsigned int q;
+};
+
+
+
+template <int dim>
+void test ()
+{
+  Triangulation<dim>     triangulation;
+  GridGenerator::hyper_cube (triangulation);
+  triangulation.refine_global (3);
+
+  for (unsigned int p=1; p<7-dim; ++p)
+    {
+      FE_DGQ<dim>              fe(p);
+      DoFHandler<dim>        dof_handler(triangulation);
+      dof_handler.distribute_dofs (fe);
+
+      Vector<double> interpolant (dof_handler.n_dofs());
+      Vector<float>  error (triangulation.n_active_cells());
+      for (unsigned int q=0; q<=p+2; ++q)
+       {
+                                          // interpolate the function
+         VectorTools::interpolate (dof_handler,
+                                   F<dim> (q),
+                                   interpolant);
+      
+                                          // then compute the interpolation error
+         VectorTools::integrate_difference (dof_handler,
+                                            interpolant,
+                                            F<dim> (q),
+                                            error,
+                                            QGauss<dim>(q+2),
+                                            VectorTools::L2_norm);
+         if (q<=p)
+           Assert (error.l2_norm() < 1e-12*interpolant.l2_norm(),
+                   ExcInternalError());
+
+         deallog << fe.get_name() << ", P_" << q
+                 << ", rel. error=" << error.l2_norm() / interpolant.l2_norm()
+                 << std::endl;
+       }
+    }
+}
+
+
+
+int main ()
+{
+  std::ofstream logfile("interpolate_dgq_01/output");
+  logfile.precision (3);
+  
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test<1>();
+  test<2>();
+  test<3>();
+}
+
diff --git a/tests/deal.II/interpolate_dgq_01/cmp/generic b/tests/deal.II/interpolate_dgq_01/cmp/generic
new file mode 100644 (file)
index 0000000..f9d8496
--- /dev/null
@@ -0,0 +1,68 @@
+
+DEAL::FE_DGQ<1>(1), P_0, rel. error=0
+DEAL::FE_DGQ<1>(1), P_1, rel. error=0
+DEAL::FE_DGQ<1>(1), P_2, rel. error=0.000638
+DEAL::FE_DGQ<1>(1), P_3, rel. error=0.00143
+DEAL::FE_DGQ<1>(2), P_0, rel. error=0
+DEAL::FE_DGQ<1>(2), P_1, rel. error=0
+DEAL::FE_DGQ<1>(2), P_2, rel. error=0
+DEAL::FE_DGQ<1>(2), P_3, rel. error=1.15e-05
+DEAL::FE_DGQ<1>(2), P_4, rel. error=3.26e-05
+DEAL::FE_DGQ<1>(3), P_0, rel. error=0
+DEAL::FE_DGQ<1>(3), P_1, rel. error=0
+DEAL::FE_DGQ<1>(3), P_2, rel. error=0
+DEAL::FE_DGQ<1>(3), P_3, rel. error=0
+DEAL::FE_DGQ<1>(3), P_4, rel. error=2.60e-07
+DEAL::FE_DGQ<1>(3), P_5, rel. error=8.88e-07
+DEAL::FE_DGQ<1>(4), P_0, rel. error=0
+DEAL::FE_DGQ<1>(4), P_1, rel. error=0
+DEAL::FE_DGQ<1>(4), P_2, rel. error=0
+DEAL::FE_DGQ<1>(4), P_3, rel. error=0
+DEAL::FE_DGQ<1>(4), P_4, rel. error=0
+DEAL::FE_DGQ<1>(4), P_5, rel. error=6.71e-09
+DEAL::FE_DGQ<1>(4), P_6, rel. error=2.68e-08
+DEAL::FE_DGQ<1>(5), P_0, rel. error=0
+DEAL::FE_DGQ<1>(5), P_1, rel. error=0
+DEAL::FE_DGQ<1>(5), P_2, rel. error=0
+DEAL::FE_DGQ<1>(5), P_3, rel. error=0
+DEAL::FE_DGQ<1>(5), P_4, rel. error=0
+DEAL::FE_DGQ<1>(5), P_5, rel. error=0
+DEAL::FE_DGQ<1>(5), P_6, rel. error=1.92e-10
+DEAL::FE_DGQ<1>(5), P_7, rel. error=8.80e-10
+DEAL::FE_DGQ<2>(1), P_0, rel. error=0
+DEAL::FE_DGQ<2>(1), P_1, rel. error=0
+DEAL::FE_DGQ<2>(1), P_2, rel. error=0.000161
+DEAL::FE_DGQ<2>(1), P_3, rel. error=0.000360
+DEAL::FE_DGQ<2>(2), P_0, rel. error=0
+DEAL::FE_DGQ<2>(2), P_1, rel. error=0
+DEAL::FE_DGQ<2>(2), P_2, rel. error=0
+DEAL::FE_DGQ<2>(2), P_3, rel. error=1.88e-06
+DEAL::FE_DGQ<2>(2), P_4, rel. error=5.44e-06
+DEAL::FE_DGQ<2>(3), P_0, rel. error=0
+DEAL::FE_DGQ<2>(3), P_1, rel. error=0
+DEAL::FE_DGQ<2>(3), P_2, rel. error=0
+DEAL::FE_DGQ<2>(3), P_3, rel. error=0
+DEAL::FE_DGQ<2>(3), P_4, rel. error=4.09e-08
+DEAL::FE_DGQ<2>(3), P_5, rel. error=1.41e-07
+DEAL::FE_DGQ<2>(4), P_0, rel. error=0
+DEAL::FE_DGQ<2>(4), P_1, rel. error=0
+DEAL::FE_DGQ<2>(4), P_2, rel. error=0
+DEAL::FE_DGQ<2>(4), P_3, rel. error=0
+DEAL::FE_DGQ<2>(4), P_4, rel. error=0
+DEAL::FE_DGQ<2>(4), P_5, rel. error=8.84e-10
+DEAL::FE_DGQ<2>(4), P_6, rel. error=3.59e-09
+DEAL::FE_DGQ<3>(1), P_0, rel. error=0
+DEAL::FE_DGQ<3>(1), P_1, rel. error=0
+DEAL::FE_DGQ<3>(1), P_2, rel. error=4.03e-05
+DEAL::FE_DGQ<3>(1), P_3, rel. error=9.02e-05
+DEAL::FE_DGQ<3>(2), P_0, rel. error=0
+DEAL::FE_DGQ<3>(2), P_1, rel. error=0
+DEAL::FE_DGQ<3>(2), P_2, rel. error=0
+DEAL::FE_DGQ<3>(2), P_3, rel. error=3.30e-07
+DEAL::FE_DGQ<3>(2), P_4, rel. error=9.67e-07
+DEAL::FE_DGQ<3>(3), P_0, rel. error=0
+DEAL::FE_DGQ<3>(3), P_1, rel. error=0
+DEAL::FE_DGQ<3>(3), P_2, rel. error=0
+DEAL::FE_DGQ<3>(3), P_3, rel. error=0
+DEAL::FE_DGQ<3>(3), P_4, rel. error=6.75e-09
+DEAL::FE_DGQ<3>(3), P_5, rel. error=2.32e-08
index c4739a58e2149e6a10705fcd0c84d5c3da5ca79a..7a2b5de7d03209dd90bf0ebddb12ab9f974a9294 100644 (file)
@@ -12,7 +12,7 @@
 //----------------------------  interpolate_q_01.cc  ---------------------------
 
 
-// check that VectorTools::interpolate works for FE_Q(p) elements correctly on
+// check that VectorTools::interpolate works for FE_DGQ(p) elements correctly on
 // a uniformly refined mesh for functions of degree q
 
 #include "../tests.h"
@@ -92,7 +92,7 @@ void test ()
            Assert (error.l2_norm() < 1e-12*interpolant.l2_norm(),
                    ExcInternalError());
 
-         deallog << "FE_Q<" << dim << ">(" << p << "), P_" << q
+         deallog << fe.get_name() << ", P_" << q
                  << ", rel. error=" << error.l2_norm() / interpolant.l2_norm()
                  << std::endl;
        }

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.