]> https://gitweb.dealii.org/ - dealii.git/commitdiff
fix prm formatting, expand prm documentation, doc changes, hook in step-63
authorTimo Heister <timo.heister@gmail.com>
Sun, 12 May 2019 16:57:07 +0000 (10:57 -0600)
committerMartin Kronbichler <kronbichler@lnm.mw.tum.de>
Wed, 15 May 2019 12:09:50 +0000 (14:09 +0200)
doc/doxygen/tutorial/tutorial.h.in
examples/step-63/block_jacobi.prm
examples/step-63/block_sor.prm
examples/step-63/doc/intro.dox
examples/step-63/doc/kind
examples/step-63/doc/results.dox
examples/step-63/jacobi.prm
examples/step-63/sor.prm
examples/step-63/step-63.cc

index c63f011c2d3bc0829e93a8e2567041463c46e797..9193597220b8b4aa831ed5abdccd8ef1a46308b6 100644 (file)
  *       boundary conditions. Parallelization via MUMPS and MPI.
  *       </td></tr>
  *
+ *   <tr valign="top">
+ *       <td>step-63</td>
+ *       <td>Block smoothers for geometric multigrid. A scalar convection
+ *       diffusion equation is solved with different additive or
+ *       multiplicative multigrid smoothers.
+ *       </td></tr>
+ *
  * </table>
  *
  * <a name="topic"></a>
  *       step-42,
  *       step-43,
  *       step-56,
- *       step-59
+ *       step-59,
+ *       step-63
  *     </td>
  *   </tr>
  *
index 941a0df9ed020bad19249e8105568b39672b6ff6..bc71ffc7559eec76c0659406b8cdeebe4adf20ba 100644 (file)
@@ -1,21 +1,20 @@
-#Epsilon
-set Epsilon = 0.005
+# Diffusion parameter
+set Epsilon                   = 0.005
 
 # Finite Element degree
-set Fe degree = 1 
+set Fe degree                 = 1
 
-# Smoother Type: SOR|Jacobi|block SOR|block Jacobi
-set Smoother type = block Jacobi
+# Select smoother: SOR|Jacobi|block SOR|block Jacobi
+set Smoother type             = block Jacobi
 
-# Number of smoothing steps
-set Smoothing steps = 3
+# Select DoF renumbering: none|downstream|upstream|random
+set DoF renumbering           = downstream
 
-# DoF renumbering: no|downstream|upstream|random
-set DoF renumbering = downstream
+# Number of smoothing steps
+set Smoothing steps           = 3
 
-# With streamline diffusion: true|false
+# Enable streamline diffusion stabilization: true|false
 set With streamline diffusion = true
 
-# Output: true|false
-set Output = false
-
+# Generate graphical output: true|false
+set Output                    = true
index 3b20e403a296373b9b98f0137ba223c3a7a6d1ed..6b03124400e3dbc1b093f34ebad5433e4c213c53 100644 (file)
@@ -1,20 +1,20 @@
-#Epsilon
-set Epsilon = 0.005
+# Diffusion parameter
+set Epsilon                   = 0.005
 
 # Finite Element degree
-set Fe degree = 1 
+set Fe degree                 = 1
 
-# Smoother Type: SOR|Jacobi|block SOR|block Jacobi
-set Smoother type = block SOR
+# Select smoother: SOR|Jacobi|block SOR|block Jacobi
+set Smoother type             = block SOR
 
-# Number of smoothing steps
-set Smoothing steps = 1 
+# Select DoF renumbering: none|downstream|upstream|random
+set DoF renumbering           = downstream
 
-# DoF renumbering: no|downstream|upstream|random
-set DoF renumbering = downstream 
+# Number of smoothing steps
+set Smoothing steps           = 1
 
-# With streamline diffusion: true|false
+# Enable streamline diffusion stabilization: true|false
 set With streamline diffusion = true
 
-# Output: true|false
-set Output = false 
+# Generate graphical output: true|false
+set Output                    = true
index 4b90b10a306e0480c196aed6b4ca00150be45d99..1f2e11e4b824b469e5590b644a3fd2372dba6958 100644 (file)
@@ -1,6 +1,13 @@
 <br>
 
