--- /dev/null
+//---------------------------- face_interpolation.cc ---------------------------
+// $Id$
+// 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.
+//
+//---------------------------- face_interpolation.cc ---------------------------
+
+#include "../tests.h"
+#include "fe_tools_common.cc"
+
+// check
+// FE::face_interpolation
+
+
+std::string output_file_name = "face_interpolation/output";
+
+
+
+template <int dim>
+void
+check_this (const FiniteElement<dim> &fe1,
+ const FiniteElement<dim> &fe2)
+{
+ if (dim == 1)
+ return;
+
+ // check all combinations of fe1 and fe2
+ FullMatrix<double> face_constraints;
+ try
+ {
+ face_constraints.reinit (fe1.dofs_per_face,
+ fe1.dofs_per_face);
+ fe1.get_face_interpolation_matrix (fe1, face_constraints);
+
+ deallog << fe1.get_name()
+ << " vs. "
+ << fe1.get_name()
+ << std::endl;
+ output_matrix (face_constraints);
+ }
+ catch (...)
+ {
+ }
+
+ try
+ {
+ face_constraints.reinit (fe2.dofs_per_face,
+ fe2.dofs_per_face);
+ fe2.get_face_interpolation_matrix (fe2, face_constraints);
+
+ deallog << fe2.get_name()
+ << " vs. "
+ << fe2.get_name()
+ << std::endl;
+ output_matrix (face_constraints);
+ }
+ catch (...)
+ {
+ }
+
+ if (fe1.dofs_per_face <= fe2.dofs_per_face)
+ try
+ {
+ face_constraints.reinit (fe1.dofs_per_face,
+ fe2.dofs_per_face);
+ fe1.get_face_interpolation_matrix (fe2, face_constraints);
+
+ deallog << fe1.get_name()
+ << " vs. "
+ << fe2.get_name()
+ << std::endl;
+ output_matrix (face_constraints);
+ }
+ catch (...)
+ {
+ }
+
+ if (fe2.dofs_per_face <= fe1.dofs_per_face)
+ try
+ {
+ face_constraints.reinit (fe2.dofs_per_face,
+ fe1.dofs_per_face);
+ fe2.get_face_interpolation_matrix (fe1, face_constraints);
+
+ deallog << fe2.get_name()
+ << " vs. "
+ << fe1.get_name()
+ << std::endl;
+ output_matrix (face_constraints);
+ }
+ catch (...)
+ {
+ }
+}
+
--- /dev/null
+
+DEAL::Checking Q1 against Q1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q1 against Q3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q2 against Q3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Q3 against Q3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ4 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ4 against DGQ0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ4 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ4 against DGQ0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ0 against DGQ4 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ4 against DGQ0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ1 against DGQ3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ4 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ4 against DGQ2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ4 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ4 against DGQ2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ2 against DGQ4 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ4 against DGQ2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGQ3 against DGQ3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP4 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP4 against DGP0 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP4 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP4 against DGP0 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP0 against DGP4 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP4 against DGP0 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP1 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP1 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP1 against DGP3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP1 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP4 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP4 against DGP2 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP4 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP4 against DGP2 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP2 against DGP4 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP4 against DGP2 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP3 in 1d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP3 in 2d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking DGP3 against DGP3 in 3d:
+DEAL::true
+DEAL::true
+DEAL::Checking Nedelec1 against Nedelec1 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking Nedelec1 against Nedelec1 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking Nedelec1 against Nedelec1 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking Nedelec1 against Nedelec1 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_Q<1>(1)3 against FE_Q<1>(2)3 in 1d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_Q<1>(2)3 against FE_Q<1>(1)3 in 1d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGQ<1>(2)2 against FE_DGQ<1>(3)2 in 1d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGQ<1>(3)2 against FE_DGQ<1>(2)2 in 1d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGP<1>(3)1 against FE_DGP<1>(1)1 in 1d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGP<1>(1)1 against FE_DGP<1>(3)1 in 1d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_Q<2>(1)3 against FE_Q<2>(2)3 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_Q<2>(2)3 against FE_Q<2>(1)3 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGQ<2>(2)2 against FE_DGQ<2>(3)2 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGQ<2>(3)2 against FE_DGQ<2>(2)2 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGP<2>(3)1 against FE_DGP<2>(1)1 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGP<2>(1)1 against FE_DGP<2>(3)1 in 2d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_Q<3>(1)3 against FE_Q<3>(2)3 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_Q<3>(2)3 against FE_Q<3>(1)3 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGQ<3>(2)2 against FE_DGQ<3>(3)2 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGQ<3>(3)2 against FE_DGQ<3>(2)2 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGP<3>(3)1 against FE_DGP<3>(1)1 in 3d:
+DEAL::false
+DEAL::false
+DEAL::Checking FE_DGP<3>(1)1 against FE_DGP<3>(3)1 in 3d:
+DEAL::false
+DEAL::false