From b9fc72fdb6df6085bc051ec84287f1aabf5cbb21 Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Sun, 2 Jul 2023 17:20:52 -0500 Subject: [PATCH] Tests: remove fail category --- tests/fail/abf_approximation_01.cc | 531 --- tests/fail/arclength_boundary_02.cc | 62 - tests/fail/arclength_boundary_02.output | 151 - tests/fail/circular_01.cc | 888 ----- tests/fail/fe_nothing_04.cc | 110 - tests/fail/hp-step-14.cc | 2154 ---------- tests/fail/hp-step-15.cc | 646 --- tests/fail/hp_constraints_q_08.cc | 34 - tests/fail/hp_constraints_q_system_08.cc | 36 - tests/fail/hp_constraints_q_system_x_08.cc | 40 - tests/fail/hp_constraints_rt_01.cc | 39 - tests/fail/hp_constraints_rt_02.cc | 39 - tests/fail/hp_constraints_rt_03.cc | 39 - tests/fail/hp_constraints_rt_04.cc | 39 - tests/fail/hp_constraints_rt_05.cc | 39 - tests/fail/hp_constraints_rt_06.cc | 44 - tests/fail/injection_dgp.cc | 31 - tests/fail/injection_dgp_nonparametric.cc | 31 - tests/fail/injection_nedelec.cc | 34 - tests/fail/injection_q_hierarchical.cc | 31 - tests/fail/injection_rt.cc | 34 - tests/fail/project_abf_01.cc | 33 - tests/fail/project_abf_02.cc | 33 - tests/fail/project_abf_03.cc | 33 - tests/fail/project_abf_04.cc | 33 - tests/fail/project_abf_05.cc | 33 - tests/fail/project_dgp_nonparametric_01.cc | 33 - tests/fail/project_dgp_nonparametric_02.cc | 33 - tests/fail/project_dgp_nonparametric_03.cc | 33 - tests/fail/project_dgp_nonparametric_04.cc | 33 - tests/fail/project_dgp_nonparametric_05.cc | 33 - tests/fail/project_q_hierarchical_03.cc | 29 - tests/fail/project_q_hierarchical_03.output | 78 - tests/fail/project_rt_03.cc | 36 - tests/fail/rt/rt.gpl | 184 - tests/fail/rt_4.cc | 68 - tests/fail/rt_6.cc | 173 - tests/fail/rt_crash_01.cc | 101 - tests/fail/rt_distorted_01.cc | 471 --- tests/fail/rt_distorted_02.cc | 447 --- tests/fail/scalapack_15_b.cc | 221 -- tests/fail/scalapack_15_b.mpirun=1.output | 30 - tests/fail/scalapack_15_b.mpirun=10.output | 30 - tests/fail/scalapack_15_b.mpirun=4.output | 30 - tests/fail/scalapack_15_b.mpirun=5.output | 30 - tests/fail/step-15.cc | 624 --- tests/fail/step-15.output | 3961 ------------------- tests/fail/vectors_boundary_rhs_hp_02.cc | 142 - tests/fail/vectors_rhs_hp_02.cc | 141 - 49 files changed, 12178 deletions(-) delete mode 100644 tests/fail/abf_approximation_01.cc delete mode 100644 tests/fail/arclength_boundary_02.cc delete mode 100644 tests/fail/arclength_boundary_02.output delete mode 100644 tests/fail/circular_01.cc delete mode 100644 tests/fail/fe_nothing_04.cc delete mode 100644 tests/fail/hp-step-14.cc delete mode 100644 tests/fail/hp-step-15.cc delete mode 100644 tests/fail/hp_constraints_q_08.cc delete mode 100644 tests/fail/hp_constraints_q_system_08.cc delete mode 100644 tests/fail/hp_constraints_q_system_x_08.cc delete mode 100644 tests/fail/hp_constraints_rt_01.cc delete mode 100644 tests/fail/hp_constraints_rt_02.cc delete mode 100644 tests/fail/hp_constraints_rt_03.cc delete mode 100644 tests/fail/hp_constraints_rt_04.cc delete mode 100644 tests/fail/hp_constraints_rt_05.cc delete mode 100644 tests/fail/hp_constraints_rt_06.cc delete mode 100644 tests/fail/injection_dgp.cc delete mode 100644 tests/fail/injection_dgp_nonparametric.cc delete mode 100644 tests/fail/injection_nedelec.cc delete mode 100644 tests/fail/injection_q_hierarchical.cc delete mode 100644 tests/fail/injection_rt.cc delete mode 100644 tests/fail/project_abf_01.cc delete mode 100644 tests/fail/project_abf_02.cc delete mode 100644 tests/fail/project_abf_03.cc delete mode 100644 tests/fail/project_abf_04.cc delete mode 100644 tests/fail/project_abf_05.cc delete mode 100644 tests/fail/project_dgp_nonparametric_01.cc delete mode 100644 tests/fail/project_dgp_nonparametric_02.cc delete mode 100644 tests/fail/project_dgp_nonparametric_03.cc delete mode 100644 tests/fail/project_dgp_nonparametric_04.cc delete mode 100644 tests/fail/project_dgp_nonparametric_05.cc delete mode 100644 tests/fail/project_q_hierarchical_03.cc delete mode 100644 tests/fail/project_q_hierarchical_03.output delete mode 100644 tests/fail/project_rt_03.cc delete mode 100644 tests/fail/rt/rt.gpl delete mode 100644 tests/fail/rt_4.cc delete mode 100644 tests/fail/rt_6.cc delete mode 100644 tests/fail/rt_crash_01.cc delete mode 100644 tests/fail/rt_distorted_01.cc delete mode 100644 tests/fail/rt_distorted_02.cc delete mode 100644 tests/fail/scalapack_15_b.cc delete mode 100644 tests/fail/scalapack_15_b.mpirun=1.output delete mode 100644 tests/fail/scalapack_15_b.mpirun=10.output delete mode 100644 tests/fail/scalapack_15_b.mpirun=4.output delete mode 100644 tests/fail/scalapack_15_b.mpirun=5.output delete mode 100644 tests/fail/step-15.cc delete mode 100644 tests/fail/step-15.output delete mode 100644 tests/fail/vectors_boundary_rhs_hp_02.cc delete mode 100644 tests/fail/vectors_rhs_hp_02.cc diff --git a/tests/fail/abf_approximation_01.cc b/tests/fail/abf_approximation_01.cc deleted file mode 100644 index 11db1deeee..0000000000 --- a/tests/fail/abf_approximation_01.cc +++ /dev/null @@ -1,531 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2003 - 2023 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - -/* - * check the projection error for a given polynomial. results should - * be within rounding error if the polynomial is of low-enough order - * to be represented by the ansatz space - * - * Like rt_approximation_01, but for ABF elements - */ - - - -#include "../tests.h" - -#define PRECISION 2 - - -char buf[1000]; - - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - - - -template -class TestMap1 : public Function -{ -public: - TestMap1(const unsigned int n_components) - : Function(n_components) - {} - - virtual ~TestMap1() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - - -template -double -TestMap1::value(const Point &p, const unsigned int component) const -{ - // u = x^2, v = y^2, dudx = 2 x, dvdy = 2 y, div u = 2x + 2y - // I.e. \int div u = 2 (for unit square) - - if (component == 0) - return (p(0) * p(0)); - if (component == 1) - return (p(1) * p(1)); - - return (0); -} - - -template -void -TestMap1::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - - // Just fill the vector with the appropriate components - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - - -///----------------------------------------------------------------------- - -template -class TestDef1 : public Function -{ -private: - const double phi; - -public: - TestDef1(const unsigned int n_components, const double ph) - : Function(n_components) - , phi(ph) - {} - - virtual ~TestDef1() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - - -template -double -TestDef1::value(const Point &p, const unsigned int component) const -{ - Point<2> center; - center(0) = 0.5; - center(1) = 0.5; - double rad = p.distance(center), - phi_p = atan2(p(0) - center(0), p(1) - center(1)); - - if (component == 0) - return rad * (sin(phi + phi_p) - sin(phi_p)); - else - return rad * (cos(phi + phi_p) - cos(phi_p)); -} - - -template -void -TestDef1::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - -///----------------------------------------------------------------------- - - -template -class TestDef2 : public Function -{ -private: - const double scale; - -public: - TestDef2(const unsigned int n_components, const double sc) - : Function(n_components) - , scale(sc) - {} - - virtual ~TestDef2() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestDef2::value(const Point &p, const unsigned int component) const -{ - double x = p(0), y = p(1); - - if (component == 0) - return scale * x; - else - return scale * y; -} - - -template -void -TestDef2::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - -///----------------------------------------------------------------------- -// testDef3 implements parallelograms ... - - -template -class TestDef3 : public Function -{ -private: - const double scale; - -public: - TestDef3(const unsigned int n_components, const double sc) - : Function(n_components) - , scale(sc) - {} - - virtual ~TestDef3() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestDef3::value(const Point &p, const unsigned int component) const -{ - double y = p(1); - - if (component == 0) - return scale * y; - else - return 0; -} - - -template -void -TestDef3::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - -// Wrapper class for polynomials. - -template -class TestPoly : public Function -{ -private: - std::vector> polys; - -public: - TestPoly(unsigned int deg) - : Function(2) - { - std::vector coeff(deg, 0.0); - for (unsigned int p = 0; p < 4; ++p) - { - for (unsigned int i = 0; i < deg; ++i) - { - double c = ((double)Testing::rand()) / ((double)RAND_MAX + 1); - coeff[i] = c; - } - polys.push_back(Polynomials::Polynomial(coeff)); - } - } - - virtual ~TestPoly() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestPoly::value(const Point &p, const unsigned int component) const -{ - double x = p(0), y = p(1); - - // Ugly hack, but should do the job ... - if (component == 0) - return polys[0].value(x) + polys[1].value(y); - else - return polys[2].value(x) + polys[3].value(y); -} - - -template -void -TestPoly::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - - -/* - * Check the value of the derivative field. - */ - -double -TestProjection(Mapping<2> &mapping, DoFHandler<2> *dof_handler) -{ - Vector solution; - solution.reinit(dof_handler->n_dofs()); - - // Create and Project test function to H_div space and evaluate the error - // If the error is in the range of machine precision, this polynomial - // degree can obviously be represented by projected field. - - for (unsigned int deg = 1; deg < 4; ++deg) - { - TestPoly<2> pol(deg); - - // Project solution onto RT FE field - AffineConstraints hn_constraints; - hn_constraints.clear(); - DoFTools::make_hanging_node_constraints(*dof_handler, hn_constraints); - hn_constraints.close(); - VectorTools::project( - mapping, *dof_handler, hn_constraints, QGauss<2>(6), pol, solution); - - // Now evaluate error ... - // Use a high order quadrature. - QGauss<2> quad(6); - FEValues<2> fe_values(mapping, - dof_handler->get_fe(), - quad, - UpdateFlags(update_values | - update_quadrature_points | - update_gradients | update_JxW_values | - update_contravariant_transformation)); - - const unsigned int n_q_points = quad.size(); - const unsigned int n_components = dof_handler->get_fe().n_components(); - - // Cell iterators - DoFHandler<2>::active_cell_iterator cell = dof_handler->begin_active(), - endc = dof_handler->end(); - - double err_u = 0, err_v = 0; - - for (; cell != endc; ++cell) - { - fe_values.reinit(cell); - - // Get values from solution vector (For Trap.Rule) - std::vector> this_value(n_q_points, - Vector(n_components)); - fe_values.get_function_values(solution, this_value); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - { - double u = this_value[q_point](0), v = this_value[q_point](1); - Point<2> p = fe_values.quadrature_point(q_point); - - double u_ex = pol.value(p, 0), v_ex = pol.value(p, 1); - - double JxW = fe_values.JxW(q_point); - - err_u += (u - u_ex) * (u - u_ex) * JxW; - err_v += (v - v_ex) * (v - v_ex) * JxW; - } - } - - sprintf(buf, "Deg %i ErrU %e ErrV %e\n", deg, err_u, err_v); - deallog << buf; - } - - - // Test the core functionality - DataOut<2> *data_out = new DataOut<2>; - data_out->attach_dof_handler(*dof_handler); - data_out->add_data_vector(solution, "solution"); - data_out->build_patches(mapping, 4); - - data_out->write_gnuplot(deallog.get_file_stream()); - - delete data_out; - - return (0.0); -} - - -int -main() -{ - initlog(); - deallog.get_file_stream().precision(PRECISION); - deallog.get_file_stream().setf(std::ios::fixed); - - Triangulation<2> tria_test; - DoFHandler<2> * dof_handler, *dof_handler_def; - Point<2> p1(0, 0), p2(1, 1); - - GridGenerator::hyper_rectangle(tria_test, p1, p2); - // tria_test.refine_global (1); - // GridTools::distort_random (0.4, tria_test); - - // Create a DoFHandler for the ABF space - FE_ABF<2> fe(0); - dof_handler = new DoFHandler<2>(tria_test); - dof_handler->distribute_dofs(fe); - - QGauss<2> quad_temp(6); - sprintf(buf, - "DoFs per Quad: %i per Line %i per Vert %i\n", - fe.dofs_per_quad, - fe.dofs_per_line, - fe.dofs_per_vertex); - deallog << buf; - sprintf(buf, "QPoints %i\n", quad_temp.size()); - deallog << buf; - - // Create an deformation object for the Eulerian mapping - FESystem<2> fe_def(FE_Q<2>(1), 2); - dof_handler_def = new DoFHandler<2>(tria_test); - dof_handler_def->distribute_dofs(fe_def); - - // Alloc some DoFs - Vector solution, solution_q, deformation; - solution.reinit(dof_handler->n_dofs()); - solution_q.reinit(dof_handler->n_dofs()); - deformation.reinit(dof_handler_def->n_dofs()); - - AffineConstraints hn_constraints_def; - hn_constraints_def.clear(); - DoFTools::make_hanging_node_constraints(*dof_handler_def, hn_constraints_def); - hn_constraints_def.close(); - - { - MappingQ1Eulerian<2> mapping_euler(deformation, *dof_handler_def); - - // Try rotating the elements - for (double rotat = 0; rotat < 2 * numbers::PI; rotat += 0.25 * numbers::PI) - { - // Rotate element - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef1<2>(2, rotat), - deformation); - sprintf(buf, "phi = %e\n", rotat); - deallog << buf; - TestProjection(mapping_euler, dof_handler); - } - - // Try resizing the elements - for (double scale = -0.75; scale < 4.0; scale += 0.25) - { - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef2<2>(2, scale), - deformation); - sprintf(buf, "Scale = %e\n", scale); - deallog << buf; - TestProjection(mapping_euler, dof_handler); - } - - // Try paralellogramming the elements - for (double scale = -1.0; scale < 1.0; scale += 0.25) - { - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef3<2>(2, scale), - deformation); - sprintf(buf, "Scale = %e\n", scale); - deallog << buf; - TestProjection(mapping_euler, dof_handler); - } - - // Try arbitrary deformation ... - for (unsigned int i = 0; i < deformation.size(); ++i) - { - double c = ((double)Testing::rand()) / ((double)RAND_MAX + 1); - deformation(i) = 0.35 * (c - 0.5); - } - - sprintf(buf, "Arbitrary\n"); - deallog << buf; - TestProjection(mapping_euler, dof_handler); - } - - delete (dof_handler); - delete (dof_handler_def); - - return (0); -} diff --git a/tests/fail/arclength_boundary_02.cc b/tests/fail/arclength_boundary_02.cc deleted file mode 100644 index dfdc67ec93..0000000000 --- a/tests/fail/arclength_boundary_02.cc +++ /dev/null @@ -1,62 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2014 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include "../tests.h" - -// Create a Triangulation, interpolate its boundary points to a smooth -// BSpline, and use that as an arlength Boundary Descriptor. - -using namespace OpenCASCADE; - -int -main() -{ - std::ofstream logfile("output"); - - // Create a bspline passign through the points - std::vector> pts; - pts.push_back(Point<2>(0, 0)); - pts.push_back(Point<2>(0, 1)); - pts.push_back(Point<2>(1, 1)); - pts.push_back(Point<2>(1, 0)); - - TopoDS_Edge edge = interpolation_curve(pts, Tensor<1, 2>(), true); - ArclengthProjectionLineManifold<2, 2> manifold(edge); - - Triangulation<2> tria; - GridGenerator::hyper_cube(tria); - - tria.set_all_manifold_ids_on_boundary(1); - tria.begin_active()->face(2)->set_manifold_id(numbers::flat_manifold_id); - tria.set_manifold(1, manifold); - - tria.refine_global(3); - GridOut gridout; - gridout.write_msh(tria, logfile); - - return 0; -} diff --git a/tests/fail/arclength_boundary_02.output b/tests/fail/arclength_boundary_02.output deleted file mode 100644 index fea54f20a8..0000000000 --- a/tests/fail/arclength_boundary_02.output +++ /dev/null @@ -1,151 +0,0 @@ -$NOD -81 -1 0 0 0 -2 1 0 0 -3 0 1 0 -4 1 1 0 -5 0.5 0 0 -6 -0.251337 0.515857 0 -7 1.16406 0.505545 0 -8 0.504074 1.14672 0 -9 0.4896 0.521016 0 -10 0.25 0 0 -11 0.75 0 0 -12 -0.158882 0.242372 0 -13 -0.20277 0.796991 0 -14 1.11495 0.242077 0 -15 1.13535 0.7715 0 -16 0.242844 1.10455 0 -17 0.767092 1.12113 0 -18 0.4948 0.260508 0 -19 0.496837 0.833869 0 -20 0.119131 0.518436 0 -21 0.826831 0.51328 0 -22 0.180414 0.257274 0 -23 0.79253 0.255303 0 -24 0.174797 0.80468 0 -25 0.79798 0.801633 0 -26 0.125 0 0 -27 0.375 0 0 -28 0.625 0 0 -29 0.875 0 0 -30 -0.08483 0.11767 0 -31 -0.217128 0.375124 0 -32 -0.249712 0.660431 0 -33 -0.114709 0.911629 0 -34 1.06551 0.117217 0 -35 1.1481 0.372213 0 -36 1.16089 0.639761 0 -37 1.08298 0.894921 0 -38 0.117841 1.06055 0 -39 0.372227 1.13328 0 -40 0.636548 1.14359 0 -41 0.891132 1.07494 0 -42 0.4974 0.130254 0 -43 0.4922 0.390762 0 -44 0.493218 0.677443 0 -45 0.500456 0.990296 0 -46 -0.0661032 0.517147 0 -47 0.304365 0.519726 0 -48 0.658215 0.517148 0 -49 0.995446 0.509412 0 -50 0.215207 0.128637 0 -51 0.149773 0.387855 0 -52 0.0107661 0.249823 0 -53 0.337607 0.258891 0 -54 0.771265 0.127652 0 -55 0.80968 0.384292 0 -56 0.643665 0.257905 0 -57 0.953738 0.24869 0 -58 0.146964 0.661558 0 -59 0.208821 0.954615 0 -60 -0.0139862 0.800836 0 -61 0.335817 0.819275 0 -62 0.812405 0.657456 0 -63 0.782536 0.961381 0 -64 0.647409 0.817751 0 -65 0.966663 0.786567 0 -66 0.0672094 0.124472 0 -67 0.356303 0.129445 0 -68 -0.033678 0.381489 0 -69 0.320986 0.389308 0 -70 0.634332 0.128953 0 -71 0.915373 0.123867 0 -72 0.65094 0.387527 0 -73 0.978892 0.378252 0 -74 -0.0513737 0.660995 0 -75 0.320091 0.6695 0 -76 0.0516048 0.929231 0 -77 0.354022 0.976278 0 -78 0.652812 0.667449 0 -79 0.986646 0.648609 0 -80 0.641978 0.980671 0 -81 0.927966 0.926509 0 -$ENDNOD -$ELM -64 -1 3 0 0 4 1 26 66 30 -2 3 0 0 4 26 10 50 66 -3 3 0 0 4 30 66 52 12 -4 3 0 0 4 66 50 22 52 -5 3 0 0 4 10 27 67 50 -6 3 0 0 4 27 5 42 67 -7 3 0 0 4 50 67 53 22 -8 3 0 0 4 67 42 18 53 -9 3 0 0 4 12 52 68 31 -10 3 0 0 4 52 22 51 68 -11 3 0 0 4 31 68 46 6 -12 3 0 0 4 68 51 20 46 -13 3 0 0 4 22 53 69 51 -14 3 0 0 4 53 18 43 69 -15 3 0 0 4 51 69 47 20 -16 3 0 0 4 69 43 9 47 -17 3 0 0 4 5 28 70 42 -18 3 0 0 4 28 11 54 70 -19 3 0 0 4 42 70 56 18 -20 3 0 0 4 70 54 23 56 -21 3 0 0 4 11 29 71 54 -22 3 0 0 4 29 2 34 71 -23 3 0 0 4 54 71 57 23 -24 3 0 0 4 71 34 14 57 -25 3 0 0 4 18 56 72 43 -26 3 0 0 4 56 23 55 72 -27 3 0 0 4 43 72 48 9 -28 3 0 0 4 72 55 21 48 -29 3 0 0 4 23 57 73 55 -30 3 0 0 4 57 14 35 73 -31 3 0 0 4 55 73 49 21 -32 3 0 0 4 73 35 7 49 -33 3 0 0 4 6 46 74 32 -34 3 0 0 4 46 20 58 74 -35 3 0 0 4 32 74 60 13 -36 3 0 0 4 74 58 24 60 -37 3 0 0 4 20 47 75 58 -38 3 0 0 4 47 9 44 75 -39 3 0 0 4 58 75 61 24 -40 3 0 0 4 75 44 19 61 -41 3 0 0 4 13 60 76 33 -42 3 0 0 4 60 24 59 76 -43 3 0 0 4 33 76 38 3 -44 3 0 0 4 76 59 16 38 -45 3 0 0 4 24 61 77 59 -46 3 0 0 4 61 19 45 77 -47 3 0 0 4 59 77 39 16 -48 3 0 0 4 77 45 8 39 -49 3 0 0 4 9 48 78 44 -50 3 0 0 4 48 21 62 78 -51 3 0 0 4 44 78 64 19 -52 3 0 0 4 78 62 25 64 -53 3 0 0 4 21 49 79 62 -54 3 0 0 4 49 7 36 79 -55 3 0 0 4 62 79 65 25 -56 3 0 0 4 79 36 15 65 -57 3 0 0 4 19 64 80 45 -58 3 0 0 4 64 25 63 80 -59 3 0 0 4 45 80 40 8 -60 3 0 0 4 80 63 17 40 -61 3 0 0 4 25 65 81 63 -62 3 0 0 4 65 15 37 81 -63 3 0 0 4 63 81 41 17 -64 3 0 0 4 81 37 4 41 -$ENDELM diff --git a/tests/fail/circular_01.cc b/tests/fail/circular_01.cc deleted file mode 100644 index fa068ead5d..0000000000 --- a/tests/fail/circular_01.cc +++ /dev/null @@ -1,888 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2021 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// a modified version of step-27 that crashes due to circular constraints - -char logname[] = "output"; - - -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include "../tests.h" - -// Finally, this is as in previous -// programs: - -template -class LaplaceProblem -{ -public: - LaplaceProblem(); - ~LaplaceProblem(); - - void - run(); - -private: - void - setup_system(); - void - assemble_system(); - void - solve(); - void - create_coarse_grid(); - void - refine_grid(); - void - estimate_smoothness(Vector &smoothness_indicators) const; - void - output_results(const unsigned int cycle) const; - - Triangulation triangulation; - - DoFHandler dof_handler; - hp::FECollection fe_collection; - hp::QCollection quadrature_collection; - hp::QCollection face_quadrature_collection; - - AffineConstraints hanging_node_constraints; - - SparsityPattern sparsity_pattern; - SparseMatrix system_matrix; - - Vector solution; - Vector system_rhs; - - Timer distr, condense, hang, assemble, solver; -}; - - - -template -class RightHandSide : public Function -{ -public: - RightHandSide() - : Function() - {} - - virtual double - value(const Point &p, const unsigned int component) const; -}; - - -template -double -RightHandSide::value(const Point &p, - const unsigned int /*component*/) const -{ - double product = 1; - for (unsigned int d = 0; d < dim; ++d) - product *= (p[d] + 1); - return product; -} - - - -template -LaplaceProblem::LaplaceProblem() - : dof_handler(triangulation) -{ - for (unsigned int degree = 2; degree < (dim == 2 ? 8 : 5); ++degree) - { - fe_collection.push_back(FE_Q(degree)); - quadrature_collection.push_back(QGauss(degree + 2)); - face_quadrature_collection.push_back(QGauss(degree + 2)); - } -} - - -template -LaplaceProblem::~LaplaceProblem() -{ - dof_handler.clear(); -} - -template -void -LaplaceProblem::setup_system() -{ - distr.reset(); - distr.start(); - dof_handler.distribute_dofs(fe_collection); - distr.stop(); - - solution.reinit(dof_handler.n_dofs()); - system_rhs.reinit(dof_handler.n_dofs()); - - hanging_node_constraints.clear(); - hang.reset(); - hang.start(); - DoFTools::make_hanging_node_constraints(dof_handler, - hanging_node_constraints); - - hanging_node_constraints.close(); - hang.stop(); - - if (dim < 3) - { - sparsity_pattern.reinit(dof_handler.n_dofs(), - dof_handler.n_dofs(), - dof_handler.max_couplings_between_dofs()); - DoFTools::make_sparsity_pattern(dof_handler, sparsity_pattern); - - condense.reset(); - condense.start(); - hanging_node_constraints.condense(sparsity_pattern); - condense.stop(); - sparsity_pattern.compress(); - } - else - { - DynamicSparsityPattern csp(dof_handler.n_dofs(), dof_handler.n_dofs()); - DoFTools::make_sparsity_pattern(dof_handler, csp); - - condense.reset(); - condense.start(); - hanging_node_constraints.condense(csp); - condense.stop(); - - sparsity_pattern.copy_from(csp); - } - - system_matrix.reinit(sparsity_pattern); -} - -template -void -LaplaceProblem::assemble_system() -{ - hp::FEValues hp_fe_values(fe_collection, - quadrature_collection, - update_values | update_gradients | - update_quadrature_points | - update_JxW_values); - - const RightHandSide rhs_function; - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - { - const unsigned int dofs_per_cell = cell->get_fe().dofs_per_cell; - FullMatrix cell_matrix(dofs_per_cell, dofs_per_cell); - Vector cell_rhs(dofs_per_cell); - - std::vector local_dof_indices(dofs_per_cell); - - cell_matrix = 0; - cell_rhs = 0; - - hp_fe_values.reinit(cell); - - const FEValues &fe_values = hp_fe_values.get_present_fe_values(); - - std::vector rhs_values(fe_values.n_quadrature_points); - rhs_function.value_list(fe_values.get_quadrature_points(), rhs_values); - - for (unsigned int q_point = 0; q_point < fe_values.n_quadrature_points; - ++q_point) - for (unsigned int i = 0; i < dofs_per_cell; ++i) - { - for (unsigned int j = 0; j < dofs_per_cell; ++j) - cell_matrix(i, j) += - (fe_values.shape_grad(i, q_point) * - fe_values.shape_grad(j, q_point) * fe_values.JxW(q_point)); - - cell_rhs(i) += (fe_values.shape_value(i, q_point) * - rhs_values[q_point] * fe_values.JxW(q_point)); - } - - cell->get_dof_indices(local_dof_indices); - for (unsigned int i = 0; i < dofs_per_cell; ++i) - { - for (unsigned int j = 0; j < dofs_per_cell; ++j) - system_matrix.add(local_dof_indices[i], - local_dof_indices[j], - cell_matrix(i, j)); - - system_rhs(local_dof_indices[i]) += cell_rhs(i); - } - } - - condense.start(); - hanging_node_constraints.condense(system_matrix); - hanging_node_constraints.condense(system_rhs); - condense.stop(); - std::map boundary_values; - VectorTools::interpolate_boundary_values(dof_handler, - 0, - Functions::ZeroFunction(), - boundary_values); - MatrixTools::apply_boundary_values(boundary_values, - system_matrix, - solution, - system_rhs); -} - -template -void -LaplaceProblem::solve() -{ - SolverControl solver_control(system_rhs.size(), 1e-8 * system_rhs.l2_norm()); - SolverCG<> cg(solver_control); - - PreconditionSSOR<> preconditioner; - preconditioner.initialize(system_matrix, 1.2); - - cg.solve(system_matrix, solution, system_rhs, preconditioner); - - hanging_node_constraints.distribute(solution); -} - - -unsigned int -int_pow(const unsigned int x, const unsigned int n) -{ - unsigned int p = 1; - for (unsigned int i = 0; i < n; ++i) - p *= x; - return p; -} - - -template -void -LaplaceProblem::estimate_smoothness( - Vector &smoothness_indicators) const -{ - const unsigned int N = (dim == 2 ? 7 : 4); - - // form all the Fourier vectors - // that we want to - // consider. exclude k=0 to avoid - // problems with |k|^{-mu} and also - // logarithms of |k| - std::vector> k_vectors; - std::vector k_vectors_magnitude; - switch (dim) - { - case 2: - { - for (unsigned int i = 0; i < N; ++i) - for (unsigned int j = 0; j < N; ++j) - if (!((i == 0) && (j == 0)) && (i * i + j * j < N * N)) - { - k_vectors.push_back( - Point(numbers::PI * i, numbers::PI * j)); - k_vectors_magnitude.push_back(i * i + j * j); - } - - break; - } - - case 3: - { - for (unsigned int i = 0; i < N; ++i) - for (unsigned int j = 0; j < N; ++j) - for (unsigned int k = 0; k < N; ++k) - if (!((i == 0) && (j == 0) && (k == 0)) && - (i * i + j * j + k * k < N * N)) - { - k_vectors.push_back(Point(numbers::PI * i, - numbers::PI * j, - numbers::PI * k)); - k_vectors_magnitude.push_back(i * i + j * j + k * k); - } - - break; - } - - default: - Assert(false, ExcNotImplemented()); - } - - const unsigned n_fourier_modes = k_vectors.size(); - std::vector ln_k(n_fourier_modes); - for (unsigned int i = 0; i < n_fourier_modes; ++i) - ln_k[i] = std::log(k_vectors[i].norm()); - - - // assemble the matrices that do - // the Fourier transforms for each - // of the finite elements we deal - // with. note that these matrices - // are complex-valued, so we can't - // use FullMatrix - QGauss<1> base_quadrature(2); - QIterated quadrature(base_quadrature, N); - - std::vector>> fourier_transform_matrices( - fe_collection.size()); - for (unsigned int fe = 0; fe < fe_collection.size(); ++fe) - { - fourier_transform_matrices[fe].reinit(n_fourier_modes, - fe_collection[fe].dofs_per_cell); - - for (unsigned int k = 0; k < n_fourier_modes; ++k) - for (unsigned int i = 0; i < fe_collection[fe].dofs_per_cell; ++i) - { - std::complex sum = 0; - for (unsigned int q = 0; q < quadrature.size(); ++q) - { - const Point x_q = quadrature.point(q); - sum += - std::exp(std::complex(0, 1) * (k_vectors[k] * x_q)) * - fe_collection[fe].shape_value(i, x_q) * quadrature.weight(q); - } - fourier_transform_matrices[fe](k, i) = - sum / std::pow(2 * numbers::PI, 1. * dim / 2); - } - } - - // the next thing is to loop over - // all cells and do our work there, - // i.e. to locally do the Fourier - // transform and estimate the decay - // coefficient - std::vector> fourier_coefficients(n_fourier_modes); - Vector local_dof_values; - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (unsigned int index = 0; cell != endc; ++cell, ++index) - { - local_dof_values.reinit(cell->get_fe().dofs_per_cell); - cell->get_dof_values(solution, local_dof_values); - - // first compute the Fourier - // transform of the local - // solution - std::fill(fourier_coefficients.begin(), fourier_coefficients.end(), 0); - for (unsigned int f = 0; f < n_fourier_modes; ++f) - for (unsigned int i = 0; i < cell->get_fe().dofs_per_cell; ++i) - fourier_coefficients[f] += - fourier_transform_matrices[cell->active_fe_index()](f, i) * - local_dof_values(i); - - // enter the Fourier - // coefficients into a map with - // the k-magnitudes, to make - // sure that we get only the - // largest magnitude for each - // value of |k| - std::map k_to_max_U_map; - for (unsigned int f = 0; f < n_fourier_modes; ++f) - if ((k_to_max_U_map.find(k_vectors_magnitude[f]) == - k_to_max_U_map.end()) || - (k_to_max_U_map[k_vectors_magnitude[f]] < - std::abs(fourier_coefficients[f]))) - k_to_max_U_map[k_vectors_magnitude[f]] = - std::abs(fourier_coefficients[f]); - - // now we have to calculate the - // various contributions to the - // formula for mu. we'll only - // take those fourier - // coefficients with the - // largest value for a given - // |k| - double sum_1 = 0, sum_ln_k = 0, sum_ln_k_square = 0, sum_ln_U = 0, - sum_ln_U_ln_k = 0; - for (unsigned int f = 0; f < n_fourier_modes; ++f) - if (k_to_max_U_map[k_vectors_magnitude[f]] == - std::abs(fourier_coefficients[f])) - { - sum_1 += 1; - sum_ln_k += ln_k[f]; - sum_ln_k_square += ln_k[f] * ln_k[f]; - sum_ln_U += std::log(std::abs(fourier_coefficients[f])); - sum_ln_U_ln_k += - std::log(std::abs(fourier_coefficients[f])) * ln_k[f]; - } - - const double mu = (1. / (sum_1 * sum_ln_k_square - sum_ln_k * sum_ln_k) * - (sum_ln_k * sum_ln_U - sum_1 * sum_ln_U_ln_k)); - - smoothness_indicators(index) = mu - 1. * dim / 2; - } -} - - - -template -void -LaplaceProblem::refine_grid() -{ - Vector estimated_error_per_cell(triangulation.n_active_cells()); - KellyErrorEstimator::estimate( - dof_handler, - face_quadrature_collection, - std::map *>(), - solution, - estimated_error_per_cell); - - Vector smoothness_indicators(triangulation.n_active_cells()); - estimate_smoothness(smoothness_indicators); - - GridRefinement::refine_and_coarsen_fixed_number(triangulation, - estimated_error_per_cell, - 0.3, - 0.03); - - float max_smoothness = 0, - min_smoothness = smoothness_indicators.linfty_norm(); - { - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (unsigned int index = 0; cell != endc; ++cell, ++index) - if (cell->refine_flag_set()) - { - max_smoothness = - std::max(max_smoothness, smoothness_indicators(index)); - min_smoothness = - std::min(min_smoothness, smoothness_indicators(index)); - } - } - const float cutoff_smoothness = (max_smoothness + min_smoothness) / 2; - { - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (unsigned int index = 0; cell != endc; ++cell, ++index) - if (cell->refine_flag_set() && - (smoothness_indicators(index) > cutoff_smoothness) && - !(cell->active_fe_index() == fe_collection.size() - 1)) - { - cell->clear_refine_flag(); - cell->set_active_fe_index( - std::min(cell->active_fe_index() + 1, fe_collection.size() - 1)); - } - } - - triangulation.execute_coarsening_and_refinement(); -} - - - -template -void -LaplaceProblem::output_results(const unsigned int cycle) const -{ - Assert(cycle < 10, ExcNotImplemented()); - - { - const std::string filename = - "grid-" + Utilities::int_to_string(cycle, 2) + ".eps"; - std::ofstream output(filename.c_str()); - - GridOut grid_out; - grid_out.write_eps(triangulation, output); - } - - { - Vector smoothness_indicators(triangulation.n_active_cells()); - estimate_smoothness(smoothness_indicators); - - Vector smoothness_field(dof_handler.n_dofs()); - DoFTools::distribute_cell_to_dof_vector(dof_handler, - smoothness_indicators, - smoothness_field); - - Vector fe_indices(triangulation.n_active_cells()); - { - typename DoFHandler::active_cell_iterator cell = dof_handler - .begin_active(), - endc = dof_handler.end(); - for (unsigned int index = 0; cell != endc; ++cell, ++index) - { - fe_indices(index) = cell->active_fe_index(); - // smoothness_indicators(index) *= std::sqrt(cell->diameter()); - } - } - - const std::string filename = - "solution-" + Utilities::int_to_string(cycle, 2) + ".vtk"; - DataOut data_out; - - data_out.attach_dof_handler(dof_handler); - data_out.add_data_vector(solution, "solution"); - data_out.add_data_vector(smoothness_indicators, "smoothness1"); - data_out.add_data_vector(smoothness_field, "smoothness2"); - data_out.add_data_vector(fe_indices, "fe_index"); - data_out.build_patches(); - - std::ofstream output(filename.c_str()); - data_out.write_vtk(output); - } -} - - -template <> -void -LaplaceProblem<2>::create_coarse_grid() -{ - const unsigned int dim = 2; - - static const Point<2> vertices_1[] = { - Point<2>(-1., -1.), Point<2>(-1. / 2, -1.), - Point<2>(0., -1.), Point<2>(+1. / 2, -1.), - Point<2>(+1, -1.), - - Point<2>(-1., -1. / 2.), Point<2>(-1. / 2, -1. / 2.), - Point<2>(0., -1. / 2.), Point<2>(+1. / 2, -1. / 2.), - Point<2>(+1, -1. / 2.), - - Point<2>(-1., 0.), Point<2>(-1. / 2, 0.), - Point<2>(+1. / 2, 0.), Point<2>(+1, 0.), - - Point<2>(-1., 1. / 2.), Point<2>(-1. / 2, 1. / 2.), - Point<2>(0., 1. / 2.), Point<2>(+1. / 2, 1. / 2.), - Point<2>(+1, 1. / 2.), - - Point<2>(-1., 1.), Point<2>(-1. / 2, 1.), - Point<2>(0., 1.), Point<2>(+1. / 2, 1.), - Point<2>(+1, 1.)}; - const unsigned int n_vertices = sizeof(vertices_1) / sizeof(vertices_1[0]); - const std::vector> vertices(&vertices_1[0], - &vertices_1[n_vertices]); - static const int cell_vertices[][GeometryInfo::vertices_per_cell] = { - {0, 1, 5, 6}, - {1, 2, 6, 7}, - {2, 3, 7, 8}, - {3, 4, 8, 9}, - {5, 6, 10, 11}, - {8, 9, 12, 13}, - {10, 11, 14, 15}, - {12, 13, 17, 18}, - {14, 15, 19, 20}, - {15, 16, 20, 21}, - {16, 17, 21, 22}, - {17, 18, 22, 23}}; - const unsigned int n_cells = sizeof(cell_vertices) / sizeof(cell_vertices[0]); - - std::vector> cells(n_cells, CellData()); - for (unsigned int i = 0; i < n_cells; ++i) - { - for (const unsigned int j : GeometryInfo::vertex_indices()) - cells[i].vertices[j] = cell_vertices[i][j]; - cells[i].material_id = 0; - } - - triangulation.create_triangulation(vertices, cells, SubCellData()); - triangulation.refine_global(3); -} - - - -template <> -void -LaplaceProblem<3>::create_coarse_grid() -{ - const unsigned int dim = 3; - - static const Point<3> vertices_1[] = { - // points on the lower surface - Point(0, 0, -4), - Point(std::cos(0 * numbers::PI / 6), - std::sin(0 * numbers::PI / 6), - -4), - Point(std::cos(2 * numbers::PI / 6), - std::sin(2 * numbers::PI / 6), - -4), - Point(std::cos(4 * numbers::PI / 6), - std::sin(4 * numbers::PI / 6), - -4), - Point(std::cos(6 * numbers::PI / 6), - std::sin(6 * numbers::PI / 6), - -4), - Point(std::cos(8 * numbers::PI / 6), - std::sin(8 * numbers::PI / 6), - -4), - Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - -4), - - // same points on the top - // of the stem, with - // indentation in the middle - Point(0, 0, 4 - std::sqrt(2.) / 2), - Point(std::cos(0 * numbers::PI / 6), std::sin(0 * numbers::PI / 6), 4), - Point(std::cos(2 * numbers::PI / 6), std::sin(2 * numbers::PI / 6), 4), - Point(std::cos(4 * numbers::PI / 6), std::sin(4 * numbers::PI / 6), 4), - Point(std::cos(6 * numbers::PI / 6), std::sin(6 * numbers::PI / 6), 4), - Point(std::cos(8 * numbers::PI / 6), std::sin(8 * numbers::PI / 6), 4), - Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - 4), - - // point at top of chevron - Point(0, 0, 4 + std::sqrt(2.) / 2), - - // points at the top of the - // first extension - // points 15-18 - Point(0, 0, 7) + Point(std::cos(2 * numbers::PI / 6), - std::sin(2 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(0 * numbers::PI / 6), - std::sin(0 * numbers::PI / 6), - 7) + - Point(std::cos(2 * numbers::PI / 6), - std::sin(2 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(2 * numbers::PI / 6), - std::sin(2 * numbers::PI / 6), - 7) + - Point(std::cos(2 * numbers::PI / 6), - std::sin(2 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(4 * numbers::PI / 6), - std::sin(4 * numbers::PI / 6), - 7) + - Point(std::cos(2 * numbers::PI / 6), - std::sin(2 * numbers::PI / 6), - 0) * - 4, - - // points at the top of the - // second extension - // points 19-22 - Point(0, 0, 7) + Point(std::cos(6 * numbers::PI / 6), - std::sin(6 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(4 * numbers::PI / 6), - std::sin(4 * numbers::PI / 6), - 7) + - Point(std::cos(6 * numbers::PI / 6), - std::sin(6 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(6 * numbers::PI / 6), - std::sin(6 * numbers::PI / 6), - 7) + - Point(std::cos(6 * numbers::PI / 6), - std::sin(6 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(8 * numbers::PI / 6), - std::sin(8 * numbers::PI / 6), - 7) + - Point(std::cos(6 * numbers::PI / 6), - std::sin(6 * numbers::PI / 6), - 0) * - 4, - - // points at the top of the - // third extension - // points 23-26 - Point(0, 0, 7) + Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(8 * numbers::PI / 6), - std::sin(8 * numbers::PI / 6), - 7) + - Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - 7) + - Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - 0) * - 4, - Point(std::cos(0 * numbers::PI / 6), - std::sin(0 * numbers::PI / 6), - 7) + - Point(std::cos(10 * numbers::PI / 6), - std::sin(10 * numbers::PI / 6), - 0) * - 4, - - }; - - const unsigned int n_vertices = sizeof(vertices_1) / sizeof(vertices_1[0]); - const std::vector> vertices(&vertices_1[0], - &vertices_1[n_vertices]); - static const int cell_vertices[][GeometryInfo::vertices_per_cell] = { - // the three cells in the stem - {0, 2, 4, 3, 7, 9, 11, 10}, - {6, 0, 5, 4, 13, 7, 12, 11}, - {6, 1, 0, 2, 13, 8, 7, 9}, - // the chevron at the center - {13, 8, 7, 9, 12, 14, 11, 10}, - // first extension - {14, 8, 10, 9, 15, 16, 18, 17}, - // second extension - {11, 12, 10, 14, 21, 22, 20, 19}, - // third extension - {12, 13, 14, 8, 24, 25, 23, 26}, - }; - const unsigned int n_cells = sizeof(cell_vertices) / sizeof(cell_vertices[0]); - - std::vector> cells(n_cells, CellData()); - for (unsigned int i = 0; i < n_cells; ++i) - { - for (const unsigned int j : GeometryInfo::vertex_indices()) - cells[i].vertices[j] = cell_vertices[i][j]; - cells[i].material_id = 0; - } - - triangulation.create_triangulation(vertices, cells, SubCellData()); - - for (Triangulation::active_cell_iterator cell = - triangulation.begin_active(); - cell != triangulation.end(); - ++cell) - for (const unsigned int f : GeometryInfo::face_indices()) - if ((cell->face(f)->center()[2] != -4) && - (cell->face(f)->center()[2] != 7) && (cell->face(f)->at_boundary())) - cell->face(f)->set_boundary_id(1); - - triangulation.refine_global(1); -} - - - -template -void -LaplaceProblem::run() -{ - for (unsigned int cycle = 0; cycle < 30; ++cycle) - { - deallog << "Cycle " << cycle << ':' << std::endl; - - if (cycle == 0) - create_coarse_grid(); - else - refine_grid(); - - - deallog << " Number of active cells: " - << triangulation.n_active_cells() << std::endl; - - Timer all; - all.start(); - setup_system(); - - deallog << " Number of degrees of freedom: " << dof_handler.n_dofs() - << std::endl; - deallog << " Number of constraints : " - << hanging_node_constraints.n_constraints() << std::endl; - - assemble.reset(); - assemble.start(); - assemble_system(); - assemble.stop(); - - - solver.reset(); - solver.start(); - solve(); - solver.stop(); - - all.stop(); - } -} - -int -main() -{ - std::ofstream logfile(logname); - logfile.precision(3); - - deallog.attach(logfile); - try - { - LaplaceProblem<3> laplace_problem; - laplace_problem.run(); - } - catch (const std::exception &exc) - { - std::cerr << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - std::cerr << "Exception on processing: " << std::endl - << exc.what() << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - - return 1; - } - catch (...) - { - std::cerr << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - std::cerr << "Unknown exception!" << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - } - - return 0; -} diff --git a/tests/fail/fe_nothing_04.cc b/tests/fail/fe_nothing_04.cc deleted file mode 100644 index 920296a77f..0000000000 --- a/tests/fail/fe_nothing_04.cc +++ /dev/null @@ -1,110 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2009 - 2021 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// test that FE_Nothing works as intended - - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include "../tests.h" - - - -template -void -test() -{ - Triangulation triangulation; - GridGenerator::hyper_cube(triangulation, -0.5, 0.5); - triangulation.refine_global(4); - - hp::FECollection fe_collection; - - // test the behavior of the FE_Nothing element - // in multicomponent systems (for, e.g., solving - // Stokes' equations). - - fe_collection.push_back( - FESystem(FE_RaviartThomas(0), 1, FE_DGQ(0), 1)); - - fe_collection.push_back( - FESystem(FE_Nothing(dim), 1, FE_Nothing(), 1)); - - - DoFHandler dof_handler(triangulation); - - // loop over cells, and set cells - // within a circle to be of type - // FE_Nothing, while outside the - // circle to be of type RT(0)/DG(0) - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - - for (; cell != endc; ++cell) - { - Point center = cell->center(); - if (std::sqrt(center.square()) < 0.25) - cell->set_active_fe_index(1); - else - cell->set_active_fe_index(0); - } - - // attempt to distribute dofs - - dof_handler.distribute_dofs(fe_collection); - - deallog << " Number of active cells: " - << triangulation.n_active_cells() << std::endl - << " Number of degrees of freedom: " << dof_handler.n_dofs() - << std::endl; -} - - - -int -main() -{ - initlog(); - deallog << std::setprecision(2); - - // test<1> (); - test<2>(); - test<3>(); - - deallog << "OK" << std::endl; -} diff --git a/tests/fail/hp-step-14.cc b/tests/fail/hp-step-14.cc deleted file mode 100644 index fe507ce4ef..0000000000 --- a/tests/fail/hp-step-14.cc +++ /dev/null @@ -1,2154 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2005 - 2022 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// a hp-ified version of step-14 - - -#include "../tests.h" - -std::ofstream logfile("step-14/output"); - - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - - -namespace Evaluation -{ - template - class EvaluationBase - { - public: - virtual ~EvaluationBase(); - - void - set_refinement_cycle(const unsigned int refinement_cycle); - - virtual void - operator()(const DoFHandler &dof_handler, - const Vector & solution) const = 0; - - protected: - unsigned int refinement_cycle; - }; - - - template - EvaluationBase::~EvaluationBase() - {} - - - - template - void - EvaluationBase::set_refinement_cycle(const unsigned int step) - { - refinement_cycle = step; - } - - - template - class PointValueEvaluation : public EvaluationBase - { - public: - PointValueEvaluation(const Point &evaluation_point); - - virtual void - operator()(const DoFHandler &dof_handler, - const Vector & solution) const; - - DeclException1(ExcEvaluationPointNotFound, - Point, - << "The evaluation point " << arg1 - << " was not found among the vertices of the present grid."); - - private: - const Point evaluation_point; - }; - - - template - PointValueEvaluation::PointValueEvaluation( - const Point &evaluation_point) - : evaluation_point(evaluation_point) - {} - - - - template - void - PointValueEvaluation::operator()(const DoFHandler &dof_handler, - const Vector & solution) const - { - double point_value = 1e20; - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - bool evaluation_point_found = false; - for (; (cell != endc) && !evaluation_point_found; ++cell) - for (const unsigned int vertex : GeometryInfo::vertex_indices()) - if (cell->vertex(vertex).distance(evaluation_point) < - cell->diameter() * 1e-8) - { - point_value = solution(cell->vertex_dof_index(vertex, 0)); - - evaluation_point_found = true; - break; - }; - - AssertThrow(evaluation_point_found, - ExcEvaluationPointNotFound(evaluation_point)); - - deallog << " Point value=" << point_value << std::endl; - } - - - - template - class PointXDerivativeEvaluation : public EvaluationBase - { - public: - PointXDerivativeEvaluation(const Point &evaluation_point); - - virtual void - operator()(const DoFHandler &dof_handler, - const Vector & solution) const; - - DeclException1(ExcEvaluationPointNotFound, - Point, - << "The evaluation point " << arg1 - << " was not found among the vertices of the present grid."); - - private: - const Point evaluation_point; - }; - - - template - PointXDerivativeEvaluation::PointXDerivativeEvaluation( - const Point &evaluation_point) - : evaluation_point(evaluation_point) - {} - - - template - void - PointXDerivativeEvaluation::operator()( - const DoFHandler &dof_handler, - const Vector & solution) const - { - double point_derivative = 0; - - QTrapezoid vertex_quadrature; - hp::FEValues fe_values(dof_handler.get_fe(), - vertex_quadrature, - update_gradients | update_quadrature_points); - std::vector> solution_gradients(vertex_quadrature.size()); - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - unsigned int evaluation_point_hits = 0; - for (; cell != endc; ++cell) - for (const unsigned int vertex : GeometryInfo::vertex_indices()) - if (cell->vertex(vertex) == evaluation_point) - { - fe_values.reinit(cell); - fe_values.get_present_fe_values().get_function_gradients( - solution, solution_gradients); - - unsigned int q_point = 0; - for (; q_point < solution_gradients.size(); ++q_point) - if (fe_values.get_present_fe_values().quadrature_point(q_point) == - evaluation_point) - break; - - Assert(q_point < solution_gradients.size(), ExcInternalError()); - point_derivative += solution_gradients[q_point][0]; - ++evaluation_point_hits; - - break; - }; - - AssertThrow(evaluation_point_hits > 0, - ExcEvaluationPointNotFound(evaluation_point)); - - point_derivative /= evaluation_point_hits; - deallog << " Point x-derivative=" << point_derivative << std::endl; - } - - - - template - class GridOutput : public EvaluationBase - { - public: - GridOutput(const std::string &output_name_base); - - virtual void - operator()(const DoFHandler &dof_handler, - const Vector & solution) const; - - private: - const std::string output_name_base; - }; - - - template - GridOutput::GridOutput(const std::string &output_name_base) - : output_name_base(output_name_base) - {} - - - template - void - GridOutput::operator()(const DoFHandler &dof_handler, - const Vector & /*solution*/) const - { - std::ostringstream filename; - filename << output_name_base << '-' << this->refinement_cycle << ".eps" - << std::ends; - - GridOut().write_eps(dof_handler.get_triangulation(), - deallog.get_file_stream()); - } -} // namespace Evaluation - - - -namespace LaplaceSolver -{ - template - class WeightedResidual; - - - - template - class Base - { - public: - Base(Triangulation &coarse_grid); - virtual ~Base(); - - virtual void - solve_problem() = 0; - virtual void - postprocess(const Evaluation::EvaluationBase &postprocessor) const = 0; - virtual void - refine_grid() = 0; - virtual unsigned int - n_dofs() const = 0; - - virtual void - set_refinement_cycle(const unsigned int cycle); - - virtual void - output_solution() const = 0; - - protected: - const SmartPointer> triangulation; - - unsigned int refinement_cycle; - }; - - - template - Base::Base(Triangulation &coarse_grid) - : triangulation(&coarse_grid) - {} - - - template - Base::~Base() - {} - - - - template - void - Base::set_refinement_cycle(const unsigned int cycle) - { - refinement_cycle = cycle; - } - - - - template - class Solver : public virtual Base - { - public: - Solver(Triangulation & triangulation, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & boundary_values); - virtual ~Solver(); - - virtual void - solve_problem(); - - virtual void - postprocess(const Evaluation::EvaluationBase &postprocessor) const; - - virtual unsigned int - n_dofs() const; - - protected: - const SmartPointer> fe; - const SmartPointer> quadrature; - const SmartPointer> face_quadrature; - DoFHandler dof_handler; - Vector solution; - const SmartPointer> boundary_values; - - virtual void - assemble_rhs(Vector &rhs) const = 0; - - private: - struct LinearSystem - { - LinearSystem(const DoFHandler &dof_handler); - - void - solve(Vector &solution) const; - - AffineConstraints hanging_node_constraints; - SparsityPattern sparsity_pattern; - SparseMatrix matrix; - Vector rhs; - }; - - void - assemble_linear_system(LinearSystem &linear_system); - - void - assemble_matrix( - LinearSystem & linear_system, - const typename DoFHandler::active_cell_iterator &begin_cell, - const typename DoFHandler::active_cell_iterator &end_cell, - Threads::Mutex & mutex) const; - }; - - - - template - Solver::Solver(Triangulation & triangulation, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & boundary_values) - : Base(triangulation) - , fe(&fe) - , quadrature(&quadrature) - , face_quadrature(&face_quadrature) - , dof_handler(triangulation) - , boundary_values(&boundary_values) - {} - - - template - Solver::~Solver() - { - dof_handler.clear(); - } - - - template - void - Solver::solve_problem() - { - dof_handler.distribute_dofs(*fe); - solution.reinit(dof_handler.n_dofs()); - - LinearSystem linear_system(dof_handler); - assemble_linear_system(linear_system); - linear_system.solve(solution); - } - - - template - void - Solver::postprocess( - const Evaluation::EvaluationBase &postprocessor) const - { - postprocessor(dof_handler, solution); - } - - - template - unsigned int - Solver::n_dofs() const - { - return dof_handler.n_dofs(); - } - - - template - void - Solver::assemble_linear_system(LinearSystem &linear_system) - { - using active_cell_iterator = typename DoFHandler::active_cell_iterator; - - - const unsigned int n_threads = MultithreadInfo::n_threads(); - std::vector> - thread_ranges = - Threads::split_range(dof_handler.begin_active(), - dof_handler.end(), - n_threads); - - Threads::Mutex mutex; - std::vector threads; - for (unsigned int thread = 0; thread < n_threads; ++thread) - threads.emplace_back(&Solver::assemble_matrix, - std::ref(*this), - std::ref(linear_system), - std::ref(thread_ranges[thread].first), - std::ref(thread_ranges[thread].second), - std::ref(mutex)); - - assemble_rhs(linear_system.rhs); - linear_system.hanging_node_constraints.condense(linear_system.rhs); - - std::map boundary_value_map; - VectorTools::interpolate_boundary_values(dof_handler, - 0, - *boundary_values, - boundary_value_map); - - threads.join_all(); - linear_system.hanging_node_constraints.condense(linear_system.matrix); - - MatrixTools::apply_boundary_values(boundary_value_map, - linear_system.matrix, - solution, - linear_system.rhs); - } - - - template - void - Solver::assemble_matrix( - LinearSystem & linear_system, - const typename DoFHandler::active_cell_iterator &begin_cell, - const typename DoFHandler::active_cell_iterator &end_cell, - Threads::Mutex & mutex) const - { - hp::FEValues fe_values(*fe, - *quadrature, - update_gradients | update_JxW_values); - - const unsigned int dofs_per_cell = (*fe)[0].dofs_per_cell; - const unsigned int n_q_points = (*quadrature)[0].size(); - - FullMatrix cell_matrix(dofs_per_cell, dofs_per_cell); - - std::vector local_dof_indices(dofs_per_cell); - - for (typename DoFHandler::active_cell_iterator cell = begin_cell; - cell != end_cell; - ++cell) - { - cell_matrix = 0; - - fe_values.reinit(cell); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - for (unsigned int i = 0; i < dofs_per_cell; ++i) - for (unsigned int j = 0; j < dofs_per_cell; ++j) - cell_matrix(i, j) += - (fe_values.get_present_fe_values().shape_grad(i, q_point) * - fe_values.get_present_fe_values().shape_grad(j, q_point) * - fe_values.get_present_fe_values().JxW(q_point)); - - - cell->get_dof_indices(local_dof_indices); - std::lock_guard lock(mutex); - for (unsigned int i = 0; i < dofs_per_cell; ++i) - for (unsigned int j = 0; j < dofs_per_cell; ++j) - linear_system.matrix.add(local_dof_indices[i], - local_dof_indices[j], - cell_matrix(i, j)); - }; - } - - - template - Solver::LinearSystem::LinearSystem(const DoFHandler &dof_handler) - - { - hanging_node_constraints.clear(); - - void (*mhnc_p)(const DoFHandler &, AffineConstraints &) = - &DoFTools::make_hanging_node_constraints; - - std::thread mhnc_thread(mhnc_p, dof_handler, hanging_node_constraints); - - sparsity_pattern.reinit(dof_handler.n_dofs(), - dof_handler.n_dofs(), - dof_handler.max_couplings_between_dofs()); - DoFTools::make_sparsity_pattern(dof_handler, sparsity_pattern); - - mhnc_thread.join(); - hanging_node_constraints.close(); - hanging_node_constraints.condense(sparsity_pattern); - - sparsity_pattern.compress(); - matrix.reinit(sparsity_pattern); - rhs.reinit(dof_handler.n_dofs()); - } - - - - template - void - Solver::LinearSystem::solve(Vector &solution) const - { - SolverControl solver_control(5000, 1e-12); - SolverCG<> cg(solver_control); - - PreconditionSSOR<> preconditioner; - preconditioner.initialize(matrix, 1.2); - - cg.solve(matrix, solution, rhs, preconditioner); - - hanging_node_constraints.distribute(solution); - } - - - - template - class PrimalSolver : public Solver - { - public: - PrimalSolver(Triangulation & triangulation, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values); - - virtual void - solve_problem(); - - virtual unsigned int - n_dofs() const; - - virtual void - postprocess(const Evaluation::EvaluationBase &postprocessor) const; - - virtual void - output_solution() const; - - protected: - const SmartPointer> rhs_function; - virtual void - assemble_rhs(Vector &rhs) const; - - friend class WeightedResidual; - }; - - - template - PrimalSolver::PrimalSolver( - Triangulation & triangulation, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values) - : Base(triangulation) - , Solver(triangulation, - fe, - quadrature, - face_quadrature, - boundary_values) - , rhs_function(&rhs_function) - {} - - - template - void - PrimalSolver::solve_problem() - { - Solver::solve_problem(); - } - - - - template - unsigned int - PrimalSolver::n_dofs() const - { - return Solver::n_dofs(); - } - - - template - void - PrimalSolver::postprocess( - const Evaluation::EvaluationBase &postprocessor) const - { - Solver::postprocess(postprocessor); - } - - - template - void - PrimalSolver::output_solution() const - { - DataOut data_out; - data_out.attach_dof_handler(this->dof_handler); - data_out.add_data_vector(this->solution, "solution"); - data_out.build_patches(); - - std::ostringstream filename; - filename << "solution-" << this->refinement_cycle << ".gnuplot" - << std::ends; - data_out.write(deallog.get_file_stream(), DataOut::gnuplot); - } - - - - template - void - PrimalSolver::assemble_rhs(Vector &rhs) const - { - hp::FEValues fe_values(*this->fe, - *this->quadrature, - update_values | update_quadrature_points | - update_JxW_values); - - const unsigned int dofs_per_cell = (*this->fe)[0].dofs_per_cell; - const unsigned int n_q_points = (*this->quadrature)[0].size(); - - Vector cell_rhs(dofs_per_cell); - std::vector rhs_values(n_q_points); - std::vector local_dof_indices(dofs_per_cell); - - typename DoFHandler::active_cell_iterator cell = this->dof_handler - .begin_active(), - endc = - this->dof_handler.end(); - for (; cell != endc; ++cell) - { - cell_rhs = 0; - - fe_values.reinit(cell); - - rhs_function->value_list( - fe_values.get_present_fe_values().get_quadrature_points(), - rhs_values); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - for (unsigned int i = 0; i < dofs_per_cell; ++i) - cell_rhs(i) += - (fe_values.get_present_fe_values().shape_value(i, q_point) * - rhs_values[q_point] * - fe_values.get_present_fe_values().JxW(q_point)); - - cell->get_dof_indices(local_dof_indices); - for (unsigned int i = 0; i < dofs_per_cell; ++i) - rhs(local_dof_indices[i]) += cell_rhs(i); - } - } - - - - template - class RefinementGlobal : public PrimalSolver - { - public: - RefinementGlobal(Triangulation & coarse_grid, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values); - - virtual void - refine_grid(); - }; - - - - template - RefinementGlobal::RefinementGlobal( - Triangulation & coarse_grid, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values) - : Base(coarse_grid) - , PrimalSolver(coarse_grid, - fe, - quadrature, - face_quadrature, - rhs_function, - boundary_values) - {} - - - - template - void - RefinementGlobal::refine_grid() - { - this->triangulation->refine_global(1); - } - - - - template - class RefinementKelly : public PrimalSolver - { - public: - RefinementKelly(Triangulation & coarse_grid, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values); - - virtual void - refine_grid(); - }; - - - - template - RefinementKelly::RefinementKelly( - Triangulation & coarse_grid, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values) - : Base(coarse_grid) - , PrimalSolver(coarse_grid, - fe, - quadrature, - face_quadrature, - rhs_function, - boundary_values) - {} - - - - template - void - RefinementKelly::refine_grid() - { - Vector estimated_error_per_cell( - this->triangulation->n_active_cells()); - KellyErrorEstimator::estimate( - this->dof_handler, - QGauss(3), - std::map *>(), - this->solution, - estimated_error_per_cell); - GridRefinement::refine_and_coarsen_fixed_number(*this->triangulation, - estimated_error_per_cell, - 0.3, - 0.03); - this->triangulation->execute_coarsening_and_refinement(); - } - - - - template - class RefinementWeightedKelly : public PrimalSolver - { - public: - RefinementWeightedKelly(Triangulation & coarse_grid, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values, - const Function & weighting_function); - - virtual void - refine_grid(); - - private: - const SmartPointer> weighting_function; - }; - - - - template - RefinementWeightedKelly::RefinementWeightedKelly( - Triangulation & coarse_grid, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection &face_quadrature, - const Function & rhs_function, - const Function & boundary_values, - const Function & weighting_function) - : Base(coarse_grid) - , PrimalSolver(coarse_grid, - fe, - quadrature, - face_quadrature, - rhs_function, - boundary_values) - , weighting_function(&weighting_function) - {} - - - - template - void - RefinementWeightedKelly::refine_grid() - { - Vector estimated_error(this->triangulation->n_active_cells()); - KellyErrorEstimator::estimate( - this->dof_handler, - (*this->face_quadrature)[0], - std::map *>(), - this->solution, - estimated_error); - - typename DoFHandler::active_cell_iterator cell = this->dof_handler - .begin_active(), - endc = - this->dof_handler.end(); - for (unsigned int cell_index = 0; cell != endc; ++cell, ++cell_index) - estimated_error(cell_index) *= weighting_function->value(cell->center()); - - GridRefinement::refine_and_coarsen_fixed_number(*this->triangulation, - estimated_error, - 0.3, - 0.03); - this->triangulation->execute_coarsening_and_refinement(); - } - -} // namespace LaplaceSolver - - -namespace Data -{ - template - struct SetUpBase : public Subscriptor - { - virtual const Function & - get_boundary_values() const = 0; - - virtual const Function & - get_right_hand_side() const = 0; - - virtual void - create_coarse_grid(Triangulation &coarse_grid) const = 0; - }; - - - template - struct SetUp : public SetUpBase - { - SetUp() - {} - - virtual const Function & - get_boundary_values() const; - - virtual const Function & - get_right_hand_side() const; - - - virtual void - create_coarse_grid(Triangulation &coarse_grid) const; - - private: - static const typename Traits::BoundaryValues boundary_values; - static const typename Traits::RightHandSide right_hand_side; - }; - - template - const typename Traits::BoundaryValues SetUp::boundary_values; - template - const typename Traits::RightHandSide SetUp::right_hand_side; - - template - const Function & - SetUp::get_boundary_values() const - { - return boundary_values; - } - - - template - const Function & - SetUp::get_right_hand_side() const - { - return right_hand_side; - } - - - template - void - SetUp::create_coarse_grid(Triangulation &coarse_grid) const - { - Traits::create_coarse_grid(coarse_grid); - } - - - - template - struct CurvedRidges - { - class BoundaryValues : public Function - { - public: - BoundaryValues() - : Function() - {} - - virtual double - value(const Point &p, const unsigned int component) const; - }; - - - class RightHandSide : public Function - { - public: - RightHandSide() - : Function() - {} - - virtual double - value(const Point &p, const unsigned int component) const; - }; - - static void - create_coarse_grid(Triangulation &coarse_grid); - }; - - - template - double - CurvedRidges::BoundaryValues::value( - const Point &p, - const unsigned int /*component*/) const - { - double q = p(0); - for (unsigned int i = 1; i < dim; ++i) - q += std::sin(10 * p(i) + 5 * p(0) * p(0)); - const double exponential = std::exp(q); - return exponential; - } - - - - template - double - CurvedRidges::RightHandSide::value( - const Point &p, - const unsigned int /*component*/) const - { - double q = p(0); - for (unsigned int i = 1; i < dim; ++i) - q += std::sin(10 * p(i) + 5 * p(0) * p(0)); - const double u = std::exp(q); - double t1 = 1, t2 = 0, t3 = 0; - for (unsigned int i = 1; i < dim; ++i) - { - t1 += std::cos(10 * p(i) + 5 * p(0) * p(0)) * 10 * p(0); - t2 += 10 * std::cos(10 * p(i) + 5 * p(0) * p(0)) - - 100 * std::sin(10 * p(i) + 5 * p(0) * p(0)) * p(0) * p(0); - t3 += 100 * std::cos(10 * p(i) + 5 * p(0) * p(0)) * - std::cos(10 * p(i) + 5 * p(0) * p(0)) - - 100 * std::sin(10 * p(i) + 5 * p(0) * p(0)); - }; - t1 = t1 * t1; - - return -u * (t1 + t2 + t3); - } - - - template - void - CurvedRidges::create_coarse_grid(Triangulation &coarse_grid) - { - GridGenerator::hyper_cube(coarse_grid, -1, 1); - coarse_grid.refine_global(2); - } - - - - template - struct Exercise_2_3 - { - using BoundaryValues = Functions::ZeroFunction; - - class RightHandSide : public Functions::ConstantFunction - { - public: - RightHandSide() - : Functions::ConstantFunction(1.) - {} - }; - - static void - create_coarse_grid(Triangulation &coarse_grid); - }; - - - template <> - void - Exercise_2_3<2>::create_coarse_grid(Triangulation<2> &coarse_grid) - { - const unsigned int dim = 2; - - static const Point<2> vertices_1[] = { - Point<2>(-1., -1.), Point<2>(-1. / 2, -1.), - Point<2>(0., -1.), Point<2>(+1. / 2, -1.), - Point<2>(+1, -1.), - - Point<2>(-1., -1. / 2.), Point<2>(-1. / 2, -1. / 2.), - Point<2>(0., -1. / 2.), Point<2>(+1. / 2, -1. / 2.), - Point<2>(+1, -1. / 2.), - - Point<2>(-1., 0.), Point<2>(-1. / 2, 0.), - Point<2>(+1. / 2, 0.), Point<2>(+1, 0.), - - Point<2>(-1., 1. / 2.), Point<2>(-1. / 2, 1. / 2.), - Point<2>(0., 1. / 2.), Point<2>(+1. / 2, 1. / 2.), - Point<2>(+1, 1. / 2.), - - Point<2>(-1., 1.), Point<2>(-1. / 2, 1.), - Point<2>(0., 1.), Point<2>(+1. / 2, 1.), - Point<2>(+1, 1.)}; - const unsigned int n_vertices = sizeof(vertices_1) / sizeof(vertices_1[0]); - - const std::vector> vertices(&vertices_1[0], - &vertices_1[n_vertices]); - - static const int cell_vertices[][GeometryInfo::vertices_per_cell] = { - {0, 1, 5, 6}, - {1, 2, 6, 7}, - {2, 3, 7, 8}, - {3, 4, 8, 9}, - {5, 6, 10, 11}, - {8, 9, 12, 13}, - {10, 11, 14, 15}, - {12, 13, 17, 18}, - {14, 15, 19, 20}, - {15, 16, 20, 21}, - {16, 17, 21, 22}, - {17, 18, 22, 23}}; - const unsigned int n_cells = - sizeof(cell_vertices) / sizeof(cell_vertices[0]); - - std::vector> cells(n_cells, CellData()); - for (unsigned int i = 0; i < n_cells; ++i) - { - for (const unsigned int j : GeometryInfo::vertex_indices()) - cells[i].vertices[j] = cell_vertices[i][j]; - cells[i].material_id = 0; - }; - - coarse_grid.create_triangulation(vertices, cells, SubCellData()); - - coarse_grid.refine_global(1); - } -} // namespace Data - - - -namespace DualFunctional -{ - template - class DualFunctionalBase : public Subscriptor - { - public: - virtual void - assemble_rhs(const DoFHandler &dof_handler, - Vector & rhs) const = 0; - }; - - - - template - class PointValueEvaluation : public DualFunctionalBase - { - public: - PointValueEvaluation(const Point &evaluation_point); - - virtual void - assemble_rhs(const DoFHandler &dof_handler, Vector &rhs) const; - - - DeclException1(ExcEvaluationPointNotFound, - Point, - << "The evaluation point " << arg1 - << " was not found among the vertices of the present grid."); - - protected: - const Point evaluation_point; - }; - - - template - PointValueEvaluation::PointValueEvaluation( - const Point &evaluation_point) - : evaluation_point(evaluation_point) - {} - - - template - void - PointValueEvaluation::assemble_rhs(const DoFHandler &dof_handler, - - Vector &rhs) const - { - rhs.reinit(dof_handler.n_dofs()); - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - for (const unsigned int vertex : GeometryInfo::vertex_indices()) - if (cell->vertex(vertex).distance(evaluation_point) < - cell->diameter() * 1e-8) - { - rhs(cell->vertex_dof_index(vertex, 0)) = 1; - return; - }; - - AssertThrow(false, ExcEvaluationPointNotFound(evaluation_point)); - } - - - - template - class PointXDerivativeEvaluation : public DualFunctionalBase - { - public: - PointXDerivativeEvaluation(const Point &evaluation_point); - - virtual void - assemble_rhs(const DoFHandler &dof_handler, Vector &rhs) const; - - - DeclException1(ExcEvaluationPointNotFound, - Point, - << "The evaluation point " << arg1 - << " was not found among the vertices of the present grid."); - - protected: - const Point evaluation_point; - }; - - - template - PointXDerivativeEvaluation::PointXDerivativeEvaluation( - const Point &evaluation_point) - : evaluation_point(evaluation_point) - {} - - - template - void - PointXDerivativeEvaluation::assemble_rhs( - const DoFHandler &dof_handler, - Vector & rhs) const - { - rhs.reinit(dof_handler.n_dofs()); - - QGauss quadrature(4); - hp::FEValues fe_values(dof_handler.get_fe(), - quadrature, - update_gradients | update_quadrature_points | - update_JxW_values); - const unsigned int n_q_points = - fe_values.get_present_fe_values().n_quadrature_points; - const unsigned int dofs_per_cell = dof_handler.get_fe().dofs_per_cell; - - Vector cell_rhs(dofs_per_cell); - std::vector local_dof_indices(dofs_per_cell); - - double total_volume = 0; - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - if (cell->center().distance(evaluation_point) <= cell->diameter()) - { - fe_values.reinit(cell); - cell_rhs = 0; - - for (unsigned int q = 0; q < n_q_points; ++q) - { - for (unsigned int i = 0; i < dofs_per_cell; ++i) - cell_rhs(i) += - fe_values.get_present_fe_values().shape_grad(i, q)[0] * - fe_values.get_present_fe_values().JxW(q); - total_volume += fe_values.get_present_fe_values().JxW(q); - }; - - cell->get_dof_indices(local_dof_indices); - for (unsigned int i = 0; i < dofs_per_cell; ++i) - rhs(local_dof_indices[i]) += cell_rhs(i); - }; - - AssertThrow(total_volume > 0, ExcEvaluationPointNotFound(evaluation_point)); - - rhs /= total_volume; - } - - -} // namespace DualFunctional - - -namespace LaplaceSolver -{ - template - class DualSolver : public Solver - { - public: - DualSolver(Triangulation & triangulation, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection & face_quadrature, - const DualFunctional::DualFunctionalBase &dual_functional); - - virtual void - solve_problem(); - - virtual unsigned int - n_dofs() const; - - virtual void - postprocess(const Evaluation::EvaluationBase &postprocessor) const; - - protected: - const SmartPointer> - dual_functional; - virtual void - assemble_rhs(Vector &rhs) const; - - static const Functions::ZeroFunction boundary_values; - - friend class WeightedResidual; - }; - - template - const Functions::ZeroFunction DualSolver::boundary_values; - - template - DualSolver::DualSolver( - Triangulation & triangulation, - const hp::FECollection & fe, - const hp::QCollection & quadrature, - const hp::QCollection & face_quadrature, - const DualFunctional::DualFunctionalBase &dual_functional) - : Base(triangulation) - , Solver(triangulation, - fe, - quadrature, - face_quadrature, - boundary_values) - , dual_functional(&dual_functional) - {} - - - template - void - DualSolver::solve_problem() - { - Solver::solve_problem(); - } - - - - template - unsigned int - DualSolver::n_dofs() const - { - return Solver::n_dofs(); - } - - - template - void - DualSolver::postprocess( - const Evaluation::EvaluationBase &postprocessor) const - { - Solver::postprocess(postprocessor); - } - - - - template - void - DualSolver::assemble_rhs(Vector &rhs) const - { - dual_functional->assemble_rhs(this->dof_handler, rhs); - } - - - - template - class WeightedResidual : public PrimalSolver, public DualSolver - { - public: - WeightedResidual( - Triangulation & coarse_grid, - const hp::FECollection & primal_fe, - const hp::FECollection & dual_fe, - const hp::QCollection & quadrature, - const hp::QCollection & face_quadrature, - const Function & rhs_function, - const Function & boundary_values, - const DualFunctional::DualFunctionalBase &dual_functional); - - virtual void - solve_problem(); - - virtual void - postprocess(const Evaluation::EvaluationBase &postprocessor) const; - - virtual unsigned int - n_dofs() const; - - virtual void - refine_grid(); - - virtual void - output_solution() const; - - private: - void - solve_primal_problem(); - void - solve_dual_problem(); - - using active_cell_iterator = typename DoFHandler::active_cell_iterator; - - - using FaceIntegrals = - typename std::map::face_iterator, double>; - - - - struct CellData - { - hp::FEValues fe_values; - const SmartPointer> right_hand_side; - - std::vector cell_residual; - std::vector rhs_values; - std::vector dual_weights; - typename std::vector> cell_grad_grads; - CellData(const hp::FECollection &fe, - const hp::QCollection & quadrature, - const Function & right_hand_side); - }; - - struct FaceData - { - hp::FEFaceValues fe_face_values_cell; - hp::FEFaceValues fe_face_values_neighbor; - hp::FESubfaceValues fe_subface_values_cell; - - std::vector jump_residual; - std::vector dual_weights; - typename std::vector> cell_grads; - typename std::vector> neighbor_grads; - FaceData(const hp::FECollection & fe, - const hp::QCollection &face_quadrature); - }; - - - - void - estimate_error(Vector &error_indicators) const; - - void - estimate_some(const Vector &primal_solution, - const Vector &dual_weights, - const unsigned int n_threads, - const unsigned int this_thread, - Vector & error_indicators, - FaceIntegrals & face_integrals) const; - - void - integrate_over_cell(const active_cell_iterator &cell, - const unsigned int cell_index, - const Vector & primal_solution, - const Vector & dual_weights, - CellData & cell_data, - Vector & error_indicators) const; - - void - integrate_over_regular_face(const active_cell_iterator &cell, - const unsigned int face_no, - const Vector & primal_solution, - const Vector & dual_weights, - FaceData & face_data, - FaceIntegrals &face_integrals) const; - void - integrate_over_irregular_face(const active_cell_iterator &cell, - const unsigned int face_no, - const Vector & primal_solution, - const Vector & dual_weights, - FaceData & face_data, - FaceIntegrals &face_integrals) const; - }; - - - - template - WeightedResidual::CellData::CellData( - const hp::FECollection &fe, - const hp::QCollection & quadrature, - const Function & right_hand_side) - : fe_values(fe, - quadrature, - update_values | update_hessians | update_quadrature_points | - update_JxW_values) - , right_hand_side(&right_hand_side) - { - const unsigned int n_q_points = quadrature[0].size(); - - cell_residual.resize(n_q_points); - rhs_values.resize(n_q_points); - dual_weights.resize(n_q_points); - cell_grad_grads.resize(n_q_points); - } - - - - template - WeightedResidual::FaceData::FaceData( - const hp::FECollection & fe, - const hp::QCollection &face_quadrature) - : fe_face_values_cell(fe, - face_quadrature, - update_values | update_gradients | update_JxW_values | - update_normal_vectors) - , fe_face_values_neighbor(fe, - face_quadrature, - update_values | update_gradients | - update_JxW_values | update_normal_vectors) - , fe_subface_values_cell(fe, face_quadrature, update_gradients) - { - const unsigned int n_face_q_points = face_quadrature[0].size(); - - jump_residual.resize(n_face_q_points); - dual_weights.resize(n_face_q_points); - cell_grads.resize(n_face_q_points); - neighbor_grads.resize(n_face_q_points); - } - - - - template - WeightedResidual::WeightedResidual( - Triangulation & coarse_grid, - const hp::FECollection & primal_fe, - const hp::FECollection & dual_fe, - const hp::QCollection & quadrature, - const hp::QCollection & face_quadrature, - const Function & rhs_function, - const Function & bv, - const DualFunctional::DualFunctionalBase &dual_functional) - : Base(coarse_grid) - , PrimalSolver(coarse_grid, - primal_fe, - quadrature, - face_quadrature, - rhs_function, - bv) - , DualSolver(coarse_grid, - dual_fe, - quadrature, - face_quadrature, - dual_functional) - {} - - - template - void - WeightedResidual::solve_problem() - { - std::vector threads; - threads.emplace_back(&WeightedResidual::solve_primal_problem, *this); - threads.emplace_back(&WeightedResidual::solve_dual_problem, *this); - threads[0].join(); - threads[1].join(); - } - - - template - void - WeightedResidual::solve_primal_problem() - { - PrimalSolver::solve_problem(); - } - - template - void - WeightedResidual::solve_dual_problem() - { - DualSolver::solve_problem(); - } - - - template - void - WeightedResidual::postprocess( - const Evaluation::EvaluationBase &postprocessor) const - { - PrimalSolver::postprocess(postprocessor); - } - - - template - unsigned int - WeightedResidual::n_dofs() const - { - return PrimalSolver::n_dofs(); - } - - - - template - void - WeightedResidual::refine_grid() - { - Vector error_indicators(this->triangulation->n_active_cells()); - estimate_error(error_indicators); - - for (Vector::iterator i = error_indicators.begin(); - i != error_indicators.end(); - ++i) - *i = std::fabs(*i); - - GridRefinement::refine_and_coarsen_fixed_fraction(*this->triangulation, - error_indicators, - 0.8, - 0.02); - this->triangulation->execute_coarsening_and_refinement(); - } - - - template - void - WeightedResidual::output_solution() const - { - const PrimalSolver &primal_solver = *this; - const DualSolver & dual_solver = *this; - - AffineConstraints primal_hanging_node_constraints; - DoFTools::make_hanging_node_constraints(primal_solver.dof_handler, - primal_hanging_node_constraints); - primal_hanging_node_constraints.close(); - Vector dual_solution(primal_solver.dof_handler.n_dofs()); - FETools::interpolate(dual_solver.dof_handler, - dual_solver.solution, - primal_solver.dof_handler, - primal_hanging_node_constraints, - dual_solution); - - DataOut data_out; - data_out.attach_dof_handler(primal_solver.dof_handler); - - data_out.add_data_vector(primal_solver.solution, "primal_solution"); - data_out.add_data_vector(dual_solution, "dual_solution"); - - data_out.build_patches(); - - std::ostringstream filename; - filename << "solution-" << this->refinement_cycle << ".gnuplot" - << std::ends; - data_out.write(deallog.get_file_stream(), DataOut::gnuplot); - } - - - - template - void - WeightedResidual::estimate_error(Vector &error_indicators) const - { - const PrimalSolver &primal_solver = *this; - const DualSolver & dual_solver = *this; - - AffineConstraints dual_hanging_node_constraints; - DoFTools::make_hanging_node_constraints(dual_solver.dof_handler, - dual_hanging_node_constraints); - dual_hanging_node_constraints.close(); - Vector primal_solution(dual_solver.dof_handler.n_dofs()); - FETools::interpolate(primal_solver.dof_handler, - primal_solver.solution, - dual_solver.dof_handler, - dual_hanging_node_constraints, - primal_solution); - - AffineConstraints primal_hanging_node_constraints; - DoFTools::make_hanging_node_constraints(primal_solver.dof_handler, - primal_hanging_node_constraints); - primal_hanging_node_constraints.close(); - Vector dual_weights(dual_solver.dof_handler.n_dofs()); - FETools::interpolation_difference(dual_solver.dof_handler, - dual_hanging_node_constraints, - dual_solver.solution, - primal_solver.dof_handler, - primal_hanging_node_constraints, - dual_weights); - - - FaceIntegrals face_integrals; - for (active_cell_iterator cell = dual_solver.dof_handler.begin_active(); - cell != dual_solver.dof_handler.end(); - ++cell) - for (const unsigned int face_no : GeometryInfo::face_indices()) - face_integrals[cell->face(face_no)] = -1e20; - - error_indicators.reinit( - dual_solver.dof_handler.get_triangulation().n_active_cells()); - - const unsigned int n_threads = MultithreadInfo::n_threads(); - std::vector threads; - for (unsigned int i = 0; i < n_threads; ++i) - threads.emplace_back(&WeightedResidual::estimate_some, - *this, - primal_solution, - dual_weights, - n_threads, - i, - error_indicators, - face_integrals); - for (auto &thread : threads) - thread.join(); - - unsigned int present_cell = 0; - for (active_cell_iterator cell = dual_solver.dof_handler.begin_active(); - cell != dual_solver.dof_handler.end(); - ++cell, ++present_cell) - for (const unsigned int face_no : GeometryInfo::face_indices()) - { - Assert(face_integrals.find(cell->face(face_no)) != - face_integrals.end(), - ExcInternalError()); - error_indicators(present_cell) -= - 0.5 * face_integrals[cell->face(face_no)]; - }; - deallog << " Estimated error=" - << std::accumulate(error_indicators.begin(), - error_indicators.end(), - 0.) - << std::endl; - } - - - - template - void - WeightedResidual::estimate_some(const Vector &primal_solution, - const Vector &dual_weights, - const unsigned int n_threads, - const unsigned int this_thread, - Vector & error_indicators, - FaceIntegrals &face_integrals) const - { - const PrimalSolver &primal_solver = *this; - const DualSolver & dual_solver = *this; - - CellData cell_data(*dual_solver.fe, - *dual_solver.quadrature, - *primal_solver.rhs_function); - FaceData face_data(*dual_solver.fe, *dual_solver.face_quadrature); - - active_cell_iterator cell = dual_solver.dof_handler.begin_active(); - for (unsigned int t = 0; - (t < this_thread) && (cell != dual_solver.dof_handler.end()); - ++t, ++cell) - ; - - if (cell == dual_solver.dof_handler.end()) - return; - - for (unsigned int cell_index = this_thread; true;) - { - integrate_over_cell(cell, - cell_index, - primal_solution, - dual_weights, - cell_data, - error_indicators); - - for (const unsigned int face_no : GeometryInfo::face_indices()) - { - if (cell->face(face_no)->at_boundary()) - { - face_integrals[cell->face(face_no)] = 0; - continue; - }; - - if ((cell->neighbor(face_no)->has_children() == false) && - (cell->neighbor(face_no)->level() == cell->level()) && - (cell->neighbor(face_no)->index() < cell->index())) - continue; - - if (cell->at_boundary(face_no) == false) - if (cell->neighbor(face_no)->level() < cell->level()) - continue; - - - if (cell->face(face_no)->has_children() == false) - integrate_over_regular_face(cell, - face_no, - primal_solution, - dual_weights, - face_data, - face_integrals); - else - integrate_over_irregular_face(cell, - face_no, - primal_solution, - dual_weights, - face_data, - face_integrals); - }; - - for (unsigned int t = 0; - ((t < n_threads) && (cell != dual_solver.dof_handler.end())); - ++t, ++cell, ++cell_index) - ; - if (cell == dual_solver.dof_handler.end()) - break; - }; - } - - - - template - void - WeightedResidual::integrate_over_cell( - const active_cell_iterator &cell, - const unsigned int cell_index, - const Vector & primal_solution, - const Vector & dual_weights, - CellData & cell_data, - Vector & error_indicators) const - { - cell_data.fe_values.reinit(cell); - cell_data.right_hand_side->value_list( - cell_data.fe_values.get_present_fe_values().get_quadrature_points(), - cell_data.rhs_values); - cell_data.fe_values.get_present_fe_values().get_function_hessians( - primal_solution, cell_data.cell_grad_grads); - - cell_data.fe_values.get_present_fe_values().get_function_values( - dual_weights, cell_data.dual_weights); - - double sum = 0; - for (unsigned int p = 0; - p < cell_data.fe_values.get_present_fe_values().n_quadrature_points; - ++p) - sum += ((cell_data.rhs_values[p] + trace(cell_data.cell_grad_grads[p])) * - cell_data.dual_weights[p] * - cell_data.fe_values.get_present_fe_values().JxW(p)); - error_indicators(cell_index) += sum; - } - - - - template - void - WeightedResidual::integrate_over_regular_face( - const active_cell_iterator &cell, - const unsigned int face_no, - const Vector & primal_solution, - const Vector & dual_weights, - FaceData & face_data, - FaceIntegrals & face_integrals) const - { - const unsigned int n_q_points = - face_data.fe_face_values_cell.get_present_fe_values().n_quadrature_points; - - face_data.fe_face_values_cell.reinit(cell, face_no); - face_data.fe_face_values_cell.get_present_fe_values() - .get_function_gradients(primal_solution, face_data.cell_grads); - - Assert(cell->neighbor(face_no).state() == IteratorState::valid, - ExcInternalError()); - const unsigned int neighbor_neighbor = cell->neighbor_of_neighbor(face_no); - const active_cell_iterator neighbor = cell->neighbor(face_no); - face_data.fe_face_values_neighbor.reinit(neighbor, neighbor_neighbor); - face_data.fe_face_values_neighbor.get_present_fe_values() - .get_function_gradients(primal_solution, face_data.neighbor_grads); - - for (unsigned int p = 0; p < n_q_points; ++p) - face_data.jump_residual[p] = - ((face_data.cell_grads[p] - face_data.neighbor_grads[p]) * - face_data.fe_face_values_cell.get_present_fe_values().normal_vector( - p)); - - face_data.fe_face_values_cell.get_present_fe_values().get_function_values( - dual_weights, face_data.dual_weights); - - double face_integral = 0; - for (unsigned int p = 0; p < n_q_points; ++p) - face_integral += - (face_data.jump_residual[p] * face_data.dual_weights[p] * - face_data.fe_face_values_cell.get_present_fe_values().JxW(p)); - - Assert(face_integrals.find(cell->face(face_no)) != face_integrals.end(), - ExcInternalError()); - Assert(face_integrals[cell->face(face_no)] == -1e20, ExcInternalError()); - - face_integrals[cell->face(face_no)] = face_integral; - } - - - - template - void - WeightedResidual::integrate_over_irregular_face( - const active_cell_iterator &cell, - const unsigned int face_no, - const Vector & primal_solution, - const Vector & dual_weights, - FaceData & face_data, - FaceIntegrals & face_integrals) const - { - const unsigned int n_q_points = - face_data.fe_face_values_cell.get_present_fe_values().n_quadrature_points; - - const typename DoFHandler::face_iterator face = cell->face(face_no); - const typename DoFHandler::cell_iterator neighbor = - - cell->neighbor(face_no); - Assert(neighbor.state() == IteratorState::valid, ExcInternalError()); - Assert(neighbor->has_children(), ExcInternalError()); - - const unsigned int neighbor_neighbor = cell->neighbor_of_neighbor(face_no); - - for (unsigned int subface_no = 0; subface_no < face->n_children(); - ++subface_no) - { - const active_cell_iterator neighbor_child = - cell->neighbor_child_on_subface(face_no, subface_no); - Assert(neighbor_child->face(neighbor_neighbor) == - cell->face(face_no)->child(subface_no), - ExcInternalError()); - - face_data.fe_subface_values_cell.reinit(cell, face_no, subface_no); - face_data.fe_subface_values_cell.get_present_fe_values() - .get_function_gradients(primal_solution, face_data.cell_grads); - face_data.fe_face_values_neighbor.reinit(neighbor_child, - neighbor_neighbor); - face_data.fe_face_values_neighbor.get_present_fe_values() - .get_function_gradients(primal_solution, face_data.neighbor_grads); - - for (unsigned int p = 0; p < n_q_points; ++p) - face_data.jump_residual[p] = - ((face_data.neighbor_grads[p] - face_data.cell_grads[p]) * - face_data.fe_face_values_neighbor.get_present_fe_values() - .normal_vector(p)); - - face_data.fe_face_values_neighbor.get_present_fe_values() - .get_function_values(dual_weights, face_data.dual_weights); - - double face_integral = 0; - for (unsigned int p = 0; p < n_q_points; ++p) - face_integral += - (face_data.jump_residual[p] * face_data.dual_weights[p] * - face_data.fe_face_values_neighbor.get_present_fe_values().JxW(p)); - face_integrals[neighbor_child->face(neighbor_neighbor)] = face_integral; - }; - - double sum = 0; - for (unsigned int subface_no = 0; subface_no < face->n_children(); - ++subface_no) - { - Assert(face_integrals.find(face->child(subface_no)) != - face_integrals.end(), - ExcInternalError()); - Assert(face_integrals[face->child(subface_no)] != -1e20, - ExcInternalError()); - - sum += face_integrals[face->child(subface_no)]; - }; - face_integrals[face] = sum; - } - -} // namespace LaplaceSolver - - - -template -struct Framework -{ -public: - using Evaluator = Evaluation::EvaluationBase; - using EvaluatorList = std::list; - - - struct ProblemDescription - { - unsigned int primal_fe_degree; - unsigned int dual_fe_degree; - - SmartPointer> data; - - enum RefinementCriterion - { - dual_weighted_error_estimator, - global_refinement, - kelly_indicator, - weighted_kelly_indicator - }; - - RefinementCriterion refinement_criterion; - - SmartPointer> dual_functional; - - EvaluatorList evaluator_list; - - SmartPointer> kelly_weight; - - unsigned int max_degrees_of_freedom; - - ProblemDescription(); - }; - - static void - run(const ProblemDescription &descriptor); -}; - - -template -Framework::ProblemDescription::ProblemDescription() - : primal_fe_degree(1) - , dual_fe_degree(2) - , refinement_criterion(dual_weighted_error_estimator) - , max_degrees_of_freedom(5000) -{} - - - -template -void -Framework::run(const ProblemDescription &descriptor) -{ - Triangulation triangulation(Triangulation::smoothing_on_refinement); - descriptor.data->create_coarse_grid(triangulation); - - const hp::FECollection primal_fe(FE_Q(descriptor.primal_fe_degree)); - const hp::FECollection dual_fe(FE_Q(descriptor.dual_fe_degree)); - const hp::QCollection quadrature( - QGauss(descriptor.dual_fe_degree + 1)); - const hp::QCollection face_quadrature( - QGauss(descriptor.dual_fe_degree + 1)); - - LaplaceSolver::Base *solver = nullptr; - switch (descriptor.refinement_criterion) - { - case ProblemDescription::dual_weighted_error_estimator: - { - solver = new LaplaceSolver::WeightedResidual( - triangulation, - primal_fe, - dual_fe, - quadrature, - face_quadrature, - descriptor.data->get_right_hand_side(), - descriptor.data->get_boundary_values(), - *descriptor.dual_functional); - break; - }; - - case ProblemDescription::global_refinement: - { - solver = new LaplaceSolver::RefinementGlobal( - triangulation, - primal_fe, - quadrature, - face_quadrature, - descriptor.data->get_right_hand_side(), - descriptor.data->get_boundary_values()); - break; - }; - - case ProblemDescription::kelly_indicator: - { - solver = new LaplaceSolver::RefinementKelly( - triangulation, - primal_fe, - quadrature, - face_quadrature, - descriptor.data->get_right_hand_side(), - descriptor.data->get_boundary_values()); - break; - }; - - case ProblemDescription::weighted_kelly_indicator: - { - solver = new LaplaceSolver::RefinementWeightedKelly( - triangulation, - primal_fe, - quadrature, - face_quadrature, - descriptor.data->get_right_hand_side(), - descriptor.data->get_boundary_values(), - *descriptor.kelly_weight); - break; - }; - - default: - AssertThrow(false, ExcInternalError()); - }; - - for (unsigned int step = 0; true; ++step) - { - deallog << "Refinement cycle: " << step << std::endl; - - solver->set_refinement_cycle(step); - solver->solve_problem(); - solver->output_solution(); - - deallog << " Number of degrees of freedom=" << solver->n_dofs() - << std::endl; - - for (typename EvaluatorList::const_iterator e = - descriptor.evaluator_list.begin(); - e != descriptor.evaluator_list.end(); - ++e) - { - (*e)->set_refinement_cycle(step); - solver->postprocess(**e); - }; - - - if (solver->n_dofs() < descriptor.max_degrees_of_freedom) - solver->refine_grid(); - else - break; - }; - - deallog << std::endl; - delete solver; - solver = nullptr; -} - - - -int -main() -{ - try - { - logfile.precision(2); - - deallog.attach(logfile); - - const unsigned int dim = 2; - Framework::ProblemDescription descriptor; - - descriptor.refinement_criterion = - Framework::ProblemDescription::dual_weighted_error_estimator; - - descriptor.primal_fe_degree = 1; - descriptor.dual_fe_degree = 2; - - descriptor.data = new Data::SetUp, dim>(); - - const Point evaluation_point(0.75, 0.75); - descriptor.dual_functional = - new DualFunctional::PointValueEvaluation(evaluation_point); - - Evaluation::PointValueEvaluation postprocessor1(evaluation_point); - Evaluation::GridOutput postprocessor2("grid"); - - descriptor.evaluator_list.push_back(&postprocessor1); - descriptor.evaluator_list.push_back(&postprocessor2); - - descriptor.max_degrees_of_freedom = 20000; - - Framework::run(descriptor); - } - - catch (const std::exception &exc) - { - std::cerr << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - std::cerr << "Exception on processing: " << std::endl - << exc.what() << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - } - catch (...) - { - std::cerr << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - std::cerr << "Unknown exception!" << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - }; - - return 0; -} diff --git a/tests/fail/hp-step-15.cc b/tests/fail/hp-step-15.cc deleted file mode 100644 index caa911fe9c..0000000000 --- a/tests/fail/hp-step-15.cc +++ /dev/null @@ -1,646 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2005 - 2022 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// a hp-ified version of step-15 - - -#include "../tests.h" - -std::ofstream logfile("step-15/output"); - -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - - -template -inline double -gradient_power(const Tensor<1, dim> &v, const unsigned int n) -{ - Assert((n / 2) * 2 == n, ExcMessage("Value of 'n' must be even")); - double p = 1; - for (unsigned int k = 0; k < n; k += 2) - p *= (v * v); - return p; -} - - - -class InitializationValues : public Function<1> -{ -public: - InitializationValues() - : Function<1>() - {} - - virtual double - value(const Point<1> &p, const unsigned int component = 0) const; -}; - - - -double -InitializationValues::value(const Point<1> &p, const unsigned int) const -{ - const double base = std::pow(p(0), 1. / 3.); - const double random = random_value(-1., 1.); - return std::max(base + .1 * random, 0.); -} - - - -template -class MinimizationProblem -{ -public: - MinimizationProblem(const unsigned int run_number); - void - run(); - -private: - void - initialize_solution(); - void - setup_system_on_mesh(); - void - assemble_step(); - double - line_search(const Vector &update) const; - void - do_step(); - void - output_results() const; - void - refine_grid(); - - static double - energy(const DoFHandler &dof_handler, const Vector &function); - - - - const unsigned int run_number; - - Triangulation triangulation; - - hp::FECollection fe; - DoFHandler dof_handler; - - AffineConstraints hanging_node_constraints; - - SparsityPattern sparsity_pattern; - SparseMatrix matrix; - - Vector present_solution; - Vector residual; -}; - - - -template -MinimizationProblem::MinimizationProblem(const unsigned int run_number) - : run_number(run_number) - , fe(FE_Q(1)) - , dof_handler(triangulation) -{} - - -template <> -void -MinimizationProblem<1>::initialize_solution() -{ - present_solution.reinit(dof_handler.n_dofs()); - VectorTools::interpolate(dof_handler, - InitializationValues(), - present_solution); - - DoFHandler<1>::cell_iterator cell; - cell = dof_handler.begin(0); - while (cell->at_boundary(0) == false) - cell = cell->neighbor(0); - while (cell->has_children() == true) - cell = cell->child(0); - present_solution(cell->vertex_dof_index(0, 0)) = 0; - - cell = dof_handler.begin(0); - while (cell->at_boundary(1) == false) - cell = cell->neighbor(1); - while (cell->has_children()) - cell = cell->child(1); - present_solution(cell->vertex_dof_index(1, 0)) = 1; -} - - -template -void -MinimizationProblem::setup_system_on_mesh() -{ - hanging_node_constraints.clear(); - DoFTools::make_hanging_node_constraints(dof_handler, - hanging_node_constraints); - hanging_node_constraints.close(); - - sparsity_pattern.reinit(dof_handler.n_dofs(), - dof_handler.n_dofs(), - dof_handler.max_couplings_between_dofs()); - DoFTools::make_sparsity_pattern(dof_handler, sparsity_pattern); - - hanging_node_constraints.condense(sparsity_pattern); - - sparsity_pattern.compress(); -} - - - -template -void -MinimizationProblem::assemble_step() -{ - matrix.reinit(sparsity_pattern); - residual.reinit(dof_handler.n_dofs()); - - hp::QCollection quadrature_formula(QGauss(4)); - hp::FEValues fe_values(fe, - quadrature_formula, - update_values | update_gradients | - update_quadrature_points | update_JxW_values); - - const unsigned int dofs_per_cell = fe[0].dofs_per_cell; - const unsigned int n_q_points = quadrature_formula[0].size(); - - FullMatrix cell_matrix(dofs_per_cell, dofs_per_cell); - Vector cell_rhs(dofs_per_cell); - - std::vector local_dof_indices(dofs_per_cell); - - std::vector local_solution_values(n_q_points); - std::vector> local_solution_grads(n_q_points); - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - { - cell_matrix = 0; - cell_rhs = 0; - - fe_values.reinit(cell); - - fe_values.get_present_fe_values().get_function_values( - present_solution, local_solution_values); - fe_values.get_present_fe_values().get_function_gradients( - present_solution, local_solution_grads); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - { - const double u = local_solution_values[q_point], - x = fe_values.get_present_fe_values().quadrature_point( - q_point)(0); - const double x_minus_u3 = (x - std::pow(u, 3)); - const Tensor<1, dim> u_prime = local_solution_grads[q_point]; - - for (unsigned int i = 0; i < dofs_per_cell; ++i) - for (unsigned int j = 0; j < dofs_per_cell; ++j) - cell_matrix(i, j) += - (fe_values.get_present_fe_values().shape_grad(i, q_point) * - fe_values.get_present_fe_values().shape_grad(j, q_point) * - cell->diameter() * cell->diameter() + - fe_values.get_present_fe_values().shape_value(i, q_point) * - fe_values.get_present_fe_values().shape_value(j, q_point)) * - fe_values.get_present_fe_values().JxW(q_point); - - for (unsigned int i = 0; i < dofs_per_cell; ++i) - cell_rhs(i) += -( - (6. * x_minus_u3 * gradient_power(u_prime, 4) * - fe_values.get_present_fe_values().shape_value(i, q_point) * - (x_minus_u3 * - (u_prime * - fe_values.get_present_fe_values().shape_grad(i, q_point)) - - (u_prime * u_prime) * u * u * - fe_values.get_present_fe_values().shape_value(i, q_point))) * - fe_values.get_present_fe_values().JxW(q_point)); - } - - cell->get_dof_indices(local_dof_indices); - for (unsigned int i = 0; i < dofs_per_cell; ++i) - { - for (unsigned int j = 0; j < dofs_per_cell; ++j) - matrix.add(local_dof_indices[i], - local_dof_indices[j], - cell_matrix(i, j)); - - residual(local_dof_indices[i]) += cell_rhs(i); - } - } - - hanging_node_constraints.condense(matrix); - hanging_node_constraints.condense(residual); - - std::map boundary_values; - VectorTools::interpolate_boundary_values(dof_handler, - 0, - Functions::ZeroFunction(), - boundary_values); - if (dim == 1) - VectorTools::interpolate_boundary_values(dof_handler, - 1, - Functions::ZeroFunction(), - boundary_values); - Vector dummy(residual.size()); - MatrixTools::apply_boundary_values(boundary_values, matrix, dummy, residual); -} - - -template -double -MinimizationProblem::line_search(const Vector &update) const -{ - double alpha = 0.; - Vector tmp(present_solution.size()); - - for (unsigned int step = 0; step < 5; ++step) - { - tmp = present_solution; - tmp.add(alpha, update); - const double f_a = energy(dof_handler, tmp); - - const double dalpha = (alpha != 0 ? alpha / 100 : 0.01); - - tmp = present_solution; - tmp.add(alpha + dalpha, update); - const double f_a_plus = energy(dof_handler, tmp); - - tmp = present_solution; - tmp.add(alpha - dalpha, update); - const double f_a_minus = energy(dof_handler, tmp); - - const double f_a_prime = (f_a_plus - f_a_minus) / (2 * dalpha); - const double f_a_doubleprime = - ((f_a_plus - 2 * f_a + f_a_minus) / (dalpha * dalpha)); - - if (std::fabs(f_a_prime) < 1e-7 * std::fabs(f_a)) - break; - - if (std::fabs(f_a_doubleprime) < 1e-7 * std::fabs(f_a_prime)) - break; - - double step_length = -f_a_prime / f_a_doubleprime; - - for (unsigned int i = 0; i < 3; ++i) - { - tmp = present_solution; - tmp.add(alpha + step_length, update); - const double e = energy(dof_handler, tmp); - - if (e >= f_a) - step_length /= 2; - else - break; - } - - alpha += step_length; - } - - return alpha; -} - - - -template -void -MinimizationProblem::do_step() -{ - assemble_step(); - - Vector update(present_solution.size()); - { - SolverControl solver_control(residual.size(), 1e-2 * residual.l2_norm()); - SolverCG<> solver(solver_control); - - PreconditionSSOR<> preconditioner; - preconditioner.initialize(matrix); - - solver.solve(matrix, update, residual, preconditioner); - hanging_node_constraints.distribute(update); - } - - const double step_length = line_search(update); - present_solution.add(step_length, update); -} - - - -template -void -MinimizationProblem::output_results() const -{ - DataOut data_out; - data_out.attach_dof_handler(dof_handler); - data_out.add_data_vector(present_solution, "solution"); - data_out.build_patches(); - - std::ostringstream filename; - filename << "solution-" << run_number << ".gnuplot" << std::ends; - - data_out.write_gnuplot(deallog.get_file_stream()); -} - - - -template <> -void -MinimizationProblem<1>::refine_grid() -{ - const unsigned int dim = 1; - - Vector error_indicators(triangulation.n_active_cells()); - - QTrapezoid q; - hp::QCollection quadrature(q); - hp::FEValues fe_values(fe, - quadrature, - update_values | update_gradients | - update_hessians | update_quadrature_points | - update_JxW_values); - - hp::FEValues neighbor_fe_values(fe, quadrature, update_gradients); - - std::vector local_values(quadrature[0].size()); - std::vector> local_gradients(quadrature[0].size()); - std::vector> local_2nd_derivs(quadrature[0].size()); - - DoFHandler::active_cell_iterator cell = dof_handler.begin_active(), - endc = dof_handler.end(); - for (unsigned int cell_index = 0; cell != endc; ++cell, ++cell_index) - { - fe_values.reinit(cell); - fe_values.get_present_fe_values().get_function_values(present_solution, - local_values); - fe_values.get_present_fe_values().get_function_gradients(present_solution, - local_gradients); - fe_values.get_present_fe_values().get_function_hessians(present_solution, - local_2nd_derivs); - - double cell_residual_norm = 0; - for (unsigned int q = 0; q < quadrature[0].size(); ++q) - { - const double x = - fe_values.get_present_fe_values().quadrature_point(q)[0]; - const double u = local_values[q]; - const double u_prime = local_gradients[q][0]; - const double u_doubleprime = local_2nd_derivs[q][0][0]; - const double local_residual_value = - ((x - u * u * u) * std::pow(u_prime, 4) * - (u * u * u_prime * u_prime + 5 * (x - u * u * u) * u_doubleprime + - 2 * u_prime * (1 - 3 * u * u * u_prime))); - - cell_residual_norm += (local_residual_value * local_residual_value * - fe_values.get_present_fe_values().JxW(q)); - } - error_indicators(cell_index) = - cell_residual_norm * cell->diameter() * cell->diameter(); - - const double x_left = - fe_values.get_present_fe_values().quadrature_point(0)[0]; - const double x_right = - fe_values.get_present_fe_values().quadrature_point(1)[0]; - - Assert(x_left == cell->vertex(0)[0], ExcInternalError()); - Assert(x_right == cell->vertex(1)[0], ExcInternalError()); - - const double u_left = local_values[0]; - const double u_right = local_values[1]; - - const double u_prime_left = local_gradients[0][0]; - const double u_prime_right = local_gradients[1][0]; - - if (cell->at_boundary(0) == false) - { - DoFHandler::cell_iterator left_neighbor = cell->neighbor(0); - while (left_neighbor->has_children()) - left_neighbor = left_neighbor->child(1); - - neighbor_fe_values.reinit(left_neighbor); - neighbor_fe_values.get_present_fe_values().get_function_gradients( - present_solution, local_gradients); - - const double neighbor_u_prime_left = local_gradients[1][0]; - - const double left_jump = - std::pow(x_left - std::pow(u_left, 3), 2) * - (std::pow(neighbor_u_prime_left, 5) - std::pow(u_prime_left, 5)); - error_indicators(cell_index) += - left_jump * left_jump * cell->diameter(); - } - - if (cell->at_boundary(1) == false) - { - DoFHandler::cell_iterator right_neighbor = cell->neighbor(1); - while (right_neighbor->has_children()) - right_neighbor = right_neighbor->child(0); - - neighbor_fe_values.reinit(right_neighbor); - neighbor_fe_values.get_present_fe_values().get_function_gradients( - present_solution, local_gradients); - - const double neighbor_u_prime_right = local_gradients[0][0]; - - const double right_jump = - std::pow(x_right - std::pow(u_right, 3), 2) * - (std::pow(neighbor_u_prime_right, 5) - std::pow(u_prime_right, 5)); - error_indicators(cell_index) += - right_jump * right_jump * cell->diameter(); - } - } - - GridRefinement::refine_and_coarsen_fixed_number(triangulation, - error_indicators, - 0.3, - 0.03); - triangulation.prepare_coarsening_and_refinement(); - - SolutionTransfer solution_transfer(dof_handler); - solution_transfer.prepare_for_coarsening_and_refinement(present_solution); - - triangulation.execute_coarsening_and_refinement(); - dof_handler.distribute_dofs(fe); - - Vector tmp(dof_handler.n_dofs()); - solution_transfer.interpolate(present_solution, tmp); - present_solution = tmp; - - hanging_node_constraints.clear(); - DoFTools::make_hanging_node_constraints(dof_handler, - hanging_node_constraints); - hanging_node_constraints.close(); - hanging_node_constraints.distribute(present_solution); -} - - - -template -double -MinimizationProblem::energy(const DoFHandler &dof_handler, - const Vector & function) -{ - hp::QCollection quadrature_formula(QGauss(4)); - hp::FEValues fe_values(dof_handler.get_fe(), - quadrature_formula, - update_values | update_gradients | - update_quadrature_points | update_JxW_values); - - const unsigned int n_q_points = quadrature_formula[0].size(); - - std::vector local_solution_values(n_q_points); - std::vector> local_solution_grads(n_q_points); - - double energy = 0.; - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - { - fe_values.reinit(cell); - fe_values.get_present_fe_values().get_function_values( - function, local_solution_values); - fe_values.get_present_fe_values().get_function_gradients( - function, local_solution_grads); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - energy += (std::pow(fe_values.get_present_fe_values().quadrature_point( - q_point)(0) - - std::pow(local_solution_values[q_point], 3), - 2) * - gradient_power(local_solution_grads[q_point], 6) * - fe_values.get_present_fe_values().JxW(q_point)); - } - - return energy; -} - - -template -void -MinimizationProblem::run() -{ - GridGenerator::hyper_cube(triangulation, 0., 1.); - triangulation.refine_global(4); - dof_handler.distribute_dofs(fe); - initialize_solution(); - - double last_energy = energy(dof_handler, present_solution); - - while (true) - { - setup_system_on_mesh(); - - for (unsigned int iteration = 0; iteration < 5; ++iteration) - do_step(); - - const double this_energy = energy(dof_handler, present_solution); - deallog << " Energy: " << this_energy << std::endl; - - if ((last_energy - this_energy) < 1e-5 * last_energy) - break; - - last_energy = this_energy; - - refine_grid(); - } - - output_results(); - - deallog << std::endl; -} - - -int -main() -{ - try - { - logfile.precision(2); - - deallog.attach(logfile); - - const unsigned int n_realizations = 10; - for (unsigned int realization = 0; realization < n_realizations; - ++realization) - { - deallog << "Realization " << realization << ':' << std::endl; - - MinimizationProblem<1> minimization_problem_1d(realization); - minimization_problem_1d.run(); - } - } - catch (const std::exception &exc) - { - std::cerr << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - std::cerr << "Exception on processing: " << std::endl - << exc.what() << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - } - catch (...) - { - std::cerr << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - std::cerr << "Unknown exception!" << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - } - return 0; -} diff --git a/tests/fail/hp_constraints_q_08.cc b/tests/fail/hp_constraints_q_08.cc deleted file mode 100644 index 92b181bcf3..0000000000 --- a/tests/fail/hp_constraints_q_08.cc +++ /dev/null @@ -1,34 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for Q elements correctly - -char logname[] = "output"; - - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FE_Q(i)); - test_with_hanging_nodes_random_aniso(fe); -} diff --git a/tests/fail/hp_constraints_q_system_08.cc b/tests/fail/hp_constraints_q_system_08.cc deleted file mode 100644 index e32c93c459..0000000000 --- a/tests/fail/hp_constraints_q_system_08.cc +++ /dev/null @@ -1,36 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for FESystem(FE_Q) elements -// correctly on a uniformly refined mesh for functions of degree q - -char logname[] = "output"; - - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FESystem(FE_Q(i), 1, FE_DGQ(i + 1), 1)); - - test_with_hanging_nodes_random_aniso(fe); -} diff --git a/tests/fail/hp_constraints_q_system_x_08.cc b/tests/fail/hp_constraints_q_system_x_08.cc deleted file mode 100644 index 491ba6ca54..0000000000 --- a/tests/fail/hp_constraints_q_system_x_08.cc +++ /dev/null @@ -1,40 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for FESystem(FE_Q) elements -// correctly on a uniformly refined mesh for functions of degree q - -// these tests check that we can deal with FESystem(FE_Q(p),FE_DGQ(q)) for -// different p,q - -char logname[] = "output"; - - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - for (unsigned int j = 0; j < 4; ++j) - fe.push_back(FESystem(FE_Q(i), 1, FE_DGQ(j), 1)); - - test_with_hanging_nodes_random_aniso(fe); -} diff --git a/tests/fail/hp_constraints_rt_01.cc b/tests/fail/hp_constraints_rt_01.cc deleted file mode 100644 index aee74bb72f..0000000000 --- a/tests/fail/hp_constraints_rt_01.cc +++ /dev/null @@ -1,39 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for RT elements correctly - -char logname[] = "output"; - - -#include - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FE_RaviartThomas(i)); - test_no_hanging_nodes(fe); -} diff --git a/tests/fail/hp_constraints_rt_02.cc b/tests/fail/hp_constraints_rt_02.cc deleted file mode 100644 index 3e5ea4e717..0000000000 --- a/tests/fail/hp_constraints_rt_02.cc +++ /dev/null @@ -1,39 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for RT elements correctly - -char logname[] = "output"; - - -#include - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FE_RaviartThomas(i)); - test_with_hanging_nodes(fe); -} diff --git a/tests/fail/hp_constraints_rt_03.cc b/tests/fail/hp_constraints_rt_03.cc deleted file mode 100644 index 91fd6032d3..0000000000 --- a/tests/fail/hp_constraints_rt_03.cc +++ /dev/null @@ -1,39 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for RT elements correctly - -char logname[] = "output"; - - -#include - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FE_RaviartThomas(i)); - test_with_wrong_face_orientation(fe); -} diff --git a/tests/fail/hp_constraints_rt_04.cc b/tests/fail/hp_constraints_rt_04.cc deleted file mode 100644 index 28a9a38224..0000000000 --- a/tests/fail/hp_constraints_rt_04.cc +++ /dev/null @@ -1,39 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for RT elements correctly - -char logname[] = "output"; - - -#include - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FE_RaviartThomas(i)); - test_with_2d_deformed_mesh(fe); -} diff --git a/tests/fail/hp_constraints_rt_05.cc b/tests/fail/hp_constraints_rt_05.cc deleted file mode 100644 index 45ef92eb4f..0000000000 --- a/tests/fail/hp_constraints_rt_05.cc +++ /dev/null @@ -1,39 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for RT elements correctly - -char logname[] = "output"; - - -#include - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - hp::FECollection fe; - for (unsigned int i = 1; i < 4; ++i) - fe.push_back(FE_RaviartThomas(i)); - test_with_2d_deformed_refined_mesh(fe); -} diff --git a/tests/fail/hp_constraints_rt_06.cc b/tests/fail/hp_constraints_rt_06.cc deleted file mode 100644 index ee5a7e19e5..0000000000 --- a/tests/fail/hp_constraints_rt_06.cc +++ /dev/null @@ -1,44 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that computation of hp-constraints works for RT elements correctly - -char logname[] = "output"; - - -#include - -#include "../hp/hp_constraints_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - hp::FECollection fe; - std::vector degrees; - for (unsigned int i = 1; i < 7 - dim; ++i) - { - fe.push_back(FE_RaviartThomas(i)); - degrees.push_back(i); - } - - test_interpolation(fe, degrees); -} diff --git a/tests/fail/injection_dgp.cc b/tests/fail/injection_dgp.cc deleted file mode 100644 index a28cbb8af8..0000000000 --- a/tests/fail/injection_dgp.cc +++ /dev/null @@ -1,31 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -char logname[] = "output"; - - -#include "../fe/injection_common.h" - - -template -void -test() -{ - for (unsigned int i = 1; i < 4; ++i) - for (unsigned int j = i; j < 4; ++j) - do_check(FE_DGP(i), FE_DGP(j)); -} diff --git a/tests/fail/injection_dgp_nonparametric.cc b/tests/fail/injection_dgp_nonparametric.cc deleted file mode 100644 index bb906de270..0000000000 --- a/tests/fail/injection_dgp_nonparametric.cc +++ /dev/null @@ -1,31 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -char logname[] = "output"; - - -#include "../fe/injection_common.h" - - -template -void -test() -{ - for (unsigned int i = 1; i < 4; ++i) - for (unsigned int j = i; j < 4; ++j) - do_check(FE_DGPNonparametric(i), FE_DGPNonparametric(j)); -} diff --git a/tests/fail/injection_nedelec.cc b/tests/fail/injection_nedelec.cc deleted file mode 100644 index 40e2e5d4d4..0000000000 --- a/tests/fail/injection_nedelec.cc +++ /dev/null @@ -1,34 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -char logname[] = "output"; - - -#include "../fe/injection_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - for (unsigned int i = 1; i < 4; ++i) - for (unsigned int j = i; j < 4; ++j) - do_check(FE_Nedelec(i), FE_Nedelec(j)); -} diff --git a/tests/fail/injection_q_hierarchical.cc b/tests/fail/injection_q_hierarchical.cc deleted file mode 100644 index 52e7ddb73a..0000000000 --- a/tests/fail/injection_q_hierarchical.cc +++ /dev/null @@ -1,31 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -char logname[] = "output"; - - -#include "../fe/injection_common.h" - - -template -void -test() -{ - for (unsigned int i = 1; i < 4; ++i) - for (unsigned int j = i; j < 4; ++j) - do_check(FE_Q_Hierarchical(i), FE_Q_Hierarchical(j)); -} diff --git a/tests/fail/injection_rt.cc b/tests/fail/injection_rt.cc deleted file mode 100644 index 0c2cb77451..0000000000 --- a/tests/fail/injection_rt.cc +++ /dev/null @@ -1,34 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -char logname[] = "output"; - - -#include "../fe/injection_common.h" - - -template -void -test() -{ - if (dim == 1) - return; - - for (unsigned int i = 0; i < 4; ++i) - for (unsigned int j = i; j < 4; ++j) - do_check(FE_RaviartThomas(i), FE_RaviartThomas(j)); -} diff --git a/tests/fail/project_abf_01.cc b/tests/fail/project_abf_01.cc deleted file mode 100644 index 7a9100ade6..0000000000 --- a/tests/fail/project_abf_01.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for ABF elements correctly - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - if (dim > 1) - for (unsigned int p = 0; p < 6 - dim; ++p) - test_no_hanging_nodes(FE_ABF(p), p); -} diff --git a/tests/fail/project_abf_02.cc b/tests/fail/project_abf_02.cc deleted file mode 100644 index b7f817c307..0000000000 --- a/tests/fail/project_abf_02.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for ABF elements correctly - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - if (dim > 1) - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_hanging_nodes(FE_ABF(p), p); -} diff --git a/tests/fail/project_abf_03.cc b/tests/fail/project_abf_03.cc deleted file mode 100644 index 05d16926ad..0000000000 --- a/tests/fail/project_abf_03.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for ABF elements correctly - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - if (dim > 1) - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_wrong_face_orientation(FE_ABF(p), p); -} diff --git a/tests/fail/project_abf_04.cc b/tests/fail/project_abf_04.cc deleted file mode 100644 index b2a96ad072..0000000000 --- a/tests/fail/project_abf_04.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for ABF elements correctly - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - if (dim > 1) - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_2d_deformed_mesh(FE_ABF(p), p); -} diff --git a/tests/fail/project_abf_05.cc b/tests/fail/project_abf_05.cc deleted file mode 100644 index b5c587ed62..0000000000 --- a/tests/fail/project_abf_05.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for ABF elements correctly - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - if (dim > 1) - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_2d_deformed_refined_mesh(FE_ABF(p), p); -} diff --git a/tests/fail/project_dgp_nonparametric_01.cc b/tests/fail/project_dgp_nonparametric_01.cc deleted file mode 100644 index 35b63066e6..0000000000 --- a/tests/fail/project_dgp_nonparametric_01.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for DGPNonparametric elements -// correctly on a uniformly refined mesh for functions of degree q - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - for (unsigned int p = 0; p < 6 - dim; ++p) - test_no_hanging_nodes(FE_DGPNonparametric(p), p); -} diff --git a/tests/fail/project_dgp_nonparametric_02.cc b/tests/fail/project_dgp_nonparametric_02.cc deleted file mode 100644 index 42992b30b6..0000000000 --- a/tests/fail/project_dgp_nonparametric_02.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for DGPNonparametric elements -// correctly on a uniformly refined mesh for functions of degree q - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_hanging_nodes(FE_DGPNonparametric(p), p); -} diff --git a/tests/fail/project_dgp_nonparametric_03.cc b/tests/fail/project_dgp_nonparametric_03.cc deleted file mode 100644 index c8f9f6aef3..0000000000 --- a/tests/fail/project_dgp_nonparametric_03.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for DGPNonparametric elements -// correctly on a uniformly refined mesh for functions of degree q - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_wrong_face_orientation(FE_DGPNonparametric(p), p); -} diff --git a/tests/fail/project_dgp_nonparametric_04.cc b/tests/fail/project_dgp_nonparametric_04.cc deleted file mode 100644 index 02dd14049f..0000000000 --- a/tests/fail/project_dgp_nonparametric_04.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for DGPNonparametric elements -// correctly on a uniformly refined mesh for functions of degree q - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_2d_deformed_mesh(FE_DGPNonparametric(p), p); -} diff --git a/tests/fail/project_dgp_nonparametric_05.cc b/tests/fail/project_dgp_nonparametric_05.cc deleted file mode 100644 index 9fa0bfcb55..0000000000 --- a/tests/fail/project_dgp_nonparametric_05.cc +++ /dev/null @@ -1,33 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for DGPNonparametric elements -// correctly on a uniformly refined mesh for functions of degree q - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - for (unsigned int p = 0; p < 6 - dim; ++p) - test_with_2d_deformed_refined_mesh(FE_DGPNonparametric(p), p); -} diff --git a/tests/fail/project_q_hierarchical_03.cc b/tests/fail/project_q_hierarchical_03.cc deleted file mode 100644 index 9862d2cda8..0000000000 --- a/tests/fail/project_q_hierarchical_03.cc +++ /dev/null @@ -1,29 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for QHierarchical elements correctly - -#include "project_common.h" - - -template -void -test() -{ - for (unsigned int p = 1; p < 6 - dim; ++p) - test_with_wrong_face_orientation(FE_Q_Hierarchical(p), p); -} diff --git a/tests/fail/project_q_hierarchical_03.output b/tests/fail/project_q_hierarchical_03.output deleted file mode 100644 index 6390250af4..0000000000 --- a/tests/fail/project_q_hierarchical_03.output +++ /dev/null @@ -1,78 +0,0 @@ - -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0200 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0213 -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0210 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0229 -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0147 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0160 -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0154 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0156 -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0162 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0175 -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0193 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0206 -DEAL::n_dofs=35 -DEAL::FE_Q_Hierarchical<3>(1), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(1), P_2, rel. error=0.0158 -DEAL::FE_Q_Hierarchical<3>(1), P_3, rel. error=0.0165 -DEAL::n_dofs=195 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00640 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00592 -DEAL::n_dofs=194 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00630 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00563 -DEAL::n_dofs=194 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00499 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00466 -DEAL::n_dofs=194 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00467 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00437 -DEAL::n_dofs=194 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00550 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00499 -DEAL::n_dofs=194 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00584 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00524 -DEAL::n_dofs=194 -DEAL::FE_Q_Hierarchical<3>(2), P_0, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_1, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_2, rel. error=0 -DEAL::FE_Q_Hierarchical<3>(2), P_3, rel. error=0.00480 -DEAL::FE_Q_Hierarchical<3>(2), P_4, rel. error=0.00450 diff --git a/tests/fail/project_rt_03.cc b/tests/fail/project_rt_03.cc deleted file mode 100644 index 627faace70..0000000000 --- a/tests/fail/project_rt_03.cc +++ /dev/null @@ -1,36 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2006 - 2018 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// check that VectorTools::project works for RT elements correctly - -char logname[] = "output"; - - -#include "../deal.II/project_common.h" - - -template -void -test() -{ - if (dim != 1) - // this is interesting also in 3d, but is - // exceedingly slow there. limit to the - // case of RT(0) elements in 3d - for (unsigned int p = 0; p < (dim == 2 ? 3 : 1); ++p) - test_with_wrong_face_orientation(FE_RaviartThomas(p), p + 1, 1); -} diff --git a/tests/fail/rt/rt.gpl b/tests/fail/rt/rt.gpl deleted file mode 100644 index 6a47c2f34e..0000000000 --- a/tests/fail/rt/rt.gpl +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/gnuplot -persist -# -# -# G N U P L O T -# Version 4.0 patchlevel 0 -# last modified Thu Apr 15 14:44:22 CEST 2004 -# System: Linux 2.6.11.4-21.11-smp -# -# Copyright (C) 1986 - 1993, 1998, 2004, 2006 -# Thomas Williams, Colin Kelley and many others -# -# This is gnuplot version 4.0. Please refer to the documentation -# for command syntax changes. The old syntax will be accepted -# throughout the 4.0 series, but all save files use the new syntax. -# -# Type `help` to access the on-line reference manual. -# The gnuplot FAQ is available from -# http://www.gnuplot.info/faq/ -# -# Send comments and requests for help to -# -# Send bugs, suggestions and mods to -# -# -set terminal postscript eps color solid enhanced 20 -# set output -unset clip points -set clip one -unset clip two -set bar 1.000000 -set border 31 lt -1 lw 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set timefmt x "%d/%m/%y,%H:%M" -set timefmt y "%d/%m/%y,%H:%M" -set timefmt z "%d/%m/%y,%H:%M" -set timefmt x2 "%d/%m/%y,%H:%M" -set timefmt y2 "%d/%m/%y,%H:%M" -set timefmt cb "%d/%m/%y,%H:%M" -set boxwidth -set style fill empty border -set dummy x,y -set format x "% g" -set format y "% g" -set format x2 "% g" -set format y2 "% g" -set format z "% g" -set format cb "% g" -set angles radians -unset grid -set key title "" -set key right top Right noreverse enhanced box linetype -2 linewidth 1.000 samplen 4 spacing 1 width 0 height 0 autotitles -unset label -unset arrow -unset style line -unset style arrow -unset logscale -set offsets 0, 0, 0, 0 -set pointsize 1 -set encoding default -unset polar -unset parametric -unset decimalsign -set view 60, 20, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -unset contour -set clabel '%8.3g' -set mapping cartesian -set datafile separator whitespace -set hidden3d offset 1 trianglepattern 3 undefined 1 altdiagonal bentover -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -set style data lines -set style function lines -set xzeroaxis lt -2 lw 1.000 -set yzeroaxis lt -2 lw 1.000 -set x2zeroaxis lt -2 lw 1.000 -set y2zeroaxis lt -2 lw 1.000 -set tics in -set ticslevel 0.5 -set ticscale 1 0.5 -set mxtics default -set mytics default -set mztics default -set mx2tics default -set my2tics default -set mcbtics default -set xtics border mirror norotate autofreq -set ytics border mirror norotate autofreq -set ztics border nomirror norotate autofreq -set nox2tics -set noy2tics -set cbtics border mirror norotate autofreq -set title "" 0.000000,0.000000 font "" -set timestamp "" bottom norotate 0.000000,0.000000 "" -set rrange [ * : * ] noreverse nowriteback # (currently [0.00000:10.0000] ) -set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set urange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set vrange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] ) -set xlabel "x" 0.000000,0.000000 font "" -set x2label "" 0.000000,0.000000 font "" -set xrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set x2range [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set ylabel "y" 0.000000,0.000000 font "" -set y2label "" 0.000000,0.000000 font "" -set yrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set y2range [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set zlabel "" 0.000000,0.000000 font "" -set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set cblabel "" 0.000000,0.000000 font "" -set cbrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] ) -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set locale "C" -set pm3d scansautomatic flush begin noftriangles nohidden3d implicit corners2color mean -unset pm3d -set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB -set palette rgbformulae 7, 5, 15 -set colorbox default -set colorbox vertical origin 0.9,0.2 size 0.1,0.63 bdefault -set loadpath -set fontpath -set fit noerrorvariables -set output "RT1_00_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:3 title "v0_x" -set output "RT1_00_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:4 title "v0_y" -set output "RT1_01_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:5 title "v1_x" -set output "RT1_01_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:6 title "v1_y" -set output "RT1_02_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:7 title "v2_x" -set output "RT1_02_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:8 title "v2_y" -set output "RT1_03_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:9 title "v3_x" -set output "RT1_03_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:10 title "v3_y" -set output "RT1_04_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:11 title "v4_x" -set output "RT1_04_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:12 title "v4_y" -set output "RT1_05_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:13 title "v5_x" -set output "RT1_05_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:14 title "v5_y" -set output "RT1_06_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:15 title "v6_x" -set output "RT1_06_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:16 title "v6_y" -set output "RT1_07_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:17 title "v7_x" -set output "RT1_07_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:18 title "v7_y" -set output "RT1_08_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:19 title "v8_x" -set output "RT1_08_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:20 title "v8_y" -set output "RT1_09_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:21 title "v9_x" -set output "RT1_09_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:22 title "v9_y" -set output "RT1_10_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:23 title "v10_x" -set output "RT1_10_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:24 title "v10_y" -set output "RT1_11_x.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:25 title "v11_x" -set output "RT1_11_y.eps" -splot "< perl -ne \'print if s/DEAL:RT<2>.1.::value//;\' output" using 1:2:26 title "v11_y" -# EOF diff --git a/tests/fail/rt_4.cc b/tests/fail/rt_4.cc deleted file mode 100644 index ce4ae5b722..0000000000 --- a/tests/fail/rt_4.cc +++ /dev/null @@ -1,68 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2003 - 2022 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// Just output the prolongation matrices of the RT element - -#include - -#include - -#include "../tests.h" - -#define PRECISION 2 - - - -template -void -test(const unsigned int degree) -{ - deallog << "FE_RaviartThomas<" << dim << "> (" << degree << ')' << std::endl; - - FE_RaviartThomas fe_rt(degree); - - for (unsigned int c = 0; c < GeometryInfo::max_children_per_cell; ++c) - { - const FullMatrix &m = fe_rt.get_prolongation_matrix( - c, RefinementCase::isotropic_refinement); - - for (unsigned int i = 0; i < m.m(); ++i) - { - for (unsigned int j = 0; j < m.n(); ++j) - deallog << 100 * m(i, j) << ' '; - deallog << std::endl; - } - - deallog << std::endl; - } -} - - -int -main() -{ - std::ofstream logfile("output"); - logfile.precision(PRECISION); - logfile.setf(std::ios::fixed); - deallog.attach(logfile); - - for (unsigned int degree = 0; degree < 4; ++degree) - test<2>(degree); - // test<3>(degree); - - return 0; -} diff --git a/tests/fail/rt_6.cc b/tests/fail/rt_6.cc deleted file mode 100644 index 69e7ec465e..0000000000 --- a/tests/fail/rt_6.cc +++ /dev/null @@ -1,173 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2003 - 2022 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - -// adaptation of up_and_down for RT elements - -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include -#include - -#include "../tests.h" - -#define PRECISION 4 - - -template -Point -transform(const Point p) -{ - switch (dim) - { - case 1: - return p; - case 2: - return Point(p(0) * (1 + p(1)), p(1) * (1 + p(0))); - case 3: - return Point(p(0) * (1 + p(1)) * (1 + p(2)), - p(1) * (1 + p(0)) * (1 + p(2)), - p(2) * (1 + p(0)) * (1 + p(1))); - default: - Assert(false, ExcNotImplemented()); - return Point(); - }; -} - - -template -void -check_element(const Triangulation &tr, const FiniteElement &fe) -{ - DoFHandler dof_handler(tr); - dof_handler.distribute_dofs(fe); - - // create a mostly arbitrary - // function plus a trend on this - // grid - Vector tmp(dof_handler.n_dofs()); - for (unsigned int i = 0; i < tmp.size(); ++i) - tmp(i) = (i + 13 * i % 17); - - // restrict this function to the - // next coarser level and - // distribute it again to the - // higher level - Vector x(tmp.size()); - Vector v(fe.dofs_per_cell); - for (typename DoFHandler::cell_iterator cell = dof_handler.begin(); - cell != dof_handler.end(); - ++cell) - if (cell->has_children() && cell->child(0)->is_active()) - { - // first make sure that what - // we do is reasonable. for - // this, _all_ children have - // to be active, not only - // some of them - for (unsigned int c = 0; c < GeometryInfo::max_children_per_cell; - ++c) - Assert(cell->child(c)->is_active(), ExcInternalError()); - - // then restrict and prolongate - cell->get_interpolated_dof_values(tmp, v); - cell->set_dof_values_by_interpolation(v, x); - }; - - // now x is a function on the fine - // grid that is representable on - // the coarse grid. so another - // cycle should not alter it any - // more: - Vector x2(x.size()); - for (typename DoFHandler::cell_iterator cell = dof_handler.begin(); - cell != dof_handler.end(); - ++cell) - if (cell->has_children() && cell->child(0)->is_active()) - { - cell->get_interpolated_dof_values(x, v); - cell->set_dof_values_by_interpolation(v, x2); - }; - - // then check that this is so: - x2 -= x; - const double relative_residual = (x2.l2_norm() / x.l2_norm()); - - const double threshold = 1e-6; - deallog << ", dofs_per_cell=" << fe.dofs_per_cell << "; relative residual: " - << (relative_residual < threshold ? "ok" : "botched up!") - << " (relative residual=" << relative_residual << ')' << std::endl; -} - - -template -void -test() -{ - // make a coarse triangulation as a - // hypercube. if in more than 1d, - // distort it so that it is no more - // an affine image of the - // hypercube, to make things more - // difficult. then refine it twice - Triangulation tr; - GridGenerator::hyper_cube(tr, 0., 1.); - Point (*p)(Point) = &transform; - GridTools::transform(p, tr); - tr.refine_global(2); - - // now for a list of finite - // elements, for which we want to - // test. we happily waste tons of - // memory here, but who cares... - const FiniteElement *fe_list[] = {new FE_RaviartThomas(0), - new FE_RaviartThomas(1), - new FE_RaviartThomas(2)}; - - for (unsigned int i = 0; i < sizeof(fe_list) / sizeof(fe_list[0]); ++i) - if (fe_list[i] != nullptr) - { - deallog << dim << "d, uniform grid, fe #" << i; - check_element(tr, *fe_list[i]); - } -} - - - -int -main() -{ - std::ofstream logfile("output"); - logfile.precision(PRECISION); - logfile.setf(std::ios::fixed); - deallog.attach(logfile); - - test<2>(); - test<3>(); - return 0; -} diff --git a/tests/fail/rt_crash_01.cc b/tests/fail/rt_crash_01.cc deleted file mode 100644 index 362b2e9ceb..0000000000 --- a/tests/fail/rt_crash_01.cc +++ /dev/null @@ -1,101 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2003 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - -#include -#include - -#include - -#include -#include - -#include -#include - -#include "../tests.h" - -#include "../bits/dof_tools_common.h" - -// check an abort in FEPolyTensor when used with RaviartThomas -// elements, when computing some sort of edge directions. This is the -// case left over from dof_tools_19 - - - -template -void -check_this(const DoFHandler &dof_handler) -{ - // there's presently a crash in the - // Raviart-Thomas element. only - // check for these elements, - // everything else is handled in - // dof_tools_19 - if (dof_handler.get_fe().get_name().find("RaviartThomas") == - std::string::npos) - return; - - Functions::ConstantFunction test_func( - 1, dof_handler.get_fe().n_components()); - - // don't run this test if hanging - // nodes are not implemented - if (dof_handler.get_fe().constraints_are_implemented() == false) - return; - - AffineConstraints cm; - DoFTools::make_hanging_node_constraints(dof_handler, cm); - cm.close(); - - deallog << cm.n_constraints() << std::endl; - deallog << cm.max_constraint_indirections() << std::endl; - - // L_2 project constant function onto field - QGauss quadrature(6); - Vector solution(dof_handler.n_dofs()); - - VectorTools::project(dof_handler, cm, quadrature, test_func, solution); - cm.distribute(solution); - - // all values of the projected solution - // should be close around 1 (the value of - // the original function) - for (unsigned int i = 0; i < solution.size(); ++i) - Assert(std::fabs(solution(i) - 1) < 1e-6, ExcInternalError()); - - // Evaluate error - Vector cellwise_errors( - dof_handler.get_triangulation().n_active_cells()); - VectorTools::integrate_difference(dof_handler, - solution, - test_func, - cellwise_errors, - quadrature, - VectorTools::L2_norm); - const double p_l2_error = cellwise_errors.l2_norm(); - - deallog << "L2_Error : " << p_l2_error << std::endl; - - { - DataOut data_out; - data_out.attach_dof_handler(dof_handler); - data_out.add_data_vector(solution, "u"); - data_out.build_patches(); - data_out.write_gnuplot(deallog.get_file_stream()); - } - - Assert(p_l2_error < 1e-12, ExcInternalError()); -} diff --git a/tests/fail/rt_distorted_01.cc b/tests/fail/rt_distorted_01.cc deleted file mode 100644 index 735664bb5d..0000000000 --- a/tests/fail/rt_distorted_01.cc +++ /dev/null @@ -1,471 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2003 - 2023 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - -/* - * Snippet to demonstrate some properties of the deal.II implementation of - * the RT spaces. - */ - - - -#include "../tests.h" - -#define PRECISION 2 - - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - - - -template -class TestMap1 : public Function -{ -public: - TestMap1(const unsigned int n_components) - : Function(n_components) - {} - - virtual ~TestMap1() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - - -template -double -TestMap1::value(const Point & /*p*/, - const unsigned int /*component*/) const -{ - return (1); -} - - -template -void -TestMap1::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - - // Parabolic inflow profile - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - -///----------------------------------------------------------------------- - -template -class TestDef1 : public Function -{ -private: - const double phi; - -public: - TestDef1(const unsigned int n_components, const double ph) - : Function(n_components) - , phi(ph) - {} - - virtual ~TestDef1() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - - -template -double -TestDef1::value(const Point &p, const unsigned int component) const -{ - Point<2> center; - center(0) = 0.5; - center(1) = 0.5; - double rad = p.distance(center), - phi_p = atan2(p(0) - center(0), p(1) - center(1)); - - if (component == 0) - return rad * (sin(phi + phi_p) - sin(phi_p)); - else - return rad * (cos(phi + phi_p) - cos(phi_p)); -} - - -template -void -TestDef1::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - -///----------------------------------------------------------------------- - - -template -class TestDef2 : public Function -{ -private: - const double scale; - -public: - TestDef2(const unsigned int n_components, const double sc) - : Function(n_components) - , scale(sc) - {} - - virtual ~TestDef2() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestDef2::value(const Point &p, const unsigned int component) const -{ - double x = p(0), y = p(1); - - if (component == 0) - return scale * x; - else - return scale * y; -} - - -template -void -TestDef2::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - -///----------------------------------------------------------------------- -// testDef3 implements parallelograms ... - - -template -class TestDef3 : public Function -{ -private: - const double scale; - -public: - TestDef3(const unsigned int n_components, const double sc) - : Function(n_components) - , scale(sc) - {} - - virtual ~TestDef3() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestDef3::value(const Point &p, const unsigned int component) const -{ - double y = p(1); - - if (component == 0) - return scale * y; - else - return 0; -} - - -template -void -TestDef3::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - - -/* - * Integrate the function value over the element. - */ - -double -EvaluateArea(Mapping<2> & mapping, - DoFHandler<2> * dof_handler, - Vector &solution) -{ - // Use a high order quadrature. - QGauss<2> quad(6); - FEValues<2> fe_values(mapping, - dof_handler->get_fe(), - quad, - UpdateFlags(update_values | update_quadrature_points | - update_JxW_values)); - - const unsigned int n_q_points = quad.size(); - const unsigned int n_components = dof_handler->get_fe().n_components(); - - // Cell iterators - DoFHandler<2>::active_cell_iterator cell = dof_handler->begin_active(), - endc = dof_handler->end(); - double result_u = 0, result_v = 0; - - for (; cell != endc; ++cell) - { - fe_values.reinit(cell); - - // Get values from solution vector (For Trap.Rule) - std::vector> this_value(n_q_points, - Vector(n_components)); - fe_values.get_function_values(solution, this_value); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - { - double JxW = fe_values.JxW(q_point); - result_u += this_value[q_point](0) * JxW; - result_v += this_value[q_point](1) * JxW; - } - } - - return (result_v); -} - - -int -main(int /*argc*/, char ** /*argv*/) -{ - initlog(); - deallog.get_file_stream().precision(PRECISION); - deallog.get_file_stream().setf(std::ios::fixed); - - Triangulation<2> tria_test; - DoFHandler<2> * dof_handler, *dof_handler_def; - Point<2> p1(0, 0), p2(1, 1); - - GridGenerator::hyper_rectangle(tria_test, p1, p2); - tria_test.refine_global(1); - - // Uncommenting the following line, demonstrates the problem - // of RT elements on distorted Quads! - GridTools::distort_random(0.4, tria_test); - - // Create a DoFHandler for the RT space - FE_RaviartThomas<2> fe(2); - dof_handler = new DoFHandler<2>(tria_test); - dof_handler->distribute_dofs(fe); - - // Create an deformation object for the Eulerian mapping - FESystem<2> fe_def(FE_Q<2>(1), 2); - dof_handler_def = new DoFHandler<2>(tria_test); - dof_handler_def->distribute_dofs(fe_def); - - // Alloc some DoFs - Vector solution, solution_q, deformation; - solution.reinit(dof_handler->n_dofs()); - solution_q.reinit(dof_handler_def->n_dofs()); - deformation.reinit(dof_handler_def->n_dofs()); - - // Project solution onto RT FE field - AffineConstraints hn_constraints; - hn_constraints.clear(); - DoFTools::make_hanging_node_constraints(*dof_handler, hn_constraints); - hn_constraints.close(); - VectorTools::project( - *dof_handler, hn_constraints, QGauss<2>(6), TestMap1<2>(2), solution); - - // Project reference solution onto RT FE field - AffineConstraints hn_constraints_def; - hn_constraints_def.clear(); - DoFTools::make_hanging_node_constraints(*dof_handler_def, hn_constraints_def); - hn_constraints_def.close(); - - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestMap1<2>(2), - solution_q); - - MappingQ1Eulerian<2> *mapping_euler = - new MappingQ1Eulerian<2>(deformation, *dof_handler_def); - - char buf[1000]; - sprintf(buf, - "FE_RT Area %e FE_Q Area %e\n", - EvaluateArea(*mapping_euler, dof_handler, solution), - EvaluateArea(*mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - - unsigned int test_out = 0; - // Try rotating the elements - for (double rotat = 0; rotat < 2 * numbers::PI; rotat += 0.25 * numbers::PI) - { - // Rotate element - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef1<2>(2, rotat), - deformation); - - // Project 1 function to element - VectorTools::project(*mapping_euler, - *dof_handler, - hn_constraints, - QGauss<2>(6), - TestMap1<2>(2), - solution); - - // Write output files - DataOut<2> *data_out = new DataOut<2>; - data_out->attach_dof_handler(*dof_handler); - data_out->add_data_vector(solution, "solution"); - data_out->build_patches(*mapping_euler, 8); - - data_out->write_gnuplot(deallog.get_file_stream()); - test_out++; - - delete data_out; - - double area_rt = EvaluateArea(*mapping_euler, dof_handler, solution); - double area_q = EvaluateArea(*mapping_euler, dof_handler_def, solution_q); - - char buf[100]; - sprintf( - buf, "phi = %e FE_RT Area %e FE_Q Area %e\n", rotat, area_rt, area_q); - deallog << buf; - } - - // Try resizing the elements - for (double scale = -0.75; scale < 4.0; scale += 0.25) - { - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef2<2>(2, scale), - deformation); - - // Project 1 function to element - VectorTools::project(*mapping_euler, - *dof_handler, - hn_constraints, - QGauss<2>(6), - TestMap1<2>(2), - solution); - - char buf[1000]; - sprintf(buf, - "Scale = %e FE_RT Area %e FE_Q Area %e\n", - scale, - EvaluateArea(*mapping_euler, dof_handler, solution), - EvaluateArea(*mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - } - - - // Try parallelograms - for (double scale = -1.0; scale < 1.0; scale += 0.25) - { - VectorTools::project(*dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef3<2>(2, scale), - deformation); - - // Project 1 function to element - VectorTools::project(*mapping_euler, - *dof_handler, - hn_constraints, - QGauss<2>(6), - TestMap1<2>(2), - solution); - - char buf[1000]; - sprintf(buf, - "Parallelogram = %e FE_RT Area %e FE_Q Area %e\n", - scale, - EvaluateArea(*mapping_euler, dof_handler, solution), - EvaluateArea(*mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - } - - delete (mapping_euler); - - delete (dof_handler); - delete (dof_handler_def); - - return (0); -} diff --git a/tests/fail/rt_distorted_02.cc b/tests/fail/rt_distorted_02.cc deleted file mode 100644 index f1f432547d..0000000000 --- a/tests/fail/rt_distorted_02.cc +++ /dev/null @@ -1,447 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2003 - 2023 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - -/* - * Snippet to demonstrate some properties of the deal.II implementation of - * the RT spaces. - */ - - - -#include "../tests.h" - -#define PRECISION 2 - - -char buf[1000]; - - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - - - -template -class TestMap1 : public Function -{ -public: - TestMap1(const unsigned int n_components) - : Function(n_components) - {} - - virtual ~TestMap1() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - - -template -double -TestMap1::value(const Point &p, const unsigned int component) const -{ - // u = x^2, v = y^2, dudx = 2 x, dvdy = 2 y, div u = 2x + 2y - // I.e. \int div u = 2 (for unit square) - - if (component == 0) - return (p(0) * p(0)); - if (component == 1) - return (p(1) * p(1)); - - return (0); -} - - -template -void -TestMap1::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - - // Just fill the vector with the appropriate components - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - - -///----------------------------------------------------------------------- - -template -class TestDef1 : public Function -{ -private: - const double phi; - -public: - TestDef1(const unsigned int n_components, const double ph) - : Function(n_components) - , phi(ph) - {} - - virtual ~TestDef1() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - - -template -double -TestDef1::value(const Point &p, const unsigned int component) const -{ - Point<2> center; - center(0) = 0.5; - center(1) = 0.5; - double rad = p.distance(center), - phi_p = atan2(p(0) - center(0), p(1) - center(1)); - - if (component == 0) - return rad * (sin(phi + phi_p) - sin(phi_p)); - else - return rad * (cos(phi + phi_p) - cos(phi_p)); -} - - -template -void -TestDef1::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - -///----------------------------------------------------------------------- - - -template -class TestDef2 : public Function -{ -private: - const double scale; - -public: - TestDef2(const unsigned int n_components, const double sc) - : Function(n_components) - , scale(sc) - {} - - virtual ~TestDef2() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestDef2::value(const Point &p, const unsigned int component) const -{ - double x = p(0), y = p(1); - - if (component == 0) - return scale * x; - else - return scale * y; -} - - -template -void -TestDef2::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - -///----------------------------------------------------------------------- -// testDef3 implements parallelograms ... - - -template -class TestDef3 : public Function -{ -private: - const double scale; - -public: - TestDef3(const unsigned int n_components, const double sc) - : Function(n_components) - , scale(sc) - {} - - virtual ~TestDef3() - {} - - virtual double - value(const Point &p, const unsigned int component = 0) const; - - void - vector_value(const Point &p, Vector &return_value) const; -}; - - -template -double -TestDef3::value(const Point &p, const unsigned int component) const -{ - double y = p(1); - - if (component == 0) - return scale * y; - else - return 0; -} - - -template -void -TestDef3::vector_value(const Point &p, - Vector & return_value) const -{ - Assert(return_value.size() == this->n_components, - ExcDimensionMismatch(return_value.size(), this->n_components)); - for (unsigned int iCount = 0; iCount < this->n_components; ++iCount) - return_value(iCount) = value(p, iCount); -} - - - -/* - * Check the value of the derivative field. - */ - -double -EvaluateDiver(Mapping<2> & mapping, - DoFHandler<2> & dof_handler, - Vector &solution) -{ - // Use a high order quadrature. - QGauss<2> quad(6); - FEValues<2> fe_values(mapping, - dof_handler.get_fe(), - quad, - UpdateFlags(update_values | update_quadrature_points | - update_gradients | update_JxW_values | - update_contravariant_transformation)); - - const unsigned int n_q_points = quad.size(); - const unsigned int n_components = dof_handler.get_fe().n_components(); - - // Cell iterators - DoFHandler<2>::active_cell_iterator cell = dof_handler.begin_active(), - endc = dof_handler.end(); - double result = 0; - - for (; cell != endc; ++cell) - { - fe_values.reinit(cell); - - // Get values from solution vector (For Trap.Rule) - std::vector> this_value(n_q_points, - Vector(n_components)); - fe_values.get_function_values(solution, this_value); - - std::vector>> grads_here( - n_q_points, std::vector>(n_components)); - fe_values.get_function_gradients(solution, grads_here); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - { - double JxW = fe_values.JxW(q_point); - double dudx = grads_here[q_point][0][0]; - double dvdy = grads_here[q_point][1][1]; - result += (dudx + dvdy) * JxW; - } - } - - return (result); -} - - -int -main() -{ - initlog(); - deallog.get_file_stream().precision(PRECISION); - deallog.get_file_stream().setf(std::ios::fixed); - - Triangulation<2> tria_test; - Point<2> p1(0, 0), p2(1, 1); - - GridGenerator::hyper_rectangle(tria_test, p1, p2); - tria_test.refine_global(1); - GridTools::distort_random(0.4, tria_test); - - // Create a DoFHandler for the RT space - FE_RaviartThomas<2> fe(2); - DoFHandler<2> dof_handler(tria_test); - dof_handler.distribute_dofs(fe); - - QGauss<2> quad_temp(6); - sprintf(buf, - "DoFs per Quad: %i per Line %i per Vert %i\n", - fe.dofs_per_quad, - fe.dofs_per_line, - fe.dofs_per_vertex); - deallog << buf; - - sprintf(buf, "QPoints %i\n", quad_temp.size()); - deallog << buf; - - // Create an deformation object for the Eulerian mapping - FESystem<2> fe_def(FE_Q<2>(1), 2); - DoFHandler<2> dof_handler_def(tria_test); - dof_handler_def.distribute_dofs(fe_def); - - // Alloc some DoFs - Vector solution, solution_q, deformation; - solution.reinit(dof_handler.n_dofs()); - solution_q.reinit(dof_handler_def.n_dofs()); - deformation.reinit(dof_handler_def.n_dofs()); - - // Project solution onto RT FE field - AffineConstraints hn_constraints; - hn_constraints.clear(); - DoFTools::make_hanging_node_constraints(dof_handler, hn_constraints); - hn_constraints.close(); - VectorTools::project( - dof_handler, hn_constraints, QGauss<2>(6), TestMap1<2>(2), solution); - - // Project reference solution onto RT FE field - AffineConstraints hn_constraints_def; - hn_constraints_def.clear(); - DoFTools::make_hanging_node_constraints(dof_handler_def, hn_constraints_def); - hn_constraints_def.close(); - - VectorTools::project(dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestMap1<2>(2), - solution_q); - - MappingQ1Eulerian<2> mapping_euler(deformation, dof_handler_def); - - sprintf(buf, - "FE_RT Area %e FE_Q Area %e\n", - EvaluateDiver(mapping_euler, dof_handler, solution), - EvaluateDiver(mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - - // Try rotating the elements - for (double rotat = 0; rotat < 2 * numbers::PI; rotat += 0.25 * numbers::PI) - { - // Rotate element - VectorTools::project(dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef1<2>(2, rotat), - deformation); - sprintf(buf, - "phi = %e FE_RT Area %e FE_Q Area %e\n", - rotat, - EvaluateDiver(mapping_euler, dof_handler, solution), - EvaluateDiver(mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - } - - // Try resizing the elements - for (double scale = -0.75; scale < 4.0; scale += 0.25) - { - VectorTools::project(dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef2<2>(2, scale), - deformation); - sprintf(buf, - "Scale = %e FE_RT Area %e FE_Q Area %e\n", - scale, - EvaluateDiver(mapping_euler, dof_handler, solution), - EvaluateDiver(mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - } - - // Try paralellogramming the elements - for (double scale = -1.0; scale < 1.0; scale += 0.25) - { - VectorTools::project(dof_handler_def, - hn_constraints_def, - QGauss<2>(6), - TestDef3<2>(2, scale), - deformation); - sprintf(buf, - "Scale = %e FE_RT Area %e FE_Q Area %e\n", - scale, - EvaluateDiver(mapping_euler, dof_handler, solution), - EvaluateDiver(mapping_euler, dof_handler_def, solution_q)); - deallog << buf; - } - - - return (0); -} diff --git a/tests/fail/scalapack_15_b.cc b/tests/fail/scalapack_15_b.cc deleted file mode 100644 index e5c6c92ac0..0000000000 --- a/tests/fail/scalapack_15_b.cc +++ /dev/null @@ -1,221 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2017 - 2022 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - -#include "../tests.h" - -#include "../lapack/create_matrix.h" - -// test eigenpairs_symmetric_by_index_MRRR(const std::pair &, const bool) for the largest eigenvalues with eigenvectors - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - - -template -void -test(const unsigned int size, - const unsigned int block_size, - const NumberType tol) -{ - MPI_Comm mpi_communicator(MPI_COMM_WORLD); - const unsigned int n_mpi_processes( - Utilities::MPI::n_mpi_processes(mpi_communicator)); - const unsigned int this_mpi_process( - Utilities::MPI::this_mpi_process(mpi_communicator)); - - ConditionalOStream pcout(std::cout, (this_mpi_process == 0)); - - std::shared_ptr grid = - std::make_shared( - mpi_communicator, size, size, block_size, block_size); - - pcout << size << ' ' << block_size << ' ' << grid->get_process_grid_rows() - << ' ' << grid->get_process_grid_columns() << std::endl; - - const unsigned int n_eigenvalues = size; - const unsigned int max_n_eigenvalues = 5; - - // Create SPD matrices of requested size: - FullMatrix full_A(size); - std::vector eigenvalues_Lapack(size); - std::vector> s_eigenvectors_(max_n_eigenvalues, - Vector(size)); - std::vector> p_eigenvectors_(max_n_eigenvalues, - Vector(size)); - FullMatrix p_eigenvectors(size, size); - - ScaLAPACKMatrix scalapack_syevr(size, grid, block_size); - scalapack_syevr.set_property(LAPACKSupport::Property::symmetric); - - create_spd(full_A); - scalapack_syevr = full_A; - - // Lapack as reference - { - std::vector lapack_A(size * size); - for (unsigned int i = 0; i < size; ++i) - for (unsigned int j = 0; j < size; ++j) - lapack_A[i * size + j] = full_A(i, j); - - int info; // Variable containing information about the successful exit of - // the lapack routine - char jobz = 'V'; //'V': eigenpairs of A are computed - char uplo = 'U'; // storage format of the matrix A; not so important as - // matrix is symmetric - char range = 'I'; // the il-th through iu-th eigenvalues will be found - int LDA = size; // leading dimension of the matrix A - NumberType vl = 0, vu = 0; - int il = size - max_n_eigenvalues + 1, iu = size; - char sign = 'S'; - NumberType abstol = lamch(&sign); - abstol *= 2; - int m = 0; - std::vector eigenvectors(size * size); - int LDZ = size; - std::vector isuppz(2 * size); - int lwork = -1; // length of vector/array work - std::vector work(1); - int liwork = -1; // length of vector/array iwork - std::vector iwork(1); - // by setting lwork to -1 a workspace query for work is done - // as matrix is symmetric: LDA == size of matrix - syevr(&jobz, - &range, - &uplo, - &LDA, - lapack_A.data(), - &LDA, - &vl, - &vu, - &il, - &iu, - &abstol, - &m, - eigenvalues_Lapack.data(), - eigenvectors.data(), - &LDZ, - isuppz.data(), - work.data(), - &lwork, - iwork.data(), - &liwork, - &info); - - lwork = work[0]; - work.resize(lwork); - liwork = iwork[0]; - iwork.resize(liwork); - - syevr(&jobz, - &range, - &uplo, - &LDA, - lapack_A.data(), - &LDA, - &vl, - &vu, - &il, - &iu, - &abstol, - &m, - eigenvalues_Lapack.data(), - eigenvectors.data(), - &LDZ, - isuppz.data(), - work.data(), - &lwork, - iwork.data(), - &liwork, - &info); - - AssertThrow(info == 0, LAPACKSupport::ExcErrorCode("syevr", info)); - for (int i = 0; i < max_n_eigenvalues; ++i) - for (int j = 0; j < size; ++j) - s_eigenvectors_[i][j] = - eigenvectors[(max_n_eigenvalues - 1 - i) * size + j]; - } - - // the actual test: - - pcout - << "comparing " << max_n_eigenvalues - << " eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr:" - << std::endl; - const std::vector eigenvalues_psyer = - scalapack_syevr.eigenpairs_symmetric_by_index_MRRR( - std::make_pair(size - max_n_eigenvalues, size - 1), true); - scalapack_syevr.copy_to(p_eigenvectors); - for (unsigned int i = 0; i < max_n_eigenvalues; ++i) - AssertThrow(std::abs(eigenvalues_psyer[max_n_eigenvalues - i - 1] - - eigenvalues_Lapack[max_n_eigenvalues - i - 1]) / - std::abs(eigenvalues_Lapack[max_n_eigenvalues - i - 1]) < - tol, - ExcInternalError()); - - pcout << " with respect to the given tolerance the eigenvalues coincide" - << std::endl; - - for (unsigned int i = 0; i < max_n_eigenvalues; ++i) - for (unsigned int j = 0; j < size; ++j) - p_eigenvectors_[i][j] = p_eigenvectors(j, max_n_eigenvalues - 1 - i); - - // product of eigenvectors computed using Lapack and ScaLapack has to be - // either 1 or -1 - for (unsigned int i = 0; i < max_n_eigenvalues; ++i) - { - const NumberType product = p_eigenvectors_[i] * s_eigenvectors_[i]; - // the requirement for alignment of the eigenvectors has to be released - AssertThrow(std::abs(std::abs(product) - 1) < tol * 10, - ExcInternalError()); - } - pcout - << " with respect to the given tolerance also the eigenvectors coincide" - << std::endl - << std::endl; -} - - - -int -main(int argc, char **argv) -{ - Utilities::MPI::MPI_InitFinalize mpi_initialization( - argc, argv, numbers::invalid_unsigned_int); - - const std::vector sizes = {{200, 400, 600}}; - const std::vector blocks = {{32, 64}}; - - const double tol = 1e-10; - - for (const auto &s : sizes) - for (const auto &b : blocks) - if (b <= s) - test(s, b, tol); -} diff --git a/tests/fail/scalapack_15_b.mpirun=1.output b/tests/fail/scalapack_15_b.mpirun=1.output deleted file mode 100644 index b55bfbdf68..0000000000 --- a/tests/fail/scalapack_15_b.mpirun=1.output +++ /dev/null @@ -1,30 +0,0 @@ -200 32 1 1 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -200 64 1 1 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 32 1 1 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 64 1 1 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 32 1 1 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 64 1 1 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - diff --git a/tests/fail/scalapack_15_b.mpirun=10.output b/tests/fail/scalapack_15_b.mpirun=10.output deleted file mode 100644 index b3ea1071a5..0000000000 --- a/tests/fail/scalapack_15_b.mpirun=10.output +++ /dev/null @@ -1,30 +0,0 @@ -200 32 3 3 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -200 64 3 3 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 32 3 3 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 64 3 3 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 32 3 3 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 64 3 3 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - diff --git a/tests/fail/scalapack_15_b.mpirun=4.output b/tests/fail/scalapack_15_b.mpirun=4.output deleted file mode 100644 index 10ea4f4a8c..0000000000 --- a/tests/fail/scalapack_15_b.mpirun=4.output +++ /dev/null @@ -1,30 +0,0 @@ -200 32 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -200 64 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 32 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 64 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 32 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 64 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - diff --git a/tests/fail/scalapack_15_b.mpirun=5.output b/tests/fail/scalapack_15_b.mpirun=5.output deleted file mode 100644 index 10ea4f4a8c..0000000000 --- a/tests/fail/scalapack_15_b.mpirun=5.output +++ /dev/null @@ -1,30 +0,0 @@ -200 32 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -200 64 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 32 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -400 64 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 32 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - -600 64 2 2 -comparing 5 eigenvalues and eigenvectors computed using LAPACK and ScaLAPACK p_syevr: - with respect to the given tolerance the eigenvalues coincide - with respect to the given tolerance also the eigenvectors coincide - diff --git a/tests/fail/step-15.cc b/tests/fail/step-15.cc deleted file mode 100644 index 361ee91f5d..0000000000 --- a/tests/fail/step-15.cc +++ /dev/null @@ -1,624 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2005 - 2022 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// a un-hp-ified version of hp/step-15 - -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "../tests.h" - - -template -inline double -gradient_power(const Tensor<1, dim> &v, const unsigned int n) -{ - Assert((n / 2) * 2 == n, ExcMessage("Value of 'n' must be even")); - double p = 1; - for (unsigned int k = 0; k < n; k += 2) - p *= (v * v); - return p; -} - - - -class InitializationValues : public Function<1> -{ -public: - InitializationValues() - : Function<1>() - {} - - virtual double - value(const Point<1> &p, const unsigned int component = 0) const; -}; - - - -double -InitializationValues::value(const Point<1> &p, const unsigned int) const -{ - const double base = std::pow(p(0), 1. / 3.); - const double random = random_value(-1., 1.); - return std::max(base + .1 * random, 0.); -} - - - -template -class MinimizationProblem -{ -public: - MinimizationProblem(const unsigned int run_number); - void - run(); - -private: - void - initialize_solution(); - void - setup_system_on_mesh(); - void - assemble_step(); - double - line_search(const Vector &update) const; - void - do_step(); - void - output_results() const; - void - refine_grid(); - - static double - energy(const DoFHandler &dof_handler, const Vector &function); - - - const unsigned int run_number; - - Triangulation triangulation; - - FE_Q fe; - DoFHandler dof_handler; - - AffineConstraints hanging_node_constraints; - - SparsityPattern sparsity_pattern; - SparseMatrix matrix; - - Vector present_solution; - Vector residual; -}; - - - -template -MinimizationProblem::MinimizationProblem(const unsigned int run_number) - : run_number(run_number) - , fe(1) - , dof_handler(triangulation) -{} - - -template <> -void -MinimizationProblem<1>::initialize_solution() -{ - present_solution.reinit(dof_handler.n_dofs()); - VectorTools::interpolate(dof_handler, - InitializationValues(), - present_solution); - - DoFHandler<1>::cell_iterator cell; - cell = dof_handler.begin(0); - while (cell->at_boundary(0) == false) - cell = cell->neighbor(0); - while (cell->has_children() == true) - cell = cell->child(0); - present_solution(cell->vertex_dof_index(0, 0)) = 0; - - cell = dof_handler.begin(0); - while (cell->at_boundary(1) == false) - cell = cell->neighbor(1); - while (cell->has_children()) - cell = cell->child(1); - present_solution(cell->vertex_dof_index(1, 0)) = 1; -} - - -template -void -MinimizationProblem::setup_system_on_mesh() -{ - hanging_node_constraints.clear(); - DoFTools::make_hanging_node_constraints(dof_handler, - hanging_node_constraints); - hanging_node_constraints.close(); - - sparsity_pattern.reinit(dof_handler.n_dofs(), - dof_handler.n_dofs(), - dof_handler.max_couplings_between_dofs()); - DoFTools::make_sparsity_pattern(dof_handler, sparsity_pattern); - - hanging_node_constraints.condense(sparsity_pattern); - - sparsity_pattern.compress(); -} - - - -template -void -MinimizationProblem::assemble_step() -{ - matrix.reinit(sparsity_pattern); - residual.reinit(dof_handler.n_dofs()); - - QGauss quadrature_formula(4); - FEValues fe_values(fe, - quadrature_formula, - update_values | update_gradients | - update_quadrature_points | update_JxW_values); - - const unsigned int dofs_per_cell = fe.dofs_per_cell; - const unsigned int n_q_points = quadrature_formula.size(); - - FullMatrix cell_matrix(dofs_per_cell, dofs_per_cell); - Vector cell_rhs(dofs_per_cell); - - std::vector local_dof_indices(dofs_per_cell); - - std::vector local_solution_values(n_q_points); - std::vector> local_solution_grads(n_q_points); - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - { - cell_matrix = 0; - cell_rhs = 0; - - fe_values.reinit(cell); - - fe_values.get_function_values(present_solution, local_solution_values); - fe_values.get_function_gradients(present_solution, local_solution_grads); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - { - const double u = local_solution_values[q_point], - x = fe_values.quadrature_point(q_point)(0); - const double x_minus_u3 = (x - std::pow(u, 3)); - const Tensor<1, dim> u_prime = local_solution_grads[q_point]; - - for (unsigned int i = 0; i < dofs_per_cell; ++i) - for (unsigned int j = 0; j < dofs_per_cell; ++j) - cell_matrix(i, j) += (fe_values.shape_grad(i, q_point) * - fe_values.shape_grad(j, q_point) * - cell->diameter() * cell->diameter() + - fe_values.shape_value(i, q_point) * - fe_values.shape_value(j, q_point)) * - fe_values.JxW(q_point); - - for (unsigned int i = 0; i < dofs_per_cell; ++i) - cell_rhs(i) += - -((6. * x_minus_u3 * gradient_power(u_prime, 4) * - fe_values.shape_value(i, q_point) * - (x_minus_u3 * (u_prime * fe_values.shape_grad(i, q_point)) - - (u_prime * u_prime) * u * u * - fe_values.shape_value(i, q_point))) * - fe_values.JxW(q_point)); - } - - cell->get_dof_indices(local_dof_indices); - for (unsigned int i = 0; i < dofs_per_cell; ++i) - { - for (unsigned int j = 0; j < dofs_per_cell; ++j) - matrix.add(local_dof_indices[i], - local_dof_indices[j], - cell_matrix(i, j)); - - residual(local_dof_indices[i]) += cell_rhs(i); - } - } - - hanging_node_constraints.condense(matrix); - hanging_node_constraints.condense(residual); - - std::map boundary_values; - VectorTools::interpolate_boundary_values(dof_handler, - 0, - Functions::ZeroFunction(), - boundary_values); - if (dim == 1) - VectorTools::interpolate_boundary_values(dof_handler, - 1, - Functions::ZeroFunction(), - boundary_values); - Vector dummy(residual.size()); - MatrixTools::apply_boundary_values(boundary_values, matrix, dummy, residual); -} - - -template -double -MinimizationProblem::line_search(const Vector &update) const -{ - double alpha = 0.; - Vector tmp(present_solution.size()); - - for (unsigned int step = 0; step < 5; ++step) - { - tmp = present_solution; - tmp.add(alpha, update); - const double f_a = energy(dof_handler, tmp); - - const double dalpha = (alpha != 0 ? alpha / 100 : 0.01); - - tmp = present_solution; - tmp.add(alpha + dalpha, update); - const double f_a_plus = energy(dof_handler, tmp); - - tmp = present_solution; - tmp.add(alpha - dalpha, update); - const double f_a_minus = energy(dof_handler, tmp); - - const double f_a_prime = (f_a_plus - f_a_minus) / (2 * dalpha); - const double f_a_doubleprime = - ((f_a_plus - 2 * f_a + f_a_minus) / (dalpha * dalpha)); - - if (std::fabs(f_a_prime) < 1e-7 * std::fabs(f_a)) - break; - - if (std::fabs(f_a_doubleprime) < 1e-7 * std::fabs(f_a_prime)) - break; - - double step_length = -f_a_prime / f_a_doubleprime; - - for (unsigned int i = 0; i < 3; ++i) - { - tmp = present_solution; - tmp.add(alpha + step_length, update); - const double e = energy(dof_handler, tmp); - - if (e >= f_a) - step_length /= 2; - else - break; - } - - alpha += step_length; - } - - return alpha; -} - - - -template -void -MinimizationProblem::do_step() -{ - assemble_step(); - - Vector update(present_solution.size()); - { - SolverControl solver_control(residual.size(), 1e-2 * residual.l2_norm()); - SolverCG<> solver(solver_control); - - PreconditionSSOR<> preconditioner; - preconditioner.initialize(matrix); - - solver.solve(matrix, update, residual, preconditioner); - hanging_node_constraints.distribute(update); - } - - const double step_length = line_search(update); - present_solution.add(step_length, update); -} - - - -template -void -MinimizationProblem::output_results() const -{ - DataOut data_out; - data_out.attach_dof_handler(dof_handler); - data_out.add_data_vector(present_solution, "solution"); - data_out.build_patches(); - - std::ostringstream filename; - filename << "solution-" << run_number << ".gnuplot" << std::ends; - - data_out.write_gnuplot(deallog.get_file_stream()); -} - - - -template <> -void -MinimizationProblem<1>::refine_grid() -{ - const unsigned int dim = 1; - - Vector error_indicators(triangulation.n_active_cells()); - - QTrapezoid quadrature; - FEValues fe_values(fe, - quadrature, - update_values | update_gradients | update_hessians | - update_quadrature_points | update_JxW_values); - - FEValues neighbor_fe_values(fe, quadrature, update_gradients); - - std::vector local_values(quadrature.size()); - std::vector> local_gradients(quadrature.size()); - std::vector> local_2nd_derivs(quadrature.size()); - - DoFHandler::active_cell_iterator cell = dof_handler.begin_active(), - endc = dof_handler.end(); - for (unsigned int cell_index = 0; cell != endc; ++cell, ++cell_index) - { - fe_values.reinit(cell); - fe_values.get_function_values(present_solution, local_values); - fe_values.get_function_gradients(present_solution, local_gradients); - fe_values.get_function_hessians(present_solution, local_2nd_derivs); - - double cell_residual_norm = 0; - for (unsigned int q = 0; q < quadrature.size(); ++q) - { - const double x = fe_values.quadrature_point(q)[0]; - const double u = local_values[q]; - const double u_prime = local_gradients[q][0]; - const double u_doubleprime = local_2nd_derivs[q][0][0]; - const double local_residual_value = - ((x - u * u * u) * std::pow(u_prime, 4) * - (u * u * u_prime * u_prime + 5 * (x - u * u * u) * u_doubleprime + - 2 * u_prime * (1 - 3 * u * u * u_prime))); - - cell_residual_norm += - (local_residual_value * local_residual_value * fe_values.JxW(q)); - } - error_indicators(cell_index) = - cell_residual_norm * cell->diameter() * cell->diameter(); - - const double x_left = fe_values.quadrature_point(0)[0]; - const double x_right = fe_values.quadrature_point(1)[0]; - - AssertThrow(x_left == cell->vertex(0)[0], ExcInternalError()); - AssertThrow(x_right == cell->vertex(1)[0], ExcInternalError()); - - const double u_left = local_values[0]; - const double u_right = local_values[1]; - - const double u_prime_left = local_gradients[0][0]; - const double u_prime_right = local_gradients[1][0]; - - if (cell->at_boundary(0) == false) - { - DoFHandler::cell_iterator left_neighbor = cell->neighbor(0); - while (left_neighbor->has_children()) - left_neighbor = left_neighbor->child(1); - - neighbor_fe_values.reinit(left_neighbor); - neighbor_fe_values.get_function_gradients(present_solution, - local_gradients); - - const double neighbor_u_prime_left = local_gradients[1][0]; - - const double left_jump = - std::pow(x_left - std::pow(u_left, 3), 2) * - (std::pow(neighbor_u_prime_left, 5) - std::pow(u_prime_left, 5)); - error_indicators(cell_index) += - left_jump * left_jump * cell->diameter(); - } - - if (cell->at_boundary(1) == false) - { - DoFHandler::cell_iterator right_neighbor = cell->neighbor(1); - while (right_neighbor->has_children()) - right_neighbor = right_neighbor->child(0); - - neighbor_fe_values.reinit(right_neighbor); - neighbor_fe_values.get_function_gradients(present_solution, - local_gradients); - - const double neighbor_u_prime_right = local_gradients[0][0]; - - const double right_jump = - std::pow(x_right - std::pow(u_right, 3), 2) * - (std::pow(neighbor_u_prime_right, 5) - std::pow(u_prime_right, 5)); - error_indicators(cell_index) += - right_jump * right_jump * cell->diameter(); - } - } - - GridRefinement::refine_and_coarsen_fixed_number(triangulation, - error_indicators, - 0.3, - 0.03); - triangulation.prepare_coarsening_and_refinement(); - - SolutionTransfer solution_transfer(dof_handler); - solution_transfer.prepare_for_coarsening_and_refinement(present_solution); - - triangulation.execute_coarsening_and_refinement(); - dof_handler.distribute_dofs(fe); - - Vector tmp(dof_handler.n_dofs()); - solution_transfer.interpolate(present_solution, tmp); - present_solution = tmp; - - hanging_node_constraints.clear(); - DoFTools::make_hanging_node_constraints(dof_handler, - hanging_node_constraints); - hanging_node_constraints.close(); - hanging_node_constraints.distribute(present_solution); -} - - - -template -double -MinimizationProblem::energy(const DoFHandler &dof_handler, - const Vector & function) -{ - QGauss quadrature_formula(4); - FEValues fe_values(dof_handler.get_fe(), - quadrature_formula, - update_values | update_gradients | - update_quadrature_points | update_JxW_values); - - const unsigned int n_q_points = quadrature_formula.size(); - - std::vector local_solution_values(n_q_points); - std::vector> local_solution_grads(n_q_points); - - double energy = 0.; - - typename DoFHandler::active_cell_iterator cell = - dof_handler.begin_active(), - endc = dof_handler.end(); - for (; cell != endc; ++cell) - { - fe_values.reinit(cell); - fe_values.get_function_values(function, local_solution_values); - fe_values.get_function_gradients(function, local_solution_grads); - - for (unsigned int q_point = 0; q_point < n_q_points; ++q_point) - energy += (std::pow(fe_values.quadrature_point(q_point)(0) - - std::pow(local_solution_values[q_point], 3), - 2) * - gradient_power(local_solution_grads[q_point], 6) * - fe_values.JxW(q_point)); - } - - return energy; -} - - -template -void -MinimizationProblem::run() -{ - GridGenerator::hyper_cube(triangulation, 0., 1.); - triangulation.refine_global(4); - dof_handler.distribute_dofs(fe); - initialize_solution(); - - double last_energy = energy(dof_handler, present_solution); - - while (true) - { - setup_system_on_mesh(); - - for (unsigned int iteration = 0; iteration < 5; ++iteration) - do_step(); - - const double this_energy = energy(dof_handler, present_solution); - deallog << " Energy: " << this_energy << std::endl; - - if ((last_energy - this_energy) < 1e-5 * last_energy) - break; - - last_energy = this_energy; - - refine_grid(); - } - - output_results(); - - deallog << std::endl; -} - - -int -main() -{ - std::ofstream logfile("output"); - try - { - deallog << std::setprecision(2); - logfile << std::setprecision(2); - - deallog.attach(logfile); - - const unsigned int n_realizations = 10; - for (unsigned int realization = 0; realization < n_realizations; - ++realization) - { - deallog << "Realization " << realization << ':' << std::endl; - - MinimizationProblem<1> minimization_problem_1d(realization); - minimization_problem_1d.run(); - } - } - catch (const std::exception &exc) - { - deallog << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - deallog << "Exception on processing: " << std::endl - << exc.what() << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - } - catch (...) - { - deallog << std::endl - << std::endl - << "----------------------------------------------------" - << std::endl; - deallog << "Unknown exception!" << std::endl - << "Aborting!" << std::endl - << "----------------------------------------------------" - << std::endl; - return 1; - } - return 0; -} diff --git a/tests/fail/step-15.output b/tests/fail/step-15.output deleted file mode 100644 index 55206eeac4..0000000000 --- a/tests/fail/step-15.output +++ /dev/null @@ -1,3961 +0,0 @@ - -DEAL::Realization 0: -DEAL:cg::Starting value 61. -DEAL:cg::Convergence step 2 value 0.23 -DEAL:cg::Starting value 4.0 -DEAL:cg::Convergence step 2 value 0.018 -DEAL:cg::Starting value 1.7 -DEAL:cg::Convergence step 2 value 0.0028 -DEAL:cg::Starting value 0.70 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:cg::Starting value 4.1 -DEAL:cg::Convergence step 2 value 0.0058 -DEAL:: Energy: 0.36 -DEAL:cg::Starting value 4.9 -DEAL:cg::Convergence step 2 value 0.026 -DEAL:cg::Starting value 1.9 -DEAL:cg::Convergence step 2 value 0.015 -DEAL:cg::Starting value 2.4 -DEAL:cg::Convergence step 2 value 0.016 -DEAL:cg::Starting value 1.3 -DEAL:cg::Convergence step 3 value 0.00094 -DEAL:cg::Starting value 1.5 -DEAL:cg::Convergence step 2 value 0.012 -DEAL:: Energy: 0.17 -DEAL:cg::Starting value 1.9 -DEAL:cg::Convergence step 2 value 0.011 -DEAL:cg::Starting value 0.94 -DEAL:cg::Convergence step 2 value 0.0071 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0055 -DEAL:cg::Starting value 0.67 -DEAL:cg::Convergence step 2 value 0.0047 -DEAL:cg::Starting value 0.80 -DEAL:cg::Convergence step 2 value 0.0042 -DEAL:: Energy: 0.14 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 3 value 0.0013 -DEAL:cg::Starting value 0.66 -DEAL:cg::Convergence step 3 value 0.0012 -DEAL:cg::Starting value 0.68 -DEAL:cg::Convergence step 3 value 0.0012 -DEAL:cg::Starting value 0.58 -DEAL:cg::Convergence step 3 value 0.0012 -DEAL:cg::Starting value 0.63 -DEAL:cg::Convergence step 3 value 0.0011 -DEAL:: Energy: 0.13 -DEAL:cg::Starting value 0.77 -DEAL:cg::Convergence step 2 value 0.0069 -DEAL:cg::Starting value 0.51 -DEAL:cg::Convergence step 3 value 0.00047 -DEAL:cg::Starting value 0.56 -DEAL:cg::Convergence step 2 value 0.0050 -DEAL:cg::Starting value 0.47 -DEAL:cg::Convergence step 3 value 0.00045 -DEAL:cg::Starting value 0.55 -DEAL:cg::Convergence step 2 value 0.0047 -DEAL:: Energy: 0.13 -DEAL:cg::Starting value 0.57 -DEAL:cg::Convergence step 2 value 0.0047 -DEAL:cg::Starting value 0.36 -DEAL:cg::Convergence step 2 value 0.0030 -DEAL:cg::Starting value 0.82 -DEAL:cg::Convergence step 2 value 0.0079 -DEAL:cg::Starting value 1.9e+04 -DEAL:cg::Convergence step 2 value 1.5e+02 -DEAL:cg::Starting value 2.1e+06 -DEAL:cg::Convergence step 2 value 1.4e+04 -DEAL:: Energy: 4.3e+04 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.25 0.58 -0.31 0.67 - - -0.31 0.67 -0.38 0.69 - - -0.44 0.78 -0.50 0.80 - - -0.50 0.80 -0.56 0.75 - - -0.56 0.75 -0.62 0.76 - - -0.62 0.76 -0.69 0.81 - - -0.69 0.81 -0.75 0.85 - - -0.75 0.85 -0.81 0.89 - - -0.94 0.94 -1.0 1.0 - - -0.81 0.89 -0.84 0.89 - - -0.84 0.89 -0.88 0.89 - - -0.88 0.89 -0.91 0.91 - - -0.91 0.91 -0.94 0.94 - - -0.38 0.69 -0.41 0.73 - - -0.41 0.73 -0.44 0.78 - - -0.22 0.53 -0.25 0.58 - - -0.20 0.51 -0.22 0.53 - - -0.094 0.30 -0.10 0.31 - - -0.11 0.33 -0.12 0.35 - - -0.12 0.35 -0.12 0.36 - - -0.12 0.36 -0.13 0.38 - - -0.13 0.38 -0.14 0.40 - - -0.14 0.40 -0.15 0.41 - - -0.15 0.41 -0.16 0.43 - - -0.16 0.43 -0.16 0.44 - - -0.16 0.44 -0.17 0.46 - - -0.17 0.46 -0.18 0.47 - - -0.18 0.47 -0.19 0.49 - - -0.19 0.49 -0.20 0.50 - - -0.20 0.50 -0.20 0.51 - - -0.0 0.0 -0.0039 0.018 - - -0.031 0.12 -0.035 0.14 - - -0.035 0.14 -0.039 0.15 - - -0.039 0.15 -0.043 0.16 - - -0.043 0.16 -0.047 0.17 - - -0.047 0.17 -0.051 0.18 - - -0.051 0.18 -0.055 0.19 - - -0.062 0.21 -0.066 0.22 - - -0.066 0.22 -0.070 0.24 - - -0.070 0.24 -0.074 0.24 - - -0.074 0.24 -0.078 0.25 - - -0.078 0.25 -0.082 0.26 - - -0.082 0.26 -0.086 0.27 - - -0.090 0.31 -0.094 0.30 - - -0.055 0.19 -0.059 0.20 - - -0.059 0.20 -0.062 0.21 - - -0.10 0.31 -0.11 0.32 - - -0.11 0.32 -0.11 0.33 - - -0.0039 0.018 -0.0059 0.028 - - -0.0059 0.028 -0.0078 0.035 - - -0.0078 0.035 -0.0098 0.046 - - -0.0098 0.046 -0.012 0.052 - - -0.012 0.052 -0.014 0.062 - - -0.014 0.062 -0.016 0.068 - - -0.016 0.068 -0.018 0.076 - - -0.018 0.076 -0.020 0.084 - - -0.020 0.084 -0.021 0.089 - - -0.021 0.089 -0.023 0.099 - - -0.023 0.099 -0.025 0.10 - - -0.025 0.10 -0.027 0.12 - - -0.027 0.12 -0.029 0.11 - - -0.029 0.11 -0.031 0.12 - - -0.086 0.27 -0.088 0.23 - - -0.088 0.23 -0.090 0.31 - - -DEAL:: -DEAL::Realization 1: -DEAL:cg::Starting value 19. -DEAL:cg::Convergence step 2 value 0.054 -DEAL:cg::Starting value 3.8 -DEAL:cg::Convergence step 2 value 0.014 -DEAL:cg::Starting value 1.5 -DEAL:cg::Convergence step 2 value 0.0031 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.54 -DEAL:cg::Convergence step 2 value 0.0016 -DEAL:: Energy: 0.20 -DEAL:cg::Starting value 1.8 -DEAL:cg::Convergence step 2 value 0.0073 -DEAL:cg::Starting value 0.63 -DEAL:cg::Convergence step 2 value 0.0048 -DEAL:cg::Starting value 0.96 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:cg::Starting value 0.28 -DEAL:cg::Convergence step 2 value 0.0021 -DEAL:cg::Starting value 0.38 -DEAL:cg::Convergence step 2 value 0.0019 -DEAL:: Energy: 0.17 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.58 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:cg::Starting value 0.62 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:cg::Starting value 0.49 -DEAL:cg::Convergence step 2 value 0.0030 -DEAL:cg::Starting value 0.53 -DEAL:cg::Convergence step 2 value 0.0025 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.74 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.46 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.50 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:cg::Starting value 0.41 -DEAL:cg::Convergence step 3 value 0.00044 -DEAL:cg::Starting value 0.48 -DEAL:cg::Convergence step 2 value 0.0034 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.52 -DEAL:cg::Convergence step 3 value 0.00068 -DEAL:cg::Starting value 0.39 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.38 -DEAL:cg::Convergence step 2 value 0.0037 -DEAL:cg::Starting value 0.36 -DEAL:cg::Convergence step 2 value 0.0027 -DEAL:cg::Starting value 0.36 -DEAL:cg::Convergence step 3 value 0.00043 -DEAL:: Energy: 0.15 -DEAL:cg::Starting value 0.42 -DEAL:cg::Convergence step 3 value 0.00046 -DEAL:cg::Starting value 61. -DEAL:cg::Convergence step 2 value 0.35 -DEAL:cg::Starting value 5.5e+06 -DEAL:cg::Convergence step 2 value 2.9e+04 -DEAL:cg::Starting value 8.7e+06 -DEAL:cg::Convergence step 2 value 4.5e+04 -DEAL:cg::Starting value 8.7e+06 -DEAL:cg::Convergence step 2 value 4.6e+04 -DEAL:: Energy: 2.0e+05 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.25 0.62 -0.31 0.66 - - -0.31 0.66 -0.38 0.69 - - -0.56 0.85 -0.62 0.82 - - -0.81 0.94 -0.88 0.93 - - -0.88 0.93 -0.94 0.96 - - -0.94 0.96 -1.0 1.0 - - -0.38 0.69 -0.41 0.74 - - -0.53 0.80 -0.56 0.85 - - -0.44 0.79 -0.47 0.77 - - -0.47 0.77 -0.50 0.76 - - -0.69 0.80 -0.72 0.83 - - -0.72 0.83 -0.75 0.86 - - -0.75 0.86 -0.78 0.90 - - -0.78 0.90 -0.81 0.94 - - -0.62 0.82 -0.66 0.81 - - -0.66 0.81 -0.69 0.80 - - -0.19 0.48 -0.20 0.52 - - -0.20 0.52 -0.22 0.55 - - -0.16 0.42 -0.17 0.45 - - -0.17 0.45 -0.19 0.48 - - -0.41 0.74 -0.42 0.76 - - -0.42 0.76 -0.44 0.79 - - -0.50 0.76 -0.52 0.78 - - -0.52 0.78 -0.53 0.80 - - -0.10 0.29 -0.11 0.31 - - -0.12 0.34 -0.12 0.35 - - -0.12 0.35 -0.13 0.37 - - -0.13 0.37 -0.14 0.38 - - -0.14 0.38 -0.15 0.40 - - -0.15 0.40 -0.16 0.42 - - -0.22 0.55 -0.23 0.56 - - -0.23 0.56 -0.23 0.58 - - -0.23 0.58 -0.24 0.60 - - -0.24 0.60 -0.25 0.62 - - -0.0 0.0 -0.0039 0.019 - - -0.0039 0.019 -0.0078 0.035 - - -0.0078 0.035 -0.012 0.050 - - -0.012 0.050 -0.016 0.064 - - -0.016 0.064 -0.020 0.078 - - -0.020 0.078 -0.023 0.090 - - -0.023 0.090 -0.027 0.10 - - -0.027 0.10 -0.031 0.11 - - -0.031 0.11 -0.035 0.13 - - -0.035 0.13 -0.039 0.14 - - -0.039 0.14 -0.043 0.15 - - -0.043 0.15 -0.047 0.16 - - -0.047 0.16 -0.051 0.17 - - -0.051 0.17 -0.055 0.18 - - -0.055 0.18 -0.059 0.19 - - -0.059 0.19 -0.062 0.20 - - -0.062 0.20 -0.066 0.21 - - -0.066 0.21 -0.070 0.22 - - -0.070 0.22 -0.074 0.23 - - -0.074 0.23 -0.078 0.24 - - -0.078 0.24 -0.082 0.25 - - -0.082 0.25 -0.086 0.26 - - -0.086 0.26 -0.090 0.27 - - -0.090 0.27 -0.094 0.28 - - -0.094 0.28 -0.098 0.29 - - -0.098 0.29 -0.10 0.29 - - -0.11 0.31 -0.11 0.30 - - -0.11 0.30 -0.11 0.26 - - -0.11 0.26 -0.12 0.36 - - -0.12 0.36 -0.12 0.34 - - -DEAL:: -DEAL::Realization 2: -DEAL:cg::Starting value 9.6 -DEAL:cg::Convergence step 2 value 0.029 -DEAL:cg::Starting value 3.5 -DEAL:cg::Convergence step 2 value 0.0077 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0021 -DEAL:cg::Starting value 1.9 -DEAL:cg::Convergence step 2 value 0.0030 -DEAL:cg::Starting value 0.72 -DEAL:cg::Convergence step 2 value 0.0028 -DEAL:: Energy: 0.24 -DEAL:cg::Starting value 1.8 -DEAL:cg::Convergence step 2 value 0.0078 -DEAL:cg::Starting value 1.9 -DEAL:cg::Convergence step 2 value 0.0024 -DEAL:cg::Starting value 1.0 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:cg::Starting value 1.0 -DEAL:cg::Convergence step 2 value 0.0015 -DEAL:cg::Starting value 0.64 -DEAL:cg::Convergence step 2 value 0.0015 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 1.3 -DEAL:cg::Convergence step 2 value 0.0068 -DEAL:cg::Starting value 0.66 -DEAL:cg::Convergence step 2 value 0.0053 -DEAL:cg::Starting value 0.75 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.53 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.61 -DEAL:cg::Convergence step 2 value 0.0034 -DEAL:: Energy: 0.14 -DEAL:cg::Starting value 0.80 -DEAL:cg::Convergence step 2 value 0.0058 -DEAL:cg::Starting value 0.50 -DEAL:cg::Convergence step 2 value 0.0045 -DEAL:cg::Starting value 0.54 -DEAL:cg::Convergence step 2 value 0.0042 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.51 -DEAL:cg::Convergence step 2 value 0.0037 -DEAL:: Energy: 0.14 -DEAL:cg::Starting value 0.57 -DEAL:cg::Convergence step 3 value 0.00063 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 3 value 0.00058 -DEAL:cg::Starting value 0.40 -DEAL:cg::Convergence step 2 value 0.0037 -DEAL:cg::Starting value 0.39 -DEAL:cg::Convergence step 3 value 0.00054 -DEAL:cg::Starting value 0.39 -DEAL:cg::Convergence step 2 value 0.0036 -DEAL:: Energy: 0.13 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0037 -DEAL:cg::Starting value 0.36 -DEAL:cg::Convergence step 2 value 0.0034 -DEAL:cg::Starting value 0.38 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.33 -DEAL:cg::Convergence step 3 value 0.00034 -DEAL:cg::Starting value 0.35 -DEAL:cg::Convergence step 2 value 0.0034 -DEAL:: Energy: 0.13 -DEAL:cg::Starting value 0.38 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:cg::Starting value 0.35 -DEAL:cg::Convergence step 2 value 0.0030 -DEAL:cg::Starting value 0.29 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:cg::Starting value 0.32 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:cg::Starting value 0.29 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:: Energy: 0.13 -DEAL:cg::Starting value 0.36 -DEAL:cg::Convergence step 3 value 0.00049 -DEAL:cg::Starting value 1.3e+02 -DEAL:cg::Convergence step 2 value 0.57 -DEAL:cg::Starting value 5.4e+05 -DEAL:cg::Convergence step 2 value 1.3e+03 -DEAL:cg::Starting value 5.5e+04 -DEAL:cg::Convergence step 2 value 3.0e+02 -DEAL:cg::Starting value 4.4e+04 -DEAL:cg::Convergence step 2 value 2.3e+02 -DEAL:: Energy: 2.1e+02 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.50 0.83 -0.56 0.80 - - -0.88 0.92 -0.94 0.95 - - -0.94 0.95 -1.0 1.0 - - -0.56 0.80 -0.59 0.84 - - -0.72 0.84 -0.75 0.85 - - -0.44 0.78 -0.47 0.80 - - -0.47 0.80 -0.50 0.83 - - -0.75 0.85 -0.78 0.86 - - -0.78 0.86 -0.81 0.87 - - -0.81 0.87 -0.84 0.89 - - -0.84 0.89 -0.88 0.92 - - -0.23 0.56 -0.25 0.59 - - -0.25 0.59 -0.27 0.62 - - -0.27 0.62 -0.28 0.64 - - -0.28 0.64 -0.30 0.67 - - -0.39 0.71 -0.41 0.73 - - -0.59 0.84 -0.61 0.86 - - -0.62 0.88 -0.64 0.87 - - -0.64 0.87 -0.66 0.85 - - -0.66 0.85 -0.67 0.84 - - -0.67 0.84 -0.69 0.82 - - -0.34 0.69 -0.36 0.69 - - -0.41 0.73 -0.42 0.76 - - -0.42 0.76 -0.44 0.78 - - -0.31 0.70 -0.33 0.70 - - -0.33 0.70 -0.34 0.69 - - -0.69 0.82 -0.70 0.83 - - -0.70 0.83 -0.72 0.84 - - -0.15 0.40 -0.16 0.41 - - -0.16 0.41 -0.16 0.43 - - -0.16 0.43 -0.17 0.44 - - -0.20 0.51 -0.21 0.52 - - -0.17 0.44 -0.18 0.46 - - -0.18 0.46 -0.19 0.48 - - -0.19 0.48 -0.20 0.49 - - -0.20 0.49 -0.20 0.51 - - -0.22 0.53 -0.23 0.55 - - -0.23 0.55 -0.23 0.56 - - -0.30 0.67 -0.30 0.69 - - -0.30 0.69 -0.31 0.70 - - -0.38 0.69 -0.38 0.70 - - -0.38 0.70 -0.39 0.71 - - -0.61 0.86 -0.62 0.87 - - -0.62 0.87 -0.62 0.88 - - -0.36 0.69 -0.37 0.69 - - -0.37 0.69 -0.38 0.69 - - -0.10 0.30 -0.11 0.30 - - -0.11 0.30 -0.11 0.31 - - -0.078 0.24 -0.082 0.25 - - -0.082 0.25 -0.086 0.26 - - -0.086 0.26 -0.090 0.27 - - -0.090 0.27 -0.094 0.28 - - -0.094 0.28 -0.098 0.29 - - -0.098 0.29 -0.10 0.30 - - -0.11 0.31 -0.11 0.32 - - -0.11 0.32 -0.12 0.33 - - -0.12 0.33 -0.12 0.34 - - -0.12 0.34 -0.12 0.35 - - -0.12 0.35 -0.13 0.36 - - -0.13 0.36 -0.13 0.36 - - -0.13 0.36 -0.14 0.37 - - -0.14 0.37 -0.14 0.38 - - -0.14 0.38 -0.14 0.39 - - -0.14 0.39 -0.15 0.40 - - -0.21 0.52 -0.21 0.53 - - -0.21 0.53 -0.22 0.53 - - -0.0039 0.020 -0.0059 0.029 - - -0.0059 0.029 -0.0078 0.037 - - -0.0078 0.037 -0.0098 0.044 - - -0.0098 0.044 -0.012 0.052 - - -0.012 0.052 -0.014 0.059 - - -0.014 0.059 -0.016 0.066 - - -0.016 0.066 -0.018 0.073 - - -0.018 0.073 -0.020 0.079 - - -0.0 0.0 -0.0020 0.011 - - -0.0020 0.011 -0.0039 0.020 - - -0.020 0.079 -0.021 0.086 - - -0.021 0.086 -0.023 0.092 - - -0.023 0.092 -0.025 0.098 - - -0.025 0.098 -0.027 0.10 - - -0.027 0.10 -0.029 0.11 - - -0.029 0.11 -0.031 0.12 - - -0.031 0.12 -0.033 0.12 - - -0.033 0.12 -0.035 0.13 - - -0.035 0.13 -0.037 0.13 - - -0.037 0.13 -0.039 0.14 - - -0.047 0.16 -0.049 0.17 - - -0.049 0.17 -0.051 0.17 - - -0.051 0.17 -0.053 0.18 - - -0.053 0.18 -0.055 0.18 - - -0.055 0.18 -0.057 0.19 - - -0.057 0.19 -0.059 0.19 - - -0.059 0.19 -0.061 0.20 - - -0.061 0.20 -0.062 0.20 - - -0.062 0.20 -0.064 0.21 - - -0.064 0.21 -0.066 0.21 - - -0.066 0.21 -0.068 0.22 - - -0.068 0.22 -0.070 0.22 - - -0.070 0.22 -0.072 0.23 - - -0.072 0.23 -0.074 0.23 - - -0.074 0.23 -0.076 0.24 - - -0.076 0.24 -0.078 0.24 - - -0.039 0.14 -0.040 0.14 - - -0.040 0.14 -0.041 0.13 - - -0.041 0.13 -0.042 0.15 - - -0.042 0.15 -0.043 0.16 - - -0.043 0.16 -0.044 0.15 - - -0.044 0.15 -0.045 0.14 - - -0.045 0.14 -0.046 0.16 - - -0.046 0.16 -0.047 0.16 - - -DEAL:: -DEAL::Realization 3: -DEAL:cg::Starting value 11. -DEAL:cg::Convergence step 2 value 0.034 -DEAL:cg::Starting value 1.4 -DEAL:cg::Convergence step 2 value 0.0057 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0013 -DEAL:cg::Starting value 0.48 -DEAL:cg::Convergence step 2 value 0.0023 -DEAL:cg::Starting value 0.72 -DEAL:cg::Convergence step 2 value 0.00086 -DEAL:: Energy: 0.29 -DEAL:cg::Starting value 2.2 -DEAL:cg::Convergence step 2 value 0.0040 -DEAL:cg::Starting value 1.5 -DEAL:cg::Convergence step 2 value 0.0016 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0022 -DEAL:cg::Starting value 0.53 -DEAL:cg::Convergence step 2 value 0.0010 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:: Energy: 0.22 -DEAL:cg::Starting value 1.6 -DEAL:cg::Convergence step 2 value 0.0060 -DEAL:cg::Starting value 0.97 -DEAL:cg::Convergence step 2 value 0.0054 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0046 -DEAL:cg::Starting value 0.83 -DEAL:cg::Convergence step 2 value 0.0040 -DEAL:cg::Starting value 0.98 -DEAL:cg::Convergence step 2 value 0.0037 -DEAL:: Energy: 0.19 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0075 -DEAL:cg::Starting value 0.75 -DEAL:cg::Convergence step 2 value 0.0064 -DEAL:cg::Starting value 0.86 -DEAL:cg::Convergence step 2 value 0.0054 -DEAL:cg::Starting value 0.69 -DEAL:cg::Convergence step 2 value 0.0057 -DEAL:cg::Starting value 0.83 -DEAL:cg::Convergence step 2 value 0.0047 -DEAL:: Energy: 0.18 -DEAL:cg::Starting value 0.90 -DEAL:cg::Convergence step 2 value 0.0064 -DEAL:cg::Starting value 0.59 -DEAL:cg::Convergence step 2 value 0.0055 -DEAL:cg::Starting value 0.68 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:cg::Starting value 0.56 -DEAL:cg::Convergence step 2 value 0.0054 -DEAL:cg::Starting value 0.67 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:: Energy: 0.18 -DEAL:cg::Starting value 0.64 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:cg::Starting value 75. -DEAL:cg::Convergence step 2 value 0.35 -DEAL:cg::Starting value 1.6e+06 -DEAL:cg::Convergence step 2 value 5.7e+03 -DEAL:cg::Starting value 3.7e+06 -DEAL:cg::Convergence step 2 value 1.2e+04 -DEAL:cg::Starting value 3.8e+06 -DEAL:cg::Convergence step 2 value 1.2e+04 -DEAL:: Energy: 7.8e+04 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.31 0.70 -0.38 0.74 - - -0.38 0.74 -0.44 0.81 - - -0.44 0.81 -0.50 0.79 - - -0.50 0.79 -0.56 0.79 - - -0.62 0.87 -0.69 0.83 - - -0.69 0.83 -0.75 0.85 - - -0.75 0.85 -0.81 0.91 - - -0.81 0.91 -0.88 0.94 - - -0.88 0.94 -0.94 0.98 - - -0.94 0.98 -1.0 1.0 - - -0.22 0.57 -0.25 0.59 - - -0.25 0.59 -0.28 0.64 - - -0.28 0.64 -0.31 0.70 - - -0.56 0.79 -0.59 0.83 - - -0.59 0.83 -0.62 0.87 - - -0.20 0.55 -0.22 0.57 - - -0.094 0.31 -0.10 0.33 - - -0.10 0.33 -0.11 0.35 - - -0.11 0.35 -0.12 0.37 - - -0.12 0.37 -0.12 0.38 - - -0.12 0.38 -0.13 0.40 - - -0.13 0.40 -0.14 0.42 - - -0.14 0.42 -0.15 0.44 - - -0.15 0.44 -0.16 0.46 - - -0.16 0.46 -0.16 0.48 - - -0.16 0.48 -0.17 0.50 - - -0.17 0.50 -0.18 0.51 - - -0.18 0.51 -0.19 0.53 - - -0.19 0.53 -0.20 0.54 - - -0.20 0.54 -0.20 0.55 - - -0.0 0.0 -0.0039 0.022 - - -0.035 0.14 -0.039 0.15 - - -0.039 0.15 -0.043 0.16 - - -0.043 0.16 -0.047 0.18 - - -0.047 0.18 -0.051 0.19 - - -0.051 0.19 -0.055 0.20 - - -0.055 0.20 -0.059 0.21 - - -0.059 0.21 -0.062 0.22 - - -0.062 0.22 -0.066 0.23 - - -0.066 0.23 -0.070 0.25 - - -0.070 0.25 -0.074 0.25 - - -0.074 0.25 -0.078 0.26 - - -0.078 0.26 -0.082 0.27 - - -0.082 0.27 -0.086 0.29 - - -0.0039 0.022 -0.0059 0.033 - - -0.0059 0.033 -0.0078 0.038 - - -0.0078 0.038 -0.0098 0.050 - - -0.0098 0.050 -0.012 0.055 - - -0.012 0.055 -0.014 0.067 - - -0.014 0.067 -0.016 0.070 - - -0.016 0.070 -0.018 0.082 - - -0.018 0.082 -0.020 0.084 - - -0.020 0.084 -0.021 0.096 - - -0.021 0.096 -0.023 0.098 - - -0.023 0.098 -0.025 0.11 - - -0.025 0.11 -0.027 0.11 - - -0.027 0.11 -0.029 0.12 - - -0.029 0.12 -0.031 0.12 - - -0.031 0.12 -0.033 0.14 - - -0.033 0.14 -0.035 0.14 - - -0.086 0.29 -0.088 0.28 - - -0.088 0.28 -0.090 0.24 - - -0.090 0.24 -0.092 0.33 - - -0.092 0.33 -0.094 0.31 - - -DEAL:: -DEAL::Realization 4: -DEAL:cg::Starting value 5.0 -DEAL:cg::Convergence step 2 value 0.018 -DEAL:cg::Starting value 0.80 -DEAL:cg::Convergence step 2 value 0.0024 -DEAL:cg::Starting value 3.8 -DEAL:cg::Convergence step 2 value 0.0075 -DEAL:cg::Starting value 1.4 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.67 -DEAL:cg::Convergence step 2 value 0.0024 -DEAL:: Energy: 0.12 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0067 -DEAL:cg::Starting value 0.64 -DEAL:cg::Convergence step 2 value 0.0044 -DEAL:cg::Starting value 0.60 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.41 -DEAL:cg::Convergence step 2 value 0.0027 -DEAL:cg::Starting value 0.40 -DEAL:cg::Convergence step 2 value 0.0026 -DEAL:: Energy: 0.094 -DEAL:cg::Starting value 0.65 -DEAL:cg::Convergence step 2 value 0.0053 -DEAL:cg::Starting value 0.38 -DEAL:cg::Convergence step 3 value 0.00027 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.34 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:cg::Starting value 0.39 -DEAL:cg::Convergence step 2 value 0.0031 -DEAL:: Energy: 0.088 -DEAL:cg::Starting value 0.45 -DEAL:cg::Convergence step 3 value 0.00042 -DEAL:cg::Starting value 0.33 -DEAL:cg::Convergence step 3 value 0.00036 -DEAL:cg::Starting value 0.32 -DEAL:cg::Convergence step 3 value 0.00036 -DEAL:cg::Starting value 0.30 -DEAL:cg::Convergence step 3 value 0.00030 -DEAL:cg::Starting value 0.31 -DEAL:cg::Convergence step 3 value 0.00036 -DEAL:: Energy: 0.086 -DEAL:cg::Starting value 0.34 -DEAL:cg::Convergence step 2 value 0.0026 -DEAL:cg::Starting value 0.25 -DEAL:cg::Convergence step 2 value 0.0021 -DEAL:cg::Starting value 0.27 -DEAL:cg::Convergence step 2 value 0.0018 -DEAL:cg::Starting value 0.25 -DEAL:cg::Convergence step 2 value 0.0016 -DEAL:cg::Starting value 0.25 -DEAL:cg::Convergence step 2 value 0.0019 -DEAL:: Energy: 0.085 -DEAL:cg::Starting value 0.29 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.27 -DEAL:cg::Convergence step 2 value 0.0018 -DEAL:cg::Starting value 0.24 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.25 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.23 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:: Energy: 0.085 -DEAL:cg::Starting value 0.27 -DEAL:cg::Convergence step 2 value 0.0024 -DEAL:cg::Starting value 0.18 -DEAL:cg::Convergence step 3 value 0.00022 -DEAL:cg::Starting value 0.22 -DEAL:cg::Convergence step 2 value 0.0021 -DEAL:cg::Starting value 0.16 -DEAL:cg::Convergence step 3 value 0.00021 -DEAL:cg::Starting value 0.22 -DEAL:cg::Convergence step 2 value 0.0021 -DEAL:: Energy: 0.085 -DEAL:cg::Starting value 0.20 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.21 -DEAL:cg::Convergence step 2 value 0.0018 -DEAL:cg::Starting value 0.16 -DEAL:cg::Convergence step 3 value 0.00019 -DEAL:cg::Starting value 0.19 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.15 -DEAL:cg::Convergence step 3 value 0.00019 -DEAL:: Energy: 0.085 -DEAL:cg::Starting value 0.21 -DEAL:cg::Convergence step 3 value 0.00020 -DEAL:cg::Starting value 15. -DEAL:cg::Convergence step 2 value 0.068 -DEAL:cg::Starting value 1.6e+08 -DEAL:cg::Convergence step 2 value 6.8e+05 -DEAL:cg::Starting value 3.4e+08 -DEAL:cg::Convergence step 2 value 1.5e+06 -DEAL:cg::Starting value 3.8e+08 -DEAL:cg::Convergence step 2 value 1.7e+06 -DEAL:: Energy: 9.9e+06 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.50 0.79 -0.56 0.80 - - -0.56 0.80 -0.62 0.86 - - -0.94 0.98 -1.0 1.0 - - -0.41 0.69 -0.44 0.72 - - -0.84 0.94 -0.88 0.92 - - -0.69 0.92 -0.72 0.90 - - -0.72 0.90 -0.75 0.89 - - -0.88 0.92 -0.91 0.95 - - -0.91 0.95 -0.94 0.98 - - -0.44 0.72 -0.47 0.76 - - -0.47 0.76 -0.50 0.79 - - -0.62 0.86 -0.66 0.89 - - -0.66 0.89 -0.69 0.92 - - -0.33 0.61 -0.34 0.62 - - -0.34 0.62 -0.36 0.64 - - -0.36 0.64 -0.38 0.65 - - -0.78 0.92 -0.80 0.94 - - -0.75 0.89 -0.77 0.91 - - -0.77 0.91 -0.78 0.92 - - -0.38 0.65 -0.39 0.67 - - -0.39 0.67 -0.41 0.69 - - -0.81 0.96 -0.83 0.95 - - -0.83 0.95 -0.84 0.94 - - -0.30 0.57 -0.30 0.58 - - -0.32 0.60 -0.33 0.61 - - -0.23 0.47 -0.23 0.48 - - -0.23 0.48 -0.24 0.49 - - -0.26 0.52 -0.27 0.53 - - -0.27 0.53 -0.27 0.54 - - -0.29 0.56 -0.30 0.57 - - -0.80 0.94 -0.80 0.95 - - -0.80 0.95 -0.81 0.96 - - -0.12 0.28 -0.12 0.29 - - -0.12 0.29 -0.12 0.30 - - -0.30 0.58 -0.31 0.59 - - -0.31 0.59 -0.31 0.59 - - -0.31 0.59 -0.32 0.60 - - -0.32 0.60 -0.32 0.60 - - -0.12 0.30 -0.13 0.30 - - -0.15 0.34 -0.16 0.35 - - -0.16 0.35 -0.16 0.36 - - -0.16 0.36 -0.16 0.37 - - -0.16 0.37 -0.17 0.37 - - -0.17 0.37 -0.17 0.38 - - -0.17 0.38 -0.18 0.39 - - -0.18 0.39 -0.18 0.39 - - -0.18 0.39 -0.18 0.40 - - -0.18 0.40 -0.19 0.41 - - -0.27 0.54 -0.28 0.54 - - -0.28 0.54 -0.28 0.55 - - -0.28 0.55 -0.29 0.55 - - -0.29 0.55 -0.29 0.56 - - -0.19 0.41 -0.19 0.41 - - -0.19 0.41 -0.20 0.42 - - -0.20 0.42 -0.20 0.42 - - -0.20 0.42 -0.20 0.43 - - -0.20 0.43 -0.21 0.44 - - -0.21 0.44 -0.21 0.44 - - -0.21 0.44 -0.21 0.45 - - -0.21 0.45 -0.22 0.46 - - -0.22 0.46 -0.22 0.46 - - -0.22 0.46 -0.23 0.47 - - -0.24 0.49 -0.25 0.50 - - -0.25 0.50 -0.25 0.50 - - -0.25 0.50 -0.25 0.51 - - -0.25 0.51 -0.26 0.52 - - -0.0078 0.029 -0.0098 0.036 - - -0.0098 0.036 -0.012 0.042 - - -0.012 0.042 -0.014 0.049 - - -0.014 0.049 -0.016 0.055 - - -0.016 0.055 -0.018 0.060 - - -0.018 0.060 -0.020 0.066 - - -0.14 0.32 -0.14 0.33 - - -0.14 0.33 -0.14 0.35 - - -0.020 0.066 -0.021 0.072 - - -0.021 0.072 -0.023 0.077 - - -0.023 0.077 -0.025 0.082 - - -0.025 0.082 -0.027 0.088 - - -0.027 0.088 -0.029 0.093 - - -0.029 0.093 -0.031 0.098 - - -0.031 0.098 -0.033 0.10 - - -0.033 0.10 -0.035 0.11 - - -0.035 0.11 -0.037 0.11 - - -0.037 0.11 -0.039 0.12 - - -0.0039 0.015 -0.0059 0.022 - - -0.0059 0.022 -0.0078 0.029 - - -0.039 0.12 -0.041 0.12 - - -0.041 0.12 -0.043 0.13 - - -0.043 0.13 -0.045 0.13 - - -0.045 0.13 -0.047 0.14 - - -0.047 0.14 -0.049 0.14 - - -0.049 0.14 -0.051 0.15 - - -0.051 0.15 -0.053 0.15 - - -0.053 0.15 -0.055 0.15 - - -0.055 0.15 -0.057 0.16 - - -0.057 0.16 -0.059 0.16 - - -0.059 0.16 -0.061 0.17 - - -0.061 0.17 -0.062 0.17 - - -0.062 0.17 -0.064 0.18 - - -0.064 0.18 -0.066 0.18 - - -0.066 0.18 -0.068 0.18 - - -0.068 0.18 -0.070 0.19 - - -0.0 0.0 -0.0020 0.0075 - - -0.0020 0.0075 -0.0039 0.015 - - -0.070 0.19 -0.072 0.19 - - -0.072 0.19 -0.074 0.20 - - -0.074 0.20 -0.076 0.20 - - -0.076 0.20 -0.078 0.20 - - -0.078 0.20 -0.080 0.21 - - -0.080 0.21 -0.082 0.21 - - -0.082 0.21 -0.084 0.22 - - -0.084 0.22 -0.086 0.22 - - -0.086 0.22 -0.088 0.23 - - -0.088 0.23 -0.090 0.23 - - -0.090 0.23 -0.092 0.23 - - -0.092 0.23 -0.094 0.24 - - -0.094 0.24 -0.096 0.24 - - -0.096 0.24 -0.098 0.24 - - -0.098 0.24 -0.10 0.25 - - -0.10 0.25 -0.10 0.25 - - -0.10 0.25 -0.10 0.26 - - -0.10 0.26 -0.11 0.26 - - -0.11 0.26 -0.11 0.26 - - -0.11 0.26 -0.11 0.27 - - -0.11 0.27 -0.11 0.27 - - -0.11 0.27 -0.11 0.27 - - -0.11 0.27 -0.12 0.28 - - -0.12 0.28 -0.12 0.28 - - -0.13 0.30 -0.13 0.31 - - -0.13 0.31 -0.13 0.31 - - -0.15 0.32 -0.15 0.34 - - -0.15 0.34 -0.15 0.34 - - -0.13 0.31 -0.13 0.33 - - -0.13 0.33 -0.13 0.37 - - -0.13 0.37 -0.14 0.34 - - -0.14 0.34 -0.14 0.25 - - -0.14 0.25 -0.14 0.30 - - -0.14 0.30 -0.14 0.32 - - -0.14 0.35 -0.14 0.36 - - -0.14 0.36 -0.14 0.28 - - -0.14 0.28 -0.15 0.33 - - -0.15 0.33 -0.15 0.36 - - -0.15 0.36 -0.15 0.33 - - -0.15 0.33 -0.15 0.32 - - -DEAL:: -DEAL::Realization 5: -DEAL:cg::Starting value 35. -DEAL:cg::Convergence step 2 value 0.074 -DEAL:cg::Starting value 3.7 -DEAL:cg::Convergence step 2 value 0.0082 -DEAL:cg::Starting value 1.0 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.63 -DEAL:cg::Convergence step 2 value 0.0025 -DEAL:cg::Starting value 2.1 -DEAL:cg::Convergence step 2 value 0.0019 -DEAL:: Energy: 0.27 -DEAL:cg::Starting value 2.7 -DEAL:cg::Convergence step 2 value 0.010 -DEAL:cg::Starting value 0.73 -DEAL:cg::Convergence step 2 value 0.0069 -DEAL:cg::Starting value 1.6 -DEAL:cg::Convergence step 2 value 0.0050 -DEAL:cg::Starting value 0.37 -DEAL:cg::Convergence step 3 value 0.00036 -DEAL:cg::Starting value 0.30 -DEAL:cg::Convergence step 3 value 0.00033 -DEAL:: Energy: 0.20 -DEAL:cg::Starting value 1.7 -DEAL:cg::Convergence step 2 value 0.0062 -DEAL:cg::Starting value 0.70 -DEAL:cg::Convergence step 2 value 0.0046 -DEAL:cg::Starting value 0.73 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:cg::Starting value 0.52 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:cg::Starting value 0.58 -DEAL:cg::Convergence step 2 value 0.0028 -DEAL:: Energy: 0.18 -DEAL:cg::Starting value 0.91 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:cg::Starting value 0.56 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.57 -DEAL:cg::Convergence step 2 value 0.0040 -DEAL:cg::Starting value 0.50 -DEAL:cg::Convergence step 2 value 0.0036 -DEAL:cg::Starting value 0.54 -DEAL:cg::Convergence step 2 value 0.0034 -DEAL:: Energy: 0.17 -DEAL:cg::Starting value 0.68 -DEAL:cg::Convergence step 2 value 0.0052 -DEAL:cg::Starting value 0.45 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:cg::Starting value 0.42 -DEAL:cg::Convergence step 2 value 0.0029 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 2 value 0.0028 -DEAL:: Energy: 0.17 -DEAL:cg::Starting value 0.47 -DEAL:cg::Convergence step 3 value 0.00048 -DEAL:cg::Starting value 0.30 -DEAL:cg::Convergence step 3 value 0.00045 -DEAL:cg::Starting value 0.78 -DEAL:cg::Convergence step 2 value 0.0045 -DEAL:cg::Starting value 9.8e+03 -DEAL:cg::Convergence step 2 value 18. -DEAL:cg::Starting value 4.0e+05 -DEAL:cg::Convergence step 2 value 6.9e+02 -DEAL:: Energy: 7.8e+03 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.56 0.85 -0.62 0.82 - - -0.62 0.82 -0.69 0.89 - - -0.69 0.89 -0.75 0.94 - - -0.75 0.94 -0.81 0.94 - - -0.81 0.94 -0.88 0.93 - - -0.94 0.99 -1.0 1.0 - - -0.38 0.69 -0.41 0.74 - - -0.41 0.74 -0.44 0.79 - - -0.50 0.76 -0.53 0.80 - - -0.53 0.80 -0.56 0.85 - - -0.25 0.65 -0.28 0.69 - - -0.28 0.69 -0.31 0.73 - - -0.31 0.73 -0.34 0.71 - - -0.34 0.71 -0.38 0.69 - - -0.44 0.79 -0.47 0.77 - - -0.47 0.77 -0.50 0.76 - - -0.88 0.93 -0.91 0.96 - - -0.91 0.96 -0.94 0.99 - - -0.12 0.37 -0.14 0.40 - - -0.14 0.40 -0.16 0.44 - - -0.16 0.44 -0.17 0.48 - - -0.17 0.48 -0.19 0.51 - - -0.22 0.58 -0.23 0.61 - - -0.23 0.61 -0.25 0.65 - - -0.094 0.29 -0.10 0.31 - - -0.10 0.31 -0.11 0.33 - - -0.11 0.33 -0.12 0.35 - - -0.12 0.35 -0.12 0.37 - - -0.19 0.51 -0.20 0.53 - - -0.20 0.53 -0.20 0.55 - - -0.20 0.55 -0.21 0.56 - - -0.21 0.56 -0.22 0.58 - - -0.0 0.0 -0.0039 0.022 - - -0.023 0.097 -0.027 0.11 - - -0.027 0.11 -0.031 0.12 - - -0.031 0.12 -0.035 0.13 - - -0.035 0.13 -0.039 0.15 - - -0.039 0.15 -0.043 0.16 - - -0.043 0.16 -0.047 0.17 - - -0.047 0.17 -0.051 0.18 - - -0.051 0.18 -0.055 0.19 - - -0.055 0.19 -0.059 0.20 - - -0.059 0.20 -0.062 0.21 - - -0.074 0.24 -0.078 0.25 - - -0.078 0.25 -0.082 0.26 - - -0.082 0.26 -0.086 0.27 - - -0.086 0.27 -0.090 0.28 - - -0.090 0.28 -0.094 0.29 - - -0.0039 0.022 -0.0059 0.032 - - -0.0059 0.032 -0.0078 0.039 - - -0.0078 0.039 -0.0098 0.047 - - -0.0098 0.047 -0.012 0.055 - - -0.012 0.055 -0.014 0.062 - - -0.014 0.062 -0.016 0.070 - - -0.016 0.070 -0.018 0.076 - - -0.018 0.076 -0.020 0.084 - - -0.020 0.084 -0.021 0.090 - - -0.021 0.090 -0.023 0.097 - - -0.062 0.21 -0.064 0.23 - - -0.064 0.23 -0.066 0.18 - - -0.066 0.18 -0.068 0.24 - - -0.068 0.24 -0.070 0.25 - - -0.070 0.25 -0.072 0.24 - - -0.072 0.24 -0.074 0.24 - - -DEAL:: -DEAL::Realization 6: -DEAL:cg::Starting value 12. -DEAL:cg::Convergence step 2 value 0.029 -DEAL:cg::Starting value 2.7 -DEAL:cg::Convergence step 2 value 0.0036 -DEAL:cg::Starting value 0.91 -DEAL:cg::Convergence step 2 value 0.0027 -DEAL:cg::Starting value 0.54 -DEAL:cg::Convergence step 2 value 0.0022 -DEAL:cg::Starting value 0.48 -DEAL:cg::Convergence step 2 value 0.0016 -DEAL:: Energy: 0.29 -DEAL:cg::Starting value 3.9 -DEAL:cg::Convergence step 2 value 0.0077 -DEAL:cg::Starting value 0.35 -DEAL:cg::Convergence step 2 value 0.0026 -DEAL:cg::Starting value 1.5 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.31 -DEAL:cg::Convergence step 2 value 0.0026 -DEAL:cg::Starting value 0.47 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:: Energy: 0.23 -DEAL:cg::Starting value 2.2 -DEAL:cg::Convergence step 2 value 0.0087 -DEAL:cg::Starting value 0.62 -DEAL:cg::Convergence step 2 value 0.0054 -DEAL:cg::Starting value 0.75 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.59 -DEAL:cg::Convergence step 2 value 0.0031 -DEAL:cg::Starting value 0.56 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:: Energy: 0.21 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0056 -DEAL:cg::Starting value 0.72 -DEAL:cg::Convergence step 2 value 0.0049 -DEAL:cg::Starting value 0.71 -DEAL:cg::Convergence step 2 value 0.0042 -DEAL:cg::Starting value 0.62 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.65 -DEAL:cg::Convergence step 2 value 0.0036 -DEAL:: Energy: 0.20 -DEAL:cg::Starting value 0.90 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:cg::Starting value 0.52 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.61 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:cg::Starting value 0.48 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.60 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:: Energy: 0.20 -DEAL:cg::Starting value 0.61 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:cg::Starting value 0.47 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 3 value 0.00057 -DEAL:cg::Starting value 0.41 -DEAL:cg::Convergence step 3 value 0.00053 -DEAL:: Energy: 0.21 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.31 0.74 -0.38 0.76 - - -0.38 0.76 -0.44 0.72 - - -0.44 0.72 -0.50 0.73 - - -0.56 0.80 -0.62 0.86 - - -0.62 0.86 -0.69 0.92 - - -0.69 0.92 -0.75 0.88 - - -0.75 0.88 -0.81 0.86 - - -0.81 0.86 -0.88 0.91 - - -0.94 0.98 -1.0 1.0 - - -0.19 0.55 -0.22 0.61 - - -0.22 0.61 -0.25 0.66 - - -0.25 0.66 -0.28 0.70 - - -0.28 0.70 -0.31 0.74 - - -0.88 0.91 -0.91 0.95 - - -0.91 0.95 -0.94 0.98 - - -0.50 0.73 -0.53 0.77 - - -0.53 0.77 -0.56 0.80 - - -0.12 0.39 -0.14 0.43 - - -0.094 0.31 -0.10 0.33 - - -0.10 0.33 -0.11 0.35 - - -0.11 0.35 -0.12 0.37 - - -0.12 0.37 -0.12 0.39 - - -0.17 0.51 -0.18 0.53 - - -0.18 0.53 -0.19 0.55 - - -0.14 0.43 -0.15 0.45 - - -0.15 0.45 -0.16 0.47 - - -0.16 0.47 -0.16 0.49 - - -0.16 0.49 -0.17 0.51 - - -0.043 0.17 -0.047 0.18 - - -0.047 0.18 -0.051 0.19 - - -0.051 0.19 -0.055 0.20 - - -0.055 0.20 -0.059 0.22 - - -0.059 0.22 -0.062 0.23 - - -0.062 0.23 -0.066 0.24 - - -0.066 0.24 -0.070 0.25 - - -0.070 0.25 -0.074 0.26 - - -0.074 0.26 -0.078 0.27 - - -0.078 0.27 -0.082 0.28 - - -0.082 0.28 -0.086 0.29 - - -0.090 0.30 -0.094 0.31 - - -0.0 0.0 -0.0020 0.010 - - -0.0020 0.010 -0.0039 0.021 - - -0.0039 0.021 -0.0059 0.031 - - -0.0059 0.031 -0.0078 0.040 - - -0.0078 0.040 -0.0098 0.049 - - -0.0098 0.049 -0.012 0.057 - - -0.012 0.057 -0.014 0.066 - - -0.014 0.066 -0.016 0.073 - - -0.016 0.073 -0.018 0.081 - - -0.018 0.081 -0.020 0.089 - - -0.020 0.089 -0.021 0.096 - - -0.021 0.096 -0.023 0.10 - - -0.023 0.10 -0.025 0.11 - - -0.025 0.11 -0.027 0.12 - - -0.027 0.12 -0.029 0.12 - - -0.029 0.12 -0.031 0.13 - - -0.031 0.13 -0.033 0.14 - - -0.033 0.14 -0.035 0.14 - - -0.035 0.14 -0.037 0.15 - - -0.037 0.15 -0.039 0.16 - - -0.039 0.16 -0.041 0.16 - - -0.041 0.16 -0.043 0.17 - - -0.086 0.29 -0.088 0.30 - - -0.088 0.30 -0.090 0.30 - - -DEAL:: -DEAL::Realization 7: -DEAL:cg::Starting value 14. -DEAL:cg::Convergence step 2 value 0.032 -DEAL:cg::Starting value 0.68 -DEAL:cg::Convergence step 2 value 0.0023 -DEAL:cg::Starting value 0.68 -DEAL:cg::Convergence step 2 value 0.0023 -DEAL:cg::Starting value 0.69 -DEAL:cg::Convergence step 2 value 0.0023 -DEAL:cg::Starting value 0.69 -DEAL:cg::Convergence step 2 value 0.0023 -DEAL:: Energy: 0.33 -DEAL:cg::Starting value 3.1 -DEAL:cg::Convergence step 2 value 0.010 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0062 -DEAL:cg::Starting value 1.6 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.35 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:cg::Starting value 0.56 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:: Energy: 0.26 -DEAL:cg::Starting value 2.1 -DEAL:cg::Convergence step 2 value 0.0073 -DEAL:cg::Starting value 0.91 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:cg::Starting value 1.1 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:cg::Starting value 0.75 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:cg::Starting value 0.84 -DEAL:cg::Convergence step 2 value 0.0030 -DEAL:: Energy: 0.23 -DEAL:cg::Starting value 1.3 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.83 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.85 -DEAL:cg::Convergence step 2 value 0.0054 -DEAL:cg::Starting value 0.73 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.77 -DEAL:cg::Convergence step 2 value 0.0051 -DEAL:: Energy: 0.22 -DEAL:cg::Starting value 1.0 -DEAL:cg::Convergence step 2 value 0.0038 -DEAL:cg::Starting value 0.58 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:cg::Starting value 0.72 -DEAL:cg::Convergence step 2 value 0.0042 -DEAL:cg::Starting value 0.54 -DEAL:cg::Convergence step 2 value 0.0034 -DEAL:cg::Starting value 0.71 -DEAL:cg::Convergence step 2 value 0.0044 -DEAL:: Energy: 0.22 -DEAL:cg::Starting value 0.67 -DEAL:cg::Convergence step 2 value 0.0044 -DEAL:cg::Starting value 0.57 -DEAL:cg::Convergence step 2 value 0.0048 -DEAL:cg::Starting value 0.46 -DEAL:cg::Convergence step 2 value 0.0046 -DEAL:cg::Starting value 0.50 -DEAL:cg::Convergence step 2 value 0.0041 -DEAL:cg::Starting value 0.34 -DEAL:cg::Convergence step 3 value 0.00057 -DEAL:: Energy: 0.22 -DEAL:cg::Starting value 0.79 -DEAL:cg::Convergence step 2 value 0.0047 -DEAL:cg::Starting value 3.5e+03 -DEAL:cg::Convergence step 2 value 17. -DEAL:cg::Starting value 3.4e+05 -DEAL:cg::Convergence step 2 value 1.6e+03 -DEAL:cg::Starting value 4.2e+05 -DEAL:cg::Convergence step 2 value 1.9e+03 -DEAL:cg::Starting value 4.2e+05 -DEAL:cg::Convergence step 2 value 1.9e+03 -DEAL:: Energy: 4.3e+03 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.25 0.57 -0.31 0.66 - - -0.50 0.82 -0.56 0.82 - - -0.62 0.89 -0.69 0.91 - - -0.69 0.91 -0.75 0.89 - - -0.94 1.0 -1.0 1.0 - - -0.47 0.81 -0.50 0.82 - - -0.22 0.58 -0.25 0.57 - - -0.31 0.66 -0.34 0.67 - - -0.56 0.82 -0.59 0.86 - - -0.59 0.86 -0.62 0.89 - - -0.75 0.89 -0.78 0.93 - - -0.78 0.93 -0.81 0.97 - - -0.88 0.93 -0.91 0.96 - - -0.91 0.96 -0.94 1.0 - - -0.81 0.97 -0.84 0.95 - - -0.84 0.95 -0.88 0.93 - - -0.41 0.74 -0.42 0.77 - - -0.42 0.77 -0.44 0.79 - - -0.39 0.71 -0.41 0.74 - - -0.44 0.79 -0.45 0.80 - - -0.45 0.80 -0.47 0.81 - - -0.19 0.58 -0.20 0.58 - - -0.20 0.58 -0.22 0.58 - - -0.34 0.67 -0.36 0.68 - - -0.36 0.68 -0.38 0.69 - - -0.14 0.45 -0.15 0.47 - - -0.15 0.47 -0.16 0.49 - - -0.17 0.54 -0.18 0.56 - - -0.094 0.32 -0.10 0.35 - - -0.10 0.35 -0.11 0.37 - - -0.11 0.37 -0.12 0.39 - - -0.12 0.39 -0.12 0.41 - - -0.12 0.41 -0.13 0.43 - - -0.13 0.43 -0.14 0.45 - - -0.38 0.69 -0.38 0.70 - - -0.38 0.70 -0.39 0.71 - - -0.055 0.21 -0.059 0.22 - - -0.059 0.22 -0.062 0.23 - - -0.062 0.23 -0.066 0.25 - - -0.066 0.25 -0.070 0.26 - - -0.070 0.26 -0.074 0.27 - - -0.074 0.27 -0.078 0.28 - - -0.078 0.28 -0.082 0.29 - - -0.082 0.29 -0.086 0.30 - - -0.086 0.30 -0.090 0.31 - - -0.090 0.31 -0.094 0.32 - - -0.16 0.49 -0.16 0.50 - - -0.16 0.50 -0.16 0.51 - - -0.16 0.51 -0.17 0.53 - - -0.17 0.53 -0.17 0.54 - - -0.18 0.56 -0.18 0.57 - - -0.18 0.57 -0.19 0.58 - - -0.0039 0.024 -0.0059 0.034 - - -0.0059 0.034 -0.0078 0.043 - - -0.0078 0.043 -0.0098 0.052 - - -0.0098 0.052 -0.012 0.060 - - -0.012 0.060 -0.014 0.068 - - -0.014 0.068 -0.016 0.076 - - -0.016 0.076 -0.018 0.084 - - -0.018 0.084 -0.020 0.092 - - -0.020 0.092 -0.021 0.099 - - -0.021 0.099 -0.023 0.11 - - -0.023 0.11 -0.025 0.11 - - -0.025 0.11 -0.027 0.12 - - -0.0 0.0 -0.0020 0.013 - - -0.0020 0.013 -0.0039 0.024 - - -0.035 0.15 -0.037 0.16 - - -0.037 0.16 -0.039 0.16 - - -0.039 0.16 -0.041 0.17 - - -0.041 0.17 -0.043 0.17 - - -0.043 0.17 -0.045 0.18 - - -0.045 0.18 -0.047 0.19 - - -0.047 0.19 -0.049 0.19 - - -0.049 0.19 -0.051 0.20 - - -0.051 0.20 -0.053 0.21 - - -0.053 0.21 -0.055 0.21 - - -0.027 0.12 -0.028 0.12 - - -0.028 0.12 -0.029 0.11 - - -0.029 0.11 -0.030 0.14 - - -0.030 0.14 -0.031 0.16 - - -0.031 0.16 -0.032 0.14 - - -0.032 0.14 -0.033 0.11 - - -0.033 0.11 -0.034 0.15 - - -0.034 0.15 -0.035 0.15 - - -DEAL:: -DEAL::Realization 8: -DEAL:cg::Starting value 36. -DEAL:cg::Convergence step 2 value 0.16 -DEAL:cg::Starting value 3.9 -DEAL:cg::Convergence step 2 value 0.015 -DEAL:cg::Starting value 1.8 -DEAL:cg::Convergence step 2 value 0.0031 -DEAL:cg::Starting value 0.69 -DEAL:cg::Convergence step 2 value 0.0026 -DEAL:cg::Starting value 4.7 -DEAL:cg::Convergence step 2 value 0.0085 -DEAL:: Energy: 0.25 -DEAL:cg::Starting value 2.9 -DEAL:cg::Convergence step 2 value 0.011 -DEAL:cg::Starting value 0.63 -DEAL:cg::Convergence step 3 value 0.00052 -DEAL:cg::Starting value 1.6 -DEAL:cg::Convergence step 2 value 0.0062 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 3 value 0.00042 -DEAL:cg::Starting value 0.31 -DEAL:cg::Convergence step 3 value 0.00030 -DEAL:: Energy: 0.18 -DEAL:cg::Starting value 1.3 -DEAL:cg::Convergence step 2 value 0.0060 -DEAL:cg::Starting value 0.73 -DEAL:cg::Convergence step 2 value 0.0048 -DEAL:cg::Starting value 0.78 -DEAL:cg::Convergence step 2 value 0.0042 -DEAL:cg::Starting value 0.57 -DEAL:cg::Convergence step 2 value 0.0036 -DEAL:cg::Starting value 0.63 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.84 -DEAL:cg::Convergence step 2 value 0.0049 -DEAL:cg::Starting value 0.50 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.57 -DEAL:cg::Convergence step 2 value 0.0039 -DEAL:cg::Starting value 0.45 -DEAL:cg::Convergence step 2 value 0.0035 -DEAL:cg::Starting value 0.55 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.60 -DEAL:cg::Convergence step 2 value 0.0050 -DEAL:cg::Starting value 0.38 -DEAL:cg::Convergence step 2 value 0.0037 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:cg::Starting value 0.37 -DEAL:cg::Convergence step 2 value 0.0030 -DEAL:cg::Starting value 0.42 -DEAL:cg::Convergence step 2 value 0.0033 -DEAL:: Energy: 0.15 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0042 -DEAL:cg::Starting value 0.32 -DEAL:cg::Convergence step 3 value 0.00045 -DEAL:cg::Starting value 0.33 -DEAL:cg::Convergence step 3 value 0.00045 -DEAL:cg::Starting value 0.27 -DEAL:cg::Convergence step 3 value 0.00042 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0087 -DEAL:: Energy: 8.1e+02 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.25 0.62 -0.31 0.66 - - -0.31 0.66 -0.38 0.74 - - -0.38 0.74 -0.44 0.75 - - -0.44 0.75 -0.50 0.82 - - -0.50 0.82 -0.56 0.86 - - -0.56 0.86 -0.62 0.90 - - -0.69 0.85 -0.75 0.90 - - -0.75 0.90 -0.81 0.96 - - -0.81 0.96 -0.88 0.92 - - -0.88 0.92 -0.94 0.95 - - -0.94 0.95 -1.0 1.0 - - -0.62 0.90 -0.66 0.87 - - -0.66 0.87 -0.69 0.85 - - -0.16 0.43 -0.17 0.46 - - -0.17 0.46 -0.19 0.49 - - -0.19 0.49 -0.20 0.53 - - -0.22 0.56 -0.23 0.59 - - -0.23 0.59 -0.25 0.62 - - -0.12 0.34 -0.12 0.36 - - -0.12 0.36 -0.13 0.37 - - -0.13 0.37 -0.14 0.39 - - -0.14 0.39 -0.15 0.41 - - -0.15 0.41 -0.16 0.43 - - -0.20 0.53 -0.21 0.54 - - -0.21 0.54 -0.22 0.56 - - -0.0 0.0 -0.0039 0.020 - - -0.035 0.13 -0.039 0.14 - - -0.039 0.14 -0.043 0.15 - - -0.043 0.15 -0.047 0.16 - - -0.047 0.16 -0.051 0.17 - - -0.051 0.17 -0.055 0.18 - - -0.055 0.18 -0.059 0.20 - - -0.059 0.20 -0.062 0.21 - - -0.062 0.21 -0.066 0.22 - - -0.066 0.22 -0.070 0.23 - - -0.074 0.24 -0.078 0.25 - - -0.10 0.30 -0.11 0.31 - - -0.11 0.31 -0.11 0.32 - - -0.11 0.32 -0.11 0.33 - - -0.11 0.33 -0.12 0.34 - - -0.078 0.25 -0.082 0.26 - - -0.082 0.26 -0.086 0.26 - - -0.086 0.26 -0.090 0.27 - - -0.090 0.27 -0.094 0.28 - - -0.094 0.28 -0.098 0.29 - - -0.098 0.29 -0.10 0.30 - - -0.0039 0.020 -0.0059 0.030 - - -0.0059 0.030 -0.0078 0.037 - - -0.0078 0.037 -0.0098 0.045 - - -0.0098 0.045 -0.012 0.053 - - -0.012 0.053 -0.014 0.060 - - -0.014 0.060 -0.016 0.067 - - -0.016 0.067 -0.018 0.074 - - -0.018 0.074 -0.020 0.080 - - -0.020 0.080 -0.021 0.087 - - -0.021 0.087 -0.023 0.093 - - -0.023 0.093 -0.025 0.10 - - -0.025 0.10 -0.027 0.11 - - -0.027 0.11 -0.029 0.11 - - -0.029 0.11 -0.031 0.12 - - -0.031 0.12 -0.033 0.12 - - -0.033 0.12 -0.035 0.13 - - -0.070 0.23 -0.072 0.20 - - -0.072 0.20 -0.074 0.24 - - -DEAL:: -DEAL::Realization 9: -DEAL:cg::Starting value 12. -DEAL:cg::Convergence step 2 value 0.060 -DEAL:cg::Starting value 1.6 -DEAL:cg::Convergence step 2 value 0.0057 -DEAL:cg::Starting value 1.5 -DEAL:cg::Convergence step 2 value 0.0021 -DEAL:cg::Starting value 0.64 -DEAL:cg::Convergence step 2 value 0.0020 -DEAL:cg::Starting value 0.47 -DEAL:cg::Convergence step 2 value 0.0016 -DEAL:: Energy: 0.21 -DEAL:cg::Starting value 2.2 -DEAL:cg::Convergence step 2 value 0.0043 -DEAL:cg::Starting value 0.31 -DEAL:cg::Convergence step 2 value 0.0019 -DEAL:cg::Starting value 0.88 -DEAL:cg::Convergence step 2 value 0.0028 -DEAL:cg::Starting value 0.20 -DEAL:cg::Convergence step 2 value 0.0012 -DEAL:cg::Starting value 0.42 -DEAL:cg::Convergence step 2 value 0.0020 -DEAL:: Energy: 0.17 -DEAL:cg::Starting value 1.2 -DEAL:cg::Convergence step 2 value 0.0023 -DEAL:cg::Starting value 0.53 -DEAL:cg::Convergence step 2 value 0.0022 -DEAL:cg::Starting value 0.53 -DEAL:cg::Convergence step 2 value 0.0016 -DEAL:cg::Starting value 0.42 -DEAL:cg::Convergence step 2 value 0.0015 -DEAL:cg::Starting value 0.44 -DEAL:cg::Convergence step 2 value 0.0014 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.75 -DEAL:cg::Convergence step 2 value 0.0020 -DEAL:cg::Starting value 0.46 -DEAL:cg::Convergence step 2 value 0.0017 -DEAL:cg::Starting value 0.47 -DEAL:cg::Convergence step 2 value 0.0025 -DEAL:cg::Starting value 0.40 -DEAL:cg::Convergence step 2 value 0.0020 -DEAL:cg::Starting value 0.43 -DEAL:cg::Convergence step 2 value 0.0025 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.55 -DEAL:cg::Convergence step 2 value 0.0036 -DEAL:cg::Starting value 0.33 -DEAL:cg::Convergence step 2 value 0.0015 -DEAL:cg::Starting value 0.36 -DEAL:cg::Convergence step 2 value 0.0019 -DEAL:cg::Starting value 0.31 -DEAL:cg::Convergence step 2 value 0.0015 -DEAL:cg::Starting value 0.34 -DEAL:cg::Convergence step 2 value 0.0015 -DEAL:: Energy: 0.16 -DEAL:cg::Starting value 0.37 -DEAL:cg::Convergence step 2 value 0.0032 -DEAL:cg::Starting value 0.27 -DEAL:cg::Convergence step 3 value 0.00028 -DEAL:cg::Starting value 0.28 -DEAL:cg::Convergence step 2 value 0.0020 -DEAL:cg::Starting value 0.26 -DEAL:cg::Convergence step 2 value 0.0018 -DEAL:cg::Starting value 2.5 -DEAL:cg::Convergence step 2 value 0.013 -DEAL:: Energy: 1.9e+04 -# This file was generated by the deal.II library. - - -# -# For a description of the GNUPLOT format see the GNUPLOT manual. -# -# -0.25 0.63 -0.31 0.71 - - -0.31 0.71 -0.38 0.66 - - -0.38 0.66 -0.44 0.73 - - -0.44 0.73 -0.50 0.77 - - -0.50 0.77 -0.56 0.79 - - -0.56 0.79 -0.62 0.79 - - -0.62 0.79 -0.69 0.84 - - -0.69 0.84 -0.75 0.91 - - -0.75 0.91 -0.81 0.91 - - -0.88 0.98 -0.94 0.99 - - -0.94 0.99 -1.0 1.0 - - -0.81 0.91 -0.84 0.94 - - -0.84 0.94 -0.88 0.98 - - -0.16 0.42 -0.17 0.46 - - -0.17 0.46 -0.19 0.49 - - -0.12 0.34 -0.12 0.35 - - -0.12 0.35 -0.13 0.37 - - -0.13 0.37 -0.14 0.39 - - -0.14 0.39 -0.15 0.41 - - -0.15 0.41 -0.16 0.42 - - -0.19 0.49 -0.20 0.51 - - -0.20 0.51 -0.20 0.52 - - -0.20 0.52 -0.21 0.54 - - -0.21 0.54 -0.22 0.56 - - -0.22 0.56 -0.23 0.58 - - -0.23 0.58 -0.23 0.59 - - -0.23 0.59 -0.24 0.61 - - -0.24 0.61 -0.25 0.63 - - -0.0 0.0 -0.0039 0.020 - - -0.023 0.092 -0.027 0.10 - - -0.027 0.10 -0.031 0.12 - - -0.031 0.12 -0.035 0.13 - - -0.035 0.13 -0.039 0.14 - - -0.039 0.14 -0.043 0.15 - - -0.043 0.15 -0.047 0.16 - - -0.047 0.16 -0.051 0.17 - - -0.051 0.17 -0.055 0.18 - - -0.055 0.18 -0.059 0.19 - - -0.059 0.19 -0.062 0.20 - - -0.062 0.20 -0.066 0.21 - - -0.066 0.21 -0.070 0.22 - - -0.094 0.29 -0.098 0.31 - - -0.10 0.30 -0.11 0.31 - - -0.11 0.31 -0.11 0.32 - - -0.11 0.32 -0.11 0.33 - - -0.11 0.33 -0.12 0.34 - - -0.070 0.22 -0.074 0.23 - - -0.074 0.23 -0.078 0.24 - - -0.078 0.24 -0.082 0.25 - - -0.082 0.25 -0.086 0.26 - - -0.086 0.26 -0.090 0.27 - - -0.090 0.27 -0.094 0.29 - - -0.0039 0.020 -0.0059 0.029 - - -0.0059 0.029 -0.0078 0.036 - - -0.0078 0.036 -0.0098 0.044 - - -0.0098 0.044 -0.012 0.052 - - -0.012 0.052 -0.014 0.059 - - -0.014 0.059 -0.016 0.066 - - -0.016 0.066 -0.018 0.072 - - -0.018 0.072 -0.020 0.079 - - -0.020 0.079 -0.021 0.086 - - -0.021 0.086 -0.023 0.092 - - -0.098 0.31 -0.10 0.25 - - -0.10 0.25 -0.10 0.30 - - -DEAL:: diff --git a/tests/fail/vectors_boundary_rhs_hp_02.cc b/tests/fail/vectors_boundary_rhs_hp_02.cc deleted file mode 100644 index ea77b3ce88..0000000000 --- a/tests/fail/vectors_boundary_rhs_hp_02.cc +++ /dev/null @@ -1,142 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2000 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// like deal.II/vectors_boundary_rhs_02, but for hp-objects. here, each hp- -// object has only a single component, so we expect exactly the same output as -// for the old test. vectors_boundary_rhs_hp_02_hp tests for different finite -// elements - - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include "../tests.h" - - - -template -class MySquareFunction : public Function -{ -public: - MySquareFunction() - : Function(dim) - {} - - virtual double - value(const Point &p, const unsigned int component) const - { - return (component + 1) * p.square(); - } - - virtual void - vector_value(const Point &p, Vector &values) const - { - for (unsigned int d = 0; d < dim; ++d) - values(d) = value(p, d); - } -}; - - - -template -void -check() -{ - Triangulation tr; - if (dim == 2) - GridGenerator::hyper_ball(tr, Point(), 1); - else - GridGenerator::hyper_cube(tr, -1, 1); - tr.refine_global(1); - tr.begin_active()->set_refine_flag(); - tr.execute_coarsening_and_refinement(); - if (dim == 1) - tr.refine_global(2); - - // create a system element composed - // of one Q1 and one Q2 element - hp::FECollection element; - for (unsigned int i = 1; i < 7 - dim; ++i) - element.push_back(FE_RaviartThomas(i - 1)); - DoFHandler dof(tr); - for (typename DoFHandler::active_cell_iterator cell = dof.begin_active(); - cell != dof.end(); - ++cell) - cell->set_active_fe_index(Testing::rand() % element.size()); - - dof.distribute_dofs(element); - - // use a more complicated mapping - // of the domain and a quadrature - // formula suited to the elements - // we have here - hp::MappingCollection mapping; - for (unsigned int i = 1; i < 7 - dim; ++i) - mapping.push_back(MappingQ(i + 1)); - - hp::QCollection quadrature; - for (unsigned int i = 1; i < 7 - dim; ++i) - quadrature.push_back(QGauss(3 + i)); - - Vector rhs(dof.n_dofs()); - VectorTools::create_boundary_right_hand_side(dof, - quadrature, - MySquareFunction(), - rhs); - for (unsigned int i = 0; i < rhs.size(); ++i) - deallog << rhs(i) << std::endl; -} - - - -int -main() -{ - std::ofstream logfile("output"); - logfile.precision(4); - logfile.setf(std::ios::fixed); - deallog.attach(logfile); - - deallog.push("2d"); - check<2>(); - deallog.pop(); - deallog.push("3d"); - check<3>(); - deallog.pop(); -} diff --git a/tests/fail/vectors_rhs_hp_02.cc b/tests/fail/vectors_rhs_hp_02.cc deleted file mode 100644 index 20aa86dd9f..0000000000 --- a/tests/fail/vectors_rhs_hp_02.cc +++ /dev/null @@ -1,141 +0,0 @@ -// --------------------------------------------------------------------- -// -// Copyright (C) 2000 - 2020 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.md at -// the top level directory of deal.II. -// -// --------------------------------------------------------------------- - - - -// like deal.II/vectors_rhs_hp_02, but for hp-objects. here, each hp-object has -// only a single component, so we expect exactly the same output as for the old -// test. vectors_rhs_hp_02_hp tests for different finite elements - - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include "../tests.h" - - - -template -class MySquareFunction : public Function -{ -public: - MySquareFunction() - : Function(dim) - {} - - virtual double - value(const Point &p, const unsigned int component) const - { - return (component + 1) * p.square(); - } - - virtual void - vector_value(const Point &p, Vector &values) const - { - for (unsigned int d = 0; d < dim; ++d) - values(d) = value(p, d); - } -}; - - - -template -void -check() -{ - Triangulation tr; - if (dim == 2) - GridGenerator::hyper_ball(tr, Point(), 1); - else - GridGenerator::hyper_cube(tr, -1, 1); - tr.refine_global(1); - tr.begin_active()->set_refine_flag(); - tr.execute_coarsening_and_refinement(); - if (dim == 1) - tr.refine_global(2); - - // create a system element composed - // of one Q1 and one Q2 element - hp::FECollection element; - for (unsigned int i = 1; i < 7 - dim; ++i) - element.push_back(FE_RaviartThomas(i - 1)); - DoFHandler dof(tr); - for (typename DoFHandler::active_cell_iterator cell = dof.begin_active(); - cell != dof.end(); - ++cell) - cell->set_active_fe_index(Testing::rand() % element.size()); - - dof.distribute_dofs(element); - - // use a more complicated mapping - // of the domain and a quadrature - // formula suited to the elements - // we have here - hp::MappingCollection mapping; - for (unsigned int i = 1; i < 7 - dim; ++i) - mapping.push_back(MappingQ(i + 1)); - - hp::QCollection quadrature; - for (unsigned int i = 1; i < 7 - dim; ++i) - quadrature.push_back(QGauss(3 + i)); - - Vector rhs(dof.n_dofs()); - VectorTools::create_right_hand_side(dof, - quadrature, - MySquareFunction(), - rhs); - for (unsigned int i = 0; i < rhs.size(); ++i) - deallog << rhs(i) << std::endl; -} - - - -int -main() -{ - std::ofstream logfile("output"); - logfile.precision(4); - logfile.setf(std::ios::fixed); - deallog.attach(logfile); - - deallog.push("2d"); - check<2>(); - deallog.pop(); - deallog.push("3d"); - check<3>(); - deallog.pop(); -} -- 2.39.5