]> https://gitweb.dealii.org/ - dealii.git/commitdiff
step-30: minor modernizations. 8044/head
authorDavid Wells <drwells@email.unc.edu>
Wed, 8 May 2019 22:13:54 +0000 (18:13 -0400)
committerDavid Wells <drwells@email.unc.edu>
Thu, 9 May 2019 14:47:18 +0000 (10:47 -0400)
1. Inline function definitions.
2. Remove unnecessary class destructor.
3. More modernization: std::abs, std::array.
4. Reorganize the headers
5. Minor formatting and whitespace improvements
6. remove a second mention of a deleted member of GeometryInfo

examples/step-30/doc/intro.dox
examples/step-30/step-30.cc

index e38bcb05b1bd575c4b8448de1f7862d0ad4aa4cd..d2fd5587f3fbebb048150c33ac02741a60a0fe42 100644 (file)
@@ -204,12 +204,10 @@ GeometryInfo<dim>::max_children_per_cell which specifies the
 <i>maximum</i> number of children a cell can have. How many children a
 refined cell has was previously available as static information, but
 now it depends on the actual refinement state of a cell and can be
-retrieved using the function call <code>cell-@>n_children()</code>,
+retrieved using TriaAccessor::n_children(),
 a call that works equally well for both isotropic and anisotropic
 refinement. A very similar situation can be found for
-faces and their subfaces: the previously available variable
-GeometryInfo<dim>::subfaces_per_face no
-longer exists; the pertinent information can now be queried using
+faces and their subfaces: the pertinent information can be queried using
 GeometryInfo<dim>::max_children_per_face or <code>face->n_children()</code>,
 depending on the context.
 
@@ -252,7 +250,7 @@ write code that works for both isotropic and anisotropic refinement:
   i.e. has children occupying only part of the
   common face. In this case, the face
   under consideration has to be a refined one, which can determine by
-  asking <code>if(face->has_children())</code>. If this is true, we need to
+  asking <code>if (face->has_children())</code>. If this is true, we need to
   loop over
   all subfaces and get the neighbors' child behind this subface, so that we can
   reinit an FEFaceValues object with the neighbor and an FESubfaceValues object
@@ -450,7 +448,7 @@ cell. Of course, in the limit we expect that the jumps tend to zero as
 we refine the mesh and approximate the true solution better and better.
 Thus, a large jump
 across a given face indicates that the cell should be refined (at least)
-orthogonal to that face, whereas a small jump does not lead to this
+orthogonally to that face, whereas a small jump does not lead to this
 conclusion. It is possible, of course, that the exact solution is not smooth and
 that it also features a jump. In that case, however, a large jump over one face
 indicates, that this face is more or less parallel to the jump and in the
index fc4659da2f286f2b6c8b454116c74890385de550..5a4e48071e7776e09e07a892b2bf9abf6b4371dc 100644 (file)
 
 // The deal.II include files have already been covered in previous examples
 // and will thus not be further commented on.
-#include <deal.II/base/quadrature_lib.h>
 #include <deal.II/base/function.h>
-#include <deal.II/lac/vector.h>
+#include <deal.II/base/quadrature_lib.h>
+#include <deal.II/base/timer.h>
+#include <deal.II/lac/precondition_block.h>
+#include <deal.II/lac/solver_richardson.h>
 #include <deal.II/lac/sparse_matrix.h>
+#include <deal.II/lac/vector.h>
 #include <deal.II/grid/tria.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_accessor.h>
 #include <deal.II/grid/tria_iterator.h>
-#include <deal.II/fe/fe_values.h>
 #include <deal.II/dofs/dof_handler.h>
 #include <deal.II/dofs/dof_accessor.h>
 #include <deal.II/dofs/dof_tools.h>
-#include <deal.II/numerics/data_out.h>
+#include <deal.II/fe/fe_values.h>
 #include <deal.II/fe/mapping_q1.h>
 #include <deal.II/fe/fe_dgq.h>
