+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/numbers.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe.h>
-#include <deal.II/fe/fe_abf.h>
-#include <deal.II/fe/fe_dgq.h>
-#include <deal.II/fe/fe_q.h>
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-#include <deal.II/fe/fe_values.h>
-#include <deal.II/fe/mapping_q.h>
-#include <deal.II/fe/mapping_q1_eulerian.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_out.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/sparsity_pattern.h>
-#include <deal.II/lac/vector.h>
-#include <deal.II/lac/vector_memory.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/vector_tools.h>
-
-
-
-template <int dim>
-class TestMap1 : public Function<dim>
-{
-public:
- TestMap1(const unsigned int n_components)
- : Function<dim>(n_components)
- {}
-
- virtual ~TestMap1()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-
-template <int dim>
-double
-TestMap1<dim>::value(const Point<dim> &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 <int dim>
-void
-TestMap1<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef1 : public Function<dim>
-{
-private:
- const double phi;
-
-public:
- TestDef1(const unsigned int n_components, const double ph)
- : Function<dim>(n_components)
- , phi(ph)
- {}
-
- virtual ~TestDef1()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-
-template <int dim>
-double
-TestDef1<dim>::value(const Point<dim> &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 <int dim>
-void
-TestDef1<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef2 : public Function<dim>
-{
-private:
- const double scale;
-
-public:
- TestDef2(const unsigned int n_components, const double sc)
- : Function<dim>(n_components)
- , scale(sc)
- {}
-
- virtual ~TestDef2()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestDef2<dim>::value(const Point<dim> &p, const unsigned int component) const
-{
- double x = p(0), y = p(1);
-
- if (component == 0)
- return scale * x;
- else
- return scale * y;
-}
-
-
-template <int dim>
-void
-TestDef2<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef3 : public Function<dim>
-{
-private:
- const double scale;
-
-public:
- TestDef3(const unsigned int n_components, const double sc)
- : Function<dim>(n_components)
- , scale(sc)
- {}
-
- virtual ~TestDef3()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestDef3<dim>::value(const Point<dim> &p, const unsigned int component) const
-{
- double y = p(1);
-
- if (component == 0)
- return scale * y;
- else
- return 0;
-}
-
-
-template <int dim>
-void
-TestDef3<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestPoly : public Function<dim>
-{
-private:
- std::vector<Polynomials::Polynomial<double>> polys;
-
-public:
- TestPoly(unsigned int deg)
- : Function<dim>(2)
- {
- std::vector<double> 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<double>(coeff));
- }
- }
-
- virtual ~TestPoly()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestPoly<dim>::value(const Point<dim> &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 <int dim>
-void
-TestPoly<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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<double> 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<double> 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<Vector<double>> this_value(n_q_points,
- Vector<double>(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<double> 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<double> 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);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_out.h>
-#include <deal.II/grid/tria.h>
-
-#include <deal.II/opencascade/manifold_lib.h>
-#include <deal.II/opencascade/utilities.h>
-
-#include <Standard_Stream.hxx>
-#include <TopTools.hxx>
-#include <TopoDS_Shape.hxx>
-
-#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<Point<2>> 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;
-}
+++ /dev/null
-$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
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/base/timer.h>
-#include <deal.II/base/utilities.h>
-
-#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_q.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_out.h>
-#include <deal.II/grid/grid_refinement.h>
-#include <deal.II/grid/manifold_lib.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/hp/fe_values.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/dynamic_sparsity_pattern.h>
-#include <deal.II/lac/full_matrix.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/error_estimator.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/vector_tools.h>
-
-#include <complex>
-#include <iostream>
-
-#include "../tests.h"
-
-// Finally, this is as in previous
-// programs:
-
-template <int dim>
-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<float> &smoothness_indicators) const;
- void
- output_results(const unsigned int cycle) const;
-
- Triangulation<dim> triangulation;
-
- DoFHandler<dim> dof_handler;
- hp::FECollection<dim> fe_collection;
- hp::QCollection<dim> quadrature_collection;
- hp::QCollection<dim - 1> face_quadrature_collection;
-
- AffineConstraints<double> hanging_node_constraints;
-
- SparsityPattern sparsity_pattern;
- SparseMatrix<double> system_matrix;
-
- Vector<double> solution;
- Vector<double> system_rhs;
-
- Timer distr, condense, hang, assemble, solver;
-};
-
-
-
-template <int dim>
-class RightHandSide : public Function<dim>
-{
-public:
- RightHandSide()
- : Function<dim>()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component) const;
-};
-
-
-template <int dim>
-double
-RightHandSide<dim>::value(const Point<dim> &p,
- const unsigned int /*component*/) const
-{
- double product = 1;
- for (unsigned int d = 0; d < dim; ++d)
- product *= (p[d] + 1);
- return product;
-}
-
-
-
-template <int dim>
-LaplaceProblem<dim>::LaplaceProblem()
- : dof_handler(triangulation)
-{
- for (unsigned int degree = 2; degree < (dim == 2 ? 8 : 5); ++degree)
- {
- fe_collection.push_back(FE_Q<dim>(degree));
- quadrature_collection.push_back(QGauss<dim>(degree + 2));
- face_quadrature_collection.push_back(QGauss<dim - 1>(degree + 2));
- }
-}
-
-
-template <int dim>
-LaplaceProblem<dim>::~LaplaceProblem()
-{
- dof_handler.clear();
-}
-
-template <int dim>
-void
-LaplaceProblem<dim>::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 <int dim>
-void
-LaplaceProblem<dim>::assemble_system()
-{
- hp::FEValues<dim> hp_fe_values(fe_collection,
- quadrature_collection,
- update_values | update_gradients |
- update_quadrature_points |
- update_JxW_values);
-
- const RightHandSide<dim> rhs_function;
-
- typename DoFHandler<dim>::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<double> cell_matrix(dofs_per_cell, dofs_per_cell);
- Vector<double> cell_rhs(dofs_per_cell);
-
- std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
-
- cell_matrix = 0;
- cell_rhs = 0;
-
- hp_fe_values.reinit(cell);
-
- const FEValues<dim> &fe_values = hp_fe_values.get_present_fe_values();
-
- std::vector<double> 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<types::global_dof_index, double> boundary_values;
- VectorTools::interpolate_boundary_values(dof_handler,
- 0,
- Functions::ZeroFunction<dim>(),
- boundary_values);
- MatrixTools::apply_boundary_values(boundary_values,
- system_matrix,
- solution,
- system_rhs);
-}
-
-template <int dim>
-void
-LaplaceProblem<dim>::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 <int dim>
-void
-LaplaceProblem<dim>::estimate_smoothness(
- Vector<float> &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<Tensor<1, dim>> k_vectors;
- std::vector<unsigned int> 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<dim>(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<dim>(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<double> 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<dim> quadrature(base_quadrature, N);
-
- std::vector<Table<2, std::complex<double>>> 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<double> sum = 0;
- for (unsigned int q = 0; q < quadrature.size(); ++q)
- {
- const Point<dim> x_q = quadrature.point(q);
- sum +=
- std::exp(std::complex<double>(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<std::complex<double>> fourier_coefficients(n_fourier_modes);
- Vector<double> local_dof_values;
-
- typename DoFHandler<dim>::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<unsigned int, double> 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 <int dim>
-void
-LaplaceProblem<dim>::refine_grid()
-{
- Vector<float> estimated_error_per_cell(triangulation.n_active_cells());
- KellyErrorEstimator<dim>::estimate(
- dof_handler,
- face_quadrature_collection,
- std::map<types::boundary_id, const Function<dim> *>(),
- solution,
- estimated_error_per_cell);
-
- Vector<float> 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<dim>::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<dim>::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 <int dim>
-void
-LaplaceProblem<dim>::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<float> smoothness_indicators(triangulation.n_active_cells());
- estimate_smoothness(smoothness_indicators);
-
- Vector<double> smoothness_field(dof_handler.n_dofs());
- DoFTools::distribute_cell_to_dof_vector(dof_handler,
- smoothness_indicators,
- smoothness_field);
-
- Vector<float> fe_indices(triangulation.n_active_cells());
- {
- typename DoFHandler<dim>::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<dim> 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<Point<dim>> vertices(&vertices_1[0],
- &vertices_1[n_vertices]);
- static const int cell_vertices[][GeometryInfo<dim>::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<CellData<dim>> cells(n_cells, CellData<dim>());
- for (unsigned int i = 0; i < n_cells; ++i)
- {
- for (const unsigned int j : GeometryInfo<dim>::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<dim>(0, 0, -4),
- Point<dim>(std::cos(0 * numbers::PI / 6),
- std::sin(0 * numbers::PI / 6),
- -4),
- Point<dim>(std::cos(2 * numbers::PI / 6),
- std::sin(2 * numbers::PI / 6),
- -4),
- Point<dim>(std::cos(4 * numbers::PI / 6),
- std::sin(4 * numbers::PI / 6),
- -4),
- Point<dim>(std::cos(6 * numbers::PI / 6),
- std::sin(6 * numbers::PI / 6),
- -4),
- Point<dim>(std::cos(8 * numbers::PI / 6),
- std::sin(8 * numbers::PI / 6),
- -4),
- Point<dim>(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<dim>(0, 0, 4 - std::sqrt(2.) / 2),
- Point<dim>(std::cos(0 * numbers::PI / 6), std::sin(0 * numbers::PI / 6), 4),
- Point<dim>(std::cos(2 * numbers::PI / 6), std::sin(2 * numbers::PI / 6), 4),
- Point<dim>(std::cos(4 * numbers::PI / 6), std::sin(4 * numbers::PI / 6), 4),
- Point<dim>(std::cos(6 * numbers::PI / 6), std::sin(6 * numbers::PI / 6), 4),
- Point<dim>(std::cos(8 * numbers::PI / 6), std::sin(8 * numbers::PI / 6), 4),
- Point<dim>(std::cos(10 * numbers::PI / 6),
- std::sin(10 * numbers::PI / 6),
- 4),
-
- // point at top of chevron
- Point<dim>(0, 0, 4 + std::sqrt(2.) / 2),
-
- // points at the top of the
- // first extension
- // points 15-18
- Point<dim>(0, 0, 7) + Point<dim>(std::cos(2 * numbers::PI / 6),
- std::sin(2 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(0 * numbers::PI / 6),
- std::sin(0 * numbers::PI / 6),
- 7) +
- Point<dim>(std::cos(2 * numbers::PI / 6),
- std::sin(2 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(2 * numbers::PI / 6),
- std::sin(2 * numbers::PI / 6),
- 7) +
- Point<dim>(std::cos(2 * numbers::PI / 6),
- std::sin(2 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(4 * numbers::PI / 6),
- std::sin(4 * numbers::PI / 6),
- 7) +
- Point<dim>(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<dim>(0, 0, 7) + Point<dim>(std::cos(6 * numbers::PI / 6),
- std::sin(6 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(4 * numbers::PI / 6),
- std::sin(4 * numbers::PI / 6),
- 7) +
- Point<dim>(std::cos(6 * numbers::PI / 6),
- std::sin(6 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(6 * numbers::PI / 6),
- std::sin(6 * numbers::PI / 6),
- 7) +
- Point<dim>(std::cos(6 * numbers::PI / 6),
- std::sin(6 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(8 * numbers::PI / 6),
- std::sin(8 * numbers::PI / 6),
- 7) +
- Point<dim>(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<dim>(0, 0, 7) + Point<dim>(std::cos(10 * numbers::PI / 6),
- std::sin(10 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(8 * numbers::PI / 6),
- std::sin(8 * numbers::PI / 6),
- 7) +
- Point<dim>(std::cos(10 * numbers::PI / 6),
- std::sin(10 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(10 * numbers::PI / 6),
- std::sin(10 * numbers::PI / 6),
- 7) +
- Point<dim>(std::cos(10 * numbers::PI / 6),
- std::sin(10 * numbers::PI / 6),
- 0) *
- 4,
- Point<dim>(std::cos(0 * numbers::PI / 6),
- std::sin(0 * numbers::PI / 6),
- 7) +
- Point<dim>(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<Point<dim>> vertices(&vertices_1[0],
- &vertices_1[n_vertices]);
- static const int cell_vertices[][GeometryInfo<dim>::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<CellData<dim>> cells(n_cells, CellData<dim>());
- for (unsigned int i = 0; i < n_cells; ++i)
- {
- for (const unsigned int j : GeometryInfo<dim>::vertex_indices())
- cells[i].vertices[j] = cell_vertices[i][j];
- cells[i].material_id = 0;
- }
-
- triangulation.create_triangulation(vertices, cells, SubCellData());
-
- for (Triangulation<dim>::active_cell_iterator cell =
- triangulation.begin_active();
- cell != triangulation.end();
- ++cell)
- for (const unsigned int f : GeometryInfo<dim>::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 <int dim>
-void
-LaplaceProblem<dim>::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;
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_dgq.h>
-#include <deal.II/fe/fe_nothing.h>
-#include <deal.II/fe/fe_q.h>
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_refinement.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/hp/fe_collection.h>
-#include <deal.II/hp/fe_values.h>
-
-#include "../tests.h"
-
-
-
-template <int dim>
-void
-test()
-{
- Triangulation<dim> triangulation;
- GridGenerator::hyper_cube(triangulation, -0.5, 0.5);
- triangulation.refine_global(4);
-
- hp::FECollection<dim> fe_collection;
-
- // test the behavior of the FE_Nothing element
- // in multicomponent systems (for, e.g., solving
- // Stokes' equations).
-
- fe_collection.push_back(
- FESystem<dim>(FE_RaviartThomas<dim>(0), 1, FE_DGQ<dim>(0), 1));
-
- fe_collection.push_back(
- FESystem<dim>(FE_Nothing<dim>(dim), 1, FE_Nothing<dim>(), 1));
-
-
- DoFHandler<dim> 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<dim>::active_cell_iterator cell =
- dof_handler.begin_active(),
- endc = dof_handler.end();
-
- for (; cell != endc; ++cell)
- {
- Point<dim> 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;
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/quadrature_lib.h>
-#include <deal.II/base/thread_management.h>
-
-#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_q.h>
-#include <deal.II/fe/fe_tools.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_out.h>
-#include <deal.II/grid/grid_refinement.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/hp/fe_values.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/full_matrix.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/error_estimator.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/vector_tools.h>
-
-#include <algorithm>
-#include <iostream>
-#include <list>
-#include <numeric>
-#include <sstream>
-
-
-namespace Evaluation
-{
- template <int dim>
- class EvaluationBase
- {
- public:
- virtual ~EvaluationBase();
-
- void
- set_refinement_cycle(const unsigned int refinement_cycle);
-
- virtual void
- operator()(const DoFHandler<dim> &dof_handler,
- const Vector<double> & solution) const = 0;
-
- protected:
- unsigned int refinement_cycle;
- };
-
-
- template <int dim>
- EvaluationBase<dim>::~EvaluationBase()
- {}
-
-
-
- template <int dim>
- void
- EvaluationBase<dim>::set_refinement_cycle(const unsigned int step)
- {
- refinement_cycle = step;
- }
-
-
- template <int dim>
- class PointValueEvaluation : public EvaluationBase<dim>
- {
- public:
- PointValueEvaluation(const Point<dim> &evaluation_point);
-
- virtual void
- operator()(const DoFHandler<dim> &dof_handler,
- const Vector<double> & solution) const;
-
- DeclException1(ExcEvaluationPointNotFound,
- Point<dim>,
- << "The evaluation point " << arg1
- << " was not found among the vertices of the present grid.");
-
- private:
- const Point<dim> evaluation_point;
- };
-
-
- template <int dim>
- PointValueEvaluation<dim>::PointValueEvaluation(
- const Point<dim> &evaluation_point)
- : evaluation_point(evaluation_point)
- {}
-
-
-
- template <int dim>
- void
- PointValueEvaluation<dim>::operator()(const DoFHandler<dim> &dof_handler,
- const Vector<double> & solution) const
- {
- double point_value = 1e20;
-
- typename DoFHandler<dim>::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<dim>::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 <int dim>
- class PointXDerivativeEvaluation : public EvaluationBase<dim>
- {
- public:
- PointXDerivativeEvaluation(const Point<dim> &evaluation_point);
-
- virtual void
- operator()(const DoFHandler<dim> &dof_handler,
- const Vector<double> & solution) const;
-
- DeclException1(ExcEvaluationPointNotFound,
- Point<dim>,
- << "The evaluation point " << arg1
- << " was not found among the vertices of the present grid.");
-
- private:
- const Point<dim> evaluation_point;
- };
-
-
- template <int dim>
- PointXDerivativeEvaluation<dim>::PointXDerivativeEvaluation(
- const Point<dim> &evaluation_point)
- : evaluation_point(evaluation_point)
- {}
-
-
- template <int dim>
- void
- PointXDerivativeEvaluation<dim>::operator()(
- const DoFHandler<dim> &dof_handler,
- const Vector<double> & solution) const
- {
- double point_derivative = 0;
-
- QTrapezoid<dim> vertex_quadrature;
- hp::FEValues<dim> fe_values(dof_handler.get_fe(),
- vertex_quadrature,
- update_gradients | update_quadrature_points);
- std::vector<Tensor<1, dim>> solution_gradients(vertex_quadrature.size());
-
- typename DoFHandler<dim>::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<dim>::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 <int dim>
- class GridOutput : public EvaluationBase<dim>
- {
- public:
- GridOutput(const std::string &output_name_base);
-
- virtual void
- operator()(const DoFHandler<dim> &dof_handler,
- const Vector<double> & solution) const;
-
- private:
- const std::string output_name_base;
- };
-
-
- template <int dim>
- GridOutput<dim>::GridOutput(const std::string &output_name_base)
- : output_name_base(output_name_base)
- {}
-
-
- template <int dim>
- void
- GridOutput<dim>::operator()(const DoFHandler<dim> &dof_handler,
- const Vector<double> & /*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 <int dim>
- class WeightedResidual;
-
-
-
- template <int dim>
- class Base
- {
- public:
- Base(Triangulation<dim> &coarse_grid);
- virtual ~Base();
-
- virtual void
- solve_problem() = 0;
- virtual void
- postprocess(const Evaluation::EvaluationBase<dim> &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<dim>> triangulation;
-
- unsigned int refinement_cycle;
- };
-
-
- template <int dim>
- Base<dim>::Base(Triangulation<dim> &coarse_grid)
- : triangulation(&coarse_grid)
- {}
-
-
- template <int dim>
- Base<dim>::~Base()
- {}
-
-
-
- template <int dim>
- void
- Base<dim>::set_refinement_cycle(const unsigned int cycle)
- {
- refinement_cycle = cycle;
- }
-
-
-
- template <int dim>
- class Solver : public virtual Base<dim>
- {
- public:
- Solver(Triangulation<dim> & triangulation,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & boundary_values);
- virtual ~Solver();
-
- virtual void
- solve_problem();
-
- virtual void
- postprocess(const Evaluation::EvaluationBase<dim> &postprocessor) const;
-
- virtual unsigned int
- n_dofs() const;
-
- protected:
- const SmartPointer<const hp::FECollection<dim>> fe;
- const SmartPointer<const hp::QCollection<dim>> quadrature;
- const SmartPointer<const hp::QCollection<dim - 1>> face_quadrature;
- DoFHandler<dim> dof_handler;
- Vector<double> solution;
- const SmartPointer<const Function<dim>> boundary_values;
-
- virtual void
- assemble_rhs(Vector<double> &rhs) const = 0;
-
- private:
- struct LinearSystem
- {
- LinearSystem(const DoFHandler<dim> &dof_handler);
-
- void
- solve(Vector<double> &solution) const;
-
- AffineConstraints<double> hanging_node_constraints;
- SparsityPattern sparsity_pattern;
- SparseMatrix<double> matrix;
- Vector<double> rhs;
- };
-
- void
- assemble_linear_system(LinearSystem &linear_system);
-
- void
- assemble_matrix(
- LinearSystem & linear_system,
- const typename DoFHandler<dim>::active_cell_iterator &begin_cell,
- const typename DoFHandler<dim>::active_cell_iterator &end_cell,
- Threads::Mutex & mutex) const;
- };
-
-
-
- template <int dim>
- Solver<dim>::Solver(Triangulation<dim> & triangulation,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & boundary_values)
- : Base<dim>(triangulation)
- , fe(&fe)
- , quadrature(&quadrature)
- , face_quadrature(&face_quadrature)
- , dof_handler(triangulation)
- , boundary_values(&boundary_values)
- {}
-
-
- template <int dim>
- Solver<dim>::~Solver()
- {
- dof_handler.clear();
- }
-
-
- template <int dim>
- void
- Solver<dim>::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 <int dim>
- void
- Solver<dim>::postprocess(
- const Evaluation::EvaluationBase<dim> &postprocessor) const
- {
- postprocessor(dof_handler, solution);
- }
-
-
- template <int dim>
- unsigned int
- Solver<dim>::n_dofs() const
- {
- return dof_handler.n_dofs();
- }
-
-
- template <int dim>
- void
- Solver<dim>::assemble_linear_system(LinearSystem &linear_system)
- {
- using active_cell_iterator = typename DoFHandler<dim>::active_cell_iterator;
-
-
- const unsigned int n_threads = MultithreadInfo::n_threads();
- std::vector<std::pair<active_cell_iterator, active_cell_iterator>>
- thread_ranges =
- Threads::split_range<active_cell_iterator>(dof_handler.begin_active(),
- dof_handler.end(),
- n_threads);
-
- Threads::Mutex mutex;
- std::vector<std::thread> threads;
- for (unsigned int thread = 0; thread < n_threads; ++thread)
- threads.emplace_back(&Solver<dim>::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<types::global_dof_index, double> 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 <int dim>
- void
- Solver<dim>::assemble_matrix(
- LinearSystem & linear_system,
- const typename DoFHandler<dim>::active_cell_iterator &begin_cell,
- const typename DoFHandler<dim>::active_cell_iterator &end_cell,
- Threads::Mutex & mutex) const
- {
- hp::FEValues<dim> 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<double> cell_matrix(dofs_per_cell, dofs_per_cell);
-
- std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
-
- for (typename DoFHandler<dim>::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<std::mutex> 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 <int dim>
- Solver<dim>::LinearSystem::LinearSystem(const DoFHandler<dim> &dof_handler)
-
- {
- hanging_node_constraints.clear();
-
- void (*mhnc_p)(const DoFHandler<dim> &, AffineConstraints<double> &) =
- &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 <int dim>
- void
- Solver<dim>::LinearSystem::solve(Vector<double> &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 <int dim>
- class PrimalSolver : public Solver<dim>
- {
- public:
- PrimalSolver(Triangulation<dim> & triangulation,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values);
-
- virtual void
- solve_problem();
-
- virtual unsigned int
- n_dofs() const;
-
- virtual void
- postprocess(const Evaluation::EvaluationBase<dim> &postprocessor) const;
-
- virtual void
- output_solution() const;
-
- protected:
- const SmartPointer<const Function<dim>> rhs_function;
- virtual void
- assemble_rhs(Vector<double> &rhs) const;
-
- friend class WeightedResidual<dim>;
- };
-
-
- template <int dim>
- PrimalSolver<dim>::PrimalSolver(
- Triangulation<dim> & triangulation,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values)
- : Base<dim>(triangulation)
- , Solver<dim>(triangulation,
- fe,
- quadrature,
- face_quadrature,
- boundary_values)
- , rhs_function(&rhs_function)
- {}
-
-
- template <int dim>
- void
- PrimalSolver<dim>::solve_problem()
- {
- Solver<dim>::solve_problem();
- }
-
-
-
- template <int dim>
- unsigned int
- PrimalSolver<dim>::n_dofs() const
- {
- return Solver<dim>::n_dofs();
- }
-
-
- template <int dim>
- void
- PrimalSolver<dim>::postprocess(
- const Evaluation::EvaluationBase<dim> &postprocessor) const
- {
- Solver<dim>::postprocess(postprocessor);
- }
-
-
- template <int dim>
- void
- PrimalSolver<dim>::output_solution() const
- {
- DataOut<dim> 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<dim>::gnuplot);
- }
-
-
-
- template <int dim>
- void
- PrimalSolver<dim>::assemble_rhs(Vector<double> &rhs) const
- {
- hp::FEValues<dim> 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<double> cell_rhs(dofs_per_cell);
- std::vector<double> rhs_values(n_q_points);
- std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
-
- typename DoFHandler<dim>::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 <int dim>
- class RefinementGlobal : public PrimalSolver<dim>
- {
- public:
- RefinementGlobal(Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values);
-
- virtual void
- refine_grid();
- };
-
-
-
- template <int dim>
- RefinementGlobal<dim>::RefinementGlobal(
- Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values)
- : Base<dim>(coarse_grid)
- , PrimalSolver<dim>(coarse_grid,
- fe,
- quadrature,
- face_quadrature,
- rhs_function,
- boundary_values)
- {}
-
-
-
- template <int dim>
- void
- RefinementGlobal<dim>::refine_grid()
- {
- this->triangulation->refine_global(1);
- }
-
-
-
- template <int dim>
- class RefinementKelly : public PrimalSolver<dim>
- {
- public:
- RefinementKelly(Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values);
-
- virtual void
- refine_grid();
- };
-
-
-
- template <int dim>
- RefinementKelly<dim>::RefinementKelly(
- Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values)
- : Base<dim>(coarse_grid)
- , PrimalSolver<dim>(coarse_grid,
- fe,
- quadrature,
- face_quadrature,
- rhs_function,
- boundary_values)
- {}
-
-
-
- template <int dim>
- void
- RefinementKelly<dim>::refine_grid()
- {
- Vector<float> estimated_error_per_cell(
- this->triangulation->n_active_cells());
- KellyErrorEstimator<dim>::estimate(
- this->dof_handler,
- QGauss<dim - 1>(3),
- std::map<types::boundary_id, const Function<dim> *>(),
- 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 <int dim>
- class RefinementWeightedKelly : public PrimalSolver<dim>
- {
- public:
- RefinementWeightedKelly(Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values,
- const Function<dim> & weighting_function);
-
- virtual void
- refine_grid();
-
- private:
- const SmartPointer<const Function<dim>> weighting_function;
- };
-
-
-
- template <int dim>
- RefinementWeightedKelly<dim>::RefinementWeightedKelly(
- Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> &face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values,
- const Function<dim> & weighting_function)
- : Base<dim>(coarse_grid)
- , PrimalSolver<dim>(coarse_grid,
- fe,
- quadrature,
- face_quadrature,
- rhs_function,
- boundary_values)
- , weighting_function(&weighting_function)
- {}
-
-
-
- template <int dim>
- void
- RefinementWeightedKelly<dim>::refine_grid()
- {
- Vector<float> estimated_error(this->triangulation->n_active_cells());
- KellyErrorEstimator<dim>::estimate(
- this->dof_handler,
- (*this->face_quadrature)[0],
- std::map<types::boundary_id, const Function<dim> *>(),
- this->solution,
- estimated_error);
-
- typename DoFHandler<dim>::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 <int dim>
- struct SetUpBase : public Subscriptor
- {
- virtual const Function<dim> &
- get_boundary_values() const = 0;
-
- virtual const Function<dim> &
- get_right_hand_side() const = 0;
-
- virtual void
- create_coarse_grid(Triangulation<dim> &coarse_grid) const = 0;
- };
-
-
- template <class Traits, int dim>
- struct SetUp : public SetUpBase<dim>
- {
- SetUp()
- {}
-
- virtual const Function<dim> &
- get_boundary_values() const;
-
- virtual const Function<dim> &
- get_right_hand_side() const;
-
-
- virtual void
- create_coarse_grid(Triangulation<dim> &coarse_grid) const;
-
- private:
- static const typename Traits::BoundaryValues boundary_values;
- static const typename Traits::RightHandSide right_hand_side;
- };
-
- template <class Traits, int dim>
- const typename Traits::BoundaryValues SetUp<Traits, dim>::boundary_values;
- template <class Traits, int dim>
- const typename Traits::RightHandSide SetUp<Traits, dim>::right_hand_side;
-
- template <class Traits, int dim>
- const Function<dim> &
- SetUp<Traits, dim>::get_boundary_values() const
- {
- return boundary_values;
- }
-
-
- template <class Traits, int dim>
- const Function<dim> &
- SetUp<Traits, dim>::get_right_hand_side() const
- {
- return right_hand_side;
- }
-
-
- template <class Traits, int dim>
- void
- SetUp<Traits, dim>::create_coarse_grid(Triangulation<dim> &coarse_grid) const
- {
- Traits::create_coarse_grid(coarse_grid);
- }
-
-
-
- template <int dim>
- struct CurvedRidges
- {
- class BoundaryValues : public Function<dim>
- {
- public:
- BoundaryValues()
- : Function<dim>()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component) const;
- };
-
-
- class RightHandSide : public Function<dim>
- {
- public:
- RightHandSide()
- : Function<dim>()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component) const;
- };
-
- static void
- create_coarse_grid(Triangulation<dim> &coarse_grid);
- };
-
-
- template <int dim>
- double
- CurvedRidges<dim>::BoundaryValues::value(
- const Point<dim> &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 <int dim>
- double
- CurvedRidges<dim>::RightHandSide::value(
- const Point<dim> &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 <int dim>
- void
- CurvedRidges<dim>::create_coarse_grid(Triangulation<dim> &coarse_grid)
- {
- GridGenerator::hyper_cube(coarse_grid, -1, 1);
- coarse_grid.refine_global(2);
- }
-
-
-
- template <int dim>
- struct Exercise_2_3
- {
- using BoundaryValues = Functions::ZeroFunction<dim>;
-
- class RightHandSide : public Functions::ConstantFunction<dim>
- {
- public:
- RightHandSide()
- : Functions::ConstantFunction<dim>(1.)
- {}
- };
-
- static void
- create_coarse_grid(Triangulation<dim> &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<Point<dim>> vertices(&vertices_1[0],
- &vertices_1[n_vertices]);
-
- static const int cell_vertices[][GeometryInfo<dim>::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<CellData<dim>> cells(n_cells, CellData<dim>());
- for (unsigned int i = 0; i < n_cells; ++i)
- {
- for (const unsigned int j : GeometryInfo<dim>::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 <int dim>
- class DualFunctionalBase : public Subscriptor
- {
- public:
- virtual void
- assemble_rhs(const DoFHandler<dim> &dof_handler,
- Vector<double> & rhs) const = 0;
- };
-
-
-
- template <int dim>
- class PointValueEvaluation : public DualFunctionalBase<dim>
- {
- public:
- PointValueEvaluation(const Point<dim> &evaluation_point);
-
- virtual void
- assemble_rhs(const DoFHandler<dim> &dof_handler, Vector<double> &rhs) const;
-
-
- DeclException1(ExcEvaluationPointNotFound,
- Point<dim>,
- << "The evaluation point " << arg1
- << " was not found among the vertices of the present grid.");
-
- protected:
- const Point<dim> evaluation_point;
- };
-
-
- template <int dim>
- PointValueEvaluation<dim>::PointValueEvaluation(
- const Point<dim> &evaluation_point)
- : evaluation_point(evaluation_point)
- {}
-
-
- template <int dim>
- void
- PointValueEvaluation<dim>::assemble_rhs(const DoFHandler<dim> &dof_handler,
-
- Vector<double> &rhs) const
- {
- rhs.reinit(dof_handler.n_dofs());
-
- typename DoFHandler<dim>::active_cell_iterator cell =
- dof_handler.begin_active(),
- endc = dof_handler.end();
- for (; cell != endc; ++cell)
- for (const unsigned int vertex : GeometryInfo<dim>::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 <int dim>
- class PointXDerivativeEvaluation : public DualFunctionalBase<dim>
- {
- public:
- PointXDerivativeEvaluation(const Point<dim> &evaluation_point);
-
- virtual void
- assemble_rhs(const DoFHandler<dim> &dof_handler, Vector<double> &rhs) const;
-
-
- DeclException1(ExcEvaluationPointNotFound,
- Point<dim>,
- << "The evaluation point " << arg1
- << " was not found among the vertices of the present grid.");
-
- protected:
- const Point<dim> evaluation_point;
- };
-
-
- template <int dim>
- PointXDerivativeEvaluation<dim>::PointXDerivativeEvaluation(
- const Point<dim> &evaluation_point)
- : evaluation_point(evaluation_point)
- {}
-
-
- template <int dim>
- void
- PointXDerivativeEvaluation<dim>::assemble_rhs(
- const DoFHandler<dim> &dof_handler,
- Vector<double> & rhs) const
- {
- rhs.reinit(dof_handler.n_dofs());
-
- QGauss<dim> quadrature(4);
- hp::FEValues<dim> 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<double> cell_rhs(dofs_per_cell);
- std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
-
- double total_volume = 0;
-
- typename DoFHandler<dim>::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 <int dim>
- class DualSolver : public Solver<dim>
- {
- public:
- DualSolver(Triangulation<dim> & triangulation,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> & face_quadrature,
- const DualFunctional::DualFunctionalBase<dim> &dual_functional);
-
- virtual void
- solve_problem();
-
- virtual unsigned int
- n_dofs() const;
-
- virtual void
- postprocess(const Evaluation::EvaluationBase<dim> &postprocessor) const;
-
- protected:
- const SmartPointer<const DualFunctional::DualFunctionalBase<dim>>
- dual_functional;
- virtual void
- assemble_rhs(Vector<double> &rhs) const;
-
- static const Functions::ZeroFunction<dim> boundary_values;
-
- friend class WeightedResidual<dim>;
- };
-
- template <int dim>
- const Functions::ZeroFunction<dim> DualSolver<dim>::boundary_values;
-
- template <int dim>
- DualSolver<dim>::DualSolver(
- Triangulation<dim> & triangulation,
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> & face_quadrature,
- const DualFunctional::DualFunctionalBase<dim> &dual_functional)
- : Base<dim>(triangulation)
- , Solver<dim>(triangulation,
- fe,
- quadrature,
- face_quadrature,
- boundary_values)
- , dual_functional(&dual_functional)
- {}
-
-
- template <int dim>
- void
- DualSolver<dim>::solve_problem()
- {
- Solver<dim>::solve_problem();
- }
-
-
-
- template <int dim>
- unsigned int
- DualSolver<dim>::n_dofs() const
- {
- return Solver<dim>::n_dofs();
- }
-
-
- template <int dim>
- void
- DualSolver<dim>::postprocess(
- const Evaluation::EvaluationBase<dim> &postprocessor) const
- {
- Solver<dim>::postprocess(postprocessor);
- }
-
-
-
- template <int dim>
- void
- DualSolver<dim>::assemble_rhs(Vector<double> &rhs) const
- {
- dual_functional->assemble_rhs(this->dof_handler, rhs);
- }
-
-
-
- template <int dim>
- class WeightedResidual : public PrimalSolver<dim>, public DualSolver<dim>
- {
- public:
- WeightedResidual(
- Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & primal_fe,
- const hp::FECollection<dim> & dual_fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> & face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & boundary_values,
- const DualFunctional::DualFunctionalBase<dim> &dual_functional);
-
- virtual void
- solve_problem();
-
- virtual void
- postprocess(const Evaluation::EvaluationBase<dim> &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<dim>::active_cell_iterator;
-
-
- using FaceIntegrals =
- typename std::map<typename DoFHandler<dim>::face_iterator, double>;
-
-
-
- struct CellData
- {
- hp::FEValues<dim> fe_values;
- const SmartPointer<const Function<dim>> right_hand_side;
-
- std::vector<double> cell_residual;
- std::vector<double> rhs_values;
- std::vector<double> dual_weights;
- typename std::vector<Tensor<2, dim>> cell_grad_grads;
- CellData(const hp::FECollection<dim> &fe,
- const hp::QCollection<dim> & quadrature,
- const Function<dim> & right_hand_side);
- };
-
- struct FaceData
- {
- hp::FEFaceValues<dim> fe_face_values_cell;
- hp::FEFaceValues<dim> fe_face_values_neighbor;
- hp::FESubfaceValues<dim> fe_subface_values_cell;
-
- std::vector<double> jump_residual;
- std::vector<double> dual_weights;
- typename std::vector<Tensor<1, dim>> cell_grads;
- typename std::vector<Tensor<1, dim>> neighbor_grads;
- FaceData(const hp::FECollection<dim> & fe,
- const hp::QCollection<dim - 1> &face_quadrature);
- };
-
-
-
- void
- estimate_error(Vector<float> &error_indicators) const;
-
- void
- estimate_some(const Vector<double> &primal_solution,
- const Vector<double> &dual_weights,
- const unsigned int n_threads,
- const unsigned int this_thread,
- Vector<float> & error_indicators,
- FaceIntegrals & face_integrals) const;
-
- void
- integrate_over_cell(const active_cell_iterator &cell,
- const unsigned int cell_index,
- const Vector<double> & primal_solution,
- const Vector<double> & dual_weights,
- CellData & cell_data,
- Vector<float> & error_indicators) const;
-
- void
- integrate_over_regular_face(const active_cell_iterator &cell,
- const unsigned int face_no,
- const Vector<double> & primal_solution,
- const Vector<double> & 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<double> & primal_solution,
- const Vector<double> & dual_weights,
- FaceData & face_data,
- FaceIntegrals &face_integrals) const;
- };
-
-
-
- template <int dim>
- WeightedResidual<dim>::CellData::CellData(
- const hp::FECollection<dim> &fe,
- const hp::QCollection<dim> & quadrature,
- const Function<dim> & 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 <int dim>
- WeightedResidual<dim>::FaceData::FaceData(
- const hp::FECollection<dim> & fe,
- const hp::QCollection<dim - 1> &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 <int dim>
- WeightedResidual<dim>::WeightedResidual(
- Triangulation<dim> & coarse_grid,
- const hp::FECollection<dim> & primal_fe,
- const hp::FECollection<dim> & dual_fe,
- const hp::QCollection<dim> & quadrature,
- const hp::QCollection<dim - 1> & face_quadrature,
- const Function<dim> & rhs_function,
- const Function<dim> & bv,
- const DualFunctional::DualFunctionalBase<dim> &dual_functional)
- : Base<dim>(coarse_grid)
- , PrimalSolver<dim>(coarse_grid,
- primal_fe,
- quadrature,
- face_quadrature,
- rhs_function,
- bv)
- , DualSolver<dim>(coarse_grid,
- dual_fe,
- quadrature,
- face_quadrature,
- dual_functional)
- {}
-
-
- template <int dim>
- void
- WeightedResidual<dim>::solve_problem()
- {
- std::vector<std::thread> threads;
- threads.emplace_back(&WeightedResidual<dim>::solve_primal_problem, *this);
- threads.emplace_back(&WeightedResidual<dim>::solve_dual_problem, *this);
- threads[0].join();
- threads[1].join();
- }
-
-
- template <int dim>
- void
- WeightedResidual<dim>::solve_primal_problem()
- {
- PrimalSolver<dim>::solve_problem();
- }
-
- template <int dim>
- void
- WeightedResidual<dim>::solve_dual_problem()
- {
- DualSolver<dim>::solve_problem();
- }
-
-
- template <int dim>
- void
- WeightedResidual<dim>::postprocess(
- const Evaluation::EvaluationBase<dim> &postprocessor) const
- {
- PrimalSolver<dim>::postprocess(postprocessor);
- }
-
-
- template <int dim>
- unsigned int
- WeightedResidual<dim>::n_dofs() const
- {
- return PrimalSolver<dim>::n_dofs();
- }
-
-
-
- template <int dim>
- void
- WeightedResidual<dim>::refine_grid()
- {
- Vector<float> error_indicators(this->triangulation->n_active_cells());
- estimate_error(error_indicators);
-
- for (Vector<float>::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 <int dim>
- void
- WeightedResidual<dim>::output_solution() const
- {
- const PrimalSolver<dim> &primal_solver = *this;
- const DualSolver<dim> & dual_solver = *this;
-
- AffineConstraints<double> primal_hanging_node_constraints;
- DoFTools::make_hanging_node_constraints(primal_solver.dof_handler,
- primal_hanging_node_constraints);
- primal_hanging_node_constraints.close();
- Vector<double> 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<dim> 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<dim>::gnuplot);
- }
-
-
-
- template <int dim>
- void
- WeightedResidual<dim>::estimate_error(Vector<float> &error_indicators) const
- {
- const PrimalSolver<dim> &primal_solver = *this;
- const DualSolver<dim> & dual_solver = *this;
-
- AffineConstraints<double> dual_hanging_node_constraints;
- DoFTools::make_hanging_node_constraints(dual_solver.dof_handler,
- dual_hanging_node_constraints);
- dual_hanging_node_constraints.close();
- Vector<double> 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<double> primal_hanging_node_constraints;
- DoFTools::make_hanging_node_constraints(primal_solver.dof_handler,
- primal_hanging_node_constraints);
- primal_hanging_node_constraints.close();
- Vector<double> 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<dim>::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<std::thread> threads;
- for (unsigned int i = 0; i < n_threads; ++i)
- threads.emplace_back(&WeightedResidual<dim>::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<dim>::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 <int dim>
- void
- WeightedResidual<dim>::estimate_some(const Vector<double> &primal_solution,
- const Vector<double> &dual_weights,
- const unsigned int n_threads,
- const unsigned int this_thread,
- Vector<float> & error_indicators,
- FaceIntegrals &face_integrals) const
- {
- const PrimalSolver<dim> &primal_solver = *this;
- const DualSolver<dim> & 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<dim>::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 <int dim>
- void
- WeightedResidual<dim>::integrate_over_cell(
- const active_cell_iterator &cell,
- const unsigned int cell_index,
- const Vector<double> & primal_solution,
- const Vector<double> & dual_weights,
- CellData & cell_data,
- Vector<float> & 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 <int dim>
- void
- WeightedResidual<dim>::integrate_over_regular_face(
- const active_cell_iterator &cell,
- const unsigned int face_no,
- const Vector<double> & primal_solution,
- const Vector<double> & 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 <int dim>
- void
- WeightedResidual<dim>::integrate_over_irregular_face(
- const active_cell_iterator &cell,
- const unsigned int face_no,
- const Vector<double> & primal_solution,
- const Vector<double> & 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<dim>::face_iterator face = cell->face(face_no);
- const typename DoFHandler<dim>::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 <int dim>
-struct Framework
-{
-public:
- using Evaluator = Evaluation::EvaluationBase<dim>;
- using EvaluatorList = std::list<Evaluator *>;
-
-
- struct ProblemDescription
- {
- unsigned int primal_fe_degree;
- unsigned int dual_fe_degree;
-
- SmartPointer<const Data::SetUpBase<dim>> data;
-
- enum RefinementCriterion
- {
- dual_weighted_error_estimator,
- global_refinement,
- kelly_indicator,
- weighted_kelly_indicator
- };
-
- RefinementCriterion refinement_criterion;
-
- SmartPointer<const DualFunctional::DualFunctionalBase<dim>> dual_functional;
-
- EvaluatorList evaluator_list;
-
- SmartPointer<const Function<dim>> kelly_weight;
-
- unsigned int max_degrees_of_freedom;
-
- ProblemDescription();
- };
-
- static void
- run(const ProblemDescription &descriptor);
-};
-
-
-template <int dim>
-Framework<dim>::ProblemDescription::ProblemDescription()
- : primal_fe_degree(1)
- , dual_fe_degree(2)
- , refinement_criterion(dual_weighted_error_estimator)
- , max_degrees_of_freedom(5000)
-{}
-
-
-
-template <int dim>
-void
-Framework<dim>::run(const ProblemDescription &descriptor)
-{
- Triangulation<dim> triangulation(Triangulation<dim>::smoothing_on_refinement);
- descriptor.data->create_coarse_grid(triangulation);
-
- const hp::FECollection<dim> primal_fe(FE_Q<dim>(descriptor.primal_fe_degree));
- const hp::FECollection<dim> dual_fe(FE_Q<dim>(descriptor.dual_fe_degree));
- const hp::QCollection<dim> quadrature(
- QGauss<dim>(descriptor.dual_fe_degree + 1));
- const hp::QCollection<dim - 1> face_quadrature(
- QGauss<dim - 1>(descriptor.dual_fe_degree + 1));
-
- LaplaceSolver::Base<dim> *solver = nullptr;
- switch (descriptor.refinement_criterion)
- {
- case ProblemDescription::dual_weighted_error_estimator:
- {
- solver = new LaplaceSolver::WeightedResidual<dim>(
- 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<dim>(
- 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<dim>(
- 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<dim>(
- 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<dim>::ProblemDescription descriptor;
-
- descriptor.refinement_criterion =
- Framework<dim>::ProblemDescription::dual_weighted_error_estimator;
-
- descriptor.primal_fe_degree = 1;
- descriptor.dual_fe_degree = 2;
-
- descriptor.data = new Data::SetUp<Data::Exercise_2_3<dim>, dim>();
-
- const Point<dim> evaluation_point(0.75, 0.75);
- descriptor.dual_functional =
- new DualFunctional::PointValueEvaluation<dim>(evaluation_point);
-
- Evaluation::PointValueEvaluation<dim> postprocessor1(evaluation_point);
- Evaluation::GridOutput<dim> postprocessor2("grid");
-
- descriptor.evaluator_list.push_back(&postprocessor1);
- descriptor.evaluator_list.push_back(&postprocessor2);
-
- descriptor.max_degrees_of_freedom = 20000;
-
- Framework<dim>::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;
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_q.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_refinement.h>
-#include <deal.II/grid/manifold_lib.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/hp/fe_values.h>
-#include <deal.II/hp/q_collection.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/full_matrix.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/solution_transfer.h>
-#include <deal.II/numerics/vector_tools.h>
-
-#include <iostream>
-#include <sstream>
-
-
-template <int dim>
-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<double>(-1., 1.);
- return std::max(base + .1 * random, 0.);
-}
-
-
-
-template <int dim>
-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<double> &update) const;
- void
- do_step();
- void
- output_results() const;
- void
- refine_grid();
-
- static double
- energy(const DoFHandler<dim> &dof_handler, const Vector<double> &function);
-
-
-
- const unsigned int run_number;
-
- Triangulation<dim> triangulation;
-
- hp::FECollection<dim> fe;
- DoFHandler<dim> dof_handler;
-
- AffineConstraints<double> hanging_node_constraints;
-
- SparsityPattern sparsity_pattern;
- SparseMatrix<double> matrix;
-
- Vector<double> present_solution;
- Vector<double> residual;
-};
-
-
-
-template <int dim>
-MinimizationProblem<dim>::MinimizationProblem(const unsigned int run_number)
- : run_number(run_number)
- , fe(FE_Q<dim>(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 <int dim>
-void
-MinimizationProblem<dim>::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 <int dim>
-void
-MinimizationProblem<dim>::assemble_step()
-{
- matrix.reinit(sparsity_pattern);
- residual.reinit(dof_handler.n_dofs());
-
- hp::QCollection<dim> quadrature_formula(QGauss<dim>(4));
- hp::FEValues<dim> 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<double> cell_matrix(dofs_per_cell, dofs_per_cell);
- Vector<double> cell_rhs(dofs_per_cell);
-
- std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
-
- std::vector<double> local_solution_values(n_q_points);
- std::vector<Tensor<1, dim>> local_solution_grads(n_q_points);
-
- typename DoFHandler<dim>::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<types::global_dof_index, double> boundary_values;
- VectorTools::interpolate_boundary_values(dof_handler,
- 0,
- Functions::ZeroFunction<dim>(),
- boundary_values);
- if (dim == 1)
- VectorTools::interpolate_boundary_values(dof_handler,
- 1,
- Functions::ZeroFunction<dim>(),
- boundary_values);
- Vector<double> dummy(residual.size());
- MatrixTools::apply_boundary_values(boundary_values, matrix, dummy, residual);
-}
-
-
-template <int dim>
-double
-MinimizationProblem<dim>::line_search(const Vector<double> &update) const
-{
- double alpha = 0.;
- Vector<double> 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 <int dim>
-void
-MinimizationProblem<dim>::do_step()
-{
- assemble_step();
-
- Vector<double> 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 <int dim>
-void
-MinimizationProblem<dim>::output_results() const
-{
- DataOut<dim> 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<float> error_indicators(triangulation.n_active_cells());
-
- QTrapezoid<dim> q;
- hp::QCollection<dim> quadrature(q);
- hp::FEValues<dim> fe_values(fe,
- quadrature,
- update_values | update_gradients |
- update_hessians | update_quadrature_points |
- update_JxW_values);
-
- hp::FEValues<dim> neighbor_fe_values(fe, quadrature, update_gradients);
-
- std::vector<double> local_values(quadrature[0].size());
- std::vector<Tensor<1, dim>> local_gradients(quadrature[0].size());
- std::vector<Tensor<2, dim>> local_2nd_derivs(quadrature[0].size());
-
- DoFHandler<dim>::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<dim>::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<dim>::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<dim> solution_transfer(dof_handler);
- solution_transfer.prepare_for_coarsening_and_refinement(present_solution);
-
- triangulation.execute_coarsening_and_refinement();
- dof_handler.distribute_dofs(fe);
-
- Vector<double> 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 <int dim>
-double
-MinimizationProblem<dim>::energy(const DoFHandler<dim> &dof_handler,
- const Vector<double> & function)
-{
- hp::QCollection<dim> quadrature_formula(QGauss<dim>(4));
- hp::FEValues<dim> 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<double> local_solution_values(n_q_points);
- std::vector<Tensor<1, dim>> local_solution_grads(n_q_points);
-
- double energy = 0.;
-
- typename DoFHandler<dim>::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 <int dim>
-void
-MinimizationProblem<dim>::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;
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FE_Q<dim>(i));
- test_with_hanging_nodes_random_aniso(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FESystem<dim>(FE_Q<dim>(i), 1, FE_DGQ<dim>(i + 1), 1));
-
- test_with_hanging_nodes_random_aniso(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- for (unsigned int j = 0; j < 4; ++j)
- fe.push_back(FESystem<dim>(FE_Q<dim>(i), 1, FE_DGQ<dim>(j), 1));
-
- test_with_hanging_nodes_random_aniso(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include "../hp/hp_constraints_common.h"
-
-
-template <int dim>
-void
-test()
-{
- if (dim == 1)
- return;
-
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FE_RaviartThomas<dim>(i));
- test_no_hanging_nodes(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include "../hp/hp_constraints_common.h"
-
-
-template <int dim>
-void
-test()
-{
- if (dim == 1)
- return;
-
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FE_RaviartThomas<dim>(i));
- test_with_hanging_nodes(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include "../hp/hp_constraints_common.h"
-
-
-template <int dim>
-void
-test()
-{
- if (dim == 1)
- return;
-
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FE_RaviartThomas<dim>(i));
- test_with_wrong_face_orientation(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include "../hp/hp_constraints_common.h"
-
-
-template <int dim>
-void
-test()
-{
- if (dim == 1)
- return;
-
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FE_RaviartThomas<dim>(i));
- test_with_2d_deformed_mesh(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include "../hp/hp_constraints_common.h"
-
-
-template <int dim>
-void
-test()
-{
- if (dim == 1)
- return;
-
- hp::FECollection<dim> fe;
- for (unsigned int i = 1; i < 4; ++i)
- fe.push_back(FE_RaviartThomas<dim>(i));
- test_with_2d_deformed_refined_mesh(fe);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include "../hp/hp_constraints_common.h"
-
-
-template <int dim>
-void
-test()
-{
- if (dim == 1)
- return;
-
- hp::FECollection<dim> fe;
- std::vector<unsigned int> degrees;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- {
- fe.push_back(FE_RaviartThomas<dim>(i));
- degrees.push_back(i);
- }
-
- test_interpolation(fe, degrees);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int i = 1; i < 4; ++i)
- for (unsigned int j = i; j < 4; ++j)
- do_check(FE_DGP<dim>(i), FE_DGP<dim>(j));
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int i = 1; i < 4; ++i)
- for (unsigned int j = i; j < 4; ++j)
- do_check(FE_DGPNonparametric<dim>(i), FE_DGPNonparametric<dim>(j));
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-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<dim>(i), FE_Nedelec<dim>(j));
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int i = 1; i < 4; ++i)
- for (unsigned int j = i; j < 4; ++j)
- do_check(FE_Q_Hierarchical<dim>(i), FE_Q_Hierarchical<dim>(j));
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-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<dim>(i), FE_RaviartThomas<dim>(j));
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- if (dim > 1)
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_no_hanging_nodes(FE_ABF<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- if (dim > 1)
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_hanging_nodes(FE_ABF<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- if (dim > 1)
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_wrong_face_orientation(FE_ABF<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- if (dim > 1)
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_2d_deformed_mesh(FE_ABF<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- if (dim > 1)
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_2d_deformed_refined_mesh(FE_ABF<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_no_hanging_nodes(FE_DGPNonparametric<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_hanging_nodes(FE_DGPNonparametric<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_wrong_face_orientation(FE_DGPNonparametric<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_2d_deformed_mesh(FE_DGPNonparametric<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int p = 0; p < 6 - dim; ++p)
- test_with_2d_deformed_refined_mesh(FE_DGPNonparametric<dim>(p), p);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-void
-test()
-{
- for (unsigned int p = 1; p < 6 - dim; ++p)
- test_with_wrong_face_orientation(FE_Q_Hierarchical<dim>(p), p);
-}
+++ /dev/null
-
-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
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <int dim>
-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<dim>(p), p + 1, 1);
-}
+++ /dev/null
-#!/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
-# <gnuplot-info@lists.sourceforge.net>
-# Send bugs, suggestions and mods to
-# <gnuplot-bugs@lists.sourceforge.net>
-#
-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
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/fe/fe_raviart_thomas.h>
-
-#include <string>
-
-#include "../tests.h"
-
-#define PRECISION 2
-
-
-
-template <int dim>
-void
-test(const unsigned int degree)
-{
- deallog << "FE_RaviartThomas<" << dim << "> (" << degree << ')' << std::endl;
-
- FE_RaviartThomas<dim> fe_rt(degree);
-
- for (unsigned int c = 0; c < GeometryInfo<dim>::max_children_per_cell; ++c)
- {
- const FullMatrix<double> &m = fe_rt.get_prolongation_matrix(
- c, RefinementCase<dim>::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;
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_accessor.h>
-
-#include <deal.II/fe/fe_nedelec.h>
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_values.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_tools.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/lac/vector.h>
-
-#include <string>
-#include <vector>
-
-#include "../tests.h"
-
-#define PRECISION 4
-
-
-template <int dim>
-Point<dim>
-transform(const Point<dim> p)
-{
- switch (dim)
- {
- case 1:
- return p;
- case 2:
- return Point<dim>(p(0) * (1 + p(1)), p(1) * (1 + p(0)));
- case 3:
- return Point<dim>(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<dim>();
- };
-}
-
-
-template <int dim>
-void
-check_element(const Triangulation<dim> &tr, const FiniteElement<dim> &fe)
-{
- DoFHandler<dim> dof_handler(tr);
- dof_handler.distribute_dofs(fe);
-
- // create a mostly arbitrary
- // function plus a trend on this
- // grid
- Vector<double> 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<double> x(tmp.size());
- Vector<double> v(fe.dofs_per_cell);
- for (typename DoFHandler<dim>::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<dim>::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<double> x2(x.size());
- for (typename DoFHandler<dim>::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 <int dim>
-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<dim> tr;
- GridGenerator::hyper_cube(tr, 0., 1.);
- Point<dim> (*p)(Point<dim>) = &transform<dim>;
- 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<dim> *fe_list[] = {new FE_RaviartThomas<dim>(0),
- new FE_RaviartThomas<dim>(1),
- new FE_RaviartThomas<dim>(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;
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/vector_tools.h>
-
-#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 <int dim>
-void
-check_this(const DoFHandler<dim> &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<dim> 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<double> 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<dim> quadrature(6);
- Vector<double> 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<double> 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<dim> 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());
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/numbers.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe.h>
-#include <deal.II/fe/fe_dgq.h>
-#include <deal.II/fe/fe_q.h>
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-#include <deal.II/fe/fe_values.h>
-#include <deal.II/fe/mapping_q.h>
-#include <deal.II/fe/mapping_q1_eulerian.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_out.h>
-#include <deal.II/grid/grid_tools.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/sparsity_pattern.h>
-#include <deal.II/lac/vector.h>
-#include <deal.II/lac/vector_memory.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/vector_tools.h>
-
-
-
-template <int dim>
-class TestMap1 : public Function<dim>
-{
-public:
- TestMap1(const unsigned int n_components)
- : Function<dim>(n_components)
- {}
-
- virtual ~TestMap1()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-
-template <int dim>
-double
-TestMap1<dim>::value(const Point<dim> & /*p*/,
- const unsigned int /*component*/) const
-{
- return (1);
-}
-
-
-template <int dim>
-void
-TestMap1<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef1 : public Function<dim>
-{
-private:
- const double phi;
-
-public:
- TestDef1(const unsigned int n_components, const double ph)
- : Function<dim>(n_components)
- , phi(ph)
- {}
-
- virtual ~TestDef1()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-
-template <int dim>
-double
-TestDef1<dim>::value(const Point<dim> &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 <int dim>
-void
-TestDef1<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef2 : public Function<dim>
-{
-private:
- const double scale;
-
-public:
- TestDef2(const unsigned int n_components, const double sc)
- : Function<dim>(n_components)
- , scale(sc)
- {}
-
- virtual ~TestDef2()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestDef2<dim>::value(const Point<dim> &p, const unsigned int component) const
-{
- double x = p(0), y = p(1);
-
- if (component == 0)
- return scale * x;
- else
- return scale * y;
-}
-
-
-template <int dim>
-void
-TestDef2<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef3 : public Function<dim>
-{
-private:
- const double scale;
-
-public:
- TestDef3(const unsigned int n_components, const double sc)
- : Function<dim>(n_components)
- , scale(sc)
- {}
-
- virtual ~TestDef3()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestDef3<dim>::value(const Point<dim> &p, const unsigned int component) const
-{
- double y = p(1);
-
- if (component == 0)
- return scale * y;
- else
- return 0;
-}
-
-
-template <int dim>
-void
-TestDef3<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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<double> &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<Vector<double>> this_value(n_q_points,
- Vector<double>(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<double> 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<double> 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<double> 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);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/numbers.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe.h>
-#include <deal.II/fe/fe_dgq.h>
-#include <deal.II/fe/fe_q.h>
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-#include <deal.II/fe/fe_values.h>
-#include <deal.II/fe/mapping_q.h>
-#include <deal.II/fe/mapping_q1_eulerian.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_out.h>
-#include <deal.II/grid/grid_tools.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/sparsity_pattern.h>
-#include <deal.II/lac/vector.h>
-#include <deal.II/lac/vector_memory.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/vector_tools.h>
-
-
-
-template <int dim>
-class TestMap1 : public Function<dim>
-{
-public:
- TestMap1(const unsigned int n_components)
- : Function<dim>(n_components)
- {}
-
- virtual ~TestMap1()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-
-template <int dim>
-double
-TestMap1<dim>::value(const Point<dim> &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 <int dim>
-void
-TestMap1<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef1 : public Function<dim>
-{
-private:
- const double phi;
-
-public:
- TestDef1(const unsigned int n_components, const double ph)
- : Function<dim>(n_components)
- , phi(ph)
- {}
-
- virtual ~TestDef1()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-
-template <int dim>
-double
-TestDef1<dim>::value(const Point<dim> &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 <int dim>
-void
-TestDef1<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef2 : public Function<dim>
-{
-private:
- const double scale;
-
-public:
- TestDef2(const unsigned int n_components, const double sc)
- : Function<dim>(n_components)
- , scale(sc)
- {}
-
- virtual ~TestDef2()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestDef2<dim>::value(const Point<dim> &p, const unsigned int component) const
-{
- double x = p(0), y = p(1);
-
- if (component == 0)
- return scale * x;
- else
- return scale * y;
-}
-
-
-template <int dim>
-void
-TestDef2<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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 <int dim>
-class TestDef3 : public Function<dim>
-{
-private:
- const double scale;
-
-public:
- TestDef3(const unsigned int n_components, const double sc)
- : Function<dim>(n_components)
- , scale(sc)
- {}
-
- virtual ~TestDef3()
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component = 0) const;
-
- void
- vector_value(const Point<dim> &p, Vector<double> &return_value) const;
-};
-
-
-template <int dim>
-double
-TestDef3<dim>::value(const Point<dim> &p, const unsigned int component) const
-{
- double y = p(1);
-
- if (component == 0)
- return scale * y;
- else
- return 0;
-}
-
-
-template <int dim>
-void
-TestDef3<dim>::vector_value(const Point<dim> &p,
- Vector<double> & 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<double> &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<Vector<double>> this_value(n_q_points,
- Vector<double>(n_components));
- fe_values.get_function_values(solution, this_value);
-
- std::vector<std::vector<Tensor<1, 2>>> grads_here(
- n_q_points, std::vector<Tensor<1, 2>>(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<double> 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<double> 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<double> 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);
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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<unsigned int,unsigned
-// int> &, const bool) for the largest eigenvalues with eigenvectors
-
-#include <deal.II/base/conditional_ostream.h>
-#include <deal.II/base/logstream.h>
-#include <deal.II/base/multithread_info.h>
-#include <deal.II/base/process_grid.h>
-#include <deal.II/base/timer.h>
-#include <deal.II/base/utilities.h>
-
-#include <deal.II/lac/lapack_full_matrix.h>
-#include <deal.II/lac/lapack_templates.h>
-#include <deal.II/lac/scalapack.h>
-#include <deal.II/lac/vector.h>
-
-#include <algorithm>
-#include <fstream>
-#include <iostream>
-#include <memory>
-
-
-template <typename NumberType>
-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<Utilities::MPI::ProcessGrid> grid =
- std::make_shared<Utilities::MPI::ProcessGrid>(
- 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<NumberType> full_A(size);
- std::vector<NumberType> eigenvalues_Lapack(size);
- std::vector<Vector<NumberType>> s_eigenvectors_(max_n_eigenvalues,
- Vector<NumberType>(size));
- std::vector<Vector<NumberType>> p_eigenvectors_(max_n_eigenvalues,
- Vector<NumberType>(size));
- FullMatrix<NumberType> p_eigenvectors(size, size);
-
- ScaLAPACKMatrix<NumberType> 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<NumberType> 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<NumberType>(&sign);
- abstol *= 2;
- int m = 0;
- std::vector<NumberType> eigenvectors(size * size);
- int LDZ = size;
- std::vector<int> isuppz(2 * size);
- int lwork = -1; // length of vector/array work
- std::vector<NumberType> work(1);
- int liwork = -1; // length of vector/array iwork
- std::vector<int> 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<NumberType> 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<unsigned int> sizes = {{200, 400, 600}};
- const std::vector<unsigned int> blocks = {{32, 64}};
-
- const double tol = 1e-10;
-
- for (const auto &s : sizes)
- for (const auto &b : blocks)
- if (b <= s)
- test<double>(s, b, tol);
-}
+++ /dev/null
-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
-
+++ /dev/null
-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
-
+++ /dev/null
-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
-
+++ /dev/null
-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
-
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_accessor.h>
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_q.h>
-#include <deal.II/fe/fe_values.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/grid_refinement.h>
-#include <deal.II/grid/manifold_lib.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/full_matrix.h>
-#include <deal.II/lac/precondition.h>
-#include <deal.II/lac/solver_cg.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/data_out.h>
-#include <deal.II/numerics/matrix_tools.h>
-#include <deal.II/numerics/solution_transfer.h>
-#include <deal.II/numerics/vector_tools.h>
-
-#include <sstream>
-
-#include "../tests.h"
-
-
-template <int dim>
-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<double>(-1., 1.);
- return std::max(base + .1 * random, 0.);
-}
-
-
-
-template <int dim>
-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<double> &update) const;
- void
- do_step();
- void
- output_results() const;
- void
- refine_grid();
-
- static double
- energy(const DoFHandler<dim> &dof_handler, const Vector<double> &function);
-
-
- const unsigned int run_number;
-
- Triangulation<dim> triangulation;
-
- FE_Q<dim> fe;
- DoFHandler<dim> dof_handler;
-
- AffineConstraints<double> hanging_node_constraints;
-
- SparsityPattern sparsity_pattern;
- SparseMatrix<double> matrix;
-
- Vector<double> present_solution;
- Vector<double> residual;
-};
-
-
-
-template <int dim>
-MinimizationProblem<dim>::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 <int dim>
-void
-MinimizationProblem<dim>::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 <int dim>
-void
-MinimizationProblem<dim>::assemble_step()
-{
- matrix.reinit(sparsity_pattern);
- residual.reinit(dof_handler.n_dofs());
-
- QGauss<dim> quadrature_formula(4);
- FEValues<dim> 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<double> cell_matrix(dofs_per_cell, dofs_per_cell);
- Vector<double> cell_rhs(dofs_per_cell);
-
- std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
-
- std::vector<double> local_solution_values(n_q_points);
- std::vector<Tensor<1, dim>> local_solution_grads(n_q_points);
-
- typename DoFHandler<dim>::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<types::global_dof_index, double> boundary_values;
- VectorTools::interpolate_boundary_values(dof_handler,
- 0,
- Functions::ZeroFunction<dim>(),
- boundary_values);
- if (dim == 1)
- VectorTools::interpolate_boundary_values(dof_handler,
- 1,
- Functions::ZeroFunction<dim>(),
- boundary_values);
- Vector<double> dummy(residual.size());
- MatrixTools::apply_boundary_values(boundary_values, matrix, dummy, residual);
-}
-
-
-template <int dim>
-double
-MinimizationProblem<dim>::line_search(const Vector<double> &update) const
-{
- double alpha = 0.;
- Vector<double> 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 <int dim>
-void
-MinimizationProblem<dim>::do_step()
-{
- assemble_step();
-
- Vector<double> 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 <int dim>
-void
-MinimizationProblem<dim>::output_results() const
-{
- DataOut<dim> 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<float> error_indicators(triangulation.n_active_cells());
-
- QTrapezoid<dim> quadrature;
- FEValues<dim> fe_values(fe,
- quadrature,
- update_values | update_gradients | update_hessians |
- update_quadrature_points | update_JxW_values);
-
- FEValues<dim> neighbor_fe_values(fe, quadrature, update_gradients);
-
- std::vector<double> local_values(quadrature.size());
- std::vector<Tensor<1, dim>> local_gradients(quadrature.size());
- std::vector<Tensor<2, dim>> local_2nd_derivs(quadrature.size());
-
- DoFHandler<dim>::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<dim>::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<dim>::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<dim> solution_transfer(dof_handler);
- solution_transfer.prepare_for_coarsening_and_refinement(present_solution);
-
- triangulation.execute_coarsening_and_refinement();
- dof_handler.distribute_dofs(fe);
-
- Vector<double> 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 <int dim>
-double
-MinimizationProblem<dim>::energy(const DoFHandler<dim> &dof_handler,
- const Vector<double> & function)
-{
- QGauss<dim> quadrature_formula(4);
- FEValues<dim> 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<double> local_solution_values(n_q_points);
- std::vector<Tensor<1, dim>> local_solution_grads(n_q_points);
-
- double energy = 0.;
-
- typename DoFHandler<dim>::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 <int dim>
-void
-MinimizationProblem<dim>::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;
-}
+++ /dev/null
-
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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.
-#
-# <x> <solution>
-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::
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function_lib.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-#include <deal.II/fe/mapping_q.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/hp/fe_collection.h>
-#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/hp/q_collection.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/vector_tools.h>
-
-#include "../tests.h"
-
-
-
-template <int dim>
-class MySquareFunction : public Function<dim>
-{
-public:
- MySquareFunction()
- : Function<dim>(dim)
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component) const
- {
- return (component + 1) * p.square();
- }
-
- virtual void
- vector_value(const Point<dim> &p, Vector<double> &values) const
- {
- for (unsigned int d = 0; d < dim; ++d)
- values(d) = value(p, d);
- }
-};
-
-
-
-template <int dim>
-void
-check()
-{
- Triangulation<dim> tr;
- if (dim == 2)
- GridGenerator::hyper_ball(tr, Point<dim>(), 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<dim> element;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- element.push_back(FE_RaviartThomas<dim>(i - 1));
- DoFHandler<dim> dof(tr);
- for (typename DoFHandler<dim>::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<dim> mapping;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- mapping.push_back(MappingQ<dim>(i + 1));
-
- hp::QCollection<dim - 1> quadrature;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- quadrature.push_back(QGauss<dim - 1>(3 + i));
-
- Vector<double> rhs(dof.n_dofs());
- VectorTools::create_boundary_right_hand_side(dof,
- quadrature,
- MySquareFunction<dim>(),
- 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();
-}
+++ /dev/null
-// ---------------------------------------------------------------------
-//
-// 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 <deal.II/base/function_lib.h>
-#include <deal.II/base/quadrature_lib.h>
-
-#include <deal.II/dofs/dof_handler.h>
-#include <deal.II/dofs/dof_tools.h>
-
-#include <deal.II/fe/fe_raviart_thomas.h>
-#include <deal.II/fe/fe_system.h>
-#include <deal.II/fe/mapping_q.h>
-
-#include <deal.II/grid/grid_generator.h>
-#include <deal.II/grid/tria.h>
-#include <deal.II/grid/tria_accessor.h>
-#include <deal.II/grid/tria_iterator.h>
-
-#include <deal.II/hp/fe_collection.h>
-#include <deal.II/hp/mapping_collection.h>
-#include <deal.II/hp/q_collection.h>
-
-#include <deal.II/lac/affine_constraints.h>
-#include <deal.II/lac/sparse_matrix.h>
-#include <deal.II/lac/vector.h>
-
-#include <deal.II/numerics/vector_tools.h>
-
-#include "../tests.h"
-
-
-
-template <int dim>
-class MySquareFunction : public Function<dim>
-{
-public:
- MySquareFunction()
- : Function<dim>(dim)
- {}
-
- virtual double
- value(const Point<dim> &p, const unsigned int component) const
- {
- return (component + 1) * p.square();
- }
-
- virtual void
- vector_value(const Point<dim> &p, Vector<double> &values) const
- {
- for (unsigned int d = 0; d < dim; ++d)
- values(d) = value(p, d);
- }
-};
-
-
-
-template <int dim>
-void
-check()
-{
- Triangulation<dim> tr;
- if (dim == 2)
- GridGenerator::hyper_ball(tr, Point<dim>(), 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<dim> element;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- element.push_back(FE_RaviartThomas<dim>(i - 1));
- DoFHandler<dim> dof(tr);
- for (typename DoFHandler<dim>::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<dim> mapping;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- mapping.push_back(MappingQ<dim>(i + 1));
-
- hp::QCollection<dim> quadrature;
- for (unsigned int i = 1; i < 7 - dim; ++i)
- quadrature.push_back(QGauss<dim>(3 + i));
-
- Vector<double> rhs(dof.n_dofs());
- VectorTools::create_right_hand_side(dof,
- quadrature,
- MySquareFunction<dim>(),
- 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();
-}