From: Matthias Maier Date: Fri, 1 Sep 2017 03:09:55 +0000 (-0500) Subject: Add an interpolation test for FE_Nedelec X-Git-Tag: v9.0.0-rc1~1106^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F5005%2Fhead;p=dealii.git Add an interpolation test for FE_Nedelec --- diff --git a/tests/fe/interpolate_nedelec.cc b/tests/fe/interpolate_nedelec.cc new file mode 100644 index 0000000000..a98aa4568e --- /dev/null +++ b/tests/fe/interpolate_nedelec.cc @@ -0,0 +1,70 @@ +// --------------------------------------------------------------------- +// +// 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. +// +// --------------------------------------------------------------------- + + +#include "interpolate_common.h" +#include + +#include + + +// FE_Nedelec::interpolate(...) + +template +void check1(const Function &f, + const unsigned int degree) +{ + FE_Nedelec fe(degree); + deallog << fe.get_name() << ' '; + deallog << fe.get_generalized_support_points().size() << ' '; + + std::vector dofs(fe.dofs_per_cell); + + std::vector > values (fe.get_generalized_support_points().size(), + Vector(dim)); + f.vector_value_list(fe.get_generalized_support_points(), values); + fe.convert_generalized_support_point_values_to_dof_values(values, dofs); + deallog << " vector " << vector_difference(fe,dofs,f,0) << std::endl; +} + +int main() +{ + std::ofstream logfile ("output"); + deallog.attach(logfile); + + { + Q1WedgeFunction<2, 0, 2> w20; + check1(w20, 0); + check1(w20, 1); + check1(w20, 2); + Q1WedgeFunction<2, 1, 2> w21; + check1(w21, 2); + Q1WedgeFunction<2, 2, 2> w22; + check1(w22, 2); + Q1WedgeFunction<2, 3, 2> w23; + check1(w23, 3); + } + + { + Q1WedgeFunction<3, 1, 3> w21; + check1(w21, 1); + check1(w21, 2); + // FIXME - higher order interpolation is currently broken + // Q1WedgeFunction<3, 2, 3> w22; + // check1(w22, 2); + // Q1WedgeFunction<3, 3, 3> w23; + // check1(w23, 3); + } +} diff --git a/tests/fe/interpolate_nedelec.output b/tests/fe/interpolate_nedelec.output new file mode 100644 index 0000000000..aeb8cd57d6 --- /dev/null +++ b/tests/fe/interpolate_nedelec.output @@ -0,0 +1,9 @@ + +DEAL::FE_Nedelec<2>(0) 4 vector 0.00000 +DEAL::FE_Nedelec<2>(1) 12 vector 0.00000 +DEAL::FE_Nedelec<2>(2) 21 vector 5.55112e-17 +DEAL::FE_Nedelec<2>(2) 21 vector 1.11022e-16 +DEAL::FE_Nedelec<2>(2) 21 vector 1.58727e-16 +DEAL::FE_Nedelec<2>(3) 32 vector 1.17788e-15 +DEAL::FE_Nedelec<3>(1) 56 vector 5.55112e-17 +DEAL::FE_Nedelec<3>(2) 117 vector 1.11022e-16