-#include <deal.II/lac/solver_richardson.h>
-#include <deal.II/lac/precondition_block.h>
+#include <deal.II/numerics/data_out.h>
 #include <deal.II/numerics/derivative_approximation.h>
-#include <deal.II/base/timer.h>
 
 // And this again is C++:
+#include <array>
 #include <iostream>
 #include <fstream>
 
@@ -62,7 +63,14 @@ namespace Step30
   public:
     virtual void value_list(const std::vector<Point<dim>> &points,
                             std::vector<double> &          values,
-                            const unsigned int component = 0) const override;
+                            const unsigned int /*component*/ = 0) const override
+    {
+      (void)points;
+      Assert(values.size() == points.size(),
+             ExcDimensionMismatch(values.size(), points.size()));
+
+      std::fill(values.begin(), values.end(), 0.);
+    }
   };
 
 
@@ -72,7 +80,19 @@ namespace Step30
   public:
     virtual void value_list(const std::vector<Point<dim>> &points,
                             std::vector<double> &          values,
-                            const unsigned int component = 0) const override;
+                            const unsigned int /*component*/ = 0) const override
+    {
+      Assert(values.size() == points.size(),
+             ExcDimensionMismatch(values.size(), points.size()));
+
+      for (unsigned int i = 0; i < values.size(); ++i)
+        {
+          if (points[i](0) < 0.5)
+            values[i] = 1.;
+          else
+            values[i] = 0.;
+        }
+    }
   };
 
 
@@ -80,73 +100,38 @@ namespace Step30
   class Beta
   {
   public:
+    // The flow field is chosen to be a quarter circle with counterclockwise
+    // flow direction and with the origin as midpoint for the right half of the
+    // domain with positive $x$ values, whereas the flow simply goes to the left
+    // in the left part of the domain at a velocity that matches the one coming
+    // in from the right. In the circular part the magnitude of the flow
+    // velocity is proportional to the distance from the origin. This is a
+    // difference to step-12, where the magnitude was 1 everywhere. the new
+    // definition leads to a linear variation of $\beta$ along each given face
+    // of a cell. On the other hand, the solution $u(x,y)$ is exactly the same
+    // as before.
     void value_list(const std::vector<Point<dim>> &points,
-                    std::vector<Point<dim>> &      values) const;
-  };
-
-
-  template <int dim>
-  void RHS<dim>::value_list(const std::vector<Point<dim>> &points,
-                            std::vector<double> &          values,
-                            const unsigned int) const
-  {
-    (void)points;
-    Assert(values.size() == points.size(),
-           ExcDimensionMismatch(values.size(), points.size()));
-
-    std::fill(values.begin(), values.end(), 0.);
-  }
-
-
-  // The flow field is chosen to be a quarter circle with counterclockwise
-  // flow direction and with the origin as midpoint for the right half of the
-  // domain with positive $x$ values, whereas the flow simply goes to the left
-  // in the left part of the domain at a velocity that matches the one coming
-  // in from the right. In the circular part the magnitude of the flow
-  // velocity is proportional to the distance from the origin. This is a
-  // difference to step-12, where the magnitude was 1 everywhere. the new
-  // definition leads to a linear variation of $\beta$ along each given face
-  // of a cell. On the other hand, the solution $u(x,y)$ is exactly the same
-  // as before.
-  template <int dim>
-  void Beta<dim>::value_list(const std::vector<Point<dim>> &points,
-                             std::vector<Point<dim>> &      values) const
-  {
-    Assert(values.size() == points.size(),
-           ExcDimensionMismatch(values.size(), points.size()));
-
-    for (unsigned int i = 0; i < points.size(); ++i)
-      {
-        if (points[i](0) > 0)
-          {
-            values[i](0) = -points[i](1);
-            values[i](1) = points[i](0);
-          }
-        else
-          {
-            values[i]    = Point<dim>();
-            values[i](0) = -points[i](1);
-          }
-      }
-  }
-
+                    std::vector<Point<dim>> &      values) const
+    {
+      Assert(values.size() == points.size(),
+             ExcDimensionMismatch(values.size(), points.size()));
 
-  template <int dim>
-  void BoundaryValues<dim>::value_list(const std::vector<Point<dim>> &points,
-                                       std::vector<double> &          values,
-                                       const unsigned int) const
-  {
-    Assert(values.size() == points.size(),
-           ExcDimensionMismatch(values.size(), points.size()));
+      for (unsigned int i = 0; i < points.size(); ++i)
+        {
+          if (points[i](0) > 0)
+            {
+              values[i](0) = -points[i](1);
+              values[i](1) = points[i](0);
+            }
+          else
+            {
+              values[i]    = Point<dim>();
+              values[i](0) = -points[i](1);
+            }
+        }
+    }
+  };
 
