--- /dev/null
+// ---------------------------------------------------------------------
+//
+// 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;
+
+}
--- /dev/null
+
+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