]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Avoid loop increment operations with side effects. 7110/head
authorWolfgang Bangerth <bangerth@colostate.edu>
Thu, 23 Aug 2018 21:06:09 +0000 (15:06 -0600)
committerWolfgang Bangerth <bangerth@colostate.edu>
Thu, 23 Aug 2018 21:06:09 +0000 (15:06 -0600)
Just because it can be done does not mean that it *should* be done.

examples/step-10/step-10.cc
examples/step-11/step-11.cc

index 8ddacbf912b230e94cbc14137dba5b48e649d765..8b6215f52bc778867a2a8364d1f63f75af068024 100644 (file)
@@ -83,21 +83,15 @@ namespace Step10
     Triangulation<dim> triangulation;
     GridGenerator::hyper_ball(triangulation);
 
-    // Next generate output for this grid and for a once refined grid. Note
-    // that we have hidden the mesh refinement in the loop header, which might
-    // be uncommon but nevertheless works. Also it is strangely consistent
-    // with incrementing the loop index denoting the refinement level.
-    for (unsigned int refinement = 0; refinement < 2;
-         ++refinement, triangulation.refine_global(1))
+    // Then alternate between generating output on the current mesh
+    // for $Q_1$, $Q_2$, and $Q_3$ mappings, and (at the end of the
+    // loop body) refining the mesh once globally.
+    for (unsigned int refinement = 0; refinement < 2; ++refinement)
       {
         std::cout << "Refinement level: " << refinement << std::endl;
 
-        // Then have a string which denotes the base part of the names of the
-        // files into which we write the output (ending with the refinement
-        // level).
         std::string filename_base = "ball_" + Utilities::to_string(refinement);
 
-        // Then output the present grid for $Q_1$, $Q_2$, and $Q_3$ mappings:
         for (unsigned int degree = 1; degree < 4; ++degree)
           {
             std::cout << "Degree = " << degree << std::endl;
@@ -118,7 +112,7 @@ namespace Step10
             // explicitly.
 
 
-            // In degree to actually write out the present grid with this
+            // In order to actually write out the present grid with this
             // mapping, we set up an object which we will use for output. We
             // will generate Gnuplot output, which consists of a set of lines
             // describing the mapped triangulation. By default, only one line
@@ -149,6 +143,9 @@ namespace Step10
             grid_out.write_gnuplot(triangulation, gnuplot_file, &mapping);
           }
         std::cout << std::endl;
+
+        // At the end of the loop, refine the mesh globally.
+        triangulation.refine_global();
       }
   }
 
index 61550df2d41b359352c7b47f0f07fc0b22cfd2a9..775f54fd5f09c69974eff29c2853cf5c10d32d96 100644 (file)
@@ -415,12 +415,13 @@ namespace Step11
   {
     GridGenerator::hyper_ball(triangulation);
 
-    for (unsigned int cycle = 0; cycle < 6;
-         ++cycle, triangulation.refine_global(1))
+    for (unsigned int cycle = 0; cycle < 6; ++cycle)
       {
         setup_system();
         assemble_and_solve();
-      };
+
+        triangulation.refine_global();
+      }
 
     // After all the data is generated, write a table of results to the
     // screen:

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.