-<i>This program was contributed by Thomas Clevenger and Timo Heister.</i>
+<i>This program was contributed by Thomas C. Clevenger and Timo Heister.
+
+Timo Heister was partially supported by NSF Award DMS-1522191, DMS-1901529,
+OAC-1835452, by the Computational Infrastructure in Geodynamics initiative
+(CIG), through the NSF under Award EAR-0949446 and EAR-1550901 and The
+University of California - Davis, and by Technical Data Analysis,
+Inc. through US Navy STTR N16A-T003.
+</i>
 
 <a name="Intro"></a>
 <h1>Introduction</h1>
index 387b9f817cc16ab76d473408f7d1e22e1e8f6cd8..c1d9154931a75b6d96f1ece6725575e19c39d429 100644 (file)
@@ -1,2 +1 @@
-unfinished
-
+techniques
index d2fe3c9640a9b9e02e92621d69bca02a50ea5c9f..cd989ae5ad59b50f996f889646d88a9e46dfd4a5 100644 (file)
@@ -10,13 +10,14 @@ Each of the following tables gives the GMRES iteration counts to reduce the init
 
 Staring with the additive smoothers, we see that renumbering the DoFs/cells has no effect on convergence speed. This is because these smoothers compute operations on each DoF (point-smoother) or cell (block-smoother) independently and add up the results. Since we can define these smoothers as an application of a sum of matrices, and matrix addition is communicative, the order at which we sum the different components will not affect the end result.
 
-<table align="center" border="1">
+<table align="center" class="doxtable">
 <tr>
   <th></th>
   <th></th>
   <th colspan="1">$Q_1$</th>
   <th colspan="7">Smoother (smoothing steps)</th>
 </tr>
+
 <tr>
   <th></th>
   <th></th>
@@ -25,7 +26,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <th></th>
   <th colspan="3">Block Jacobi (3)</th>
 </tr>
-
 <tr>
   <th></th>
   <th></th>
@@ -34,7 +34,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <th></th>
   <th colspan="3">Renumbering Strategy</th>
 </tr>
-
 <tr>
   <th>Cells</th>
   <th></th>
@@ -47,7 +46,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <th>Random</th>
   <th>Upstream</th>
 </tr>
-
 <tr>
   <th>32</th>
   <th></th>
@@ -60,7 +58,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>3</th>
   <td>3</th> 
 </tr>
-
 <tr>
   <th>128</th>
   <th></th>
@@ -73,7 +70,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>6</th>
   <td>6</th> 
 </tr>
-
 <tr>
   <th>512</th>
   <th></th>
@@ -86,7 +82,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>9</th>
   <td>9</th>  
 </tr>
-
 <tr>
   <th>2048</th>
   <th></th>
@@ -99,7 +94,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>13</th>
   <td>13</th> 
 </tr>
-
 <tr>
   <th>8192</th>
   <th></th>
@@ -112,7 +106,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>15</th>
   <td>15</th> 
 </tr>
-
 <tr>
   <th>32768</th>
   <th></th>
@@ -125,7 +118,6 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>16</th>
   <td>16</th> 
 </tr>
-
 <tr>
   <th>131072</th>
   <th></th>
@@ -138,14 +130,13 @@ Staring with the additive smoothers, we see that renumbering the DoFs/cells has
   <td>16</th>
   <td>16</th> 
 </tr>
-
 </table>
 
 On the other hand, for multiplicative smoothers, we can speed up convergence by renumbering the DoFs/cells in the advection direction, and similarly, we can slow down convergence if we do the renumbering in the opposite direction. This is because the multiplicative smoothers transfer information from DoF to DoF, and the solutions at any one DoF of an advection-dominate problem is highly dependent on the solution at DoFs upstream of the advection direction. 
 
 As we increase $\varepsilon$, however, the problem becomes more diffusion-dominated and the effectiveness of DoF/cell renumbering drops. On the other hand, in the extreme case of $\varepsilon=0$ (advection-only), we have a 1st-order PDE and multiplicative methods become effective solvers (Note: special care must be taken for the boundary conditions in this case).
 
