*
* @ingroup febase fe
*
- * @author Wolfgang Bangerth, Guido Kanschat, 1999, 2002, 2003, partial reimplementation Ralf Hartmann 2001.
+ * @author Wolfgang Bangerth, Guido Kanschat, 1999, 2002, 2003, 2006, partial reimplementation Ralf Hartmann 2001.
*/
template <int dim>
class FESystem : public FiniteElement<dim>
* class needs to be of the same dimension
* as is this object.
*/
- FESystem (const FiniteElement<dim> &fe, const unsigned int n_elements);
+ FESystem (const FiniteElement<dim> &fe,
+ const unsigned int n_elements);
/**
* Constructor for mixed
virtual
Point<dim-1>
unit_face_support_point (const unsigned int index) const;
+
+ /**
+ * @name Functions to support hp
+ * @{
+ */
+
+ /**
+ * Return whether this element
+ * implements its hanging node
+ * constraints in the new way,
+ * which has to be used to make
+ * elements "hp compatible".
+ *
+ * This function returns @p true iff all
+ * its base elements return @p true for
+ * this function.
+ */
+ virtual bool hp_constraints_are_implemented () const;
+
+ /**
+ * If, on a vertex, several
+ * finite elements are active,
+ * the hp code first assigns the
+ * degrees of freedom of each of
+ * these FEs different global
+ * indices. It then calls this
+ * function to find out which of
+ * them should get identical
+ * values, and consequently can
+ * receive the same global DoF
+ * index. This function therefore
+ * returns a list of identities
+ * between DoFs of the present
+ * finite element object with the
+ * DoFs of @p fe_other, which is
+ * a reference to a finite
+ * element object representing
+ * one of the other finite
+ * elements active on this
+ * particular vertex. The
+ * function computes which of the
+ * degrees of freedom of the two
+ * finite element objects are
+ * equivalent, and returns a list
+ * of pairs of global dof indices
+ * in @p identities. The first
+ * index of each pair denotes one
+ * of the vertex dofs of the
+ * present element, whereas the
+ * second is the corresponding
+ * index of the other finite
+ * element.
+ */
+ virtual
+ std::vector<std::pair<unsigned int, unsigned int> >
+ hp_vertex_dof_identities (const FiniteElement<dim> &fe_other) const;
+
+ /**
+ * Same as
+ * hp_vertex_dof_indices(),
+ * except that the function
+ * treats degrees of freedom on
+ * lines.
+ */
+ virtual
+ std::vector<std::pair<unsigned int, unsigned int> >
+ hp_line_dof_identities (const FiniteElement<dim> &fe_other) const;
+
+ /**
+ * Same as
+ * hp_vertex_dof_indices(),
+ * except that the function
+ * treats degrees of freedom on
+ * quads.
+ */
+ virtual
+ std::vector<std::pair<unsigned int, unsigned int> >
+ hp_quad_dof_identities (const FiniteElement<dim> &fe_other) const;
+
+ //@}
/**
* Determine an estimate for the
+template <int dim>
+bool
+FESystem<dim>::
+hp_constraints_are_implemented () const
+{
+ for (unsigned int b=0; b<n_base_elements(); ++b)
+ if (base_element(b).hp_constraints_are_implemented() == false)
+ return false;
+
+ return true;
+}
+
+
+
+template <int dim>
+std::vector<std::pair<unsigned int, unsigned int> >
+FESystem<dim>::hp_vertex_dof_identities (const FiniteElement<dim> &fe_other) const
+{
+ // since dofs on each subobject (vertex,
+ // line, ...) are ordered such that first
+ // come all from the first base element all
+ // multiplicities, then second base element
+ // all multiplicities, etc., we simply have
+ // to stack all the identities after each
+ // other
+ //
+ // the problem is that we have to work with
+ // two FEs (this and fe_other). only deal
+ // with the case that both are FESystems
+ // and that they both have the same number
+ // of bases (counting multiplicity) each of
+ // which match in their number of
+ // components. this covers
+ // FESystem(FE_Q(p),1,FE_Q(q),2) vs
+ // FESystem(FE_Q(r),2,FE_Q(s),1), but not
+ // FESystem(FE_Q(p),1,FE_Q(q),2) vs
+ // FESystem(FESystem(FE_Q(r),2),1,FE_Q(s),1)
+ if (const FESystem<dim> *fe_other_system
+ = dynamic_cast<const FESystem<dim>*>(&fe_other))
+ {
+ // loop over all the base elements of
+ // this and the other element, counting
+ // their multiplicities
+ unsigned int base_index = 0,
+ base_index_other = 0;
+ unsigned int multiplicity = 0,
+ multiplicity_other = 0;
+
+ // we also need to keep track of the
+ // number of dofs already treated for
+ // each of the elements
+ unsigned int dof_offset = 0,
+ dof_offset_other = 0;
+
+ std::vector<std::pair<unsigned int, unsigned int> > identities;
+
+ while (true)
+ {
+ const FiniteElement<dim>
+ &base = base_element(base_index),
+ &base_other = fe_other_system->base_element(base_index_other);
+
+ Assert (base.n_components() == base_other.n_components(),
+ ExcNotImplemented());
+
+ // now translate the identities
+ // returned by the base elements to
+ // the indices of this system
+ // element
+ const std::vector<std::pair<unsigned int, unsigned int> >
+ base_identities = base.hp_vertex_dof_identities (base_other);
+
+ for (unsigned int i=0; i<base_identities.size(); ++i)
+ identities.push_back
+ (std::make_pair (base_identities[i].first + dof_offset,
+ base_identities[i].second + dof_offset_other));
+
+ // record the dofs treated above as
+ // already taken care of
+ dof_offset += base.dofs_per_vertex;
+ dof_offset_other += base_other.dofs_per_vertex;
+
+ // advance to the next base element
+ // for this and the other
+ // fe_system; see if we can simply
+ // advance the multiplicity by one,
+ // or if have to move on to the
+ // next base element
+ ++multiplicity;
+ if (multiplicity == element_multiplicity(base_index))
+ {
+ multiplicity = 0;
+ ++base_index;
+ }
+ ++multiplicity_other;
+ if (multiplicity_other ==
+ fe_other_system->element_multiplicity(base_index_other))
+ {
+ multiplicity_other = 0;
+ ++base_index_other;
+ }
+
+ // see if we have reached the end
+ // of the present element. if so,
+ // we should have reached the end
+ // of the other one as well
+ if (base_index == n_base_elements())
+ {
+ Assert (base_index_other == fe_other_system->n_base_elements(),
+ ExcInternalError());
+ break;
+ }
+
+ // if we haven't reached the end of
+ // this element, we shouldn't have
+ // reached the end of the other one
+ // either
+ Assert (base_index_other != fe_other_system->n_base_elements(),
+ ExcInternalError());
+ }
+
+ return identities;
+ }
+ else
+ {
+ Assert (false, ExcNotImplemented());
+ return std::vector<std::pair<unsigned int, unsigned int> >();
+ }
+}
+
+
+
+template <int dim>
+std::vector<std::pair<unsigned int, unsigned int> >
+FESystem<dim>::hp_line_dof_identities (const FiniteElement<dim> &fe_other) const
+{
+ // since dofs on each subobject (vertex,
+ // line, ...) are ordered such that first
+ // come all from the first base element all
+ // multiplicities, then second base element
+ // all multiplicities, etc., we simply have
+ // to stack all the identities after each
+ // other
+ //
+ // the problem is that we have to work with
+ // two FEs (this and fe_other). only deal
+ // with the case that both are FESystems
+ // and that they both have the same number
+ // of bases (counting multiplicity) each of
+ // which match in their number of
+ // components. this covers
+ // FESystem(FE_Q(p),1,FE_Q(q),2) vs
+ // FESystem(FE_Q(r),2,FE_Q(s),1), but not
+ // FESystem(FE_Q(p),1,FE_Q(q),2) vs
+ // FESystem(FESystem(FE_Q(r),2),1,FE_Q(s),1)
+ if (const FESystem<dim> *fe_other_system
+ = dynamic_cast<const FESystem<dim>*>(&fe_other))
+ {
+ // loop over all the base elements of
+ // this and the other element, counting
+ // their multiplicities
+ unsigned int base_index = 0,
+ base_index_other = 0;
+ unsigned int multiplicity = 0,
+ multiplicity_other = 0;
+
+ // we also need to keep track of the
+ // number of dofs already treated for
+ // each of the elements
+ unsigned int dof_offset = 0,
+ dof_offset_other = 0;
+
+ std::vector<std::pair<unsigned int, unsigned int> > identities;
+
+ while (true)
+ {
+ const FiniteElement<dim>
+ &base = base_element(base_index),
+ &base_other = fe_other_system->base_element(base_index_other);
+
+ Assert (base.n_components() == base_other.n_components(),
+ ExcNotImplemented());
+
+ // now translate the identities
+ // returned by the base elements to
+ // the indices of this system
+ // element
+ const std::vector<std::pair<unsigned int, unsigned int> >
+ base_identities = base.hp_line_dof_identities (base_other);
+
+ for (unsigned int i=0; i<base_identities.size(); ++i)
+ identities.push_back
+ (std::make_pair (base_identities[i].first + dof_offset,
+ base_identities[i].second + dof_offset_other));
+
+ // record the dofs treated above as
+ // already taken care of
+ dof_offset += base.dofs_per_line;
+ dof_offset_other += base_other.dofs_per_line;
+
+ // advance to the next base element
+ // for this and the other
+ // fe_system; see if we can simply
+ // advance the multiplicity by one,
+ // or if have to move on to the
+ // next base element
+ ++multiplicity;
+ if (multiplicity == element_multiplicity(base_index))
+ {
+ multiplicity = 0;
+ ++base_index;
+ }
+ ++multiplicity_other;
+ if (multiplicity_other ==
+ fe_other_system->element_multiplicity(base_index_other))
+ {
+ multiplicity_other = 0;
+ ++base_index_other;
+ }
+
+ // see if we have reached the end
+ // of the present element. if so,
+ // we should have reached the end
+ // of the other one as well
+ if (base_index == n_base_elements())
+ {
+ Assert (base_index_other == fe_other_system->n_base_elements(),
+ ExcInternalError());
+ break;
+ }
+
+ // if we haven't reached the end of
+ // this element, we shouldn't have
+ // reached the end of the other one
+ // either
+ Assert (base_index_other != fe_other_system->n_base_elements(),
+ ExcInternalError());
+ }
+
+ return identities;
+ }
+ else
+ {
+ Assert (false, ExcNotImplemented());
+ return std::vector<std::pair<unsigned int, unsigned int> >();
+ }
+}
+
+
+
+template <int dim>
+std::vector<std::pair<unsigned int, unsigned int> >
+FESystem<dim>::hp_quad_dof_identities (const FiniteElement<dim> &fe_other) const
+{
+ // since dofs on each subobject (vertex,
+ // line, ...) are ordered such that first
+ // come all from the first base element all
+ // multiplicities, then second base element
+ // all multiplicities, etc., we simply have
+ // to stack all the identities after each
+ // other
+ //
+ // the problem is that we have to work with
+ // two FEs (this and fe_other). only deal
+ // with the case that both are FESystems
+ // and that they both have the same number
+ // of bases (counting multiplicity) each of
+ // which match in their number of
+ // components. this covers
+ // FESystem(FE_Q(p),1,FE_Q(q),2) vs
+ // FESystem(FE_Q(r),2,FE_Q(s),1), but not
+ // FESystem(FE_Q(p),1,FE_Q(q),2) vs
+ // FESystem(FESystem(FE_Q(r),2),1,FE_Q(s),1)
+ if (const FESystem<dim> *fe_other_system
+ = dynamic_cast<const FESystem<dim>*>(&fe_other))
+ {
+ // loop over all the base elements of
+ // this and the other element, counting
+ // their multiplicities
+ unsigned int base_index = 0,
+ base_index_other = 0;
+ unsigned int multiplicity = 0,
+ multiplicity_other = 0;
+
+ // we also need to keep track of the
+ // number of dofs already treated for
+ // each of the elements
+ unsigned int dof_offset = 0,
+ dof_offset_other = 0;
+
+ std::vector<std::pair<unsigned int, unsigned int> > identities;
+
+ while (true)
+ {
+ const FiniteElement<dim>
+ &base = base_element(base_index),
+ &base_other = fe_other_system->base_element(base_index_other);
+
+ Assert (base.n_components() == base_other.n_components(),
+ ExcNotImplemented());
+
+ // now translate the identities
+ // returned by the base elements to
+ // the indices of this system
+ // element
+ const std::vector<std::pair<unsigned int, unsigned int> >
+ base_identities = base.hp_quad_dof_identities (base_other);
+
+ for (unsigned int i=0; i<base_identities.size(); ++i)
+ identities.push_back
+ (std::make_pair (base_identities[i].first + dof_offset,
+ base_identities[i].second + dof_offset_other));
+
+ // record the dofs treated above as
+ // already taken care of
+ dof_offset += base.dofs_per_quad;
+ dof_offset_other += base_other.dofs_per_quad;
+
+ // advance to the next base element
+ // for this and the other
+ // fe_system; see if we can simply
+ // advance the multiplicity by one,
+ // or if have to move on to the
+ // next base element
+ ++multiplicity;
+ if (multiplicity == element_multiplicity(base_index))
+ {
+ multiplicity = 0;
+ ++base_index;
+ }
+ ++multiplicity_other;
+ if (multiplicity_other ==
+ fe_other_system->element_multiplicity(base_index_other))
+ {
+ multiplicity_other = 0;
+ ++base_index_other;
+ }
+
+ // see if we have reached the end
+ // of the present element. if so,
+ // we should have reached the end
+ // of the other one as well
+ if (base_index == n_base_elements())
+ {
+ Assert (base_index_other == fe_other_system->n_base_elements(),
+ ExcInternalError());
+ break;
+ }
+
+ // if we haven't reached the end of
+ // this element, we shouldn't have
+ // reached the end of the other one
+ // either
+ Assert (base_index_other != fe_other_system->n_base_elements(),
+ ExcInternalError());
+ }
+
+ return identities;
+ }
+ else
+ {
+ Assert (false, ExcNotImplemented());
+ return std::vector<std::pair<unsigned int, unsigned int> >();
+ }
+}
+
+
+
template <int dim>
FiniteElementData<dim>
FESystem<dim>::multiply_dof_numbers (const FiniteElementData<dim> &fe1,
--- /dev/null
+//---------------------------- hp_line_dof_identities_q_system.cc ---------------------------
+// $Id: hp_line_dof_identities_q_system.cc 12464 2006-02-23 01:13:17Z wolf $
+// Version: $Name$
+//
+// Copyright (C) 2005, 2006 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- hp_line_dof_identities_q_system.cc ---------------------------
+
+
+// check FESystem(FE_Q)::hp_line_dof_identities
+
+
+#include <base/logstream.h>
+#include <fe/fe_collection.h>
+#include <fe/fe_q.h>
+#include <fe/fe_system.h>
+
+#include <fstream>
+
+
+template <int dim>
+void test ()
+{
+ hp::FECollection<dim> fe_collection;
+ for (unsigned int i=1; i<8-dim; ++i)
+ fe_collection.push_back (FESystem<dim>(FE_Q<dim>(i),3));
+
+ for (unsigned int i=0; i<fe_collection.size(); ++i)
+ for (unsigned int j=0; j<fe_collection.size(); ++j)
+ {
+ const std::vector<std::pair<unsigned int, unsigned int> >
+ identities = fe_collection[i].hp_line_dof_identities (fe_collection[j]);
+
+ deallog << "Identities for "
+ << fe_collection[i].get_name() << " and "
+ << fe_collection[j].get_name() << ": "
+ << identities.size()
+ << std::endl;
+
+ for (unsigned int k=0; k<identities.size(); ++k)
+ {
+ Assert (identities[k].first < fe_collection[i].dofs_per_line,
+ ExcInternalError());
+ Assert (identities[k].second < fe_collection[j].dofs_per_line,
+ ExcInternalError());
+
+ deallog << identities[k].first << ' '
+ << identities[k].second
+ << std::endl;
+ }
+ }
+}
+
+
+
+int main ()
+{
+ std::ofstream logfile("hp_line_dof_identities_q_system/output");
+ logfile.precision(2);
+
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ test<1> ();
+ test<2> ();
+ test<3> ();
+
+ deallog << "OK" << std::endl;
+}
--- /dev/null
+
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(1)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(2)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(3)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(4)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(5)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(6)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(1)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(3)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 1
+DEAL::1 4
+DEAL::2 7
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(5)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 2
+DEAL::1 7
+DEAL::2 12
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(1)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(2)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(3)^3]: 6
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(4)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(5)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(6)^3]: 6
+DEAL::0 1
+DEAL::1 3
+DEAL::2 6
+DEAL::3 8
+DEAL::4 11
+DEAL::5 13
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(1)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::1 0
+DEAL::4 1
+DEAL::7 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(3)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(4)^3]: 9
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(5)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::1 2
+DEAL::4 7
+DEAL::7 12
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(1)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(2)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(3)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(4)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(5)^3]: 12
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(6)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(1)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::2 0
+DEAL::7 1
+DEAL::12 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(3)^3]: 6
+DEAL::1 0
+DEAL::3 1
+DEAL::6 2
+DEAL::8 3
+DEAL::11 4
+DEAL::13 5
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::2 1
+DEAL::7 4
+DEAL::12 7
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(5)^3]: 0
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(6)^3]: 15
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::12 12
+DEAL::13 13
+DEAL::14 14
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(2)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(4)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 1
+DEAL::1 4
+DEAL::2 7
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(2)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(3)^3]: 6
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(4)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::1 0
+DEAL::4 1
+DEAL::7 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(4)^3]: 9
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(2)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(4)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(5)^3]: 12
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(2)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(3)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(4)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(3)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(4)^3]: 3
+DEAL::0 1
+DEAL::1 4
+DEAL::2 7
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(2)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(3)^3]: 6
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(4)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::1 0
+DEAL::4 1
+DEAL::7 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(3)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(4)^3]: 9
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::OK
--- /dev/null
+//---------------------------- hp_quad_dof_identities_q_system.cc ---------------------------
+// $Id: hp_quad_dof_identities_q_system.cc 12464 2006-02-23 01:13:17Z wolf $
+// Version: $Name$
+//
+// Copyright (C) 2005, 2006 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- hp_quad_dof_identities_q_system.cc ---------------------------
+
+
+// check FESystem(FE_Q)::hp_quad_dof_identities
+
+
+#include <base/logstream.h>
+#include <fe/fe_collection.h>
+#include <fe/fe_q.h>
+#include <fe/fe_system.h>
+
+#include <fstream>
+
+
+template <int dim>
+void test ()
+{
+ hp::FECollection<dim> fe_collection;
+ for (unsigned int i=1; i<8-dim; ++i)
+ fe_collection.push_back (FESystem<dim>(FE_Q<dim>(i),3));
+
+ for (unsigned int i=0; i<fe_collection.size(); ++i)
+ for (unsigned int j=0; j<fe_collection.size(); ++j)
+ {
+ const std::vector<std::pair<unsigned int, unsigned int> >
+ identities = fe_collection[i].hp_quad_dof_identities (fe_collection[j]);
+
+ deallog << "Identities for "
+ << fe_collection[i].get_name() << " and "
+ << fe_collection[j].get_name() << ": "
+ << identities.size()
+ << std::endl;
+
+ for (unsigned int k=0; k<identities.size(); ++k)
+ {
+ Assert (identities[k].first < fe_collection[i].dofs_per_quad,
+ ExcInternalError());
+ Assert (identities[k].second < fe_collection[j].dofs_per_quad,
+ ExcInternalError());
+
+ deallog << identities[k].first << ' '
+ << identities[k].second
+ << std::endl;
+ }
+ }
+}
+
+
+
+int main ()
+{
+ std::ofstream logfile("hp_quad_dof_identities_q_system/output");
+ logfile.precision(2);
+
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ test<2> ();
+ test<3> ();
+
+ deallog << "OK" << std::endl;
+}
--- /dev/null
+
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(2)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(4)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 4
+DEAL::1 13
+DEAL::2 22
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(2)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(3)^3]: 12
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(4)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::4 0
+DEAL::13 1
+DEAL::22 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(4)^3]: 27
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::12 12
+DEAL::13 13
+DEAL::14 14
+DEAL::15 15
+DEAL::16 16
+DEAL::17 17
+DEAL::18 18
+DEAL::19 19
+DEAL::20 20
+DEAL::21 21
+DEAL::22 22
+DEAL::23 23
+DEAL::24 24
+DEAL::25 25
+DEAL::26 26
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(5)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(1)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(2)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(3)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(4)^3]: 0
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(5)^3]: 48
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::12 12
+DEAL::13 13
+DEAL::14 14
+DEAL::15 15
+DEAL::16 16
+DEAL::17 17
+DEAL::18 18
+DEAL::19 19
+DEAL::20 20
+DEAL::21 21
+DEAL::22 22
+DEAL::23 23
+DEAL::24 24
+DEAL::25 25
+DEAL::26 26
+DEAL::27 27
+DEAL::28 28
+DEAL::29 29
+DEAL::30 30
+DEAL::31 31
+DEAL::32 32
+DEAL::33 33
+DEAL::34 34
+DEAL::35 35
+DEAL::36 36
+DEAL::37 37
+DEAL::38 38
+DEAL::39 39
+DEAL::40 40
+DEAL::41 41
+DEAL::42 42
+DEAL::43 43
+DEAL::44 44
+DEAL::45 45
+DEAL::46 46
+DEAL::47 47
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(2)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(3)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(4)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(3)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(4)^3]: 3
+DEAL::0 4
+DEAL::1 13
+DEAL::2 22
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(2)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(3)^3]: 12
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(4)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(1)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::4 0
+DEAL::13 1
+DEAL::22 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(3)^3]: 0
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(4)^3]: 27
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::3 3
+DEAL::4 4
+DEAL::5 5
+DEAL::6 6
+DEAL::7 7
+DEAL::8 8
+DEAL::9 9
+DEAL::10 10
+DEAL::11 11
+DEAL::12 12
+DEAL::13 13
+DEAL::14 14
+DEAL::15 15
+DEAL::16 16
+DEAL::17 17
+DEAL::18 18
+DEAL::19 19
+DEAL::20 20
+DEAL::21 21
+DEAL::22 22
+DEAL::23 23
+DEAL::24 24
+DEAL::25 25
+DEAL::26 26
+DEAL::OK
--- /dev/null
+//---------------------------- hp_vertex_dof_identities_q_system.cc ---------------------------
+// $Id: hp_vertex_dof_identities_q_system.cc 12464 2006-02-23 01:13:17Z wolf $
+// Version: $Name$
+//
+// Copyright (C) 2005, 2006 by the deal.II authors
+//
+// This file is subject to QPL and may not be distributed
+// without copyright and license information. Please refer
+// to the file deal.II/doc/license.html for the text and
+// further information on this license.
+//
+//---------------------------- hp_vertex_dof_identities_q_system.cc ---------------------------
+
+
+// check FESystem(FE_Q)::hp_vertex_dof_identities
+
+
+#include <base/logstream.h>
+#include <fe/fe_collection.h>
+#include <fe/fe_q.h>
+#include <fe/fe_system.h>
+
+#include <fstream>
+
+
+template <int dim>
+void test ()
+{
+ hp::FECollection<dim> fe_collection;
+ for (unsigned int i=1; i<8-dim; ++i)
+ fe_collection.push_back (FESystem<dim>(FE_Q<dim>(i),3));
+
+ for (unsigned int i=0; i<fe_collection.size(); ++i)
+ for (unsigned int j=0; j<fe_collection.size(); ++j)
+ {
+ const std::vector<std::pair<unsigned int, unsigned int> >
+ identities = fe_collection[i].hp_vertex_dof_identities (fe_collection[j]);
+
+ deallog << "Identities for "
+ << fe_collection[i].get_name() << " and "
+ << fe_collection[j].get_name() << ": "
+ << identities.size()
+ << std::endl;
+
+ for (unsigned int k=0; k<identities.size(); ++k)
+ {
+ Assert (identities[k].first < fe_collection[i].dofs_per_vertex,
+ ExcInternalError());
+ Assert (identities[k].second < fe_collection[j].dofs_per_vertex,
+ ExcInternalError());
+
+ deallog << identities[k].first << ' '
+ << identities[k].second
+ << std::endl;
+ }
+ }
+}
+
+
+
+int main ()
+{
+ std::ofstream logfile("hp_vertex_dof_identities_q_system/output");
+ logfile.precision(2);
+
+ deallog.attach(logfile);
+ deallog.depth_console(0);
+ deallog.threshold_double(1.e-10);
+
+ test<1> ();
+ test<2> ();
+ test<3> ();
+
+ deallog << "OK" << std::endl;
+}
--- /dev/null
+
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(1)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(2)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(3)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(4)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(5)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<1>[FE_Q<1>(6)^3] and FESystem<1>[FE_Q<1>(6)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(1)^3] and FESystem<2>[FE_Q<2>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(2)^3] and FESystem<2>[FE_Q<2>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(3)^3] and FESystem<2>[FE_Q<2>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(4)^3] and FESystem<2>[FE_Q<2>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<2>[FE_Q<2>(5)^3] and FESystem<2>[FE_Q<2>(5)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(1)^3] and FESystem<3>[FE_Q<3>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(2)^3] and FESystem<3>[FE_Q<3>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(3)^3] and FESystem<3>[FE_Q<3>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(1)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(2)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(3)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::Identities for FESystem<3>[FE_Q<3>(4)^3] and FESystem<3>[FE_Q<3>(4)^3]: 3
+DEAL::0 0
+DEAL::1 1
+DEAL::2 2
+DEAL::OK