<h3>Specific improvements</h3>
<ol>
+ <li> New: There is now a QSorted<dim> quadrature which takes an
+ arbitrary quadrature at construction time and reorders the quadrature
+ points according to the weigths, from smaller to bigger. This should
+ improve stability of higher order polynomial integration.
+ <br>
+ (Luca Heltai, 2014/05/07)
+ </li>
+
<li> New: The class VectorizedArray<Number> now provides methods
VectorizedArray::load(ptr) to read from arbitrary pointer addresses and
VectorizedArray::store(ptr) to write to arbitrary pointer addresses,
-## ---------------------------------------------------------------------
-## $Id$
-##
-## Copyright (C) 2013 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.
-##
-## ---------------------------------------------------------------------
-
-#
-# Example configuration file
-#
-# This file can be used as a script to preseed the initial cache of a build
-# directory. To do so, invoke cmake with
-#
-# $ cmake -C configuration.cmake [...]
-#
-#
-# Please note that this file is actually intrepeted as a full featured
-# CMake script file, so in order to set variables in the cache a statement
-# of the form
-#
-# SET(<variable> <value> CACHE <type> "<string>")
-#
-# has to be used. See doc/readme.html and doc/users/cmake.html for further
-# details on how to use the cmake build system of deal.II.
-#
+## ##
+# Example configuration file #
+# #
+# See doc/readme.html and doc/users/cmake.html for further #
+# details on how to use the cmake build system of deal.II. #
+## ##
###########################################################################
# "Fortran Compiler."
# )
#
-# SET(DEAL_II_CXX_FLAGS "" CACHE STRING
-# "The user supplied cache variable will be appended _at the end_ of the auto generated DEAL_II_CXX_FLAGS variable"
+# SET(CMAKE_CXX_FLAGS "" CACHE STRING
+# "The user supplied cache variable will be appended _at the end_ of the auto generated CMAKE_CXX_FLAGS variable"
# )
#
# SET(DEAL_II_CXX_FLAGS_DEBUG "" CACHE STRING
# "The user supplied cache variable will be appended _at the end_ of the auto generated DEAL_II_LINKER_FLAGS_RELEASE variable"
# )
#
-# SET(DEAL_II_DEFINITIONS "" CACHE STRING
-# "Additional, user supplied compile definitions"
-# )
-#
-# SET(DEAL_II_DEFINITIONS_DEBUG "" CACHE STRING
-# "Additional, user supplied compile definitions"
-# )
-#
-# SET(DEAL_II_DEFINITIONS_RELEASE "" CACHE STRING
-# "Additional, user supplied compile definitions"
-# )
-#
# SET(BUILD_SHARED_LIBS "ON" CACHE BOOL
# "Build a shared library"
# )
# "If set to ON, then use 64-bit data types to represent global degree of freedom indices. The default is to OFF. You only want to set this to ON if you will solve problems with more than 2^31 (approximately 2 billion) unknowns. If set to ON, you also need to ensure that both Trilinos and/or PETSc support 64-bit indices."
# )
#
+#
###########################################################################
#
+#
+# muPaser:
+#
+# SET(DEAL_II_WITH_MUPARSER ON CACHE BOOL
+# "Build deal.II with support for muparser"
+#
+# Automatic detection:
+#
+# Specify a hint with CMAKE_PREFIX_PATH or by setting
+# SET(MUPARSER_DIR "/.../..." CACHE PATH "")
+#
+# Manual setup:
+#
+# SET(MUPARSER_FOUND TRUE CACHE BOOL "")
+# SET(MUPARSER_LIBRARIES "library;and;semicolon;separated;list;of;link;interface" CACHE STRING "")
+# SET(MUPARSER_INCLUDE_DIRS "semicolon;separated;list;of;include;dirs" CACHE STRING "")
+#
+
+
#
# Netcdf:
#
# C++11 support is autodetected. You can explicitly disable C+11 support by
# specifying
#
-# SET(DEAL_II_WITH_CXX11 FALSE CACHE BOOL "")
+# SET(DEAL_II_HAVE_CXX11_FLAG FALSE CACHE BOOL "")
#
# A custom C++11 flag can be set by setting
#
-# SET(DEAL_II_CXX11_FLAG "-std=c++11" CACHE STRING "")
+# SET(DEAL_II_HAVE_CXX11_FLAG TRUE CACHE BOOL "")
+# SET(DEAL_II_CXX11_FLAG "-std=c++0x" CACHE STRING "")
#
# "Library suffix for the debug library"
# )
#
-# SET(DEAL_II_RELEASE_SUFFIX "" CACHE STRING
+# SET_IF_EMPTY(DEAL_II_RELEASE_SUFFIX "" CACHE STRING
# "Library suffix for the release library"
# )
#
+/**
+ * Sorted Quadrature. Given an arbitrary quadrature formula, this
+ * class generates a quadrature formula where the quadrature points
+ * are ordered according the weights, from those with smaller
+ * corresponding weight, to those with higher corresponding weights.
+ * This might be necessary, for example, when integrating high order
+ * polynomials, since in these cases you might sum very big numbers
+ * with very small numbers, and summation is not stable if the numbers
+ * to sum are not close to each other.
+ */
+template <int dim>
+class QSorted : public Quadrature<dim>
+{
+public:
+ /** The constructor takes an arbitrary quadrature formula. */
+ QSorted (const Quadrature<dim>);
+
+ /** A rule to reorder pairs of points and weights.*/
+ bool operator()(const std::pair<double, Point<dim> > &a,
+ const std::pair<double, Point<dim> > &b);
+};
+
+
/*@}*/
/* -------------- declaration of explicit specializations ------------- */
}
+template <int dim>
+QSorted<dim>::QSorted(Quadrature<dim> quad) :
+ Quadrature<dim>(quad.size())
+{
+ std::vector< std::pair<double, Point<dim> > > wp;
+ for (unsigned int i=0; i<quad.size(); ++i)
+ wp.push_back(std::pair<double, Point<dim> >(quad.weight(i),
+ quad.point(i)));
+ sort(wp.begin(), wp.end(), *this);
+ for(unsigned int i=0; i<quad.size(); ++i)
+ {
+ this->weights[i] = wp[i].first;
+ this->quadrature_points[i] = wp[i].second;
+ }
+}
+
+
+template <int dim>
+bool QSorted<dim>::operator()(const std::pair<double, Point<dim> > &a,
+ const std::pair<double, Point<dim> > &b)
+{
+ return (a.first < b.first);
+}
+
+
// construct the quadrature formulae in higher dimensions by
// tensor product of lower dimensions
template class QMilne<3>;
template class QWeddle<3>;
+template class QSorted<1>;
+template class QSorted<2>;
+template class QSorted<3>;
+
DEAL_II_NAMESPACE_CLOSE
--- /dev/null
+// ---------------------------------------------------------------------
+// $Id: quadrature_test.cc 31349 2013-10-20 19:07:06Z maier $
+//
+// Copyright (C) 1998 - 2013 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.
+//
+// ---------------------------------------------------------------------
+
+
+
+// sort quadratures according to weights, and verify that they
+// integrate accurately polynomial of increasing order.
+// Verify that weights are actually sorted
+
+
+#include "../tests.h"
+#include <iomanip>
+#include <fstream>
+
+#include <deal.II/base/logstream.h>
+#include <deal.II/base/quadrature_lib.h>
+#include <deal.II/base/qprojector.h>
+#include <cmath>
+
+template <int dim>
+void
+fill_vector (std::vector<Quadrature<dim> *> &quadratures)
+{
+ quadratures.push_back (new QSorted<dim>(QMidpoint<dim>()));
+ quadratures.push_back (new QSorted<dim>(QTrapez<dim>()));
+ quadratures.push_back (new QSorted<dim>(QSimpson<dim>()));
+ quadratures.push_back (new QSorted<dim>(QMilne<dim>()));
+ quadratures.push_back (new QSorted<dim>(QWeddle<dim>()));
+ for (unsigned int i=0; i<9; ++i)
+ {
+ quadratures.push_back (new QSorted<dim>(QGauss<dim>(i)));
+ }
+ QMilne<1> q1d;
+ quadratures.push_back (new QSorted<dim>(Quadrature<dim>(q1d)));
+ for (unsigned int i=2; i<8; ++i)
+ {
+ quadratures.push_back (new QSorted<dim>(QGaussLobatto<dim>(i)));
+ }
+}
+
+template <int dim>
+void
+check_cells (std::vector<Quadrature<dim>*> &quadratures)
+{
+ Quadrature<dim> quadrature;
+ for (unsigned int n=0; n<quadratures.size(); ++n)
+ {
+ quadrature = *quadratures[n];
+ const std::vector<Point<dim> > &points=quadrature.get_points();
+ const std::vector<double> &weights=quadrature.get_weights();
+
+ deallog << "Quadrature no." << n;
+
+ unsigned int i=0;
+ double quadrature_int=0;
+ double exact_int=0;
+ double err = 0;
+
+ do
+ {
+ ++i;
+
+ quadrature_int=0;
+ // Check the polynomial x^i*y^i
+
+ for (unsigned int x=0; x<quadrature.size(); ++x)
+ {
+ double f=1.;
+ switch (dim)
+ {
+ case 3:
+ f *= std::pow(static_cast<double>(points[x](2)), i*1.0);
+ case 2:
+ f *= std::pow(static_cast<double>(points[x](1)), i*1.0);
+ case 1:
+ f *= std::pow(static_cast<double>(points[x](0)), i*1.0);
+ }
+ quadrature_int+=f*weights[x];
+ }
+
+ // the exact integral is 1/(i+1)
+ exact_int=1./std::pow(static_cast<double>(i+1),dim);
+ err = std::fabs(quadrature_int-exact_int);
+ }
+ while (err<1e-14);
+ // Uncomment here for testing
+// deallog << " (Int " << quadrature_int << ',' << exact_int << ")";
+ deallog << " is exact for polynomials of degree " << i-1 << std::endl;
+ }
+}
+
+
+template <int dim>
+void
+check_faces (const std::vector<Quadrature<dim-1>*>& quadratures, const bool sub)
+{
+ if (sub)
+ deallog.push("subfaces");
+ else
+ deallog.push("faces");
+
+ for (unsigned int n=0; n<quadratures.size(); ++n)
+ {
+ Quadrature<dim> quadrature (sub == false?
+ QProjector<dim>::project_to_all_faces(*quadratures[n]) :
+ QProjector<dim>::project_to_all_subfaces(*quadratures[n]));
+ const std::vector<Point<dim> > &points=quadrature.get_points();
+ const std::vector<double> &weights=quadrature.get_weights();
+
+ deallog << "Quadrature no." << n;
+
+ unsigned int i=0;
+ long double quadrature_int=0;
+ double exact_int=0;
+ double err = 0;
+
+ do
+ {
+ ++i;
+
+ quadrature_int=0;
+ // Check the polynomial
+ // x^i*y^i*z^i
+
+ for (unsigned int x=0; x<quadrature.size(); ++x)
+ {
+ long double f=1.;
+ switch (dim)
+ {
+ case 3:
+ f *= std::pow((long double) points[x](2), i*1.0L);
+ case 2:
+ f *= std::pow((long double) points[x](1), i*1.0L);
+ case 1:
+ f *= std::pow((long double) points[x](0), i*1.0L);
+ }
+ quadrature_int+=f*weights[x];
+ }
+
+ // the exact integral is
+ // 1/(i+1)^(dim-1)
+ switch (dim)
+ {
+ case 2:
+ exact_int = 2 * (sub ? 2:1) / (double) (i+1);
+ break;
+ case 3:
+ exact_int = 3 * (sub ? (4+2+2):1)*8 / (double) (i+1)/(i+1);
+ break;
+ }
+
+ err = std::fabs(quadrature_int-exact_int);
+ }
+ // for comparison: use factor 8 in case
+ // of dim==3, as we integrate 8 times
+ // over the whole surface (all
+ // combinations of face_orientation,
+ // face_flip and face_rotation)
+ while (err < (dim==3 ? 8 : 1) * 2e-14);
+ // Uncomment here for testing
+ // deallog << " (Int " << quadrature_int << '-' << exact_int << '=' << err << ")";
+ deallog << " is exact for polynomials of degree " << i-1 << std::endl;
+ }
+ deallog.pop();
+}
+
+template <int dim>
+void
+check_quadratures (const std::vector<Quadrature<dim>*>& quadratures) {
+ for(unsigned int i=0; i<quadratures.size(); ++i) {
+ Quadrature<dim> &quad = *quadratures[i];
+ bool check = true;
+ for(unsigned int q=1; q<quad.size(); ++q)
+ if(quad.weight(q) < quad.weight(q-1)) {
+ check = false;
+ break;
+ }
+ if(check == false) {
+ deallog << "Something went wrong. The qudrature is not properly sorted." << std::endl;
+ for(unsigned int q=1; q<quad.size(); ++q) {
+ deallog << "q(" << q << "): " << quad.point(q)
+ << ", w(" << q << "): " << quad.weight(q) << std::endl;
+ }
+ }
+ }
+}
+
+int main()
+{
+ std::ofstream logfile("output");
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ std::vector<Quadrature<1> *> q1;
+ std::vector<Quadrature<2> *> q2;
+ std::vector<Quadrature<3> *> q3;
+ fill_vector (q1);
+ fill_vector (q2);
+ fill_vector (q3);
+
+ deallog.push("1d");
+ check_cells(q1);
+ check_quadratures(q1);
+ deallog.pop();
+
+ deallog.push("2d");
+ check_cells(q2);
+ check_faces<2>(q1,false);
+ check_faces<2>(q1,true);
+ check_quadratures(q2);
+ deallog.pop();
+
+ deallog.push("3d");
+ check_cells(q3);
+ check_faces<3>(q2,false);
+ check_faces<3>(q2,true);
+ check_quadratures(q3);
+ deallog.pop();
+
+ // delete objects again to avoid
+ // messages about memory leaks when
+ // using purify or other memory
+ // checkers
+ for (unsigned int i=0; i<q1.size(); ++i)
+ delete q1[i];
+ for (unsigned int i=0; i<q2.size(); ++i)
+ delete q2[i];
+ for (unsigned int i=0; i<q3.size(); ++i)
+ delete q3[i];
+}
+
+
--- /dev/null
+
+DEAL:1d::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:1d::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:1d::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:1d::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:1d::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:1d::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:1d::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:1d::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:1d::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:1d::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:1d::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:1d::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:1d::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:1d::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:1d::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:1d::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:1d::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:1d::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:1d::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:1d::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:1d::Quadrature no.20 is exact for polynomials of degree 11
+DEAL:2d::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:2d::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:2d::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:2d::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:2d::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:2d::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:2d::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:2d::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:2d::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:2d::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:2d::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:2d::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:2d::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:2d::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:2d::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:2d::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:2d::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:2d::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:2d::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:2d::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:2d::Quadrature no.20 is exact for polynomials of degree 11
+DEAL:2d:faces::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:2d:faces::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:2d:faces::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:2d:faces::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:2d:faces::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:2d:faces::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:2d:faces::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:2d:faces::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:2d:faces::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:2d:faces::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:2d:faces::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:2d:faces::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:2d:faces::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:2d:faces::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:2d:faces::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:2d:faces::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:2d:faces::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:2d:faces::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:2d:faces::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:2d:faces::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:2d:faces::Quadrature no.20 is exact for polynomials of degree 11
+DEAL:2d:subfaces::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:2d:subfaces::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:2d:subfaces::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:2d:subfaces::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:2d:subfaces::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:2d:subfaces::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:2d:subfaces::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:2d:subfaces::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:2d:subfaces::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:2d:subfaces::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:2d:subfaces::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:2d:subfaces::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:2d:subfaces::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:2d:subfaces::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:2d:subfaces::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:2d:subfaces::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:2d:subfaces::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:2d:subfaces::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:2d:subfaces::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:2d:subfaces::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:2d:subfaces::Quadrature no.20 is exact for polynomials of degree 11
+DEAL:3d::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:3d::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:3d::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:3d::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:3d::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:3d::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:3d::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:3d::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:3d::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:3d::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:3d::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:3d::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:3d::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:3d::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:3d::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:3d::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:3d::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:3d::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:3d::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:3d::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:3d::Quadrature no.20 is exact for polynomials of degree 11
+DEAL:3d:faces::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:3d:faces::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:3d:faces::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:3d:faces::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:3d:faces::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:3d:faces::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:3d:faces::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:3d:faces::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:3d:faces::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:3d:faces::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:3d:faces::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:3d:faces::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:3d:faces::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:3d:faces::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:3d:faces::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:3d:faces::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:3d:faces::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:3d:faces::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:3d:faces::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:3d:faces::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:3d:faces::Quadrature no.20 is exact for polynomials of degree 11
+DEAL:3d:subfaces::Quadrature no.0 is exact for polynomials of degree 1
+DEAL:3d:subfaces::Quadrature no.1 is exact for polynomials of degree 1
+DEAL:3d:subfaces::Quadrature no.2 is exact for polynomials of degree 3
+DEAL:3d:subfaces::Quadrature no.3 is exact for polynomials of degree 5
+DEAL:3d:subfaces::Quadrature no.4 is exact for polynomials of degree 7
+DEAL:3d:subfaces::Quadrature no.5 is exact for polynomials of degree 0
+DEAL:3d:subfaces::Quadrature no.6 is exact for polynomials of degree 1
+DEAL:3d:subfaces::Quadrature no.7 is exact for polynomials of degree 3
+DEAL:3d:subfaces::Quadrature no.8 is exact for polynomials of degree 5
+DEAL:3d:subfaces::Quadrature no.9 is exact for polynomials of degree 7
+DEAL:3d:subfaces::Quadrature no.10 is exact for polynomials of degree 9
+DEAL:3d:subfaces::Quadrature no.11 is exact for polynomials of degree 11
+DEAL:3d:subfaces::Quadrature no.12 is exact for polynomials of degree 13
+DEAL:3d:subfaces::Quadrature no.13 is exact for polynomials of degree 15
+DEAL:3d:subfaces::Quadrature no.14 is exact for polynomials of degree 5
+DEAL:3d:subfaces::Quadrature no.15 is exact for polynomials of degree 1
+DEAL:3d:subfaces::Quadrature no.16 is exact for polynomials of degree 3
+DEAL:3d:subfaces::Quadrature no.17 is exact for polynomials of degree 5
+DEAL:3d:subfaces::Quadrature no.18 is exact for polynomials of degree 7
+DEAL:3d:subfaces::Quadrature no.19 is exact for polynomials of degree 9
+DEAL:3d:subfaces::Quadrature no.20 is exact for polynomials of degree 11