mesh_3d_13.exe : mesh_3d_13.g.$(OBJEXT) $(libraries)
mesh_3d_14.exe : mesh_3d_14.g.$(OBJEXT) $(libraries)
mesh_3d_15.exe : mesh_3d_15.g.$(OBJEXT) $(libraries)
+mesh_3d_16.exe : mesh_3d_16.g.$(OBJEXT) $(libraries)
+normals_1.exe : normals_1.g.$(OBJEXT) $(libraries)
+normals_2.exe : normals_2.g.$(OBJEXT) $(libraries)
+normals_3.exe : normals_3.g.$(OBJEXT) $(libraries)
+normals_4.exe : normals_4.g.$(OBJEXT) $(libraries)
+mapping_cartesian_1.exe : mapping_cartesian_1.g.$(OBJEXT) $(libraries)
q_points.exe : q_points.g.$(OBJEXT) $(libraries)
+q_point_sum_1.exe : q_point_sum_1.g.$(OBJEXT) $(libraries)
+q_point_sum_2.exe : q_point_sum_2.g.$(OBJEXT) $(libraries)
+q_point_sum_3.exe : q_point_sum_3.g.$(OBJEXT) $(libraries)
+q_point_sum_4.exe : q_point_sum_4.g.$(OBJEXT) $(libraries)
+volume_1.exe : volume_1.g.$(OBJEXT) $(libraries)
+volume_2.exe : volume_2.g.$(OBJEXT) $(libraries)
+volume_3.exe : volume_3.g.$(OBJEXT) $(libraries)
+volume_4.exe : volume_4.g.$(OBJEXT) $(libraries)
tests = anna_1 anna_2 anna_3 anna_4 anna_5 anna_6 \
mesh_3d_1 mesh_3d_2 mesh_3d_3 mesh_3d_4 mesh_3d_5 \
mesh_3d_6 mesh_3d_7 mesh_3d_8 mesh_3d_9 mesh_3d_10 \
mesh_3d_11 mesh_3d_12 mesh_3d_13 mesh_3d_14 mesh_3d_15 \
+ mesh_3d_16 \
+ normals_1 normals_2 normals_3 normals_4 \
+ q_point_sum_1 q_point_sum_2 q_point_sum_3 q_point_sum_4 \
+ volume_1 volume_2 volume_3 volume_4 \
+ mapping_cartesian_1 \
q_points
############################################################
--- /dev/null
+//---------------------------- mapping_cartesian_1.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- mapping_cartesian_1.cc ---------------------------
+
+
+// there used to be a bug in MappingCartesian, where we used the size
+// of the quadrature points array to initialize something else. this
+// yielded a wrong result and after factoring out some code an abort
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_cartesian.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingCartesian<dim> mapping;
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors);
+ fe_face_values.reinit (dof_handler.begin_active(), 0);
+
+ deallog << "OK" << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("mapping_cartesian_1.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+}
+
+
+
--- /dev/null
+//---------------------------- normals_1.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- normals_1.cc ---------------------------
+
+
+// integrating the normals over the surface of any cell (distorted or
+// not) should yield a zero vector. (To prove this, use the divergence
+// theorem.) check that this is indeed so for the hypercube and
+// hyperball in 2d and 3d
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (fe, q_face,
+ update_normal_vectors | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (fe, q_face,
+ update_normal_vectors | update_JxW_values);
+
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ Tensor<1,dim> n1, n2;
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.normal_vector(q) *
+ fe_face_values.JxW(q);
+ }
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << cell << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.normal_vector(q) *
+ fe_subface_values.JxW(q);
+ }
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << cell << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile("normals_1.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ check (coarse_grid);
+ }
+
+}
+
+
+
--- /dev/null
+//---------------------------- normals_2.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- normals_2.cc ---------------------------
+
+
+// integrating the normals over the surface of any cell (distorted or
+// not) should yield a zero vector. (To prove this, use the divergence
+// theorem.) check that this is indeed so for the hyperball in 2d and 3d
+//
+// in contrast to normals_1, do this with a Q1, Q2, and Q4 mapping
+// associated with the geometry
+//
+// this used to fail in 3d, since there were assumptions on face
+// orientations present that had to be weeded out
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_q.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria,
+ const unsigned int order)
+{
+ MappingQ<dim> mapping(order);
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_normal_vectors | update_JxW_values);
+
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ Tensor<1,dim> n1, n2;
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.normal_vector(q) *
+ fe_face_values.JxW(q);
+ }
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << cell << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.normal_vector(q) *
+ fe_subface_values.JxW(q);
+ }
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << cell << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile("normals_2.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<2> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<3> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+}
+
+
+
--- /dev/null
+//---------------------------- normals_3.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- normals_3.cc ---------------------------
+
+
+// integrating the normals over the surface of any cell (distorted or
+// not) should yield a zero vector. (To prove this, use the divergence
+// theorem.) check that this is indeed so for the hyperball in 2d and 3d
+//
+// in contrast to normals_1, do this with a C1 mapping
+// associated with the geometry
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_c1.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingC1<dim> mapping;
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_normal_vectors | update_JxW_values);
+
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ Tensor<1,dim> n1, n2;
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.normal_vector(q) *
+ fe_face_values.JxW(q);
+ }
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << cell << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.normal_vector(q) *
+ fe_subface_values.JxW(q);
+ }
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << cell << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile("normals_3.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<2> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid);
+ }
+
+ // the C1 mapping is not fully
+ // implemented in 3d, unfortunately
+// {
+// Triangulation<3> coarse_grid;
+// GridGenerator::hyper_ball (coarse_grid);
+// static const HyperBallBoundary<3> boundary;
+// coarse_grid.set_boundary (0, boundary);
+// check (coarse_grid);
+// }
+}
+
+
+
--- /dev/null
+//---------------------------- normals_4.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- normals_4.cc ---------------------------
+
+
+// integrating the normals over the surface of any cell (distorted or
+// not) should yield a zero vector. (To prove this, use the divergence
+// theorem.) check that this is indeed so for the hypercube in 2d and 3d
+//
+// in contrast to normals_1, do this with a cartesian mapping
+// associated with the geometry
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_cartesian.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingCartesian<dim> mapping;
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_normal_vectors | update_JxW_values);
+
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ Tensor<1,dim> n1, n2;
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.normal_vector(q) *
+ fe_face_values.JxW(q);
+ }
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << cell << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.normal_vector(q) *
+ fe_subface_values.JxW(q);
+ }
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << cell << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+ }
+}
+
+
+int main ()
+{
+ std::ofstream logfile("normals_4.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+}
+
+
+
--- /dev/null
+//---------------------------- q_point_sum_1.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- q_point_sum_1.cc ---------------------------
+
+
+// integrating \vec x over the surface of the [-1,1] hypercube and
+// hyperball in 2d and 3d should yield zero
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (fe, q_face,
+ update_q_points | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (fe, q_face,
+ update_q_points | update_JxW_values);
+
+ Point<dim> n1, n2;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.quadrature_point(q) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.quadrature_point(q) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("q_point_sum_1.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid);
+ }
+
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ check (coarse_grid);
+ }
+
+}
+
+
+
--- /dev/null
+//---------------------------- q_point_sum_2.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- q_point_sum_2.cc ---------------------------
+
+
+// integrating \vec x over the surface of the [-1,1] hypercube and
+// hyperball in 2d and 3d should yield zero
+//
+// same as q_point_sum_1, but with different mappings
+
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/mapping_q.h>
+#include <fe/fe_values.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria,
+ const unsigned int order)
+{
+ MappingQ<dim> mapping(order);
+
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_q_points | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_q_points | update_JxW_values);
+
+ Point<dim> n1, n2;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.quadrature_point(q) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.quadrature_point(q) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("q_point_sum_2.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<2> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<3> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+}
+
+
+
--- /dev/null
+//---------------------------- q_point_sum_3.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- q_point_sum_3.cc ---------------------------
+
+
+// integrating \vec x over the surface of the [-1,1] hypercube and
+// hyperball in 2d and 3d should yield zero
+//
+// same as q_point_sum_1, but with a C1 mapping
+
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/mapping_c1.h>
+#include <fe/fe_values.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingC1<dim> mapping;
+
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_q_points | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_q_points | update_JxW_values);
+
+ Point<dim> n1, n2;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.quadrature_point(q) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.quadrature_point(q) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("q_point_sum_3.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid);
+ }
+
+ // the C1 mapping is not fully
+ // implemented in 3d, unfortunately
+// {
+// Triangulation<3> coarse_grid;
+// GridGenerator::hyper_cube (coarse_grid, -1, 1);
+// check (coarse_grid);
+// }
+
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<2> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid);
+ }
+
+ // the C1 mapping is not fully
+ // implemented in 3d, unfortunately
+// {
+// Triangulation<3> coarse_grid;
+// GridGenerator::hyper_ball (coarse_grid);
+// static const HyperBallBoundary<3> boundary;
+// coarse_grid.set_boundary (0, boundary);
+// check (coarse_grid);
+// }
+
+}
+
+
+
--- /dev/null
+//---------------------------- q_point_sum_4.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- q_point_sum_4.cc ---------------------------
+
+
+// integrating \vec x over the surface of the [-1,1] hypercube and
+// hyperball in 2d and 3d should yield zero
+//
+// same as q_point_sum_1, but with a Cartesian mapping
+
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/mapping_cartesian.h>
+#include <fe/fe_values.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingCartesian<dim> mapping;
+
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_q_points | update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_q_points | update_JxW_values);
+
+ Point<dim> n1, n2;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n1 += fe_face_values.quadrature_point(q) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ n2 += fe_subface_values.quadrature_point(q) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (n1*n1 < 1e-24, ExcInternalError());
+ deallog << " face integration is ok: "
+ << std::sqrt (n1*n1)
+ << std::endl;
+ Assert (n2*n2 < 1e-24, ExcInternalError());
+ deallog << " subface integration is ok: "
+ << std::sqrt (n2*n2)
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("q_point_sum_4.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid, -1, 1);
+ check (coarse_grid);
+ }
+}
+
+
+
--- /dev/null
+//---------------------------- volume_1.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- volume_1.cc ---------------------------
+
+
+// like a union of the normals_* and q_point_sum_* tests: integrating
+// \vec x times the normal over the surface of any body should yield
+// the volume of this body times the space dimension
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+
+ double v1=0, v2=0;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v1 += (fe_face_values.normal_vector(q) *
+ fe_face_values.quadrature_point(q)) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v2 += (fe_subface_values.normal_vector(q) *
+ fe_subface_values.quadrature_point(q)) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (std::fabs(v1-v2) < 1e-12, ExcInternalError());
+ deallog << " face integration: "
+ << v1 / dim
+ << std::endl;
+ deallog << " subface integration: "
+ << v2 / dim
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("volume_1.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ check (coarse_grid);
+ }
+
+}
+
+
+
--- /dev/null
+//---------------------------- volume_2.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- volume_2.cc ---------------------------
+
+
+// like a union of the normals_* and q_point_sum_* tests: integrating
+// \vec x times the normal over the surface of any body should yield
+// the volume of this body times the space dimension
+//
+// in contrast to volume_1, do this with a Q1, Q2, and Q4 mapping
+// associated with the geometry
+//
+// this used to fail in 3d, since there were assumptions on face
+// orientations present that had to be weeded out
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_q.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria,
+ const unsigned int order)
+{
+ MappingQ<dim> mapping(order);
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+
+ double v1=0, v2=0;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v1 += (fe_face_values.normal_vector(q) *
+ fe_face_values.quadrature_point(q)) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v2 += (fe_subface_values.normal_vector(q) *
+ fe_subface_values.quadrature_point(q)) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (std::fabs(v1-v2)/v1 < 1e-4, ExcInternalError());
+ deallog << " face integration: "
+ << v1 / dim
+ << std::endl;
+ deallog << " subface integration: "
+ << v2 / dim
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("volume_2.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<2> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<3> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid, 1);
+ check (coarse_grid, 2);
+ check (coarse_grid, 4);
+ }
+
+}
+
+
+
--- /dev/null
+//---------------------------- volume_3.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- volume_3.cc ---------------------------
+
+
+// like a union of the normals_* and q_point_sum_* tests: integrating
+// \vec x times the normal over the surface of any body should yield
+// the volume of this body times the space dimension
+//
+// in contrast to volume_1, do this with a C1 mapping
+// associated with the geometry
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_c1.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingC1<dim> mapping;
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+
+ double v1=0, v2=0;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v1 += (fe_face_values.normal_vector(q) *
+ fe_face_values.quadrature_point(q)) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v2 += (fe_subface_values.normal_vector(q) *
+ fe_subface_values.quadrature_point(q)) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (std::fabs(v1-v2)/v1 < 1e-4, ExcInternalError());
+ deallog << " face integration: "
+ << v1 / dim
+ << std::endl;
+ deallog << " subface integration: "
+ << v2 / dim
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("volume_3.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_ball (coarse_grid);
+ static const HyperBallBoundary<2> boundary;
+ coarse_grid.set_boundary (0, boundary);
+ check (coarse_grid);
+ }
+
+ // the C1 mapping is not fully
+ // implemented in 3d, unfortunately
+// {
+// Triangulation<3> coarse_grid;
+// GridGenerator::hyper_ball (coarse_grid);
+// static const HyperBallBoundary<3> boundary;
+// coarse_grid.set_boundary (0, boundary);
+// check (coarse_grid);
+// }
+}
+
+
+
--- /dev/null
+//---------------------------- volume_4.cc ---------------------------
+// $Id$
+// Version: $Name$
+//
+// Copyright (C) 2003 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.
+//
+//---------------------------- volume_4.cc ---------------------------
+
+
+// like a union of the normals_* and q_point_sum_* tests: integrating
+// \vec x times the normal over the surface of any body should yield
+// the volume of this body times the space dimension
+//
+// in contrast to volume_1, do this with a cartesian mapping
+// associated with the geometry
+
+#include <base/logstream.h>
+#include <base/quadrature_lib.h>
+#include <grid/tria.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_handler.h>
+#include <fe/fe_q.h>
+#include <fe/fe_values.h>
+#include <fe/mapping_cartesian.h>
+
+#include <fstream>
+
+
+
+template <int dim>
+void check (const Triangulation<dim> &tria)
+{
+ MappingCartesian<dim> mapping;
+ FE_Q<dim> fe(1);
+ DoFHandler<dim> dof_handler (tria);
+ dof_handler.distribute_dofs (fe);
+
+ QGauss3<dim-1> q_face;
+
+ FEFaceValues<dim> fe_face_values (mapping, fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+ FESubfaceValues<dim> fe_subface_values (mapping, fe, q_face,
+ update_normal_vectors |
+ update_q_points |
+ update_JxW_values);
+
+ double v1=0, v2=0;
+ for (typename DoFHandler<dim>::active_cell_iterator
+ cell = dof_handler.begin_active();
+ cell!=dof_handler.end(); ++cell)
+ {
+
+ // first integrate over faces
+ // and make sure that the
+ // result of the integration is
+ // close to zero
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ {
+ fe_face_values.reinit (cell, f);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v1 += (fe_face_values.normal_vector(q) *
+ fe_face_values.quadrature_point(q)) *
+ fe_face_values.JxW(q);
+ }
+
+ // now same for subface
+ // integration
+ for (unsigned int f=0; f<GeometryInfo<dim>::faces_per_cell; ++f)
+ if (cell->at_boundary(f))
+ for (unsigned int sf=0; sf<GeometryInfo<dim>::subfaces_per_face; ++sf)
+ {
+ fe_subface_values.reinit (cell, f, sf);
+ for (unsigned int q=0; q<q_face.n_quadrature_points; ++q)
+ v2 += (fe_subface_values.normal_vector(q) *
+ fe_subface_values.quadrature_point(q)) *
+ fe_subface_values.JxW(q);
+ }
+ }
+
+ Assert (std::fabs(v1-v2)/v1 < 1e-14, ExcInternalError());
+ deallog << " face integration: "
+ << v1 / dim
+ << std::endl;
+ deallog << " subface integration: "
+ << v2 / dim
+ << std::endl;
+}
+
+
+int main ()
+{
+ std::ofstream logfile("volume_4.output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+
+ {
+ Triangulation<2> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+
+ {
+ Triangulation<3> coarse_grid;
+ GridGenerator::hyper_cube (coarse_grid);
+ check (coarse_grid);
+ }
+}
+
+
+
--- /dev/null
+
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.1 face integration is ok: 0.00000
+DEAL::0.1 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.1 face integration is ok: 0.00000
+DEAL::0.1 subface integration is ok: 0.00000
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.18061e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64981e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65022e-15
+DEAL::0.4 face integration is ok: 4.24584e-16
+DEAL::0.4 subface integration is ok: 2.32999e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64981e-15
+DEAL::0.6 face integration is ok: 4.21730e-16
+DEAL::0.6 subface integration is ok: 2.35268e-16
--- /dev/null
+
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 1.53285e-16
+DEAL::0.0 subface integration is ok: 1.90536e-16
+DEAL::0.1 face integration is ok: 2.77902e-16
+DEAL::0.1 subface integration is ok: 3.62487e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 1.53285e-16
+DEAL::0.3 subface integration is ok: 1.90536e-16
+DEAL::0.4 face integration is ok: 2.77902e-16
+DEAL::0.4 subface integration is ok: 3.62487e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.18061e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64981e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65022e-15
+DEAL::0.4 face integration is ok: 4.24584e-16
+DEAL::0.4 subface integration is ok: 2.32999e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64981e-15
+DEAL::0.6 face integration is ok: 4.21730e-16
+DEAL::0.6 subface integration is ok: 2.35268e-16
--- /dev/null
+JobId Sat Oct 18 22:36:39 2003
+DEAL::0.0 face integration is ok: 1.53285e-16
+DEAL::0.0 subface integration is ok: 1.90536e-16
+DEAL::0.1 face integration is ok: 2.77902e-16
+DEAL::0.1 subface integration is ok: 3.62487e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 1.53285e-16
+DEAL::0.3 subface integration is ok: 1.90536e-16
+DEAL::0.4 face integration is ok: 2.77902e-16
+DEAL::0.4 subface integration is ok: 3.62487e-16
+DEAL::0.0 face integration is ok: 3.33067e-16
+DEAL::0.0 subface integration is ok: 2.08629e-16
+DEAL::0.1 face integration is ok: 1.11022e-16
+DEAL::0.1 subface integration is ok: 3.70306e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 3.33067e-16
+DEAL::0.3 subface integration is ok: 2.08629e-16
+DEAL::0.4 face integration is ok: 1.11022e-16
+DEAL::0.4 subface integration is ok: 3.77517e-16
+DEAL::0.0 face integration is ok: 2.28651e-15
+DEAL::0.0 subface integration is ok: 2.29385e-15
+DEAL::0.1 face integration is ok: 2.39664e-15
+DEAL::0.1 subface integration is ok: 2.40498e-15
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 2.28651e-15
+DEAL::0.3 subface integration is ok: 2.09516e-15
+DEAL::0.4 face integration is ok: 2.24203e-15
+DEAL::0.4 subface integration is ok: 2.23859e-15
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.17844e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64983e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65023e-15
+DEAL::0.4 face integration is ok: 4.18073e-16
+DEAL::0.4 subface integration is ok: 2.45242e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64980e-15
+DEAL::0.6 face integration is ok: 4.17117e-16
+DEAL::0.6 subface integration is ok: 2.45521e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 8.10440e-17
+DEAL::0.1 subface integration is ok: 2.62062e-16
+DEAL::0.2 face integration is ok: 9.63467e-16
+DEAL::0.2 subface integration is ok: 2.08624e-15
--- /dev/null
+JobId Sat Oct 18 22:43:43 2003
+DEAL::0.0 face integration is ok: 7.07631e-16
+DEAL::0.0 subface integration is ok: 3.19491e-16
+DEAL::0.1 face integration is ok: 7.21645e-16
+DEAL::0.1 subface integration is ok: 2.98937e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 7.07631e-16
+DEAL::0.3 subface integration is ok: 3.19491e-16
+DEAL::0.4 face integration is ok: 7.21645e-16
+DEAL::0.4 subface integration is ok: 2.98937e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
--- /dev/null
+
+DEAL:: face integration is ok: 0.00000
+DEAL:: subface integration is ok: 2.77556e-17
+DEAL:: face integration is ok: 8.88178e-16
+DEAL:: subface integration is ok: 1.13208e-15
+DEAL:: face integration is ok: 2.83052e-16
+DEAL:: subface integration is ok: 1.82534e-16
+DEAL:: face integration is ok: 8.63885e-17
+DEAL:: subface integration is ok: 2.05409e-16
--- /dev/null
+
+DEAL:: face integration is ok: 3.51083e-16
+DEAL:: subface integration is ok: 5.11788e-16
+DEAL:: face integration is ok: 5.11788e-16
+DEAL:: subface integration is ok: 2.77556e-17
--- /dev/null
+
+DEAL:: face integration is ok: 0.00000
+DEAL:: subface integration is ok: 2.77556e-17
+DEAL:: face integration is ok: 8.88178e-16
+DEAL:: subface integration is ok: 1.13208e-15
--- /dev/null
+
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 2.00000
+DEAL:: subface integration: 2.00000
+DEAL:: face integration: 1.53960
+DEAL:: subface integration: 1.53960
--- /dev/null
+
+DEAL:: face integration: 3.33333
+DEAL:: subface integration: 3.33333
--- /dev/null
+
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
--- /dev/null
+
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.1 face integration is ok: 0.00000
+DEAL::0.1 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.1 face integration is ok: 0.00000
+DEAL::0.1 subface integration is ok: 0.00000
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.18061e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64981e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65022e-15
+DEAL::0.4 face integration is ok: 4.24584e-16
+DEAL::0.4 subface integration is ok: 2.32999e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64981e-15
+DEAL::0.6 face integration is ok: 4.21730e-16
+DEAL::0.6 subface integration is ok: 2.35268e-16
--- /dev/null
+
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 1.53285e-16
+DEAL::0.0 subface integration is ok: 1.90536e-16
+DEAL::0.1 face integration is ok: 2.77902e-16
+DEAL::0.1 subface integration is ok: 3.62487e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 1.53285e-16
+DEAL::0.3 subface integration is ok: 1.90536e-16
+DEAL::0.4 face integration is ok: 2.77902e-16
+DEAL::0.4 subface integration is ok: 3.62487e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.18061e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64981e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65022e-15
+DEAL::0.4 face integration is ok: 4.24584e-16
+DEAL::0.4 subface integration is ok: 2.32999e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64981e-15
+DEAL::0.6 face integration is ok: 4.21730e-16
+DEAL::0.6 subface integration is ok: 2.35268e-16
--- /dev/null
+JobId Sat Oct 18 22:36:39 2003
+DEAL::0.0 face integration is ok: 1.53285e-16
+DEAL::0.0 subface integration is ok: 1.90536e-16
+DEAL::0.1 face integration is ok: 2.77902e-16
+DEAL::0.1 subface integration is ok: 3.62487e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 1.53285e-16
+DEAL::0.3 subface integration is ok: 1.90536e-16
+DEAL::0.4 face integration is ok: 2.77902e-16
+DEAL::0.4 subface integration is ok: 3.62487e-16
+DEAL::0.0 face integration is ok: 3.33067e-16
+DEAL::0.0 subface integration is ok: 2.08629e-16
+DEAL::0.1 face integration is ok: 1.11022e-16
+DEAL::0.1 subface integration is ok: 3.70306e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 3.33067e-16
+DEAL::0.3 subface integration is ok: 2.08629e-16
+DEAL::0.4 face integration is ok: 1.11022e-16
+DEAL::0.4 subface integration is ok: 3.77517e-16
+DEAL::0.0 face integration is ok: 2.28651e-15
+DEAL::0.0 subface integration is ok: 2.29385e-15
+DEAL::0.1 face integration is ok: 2.39664e-15
+DEAL::0.1 subface integration is ok: 2.40498e-15
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 2.28651e-15
+DEAL::0.3 subface integration is ok: 2.09516e-15
+DEAL::0.4 face integration is ok: 2.24203e-15
+DEAL::0.4 subface integration is ok: 2.23859e-15
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.17844e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64983e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65023e-15
+DEAL::0.4 face integration is ok: 4.18073e-16
+DEAL::0.4 subface integration is ok: 2.45242e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64980e-15
+DEAL::0.6 face integration is ok: 4.17117e-16
+DEAL::0.6 subface integration is ok: 2.45521e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 8.10440e-17
+DEAL::0.1 subface integration is ok: 2.62062e-16
+DEAL::0.2 face integration is ok: 9.63467e-16
+DEAL::0.2 subface integration is ok: 2.08624e-15
--- /dev/null
+JobId Sat Oct 18 22:43:43 2003
+DEAL::0.0 face integration is ok: 7.07631e-16
+DEAL::0.0 subface integration is ok: 3.19491e-16
+DEAL::0.1 face integration is ok: 7.21645e-16
+DEAL::0.1 subface integration is ok: 2.98937e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 7.07631e-16
+DEAL::0.3 subface integration is ok: 3.19491e-16
+DEAL::0.4 face integration is ok: 7.21645e-16
+DEAL::0.4 subface integration is ok: 2.98937e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
--- /dev/null
+
+DEAL:: face integration is ok: 0.00000
+DEAL:: subface integration is ok: 2.77556e-17
+DEAL:: face integration is ok: 8.88178e-16
+DEAL:: subface integration is ok: 1.13208e-15
+DEAL:: face integration is ok: 2.83052e-16
+DEAL:: subface integration is ok: 1.82534e-16
+DEAL:: face integration is ok: 8.63885e-17
+DEAL:: subface integration is ok: 2.05409e-16
--- /dev/null
+
+DEAL:: face integration is ok: 3.51083e-16
+DEAL:: subface integration is ok: 5.11788e-16
+DEAL:: face integration is ok: 5.11788e-16
+DEAL:: subface integration is ok: 2.77556e-17
--- /dev/null
+
+DEAL:: face integration is ok: 0.00000
+DEAL:: subface integration is ok: 2.77556e-17
+DEAL:: face integration is ok: 8.88178e-16
+DEAL:: subface integration is ok: 1.13208e-15
--- /dev/null
+
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 2.00000
+DEAL:: subface integration: 2.00000
+DEAL:: face integration: 1.53960
+DEAL:: subface integration: 1.53960
--- /dev/null
+
+DEAL:: face integration: 3.33333
+DEAL:: subface integration: 3.33333
--- /dev/null
+
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
--- /dev/null
+
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.1 face integration is ok: 0.00000
+DEAL::0.1 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.1 face integration is ok: 0.00000
+DEAL::0.1 subface integration is ok: 0.00000
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.18061e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64981e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65022e-15
+DEAL::0.4 face integration is ok: 4.24584e-16
+DEAL::0.4 subface integration is ok: 2.32999e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64981e-15
+DEAL::0.6 face integration is ok: 4.21730e-16
+DEAL::0.6 subface integration is ok: 2.35268e-16
--- /dev/null
+
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 0.00000
+DEAL::0.0 subface integration is ok: 0.00000
+DEAL::0.0 face integration is ok: 1.53285e-16
+DEAL::0.0 subface integration is ok: 1.90536e-16
+DEAL::0.1 face integration is ok: 2.77902e-16
+DEAL::0.1 subface integration is ok: 3.62487e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 1.53285e-16
+DEAL::0.3 subface integration is ok: 1.90536e-16
+DEAL::0.4 face integration is ok: 2.77902e-16
+DEAL::0.4 subface integration is ok: 3.62487e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.18061e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64981e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65022e-15
+DEAL::0.4 face integration is ok: 4.24584e-16
+DEAL::0.4 subface integration is ok: 2.32999e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64981e-15
+DEAL::0.6 face integration is ok: 4.21730e-16
+DEAL::0.6 subface integration is ok: 2.35268e-16
--- /dev/null
+JobId Sat Oct 18 22:36:39 2003
+DEAL::0.0 face integration is ok: 1.53285e-16
+DEAL::0.0 subface integration is ok: 1.90536e-16
+DEAL::0.1 face integration is ok: 2.77902e-16
+DEAL::0.1 subface integration is ok: 3.62487e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 1.53285e-16
+DEAL::0.3 subface integration is ok: 1.90536e-16
+DEAL::0.4 face integration is ok: 2.77902e-16
+DEAL::0.4 subface integration is ok: 3.62487e-16
+DEAL::0.0 face integration is ok: 3.33067e-16
+DEAL::0.0 subface integration is ok: 2.08629e-16
+DEAL::0.1 face integration is ok: 1.11022e-16
+DEAL::0.1 subface integration is ok: 3.70306e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 3.33067e-16
+DEAL::0.3 subface integration is ok: 2.08629e-16
+DEAL::0.4 face integration is ok: 1.11022e-16
+DEAL::0.4 subface integration is ok: 3.77517e-16
+DEAL::0.0 face integration is ok: 2.28651e-15
+DEAL::0.0 subface integration is ok: 2.29385e-15
+DEAL::0.1 face integration is ok: 2.39664e-15
+DEAL::0.1 subface integration is ok: 2.40498e-15
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 2.28651e-15
+DEAL::0.3 subface integration is ok: 2.09516e-15
+DEAL::0.4 face integration is ok: 2.24203e-15
+DEAL::0.4 subface integration is ok: 2.23859e-15
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 1.14608e-16
+DEAL::0.1 subface integration is ok: 1.17844e-16
+DEAL::0.2 face integration is ok: 4.58190e-16
+DEAL::0.2 subface integration is ok: 1.64983e-15
+DEAL::0.3 face integration is ok: 4.58190e-16
+DEAL::0.3 subface integration is ok: 1.65023e-15
+DEAL::0.4 face integration is ok: 4.18073e-16
+DEAL::0.4 subface integration is ok: 2.45242e-16
+DEAL::0.5 face integration is ok: 4.58190e-16
+DEAL::0.5 subface integration is ok: 1.64980e-15
+DEAL::0.6 face integration is ok: 4.17117e-16
+DEAL::0.6 subface integration is ok: 2.45521e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
+DEAL::0.1 face integration is ok: 8.10440e-17
+DEAL::0.1 subface integration is ok: 2.62062e-16
+DEAL::0.2 face integration is ok: 9.63467e-16
+DEAL::0.2 subface integration is ok: 2.08624e-15
--- /dev/null
+JobId Sat Oct 18 22:43:43 2003
+DEAL::0.0 face integration is ok: 7.07631e-16
+DEAL::0.0 subface integration is ok: 3.19491e-16
+DEAL::0.1 face integration is ok: 7.21645e-16
+DEAL::0.1 subface integration is ok: 2.98937e-16
+DEAL::0.2 face integration is ok: 0.00000
+DEAL::0.2 subface integration is ok: 0.00000
+DEAL::0.3 face integration is ok: 7.07631e-16
+DEAL::0.3 subface integration is ok: 3.19491e-16
+DEAL::0.4 face integration is ok: 7.21645e-16
+DEAL::0.4 subface integration is ok: 2.98937e-16
+DEAL::0.0 face integration is ok: 2.57014e-17
+DEAL::0.0 subface integration is ok: 4.79657e-17
--- /dev/null
+
+DEAL:: face integration is ok: 0.00000
+DEAL:: subface integration is ok: 2.77556e-17
+DEAL:: face integration is ok: 8.88178e-16
+DEAL:: subface integration is ok: 1.13208e-15
+DEAL:: face integration is ok: 2.83052e-16
+DEAL:: subface integration is ok: 1.82534e-16
+DEAL:: face integration is ok: 8.63885e-17
+DEAL:: subface integration is ok: 2.05409e-16
--- /dev/null
+
+DEAL:: face integration is ok: 3.51083e-16
+DEAL:: subface integration is ok: 5.11788e-16
+DEAL:: face integration is ok: 5.11788e-16
+DEAL:: subface integration is ok: 2.77556e-17
--- /dev/null
+
+DEAL:: face integration is ok: 0.00000
+DEAL:: subface integration is ok: 2.77556e-17
+DEAL:: face integration is ok: 8.88178e-16
+DEAL:: subface integration is ok: 1.13208e-15
--- /dev/null
+
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 2.00000
+DEAL:: subface integration: 2.00000
+DEAL:: face integration: 1.53960
+DEAL:: subface integration: 1.53960
--- /dev/null
+
+DEAL:: face integration: 3.33333
+DEAL:: subface integration: 3.33333
--- /dev/null
+
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000
+DEAL:: face integration: 1.00000
+DEAL:: subface integration: 1.00000