-    for (unsigned int i = 0; i < values.size(); ++i)
-      {
-        if (points[i](0) < 0.5)
-          values[i] = 1.;
-        else
-          values[i] = 0.;
-      }
-  }
 
 
   // @sect3{Class: DGTransportEquation}
@@ -181,6 +166,7 @@ namespace Step30
   };
 
 
+
   // Likewise, the constructor of the class as well as the functions
   // assembling the terms corresponding to cell interiors and boundary faces
   // are unchanged from before. The function that assembles face terms between
@@ -198,6 +184,7 @@ namespace Step30
   {}
 
 
+
   template <int dim>
   void DGTransportEquation<dim>::assemble_cell_term(
     const FEValues<dim> &fe_v,
@@ -315,7 +302,6 @@ namespace Step30
   {
   public:
     DGMethod(const bool anisotropic);
-    ~DGMethod();
 
     void run();
 
@@ -380,12 +366,6 @@ namespace Step30
   {}
 
 
-  template <int dim>
-  DGMethod<dim>::~DGMethod()
-  {
-    dof_handler.clear();
-  }
-
 
   template <int dim>
   void DGMethod<dim>::setup_system()
@@ -813,7 +793,7 @@ namespace Step30
                               // accumulate these values into vectors with
                               // <code>dim</code> components.
                               jump[face_no / 2] +=
-                                std::fabs(u[x] - u_neighbor[x]) * JxW[x];
+                                std::abs(u[x] - u_neighbor[x]) * JxW[x];
                               // We also sum up the scaled weights to obtain
                               // the measure of the face.
                               area[face_no / 2] += JxW[x];
@@ -847,7 +827,7 @@ namespace Step30
                                ++x)
                             {
                               jump[face_no / 2] +=
-                                std::fabs(u[x] - u_neighbor[x]) * JxW[x];
+                                std::abs(u[x] - u_neighbor[x]) * JxW[x];
                               area[face_no / 2] += JxW[x];
                             }
                         }
@@ -892,7 +872,7 @@ namespace Step30
                                ++x)
                             {
                               jump[face_no / 2] +=
-                                std::fabs(u[x] - u_neighbor[x]) * JxW[x];
+                                std::abs(u[x] - u_neighbor[x]) * JxW[x];
                               area[face_no / 2] += JxW[x];
                             }
                         }
@@ -901,8 +881,8 @@ namespace Step30
             }
           // Now we analyze the size of the mean jumps, which we get dividing
           // the jumps by the measure of the respective faces.
-          double average_jumps[dim];
-          double sum_of_average_jumps = 0.;
+          std::array<double, dim> average_jumps;
+          double                  sum_of_average_jumps = 0.;
           for (unsigned int i = 0; i < dim; ++i)
             {
               average_jumps[i] = jump(i) / area(i);
@@ -976,6 +956,7 @@ namespace Step30
   }
 
 
+
   template <int dim>
   void DGMethod<dim>::run()
   {

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.