]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add test.
authorWolfgang Bangerth <bangerth@colostate.edu>
Fri, 17 Nov 2017 16:43:17 +0000 (09:43 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Fri, 17 Nov 2017 16:43:17 +0000 (09:43 -0700)
tests/numerics/error_estimator_02_complex.cc [new file with mode: 0644]
tests/numerics/error_estimator_02_complex.output [new file with mode: 0644]

diff --git a/tests/numerics/error_estimator_02_complex.cc b/tests/numerics/error_estimator_02_complex.cc
new file mode 100644 (file)
index 0000000..0539ed4
--- /dev/null
@@ -0,0 +1,711 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2000 - 2016 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+
+// like the error_estimator_02 test but using a complex-valued vector
+
+
+#include "../tests.h"
+
+// dealii
+#include <deal.II/base/function.h>
+#include <deal.II/base/quadrature_lib.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/lac/vector.h>
+#include <deal.II/hp/q_collection.h>
+#include <deal.II/numerics/vector_tools.h>
+#include <deal.II/numerics/data_out.h>
+#include <deal.II/lac/constraint_matrix.h>
+#include <deal.II/dofs/dof_tools.h>
+#include <deal.II/numerics/error_estimator.h>
+
+// c++
+#include <iostream>
+
+using namespace dealii;
+
+template <int dim>
+class MyFunction : public dealii::Function<dim,std::complex<double> >
+{
+public:
+  MyFunction(const double k);
+
+  virtual std::complex<double> value(const dealii::Point<dim> &point,
+                                     const unsigned int component = 0 ) const;
+
+  double get_k() const;
+
+private:
+  const double k;
+};
+
+template <int dim>
+MyFunction<dim>::MyFunction(const double k)
+  :
+  dealii::Function<dim,std::complex<double> >(1),
+  k(k)
+{
+
+}
+
+template <int dim>
+std::complex<double>
+MyFunction<dim>::value(const dealii::Point<dim> &point,
+                       const unsigned int ) const
+{
+  const double x = point[0]-1.0;
+
+  if (x < 0)
+    return 0.0;
+  else
+    return std::complex<double>(0, k * x);
+}
+
+template <int dim>
+double MyFunction<dim>::get_k() const
+{
+  return k;
+}
+
+// neuman bc
+template <int dim>
+class NeumanBC : public dealii::Function<dim, std::complex<double> >
+{
+public:
+  NeumanBC(const double c);
+
+  virtual std::complex<double> value(const dealii::Point<dim> &point,
+                                     const unsigned int component = 0 ) const;
+
+  double get_c() const;
+
+private:
+  const double c;
+};
+
+template <int dim>
+NeumanBC<dim>::NeumanBC(const double c)
+  :
+  dealii::Function<dim, std::complex<double> >(1),
+  c(c)
+{
+}
+
+template <int dim>
+std::complex<double> NeumanBC<dim>::value(const dealii::Point<dim> &point,
+                                          const unsigned int ) const
+{
+  return std::complex<double>(0, c);
+}
+
+template <int dim>
+double NeumanBC<dim>::get_c() const
+{
+  return c;
+}
+
+// helper function to get diagonal and
+// area of the squared element with lenght h
+template <int dim>
+void get_h_area(double &h, double &a, const double L);
+
+template <>
+void get_h_area<2>(double &h, double &a, const double L)
+{
+  h = L;
+  a = L;
+}
+
+template <>
+void get_h_area<3>(double &h, double &a, const double L)
+{
+  h = std::sqrt(2.0)*L;
+  a = L*L;
+}
+
+// helper function to get diagonal and area of the
+// h-refined face.
+template <int dim>
+void get_h_area_sub(double &h, double &a, const double L);
+
+template <>
+void get_h_area_sub<2>(double &h, double &a, const double L)
+{
+  h = L/2;
+  a = L/2;
+}
+
+template <>
+void get_h_area_sub<3>(double &h, double &a, const double L)
+{
+  h = std::sqrt(2.0)*L/2;
+  a = L*L/4.0;
+}
+
+// output for inspection
+template <int dim>
+void output(const std::string          name,
+            const Triangulation<dim>  &triangulation,
+            const hp::DoFHandler<dim> &dof_handler,
+            const Vector<std::complex<double> >      &values,
+            const Vector<float>       &error)
+{
+  dealii::Vector<double> fe_degrees(triangulation.n_active_cells());
+  {
+    typename dealii::hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+    for (unsigned int index=0; cell!=endc; ++cell, ++index)
+      fe_degrees(index) = dof_handler.get_fe()[cell->active_fe_index()].degree;
+  }
+
+  dealii::DataOut<dim,dealii::hp::DoFHandler<dim> > data_out;
+  data_out.attach_dof_handler (dof_handler);
+  data_out.add_data_vector(values,
+                           std::string("function_interpolation"));
+  data_out.add_data_vector(fe_degrees,
+                           std::string("fe_degree"));
+  data_out.add_data_vector(error,
+                           std::string("error"));
+  data_out.build_patches ();
+
+  std::ofstream output (name.c_str());
+  data_out.write_vtu (output);
+}
+
+// case 1)
+template <int dim>
+void test_neumann(const NeumanBC<dim> &func)
+{
+  deallog << "NeumanBC case:"<<std::endl;
+  deallog << "--------------"<<std::endl;
+  Triangulation<dim> triangulation;
+  hp::DoFHandler<dim> dof_handler(triangulation);
+  hp::FECollection<dim> fe_collection;
+  hp::QCollection<dim> quadrature_formula;
+  hp::QCollection<dim-1> face_quadrature_formula;
+  ConstraintMatrix constraints;
+
+  const unsigned int p = 3;
+
+  fe_collection.push_back(dealii::FE_Q<dim>(QIterated<1>(QTrapez<1>(),p)));
+  quadrature_formula.push_back(dealii::QGauss<dim>(p+5));
+  face_quadrature_formula.push_back(dealii::QGauss<dim-1>(p+5));
+
+  const double L = 2.0;
+
+  // set-up domain
+  {
+    GridGenerator::hyper_cube (triangulation,.0,L,/*colorize*/true);
+  }
+
+  dof_handler.distribute_dofs (fe_collection);
+
+  // constraints
+  constraints.clear();
+  dealii::DoFTools::make_hanging_node_constraints  (dof_handler, constraints);
+  constraints.close ();
+
+  // interpolate some function
+  dealii::Vector<std::complex<double> > values(dof_handler.n_dofs());
+
+  dealii::deallog << "dof values:"<<std::endl;
+  for (unsigned int i = 0; i < values.size(); i++)
+    dealii::deallog << " " << values[i];
+  dealii::deallog << std::endl;
+
+  // call Kelly
+  typename dealii::FunctionMap<dim,std::complex<double> >::type function_map;
+  function_map[0] = &func;
+
+  dealii::Vector<float> error(dof_handler.n_dofs());
+  dealii::KellyErrorEstimator<dim>::estimate(dof_handler,
+                                             face_quadrature_formula,
+                                             function_map,
+                                             values,
+                                             error,
+                                             dealii::ComponentMask(),
+                                             nullptr,
+                                             dealii::numbers::invalid_unsigned_int,
+                                             dealii::numbers::invalid_subdomain_id,
+                                             dealii::numbers::invalid_material_id,
+                                             dealii::KellyErrorEstimator<dim>::face_diameter_over_twice_max_degree);
+
+  dealii::deallog <<"error:"<<std::endl;
+  for (unsigned int i = 0; i < error.size(); i++)
+    dealii::deallog << " " << error[i];
+  dealii::deallog << std::endl;
+
+  //output("neuman.vtu",
+  //       triangulation,
+  //       dof_handler,
+  //       values,
+  //       error);
+
+  double h,A;
+  get_h_area<dim>(h,A,L);
+  const double expected_value_squared = h*A*std::pow(func.get_c(),2)/p;
+  dealii::deallog << "expected:"<< std::endl <<" "<< std::sqrt(expected_value_squared) << std::endl;
+
+  AssertThrow (std::fabs(std::sqrt(expected_value_squared) - error[0] ) < 1e-5, dealii::ExcInternalError());
+
+  dof_handler.clear();
+}
+
+// case 2)
+template <int dim>
+void test_regular(const MyFunction<dim> &func)
+{
+  deallog << std::endl;
+  deallog << "Regular face:"<<std::endl;
+  deallog << "-------------"<<std::endl;
+  Triangulation<dim> triangulation;
+  hp::DoFHandler<dim> dof_handler(triangulation);
+  hp::FECollection<dim> fe_collection;
+  hp::QCollection<dim> quadrature_formula;
+  hp::QCollection<dim-1> face_quadrature_formula;
+  ConstraintMatrix constraints;
+
+  const unsigned int p1 = 1;
+  const unsigned int p2 = 2;
+  std::vector<unsigned int> p_degree;
+  p_degree.push_back(p1);
+  p_degree.push_back(p2);
+
+  for (unsigned int i=0; i<p_degree.size(); i++)
+    {
+      const unsigned int &p = p_degree[i];
+      fe_collection.push_back(dealii::FE_Q<dim>(QIterated<1>(QTrapez<1>(),p)));
+      quadrature_formula.push_back(dealii::QGauss<dim>(p+5));
+      face_quadrature_formula.push_back(dealii::QGauss<dim-1>(p+5));
+    }
+
+  const double L = 2.0;
+
+  // set-up domain
+  {
+    std::vector<unsigned int> repetitions(dim,1);
+    repetitions[0] = 2;
+    dealii::Point<dim> p1;
+    dealii::Point<dim> p2;
+    for (unsigned int d = 0; d < dim; d++)
+      {
+        p1[d] = 0.0;
+        p2[d] = L;
+      }
+    GridGenerator::subdivided_hyper_rectangle   (triangulation,
+                                                 repetitions,
+                                                 p1,
+                                                 p2,
+                                                 /*colorize*/ false);
+
+    typename dealii::hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+    for (; cell != endc; cell++)
+      if (cell->center()[0] > 1.0)
+        {
+          cell->set_active_fe_index(1);
+          break;
+        }
+
+  }
+
+  dof_handler.distribute_dofs (fe_collection);
+
+  // constraints
+  constraints.clear();
+  dealii::DoFTools::make_hanging_node_constraints  (dof_handler, constraints);
+  constraints.close ();
+
+  // interpolate some function
+  dealii::Vector<std::complex<double> > values(dof_handler.n_dofs());
+  dealii::VectorTools::interpolate (dof_handler,
+                                    func,
+                                    values);
+
+  dealii::deallog << "dof values:"<<std::endl;
+  for (unsigned int i = 0; i < values.size(); i++)
+    dealii::deallog << " " << values[i];
+  dealii::deallog << std::endl;
+
+  // call Kelly
+  dealii::Vector<float> error(dof_handler.n_dofs());
+  dealii::KellyErrorEstimator<dim>::estimate(dof_handler,
+                                             face_quadrature_formula,
+                                             typename dealii::FunctionMap<dim,std::complex<double> >::type(),
+                                             values,
+                                             error,
+                                             dealii::ComponentMask(),
+                                             nullptr,
+                                             dealii::numbers::invalid_unsigned_int,
+                                             dealii::numbers::invalid_subdomain_id,
+                                             dealii::numbers::invalid_material_id,
+                                             dealii::KellyErrorEstimator<dim>::face_diameter_over_twice_max_degree);
+
+  dealii::deallog <<"error:"<<std::endl;
+  for (unsigned int i = 0; i < error.size(); i++)
+    dealii::deallog << " " << error[i];
+  dealii::deallog << std::endl;
+
+  //output("regular.vtu",
+  //       triangulation,
+  //       dof_handler,
+  //       values,
+  //       error);
+
+  double h,A;
+  get_h_area<dim>(h,A,L);
+  const double expected_value_squared = h*A*std::pow(func.get_k(),2)/2.0/std::max(p1,p2);
+  dealii::deallog << "expected:"<< std::endl <<" "<< std::sqrt(expected_value_squared) << std::endl;
+  for (unsigned int i = 0; i < error.size(); i++)
+    AssertThrow (std::fabs(std::sqrt(expected_value_squared) - error[i] ) < 1e-6, dealii::ExcInternalError());
+
+  dof_handler.clear();
+}
+
+// case 3)
+template <int dim>
+void test_irregular(const MyFunction<dim> &func)
+{
+  deallog << std::endl;
+  deallog << "Irregular face:"<<std::endl;
+  deallog << "---------------"<<std::endl;
+  Triangulation<dim> triangulation;
+  hp::DoFHandler<dim> dof_handler(triangulation);
+  hp::FECollection<dim> fe_collection;
+  hp::QCollection<dim> quadrature_formula;
+  hp::QCollection<dim-1> face_quadrature_formula;
+  ConstraintMatrix constraints;
+
+  const unsigned int p1 = 1;
+  const unsigned int p2 = 2;
+  const unsigned int p3 = 3;
+  std::vector<unsigned int> p_degree;
+  p_degree.push_back(p1);
+  p_degree.push_back(p2);
+  p_degree.push_back(p3);
+
+  for (unsigned int i=0; i<p_degree.size(); i++)
+    {
+      const unsigned int &p = p_degree[i];
+      fe_collection.push_back(dealii::FE_Q<dim>(QIterated<1>(QTrapez<1>(),p)));
+      quadrature_formula.push_back(dealii::QGauss<dim>(p+5));
+      face_quadrature_formula.push_back(dealii::QGauss<dim-1>(p+5));
+    }
+
+  const double L = 2.0;
+
+  // set-up domain
+  {
+    std::vector<unsigned int> repetitions(dim,1);
+    repetitions[0] = 2;
+    dealii::Point<dim> p1;
+    dealii::Point<dim> p2;
+    for (unsigned int d = 0; d < dim; d++)
+      {
+        p1[d] = 0.0;
+        p2[d] = L;
+      }
+    GridGenerator::subdivided_hyper_rectangle   (triangulation,
+                                                 repetitions,
+                                                 p1,
+                                                 p2,
+                                                 /*colorize*/ false);
+    // refine left side
+    {
+      typename dealii::hp::DoFHandler<dim>::active_cell_iterator
+      cell = dof_handler.begin_active();
+      cell->set_refine_flag();
+      triangulation.execute_coarsening_and_refinement();
+    }
+
+    typename dealii::hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+    for (; cell != endc; cell++)
+      if (cell->center()[0] > 1.0) // right
+        {
+          cell->set_active_fe_index(0);
+        }
+      else if (cell->center()[1] > 1.0) // top
+        {
+          cell->set_active_fe_index(2);
+        }
+      else
+        {
+          cell->set_active_fe_index(1);
+        }
+  }
+
+  dof_handler.distribute_dofs (fe_collection);
+
+  // constraints
+  constraints.clear();
+  dealii::DoFTools::make_hanging_node_constraints  (dof_handler, constraints);
+  constraints.close ();
+
+  // interpolate some function
+  dealii::Vector<std::complex<double> > values(dof_handler.n_dofs());
+  dealii::VectorTools::interpolate (dof_handler,
+                                    func,
+                                    values);
+
+  dealii::deallog << "dof values:"<<std::endl;
+  for (unsigned int i = 0; i < values.size(); i++)
+    dealii::deallog << " " << values[i];
+  dealii::deallog << std::endl;
+
+  // call Kelly
+  dealii::Vector<float> error(dof_handler.n_dofs());
+  dealii::KellyErrorEstimator<dim>::estimate(dof_handler,
+                                             face_quadrature_formula,
+                                             typename dealii::FunctionMap<dim,std::complex<double> >::type(),
+                                             values,
+                                             error,
+                                             dealii::ComponentMask(),
+                                             nullptr,
+                                             dealii::numbers::invalid_unsigned_int,
+                                             dealii::numbers::invalid_subdomain_id,
+                                             dealii::numbers::invalid_material_id,
+                                             dealii::KellyErrorEstimator<dim>::face_diameter_over_twice_max_degree);
+
+  dealii::deallog <<"error:"<<std::endl;
+  for (unsigned int i = 0; i < error.size(); i++)
+    dealii::deallog << " " << error[i];
+  dealii::deallog << std::endl;
+
+  //output("irregular.vtu",
+  //       triangulation,
+  //       dof_handler,
+  //       values,
+  //       error);
+
+  double h,A;
+  get_h_area_sub<dim>(h,A,L);
+  //
+  const double expected_squared_1 = h*A*std::pow(func.get_k(),2)/2.0/std::max(p3,p1);
+  const double expected_squared_2 = h*A*std::pow(func.get_k(),2)/2.0/std::max(p2,p1);
+  const double expected_squared_3 = (dim==2) ?
+                                    expected_squared_1 +   expected_squared_2:
+                                    2*expected_squared_1 + 2*expected_squared_2;
+
+  std::vector<double> expected_error(error.size(),0.0);
+
+  expected_error[0] = std::sqrt(expected_squared_3);
+  expected_error[2] = std::sqrt(expected_squared_2);
+  expected_error[4] = std::sqrt(expected_squared_1);
+
+  if (dim ==3)
+    {
+      expected_error[6] = expected_error[2];
+      expected_error[8] = expected_error[4];
+    }
+
+  dealii::deallog << "expected:"<< std::endl;
+  for (unsigned int i = 0; i < expected_error.size(); i++)
+    deallog<<" " << expected_error[i];
+  deallog <<std::endl;
+
+  for (unsigned int i = 0; i < expected_error.size(); i++)
+    AssertThrow (std::fabs(expected_error[i] - error[i] ) < 1e-6, dealii::ExcInternalError());
+
+  dof_handler.clear();
+}
+
+template <int dim>
+class MySecondFunction : public dealii::Function<dim,std::complex<double> >
+{
+public:
+  MySecondFunction();
+
+  virtual std::complex<double> value(const dealii::Point<dim> &point,
+                                     const unsigned int component = 0 ) const;
+};
+
+template <int dim>
+MySecondFunction<dim>::MySecondFunction()
+  :
+  dealii::Function<dim,std::complex<double> >(1)
+{
+
+}
+
+template <int dim>
+std::complex<double> MySecondFunction<dim>::value(const dealii::Point<dim> &point,
+                                                  const unsigned int ) const
+{
+  double f = 0.0;
+  const double &x = point[0];
+  Assert (dim>1, dealii::ExcNotImplemented());
+  const double &y = point[1];
+
+  return std::complex<double>(0, (1.-x)*(1.-y)*(1.-y)+std::pow(1.0-y,4)*std::exp(-x));
+}
+
+template <int dim>
+void test(const MySecondFunction<dim> &func)
+{
+  deallog << std::endl;
+  deallog << "More complicated mesh:"<<std::endl;
+  deallog << "----------------------"<<std::endl;
+
+  dealii::Triangulation<dim> triangulation;
+  dealii::hp::DoFHandler<dim> dof_handler(triangulation);
+  dealii::hp::FECollection<dim> fe_collection;
+  dealii::hp::QCollection<dim> quadrature_formula;
+  dealii::hp::QCollection<dim-1> face_quadrature_formula;
+  dealii::ConstraintMatrix constraints;
+  for (unsigned int p = 1; p <=3; p++)
+    {
+      fe_collection.push_back(dealii::FE_Q<dim>(QIterated<1>(QTrapez<1>(),p)));
+      quadrature_formula.push_back(dealii::QGauss<dim>(p+1));
+      face_quadrature_formula.push_back(dealii::QGauss<dim-1>(p+1));
+    }
+  dealii::GridGenerator::hyper_cube (triangulation,0.0,1.0); // reference cell
+
+  // refine
+  {
+    triangulation.refine_global(1);
+
+    // otherwise the next set_active_fe_index
+    // will not carry to the child cells.
+    dof_handler.distribute_dofs (fe_collection);
+
+    typename dealii::hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+    for (; cell != endc; cell++)
+      {
+        bool in_top_left = true;
+        for (unsigned int d=0; d< dim; d++)
+          in_top_left = in_top_left && (cell->center()[d] < 0.5);
+
+        if (in_top_left)
+          {
+            cell->set_active_fe_index(1);
+            cell->set_refine_flag();
+            break;
+          }
+      }
+
+    triangulation.prepare_coarsening_and_refinement();
+
+    triangulation.execute_coarsening_and_refinement();
+
+    cell = dof_handler.begin_active();
+
+    for (; cell != endc; cell++)
+      {
+        if (cell->center()[0] < 0.25)
+          {
+            cell->set_active_fe_index(2);
+          }
+      }
+  }
+
+  dof_handler.distribute_dofs (fe_collection);
+
+  // constraints
+  constraints.clear();
+  dealii::DoFTools::make_hanging_node_constraints  (dof_handler, constraints);
+  constraints.close ();
+
+  // interpolate some function
+  dealii::Vector<std::complex<double> > values(dof_handler.n_dofs());
+
+  dealii::VectorTools::interpolate (dof_handler,
+                                    func,
+                                    values);
+
+  dealii::deallog << "dof values:"<<std::endl;
+  for (unsigned int i = 0; i < values.size(); i++)
+    dealii::deallog << " " << values[i];
+  dealii::deallog << std::endl;
+
+  // call Kelly
+  dealii::Vector<float> error(dof_handler.n_dofs());
+  dealii::KellyErrorEstimator<dim>::estimate(dof_handler,
+                                             face_quadrature_formula,
+                                             typename dealii::FunctionMap<dim,std::complex<double> >::type (),
+                                             values,
+                                             error,
+                                             dealii::ComponentMask(),
+                                             nullptr,
+                                             dealii::numbers::invalid_unsigned_int,
+                                             dealii::numbers::invalid_subdomain_id,
+                                             dealii::numbers::invalid_material_id,
+                                             dealii::KellyErrorEstimator<dim>::face_diameter_over_twice_max_degree);
+
+  dealii::deallog <<"error:"<<std::endl;
+  for (unsigned int i = 0; i < error.size(); i++)
+    dealii::deallog << " " << error[i];
+  dealii::deallog << std::endl;
+
+  dof_handler.clear();
+}
+
+
+int main ()
+{
+  std::ofstream logfile("output");
+  dealii::deallog.attach(logfile);
+
+  {
+    NeumanBC<2> func(1.25);
+    test_neumann(func);
+  }
+
+  {
+    MyFunction<2> func(0.25);
+    test_regular(func);
+  }
+
+  {
+    MyFunction<2> func(0.75);
+    test_irregular(func);
+  }
+
+  deallog << "===3d==="<<std::endl;
+  {
+    NeumanBC<3> func(1.25);
+    test_neumann(func);
+  }
+
+  {
+    MyFunction<3> func(0.25);
+    test_regular(func);
+  }
+
+  {
+    MyFunction<3> func(0.75);
+    test_irregular(func);
+  }
+
+  {
+    MySecondFunction<2> function;
+    test(function);
+  }
+
+
+
+  dealii::deallog << "Ok"<<std::endl;
+
+}
diff --git a/tests/numerics/error_estimator_02_complex.output b/tests/numerics/error_estimator_02_complex.output
new file mode 100644 (file)
index 0000000..4616f1c
--- /dev/null
@@ -0,0 +1,62 @@
+
+DEAL::NeumanBC case:
+DEAL::--------------
+DEAL::dof values:
+DEAL:: (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000)
+DEAL::error:
+DEAL:: 1.44338
+DEAL::expected:
+DEAL:: 1.44338
+DEAL::
+DEAL::Regular face:
+DEAL::-------------
+DEAL::dof values:
+DEAL:: (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.250000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.125000) (0.00000,0.125000) (0.00000,0.125000)
+DEAL::error:
+DEAL:: 0.250000 0.250000
+DEAL::expected:
+DEAL:: 0.250000
+DEAL::
+DEAL::Irregular face:
+DEAL::---------------
+DEAL::dof values:
+DEAL:: (0.00000,0.00000) (0.00000,0.750000) (0.00000,0.00000) (0.00000,0.750000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000)
+DEAL::error:
+DEAL:: 0.484123 0.00000 0.375000 0.00000 0.306186
+DEAL::expected:
+DEAL:: 0.484123 0.00000 0.375000 0.00000 0.306186
+DEAL::===3d===
+DEAL::NeumanBC case:
+DEAL::--------------
+DEAL::dof values:
+DEAL:: (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000)
+DEAL::error:
+DEAL:: 2.42746
+DEAL::expected:
+DEAL:: 2.42746
+DEAL::
+DEAL::Regular face:
+DEAL::-------------
+DEAL::dof values:
+DEAL:: (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.250000) (0.00000,0.250000) (0.00000,0.250000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.125000) (0.00000,0.125000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.125000) (0.00000,0.125000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.00000) (0.00000,0.250000) (0.00000,0.125000) (0.00000,0.125000) (0.00000,0.125000) (0.00000,0.125000) (0.00000,0.125000)
+DEAL::error:
+DEAL:: 0.420448 0.420448
+DEAL::expected:
+DEAL:: 0.420448
+DEAL::
+DEAL::Irregular face:
+DEAL::---------------
+DEAL::dof values:
+DEAL:: (0.00000,0.00000) (0.00000,0.750000) (0.00000,0.00000) (0.00000,0.750000) (0.00000,0.00000) (0.00000,0.750000) (0.00000,0.00000) (0.00000,0.750000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000)
+DEAL::error:
+DEAL:: 0.814194 0.00000 0.445953 0.00000 0.364119 0.00000 0.445953 0.00000 0.364119
+DEAL::expected:
+DEAL:: 0.814194 0.00000 0.445953 0.00000 0.364119 0.00000 0.445953 0.00000 0.364119
+DEAL::
+DEAL::More complicated mesh:
+DEAL::----------------------
+DEAL::dof values:
+DEAL:: (0.00000,1.10653) (0.00000,0.367879) (0.00000,0.162908) (0.00000,0.0229925) (0.00000,0.312500) (0.00000,0.00000) (0.00000,0.00000) (0.00000,0.00000) (0.00000,2.00000) (0.00000,0.878906) (0.00000,1.54634) (0.00000,1.17670) (0.00000,1.18009) (0.00000,0.896412) (0.00000,1.83671) (0.00000,1.67982) (0.00000,0.806733) (0.00000,0.736582) (0.00000,1.41987) (0.00000,1.29790) (0.00000,1.08027) (0.00000,0.986922) (0.00000,1.52880) (0.00000,0.668292) (0.00000,0.473160) (0.00000,1.03074) (0.00000,0.738350) (0.00000,1.31229) (0.00000,0.569025) (0.00000,0.881392) (0.00000,0.641975) (0.00000,0.456067) (0.00000,0.487171) (0.00000,0.345385) (0.00000,0.286669) (0.00000,0.261238) (0.00000,0.589145) (0.00000,0.537577) (0.00000,0.418452) (0.00000,0.381578) (0.00000,0.236175) (0.00000,0.411804) (0.00000,0.287862) (0.00000,0.199206) (0.00000,0.349013)
+DEAL::error:
+DEAL:: 0.401222 0.102290 0.400943 0.000678580 0.0104936 0.0788644 0.0660732
+DEAL::Ok

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.