-<table align="center" border="1">
+<table align="center" class="doxtable">
 <tr>
   <th></th>
   <th></th>
@@ -160,7 +151,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <th></th>
   <th colspan="3">Block SOR (1)</th>
 </tr>
-
 <tr>
   <th></th>
   <th></th>
@@ -169,7 +159,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <th></th>
   <th colspan="3">Renumbering Strategy</th>
 </tr>
-
 <tr>
   <th>Cells</th>
   <th></th>
@@ -182,7 +171,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <th>Random</th>
   <th>Upstream</th>
 </tr>
-
 <tr>
   <th>32</th>
   <th></th>
@@ -195,7 +183,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>2</th>
   <td>3</th> 
 </tr>
-
 <tr>
   <th>128</th>
   <th></th>
@@ -208,7 +195,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>5</th>
   <td>7</th> 
 </tr>
-
 <tr>
   <th>512</th>
   <th></th>
@@ -221,7 +207,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>7</th>
   <td>12</th>  
 </tr>
-
 <tr>
   <th>2048</th>
   <th></th>
@@ -234,7 +219,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>10</th>
   <td>17</th> 
 </tr>
-
 <tr>
   <th>8192</th>
   <th></th>
@@ -247,7 +231,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>11</th>
   <td>20</th> 
 </tr>
-
 <tr>
   <th>32768</th>
   <th></th>
@@ -260,7 +243,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>12</th>
   <td>21</th> 
 </tr>
-
 <tr>
   <th>131072</th>
   <th></th>
@@ -273,7 +255,6 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
   <td>12</th>
   <td>21</th> 
 </tr>
-
 </table>
 
 
@@ -281,7 +262,7 @@ As we increase $\varepsilon$, however, the problem becomes more diffusion-domina
 
 We will limit the results to runs using the downstream renumbering. Here is a cross comparison of all four smoothers for both $Q_1$ and $Q_3$ elements:
 
-<table align="center" border="1">
+<table align="center" class="doxtable">
 <tr>
   <th></th>
   <td></th>
@@ -291,7 +272,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <th colspan="1">$Q_3$</th>
   <th colspan="4">Smoother (smoothing steps)</th>
 </tr>
-
 <tr>
   <th colspan="1">Cells</th>
   <td></th>
@@ -307,7 +287,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <th colspan="1">SOR (3)</th>
   <th colspan="1">Block SOR (1)</th>
 </tr>
-
 <tr>
   <th>32</th>
   <td></th>
@@ -323,7 +302,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>15</th>
   <td>6</th>
 </tr>
-
 <tr>
   <th>128</th>
   <td></th>
@@ -339,7 +317,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>21</th>
   <td>9</th>
 </tr>
-
 <tr>
   <th>512</th>
   <td></th>
@@ -355,7 +332,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>28</th>
   <td>9</th>
 </tr>
-
 <tr>
   <th>2048</th>
   <td></th>
@@ -371,7 +347,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>32</th>
   <td>9</th>
 </tr>
-
 <tr>
   <th>8192</th>
   <td></th>
@@ -387,7 +362,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>34</th>
   <td>10</th>
 </tr>
-
 <tr>
   <th>32768</th>
   <td></th>
@@ -398,7 +372,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>10</th>
   <td></th>
 </tr>
-
 <tr>
   <th>131072</th>
   <td></th>
@@ -409,7 +382,6 @@ We will limit the results to runs using the downstream renumbering. Here is a cr
   <td>11</th>
   <td></th>
 </tr>
-
 </table>
 
 We see that for $Q_1$, both multiplicative smoothers require a smaller combination of smoothing steps and iteration counts than either additive smoother. However, when we in increase the degree to a $Q_3$ element, there is a clear advantage for the block smoothers in terms of the increase in smoothing steps and iterations required to solve. Specifically, the block SOR smoother gives constant iterations over degree, and the block Jacobi only sees about a 38% increase in iterations compared to 75% and 183% for Jacobi and SOR respectively.
