--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2017 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+
+
+// Test the basic member variables of FEEvaluation
+
+#include "../tests.h"
+#include <deal.II/lac/constraint_matrix.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_dgp.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/dofs/dof_handler.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/matrix_free/matrix_free.h>
+#include <deal.II/matrix_free/fe_evaluation.h>
+
+
+template <typename FEEval>
+void print_info(const FEEval &eval)
+{
+ deallog << "FEEvaluation::dimension: " << FEEval::dimension << std::endl;
+ deallog << "FEEvaluation::n_components: " << FEEval::n_components << std::endl;
+ deallog << "FEEvaluation::static_n_q_points: " << FEEval::static_n_q_points << std::endl;
+ deallog << "FEEvaluation::static_dofs_per_component: " << FEEval::static_dofs_per_component << std::endl;
+ deallog << "FEEvaluation::tensor_dofs_per_cell: " << FEEval::tensor_dofs_per_cell << std::endl;
+ deallog << "FEEvaluation::static_dofs_per_cell: " << FEEval::static_dofs_per_cell << std::endl;
+ deallog << "FEEvaluation::dofs_per_component: " << eval.dofs_per_component << std::endl;
+ deallog << "FEEvaluation::dofs_per_cell: " << eval.dofs_per_cell << std::endl;
+ deallog << "FEEvaluation::n_q_points: " << eval.n_q_points << std::endl;
+}
+
+
+
+template <int dim>
+void test()
+{
+ const unsigned int degree = 1;
+ FESystem<dim> fe1(FE_Q<dim>(degree+1), dim);
+ FESystem<dim> fe2(FE_Q<dim>(degree+1), 1);
+ FESystem<dim> fe3(FE_DGP<dim>(degree+1), 2);
+ FESystem<dim> fe4(FE_Q<dim>(degree), 1);
+ std::vector<FiniteElement<dim> *> fes {&fe1, &fe2, &fe3, &fe4};
+
+ Triangulation<dim> tria;
+ GridGenerator::hyper_cube(tria);
+ DoFHandler<dim> dof(tria);
+ for (unsigned int i=0; i<fes.size(); ++i)
+ {
+ deallog << "Checking " << fes[i]->get_name() << std::endl;
+ dof.distribute_dofs(*fes[i]);
+ MatrixFree<dim> matrix_free;
+ matrix_free.reinit(dof, ConstraintMatrix(), QGauss<1>(degree+3),
+ typename MatrixFree<dim>::AdditionalData());
+ if (i<2)
+ {
+ FEEvaluation<dim,degree+1,degree+3,dim> phi(matrix_free);
+ print_info(phi);
+ }
+ if (i!=2)
+ {
+ FEEvaluation<dim,-1,0,dim> phi(matrix_free);
+ print_info(phi);
+ }
+ if (i==2)
+ {
+ FEEvaluation<dim,degree+1,degree+3,2> phi(matrix_free);
+ print_info(phi);
+ }
+ }
+}
+
+
+
+int main ()
+{
+ initlog();
+ test<1>();
+ test<2>();
+ test<3>();
+}
--- /dev/null
+
+DEAL::Checking FESystem<1>[FE_Q<1>(2)]
+DEAL::FEEvaluation::dimension: 1
+DEAL::FEEvaluation::n_components: 1
+DEAL::FEEvaluation::static_n_q_points: 4
+DEAL::FEEvaluation::static_dofs_per_component: 3
+DEAL::FEEvaluation::tensor_dofs_per_cell: 3
+DEAL::FEEvaluation::static_dofs_per_cell: 3
+DEAL::FEEvaluation::dofs_per_component: 3
+DEAL::FEEvaluation::dofs_per_cell: 3
+DEAL::FEEvaluation::n_q_points: 4
+DEAL::FEEvaluation::dimension: 1
+DEAL::FEEvaluation::n_components: 1
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 3
+DEAL::FEEvaluation::dofs_per_cell: 3
+DEAL::FEEvaluation::n_q_points: 4
+DEAL::Checking FESystem<1>[FE_Q<1>(2)]
+DEAL::FEEvaluation::dimension: 1
+DEAL::FEEvaluation::n_components: 1
+DEAL::FEEvaluation::static_n_q_points: 4
+DEAL::FEEvaluation::static_dofs_per_component: 3
+DEAL::FEEvaluation::tensor_dofs_per_cell: 3
+DEAL::FEEvaluation::static_dofs_per_cell: 3
+DEAL::FEEvaluation::dofs_per_component: 3
+DEAL::FEEvaluation::dofs_per_cell: 3
+DEAL::FEEvaluation::n_q_points: 4
+DEAL::FEEvaluation::dimension: 1
+DEAL::FEEvaluation::n_components: 1
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 3
+DEAL::FEEvaluation::dofs_per_cell: 3
+DEAL::FEEvaluation::n_q_points: 4
+DEAL::Checking FESystem<1>[FE_DGP<1>(2)^2]
+DEAL::FEEvaluation::dimension: 1
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 4
+DEAL::FEEvaluation::static_dofs_per_component: 3
+DEAL::FEEvaluation::tensor_dofs_per_cell: 6
+DEAL::FEEvaluation::static_dofs_per_cell: 6
+DEAL::FEEvaluation::dofs_per_component: 3
+DEAL::FEEvaluation::dofs_per_cell: 6
+DEAL::FEEvaluation::n_q_points: 4
+DEAL::Checking FESystem<1>[FE_Q<1>(1)]
+DEAL::FEEvaluation::dimension: 1
+DEAL::FEEvaluation::n_components: 1
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 2
+DEAL::FEEvaluation::dofs_per_cell: 2
+DEAL::FEEvaluation::n_q_points: 4
+DEAL::Checking FESystem<2>[FE_Q<2>(2)^2]
+DEAL::FEEvaluation::dimension: 2
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 16
+DEAL::FEEvaluation::static_dofs_per_component: 9
+DEAL::FEEvaluation::tensor_dofs_per_cell: 18
+DEAL::FEEvaluation::static_dofs_per_cell: 18
+DEAL::FEEvaluation::dofs_per_component: 9
+DEAL::FEEvaluation::dofs_per_cell: 18
+DEAL::FEEvaluation::n_q_points: 16
+DEAL::FEEvaluation::dimension: 2
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 9
+DEAL::FEEvaluation::dofs_per_cell: 18
+DEAL::FEEvaluation::n_q_points: 16
+DEAL::Checking FESystem<2>[FE_Q<2>(2)]
+DEAL::FEEvaluation::dimension: 2
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 16
+DEAL::FEEvaluation::static_dofs_per_component: 9
+DEAL::FEEvaluation::tensor_dofs_per_cell: 18
+DEAL::FEEvaluation::static_dofs_per_cell: 18
+DEAL::FEEvaluation::dofs_per_component: 9
+DEAL::FEEvaluation::dofs_per_cell: 18
+DEAL::FEEvaluation::n_q_points: 16
+DEAL::FEEvaluation::dimension: 2
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 9
+DEAL::FEEvaluation::dofs_per_cell: 18
+DEAL::FEEvaluation::n_q_points: 16
+DEAL::Checking FESystem<2>[FE_DGP<2>(2)^2]
+DEAL::FEEvaluation::dimension: 2
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 16
+DEAL::FEEvaluation::static_dofs_per_component: 9
+DEAL::FEEvaluation::tensor_dofs_per_cell: 18
+DEAL::FEEvaluation::static_dofs_per_cell: 18
+DEAL::FEEvaluation::dofs_per_component: 6
+DEAL::FEEvaluation::dofs_per_cell: 12
+DEAL::FEEvaluation::n_q_points: 16
+DEAL::Checking FESystem<2>[FE_Q<2>(1)]
+DEAL::FEEvaluation::dimension: 2
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 4
+DEAL::FEEvaluation::dofs_per_cell: 8
+DEAL::FEEvaluation::n_q_points: 16
+DEAL::Checking FESystem<3>[FE_Q<3>(2)^3]
+DEAL::FEEvaluation::dimension: 3
+DEAL::FEEvaluation::n_components: 3
+DEAL::FEEvaluation::static_n_q_points: 64
+DEAL::FEEvaluation::static_dofs_per_component: 27
+DEAL::FEEvaluation::tensor_dofs_per_cell: 81
+DEAL::FEEvaluation::static_dofs_per_cell: 81
+DEAL::FEEvaluation::dofs_per_component: 27
+DEAL::FEEvaluation::dofs_per_cell: 81
+DEAL::FEEvaluation::n_q_points: 64
+DEAL::FEEvaluation::dimension: 3
+DEAL::FEEvaluation::n_components: 3
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 27
+DEAL::FEEvaluation::dofs_per_cell: 81
+DEAL::FEEvaluation::n_q_points: 64
+DEAL::Checking FESystem<3>[FE_Q<3>(2)]
+DEAL::FEEvaluation::dimension: 3
+DEAL::FEEvaluation::n_components: 3
+DEAL::FEEvaluation::static_n_q_points: 64
+DEAL::FEEvaluation::static_dofs_per_component: 27
+DEAL::FEEvaluation::tensor_dofs_per_cell: 81
+DEAL::FEEvaluation::static_dofs_per_cell: 81
+DEAL::FEEvaluation::dofs_per_component: 27
+DEAL::FEEvaluation::dofs_per_cell: 81
+DEAL::FEEvaluation::n_q_points: 64
+DEAL::FEEvaluation::dimension: 3
+DEAL::FEEvaluation::n_components: 3
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 27
+DEAL::FEEvaluation::dofs_per_cell: 81
+DEAL::FEEvaluation::n_q_points: 64
+DEAL::Checking FESystem<3>[FE_DGP<3>(2)^2]
+DEAL::FEEvaluation::dimension: 3
+DEAL::FEEvaluation::n_components: 2
+DEAL::FEEvaluation::static_n_q_points: 64
+DEAL::FEEvaluation::static_dofs_per_component: 27
+DEAL::FEEvaluation::tensor_dofs_per_cell: 54
+DEAL::FEEvaluation::static_dofs_per_cell: 54
+DEAL::FEEvaluation::dofs_per_component: 10
+DEAL::FEEvaluation::dofs_per_cell: 20
+DEAL::FEEvaluation::n_q_points: 64
+DEAL::Checking FESystem<3>[FE_Q<3>(1)]
+DEAL::FEEvaluation::dimension: 3
+DEAL::FEEvaluation::n_components: 3
+DEAL::FEEvaluation::static_n_q_points: 0
+DEAL::FEEvaluation::static_dofs_per_component: 0
+DEAL::FEEvaluation::tensor_dofs_per_cell: 0
+DEAL::FEEvaluation::static_dofs_per_cell: 0
+DEAL::FEEvaluation::dofs_per_component: 8
+DEAL::FEEvaluation::dofs_per_cell: 24
+DEAL::FEEvaluation::n_q_points: 64