From: bangerth Date: Fri, 11 Aug 2006 11:29:16 +0000 (+0000) Subject: Implement hp vertex/line/quad identities for FESystem X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=949f8e8b4a9ddf75dfb201e94db991983e98d63d;p=dealii-svn.git Implement hp vertex/line/quad identities for FESystem git-svn-id: https://svn.dealii.org/trunk@13651 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/fe/fe_system.h b/deal.II/deal.II/include/fe/fe_system.h index 37b0248776..93c6edef0b 100644 --- a/deal.II/deal.II/include/fe/fe_system.h +++ b/deal.II/deal.II/include/fe/fe_system.h @@ -66,7 +66,7 @@ * * @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 class FESystem : public FiniteElement @@ -93,7 +93,8 @@ class FESystem : public FiniteElement * class needs to be of the same dimension * as is this object. */ - FESystem (const FiniteElement &fe, const unsigned int n_elements); + FESystem (const FiniteElement &fe, + const unsigned int n_elements); /** * Constructor for mixed @@ -389,6 +390,86 @@ class FESystem : public FiniteElement virtual Point 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 > + hp_vertex_dof_identities (const FiniteElement &fe_other) const; + + /** + * Same as + * hp_vertex_dof_indices(), + * except that the function + * treats degrees of freedom on + * lines. + */ + virtual + std::vector > + hp_line_dof_identities (const FiniteElement &fe_other) const; + + /** + * Same as + * hp_vertex_dof_indices(), + * except that the function + * treats degrees of freedom on + * quads. + */ + virtual + std::vector > + hp_quad_dof_identities (const FiniteElement &fe_other) const; + + //@} /** * Determine an estimate for the diff --git a/deal.II/deal.II/source/fe/fe_system.cc b/deal.II/deal.II/source/fe/fe_system.cc index 9a85175dd1..46b039ca19 100644 --- a/deal.II/deal.II/source/fe/fe_system.cc +++ b/deal.II/deal.II/source/fe/fe_system.cc @@ -1846,6 +1846,374 @@ initialize_unit_face_support_points () +template +bool +FESystem:: +hp_constraints_are_implemented () const +{ + for (unsigned int b=0; b +std::vector > +FESystem::hp_vertex_dof_identities (const FiniteElement &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 *fe_other_system + = dynamic_cast*>(&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 > identities; + + while (true) + { + const FiniteElement + &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 > + base_identities = base.hp_vertex_dof_identities (base_other); + + for (unsigned int i=0; ielement_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 >(); + } +} + + + +template +std::vector > +FESystem::hp_line_dof_identities (const FiniteElement &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 *fe_other_system + = dynamic_cast*>(&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 > identities; + + while (true) + { + const FiniteElement + &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 > + base_identities = base.hp_line_dof_identities (base_other); + + for (unsigned int i=0; ielement_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 >(); + } +} + + + +template +std::vector > +FESystem::hp_quad_dof_identities (const FiniteElement &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 *fe_other_system + = dynamic_cast*>(&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 > identities; + + while (true) + { + const FiniteElement + &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 > + base_identities = base.hp_quad_dof_identities (base_other); + + for (unsigned int i=0; ielement_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 >(); + } +} + + + template FiniteElementData FESystem::multiply_dof_numbers (const FiniteElementData &fe1, diff --git a/tests/hp/hp_line_dof_identities_q_system.cc b/tests/hp/hp_line_dof_identities_q_system.cc new file mode 100644 index 0000000000..e69bbc6747 --- /dev/null +++ b/tests/hp/hp_line_dof_identities_q_system.cc @@ -0,0 +1,75 @@ +//---------------------------- 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 +#include +#include +#include + +#include + + +template +void test () +{ + hp::FECollection fe_collection; + for (unsigned int i=1; i<8-dim; ++i) + fe_collection.push_back (FESystem(FE_Q(i),3)); + + for (unsigned int i=0; i > + 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 (); + test<2> (); + test<3> (); + + deallog << "OK" << std::endl; +} diff --git a/tests/hp/hp_line_dof_identities_q_system/cmp/generic b/tests/hp/hp_line_dof_identities_q_system/cmp/generic new file mode 100644 index 0000000000..f3a252b816 --- /dev/null +++ b/tests/hp/hp_line_dof_identities_q_system/cmp/generic @@ -0,0 +1,214 @@ + +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 diff --git a/tests/hp/hp_quad_dof_identities_q_system.cc b/tests/hp/hp_quad_dof_identities_q_system.cc new file mode 100644 index 0000000000..6a4a152af5 --- /dev/null +++ b/tests/hp/hp_quad_dof_identities_q_system.cc @@ -0,0 +1,74 @@ +//---------------------------- 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 +#include +#include +#include + +#include + + +template +void test () +{ + hp::FECollection fe_collection; + for (unsigned int i=1; i<8-dim; ++i) + fe_collection.push_back (FESystem(FE_Q(i),3)); + + for (unsigned int i=0; i > + 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 (); + test<3> (); + + deallog << "OK" << std::endl; +} diff --git a/tests/hp/hp_quad_dof_identities_q_system/cmp/generic b/tests/hp/hp_quad_dof_identities_q_system/cmp/generic new file mode 100644 index 0000000000..a345f27f6e --- /dev/null +++ b/tests/hp/hp_quad_dof_identities_q_system/cmp/generic @@ -0,0 +1,187 @@ + +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 diff --git a/tests/hp/hp_vertex_dof_identities_q_system.cc b/tests/hp/hp_vertex_dof_identities_q_system.cc new file mode 100644 index 0000000000..8568a46095 --- /dev/null +++ b/tests/hp/hp_vertex_dof_identities_q_system.cc @@ -0,0 +1,75 @@ +//---------------------------- 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 +#include +#include +#include + +#include + + +template +void test () +{ + hp::FECollection fe_collection; + for (unsigned int i=1; i<8-dim; ++i) + fe_collection.push_back (FESystem(FE_Q(i),3)); + + for (unsigned int i=0; i > + 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 (); + test<2> (); + test<3> (); + + deallog << "OK" << std::endl; +} diff --git a/tests/hp/hp_vertex_dof_identities_q_system/cmp/generic b/tests/hp/hp_vertex_dof_identities_q_system/cmp/generic new file mode 100644 index 0000000000..af0f7f6a6d --- /dev/null +++ b/tests/hp/hp_vertex_dof_identities_q_system/cmp/generic @@ -0,0 +1,310 @@ + +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