@@ -418,12 +390,11 @@ We see that for $Q_1$, both multiplicative smoothers require a smaller combinati
 
 Iteration counts do not tell the full story in the optimality of a one smoother over another. Obviously we must examine the cost of an iteration. Block smoothers here are at a disadvantage as they are having to construct and invert a cell matrix for each cell. Here is a comparison of solve times for a $Q_3$ element with 74,496 DoFs:
  
-<table align="center" border="1">
+<table align="center" class="doxtable">
 <tr>
   <th colspan="1">$Q_3$</th>
   <th colspan="4">Smoother (smoothing steps)</th>
 </tr>
-
 <tr>
   <th colspan="1">DoFs</th>
   <th colspan="1">Jacobi (6)</th>
@@ -431,7 +402,6 @@ Iteration counts do not tell the full story in the optimality of a one smoother
   <th colspan="1">SOR (3)</th>
   <th colspan="1">Block SOR (1)</th>
 </tr>
-
 <tr>
   <th>74496</th>
   <td>0.689 s</th>
@@ -439,7 +409,6 @@ Iteration counts do not tell the full story in the optimality of a one smoother
   <td>1.189 s</th>
   <td>1.021 s</th>
 </tr>
-
 </table>
 
 The smoother that requires the most iterations (Jacobi) actually take the shortest time (roughly 2/3 the time of the next fastest method). This is because all that is requires to apply a Jacobi smoothing step is multiplication by a diagonal matrix which is very cheap. On the other hand, while SOR requires over 3x more iterations (each with 3x more smoothing steps) than block SOR, the times are roughly equivalent, implying that a smoothing step of block SOR is roughly 9x slower than a smoothing step of SOR. Lastly, block Jacobi is almost 6x more expensive than block SOR, which intuitively makes sense from the fact that 1 step of each method has the same cost (inverting the cell matrices and either adding or multiply them together), and block Jacobi has 3 times the smoothing step per iteration with 2 times the iterations.
@@ -459,11 +428,11 @@ Combining 1. and 2. gives a good reason for expecting that a method like block J
 
 <h3> Possible Extensions </h3>
 
-<h5> Constant iterations for $Q_5$ </h5>
+<h5> Constant iterations for Q<sub>5</sub> </h5>
 
 Change the number of smoothing steps and the smoother relaxation parameter (set in <code>Smoother::AdditionalData()</code> inside <code>create_smoother()</code>, only necessary for point smoothers) so that we maintain a constant number of iterations for a $Q_5$ element. 
 
-<h5> Effectiveness of renumbering for changing $\varepsilon$ </h5>
+<h5> Effectiveness of renumbering for changing epsilon </h5>
 
 Increase/decrease the parameter ``Epsilon" in the .prm files of the multiplicative methods and observe the relationship of downstream vs. upstream reordering.
 
index 75314cd087ac8756bf11c6cc73344eb5bc422ade..821b1320e50338102b3716ef919b100fefea7a47 100644 (file)
@@ -1,20 +1,20 @@
-#Epsilon
-set Epsilon = 0.005
+# Diffusion parameter
+set Epsilon                   = 0.005
 
 # Finite Element degree
-set Fe degree = 1
+set Fe degree                 = 1
 
-# Smoother Type: SOR|Jacobi|block SOR|block Jacobi
-set Smoother type = Jacobi
+# Select smoother: SOR|Jacobi|block SOR|block Jacobi
+set Smoother type             = Jacobi
 
-# Number of smoothing steps
-set Smoothing steps = 6
+# Select DoF renumbering: none|downstream|upstream|random
+set DoF renumbering           = downstream
 
-# DoF renumbering: no|downstream|upstream|random
-set DoF renumbering = downstream 
+# Number of smoothing steps
+set Smoothing steps           = 6
 
-# With streamline diffusion: true|false
+# Enable streamline diffusion stabilization: true|false
 set With streamline diffusion = true
 
-# Output: true|false
-set Output = false
+# Generate graphical output: true|false
+set Output                    = true
index 51d83bf3bb75b3a6ce9e76bb867f14c8299e245e..c465caea220883652bdcd67b004ec0d083c4db6b 100644 (file)
@@ -1,20 +1,20 @@
-#Epsilon
-set Epsilon = 0.005
+# Diffusion parameter
+set Epsilon                   = 0.005
 
 # Finite Element degree
-set Fe degree = 1 
+set Fe degree                 = 1
 
-# Smoother Type: SOR|Jacobi|block SOR|block Jacobi
-set Smoother type = SOR
+# Select smoother: SOR|Jacobi|block SOR|block Jacobi
+set Smoother type             = SOR
 
-# Number of smoothing steps
-set Smoothing steps = 3  
+# Select DoF renumbering: none|downstream|upstream|random
+set DoF renumbering           = downstream
 
-# DoF renumbering: no|downstream|upstream|random
-set DoF renumbering = downstream
+# Number of smoothing steps
+set Smoothing steps           = 3
 
-# With streamline diffusion: true|false
+# Enable streamline diffusion stabilization: true|false
 set With streamline diffusion = true
 
-# Output: true|false
-set Output = false
+# Generate graphical output: true|false
+set Output                    = true
index 65d2fae72e583e4834dc5493fa5acddc1f9666fb..977a1d4aab81a4ee70bdcceb1cb988887ca80c91 100644 (file)
@@ -155,28 +155,32 @@ namespace Step63
   {
     ParameterHandler prm;
 
-    prm.declare_entry("Epsilon", "0.005", Patterns::Double(0), "Epsilon");
+    prm.declare_entry("Epsilon",
+                      "0.005",
+                      Patterns::Double(0),
+                      "Diffusion parameter");
 
     prm.declare_entry("Fe degree",
                       "1",
-                      Patterns::Integer(0),
+                      Patterns::Integer(1),
                       "Finite Element degree");
     prm.declare_entry("Smoother type",
                       "block SOR",
                       Patterns::Selection("SOR|Jacobi|block SOR|block Jacobi"),
-                      "Smoother Type: SOR|Jacobi|block SOR|block Jacobi");
+                      "Select smoother: SOR|Jacobi|block SOR|block Jacobi");
     prm.declare_entry("Smoothing steps",
                       "2",
                       Patterns::Integer(1),
                       "Number of smoothing steps");
-    prm.declare_entry("DoF renumbering",
-                      "downstream",
-                      Patterns::Selection("none|downstream|upstream|random"),
-                      "DoF renumbering: none|downstream|upstream|random");
+    prm.declare_entry(
+      "DoF renumbering",
+      "downstream",
+      Patterns::Selection("none|downstream|upstream|random"),
+      "Select DoF renumbering: none|downstream|upstream|random");
     prm.declare_entry("With streamline diffusion",
                       "true",
                       Patterns::Bool(),
-                      "With streamline diffusion: true|false");
+                      "Enable streamline diffusion stabilization: true|false");
     prm.declare_entry("Output",
                       "true",
                       Patterns::Bool(),
@@ -211,7 +215,7 @@ namespace Step63
   }
 
 
-  // @sect1{Cell permutations}
+  // @sect3{Cell permutations}
   //
   // The ordering in which cells and degrees of freedom are traversed
   // will play a roll in the speed of convergence for multiplicative
@@ -870,7 +874,7 @@ namespace Step63
   // The relaxation parameter for point smoothers is chosen based on trial and
   // error, and they reflect values necessary to keep the iteration counts in
   // the GMRES solve constant (or as close as possible) as we refine the mesh.
-  // The two values given for both ``Jacobi" and ``SOR" are for degree 1 and
+  // The two values given for both "Jacobi" and "SOR" are for degree 1 and
   // degree 3 finite elements. If the user wants to change to another degree,
   // they may need to adjust these numbers. For block smoothers, this parameter
   // has a more straightforward interpretation, namely that for additive methods

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.